Name: series-workflowjlbg5 Phase: Succeeded StartedAt: 2026-09-01 23:41:57 +0000 UTC FinishedAt: 2026-09-02 03:31:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjlbg5[0] Phase: Succeeded StartedAt: 2026-09-01 23:41:57 +0000 UTC FinishedAt: 2026-09-01 23:45:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjlbg5[0].run-triage Phase: Succeeded StartedAt: 2026-09-01 23:41:57 +0000 UTC FinishedAt: 2026-09-01 23:45:24 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "88297631d4d42f6004cb39c0ba3da7d2d10a616f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MMU", "TRANSPARENT_HUGEPAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "88297631d4d42f6004cb39c0ba3da7d2d10a616f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MMU", "TRANSPARENT_HUGEPAGE" ], "series_id": "6f3ac781-9301-44ab-91f0-bc64efce9720" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "tlb_remove_table", "pte_free_defer", "zap_huge_pmd", "tlb_remove_table_sync_rcu", "tlb_remove_table_sync_one" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01NVSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RsYl9yZW1vdmVfdGFibGUmIzM0OywKICAgICYjMzQ7cHRlX2ZyZWVfZGVmZXImIzM0OywKICAgICYjMzQ7emFwX2h1Z2VfcG1kJiMzNDssCiAgICAmIzM0O3RsYl9yZW1vdmVfdGFibGVfc3luY19yY3UmIzM0OywKICAgICYjMzQ7dGxiX3JlbW92ZV90YWJsZV9zeW5jX29uZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBzdGFuZGFyZGl6ZXMgcGFnZSB0YWJsZSBmcmVlaW5nIGFjcm9zcyBhcmNoaXRlY3R1cmVzIHRvIHVzZSBSQ1UtZGVmZXJyZWQgZnJlZWluZyAodW5pZnlpbmcgTU1VIGdhdGhlciBhbmQgcmVtb3ZpbmcgQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgLyBDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFIGNvbmZpZ3MpLiBJdCBhZGFwdHMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHBhZ2UgdGFibGUgZnJlZWluZyByb3V0aW5lcyAoZS5nLiBtNjhrLCBhcmMsIG1pY3JvYmxhemUsIHNoLCBzcGFyYywgeHRlbnNhKSB0byB1c2UgdGxiX3JlbW92ZV9wdGRlc2MgLyB0bGJfcmVtb3ZlX3RhYmxlLCBhZGRzIHNwaW5sb2NrcyBmb3IgcHRhYmxlIG1hbmFnZW1lbnQgb24gbTY4ay9zcGFyYywgYW5kIHVwZGF0ZXMgZGVmZXJyZWQgZnJlZWluZyBpbiBUSFAgKHB0ZV9mcmVlX2RlZmVyKS5cblxuVGhlc2UgY2hhbmdlcyBkZWFsIHN0cmljdGx5IHdpdGggTU1VIGdhdGhlciBsaWZlY3ljbGUsIFJDVSBncmFjZSBwZXJpb2RzIGZvciBwYWdlIHRhYmxlIG1lbW9yeSwgYW5kIHN5bmNocm9uaXphdGlvbiBvZiBwYWdlIHRhYmxlIGZyZWVpbmcgdnMgbG9ja2xlc3MvUkNVIHBhZ2UgdGFibGUgd2Fsa2Vycy4gUG90ZW50aWFsIGJ1Z3MgaW4gdGhlc2UgY2hhbmdlcyB3b3VsZCBtYW5pZmVzdCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIGNvbmN1cnJlbmN5IHJhY2VzLCBvciBkZWFkbG9ja3PigJR3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgcmVhZHMvY29waWVzIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVuaWZpZXMgYW5kIGVuZm9yY2VzIFJDVS1kZWZlcnJlZCBmcmVlaW5nIGZvciBwYWdlIHRhYmxlIHBhZ2VzIGFjcm9zcyBhbGwgYXJjaGl0ZWN0dXJlcyBieSByZW1vdmluZyBjb25kaXRpb25hbCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgc3RhbmRhcmRpemluZyBvbiB0bGJfcmVtb3ZlX3RhYmxlKCkuIEl0IGFsc28gbW9kaWZpZXMgVEhQIGRlcG9zaXRlZCB0YWJsZSBoYW5kbGluZyBpbiBtbS9odWdlX21lbW9yeS5jIHRvIHVzZSBwdGVfZnJlZV9kZWZlcigpIHVuZGVyIFJDVSBhbmQgdXBkYXRlcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgcGFnZSB0YWJsZSByZW1vdmFsIHJvdXRpbmVzLiBUaGVzZSBjb3JlIE1NIGxvZ2ljIGNoYW5nZXMgYWZmZWN0IFRMQiBnYXRoZXJpbmcsIHBhZ2UgdGFibGUgdGVhcmluZyBkb3duLCBhbmQgbWVtb3J5IHJlY2xhaW0gcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6NDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyOGU4ZTIyZmIyZjkyMmE1ZDk4YWMyNzJjMDRhMzlmYjVkMGE3ZWUxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMSAyMzo0Mzo1MiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdFxuaW5kZXggYTcyOTZmMjUxNzk5Yy4uMWU2NWIxMzlmMzU1OSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3RcbkBAIC01MzcsNiAmIzQzOzUzNywxMiBAQCBXZSBlc3RhYmxpc2ggYmFzaWMgbG9ja2luZyBydWxlcyB3aGVuIGludGVyYWN0aW5nIHdpdGggcGFnZSB0YWJsZXM6XG4gKiBXaGVuIGNoYW5naW5nIGEgcGFnZSB0YWJsZSBlbnRyeSB0aGUgcGFnZSB0YWJsZSBsb2NrIGZvciB0aGF0IHBhZ2UgdGFibGVcbiAgICoqbXVzdCoqIGJlIGhlbGQsIGV4Y2VwdCBpZiB5b3UgY2FuIHNhZmVseSBhc3N1bWUgbm9ib2R5IGNhbiBhY2Nlc3MgdGhlIHBhZ2VcbiAgIHRhYmxlcyBjb25jdXJyZW50bHkgKHN1Y2ggYXMgb24gaW52b2NhdGlvbiBvZiA6YzpmdW5jOmAhZnJlZV9wZ3RhYmxlc2ApLlxuJiM0MzsqIFBhZ2UgdGFibGVzIG1heSBiZSAqd2Fsa2VkKiB1bmRlciBSQ1UgYWxvbmUsIGFzIHBhZ2UgdGFibGVzIGFyZSBmcmVlZCBvbmx5XG4mIzQzOyAgYWZ0ZXIgYW4gUkNVIGdyYWNlIHBlcmlvZCBoYXMgZWxhcHNlZC4gSG93ZXZlciwgYW55IGVudHJ5IGZvdW5kIG11c3QgYmVcbiYjNDM7ICByZXZhbGlkYXRlZCBhZnRlciB0aGUgcGFnZSB0YWJsZSBsb2NrIGlzIHRha2VuIChzdWNoIGFzIHRoZVxuJiM0MzsgIDpjOmZ1bmM6YCFwbWRfc2FtZWAgcmVjaGVjayBwZXJmb3JtZWQgYnkgOmM6ZnVuYzpgIXB0ZV9vZmZzZXRfbWFwX2xvY2tgKVxuJiM0MzsgIGJlZm9yZSBpdCBpcyBhY3RlZCB1cG9uLiBDaGFuZ2luZyBhbiBlbnRyeSBhbHdheXMgcmVxdWlyZXMgdGhlIHBhZ2UgdGFibGVcbiYjNDM7ICBsb2NrLlxuICogUmVhZHMgZnJvbSBhbmQgd3JpdGVzIHRvIHBhZ2UgdGFibGUgZW50cmllcyBtdXN0IGJlICphcHByb3ByaWF0ZWx5KlxuICAgYXRvbWljLiBTZWUgdGhlIHNlY3Rpb24gb24gYXRvbWljaXR5IGJlbG93IGZvciBkZXRhaWxzLlxuICogUG9wdWxhdGluZyBwcmV2aW91c2x5IGVtcHR5IGVudHJpZXMgcmVxdWlyZXMgdGhhdCB0aGUgbW1hcCBvciBWTUEgbG9ja3MgYXJlXG5kaWZmIC0tZ2l0IGEvYXJjaC9LY29uZmlnIGIvYXJjaC9LY29uZmlnXG5pbmRleCA0NWM2NTc3NzIzNjIzLi42Zjc1MTY5MTY3OTdlIDEwMDY0NFxuLS0tIGEvYXJjaC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL0tjb25maWdcbkBAIC01MjYsMTMgJiM0Mzs1MjYsNiBAQCBjb25maWcgSEFWRV9BUkNIX0pVTVBfTEFCRUxcbiBjb25maWcgSEFWRV9BUkNIX0pVTVBfTEFCRUxfUkVMQVRJVkVcbiBcdGJvb2xcbiBcbi1jb25maWcgTU1VX0dBVEhFUl9UQUJMRV9GUkVFXG4tXHRib29sXG4tXG4tY29uZmlnIE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcbi1cdGJvb2xcbi1cdHNlbGVjdCBNTVVfR0FUSEVSX1RBQkxFX0ZSRUVcbi1cbiBjb25maWcgTU1VX0dBVEhFUl9QQUdFX1NJWkVcbiBcdGJvb2xcbiBcbkBAIC01NDgsNyAmIzQzOzU0MSw2IEBAIGNvbmZpZyBNTVVfR0FUSEVSX01FUkdFX1ZNQVNcbiBcbiBjb25maWcgTU1VX0dBVEhFUl9OT19HQVRIRVJcbiBcdGJvb2xcbi1cdGRlcGVuZHMgb24gTU1VX0dBVEhFUl9UQUJMRV9GUkVFXG4gXG4gY29uZmlnIEFSQ0hfV0FOVF9JUlFTX09GRl9BQ1RJVkFURV9NTVxuIFx0Ym9vbFxuZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvS2NvbmZpZyBiL2FyY2gvYWxwaGEvS2NvbmZpZ1xuaW5kZXggZTUzZWYyZDg4NDYzNi4uOTA2M2M3YmRhNGU0MSAxMDA2NDRcbi0tLSBhL2FyY2gvYWxwaGEvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hbHBoYS9LY29uZmlnXG5AQCAtNDIsNyAmIzQzOzQyLDYgQEAgY29uZmlnIEFMUEhBXG4gXHRzZWxlY3QgQVJDSF9TVEFDS1dBTEtcbiBcdHNlbGVjdCBDUFVfTk9fRUZGSUNJRU5UX0ZGUyBpZiAhQUxQSEFfRVY2N1xuIFx0c2VsZWN0IE1NVV9HQVRIRVJfTk9fUkFOR0Vcbi1cdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG4gXHRzZWxlY3QgU1BBUlNFTUVNX0VYVFJFTUUgaWYgU1BBUlNFTUVNXG4gXHRzZWxlY3QgWk9ORV9ETUFcbiBcdHNlbGVjdCBUUkFDRV9JUlFGTEFHU19TVVBQT1JUXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcmMvaW5jbHVkZS9hc20vcGdhbGxvYy5oIGIvYXJjaC9hcmMvaW5jbHVkZS9hc20vcGdhbGxvYy5oXG5pbmRleCBkZmFlMDcwZmU4ZDU1Li45YjZjMzdmOTJlOTdmIDEwMDY0NFxuLS0tIGEvYXJjaC9hcmMvaW5jbHVkZS9hc20vcGdhbGxvYy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcbkBAIC03Miw3ICYjNDM7NzIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcDRkX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwNGRfdCAqcDRkcCwgcHVkX3QgKnB1ZHApXG4gXHRzZXRfcDRkKHA0ZHAsIF9fcDRkKCh1bnNpZ25lZCBsb25nKXB1ZHApKTtcbiB9XG4gXG4tI2RlZmluZSBfX3B1ZF9mcmVlX3RsYih0bGIsIHBtZCwgYWRkcikgIHB1ZF9mcmVlKCh0bGIpLVx1MDAzZW1tLCBwbWQpXG4mIzQzOyNkZWZpbmUgX19wdWRfZnJlZV90bGIodGxiLCBwbWQsIGFkZHIpICB0bGJfcmVtb3ZlX3B0ZGVzYygodGxiKSwgdmlydF90b19wdGRlc2MocG1kKSlcbiBcbiAjZW5kaWZcbiBcbkBAIC04MywxMCAmIzQzOzgzLDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHB1ZF90ICpwdWRwLCBwbWRfdCAqcG1kcClcbiBcdHNldF9wdWQocHVkcCwgX19wdWQoKHVuc2lnbmVkIGxvbmcpcG1kcCkpO1xuIH1cbiBcbi0jZGVmaW5lIF9fcG1kX2ZyZWVfdGxiKHRsYiwgcG1kLCBhZGRyKSAgcG1kX2ZyZWUoKHRsYiktXHUwMDNlbW0sIHBtZClcbiYjNDM7I2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIsIHBtZCwgYWRkcikgIHRsYl9yZW1vdmVfcHRkZXNjKCh0bGIpLCB2aXJ0X3RvX3B0ZGVzYyhwbWQpKVxuIFxuICNlbmRpZlxuIFxuLSNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLCBwdGUsIGFkZHIpICBwdGVfZnJlZSgodGxiKS1cdTAwM2VtbSwgcHRlKVxuJiM0MzsjZGVmaW5lIF9fcHRlX2ZyZWVfdGxiKHRsYiwgcHRlLCBhZGRyKSAgdGxiX3JlbW92ZV9wdGRlc2MoKHRsYiksIHBhZ2VfcHRkZXNjKHB0ZSkpXG4gXG4gI2VuZGlmIC8qIF9BU01fQVJDX1BHQUxMT0NfSCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtL0tjb25maWcgYi9hcmNoL2FybS9LY29uZmlnXG5pbmRleCA0MDhhYTU4YTJhNWJiLi4wY2MyODlhNzE4NGFiIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm0vS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm0vS2NvbmZpZ1xuQEAgLTEzNCw3ICYjNDM7MTM0LDYgQEAgY29uZmlnIEFSTVxuIFx0c2VsZWN0IEhBVkVfUEVSRl9SRUdTXG4gXHRzZWxlY3QgSEFWRV9QRVJGX1VTRVJfU1RBQ0tfRFVNUFxuIFx0c2VsZWN0IEhBVkVfUE9TSVhfQ1BVX1RJTUVSU19UQVNLX1dPUktcbi1cdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFIGlmIFNNUCBcdTAwMjZcdTAwMjYgQVJNX0xQQUVcbiBcdHNlbGVjdCBIQVZFX1JFR1NfQU5EX1NUQUNLX0FDQ0VTU19BUElcbiBcdHNlbGVjdCBIQVZFX1JTRVFcbiBcdHNlbGVjdCBIQVZFX1JVU1QgaWYgQ1BVX0xJVFRMRV9FTkRJQU4gXHUwMDI2XHUwMDI2IENQVV8zMnY3IFx1MDAyNlx1MDAyNiAhS0FTQU5cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L0tjb25maWcgYi9hcmNoL2FybTY0L0tjb25maWdcbmluZGV4IDJiYmVkZWQzM2RhMGQuLmI2YzJkZDhiMjYxMjQgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvS2NvbmZpZ1xuQEAgLTIyMSw3ICYjNDM7MjIxLDYgQEAgY29uZmlnIEFSTTY0XG4gXHRzZWxlY3QgSEFWRV9SRUxJQUJMRV9TVEFDS1RSQUNFXG4gXHRzZWxlY3QgSEFWRV9QT1NJWF9DUFVfVElNRVJTX1RBU0tfV09SS1xuIFx0c2VsZWN0IEhBVkVfRlVOQ1RJT05fQVJHX0FDQ0VTU19BUElcbi1cdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG4gXHRzZWxlY3QgSEFWRV9SU0VRXG4gXHRzZWxlY3QgSEFWRV9SVVNUIGlmIFJVU1RDX1NVUFBPUlRTX0FSTTY0XG4gXHRzZWxlY3QgSEFWRV9TVEFDS1BST1RFQ1RPUlxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL0tjb25maWcgYi9hcmNoL2xvb25nYXJjaC9LY29uZmlnXG5pbmRleCA5YzVkZWY3MDYyMjIyLi5kMWIyM2RhNDA3Mzc1IDEwMDY0NFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9sb29uZ2FyY2gvS2NvbmZpZ1xuQEAgLTE4OCw3ICYjNDM7MTg4LDYgQEAgY29uZmlnIExPT05HQVJDSFxuIFx0c2VsZWN0IElSUV9MT09OR0FSQ0hfQ1BVXG4gXHRzZWxlY3QgTE9DS19NTV9BTkRfRklORF9WTUFcbiBcdHNlbGVjdCBNTVVfR0FUSEVSX01FUkdFX1ZNQVMgaWYgTU1VXG4tXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxuIFx0c2VsZWN0IE1PRFVMRVNfVVNFX0VMRl9SRUxBIGlmIE1PRFVMRVNcbiBcdHNlbGVjdCBORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTktcbiBcdHNlbGVjdCBORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOS1xuZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9LY29uZmlnIGIvYXJjaC9tNjhrL0tjb25maWdcbmluZGV4IDExODM1ZWI1OWQ5NGQuLmViODRjM2FmOTJjMDIgMTAwNjQ0XG4tLS0gYS9hcmNoL202OGsvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9tNjhrL0tjb25maWdcbkBAIC0yOSw2ICYjNDM7MjksNyBAQCBjb25maWcgTTY4S1xuIFx0c2VsZWN0IEhBVkVfQVJDSF9MSUJHQ0NfSFxuIFx0c2VsZWN0IEhBVkVfQVJDSF9TRUNDT01QXG4gXHRzZWxlY3QgSEFWRV9BUkNIX1NFQ0NPTVBfRklMVEVSXG4mIzQzO1x0c2VsZWN0IEhBVkVfQVJDSF9UTEJfUkVNT1ZFX1RBQkxFIGlmIE1NVV9NT1RPUk9MQVxuIFx0c2VsZWN0IEhBVkVfQVNNX01PRFZFUlNJT05TXG4gXHRzZWxlY3QgSEFWRV9ERUJVR19CVUdWRVJCT1NFXG4gXHRzZWxlY3QgSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUyBpZiAhQ1BVX0hBU19OT19VTkFMSUdORURcbmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbWNmX3BnYWxsb2MuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tY2ZfcGdhbGxvYy5oXG5pbmRleCBmYzU0NTRkMzdkYTMxLi5iNTNmZjA5NTBkYjJlIDEwMDY0NFxuLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21jZl9wZ2FsbG9jLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tY2ZfcGdhbGxvYy5oXG5AQCAtMzksMTAgJiM0MzszOSw3IEBAIGV4dGVybiBpbmxpbmUgcG1kX3QgKnBtZF9hbGxvY19rZXJuZWwocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3B0ZV9mcmVlX3RsYihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBwZ3RhYmxlX3QgcGd0YWJsZSxcbiBcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuIHtcbi1cdHN0cnVjdCBwdGRlc2MgKnB0ZGVzYyA9IHZpcnRfdG9fcHRkZXNjKHBndGFibGUpO1xuLVxuLVx0cGFnZXRhYmxlX2R0b3IocHRkZXNjKTtcbi1cdHBhZ2V0YWJsZV9mcmVlKHB0ZGVzYyk7XG4mIzQzO1x0dGxiX3JlbW92ZV9wdGRlc2ModGxiLCB2aXJ0X3RvX3B0ZGVzYyhwZ3RhYmxlKSk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgcGd0YWJsZV90IHB0ZV9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5kaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21vdG9yb2xhX3BnYWxsb2MuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tb3Rvcm9sYV9wZ2FsbG9jLmhcbmluZGV4IDEwOTFmYjBhZmZiZWUuLmRjZGU0MGU4YjVjNmEgMTAwNjQ0XG4tLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbW90b3JvbGFfcGdhbGxvYy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbW90b3JvbGFfcGdhbGxvYy5oXG5AQCAtMTcsNiAmIzQzOzE3LDcgQEAgZW51bSBtNjhrX3RhYmxlX3R5cGVzIHtcbiBleHRlcm4gdm9pZCBpbml0X3BvaW50ZXJfdGFibGUodm9pZCAqdGFibGUsIGludCB0eXBlKTtcbiBleHRlcm4gdm9pZCAqZ2V0X3BvaW50ZXJfdGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCB0eXBlKTtcbiBleHRlcm4gaW50IGZyZWVfcG9pbnRlcl90YWJsZSh2b2lkICp0YWJsZSwgaW50IHR5cGUpO1xuJiM0MztleHRlcm4gdm9pZCBfX3RsYl9yZW1vdmVfdGFibGUodm9pZCAqdGFibGUpO1xuIFxuIC8qXG4gICogQWxsb2NhdGUgYW5kIGZyZWUgcGFnZSB0YWJsZXMuIFRoZSB4eHhfa2VybmVsKCkgdmVyc2lvbnMgYXJlXG5AQCAtNDcsNyAmIzQzOzQ4LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHB0ZV9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcGd0YWJsZSlcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19wdGVfZnJlZV90bGIoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgcGd0YWJsZV90IHBndGFibGUsXG4gXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcbiB7XG4tXHRmcmVlX3BvaW50ZXJfdGFibGUocGd0YWJsZSwgVEFCTEVfUFRFKTtcbiYjNDM7XHR0bGJfcmVtb3ZlX3RhYmxlKHRsYiwgKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpcGd0YWJsZSB8IFRBQkxFX1BURSkpO1xuIH1cbiBcbiBcbkBAIC02MSwxMCAmIzQzOzYyLDEwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHBtZF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKVxuIFx0cmV0dXJuIGZyZWVfcG9pbnRlcl90YWJsZShwbWQsIFRBQkxFX1BNRCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IF9fcG1kX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHBtZF90ICpwbWQsXG4tXHRcdFx0XHQgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgX19wbWRfZnJlZV90bGIoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgcG1kX3QgKnBtZCxcbiYjNDM7XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcbiB7XG4tXHRyZXR1cm4gZnJlZV9wb2ludGVyX3RhYmxlKHBtZCwgVEFCTEVfUE1EKTtcbiYjNDM7XHR0bGJfcmVtb3ZlX3RhYmxlKHRsYiwgKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpcG1kIHwgVEFCTEVfUE1EKSk7XG4gfVxuIFxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tbS9tb3Rvcm9sYS5jIGIvYXJjaC9tNjhrL21tL21vdG9yb2xhLmNcbmluZGV4IGIzMGFhNjlhNzNhNmEuLmZmYzgwNDgzNDQwYmMgMTAwNjQ0XG4tLS0gYS9hcmNoL202OGsvbW0vbW90b3JvbGEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9tNjhrL21tL21vdG9yb2xhLmNcbkBAIC0yMCw2ICYjNDM7MjAsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWJsb2NrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9nZnAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vc2V0dXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFx1MDAzZVxuQEAgLTEwMyw2ICYjNDM7MTA0LDggQEAgc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgcHRhYmxlX2xpc3RbM10gPSB7XG4gXHRMSVNUX0hFQURfSU5JVChwdGFibGVfbGlzdFsyXSksXG4gfTtcbiBcbiYjNDM7c3RhdGljIERFRklORV9TUElOTE9DSyhwdGFibGVfbG9jayk7XG4mIzQzO1xuICNkZWZpbmUgUERfUFRBQkxFKHB0ZGVzYykgKChwdGFibGVfZGVzYyAqKVx1MDAyNih2aXJ0X3RvX3B0ZGVzYygodm9pZCAqKShwdGRlc2MpKS1cdTAwM2VwdF9saXN0KSlcbiAjZGVmaW5lIFBEX1BUREVTQyhwdGFibGUpIChsaXN0X2VudHJ5KHB0YWJsZSwgc3RydWN0IHB0ZGVzYywgcHRfbGlzdCkpXG4gI2RlZmluZSBQRF9NQVJLQklUUyhkcCkgKCoodW5zaWduZWQgaW50ICopXHUwMDI2UERfUFRERVNDKGRwKS1cdTAwM2VwdF9pbmRleClcbkBAIC0xMzksNTIgJiM0MzsxNDIsNjYgQEAgdm9pZCBfX2luaXQgaW5pdF9wb2ludGVyX3RhYmxlKHZvaWQgKnRhYmxlLCBpbnQgdHlwZSlcbiBcdHJldHVybjtcbiB9XG4gXG4tdm9pZCAqZ2V0X3BvaW50ZXJfdGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCB0eXBlKVxuJiM0MzsvKlxuJiM0MzsgKiBGb3IgYSBwb2ludGVyIHRhYmxlIGZvciBhIHVzZXIgcHJvY2VzcyBhZGRyZXNzIHNwYWNlLCBhXG4mIzQzOyAqIHRhYmxlIGlzIHRha2VuIGZyb20gYSBwdGRlc2MgYWxsb2NhdGVkIGZvciB0aGUgcHVycG9zZS4gIEVhY2hcbiYjNDM7ICogcHRkZXNjIGNhbiBob2xkIDggcG9pbnRlciB0YWJsZXMuICBUaGUgcHRkZXNjIGlzIHJlbWFwcGVkIGluXG4mIzQzOyAqIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSB0byBiZSBub25jYWNoZWFibGUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCAqYWRkX3BvaW50ZXJfdGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCB0eXBlKVxuIHtcbi1cdHB0YWJsZV9kZXNjICpkcCA9IHB0YWJsZV9saXN0W3R5cGVdLm5leHQ7XG4tXHR1bnNpZ25lZCBpbnQgbWFzayA9IGxpc3RfZW1wdHkoXHUwMDI2cHRhYmxlX2xpc3RbdHlwZV0pID8gMCA6IFBEX01BUktCSVRTKGRwKTtcbi1cdHVuc2lnbmVkIGludCB0bXAsIG9mZjtcbiYjNDM7XHRzdHJ1Y3QgcHRkZXNjICpwdGRlc2M7XG4mIzQzO1x0cHRhYmxlX2Rlc2MgKm5ldztcbiYjNDM7XHR2b2lkICpwdF9hZGRyO1xuIFxuLVx0Lypcbi1cdCAqIEZvciBhIHBvaW50ZXIgdGFibGUgZm9yIGEgdXNlciBwcm9jZXNzIGFkZHJlc3Mgc3BhY2UsIGFcbi1cdCAqIHRhYmxlIGlzIHRha2VuIGZyb20gYSBwdGRlc2MgYWxsb2NhdGVkIGZvciB0aGUgcHVycG9zZS4gIEVhY2hcbi1cdCAqIHB0ZGVzYyBjYW4gaG9sZCA4IHBvaW50ZXIgdGFibGVzLiAgVGhlIHB0ZGVzYyBpcyByZW1hcHBlZCBpblxuLVx0ICogdmlydHVhbCBhZGRyZXNzIHNwYWNlIHRvIGJlIG5vbmNhY2hlYWJsZS5cbi1cdCAqL1xuLVx0aWYgKG1hc2sgPT0gMCkge1xuLVx0XHRzdHJ1Y3QgcHRkZXNjICpwdGRlc2M7XG4tXHRcdHB0YWJsZV9kZXNjICpuZXc7XG4tXHRcdHZvaWQgKnB0X2FkZHI7XG4tXG4tXHRcdHB0ZGVzYyA9IHBhZ2V0YWJsZV9hbGxvYyhHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywgMCk7XG4tXHRcdGlmICghcHRkZXNjKVxuLVx0XHRcdHJldHVybiBOVUxMO1xuLVxuLVx0XHRwdF9hZGRyID0gcHRkZXNjX2FkZHJlc3MocHRkZXNjKTtcbi1cbi1cdFx0c3dpdGNoICh0eXBlKSB7XG4tXHRcdGNhc2UgVEFCTEVfUFRFOlxuLVx0XHRcdC8qXG4tXHRcdFx0ICogbTY4ayBkb2VzbiYjMzk7dCBoYXZlIFNQTElUX1BURV9QVExPQ0tTIGZvciBub3QgaGF2aW5nXG4tXHRcdFx0ICogU01QLlxuLVx0XHRcdCAqL1xuLVx0XHRcdHBhZ2V0YWJsZV9wdGVfY3RvcihtbSwgcHRkZXNjKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBUQUJMRV9QTUQ6XG4tXHRcdFx0cGFnZXRhYmxlX3BtZF9jdG9yKG1tLCBwdGRlc2MpO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIFRBQkxFX1BHRDpcbi1cdFx0XHRwYWdldGFibGVfcGdkX2N0b3IocHRkZXNjKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuJiM0MztcdHB0ZGVzYyA9IHBhZ2V0YWJsZV9hbGxvYyhHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywgMCk7XG4mIzQzO1x0aWYgKCFwdGRlc2MpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0cHRfYWRkciA9IHB0ZGVzY19hZGRyZXNzKHB0ZGVzYyk7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAodHlwZSkge1xuJiM0MztcdGNhc2UgVEFCTEVfUFRFOlxuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIG02OGsgZG9lc24mIzM5O3QgaGF2ZSBTUExJVF9QVEVfUFRMT0NLUyBmb3Igbm90IGhhdmluZ1xuJiM0MztcdFx0ICogU01QLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRwYWdldGFibGVfcHRlX2N0b3IobW0sIHB0ZGVzYyk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFRBQkxFX1BNRDpcbiYjNDM7XHRcdHBhZ2V0YWJsZV9wbWRfY3RvcihtbSwgcHRkZXNjKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgVEFCTEVfUEdEOlxuJiM0MztcdFx0cGFnZXRhYmxlX3BnZF9jdG9yKHB0ZGVzYyk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG1tdV9wYWdlX2N0b3IocHRfYWRkcik7XG4mIzQzO1xuJiM0MztcdG5ldyA9IFBEX1BUQUJMRShwdF9hZGRyKTtcbiBcbi1cdFx0bW11X3BhZ2VfY3RvcihwdF9hZGRyKTtcbiYjNDM7XHRQRF9NQVJLQklUUyhuZXcpID0gcHRhYmxlX21hc2sodHlwZSkgLSAxO1xuJiM0MztcdHNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCBcdTAwMjZwdGFibGVfbG9jaylcbiYjNDM7XHRcdGxpc3RfYWRkKG5ldywgXHUwMDI2cHRhYmxlX2xpc3RbdHlwZV0pO1xuIFxuLVx0XHRuZXcgPSBQRF9QVEFCTEUocHRfYWRkcik7XG4tXHRcdFBEX01BUktCSVRTKG5ldykgPSBwdGFibGVfbWFzayh0eXBlKSAtIDE7XG4tXHRcdGxpc3RfYWRkX3RhaWwobmV3LCBkcCk7XG4mIzQzO1x0cmV0dXJuIChwbWRfdCAqKXB0X2FkZHI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgKmdldF9wb2ludGVyX3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgdHlwZSlcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCB0bXAsIG9mZjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG1hc2s7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XHRwdGFibGVfZGVzYyAqZHA7XG4mIzQzO1x0dm9pZCAqcmV0O1xuIFxuLVx0XHRyZXR1cm4gKHBtZF90ICopcHRfYWRkcjtcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwdGFibGVfbG9jaywgZmxhZ3MpO1xuJiM0MztcdGRwID0gcHRhYmxlX2xpc3RbdHlwZV0ubmV4dDtcbiYjNDM7XHRtYXNrID0gbGlzdF9lbXB0eShcdTAwMjZwdGFibGVfbGlzdFt0eXBlXSkgPyAwIDogUERfTUFSS0JJVFMoZHApO1xuJiM0MztcbiYjNDM7XHRpZiAobWFzayA9PSAwKSB7XG4mIzQzO1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnB0YWJsZV9sb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRyZXR1cm4gYWRkX3BvaW50ZXJfdGFibGUobW0sIHR5cGUpO1xuIFx0fVxuIFxuIFx0Zm9yICh0bXAgPSAxLCBvZmYgPSAwOyAobWFzayBcdTAwMjYgdG1wKSA9PSAwOyB0bXAgXHUwMDNjXHUwMDNjPSAxLCBvZmYgJiM0Mzs9IHB0YWJsZV9zaXplKHR5cGUpKVxuQEAgLTE5NCw3ICYjNDM7MjExLDEwIEBAIHZvaWQgKmdldF9wb2ludGVyX3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgdHlwZSlcbiBcdFx0LyogbW92ZSB0byBlbmQgb2YgbGlzdCAqL1xuIFx0XHRsaXN0X21vdmVfdGFpbChkcCwgXHUwMDI2cHRhYmxlX2xpc3RbdHlwZV0pO1xuIFx0fVxuLVx0cmV0dXJuIHB0ZGVzY19hZGRyZXNzKFBEX1BUREVTQyhkcCkpICYjNDM7IG9mZjtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcHRkZXNjX2FkZHJlc3MoUERfUFRERVNDKGRwKSkgJiM0Mzsgb2ZmO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cHRhYmxlX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBpbnQgZnJlZV9wb2ludGVyX3RhYmxlKHZvaWQgKnRhYmxlLCBpbnQgdHlwZSlcbkBAIC0yMDMsNiAmIzQzOzIyMyw5IEBAIGludCBmcmVlX3BvaW50ZXJfdGFibGUodm9pZCAqdGFibGUsIGludCB0eXBlKVxuIFx0dW5zaWduZWQgbG9uZyBwdGFibGUgPSAodW5zaWduZWQgbG9uZyl0YWJsZTtcbiBcdHVuc2lnbmVkIGxvbmcgcHRfYWRkciA9IHB0YWJsZSBcdTAwMjYgUEFHRV9NQVNLO1xuIFx0dW5zaWduZWQgaW50IG1hc2sgPSAxVSBcdTAwM2NcdTAwM2MgKChwdGFibGUgLSBwdF9hZGRyKS9wdGFibGVfc2l6ZSh0eXBlKSk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cHRhYmxlX2xvY2ssIGZsYWdzKTtcbiBcbiBcdGRwID0gUERfUFRBQkxFKHB0X2FkZHIpO1xuIFx0aWYgKFBEX01BUktCSVRTIChkcCkgXHUwMDI2IG1hc2spXG5AQCAtMjEzLDYgJiM0MzsyMzYsOCBAQCBpbnQgZnJlZV9wb2ludGVyX3RhYmxlKHZvaWQgKnRhYmxlLCBpbnQgdHlwZSlcbiBcdGlmIChQRF9NQVJLQklUUyhkcCkgPT0gcHRhYmxlX21hc2sodHlwZSkpIHtcbiBcdFx0LyogYWxsIHRhYmxlcyBpbiBwdGRlc2MgYXJlIGZyZWUsIGZyZWUgcHRkZXNjICovXG4gXHRcdGxpc3RfZGVsKGRwKTtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cHRhYmxlX2xvY2ssIGZsYWdzKTtcbiYjNDM7XG4gXHRcdG1tdV9wYWdlX2R0b3IoKHZvaWQgKilwdF9hZGRyKTtcbiBcdFx0cGFnZXRhYmxlX2R0b3JfZnJlZSh2aXJ0X3RvX3B0ZGVzYygodm9pZCAqKXB0X2FkZHIpKTtcbiBcdFx0cmV0dXJuIDE7XG5AQCAtMjIzLDkgJiM0MzsyNDgsMjEgQEAgaW50IGZyZWVfcG9pbnRlcl90YWJsZSh2b2lkICp0YWJsZSwgaW50IHR5cGUpXG4gXHRcdCAqL1xuIFx0XHRsaXN0X21vdmUoZHAsIFx1MDAyNnB0YWJsZV9saXN0W3R5cGVdKTtcbiBcdH1cbiYjNDM7XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwdGFibGVfbG9jaywgZmxhZ3MpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0Mzt2b2lkIF9fdGxiX3JlbW92ZV90YWJsZSh2b2lkICp0YWJsZSlcbiYjNDM7e1xuJiM0MztcdC8qIFRoZSBib3R0b20gMiBiaXRzIGFyZSB1c2VkIHRvIGVuY29kZSBwYWdlIHRhYmxlIHR5cGUuICovXG4mIzQzO1x0Y29uc3QgdW5zaWduZWQgbG9uZyBlbmNvZGVkID0gKHVuc2lnbmVkIGxvbmcpdGFibGU7XG4mIzQzO1x0dm9pZCAqYWRkciA9ICh2b2lkICopKGVuY29kZWQgXHUwMDI2IH4zVUwpO1xuJiM0MztcdGNvbnN0IGludCB0eXBlID0gZW5jb2RlZCBcdTAwMjYgMztcbiYjNDM7XG4mIzQzO1x0ZnJlZV9wb2ludGVyX3RhYmxlKGFkZHIsIHR5cGUpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qIHNpemUgb2YgbWVtb3J5IGFscmVhZHkgbWFwcGVkIGluIGhlYWQuUyAqL1xuIGV4dGVybiBfX2luaXRkYXRhIHVuc2lnbmVkIGxvbmcgbTY4a19pbml0X21hcHBlZF9zaXplO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcGdhbGxvYy5oXG5pbmRleCAwODRhOGEwZGMyMzk1Li5mZmVlNmEwMDkyMTlhIDEwMDY0NFxuLS0tIGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxuQEAgLTI1LDcgJiM0MzsyNSw3IEBAIGV4dGVybiB2b2lkIF9fYmFkX3B0ZShwbWRfdCAqcG1kKTtcbiBcbiBleHRlcm4gcHRlX3QgKnB0ZV9hbGxvY19vbmVfa2VybmVsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcbiBcbi0jZGVmaW5lIF9fcHRlX2ZyZWVfdGxiKHRsYiwgcHRlLCBhZGRyKVx0cHRlX2ZyZWUoKHRsYiktXHUwMDNlbW0sIChwdGUpKVxuJiM0MzsjZGVmaW5lIF9fcHRlX2ZyZWVfdGxiKHRsYiwgcHRlLCBhZGRyKVx0dGxiX3JlbW92ZV9wdGRlc2MoKHRsYiksIHBhZ2VfcHRkZXNjKHB0ZSkpXG4gXG4gI2RlZmluZSBwbWRfcG9wdWxhdGUobW0sIHBtZCwgcHRlKSBcXFxuIFx0XHRcdChwbWRfdmFsKCoocG1kKSkgPSAodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MocHRlKSlcbmRpZmYgLS1naXQgYS9hcmNoL21pcHMvS2NvbmZpZyBiL2FyY2gvbWlwcy9LY29uZmlnXG5pbmRleCBlMmViOTYyN2JkMTRjLi5mMGM0M2QxMThjYTAwIDEwMDY0NFxuLS0tIGEvYXJjaC9taXBzL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbWlwcy9LY29uZmlnXG5AQCAtOTcsNyAmIzQzOzk3LDYgQEAgY29uZmlnIE1JUFNcbiBcdHNlbGVjdCBJUlFfRk9SQ0VEX1RIUkVBRElOR1xuIFx0c2VsZWN0IElTQSBpZiBFSVNBXG4gXHRzZWxlY3QgTE9DS19NTV9BTkRfRklORF9WTUFcbi1cdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG4gXHRzZWxlY3QgTU9EVUxFU19VU0VfRUxGX1JFTCBpZiBNT0RVTEVTXG4gXHRzZWxlY3QgTU9EVUxFU19VU0VfRUxGX1JFTEEgaWYgTU9EVUxFUyBcdTAwMjZcdTAwMjYgNjRCSVRcbiBcdHNlbGVjdCBQRVJGX1VTRV9WTUFMTE9DXG5kaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvS2NvbmZpZyBiL2FyY2gvcGFyaXNjL0tjb25maWdcbmluZGV4IGQzYWZhYzJmMGQ5YmUuLjc3ZjY3MDI4YWQ4OWMgMTAwNjQ0XG4tLS0gYS9hcmNoL3BhcmlzYy9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3BhcmlzYy9LY29uZmlnXG5AQCAtODAsNyAmIzQzOzgwLDYgQEAgY29uZmlnIFBBUklTQ1xuIFx0c2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFNcbiBcdHNlbGVjdCBDUFVfTk9fRUZGSUNJRU5UX0ZGU1xuIFx0c2VsZWN0IFRIUkVBRF9JTkZPX0lOX1RBU0tcbi1cdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG4gXHRzZWxlY3QgTkVFRF9ETUFfTUFQX1NUQVRFXG4gXHRzZWxlY3QgTkVFRF9TR19ETUFfTEVOR1RIXG4gXHRzZWxlY3QgSEFWRV9BUkNIX0tHREJcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnXG5pbmRleCAyNTgwZTI3ZTQzMjg3Li4wNzY3Y2ZjYmFhNDIyIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnXG5AQCAtMzA3LDcgJiM0MzszMDcsNiBAQCBjb25maWcgUFBDXG4gXHRzZWxlY3QgS0FTQU5fVk1BTExPQ1x0XHRcdGlmIEtBU0FOIFx1MDAyNlx1MDAyNiBFWEVDTUVNXG4gXHRzZWxlY3QgTE9DS19NTV9BTkRfRklORF9WTUFcbiBcdHNlbGVjdCBNTVVfR0FUSEVSX1BBR0VfU0laRVxuLVx0c2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcbiBcdHNlbGVjdCBIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRVxuIFx0c2VsZWN0IE1NVV9HQVRIRVJfTUVSR0VfVk1BU1xuIFx0c2VsZWN0IE1NVV9MQVpZX1RMQl9TSE9PVERPV05cdFx0aWYgUFBDX0JPT0szU182NFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvS2NvbmZpZyBiL2FyY2gvcmlzY3YvS2NvbmZpZ1xuaW5kZXggNTA1ZWVkNGFmOTMyYi4uNzc0MWE0Mjg3NDk4MSAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9LY29uZmlnXG5AQCAtMjA4LDcgJiM0MzsyMDgsNiBAQCBjb25maWcgUklTQ1ZcbiBcdHNlbGVjdCBJUlFfRk9SQ0VEX1RIUkVBRElOR1xuIFx0c2VsZWN0IEtBU0FOX1ZNQUxMT0MgaWYgS0FTQU5cbiBcdHNlbGVjdCBMT0NLX01NX0FORF9GSU5EX1ZNQVxuLVx0c2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgaWYgU01QIFx1MDAyNlx1MDAyNiBNTVVcbiBcdHNlbGVjdCBNT0RVTEVTX1VTRV9FTEZfUkVMQSBpZiBNT0RVTEVTXG4gXHRzZWxlY3QgT0ZcbiBcdHNlbGVjdCBPRl9FQVJMWV9GTEFUVFJFRVxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9LY29uZmlnIGIvYXJjaC9zMzkwL0tjb25maWdcbmluZGV4IGI4OGI4NTA0MjEzNjkuLmEzNDM3NmMwNWY2ZTMgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL0tjb25maWdcbkBAIC0yNjcsNyAmIzQzOzI2Nyw2IEBAIGNvbmZpZyBTMzkwXG4gXHRzZWxlY3QgTE9DS19NTV9BTkRfRklORF9WTUFcbiBcdHNlbGVjdCBNTVVfR0FUSEVSX01FUkdFX1ZNQVNcbiBcdHNlbGVjdCBNTVVfR0FUSEVSX05PX0dBVEhFUlxuLVx0c2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcbiBcdHNlbGVjdCBNT0RVTEVTX1VTRV9FTEZfUkVMQVxuIFx0c2VsZWN0IE5FRURfRE1BX01BUF9TVEFURVx0aWYgUENJXG4gXHRzZWxlY3QgTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LXG5kaWZmIC0tZ2l0IGEvYXJjaC9zaC9LY29uZmlnIGIvYXJjaC9zaC9LY29uZmlnXG5pbmRleCBkNjBmMWQ1YTk0YzBmLi5mZTg1OWRlZjkxOGNjIDEwMDY0NFxuLS0tIGEvYXJjaC9zaC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3NoL0tjb25maWdcbkBAIC0zMyw2ICYjNDM7MzMsNyBAQCBjb25maWcgU1VQRVJIXG4gXHRzZWxlY3QgSEFWRV9BUkNIX0FVRElUU1lTQ0FMTFxuIFx0c2VsZWN0IEhBVkVfQVJDSF9LR0RCXG4gXHRzZWxlY3QgSEFWRV9BUkNIX1NFQ0NPTVBfRklMVEVSXG4mIzQzO1x0c2VsZWN0IEhBVkVfQVJDSF9UTEJfUkVNT1ZFX1RBQkxFIGlmIFgyVExCXG4gXHRzZWxlY3QgSEFWRV9BUkNIX1RSQUNFSE9PS1xuIFx0c2VsZWN0IEhBVkVfREVCVUdfQlVHVkVSQk9TRVxuIFx0c2VsZWN0IEhBVkVfREVCVUdfS01FTUxFQUtcbmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BnYWxsb2MuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGdhbGxvYy5oXG5pbmRleCA2ZmU3MTIzZDM4ZmE5Li42N2NlN2ZhMjNmYTEyIDEwMDY0NFxuLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGdhbGxvYy5oXG5AQCAtMTcsNyAmIzQzOzE3LDExIEBAIGV4dGVybiB2b2lkIHBnZF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKTtcbiBleHRlcm4gdm9pZCBwdWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHB1ZF90ICpwdWRwLCBwbWRfdCAqcG1kKTtcbiBleHRlcm4gcG1kX3QgKnBtZF9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7XG4gZXh0ZXJuIHZvaWQgcG1kX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQpO1xuLSNkZWZpbmUgX19wbWRfZnJlZV90bGIodGxiLCBwbWRwLCBhZGRyKVx0XHRwbWRfZnJlZSgodGxiKS1cdTAwM2VtbSwgKHBtZHApKVxuJiM0MztleHRlcm4gdm9pZCBfX3RsYl9yZW1vdmVfdGFibGUodm9pZCAqdGFibGUpO1xuJiM0MztcbiYjNDM7LyogUE1EcyBhcmUgc2xhYi1hbGxvY2F0ZWQsIHRhZyBzbyB0aGV5IGFyZSBmcmVlZCBjb3JyZWN0bHkuICovXG4mIzQzOyNkZWZpbmUgX19wbWRfZnJlZV90bGIodGxiLCBwbWRwLCBhZGRyKVx0XHRcdFx0XHRcXFxuJiM0MztcdHRsYl9yZW1vdmVfdGFibGUoKHRsYiksICh2b2lkICopKCh1bnNpZ25lZCBsb25nKShwbWRwKSB8IDEpKVxuICNlbmRpZlxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBwbWRfcG9wdWxhdGVfa2VybmVsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLFxuZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vcGd0YWJsZS5jIGIvYXJjaC9zaC9tbS9wZ3RhYmxlLmNcbmluZGV4IDNhNDA4NWVhMDE2MWYuLmY2MTg0Yjg2Yjg5YzYgMTAwNjQ0XG4tLS0gYS9hcmNoL3NoL21tL3BndGFibGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zaC9tbS9wZ3RhYmxlLmNcbkBAIC01Niw0ICYjNDM7NTYsMjQgQEAgdm9pZCBwbWRfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZClcbiB7XG4gXHRrbWVtX2NhY2hlX2ZyZWUocG1kX2NhY2hlcCwgcG1kKTtcbiB9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBfX3RsYl9yZW1vdmVfdGFibGVfc2xhYih2b2lkICp0YWJsZSlcbiYjNDM7e1xuJiM0MztcdGttZW1fY2FjaGVfZnJlZShwbWRfY2FjaGVwLCB0YWJsZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZV9wZ3RhYmxlKHZvaWQgKnRhYmxlKVxuJiM0Mzt7XG4mIzQzO1x0cGFnZXRhYmxlX2R0b3JfZnJlZSh0YWJsZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgX190bGJfcmVtb3ZlX3RhYmxlKHZvaWQgKnRhYmxlKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpdGFibGU7XG4mIzQzO1xuJiM0MztcdGlmIChhZGRyIFx1MDAyNiAxKVxuJiM0MztcdFx0X190bGJfcmVtb3ZlX3RhYmxlX3NsYWIoKHZvaWQgKikoYWRkciBcdTAwMjYgfjFVTCkpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdF9fdGxiX3JlbW92ZV90YWJsZV9wZ3RhYmxlKHRhYmxlKTtcbiYjNDM7fVxuICNlbmRpZiAvKiBQQUdFVEFCTEVfTEVWRUxTIFx1MDAzZSAyICovXG5kaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9LY29uZmlnIGIvYXJjaC9zcGFyYy9LY29uZmlnXG5pbmRleCBhYjc3ZDNmMjUzNmUxLi43NDJmZmZmOGMzN2YyIDEwMDY0NFxuLS0tIGEvYXJjaC9zcGFyYy9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3NwYXJjL0tjb25maWdcbkBAIC02NCw2ICYjNDM7NjQsNyBAQCBjb25maWcgU1BBUkMzMlxuIFx0c2VsZWN0IEhBVkVfVUlEMTZcbiBcdHNlbGVjdCBIQVZFX1BBR0VfU0laRV80S0JcbiBcdHNlbGVjdCBMT0NLX01NX0FORF9GSU5EX1ZNQVxuJiM0MztcdHNlbGVjdCBIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRVxuIFx0c2VsZWN0IE9MRF9TSUdBQ1RJT05cbiBcdHNlbGVjdCBaT05FX0RNQVxuIFxuQEAgLTc1LDggJiM0Mzs3Niw3IEBAIGNvbmZpZyBTUEFSQzY0XG4gXHRzZWxlY3QgSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVJcbiBcdHNlbGVjdCBIQVZFX0tSRVRQUk9CRVNcbiBcdHNlbGVjdCBIQVZFX0tQUk9CRVNcbi1cdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFIGlmIFNNUFxuLVx0c2VsZWN0IEhBVkVfQVJDSF9UTEJfUkVNT1ZFX1RBQkxFIGlmIFNNUFxuJiM0MztcdHNlbGVjdCBIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRVxuIFx0c2VsZWN0IE1NVV9HQVRIRVJfTUVSR0VfVk1BU1xuIFx0c2VsZWN0IE1NVV9HQVRIRVJfTk9fRkxVU0hfQ0FDSEVcbiBcdHNlbGVjdCBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2NfMzIuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY18zMi5oXG5pbmRleCA0ZjczZTg3YjIyYTMyLi4zNjAxMDg1MmJhMGMwIDEwMDY0NFxuLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzMyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY18zMi5oXG5AQCAtNDgsNyAmIzQzOzQ4LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIGZyZWVfcG1kX2Zhc3QocG1kX3QgKiBwbWQpXG4gfVxuIFxuICNkZWZpbmUgcG1kX2ZyZWUobW0sIHBtZClcdFx0ZnJlZV9wbWRfZmFzdChwbWQpXG4tI2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIsIHBtZCwgYWRkcilcdHBtZF9mcmVlKCh0bGIpLVx1MDAzZW1tLCBwbWQpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIF9fcG1kX2ZyZWVfdGxiKHRsYiwgcG1kLCBhZGRyKVx0XHRcdFx0XHRcXFxuJiM0MztcdHRsYl9yZW1vdmVfdGFibGUoKHRsYiksICh2b2lkICopKCh1bnNpZ25lZCBsb25nKShwbWQpIHwgMVVMKSlcbiBcbiAjZGVmaW5lIHBtZF9wb3B1bGF0ZShtbSwgcG1kLCBwdGUpXHRwbWRfc2V0KHBtZCwgcHRlKVxuIFxuQEAgLTcyLDYgJiM0Mzs3NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3B0ZV9mYXN0KHB0ZV90ICpwdGUpXG4gI2RlZmluZSBwdGVfZnJlZV9rZXJuZWwobW0sIHB0ZSlcdGZyZWVfcHRlX2Zhc3QocHRlKVxuIFxuIHZvaWQgcHRlX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqIG1tLCBwZ3RhYmxlX3QgcHRlKTtcbi0jZGVmaW5lIF9fcHRlX2ZyZWVfdGxiKHRsYiwgcHRlLCBhZGRyKVx0cHRlX2ZyZWUoKHRsYiktXHUwMDNlbW0sIHB0ZSlcbiYjNDM7dm9pZCBfX3RsYl9yZW1vdmVfdGFibGUodm9pZCAqdGFibGUpO1xuJiM0MzsjZGVmaW5lIF9fcHRlX2ZyZWVfdGxiKHRsYiwgcHRlLCBhZGRyKVx0dGxiX3JlbW92ZV90YWJsZSgodGxiKSwgKHZvaWQgKikocHRlKSlcbiBcbiAjZW5kaWYgLyogX1NQQVJDX1BHQUxMT0NfSCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY182NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzY0LmhcbmluZGV4IGNhYTc2MzJiZTRjMmEuLmI1MDU1ZDI1OWI3NGQgMTAwNjQ0XG4tLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2NfNjQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzY0LmhcbkBAIC03NCw4ICYjNDM7NzQsNiBAQCB2b2lkIHB0ZV9mcmVlX2RlZmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcGd0YWJsZSk7XG4gXG4gdm9pZCBwZ3RhYmxlX2ZyZWUodm9pZCAqdGFibGUsIGJvb2wgaXNfcGFnZSk7XG4gXG4tI2lmZGVmIENPTkZJR19TTVBcbi1cbiBzdHJ1Y3QgbW11X2dhdGhlcjtcbiB2b2lkIHRsYl9yZW1vdmVfdGFibGUoc3RydWN0IG1tdV9nYXRoZXIgKiwgdm9pZCAqKTtcbiBcbkBAIC05NiwxMiAmIzQzOzk0LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZSh2b2lkICpfdGFibGUpXG4gXHRcdGlzX3BhZ2UgPSB0cnVlO1xuIFx0cGd0YWJsZV9mcmVlKHRhYmxlLCBpc19wYWdlKTtcbiB9XG4tI2Vsc2UgLyogQ09ORklHX1NNUCAqL1xuLXN0YXRpYyBpbmxpbmUgdm9pZCBwZ3RhYmxlX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHZvaWQgKnRhYmxlLCBib29sIGlzX3BhZ2UpXG4te1xuLVx0cGd0YWJsZV9mcmVlKHRhYmxlLCBpc19wYWdlKTtcbi19XG4tI2VuZGlmIC8qICFDT05GSUdfU01QICovXG4gXG4gc3RhdGljIGlubGluZSB2b2lkIF9fcHRlX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHB0ZV90ICpwdGUsXG4gXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcbmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RsYl82NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90bGJfNjQuaFxuaW5kZXggMzAzNzE4NzQ4MmRiNy4uZjVmOTYzMTY4NWQ1MCAxMDA2NDRcbi0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGxiXzY0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGxiXzY0LmhcbkBAIC0yOSw5ICYjNDM7MjksNyBAQCB2b2lkIGZsdXNoX3RsYl9wZW5kaW5nKHZvaWQpO1xuICAqIGFuZCB0aGVyZWZvcmUgd2UgZG9uJiMzOTt0IG5lZWQgYSBUTEJJIHdoZW4gZnJlZWluZyBwYWdlLXRhYmxlIHBhZ2VzLlxuICAqL1xuIFxuLSNpZmRlZiBDT05GSUdfTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxuICNkZWZpbmUgdGxiX25lZWRzX3RhYmxlX2ludmFsaWRhdGUoKVx0KGZhbHNlKVxuLSNlbmRpZlxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS1nZW5lcmljL3RsYi5oXHUwMDNlXG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9saWIvYml0ZXh0LmMgYi9hcmNoL3NwYXJjL2xpYi9iaXRleHQuY1xuaW5kZXggMzJhNWMxZDk0NTljZC4uYzMwOWUyNzk3M2NlNiAxMDA2NDRcbi0tLSBhL2FyY2gvc3BhcmMvbGliL2JpdGV4dC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3NwYXJjL2xpYi9iaXRleHQuY1xuQEAgLTIyLDggJiM0MzsyMiw2IEBAXG4gICogQGFsaWduOiByZXF1ZXN0ZWQgYWxpZ25tZW50XG4gICpcbiAgKiBSZXR1cm5zIG9mZnNldCBpbiB0aGUgbWFwIG9yIC0xIGlmIG91dCBvZiBzcGFjZS5cbi0gKlxuLSAqIE5vdCBzYWZlIHRvIGNhbGwgZnJvbSBhbiBpbnRlcnJ1cHQgKHVzZXMgc3Bpbl9sb2NrKS5cbiAgKi9cbiBpbnQgYml0X21hcF9zdHJpbmdfZ2V0KHN0cnVjdCBiaXRfbWFwICp0LCBpbnQgbGVuLCBpbnQgYWxpZ24pXG4ge1xuQEAgLTMxLDYgJiM0MzsyOSw3IEBAIGludCBiaXRfbWFwX3N0cmluZ19nZXQoc3RydWN0IGJpdF9tYXAgKnQsIGludCBsZW4sIGludCBhbGlnbilcbiBcdGludCBvZmZfbmV3O1xuIFx0aW50IGFsaWduMTtcbiBcdGludCBpLCBjb2xvcjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuIFx0aWYgKHQtXHUwMDNlbnVtX2NvbG9ycykge1xuIFx0XHQvKiBhbGlnbiBpcyBvdmVybG9hZGVkIHRvIGJlIHRoZSBwYWdlIGNvbG9yICovXG5AQCAtNTAsNyAmIzQzOzQ5LDcgQEAgaW50IGJpdF9tYXBfc3RyaW5nX2dldChzdHJ1Y3QgYml0X21hcCAqdCwgaW50IGxlbiwgaW50IGFsaWduKVxuIFx0XHRCVUcoKTtcbiBcdGNvbG9yIFx1MDAyNj0gYWxpZ24xO1xuIFxuLVx0c3Bpbl9sb2NrKFx1MDAyNnQtXHUwMDNlbG9jayk7XG4mIzQzO1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRpZiAobGVuIFx1MDAzYyB0LVx1MDAzZWxhc3Rfc2l6ZSlcbiBcdFx0b2Zmc2V0ID0gdC1cdTAwM2VmaXJzdF9mcmVlO1xuIFx0ZWxzZVxuQEAgLTY0LDcgJiM0Mzs2Myw3IEBAIGludCBiaXRfbWFwX3N0cmluZ19nZXQoc3RydWN0IGJpdF9tYXAgKnQsIGludCBsZW4sIGludCBhbGlnbilcbiBcdFx0aWYgKG9mZnNldCBcdTAwM2U9IHQtXHUwMDNlc2l6ZSlcbiBcdFx0XHRvZmZzZXQgPSAwO1xuIFx0XHRpZiAoY291bnQgJiM0MzsgbGVuIFx1MDAzZSB0LVx1MDAzZXNpemUpIHtcbi1cdFx0XHRzcGluX3VubG9jayhcdTAwMjZ0LVx1MDAzZWxvY2spO1xuJiM0MztcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnQtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIC8qIFAzICovIHByaW50ayhLRVJOX0VSUlxuICAgXCYjMzQ7Yml0bWFwIG91dDogc2l6ZSAlZCB1c2VkICVkIG9mZiAlZCBsZW4gJWQgYWxpZ24gJWQgY291bnQgJWRcXG5cJiMzNDssXG4gICB0LVx1MDAzZXNpemUsIHQtXHUwMDNldXNlZCwgb2Zmc2V0LCBsZW4sIGFsaWduLCBjb3VudCk7XG5AQCAtOTAsNyAmIzQzOzg5LDcgQEAgaW50IGJpdF9tYXBfc3RyaW5nX2dldChzdHJ1Y3QgYml0X21hcCAqdCwgaW50IGxlbiwgaW50IGFsaWduKVxuIFx0XHRcdFx0XHR0LVx1MDAzZWxhc3Rfb2ZmID0gMDtcbiBcdFx0XHRcdHQtXHUwMDNldXNlZCAmIzQzOz0gbGVuO1xuIFx0XHRcdFx0dC1cdTAwM2VsYXN0X3NpemUgPSBsZW47XG4tXHRcdFx0XHRzcGluX3VubG9jayhcdTAwMjZ0LVx1MDAzZWxvY2spO1xuJiM0MztcdFx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRcdFx0XHRyZXR1cm4gb2Zmc2V0O1xuIFx0XHRcdH1cbiBcdFx0fVxuQEAgLTEwMywxMCAmIzQzOzEwMiwxMSBAQCBpbnQgYml0X21hcF9zdHJpbmdfZ2V0KHN0cnVjdCBiaXRfbWFwICp0LCBpbnQgbGVuLCBpbnQgYWxpZ24pXG4gdm9pZCBiaXRfbWFwX2NsZWFyKHN0cnVjdCBiaXRfbWFwICp0LCBpbnQgb2Zmc2V0LCBpbnQgbGVuKVxuIHtcbiBcdGludCBpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4gXHRpZiAodC1cdTAwM2V1c2VkIFx1MDAzYyBsZW4pXG4gXHRcdEJVRygpO1x0XHQvKiBNdWNoIHRvbyBsYXRlIHRvIGRvIGFueSBnb29kLCBidXQgYWxhcy4uLiAqL1xuLVx0c3Bpbl9sb2NrKFx1MDAyNnQtXHUwMDNlbG9jayk7XG4mIzQzO1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBsZW47IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGlmICh0ZXN0X2JpdChvZmZzZXQgJiM0MzsgaSwgdC1cdTAwM2VtYXApID09IDApXG4gXHRcdFx0QlVHKCk7XG5AQCAtMTE1LDcgJiM0MzsxMTUsNyBAQCB2b2lkIGJpdF9tYXBfY2xlYXIoc3RydWN0IGJpdF9tYXAgKnQsIGludCBvZmZzZXQsIGludCBsZW4pXG4gXHRpZiAob2Zmc2V0IFx1MDAzYyB0LVx1MDAzZWZpcnN0X2ZyZWUpXG4gXHRcdHQtXHUwMDNlZmlyc3RfZnJlZSA9IG9mZnNldDtcbiBcdHQtXHUwMDNldXNlZCAtPSBsZW47XG4tXHRzcGluX3VubG9jayhcdTAwMjZ0LVx1MDAzZWxvY2spO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gfVxuIFxuIHZvaWQgYml0X21hcF9pbml0KHN0cnVjdCBiaXRfbWFwICp0LCB1bnNpZ25lZCBsb25nICptYXAsIGludCBzaXplKVxuZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbW0vc3JtbXUuYyBiL2FyY2gvc3BhcmMvbW0vc3JtbXUuY1xuaW5kZXggOWE3NDkwMmFkMTgxNC4uMmEyYzdiZDIxMDExNCAxMDA2NDRcbi0tLSBhL2FyY2gvc3BhcmMvbW0vc3JtbXUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zcGFyYy9tbS9zcm1tdS5jXG5AQCAtMzU5LDE5ICYjNDM7MzU5LDM5IEBAIHBndGFibGVfdCBwdGVfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFx0cmV0dXJuIHB0ZXA7XG4gfVxuIFxuLXZvaWQgcHRlX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwdGVwKVxuJiM0MztzdGF0aWMgdm9pZCBfX3B0ZV9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcHRlcClcbiB7XG4mIzQzO1x0Y29uc3QgYm9vbCBwcm9jZXNzX2NvbnRleHQgPSBtbTtcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuIFxuIFx0cGFnZSA9IHBmbl90b19wYWdlKF9fbm9jYWNoZV9wYSgodW5zaWduZWQgbG9uZylwdGVwKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4tXHRzcGluX2xvY2soXHUwMDI2bW0tXHUwMDNlcGFnZV90YWJsZV9sb2NrKTtcbiYjNDM7XHRpZiAocHJvY2Vzc19jb250ZXh0KVxuJiM0MztcdFx0c3Bpbl9sb2NrKFx1MDAyNm1tLVx1MDAzZXBhZ2VfdGFibGVfbG9jayk7XG4gXHRpZiAocGFnZV9yZWZfZGVjX3JldHVybihwYWdlKSA9PSAxKVxuIFx0XHRwYWdldGFibGVfZHRvcihwYWdlX3B0ZGVzYyhwYWdlKSk7XG4tXHRzcGluX3VubG9jayhcdTAwMjZtbS1cdTAwM2VwYWdlX3RhYmxlX2xvY2spO1xuJiM0MztcdGlmIChwcm9jZXNzX2NvbnRleHQpXG4mIzQzO1x0XHRzcGluX3VubG9jayhcdTAwMjZtbS1cdTAwM2VwYWdlX3RhYmxlX2xvY2spO1xuIFxuIFx0c3JtbXVfZnJlZV9ub2NhY2hlKHB0ZXAsIFNSTU1VX1BURV9UQUJMRV9TSVpFKTtcbiB9XG4gXG4mIzQzO3ZvaWQgcHRlX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwdGVwKVxuJiM0Mzt7XG4mIzQzO1x0X19wdGVfZnJlZShtbSwgcHRlcCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgX190bGJfcmVtb3ZlX3RhYmxlKHZvaWQgKnRhYmxlKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgdW5zaWduZWQgbG9uZyBlbmNvZGVkID0gKHVuc2lnbmVkIGxvbmcpdGFibGU7XG4mIzQzO1x0Y29uc3QgdW5zaWduZWQgbG9uZyBhZGRyID0gZW5jb2RlZCBcdTAwMjYgfjFVTDtcbiYjNDM7XHRjb25zdCBib29sIGlzX3BtZCA9IGVuY29kZWQgXHUwMDI2IDE7XG4mIzQzO1xuJiM0MztcdGlmIChpc19wbWQpXG4mIzQzO1x0XHRmcmVlX3BtZF9mYXN0KChwbWRfdCAqKWFkZHIpO1xuJiM0MztcdGVsc2UgLyogQ2FsbGVkIGZyb20gc29mdGlycSBjb250ZXh0LCBubyBtbS4gKi9cbiYjNDM7XHRcdF9fcHRlX2ZyZWUoTlVMTCwgKHBndGFibGVfdClhZGRyKTtcbiYjNDM7fVxuJiM0MztcbiAvKiBjb250ZXh0IGhhbmRsaW5nIC0gYSBkeW5hbWljYWxseSBzaXplZCBwb29sIGlzIHVzZWQgKi9cbiAjZGVmaW5lIE5PX0NPTlRFWFRcdC0xXG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC91bS9LY29uZmlnIGIvYXJjaC91bS9LY29uZmlnXG5pbmRleCBkOTU0MWQxM2Q5ZWIwLi45NGI4ZmY3MGY1NzhiIDEwMDY0NFxuLS0tIGEvYXJjaC91bS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3VtL0tjb25maWdcbkBAIC00NCw3ICYjNDM7NDQsNiBAQCBjb25maWcgVU1MXG4gXHRzZWxlY3QgSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTXG4gXHRzZWxlY3QgVEhSRUFEX0lORk9fSU5fVEFTS1xuIFx0c2VsZWN0IFNQQVJTRV9JUlFcbi1cdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG4gXG4gY29uZmlnIE1NVVxuIFx0Ym9vbFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcgYi9hcmNoL3g4Ni9LY29uZmlnXG5pbmRleCBhOGMzYjNkMzFhMjc2Li42ZTVlNDYyZWMwNTlhIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvS2NvbmZpZ1xuQEAgLTI4Myw3ICYjNDM7MjgzLDYgQEAgY29uZmlnIFg4NlxuIFx0c2VsZWN0IEhBVkVfUEVSRl9SRUdTXG4gXHRzZWxlY3QgSEFWRV9QRVJGX1VTRVJfU1RBQ0tfRFVNUFxuIFx0c2VsZWN0IEFTWU5DX0tFUk5FTF9QR1RBQkxFX0ZSRUVcdGlmIElPTU1VX1NWQVxuLVx0c2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcbiBcdHNlbGVjdCBNTVVfR0FUSEVSX01FUkdFX1ZNQVNcbiBcdHNlbGVjdCBIQVZFX1BPU0lYX0NQVV9USU1FUlNfVEFTS19XT1JLXG4gXHRzZWxlY3QgSEFWRV9SRUdTX0FORF9TVEFDS19BQ0NFU1NfQVBJXG5kaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vdGxiLmggYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS90bGIuaFxuaW5kZXggOGMzY2ViNDI3MDE4MC4uNmZiN2I3ODE1NGY2MiAxMDA2NDRcbi0tLSBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3RsYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS90bGIuaFxuQEAgLTE2LDcgJiM0MzsxNiw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtLWdlbmVyaWMvdGxiLmhcdTAwM2VcbiBcbi0jZGVmaW5lIF9fcHRlX2ZyZWVfdGxiKHRsYiwgcHRlLCBhZGRyZXNzKVx0cHRlX2ZyZWUoKHRsYiktXHUwMDNlbW0sIHB0ZSlcbiYjNDM7I2RlZmluZSBfX3B0ZV9mcmVlX3RsYih0bGIsIHB0ZSwgYWRkcmVzcylcdHRsYl9yZW1vdmVfcHRkZXNjKCh0bGIpLCBwYWdlX3B0ZGVzYyhwdGUpKVxuIFxuIHZvaWQgY2hlY2tfdGxiX3Nhbml0eSh2b2lkKTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3RsYi5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaFxuaW5kZXggYmRjYzI3NzhhYzY0Zi4uMDQ0ZGFiYzFmZTljYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmhcbkBAIC02NywxMSAmIzQzOzY3LDggQEBcbiAgKiAgLSB0bGJfcmVtb3ZlX3RhYmxlKClcbiAgKlxuICAqICAgIHRsYl9yZW1vdmVfdGFibGUoKSBpcyB0aGUgYmFzaWMgcHJpbWl0aXZlIHRvIGZyZWUgcGFnZS10YWJsZSBkaXJlY3Rvcmllc1xuLSAqICAgIChfX3AqX2ZyZWVfdGxiKCkpLiAgSW4gaXQmIzM5O3MgbW9zdCBwcmltaXRpdmUgZm9ybSBpdCBpcyBhbiBhbGlhcyBmb3Jcbi0gKiAgICB0bGJfcmVtb3ZlX3BhZ2UoKSBiZWxvdywgZm9yIHdoZW4gcGFnZSBkaXJlY3RvcmllcyBhcmUgcGFnZXMgYW5kIGhhdmUgbm9cbi0gKiAgICBhZGRpdGlvbmFsIGNvbnN0cmFpbnRzLlxuLSAqXG4tICogICAgU2VlIGFsc28gTU1VX0dBVEhFUl9UQUJMRV9GUkVFIGFuZCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFLlxuJiM0MzsgKiAgICAoX19wKl9mcmVlX3RsYigpKS4gIFBhZ2UgZGlyZWN0b3JpZXMgYXJlIGZyZWVkIGFmdGVyIGFuIFJDVSBncmFjZVxuJiM0MzsgKiAgICBwZXJpb2QgLSBzZWUgdGhlIGNvbW1lbnQgaW4gbW0vbW11X2dhdGhlci5jLlxuICAqXG4gICogIC0gdGxiX3JlbW92ZV9wYWdlKCkgLyB0bGJfcmVtb3ZlX3BhZ2Vfc2l6ZSgpXG4gICogIC0gX190bGJfcmVtb3ZlX2ZvbGlvX3BhZ2VzKCkgLyBfX3RsYl9yZW1vdmVfcGFnZV9zaXplKClcbkBAIC0xNTEsMjQgJiM0MzsxNDgsMTUgQEBcbiAgKiAgVGhpcyBtaWdodCBiZSB1c2VmdWwgaWYgeW91ciBhcmNoaXRlY3R1cmUgaGFzIHNpemUgc3BlY2lmaWMgVExCXG4gICogIGludmFsaWRhdGlvbiBpbnN0cnVjdGlvbnMuXG4gICpcbi0gKiAgTU1VX0dBVEhFUl9UQUJMRV9GUkVFXG4tICpcbi0gKiAgVGhpcyBwcm92aWRlcyB0bGJfcmVtb3ZlX3RhYmxlKCksIHRvIGJlIHVzZWQgaW5zdGVhZCBvZiB0bGJfcmVtb3ZlX3BhZ2UoKVxuLSAqICBmb3IgcGFnZSBkaXJlY3RvcmVzIChfX3AqX2ZyZWVfdGxiKCkpLlxuLSAqXG4tICogIFVzZWZ1bCBpZiB5b3VyIGFyY2hpdGVjdHVyZSBoYXMgbm9uLXBhZ2UgcGFnZSBkaXJlY3Rvcmllcy5cbiYjNDM7ICogIFBhZ2UgZGlyZWN0b3JpZXMgKF9fcCpfZnJlZV90bGIoKSkgYXJlIGFsd2F5cyBmcmVlZCB2aWEgdGxiX3JlbW92ZV90YWJsZSgpLFxuJiM0MzsgKiAgYWZ0ZXIgYW4gUkNVIGdyYWNlIHBlcmlvZCAoc2VlIG1tL21tdV9nYXRoZXIuYykuXG4gICpcbi0gKiAgV2hlbiB1c2VkLCBhbiBhcmNoaXRlY3R1cmUgaXMgZXhwZWN0ZWQgdG8gcHJvdmlkZSBfX3RsYl9yZW1vdmVfdGFibGUoKSBvclxuLSAqICB1c2UgdGhlIGdlbmVyaWMgX190bGJfcmVtb3ZlX3RhYmxlKCksIHdoaWNoIGRvZXMgdGhlIGFjdHVhbCBmcmVlaW5nIG9mIHRoZXNlXG4tICogIHBhZ2VzLlxuJiM0MzsgKiBUaGlzIHNlcmlhbGlzZXMgYWdhaW5zdCBzb2Z0d2FyZSBwYWdlLXRhYmxlIHdhbGtlcnMsIGluY2x1ZGluZyBhcmNoaXRlY3R1cmVzXG4mIzQzOyAqIHdoaWNoIGRvIG5vdCB1c2UgSVBJcyBmb3IgcmVtb3RlIFRMQiBpbnZhbGlkYXRlcy5cbiAgKlxuLSAqICBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG4tICpcbi0gKiAgTGlrZSBNTVVfR0FUSEVSX1RBQkxFX0ZSRUUsIGFuZCBhZGRzIHNlbWktUkNVIHNlbWFudGljcyB0byB0aGUgZnJlZSAoc2VlXG4tICogIGNvbW1lbnQgYmVsb3cpLlxuLSAqXG4tICogIFVzZWZ1bCBpZiB5b3VyIGFyY2hpdGVjdHVyZSBkb2VzbiYjMzk7dCB1c2UgSVBJcyBmb3IgcmVtb3RlIFRMQiBpbnZhbGlkYXRlc1xuLSAqICBhbmQgdGhlcmVmb3JlIGRvZXNuJiMzOTt0IG5hdHVyYWxseSBzZXJpYWxpemUgd2l0aCBzb2Z0d2FyZSBwYWdlLXRhYmxlIHdhbGtlcnMuXG4mIzQzOyAqICBBbiBhcmNoaXRlY3R1cmUgaXMgZXhwZWN0ZWQgdG8gcHJvdmlkZSBfX3RsYl9yZW1vdmVfdGFibGUoKSAoc2VlXG4mIzQzOyAqICBIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRSkgb3IgdXNlIHRoZSBnZW5lcmljIF9fdGxiX3JlbW92ZV90YWJsZSgpLCB3aGljaFxuJiM0MzsgKiAgZG9lcyB0aGUgYWN0dWFsIGZyZWVpbmcgb2YgdGhlc2UgcGFnZXMuXG4gICpcbiAgKiAgTU1VX0dBVEhFUl9OT19GTFVTSF9DQUNIRVxuICAqXG5AQCAtMjAwLDEyICYjNDM7MTg4LDggQEBcbiAgKiAgdmFyaW91cyBwdGVwX2dldF9hbmRfY2xlYXIoKSBmdW5jdGlvbnMuXG4gICovXG4gXG4tI2lmZGVmIENPTkZJR19NTVVfR0FUSEVSX1RBQkxFX0ZSRUVcbi1cbiBzdHJ1Y3QgbW11X3RhYmxlX2JhdGNoIHtcbi0jaWZkZWYgQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcbiBcdHN0cnVjdCByY3VfaGVhZFx0XHRyY3U7XG4tI2VuZGlmXG4gXHR1bnNpZ25lZCBpbnRcdFx0bnI7XG4gXHR2b2lkXHRcdFx0KnRhYmxlc1tdO1xuIH07XG5AQCAtMjI0LDIzICYjNDM7MjA4LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZSh2b2lkICp0YWJsZSlcbiBcbiBleHRlcm4gdm9pZCB0bGJfcmVtb3ZlX3RhYmxlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHZvaWQgKnRhYmxlKTtcbiBcbi0jZWxzZSAvKiAhQ09ORklHX01NVV9HQVRIRVJfVEFCTEVfRlJFRSAqL1xuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfcmVtb3ZlX3BhZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHBhZ2UgKnBhZ2UpO1xuLS8qXG4tICogV2l0aG91dCBNTVVfR0FUSEVSX1RBQkxFX0ZSRUUgdGhlIGFyY2hpdGVjdHVyZSBpcyBhc3N1bWVkIHRvIGhhdmUgcGFnZSBiYXNlZFxuLSAqIHBhZ2UgZGlyZWN0b3JpZXMgYW5kIHdlIGNhbiB1c2UgdGhlIG5vcm1hbCBwYWdlIGJhdGNoaW5nIHRvIGZyZWUgdGhlbS5cbi0gKi9cbi1zdGF0aWMgaW5saW5lIHZvaWQgdGxiX3JlbW92ZV90YWJsZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCB2b2lkICp0YWJsZSlcbi17XG4tXHRzdHJ1Y3QgcHRkZXNjICpwdGRlc2MgPSAoc3RydWN0IHB0ZGVzYyAqKXRhYmxlO1xuLVxuLVx0cGFnZXRhYmxlX2R0b3IocHRkZXNjKTtcbi1cdHRsYl9yZW1vdmVfcGFnZSh0bGIsIHB0ZGVzY19wYWdlKHB0ZGVzYykpO1xuLX1cbi0jZW5kaWYgLyogQ09ORklHX01NVV9HQVRIRVJfVEFCTEVfRlJFRSAqL1xuLVxuLSNpZmRlZiBDT05GSUdfTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxuIC8qXG4gICogVGhpcyBhbGxvd3MgYW4gYXJjaGl0ZWN0dXJlIHRoYXQgZG9lcyBub3QgdXNlIHRoZSBsaW51eCBwYWdlLXRhYmxlcyBmb3JcbiAgKiBoYXJkd2FyZSB0byBza2lwIHRoZSBUTEJJIHdoZW4gZnJlZWluZyBwYWdlIHRhYmxlcy5cbkBAIC0yNTMsMTkgJiM0MzsyMjAsNiBAQCB2b2lkIHRsYl9yZW1vdmVfdGFibGVfc3luY19vbmUodm9pZCk7XG4gXG4gdm9pZCB0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfcmN1KHZvaWQpO1xuIFxuLSNlbHNlXG4tXG4tI2lmZGVmIHRsYl9uZWVkc190YWJsZV9pbnZhbGlkYXRlXG4tI2Vycm9yIHRsYl9uZWVkc190YWJsZV9pbnZhbGlkYXRlKCkgcmVxdWlyZXMgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxuLSNlbmRpZlxuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfb25lKHZvaWQpIHsgfVxuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfcmN1KHZvaWQpIHsgfVxuLVxuLSNlbmRpZiAvKiBDT05GSUdfTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSAqL1xuLVxuLVxuICNpZm5kZWYgQ09ORklHX01NVV9HQVRIRVJfTk9fR0FUSEVSXG4gLypcbiAgKiBJZiB3ZSBjYW4mIzM5O3QgYWxsb2NhdGUgYSBwYWdlIHRvIG1ha2UgYSBiaWcgYmF0Y2ggb2YgcGFnZSBwb2ludGVyc1xuQEAgLTMyNSw5ICYjNDM7Mjc5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHRsYl9mbHVzaF9ybWFwcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3RcbiBzdHJ1Y3QgbW11X2dhdGhlciB7XG4gXHRzdHJ1Y3QgbW1fc3RydWN0XHQqbW07XG4gXG4tI2lmZGVmIENPTkZJR19NTVVfR0FUSEVSX1RBQkxFX0ZSRUVcbiBcdHN0cnVjdCBtbXVfdGFibGVfYmF0Y2hcdCpiYXRjaDtcbi0jZW5kaWZcbiBcbiBcdHVuc2lnbmVkIGxvbmdcdFx0c3RhcnQ7XG4gXHR1bnNpZ25lZCBsb25nXHRcdGVuZDtcbmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZ1xuaW5kZXggYzFkZGY1OWMwZDcxYS4uYmM3YmVmYWZiNDdiNSAxMDA2NDRcbi0tLSBhL21tL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL21tL0tjb25maWdcbkBAIC0xNDY1LDcgJiM0MzsxNDY1LDcgQEAgY29uZmlnIEhBVkVfQVJDSF9UTEJfUkVNT1ZFX1RBQkxFXG4gXG4gY29uZmlnIFBUX1JFQ0xBSU1cbiBcdGRlZl9ib29sIHlcbi1cdGRlcGVuZHMgb24gTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSBcdTAwMjZcdTAwMjYgIUhBVkVfQVJDSF9UTEJfUkVNT1ZFX1RBQkxFXG4mIzQzO1x0ZGVwZW5kcyBvbiBNTVUgXHUwMDI2XHUwMDI2ICFIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRVxuIFx0aGVscFxuIFx0ICBUcnkgdG8gcmVjbGFpbSBlbXB0eSB1c2VyIHBhZ2UgdGFibGUgcGFnZXMgaW4gcGF0aHMgb3RoZXIgdGhhbiBtdW5tYXBcbiBcdCAgYW5kIGV4aXRfbW1hcCBwYXRoLlxuZGlmZiAtLWdpdCBhL21tL2d1cC5jIGIvbW0vZ3VwLmNcbmluZGV4IGViODk4ZWExZWUyMmUuLjYzYjQzNWVjNjA1YzggMTAwNjQ0XG4tLS0gYS9tbS9ndXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZ3VwLmNcbkBAIC0yNzAwLDggJiM0MzsyNzAwLDkgQEAgRVhQT1JUX1NZTUJPTChnZXRfdXNlcl9wYWdlc191bmxvY2tlZCk7XG4gICogQmVmb3JlIGFjdGl2YXRpbmcgdGhpcyBjb2RlLCBwbGVhc2UgYmUgYXdhcmUgdGhhdCB0aGUgZm9sbG93aW5nIGFzc3VtcHRpb25zXG4gICogYXJlIGN1cnJlbnRseSBtYWRlOlxuICAqXG4tICogICopIEVpdGhlciBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFIGlzIGVuYWJsZWQsIGFuZCB0bGJfcmVtb3ZlX3RhYmxlKCkgaXMgdXNlZCB0b1xuLSAqICBmcmVlIHBhZ2VzIGNvbnRhaW5pbmcgcGFnZSB0YWJsZXMgb3IgVExCIGZsdXNoaW5nIHJlcXVpcmVzIElQSSBicm9hZGNhc3QuXG4mIzQzOyAqICAqKSB0bGJfcmVtb3ZlX3RhYmxlKCkgaXMgdXNlZCB0byBmcmVlIHBhZ2VzIGNvbnRhaW5pbmcgcGFnZSB0YWJsZXMsIHdpdGhcbiYjNDM7ICogIHRoZSBmcmVlIGRlZmVycmVkIHVudGlsIGFuIFJDVSBncmFjZSBwZXJpb2QgaGFzIGVsYXBzZWQgKHNlZVxuJiM0MzsgKiAgbW0vbW11X2dhdGhlci5jKS5cbiAgKlxuICAqICAqKSBwdGVzIGNhbiBiZSByZWFkIGF0b21pY2FsbHkgYnkgdGhlIGFyY2hpdGVjdHVyZS5cbiAgKlxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCA1NDQ5NGMzZmE5ODM1Li41MDVmN2I2MmZmMjgxIDEwMDY0NFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuY1xuQEAgLTI0NzYsNyAmIzQzOzI0NzYsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgemFwX2RlcG9zaXRlZF90YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZClcbiBcdHBndGFibGVfdCBwZ3RhYmxlO1xuIFxuIFx0cGd0YWJsZSA9IHBndGFibGVfdHJhbnNfaHVnZV93aXRoZHJhdyhtbSwgcG1kKTtcbi1cdHB0ZV9mcmVlKG1tLCBwZ3RhYmxlKTtcbiYjNDM7XHRwdGVfZnJlZV9kZWZlcihtbSwgcGd0YWJsZSk7XG4gXHRtbV9kZWNfbnJfcHRlcyhtbSk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL21tL21tdV9nYXRoZXIuYyBiL21tL21tdV9nYXRoZXIuY1xuaW5kZXggMzk4NWQ4NTZkZTdmOS4uMmE3MmE5Njg2NzczYSAxMDA2NDRcbi0tLSBhL21tL21tdV9nYXRoZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbW11X2dhdGhlci5jXG5AQCAtMjE4LDggJiM0MzsyMTgsNiBAQCBib29sIF9fdGxiX3JlbW92ZV9wYWdlX3NpemUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBwYWdlX1xuIFxuICNlbmRpZiAvKiBNTVVfR0FUSEVSX05PX0dBVEhFUiAqL1xuIFxuLSNpZmRlZiBDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFXG4tXG4gc3RhdGljIHZvaWQgX190bGJfcmVtb3ZlX3RhYmxlX2ZyZWUoc3RydWN0IG1tdV90YWJsZV9iYXRjaCAqYmF0Y2gpXG4ge1xuIFx0aW50IGk7XG5AQCAtMjMwLDEwICYjNDM7MjI4LDggQEAgc3RhdGljIHZvaWQgX190bGJfcmVtb3ZlX3RhYmxlX2ZyZWUoc3RydWN0IG1tdV90YWJsZV9iYXRjaCAqYmF0Y2gpXG4gXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYmF0Y2gpO1xuIH1cbiBcbi0jaWZkZWYgQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcbi1cbiAvKlxuLSAqIFNlbWkgUkNVIGZyZWVpbmcgb2YgdGhlIHBhZ2UgZGlyZWN0b3JpZXMuXG4mIzQzOyAqIFJDVSBmcmVlaW5nIG9mIHRoZSBwYWdlIGRpcmVjdG9yaWVzLlxuICAqXG4gICogVGhpcyBpcyBuZWVkZWQgYnkgc29tZSBhcmNoaXRlY3R1cmVzIHRvIGltcGxlbWVudCBzb2Z0d2FyZSBwYWdldGFibGUgd2Fsa2Vycy5cbiAgKlxuQEAgLTI1OSwxMyAmIzQzOzI1NSwxMyBAQCBzdGF0aWMgdm9pZCBfX3RsYl9yZW1vdmVfdGFibGVfZnJlZShzdHJ1Y3QgbW11X3RhYmxlX2JhdGNoICpiYXRjaClcbiAgKiBtZWFucy5cbiAgKlxuICAqIFdoYXQgd2UgZG8gaXMgYmF0Y2ggdGhlIGZyZWVkIGRpcmVjdG9yeSBwYWdlcyAodGFibGVzKSBhbmQgUkNVIGZyZWUgdGhlbS5cbi0gKiBXZSB1c2UgdGhlIHNjaGVkIFJDVSB2YXJpYW50LCBhcyB0aGF0IGd1YXJhbnRlZXMgdGhhdCBJUlEvcHJlZW1wdCBkaXNhYmxpbmdcbi0gKiBob2xkcyBvZmYgZ3JhY2UgcGVyaW9kcy5cbiYjNDM7ICogRGlzYWJsaW5nIElSUXMgb3IgcHJlZW1wdGlvbiBob2xkcyBvZmYgUkNVIGdyYWNlIHBlcmlvZHMsIHNvIHRoaXMgcHJvdGVjdHNcbiYjNDM7ICogYm90aCByY3VfcmVhZF9sb2NrKCkgYW5kIElSUS1kaXNhYmxpbmcgd2Fsa2Vycy5cbiAgKlxuICAqIEhvd2V2ZXIsIGluIG9yZGVyIHRvIGJhdGNoIHRoZXNlIHBhZ2VzIHdlIG5lZWQgdG8gYWxsb2NhdGUgc3RvcmFnZSwgdGhpc1xuICAqIGFsbG9jYXRpb24gaXMgZGVlcCBpbnNpZGUgdGhlIE1NIGNvZGUgYW5kIGNhbiB0aHVzIGVhc2lseSBmYWlsIG9uIG1lbW9yeVxuLSAqIHByZXNzdXJlLiBUbyBndWFyYW50ZWUgcHJvZ3Jlc3Mgd2UgZmFsbCBiYWNrIHRvIHNpbmdsZSB0YWJsZSBmcmVlaW5nLCBzZWVcbi0gKiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGxiX3JlbW92ZV90YWJsZV9vbmUoKS5cbiYjNDM7ICogcHJlc3N1cmUuIFRvIGd1YXJhbnRlZSBwcm9ncmVzcyB3ZSBmYWxsIGJhY2sgdG8gc2luZ2xlIHRhYmxlIGZyZWVpbmcsIHdoaWNoXG4mIzQzOyAqIGlzIGFsc28gUkNVLWRlZmVycmVkIC0gc2VlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0bGJfcmVtb3ZlX3RhYmxlX29uZSgpLlxuICAqXG4gICovXG4gXG5AQCAtMzE1LDE1ICYjNDM7MzExLDYgQEAgdm9pZCB0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfcmN1KHZvaWQpXG4gXHRzeW5jaHJvbml6ZV9yY3UoKTtcbiB9XG4gXG4tI2Vsc2UgLyogIUNPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFICovXG4tXG4tc3RhdGljIHZvaWQgdGxiX3JlbW92ZV90YWJsZV9mcmVlKHN0cnVjdCBtbXVfdGFibGVfYmF0Y2ggKmJhdGNoKVxuLXtcbi1cdF9fdGxiX3JlbW92ZV90YWJsZV9mcmVlKGJhdGNoKTtcbi19XG4tXG4tI2VuZGlmIC8qIENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFICovXG4tXG4gLypcbiAgKiBJZiB3ZSB3YW50IHRsYl9yZW1vdmVfdGFibGUoKSB0byBpbXBseSBUTEIgaW52YWxpZGF0ZXMuXG4gICovXG5AQCAtNDAzLDEzICYjNDM7MzkwLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIHRsYl90YWJsZV9pbml0KHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIpXG4gXHR0bGItXHUwMDNlYmF0Y2ggPSBOVUxMO1xuIH1cbiBcbi0jZWxzZSAvKiAhQ09ORklHX01NVV9HQVRIRVJfVEFCTEVfRlJFRSAqL1xuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfdGFibGVfZmx1c2goc3RydWN0IG1tdV9nYXRoZXIgKnRsYikgeyB9XG4tc3RhdGljIGlubGluZSB2b2lkIHRsYl90YWJsZV9pbml0KHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIpIHsgfVxuLVxuLSNlbmRpZiAvKiBDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFICovXG4tXG4gc3RhdGljIHZvaWQgdGxiX2ZsdXNoX21tdV9mcmVlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIpXG4ge1xuIFx0dGxiX3RhYmxlX2ZsdXNoKHRsYik7XG5kaWZmIC0tZ2l0IGEvbW0vcGd0YWJsZS1nZW5lcmljLmMgYi9tbS9wZ3RhYmxlLWdlbmVyaWMuY1xuaW5kZXggYjkxYjFhOTgwMjljNy4uZmY4ZmYzNzA2NDg1MyAxMDA2NDRcbi0tLSBhL21tL3BndGFibGUtZ2VuZXJpYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wZ3RhYmxlLWdlbmVyaWMuY1xuQEAgLTM4Niw5ICYjNDM7Mzg2LDIxIEBAIHB0ZV90ICpwdGVfb2Zmc2V0X21hcF9yd19ub2xvY2soc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsXG4gICogYmUgcmVhZC1vbmx5L3JlYWQtd3JpdGUgcHJvdGVjdGVkLlxuICAqXG4gICogTm90ZSB0aGF0IGZyZWVfcGd0YWJsZXMoKSwgdXNlZCBhZnRlciB1bm1hcHBpbmcgZGV0YWNoZWQgdm1hcywgb3Igd2hlblxuLSAqIGV4aXRpbmcgdGhlIHdob2xlIG1tLCBkb2VzIG5vdCB0YWtlIHBhZ2UgdGFibGUgbG9jayBiZWZvcmUgZnJlZWluZyBhIHBhZ2Vcbi0gKiB0YWJsZSwgYW5kIG1heSBub3QgdXNlIFJDVSBhdCBhbGw6IFwmIzM0O291dHNpZGVyc1wmIzM0OyBsaWtlIGtodWdlcGFnZWQgc2hvdWxkIGF2b2lkXG4tICogcHRlX29mZnNldF9tYXAoKSBhbmQgY28gb25jZSB0aGUgdm1hIGlzIGRldGFjaGVkIGZyb20gbW0gb3IgbW1fdXNlcnMgaXMgemVyby5cbiYjNDM7ICogZXhpdGluZyB0aGUgd2hvbGUgbW0sIGRvZXMgbm90IHRha2UgdGhlIHBhZ2UgdGFibGUgbG9jayBiZWZvcmUgZnJlZWluZyBhXG4mIzQzOyAqIHRhYmxlLlxuJiM0MzsgKlxuJiM0MzsgKiBIb3dldmVyLCB0aGUgUE1EIGVudHJ5IGlzIGNsZWFyZWQgZmlyc3QsIGFuZCB0aGUgdGFibGUgZnJlZWQgb25seSBhZnRlclxuJiM0MzsgKiBhbiBSQ1UgZ3JhY2UgcGVyaW9kLCBzbyBhIHdhbGtlciB0aGF0IG1hcHBlZCB0aGUgdGFibGUgdW5kZXJcbiYjNDM7ICogcmN1X3JlYWRfbG9jaygpIHN0YXlzIHNhZmUsIGFuZCB0aGUgcG1kX3NhbWUoKSByZWNoZWNrIGluXG4mIzQzOyAqIHB0ZV9vZmZzZXRfbWFwX2xvY2soKSBkZXRlY3RzIHRoZSB0ZWFyZG93bi5cbiYjNDM7ICpcbiYjNDM7ICogVGhlcmVmb3JlIGl0IGlzIHNhZmUgZm9yIFwmIzM0O291dHNpZGVyc1wmIzM0OyBsaWtlIGtodWdlcGFnZWQgdG8gdXNlXG4mIzQzOyAqIHB0ZV9vZmZzZXRfbWFwKCkgYW5kIGNvLiBmb3IgVk1BcyB0aGF0IG1pZ2h0IGJlIHVuZGVyZ29pbmcgcGFnZSB0YWJsZVxuJiM0MzsgKiB0ZWFyZG93bi5cbiYjNDM7ICpcbiYjNDM7ICogTm90ZSB0aGF0IHRoZSBQR0QgaXRzZWxmIGlzIGZyZWVkIGF0IG1tZHJvcCgpIHRpbWUsIG5vdCB1bmRlciBSQ1UgLSBzbyB0aGVcbiYjNDM7ICogd2Fsa2VyIG11c3Qga2VlcCB0aGUgbW0gYWxpdmUgdmlhIG1tZ3JhYigpLiBXaXRoIHRoYXQgaGVsZCwgd2Fsa2luZyByZW1haW5zXG4mIzQzOyAqIHNhZmUgZXZlbiBvbmNlIG1tX3VzZXJzIGhhcyByZWFjaGVkIHplcm8uXG4gICovXG4gcHRlX3QgKnB0ZV9vZmZzZXRfbWFwX2xvY2soc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsXG4gXHRcdFx0ICAgdW5zaWduZWQgbG9uZyBhZGRyLCBzcGlubG9ja190ICoqcHRscClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzo0MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNTVUmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0bGJfcmVtb3ZlX3RhYmxlJiMzNDssCiAgICAmIzM0O3B0ZV9mcmVlX2RlZmVyJiMzNDssCiAgICAmIzM0O3phcF9odWdlX3BtZCYjMzQ7LAogICAgJiMzNDt0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfcmN1JiMzNDssCiAgICAmIzM0O3RsYl9yZW1vdmVfdGFibGVfc3luY19vbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdW5pZmllcyBhbmQgZW5mb3JjZXMgUkNVLWRlZmVycmVkIGZyZWVpbmcgZm9yIHBhZ2UgdGFibGUgcGFnZXMgYWNyb3NzIGFsbCBhcmNoaXRlY3R1cmVzIGJ5IHJlbW92aW5nIGNvbmRpdGlvbmFsIE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBzdGFuZGFyZGl6aW5nIG9uIHRsYl9yZW1vdmVfdGFibGUoKS4gSXQgYWxzbyBtb2RpZmllcyBUSFAgZGVwb3NpdGVkIHRhYmxlIGhhbmRsaW5nIGluIG1tL2h1Z2VfbWVtb3J5LmMgdG8gdXNlIHB0ZV9mcmVlX2RlZmVyKCkgdW5kZXIgUkNVIGFuZCB1cGRhdGVzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBwYWdlIHRhYmxlIHJlbW92YWwgcm91dGluZXMuIFRoZXNlIGNvcmUgTU0gbG9naWMgY2hhbmdlcyBhZmZlY3QgVExCIGdhdGhlcmluZywgcGFnZSB0YWJsZSB0ZWFyaW5nIGRvd24sIGFuZCBtZW1vcnkgcmVjbGFpbSBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI4ZThlMjJmYjJmOTIyYTVkOThhYzI3MmMwNGEzOWZiNWQwYTdlZTEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxIDIzOjQzOjUyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3QKaW5kZXggYTcyOTZmMjUxNzk5Yy4uMWU2NWIxMzlmMzU1OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0CkBAIC01MzcsNiAmIzQzOzUzNywxMiBAQCBXZSBlc3RhYmxpc2ggYmFzaWMgbG9ja2luZyBydWxlcyB3aGVuIGludGVyYWN0aW5nIHdpdGggcGFnZSB0YWJsZXM6CiAqIFdoZW4gY2hhbmdpbmcgYSBwYWdlIHRhYmxlIGVudHJ5IHRoZSBwYWdlIHRhYmxlIGxvY2sgZm9yIHRoYXQgcGFnZSB0YWJsZQogICAqKm11c3QqKiBiZSBoZWxkLCBleGNlcHQgaWYgeW91IGNhbiBzYWZlbHkgYXNzdW1lIG5vYm9keSBjYW4gYWNjZXNzIHRoZSBwYWdlCiAgIHRhYmxlcyBjb25jdXJyZW50bHkgKHN1Y2ggYXMgb24gaW52b2NhdGlvbiBvZiA6YzpmdW5jOmAhZnJlZV9wZ3RhYmxlc2ApLgomIzQzOyogUGFnZSB0YWJsZXMgbWF5IGJlICp3YWxrZWQqIHVuZGVyIFJDVSBhbG9uZSwgYXMgcGFnZSB0YWJsZXMgYXJlIGZyZWVkIG9ubHkKJiM0MzsgIGFmdGVyIGFuIFJDVSBncmFjZSBwZXJpb2QgaGFzIGVsYXBzZWQuIEhvd2V2ZXIsIGFueSBlbnRyeSBmb3VuZCBtdXN0IGJlCiYjNDM7ICByZXZhbGlkYXRlZCBhZnRlciB0aGUgcGFnZSB0YWJsZSBsb2NrIGlzIHRha2VuIChzdWNoIGFzIHRoZQomIzQzOyAgOmM6ZnVuYzpgIXBtZF9zYW1lYCByZWNoZWNrIHBlcmZvcm1lZCBieSA6YzpmdW5jOmAhcHRlX29mZnNldF9tYXBfbG9ja2ApCiYjNDM7ICBiZWZvcmUgaXQgaXMgYWN0ZWQgdXBvbi4gQ2hhbmdpbmcgYW4gZW50cnkgYWx3YXlzIHJlcXVpcmVzIHRoZSBwYWdlIHRhYmxlCiYjNDM7ICBsb2NrLgogKiBSZWFkcyBmcm9tIGFuZCB3cml0ZXMgdG8gcGFnZSB0YWJsZSBlbnRyaWVzIG11c3QgYmUgKmFwcHJvcHJpYXRlbHkqCiAgIGF0b21pYy4gU2VlIHRoZSBzZWN0aW9uIG9uIGF0b21pY2l0eSBiZWxvdyBmb3IgZGV0YWlscy4KICogUG9wdWxhdGluZyBwcmV2aW91c2x5IGVtcHR5IGVudHJpZXMgcmVxdWlyZXMgdGhhdCB0aGUgbW1hcCBvciBWTUEgbG9ja3MgYXJlCmRpZmYgLS1naXQgYS9hcmNoL0tjb25maWcgYi9hcmNoL0tjb25maWcKaW5kZXggNDVjNjU3NzcyMzYyMy4uNmY3NTE2OTE2Nzk3ZSAxMDA2NDQKLS0tIGEvYXJjaC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvS2NvbmZpZwpAQCAtNTI2LDEzICYjNDM7NTI2LDYgQEAgY29uZmlnIEhBVkVfQVJDSF9KVU1QX0xBQkVMCiBjb25maWcgSEFWRV9BUkNIX0pVTVBfTEFCRUxfUkVMQVRJVkUKIAlib29sCiAKLWNvbmZpZyBNTVVfR0FUSEVSX1RBQkxFX0ZSRUUKLQlib29sCi0KLWNvbmZpZyBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFCi0JYm9vbAotCXNlbGVjdCBNTVVfR0FUSEVSX1RBQkxFX0ZSRUUKLQogY29uZmlnIE1NVV9HQVRIRVJfUEFHRV9TSVpFCiAJYm9vbAogCkBAIC01NDgsNyAmIzQzOzU0MSw2IEBAIGNvbmZpZyBNTVVfR0FUSEVSX01FUkdFX1ZNQVMKIAogY29uZmlnIE1NVV9HQVRIRVJfTk9fR0FUSEVSCiAJYm9vbAotCWRlcGVuZHMgb24gTU1VX0dBVEhFUl9UQUJMRV9GUkVFCiAKIGNvbmZpZyBBUkNIX1dBTlRfSVJRU19PRkZfQUNUSVZBVEVfTU0KIAlib29sCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL0tjb25maWcgYi9hcmNoL2FscGhhL0tjb25maWcKaW5kZXggZTUzZWYyZDg4NDYzNi4uOTA2M2M3YmRhNGU0MSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYWxwaGEvS2NvbmZpZwpAQCAtNDIsNyAmIzQzOzQyLDYgQEAgY29uZmlnIEFMUEhBCiAJc2VsZWN0IEFSQ0hfU1RBQ0tXQUxLCiAJc2VsZWN0IENQVV9OT19FRkZJQ0lFTlRfRkZTIGlmICFBTFBIQV9FVjY3CiAJc2VsZWN0IE1NVV9HQVRIRVJfTk9fUkFOR0UKLQlzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRQogCXNlbGVjdCBTUEFSU0VNRU1fRVhUUkVNRSBpZiBTUEFSU0VNRU0KIAlzZWxlY3QgWk9ORV9ETUEKIAlzZWxlY3QgVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVApkaWZmIC0tZ2l0IGEvYXJjaC9hcmMvaW5jbHVkZS9hc20vcGdhbGxvYy5oIGIvYXJjaC9hcmMvaW5jbHVkZS9hc20vcGdhbGxvYy5oCmluZGV4IGRmYWUwNzBmZThkNTUuLjliNmMzN2Y5MmU5N2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2MuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKQEAgLTcyLDcgJiM0Mzs3Miw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwNGRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHA0ZF90ICpwNGRwLCBwdWRfdCAqcHVkcCkKIAlzZXRfcDRkKHA0ZHAsIF9fcDRkKCh1bnNpZ25lZCBsb25nKXB1ZHApKTsKIH0KIAotI2RlZmluZSBfX3B1ZF9mcmVlX3RsYih0bGIsIHBtZCwgYWRkcikgIHB1ZF9mcmVlKCh0bGIpLSZndDttbSwgcG1kKQomIzQzOyNkZWZpbmUgX19wdWRfZnJlZV90bGIodGxiLCBwbWQsIGFkZHIpICB0bGJfcmVtb3ZlX3B0ZGVzYygodGxiKSwgdmlydF90b19wdGRlc2MocG1kKSkKIAogI2VuZGlmCiAKQEAgLTgzLDEwICYjNDM7ODMsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIHB1ZF9wb3B1bGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcHVkX3QgKnB1ZHAsIHBtZF90ICpwbWRwKQogCXNldF9wdWQocHVkcCwgX19wdWQoKHVuc2lnbmVkIGxvbmcpcG1kcCkpOwogfQogCi0jZGVmaW5lIF9fcG1kX2ZyZWVfdGxiKHRsYiwgcG1kLCBhZGRyKSAgcG1kX2ZyZWUoKHRsYiktJmd0O21tLCBwbWQpCiYjNDM7I2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIsIHBtZCwgYWRkcikgIHRsYl9yZW1vdmVfcHRkZXNjKCh0bGIpLCB2aXJ0X3RvX3B0ZGVzYyhwbWQpKQogCiAjZW5kaWYKIAotI2RlZmluZSBfX3B0ZV9mcmVlX3RsYih0bGIsIHB0ZSwgYWRkcikgIHB0ZV9mcmVlKCh0bGIpLSZndDttbSwgcHRlKQomIzQzOyNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLCBwdGUsIGFkZHIpICB0bGJfcmVtb3ZlX3B0ZGVzYygodGxiKSwgcGFnZV9wdGRlc2MocHRlKSkKIAogI2VuZGlmIC8qIF9BU01fQVJDX1BHQUxMT0NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vS2NvbmZpZyBiL2FyY2gvYXJtL0tjb25maWcKaW5kZXggNDA4YWE1OGEyYTViYi4uMGNjMjg5YTcxODRhYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybS9LY29uZmlnCkBAIC0xMzQsNyAmIzQzOzEzNCw2IEBAIGNvbmZpZyBBUk0KIAlzZWxlY3QgSEFWRV9QRVJGX1JFR1MKIAlzZWxlY3QgSEFWRV9QRVJGX1VTRVJfU1RBQ0tfRFVNUAogCXNlbGVjdCBIQVZFX1BPU0lYX0NQVV9USU1FUlNfVEFTS19XT1JLCi0Jc2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgaWYgU01QICZhbXA7JmFtcDsgQVJNX0xQQUUKIAlzZWxlY3QgSEFWRV9SRUdTX0FORF9TVEFDS19BQ0NFU1NfQVBJCiAJc2VsZWN0IEhBVkVfUlNFUQogCXNlbGVjdCBIQVZFX1JVU1QgaWYgQ1BVX0xJVFRMRV9FTkRJQU4gJmFtcDsmYW1wOyBDUFVfMzJ2NyAmYW1wOyZhbXA7ICFLQVNBTgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9LY29uZmlnIGIvYXJjaC9hcm02NC9LY29uZmlnCmluZGV4IDJiYmVkZWQzM2RhMGQuLmI2YzJkZDhiMjYxMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L0tjb25maWcKQEAgLTIyMSw3ICYjNDM7MjIxLDYgQEAgY29uZmlnIEFSTTY0CiAJc2VsZWN0IEhBVkVfUkVMSUFCTEVfU1RBQ0tUUkFDRQogCXNlbGVjdCBIQVZFX1BPU0lYX0NQVV9USU1FUlNfVEFTS19XT1JLCiAJc2VsZWN0IEhBVkVfRlVOQ1RJT05fQVJHX0FDQ0VTU19BUEkKLQlzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRQogCXNlbGVjdCBIQVZFX1JTRVEKIAlzZWxlY3QgSEFWRV9SVVNUIGlmIFJVU1RDX1NVUFBPUlRTX0FSTTY0CiAJc2VsZWN0IEhBVkVfU1RBQ0tQUk9URUNUT1IKZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL0tjb25maWcgYi9hcmNoL2xvb25nYXJjaC9LY29uZmlnCmluZGV4IDljNWRlZjcwNjIyMjIuLmQxYjIzZGE0MDczNzUgMTAwNjQ0Ci0tLSBhL2FyY2gvbG9vbmdhcmNoL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9sb29uZ2FyY2gvS2NvbmZpZwpAQCAtMTg4LDcgJiM0MzsxODgsNiBAQCBjb25maWcgTE9PTkdBUkNICiAJc2VsZWN0IElSUV9MT09OR0FSQ0hfQ1BVCiAJc2VsZWN0IExPQ0tfTU1fQU5EX0ZJTkRfVk1BCiAJc2VsZWN0IE1NVV9HQVRIRVJfTUVSR0VfVk1BUyBpZiBNTVUKLQlzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRQogCXNlbGVjdCBNT0RVTEVTX1VTRV9FTEZfUkVMQSBpZiBNT0RVTEVTCiAJc2VsZWN0IE5FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSwogCXNlbGVjdCBORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOSwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL0tjb25maWcgYi9hcmNoL202OGsvS2NvbmZpZwppbmRleCAxMTgzNWViNTlkOTRkLi5lYjg0YzNhZjkyYzAyIDEwMDY0NAotLS0gYS9hcmNoL202OGsvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL202OGsvS2NvbmZpZwpAQCAtMjksNiAmIzQzOzI5LDcgQEAgY29uZmlnIE02OEsKIAlzZWxlY3QgSEFWRV9BUkNIX0xJQkdDQ19ICiAJc2VsZWN0IEhBVkVfQVJDSF9TRUNDT01QCiAJc2VsZWN0IEhBVkVfQVJDSF9TRUNDT01QX0ZJTFRFUgomIzQzOwlzZWxlY3QgSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEUgaWYgTU1VX01PVE9ST0xBCiAJc2VsZWN0IEhBVkVfQVNNX01PRFZFUlNJT05TCiAJc2VsZWN0IEhBVkVfREVCVUdfQlVHVkVSQk9TRQogCXNlbGVjdCBIQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTIGlmICFDUFVfSEFTX05PX1VOQUxJR05FRApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21jZl9wZ2FsbG9jLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbWNmX3BnYWxsb2MuaAppbmRleCBmYzU0NTRkMzdkYTMxLi5iNTNmZjA5NTBkYjJlIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbWNmX3BnYWxsb2MuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbWNmX3BnYWxsb2MuaApAQCAtMzksMTAgJiM0MzszOSw3IEBAIGV4dGVybiBpbmxpbmUgcG1kX3QgKnBtZF9hbGxvY19rZXJuZWwocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQogc3RhdGljIGlubGluZSB2b2lkIF9fcHRlX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHBndGFibGVfdCBwZ3RhYmxlLAogCQkJCSAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewotCXN0cnVjdCBwdGRlc2MgKnB0ZGVzYyA9IHZpcnRfdG9fcHRkZXNjKHBndGFibGUpOwotCi0JcGFnZXRhYmxlX2R0b3IocHRkZXNjKTsKLQlwYWdldGFibGVfZnJlZShwdGRlc2MpOwomIzQzOwl0bGJfcmVtb3ZlX3B0ZGVzYyh0bGIsIHZpcnRfdG9fcHRkZXNjKHBndGFibGUpKTsKIH0KIAogc3RhdGljIGlubGluZSBwZ3RhYmxlX3QgcHRlX2FsbG9jX29uZShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tb3Rvcm9sYV9wZ2FsbG9jLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbW90b3JvbGFfcGdhbGxvYy5oCmluZGV4IDEwOTFmYjBhZmZiZWUuLmRjZGU0MGU4YjVjNmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tb3Rvcm9sYV9wZ2FsbG9jLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21vdG9yb2xhX3BnYWxsb2MuaApAQCAtMTcsNiAmIzQzOzE3LDcgQEAgZW51bSBtNjhrX3RhYmxlX3R5cGVzIHsKIGV4dGVybiB2b2lkIGluaXRfcG9pbnRlcl90YWJsZSh2b2lkICp0YWJsZSwgaW50IHR5cGUpOwogZXh0ZXJuIHZvaWQgKmdldF9wb2ludGVyX3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgdHlwZSk7CiBleHRlcm4gaW50IGZyZWVfcG9pbnRlcl90YWJsZSh2b2lkICp0YWJsZSwgaW50IHR5cGUpOwomIzQzO2V4dGVybiB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZSh2b2lkICp0YWJsZSk7CiAKIC8qCiAgKiBBbGxvY2F0ZSBhbmQgZnJlZSBwYWdlIHRhYmxlcy4gVGhlIHh4eF9rZXJuZWwoKSB2ZXJzaW9ucyBhcmUKQEAgLTQ3LDcgJiM0Mzs0OCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdGVfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHBndGFibGUpCiBzdGF0aWMgaW5saW5lIHZvaWQgX19wdGVfZnJlZV90bGIoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgcGd0YWJsZV90IHBndGFibGUsCiAJCQkJICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7Ci0JZnJlZV9wb2ludGVyX3RhYmxlKHBndGFibGUsIFRBQkxFX1BURSk7CiYjNDM7CXRsYl9yZW1vdmVfdGFibGUodGxiLCAodm9pZCAqKSgodW5zaWduZWQgbG9uZylwZ3RhYmxlIHwgVEFCTEVfUFRFKSk7CiB9CiAKIApAQCAtNjEsMTAgJiM0Mzs2MiwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBwbWRfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCkKIAlyZXR1cm4gZnJlZV9wb2ludGVyX3RhYmxlKHBtZCwgVEFCTEVfUE1EKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgX19wbWRfZnJlZV90bGIoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgcG1kX3QgKnBtZCwKLQkJCQkgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBfX3BtZF9mcmVlX3RsYihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBwbWRfdCAqcG1kLAomIzQzOwkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKLQlyZXR1cm4gZnJlZV9wb2ludGVyX3RhYmxlKHBtZCwgVEFCTEVfUE1EKTsKJiM0MzsJdGxiX3JlbW92ZV90YWJsZSh0bGIsICh2b2lkICopKCh1bnNpZ25lZCBsb25nKXBtZCB8IFRBQkxFX1BNRCkpOwogfQogCiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tbS9tb3Rvcm9sYS5jIGIvYXJjaC9tNjhrL21tL21vdG9yb2xhLmMKaW5kZXggYjMwYWE2OWE3M2E2YS4uZmZjODA0ODM0NDBiYyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL21tL21vdG9yb2xhLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9tNjhrL21tL21vdG9yb2xhLmMKQEAgLTIwLDYgJiM0MzsyMCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvaW5pdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21lbWJsb2NrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZ2ZwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NsZWFudXAuaCZndDsKIAogI2luY2x1ZGUgJmx0O2FzbS9zZXR1cC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3VhY2Nlc3MuaCZndDsKQEAgLTEwMyw2ICYjNDM7MTA0LDggQEAgc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgcHRhYmxlX2xpc3RbM10gPSB7CiAJTElTVF9IRUFEX0lOSVQocHRhYmxlX2xpc3RbMl0pLAogfTsKIAomIzQzO3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socHRhYmxlX2xvY2spOwomIzQzOwogI2RlZmluZSBQRF9QVEFCTEUocHRkZXNjKSAoKHB0YWJsZV9kZXNjICopJmFtcDsodmlydF90b19wdGRlc2MoKHZvaWQgKikocHRkZXNjKSktJmd0O3B0X2xpc3QpKQogI2RlZmluZSBQRF9QVERFU0MocHRhYmxlKSAobGlzdF9lbnRyeShwdGFibGUsIHN0cnVjdCBwdGRlc2MsIHB0X2xpc3QpKQogI2RlZmluZSBQRF9NQVJLQklUUyhkcCkgKCoodW5zaWduZWQgaW50ICopJmFtcDtQRF9QVERFU0MoZHApLSZndDtwdF9pbmRleCkKQEAgLTEzOSw1MiAmIzQzOzE0Miw2NiBAQCB2b2lkIF9faW5pdCBpbml0X3BvaW50ZXJfdGFibGUodm9pZCAqdGFibGUsIGludCB0eXBlKQogCXJldHVybjsKIH0KIAotdm9pZCAqZ2V0X3BvaW50ZXJfdGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCB0eXBlKQomIzQzOy8qCiYjNDM7ICogRm9yIGEgcG9pbnRlciB0YWJsZSBmb3IgYSB1c2VyIHByb2Nlc3MgYWRkcmVzcyBzcGFjZSwgYQomIzQzOyAqIHRhYmxlIGlzIHRha2VuIGZyb20gYSBwdGRlc2MgYWxsb2NhdGVkIGZvciB0aGUgcHVycG9zZS4gIEVhY2gKJiM0MzsgKiBwdGRlc2MgY2FuIGhvbGQgOCBwb2ludGVyIHRhYmxlcy4gIFRoZSBwdGRlc2MgaXMgcmVtYXBwZWQgaW4KJiM0MzsgKiB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgdG8gYmUgbm9uY2FjaGVhYmxlLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkICphZGRfcG9pbnRlcl90YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IHR5cGUpCiB7Ci0JcHRhYmxlX2Rlc2MgKmRwID0gcHRhYmxlX2xpc3RbdHlwZV0ubmV4dDsKLQl1bnNpZ25lZCBpbnQgbWFzayA9IGxpc3RfZW1wdHkoJmFtcDtwdGFibGVfbGlzdFt0eXBlXSkgPyAwIDogUERfTUFSS0JJVFMoZHApOwotCXVuc2lnbmVkIGludCB0bXAsIG9mZjsKJiM0MzsJc3RydWN0IHB0ZGVzYyAqcHRkZXNjOwomIzQzOwlwdGFibGVfZGVzYyAqbmV3OwomIzQzOwl2b2lkICpwdF9hZGRyOwogCi0JLyoKLQkgKiBGb3IgYSBwb2ludGVyIHRhYmxlIGZvciBhIHVzZXIgcHJvY2VzcyBhZGRyZXNzIHNwYWNlLCBhCi0JICogdGFibGUgaXMgdGFrZW4gZnJvbSBhIHB0ZGVzYyBhbGxvY2F0ZWQgZm9yIHRoZSBwdXJwb3NlLiAgRWFjaAotCSAqIHB0ZGVzYyBjYW4gaG9sZCA4IHBvaW50ZXIgdGFibGVzLiAgVGhlIHB0ZGVzYyBpcyByZW1hcHBlZCBpbgotCSAqIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSB0byBiZSBub25jYWNoZWFibGUuCi0JICovCi0JaWYgKG1hc2sgPT0gMCkgewotCQlzdHJ1Y3QgcHRkZXNjICpwdGRlc2M7Ci0JCXB0YWJsZV9kZXNjICpuZXc7Ci0JCXZvaWQgKnB0X2FkZHI7Ci0KLQkJcHRkZXNjID0gcGFnZXRhYmxlX2FsbG9jKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPLCAwKTsKLQkJaWYgKCFwdGRlc2MpCi0JCQlyZXR1cm4gTlVMTDsKLQotCQlwdF9hZGRyID0gcHRkZXNjX2FkZHJlc3MocHRkZXNjKTsKLQotCQlzd2l0Y2ggKHR5cGUpIHsKLQkJY2FzZSBUQUJMRV9QVEU6Ci0JCQkvKgotCQkJICogbTY4ayBkb2VzbiYjMzk7dCBoYXZlIFNQTElUX1BURV9QVExPQ0tTIGZvciBub3QgaGF2aW5nCi0JCQkgKiBTTVAuCi0JCQkgKi8KLQkJCXBhZ2V0YWJsZV9wdGVfY3RvcihtbSwgcHRkZXNjKTsKLQkJCWJyZWFrOwotCQljYXNlIFRBQkxFX1BNRDoKLQkJCXBhZ2V0YWJsZV9wbWRfY3RvcihtbSwgcHRkZXNjKTsKLQkJCWJyZWFrOwotCQljYXNlIFRBQkxFX1BHRDoKLQkJCXBhZ2V0YWJsZV9wZ2RfY3RvcihwdGRlc2MpOwotCQkJYnJlYWs7Ci0JCX0KJiM0MzsJcHRkZXNjID0gcGFnZXRhYmxlX2FsbG9jKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPLCAwKTsKJiM0MzsJaWYgKCFwdGRlc2MpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJcHRfYWRkciA9IHB0ZGVzY19hZGRyZXNzKHB0ZGVzYyk7CiYjNDM7CiYjNDM7CXN3aXRjaCAodHlwZSkgewomIzQzOwljYXNlIFRBQkxFX1BURToKJiM0MzsJCS8qCiYjNDM7CQkgKiBtNjhrIGRvZXNuJiMzOTt0IGhhdmUgU1BMSVRfUFRFX1BUTE9DS1MgZm9yIG5vdCBoYXZpbmcKJiM0MzsJCSAqIFNNUC4KJiM0MzsJCSAqLwomIzQzOwkJcGFnZXRhYmxlX3B0ZV9jdG9yKG1tLCBwdGRlc2MpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgVEFCTEVfUE1EOgomIzQzOwkJcGFnZXRhYmxlX3BtZF9jdG9yKG1tLCBwdGRlc2MpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgVEFCTEVfUEdEOgomIzQzOwkJcGFnZXRhYmxlX3BnZF9jdG9yKHB0ZGVzYyk7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwltbXVfcGFnZV9jdG9yKHB0X2FkZHIpOwomIzQzOwomIzQzOwluZXcgPSBQRF9QVEFCTEUocHRfYWRkcik7CiAKLQkJbW11X3BhZ2VfY3RvcihwdF9hZGRyKTsKJiM0MzsJUERfTUFSS0JJVFMobmV3KSA9IHB0YWJsZV9tYXNrKHR5cGUpIC0gMTsKJiM0MzsJc2NvcGVkX2d1YXJkKHNwaW5sb2NrX2lycXNhdmUsICZhbXA7cHRhYmxlX2xvY2spCiYjNDM7CQlsaXN0X2FkZChuZXcsICZhbXA7cHRhYmxlX2xpc3RbdHlwZV0pOwogCi0JCW5ldyA9IFBEX1BUQUJMRShwdF9hZGRyKTsKLQkJUERfTUFSS0JJVFMobmV3KSA9IHB0YWJsZV9tYXNrKHR5cGUpIC0gMTsKLQkJbGlzdF9hZGRfdGFpbChuZXcsIGRwKTsKJiM0MzsJcmV0dXJuIChwbWRfdCAqKXB0X2FkZHI7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgKmdldF9wb2ludGVyX3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgdHlwZSkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCB0bXAsIG9mZjsKJiM0MzsJdW5zaWduZWQgbG9uZyBtYXNrOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwlwdGFibGVfZGVzYyAqZHA7CiYjNDM7CXZvaWQgKnJldDsKIAotCQlyZXR1cm4gKHBtZF90ICopcHRfYWRkcjsKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtwdGFibGVfbG9jaywgZmxhZ3MpOwomIzQzOwlkcCA9IHB0YWJsZV9saXN0W3R5cGVdLm5leHQ7CiYjNDM7CW1hc2sgPSBsaXN0X2VtcHR5KCZhbXA7cHRhYmxlX2xpc3RbdHlwZV0pID8gMCA6IFBEX01BUktCSVRTKGRwKTsKJiM0MzsKJiM0MzsJaWYgKG1hc2sgPT0gMCkgewomIzQzOwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3B0YWJsZV9sb2NrLCBmbGFncyk7CiYjNDM7CQlyZXR1cm4gYWRkX3BvaW50ZXJfdGFibGUobW0sIHR5cGUpOwogCX0KIAogCWZvciAodG1wID0gMSwgb2ZmID0gMDsgKG1hc2sgJmFtcDsgdG1wKSA9PSAwOyB0bXAgJmx0OyZsdDs9IDEsIG9mZiAmIzQzOz0gcHRhYmxlX3NpemUodHlwZSkpCkBAIC0xOTQsNyAmIzQzOzIxMSwxMCBAQCB2b2lkICpnZXRfcG9pbnRlcl90YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IHR5cGUpCiAJCS8qIG1vdmUgdG8gZW5kIG9mIGxpc3QgKi8KIAkJbGlzdF9tb3ZlX3RhaWwoZHAsICZhbXA7cHRhYmxlX2xpc3RbdHlwZV0pOwogCX0KLQlyZXR1cm4gcHRkZXNjX2FkZHJlc3MoUERfUFRERVNDKGRwKSkgJiM0Mzsgb2ZmOwomIzQzOwomIzQzOwlyZXQgPSBwdGRlc2NfYWRkcmVzcyhQRF9QVERFU0MoZHApKSAmIzQzOyBvZmY7CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtwdGFibGVfbG9jaywgZmxhZ3MpOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiBpbnQgZnJlZV9wb2ludGVyX3RhYmxlKHZvaWQgKnRhYmxlLCBpbnQgdHlwZSkKQEAgLTIwMyw2ICYjNDM7MjIzLDkgQEAgaW50IGZyZWVfcG9pbnRlcl90YWJsZSh2b2lkICp0YWJsZSwgaW50IHR5cGUpCiAJdW5zaWduZWQgbG9uZyBwdGFibGUgPSAodW5zaWduZWQgbG9uZyl0YWJsZTsKIAl1bnNpZ25lZCBsb25nIHB0X2FkZHIgPSBwdGFibGUgJmFtcDsgUEFHRV9NQVNLOwogCXVuc2lnbmVkIGludCBtYXNrID0gMVUgJmx0OyZsdDsgKChwdGFibGUgLSBwdF9hZGRyKS9wdGFibGVfc2l6ZSh0eXBlKSk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7cHRhYmxlX2xvY2ssIGZsYWdzKTsKIAogCWRwID0gUERfUFRBQkxFKHB0X2FkZHIpOwogCWlmIChQRF9NQVJLQklUUyAoZHApICZhbXA7IG1hc2spCkBAIC0yMTMsNiAmIzQzOzIzNiw4IEBAIGludCBmcmVlX3BvaW50ZXJfdGFibGUodm9pZCAqdGFibGUsIGludCB0eXBlKQogCWlmIChQRF9NQVJLQklUUyhkcCkgPT0gcHRhYmxlX21hc2sodHlwZSkpIHsKIAkJLyogYWxsIHRhYmxlcyBpbiBwdGRlc2MgYXJlIGZyZWUsIGZyZWUgcHRkZXNjICovCiAJCWxpc3RfZGVsKGRwKTsKJiM0MzsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtwdGFibGVfbG9jaywgZmxhZ3MpOwomIzQzOwogCQltbXVfcGFnZV9kdG9yKCh2b2lkICopcHRfYWRkcik7CiAJCXBhZ2V0YWJsZV9kdG9yX2ZyZWUodmlydF90b19wdGRlc2MoKHZvaWQgKilwdF9hZGRyKSk7CiAJCXJldHVybiAxOwpAQCAtMjIzLDkgJiM0MzsyNDgsMjEgQEAgaW50IGZyZWVfcG9pbnRlcl90YWJsZSh2b2lkICp0YWJsZSwgaW50IHR5cGUpCiAJCSAqLwogCQlsaXN0X21vdmUoZHAsICZhbXA7cHRhYmxlX2xpc3RbdHlwZV0pOwogCX0KJiM0MzsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3B0YWJsZV9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKJiM0Mzt2b2lkIF9fdGxiX3JlbW92ZV90YWJsZSh2b2lkICp0YWJsZSkKJiM0Mzt7CiYjNDM7CS8qIFRoZSBib3R0b20gMiBiaXRzIGFyZSB1c2VkIHRvIGVuY29kZSBwYWdlIHRhYmxlIHR5cGUuICovCiYjNDM7CWNvbnN0IHVuc2lnbmVkIGxvbmcgZW5jb2RlZCA9ICh1bnNpZ25lZCBsb25nKXRhYmxlOwomIzQzOwl2b2lkICphZGRyID0gKHZvaWQgKikoZW5jb2RlZCAmYW1wOyB+M1VMKTsKJiM0MzsJY29uc3QgaW50IHR5cGUgPSBlbmNvZGVkICZhbXA7IDM7CiYjNDM7CiYjNDM7CWZyZWVfcG9pbnRlcl90YWJsZShhZGRyLCB0eXBlKTsKJiM0Mzt9CiYjNDM7CiAvKiBzaXplIG9mIG1lbW9yeSBhbHJlYWR5IG1hcHBlZCBpbiBoZWFkLlMgKi8KIGV4dGVybiBfX2luaXRkYXRhIHVuc2lnbmVkIGxvbmcgbTY4a19pbml0X21hcHBlZF9zaXplOwogCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcGdhbGxvYy5oIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3BnYWxsb2MuaAppbmRleCAwODRhOGEwZGMyMzk1Li5mZmVlNmEwMDkyMTlhIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcGdhbGxvYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKQEAgLTI1LDcgJiM0MzsyNSw3IEBAIGV4dGVybiB2b2lkIF9fYmFkX3B0ZShwbWRfdCAqcG1kKTsKIAogZXh0ZXJuIHB0ZV90ICpwdGVfYWxsb2Nfb25lX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CiAKLSNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLCBwdGUsIGFkZHIpCXB0ZV9mcmVlKCh0bGIpLSZndDttbSwgKHB0ZSkpCiYjNDM7I2RlZmluZSBfX3B0ZV9mcmVlX3RsYih0bGIsIHB0ZSwgYWRkcikJdGxiX3JlbW92ZV9wdGRlc2MoKHRsYiksIHBhZ2VfcHRkZXNjKHB0ZSkpCiAKICNkZWZpbmUgcG1kX3BvcHVsYXRlKG1tLCBwbWQsIHB0ZSkgXAogCQkJKHBtZF92YWwoKihwbWQpKSA9ICh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwdGUpKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL0tjb25maWcgYi9hcmNoL21pcHMvS2NvbmZpZwppbmRleCBlMmViOTYyN2JkMTRjLi5mMGM0M2QxMThjYTAwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL21pcHMvS2NvbmZpZwpAQCAtOTcsNyAmIzQzOzk3LDYgQEAgY29uZmlnIE1JUFMKIAlzZWxlY3QgSVJRX0ZPUkNFRF9USFJFQURJTkcKIAlzZWxlY3QgSVNBIGlmIEVJU0EKIAlzZWxlY3QgTE9DS19NTV9BTkRfRklORF9WTUEKLQlzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRQogCXNlbGVjdCBNT0RVTEVTX1VTRV9FTEZfUkVMIGlmIE1PRFVMRVMKIAlzZWxlY3QgTU9EVUxFU19VU0VfRUxGX1JFTEEgaWYgTU9EVUxFUyAmYW1wOyZhbXA7IDY0QklUCiAJc2VsZWN0IFBFUkZfVVNFX1ZNQUxMT0MKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL0tjb25maWcgYi9hcmNoL3BhcmlzYy9LY29uZmlnCmluZGV4IGQzYWZhYzJmMGQ5YmUuLjc3ZjY3MDI4YWQ4OWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wYXJpc2MvS2NvbmZpZwpAQCAtODAsNyAmIzQzOzgwLDYgQEAgY29uZmlnIFBBUklTQwogCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCiAJc2VsZWN0IENQVV9OT19FRkZJQ0lFTlRfRkZTCiAJc2VsZWN0IFRIUkVBRF9JTkZPX0lOX1RBU0sKLQlzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRQogCXNlbGVjdCBORUVEX0RNQV9NQVBfU1RBVEUKIAlzZWxlY3QgTkVFRF9TR19ETUFfTEVOR1RICiAJc2VsZWN0IEhBVkVfQVJDSF9LR0RCCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnCmluZGV4IDI1ODBlMjdlNDMyODcuLjA3NjdjZmNiYWE0MjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnCkBAIC0zMDcsNyAmIzQzOzMwNyw2IEBAIGNvbmZpZyBQUEMKIAlzZWxlY3QgS0FTQU5fVk1BTExPQwkJCWlmIEtBU0FOICZhbXA7JmFtcDsgRVhFQ01FTQogCXNlbGVjdCBMT0NLX01NX0FORF9GSU5EX1ZNQQogCXNlbGVjdCBNTVVfR0FUSEVSX1BBR0VfU0laRQotCXNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFCiAJc2VsZWN0IEhBVkVfQVJDSF9UTEJfUkVNT1ZFX1RBQkxFCiAJc2VsZWN0IE1NVV9HQVRIRVJfTUVSR0VfVk1BUwogCXNlbGVjdCBNTVVfTEFaWV9UTEJfU0hPT1RET1dOCQlpZiBQUENfQk9PSzNTXzY0CmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L0tjb25maWcgYi9hcmNoL3Jpc2N2L0tjb25maWcKaW5kZXggNTA1ZWVkNGFmOTMyYi4uNzc0MWE0Mjg3NDk4MSAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvS2NvbmZpZwpAQCAtMjA4LDcgJiM0MzsyMDgsNiBAQCBjb25maWcgUklTQ1YKIAlzZWxlY3QgSVJRX0ZPUkNFRF9USFJFQURJTkcKIAlzZWxlY3QgS0FTQU5fVk1BTExPQyBpZiBLQVNBTgogCXNlbGVjdCBMT0NLX01NX0FORF9GSU5EX1ZNQQotCXNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFIGlmIFNNUCAmYW1wOyZhbXA7IE1NVQogCXNlbGVjdCBNT0RVTEVTX1VTRV9FTEZfUkVMQSBpZiBNT0RVTEVTCiAJc2VsZWN0IE9GCiAJc2VsZWN0IE9GX0VBUkxZX0ZMQVRUUkVFCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnCmluZGV4IGI4OGI4NTA0MjEzNjkuLmEzNDM3NmMwNWY2ZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9LY29uZmlnCkBAIC0yNjcsNyAmIzQzOzI2Nyw2IEBAIGNvbmZpZyBTMzkwCiAJc2VsZWN0IExPQ0tfTU1fQU5EX0ZJTkRfVk1BCiAJc2VsZWN0IE1NVV9HQVRIRVJfTUVSR0VfVk1BUwogCXNlbGVjdCBNTVVfR0FUSEVSX05PX0dBVEhFUgotCXNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFCiAJc2VsZWN0IE1PRFVMRVNfVVNFX0VMRl9SRUxBCiAJc2VsZWN0IE5FRURfRE1BX01BUF9TVEFURQlpZiBQQ0kKIAlzZWxlY3QgTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LCmRpZmYgLS1naXQgYS9hcmNoL3NoL0tjb25maWcgYi9hcmNoL3NoL0tjb25maWcKaW5kZXggZDYwZjFkNWE5NGMwZi4uZmU4NTlkZWY5MThjYyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvc2gvS2NvbmZpZwpAQCAtMzMsNiAmIzQzOzMzLDcgQEAgY29uZmlnIFNVUEVSSAogCXNlbGVjdCBIQVZFX0FSQ0hfQVVESVRTWVNDQUxMCiAJc2VsZWN0IEhBVkVfQVJDSF9LR0RCCiAJc2VsZWN0IEhBVkVfQVJDSF9TRUNDT01QX0ZJTFRFUgomIzQzOwlzZWxlY3QgSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEUgaWYgWDJUTEIKIAlzZWxlY3QgSEFWRV9BUkNIX1RSQUNFSE9PSwogCXNlbGVjdCBIQVZFX0RFQlVHX0JVR1ZFUkJPU0UKIAlzZWxlY3QgSEFWRV9ERUJVR19LTUVNTEVBSwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BnYWxsb2MuaAppbmRleCA2ZmU3MTIzZDM4ZmE5Li42N2NlN2ZhMjNmYTEyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BnYWxsb2MuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BnYWxsb2MuaApAQCAtMTcsNyAmIzQzOzE3LDExIEBAIGV4dGVybiB2b2lkIHBnZF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKTsKIGV4dGVybiB2b2lkIHB1ZF9wb3B1bGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcHVkX3QgKnB1ZHAsIHBtZF90ICpwbWQpOwogZXh0ZXJuIHBtZF90ICpwbWRfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpOwogZXh0ZXJuIHZvaWQgcG1kX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQpOwotI2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIsIHBtZHAsIGFkZHIpCQlwbWRfZnJlZSgodGxiKS0mZ3Q7bW0sIChwbWRwKSkKJiM0MztleHRlcm4gdm9pZCBfX3RsYl9yZW1vdmVfdGFibGUodm9pZCAqdGFibGUpOwomIzQzOwomIzQzOy8qIFBNRHMgYXJlIHNsYWItYWxsb2NhdGVkLCB0YWcgc28gdGhleSBhcmUgZnJlZWQgY29ycmVjdGx5LiAqLwomIzQzOyNkZWZpbmUgX19wbWRfZnJlZV90bGIodGxiLCBwbWRwLCBhZGRyKQkJCQkJXAomIzQzOwl0bGJfcmVtb3ZlX3RhYmxlKCh0bGIpLCAodm9pZCAqKSgodW5zaWduZWQgbG9uZykocG1kcCkgfCAxKSkKICNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHZvaWQgcG1kX3BvcHVsYXRlX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCwKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vcGd0YWJsZS5jIGIvYXJjaC9zaC9tbS9wZ3RhYmxlLmMKaW5kZXggM2E0MDg1ZWEwMTYxZi4uZjYxODRiODZiODljNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9wZ3RhYmxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zaC9tbS9wZ3RhYmxlLmMKQEAgLTU2LDQgJiM0Mzs1NiwyNCBAQCB2b2lkIHBtZF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKQogewogCWttZW1fY2FjaGVfZnJlZShwbWRfY2FjaGVwLCBwbWQpOwogfQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZV9zbGFiKHZvaWQgKnRhYmxlKQomIzQzO3sKJiM0MzsJa21lbV9jYWNoZV9mcmVlKHBtZF9jYWNoZXAsIHRhYmxlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgX190bGJfcmVtb3ZlX3RhYmxlX3BndGFibGUodm9pZCAqdGFibGUpCiYjNDM7ewomIzQzOwlwYWdldGFibGVfZHRvcl9mcmVlKHRhYmxlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBfX3RsYl9yZW1vdmVfdGFibGUodm9pZCAqdGFibGUpCiYjNDM7ewomIzQzOwljb25zdCB1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZyl0YWJsZTsKJiM0MzsKJiM0MzsJaWYgKGFkZHIgJmFtcDsgMSkKJiM0MzsJCV9fdGxiX3JlbW92ZV90YWJsZV9zbGFiKCh2b2lkICopKGFkZHIgJmFtcDsgfjFVTCkpOwomIzQzOwllbHNlCiYjNDM7CQlfX3RsYl9yZW1vdmVfdGFibGVfcGd0YWJsZSh0YWJsZSk7CiYjNDM7fQogI2VuZGlmIC8qIFBBR0VUQUJMRV9MRVZFTFMgJmd0OyAyICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL0tjb25maWcgYi9hcmNoL3NwYXJjL0tjb25maWcKaW5kZXggYWI3N2QzZjI1MzZlMS4uNzQyZmZmZjhjMzdmMiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvc3BhcmMvS2NvbmZpZwpAQCAtNjQsNiAmIzQzOzY0LDcgQEAgY29uZmlnIFNQQVJDMzIKIAlzZWxlY3QgSEFWRV9VSUQxNgogCXNlbGVjdCBIQVZFX1BBR0VfU0laRV80S0IKIAlzZWxlY3QgTE9DS19NTV9BTkRfRklORF9WTUEKJiM0MzsJc2VsZWN0IEhBVkVfQVJDSF9UTEJfUkVNT1ZFX1RBQkxFCiAJc2VsZWN0IE9MRF9TSUdBQ1RJT04KIAlzZWxlY3QgWk9ORV9ETUEKIApAQCAtNzUsOCAmIzQzOzc2LDcgQEAgY29uZmlnIFNQQVJDNjQKIAlzZWxlY3QgSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVIKIAlzZWxlY3QgSEFWRV9LUkVUUFJPQkVTCiAJc2VsZWN0IEhBVkVfS1BST0JFUwotCXNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFIGlmIFNNUAotCXNlbGVjdCBIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRSBpZiBTTVAKJiM0MzsJc2VsZWN0IEhBVkVfQVJDSF9UTEJfUkVNT1ZFX1RBQkxFCiAJc2VsZWN0IE1NVV9HQVRIRVJfTUVSR0VfVk1BUwogCXNlbGVjdCBNTVVfR0FUSEVSX05PX0ZMVVNIX0NBQ0hFCiAJc2VsZWN0IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzMyLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2NfMzIuaAppbmRleCA0ZjczZTg3YjIyYTMyLi4zNjAxMDg1MmJhMGMwIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2NfMzIuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2NfMzIuaApAQCAtNDgsNyAmIzQzOzQ4LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIGZyZWVfcG1kX2Zhc3QocG1kX3QgKiBwbWQpCiB9CiAKICNkZWZpbmUgcG1kX2ZyZWUobW0sIHBtZCkJCWZyZWVfcG1kX2Zhc3QocG1kKQotI2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIsIHBtZCwgYWRkcikJcG1kX2ZyZWUoKHRsYiktJmd0O21tLCBwbWQpCiYjNDM7CiYjNDM7I2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIsIHBtZCwgYWRkcikJCQkJCVwKJiM0MzsJdGxiX3JlbW92ZV90YWJsZSgodGxiKSwgKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKHBtZCkgfCAxVUwpKQogCiAjZGVmaW5lIHBtZF9wb3B1bGF0ZShtbSwgcG1kLCBwdGUpCXBtZF9zZXQocG1kLCBwdGUpCiAKQEAgLTcyLDYgJiM0Mzs3NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3B0ZV9mYXN0KHB0ZV90ICpwdGUpCiAjZGVmaW5lIHB0ZV9mcmVlX2tlcm5lbChtbSwgcHRlKQlmcmVlX3B0ZV9mYXN0KHB0ZSkKIAogdm9pZCBwdGVfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICogbW0sIHBndGFibGVfdCBwdGUpOwotI2RlZmluZSBfX3B0ZV9mcmVlX3RsYih0bGIsIHB0ZSwgYWRkcikJcHRlX2ZyZWUoKHRsYiktJmd0O21tLCBwdGUpCiYjNDM7dm9pZCBfX3RsYl9yZW1vdmVfdGFibGUodm9pZCAqdGFibGUpOwomIzQzOyNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLCBwdGUsIGFkZHIpCXRsYl9yZW1vdmVfdGFibGUoKHRsYiksICh2b2lkICopKHB0ZSkpCiAKICNlbmRpZiAvKiBfU1BBUkNfUEdBTExPQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2NfNjQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY182NC5oCmluZGV4IGNhYTc2MzJiZTRjMmEuLmI1MDU1ZDI1OWI3NGQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY182NC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY182NC5oCkBAIC03NCw4ICYjNDM7NzQsNiBAQCB2b2lkIHB0ZV9mcmVlX2RlZmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcGd0YWJsZSk7CiAKIHZvaWQgcGd0YWJsZV9mcmVlKHZvaWQgKnRhYmxlLCBib29sIGlzX3BhZ2UpOwogCi0jaWZkZWYgQ09ORklHX1NNUAotCiBzdHJ1Y3QgbW11X2dhdGhlcjsKIHZvaWQgdGxiX3JlbW92ZV90YWJsZShzdHJ1Y3QgbW11X2dhdGhlciAqLCB2b2lkICopOwogCkBAIC05NiwxMiAmIzQzOzk0LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZSh2b2lkICpfdGFibGUpCiAJCWlzX3BhZ2UgPSB0cnVlOwogCXBndGFibGVfZnJlZSh0YWJsZSwgaXNfcGFnZSk7CiB9Ci0jZWxzZSAvKiBDT05GSUdfU01QICovCi1zdGF0aWMgaW5saW5lIHZvaWQgcGd0YWJsZV9mcmVlX3RsYihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCB2b2lkICp0YWJsZSwgYm9vbCBpc19wYWdlKQotewotCXBndGFibGVfZnJlZSh0YWJsZSwgaXNfcGFnZSk7Ci19Ci0jZW5kaWYgLyogIUNPTkZJR19TTVAgKi8KIAogc3RhdGljIGlubGluZSB2b2lkIF9fcHRlX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHB0ZV90ICpwdGUsCiAJCQkJICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RsYl82NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90bGJfNjQuaAppbmRleCAzMDM3MTg3NDgyZGI3Li5mNWY5NjMxNjg1ZDUwIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RsYl82NC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGxiXzY0LmgKQEAgLTI5LDkgJiM0MzsyOSw3IEBAIHZvaWQgZmx1c2hfdGxiX3BlbmRpbmcodm9pZCk7CiAgKiBhbmQgdGhlcmVmb3JlIHdlIGRvbiYjMzk7dCBuZWVkIGEgVExCSSB3aGVuIGZyZWVpbmcgcGFnZS10YWJsZSBwYWdlcy4KICAqLwogCi0jaWZkZWYgQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUKICNkZWZpbmUgdGxiX25lZWRzX3RhYmxlX2ludmFsaWRhdGUoKQkoZmFsc2UpCi0jZW5kaWYKIAogI2luY2x1ZGUgJmx0O2FzbS1nZW5lcmljL3RsYi5oJmd0OwogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2xpYi9iaXRleHQuYyBiL2FyY2gvc3BhcmMvbGliL2JpdGV4dC5jCmluZGV4IDMyYTVjMWQ5NDU5Y2QuLmMzMDllMjc5NzNjZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbGliL2JpdGV4dC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvc3BhcmMvbGliL2JpdGV4dC5jCkBAIC0yMiw4ICYjNDM7MjIsNiBAQAogICogQGFsaWduOiByZXF1ZXN0ZWQgYWxpZ25tZW50CiAgKgogICogUmV0dXJucyBvZmZzZXQgaW4gdGhlIG1hcCBvciAtMSBpZiBvdXQgb2Ygc3BhY2UuCi0gKgotICogTm90IHNhZmUgdG8gY2FsbCBmcm9tIGFuIGludGVycnVwdCAodXNlcyBzcGluX2xvY2spLgogICovCiBpbnQgYml0X21hcF9zdHJpbmdfZ2V0KHN0cnVjdCBiaXRfbWFwICp0LCBpbnQgbGVuLCBpbnQgYWxpZ24pCiB7CkBAIC0zMSw2ICYjNDM7MjksNyBAQCBpbnQgYml0X21hcF9zdHJpbmdfZ2V0KHN0cnVjdCBiaXRfbWFwICp0LCBpbnQgbGVuLCBpbnQgYWxpZ24pCiAJaW50IG9mZl9uZXc7CiAJaW50IGFsaWduMTsKIAlpbnQgaSwgY29sb3I7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAodC0mZ3Q7bnVtX2NvbG9ycykgewogCQkvKiBhbGlnbiBpcyBvdmVybG9hZGVkIHRvIGJlIHRoZSBwYWdlIGNvbG9yICovCkBAIC01MCw3ICYjNDM7NDksNyBAQCBpbnQgYml0X21hcF9zdHJpbmdfZ2V0KHN0cnVjdCBiaXRfbWFwICp0LCBpbnQgbGVuLCBpbnQgYWxpZ24pCiAJCUJVRygpOwogCWNvbG9yICZhbXA7PSBhbGlnbjE7CiAKLQlzcGluX2xvY2soJmFtcDt0LSZndDtsb2NrKTsKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDt0LSZndDtsb2NrLCBmbGFncyk7CiAJaWYgKGxlbiAmbHQ7IHQtJmd0O2xhc3Rfc2l6ZSkKIAkJb2Zmc2V0ID0gdC0mZ3Q7Zmlyc3RfZnJlZTsKIAllbHNlCkBAIC02NCw3ICYjNDM7NjMsNyBAQCBpbnQgYml0X21hcF9zdHJpbmdfZ2V0KHN0cnVjdCBiaXRfbWFwICp0LCBpbnQgbGVuLCBpbnQgYWxpZ24pCiAJCWlmIChvZmZzZXQgJmd0Oz0gdC0mZ3Q7c2l6ZSkKIAkJCW9mZnNldCA9IDA7CiAJCWlmIChjb3VudCAmIzQzOyBsZW4gJmd0OyB0LSZndDtzaXplKSB7Ci0JCQlzcGluX3VubG9jaygmYW1wO3QtJmd0O2xvY2spOwomIzQzOwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt0LSZndDtsb2NrLCBmbGFncyk7CiAvKiBQMyAqLyBwcmludGsoS0VSTl9FUlIKICAgJiMzNDtiaXRtYXAgb3V0OiBzaXplICVkIHVzZWQgJWQgb2ZmICVkIGxlbiAlZCBhbGlnbiAlZCBjb3VudCAlZFxuJiMzNDssCiAgIHQtJmd0O3NpemUsIHQtJmd0O3VzZWQsIG9mZnNldCwgbGVuLCBhbGlnbiwgY291bnQpOwpAQCAtOTAsNyAmIzQzOzg5LDcgQEAgaW50IGJpdF9tYXBfc3RyaW5nX2dldChzdHJ1Y3QgYml0X21hcCAqdCwgaW50IGxlbiwgaW50IGFsaWduKQogCQkJCQl0LSZndDtsYXN0X29mZiA9IDA7CiAJCQkJdC0mZ3Q7dXNlZCAmIzQzOz0gbGVuOwogCQkJCXQtJmd0O2xhc3Rfc2l6ZSA9IGxlbjsKLQkJCQlzcGluX3VubG9jaygmYW1wO3QtJmd0O2xvY2spOwomIzQzOwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7dC0mZ3Q7bG9jaywgZmxhZ3MpOwogCQkJCXJldHVybiBvZmZzZXQ7CiAJCQl9CiAJCX0KQEAgLTEwMywxMCAmIzQzOzEwMiwxMSBAQCBpbnQgYml0X21hcF9zdHJpbmdfZ2V0KHN0cnVjdCBiaXRfbWFwICp0LCBpbnQgbGVuLCBpbnQgYWxpZ24pCiB2b2lkIGJpdF9tYXBfY2xlYXIoc3RydWN0IGJpdF9tYXAgKnQsIGludCBvZmZzZXQsIGludCBsZW4pCiB7CiAJaW50IGk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAodC0mZ3Q7dXNlZCAmbHQ7IGxlbikKIAkJQlVHKCk7CQkvKiBNdWNoIHRvbyBsYXRlIHRvIGRvIGFueSBnb29kLCBidXQgYWxhcy4uLiAqLwotCXNwaW5fbG9jaygmYW1wO3QtJmd0O2xvY2spOwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3QtJmd0O2xvY2ssIGZsYWdzKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgbGVuOyBpJiM0MzsmIzQzOykgewogCQlpZiAodGVzdF9iaXQob2Zmc2V0ICYjNDM7IGksIHQtJmd0O21hcCkgPT0gMCkKIAkJCUJVRygpOwpAQCAtMTE1LDcgJiM0MzsxMTUsNyBAQCB2b2lkIGJpdF9tYXBfY2xlYXIoc3RydWN0IGJpdF9tYXAgKnQsIGludCBvZmZzZXQsIGludCBsZW4pCiAJaWYgKG9mZnNldCAmbHQ7IHQtJmd0O2ZpcnN0X2ZyZWUpCiAJCXQtJmd0O2ZpcnN0X2ZyZWUgPSBvZmZzZXQ7CiAJdC0mZ3Q7dXNlZCAtPSBsZW47Ci0Jc3Bpbl91bmxvY2soJmFtcDt0LSZndDtsb2NrKTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3QtJmd0O2xvY2ssIGZsYWdzKTsKIH0KIAogdm9pZCBiaXRfbWFwX2luaXQoc3RydWN0IGJpdF9tYXAgKnQsIHVuc2lnbmVkIGxvbmcgKm1hcCwgaW50IHNpemUpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL3NybW11LmMgYi9hcmNoL3NwYXJjL21tL3NybW11LmMKaW5kZXggOWE3NDkwMmFkMTgxNC4uMmEyYzdiZDIxMDExNCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tbS9zcm1tdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvc3BhcmMvbW0vc3JtbXUuYwpAQCAtMzU5LDE5ICYjNDM7MzU5LDM5IEBAIHBndGFibGVfdCBwdGVfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogCXJldHVybiBwdGVwOwogfQogCi12b2lkIHB0ZV9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcHRlcCkKJiM0MztzdGF0aWMgdm9pZCBfX3B0ZV9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcHRlcCkKIHsKJiM0MzsJY29uc3QgYm9vbCBwcm9jZXNzX2NvbnRleHQgPSBtbTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAogCXBhZ2UgPSBwZm5fdG9fcGFnZShfX25vY2FjaGVfcGEoKHVuc2lnbmVkIGxvbmcpcHRlcCkgJmd0OyZndDsgUEFHRV9TSElGVCk7Ci0Jc3Bpbl9sb2NrKCZhbXA7bW0tJmd0O3BhZ2VfdGFibGVfbG9jayk7CiYjNDM7CWlmIChwcm9jZXNzX2NvbnRleHQpCiYjNDM7CQlzcGluX2xvY2soJmFtcDttbS0mZ3Q7cGFnZV90YWJsZV9sb2NrKTsKIAlpZiAocGFnZV9yZWZfZGVjX3JldHVybihwYWdlKSA9PSAxKQogCQlwYWdldGFibGVfZHRvcihwYWdlX3B0ZGVzYyhwYWdlKSk7Ci0Jc3Bpbl91bmxvY2soJmFtcDttbS0mZ3Q7cGFnZV90YWJsZV9sb2NrKTsKJiM0MzsJaWYgKHByb2Nlc3NfY29udGV4dCkKJiM0MzsJCXNwaW5fdW5sb2NrKCZhbXA7bW0tJmd0O3BhZ2VfdGFibGVfbG9jayk7CiAKIAlzcm1tdV9mcmVlX25vY2FjaGUocHRlcCwgU1JNTVVfUFRFX1RBQkxFX1NJWkUpOwogfQogCiYjNDM7dm9pZCBwdGVfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHB0ZXApCiYjNDM7ewomIzQzOwlfX3B0ZV9mcmVlKG1tLCBwdGVwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBfX3RsYl9yZW1vdmVfdGFibGUodm9pZCAqdGFibGUpCiYjNDM7ewomIzQzOwljb25zdCB1bnNpZ25lZCBsb25nIGVuY29kZWQgPSAodW5zaWduZWQgbG9uZyl0YWJsZTsKJiM0MzsJY29uc3QgdW5zaWduZWQgbG9uZyBhZGRyID0gZW5jb2RlZCAmYW1wOyB+MVVMOwomIzQzOwljb25zdCBib29sIGlzX3BtZCA9IGVuY29kZWQgJmFtcDsgMTsKJiM0MzsKJiM0MzsJaWYgKGlzX3BtZCkKJiM0MzsJCWZyZWVfcG1kX2Zhc3QoKHBtZF90ICopYWRkcik7CiYjNDM7CWVsc2UgLyogQ2FsbGVkIGZyb20gc29mdGlycSBjb250ZXh0LCBubyBtbS4gKi8KJiM0MzsJCV9fcHRlX2ZyZWUoTlVMTCwgKHBndGFibGVfdClhZGRyKTsKJiM0Mzt9CiYjNDM7CiAvKiBjb250ZXh0IGhhbmRsaW5nIC0gYSBkeW5hbWljYWxseSBzaXplZCBwb29sIGlzIHVzZWQgKi8KICNkZWZpbmUgTk9fQ09OVEVYVAktMQogCmRpZmYgLS1naXQgYS9hcmNoL3VtL0tjb25maWcgYi9hcmNoL3VtL0tjb25maWcKaW5kZXggZDk1NDFkMTNkOWViMC4uOTRiOGZmNzBmNTc4YiAxMDA2NDQKLS0tIGEvYXJjaC91bS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvdW0vS2NvbmZpZwpAQCAtNDQsNyAmIzQzOzQ0LDYgQEAgY29uZmlnIFVNTAogCXNlbGVjdCBIQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFMKIAlzZWxlY3QgVEhSRUFEX0lORk9fSU5fVEFTSwogCXNlbGVjdCBTUEFSU0VfSVJRCi0Jc2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUKIAogY29uZmlnIE1NVQogCWJvb2wKZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcgYi9hcmNoL3g4Ni9LY29uZmlnCmluZGV4IGE4YzNiM2QzMWEyNzYuLjZlNWU0NjJlYzA1OWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvS2NvbmZpZwpAQCAtMjgzLDcgJiM0MzsyODMsNiBAQCBjb25maWcgWDg2CiAJc2VsZWN0IEhBVkVfUEVSRl9SRUdTCiAJc2VsZWN0IEhBVkVfUEVSRl9VU0VSX1NUQUNLX0RVTVAKIAlzZWxlY3QgQVNZTkNfS0VSTkVMX1BHVEFCTEVfRlJFRQlpZiBJT01NVV9TVkEKLQlzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRQogCXNlbGVjdCBNTVVfR0FUSEVSX01FUkdFX1ZNQVMKIAlzZWxlY3QgSEFWRV9QT1NJWF9DUFVfVElNRVJTX1RBU0tfV09SSwogCXNlbGVjdCBIQVZFX1JFR1NfQU5EX1NUQUNLX0FDQ0VTU19BUEkKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3RsYi5oIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vdGxiLmgKaW5kZXggOGMzY2ViNDI3MDE4MC4uNmZiN2I3ODE1NGY2MiAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vdGxiLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vdGxiLmgKQEAgLTE2LDcgJiM0MzsxNiw3IEBACiAKICNpbmNsdWRlICZsdDthc20tZ2VuZXJpYy90bGIuaCZndDsKIAotI2RlZmluZSBfX3B0ZV9mcmVlX3RsYih0bGIsIHB0ZSwgYWRkcmVzcykJcHRlX2ZyZWUoKHRsYiktJmd0O21tLCBwdGUpCiYjNDM7I2RlZmluZSBfX3B0ZV9mcmVlX3RsYih0bGIsIHB0ZSwgYWRkcmVzcykJdGxiX3JlbW92ZV9wdGRlc2MoKHRsYiksIHBhZ2VfcHRkZXNjKHB0ZSkpCiAKIHZvaWQgY2hlY2tfdGxiX3Nhbml0eSh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmgKaW5kZXggYmRjYzI3NzhhYzY0Zi4uMDQ0ZGFiYzFmZTljYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3RsYi5oCkBAIC02NywxMSAmIzQzOzY3LDggQEAKICAqICAtIHRsYl9yZW1vdmVfdGFibGUoKQogICoKICAqICAgIHRsYl9yZW1vdmVfdGFibGUoKSBpcyB0aGUgYmFzaWMgcHJpbWl0aXZlIHRvIGZyZWUgcGFnZS10YWJsZSBkaXJlY3RvcmllcwotICogICAgKF9fcCpfZnJlZV90bGIoKSkuICBJbiBpdCYjMzk7cyBtb3N0IHByaW1pdGl2ZSBmb3JtIGl0IGlzIGFuIGFsaWFzIGZvcgotICogICAgdGxiX3JlbW92ZV9wYWdlKCkgYmVsb3csIGZvciB3aGVuIHBhZ2UgZGlyZWN0b3JpZXMgYXJlIHBhZ2VzIGFuZCBoYXZlIG5vCi0gKiAgICBhZGRpdGlvbmFsIGNvbnN0cmFpbnRzLgotICoKLSAqICAgIFNlZSBhbHNvIE1NVV9HQVRIRVJfVEFCTEVfRlJFRSBhbmQgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRS4KJiM0MzsgKiAgICAoX19wKl9mcmVlX3RsYigpKS4gIFBhZ2UgZGlyZWN0b3JpZXMgYXJlIGZyZWVkIGFmdGVyIGFuIFJDVSBncmFjZQomIzQzOyAqICAgIHBlcmlvZCAtIHNlZSB0aGUgY29tbWVudCBpbiBtbS9tbXVfZ2F0aGVyLmMuCiAgKgogICogIC0gdGxiX3JlbW92ZV9wYWdlKCkgLyB0bGJfcmVtb3ZlX3BhZ2Vfc2l6ZSgpCiAgKiAgLSBfX3RsYl9yZW1vdmVfZm9saW9fcGFnZXMoKSAvIF9fdGxiX3JlbW92ZV9wYWdlX3NpemUoKQpAQCAtMTUxLDI0ICYjNDM7MTQ4LDE1IEBACiAgKiAgVGhpcyBtaWdodCBiZSB1c2VmdWwgaWYgeW91ciBhcmNoaXRlY3R1cmUgaGFzIHNpemUgc3BlY2lmaWMgVExCCiAgKiAgaW52YWxpZGF0aW9uIGluc3RydWN0aW9ucy4KICAqCi0gKiAgTU1VX0dBVEhFUl9UQUJMRV9GUkVFCi0gKgotICogIFRoaXMgcHJvdmlkZXMgdGxiX3JlbW92ZV90YWJsZSgpLCB0byBiZSB1c2VkIGluc3RlYWQgb2YgdGxiX3JlbW92ZV9wYWdlKCkKLSAqICBmb3IgcGFnZSBkaXJlY3RvcmVzIChfX3AqX2ZyZWVfdGxiKCkpLgotICoKLSAqICBVc2VmdWwgaWYgeW91ciBhcmNoaXRlY3R1cmUgaGFzIG5vbi1wYWdlIHBhZ2UgZGlyZWN0b3JpZXMuCiYjNDM7ICogIFBhZ2UgZGlyZWN0b3JpZXMgKF9fcCpfZnJlZV90bGIoKSkgYXJlIGFsd2F5cyBmcmVlZCB2aWEgdGxiX3JlbW92ZV90YWJsZSgpLAomIzQzOyAqICBhZnRlciBhbiBSQ1UgZ3JhY2UgcGVyaW9kIChzZWUgbW0vbW11X2dhdGhlci5jKS4KICAqCi0gKiAgV2hlbiB1c2VkLCBhbiBhcmNoaXRlY3R1cmUgaXMgZXhwZWN0ZWQgdG8gcHJvdmlkZSBfX3RsYl9yZW1vdmVfdGFibGUoKSBvcgotICogIHVzZSB0aGUgZ2VuZXJpYyBfX3RsYl9yZW1vdmVfdGFibGUoKSwgd2hpY2ggZG9lcyB0aGUgYWN0dWFsIGZyZWVpbmcgb2YgdGhlc2UKLSAqICBwYWdlcy4KJiM0MzsgKiBUaGlzIHNlcmlhbGlzZXMgYWdhaW5zdCBzb2Z0d2FyZSBwYWdlLXRhYmxlIHdhbGtlcnMsIGluY2x1ZGluZyBhcmNoaXRlY3R1cmVzCiYjNDM7ICogd2hpY2ggZG8gbm90IHVzZSBJUElzIGZvciByZW1vdGUgVExCIGludmFsaWRhdGVzLgogICoKLSAqICBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFCi0gKgotICogIExpa2UgTU1VX0dBVEhFUl9UQUJMRV9GUkVFLCBhbmQgYWRkcyBzZW1pLVJDVSBzZW1hbnRpY3MgdG8gdGhlIGZyZWUgKHNlZQotICogIGNvbW1lbnQgYmVsb3cpLgotICoKLSAqICBVc2VmdWwgaWYgeW91ciBhcmNoaXRlY3R1cmUgZG9lc24mIzM5O3QgdXNlIElQSXMgZm9yIHJlbW90ZSBUTEIgaW52YWxpZGF0ZXMKLSAqICBhbmQgdGhlcmVmb3JlIGRvZXNuJiMzOTt0IG5hdHVyYWxseSBzZXJpYWxpemUgd2l0aCBzb2Z0d2FyZSBwYWdlLXRhYmxlIHdhbGtlcnMuCiYjNDM7ICogIEFuIGFyY2hpdGVjdHVyZSBpcyBleHBlY3RlZCB0byBwcm92aWRlIF9fdGxiX3JlbW92ZV90YWJsZSgpIChzZWUKJiM0MzsgKiAgSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEUpIG9yIHVzZSB0aGUgZ2VuZXJpYyBfX3RsYl9yZW1vdmVfdGFibGUoKSwgd2hpY2gKJiM0MzsgKiAgZG9lcyB0aGUgYWN0dWFsIGZyZWVpbmcgb2YgdGhlc2UgcGFnZXMuCiAgKgogICogIE1NVV9HQVRIRVJfTk9fRkxVU0hfQ0FDSEUKICAqCkBAIC0yMDAsMTIgJiM0MzsxODgsOCBAQAogICogIHZhcmlvdXMgcHRlcF9nZXRfYW5kX2NsZWFyKCkgZnVuY3Rpb25zLgogICovCiAKLSNpZmRlZiBDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFCi0KIHN0cnVjdCBtbXVfdGFibGVfYmF0Y2ggewotI2lmZGVmIENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFCiAJc3RydWN0IHJjdV9oZWFkCQlyY3U7Ci0jZW5kaWYKIAl1bnNpZ25lZCBpbnQJCW5yOwogCXZvaWQJCQkqdGFibGVzW107CiB9OwpAQCAtMjI0LDIzICYjNDM7MjA4LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZSh2b2lkICp0YWJsZSkKIAogZXh0ZXJuIHZvaWQgdGxiX3JlbW92ZV90YWJsZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCB2b2lkICp0YWJsZSk7CiAKLSNlbHNlIC8qICFDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfcmVtb3ZlX3BhZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHBhZ2UgKnBhZ2UpOwotLyoKLSAqIFdpdGhvdXQgTU1VX0dBVEhFUl9UQUJMRV9GUkVFIHRoZSBhcmNoaXRlY3R1cmUgaXMgYXNzdW1lZCB0byBoYXZlIHBhZ2UgYmFzZWQKLSAqIHBhZ2UgZGlyZWN0b3JpZXMgYW5kIHdlIGNhbiB1c2UgdGhlIG5vcm1hbCBwYWdlIGJhdGNoaW5nIHRvIGZyZWUgdGhlbS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIHRsYl9yZW1vdmVfdGFibGUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgdm9pZCAqdGFibGUpCi17Ci0Jc3RydWN0IHB0ZGVzYyAqcHRkZXNjID0gKHN0cnVjdCBwdGRlc2MgKil0YWJsZTsKLQotCXBhZ2V0YWJsZV9kdG9yKHB0ZGVzYyk7Ci0JdGxiX3JlbW92ZV9wYWdlKHRsYiwgcHRkZXNjX3BhZ2UocHRkZXNjKSk7Ci19Ci0jZW5kaWYgLyogQ09ORklHX01NVV9HQVRIRVJfVEFCTEVfRlJFRSAqLwotCi0jaWZkZWYgQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUKIC8qCiAgKiBUaGlzIGFsbG93cyBhbiBhcmNoaXRlY3R1cmUgdGhhdCBkb2VzIG5vdCB1c2UgdGhlIGxpbnV4IHBhZ2UtdGFibGVzIGZvcgogICogaGFyZHdhcmUgdG8gc2tpcCB0aGUgVExCSSB3aGVuIGZyZWVpbmcgcGFnZSB0YWJsZXMuCkBAIC0yNTMsMTkgJiM0MzsyMjAsNiBAQCB2b2lkIHRsYl9yZW1vdmVfdGFibGVfc3luY19vbmUodm9pZCk7CiAKIHZvaWQgdGxiX3JlbW92ZV90YWJsZV9zeW5jX3JjdSh2b2lkKTsKIAotI2Vsc2UKLQotI2lmZGVmIHRsYl9uZWVkc190YWJsZV9pbnZhbGlkYXRlCi0jZXJyb3IgdGxiX25lZWRzX3RhYmxlX2ludmFsaWRhdGUoKSByZXF1aXJlcyBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFCi0jZW5kaWYKLQotc3RhdGljIGlubGluZSB2b2lkIHRsYl9yZW1vdmVfdGFibGVfc3luY19vbmUodm9pZCkgeyB9Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfcmN1KHZvaWQpIHsgfQotCi0jZW5kaWYgLyogQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgKi8KLQotCiAjaWZuZGVmIENPTkZJR19NTVVfR0FUSEVSX05PX0dBVEhFUgogLyoKICAqIElmIHdlIGNhbiYjMzk7dCBhbGxvY2F0ZSBhIHBhZ2UgdG8gbWFrZSBhIGJpZyBiYXRjaCBvZiBwYWdlIHBvaW50ZXJzCkBAIC0zMjUsOSAmIzQzOzI3OSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfZmx1c2hfcm1hcHMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0CiBzdHJ1Y3QgbW11X2dhdGhlciB7CiAJc3RydWN0IG1tX3N0cnVjdAkqbW07CiAKLSNpZmRlZiBDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFCiAJc3RydWN0IG1tdV90YWJsZV9iYXRjaAkqYmF0Y2g7Ci0jZW5kaWYKIAogCXVuc2lnbmVkIGxvbmcJCXN0YXJ0OwogCXVuc2lnbmVkIGxvbmcJCWVuZDsKZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnCmluZGV4IGMxZGRmNTljMGQ3MWEuLmJjN2JlZmFmYjQ3YjUgMTAwNjQ0Ci0tLSBhL21tL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvbW0vS2NvbmZpZwpAQCAtMTQ2NSw3ICYjNDM7MTQ2NSw3IEBAIGNvbmZpZyBIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRQogCiBjb25maWcgUFRfUkVDTEFJTQogCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgJmFtcDsmYW1wOyAhSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEUKJiM0MzsJZGVwZW5kcyBvbiBNTVUgJmFtcDsmYW1wOyAhSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEUKIAloZWxwCiAJICBUcnkgdG8gcmVjbGFpbSBlbXB0eSB1c2VyIHBhZ2UgdGFibGUgcGFnZXMgaW4gcGF0aHMgb3RoZXIgdGhhbiBtdW5tYXAKIAkgIGFuZCBleGl0X21tYXAgcGF0aC4KZGlmZiAtLWdpdCBhL21tL2d1cC5jIGIvbW0vZ3VwLmMKaW5kZXggZWI4OThlYTFlZTIyZS4uNjNiNDM1ZWM2MDVjOCAxMDA2NDQKLS0tIGEvbW0vZ3VwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZ3VwLmMKQEAgLTI3MDAsOCAmIzQzOzI3MDAsOSBAQCBFWFBPUlRfU1lNQk9MKGdldF91c2VyX3BhZ2VzX3VubG9ja2VkKTsKICAqIEJlZm9yZSBhY3RpdmF0aW5nIHRoaXMgY29kZSwgcGxlYXNlIGJlIGF3YXJlIHRoYXQgdGhlIGZvbGxvd2luZyBhc3N1bXB0aW9ucwogICogYXJlIGN1cnJlbnRseSBtYWRlOgogICoKLSAqICAqKSBFaXRoZXIgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSBpcyBlbmFibGVkLCBhbmQgdGxiX3JlbW92ZV90YWJsZSgpIGlzIHVzZWQgdG8KLSAqICBmcmVlIHBhZ2VzIGNvbnRhaW5pbmcgcGFnZSB0YWJsZXMgb3IgVExCIGZsdXNoaW5nIHJlcXVpcmVzIElQSSBicm9hZGNhc3QuCiYjNDM7ICogICopIHRsYl9yZW1vdmVfdGFibGUoKSBpcyB1c2VkIHRvIGZyZWUgcGFnZXMgY29udGFpbmluZyBwYWdlIHRhYmxlcywgd2l0aAomIzQzOyAqICB0aGUgZnJlZSBkZWZlcnJlZCB1bnRpbCBhbiBSQ1UgZ3JhY2UgcGVyaW9kIGhhcyBlbGFwc2VkIChzZWUKJiM0MzsgKiAgbW0vbW11X2dhdGhlci5jKS4KICAqCiAgKiAgKikgcHRlcyBjYW4gYmUgcmVhZCBhdG9taWNhbGx5IGJ5IHRoZSBhcmNoaXRlY3R1cmUuCiAgKgpkaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmMKaW5kZXggNTQ0OTRjM2ZhOTgzNS4uNTA1ZjdiNjJmZjI4MSAxMDA2NDQKLS0tIGEvbW0vaHVnZV9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jCkBAIC0yNDc2LDcgJiM0MzsyNDc2LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHphcF9kZXBvc2l0ZWRfdGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQpCiAJcGd0YWJsZV90IHBndGFibGU7CiAKIAlwZ3RhYmxlID0gcGd0YWJsZV90cmFuc19odWdlX3dpdGhkcmF3KG1tLCBwbWQpOwotCXB0ZV9mcmVlKG1tLCBwZ3RhYmxlKTsKJiM0MzsJcHRlX2ZyZWVfZGVmZXIobW0sIHBndGFibGUpOwogCW1tX2RlY19ucl9wdGVzKG1tKTsKIH0KIApkaWZmIC0tZ2l0IGEvbW0vbW11X2dhdGhlci5jIGIvbW0vbW11X2dhdGhlci5jCmluZGV4IDM5ODVkODU2ZGU3ZjkuLjJhNzJhOTY4Njc3M2EgMTAwNjQ0Ci0tLSBhL21tL21tdV9nYXRoZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tbXVfZ2F0aGVyLmMKQEAgLTIxOCw4ICYjNDM7MjE4LDYgQEAgYm9vbCBfX3RsYl9yZW1vdmVfcGFnZV9zaXplKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgcGFnZV8KIAogI2VuZGlmIC8qIE1NVV9HQVRIRVJfTk9fR0FUSEVSICovCiAKLSNpZmRlZiBDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFCi0KIHN0YXRpYyB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZV9mcmVlKHN0cnVjdCBtbXVfdGFibGVfYmF0Y2ggKmJhdGNoKQogewogCWludCBpOwpAQCAtMjMwLDEwICYjNDM7MjI4LDggQEAgc3RhdGljIHZvaWQgX190bGJfcmVtb3ZlX3RhYmxlX2ZyZWUoc3RydWN0IG1tdV90YWJsZV9iYXRjaCAqYmF0Y2gpCiAJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWJhdGNoKTsKIH0KIAotI2lmZGVmIENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFCi0KIC8qCi0gKiBTZW1pIFJDVSBmcmVlaW5nIG9mIHRoZSBwYWdlIGRpcmVjdG9yaWVzLgomIzQzOyAqIFJDVSBmcmVlaW5nIG9mIHRoZSBwYWdlIGRpcmVjdG9yaWVzLgogICoKICAqIFRoaXMgaXMgbmVlZGVkIGJ5IHNvbWUgYXJjaGl0ZWN0dXJlcyB0byBpbXBsZW1lbnQgc29mdHdhcmUgcGFnZXRhYmxlIHdhbGtlcnMuCiAgKgpAQCAtMjU5LDEzICYjNDM7MjU1LDEzIEBAIHN0YXRpYyB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZV9mcmVlKHN0cnVjdCBtbXVfdGFibGVfYmF0Y2ggKmJhdGNoKQogICogbWVhbnMuCiAgKgogICogV2hhdCB3ZSBkbyBpcyBiYXRjaCB0aGUgZnJlZWQgZGlyZWN0b3J5IHBhZ2VzICh0YWJsZXMpIGFuZCBSQ1UgZnJlZSB0aGVtLgotICogV2UgdXNlIHRoZSBzY2hlZCBSQ1UgdmFyaWFudCwgYXMgdGhhdCBndWFyYW50ZWVzIHRoYXQgSVJRL3ByZWVtcHQgZGlzYWJsaW5nCi0gKiBob2xkcyBvZmYgZ3JhY2UgcGVyaW9kcy4KJiM0MzsgKiBEaXNhYmxpbmcgSVJRcyBvciBwcmVlbXB0aW9uIGhvbGRzIG9mZiBSQ1UgZ3JhY2UgcGVyaW9kcywgc28gdGhpcyBwcm90ZWN0cwomIzQzOyAqIGJvdGggcmN1X3JlYWRfbG9jaygpIGFuZCBJUlEtZGlzYWJsaW5nIHdhbGtlcnMuCiAgKgogICogSG93ZXZlciwgaW4gb3JkZXIgdG8gYmF0Y2ggdGhlc2UgcGFnZXMgd2UgbmVlZCB0byBhbGxvY2F0ZSBzdG9yYWdlLCB0aGlzCiAgKiBhbGxvY2F0aW9uIGlzIGRlZXAgaW5zaWRlIHRoZSBNTSBjb2RlIGFuZCBjYW4gdGh1cyBlYXNpbHkgZmFpbCBvbiBtZW1vcnkKLSAqIHByZXNzdXJlLiBUbyBndWFyYW50ZWUgcHJvZ3Jlc3Mgd2UgZmFsbCBiYWNrIHRvIHNpbmdsZSB0YWJsZSBmcmVlaW5nLCBzZWUKLSAqIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0bGJfcmVtb3ZlX3RhYmxlX29uZSgpLgomIzQzOyAqIHByZXNzdXJlLiBUbyBndWFyYW50ZWUgcHJvZ3Jlc3Mgd2UgZmFsbCBiYWNrIHRvIHNpbmdsZSB0YWJsZSBmcmVlaW5nLCB3aGljaAomIzQzOyAqIGlzIGFsc28gUkNVLWRlZmVycmVkIC0gc2VlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0bGJfcmVtb3ZlX3RhYmxlX29uZSgpLgogICoKICAqLwogCkBAIC0zMTUsMTUgJiM0MzszMTEsNiBAQCB2b2lkIHRsYl9yZW1vdmVfdGFibGVfc3luY19yY3Uodm9pZCkKIAlzeW5jaHJvbml6ZV9yY3UoKTsKIH0KIAotI2Vsc2UgLyogIUNPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFICovCi0KLXN0YXRpYyB2b2lkIHRsYl9yZW1vdmVfdGFibGVfZnJlZShzdHJ1Y3QgbW11X3RhYmxlX2JhdGNoICpiYXRjaCkKLXsKLQlfX3RsYl9yZW1vdmVfdGFibGVfZnJlZShiYXRjaCk7Ci19Ci0KLSNlbmRpZiAvKiBDT05GSUdfTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSAqLwotCiAvKgogICogSWYgd2Ugd2FudCB0bGJfcmVtb3ZlX3RhYmxlKCkgdG8gaW1wbHkgVExCIGludmFsaWRhdGVzLgogICovCkBAIC00MDMsMTMgJiM0MzszOTAsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdGxiX3RhYmxlX2luaXQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYikKIAl0bGItJmd0O2JhdGNoID0gTlVMTDsKIH0KIAotI2Vsc2UgLyogIUNPTkZJR19NTVVfR0FUSEVSX1RBQkxFX0ZSRUUgKi8KLQotc3RhdGljIGlubGluZSB2b2lkIHRsYl90YWJsZV9mbHVzaChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfdGFibGVfaW5pdChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiKSB7IH0KLQotI2VuZGlmIC8qIENPTkZJR19NTVVfR0FUSEVSX1RBQkxFX0ZSRUUgKi8KLQogc3RhdGljIHZvaWQgdGxiX2ZsdXNoX21tdV9mcmVlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIpCiB7CiAJdGxiX3RhYmxlX2ZsdXNoKHRsYik7CmRpZmYgLS1naXQgYS9tbS9wZ3RhYmxlLWdlbmVyaWMuYyBiL21tL3BndGFibGUtZ2VuZXJpYy5jCmluZGV4IGI5MWIxYTk4MDI5YzcuLmZmOGZmMzcwNjQ4NTMgMTAwNjQ0Ci0tLSBhL21tL3BndGFibGUtZ2VuZXJpYy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3BndGFibGUtZ2VuZXJpYy5jCkBAIC0zODYsOSAmIzQzOzM4NiwyMSBAQCBwdGVfdCAqcHRlX29mZnNldF9tYXBfcndfbm9sb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLAogICogYmUgcmVhZC1vbmx5L3JlYWQtd3JpdGUgcHJvdGVjdGVkLgogICoKICAqIE5vdGUgdGhhdCBmcmVlX3BndGFibGVzKCksIHVzZWQgYWZ0ZXIgdW5tYXBwaW5nIGRldGFjaGVkIHZtYXMsIG9yIHdoZW4KLSAqIGV4aXRpbmcgdGhlIHdob2xlIG1tLCBkb2VzIG5vdCB0YWtlIHBhZ2UgdGFibGUgbG9jayBiZWZvcmUgZnJlZWluZyBhIHBhZ2UKLSAqIHRhYmxlLCBhbmQgbWF5IG5vdCB1c2UgUkNVIGF0IGFsbDogJiMzNDtvdXRzaWRlcnMmIzM0OyBsaWtlIGtodWdlcGFnZWQgc2hvdWxkIGF2b2lkCi0gKiBwdGVfb2Zmc2V0X21hcCgpIGFuZCBjbyBvbmNlIHRoZSB2bWEgaXMgZGV0YWNoZWQgZnJvbSBtbSBvciBtbV91c2VycyBpcyB6ZXJvLgomIzQzOyAqIGV4aXRpbmcgdGhlIHdob2xlIG1tLCBkb2VzIG5vdCB0YWtlIHRoZSBwYWdlIHRhYmxlIGxvY2sgYmVmb3JlIGZyZWVpbmcgYQomIzQzOyAqIHRhYmxlLgomIzQzOyAqCiYjNDM7ICogSG93ZXZlciwgdGhlIFBNRCBlbnRyeSBpcyBjbGVhcmVkIGZpcnN0LCBhbmQgdGhlIHRhYmxlIGZyZWVkIG9ubHkgYWZ0ZXIKJiM0MzsgKiBhbiBSQ1UgZ3JhY2UgcGVyaW9kLCBzbyBhIHdhbGtlciB0aGF0IG1hcHBlZCB0aGUgdGFibGUgdW5kZXIKJiM0MzsgKiByY3VfcmVhZF9sb2NrKCkgc3RheXMgc2FmZSwgYW5kIHRoZSBwbWRfc2FtZSgpIHJlY2hlY2sgaW4KJiM0MzsgKiBwdGVfb2Zmc2V0X21hcF9sb2NrKCkgZGV0ZWN0cyB0aGUgdGVhcmRvd24uCiYjNDM7ICoKJiM0MzsgKiBUaGVyZWZvcmUgaXQgaXMgc2FmZSBmb3IgJiMzNDtvdXRzaWRlcnMmIzM0OyBsaWtlIGtodWdlcGFnZWQgdG8gdXNlCiYjNDM7ICogcHRlX29mZnNldF9tYXAoKSBhbmQgY28uIGZvciBWTUFzIHRoYXQgbWlnaHQgYmUgdW5kZXJnb2luZyBwYWdlIHRhYmxlCiYjNDM7ICogdGVhcmRvd24uCiYjNDM7ICoKJiM0MzsgKiBOb3RlIHRoYXQgdGhlIFBHRCBpdHNlbGYgaXMgZnJlZWQgYXQgbW1kcm9wKCkgdGltZSwgbm90IHVuZGVyIFJDVSAtIHNvIHRoZQomIzQzOyAqIHdhbGtlciBtdXN0IGtlZXAgdGhlIG1tIGFsaXZlIHZpYSBtbWdyYWIoKS4gV2l0aCB0aGF0IGhlbGQsIHdhbGtpbmcgcmVtYWlucwomIzQzOyAqIHNhZmUgZXZlbiBvbmNlIG1tX3VzZXJzIGhhcyByZWFjaGVkIHplcm8uCiAgKi8KIHB0ZV90ICpwdGVfb2Zmc2V0X21hcF9sb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLAogCQkJICAgdW5zaWduZWQgbG9uZyBhZGRyLCBzcGlubG9ja190ICoqcHRscCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5OTUKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA1NDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogUkNVIFRhYmxlIEZyZWVpbmcqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZ29pbmcgb24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0JiMzOTtzIHNpbXBsaWZ5aW5nIFJDVSB0YWJsZSBmcmVlaW5nIGFjcm9zcyB0aGUgYm9hcmQuIFRoZSBnb2FsIHNlZW1zIHRvIGJlIHRvIG1ha2UgUkNVLWJhc2VkIHRhYmxlIGZyZWVpbmcgdGhlIHN0YW5kYXJkLCByZWdhcmRsZXNzIG9mIGFyY2hpdGVjdHVyZSwgaW5zdGVhZCBvZiBjb25kaXRpb25hbGx5IGNvbXBpbGluZyBpdCBpbi4gV2UmIzM5O3JlIGdldHRpbmcgcmlkIG9mIGBDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFYCBhbmQgYENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFYCwgd2hpY2ggc3VnZ2VzdHMgYSBtb3ZlIHRvd2FyZHMgYSB1bmlmaWVkIGFwcHJvYWNoLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4gTG9va2luZyBhdCB0aGUgZGlmZiwgSSBzZWUgY2hhbmdlcyBzY2F0dGVyZWQgYWNyb3NzIHRoZSBjb2RlYmFzZS4gYGFyY2gvS2NvbmZpZ2AgZmlsZXMgYXJlIGJlaW5nIHVwZGF0ZWQsIGFuZCBzZXZlcmFsIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBgaW5jbHVkZS9hc20vcGdhbGxvYy5oYCBmaWxlcyBhcmUgYmVpbmcgdXBkYXRlZCB0byB1c2UgYHRsYl9yZW1vdmVfcHRkZXNjYCwgcmF0aGVyIHRoYW4gY29uZGl0aW9uYWwgY2FsbHMgdG8gYF9fcHVkX2ZyZWVfdGxiYCwgYF9fcG1kX2ZyZWVfdGxiYCwgYW5kIGBfX3B0ZV9mcmVlX3RsYmAuIFRoYXQgcmVpbmZvcmNlcyB0aGUgaWRlYSBvZiBzdGFuZGFyZGl6aW5nIG9uIHRoZSBSQ1UgbWVjaGFuaXNtLiBUaGUgYGluY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmhgIGlzIGFsc28gcmVtb3ZpbmcgdGhlIGBpZmRlZmBzIHRoYXQgdXNlZCB0byBjb250cm9sIHRoZSBgc3RydWN0IG1tdV90YWJsZV9iYXRjaGAgYW5kIFJDVSB0YWJsZSByZW1vdmFsLgoKRnVydGhlciBkb3duIHRoZSBsaW5lLCBJJiMzOTttIG5vdGluZyBjaGFuZ2VzIHRvIGBtbS9LY29uZmlnYCAodGhlIGBQVF9SRUNMQUlNYCBvcHRpb24gbG9va3MgbGlrZSBpdCYjMzk7cyBiZWluZyBjb25kaXRpb25lZCBvbiB0aGUgTU1VIGFuZCBhbiBhcmNoaXRlY3R1cmUgbm90IGhhdmluZyBgSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEVgKSwgYW5kIGNvbW1lbnRzIGluIGBtbS9ndXAuY2AgYW5kIGBtbS9wZ3RhYmxlLWdlbmVyaWMuY2AuIFRoZSBtb3N0IGludGVyZXN0aW5nIHBhcnQsIHRob3VnaCwgaXMgdGhlIGNoYW5nZSB0byBgbW0vaHVnZV9tZW1vcnkuY2AuIGB6YXBfZGVwb3NpdGVkX3RhYmxlYCBpcyBub3cgdXNpbmcgYHB0ZV9mcmVlX2RlZmVyYCBpbnN0ZWFkIG9mIGBwdGVfZnJlZWAuIFRoaXMgaXMgYSBjcnVjaWFsIHBvaW50LCBJIG5lZWQgdG8gY2hlY2sgZXhhY3RseSB3aGF0IGB6YXBfZGVwb3NpdGVkX3RhYmxlYCBkb2VzLCBhbmQgdW5kZXJzdGFuZCBgcHRlX2ZyZWVfZGVmZXJgIGluIHRoaXMgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGh1Z2UgcGFnZSBjb2RlIGlzIGFkb3B0aW5nIHRoZSBzYW1lIHN0cmF0ZWd5LgoKSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGhvdyBgcHRlX2ZyZWVfZGVmZXJgIGlzIGltcGxlbWVudGVkLiBJJiMzOTtsbCBhbHNvIHJlYWQgdXAgb24gYHphcF9kZXBvc2l0ZWRfdGFibGVgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgd2hhdCBpcyBoYXBwZW5pbmcgaGVyZS4gSSYjMzk7bSBnb2luZyB0byB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGNoZWNrIGBwdGVfZnJlZV9kZWZlcmAgYW5kIGB6YXBfZGVwb3NpdGVkX3RhYmxlYCwgYW5kIHRoZW4gSSB3aWxsIGJlIGFibGUgdG8gdmVyaWZ5IHRoYXQgbXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIGlzIGNvcnJlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHRlX2ZyZWVfZGVmZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BnYWxsb2MuaD00Mz1zdGF0aWMgaW5saW5lIHZvaWQgcHRlX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwdGVwYWdlKVxuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgtNDctXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGdhbGxvYy5oOjQ4Oi8qIGFyY2ggdXNlIHB0ZV9mcmVlX2RlZmVyKCkgaW1wbGVtZW50YXRpb24gaW4gYXJjaC9wb3dlcnBjL21tL3BndGFibGUtZnJhZy5jICovXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGdhbGxvYy5oOjQ5OiNkZWZpbmUgcHRlX2ZyZWVfZGVmZXIgcHRlX2ZyZWVfZGVmZXJcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmg6NTA6dm9pZCBwdGVfZnJlZV9kZWZlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHBndGFibGUpO1xuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BnYWxsb2MuaC01MS1cbi0tXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZS1mcmFnLmM9MTE3PXZvaWQgcHRlX2ZyYWdtZW50X2ZyZWUodW5zaWduZWQgbG9uZyAqdGFibGUsIGludCBrZXJuZWwpXG4tLVxuYXJjaC9wb3dlcnBjL21tL3BndGFibGUtZnJhZy5jLTEzMy0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZS1mcmFnLmM6MTM0OnZvaWQgcHRlX2ZyZWVfZGVmZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwZ3RhYmxlKVxuYXJjaC9wb3dlcnBjL21tL3BndGFibGUtZnJhZy5jLTEzNS17XG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BnYWxsb2MuaD0xNTE9c3RhdGljIGlubGluZSB2b2lkIHBtZF9wb3B1bGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGdhbGxvYy5oLTE2Ny1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmg6MTY4Oi8qIGFyY2ggdXNlIHB0ZV9mcmVlX2RlZmVyKCkgaW1wbGVtZW50YXRpb24gaW4gYXJjaC9zMzkwL21tL3BnYWxsb2MuYyAqL1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BnYWxsb2MuaDoxNjk6I2RlZmluZSBwdGVfZnJlZV9kZWZlciBwdGVfZnJlZV9kZWZlclxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BnYWxsb2MuaDoxNzA6dm9pZCBwdGVfZnJlZV9kZWZlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHBndGFibGUpO1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BnYWxsb2MuaC0xNzEtXG4tLVxuYXJjaC9zMzkwL21tL3BnYWxsb2MuYz0xNDk9c3RhdGljIHZvaWQgcHRlX2ZyZWVfbm93KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbi0tXG5hcmNoL3MzOTAvbW0vcGdhbGxvYy5jLTE1NS1cbmFyY2gvczM5MC9tbS9wZ2FsbG9jLmM6MTU2OnZvaWQgcHRlX2ZyZWVfZGVmZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwZ3RhYmxlKVxuYXJjaC9zMzkwL21tL3BnYWxsb2MuYy0xNTcte1xuLS1cbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY182NC5oPTY2PXZvaWQgcHRlX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwdGVwYWdlKTtcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY182NC5oLTY3LVxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzY0Lmg6Njg6LyogYXJjaCB1c2UgcHRlX2ZyZWVfZGVmZXIoKSBpbXBsZW1lbnRhdGlvbiBpbiBhcmNoL3NwYXJjL21tL2luaXRfNjQuYyAqL1xuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzY0Lmg6Njk6I2RlZmluZSBwdGVfZnJlZV9kZWZlciBwdGVfZnJlZV9kZWZlclxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzY0Lmg6NzA6dm9pZCBwdGVfZnJlZV9kZWZlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHBndGFibGUpO1xuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzY0LmgtNzEtXG4tLVxuYXJjaC9zcGFyYy9tbS9pbml0XzY0LmM9Mjg2Nj1zdGF0aWMgdm9pZCBwdGVfZnJlZV9ub3coc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuLS1cbmFyY2gvc3BhcmMvbW0vaW5pdF82NC5jLTI4NzMtXG5hcmNoL3NwYXJjL21tL2luaXRfNjQuYzoyODc0OnZvaWQgcHRlX2ZyZWVfZGVmZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwZ3RhYmxlKVxuYXJjaC9zcGFyYy9tbS9pbml0XzY0LmMtMjg3NS17XG4tLVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg9MTE1PXN0YXRpYyBpbmxpbmUgdm9pZCBwdGVfdW5tYXAocHRlX3QgKnB0ZSlcbi0tXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0xMjAtXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaDoxMjE6dm9pZCBwdGVfZnJlZV9kZWZlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHBndGFibGUpO1xuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMTIyLVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MjQ3ND1zdGF0aWMgaW5saW5lIHZvaWQgemFwX2RlcG9zaXRlZF90YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTI0NzgtXHRwZ3RhYmxlID0gcGd0YWJsZV90cmFuc19odWdlX3dpdGhkcmF3KG1tLCBwbWQpO1xubW0vaHVnZV9tZW1vcnkuYzoyNDc5Olx0cHRlX2ZyZWVfZGVmZXIobW0sIHBndGFibGUpO1xubW0vaHVnZV9tZW1vcnkuYy0yNDgwLVx0bW1fZGVjX25yX3B0ZXMobW0pO1xuLS1cbm1tL2todWdlcGFnZWQuYz0xODYyPXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yMDY3LVx0cGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2UobW0sIGhhZGRyLCBwZ3RfcG1kKTtcbm1tL2todWdlcGFnZWQuYzoyMDY4Olx0cHRlX2ZyZWVfZGVmZXIobW0sIHBtZF9wZ3RhYmxlKHBndF9wbWQpKTtcbm1tL2todWdlcGFnZWQuYy0yMDY5LVxuLS1cbm1tL2todWdlcGFnZWQuYz0yMTUxPXN0YXRpYyB2b2lkIHJldHJhY3RfcGFnZV90YWJsZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgcGdvZmYpXG4tLVxubW0va2h1Z2VwYWdlZC5jLTIyMjgtXHRcdFx0cGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2UobW0sIGFkZHIsIHBndF9wbWQpO1xubW0va2h1Z2VwYWdlZC5jOjIyMjk6XHRcdFx0cHRlX2ZyZWVfZGVmZXIobW0sIHBtZF9wZ3RhYmxlKHBndF9wbWQpKTtcbm1tL2todWdlcGFnZWQuYy0yMjMwLVx0XHR9XG4tLVxubW0vcGd0YWJsZS1nZW5lcmljLmM9MjIxPXBtZF90IHBtZHBfY29sbGFwc2VfZmx1c2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbi0tXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYy0yMzktXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYzoyNDA6LyogYXJjaCBkZWZpbmUgcHRlX2ZyZWVfZGVmZXIgaW4gYXNtL3BnYWxsb2MuaCBmb3IgaXRzIG93biBpbXBsZW1lbnRhdGlvbiAqL1xubW0vcGd0YWJsZS1nZW5lcmljLmM6MjQxOiNpZm5kZWYgcHRlX2ZyZWVfZGVmZXJcbm1tL3BndGFibGUtZ2VuZXJpYy5jLTI0Mi1zdGF0aWMgdm9pZCBwdGVfZnJlZV9ub3coc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuLS1cbm1tL3BndGFibGUtZ2VuZXJpYy5jLTI0OS1cbm1tL3BndGFibGUtZ2VuZXJpYy5jOjI1MDp2b2lkIHB0ZV9mcmVlX2RlZmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcGd0YWJsZSlcbm1tL3BndGFibGUtZ2VuZXJpYy5jLTI1MS17XG4tLVxubW0vcGd0YWJsZS1nZW5lcmljLmMtMjU2LX1cbm1tL3BndGFibGUtZ2VuZXJpYy5jOjI1NzojZW5kaWYgLyogcHRlX2ZyZWVfZGVmZXIgKi9cbm1tL3BndGFibGUtZ2VuZXJpYy5jLTI1OC0jZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4NTMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA4ODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBGZWFzaWJpbGl0eSBBc3Nlc3NtZW50OiBSQ1UgUGFnZSBUYWJsZSBGcmVlaW5nKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggc2VyaWVzIGxvb2tzIGxpa2UgYSBzaWduaWZpY2FudCByZWZhY3RvciB0byBtYWtlIFJDVS1iYXNlZCBwYWdlIHRhYmxlIGZyZWVpbmcgdGhlIHN0YW5kYXJkIGFwcHJvYWNoIGFjcm9zcyBhbGwgYXJjaGl0ZWN0dXJlcy4gSXQmIzM5O3MgZXNzZW50aWFsbHkgdW5pZnlpbmcgdGhlIG1ldGhvZCBvZiBmcmVlaW5nIHBhZ2UgdGFibGVzIHVuZGVyIGBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFYCwgY2xlYW5pbmcgdXAgc29tZSBLY29uZmlnIG9wdGlvbnMgcmVsYXRlZCB0byB0YWJsZSBmcmVlaW5nLCBhbmQgdXBkYXRpbmcgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGltcGxlbWVudGF0aW9ucyB0byB1c2UgdGhpcyBnZW5lcmljIG1lY2hhbmlzbS4gVGhlIGB6YXBfZGVwb3NpdGVkX3RhYmxlYCBmdW5jdGlvbiBub3cgdXNlcyBgcHRlX2ZyZWVfZGVmZXJgLCB3aGljaCBpcyBhIGtleSBjaGFuZ2UuCgpNeSBmaXJzdCB0aG91Z2h0IGlzLCAmIzM0O0lzIHRoaXMgZnVuY3Rpb25hbGx5IHNpZ25pZmljYW50IGVub3VnaCB0byB3YXJyYW50IGZ1enppbmc/JiMzNDsgQmFzZWQgb24gdGhlIGd1aWRlbGluZXMsIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBpbXBhY3RzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBvciBhcmNoaXRlY3R1cmVzLiBMZXQmIzM5O3Mgc2VlLi4uCgpJJiMzOTttIHNlZWluZyBjaGFuZ2VzIGFjcm9zcyBhIGJ1bmNoIG9mIGNvcmUgTU0gY29kZSwgbGlrZSBgbW0vbW11X2dhdGhlci5jYCwgYG1tL2h1Z2VfbWVtb3J5LmNgLCBgaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaGAsIGFuZCBgbW0vS2NvbmZpZ2AsIGFuZCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29kZSBmb3IgdGhpbmdzIGxpa2UgQVJDLCBtNjhrLCBtaWNyb2JsYXplLCBzaCwgc3BhcmMsIHh0ZW5zYSwgYW5kIHg4Ni4gVGhpcyBpc24mIzM5O3QganVzdCBjb3NtZXRpYzsgaXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgdG8gaG93IHBhZ2UgdGFibGVzIGFyZSBtYW5hZ2VkIGFuZCBmcmVlZC4KClNwZWNpZmljYWxseToKCiogICBJbiBgbW0vaHVnZV9tZW1vcnkuY2AsIHRoZSBjcml0aWNhbCBjaGFuZ2UgaW4gYHphcF9kZXBvc2l0ZWRfdGFibGVgIG5vdyBkZWZlcnMgdGhlIGZyZWVpbmcgb2YgdGhlIGRlcG9zaXRlZCBwYWdlIHRhYmxlIHVzaW5nIFJDVSB2aWEgYHB0ZV9mcmVlX2RlZmVyYC4gVGhhdCYjMzk7cyBhIGh1Z2Ugc2hpZnQgZnJvbSBkaXJlY3QgZnJlZWluZy4KKiAgIEluIGBtbS9tbXVfZ2F0aGVyLmNgIGFuZCBgaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaGAsIGFsbCBhcmNoaXRlY3R1cmVzIGFyZSBub3cgdXNpbmcgUkNVLWJhY2tlZCB0YWJsZSBmcmVlaW5nLgoqICAgVGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgKGUuZy4sIG02OGssIHNwYXJjLCBhcmMsIGV0Yy4pIGFyZSBiZWluZyB1cGRhdGVkIHRvIHVzZSBgdGxiX3JlbW92ZV90YWJsZWAgb3Igc2ltaWxhciBSQ1UtYmFzZWQgZnVuY3Rpb25zIGluc3RlYWQgb2Ygc3luY2hyb25vdXMgZnJlZWluZyBpbiBgX19wdGVfZnJlZV90bGJgIC8gYF9fcG1kX2ZyZWVfdGxiYC4KKiAgIFRoZXJlIGFyZSBhcmNoaXRlY3R1cmFsIGNoYW5nZXMsIGxpa2Ugc3BpbmxvY2sgYWRqdXN0bWVudHMgYW5kIHJld3JpdHRlbiBmdW5jdGlvbnMgaW4gbTY4ayBhbmQgc3BhcmMuCgpTbywgeWVhaCwgdGhpcyBjbGVhcmx5IGFmZmVjdHMgY29yZSBNTSBjb2RlLCBwYWdlIHRhYmxlIHRlYXJkb3duLCBUSFAgemFwL2NvbGxhcHNlIGFuZCBUTEIgZ2F0aGVyIHRhYmxlIGZyZWVpbmchIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLgoKVGhlcmVmb3JlLCB0aGlzIHBhdGNoIHNlcmllcyB3YXJyYW50cyBhIGNsb3NlciBsb29rIGZvciBmdXp6aW5nIHBvdGVudGlhbC4gSXQgc2VlbXMgbGlrZSBhIGhpZ2gtdmFsdWUgdGFyZ2V0LiBOZXh0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBjb25maWcgb3B0aW9ucyBhcmUgcmVsZXZhbnQgYW5kIHdoYXQgZm9jdXMgc3ltYm9scyB3b3VsZCBiZSB1c2VmdWwuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgYXJvdW5kIGB6YXBfZGVwb3NpdGVkX3RhYmxlYCwgYHB0ZV9mcmVlX2RlZmVyYCwgYHRsYl9yZW1vdmVfdGFibGVgLCBhbmQgYHRsYl90YWJsZV9mbHVzaGAgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLCBgbW0vbW11X2dhdGhlci5jYCwgYW5kIGBtbS9wZ3RhYmxlLWdlbmVyaWMuY2AgdG8gbmFycm93IGRvd24gdGhlIHRlc3QgY2FzZSBmb2N1cy4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI0NjU6XHRcbjI0NjY6XHRcdGZvbGlvX21hcmtfbGF6eWZyZWUoZm9saW8pO1xuMjQ2NzpcdFx0cmV0ID0gdHJ1ZTtcbjI0Njg6XHRvdXQ6XG4yNDY5Olx0XHRzcGluX3VubG9jayhwdGwpO1xuMjQ3MDpcdG91dF91bmxvY2tlZDpcbjI0NzE6XHRcdHJldHVybiByZXQ7XG4yNDcyOlx0fVxuMjQ3MzpcdFxuMjQ3NDpcdHN0YXRpYyBpbmxpbmUgdm9pZCB6YXBfZGVwb3NpdGVkX3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKVxuMjQ3NTpcdHtcbjI0NzY6XHRcdHBndGFibGVfdCBwZ3RhYmxlO1xuMjQ3NzpcdFxuMjQ3ODpcdFx0cGd0YWJsZSA9IHBndGFibGVfdHJhbnNfaHVnZV93aXRoZHJhdyhtbSwgcG1kKTtcbjI0Nzk6XHRcdHB0ZV9mcmVlX2RlZmVyKG1tLCBwZ3RhYmxlKTtcbjI0ODA6XHRcdG1tX2RlY19ucl9wdGVzKG1tKTtcbjI0ODE6XHR9XG4yNDgyOlx0XG4yNDgzOlx0c3RhdGljIHZvaWQgemFwX2h1Z2VfcG1kX2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbjI0ODQ6XHRcdFx0cG1kX3QgcG1kdmFsLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIGlzX3ByZXNlbnQpXG4yNDg1Olx0e1xuMjQ4NjpcdFx0Y29uc3QgYm9vbCBpc19kZXZpY2VfcHJpdmF0ZSA9IGZvbGlvX2lzX2RldmljZV9wcml2YXRlKGZvbGlvKTtcbjI0ODc6XHRcbjI0ODg6XHRcdC8qIFByZXNlbnQgYW5kIGRldmljZSBwcml2YXRlIGZvbGlvcyBhcmUgcm1hcHBhYmxlLiAqL1xuMjQ4OTpcdFx0aWYgKGlzX3ByZXNlbnQgfHwgaXNfZGV2aWNlX3ByaXZhdGUpXG4yNDkwOlx0XHRcdGZvbGlvX3JlbW92ZV9ybWFwX3BtZChmb2xpbywgXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgdm1hKTtcbjI0OTE6XHRcbjI0OTI6XHRcdGlmIChmb2xpb190ZXN0X2Fub24oZm9saW8pKSB7XG4yNDkzOlx0XHRcdGFkZF9tbV9jb3VudGVyKG1tLCBNTV9BTk9OUEFHRVMsIC1IUEFHRV9QTURfTlIpO1xuMjQ5NDpcdFx0fSBlbHNlIHtcbjI0OTU6XHRcdFx0YWRkX21tX2NvdW50ZXIobW0sIG1tX2NvdW50ZXJfZmlsZShmb2xpbyksXG4yNDk2Olx0XHRcdFx0ICAgICAgIC1IUEFHRV9QTURfTlIpO1xuMjQ5NzpcdFxuMjQ5ODpcdFx0XHRpZiAoaXNfcHJlc2VudCBcdTAwMjZcdTAwMjYgcG1kX2RpcnR5KHBtZHZhbCkpXG4yNDk5Olx0XHRcdFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG4yNTAwOlx0XHRcdGlmIChpc19wcmVzZW50IFx1MDAyNlx1MDAyNiBwbWRfeW91bmcocG1kdmFsKSBcdTAwMjZcdTAwMjZcbjI1MDE6XHRcdFx0ICAgIGxpa2VseSh2bWFfaGFzX3JlY2VuY3kodm1hKSkpXG4yNTAyOlx0XHRcdFx0Zm9saW9fbWFya19hY2Nlc3NlZChmb2xpbyk7XG4yNTAzOlx0XHR9XG4yNTA0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwMzEKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlOgoKKipUcmFjaW5nIHRoZSBMaW5lYWdlIG9mIGB6YXBfZGVwb3NpdGVkX3RhYmxlYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIG9mIGB6YXBfZGVwb3NpdGVkX3RhYmxlYC4gSXQmIzM5O3MgYSBrZXkgZGF0YSBwb2ludCwgYW5kIEkgbmVlZCB0byBzZWUgd2hlcmUgaXQgb3JpZ2luYXRlcywgaG93IGl0JiMzOTtzIHVzZWQsIGFuZCBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBkZXBlbmRlbmNpZXMuIFRoZSBiZXN0IGZpcnN0IHN0ZXAgaXMgdG8gc2VlIGV4YWN0bHkgd2hlcmUgdGhpcyB0YWJsZSwgb3IgcmF0aGVyIGl0cyBuYW1lLCBpcyByZWZlcmVuY2VkIHdpdGhpbiB0aGUgY29kZWJhc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxscyBiZWluZyBtYWRlLiBLbm93aW5nIHRoZSBjYWxsIHN0YWNrIHdpbGwgbGV0IG1lIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIGludGVncmF0aW9uIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0uIEkmIzM5O2xsIHN0YXJ0IHdpdGggYSBzdHJhaWdodGZvcndhcmQgc2VhcmNoIGZvciBjYWxscy4gVGhpcyB3aWxsIHByb3ZpZGUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24sIGFsbG93aW5nIG1lIHRvIGJ1aWxkIGEgcHJvcGVyIG1lbnRhbCBtb2RlbCBvZiBpdHMgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3phcF9kZXBvc2l0ZWRfdGFibGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz0yNDAwPWJvb2wgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjQ3My1cbm1tL2h1Z2VfbWVtb3J5LmM6MjQ3NDpzdGF0aWMgaW5saW5lIHZvaWQgemFwX2RlcG9zaXRlZF90YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZClcbm1tL2h1Z2VfbWVtb3J5LmMtMjQ3NS17XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0yNTUxPWJvb2wgemFwX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjU4Mi1cdGlmIChoYXNfZGVwb3NpdClcbm1tL2h1Z2VfbWVtb3J5LmM6MjU4MzpcdFx0emFwX2RlcG9zaXRlZF90YWJsZShtbSwgcG1kKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMjU4NC1cbi0tXG5tbS9odWdlX21lbW9yeS5jPTMxODg9c3RhdGljIHZvaWQgX19zcGxpdF9odWdlX3BtZF9sb2NrZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zMjE2LVx0XHRpZiAoYXJjaF9uZWVkc19wZ3RhYmxlX2RlcG9zaXQoKSlcbm1tL2h1Z2VfbWVtb3J5LmM6MzIxNzpcdFx0XHR6YXBfZGVwb3NpdGVkX3RhYmxlKG1tLCBwbWQpO1xubW0vaHVnZV9tZW1vcnkuYy0zMjE4LVx0XHRpZiAodm1hX2lzX3NwZWNpYWxfaHVnZSh2bWEpKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MzU2MT1zdGF0aWMgYm9vbCBfX2Rpc2NhcmRfYW5vbl9mb2xpb19wbWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzYxNC1cdGZvbGlvX3JlbW92ZV9ybWFwX3BtZChmb2xpbywgcG1kX3BhZ2Uob3JpZ19wbWQpLCB2bWEpO1xubW0vaHVnZV9tZW1vcnkuYzozNjE1Olx0emFwX2RlcG9zaXRlZF90YWJsZShtbSwgcG1kcCk7XG5tbS9odWdlX21lbW9yeS5jLTM2MTYtXHRhZGRfbW1fY291bnRlcihtbSwgTU1fQU5PTlBBR0VTLCAtSFBBR0VfUE1EX05SKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTczMwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuCgoqKkV4YW1pbmluZyBIdWdlIFBhZ2UgVW5tYXBwaW5nIGFuZCBHYXRoZXIgT3BlcmF0aW9ucyoqCgpSaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgaHVnZSBwYWdlcyBhcmUgdW5tYXBwZWQgd2l0aGluIHRoZSBrZXJuZWwuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYHphcF9odWdlX3BtZGAgd2l0aGluIGBtbS9odWdlX21lbW9yeS5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGxvZ2ljIGZvciByZW1vdmluZyBhIGh1Z2UgcGFnZSYjMzk7cyBtYXBwaW5nLiBJJiMzOTtsbCBuZWVkIHRvIHNjcnV0aW5pemUgaG93IGl0IGhhbmRsZXMgdGhlIGRldGFpbHMsIGVzcGVjaWFsbHkgcmVnYXJkaW5nIHBvdGVudGlhbCBUTEIgaW52YWxpZGF0aW9uIGFuZCBzeW5jaHJvbml6YXRpb24uCgpUaGVuLCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQsIEkgc2hvdWxkIGFsc28gbG9vayBhdCB0aGUgYG1tdV9nYXRoZXIuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJvbGUgb2YgdGhlIGZ1bmN0aW9ucyB3aXRoaW4gYG1tL21tdV9nYXRoZXIuY2AuIEkmIzM5O2xsIGJlIGxvb2tpbmcgdG8gc2VlIGhvdyB0aGUgZ2F0aGVycyBhcmUgaW1wbGVtZW50ZWQgd2l0aGluIGBtbXVfZ2F0aGVyLmNgIGFuZCBob3cgdGhhdCBpbnRlcmFjdHMgd2l0aCB0aGUgcGFnZSB1bm1hcHBpbmcgcHJvY2Vzcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgZ2F0aGVycyBhcmUgZ2F0aGVyaW5nLCB0aGUgcmVhc29ucyBmb3IgZ2F0aGVyaW5nLCBhbmQgaG93IHRoYXQgaW50ZXJhY3RzIHdpdGggdGhlIHNwZWNpZmljIHVubWFwcGluZyBjYWxscyB3aXRoaW4gdGhlIGB6YXBfaHVnZV9wbWRgIHByb2Nlc3MuIFdpdGggYSBzdHJvbmcgdW5kZXJzdGFuZGluZyBvZiBib3RoLCBJIHNob3VsZCBnZXQgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIHdob2xlIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbW11X2dhdGhlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNzA6XHRcdC8qIFNpbXBseSBkZWxpdmVyIHRoZSBpbnRlcnJ1cHQgKi9cbiAyNzE6XHR9XG4gMjcyOlx0XG4gMjczOlx0dm9pZCB0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfb25lKHZvaWQpXG4gMjc0Olx0e1xuIDI3NTpcdFx0LypcbiAyNzY6XHRcdCAqIFRoaXMgaXNuJiMzOTt0IGFuIFJDVSBncmFjZSBwZXJpb2QgYW5kIGhlbmNlIHRoZSBwYWdlLXRhYmxlcyBjYW5ub3QgYmVcbiAyNzc6XHRcdCAqIGFzc3VtZWQgdG8gYmUgYWN0dWFsbHkgUkNVLWZyZWVkLlxuIDI3ODpcdFx0ICpcbiAyNzk6XHRcdCAqIEl0IGlzIGhvd2V2ZXIgc3VmZmljaWVudCBmb3Igc29mdHdhcmUgcGFnZS10YWJsZSB3YWxrZXJzIHRoYXQgcmVseSBvblxuIDI4MDpcdFx0ICogSVJRIGRpc2FibGluZy5cbiAyODE6XHRcdCAqL1xuIDI4MjpcdFx0c21wX2NhbGxfZnVuY3Rpb24odGxiX3JlbW92ZV90YWJsZV9zbXBfc3luYywgTlVMTCwgMSk7XG4gMjgzOlx0fVxuIDI4NDpcdFxuIDI4NTpcdHN0YXRpYyB2b2lkIHRsYl9yZW1vdmVfdGFibGVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbiAyODY6XHR7XG4gMjg3Olx0XHRfX3RsYl9yZW1vdmVfdGFibGVfZnJlZShjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IG1tdV90YWJsZV9iYXRjaCwgcmN1KSk7XG4gMjg4Olx0fVxuIDI4OTpcdFxuIDI5MDpcdHN0YXRpYyB2b2lkIHRsYl9yZW1vdmVfdGFibGVfZnJlZShzdHJ1Y3QgbW11X3RhYmxlX2JhdGNoICpiYXRjaClcbiAyOTE6XHR7XG4gMjkyOlx0XHRjYWxsX3JjdShcdTAwMjZiYXRjaC1cdTAwM2VyY3UsIHRsYl9yZW1vdmVfdGFibGVfcmN1KTtcbiAyOTM6XHR9XG4gMjk0Olx0XG4gMjk1Olx0LyoqXG4gMjk2Olx0ICogdGxiX3JlbW92ZV90YWJsZV9zeW5jX3JjdSAtIHN5bmNocm9uaXplIHdpdGggc29mdHdhcmUgcGFnZS10YWJsZSB3YWxrZXJzXG4gMjk3Olx0ICpcbiAyOTg6XHQgKiBMaWtlIHRsYl9yZW1vdmVfdGFibGVfc3luY19vbmUoKSBidXQgdXNlcyBSQ1UgZ3JhY2UgcGVyaW9kIGluc3RlYWQgb2YgSVBJXG4gMjk5Olx0ICogYnJvYWRjYXN0LiBVc2UgaW4gc2xvdyBwYXRocyB3aGVyZSBzbGVlcGluZyBpcyBhY2NlcHRhYmxlLlxuIDMwMDpcdCAqXG4gMzAxOlx0ICogU29mdHdhcmUvTG9ja2xlc3MgcGFnZS10YWJsZSB3YWxrZXJzIHVzZSBsb2NhbF9pcnFfZGlzYWJsZSgpLCB3aGljaCBpcyBhbHNvXG4gMzAyOlx0ICogYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLiBzeW5jaHJvbml6ZV9yY3UoKSB3YWl0cyBmb3IgYWxsIHN1Y2hcbiAzMDM6XHQgKiBzZWN0aW9ucywgcHJvdmlkaW5nIHRoZSBzYW1lIGd1YXJhbnRlZSBhcyB0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfb25lKCkgYnV0XG4gMzA0Olx0ICogd2l0aG91dCBkaXNydXB0aW5nIGFsbCBDUFVzIHdpdGggSVBJcy5cbiAzMDU6XHQgKlxuIDMwNjpcdCAqIERvIG5vdCB1c2UgZm9yIGZyZWVpbmcgbWVtb3J5LiBVc2UgUkNVIGNhbGxiYWNrcyBpbnN0ZWFkIHRvIGF2b2lkIGxhdGVuY3lcbiAzMDc6XHQgKiBzcGlrZXMuXG4gMzA4Olx0ICovXG4gMzA5Olx0dm9pZCB0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfcmN1KHZvaWQpXG4gMzEwOlx0e1xuIDMxMTpcdFx0c3luY2hyb25pemVfcmN1KCk7XG4gMzEyOlx0fVxuIDMxMzpcdFxuIDMxNDpcdC8qXG4gMzE1Olx0ICogSWYgd2Ugd2FudCB0bGJfcmVtb3ZlX3RhYmxlKCkgdG8gaW1wbHkgVExCIGludmFsaWRhdGVzLlxuIDMxNjpcdCAqL1xuIDMxNzpcdHN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfdGFibGVfaW52YWxpZGF0ZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiKVxuIDMxODpcdHtcbiAzMTk6XHRcdGlmICh0bGJfbmVlZHNfdGFibGVfaW52YWxpZGF0ZSgpKSB7XG4gMzIwOlx0XHRcdC8qXG4gMzIxOlx0XHRcdCAqIEludmFsaWRhdGUgcGFnZS10YWJsZSBjYWNoZXMgdXNlZCBieSBoYXJkd2FyZSB3YWxrZXJzLiBUaGVuXG4gMzIyOlx0XHRcdCAqIHdlIHN0aWxsIG5lZWQgdG8gUkNVLXNjaGVkIHdhaXQgd2hpbGUgZnJlZWluZyB0aGUgcGFnZXNcbiAzMjM6XHRcdFx0ICogYmVjYXVzZSBzb2Z0d2FyZSB3YWxrZXJzIGNhbiBzdGlsbCBiZSBpbi1mbGlnaHQuXG4gMzI0Olx0XHRcdCAqL1xuIDMyNTpcdFx0XHR0bGJfZmx1c2hfbW11X3RsYm9ubHkodGxiKTtcbiAzMjY6XHRcdH1cbiAzMjc6XHR9XG4gMzI4Olx0XG4gMzI5Olx0I2lmZGVmIENPTkZJR19QVF9SRUNMQUlNXG4gMzMwOlx0c3RhdGljIGlubGluZSB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZV9vbmVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbiAzMzE6XHR7XG4gMzMyOlx0XHRzdHJ1Y3QgcHRkZXNjICpwdGRlc2M7XG4gMzMzOlx0XG4gMzM0Olx0XHRwdGRlc2MgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IHB0ZGVzYywgcHRfcmN1X2hlYWQpO1xuIDMzNTpcdFx0X190bGJfcmVtb3ZlX3RhYmxlKHB0ZGVzYyk7XG4gMzM2Olx0fVxuIDMzNzpcdFxuIDMzODpcdHN0YXRpYyBpbmxpbmUgdm9pZCBfX3RsYl9yZW1vdmVfdGFibGVfb25lKHZvaWQgKnRhYmxlKVxuIDMzOTpcdHtcbiAzNDA6XHRcdHN0cnVjdCBwdGRlc2MgKnB0ZGVzYztcbiAzNDE6XHRcbiAzNDI6XHRcdHB0ZGVzYyA9IHRhYmxlO1xuIDM0MzpcdFx0Y2FsbF9yY3UoXHUwMDI2cHRkZXNjLVx1MDAzZXB0X3JjdV9oZWFkLCBfX3RsYl9yZW1vdmVfdGFibGVfb25lX3JjdSk7XG4gMzQ0Olx0fVxuIDM0NTpcdCNlbHNlXG4gMzQ2Olx0c3RhdGljIGlubGluZSB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZV9vbmUodm9pZCAqdGFibGUpXG4gMzQ3Olx0e1xuIDM0ODpcdFx0dGxiX3JlbW92ZV90YWJsZV9zeW5jX3JjdSgpO1xuIDM0OTpcdFx0X190bGJfcmVtb3ZlX3RhYmxlKHRhYmxlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMyOTkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBgdGxiX3JlbW92ZV90YWJsZWAgSW1wbGVtZW50YXRpb24qKgoKT2theSwgdGltZSB0byBkaXNzZWN0IGB0bGJfcmVtb3ZlX3RhYmxlYC4gVGhlIGZ1bmN0aW9uIGl0c2VsZiBpcyBpbiBgbW0vbW11X2dhdGhlci5jYCwgc28gdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBzdGFydC4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgaXQgaGFuZGxlcyBpbnZhbGlkYXRpbmcgVExCIGVudHJpZXMgYXNzb2NpYXRlZCB3aXRoIGEgcGFnZSB0YWJsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBnYXRoZXIgY29udGV4dCwgYW5kIGhvdyBpdCBkZWFscyB3aXRoIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBvZiBvcHRpbWl6YXRpb24gc3RyYXRlZ2llcywgYW5kIGlmIHRoZSBpbXBsZW1lbnRhdGlvbiB0YWtlcyBhZHZhbnRhZ2Ugb2YgYW55IHByb2Nlc3Nvci1zcGVjaWZpYyBpbnN0cnVjdGlvbnMgb3IgZmVhdHVyZXMuIEJleW9uZCB0aGF0LCBJIHdpbGwgY2hlY2sgdGhlIHVzdWFsIHN1c3BlY3RzIC0gdGhlIGVycm9yIGhhbmRsaW5nLCBhbmQgdGhlIGVkZ2UgY2FzZXMuIEkmIzM5O20gZXNwZWNpYWxseSBrZWVuIHRvIHNlZSB0aGUgZGV0YWlscyBvZiBhbnkgYXJjaGl0ZWN0dXJhbCBxdWlya3MgdGhhdCBhcmUgZXhwbGljaXRseSBoYW5kbGVkLiBJIGV4cGVjdCB0byBiZSBhYmxlIHRvIGZvbGxvdyB0aGUgbG9naWMgYW5kIGV4cGxhaW4gaXQgYmFjayB0byBteXNlbGYgaW4gZGV0YWlsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21tdV9nYXRoZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzUwOlx0fVxuIDM1MTpcdCNlbmRpZiAvKiBDT05GSUdfUFRfUkVDTEFJTSAqL1xuIDM1MjpcdFxuIDM1MzpcdHN0YXRpYyB2b2lkIHRsYl9yZW1vdmVfdGFibGVfb25lKHZvaWQgKnRhYmxlKVxuIDM1NDpcdHtcbiAzNTU6XHRcdF9fdGxiX3JlbW92ZV90YWJsZV9vbmUodGFibGUpO1xuIDM1NjpcdH1cbiAzNTc6XHRcbiAzNTg6XHRzdGF0aWMgdm9pZCB0bGJfdGFibGVfZmx1c2goc3RydWN0IG1tdV9nYXRoZXIgKnRsYilcbiAzNTk6XHR7XG4gMzYwOlx0XHRzdHJ1Y3QgbW11X3RhYmxlX2JhdGNoICoqYmF0Y2ggPSBcdTAwMjZ0bGItXHUwMDNlYmF0Y2g7XG4gMzYxOlx0XG4gMzYyOlx0XHRpZiAoKmJhdGNoKSB7XG4gMzYzOlx0XHRcdHRsYl90YWJsZV9pbnZhbGlkYXRlKHRsYik7XG4gMzY0Olx0XHRcdHRsYl9yZW1vdmVfdGFibGVfZnJlZSgqYmF0Y2gpO1xuIDM2NTpcdFx0XHQqYmF0Y2ggPSBOVUxMO1xuIDM2NjpcdFx0fVxuIDM2NzpcdH1cbiAzNjg6XHRcbiAzNjk6XHR2b2lkIHRsYl9yZW1vdmVfdGFibGUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgdm9pZCAqdGFibGUpXG4gMzcwOlx0e1xuIDM3MTpcdFx0c3RydWN0IG1tdV90YWJsZV9iYXRjaCAqKmJhdGNoID0gXHUwMDI2dGxiLVx1MDAzZWJhdGNoO1xuIDM3MjpcdFxuIDM3MzpcdFx0aWYgKCpiYXRjaCA9PSBOVUxMKSB7XG4gMzc0Olx0XHRcdCpiYXRjaCA9IChzdHJ1Y3QgbW11X3RhYmxlX2JhdGNoICopX19nZXRfZnJlZV9wYWdlKEdGUF9OT1dBSVQpO1xuIDM3NTpcdFx0XHRpZiAoKmJhdGNoID09IE5VTEwpIHtcbiAzNzY6XHRcdFx0XHR0bGJfdGFibGVfaW52YWxpZGF0ZSh0bGIpO1xuIDM3NzpcdFx0XHRcdHRsYl9yZW1vdmVfdGFibGVfb25lKHRhYmxlKTtcbiAzNzg6XHRcdFx0XHRyZXR1cm47XG4gMzc5Olx0XHRcdH1cbiAzODA6XHRcdFx0KCpiYXRjaCktXHUwMDNlbnIgPSAwO1xuIDM4MTpcdFx0fVxuIDM4MjpcdFxuIDM4MzpcdFx0KCpiYXRjaCktXHUwMDNldGFibGVzWygqYmF0Y2gpLVx1MDAzZW5yJiM0MzsmIzQzO10gPSB0YWJsZTtcbiAzODQ6XHRcdGlmICgoKmJhdGNoKS1cdTAwM2VuciA9PSBNQVhfVEFCTEVfQkFUQ0gpXG4gMzg1Olx0XHRcdHRsYl90YWJsZV9mbHVzaCh0bGIpO1xuIDM4NjpcdH1cbiAzODc6XHRcbiAzODg6XHRzdGF0aWMgaW5saW5lIHZvaWQgdGxiX3RhYmxlX2luaXQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYilcbiAzODk6XHR7XG4gMzkwOlx0XHR0bGItXHUwMDNlYmF0Y2ggPSBOVUxMO1xuIDM5MTpcdH1cbiAzOTI6XHRcbiAzOTM6XHRzdGF0aWMgdm9pZCB0bGJfZmx1c2hfbW11X2ZyZWUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYilcbiAzOTQ6XHR7XG4gMzk1Olx0XHR0bGJfdGFibGVfZmx1c2godGxiKTtcbiAzOTY6XHQjaWZuZGVmIENPTkZJR19NTVVfR0FUSEVSX05PX0dBVEhFUlxuIDM5NzpcdFx0dGxiX2JhdGNoX3BhZ2VzX2ZsdXNoKHRsYik7XG4gMzk4Olx0I2VuZGlmXG4gMzk5Olx0fVxuIDQwMDpcdFxuIDQwMTpcdHZvaWQgdGxiX2ZsdXNoX21tdShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiKVxuIDQwMjpcdHtcbiA0MDM6XHRcdHRsYl9mbHVzaF9tbXVfdGxib25seSh0bGIpO1xuIDQwNDpcdFx0dGxiX2ZsdXNoX21tdV9mcmVlKHRsYik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MzQ4CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGB0bGJfcmVtb3ZlX3B0ZGVzY2AqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYHRsYl9yZW1vdmVfcHRkZXNjYCBmdW5jdGlvbi4gSSBrbm93IGl0JiMzOTtzIHJlbGF0ZWQgdG8gVExCIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBwYWdlIHRhYmxlIGRlc2NyaXB0b3IgcmVtb3ZhbCwgYnV0IEkgd2FudCB0byBiZSBjZXJ0YWluIGFib3V0IHRoZSBleGFjdCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBwZXJmb3JtYW5jZS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBkZWZpbml0aW9uIGluIGBpbmNsdWRlL2FzbS1nZW5lcmljL3RsYi5oYC4gVGhpcyBnZW5lcmljIGhlYWRlciBzaG91bGQgcHJvdmlkZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIGludGVyZmFjZSBhbmQgbGlrZWx5IHBvaW50IG1lIHRvIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIGlmIG5lY2Vzc2FyeS4gVW5kZXJzdGFuZGluZyB0aGUgZ2VuZXJpYyBiZWhhdmlvciBpcyB0aGUga2V5IHN0YXJ0aW5nIHBvaW50IHRvIGNvbnNpZGVyIGJlZm9yZSBsb29raW5nIGZvciBwcm9jZXNzb3Itc3BlY2lmaWMgb3B0aW1pc2F0aW9ucyBvciBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RsYl9yZW1vdmVfcHRkZXNjJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaD00NzI9c3RhdGljIGlubGluZSB2b2lkIHRsYl9yZW1vdmVfcGFnZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5pbmNsdWRlL2FzbS1nZW5lcmljL3RsYi5oLTQ3Ni1cbmluY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmg6NDc3OnN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfcmVtb3ZlX3B0ZGVzYyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3QgcHRkZXNjICpwdClcbmluY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmgtNDc4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ2OTQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkRpdmluZyBpbnRvIHRoZSBUTEIgSW1wbGVtZW50YXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgd2FudCB0byB1bmRlcnN0YW5kIGEgYml0IG1vcmUgYWJvdXQgaG93IHRoZSBUTEIgaXMgaGFuZGxlZCBpbiB0aGUgZ2VuZXJpYyBhcmNoaXRlY3R1cmUsIHNvIGxldCYjMzk7cyBqdW1wIHJpZ2h0IGludG8gdGhlIGhlYXJ0IG9mIGl0LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gaGVhZGluZyBvdmVyIHRvIHRoZSBgaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaGAgZmlsZS4gSSYjMzk7bSBhaW1pbmcgZm9yIGFyb3VuZCBsaW5lIDQ3NSwgZ2l2ZSBvciB0YWtlLCBhcyB0aGF0JiMzOTtzIHVzdWFsbHkgYSBnb29kIHNwb3QgdG8gZmluZCBzb21lIGludGVyZXN0aW5nIGdlbmVyaWMgVExCLXJlbGF0ZWQgZGVmaW5pdGlvbnMgb3IgbWFjcm9zLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgY3J1Y2lhbCBwaWVjZXMgb2YgdGhlIHB1enpsZSB0aGVyZS4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyB1c3VhbGx5IHJlc2lkZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDY1Olx0c3RhdGljIGlubGluZSB2b2lkIHRsYl9yZW1vdmVfcGFnZV9zaXplKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG4gNDY2Olx0XHRcdFx0XHRcdHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgcGFnZV9zaXplKVxuIDQ2NzpcdHtcbiA0Njg6XHRcdGlmIChfX3RsYl9yZW1vdmVfcGFnZV9zaXplKHRsYiwgcGFnZSwgcGFnZV9zaXplKSlcbiA0Njk6XHRcdFx0dGxiX2ZsdXNoX21tdSh0bGIpO1xuIDQ3MDpcdH1cbiA0NzE6XHRcbiA0NzI6XHRzdGF0aWMgaW5saW5lIHZvaWQgdGxiX3JlbW92ZV9wYWdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCBwYWdlICpwYWdlKVxuIDQ3MzpcdHtcbiA0NzQ6XHRcdHJldHVybiB0bGJfcmVtb3ZlX3BhZ2Vfc2l6ZSh0bGIsIHBhZ2UsIFBBR0VfU0laRSk7XG4gNDc1Olx0fVxuIDQ3NjpcdFxuIDQ3NzpcdHN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfcmVtb3ZlX3B0ZGVzYyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3QgcHRkZXNjICpwdClcbiA0Nzg6XHR7XG4gNDc5Olx0XHR0bGJfcmVtb3ZlX3RhYmxlKHRsYiwgcHQpO1xuIDQ4MDpcdH1cbiA0ODE6XHRcbiA0ODI6XHRzdGF0aWMgaW5saW5lIHZvaWQgdGxiX2NoYW5nZV9wYWdlX3NpemUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbiA0ODM6XHRcdFx0XHRcdFx0XHQgICAgIHVuc2lnbmVkIGludCBwYWdlX3NpemUpXG4gNDg0Olx0e1xuIDQ4NTpcdCNpZmRlZiBDT05GSUdfTU1VX0dBVEhFUl9QQUdFX1NJWkVcbiA0ODY6XHRcdGlmICh0bGItXHUwMDNlcGFnZV9zaXplIFx1MDAyNlx1MDAyNiB0bGItXHUwMDNlcGFnZV9zaXplICE9IHBhZ2Vfc2l6ZSkge1xuIDQ4NzpcdFx0XHRpZiAoIXRsYi1cdTAwM2VmdWxsbW0gXHUwMDI2XHUwMDI2ICF0bGItXHUwMDNlbmVlZF9mbHVzaF9hbGwpXG4gNDg4Olx0XHRcdFx0dGxiX2ZsdXNoX21tdSh0bGIpO1xuIDQ4OTpcdFx0fVxuIDQ5MDpcdFxuIDQ5MTpcdFx0dGxiLVx1MDAzZXBhZ2Vfc2l6ZSA9IHBhZ2Vfc2l6ZTtcbiA0OTI6XHQjZW5kaWZcbiA0OTM6XHR9XG4gNDk0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1Mzg0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVExCIFJlbW92YWwgYW5kIFBhZ2UgVGFibGUgUmVjbGFtYXRpb24gQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyB0aGUga2V5IGZ1bmN0aW9uIHdlJiMzOTtyZSBsb29raW5nIGF0IGlzIGB0bGJfcmVtb3ZlX3B0ZGVzY2Agd2hpY2ggaXMgbm93IGNvbnNpc3RlbnRseSBjYWxsaW5nIGB0bGJfcmVtb3ZlX3RhYmxlKHRsYiwgcHQpYC4gVGhlIGNydWNpYWwgc2hpZnQgaGVyZSBpcyBpbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHRsYl9yZW1vdmVfdGFibGVgLiBCZWZvcmUgdGhpcyBwYXRjaCwgdGhlIGNvZGUgd2FzIGlubGluZWQgYW5kIGhhbmRsZWQgaW1tZWRpYXRlbHksIHdoaWNoIGludm9sdmVkIGEgc2ltcGxlIGRlc3RydWN0aW9uIG9mIHRoZSBwYWdlIHRhYmxlIGRlc2NyaXB0b3IgYW5kIGltbWVkaWF0ZSByZW1vdmFsIGZyb20gdGhlIFRMQi4KCk5vdywgdGhvdWdoLCBgdGxiX3JlbW92ZV90YWJsZWAgaXMgQUxXQVlTIGRlZmluZWQgaW4gYG1tL21tdV9nYXRoZXIuY2AgYW5kIGxldmVyYWdlcyBSQ1UgYmF0Y2hpbmcsIHVzaW5nIGVpdGhlciBgY2FsbF9yY3VgIG9yIGBzeW5jaHJvbml6ZV9yY3VgLiBTbywgd2UmIzM5O3JlIGRlZmVycmluZyB0aGUgYWN0dWFsIHRhYmxlIHJlbW92YWwgdXNpbmcgUkNVIG5vdywgY29ycmVjdD8KCkFscmlnaHQsIGxldCYjMzk7cyBxdWlja2x5IGNoZWNrIHRoZSBgUFRfUkVDTEFJTWAgb3B0aW9uIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gUHJldmlvdXNseSwgaXRzIGRlcGVuZGVuY3kgd2FzIHRpZWQgdG8gYE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVgIGFuZCB0aGUgYWJzZW5jZSBvZiBhbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYEhBVkVfQVJDSF9UTEJfUkVNT1ZFX1RBQkxFYCBkZWZpbml0aW9uLiBOb3csIHdpdGggdGhlIHJlbW92YWwgb2YgYE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVgLCBpdCBzb2xlbHkgZGVwZW5kcyBvbiBgTU1VYCBhbmQgdGhlIGFic2VuY2Ugb2YgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmdW5jdGlvbi4gSSYjMzk7bSBpbmZlcnJpbmcgdGhpcyBtZWFucyBgUFRfUkVDTEFJTWAgYmVjb21lcyBsZXNzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYy4gSW50ZXJlc3RpbmcuLi4KCkZpbmFsbHksIHRoZSBkaXNjdXNzaW9uIG9mIGBwdGVfZnJlZV9kZWZlcmAgaW5kaWNhdGVzIHdlIG5lZWQgdG8gZXhhbWluZSBgbW0vcGd0YWJsZS1nZW5lcmljLmNgIGFyb3VuZCBsaW5lIDI0MC4gVGhhdCYjMzk7cyBsaWtlbHkgd2hlcmUgdGhlIGFjdHVhbCBwYWdlIHRhYmxlIGZyZWVpbmcgZGVmZXJyYWwgaXMgYmVpbmcgaGFuZGxlZCBvciBjYWxsZWQgaW4gY29uanVuY3Rpb24gd2l0aCBSQ1UuIFNvLCB0aGUga2V5IGlzIHRoZSBwYWdlIHRhYmxlIHJlbW92YWwgaXMgbm8gbG9uZ2VyIGltbWVkaWF0ZSwgaXQmIzM5O3MgYmVpbmcgZGVmZXJyZWQsIHByb2JhYmx5IGltcHJvdmluZyB0aGUgcGVyZm9ybWFuY2UgYXMgYSByZXN1bHQgb2YgUkNVIGJhdGNoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3BndGFibGUtZ2VuZXJpYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMzU6XHRcdGZsdXNoX3RsYl9yYW5nZSh2bWEsIGFkZHJlc3MsIGFkZHJlc3MgJiM0MzsgSFBBR0VfUE1EX1NJWkUpO1xuIDIzNjpcdFx0cmV0dXJuIHBtZDtcbiAyMzc6XHR9XG4gMjM4Olx0I2VuZGlmXG4gMjM5Olx0XG4gMjQwOlx0LyogYXJjaCBkZWZpbmUgcHRlX2ZyZWVfZGVmZXIgaW4gYXNtL3BnYWxsb2MuaCBmb3IgaXRzIG93biBpbXBsZW1lbnRhdGlvbiAqL1xuIDI0MTpcdCNpZm5kZWYgcHRlX2ZyZWVfZGVmZXJcbiAyNDI6XHRzdGF0aWMgdm9pZCBwdGVfZnJlZV9ub3coc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuIDI0MzpcdHtcbiAyNDQ6XHRcdHN0cnVjdCBwYWdlICpwYWdlO1xuIDI0NTpcdFxuIDI0NjpcdFx0cGFnZSA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgcGFnZSwgcmN1X2hlYWQpO1xuIDI0NzpcdFx0cHRlX2ZyZWUoTlVMTCAvKiBtbSBub3QgcGFzc2VkIGFuZCBub3QgdXNlZCAqLywgKHBndGFibGVfdClwYWdlKTtcbiAyNDg6XHR9XG4gMjQ5Olx0XG4gMjUwOlx0dm9pZCBwdGVfZnJlZV9kZWZlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHBndGFibGUpXG4gMjUxOlx0e1xuIDI1MjpcdFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gMjUzOlx0XG4gMjU0Olx0XHRwYWdlID0gcGd0YWJsZTtcbiAyNTU6XHRcdGNhbGxfcmN1KFx1MDAyNnBhZ2UtXHUwMDNlcmN1X2hlYWQsIHB0ZV9mcmVlX25vdyk7XG4gMjU2Olx0fVxuIDI1NzpcdCNlbmRpZiAvKiBwdGVfZnJlZV9kZWZlciAqL1xuIDI1ODpcdCNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbiAyNTk6XHRcbiAyNjA6XHQjaWYgZGVmaW5lZChDT05GSUdfR1VQX0dFVF9QWFhfTE9XX0hJR0gpIFx1MDAyNlx1MDAyNiBcXFxuIDI2MTpcdFx0KGRlZmluZWQoQ09ORklHX1NNUCkgfHwgZGVmaW5lZChDT05GSUdfUFJFRU1QVF9SQ1UpKVxuIDI2MjpcdC8qXG4gMjYzOlx0ICogU2VlIHRoZSBjb21tZW50IGFib3ZlIHB0ZXBfZ2V0X2xvY2tsZXNzKCkgaW4gaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg6XG4gMjY0Olx0ICogdGhlIGJhcnJpZXJzIGluIHBtZHBfZ2V0X2xvY2tsZXNzKCkgY2Fubm90IGd1YXJhbnRlZSB0aGF0IHRoZSB2YWx1ZSBpblxuIDI2NTpcdCAqIHBtZF9oaWdoIGFjdHVhbGx5IGJlbG9uZ3Mgd2l0aCB0aGUgdmFsdWUgaW4gcG1kX2xvdzsgYnV0IGhvbGRpbmcgaW50ZXJydXB0c1xuIDI2NjpcdCAqIG9mZiBibG9ja3MgdGhlIFRMQiBmbHVzaCBiZXR3ZWVuIHByZXNlbnQgdXBkYXRlcywgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IGFcbiAyNjc6XHQgKiBzdWNjZXNzZnVsIF9fcHRlX29mZnNldF9tYXAoKSBwb2ludHMgdG8gYSBwYWdlIGZyb20gbWF0Y2hlZCBoYWx2ZXMuXG4gMjY4Olx0ICovXG4gMjY5Olx0c3RhdGljIHVuc2lnbmVkIGxvbmcgcG1kcF9nZXRfbG9ja2xlc3Nfc3RhcnQodm9pZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY4MDMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA1NDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBhZ2UgVGFibGUgRnJlZWluZyBpbiB0aGUgS2VybmVsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3ZlIGdvdCBzb21lIGludGVyZXN0aW5nIGNoYW5nZXMgYXJvdW5kIHBhZ2UgdGFibGUgZnJlZWluZywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gSHVnZVRMQiBwYWdlcy4gVGhlIGB6YXBfZGVwb3NpdGVkX3RhYmxlYCBmdW5jdGlvbiB3aXRoaW4gYG1tL2h1Z2VfbWVtb3J5LmNgIG5vdyBjYWxscyBgcHRlX2ZyZWVfZGVmZXJgLCB3aGljaCBpcyB1c2luZyBSQ1UgZm9yIGRlZmVycmVkIGZyZWVpbmcuIFRoaXMgaXMgb25seSBjb21waWxlZCB3aGVuIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGVuYWJsZWQsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGVuIHdlIGhhdmUgYHRsYl9yZW1vdmVfdGFibGVgIGluIGBtbS9tbXVfZ2F0aGVyLmNgLCB3aGljaCBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfTU1VYCBpcyBlbmFibGVkLCBhbmQgYENPTkZJR19QVF9SRUNMQUlNYCBpcyBlbmFibGVkIHdoZW4gYm90aCBgQ09ORklHX01NVWAgaXMgZW5hYmxlZCBhbmQgYCFIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRWAuCgpTbywgdGhlIGtleSBjb25maWdzIHRvIGtlZXAgaW4gbWluZCBhcmUgYE1NVWAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGVpciBpbnRlcmFjdGlvbnMuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgcmVsZXZhbnQgZW50cnlwb2ludHMuIE9idmlvdXNseSwgYHRsYl9yZW1vdmVfdGFibGVgIChpbiBgbW0vbW11X2dhdGhlci5jYCkgaXMgY3JpdGljYWwsIGFzIGl0JiMzOTtzIGdsb2JhbCBhbmQgY2FsbGVkIHdoZW5ldmVyIHBhZ2UgdGFibGVzIG9yIGRpcmVjdG9yaWVzIGFyZSBiZWluZyBmcmVlZC4gVGhlbiB0aGVyZSYjMzk7cyB0aGUgc3luYyB2YXJpYW50czogYHRsYl9yZW1vdmVfdGFibGVfc3luY19vbmVgIGFuZCBgdGxiX3JlbW92ZV90YWJsZV9zeW5jX3JjdWAgaW4gYG1tL21tdV9nYXRoZXIuY2AuIFdlIGFsc28gaGF2ZSBgcHRlX2ZyZWVfZGVmZXJgIGluIGBtbS9wZ3RhYmxlLWdlbmVyaWMuY2AsIHdoaWNoIGlzIHRoZSBSQ1UgZGVmZXJyYWwgbWVjaGFuaXNtLiBBbmQgb2YgY291cnNlLCBgemFwX2h1Z2VfcG1kYCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AgaXMgaW1wb3J0YW50LiBBbHNvLCB0aGUgc3RhbmRhcmQgTU0gZW50cnlwb2ludHMgbGlrZSBgemFwX3BhZ2VfcmFuZ2Vfc2luZ2xlYCwgYHphcF92bWFfcHRlc2AsIGFuZCBgZnJlZV9wZ3RhYmxlc2Agd2lsbCBsaWtlbHkgdHJpZ2dlciB0aGVzZSBjYWxscy4gV2UgYWxzbyBoYXZlIGBfX3NwbGl0X2h1Z2VfcG1kX2xvY2tlZGAgYW5kIGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgLgoKSSBzaG91bGQgY2hlY2sgdGhlIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGZ1bmN0aW9ucyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgcG90ZW50aWFsIGNhbGwgc2l0ZXMuIFNwZWNpZmljYWxseTogYHRsYl9yZW1vdmVfdGFibGVgLCBgdGxiX3JlbW92ZV90YWJsZV9zeW5jX29uZWAsIGB0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfcmN1YCAoYWxsIGluIGBtbS9tbXVfZ2F0aGVyLmNgKSwgYHB0ZV9mcmVlX2RlZmVyYCAoaW4gYG1tL3BndGFibGUtZ2VuZXJpYy5jYCksIGFuZCBgemFwX2h1Z2VfcG1kYCAoaW4gYG1tL2h1Z2VfbWVtb3J5LmNgKS4gVGhpcyBnaXZlcyBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB3ZSBjYW4gdHJhY2UsIG9yIG92ZXJyaWRlLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGB6YXBfaHVnZV9wbWRgIGluIGBtbS9odWdlX21lbW9yeS5jYC4gSSBoYXZlIGEgZmVlbGluZyB0aGVyZSB3aWxsIGJlIG1vcmUgaW50ZXJlc3RpbmcgZGV0YWlscyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emFwX2h1Z2VfcG1kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9MjQ3ND1zdGF0aWMgaW5saW5lIHZvaWQgemFwX2RlcG9zaXRlZF90YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTI0ODItXG5tbS9odWdlX21lbW9yeS5jOjI0ODM6c3RhdGljIHZvaWQgemFwX2h1Z2VfcG1kX2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL2h1Z2VfbWVtb3J5LmMtMjQ4NC1cdFx0cG1kX3QgcG1kdmFsLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIGlzX3ByZXNlbnQpXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0yNTIxPXN0YXRpYyBib29sIGhhc19kZXBvc2l0ZWRfcGd0YWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcG1kX3QgcG1kdmFsLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjU0Mi0vKipcbm1tL2h1Z2VfbWVtb3J5LmM6MjU0MzogKiB6YXBfaHVnZV9wbWQgLSBaYXAgYSBodWdlIFRIUCB3aGljaCBpcyBvZiBQTUQgc2l6ZS5cbm1tL2h1Z2VfbWVtb3J5LmMtMjU0NC0gKiBAdGxiOiBUaGUgTU1VIGdhdGhlciBUTEIgc3RhdGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcGVyYXRpb24uXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yNTUwLSAqL1xubW0vaHVnZV9tZW1vcnkuYzoyNTUxOmJvb2wgemFwX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vaHVnZV9tZW1vcnkuYy0yNTUyLVx0XHQgcG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjU4MC1cdGlmIChmb2xpbylcbm1tL2h1Z2VfbWVtb3J5LmM6MjU4MTpcdFx0emFwX2h1Z2VfcG1kX2ZvbGlvKG1tLCB2bWEsIG9yaWdfcG1kLCBmb2xpbywgaXNfcHJlc2VudCk7XG5tbS9odWdlX21lbW9yeS5jLTI1ODItXHRpZiAoaGFzX2RlcG9zaXQpXG4tLVxubW0vaW50ZXJuYWwuaD01Njg9dm9pZCBwbWRfaW5zdGFsbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCwgcGd0YWJsZV90ICpwdGUpO1xuLS1cbm1tL2ludGVybmFsLmgtNTc1LSAqIFdoZW4gd2UgZmluZCBhIHBtZF9ub25lKCkgd2hpbGUgdW5tYXBwaW5nIGEgZm9saW8gd2l0aG91dCBob2xkaW5nIHRoZSBQVEwsXG5tbS9pbnRlcm5hbC5oOjU3NjogKiB6YXBfaHVnZV9wbWQoKSBtYXkgaGF2ZSBjbGVhcmVkIHRoZSBQTUQgYnV0IG5vdCB5ZXQgbW9kaWZpZWQgdGhlIGZvbGlvIHRvXG5tbS9pbnRlcm5hbC5oLTU3Ny0gKiBpbmRpY2F0ZSB0aGF0IGl0JiMzOTtzIHVubWFwcGVkLiBTa2lwcGluZyB0aGUgUE1EIHdpdGhvdXQgc3luY2hyb25pemF0aW9uIGNvdWxkXG4tLVxubW0vbWVtb3J5LmM9MjA5OT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgemFwX3BtZF9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuLS1cbm1tL21lbW9yeS5jLTIxMTItXHRcdFx0XHRfX3NwbGl0X2h1Z2VfcG1kKHZtYSwgcG1kLCBhZGRyLCBmYWxzZSk7XG5tbS9tZW1vcnkuYzoyMTEzOlx0XHRcdGVsc2UgaWYgKHphcF9odWdlX3BtZCh0bGIsIHZtYSwgcG1kLCBhZGRyKSkge1xubW0vbWVtb3J5LmMtMjExNC1cdFx0XHRcdGFkZHIgPSBuZXh0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODY1NAoJCQkJCQkJb3V0cHV0OiAyMDIKCQkJCQkJCXRob3VnaHRzOiA2MTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVGhpcyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBzY29wZSBvZiB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIGl0IHNpZ25pZmljYW50bHkgaW1wYWN0cyBwYWdlIHRhYmxlIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBhcm91bmQgZnJlZWluZyBhbmQgcmVjbGFpbS4gTXkgaW5pdGlhbCBzY2FuIG9mIHRoZSBjb2RlIGNoYW5nZXMgY29uZmlybXMgdGhpcy4gSSBzZWUgbW9kaWZpY2F0aW9ucyB0byBzZXZlcmFsIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmaWxlcyAoYG02OGtgLCBgc2hgLCBgc3BhcmNgKSBhbmQgZ2VuZXJpYyBtZW1vcnkgbWFuYWdlbWVudCBmaWxlcyAoYG1tdV9nYXRoZXIuY2AsIGBodWdlX21lbW9yeS5jYCwgYHBndGFibGUtZ2VuZXJpYy5jYCkuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBub3RpbmcgdGhlIGludHJvZHVjdGlvbiBvciBtb2RpZmljYXRpb24gb2YgZnVuY3Rpb25zIGxpa2UgYGdldF9wb2ludGVyX3RhYmxlYCwgYGZyZWVfcG9pbnRlcl90YWJsZWAsIGBfX3RsYl9yZW1vdmVfdGFibGVgLCBgcHRlX2ZyZWVgLCBgdGxiX3JlbW92ZV90YWJsZWAsIGFuZCBgemFwX2RlcG9zaXRlZF90YWJsZWAgYWNyb3NzIHRoZXNlIHZhcmlvdXMgZmlsZXMuIFRoZSBpbmxpbmluZyBvZiBgemFwX2RlcG9zaXRlZF90YWJsZWAgaW50byBmdW5jdGlvbnMgbGlrZSBgemFwX2h1Z2VfcG1kYCBpcyBhbHNvIHdvcnRoIG5vdGluZy4KCkkmIzM5O20gYWxzbyBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gYENPTkZJR19NTVVgIGlzLCBhcyBleHBlY3RlZCwgYSBiYXNlIHJlcXVpcmVtZW50LiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBjb21lcyBpbnRvIHBsYXkgZm9yIHRoZSBodWdlIG1lbW9yeSB6YXBwaW5nIGFuZCB0aGUgZGVmZXJyZWQgUFRFIGZyZWVpbmcuIEkgdGhlbiBjaGVjayBgQ09ORklHX1BUX1JFQ0xBSU1gIGFuZCBpdHMgZGVwZW5kZW5jeSBvbiBgTU1VICZhbXA7JmFtcDsgIUhBVkVfQVJDSF9UTEJfUkVNT1ZFX1RBQkxFYC4KCk5vdywgZm9yIHRoZSBrZXkgZmluZGluZ3MgdG8gYmUgcmVwb3J0ZWQuIFRoaXMgcGF0Y2ggaXMgbWFraW5nIHBhZ2UgdGFibGUgZnJlZWluZyB1bmNvbmRpdGlvbmFsbHkgZGVmZXJyZWQgdmlhIFJDVSBhY3Jvc3MgKmFsbCogYXJjaGl0ZWN0dXJlcy4gSXQgZG9lcyB0aGlzIGJ5IHJlbW92aW5nIHRoZSBgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRWAgYW5kIGBNTVVfR0FUSEVSX1RBQkxFX0ZSRUVgIEtjb25maWcgZmxhZ3MsIHRodXMgbWFraW5nIFJDVSB0YWJsZSBiYXRjaGluZyBhIGdlbmVyaWMgcHJvY2Vzcy4gVGhpcyBjaGFuZ2UgYWxzbyB1cGRhdGVzIGB6YXBfZGVwb3NpdGVkX3RhYmxlKClgIGluIGBtbS9odWdlX21lbW9yeS5jYCB0byBsZXZlcmFnZSB0aGUgZGVmZXJyZWQgUkNVIGBwdGVfZnJlZV9kZWZlcigpYCBmdW5jdGlvbiwgYW5kIHRoZW4gYWRhcHRzIHZhcmlvdXMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHBhZ2UgdGFibGUgZnJlZWluZyBpbXBsZW1lbnRhdGlvbnMsIGxpa2UgdGhvc2Ugb24gYG02OGtgLCBgc3BhcmNgLCBgc2hgLCBgYXJjYCwgYW5kIGB4dGVuc2FgLgoKTXkgYHNldC1yZXN1bHRzYCBkYXRhIHdpbGwgaW5jbHVkZTogYFdvcnRoRnV6emluZ2A6IHRydWUgKGJlY2F1c2Ugb2YgdGhlc2UgY29yZSBjaGFuZ2VzKTsgYSBjb25jaXNlIGBSZWFzb25pbmdgIGJhc2VkIG9uIHRoZSBhYm92ZTsgdGhlIGZvbGxvd2luZyBgRm9jdXNTeW1ib2xzYDogYFsmIzM0O3RsYl9yZW1vdmVfdGFibGUmIzM0OywgJiMzNDtwdGVfZnJlZV9kZWZlciYjMzQ7LCAmIzM0O3phcF9odWdlX3BtZCYjMzQ7LCAmIzM0O3RsYl9yZW1vdmVfdGFibGVfc3luY19yY3UmIzM0OywgJiMzNDt0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfb25lJiMzNDtdYDsgYW5kIGBFbmFibGVDb25maWdzYDogYFsmIzM0O01NVSYjMzQ7LCAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDtdYC4KCkZpbmFsbHksIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIGVuc3VyZSB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBjb3JyZWN0OiBFbmFibGVDb25maWdzIHdpdGhvdXQgdGhlIGBDT05GSUdfYCBwcmVmaXg7IEZvY3VzU3ltYm9scyBhcmUgbm9uLXN0YXRpYyBhbmQgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzOyBhbmQgdGhhdCBgc2V0LXJlc3VsdHNgIGlzIGNhbGxlZCBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuIEV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01NVSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RsYl9yZW1vdmVfdGFibGUmIzM0OywKICAgICYjMzQ7cHRlX2ZyZWVfZGVmZXImIzM0OywKICAgICYjMzQ7emFwX2h1Z2VfcG1kJiMzNDssCiAgICAmIzM0O3RsYl9yZW1vdmVfdGFibGVfc3luY19yY3UmIzM0OywKICAgICYjMzQ7dGxiX3JlbW92ZV90YWJsZV9zeW5jX29uZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1bmlmaWVzIGFuZCBlbmZvcmNlcyBSQ1UtZGVmZXJyZWQgZnJlZWluZyBmb3IgcGFnZSB0YWJsZSBwYWdlcyBhY3Jvc3MgYWxsIGFyY2hpdGVjdHVyZXMgYnkgcmVtb3ZpbmcgY29uZGl0aW9uYWwgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHN0YW5kYXJkaXppbmcgb24gdGxiX3JlbW92ZV90YWJsZSgpLiBJdCBhbHNvIG1vZGlmaWVzIFRIUCBkZXBvc2l0ZWQgdGFibGUgaGFuZGxpbmcgaW4gbW0vaHVnZV9tZW1vcnkuYyB0byB1c2UgcHRlX2ZyZWVfZGVmZXIoKSB1bmRlciBSQ1UgYW5kIHVwZGF0ZXMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHBhZ2UgdGFibGUgcmVtb3ZhbCByb3V0aW5lcy4gVGhlc2UgY29yZSBNTSBsb2dpYyBjaGFuZ2VzIGFmZmVjdCBUTEIgZ2F0aGVyaW5nLCBwYWdlIHRhYmxlIHRlYXJpbmcgZG93biwgYW5kIG1lbW9yeSByZWNsYWltIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNTVUmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0bGJfcmVtb3ZlX3RhYmxlJiMzNDssCiAgICAmIzM0O3B0ZV9mcmVlX2RlZmVyJiMzNDssCiAgICAmIzM0O3phcF9odWdlX3BtZCYjMzQ7LAogICAgJiMzNDt0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfcmN1JiMzNDssCiAgICAmIzM0O3RsYl9yZW1vdmVfdGFibGVfc3luY19vbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdW5pZmllcyBhbmQgZW5mb3JjZXMgUkNVLWRlZmVycmVkIGZyZWVpbmcgZm9yIHBhZ2UgdGFibGUgcGFnZXMgYWNyb3NzIGFsbCBhcmNoaXRlY3R1cmVzIGJ5IHJlbW92aW5nIGNvbmRpdGlvbmFsIE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBzdGFuZGFyZGl6aW5nIG9uIHRsYl9yZW1vdmVfdGFibGUoKS4gSXQgYWxzbyBtb2RpZmllcyBUSFAgZGVwb3NpdGVkIHRhYmxlIGhhbmRsaW5nIGluIG1tL2h1Z2VfbWVtb3J5LmMgdG8gdXNlIHB0ZV9mcmVlX2RlZmVyKCkgdW5kZXIgUkNVIGFuZCB1cGRhdGVzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBwYWdlIHRhYmxlIHJlbW92YWwgcm91dGluZXMuIFRoZXNlIGNvcmUgTU0gbG9naWMgY2hhbmdlcyBhZmZlY3QgVExCIGdhdGhlcmluZywgcGFnZSB0YWJsZSB0ZWFyaW5nIGRvd24sIGFuZCBtZW1vcnkgcmVjbGFpbSBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6NDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzo0NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBzdGFuZGFyZGl6ZXMgcGFnZSB0YWJsZSBmcmVlaW5nIGFjcm9zcyBhcmNoaXRlY3R1cmVzIHRvIHVzZSBSQ1UtZGVmZXJyZWQgZnJlZWluZyAodW5pZnlpbmcgTU1VIGdhdGhlciBhbmQgcmVtb3ZpbmcgQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgLyBDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFIGNvbmZpZ3MpLiBJdCBhZGFwdHMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHBhZ2UgdGFibGUgZnJlZWluZyByb3V0aW5lcyAoZS5nLiBtNjhrLCBhcmMsIG1pY3JvYmxhemUsIHNoLCBzcGFyYywgeHRlbnNhKSB0byB1c2UgdGxiX3JlbW92ZV9wdGRlc2MgLyB0bGJfcmVtb3ZlX3RhYmxlLCBhZGRzIHNwaW5sb2NrcyBmb3IgcHRhYmxlIG1hbmFnZW1lbnQgb24gbTY4ay9zcGFyYywgYW5kIHVwZGF0ZXMgZGVmZXJyZWQgZnJlZWluZyBpbiBUSFAgKHB0ZV9mcmVlX2RlZmVyKS5cblxuVGhlc2UgY2hhbmdlcyBkZWFsIHN0cmljdGx5IHdpdGggTU1VIGdhdGhlciBsaWZlY3ljbGUsIFJDVSBncmFjZSBwZXJpb2RzIGZvciBwYWdlIHRhYmxlIG1lbW9yeSwgYW5kIHN5bmNocm9uaXphdGlvbiBvZiBwYWdlIHRhYmxlIGZyZWVpbmcgdnMgbG9ja2xlc3MvUkNVIHBhZ2UgdGFibGUgd2Fsa2Vycy4gUG90ZW50aWFsIGJ1Z3MgaW4gdGhlc2UgY2hhbmdlcyB3b3VsZCBtYW5pZmVzdCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIGNvbmN1cnJlbmN5IHJhY2VzLCBvciBkZWFkbG9ja3PigJR3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgcmVhZHMvY29waWVzIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI4ZThlMjJmYjJmOTIyYTVkOThhYzI3MmMwNGEzOWZiNWQwYTdlZTEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxIDIzOjQzOjUyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3QKaW5kZXggYTcyOTZmMjUxNzk5Yy4uMWU2NWIxMzlmMzU1OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0CkBAIC01MzcsNiAmIzQzOzUzNywxMiBAQCBXZSBlc3RhYmxpc2ggYmFzaWMgbG9ja2luZyBydWxlcyB3aGVuIGludGVyYWN0aW5nIHdpdGggcGFnZSB0YWJsZXM6CiAqIFdoZW4gY2hhbmdpbmcgYSBwYWdlIHRhYmxlIGVudHJ5IHRoZSBwYWdlIHRhYmxlIGxvY2sgZm9yIHRoYXQgcGFnZSB0YWJsZQogICAqKm11c3QqKiBiZSBoZWxkLCBleGNlcHQgaWYgeW91IGNhbiBzYWZlbHkgYXNzdW1lIG5vYm9keSBjYW4gYWNjZXNzIHRoZSBwYWdlCiAgIHRhYmxlcyBjb25jdXJyZW50bHkgKHN1Y2ggYXMgb24gaW52b2NhdGlvbiBvZiA6YzpmdW5jOmAhZnJlZV9wZ3RhYmxlc2ApLgomIzQzOyogUGFnZSB0YWJsZXMgbWF5IGJlICp3YWxrZWQqIHVuZGVyIFJDVSBhbG9uZSwgYXMgcGFnZSB0YWJsZXMgYXJlIGZyZWVkIG9ubHkKJiM0MzsgIGFmdGVyIGFuIFJDVSBncmFjZSBwZXJpb2QgaGFzIGVsYXBzZWQuIEhvd2V2ZXIsIGFueSBlbnRyeSBmb3VuZCBtdXN0IGJlCiYjNDM7ICByZXZhbGlkYXRlZCBhZnRlciB0aGUgcGFnZSB0YWJsZSBsb2NrIGlzIHRha2VuIChzdWNoIGFzIHRoZQomIzQzOyAgOmM6ZnVuYzpgIXBtZF9zYW1lYCByZWNoZWNrIHBlcmZvcm1lZCBieSA6YzpmdW5jOmAhcHRlX29mZnNldF9tYXBfbG9ja2ApCiYjNDM7ICBiZWZvcmUgaXQgaXMgYWN0ZWQgdXBvbi4gQ2hhbmdpbmcgYW4gZW50cnkgYWx3YXlzIHJlcXVpcmVzIHRoZSBwYWdlIHRhYmxlCiYjNDM7ICBsb2NrLgogKiBSZWFkcyBmcm9tIGFuZCB3cml0ZXMgdG8gcGFnZSB0YWJsZSBlbnRyaWVzIG11c3QgYmUgKmFwcHJvcHJpYXRlbHkqCiAgIGF0b21pYy4gU2VlIHRoZSBzZWN0aW9uIG9uIGF0b21pY2l0eSBiZWxvdyBmb3IgZGV0YWlscy4KICogUG9wdWxhdGluZyBwcmV2aW91c2x5IGVtcHR5IGVudHJpZXMgcmVxdWlyZXMgdGhhdCB0aGUgbW1hcCBvciBWTUEgbG9ja3MgYXJlCmRpZmYgLS1naXQgYS9hcmNoL0tjb25maWcgYi9hcmNoL0tjb25maWcKaW5kZXggNDVjNjU3NzcyMzYyMy4uNmY3NTE2OTE2Nzk3ZSAxMDA2NDQKLS0tIGEvYXJjaC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvS2NvbmZpZwpAQCAtNTI2LDEzICYjNDM7NTI2LDYgQEAgY29uZmlnIEhBVkVfQVJDSF9KVU1QX0xBQkVMCiBjb25maWcgSEFWRV9BUkNIX0pVTVBfTEFCRUxfUkVMQVRJVkUKIAlib29sCiAKLWNvbmZpZyBNTVVfR0FUSEVSX1RBQkxFX0ZSRUUKLQlib29sCi0KLWNvbmZpZyBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFCi0JYm9vbAotCXNlbGVjdCBNTVVfR0FUSEVSX1RBQkxFX0ZSRUUKLQogY29uZmlnIE1NVV9HQVRIRVJfUEFHRV9TSVpFCiAJYm9vbAogCkBAIC01NDgsNyAmIzQzOzU0MSw2IEBAIGNvbmZpZyBNTVVfR0FUSEVSX01FUkdFX1ZNQVMKIAogY29uZmlnIE1NVV9HQVRIRVJfTk9fR0FUSEVSCiAJYm9vbAotCWRlcGVuZHMgb24gTU1VX0dBVEhFUl9UQUJMRV9GUkVFCiAKIGNvbmZpZyBBUkNIX1dBTlRfSVJRU19PRkZfQUNUSVZBVEVfTU0KIAlib29sCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL0tjb25maWcgYi9hcmNoL2FscGhhL0tjb25maWcKaW5kZXggZTUzZWYyZDg4NDYzNi4uOTA2M2M3YmRhNGU0MSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYWxwaGEvS2NvbmZpZwpAQCAtNDIsNyAmIzQzOzQyLDYgQEAgY29uZmlnIEFMUEhBCiAJc2VsZWN0IEFSQ0hfU1RBQ0tXQUxLCiAJc2VsZWN0IENQVV9OT19FRkZJQ0lFTlRfRkZTIGlmICFBTFBIQV9FVjY3CiAJc2VsZWN0IE1NVV9HQVRIRVJfTk9fUkFOR0UKLQlzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRQogCXNlbGVjdCBTUEFSU0VNRU1fRVhUUkVNRSBpZiBTUEFSU0VNRU0KIAlzZWxlY3QgWk9ORV9ETUEKIAlzZWxlY3QgVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVApkaWZmIC0tZ2l0IGEvYXJjaC9hcmMvaW5jbHVkZS9hc20vcGdhbGxvYy5oIGIvYXJjaC9hcmMvaW5jbHVkZS9hc20vcGdhbGxvYy5oCmluZGV4IGRmYWUwNzBmZThkNTUuLjliNmMzN2Y5MmU5N2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2MuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKQEAgLTcyLDcgJiM0Mzs3Miw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwNGRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHA0ZF90ICpwNGRwLCBwdWRfdCAqcHVkcCkKIAlzZXRfcDRkKHA0ZHAsIF9fcDRkKCh1bnNpZ25lZCBsb25nKXB1ZHApKTsKIH0KIAotI2RlZmluZSBfX3B1ZF9mcmVlX3RsYih0bGIsIHBtZCwgYWRkcikgIHB1ZF9mcmVlKCh0bGIpLSZndDttbSwgcG1kKQomIzQzOyNkZWZpbmUgX19wdWRfZnJlZV90bGIodGxiLCBwbWQsIGFkZHIpICB0bGJfcmVtb3ZlX3B0ZGVzYygodGxiKSwgdmlydF90b19wdGRlc2MocG1kKSkKIAogI2VuZGlmCiAKQEAgLTgzLDEwICYjNDM7ODMsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIHB1ZF9wb3B1bGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcHVkX3QgKnB1ZHAsIHBtZF90ICpwbWRwKQogCXNldF9wdWQocHVkcCwgX19wdWQoKHVuc2lnbmVkIGxvbmcpcG1kcCkpOwogfQogCi0jZGVmaW5lIF9fcG1kX2ZyZWVfdGxiKHRsYiwgcG1kLCBhZGRyKSAgcG1kX2ZyZWUoKHRsYiktJmd0O21tLCBwbWQpCiYjNDM7I2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIsIHBtZCwgYWRkcikgIHRsYl9yZW1vdmVfcHRkZXNjKCh0bGIpLCB2aXJ0X3RvX3B0ZGVzYyhwbWQpKQogCiAjZW5kaWYKIAotI2RlZmluZSBfX3B0ZV9mcmVlX3RsYih0bGIsIHB0ZSwgYWRkcikgIHB0ZV9mcmVlKCh0bGIpLSZndDttbSwgcHRlKQomIzQzOyNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLCBwdGUsIGFkZHIpICB0bGJfcmVtb3ZlX3B0ZGVzYygodGxiKSwgcGFnZV9wdGRlc2MocHRlKSkKIAogI2VuZGlmIC8qIF9BU01fQVJDX1BHQUxMT0NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vS2NvbmZpZyBiL2FyY2gvYXJtL0tjb25maWcKaW5kZXggNDA4YWE1OGEyYTViYi4uMGNjMjg5YTcxODRhYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybS9LY29uZmlnCkBAIC0xMzQsNyAmIzQzOzEzNCw2IEBAIGNvbmZpZyBBUk0KIAlzZWxlY3QgSEFWRV9QRVJGX1JFR1MKIAlzZWxlY3QgSEFWRV9QRVJGX1VTRVJfU1RBQ0tfRFVNUAogCXNlbGVjdCBIQVZFX1BPU0lYX0NQVV9USU1FUlNfVEFTS19XT1JLCi0Jc2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgaWYgU01QICZhbXA7JmFtcDsgQVJNX0xQQUUKIAlzZWxlY3QgSEFWRV9SRUdTX0FORF9TVEFDS19BQ0NFU1NfQVBJCiAJc2VsZWN0IEhBVkVfUlNFUQogCXNlbGVjdCBIQVZFX1JVU1QgaWYgQ1BVX0xJVFRMRV9FTkRJQU4gJmFtcDsmYW1wOyBDUFVfMzJ2NyAmYW1wOyZhbXA7ICFLQVNBTgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9LY29uZmlnIGIvYXJjaC9hcm02NC9LY29uZmlnCmluZGV4IDJiYmVkZWQzM2RhMGQuLmI2YzJkZDhiMjYxMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L0tjb25maWcKQEAgLTIyMSw3ICYjNDM7MjIxLDYgQEAgY29uZmlnIEFSTTY0CiAJc2VsZWN0IEhBVkVfUkVMSUFCTEVfU1RBQ0tUUkFDRQogCXNlbGVjdCBIQVZFX1BPU0lYX0NQVV9USU1FUlNfVEFTS19XT1JLCiAJc2VsZWN0IEhBVkVfRlVOQ1RJT05fQVJHX0FDQ0VTU19BUEkKLQlzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRQogCXNlbGVjdCBIQVZFX1JTRVEKIAlzZWxlY3QgSEFWRV9SVVNUIGlmIFJVU1RDX1NVUFBPUlRTX0FSTTY0CiAJc2VsZWN0IEhBVkVfU1RBQ0tQUk9URUNUT1IKZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL0tjb25maWcgYi9hcmNoL2xvb25nYXJjaC9LY29uZmlnCmluZGV4IDljNWRlZjcwNjIyMjIuLmQxYjIzZGE0MDczNzUgMTAwNjQ0Ci0tLSBhL2FyY2gvbG9vbmdhcmNoL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9sb29uZ2FyY2gvS2NvbmZpZwpAQCAtMTg4LDcgJiM0MzsxODgsNiBAQCBjb25maWcgTE9PTkdBUkNICiAJc2VsZWN0IElSUV9MT09OR0FSQ0hfQ1BVCiAJc2VsZWN0IExPQ0tfTU1fQU5EX0ZJTkRfVk1BCiAJc2VsZWN0IE1NVV9HQVRIRVJfTUVSR0VfVk1BUyBpZiBNTVUKLQlzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRQogCXNlbGVjdCBNT0RVTEVTX1VTRV9FTEZfUkVMQSBpZiBNT0RVTEVTCiAJc2VsZWN0IE5FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSwogCXNlbGVjdCBORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOSwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL0tjb25maWcgYi9hcmNoL202OGsvS2NvbmZpZwppbmRleCAxMTgzNWViNTlkOTRkLi5lYjg0YzNhZjkyYzAyIDEwMDY0NAotLS0gYS9hcmNoL202OGsvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL202OGsvS2NvbmZpZwpAQCAtMjksNiAmIzQzOzI5LDcgQEAgY29uZmlnIE02OEsKIAlzZWxlY3QgSEFWRV9BUkNIX0xJQkdDQ19ICiAJc2VsZWN0IEhBVkVfQVJDSF9TRUNDT01QCiAJc2VsZWN0IEhBVkVfQVJDSF9TRUNDT01QX0ZJTFRFUgomIzQzOwlzZWxlY3QgSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEUgaWYgTU1VX01PVE9ST0xBCiAJc2VsZWN0IEhBVkVfQVNNX01PRFZFUlNJT05TCiAJc2VsZWN0IEhBVkVfREVCVUdfQlVHVkVSQk9TRQogCXNlbGVjdCBIQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTIGlmICFDUFVfSEFTX05PX1VOQUxJR05FRApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21jZl9wZ2FsbG9jLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbWNmX3BnYWxsb2MuaAppbmRleCBmYzU0NTRkMzdkYTMxLi5iNTNmZjA5NTBkYjJlIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbWNmX3BnYWxsb2MuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbWNmX3BnYWxsb2MuaApAQCAtMzksMTAgJiM0MzszOSw3IEBAIGV4dGVybiBpbmxpbmUgcG1kX3QgKnBtZF9hbGxvY19rZXJuZWwocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQogc3RhdGljIGlubGluZSB2b2lkIF9fcHRlX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHBndGFibGVfdCBwZ3RhYmxlLAogCQkJCSAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewotCXN0cnVjdCBwdGRlc2MgKnB0ZGVzYyA9IHZpcnRfdG9fcHRkZXNjKHBndGFibGUpOwotCi0JcGFnZXRhYmxlX2R0b3IocHRkZXNjKTsKLQlwYWdldGFibGVfZnJlZShwdGRlc2MpOwomIzQzOwl0bGJfcmVtb3ZlX3B0ZGVzYyh0bGIsIHZpcnRfdG9fcHRkZXNjKHBndGFibGUpKTsKIH0KIAogc3RhdGljIGlubGluZSBwZ3RhYmxlX3QgcHRlX2FsbG9jX29uZShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tb3Rvcm9sYV9wZ2FsbG9jLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbW90b3JvbGFfcGdhbGxvYy5oCmluZGV4IDEwOTFmYjBhZmZiZWUuLmRjZGU0MGU4YjVjNmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tb3Rvcm9sYV9wZ2FsbG9jLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21vdG9yb2xhX3BnYWxsb2MuaApAQCAtMTcsNiAmIzQzOzE3LDcgQEAgZW51bSBtNjhrX3RhYmxlX3R5cGVzIHsKIGV4dGVybiB2b2lkIGluaXRfcG9pbnRlcl90YWJsZSh2b2lkICp0YWJsZSwgaW50IHR5cGUpOwogZXh0ZXJuIHZvaWQgKmdldF9wb2ludGVyX3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgdHlwZSk7CiBleHRlcm4gaW50IGZyZWVfcG9pbnRlcl90YWJsZSh2b2lkICp0YWJsZSwgaW50IHR5cGUpOwomIzQzO2V4dGVybiB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZSh2b2lkICp0YWJsZSk7CiAKIC8qCiAgKiBBbGxvY2F0ZSBhbmQgZnJlZSBwYWdlIHRhYmxlcy4gVGhlIHh4eF9rZXJuZWwoKSB2ZXJzaW9ucyBhcmUKQEAgLTQ3LDcgJiM0Mzs0OCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdGVfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHBndGFibGUpCiBzdGF0aWMgaW5saW5lIHZvaWQgX19wdGVfZnJlZV90bGIoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgcGd0YWJsZV90IHBndGFibGUsCiAJCQkJICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7Ci0JZnJlZV9wb2ludGVyX3RhYmxlKHBndGFibGUsIFRBQkxFX1BURSk7CiYjNDM7CXRsYl9yZW1vdmVfdGFibGUodGxiLCAodm9pZCAqKSgodW5zaWduZWQgbG9uZylwZ3RhYmxlIHwgVEFCTEVfUFRFKSk7CiB9CiAKIApAQCAtNjEsMTAgJiM0Mzs2MiwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBwbWRfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCkKIAlyZXR1cm4gZnJlZV9wb2ludGVyX3RhYmxlKHBtZCwgVEFCTEVfUE1EKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgX19wbWRfZnJlZV90bGIoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgcG1kX3QgKnBtZCwKLQkJCQkgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBfX3BtZF9mcmVlX3RsYihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBwbWRfdCAqcG1kLAomIzQzOwkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKLQlyZXR1cm4gZnJlZV9wb2ludGVyX3RhYmxlKHBtZCwgVEFCTEVfUE1EKTsKJiM0MzsJdGxiX3JlbW92ZV90YWJsZSh0bGIsICh2b2lkICopKCh1bnNpZ25lZCBsb25nKXBtZCB8IFRBQkxFX1BNRCkpOwogfQogCiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tbS9tb3Rvcm9sYS5jIGIvYXJjaC9tNjhrL21tL21vdG9yb2xhLmMKaW5kZXggYjMwYWE2OWE3M2E2YS4uZmZjODA0ODM0NDBiYyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL21tL21vdG9yb2xhLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9tNjhrL21tL21vdG9yb2xhLmMKQEAgLTIwLDYgJiM0MzsyMCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvaW5pdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21lbWJsb2NrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZ2ZwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NsZWFudXAuaCZndDsKIAogI2luY2x1ZGUgJmx0O2FzbS9zZXR1cC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3VhY2Nlc3MuaCZndDsKQEAgLTEwMyw2ICYjNDM7MTA0LDggQEAgc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgcHRhYmxlX2xpc3RbM10gPSB7CiAJTElTVF9IRUFEX0lOSVQocHRhYmxlX2xpc3RbMl0pLAogfTsKIAomIzQzO3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socHRhYmxlX2xvY2spOwomIzQzOwogI2RlZmluZSBQRF9QVEFCTEUocHRkZXNjKSAoKHB0YWJsZV9kZXNjICopJmFtcDsodmlydF90b19wdGRlc2MoKHZvaWQgKikocHRkZXNjKSktJmd0O3B0X2xpc3QpKQogI2RlZmluZSBQRF9QVERFU0MocHRhYmxlKSAobGlzdF9lbnRyeShwdGFibGUsIHN0cnVjdCBwdGRlc2MsIHB0X2xpc3QpKQogI2RlZmluZSBQRF9NQVJLQklUUyhkcCkgKCoodW5zaWduZWQgaW50ICopJmFtcDtQRF9QVERFU0MoZHApLSZndDtwdF9pbmRleCkKQEAgLTEzOSw1MiAmIzQzOzE0Miw2NiBAQCB2b2lkIF9faW5pdCBpbml0X3BvaW50ZXJfdGFibGUodm9pZCAqdGFibGUsIGludCB0eXBlKQogCXJldHVybjsKIH0KIAotdm9pZCAqZ2V0X3BvaW50ZXJfdGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCB0eXBlKQomIzQzOy8qCiYjNDM7ICogRm9yIGEgcG9pbnRlciB0YWJsZSBmb3IgYSB1c2VyIHByb2Nlc3MgYWRkcmVzcyBzcGFjZSwgYQomIzQzOyAqIHRhYmxlIGlzIHRha2VuIGZyb20gYSBwdGRlc2MgYWxsb2NhdGVkIGZvciB0aGUgcHVycG9zZS4gIEVhY2gKJiM0MzsgKiBwdGRlc2MgY2FuIGhvbGQgOCBwb2ludGVyIHRhYmxlcy4gIFRoZSBwdGRlc2MgaXMgcmVtYXBwZWQgaW4KJiM0MzsgKiB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgdG8gYmUgbm9uY2FjaGVhYmxlLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkICphZGRfcG9pbnRlcl90YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IHR5cGUpCiB7Ci0JcHRhYmxlX2Rlc2MgKmRwID0gcHRhYmxlX2xpc3RbdHlwZV0ubmV4dDsKLQl1bnNpZ25lZCBpbnQgbWFzayA9IGxpc3RfZW1wdHkoJmFtcDtwdGFibGVfbGlzdFt0eXBlXSkgPyAwIDogUERfTUFSS0JJVFMoZHApOwotCXVuc2lnbmVkIGludCB0bXAsIG9mZjsKJiM0MzsJc3RydWN0IHB0ZGVzYyAqcHRkZXNjOwomIzQzOwlwdGFibGVfZGVzYyAqbmV3OwomIzQzOwl2b2lkICpwdF9hZGRyOwogCi0JLyoKLQkgKiBGb3IgYSBwb2ludGVyIHRhYmxlIGZvciBhIHVzZXIgcHJvY2VzcyBhZGRyZXNzIHNwYWNlLCBhCi0JICogdGFibGUgaXMgdGFrZW4gZnJvbSBhIHB0ZGVzYyBhbGxvY2F0ZWQgZm9yIHRoZSBwdXJwb3NlLiAgRWFjaAotCSAqIHB0ZGVzYyBjYW4gaG9sZCA4IHBvaW50ZXIgdGFibGVzLiAgVGhlIHB0ZGVzYyBpcyByZW1hcHBlZCBpbgotCSAqIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSB0byBiZSBub25jYWNoZWFibGUuCi0JICovCi0JaWYgKG1hc2sgPT0gMCkgewotCQlzdHJ1Y3QgcHRkZXNjICpwdGRlc2M7Ci0JCXB0YWJsZV9kZXNjICpuZXc7Ci0JCXZvaWQgKnB0X2FkZHI7Ci0KLQkJcHRkZXNjID0gcGFnZXRhYmxlX2FsbG9jKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPLCAwKTsKLQkJaWYgKCFwdGRlc2MpCi0JCQlyZXR1cm4gTlVMTDsKLQotCQlwdF9hZGRyID0gcHRkZXNjX2FkZHJlc3MocHRkZXNjKTsKLQotCQlzd2l0Y2ggKHR5cGUpIHsKLQkJY2FzZSBUQUJMRV9QVEU6Ci0JCQkvKgotCQkJICogbTY4ayBkb2VzbiYjMzk7dCBoYXZlIFNQTElUX1BURV9QVExPQ0tTIGZvciBub3QgaGF2aW5nCi0JCQkgKiBTTVAuCi0JCQkgKi8KLQkJCXBhZ2V0YWJsZV9wdGVfY3RvcihtbSwgcHRkZXNjKTsKLQkJCWJyZWFrOwotCQljYXNlIFRBQkxFX1BNRDoKLQkJCXBhZ2V0YWJsZV9wbWRfY3RvcihtbSwgcHRkZXNjKTsKLQkJCWJyZWFrOwotCQljYXNlIFRBQkxFX1BHRDoKLQkJCXBhZ2V0YWJsZV9wZ2RfY3RvcihwdGRlc2MpOwotCQkJYnJlYWs7Ci0JCX0KJiM0MzsJcHRkZXNjID0gcGFnZXRhYmxlX2FsbG9jKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPLCAwKTsKJiM0MzsJaWYgKCFwdGRlc2MpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJcHRfYWRkciA9IHB0ZGVzY19hZGRyZXNzKHB0ZGVzYyk7CiYjNDM7CiYjNDM7CXN3aXRjaCAodHlwZSkgewomIzQzOwljYXNlIFRBQkxFX1BURToKJiM0MzsJCS8qCiYjNDM7CQkgKiBtNjhrIGRvZXNuJiMzOTt0IGhhdmUgU1BMSVRfUFRFX1BUTE9DS1MgZm9yIG5vdCBoYXZpbmcKJiM0MzsJCSAqIFNNUC4KJiM0MzsJCSAqLwomIzQzOwkJcGFnZXRhYmxlX3B0ZV9jdG9yKG1tLCBwdGRlc2MpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgVEFCTEVfUE1EOgomIzQzOwkJcGFnZXRhYmxlX3BtZF9jdG9yKG1tLCBwdGRlc2MpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgVEFCTEVfUEdEOgomIzQzOwkJcGFnZXRhYmxlX3BnZF9jdG9yKHB0ZGVzYyk7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwltbXVfcGFnZV9jdG9yKHB0X2FkZHIpOwomIzQzOwomIzQzOwluZXcgPSBQRF9QVEFCTEUocHRfYWRkcik7CiAKLQkJbW11X3BhZ2VfY3RvcihwdF9hZGRyKTsKJiM0MzsJUERfTUFSS0JJVFMobmV3KSA9IHB0YWJsZV9tYXNrKHR5cGUpIC0gMTsKJiM0MzsJc2NvcGVkX2d1YXJkKHNwaW5sb2NrX2lycXNhdmUsICZhbXA7cHRhYmxlX2xvY2spCiYjNDM7CQlsaXN0X2FkZChuZXcsICZhbXA7cHRhYmxlX2xpc3RbdHlwZV0pOwogCi0JCW5ldyA9IFBEX1BUQUJMRShwdF9hZGRyKTsKLQkJUERfTUFSS0JJVFMobmV3KSA9IHB0YWJsZV9tYXNrKHR5cGUpIC0gMTsKLQkJbGlzdF9hZGRfdGFpbChuZXcsIGRwKTsKJiM0MzsJcmV0dXJuIChwbWRfdCAqKXB0X2FkZHI7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgKmdldF9wb2ludGVyX3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgdHlwZSkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCB0bXAsIG9mZjsKJiM0MzsJdW5zaWduZWQgbG9uZyBtYXNrOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwlwdGFibGVfZGVzYyAqZHA7CiYjNDM7CXZvaWQgKnJldDsKIAotCQlyZXR1cm4gKHBtZF90ICopcHRfYWRkcjsKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtwdGFibGVfbG9jaywgZmxhZ3MpOwomIzQzOwlkcCA9IHB0YWJsZV9saXN0W3R5cGVdLm5leHQ7CiYjNDM7CW1hc2sgPSBsaXN0X2VtcHR5KCZhbXA7cHRhYmxlX2xpc3RbdHlwZV0pID8gMCA6IFBEX01BUktCSVRTKGRwKTsKJiM0MzsKJiM0MzsJaWYgKG1hc2sgPT0gMCkgewomIzQzOwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3B0YWJsZV9sb2NrLCBmbGFncyk7CiYjNDM7CQlyZXR1cm4gYWRkX3BvaW50ZXJfdGFibGUobW0sIHR5cGUpOwogCX0KIAogCWZvciAodG1wID0gMSwgb2ZmID0gMDsgKG1hc2sgJmFtcDsgdG1wKSA9PSAwOyB0bXAgJmx0OyZsdDs9IDEsIG9mZiAmIzQzOz0gcHRhYmxlX3NpemUodHlwZSkpCkBAIC0xOTQsNyAmIzQzOzIxMSwxMCBAQCB2b2lkICpnZXRfcG9pbnRlcl90YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IHR5cGUpCiAJCS8qIG1vdmUgdG8gZW5kIG9mIGxpc3QgKi8KIAkJbGlzdF9tb3ZlX3RhaWwoZHAsICZhbXA7cHRhYmxlX2xpc3RbdHlwZV0pOwogCX0KLQlyZXR1cm4gcHRkZXNjX2FkZHJlc3MoUERfUFRERVNDKGRwKSkgJiM0Mzsgb2ZmOwomIzQzOwomIzQzOwlyZXQgPSBwdGRlc2NfYWRkcmVzcyhQRF9QVERFU0MoZHApKSAmIzQzOyBvZmY7CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtwdGFibGVfbG9jaywgZmxhZ3MpOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiBpbnQgZnJlZV9wb2ludGVyX3RhYmxlKHZvaWQgKnRhYmxlLCBpbnQgdHlwZSkKQEAgLTIwMyw2ICYjNDM7MjIzLDkgQEAgaW50IGZyZWVfcG9pbnRlcl90YWJsZSh2b2lkICp0YWJsZSwgaW50IHR5cGUpCiAJdW5zaWduZWQgbG9uZyBwdGFibGUgPSAodW5zaWduZWQgbG9uZyl0YWJsZTsKIAl1bnNpZ25lZCBsb25nIHB0X2FkZHIgPSBwdGFibGUgJmFtcDsgUEFHRV9NQVNLOwogCXVuc2lnbmVkIGludCBtYXNrID0gMVUgJmx0OyZsdDsgKChwdGFibGUgLSBwdF9hZGRyKS9wdGFibGVfc2l6ZSh0eXBlKSk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7cHRhYmxlX2xvY2ssIGZsYWdzKTsKIAogCWRwID0gUERfUFRBQkxFKHB0X2FkZHIpOwogCWlmIChQRF9NQVJLQklUUyAoZHApICZhbXA7IG1hc2spCkBAIC0yMTMsNiAmIzQzOzIzNiw4IEBAIGludCBmcmVlX3BvaW50ZXJfdGFibGUodm9pZCAqdGFibGUsIGludCB0eXBlKQogCWlmIChQRF9NQVJLQklUUyhkcCkgPT0gcHRhYmxlX21hc2sodHlwZSkpIHsKIAkJLyogYWxsIHRhYmxlcyBpbiBwdGRlc2MgYXJlIGZyZWUsIGZyZWUgcHRkZXNjICovCiAJCWxpc3RfZGVsKGRwKTsKJiM0MzsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtwdGFibGVfbG9jaywgZmxhZ3MpOwomIzQzOwogCQltbXVfcGFnZV9kdG9yKCh2b2lkICopcHRfYWRkcik7CiAJCXBhZ2V0YWJsZV9kdG9yX2ZyZWUodmlydF90b19wdGRlc2MoKHZvaWQgKilwdF9hZGRyKSk7CiAJCXJldHVybiAxOwpAQCAtMjIzLDkgJiM0MzsyNDgsMjEgQEAgaW50IGZyZWVfcG9pbnRlcl90YWJsZSh2b2lkICp0YWJsZSwgaW50IHR5cGUpCiAJCSAqLwogCQlsaXN0X21vdmUoZHAsICZhbXA7cHRhYmxlX2xpc3RbdHlwZV0pOwogCX0KJiM0MzsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3B0YWJsZV9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKJiM0Mzt2b2lkIF9fdGxiX3JlbW92ZV90YWJsZSh2b2lkICp0YWJsZSkKJiM0Mzt7CiYjNDM7CS8qIFRoZSBib3R0b20gMiBiaXRzIGFyZSB1c2VkIHRvIGVuY29kZSBwYWdlIHRhYmxlIHR5cGUuICovCiYjNDM7CWNvbnN0IHVuc2lnbmVkIGxvbmcgZW5jb2RlZCA9ICh1bnNpZ25lZCBsb25nKXRhYmxlOwomIzQzOwl2b2lkICphZGRyID0gKHZvaWQgKikoZW5jb2RlZCAmYW1wOyB+M1VMKTsKJiM0MzsJY29uc3QgaW50IHR5cGUgPSBlbmNvZGVkICZhbXA7IDM7CiYjNDM7CiYjNDM7CWZyZWVfcG9pbnRlcl90YWJsZShhZGRyLCB0eXBlKTsKJiM0Mzt9CiYjNDM7CiAvKiBzaXplIG9mIG1lbW9yeSBhbHJlYWR5IG1hcHBlZCBpbiBoZWFkLlMgKi8KIGV4dGVybiBfX2luaXRkYXRhIHVuc2lnbmVkIGxvbmcgbTY4a19pbml0X21hcHBlZF9zaXplOwogCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcGdhbGxvYy5oIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3BnYWxsb2MuaAppbmRleCAwODRhOGEwZGMyMzk1Li5mZmVlNmEwMDkyMTlhIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcGdhbGxvYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKQEAgLTI1LDcgJiM0MzsyNSw3IEBAIGV4dGVybiB2b2lkIF9fYmFkX3B0ZShwbWRfdCAqcG1kKTsKIAogZXh0ZXJuIHB0ZV90ICpwdGVfYWxsb2Nfb25lX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CiAKLSNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLCBwdGUsIGFkZHIpCXB0ZV9mcmVlKCh0bGIpLSZndDttbSwgKHB0ZSkpCiYjNDM7I2RlZmluZSBfX3B0ZV9mcmVlX3RsYih0bGIsIHB0ZSwgYWRkcikJdGxiX3JlbW92ZV9wdGRlc2MoKHRsYiksIHBhZ2VfcHRkZXNjKHB0ZSkpCiAKICNkZWZpbmUgcG1kX3BvcHVsYXRlKG1tLCBwbWQsIHB0ZSkgXAogCQkJKHBtZF92YWwoKihwbWQpKSA9ICh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwdGUpKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL0tjb25maWcgYi9hcmNoL21pcHMvS2NvbmZpZwppbmRleCBlMmViOTYyN2JkMTRjLi5mMGM0M2QxMThjYTAwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL21pcHMvS2NvbmZpZwpAQCAtOTcsNyAmIzQzOzk3LDYgQEAgY29uZmlnIE1JUFMKIAlzZWxlY3QgSVJRX0ZPUkNFRF9USFJFQURJTkcKIAlzZWxlY3QgSVNBIGlmIEVJU0EKIAlzZWxlY3QgTE9DS19NTV9BTkRfRklORF9WTUEKLQlzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRQogCXNlbGVjdCBNT0RVTEVTX1VTRV9FTEZfUkVMIGlmIE1PRFVMRVMKIAlzZWxlY3QgTU9EVUxFU19VU0VfRUxGX1JFTEEgaWYgTU9EVUxFUyAmYW1wOyZhbXA7IDY0QklUCiAJc2VsZWN0IFBFUkZfVVNFX1ZNQUxMT0MKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL0tjb25maWcgYi9hcmNoL3BhcmlzYy9LY29uZmlnCmluZGV4IGQzYWZhYzJmMGQ5YmUuLjc3ZjY3MDI4YWQ4OWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wYXJpc2MvS2NvbmZpZwpAQCAtODAsNyAmIzQzOzgwLDYgQEAgY29uZmlnIFBBUklTQwogCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCiAJc2VsZWN0IENQVV9OT19FRkZJQ0lFTlRfRkZTCiAJc2VsZWN0IFRIUkVBRF9JTkZPX0lOX1RBU0sKLQlzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRQogCXNlbGVjdCBORUVEX0RNQV9NQVBfU1RBVEUKIAlzZWxlY3QgTkVFRF9TR19ETUFfTEVOR1RICiAJc2VsZWN0IEhBVkVfQVJDSF9LR0RCCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnCmluZGV4IDI1ODBlMjdlNDMyODcuLjA3NjdjZmNiYWE0MjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnCkBAIC0zMDcsNyAmIzQzOzMwNyw2IEBAIGNvbmZpZyBQUEMKIAlzZWxlY3QgS0FTQU5fVk1BTExPQwkJCWlmIEtBU0FOICZhbXA7JmFtcDsgRVhFQ01FTQogCXNlbGVjdCBMT0NLX01NX0FORF9GSU5EX1ZNQQogCXNlbGVjdCBNTVVfR0FUSEVSX1BBR0VfU0laRQotCXNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFCiAJc2VsZWN0IEhBVkVfQVJDSF9UTEJfUkVNT1ZFX1RBQkxFCiAJc2VsZWN0IE1NVV9HQVRIRVJfTUVSR0VfVk1BUwogCXNlbGVjdCBNTVVfTEFaWV9UTEJfU0hPT1RET1dOCQlpZiBQUENfQk9PSzNTXzY0CmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L0tjb25maWcgYi9hcmNoL3Jpc2N2L0tjb25maWcKaW5kZXggNTA1ZWVkNGFmOTMyYi4uNzc0MWE0Mjg3NDk4MSAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvS2NvbmZpZwpAQCAtMjA4LDcgJiM0MzsyMDgsNiBAQCBjb25maWcgUklTQ1YKIAlzZWxlY3QgSVJRX0ZPUkNFRF9USFJFQURJTkcKIAlzZWxlY3QgS0FTQU5fVk1BTExPQyBpZiBLQVNBTgogCXNlbGVjdCBMT0NLX01NX0FORF9GSU5EX1ZNQQotCXNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFIGlmIFNNUCAmYW1wOyZhbXA7IE1NVQogCXNlbGVjdCBNT0RVTEVTX1VTRV9FTEZfUkVMQSBpZiBNT0RVTEVTCiAJc2VsZWN0IE9GCiAJc2VsZWN0IE9GX0VBUkxZX0ZMQVRUUkVFCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnCmluZGV4IGI4OGI4NTA0MjEzNjkuLmEzNDM3NmMwNWY2ZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9LY29uZmlnCkBAIC0yNjcsNyAmIzQzOzI2Nyw2IEBAIGNvbmZpZyBTMzkwCiAJc2VsZWN0IExPQ0tfTU1fQU5EX0ZJTkRfVk1BCiAJc2VsZWN0IE1NVV9HQVRIRVJfTUVSR0VfVk1BUwogCXNlbGVjdCBNTVVfR0FUSEVSX05PX0dBVEhFUgotCXNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFCiAJc2VsZWN0IE1PRFVMRVNfVVNFX0VMRl9SRUxBCiAJc2VsZWN0IE5FRURfRE1BX01BUF9TVEFURQlpZiBQQ0kKIAlzZWxlY3QgTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LCmRpZmYgLS1naXQgYS9hcmNoL3NoL0tjb25maWcgYi9hcmNoL3NoL0tjb25maWcKaW5kZXggZDYwZjFkNWE5NGMwZi4uZmU4NTlkZWY5MThjYyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvc2gvS2NvbmZpZwpAQCAtMzMsNiAmIzQzOzMzLDcgQEAgY29uZmlnIFNVUEVSSAogCXNlbGVjdCBIQVZFX0FSQ0hfQVVESVRTWVNDQUxMCiAJc2VsZWN0IEhBVkVfQVJDSF9LR0RCCiAJc2VsZWN0IEhBVkVfQVJDSF9TRUNDT01QX0ZJTFRFUgomIzQzOwlzZWxlY3QgSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEUgaWYgWDJUTEIKIAlzZWxlY3QgSEFWRV9BUkNIX1RSQUNFSE9PSwogCXNlbGVjdCBIQVZFX0RFQlVHX0JVR1ZFUkJPU0UKIAlzZWxlY3QgSEFWRV9ERUJVR19LTUVNTEVBSwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BnYWxsb2MuaAppbmRleCA2ZmU3MTIzZDM4ZmE5Li42N2NlN2ZhMjNmYTEyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BnYWxsb2MuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BnYWxsb2MuaApAQCAtMTcsNyAmIzQzOzE3LDExIEBAIGV4dGVybiB2b2lkIHBnZF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKTsKIGV4dGVybiB2b2lkIHB1ZF9wb3B1bGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcHVkX3QgKnB1ZHAsIHBtZF90ICpwbWQpOwogZXh0ZXJuIHBtZF90ICpwbWRfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpOwogZXh0ZXJuIHZvaWQgcG1kX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQpOwotI2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIsIHBtZHAsIGFkZHIpCQlwbWRfZnJlZSgodGxiKS0mZ3Q7bW0sIChwbWRwKSkKJiM0MztleHRlcm4gdm9pZCBfX3RsYl9yZW1vdmVfdGFibGUodm9pZCAqdGFibGUpOwomIzQzOwomIzQzOy8qIFBNRHMgYXJlIHNsYWItYWxsb2NhdGVkLCB0YWcgc28gdGhleSBhcmUgZnJlZWQgY29ycmVjdGx5LiAqLwomIzQzOyNkZWZpbmUgX19wbWRfZnJlZV90bGIodGxiLCBwbWRwLCBhZGRyKQkJCQkJXAomIzQzOwl0bGJfcmVtb3ZlX3RhYmxlKCh0bGIpLCAodm9pZCAqKSgodW5zaWduZWQgbG9uZykocG1kcCkgfCAxKSkKICNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHZvaWQgcG1kX3BvcHVsYXRlX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCwKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vcGd0YWJsZS5jIGIvYXJjaC9zaC9tbS9wZ3RhYmxlLmMKaW5kZXggM2E0MDg1ZWEwMTYxZi4uZjYxODRiODZiODljNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9wZ3RhYmxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zaC9tbS9wZ3RhYmxlLmMKQEAgLTU2LDQgJiM0Mzs1NiwyNCBAQCB2b2lkIHBtZF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKQogewogCWttZW1fY2FjaGVfZnJlZShwbWRfY2FjaGVwLCBwbWQpOwogfQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZV9zbGFiKHZvaWQgKnRhYmxlKQomIzQzO3sKJiM0MzsJa21lbV9jYWNoZV9mcmVlKHBtZF9jYWNoZXAsIHRhYmxlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgX190bGJfcmVtb3ZlX3RhYmxlX3BndGFibGUodm9pZCAqdGFibGUpCiYjNDM7ewomIzQzOwlwYWdldGFibGVfZHRvcl9mcmVlKHRhYmxlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBfX3RsYl9yZW1vdmVfdGFibGUodm9pZCAqdGFibGUpCiYjNDM7ewomIzQzOwljb25zdCB1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZyl0YWJsZTsKJiM0MzsKJiM0MzsJaWYgKGFkZHIgJmFtcDsgMSkKJiM0MzsJCV9fdGxiX3JlbW92ZV90YWJsZV9zbGFiKCh2b2lkICopKGFkZHIgJmFtcDsgfjFVTCkpOwomIzQzOwllbHNlCiYjNDM7CQlfX3RsYl9yZW1vdmVfdGFibGVfcGd0YWJsZSh0YWJsZSk7CiYjNDM7fQogI2VuZGlmIC8qIFBBR0VUQUJMRV9MRVZFTFMgJmd0OyAyICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL0tjb25maWcgYi9hcmNoL3NwYXJjL0tjb25maWcKaW5kZXggYWI3N2QzZjI1MzZlMS4uNzQyZmZmZjhjMzdmMiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvc3BhcmMvS2NvbmZpZwpAQCAtNjQsNiAmIzQzOzY0LDcgQEAgY29uZmlnIFNQQVJDMzIKIAlzZWxlY3QgSEFWRV9VSUQxNgogCXNlbGVjdCBIQVZFX1BBR0VfU0laRV80S0IKIAlzZWxlY3QgTE9DS19NTV9BTkRfRklORF9WTUEKJiM0MzsJc2VsZWN0IEhBVkVfQVJDSF9UTEJfUkVNT1ZFX1RBQkxFCiAJc2VsZWN0IE9MRF9TSUdBQ1RJT04KIAlzZWxlY3QgWk9ORV9ETUEKIApAQCAtNzUsOCAmIzQzOzc2LDcgQEAgY29uZmlnIFNQQVJDNjQKIAlzZWxlY3QgSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVIKIAlzZWxlY3QgSEFWRV9LUkVUUFJPQkVTCiAJc2VsZWN0IEhBVkVfS1BST0JFUwotCXNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFIGlmIFNNUAotCXNlbGVjdCBIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRSBpZiBTTVAKJiM0MzsJc2VsZWN0IEhBVkVfQVJDSF9UTEJfUkVNT1ZFX1RBQkxFCiAJc2VsZWN0IE1NVV9HQVRIRVJfTUVSR0VfVk1BUwogCXNlbGVjdCBNTVVfR0FUSEVSX05PX0ZMVVNIX0NBQ0hFCiAJc2VsZWN0IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzMyLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2NfMzIuaAppbmRleCA0ZjczZTg3YjIyYTMyLi4zNjAxMDg1MmJhMGMwIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2NfMzIuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2NfMzIuaApAQCAtNDgsNyAmIzQzOzQ4LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIGZyZWVfcG1kX2Zhc3QocG1kX3QgKiBwbWQpCiB9CiAKICNkZWZpbmUgcG1kX2ZyZWUobW0sIHBtZCkJCWZyZWVfcG1kX2Zhc3QocG1kKQotI2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIsIHBtZCwgYWRkcikJcG1kX2ZyZWUoKHRsYiktJmd0O21tLCBwbWQpCiYjNDM7CiYjNDM7I2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIsIHBtZCwgYWRkcikJCQkJCVwKJiM0MzsJdGxiX3JlbW92ZV90YWJsZSgodGxiKSwgKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKHBtZCkgfCAxVUwpKQogCiAjZGVmaW5lIHBtZF9wb3B1bGF0ZShtbSwgcG1kLCBwdGUpCXBtZF9zZXQocG1kLCBwdGUpCiAKQEAgLTcyLDYgJiM0Mzs3NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3B0ZV9mYXN0KHB0ZV90ICpwdGUpCiAjZGVmaW5lIHB0ZV9mcmVlX2tlcm5lbChtbSwgcHRlKQlmcmVlX3B0ZV9mYXN0KHB0ZSkKIAogdm9pZCBwdGVfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICogbW0sIHBndGFibGVfdCBwdGUpOwotI2RlZmluZSBfX3B0ZV9mcmVlX3RsYih0bGIsIHB0ZSwgYWRkcikJcHRlX2ZyZWUoKHRsYiktJmd0O21tLCBwdGUpCiYjNDM7dm9pZCBfX3RsYl9yZW1vdmVfdGFibGUodm9pZCAqdGFibGUpOwomIzQzOyNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLCBwdGUsIGFkZHIpCXRsYl9yZW1vdmVfdGFibGUoKHRsYiksICh2b2lkICopKHB0ZSkpCiAKICNlbmRpZiAvKiBfU1BBUkNfUEdBTExPQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2NfNjQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY182NC5oCmluZGV4IGNhYTc2MzJiZTRjMmEuLmI1MDU1ZDI1OWI3NGQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY182NC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY182NC5oCkBAIC03NCw4ICYjNDM7NzQsNiBAQCB2b2lkIHB0ZV9mcmVlX2RlZmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcGd0YWJsZSk7CiAKIHZvaWQgcGd0YWJsZV9mcmVlKHZvaWQgKnRhYmxlLCBib29sIGlzX3BhZ2UpOwogCi0jaWZkZWYgQ09ORklHX1NNUAotCiBzdHJ1Y3QgbW11X2dhdGhlcjsKIHZvaWQgdGxiX3JlbW92ZV90YWJsZShzdHJ1Y3QgbW11X2dhdGhlciAqLCB2b2lkICopOwogCkBAIC05NiwxMiAmIzQzOzk0LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZSh2b2lkICpfdGFibGUpCiAJCWlzX3BhZ2UgPSB0cnVlOwogCXBndGFibGVfZnJlZSh0YWJsZSwgaXNfcGFnZSk7CiB9Ci0jZWxzZSAvKiBDT05GSUdfU01QICovCi1zdGF0aWMgaW5saW5lIHZvaWQgcGd0YWJsZV9mcmVlX3RsYihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCB2b2lkICp0YWJsZSwgYm9vbCBpc19wYWdlKQotewotCXBndGFibGVfZnJlZSh0YWJsZSwgaXNfcGFnZSk7Ci19Ci0jZW5kaWYgLyogIUNPTkZJR19TTVAgKi8KIAogc3RhdGljIGlubGluZSB2b2lkIF9fcHRlX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHB0ZV90ICpwdGUsCiAJCQkJICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RsYl82NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90bGJfNjQuaAppbmRleCAzMDM3MTg3NDgyZGI3Li5mNWY5NjMxNjg1ZDUwIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RsYl82NC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGxiXzY0LmgKQEAgLTI5LDkgJiM0MzsyOSw3IEBAIHZvaWQgZmx1c2hfdGxiX3BlbmRpbmcodm9pZCk7CiAgKiBhbmQgdGhlcmVmb3JlIHdlIGRvbiYjMzk7dCBuZWVkIGEgVExCSSB3aGVuIGZyZWVpbmcgcGFnZS10YWJsZSBwYWdlcy4KICAqLwogCi0jaWZkZWYgQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUKICNkZWZpbmUgdGxiX25lZWRzX3RhYmxlX2ludmFsaWRhdGUoKQkoZmFsc2UpCi0jZW5kaWYKIAogI2luY2x1ZGUgJmx0O2FzbS1nZW5lcmljL3RsYi5oJmd0OwogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2xpYi9iaXRleHQuYyBiL2FyY2gvc3BhcmMvbGliL2JpdGV4dC5jCmluZGV4IDMyYTVjMWQ5NDU5Y2QuLmMzMDllMjc5NzNjZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbGliL2JpdGV4dC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvc3BhcmMvbGliL2JpdGV4dC5jCkBAIC0yMiw4ICYjNDM7MjIsNiBAQAogICogQGFsaWduOiByZXF1ZXN0ZWQgYWxpZ25tZW50CiAgKgogICogUmV0dXJucyBvZmZzZXQgaW4gdGhlIG1hcCBvciAtMSBpZiBvdXQgb2Ygc3BhY2UuCi0gKgotICogTm90IHNhZmUgdG8gY2FsbCBmcm9tIGFuIGludGVycnVwdCAodXNlcyBzcGluX2xvY2spLgogICovCiBpbnQgYml0X21hcF9zdHJpbmdfZ2V0KHN0cnVjdCBiaXRfbWFwICp0LCBpbnQgbGVuLCBpbnQgYWxpZ24pCiB7CkBAIC0zMSw2ICYjNDM7MjksNyBAQCBpbnQgYml0X21hcF9zdHJpbmdfZ2V0KHN0cnVjdCBiaXRfbWFwICp0LCBpbnQgbGVuLCBpbnQgYWxpZ24pCiAJaW50IG9mZl9uZXc7CiAJaW50IGFsaWduMTsKIAlpbnQgaSwgY29sb3I7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAodC0mZ3Q7bnVtX2NvbG9ycykgewogCQkvKiBhbGlnbiBpcyBvdmVybG9hZGVkIHRvIGJlIHRoZSBwYWdlIGNvbG9yICovCkBAIC01MCw3ICYjNDM7NDksNyBAQCBpbnQgYml0X21hcF9zdHJpbmdfZ2V0KHN0cnVjdCBiaXRfbWFwICp0LCBpbnQgbGVuLCBpbnQgYWxpZ24pCiAJCUJVRygpOwogCWNvbG9yICZhbXA7PSBhbGlnbjE7CiAKLQlzcGluX2xvY2soJmFtcDt0LSZndDtsb2NrKTsKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDt0LSZndDtsb2NrLCBmbGFncyk7CiAJaWYgKGxlbiAmbHQ7IHQtJmd0O2xhc3Rfc2l6ZSkKIAkJb2Zmc2V0ID0gdC0mZ3Q7Zmlyc3RfZnJlZTsKIAllbHNlCkBAIC02NCw3ICYjNDM7NjMsNyBAQCBpbnQgYml0X21hcF9zdHJpbmdfZ2V0KHN0cnVjdCBiaXRfbWFwICp0LCBpbnQgbGVuLCBpbnQgYWxpZ24pCiAJCWlmIChvZmZzZXQgJmd0Oz0gdC0mZ3Q7c2l6ZSkKIAkJCW9mZnNldCA9IDA7CiAJCWlmIChjb3VudCAmIzQzOyBsZW4gJmd0OyB0LSZndDtzaXplKSB7Ci0JCQlzcGluX3VubG9jaygmYW1wO3QtJmd0O2xvY2spOwomIzQzOwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt0LSZndDtsb2NrLCBmbGFncyk7CiAvKiBQMyAqLyBwcmludGsoS0VSTl9FUlIKICAgJiMzNDtiaXRtYXAgb3V0OiBzaXplICVkIHVzZWQgJWQgb2ZmICVkIGxlbiAlZCBhbGlnbiAlZCBjb3VudCAlZFxuJiMzNDssCiAgIHQtJmd0O3NpemUsIHQtJmd0O3VzZWQsIG9mZnNldCwgbGVuLCBhbGlnbiwgY291bnQpOwpAQCAtOTAsNyAmIzQzOzg5LDcgQEAgaW50IGJpdF9tYXBfc3RyaW5nX2dldChzdHJ1Y3QgYml0X21hcCAqdCwgaW50IGxlbiwgaW50IGFsaWduKQogCQkJCQl0LSZndDtsYXN0X29mZiA9IDA7CiAJCQkJdC0mZ3Q7dXNlZCAmIzQzOz0gbGVuOwogCQkJCXQtJmd0O2xhc3Rfc2l6ZSA9IGxlbjsKLQkJCQlzcGluX3VubG9jaygmYW1wO3QtJmd0O2xvY2spOwomIzQzOwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7dC0mZ3Q7bG9jaywgZmxhZ3MpOwogCQkJCXJldHVybiBvZmZzZXQ7CiAJCQl9CiAJCX0KQEAgLTEwMywxMCAmIzQzOzEwMiwxMSBAQCBpbnQgYml0X21hcF9zdHJpbmdfZ2V0KHN0cnVjdCBiaXRfbWFwICp0LCBpbnQgbGVuLCBpbnQgYWxpZ24pCiB2b2lkIGJpdF9tYXBfY2xlYXIoc3RydWN0IGJpdF9tYXAgKnQsIGludCBvZmZzZXQsIGludCBsZW4pCiB7CiAJaW50IGk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAodC0mZ3Q7dXNlZCAmbHQ7IGxlbikKIAkJQlVHKCk7CQkvKiBNdWNoIHRvbyBsYXRlIHRvIGRvIGFueSBnb29kLCBidXQgYWxhcy4uLiAqLwotCXNwaW5fbG9jaygmYW1wO3QtJmd0O2xvY2spOwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3QtJmd0O2xvY2ssIGZsYWdzKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgbGVuOyBpJiM0MzsmIzQzOykgewogCQlpZiAodGVzdF9iaXQob2Zmc2V0ICYjNDM7IGksIHQtJmd0O21hcCkgPT0gMCkKIAkJCUJVRygpOwpAQCAtMTE1LDcgJiM0MzsxMTUsNyBAQCB2b2lkIGJpdF9tYXBfY2xlYXIoc3RydWN0IGJpdF9tYXAgKnQsIGludCBvZmZzZXQsIGludCBsZW4pCiAJaWYgKG9mZnNldCAmbHQ7IHQtJmd0O2ZpcnN0X2ZyZWUpCiAJCXQtJmd0O2ZpcnN0X2ZyZWUgPSBvZmZzZXQ7CiAJdC0mZ3Q7dXNlZCAtPSBsZW47Ci0Jc3Bpbl91bmxvY2soJmFtcDt0LSZndDtsb2NrKTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3QtJmd0O2xvY2ssIGZsYWdzKTsKIH0KIAogdm9pZCBiaXRfbWFwX2luaXQoc3RydWN0IGJpdF9tYXAgKnQsIHVuc2lnbmVkIGxvbmcgKm1hcCwgaW50IHNpemUpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL3NybW11LmMgYi9hcmNoL3NwYXJjL21tL3NybW11LmMKaW5kZXggOWE3NDkwMmFkMTgxNC4uMmEyYzdiZDIxMDExNCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tbS9zcm1tdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvc3BhcmMvbW0vc3JtbXUuYwpAQCAtMzU5LDE5ICYjNDM7MzU5LDM5IEBAIHBndGFibGVfdCBwdGVfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogCXJldHVybiBwdGVwOwogfQogCi12b2lkIHB0ZV9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcHRlcCkKJiM0MztzdGF0aWMgdm9pZCBfX3B0ZV9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcHRlcCkKIHsKJiM0MzsJY29uc3QgYm9vbCBwcm9jZXNzX2NvbnRleHQgPSBtbTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAogCXBhZ2UgPSBwZm5fdG9fcGFnZShfX25vY2FjaGVfcGEoKHVuc2lnbmVkIGxvbmcpcHRlcCkgJmd0OyZndDsgUEFHRV9TSElGVCk7Ci0Jc3Bpbl9sb2NrKCZhbXA7bW0tJmd0O3BhZ2VfdGFibGVfbG9jayk7CiYjNDM7CWlmIChwcm9jZXNzX2NvbnRleHQpCiYjNDM7CQlzcGluX2xvY2soJmFtcDttbS0mZ3Q7cGFnZV90YWJsZV9sb2NrKTsKIAlpZiAocGFnZV9yZWZfZGVjX3JldHVybihwYWdlKSA9PSAxKQogCQlwYWdldGFibGVfZHRvcihwYWdlX3B0ZGVzYyhwYWdlKSk7Ci0Jc3Bpbl91bmxvY2soJmFtcDttbS0mZ3Q7cGFnZV90YWJsZV9sb2NrKTsKJiM0MzsJaWYgKHByb2Nlc3NfY29udGV4dCkKJiM0MzsJCXNwaW5fdW5sb2NrKCZhbXA7bW0tJmd0O3BhZ2VfdGFibGVfbG9jayk7CiAKIAlzcm1tdV9mcmVlX25vY2FjaGUocHRlcCwgU1JNTVVfUFRFX1RBQkxFX1NJWkUpOwogfQogCiYjNDM7dm9pZCBwdGVfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHB0ZXApCiYjNDM7ewomIzQzOwlfX3B0ZV9mcmVlKG1tLCBwdGVwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBfX3RsYl9yZW1vdmVfdGFibGUodm9pZCAqdGFibGUpCiYjNDM7ewomIzQzOwljb25zdCB1bnNpZ25lZCBsb25nIGVuY29kZWQgPSAodW5zaWduZWQgbG9uZyl0YWJsZTsKJiM0MzsJY29uc3QgdW5zaWduZWQgbG9uZyBhZGRyID0gZW5jb2RlZCAmYW1wOyB+MVVMOwomIzQzOwljb25zdCBib29sIGlzX3BtZCA9IGVuY29kZWQgJmFtcDsgMTsKJiM0MzsKJiM0MzsJaWYgKGlzX3BtZCkKJiM0MzsJCWZyZWVfcG1kX2Zhc3QoKHBtZF90ICopYWRkcik7CiYjNDM7CWVsc2UgLyogQ2FsbGVkIGZyb20gc29mdGlycSBjb250ZXh0LCBubyBtbS4gKi8KJiM0MzsJCV9fcHRlX2ZyZWUoTlVMTCwgKHBndGFibGVfdClhZGRyKTsKJiM0Mzt9CiYjNDM7CiAvKiBjb250ZXh0IGhhbmRsaW5nIC0gYSBkeW5hbWljYWxseSBzaXplZCBwb29sIGlzIHVzZWQgKi8KICNkZWZpbmUgTk9fQ09OVEVYVAktMQogCmRpZmYgLS1naXQgYS9hcmNoL3VtL0tjb25maWcgYi9hcmNoL3VtL0tjb25maWcKaW5kZXggZDk1NDFkMTNkOWViMC4uOTRiOGZmNzBmNTc4YiAxMDA2NDQKLS0tIGEvYXJjaC91bS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvdW0vS2NvbmZpZwpAQCAtNDQsNyAmIzQzOzQ0LDYgQEAgY29uZmlnIFVNTAogCXNlbGVjdCBIQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFMKIAlzZWxlY3QgVEhSRUFEX0lORk9fSU5fVEFTSwogCXNlbGVjdCBTUEFSU0VfSVJRCi0Jc2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUKIAogY29uZmlnIE1NVQogCWJvb2wKZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcgYi9hcmNoL3g4Ni9LY29uZmlnCmluZGV4IGE4YzNiM2QzMWEyNzYuLjZlNWU0NjJlYzA1OWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvS2NvbmZpZwpAQCAtMjgzLDcgJiM0MzsyODMsNiBAQCBjb25maWcgWDg2CiAJc2VsZWN0IEhBVkVfUEVSRl9SRUdTCiAJc2VsZWN0IEhBVkVfUEVSRl9VU0VSX1NUQUNLX0RVTVAKIAlzZWxlY3QgQVNZTkNfS0VSTkVMX1BHVEFCTEVfRlJFRQlpZiBJT01NVV9TVkEKLQlzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRQogCXNlbGVjdCBNTVVfR0FUSEVSX01FUkdFX1ZNQVMKIAlzZWxlY3QgSEFWRV9QT1NJWF9DUFVfVElNRVJTX1RBU0tfV09SSwogCXNlbGVjdCBIQVZFX1JFR1NfQU5EX1NUQUNLX0FDQ0VTU19BUEkKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3RsYi5oIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vdGxiLmgKaW5kZXggOGMzY2ViNDI3MDE4MC4uNmZiN2I3ODE1NGY2MiAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vdGxiLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vdGxiLmgKQEAgLTE2LDcgJiM0MzsxNiw3IEBACiAKICNpbmNsdWRlICZsdDthc20tZ2VuZXJpYy90bGIuaCZndDsKIAotI2RlZmluZSBfX3B0ZV9mcmVlX3RsYih0bGIsIHB0ZSwgYWRkcmVzcykJcHRlX2ZyZWUoKHRsYiktJmd0O21tLCBwdGUpCiYjNDM7I2RlZmluZSBfX3B0ZV9mcmVlX3RsYih0bGIsIHB0ZSwgYWRkcmVzcykJdGxiX3JlbW92ZV9wdGRlc2MoKHRsYiksIHBhZ2VfcHRkZXNjKHB0ZSkpCiAKIHZvaWQgY2hlY2tfdGxiX3Nhbml0eSh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmgKaW5kZXggYmRjYzI3NzhhYzY0Zi4uMDQ0ZGFiYzFmZTljYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3RsYi5oCkBAIC02NywxMSAmIzQzOzY3LDggQEAKICAqICAtIHRsYl9yZW1vdmVfdGFibGUoKQogICoKICAqICAgIHRsYl9yZW1vdmVfdGFibGUoKSBpcyB0aGUgYmFzaWMgcHJpbWl0aXZlIHRvIGZyZWUgcGFnZS10YWJsZSBkaXJlY3RvcmllcwotICogICAgKF9fcCpfZnJlZV90bGIoKSkuICBJbiBpdCYjMzk7cyBtb3N0IHByaW1pdGl2ZSBmb3JtIGl0IGlzIGFuIGFsaWFzIGZvcgotICogICAgdGxiX3JlbW92ZV9wYWdlKCkgYmVsb3csIGZvciB3aGVuIHBhZ2UgZGlyZWN0b3JpZXMgYXJlIHBhZ2VzIGFuZCBoYXZlIG5vCi0gKiAgICBhZGRpdGlvbmFsIGNvbnN0cmFpbnRzLgotICoKLSAqICAgIFNlZSBhbHNvIE1NVV9HQVRIRVJfVEFCTEVfRlJFRSBhbmQgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRS4KJiM0MzsgKiAgICAoX19wKl9mcmVlX3RsYigpKS4gIFBhZ2UgZGlyZWN0b3JpZXMgYXJlIGZyZWVkIGFmdGVyIGFuIFJDVSBncmFjZQomIzQzOyAqICAgIHBlcmlvZCAtIHNlZSB0aGUgY29tbWVudCBpbiBtbS9tbXVfZ2F0aGVyLmMuCiAgKgogICogIC0gdGxiX3JlbW92ZV9wYWdlKCkgLyB0bGJfcmVtb3ZlX3BhZ2Vfc2l6ZSgpCiAgKiAgLSBfX3RsYl9yZW1vdmVfZm9saW9fcGFnZXMoKSAvIF9fdGxiX3JlbW92ZV9wYWdlX3NpemUoKQpAQCAtMTUxLDI0ICYjNDM7MTQ4LDE1IEBACiAgKiAgVGhpcyBtaWdodCBiZSB1c2VmdWwgaWYgeW91ciBhcmNoaXRlY3R1cmUgaGFzIHNpemUgc3BlY2lmaWMgVExCCiAgKiAgaW52YWxpZGF0aW9uIGluc3RydWN0aW9ucy4KICAqCi0gKiAgTU1VX0dBVEhFUl9UQUJMRV9GUkVFCi0gKgotICogIFRoaXMgcHJvdmlkZXMgdGxiX3JlbW92ZV90YWJsZSgpLCB0byBiZSB1c2VkIGluc3RlYWQgb2YgdGxiX3JlbW92ZV9wYWdlKCkKLSAqICBmb3IgcGFnZSBkaXJlY3RvcmVzIChfX3AqX2ZyZWVfdGxiKCkpLgotICoKLSAqICBVc2VmdWwgaWYgeW91ciBhcmNoaXRlY3R1cmUgaGFzIG5vbi1wYWdlIHBhZ2UgZGlyZWN0b3JpZXMuCiYjNDM7ICogIFBhZ2UgZGlyZWN0b3JpZXMgKF9fcCpfZnJlZV90bGIoKSkgYXJlIGFsd2F5cyBmcmVlZCB2aWEgdGxiX3JlbW92ZV90YWJsZSgpLAomIzQzOyAqICBhZnRlciBhbiBSQ1UgZ3JhY2UgcGVyaW9kIChzZWUgbW0vbW11X2dhdGhlci5jKS4KICAqCi0gKiAgV2hlbiB1c2VkLCBhbiBhcmNoaXRlY3R1cmUgaXMgZXhwZWN0ZWQgdG8gcHJvdmlkZSBfX3RsYl9yZW1vdmVfdGFibGUoKSBvcgotICogIHVzZSB0aGUgZ2VuZXJpYyBfX3RsYl9yZW1vdmVfdGFibGUoKSwgd2hpY2ggZG9lcyB0aGUgYWN0dWFsIGZyZWVpbmcgb2YgdGhlc2UKLSAqICBwYWdlcy4KJiM0MzsgKiBUaGlzIHNlcmlhbGlzZXMgYWdhaW5zdCBzb2Z0d2FyZSBwYWdlLXRhYmxlIHdhbGtlcnMsIGluY2x1ZGluZyBhcmNoaXRlY3R1cmVzCiYjNDM7ICogd2hpY2ggZG8gbm90IHVzZSBJUElzIGZvciByZW1vdGUgVExCIGludmFsaWRhdGVzLgogICoKLSAqICBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFCi0gKgotICogIExpa2UgTU1VX0dBVEhFUl9UQUJMRV9GUkVFLCBhbmQgYWRkcyBzZW1pLVJDVSBzZW1hbnRpY3MgdG8gdGhlIGZyZWUgKHNlZQotICogIGNvbW1lbnQgYmVsb3cpLgotICoKLSAqICBVc2VmdWwgaWYgeW91ciBhcmNoaXRlY3R1cmUgZG9lc24mIzM5O3QgdXNlIElQSXMgZm9yIHJlbW90ZSBUTEIgaW52YWxpZGF0ZXMKLSAqICBhbmQgdGhlcmVmb3JlIGRvZXNuJiMzOTt0IG5hdHVyYWxseSBzZXJpYWxpemUgd2l0aCBzb2Z0d2FyZSBwYWdlLXRhYmxlIHdhbGtlcnMuCiYjNDM7ICogIEFuIGFyY2hpdGVjdHVyZSBpcyBleHBlY3RlZCB0byBwcm92aWRlIF9fdGxiX3JlbW92ZV90YWJsZSgpIChzZWUKJiM0MzsgKiAgSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEUpIG9yIHVzZSB0aGUgZ2VuZXJpYyBfX3RsYl9yZW1vdmVfdGFibGUoKSwgd2hpY2gKJiM0MzsgKiAgZG9lcyB0aGUgYWN0dWFsIGZyZWVpbmcgb2YgdGhlc2UgcGFnZXMuCiAgKgogICogIE1NVV9HQVRIRVJfTk9fRkxVU0hfQ0FDSEUKICAqCkBAIC0yMDAsMTIgJiM0MzsxODgsOCBAQAogICogIHZhcmlvdXMgcHRlcF9nZXRfYW5kX2NsZWFyKCkgZnVuY3Rpb25zLgogICovCiAKLSNpZmRlZiBDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFCi0KIHN0cnVjdCBtbXVfdGFibGVfYmF0Y2ggewotI2lmZGVmIENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFCiAJc3RydWN0IHJjdV9oZWFkCQlyY3U7Ci0jZW5kaWYKIAl1bnNpZ25lZCBpbnQJCW5yOwogCXZvaWQJCQkqdGFibGVzW107CiB9OwpAQCAtMjI0LDIzICYjNDM7MjA4LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZSh2b2lkICp0YWJsZSkKIAogZXh0ZXJuIHZvaWQgdGxiX3JlbW92ZV90YWJsZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCB2b2lkICp0YWJsZSk7CiAKLSNlbHNlIC8qICFDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfcmVtb3ZlX3BhZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHBhZ2UgKnBhZ2UpOwotLyoKLSAqIFdpdGhvdXQgTU1VX0dBVEhFUl9UQUJMRV9GUkVFIHRoZSBhcmNoaXRlY3R1cmUgaXMgYXNzdW1lZCB0byBoYXZlIHBhZ2UgYmFzZWQKLSAqIHBhZ2UgZGlyZWN0b3JpZXMgYW5kIHdlIGNhbiB1c2UgdGhlIG5vcm1hbCBwYWdlIGJhdGNoaW5nIHRvIGZyZWUgdGhlbS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIHRsYl9yZW1vdmVfdGFibGUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgdm9pZCAqdGFibGUpCi17Ci0Jc3RydWN0IHB0ZGVzYyAqcHRkZXNjID0gKHN0cnVjdCBwdGRlc2MgKil0YWJsZTsKLQotCXBhZ2V0YWJsZV9kdG9yKHB0ZGVzYyk7Ci0JdGxiX3JlbW92ZV9wYWdlKHRsYiwgcHRkZXNjX3BhZ2UocHRkZXNjKSk7Ci19Ci0jZW5kaWYgLyogQ09ORklHX01NVV9HQVRIRVJfVEFCTEVfRlJFRSAqLwotCi0jaWZkZWYgQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUKIC8qCiAgKiBUaGlzIGFsbG93cyBhbiBhcmNoaXRlY3R1cmUgdGhhdCBkb2VzIG5vdCB1c2UgdGhlIGxpbnV4IHBhZ2UtdGFibGVzIGZvcgogICogaGFyZHdhcmUgdG8gc2tpcCB0aGUgVExCSSB3aGVuIGZyZWVpbmcgcGFnZSB0YWJsZXMuCkBAIC0yNTMsMTkgJiM0MzsyMjAsNiBAQCB2b2lkIHRsYl9yZW1vdmVfdGFibGVfc3luY19vbmUodm9pZCk7CiAKIHZvaWQgdGxiX3JlbW92ZV90YWJsZV9zeW5jX3JjdSh2b2lkKTsKIAotI2Vsc2UKLQotI2lmZGVmIHRsYl9uZWVkc190YWJsZV9pbnZhbGlkYXRlCi0jZXJyb3IgdGxiX25lZWRzX3RhYmxlX2ludmFsaWRhdGUoKSByZXF1aXJlcyBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFCi0jZW5kaWYKLQotc3RhdGljIGlubGluZSB2b2lkIHRsYl9yZW1vdmVfdGFibGVfc3luY19vbmUodm9pZCkgeyB9Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfcmN1KHZvaWQpIHsgfQotCi0jZW5kaWYgLyogQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgKi8KLQotCiAjaWZuZGVmIENPTkZJR19NTVVfR0FUSEVSX05PX0dBVEhFUgogLyoKICAqIElmIHdlIGNhbiYjMzk7dCBhbGxvY2F0ZSBhIHBhZ2UgdG8gbWFrZSBhIGJpZyBiYXRjaCBvZiBwYWdlIHBvaW50ZXJzCkBAIC0zMjUsOSAmIzQzOzI3OSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfZmx1c2hfcm1hcHMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0CiBzdHJ1Y3QgbW11X2dhdGhlciB7CiAJc3RydWN0IG1tX3N0cnVjdAkqbW07CiAKLSNpZmRlZiBDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFCiAJc3RydWN0IG1tdV90YWJsZV9iYXRjaAkqYmF0Y2g7Ci0jZW5kaWYKIAogCXVuc2lnbmVkIGxvbmcJCXN0YXJ0OwogCXVuc2lnbmVkIGxvbmcJCWVuZDsKZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnCmluZGV4IGMxZGRmNTljMGQ3MWEuLmJjN2JlZmFmYjQ3YjUgMTAwNjQ0Ci0tLSBhL21tL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvbW0vS2NvbmZpZwpAQCAtMTQ2NSw3ICYjNDM7MTQ2NSw3IEBAIGNvbmZpZyBIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRQogCiBjb25maWcgUFRfUkVDTEFJTQogCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgJmFtcDsmYW1wOyAhSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEUKJiM0MzsJZGVwZW5kcyBvbiBNTVUgJmFtcDsmYW1wOyAhSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEUKIAloZWxwCiAJICBUcnkgdG8gcmVjbGFpbSBlbXB0eSB1c2VyIHBhZ2UgdGFibGUgcGFnZXMgaW4gcGF0aHMgb3RoZXIgdGhhbiBtdW5tYXAKIAkgIGFuZCBleGl0X21tYXAgcGF0aC4KZGlmZiAtLWdpdCBhL21tL2d1cC5jIGIvbW0vZ3VwLmMKaW5kZXggZWI4OThlYTFlZTIyZS4uNjNiNDM1ZWM2MDVjOCAxMDA2NDQKLS0tIGEvbW0vZ3VwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZ3VwLmMKQEAgLTI3MDAsOCAmIzQzOzI3MDAsOSBAQCBFWFBPUlRfU1lNQk9MKGdldF91c2VyX3BhZ2VzX3VubG9ja2VkKTsKICAqIEJlZm9yZSBhY3RpdmF0aW5nIHRoaXMgY29kZSwgcGxlYXNlIGJlIGF3YXJlIHRoYXQgdGhlIGZvbGxvd2luZyBhc3N1bXB0aW9ucwogICogYXJlIGN1cnJlbnRseSBtYWRlOgogICoKLSAqICAqKSBFaXRoZXIgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSBpcyBlbmFibGVkLCBhbmQgdGxiX3JlbW92ZV90YWJsZSgpIGlzIHVzZWQgdG8KLSAqICBmcmVlIHBhZ2VzIGNvbnRhaW5pbmcgcGFnZSB0YWJsZXMgb3IgVExCIGZsdXNoaW5nIHJlcXVpcmVzIElQSSBicm9hZGNhc3QuCiYjNDM7ICogICopIHRsYl9yZW1vdmVfdGFibGUoKSBpcyB1c2VkIHRvIGZyZWUgcGFnZXMgY29udGFpbmluZyBwYWdlIHRhYmxlcywgd2l0aAomIzQzOyAqICB0aGUgZnJlZSBkZWZlcnJlZCB1bnRpbCBhbiBSQ1UgZ3JhY2UgcGVyaW9kIGhhcyBlbGFwc2VkIChzZWUKJiM0MzsgKiAgbW0vbW11X2dhdGhlci5jKS4KICAqCiAgKiAgKikgcHRlcyBjYW4gYmUgcmVhZCBhdG9taWNhbGx5IGJ5IHRoZSBhcmNoaXRlY3R1cmUuCiAgKgpkaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmMKaW5kZXggNTQ0OTRjM2ZhOTgzNS4uNTA1ZjdiNjJmZjI4MSAxMDA2NDQKLS0tIGEvbW0vaHVnZV9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jCkBAIC0yNDc2LDcgJiM0MzsyNDc2LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHphcF9kZXBvc2l0ZWRfdGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQpCiAJcGd0YWJsZV90IHBndGFibGU7CiAKIAlwZ3RhYmxlID0gcGd0YWJsZV90cmFuc19odWdlX3dpdGhkcmF3KG1tLCBwbWQpOwotCXB0ZV9mcmVlKG1tLCBwZ3RhYmxlKTsKJiM0MzsJcHRlX2ZyZWVfZGVmZXIobW0sIHBndGFibGUpOwogCW1tX2RlY19ucl9wdGVzKG1tKTsKIH0KIApkaWZmIC0tZ2l0IGEvbW0vbW11X2dhdGhlci5jIGIvbW0vbW11X2dhdGhlci5jCmluZGV4IDM5ODVkODU2ZGU3ZjkuLjJhNzJhOTY4Njc3M2EgMTAwNjQ0Ci0tLSBhL21tL21tdV9nYXRoZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tbXVfZ2F0aGVyLmMKQEAgLTIxOCw4ICYjNDM7MjE4LDYgQEAgYm9vbCBfX3RsYl9yZW1vdmVfcGFnZV9zaXplKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgcGFnZV8KIAogI2VuZGlmIC8qIE1NVV9HQVRIRVJfTk9fR0FUSEVSICovCiAKLSNpZmRlZiBDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFCi0KIHN0YXRpYyB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZV9mcmVlKHN0cnVjdCBtbXVfdGFibGVfYmF0Y2ggKmJhdGNoKQogewogCWludCBpOwpAQCAtMjMwLDEwICYjNDM7MjI4LDggQEAgc3RhdGljIHZvaWQgX190bGJfcmVtb3ZlX3RhYmxlX2ZyZWUoc3RydWN0IG1tdV90YWJsZV9iYXRjaCAqYmF0Y2gpCiAJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWJhdGNoKTsKIH0KIAotI2lmZGVmIENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFCi0KIC8qCi0gKiBTZW1pIFJDVSBmcmVlaW5nIG9mIHRoZSBwYWdlIGRpcmVjdG9yaWVzLgomIzQzOyAqIFJDVSBmcmVlaW5nIG9mIHRoZSBwYWdlIGRpcmVjdG9yaWVzLgogICoKICAqIFRoaXMgaXMgbmVlZGVkIGJ5IHNvbWUgYXJjaGl0ZWN0dXJlcyB0byBpbXBsZW1lbnQgc29mdHdhcmUgcGFnZXRhYmxlIHdhbGtlcnMuCiAgKgpAQCAtMjU5LDEzICYjNDM7MjU1LDEzIEBAIHN0YXRpYyB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZV9mcmVlKHN0cnVjdCBtbXVfdGFibGVfYmF0Y2ggKmJhdGNoKQogICogbWVhbnMuCiAgKgogICogV2hhdCB3ZSBkbyBpcyBiYXRjaCB0aGUgZnJlZWQgZGlyZWN0b3J5IHBhZ2VzICh0YWJsZXMpIGFuZCBSQ1UgZnJlZSB0aGVtLgotICogV2UgdXNlIHRoZSBzY2hlZCBSQ1UgdmFyaWFudCwgYXMgdGhhdCBndWFyYW50ZWVzIHRoYXQgSVJRL3ByZWVtcHQgZGlzYWJsaW5nCi0gKiBob2xkcyBvZmYgZ3JhY2UgcGVyaW9kcy4KJiM0MzsgKiBEaXNhYmxpbmcgSVJRcyBvciBwcmVlbXB0aW9uIGhvbGRzIG9mZiBSQ1UgZ3JhY2UgcGVyaW9kcywgc28gdGhpcyBwcm90ZWN0cwomIzQzOyAqIGJvdGggcmN1X3JlYWRfbG9jaygpIGFuZCBJUlEtZGlzYWJsaW5nIHdhbGtlcnMuCiAgKgogICogSG93ZXZlciwgaW4gb3JkZXIgdG8gYmF0Y2ggdGhlc2UgcGFnZXMgd2UgbmVlZCB0byBhbGxvY2F0ZSBzdG9yYWdlLCB0aGlzCiAgKiBhbGxvY2F0aW9uIGlzIGRlZXAgaW5zaWRlIHRoZSBNTSBjb2RlIGFuZCBjYW4gdGh1cyBlYXNpbHkgZmFpbCBvbiBtZW1vcnkKLSAqIHByZXNzdXJlLiBUbyBndWFyYW50ZWUgcHJvZ3Jlc3Mgd2UgZmFsbCBiYWNrIHRvIHNpbmdsZSB0YWJsZSBmcmVlaW5nLCBzZWUKLSAqIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0bGJfcmVtb3ZlX3RhYmxlX29uZSgpLgomIzQzOyAqIHByZXNzdXJlLiBUbyBndWFyYW50ZWUgcHJvZ3Jlc3Mgd2UgZmFsbCBiYWNrIHRvIHNpbmdsZSB0YWJsZSBmcmVlaW5nLCB3aGljaAomIzQzOyAqIGlzIGFsc28gUkNVLWRlZmVycmVkIC0gc2VlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0bGJfcmVtb3ZlX3RhYmxlX29uZSgpLgogICoKICAqLwogCkBAIC0zMTUsMTUgJiM0MzszMTEsNiBAQCB2b2lkIHRsYl9yZW1vdmVfdGFibGVfc3luY19yY3Uodm9pZCkKIAlzeW5jaHJvbml6ZV9yY3UoKTsKIH0KIAotI2Vsc2UgLyogIUNPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFICovCi0KLXN0YXRpYyB2b2lkIHRsYl9yZW1vdmVfdGFibGVfZnJlZShzdHJ1Y3QgbW11X3RhYmxlX2JhdGNoICpiYXRjaCkKLXsKLQlfX3RsYl9yZW1vdmVfdGFibGVfZnJlZShiYXRjaCk7Ci19Ci0KLSNlbmRpZiAvKiBDT05GSUdfTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSAqLwotCiAvKgogICogSWYgd2Ugd2FudCB0bGJfcmVtb3ZlX3RhYmxlKCkgdG8gaW1wbHkgVExCIGludmFsaWRhdGVzLgogICovCkBAIC00MDMsMTMgJiM0MzszOTAsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdGxiX3RhYmxlX2luaXQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYikKIAl0bGItJmd0O2JhdGNoID0gTlVMTDsKIH0KIAotI2Vsc2UgLyogIUNPTkZJR19NTVVfR0FUSEVSX1RBQkxFX0ZSRUUgKi8KLQotc3RhdGljIGlubGluZSB2b2lkIHRsYl90YWJsZV9mbHVzaChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfdGFibGVfaW5pdChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiKSB7IH0KLQotI2VuZGlmIC8qIENPTkZJR19NTVVfR0FUSEVSX1RBQkxFX0ZSRUUgKi8KLQogc3RhdGljIHZvaWQgdGxiX2ZsdXNoX21tdV9mcmVlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIpCiB7CiAJdGxiX3RhYmxlX2ZsdXNoKHRsYik7CmRpZmYgLS1naXQgYS9tbS9wZ3RhYmxlLWdlbmVyaWMuYyBiL21tL3BndGFibGUtZ2VuZXJpYy5jCmluZGV4IGI5MWIxYTk4MDI5YzcuLmZmOGZmMzcwNjQ4NTMgMTAwNjQ0Ci0tLSBhL21tL3BndGFibGUtZ2VuZXJpYy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3BndGFibGUtZ2VuZXJpYy5jCkBAIC0zODYsOSAmIzQzOzM4NiwyMSBAQCBwdGVfdCAqcHRlX29mZnNldF9tYXBfcndfbm9sb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLAogICogYmUgcmVhZC1vbmx5L3JlYWQtd3JpdGUgcHJvdGVjdGVkLgogICoKICAqIE5vdGUgdGhhdCBmcmVlX3BndGFibGVzKCksIHVzZWQgYWZ0ZXIgdW5tYXBwaW5nIGRldGFjaGVkIHZtYXMsIG9yIHdoZW4KLSAqIGV4aXRpbmcgdGhlIHdob2xlIG1tLCBkb2VzIG5vdCB0YWtlIHBhZ2UgdGFibGUgbG9jayBiZWZvcmUgZnJlZWluZyBhIHBhZ2UKLSAqIHRhYmxlLCBhbmQgbWF5IG5vdCB1c2UgUkNVIGF0IGFsbDogJiMzNDtvdXRzaWRlcnMmIzM0OyBsaWtlIGtodWdlcGFnZWQgc2hvdWxkIGF2b2lkCi0gKiBwdGVfb2Zmc2V0X21hcCgpIGFuZCBjbyBvbmNlIHRoZSB2bWEgaXMgZGV0YWNoZWQgZnJvbSBtbSBvciBtbV91c2VycyBpcyB6ZXJvLgomIzQzOyAqIGV4aXRpbmcgdGhlIHdob2xlIG1tLCBkb2VzIG5vdCB0YWtlIHRoZSBwYWdlIHRhYmxlIGxvY2sgYmVmb3JlIGZyZWVpbmcgYQomIzQzOyAqIHRhYmxlLgomIzQzOyAqCiYjNDM7ICogSG93ZXZlciwgdGhlIFBNRCBlbnRyeSBpcyBjbGVhcmVkIGZpcnN0LCBhbmQgdGhlIHRhYmxlIGZyZWVkIG9ubHkgYWZ0ZXIKJiM0MzsgKiBhbiBSQ1UgZ3JhY2UgcGVyaW9kLCBzbyBhIHdhbGtlciB0aGF0IG1hcHBlZCB0aGUgdGFibGUgdW5kZXIKJiM0MzsgKiByY3VfcmVhZF9sb2NrKCkgc3RheXMgc2FmZSwgYW5kIHRoZSBwbWRfc2FtZSgpIHJlY2hlY2sgaW4KJiM0MzsgKiBwdGVfb2Zmc2V0X21hcF9sb2NrKCkgZGV0ZWN0cyB0aGUgdGVhcmRvd24uCiYjNDM7ICoKJiM0MzsgKiBUaGVyZWZvcmUgaXQgaXMgc2FmZSBmb3IgJiMzNDtvdXRzaWRlcnMmIzM0OyBsaWtlIGtodWdlcGFnZWQgdG8gdXNlCiYjNDM7ICogcHRlX29mZnNldF9tYXAoKSBhbmQgY28uIGZvciBWTUFzIHRoYXQgbWlnaHQgYmUgdW5kZXJnb2luZyBwYWdlIHRhYmxlCiYjNDM7ICogdGVhcmRvd24uCiYjNDM7ICoKJiM0MzsgKiBOb3RlIHRoYXQgdGhlIFBHRCBpdHNlbGYgaXMgZnJlZWQgYXQgbW1kcm9wKCkgdGltZSwgbm90IHVuZGVyIFJDVSAtIHNvIHRoZQomIzQzOyAqIHdhbGtlciBtdXN0IGtlZXAgdGhlIG1tIGFsaXZlIHZpYSBtbWdyYWIoKS4gV2l0aCB0aGF0IGhlbGQsIHdhbGtpbmcgcmVtYWlucwomIzQzOyAqIHNhZmUgZXZlbiBvbmNlIG1tX3VzZXJzIGhhcyByZWFjaGVkIHplcm8uCiAgKi8KIHB0ZV90ICpwdGVfb2Zmc2V0X21hcF9sb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLAogCQkJICAgdW5zaWduZWQgbG9uZyBhZGRyLCBzcGlubG9ja190ICoqcHRscCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTkyCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogODg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIE1lbW9yeSBTYWZldHkgYW5kIENvbmN1cnJlbmN5IEltcGxpY2F0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdoZXRoZXIgaXQgaW50cm9kdWNlcyBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcywgc29tZXRoaW5nIEtNU0FOIHdvdWxkIGZsYWcsIG9yIGlmIHRoZSBjaGFuZ2VzIGFyZSBtYWlubHkgcmVsYXRlZCB0byBjb25jdXJyZW5jeSwgbWVtb3J5IG1hbmFnZW1lbnQsIHBhZ2UgdGFibGUgZnJlZWluZywgbG9ja2luZywgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIHdoaWNoIEtBU0FOIGFuZCBMb2NrZGVwIHdvdWxkIGJlIG1vcmUgcmVsZXZhbnQgZm9yLgoKRmlyc3QsIHRoZSBwYXRjaCBpdHNlbGYgaXMgYWJvdXQgbWFraW5nIHRoZSBgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRWAgb3B0aW9uIHN0YW5kYXJkIGFjcm9zcyBhcmNoaXRlY3R1cmVzLiBFc3NlbnRpYWxseSwgaXQmIzM5O3MgYWJvdXQgc3RhbmRhcmRpemluZyBob3cgcGFnZSB0YWJsZXMgYXJlIGZyZWVkIHVzaW5nIFJDVSBtZWNoYW5pc21zLCBpbnZvbHZpbmcgYHRsYl9yZW1vdmVfdGFibGVgIGFuZCBgdGxiX3JlbW92ZV9wdGRlc2NgLgoKTm93LCBsZXQmIzM5O3Mgd2FsayB0aHJvdWdoIHRoZSBtb2RpZmllZCBmaWxlczoKCiogICBUaGUgZG9jdW1lbnRhdGlvbiBpcyBnZXR0aW5nIHVwZGF0ZWQgdG8gcmVmbGVjdCBwYWdlIHRhYmxlIGxvY2tpbmcgcnVsZXMgYW5kIFJDVSB1c2FnZS4gR29vZC4KKiAgIFRoZSBgS2NvbmZpZ2AgZmlsZXMgYXJlIGJlaW5nIGNsZWFuZWQgdXAsIHJlbW92aW5nIGFuZCBjb25zb2xpZGF0aW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhpcyBzZWVtcyBzdHJhaWdodGZvcndhcmQg4oCTIHNpbXBsaWZ5aW5nIHRoZSBidWlsZCBwcm9jZXNzLgoqICAgVGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBgS2NvbmZpZ2AgZmlsZXMgYXJlIGdldHRpbmcgdGhlaXIgY29uZmlndXJhdGlvbnMgY2xlYW5lZCB1cCBhcyB3ZWxsLiBBbHNvLCBleHBlY3RlZC4KKiAgIFdlJiMzOTtyZSBzZWVpbmcgY2hhbmdlcyBpbiBgcGdhbGxvYy5oYCBoZWFkZXJzIG9uIHNldmVyYWwgYXJjaGl0ZWN0dXJlcyAoYGFyY2AsIGBtaWNyb2JsYXplYCwgYHh0ZW5zYWApIHdoZXJlIGRpcmVjdCBmcmVlaW5nIGlzIGJlaW5nIHJlcGxhY2VkIHdpdGggYHRsYl9yZW1vdmVfcHRkZXNjYC4gVGhhdCBzZWVtcyBsaWtlIGEgbW92ZSB0b3dhcmRzIHRoZSBSQ1UgYXBwcm9hY2guCiogICBUaGVyZSYjMzk7cyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBgX190bGJfcmVtb3ZlX3RhYmxlYCBhbG9uZyB3aXRoIGEgc3BpbmxvY2sgZm9yIGFsbG9jYXRpb24vZnJlZWluZyBvbiBgbTY4a2AuIFRoYXTigJlzIGdvb2QgdG8gc2VlLCBzcGlubG9ja3MgYXJlIG5lY2Vzc2FyeSBmb3IgY29uY3VycmVudCBhY2Nlc3MgcHJvdGVjdGlvbi4KKiAgIGBzaGAgYW5kIGBzcGFyY2AgYXJjaGl0ZWN0dXJlcyBhcmUgYWxzbyBnZXR0aW5nIGltcGxlbWVudGF0aW9ucyByZWxhdGVkIHRvIGBfX3RsYl9yZW1vdmVfdGFibGVgLiBDb25zaXN0ZW50IHdpdGggdGhlIFJDVSBjaGFuZ2UuCiogICBJbiBgaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaGAsIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzIGZvciB0aGUgUkNVLWJhc2VkIHRhYmxlIGZyZWVpbmcgYXJlIHJlbW92ZWQsIGluZGljYXRpbmcgdGhhdCBpdCYjMzk7cyBub3cgdGhlIHN0YW5kYXJkIGFwcHJvYWNoLgoqICAgVGhlIGBtbS9LY29uZmlnYCBmaWxlIGhhcyBhIGRlcGVuZGVuY3kgdXBkYXRlIHJlbGF0ZWQgdG8gYFBUX1JFQ0xBSU1gLgoqICAgQSBjb21tZW50IHVwZGF0ZSBpbiBgbW0vZ3VwLmNgLgoqICAgYG1tL2h1Z2VfbWVtb3J5LmNgIGhhcyBgcHRlX2ZyZWUobW0sIHBndGFibGUpYCBjaGFuZ2VkIHRvIGBwdGVfZnJlZV9kZWZlcihtbSwgcGd0YWJsZSlgIGluIGB6YXBfZGVwb3NpdGVkX3RhYmxlYC4gVGhpcyBsb29rcyBpbXBvcnRhbnQsIGJlY2F1c2UgZGVmZXJyaW5nIHRoZSBmcmVlIHZpYSBSQ1UgaXMgdGhlIGNvcmUgb2YgdGhlIHBhdGNoLgoqICAgYG1tL21tdV9nYXRoZXIuY2AgZ2V0cyByaWQgb2YgdGhlIG9sZCBjb25kaXRpb25hbCBjb2RlIHJlbGF0ZWQgdG8gUkNVIHRhYmxlIGZyZWVpbmcuCiogICBUaGUgYG1tL3BndGFibGUtZ2VuZXJpYy5jYCBjb21tZW50cyBhcmUgdXBkYXRlZC4KCk9rYXksIHRoZSBjcnVjaWFsIHBhcnQgaXMgdGhlIGB6YXBfZGVwb3NpdGVkX3RhYmxlYCBhbmQgYHB0ZV9mcmVlX2RlZmVyYCBjaGFuZ2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBgcHRlX2ZyZWVfZGVmZXJgIHdvcmtzLiBJJiMzOTttIGdvaW5nIHRvIHJ1biBgZ3JlcHBlcmAgYWNyb3NzIHRoZSBjb2RlYmFzZSB0byBnZXQgYSBmdWxsIHBpY3R1cmUgb2YgYHB0ZV9mcmVlX2RlZmVyYCB1c2FnZS4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgY2hhbmdlcyBpbnRlcmFjdCB3aXRoIHRoZSBleGlzdGluZyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcGFnZSB0YWJsZSBzdHJ1Y3R1cmVzLCBhbmQgZGV0ZXJtaW5lIHdoYXQgdGhlIGRlZmVycmVkIGZyZWVpbmcgYWN0dWFsbHkgZW50YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHRlX2ZyZWVfZGVmZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BnYWxsb2MuaD00Mz1zdGF0aWMgaW5saW5lIHZvaWQgcHRlX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwdGVwYWdlKVxuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgtNDctXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGdhbGxvYy5oOjQ4Oi8qIGFyY2ggdXNlIHB0ZV9mcmVlX2RlZmVyKCkgaW1wbGVtZW50YXRpb24gaW4gYXJjaC9wb3dlcnBjL21tL3BndGFibGUtZnJhZy5jICovXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGdhbGxvYy5oOjQ5OiNkZWZpbmUgcHRlX2ZyZWVfZGVmZXIgcHRlX2ZyZWVfZGVmZXJcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmg6NTA6dm9pZCBwdGVfZnJlZV9kZWZlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHBndGFibGUpO1xuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BnYWxsb2MuaC01MS1cbi0tXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZS1mcmFnLmM9MTE3PXZvaWQgcHRlX2ZyYWdtZW50X2ZyZWUodW5zaWduZWQgbG9uZyAqdGFibGUsIGludCBrZXJuZWwpXG4tLVxuYXJjaC9wb3dlcnBjL21tL3BndGFibGUtZnJhZy5jLTEzMy0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZS1mcmFnLmM6MTM0OnZvaWQgcHRlX2ZyZWVfZGVmZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwZ3RhYmxlKVxuYXJjaC9wb3dlcnBjL21tL3BndGFibGUtZnJhZy5jLTEzNS17XG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BnYWxsb2MuaD0xNTE9c3RhdGljIGlubGluZSB2b2lkIHBtZF9wb3B1bGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGdhbGxvYy5oLTE2Ny1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmg6MTY4Oi8qIGFyY2ggdXNlIHB0ZV9mcmVlX2RlZmVyKCkgaW1wbGVtZW50YXRpb24gaW4gYXJjaC9zMzkwL21tL3BnYWxsb2MuYyAqL1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BnYWxsb2MuaDoxNjk6I2RlZmluZSBwdGVfZnJlZV9kZWZlciBwdGVfZnJlZV9kZWZlclxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BnYWxsb2MuaDoxNzA6dm9pZCBwdGVfZnJlZV9kZWZlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHBndGFibGUpO1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BnYWxsb2MuaC0xNzEtXG4tLVxuYXJjaC9zMzkwL21tL3BnYWxsb2MuYz0xNDk9c3RhdGljIHZvaWQgcHRlX2ZyZWVfbm93KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbi0tXG5hcmNoL3MzOTAvbW0vcGdhbGxvYy5jLTE1NS1cbmFyY2gvczM5MC9tbS9wZ2FsbG9jLmM6MTU2OnZvaWQgcHRlX2ZyZWVfZGVmZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwZ3RhYmxlKVxuYXJjaC9zMzkwL21tL3BnYWxsb2MuYy0xNTcte1xuLS1cbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY182NC5oPTY2PXZvaWQgcHRlX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwdGVwYWdlKTtcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY182NC5oLTY3LVxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzY0Lmg6Njg6LyogYXJjaCB1c2UgcHRlX2ZyZWVfZGVmZXIoKSBpbXBsZW1lbnRhdGlvbiBpbiBhcmNoL3NwYXJjL21tL2luaXRfNjQuYyAqL1xuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzY0Lmg6Njk6I2RlZmluZSBwdGVfZnJlZV9kZWZlciBwdGVfZnJlZV9kZWZlclxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzY0Lmg6NzA6dm9pZCBwdGVfZnJlZV9kZWZlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHBndGFibGUpO1xuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzY0LmgtNzEtXG4tLVxuYXJjaC9zcGFyYy9tbS9pbml0XzY0LmM9Mjg2Nj1zdGF0aWMgdm9pZCBwdGVfZnJlZV9ub3coc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuLS1cbmFyY2gvc3BhcmMvbW0vaW5pdF82NC5jLTI4NzMtXG5hcmNoL3NwYXJjL21tL2luaXRfNjQuYzoyODc0OnZvaWQgcHRlX2ZyZWVfZGVmZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwZ3RhYmxlKVxuYXJjaC9zcGFyYy9tbS9pbml0XzY0LmMtMjg3NS17XG4tLVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg9MTE1PXN0YXRpYyBpbmxpbmUgdm9pZCBwdGVfdW5tYXAocHRlX3QgKnB0ZSlcbi0tXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0xMjAtXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaDoxMjE6dm9pZCBwdGVfZnJlZV9kZWZlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHBndGFibGUpO1xuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMTIyLVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MjQ3ND1zdGF0aWMgaW5saW5lIHZvaWQgemFwX2RlcG9zaXRlZF90YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTI0NzgtXHRwZ3RhYmxlID0gcGd0YWJsZV90cmFuc19odWdlX3dpdGhkcmF3KG1tLCBwbWQpO1xubW0vaHVnZV9tZW1vcnkuYzoyNDc5Olx0cHRlX2ZyZWVfZGVmZXIobW0sIHBndGFibGUpO1xubW0vaHVnZV9tZW1vcnkuYy0yNDgwLVx0bW1fZGVjX25yX3B0ZXMobW0pO1xuLS1cbm1tL2todWdlcGFnZWQuYz0xODYyPXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yMDY3LVx0cGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2UobW0sIGhhZGRyLCBwZ3RfcG1kKTtcbm1tL2todWdlcGFnZWQuYzoyMDY4Olx0cHRlX2ZyZWVfZGVmZXIobW0sIHBtZF9wZ3RhYmxlKHBndF9wbWQpKTtcbm1tL2todWdlcGFnZWQuYy0yMDY5LVxuLS1cbm1tL2todWdlcGFnZWQuYz0yMTUxPXN0YXRpYyB2b2lkIHJldHJhY3RfcGFnZV90YWJsZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgcGdvZmYpXG4tLVxubW0va2h1Z2VwYWdlZC5jLTIyMjgtXHRcdFx0cGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2UobW0sIGFkZHIsIHBndF9wbWQpO1xubW0va2h1Z2VwYWdlZC5jOjIyMjk6XHRcdFx0cHRlX2ZyZWVfZGVmZXIobW0sIHBtZF9wZ3RhYmxlKHBndF9wbWQpKTtcbm1tL2todWdlcGFnZWQuYy0yMjMwLVx0XHR9XG4tLVxubW0vcGd0YWJsZS1nZW5lcmljLmM9MjIxPXBtZF90IHBtZHBfY29sbGFwc2VfZmx1c2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbi0tXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYy0yMzktXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYzoyNDA6LyogYXJjaCBkZWZpbmUgcHRlX2ZyZWVfZGVmZXIgaW4gYXNtL3BnYWxsb2MuaCBmb3IgaXRzIG93biBpbXBsZW1lbnRhdGlvbiAqL1xubW0vcGd0YWJsZS1nZW5lcmljLmM6MjQxOiNpZm5kZWYgcHRlX2ZyZWVfZGVmZXJcbm1tL3BndGFibGUtZ2VuZXJpYy5jLTI0Mi1zdGF0aWMgdm9pZCBwdGVfZnJlZV9ub3coc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuLS1cbm1tL3BndGFibGUtZ2VuZXJpYy5jLTI0OS1cbm1tL3BndGFibGUtZ2VuZXJpYy5jOjI1MDp2b2lkIHB0ZV9mcmVlX2RlZmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcGd0YWJsZSlcbm1tL3BndGFibGUtZ2VuZXJpYy5jLTI1MS17XG4tLVxubW0vcGd0YWJsZS1nZW5lcmljLmMtMjU2LX1cbm1tL3BndGFibGUtZ2VuZXJpYy5jOjI1NzojZW5kaWYgLyogcHRlX2ZyZWVfZGVmZXIgKi9cbm1tL3BndGFibGUtZ2VuZXJpYy5jLTI1OC0jZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MzIyCgkJCQkJCQlvdXRwdXQ6IDI2NgoJCQkJCQkJdGhvdWdodHM6IDUwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpcyBhbmQgS01TQU4gQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgaXQmIzM5O3MgYSBmYWlybHkgc2lnbmlmaWNhbnQgdW5pZmljYXRpb24gZWZmb3J0IGluIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgTU1VIGdhdGhlciB0YWJsZSBmcmVlaW5nLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBzdGFuZGFyZGl6aW5nIG9uIFJDVSB0YWJsZSBmcmVlaW5nIGFjcm9zcyBhbGwgYXJjaGl0ZWN0dXJlcywgd2hpY2gsIGlmIGRvbmUgcmlnaHQsIHNob3VsZCBzaW1wbGlmeSB0aGluZ3MgYW5kIGltcHJvdmUgb3ZlcmFsbCByb2J1c3RuZXNzLiBTcGVjaWZpY2FsbHksIEkgc2VlIGl0JiMzOTtzIGNvbnZlcnRpbmcgYXJjaGl0ZWN0dXJlcyBsaWtlIGFyYywgbTY4aywgbWljcm9ibGF6ZSwgc2gsIHNwYXJjLCBhbmQgeHRlbnNhIHRvIHVzZSBgdGxiX3JlbW92ZV9wdGRlc2NgIG9yIGB0bGJfcmVtb3ZlX3RhYmxlYCB3aXRoIGBfX3RsYl9yZW1vdmVfdGFibGVgLiBUaGUgbTY4ayBhbmQgc3BhcmMgY29uY3VycmVuY3kgZml4ZXMgYXJlIGRlZmluaXRlbHkgYSBnb29kIHRoaW5nLiBJJiMzOTttIGFsc28gbm90aW5nIHRoZSBjaGFuZ2UgdG8gYHB0ZV9mcmVlX2RlZmVyYCBpbiBgemFwX2RlcG9zaXRlZF90YWJsZWAsIHdoaWNoIGlzIHN0YW5kYXJkIHByYWN0aWNlIGluIHRoZXNlIHR5cGVzIG9mIGNoYW5nZXMuIEFuZCByZW1vdmluZyB0aG9zZSBLY29uZmlnIG9wdGlvbnMgc3VnZ2VzdHMgdGhlIGRlc2lnbiBoYXMgbWF0dXJlZCB0byB0aGUgcG9pbnQgaXQmIzM5O3Mgc2FmZSB0byBkZWZhdWx0IHRvIHRoZSBSQ1UgYXBwcm9hY2guCgpOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogRG9lcyB0aGlzIGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcz8gSSYjMzk7bSBpbW1lZGlhdGVseSBnb2luZyB0aHJvdWdoIG15IG1lbnRhbCBjaGVja2xpc3QuIEZpcnN0LCBhcmUgdGhlcmUgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIGJlaW5nIHBhc3NlZCB0byB1c2Vyc3BhY2U/IE5vLCBub3RoaW5nIGp1bXBpbmcgb3V0IGF0IG1lIGluIHRlcm1zIG9mIGlvY3RsL3N5c2NhbGwvbmV0bGluay9CUEYvc29ja2V0L2NvcHlfdG9fdXNlciBjaGFuZ2VzLiBHb29kLiBTZWNvbmQsIGFyZSB0aGVyZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBwYWRkaW5nIGlzc3Vlcywgb3Igc3RydWN0IGZpZWxkcyB0aGF0IGNvdWxkIGJlIHByb2JsZW1hdGljPyBOb3BlLCBub3RoaW5nIGxpa2UgdGhhdCBoZXJlLiBUaGlyZCwgYXJlIHdlIGFsbG9jYXRpbmcgb3IgaW5pdGlhbGl6aW5nIGFueSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkPyBDaGVja2luZyBgbTY4ay9tbS9tb3Rvcm9sYS5jYCwgYWgsIEkgc2VlIGBwYWdldGFibGVfYWxsb2MoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8sIDApYCBpcyB1c2VkLCB6ZXJvaW5nIHBhZ2UgdGFibGUgYWxsb2NhdGlvbnMsIHdoaWNoIGlzIGFzIGl0IHNob3VsZCBiZS4gQW5kIGxhc3RseSwgd2hhdCBhYm91dCBhbnkgYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgZGF0YSBidWZmZXJzPyBOb3QgaW4gdGhpcyBwYXRjaC4KClNvLCB0aGlzIHBhdGNoIGlzIHByaW1hcmlseSBjb25jZXJuZWQgd2l0aCBwYWdlIHRhYmxlIGxpZmV0aW1lLCBUTEIgZ2F0aGVyaW5nLCBSQ1UgcmVjbGFtYXRpb24gb2YgcGFnZSB0YWJsZSBwYWdlcywgbG9ja2luZywgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IHN5bmNocm9uaXphdGlvbi4gTXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvIHRoZSBwb3RlbnRpYWwgcGl0ZmFsbHMgaW4gdGhpcyBhcmVhOiBjb25jdXJyZW5jeSBpc3N1ZXMsIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMsIG1lbW9yeSBsZWFrcywgaW52YWxpZCBmcmVlcywgb3IgbG9ja2luZyBwcm9ibGVtcy4gRm9ydHVuYXRlbHksIGFsbCB0aGUgdG9vbHMgYXJlIHRoZXJlIHRvIGNhdGNoIHRob3NlIHR5cGVzIG9mIGJ1Z3M6IEtBU0FOLCBMT0NLREVQLCBhbmQgdGhlIHZhcmlvdXMgcGFnZSB0YWJsZSBjaGVja2VycyBhbmQgZGVidWdnaW5nIHRvb2xzLiBHaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2VzIGFuZCB0aGUgc2FmZWd1YXJkcyBpbiBwbGFjZSwgSSYjMzk7bSBjb21mb3J0YWJsZSBzYXlpbmcgdGhlcmUmIzM5O3MgYWJzb2x1dGVseSBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0ZWx5IGBmYWxzZWAuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZzoKLSBgTmVlZHNLTVNBTmA6IGZhbHNlLiBZZXAuCi0gYEtNU0FOUmVhc29uaW5nYDogZGV0YWlsZWQgcmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkuIENoZWNrLgoKVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBzdGFuZGFyZGl6ZXMgcGFnZSB0YWJsZSBmcmVlaW5nIGFjcm9zcyBhcmNoaXRlY3R1cmVzIHRvIHVzZSBSQ1UtZGVmZXJyZWQgZnJlZWluZyAodW5pZnlpbmcgTU1VIGdhdGhlciBhbmQgcmVtb3ZpbmcgQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgLyBDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFIGNvbmZpZ3MpLiBJdCBhZGFwdHMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHBhZ2UgdGFibGUgZnJlZWluZyByb3V0aW5lcyAoZS5nLiBtNjhrLCBhcmMsIG1pY3JvYmxhemUsIHNoLCBzcGFyYywgeHRlbnNhKSB0byB1c2UgdGxiX3JlbW92ZV9wdGRlc2MgLyB0bGJfcmVtb3ZlX3RhYmxlLCBhZGRzIHNwaW5sb2NrcyBmb3IgcHRhYmxlIG1hbmFnZW1lbnQgb24gbTY4ay9zcGFyYywgYW5kIHVwZGF0ZXMgZGVmZXJyZWQgZnJlZWluZyBpbiBUSFAgKHB0ZV9mcmVlX2RlZmVyKS5cblxuVGhlc2UgY2hhbmdlcyBkZWFsIHN0cmljdGx5IHdpdGggTU1VIGdhdGhlciBsaWZlY3ljbGUsIFJDVSBncmFjZSBwZXJpb2RzIGZvciBwYWdlIHRhYmxlIG1lbW9yeSwgYW5kIHN5bmNocm9uaXphdGlvbiBvZiBwYWdlIHRhYmxlIGZyZWVpbmcgdnMgbG9ja2xlc3MvUkNVIHBhZ2UgdGFibGUgd2Fsa2Vycy4gUG90ZW50aWFsIGJ1Z3MgaW4gdGhlc2UgY2hhbmdlcyB3b3VsZCBtYW5pZmVzdCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIGNvbmN1cnJlbmN5IHJhY2VzLCBvciBkZWFkbG9ja3PigJR3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgcmVhZHMvY29waWVzIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgc3RhbmRhcmRpemVzIHBhZ2UgdGFibGUgZnJlZWluZyBhY3Jvc3MgYXJjaGl0ZWN0dXJlcyB0byB1c2UgUkNVLWRlZmVycmVkIGZyZWVpbmcgKHVuaWZ5aW5nIE1NVSBnYXRoZXIgYW5kIHJlbW92aW5nIENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFIC8gQ09ORklHX01NVV9HQVRIRVJfVEFCTEVfRlJFRSBjb25maWdzKS4gSXQgYWRhcHRzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBwYWdlIHRhYmxlIGZyZWVpbmcgcm91dGluZXMgKGUuZy4gbTY4aywgYXJjLCBtaWNyb2JsYXplLCBzaCwgc3BhcmMsIHh0ZW5zYSkgdG8gdXNlIHRsYl9yZW1vdmVfcHRkZXNjIC8gdGxiX3JlbW92ZV90YWJsZSwgYWRkcyBzcGlubG9ja3MgZm9yIHB0YWJsZSBtYW5hZ2VtZW50IG9uIG02OGsvc3BhcmMsIGFuZCB1cGRhdGVzIGRlZmVycmVkIGZyZWVpbmcgaW4gVEhQIChwdGVfZnJlZV9kZWZlcikuXG5cblRoZXNlIGNoYW5nZXMgZGVhbCBzdHJpY3RseSB3aXRoIE1NVSBnYXRoZXIgbGlmZWN5Y2xlLCBSQ1UgZ3JhY2UgcGVyaW9kcyBmb3IgcGFnZSB0YWJsZSBtZW1vcnksIGFuZCBzeW5jaHJvbml6YXRpb24gb2YgcGFnZSB0YWJsZSBmcmVlaW5nIHZzIGxvY2tsZXNzL1JDVSBwYWdlIHRhYmxlIHdhbGtlcnMuIFBvdGVudGlhbCBidWdzIGluIHRoZXNlIGNoYW5nZXMgd291bGQgbWFuaWZlc3QgYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBjb25jdXJyZW5jeSByYWNlcywgb3IgZGVhZGxvY2tz4oCUd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIHJlYWRzL2NvcGllcyB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo0Mzo1My41MTQxOTI0MTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDI1NTU1MDkzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNTVVcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGxiX3JlbW92ZV90YWJsZVwiLFxuICAgIFwicHRlX2ZyZWVfZGVmZXJcIixcbiAgICBcInphcF9odWdlX3BtZFwiLFxuICAgIFwidGxiX3JlbW92ZV90YWJsZV9zeW5jX3JjdVwiLFxuICAgIFwidGxiX3JlbW92ZV90YWJsZV9zeW5jX29uZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHN0YW5kYXJkaXplcyBwYWdlIHRhYmxlIGZyZWVpbmcgYWNyb3NzIGFyY2hpdGVjdHVyZXMgdG8gdXNlIFJDVS1kZWZlcnJlZCBmcmVlaW5nICh1bmlmeWluZyBNTVUgZ2F0aGVyIGFuZCByZW1vdmluZyBDT05GSUdfTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSAvIENPTkZJR19NTVVfR0FUSEVSX1RBQkxFX0ZSRUUgY29uZmlncykuIEl0IGFkYXB0cyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgcGFnZSB0YWJsZSBmcmVlaW5nIHJvdXRpbmVzIChlLmcuIG02OGssIGFyYywgbWljcm9ibGF6ZSwgc2gsIHNwYXJjLCB4dGVuc2EpIHRvIHVzZSB0bGJfcmVtb3ZlX3B0ZGVzYyAvIHRsYl9yZW1vdmVfdGFibGUsIGFkZHMgc3BpbmxvY2tzIGZvciBwdGFibGUgbWFuYWdlbWVudCBvbiBtNjhrL3NwYXJjLCBhbmQgdXBkYXRlcyBkZWZlcnJlZCBmcmVlaW5nIGluIFRIUCAocHRlX2ZyZWVfZGVmZXIpLlxcblxcblRoZXNlIGNoYW5nZXMgZGVhbCBzdHJpY3RseSB3aXRoIE1NVSBnYXRoZXIgbGlmZWN5Y2xlLCBSQ1UgZ3JhY2UgcGVyaW9kcyBmb3IgcGFnZSB0YWJsZSBtZW1vcnksIGFuZCBzeW5jaHJvbml6YXRpb24gb2YgcGFnZSB0YWJsZSBmcmVlaW5nIHZzIGxvY2tsZXNzL1JDVSBwYWdlIHRhYmxlIHdhbGtlcnMuIFBvdGVudGlhbCBidWdzIGluIHRoZXNlIGNoYW5nZXMgd291bGQgbWFuaWZlc3QgYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBjb25jdXJyZW5jeSByYWNlcywgb3IgZGVhZGxvY2tz4oCUd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIHJlYWRzL2NvcGllcyB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVuaWZpZXMgYW5kIGVuZm9yY2VzIFJDVS1kZWZlcnJlZCBmcmVlaW5nIGZvciBwYWdlIHRhYmxlIHBhZ2VzIGFjcm9zcyBhbGwgYXJjaGl0ZWN0dXJlcyBieSByZW1vdmluZyBjb25kaXRpb25hbCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgc3RhbmRhcmRpemluZyBvbiB0bGJfcmVtb3ZlX3RhYmxlKCkuIEl0IGFsc28gbW9kaWZpZXMgVEhQIGRlcG9zaXRlZCB0YWJsZSBoYW5kbGluZyBpbiBtbS9odWdlX21lbW9yeS5jIHRvIHVzZSBwdGVfZnJlZV9kZWZlcigpIHVuZGVyIFJDVSBhbmQgdXBkYXRlcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgcGFnZSB0YWJsZSByZW1vdmFsIHJvdXRpbmVzLiBUaGVzZSBjb3JlIE1NIGxvZ2ljIGNoYW5nZXMgYWZmZWN0IFRMQiBnYXRoZXJpbmcsIHBhZ2UgdGFibGUgdGVhcmluZyBkb3duLCBhbmQgbWVtb3J5IHJlY2xhaW0gcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjQzOjUzLjUxNDE5NzE0NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI3NTc4Mzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMjhlOGUyMmZiMmY5MjJhNWQ5OGFjMjcyYzA0YTM5ZmI1ZDBhN2VlMVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCAxIDIzOjQzOjUyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0XFxuaW5kZXggYTcyOTZmMjUxNzk5Yy4uMWU2NWIxMzlmMzU1OSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdFxcbkBAIC01MzcsNiArNTM3LDEyIEBAIFdlIGVzdGFibGlzaCBiYXNpYyBsb2NraW5nIHJ1bGVzIHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCBwYWdlIHRhYmxlczpcXG4gKiBXaGVuIGNoYW5naW5nIGEgcGFnZSB0YWJsZSBlbnRyeSB0aGUgcGFnZSB0YWJsZSBsb2NrIGZvciB0aGF0IHBhZ2UgdGFibGVcXG4gICAqKm11c3QqKiBiZSBoZWxkLCBleGNlcHQgaWYgeW91IGNhbiBzYWZlbHkgYXNzdW1lIG5vYm9keSBjYW4gYWNjZXNzIHRoZSBwYWdlXFxuICAgdGFibGVzIGNvbmN1cnJlbnRseSAoc3VjaCBhcyBvbiBpbnZvY2F0aW9uIG9mIDpjOmZ1bmM6YCFmcmVlX3BndGFibGVzYCkuXFxuKyogUGFnZSB0YWJsZXMgbWF5IGJlICp3YWxrZWQqIHVuZGVyIFJDVSBhbG9uZSwgYXMgcGFnZSB0YWJsZXMgYXJlIGZyZWVkIG9ubHlcXG4rICBhZnRlciBhbiBSQ1UgZ3JhY2UgcGVyaW9kIGhhcyBlbGFwc2VkLiBIb3dldmVyLCBhbnkgZW50cnkgZm91bmQgbXVzdCBiZVxcbisgIHJldmFsaWRhdGVkIGFmdGVyIHRoZSBwYWdlIHRhYmxlIGxvY2sgaXMgdGFrZW4gKHN1Y2ggYXMgdGhlXFxuKyAgOmM6ZnVuYzpgIXBtZF9zYW1lYCByZWNoZWNrIHBlcmZvcm1lZCBieSA6YzpmdW5jOmAhcHRlX29mZnNldF9tYXBfbG9ja2ApXFxuKyAgYmVmb3JlIGl0IGlzIGFjdGVkIHVwb24uIENoYW5naW5nIGFuIGVudHJ5IGFsd2F5cyByZXF1aXJlcyB0aGUgcGFnZSB0YWJsZVxcbisgIGxvY2suXFxuICogUmVhZHMgZnJvbSBhbmQgd3JpdGVzIHRvIHBhZ2UgdGFibGUgZW50cmllcyBtdXN0IGJlICphcHByb3ByaWF0ZWx5KlxcbiAgIGF0b21pYy4gU2VlIHRoZSBzZWN0aW9uIG9uIGF0b21pY2l0eSBiZWxvdyBmb3IgZGV0YWlscy5cXG4gKiBQb3B1bGF0aW5nIHByZXZpb3VzbHkgZW1wdHkgZW50cmllcyByZXF1aXJlcyB0aGF0IHRoZSBtbWFwIG9yIFZNQSBsb2NrcyBhcmVcXG5kaWZmIC0tZ2l0IGEvYXJjaC9LY29uZmlnIGIvYXJjaC9LY29uZmlnXFxuaW5kZXggNDVjNjU3NzcyMzYyMy4uNmY3NTE2OTE2Nzk3ZSAxMDA2NDRcXG4tLS0gYS9hcmNoL0tjb25maWdcXG4rKysgYi9hcmNoL0tjb25maWdcXG5AQCAtNTI2LDEzICs1MjYsNiBAQCBjb25maWcgSEFWRV9BUkNIX0pVTVBfTEFCRUxcXG4gY29uZmlnIEhBVkVfQVJDSF9KVU1QX0xBQkVMX1JFTEFUSVZFXFxuIFxcdGJvb2xcXG4gXFxuLWNvbmZpZyBNTVVfR0FUSEVSX1RBQkxFX0ZSRUVcXG4tXFx0Ym9vbFxcbi1cXG4tY29uZmlnIE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcXG4tXFx0Ym9vbFxcbi1cXHRzZWxlY3QgTU1VX0dBVEhFUl9UQUJMRV9GUkVFXFxuLVxcbiBjb25maWcgTU1VX0dBVEhFUl9QQUdFX1NJWkVcXG4gXFx0Ym9vbFxcbiBcXG5AQCAtNTQ4LDcgKzU0MSw2IEBAIGNvbmZpZyBNTVVfR0FUSEVSX01FUkdFX1ZNQVNcXG4gXFxuIGNvbmZpZyBNTVVfR0FUSEVSX05PX0dBVEhFUlxcbiBcXHRib29sXFxuLVxcdGRlcGVuZHMgb24gTU1VX0dBVEhFUl9UQUJMRV9GUkVFXFxuIFxcbiBjb25maWcgQVJDSF9XQU5UX0lSUVNfT0ZGX0FDVElWQVRFX01NXFxuIFxcdGJvb2xcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9LY29uZmlnIGIvYXJjaC9hbHBoYS9LY29uZmlnXFxuaW5kZXggZTUzZWYyZDg4NDYzNi4uOTA2M2M3YmRhNGU0MSAxMDA2NDRcXG4tLS0gYS9hcmNoL2FscGhhL0tjb25maWdcXG4rKysgYi9hcmNoL2FscGhhL0tjb25maWdcXG5AQCAtNDIsNyArNDIsNiBAQCBjb25maWcgQUxQSEFcXG4gXFx0c2VsZWN0IEFSQ0hfU1RBQ0tXQUxLXFxuIFxcdHNlbGVjdCBDUFVfTk9fRUZGSUNJRU5UX0ZGUyBpZiAhQUxQSEFfRVY2N1xcbiBcXHRzZWxlY3QgTU1VX0dBVEhFUl9OT19SQU5HRVxcbi1cXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxcbiBcXHRzZWxlY3QgU1BBUlNFTUVNX0VYVFJFTUUgaWYgU1BBUlNFTUVNXFxuIFxcdHNlbGVjdCBaT05FX0RNQVxcbiBcXHRzZWxlY3QgVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVFxcbmRpZmYgLS1naXQgYS9hcmNoL2FyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL2FyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcXG5pbmRleCBkZmFlMDcwZmU4ZDU1Li45YjZjMzdmOTJlOTdmIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxcbisrKyBiL2FyY2gvYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxcbkBAIC03Miw3ICs3Miw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwNGRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHA0ZF90ICpwNGRwLCBwdWRfdCAqcHVkcClcXG4gXFx0c2V0X3A0ZChwNGRwLCBfX3A0ZCgodW5zaWduZWQgbG9uZylwdWRwKSk7XFxuIH1cXG4gXFxuLSNkZWZpbmUgX19wdWRfZnJlZV90bGIodGxiLCBwbWQsIGFkZHIpICBwdWRfZnJlZSgodGxiKS1cXHUwMDNlbW0sIHBtZClcXG4rI2RlZmluZSBfX3B1ZF9mcmVlX3RsYih0bGIsIHBtZCwgYWRkcikgIHRsYl9yZW1vdmVfcHRkZXNjKCh0bGIpLCB2aXJ0X3RvX3B0ZGVzYyhwbWQpKVxcbiBcXG4gI2VuZGlmXFxuIFxcbkBAIC04MywxMCArODMsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIHB1ZF9wb3B1bGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcHVkX3QgKnB1ZHAsIHBtZF90ICpwbWRwKVxcbiBcXHRzZXRfcHVkKHB1ZHAsIF9fcHVkKCh1bnNpZ25lZCBsb25nKXBtZHApKTtcXG4gfVxcbiBcXG4tI2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIsIHBtZCwgYWRkcikgIHBtZF9mcmVlKCh0bGIpLVxcdTAwM2VtbSwgcG1kKVxcbisjZGVmaW5lIF9fcG1kX2ZyZWVfdGxiKHRsYiwgcG1kLCBhZGRyKSAgdGxiX3JlbW92ZV9wdGRlc2MoKHRsYiksIHZpcnRfdG9fcHRkZXNjKHBtZCkpXFxuIFxcbiAjZW5kaWZcXG4gXFxuLSNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLCBwdGUsIGFkZHIpICBwdGVfZnJlZSgodGxiKS1cXHUwMDNlbW0sIHB0ZSlcXG4rI2RlZmluZSBfX3B0ZV9mcmVlX3RsYih0bGIsIHB0ZSwgYWRkcikgIHRsYl9yZW1vdmVfcHRkZXNjKCh0bGIpLCBwYWdlX3B0ZGVzYyhwdGUpKVxcbiBcXG4gI2VuZGlmIC8qIF9BU01fQVJDX1BHQUxMT0NfSCAqL1xcbmRpZmYgLS1naXQgYS9hcmNoL2FybS9LY29uZmlnIGIvYXJjaC9hcm0vS2NvbmZpZ1xcbmluZGV4IDQwOGFhNThhMmE1YmIuLjBjYzI4OWE3MTg0YWIgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm0vS2NvbmZpZ1xcbisrKyBiL2FyY2gvYXJtL0tjb25maWdcXG5AQCAtMTM0LDcgKzEzNCw2IEBAIGNvbmZpZyBBUk1cXG4gXFx0c2VsZWN0IEhBVkVfUEVSRl9SRUdTXFxuIFxcdHNlbGVjdCBIQVZFX1BFUkZfVVNFUl9TVEFDS19EVU1QXFxuIFxcdHNlbGVjdCBIQVZFX1BPU0lYX0NQVV9USU1FUlNfVEFTS19XT1JLXFxuLVxcdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFIGlmIFNNUCBcXHUwMDI2XFx1MDAyNiBBUk1fTFBBRVxcbiBcXHRzZWxlY3QgSEFWRV9SRUdTX0FORF9TVEFDS19BQ0NFU1NfQVBJXFxuIFxcdHNlbGVjdCBIQVZFX1JTRVFcXG4gXFx0c2VsZWN0IEhBVkVfUlVTVCBpZiBDUFVfTElUVExFX0VORElBTiBcXHUwMDI2XFx1MDAyNiBDUFVfMzJ2NyBcXHUwMDI2XFx1MDAyNiAhS0FTQU5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9LY29uZmlnIGIvYXJjaC9hcm02NC9LY29uZmlnXFxuaW5kZXggMmJiZWRlZDMzZGEwZC4uYjZjMmRkOGIyNjEyNCAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L0tjb25maWdcXG4rKysgYi9hcmNoL2FybTY0L0tjb25maWdcXG5AQCAtMjIxLDcgKzIyMSw2IEBAIGNvbmZpZyBBUk02NFxcbiBcXHRzZWxlY3QgSEFWRV9SRUxJQUJMRV9TVEFDS1RSQUNFXFxuIFxcdHNlbGVjdCBIQVZFX1BPU0lYX0NQVV9USU1FUlNfVEFTS19XT1JLXFxuIFxcdHNlbGVjdCBIQVZFX0ZVTkNUSU9OX0FSR19BQ0NFU1NfQVBJXFxuLVxcdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXFxuIFxcdHNlbGVjdCBIQVZFX1JTRVFcXG4gXFx0c2VsZWN0IEhBVkVfUlVTVCBpZiBSVVNUQ19TVVBQT1JUU19BUk02NFxcbiBcXHRzZWxlY3QgSEFWRV9TVEFDS1BST1RFQ1RPUlxcbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9LY29uZmlnIGIvYXJjaC9sb29uZ2FyY2gvS2NvbmZpZ1xcbmluZGV4IDljNWRlZjcwNjIyMjIuLmQxYjIzZGE0MDczNzUgMTAwNjQ0XFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gvS2NvbmZpZ1xcbisrKyBiL2FyY2gvbG9vbmdhcmNoL0tjb25maWdcXG5AQCAtMTg4LDcgKzE4OCw2IEBAIGNvbmZpZyBMT09OR0FSQ0hcXG4gXFx0c2VsZWN0IElSUV9MT09OR0FSQ0hfQ1BVXFxuIFxcdHNlbGVjdCBMT0NLX01NX0FORF9GSU5EX1ZNQVxcbiBcXHRzZWxlY3QgTU1VX0dBVEhFUl9NRVJHRV9WTUFTIGlmIE1NVVxcbi1cXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxcbiBcXHRzZWxlY3QgTU9EVUxFU19VU0VfRUxGX1JFTEEgaWYgTU9EVUxFU1xcbiBcXHRzZWxlY3QgTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LXFxuIFxcdHNlbGVjdCBORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOS1xcbmRpZmYgLS1naXQgYS9hcmNoL202OGsvS2NvbmZpZyBiL2FyY2gvbTY4ay9LY29uZmlnXFxuaW5kZXggMTE4MzVlYjU5ZDk0ZC4uZWI4NGMzYWY5MmMwMiAxMDA2NDRcXG4tLS0gYS9hcmNoL202OGsvS2NvbmZpZ1xcbisrKyBiL2FyY2gvbTY4ay9LY29uZmlnXFxuQEAgLTI5LDYgKzI5LDcgQEAgY29uZmlnIE02OEtcXG4gXFx0c2VsZWN0IEhBVkVfQVJDSF9MSUJHQ0NfSFxcbiBcXHRzZWxlY3QgSEFWRV9BUkNIX1NFQ0NPTVBcXG4gXFx0c2VsZWN0IEhBVkVfQVJDSF9TRUNDT01QX0ZJTFRFUlxcbitcXHRzZWxlY3QgSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEUgaWYgTU1VX01PVE9ST0xBXFxuIFxcdHNlbGVjdCBIQVZFX0FTTV9NT0RWRVJTSU9OU1xcbiBcXHRzZWxlY3QgSEFWRV9ERUJVR19CVUdWRVJCT1NFXFxuIFxcdHNlbGVjdCBIQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTIGlmICFDUFVfSEFTX05PX1VOQUxJR05FRFxcbmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbWNmX3BnYWxsb2MuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tY2ZfcGdhbGxvYy5oXFxuaW5kZXggZmM1NDU0ZDM3ZGEzMS4uYjUzZmYwOTUwZGIyZSAxMDA2NDRcXG4tLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbWNmX3BnYWxsb2MuaFxcbisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tY2ZfcGdhbGxvYy5oXFxuQEAgLTM5LDEwICszOSw3IEBAIGV4dGVybiBpbmxpbmUgcG1kX3QgKnBtZF9hbGxvY19rZXJuZWwocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19wdGVfZnJlZV90bGIoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgcGd0YWJsZV90IHBndGFibGUsXFxuIFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxcbiB7XFxuLVxcdHN0cnVjdCBwdGRlc2MgKnB0ZGVzYyA9IHZpcnRfdG9fcHRkZXNjKHBndGFibGUpO1xcbi1cXG4tXFx0cGFnZXRhYmxlX2R0b3IocHRkZXNjKTtcXG4tXFx0cGFnZXRhYmxlX2ZyZWUocHRkZXNjKTtcXG4rXFx0dGxiX3JlbW92ZV9wdGRlc2ModGxiLCB2aXJ0X3RvX3B0ZGVzYyhwZ3RhYmxlKSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgcGd0YWJsZV90IHB0ZV9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tb3Rvcm9sYV9wZ2FsbG9jLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbW90b3JvbGFfcGdhbGxvYy5oXFxuaW5kZXggMTA5MWZiMGFmZmJlZS4uZGNkZTQwZThiNWM2YSAxMDA2NDRcXG4tLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbW90b3JvbGFfcGdhbGxvYy5oXFxuKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21vdG9yb2xhX3BnYWxsb2MuaFxcbkBAIC0xNyw2ICsxNyw3IEBAIGVudW0gbTY4a190YWJsZV90eXBlcyB7XFxuIGV4dGVybiB2b2lkIGluaXRfcG9pbnRlcl90YWJsZSh2b2lkICp0YWJsZSwgaW50IHR5cGUpO1xcbiBleHRlcm4gdm9pZCAqZ2V0X3BvaW50ZXJfdGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCB0eXBlKTtcXG4gZXh0ZXJuIGludCBmcmVlX3BvaW50ZXJfdGFibGUodm9pZCAqdGFibGUsIGludCB0eXBlKTtcXG4rZXh0ZXJuIHZvaWQgX190bGJfcmVtb3ZlX3RhYmxlKHZvaWQgKnRhYmxlKTtcXG4gXFxuIC8qXFxuICAqIEFsbG9jYXRlIGFuZCBmcmVlIHBhZ2UgdGFibGVzLiBUaGUgeHh4X2tlcm5lbCgpIHZlcnNpb25zIGFyZVxcbkBAIC00Nyw3ICs0OCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdGVfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHBndGFibGUpXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3B0ZV9mcmVlX3RsYihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBwZ3RhYmxlX3QgcGd0YWJsZSxcXG4gXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXFxuIHtcXG4tXFx0ZnJlZV9wb2ludGVyX3RhYmxlKHBndGFibGUsIFRBQkxFX1BURSk7XFxuK1xcdHRsYl9yZW1vdmVfdGFibGUodGxiLCAodm9pZCAqKSgodW5zaWduZWQgbG9uZylwZ3RhYmxlIHwgVEFCTEVfUFRFKSk7XFxuIH1cXG4gXFxuIFxcbkBAIC02MSwxMCArNjIsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgcG1kX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQpXFxuIFxcdHJldHVybiBmcmVlX3BvaW50ZXJfdGFibGUocG1kLCBUQUJMRV9QTUQpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGludCBfX3BtZF9mcmVlX3RsYihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBwbWRfdCAqcG1kLFxcbi1cXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxcbitzdGF0aWMgaW5saW5lIHZvaWQgX19wbWRfZnJlZV90bGIoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgcG1kX3QgKnBtZCxcXG4rXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXFxuIHtcXG4tXFx0cmV0dXJuIGZyZWVfcG9pbnRlcl90YWJsZShwbWQsIFRBQkxFX1BNRCk7XFxuK1xcdHRsYl9yZW1vdmVfdGFibGUodGxiLCAodm9pZCAqKSgodW5zaWduZWQgbG9uZylwbWQgfCBUQUJMRV9QTUQpKTtcXG4gfVxcbiBcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tbS9tb3Rvcm9sYS5jIGIvYXJjaC9tNjhrL21tL21vdG9yb2xhLmNcXG5pbmRleCBiMzBhYTY5YTczYTZhLi5mZmM4MDQ4MzQ0MGJjIDEwMDY0NFxcbi0tLSBhL2FyY2gvbTY4ay9tbS9tb3Rvcm9sYS5jXFxuKysrIGIvYXJjaC9tNjhrL21tL21vdG9yb2xhLmNcXG5AQCAtMjAsNiArMjAsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaW5pdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtYmxvY2suaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2dmcC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xlYW51cC5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9zZXR1cC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdWFjY2Vzcy5oXFx1MDAzZVxcbkBAIC0xMDMsNiArMTA0LDggQEAgc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgcHRhYmxlX2xpc3RbM10gPSB7XFxuIFxcdExJU1RfSEVBRF9JTklUKHB0YWJsZV9saXN0WzJdKSxcXG4gfTtcXG4gXFxuK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socHRhYmxlX2xvY2spO1xcbitcXG4gI2RlZmluZSBQRF9QVEFCTEUocHRkZXNjKSAoKHB0YWJsZV9kZXNjICopXFx1MDAyNih2aXJ0X3RvX3B0ZGVzYygodm9pZCAqKShwdGRlc2MpKS1cXHUwMDNlcHRfbGlzdCkpXFxuICNkZWZpbmUgUERfUFRERVNDKHB0YWJsZSkgKGxpc3RfZW50cnkocHRhYmxlLCBzdHJ1Y3QgcHRkZXNjLCBwdF9saXN0KSlcXG4gI2RlZmluZSBQRF9NQVJLQklUUyhkcCkgKCoodW5zaWduZWQgaW50ICopXFx1MDAyNlBEX1BUREVTQyhkcCktXFx1MDAzZXB0X2luZGV4KVxcbkBAIC0xMzksNTIgKzE0Miw2NiBAQCB2b2lkIF9faW5pdCBpbml0X3BvaW50ZXJfdGFibGUodm9pZCAqdGFibGUsIGludCB0eXBlKVxcbiBcXHRyZXR1cm47XFxuIH1cXG4gXFxuLXZvaWQgKmdldF9wb2ludGVyX3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgdHlwZSlcXG4rLypcXG4rICogRm9yIGEgcG9pbnRlciB0YWJsZSBmb3IgYSB1c2VyIHByb2Nlc3MgYWRkcmVzcyBzcGFjZSwgYVxcbisgKiB0YWJsZSBpcyB0YWtlbiBmcm9tIGEgcHRkZXNjIGFsbG9jYXRlZCBmb3IgdGhlIHB1cnBvc2UuICBFYWNoXFxuKyAqIHB0ZGVzYyBjYW4gaG9sZCA4IHBvaW50ZXIgdGFibGVzLiAgVGhlIHB0ZGVzYyBpcyByZW1hcHBlZCBpblxcbisgKiB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgdG8gYmUgbm9uY2FjaGVhYmxlLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgKmFkZF9wb2ludGVyX3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgdHlwZSlcXG4ge1xcbi1cXHRwdGFibGVfZGVzYyAqZHAgPSBwdGFibGVfbGlzdFt0eXBlXS5uZXh0O1xcbi1cXHR1bnNpZ25lZCBpbnQgbWFzayA9IGxpc3RfZW1wdHkoXFx1MDAyNnB0YWJsZV9saXN0W3R5cGVdKSA/IDAgOiBQRF9NQVJLQklUUyhkcCk7XFxuLVxcdHVuc2lnbmVkIGludCB0bXAsIG9mZjtcXG4rXFx0c3RydWN0IHB0ZGVzYyAqcHRkZXNjO1xcbitcXHRwdGFibGVfZGVzYyAqbmV3O1xcbitcXHR2b2lkICpwdF9hZGRyO1xcbiBcXG4tXFx0LypcXG4tXFx0ICogRm9yIGEgcG9pbnRlciB0YWJsZSBmb3IgYSB1c2VyIHByb2Nlc3MgYWRkcmVzcyBzcGFjZSwgYVxcbi1cXHQgKiB0YWJsZSBpcyB0YWtlbiBmcm9tIGEgcHRkZXNjIGFsbG9jYXRlZCBmb3IgdGhlIHB1cnBvc2UuICBFYWNoXFxuLVxcdCAqIHB0ZGVzYyBjYW4gaG9sZCA4IHBvaW50ZXIgdGFibGVzLiAgVGhlIHB0ZGVzYyBpcyByZW1hcHBlZCBpblxcbi1cXHQgKiB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgdG8gYmUgbm9uY2FjaGVhYmxlLlxcbi1cXHQgKi9cXG4tXFx0aWYgKG1hc2sgPT0gMCkge1xcbi1cXHRcXHRzdHJ1Y3QgcHRkZXNjICpwdGRlc2M7XFxuLVxcdFxcdHB0YWJsZV9kZXNjICpuZXc7XFxuLVxcdFxcdHZvaWQgKnB0X2FkZHI7XFxuLVxcbi1cXHRcXHRwdGRlc2MgPSBwYWdldGFibGVfYWxsb2MoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8sIDApO1xcbi1cXHRcXHRpZiAoIXB0ZGVzYylcXG4tXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuLVxcbi1cXHRcXHRwdF9hZGRyID0gcHRkZXNjX2FkZHJlc3MocHRkZXNjKTtcXG4tXFxuLVxcdFxcdHN3aXRjaCAodHlwZSkge1xcbi1cXHRcXHRjYXNlIFRBQkxFX1BURTpcXG4tXFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0ICogbTY4ayBkb2Vzbid0IGhhdmUgU1BMSVRfUFRFX1BUTE9DS1MgZm9yIG5vdCBoYXZpbmdcXG4tXFx0XFx0XFx0ICogU01QLlxcbi1cXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0cGFnZXRhYmxlX3B0ZV9jdG9yKG1tLCBwdGRlc2MpO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSBUQUJMRV9QTUQ6XFxuLVxcdFxcdFxcdHBhZ2V0YWJsZV9wbWRfY3RvcihtbSwgcHRkZXNjKTtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGNhc2UgVEFCTEVfUEdEOlxcbi1cXHRcXHRcXHRwYWdldGFibGVfcGdkX2N0b3IocHRkZXNjKTtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdH1cXG4rXFx0cHRkZXNjID0gcGFnZXRhYmxlX2FsbG9jKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPLCAwKTtcXG4rXFx0aWYgKCFwdGRlc2MpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0cHRfYWRkciA9IHB0ZGVzY19hZGRyZXNzKHB0ZGVzYyk7XFxuK1xcbitcXHRzd2l0Y2ggKHR5cGUpIHtcXG4rXFx0Y2FzZSBUQUJMRV9QVEU6XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIG02OGsgZG9lc24ndCBoYXZlIFNQTElUX1BURV9QVExPQ0tTIGZvciBub3QgaGF2aW5nXFxuK1xcdFxcdCAqIFNNUC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHBhZ2V0YWJsZV9wdGVfY3RvcihtbSwgcHRkZXNjKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgVEFCTEVfUE1EOlxcbitcXHRcXHRwYWdldGFibGVfcG1kX2N0b3IobW0sIHB0ZGVzYyk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFRBQkxFX1BHRDpcXG4rXFx0XFx0cGFnZXRhYmxlX3BnZF9jdG9yKHB0ZGVzYyk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRtbXVfcGFnZV9jdG9yKHB0X2FkZHIpO1xcbitcXG4rXFx0bmV3ID0gUERfUFRBQkxFKHB0X2FkZHIpO1xcbiBcXG4tXFx0XFx0bW11X3BhZ2VfY3RvcihwdF9hZGRyKTtcXG4rXFx0UERfTUFSS0JJVFMobmV3KSA9IHB0YWJsZV9tYXNrKHR5cGUpIC0gMTtcXG4rXFx0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2lycXNhdmUsIFxcdTAwMjZwdGFibGVfbG9jaylcXG4rXFx0XFx0bGlzdF9hZGQobmV3LCBcXHUwMDI2cHRhYmxlX2xpc3RbdHlwZV0pO1xcbiBcXG4tXFx0XFx0bmV3ID0gUERfUFRBQkxFKHB0X2FkZHIpO1xcbi1cXHRcXHRQRF9NQVJLQklUUyhuZXcpID0gcHRhYmxlX21hc2sodHlwZSkgLSAxO1xcbi1cXHRcXHRsaXN0X2FkZF90YWlsKG5ldywgZHApO1xcbitcXHRyZXR1cm4gKHBtZF90ICopcHRfYWRkcjtcXG4rfVxcbitcXG4rdm9pZCAqZ2V0X3BvaW50ZXJfdGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCB0eXBlKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCB0bXAsIG9mZjtcXG4rXFx0dW5zaWduZWQgbG9uZyBtYXNrO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXHRwdGFibGVfZGVzYyAqZHA7XFxuK1xcdHZvaWQgKnJldDtcXG4gXFxuLVxcdFxcdHJldHVybiAocG1kX3QgKilwdF9hZGRyO1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2cHRhYmxlX2xvY2ssIGZsYWdzKTtcXG4rXFx0ZHAgPSBwdGFibGVfbGlzdFt0eXBlXS5uZXh0O1xcbitcXHRtYXNrID0gbGlzdF9lbXB0eShcXHUwMDI2cHRhYmxlX2xpc3RbdHlwZV0pID8gMCA6IFBEX01BUktCSVRTKGRwKTtcXG4rXFxuK1xcdGlmIChtYXNrID09IDApIHtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cHRhYmxlX2xvY2ssIGZsYWdzKTtcXG4rXFx0XFx0cmV0dXJuIGFkZF9wb2ludGVyX3RhYmxlKG1tLCB0eXBlKTtcXG4gXFx0fVxcbiBcXG4gXFx0Zm9yICh0bXAgPSAxLCBvZmYgPSAwOyAobWFzayBcXHUwMDI2IHRtcCkgPT0gMDsgdG1wIFxcdTAwM2NcXHUwMDNjPSAxLCBvZmYgKz0gcHRhYmxlX3NpemUodHlwZSkpXFxuQEAgLTE5NCw3ICsyMTEsMTAgQEAgdm9pZCAqZ2V0X3BvaW50ZXJfdGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCB0eXBlKVxcbiBcXHRcXHQvKiBtb3ZlIHRvIGVuZCBvZiBsaXN0ICovXFxuIFxcdFxcdGxpc3RfbW92ZV90YWlsKGRwLCBcXHUwMDI2cHRhYmxlX2xpc3RbdHlwZV0pO1xcbiBcXHR9XFxuLVxcdHJldHVybiBwdGRlc2NfYWRkcmVzcyhQRF9QVERFU0MoZHApKSArIG9mZjtcXG4rXFxuK1xcdHJldCA9IHB0ZGVzY19hZGRyZXNzKFBEX1BUREVTQyhkcCkpICsgb2ZmO1xcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZwdGFibGVfbG9jaywgZmxhZ3MpO1xcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbiBpbnQgZnJlZV9wb2ludGVyX3RhYmxlKHZvaWQgKnRhYmxlLCBpbnQgdHlwZSlcXG5AQCAtMjAzLDYgKzIyMyw5IEBAIGludCBmcmVlX3BvaW50ZXJfdGFibGUodm9pZCAqdGFibGUsIGludCB0eXBlKVxcbiBcXHR1bnNpZ25lZCBsb25nIHB0YWJsZSA9ICh1bnNpZ25lZCBsb25nKXRhYmxlO1xcbiBcXHR1bnNpZ25lZCBsb25nIHB0X2FkZHIgPSBwdGFibGUgXFx1MDAyNiBQQUdFX01BU0s7XFxuIFxcdHVuc2lnbmVkIGludCBtYXNrID0gMVUgXFx1MDAzY1xcdTAwM2MgKChwdGFibGUgLSBwdF9hZGRyKS9wdGFibGVfc2l6ZSh0eXBlKSk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2cHRhYmxlX2xvY2ssIGZsYWdzKTtcXG4gXFxuIFxcdGRwID0gUERfUFRBQkxFKHB0X2FkZHIpO1xcbiBcXHRpZiAoUERfTUFSS0JJVFMgKGRwKSBcXHUwMDI2IG1hc2spXFxuQEAgLTIxMyw2ICsyMzYsOCBAQCBpbnQgZnJlZV9wb2ludGVyX3RhYmxlKHZvaWQgKnRhYmxlLCBpbnQgdHlwZSlcXG4gXFx0aWYgKFBEX01BUktCSVRTKGRwKSA9PSBwdGFibGVfbWFzayh0eXBlKSkge1xcbiBcXHRcXHQvKiBhbGwgdGFibGVzIGluIHB0ZGVzYyBhcmUgZnJlZSwgZnJlZSBwdGRlc2MgKi9cXG4gXFx0XFx0bGlzdF9kZWwoZHApO1xcbitcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZwdGFibGVfbG9jaywgZmxhZ3MpO1xcbitcXG4gXFx0XFx0bW11X3BhZ2VfZHRvcigodm9pZCAqKXB0X2FkZHIpO1xcbiBcXHRcXHRwYWdldGFibGVfZHRvcl9mcmVlKHZpcnRfdG9fcHRkZXNjKCh2b2lkICopcHRfYWRkcikpO1xcbiBcXHRcXHRyZXR1cm4gMTtcXG5AQCAtMjIzLDkgKzI0OCwyMSBAQCBpbnQgZnJlZV9wb2ludGVyX3RhYmxlKHZvaWQgKnRhYmxlLCBpbnQgdHlwZSlcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGxpc3RfbW92ZShkcCwgXFx1MDAyNnB0YWJsZV9saXN0W3R5cGVdKTtcXG4gXFx0fVxcbitcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cHRhYmxlX2xvY2ssIGZsYWdzKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3ZvaWQgX190bGJfcmVtb3ZlX3RhYmxlKHZvaWQgKnRhYmxlKVxcbit7XFxuK1xcdC8qIFRoZSBib3R0b20gMiBiaXRzIGFyZSB1c2VkIHRvIGVuY29kZSBwYWdlIHRhYmxlIHR5cGUuICovXFxuK1xcdGNvbnN0IHVuc2lnbmVkIGxvbmcgZW5jb2RlZCA9ICh1bnNpZ25lZCBsb25nKXRhYmxlO1xcbitcXHR2b2lkICphZGRyID0gKHZvaWQgKikoZW5jb2RlZCBcXHUwMDI2IH4zVUwpO1xcbitcXHRjb25zdCBpbnQgdHlwZSA9IGVuY29kZWQgXFx1MDAyNiAzO1xcbitcXG4rXFx0ZnJlZV9wb2ludGVyX3RhYmxlKGFkZHIsIHR5cGUpO1xcbit9XFxuK1xcbiAvKiBzaXplIG9mIG1lbW9yeSBhbHJlYWR5IG1hcHBlZCBpbiBoZWFkLlMgKi9cXG4gZXh0ZXJuIF9faW5pdGRhdGEgdW5zaWduZWQgbG9uZyBtNjhrX2luaXRfbWFwcGVkX3NpemU7XFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcGdhbGxvYy5oIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxcbmluZGV4IDA4NGE4YTBkYzIzOTUuLmZmZWU2YTAwOTIxOWEgMTAwNjQ0XFxuLS0tIGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxcbisrKyBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcXG5AQCAtMjUsNyArMjUsNyBAQCBleHRlcm4gdm9pZCBfX2JhZF9wdGUocG1kX3QgKnBtZCk7XFxuIFxcbiBleHRlcm4gcHRlX3QgKnB0ZV9hbGxvY19vbmVfa2VybmVsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcXG4gXFxuLSNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLCBwdGUsIGFkZHIpXFx0cHRlX2ZyZWUoKHRsYiktXFx1MDAzZW1tLCAocHRlKSlcXG4rI2RlZmluZSBfX3B0ZV9mcmVlX3RsYih0bGIsIHB0ZSwgYWRkcilcXHR0bGJfcmVtb3ZlX3B0ZGVzYygodGxiKSwgcGFnZV9wdGRlc2MocHRlKSlcXG4gXFxuICNkZWZpbmUgcG1kX3BvcHVsYXRlKG1tLCBwbWQsIHB0ZSkgXFxcXFxcbiBcXHRcXHRcXHQocG1kX3ZhbCgqKHBtZCkpID0gKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKHB0ZSkpXFxuZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9LY29uZmlnIGIvYXJjaC9taXBzL0tjb25maWdcXG5pbmRleCBlMmViOTYyN2JkMTRjLi5mMGM0M2QxMThjYTAwIDEwMDY0NFxcbi0tLSBhL2FyY2gvbWlwcy9LY29uZmlnXFxuKysrIGIvYXJjaC9taXBzL0tjb25maWdcXG5AQCAtOTcsNyArOTcsNiBAQCBjb25maWcgTUlQU1xcbiBcXHRzZWxlY3QgSVJRX0ZPUkNFRF9USFJFQURJTkdcXG4gXFx0c2VsZWN0IElTQSBpZiBFSVNBXFxuIFxcdHNlbGVjdCBMT0NLX01NX0FORF9GSU5EX1ZNQVxcbi1cXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxcbiBcXHRzZWxlY3QgTU9EVUxFU19VU0VfRUxGX1JFTCBpZiBNT0RVTEVTXFxuIFxcdHNlbGVjdCBNT0RVTEVTX1VTRV9FTEZfUkVMQSBpZiBNT0RVTEVTIFxcdTAwMjZcXHUwMDI2IDY0QklUXFxuIFxcdHNlbGVjdCBQRVJGX1VTRV9WTUFMTE9DXFxuZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL0tjb25maWcgYi9hcmNoL3BhcmlzYy9LY29uZmlnXFxuaW5kZXggZDNhZmFjMmYwZDliZS4uNzdmNjcwMjhhZDg5YyAxMDA2NDRcXG4tLS0gYS9hcmNoL3BhcmlzYy9LY29uZmlnXFxuKysrIGIvYXJjaC9wYXJpc2MvS2NvbmZpZ1xcbkBAIC04MCw3ICs4MCw2IEBAIGNvbmZpZyBQQVJJU0NcXG4gXFx0c2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFNcXG4gXFx0c2VsZWN0IENQVV9OT19FRkZJQ0lFTlRfRkZTXFxuIFxcdHNlbGVjdCBUSFJFQURfSU5GT19JTl9UQVNLXFxuLVxcdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXFxuIFxcdHNlbGVjdCBORUVEX0RNQV9NQVBfU1RBVEVcXG4gXFx0c2VsZWN0IE5FRURfU0dfRE1BX0xFTkdUSFxcbiBcXHRzZWxlY3QgSEFWRV9BUkNIX0tHREJcXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZ1xcbmluZGV4IDI1ODBlMjdlNDMyODcuLjA3NjdjZmNiYWE0MjIgMTAwNjQ0XFxuLS0tIGEvYXJjaC9wb3dlcnBjL0tjb25maWdcXG4rKysgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZ1xcbkBAIC0zMDcsNyArMzA3LDYgQEAgY29uZmlnIFBQQ1xcbiBcXHRzZWxlY3QgS0FTQU5fVk1BTExPQ1xcdFxcdFxcdGlmIEtBU0FOIFxcdTAwMjZcXHUwMDI2IEVYRUNNRU1cXG4gXFx0c2VsZWN0IExPQ0tfTU1fQU5EX0ZJTkRfVk1BXFxuIFxcdHNlbGVjdCBNTVVfR0FUSEVSX1BBR0VfU0laRVxcbi1cXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxcbiBcXHRzZWxlY3QgSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEVcXG4gXFx0c2VsZWN0IE1NVV9HQVRIRVJfTUVSR0VfVk1BU1xcbiBcXHRzZWxlY3QgTU1VX0xBWllfVExCX1NIT09URE9XTlxcdFxcdGlmIFBQQ19CT09LM1NfNjRcXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9LY29uZmlnIGIvYXJjaC9yaXNjdi9LY29uZmlnXFxuaW5kZXggNTA1ZWVkNGFmOTMyYi4uNzc0MWE0Mjg3NDk4MSAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L0tjb25maWdcXG4rKysgYi9hcmNoL3Jpc2N2L0tjb25maWdcXG5AQCAtMjA4LDcgKzIwOCw2IEBAIGNvbmZpZyBSSVNDVlxcbiBcXHRzZWxlY3QgSVJRX0ZPUkNFRF9USFJFQURJTkdcXG4gXFx0c2VsZWN0IEtBU0FOX1ZNQUxMT0MgaWYgS0FTQU5cXG4gXFx0c2VsZWN0IExPQ0tfTU1fQU5EX0ZJTkRfVk1BXFxuLVxcdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFIGlmIFNNUCBcXHUwMDI2XFx1MDAyNiBNTVVcXG4gXFx0c2VsZWN0IE1PRFVMRVNfVVNFX0VMRl9SRUxBIGlmIE1PRFVMRVNcXG4gXFx0c2VsZWN0IE9GXFxuIFxcdHNlbGVjdCBPRl9FQVJMWV9GTEFUVFJFRVxcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnXFxuaW5kZXggYjg4Yjg1MDQyMTM2OS4uYTM0Mzc2YzA1ZjZlMyAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAvS2NvbmZpZ1xcbisrKyBiL2FyY2gvczM5MC9LY29uZmlnXFxuQEAgLTI2Nyw3ICsyNjcsNiBAQCBjb25maWcgUzM5MFxcbiBcXHRzZWxlY3QgTE9DS19NTV9BTkRfRklORF9WTUFcXG4gXFx0c2VsZWN0IE1NVV9HQVRIRVJfTUVSR0VfVk1BU1xcbiBcXHRzZWxlY3QgTU1VX0dBVEhFUl9OT19HQVRIRVJcXG4tXFx0c2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcXG4gXFx0c2VsZWN0IE1PRFVMRVNfVVNFX0VMRl9SRUxBXFxuIFxcdHNlbGVjdCBORUVEX0RNQV9NQVBfU1RBVEVcXHRpZiBQQ0lcXG4gXFx0c2VsZWN0IE5FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOS1xcbmRpZmYgLS1naXQgYS9hcmNoL3NoL0tjb25maWcgYi9hcmNoL3NoL0tjb25maWdcXG5pbmRleCBkNjBmMWQ1YTk0YzBmLi5mZTg1OWRlZjkxOGNjIDEwMDY0NFxcbi0tLSBhL2FyY2gvc2gvS2NvbmZpZ1xcbisrKyBiL2FyY2gvc2gvS2NvbmZpZ1xcbkBAIC0zMyw2ICszMyw3IEBAIGNvbmZpZyBTVVBFUkhcXG4gXFx0c2VsZWN0IEhBVkVfQVJDSF9BVURJVFNZU0NBTExcXG4gXFx0c2VsZWN0IEhBVkVfQVJDSF9LR0RCXFxuIFxcdHNlbGVjdCBIQVZFX0FSQ0hfU0VDQ09NUF9GSUxURVJcXG4rXFx0c2VsZWN0IEhBVkVfQVJDSF9UTEJfUkVNT1ZFX1RBQkxFIGlmIFgyVExCXFxuIFxcdHNlbGVjdCBIQVZFX0FSQ0hfVFJBQ0VIT09LXFxuIFxcdHNlbGVjdCBIQVZFX0RFQlVHX0JVR1ZFUkJPU0VcXG4gXFx0c2VsZWN0IEhBVkVfREVCVUdfS01FTUxFQUtcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxcbmluZGV4IDZmZTcxMjNkMzhmYTkuLjY3Y2U3ZmEyM2ZhMTIgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcXG4rKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxcbkBAIC0xNyw3ICsxNywxMSBAQCBleHRlcm4gdm9pZCBwZ2RfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZCk7XFxuIGV4dGVybiB2b2lkIHB1ZF9wb3B1bGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcHVkX3QgKnB1ZHAsIHBtZF90ICpwbWQpO1xcbiBleHRlcm4gcG1kX3QgKnBtZF9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7XFxuIGV4dGVybiB2b2lkIHBtZF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKTtcXG4tI2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIsIHBtZHAsIGFkZHIpXFx0XFx0cG1kX2ZyZWUoKHRsYiktXFx1MDAzZW1tLCAocG1kcCkpXFxuK2V4dGVybiB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZSh2b2lkICp0YWJsZSk7XFxuK1xcbisvKiBQTURzIGFyZSBzbGFiLWFsbG9jYXRlZCwgdGFnIHNvIHRoZXkgYXJlIGZyZWVkIGNvcnJlY3RseS4gKi9cXG4rI2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIsIHBtZHAsIGFkZHIpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHR0bGJfcmVtb3ZlX3RhYmxlKCh0bGIpLCAodm9pZCAqKSgodW5zaWduZWQgbG9uZykocG1kcCkgfCAxKSlcXG4gI2VuZGlmXFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgcG1kX3BvcHVsYXRlX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCxcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9wZ3RhYmxlLmMgYi9hcmNoL3NoL21tL3BndGFibGUuY1xcbmluZGV4IDNhNDA4NWVhMDE2MWYuLmY2MTg0Yjg2Yjg5YzYgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zaC9tbS9wZ3RhYmxlLmNcXG4rKysgYi9hcmNoL3NoL21tL3BndGFibGUuY1xcbkBAIC01Niw0ICs1NiwyNCBAQCB2b2lkIHBtZF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKVxcbiB7XFxuIFxcdGttZW1fY2FjaGVfZnJlZShwbWRfY2FjaGVwLCBwbWQpO1xcbiB9XFxuK1xcbitzdGF0aWMgdm9pZCBfX3RsYl9yZW1vdmVfdGFibGVfc2xhYih2b2lkICp0YWJsZSlcXG4re1xcbitcXHRrbWVtX2NhY2hlX2ZyZWUocG1kX2NhY2hlcCwgdGFibGUpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBfX3RsYl9yZW1vdmVfdGFibGVfcGd0YWJsZSh2b2lkICp0YWJsZSlcXG4re1xcbitcXHRwYWdldGFibGVfZHRvcl9mcmVlKHRhYmxlKTtcXG4rfVxcbitcXG4rdm9pZCBfX3RsYl9yZW1vdmVfdGFibGUodm9pZCAqdGFibGUpXFxuK3tcXG4rXFx0Y29uc3QgdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpdGFibGU7XFxuK1xcbitcXHRpZiAoYWRkciBcXHUwMDI2IDEpXFxuK1xcdFxcdF9fdGxiX3JlbW92ZV90YWJsZV9zbGFiKCh2b2lkICopKGFkZHIgXFx1MDAyNiB+MVVMKSk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0X190bGJfcmVtb3ZlX3RhYmxlX3BndGFibGUodGFibGUpO1xcbit9XFxuICNlbmRpZiAvKiBQQUdFVEFCTEVfTEVWRUxTIFxcdTAwM2UgMiAqL1xcbmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL0tjb25maWcgYi9hcmNoL3NwYXJjL0tjb25maWdcXG5pbmRleCBhYjc3ZDNmMjUzNmUxLi43NDJmZmZmOGMzN2YyIDEwMDY0NFxcbi0tLSBhL2FyY2gvc3BhcmMvS2NvbmZpZ1xcbisrKyBiL2FyY2gvc3BhcmMvS2NvbmZpZ1xcbkBAIC02NCw2ICs2NCw3IEBAIGNvbmZpZyBTUEFSQzMyXFxuIFxcdHNlbGVjdCBIQVZFX1VJRDE2XFxuIFxcdHNlbGVjdCBIQVZFX1BBR0VfU0laRV80S0JcXG4gXFx0c2VsZWN0IExPQ0tfTU1fQU5EX0ZJTkRfVk1BXFxuK1xcdHNlbGVjdCBIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRVxcbiBcXHRzZWxlY3QgT0xEX1NJR0FDVElPTlxcbiBcXHRzZWxlY3QgWk9ORV9ETUFcXG4gXFxuQEAgLTc1LDggKzc2LDcgQEAgY29uZmlnIFNQQVJDNjRcXG4gXFx0c2VsZWN0IEhBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSXFxuIFxcdHNlbGVjdCBIQVZFX0tSRVRQUk9CRVNcXG4gXFx0c2VsZWN0IEhBVkVfS1BST0JFU1xcbi1cXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSBpZiBTTVBcXG4tXFx0c2VsZWN0IEhBVkVfQVJDSF9UTEJfUkVNT1ZFX1RBQkxFIGlmIFNNUFxcbitcXHRzZWxlY3QgSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEVcXG4gXFx0c2VsZWN0IE1NVV9HQVRIRVJfTUVSR0VfVk1BU1xcbiBcXHRzZWxlY3QgTU1VX0dBVEhFUl9OT19GTFVTSF9DQUNIRVxcbiBcXHRzZWxlY3QgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxuZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY18zMi5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzMyLmhcXG5pbmRleCA0ZjczZTg3YjIyYTMyLi4zNjAxMDg1MmJhMGMwIDEwMDY0NFxcbi0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY18zMi5oXFxuKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzMyLmhcXG5AQCAtNDgsNyArNDgsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9wbWRfZmFzdChwbWRfdCAqIHBtZClcXG4gfVxcbiBcXG4gI2RlZmluZSBwbWRfZnJlZShtbSwgcG1kKVxcdFxcdGZyZWVfcG1kX2Zhc3QocG1kKVxcbi0jZGVmaW5lIF9fcG1kX2ZyZWVfdGxiKHRsYiwgcG1kLCBhZGRyKVxcdHBtZF9mcmVlKCh0bGIpLVxcdTAwM2VtbSwgcG1kKVxcbitcXG4rI2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIsIHBtZCwgYWRkcilcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHRsYl9yZW1vdmVfdGFibGUoKHRsYiksICh2b2lkICopKCh1bnNpZ25lZCBsb25nKShwbWQpIHwgMVVMKSlcXG4gXFxuICNkZWZpbmUgcG1kX3BvcHVsYXRlKG1tLCBwbWQsIHB0ZSlcXHRwbWRfc2V0KHBtZCwgcHRlKVxcbiBcXG5AQCAtNzIsNiArNzQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9wdGVfZmFzdChwdGVfdCAqcHRlKVxcbiAjZGVmaW5lIHB0ZV9mcmVlX2tlcm5lbChtbSwgcHRlKVxcdGZyZWVfcHRlX2Zhc3QocHRlKVxcbiBcXG4gdm9pZCBwdGVfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICogbW0sIHBndGFibGVfdCBwdGUpO1xcbi0jZGVmaW5lIF9fcHRlX2ZyZWVfdGxiKHRsYiwgcHRlLCBhZGRyKVxcdHB0ZV9mcmVlKCh0bGIpLVxcdTAwM2VtbSwgcHRlKVxcbit2b2lkIF9fdGxiX3JlbW92ZV90YWJsZSh2b2lkICp0YWJsZSk7XFxuKyNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLCBwdGUsIGFkZHIpXFx0dGxiX3JlbW92ZV90YWJsZSgodGxiKSwgKHZvaWQgKikocHRlKSlcXG4gXFxuICNlbmRpZiAvKiBfU1BBUkNfUEdBTExPQ19IICovXFxuZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY182NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzY0LmhcXG5pbmRleCBjYWE3NjMyYmU0YzJhLi5iNTA1NWQyNTliNzRkIDEwMDY0NFxcbi0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY182NC5oXFxuKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzY0LmhcXG5AQCAtNzQsOCArNzQsNiBAQCB2b2lkIHB0ZV9mcmVlX2RlZmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcGd0YWJsZSk7XFxuIFxcbiB2b2lkIHBndGFibGVfZnJlZSh2b2lkICp0YWJsZSwgYm9vbCBpc19wYWdlKTtcXG4gXFxuLSNpZmRlZiBDT05GSUdfU01QXFxuLVxcbiBzdHJ1Y3QgbW11X2dhdGhlcjtcXG4gdm9pZCB0bGJfcmVtb3ZlX3RhYmxlKHN0cnVjdCBtbXVfZ2F0aGVyICosIHZvaWQgKik7XFxuIFxcbkBAIC05NiwxMiArOTQsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX190bGJfcmVtb3ZlX3RhYmxlKHZvaWQgKl90YWJsZSlcXG4gXFx0XFx0aXNfcGFnZSA9IHRydWU7XFxuIFxcdHBndGFibGVfZnJlZSh0YWJsZSwgaXNfcGFnZSk7XFxuIH1cXG4tI2Vsc2UgLyogQ09ORklHX1NNUCAqL1xcbi1zdGF0aWMgaW5saW5lIHZvaWQgcGd0YWJsZV9mcmVlX3RsYihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCB2b2lkICp0YWJsZSwgYm9vbCBpc19wYWdlKVxcbi17XFxuLVxcdHBndGFibGVfZnJlZSh0YWJsZSwgaXNfcGFnZSk7XFxuLX1cXG4tI2VuZGlmIC8qICFDT05GSUdfU01QICovXFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19wdGVfZnJlZV90bGIoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgcHRlX3QgKnB0ZSxcXG4gXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXFxuZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGxiXzY0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RsYl82NC5oXFxuaW5kZXggMzAzNzE4NzQ4MmRiNy4uZjVmOTYzMTY4NWQ1MCAxMDA2NDRcXG4tLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RsYl82NC5oXFxuKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90bGJfNjQuaFxcbkBAIC0yOSw5ICsyOSw3IEBAIHZvaWQgZmx1c2hfdGxiX3BlbmRpbmcodm9pZCk7XFxuICAqIGFuZCB0aGVyZWZvcmUgd2UgZG9uJ3QgbmVlZCBhIFRMQkkgd2hlbiBmcmVlaW5nIHBhZ2UtdGFibGUgcGFnZXMuXFxuICAqL1xcbiBcXG4tI2lmZGVmIENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXFxuICNkZWZpbmUgdGxiX25lZWRzX3RhYmxlX2ludmFsaWRhdGUoKVxcdChmYWxzZSlcXG4tI2VuZGlmXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtLWdlbmVyaWMvdGxiLmhcXHUwMDNlXFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2xpYi9iaXRleHQuYyBiL2FyY2gvc3BhcmMvbGliL2JpdGV4dC5jXFxuaW5kZXggMzJhNWMxZDk0NTljZC4uYzMwOWUyNzk3M2NlNiAxMDA2NDRcXG4tLS0gYS9hcmNoL3NwYXJjL2xpYi9iaXRleHQuY1xcbisrKyBiL2FyY2gvc3BhcmMvbGliL2JpdGV4dC5jXFxuQEAgLTIyLDggKzIyLDYgQEBcXG4gICogQGFsaWduOiByZXF1ZXN0ZWQgYWxpZ25tZW50XFxuICAqXFxuICAqIFJldHVybnMgb2Zmc2V0IGluIHRoZSBtYXAgb3IgLTEgaWYgb3V0IG9mIHNwYWNlLlxcbi0gKlxcbi0gKiBOb3Qgc2FmZSB0byBjYWxsIGZyb20gYW4gaW50ZXJydXB0ICh1c2VzIHNwaW5fbG9jaykuXFxuICAqL1xcbiBpbnQgYml0X21hcF9zdHJpbmdfZ2V0KHN0cnVjdCBiaXRfbWFwICp0LCBpbnQgbGVuLCBpbnQgYWxpZ24pXFxuIHtcXG5AQCAtMzEsNiArMjksNyBAQCBpbnQgYml0X21hcF9zdHJpbmdfZ2V0KHN0cnVjdCBiaXRfbWFwICp0LCBpbnQgbGVuLCBpbnQgYWxpZ24pXFxuIFxcdGludCBvZmZfbmV3O1xcbiBcXHRpbnQgYWxpZ24xO1xcbiBcXHRpbnQgaSwgY29sb3I7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcbiBcXHRpZiAodC1cXHUwMDNlbnVtX2NvbG9ycykge1xcbiBcXHRcXHQvKiBhbGlnbiBpcyBvdmVybG9hZGVkIHRvIGJlIHRoZSBwYWdlIGNvbG9yICovXFxuQEAgLTUwLDcgKzQ5LDcgQEAgaW50IGJpdF9tYXBfc3RyaW5nX2dldChzdHJ1Y3QgYml0X21hcCAqdCwgaW50IGxlbiwgaW50IGFsaWduKVxcbiBcXHRcXHRCVUcoKTtcXG4gXFx0Y29sb3IgXFx1MDAyNj0gYWxpZ24xO1xcbiBcXG4tXFx0c3Bpbl9sb2NrKFxcdTAwMjZ0LVxcdTAwM2Vsb2NrKTtcXG4rXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnQtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gXFx0aWYgKGxlbiBcXHUwMDNjIHQtXFx1MDAzZWxhc3Rfc2l6ZSlcXG4gXFx0XFx0b2Zmc2V0ID0gdC1cXHUwMDNlZmlyc3RfZnJlZTtcXG4gXFx0ZWxzZVxcbkBAIC02NCw3ICs2Myw3IEBAIGludCBiaXRfbWFwX3N0cmluZ19nZXQoc3RydWN0IGJpdF9tYXAgKnQsIGludCBsZW4sIGludCBhbGlnbilcXG4gXFx0XFx0aWYgKG9mZnNldCBcXHUwMDNlPSB0LVxcdTAwM2VzaXplKVxcbiBcXHRcXHRcXHRvZmZzZXQgPSAwO1xcbiBcXHRcXHRpZiAoY291bnQgKyBsZW4gXFx1MDAzZSB0LVxcdTAwM2VzaXplKSB7XFxuLVxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ0LVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2dC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiAvKiBQMyAqLyBwcmludGsoS0VSTl9FUlJcXG4gICBcXFwiYml0bWFwIG91dDogc2l6ZSAlZCB1c2VkICVkIG9mZiAlZCBsZW4gJWQgYWxpZ24gJWQgY291bnQgJWRcXFxcblxcXCIsXFxuICAgdC1cXHUwMDNlc2l6ZSwgdC1cXHUwMDNldXNlZCwgb2Zmc2V0LCBsZW4sIGFsaWduLCBjb3VudCk7XFxuQEAgLTkwLDcgKzg5LDcgQEAgaW50IGJpdF9tYXBfc3RyaW5nX2dldChzdHJ1Y3QgYml0X21hcCAqdCwgaW50IGxlbiwgaW50IGFsaWduKVxcbiBcXHRcXHRcXHRcXHRcXHR0LVxcdTAwM2VsYXN0X29mZiA9IDA7XFxuIFxcdFxcdFxcdFxcdHQtXFx1MDAzZXVzZWQgKz0gbGVuO1xcbiBcXHRcXHRcXHRcXHR0LVxcdTAwM2VsYXN0X3NpemUgPSBsZW47XFxuLVxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ0LVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2dC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiBcXHRcXHRcXHRcXHRyZXR1cm4gb2Zmc2V0O1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG5AQCAtMTAzLDEwICsxMDIsMTEgQEAgaW50IGJpdF9tYXBfc3RyaW5nX2dldChzdHJ1Y3QgYml0X21hcCAqdCwgaW50IGxlbiwgaW50IGFsaWduKVxcbiB2b2lkIGJpdF9tYXBfY2xlYXIoc3RydWN0IGJpdF9tYXAgKnQsIGludCBvZmZzZXQsIGludCBsZW4pXFxuIHtcXG4gXFx0aW50IGk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcbiBcXHRpZiAodC1cXHUwMDNldXNlZCBcXHUwMDNjIGxlbilcXG4gXFx0XFx0QlVHKCk7XFx0XFx0LyogTXVjaCB0b28gbGF0ZSB0byBkbyBhbnkgZ29vZCwgYnV0IGFsYXMuLi4gKi9cXG4tXFx0c3Bpbl9sb2NrKFxcdTAwMjZ0LVxcdTAwM2Vsb2NrKTtcXG4rXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnQtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGxlbjsgaSsrKSB7XFxuIFxcdFxcdGlmICh0ZXN0X2JpdChvZmZzZXQgKyBpLCB0LVxcdTAwM2VtYXApID09IDApXFxuIFxcdFxcdFxcdEJVRygpO1xcbkBAIC0xMTUsNyArMTE1LDcgQEAgdm9pZCBiaXRfbWFwX2NsZWFyKHN0cnVjdCBiaXRfbWFwICp0LCBpbnQgb2Zmc2V0LCBpbnQgbGVuKVxcbiBcXHRpZiAob2Zmc2V0IFxcdTAwM2MgdC1cXHUwMDNlZmlyc3RfZnJlZSlcXG4gXFx0XFx0dC1cXHUwMDNlZmlyc3RfZnJlZSA9IG9mZnNldDtcXG4gXFx0dC1cXHUwMDNldXNlZCAtPSBsZW47XFxuLVxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ0LVxcdTAwM2Vsb2NrKTtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2dC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiB9XFxuIFxcbiB2b2lkIGJpdF9tYXBfaW5pdChzdHJ1Y3QgYml0X21hcCAqdCwgdW5zaWduZWQgbG9uZyAqbWFwLCBpbnQgc2l6ZSlcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tbS9zcm1tdS5jIGIvYXJjaC9zcGFyYy9tbS9zcm1tdS5jXFxuaW5kZXggOWE3NDkwMmFkMTgxNC4uMmEyYzdiZDIxMDExNCAxMDA2NDRcXG4tLS0gYS9hcmNoL3NwYXJjL21tL3NybW11LmNcXG4rKysgYi9hcmNoL3NwYXJjL21tL3NybW11LmNcXG5AQCAtMzU5LDE5ICszNTksMzkgQEAgcGd0YWJsZV90IHB0ZV9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuIFxcdHJldHVybiBwdGVwO1xcbiB9XFxuIFxcbi12b2lkIHB0ZV9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcHRlcClcXG4rc3RhdGljIHZvaWQgX19wdGVfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHB0ZXApXFxuIHtcXG4rXFx0Y29uc3QgYm9vbCBwcm9jZXNzX2NvbnRleHQgPSBtbTtcXG4gXFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuIFxcbiBcXHRwYWdlID0gcGZuX3RvX3BhZ2UoX19ub2NhY2hlX3BhKCh1bnNpZ25lZCBsb25nKXB0ZXApIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbi1cXHRzcGluX2xvY2soXFx1MDAyNm1tLVxcdTAwM2VwYWdlX3RhYmxlX2xvY2spO1xcbitcXHRpZiAocHJvY2Vzc19jb250ZXh0KVxcbitcXHRcXHRzcGluX2xvY2soXFx1MDAyNm1tLVxcdTAwM2VwYWdlX3RhYmxlX2xvY2spO1xcbiBcXHRpZiAocGFnZV9yZWZfZGVjX3JldHVybihwYWdlKSA9PSAxKVxcbiBcXHRcXHRwYWdldGFibGVfZHRvcihwYWdlX3B0ZGVzYyhwYWdlKSk7XFxuLVxcdHNwaW5fdW5sb2NrKFxcdTAwMjZtbS1cXHUwMDNlcGFnZV90YWJsZV9sb2NrKTtcXG4rXFx0aWYgKHByb2Nlc3NfY29udGV4dClcXG4rXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNm1tLVxcdTAwM2VwYWdlX3RhYmxlX2xvY2spO1xcbiBcXG4gXFx0c3JtbXVfZnJlZV9ub2NhY2hlKHB0ZXAsIFNSTU1VX1BURV9UQUJMRV9TSVpFKTtcXG4gfVxcbiBcXG4rdm9pZCBwdGVfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHB0ZXApXFxuK3tcXG4rXFx0X19wdGVfZnJlZShtbSwgcHRlcCk7XFxuK31cXG4rXFxuK3ZvaWQgX190bGJfcmVtb3ZlX3RhYmxlKHZvaWQgKnRhYmxlKVxcbit7XFxuK1xcdGNvbnN0IHVuc2lnbmVkIGxvbmcgZW5jb2RlZCA9ICh1bnNpZ25lZCBsb25nKXRhYmxlO1xcbitcXHRjb25zdCB1bnNpZ25lZCBsb25nIGFkZHIgPSBlbmNvZGVkIFxcdTAwMjYgfjFVTDtcXG4rXFx0Y29uc3QgYm9vbCBpc19wbWQgPSBlbmNvZGVkIFxcdTAwMjYgMTtcXG4rXFxuK1xcdGlmIChpc19wbWQpXFxuK1xcdFxcdGZyZWVfcG1kX2Zhc3QoKHBtZF90ICopYWRkcik7XFxuK1xcdGVsc2UgLyogQ2FsbGVkIGZyb20gc29mdGlycSBjb250ZXh0LCBubyBtbS4gKi9cXG4rXFx0XFx0X19wdGVfZnJlZShOVUxMLCAocGd0YWJsZV90KWFkZHIpO1xcbit9XFxuK1xcbiAvKiBjb250ZXh0IGhhbmRsaW5nIC0gYSBkeW5hbWljYWxseSBzaXplZCBwb29sIGlzIHVzZWQgKi9cXG4gI2RlZmluZSBOT19DT05URVhUXFx0LTFcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gvdW0vS2NvbmZpZyBiL2FyY2gvdW0vS2NvbmZpZ1xcbmluZGV4IGQ5NTQxZDEzZDllYjAuLjk0YjhmZjcwZjU3OGIgMTAwNjQ0XFxuLS0tIGEvYXJjaC91bS9LY29uZmlnXFxuKysrIGIvYXJjaC91bS9LY29uZmlnXFxuQEAgLTQ0LDcgKzQ0LDYgQEAgY29uZmlnIFVNTFxcbiBcXHRzZWxlY3QgSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTXFxuIFxcdHNlbGVjdCBUSFJFQURfSU5GT19JTl9UQVNLXFxuIFxcdHNlbGVjdCBTUEFSU0VfSVJRXFxuLVxcdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXFxuIFxcbiBjb25maWcgTU1VXFxuIFxcdGJvb2xcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWdcXG5pbmRleCBhOGMzYjNkMzFhMjc2Li42ZTVlNDYyZWMwNTlhIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L0tjb25maWdcXG4rKysgYi9hcmNoL3g4Ni9LY29uZmlnXFxuQEAgLTI4Myw3ICsyODMsNiBAQCBjb25maWcgWDg2XFxuIFxcdHNlbGVjdCBIQVZFX1BFUkZfUkVHU1xcbiBcXHRzZWxlY3QgSEFWRV9QRVJGX1VTRVJfU1RBQ0tfRFVNUFxcbiBcXHRzZWxlY3QgQVNZTkNfS0VSTkVMX1BHVEFCTEVfRlJFRVxcdGlmIElPTU1VX1NWQVxcbi1cXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxcbiBcXHRzZWxlY3QgTU1VX0dBVEhFUl9NRVJHRV9WTUFTXFxuIFxcdHNlbGVjdCBIQVZFX1BPU0lYX0NQVV9USU1FUlNfVEFTS19XT1JLXFxuIFxcdHNlbGVjdCBIQVZFX1JFR1NfQU5EX1NUQUNLX0FDQ0VTU19BUElcXG5kaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vdGxiLmggYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS90bGIuaFxcbmluZGV4IDhjM2NlYjQyNzAxODAuLjZmYjdiNzgxNTRmNjIgMTAwNjQ0XFxuLS0tIGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vdGxiLmhcXG4rKysgYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS90bGIuaFxcbkBAIC0xNiw3ICsxNiw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtLWdlbmVyaWMvdGxiLmhcXHUwMDNlXFxuIFxcbi0jZGVmaW5lIF9fcHRlX2ZyZWVfdGxiKHRsYiwgcHRlLCBhZGRyZXNzKVxcdHB0ZV9mcmVlKCh0bGIpLVxcdTAwM2VtbSwgcHRlKVxcbisjZGVmaW5lIF9fcHRlX2ZyZWVfdGxiKHRsYiwgcHRlLCBhZGRyZXNzKVxcdHRsYl9yZW1vdmVfcHRkZXNjKCh0bGIpLCBwYWdlX3B0ZGVzYyhwdGUpKVxcbiBcXG4gdm9pZCBjaGVja190bGJfc2FuaXR5KHZvaWQpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmhcXG5pbmRleCBiZGNjMjc3OGFjNjRmLi4wNDRkYWJjMWZlOWNiIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmhcXG4rKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3RsYi5oXFxuQEAgLTY3LDExICs2Nyw4IEBAXFxuICAqICAtIHRsYl9yZW1vdmVfdGFibGUoKVxcbiAgKlxcbiAgKiAgICB0bGJfcmVtb3ZlX3RhYmxlKCkgaXMgdGhlIGJhc2ljIHByaW1pdGl2ZSB0byBmcmVlIHBhZ2UtdGFibGUgZGlyZWN0b3JpZXNcXG4tICogICAgKF9fcCpfZnJlZV90bGIoKSkuICBJbiBpdCdzIG1vc3QgcHJpbWl0aXZlIGZvcm0gaXQgaXMgYW4gYWxpYXMgZm9yXFxuLSAqICAgIHRsYl9yZW1vdmVfcGFnZSgpIGJlbG93LCBmb3Igd2hlbiBwYWdlIGRpcmVjdG9yaWVzIGFyZSBwYWdlcyBhbmQgaGF2ZSBub1xcbi0gKiAgICBhZGRpdGlvbmFsIGNvbnN0cmFpbnRzLlxcbi0gKlxcbi0gKiAgICBTZWUgYWxzbyBNTVVfR0FUSEVSX1RBQkxFX0ZSRUUgYW5kIE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUuXFxuKyAqICAgIChfX3AqX2ZyZWVfdGxiKCkpLiAgUGFnZSBkaXJlY3RvcmllcyBhcmUgZnJlZWQgYWZ0ZXIgYW4gUkNVIGdyYWNlXFxuKyAqICAgIHBlcmlvZCAtIHNlZSB0aGUgY29tbWVudCBpbiBtbS9tbXVfZ2F0aGVyLmMuXFxuICAqXFxuICAqICAtIHRsYl9yZW1vdmVfcGFnZSgpIC8gdGxiX3JlbW92ZV9wYWdlX3NpemUoKVxcbiAgKiAgLSBfX3RsYl9yZW1vdmVfZm9saW9fcGFnZXMoKSAvIF9fdGxiX3JlbW92ZV9wYWdlX3NpemUoKVxcbkBAIC0xNTEsMjQgKzE0OCwxNSBAQFxcbiAgKiAgVGhpcyBtaWdodCBiZSB1c2VmdWwgaWYgeW91ciBhcmNoaXRlY3R1cmUgaGFzIHNpemUgc3BlY2lmaWMgVExCXFxuICAqICBpbnZhbGlkYXRpb24gaW5zdHJ1Y3Rpb25zLlxcbiAgKlxcbi0gKiAgTU1VX0dBVEhFUl9UQUJMRV9GUkVFXFxuLSAqXFxuLSAqICBUaGlzIHByb3ZpZGVzIHRsYl9yZW1vdmVfdGFibGUoKSwgdG8gYmUgdXNlZCBpbnN0ZWFkIG9mIHRsYl9yZW1vdmVfcGFnZSgpXFxuLSAqICBmb3IgcGFnZSBkaXJlY3RvcmVzIChfX3AqX2ZyZWVfdGxiKCkpLlxcbi0gKlxcbi0gKiAgVXNlZnVsIGlmIHlvdXIgYXJjaGl0ZWN0dXJlIGhhcyBub24tcGFnZSBwYWdlIGRpcmVjdG9yaWVzLlxcbisgKiAgUGFnZSBkaXJlY3RvcmllcyAoX19wKl9mcmVlX3RsYigpKSBhcmUgYWx3YXlzIGZyZWVkIHZpYSB0bGJfcmVtb3ZlX3RhYmxlKCksXFxuKyAqICBhZnRlciBhbiBSQ1UgZ3JhY2UgcGVyaW9kIChzZWUgbW0vbW11X2dhdGhlci5jKS5cXG4gICpcXG4tICogIFdoZW4gdXNlZCwgYW4gYXJjaGl0ZWN0dXJlIGlzIGV4cGVjdGVkIHRvIHByb3ZpZGUgX190bGJfcmVtb3ZlX3RhYmxlKCkgb3JcXG4tICogIHVzZSB0aGUgZ2VuZXJpYyBfX3RsYl9yZW1vdmVfdGFibGUoKSwgd2hpY2ggZG9lcyB0aGUgYWN0dWFsIGZyZWVpbmcgb2YgdGhlc2VcXG4tICogIHBhZ2VzLlxcbisgKiBUaGlzIHNlcmlhbGlzZXMgYWdhaW5zdCBzb2Z0d2FyZSBwYWdlLXRhYmxlIHdhbGtlcnMsIGluY2x1ZGluZyBhcmNoaXRlY3R1cmVzXFxuKyAqIHdoaWNoIGRvIG5vdCB1c2UgSVBJcyBmb3IgcmVtb3RlIFRMQiBpbnZhbGlkYXRlcy5cXG4gICpcXG4tICogIE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcXG4tICpcXG4tICogIExpa2UgTU1VX0dBVEhFUl9UQUJMRV9GUkVFLCBhbmQgYWRkcyBzZW1pLVJDVSBzZW1hbnRpY3MgdG8gdGhlIGZyZWUgKHNlZVxcbi0gKiAgY29tbWVudCBiZWxvdykuXFxuLSAqXFxuLSAqICBVc2VmdWwgaWYgeW91ciBhcmNoaXRlY3R1cmUgZG9lc24ndCB1c2UgSVBJcyBmb3IgcmVtb3RlIFRMQiBpbnZhbGlkYXRlc1xcbi0gKiAgYW5kIHRoZXJlZm9yZSBkb2Vzbid0IG5hdHVyYWxseSBzZXJpYWxpemUgd2l0aCBzb2Z0d2FyZSBwYWdlLXRhYmxlIHdhbGtlcnMuXFxuKyAqICBBbiBhcmNoaXRlY3R1cmUgaXMgZXhwZWN0ZWQgdG8gcHJvdmlkZSBfX3RsYl9yZW1vdmVfdGFibGUoKSAoc2VlXFxuKyAqICBIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRSkgb3IgdXNlIHRoZSBnZW5lcmljIF9fdGxiX3JlbW92ZV90YWJsZSgpLCB3aGljaFxcbisgKiAgZG9lcyB0aGUgYWN0dWFsIGZyZWVpbmcgb2YgdGhlc2UgcGFnZXMuXFxuICAqXFxuICAqICBNTVVfR0FUSEVSX05PX0ZMVVNIX0NBQ0hFXFxuICAqXFxuQEAgLTIwMCwxMiArMTg4LDggQEBcXG4gICogIHZhcmlvdXMgcHRlcF9nZXRfYW5kX2NsZWFyKCkgZnVuY3Rpb25zLlxcbiAgKi9cXG4gXFxuLSNpZmRlZiBDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFXFxuLVxcbiBzdHJ1Y3QgbW11X3RhYmxlX2JhdGNoIHtcXG4tI2lmZGVmIENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXFxuIFxcdHN0cnVjdCByY3VfaGVhZFxcdFxcdHJjdTtcXG4tI2VuZGlmXFxuIFxcdHVuc2lnbmVkIGludFxcdFxcdG5yO1xcbiBcXHR2b2lkXFx0XFx0XFx0KnRhYmxlc1tdO1xcbiB9O1xcbkBAIC0yMjQsMjMgKzIwOCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3RsYl9yZW1vdmVfdGFibGUodm9pZCAqdGFibGUpXFxuIFxcbiBleHRlcm4gdm9pZCB0bGJfcmVtb3ZlX3RhYmxlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHZvaWQgKnRhYmxlKTtcXG4gXFxuLSNlbHNlIC8qICFDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFICovXFxuLVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgdGxiX3JlbW92ZV9wYWdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCBwYWdlICpwYWdlKTtcXG4tLypcXG4tICogV2l0aG91dCBNTVVfR0FUSEVSX1RBQkxFX0ZSRUUgdGhlIGFyY2hpdGVjdHVyZSBpcyBhc3N1bWVkIHRvIGhhdmUgcGFnZSBiYXNlZFxcbi0gKiBwYWdlIGRpcmVjdG9yaWVzIGFuZCB3ZSBjYW4gdXNlIHRoZSBub3JtYWwgcGFnZSBiYXRjaGluZyB0byBmcmVlIHRoZW0uXFxuLSAqL1xcbi1zdGF0aWMgaW5saW5lIHZvaWQgdGxiX3JlbW92ZV90YWJsZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCB2b2lkICp0YWJsZSlcXG4te1xcbi1cXHRzdHJ1Y3QgcHRkZXNjICpwdGRlc2MgPSAoc3RydWN0IHB0ZGVzYyAqKXRhYmxlO1xcbi1cXG4tXFx0cGFnZXRhYmxlX2R0b3IocHRkZXNjKTtcXG4tXFx0dGxiX3JlbW92ZV9wYWdlKHRsYiwgcHRkZXNjX3BhZ2UocHRkZXNjKSk7XFxuLX1cXG4tI2VuZGlmIC8qIENPTkZJR19NTVVfR0FUSEVSX1RBQkxFX0ZSRUUgKi9cXG4tXFxuLSNpZmRlZiBDT05GSUdfTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxcbiAvKlxcbiAgKiBUaGlzIGFsbG93cyBhbiBhcmNoaXRlY3R1cmUgdGhhdCBkb2VzIG5vdCB1c2UgdGhlIGxpbnV4IHBhZ2UtdGFibGVzIGZvclxcbiAgKiBoYXJkd2FyZSB0byBza2lwIHRoZSBUTEJJIHdoZW4gZnJlZWluZyBwYWdlIHRhYmxlcy5cXG5AQCAtMjUzLDE5ICsyMjAsNiBAQCB2b2lkIHRsYl9yZW1vdmVfdGFibGVfc3luY19vbmUodm9pZCk7XFxuIFxcbiB2b2lkIHRsYl9yZW1vdmVfdGFibGVfc3luY19yY3Uodm9pZCk7XFxuIFxcbi0jZWxzZVxcbi1cXG4tI2lmZGVmIHRsYl9uZWVkc190YWJsZV9pbnZhbGlkYXRlXFxuLSNlcnJvciB0bGJfbmVlZHNfdGFibGVfaW52YWxpZGF0ZSgpIHJlcXVpcmVzIE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcXG4tI2VuZGlmXFxuLVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgdGxiX3JlbW92ZV90YWJsZV9zeW5jX29uZSh2b2lkKSB7IH1cXG4tXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfcmN1KHZvaWQpIHsgfVxcbi1cXG4tI2VuZGlmIC8qIENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFICovXFxuLVxcbi1cXG4gI2lmbmRlZiBDT05GSUdfTU1VX0dBVEhFUl9OT19HQVRIRVJcXG4gLypcXG4gICogSWYgd2UgY2FuJ3QgYWxsb2NhdGUgYSBwYWdlIHRvIG1ha2UgYSBiaWcgYmF0Y2ggb2YgcGFnZSBwb2ludGVyc1xcbkBAIC0zMjUsOSArMjc5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHRsYl9mbHVzaF9ybWFwcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3RcXG4gc3RydWN0IG1tdV9nYXRoZXIge1xcbiBcXHRzdHJ1Y3QgbW1fc3RydWN0XFx0Km1tO1xcbiBcXG4tI2lmZGVmIENPTkZJR19NTVVfR0FUSEVSX1RBQkxFX0ZSRUVcXG4gXFx0c3RydWN0IG1tdV90YWJsZV9iYXRjaFxcdCpiYXRjaDtcXG4tI2VuZGlmXFxuIFxcbiBcXHR1bnNpZ25lZCBsb25nXFx0XFx0c3RhcnQ7XFxuIFxcdHVuc2lnbmVkIGxvbmdcXHRcXHRlbmQ7XFxuZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnXFxuaW5kZXggYzFkZGY1OWMwZDcxYS4uYmM3YmVmYWZiNDdiNSAxMDA2NDRcXG4tLS0gYS9tbS9LY29uZmlnXFxuKysrIGIvbW0vS2NvbmZpZ1xcbkBAIC0xNDY1LDcgKzE0NjUsNyBAQCBjb25maWcgSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEVcXG4gXFxuIGNvbmZpZyBQVF9SRUNMQUlNXFxuIFxcdGRlZl9ib29sIHlcXG4tXFx0ZGVwZW5kcyBvbiBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFIFxcdTAwMjZcXHUwMDI2ICFIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRVxcbitcXHRkZXBlbmRzIG9uIE1NVSBcXHUwMDI2XFx1MDAyNiAhSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEVcXG4gXFx0aGVscFxcbiBcXHQgIFRyeSB0byByZWNsYWltIGVtcHR5IHVzZXIgcGFnZSB0YWJsZSBwYWdlcyBpbiBwYXRocyBvdGhlciB0aGFuIG11bm1hcFxcbiBcXHQgIGFuZCBleGl0X21tYXAgcGF0aC5cXG5kaWZmIC0tZ2l0IGEvbW0vZ3VwLmMgYi9tbS9ndXAuY1xcbmluZGV4IGViODk4ZWExZWUyMmUuLjYzYjQzNWVjNjA1YzggMTAwNjQ0XFxuLS0tIGEvbW0vZ3VwLmNcXG4rKysgYi9tbS9ndXAuY1xcbkBAIC0yNzAwLDggKzI3MDAsOSBAQCBFWFBPUlRfU1lNQk9MKGdldF91c2VyX3BhZ2VzX3VubG9ja2VkKTtcXG4gICogQmVmb3JlIGFjdGl2YXRpbmcgdGhpcyBjb2RlLCBwbGVhc2UgYmUgYXdhcmUgdGhhdCB0aGUgZm9sbG93aW5nIGFzc3VtcHRpb25zXFxuICAqIGFyZSBjdXJyZW50bHkgbWFkZTpcXG4gICpcXG4tICogICopIEVpdGhlciBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFIGlzIGVuYWJsZWQsIGFuZCB0bGJfcmVtb3ZlX3RhYmxlKCkgaXMgdXNlZCB0b1xcbi0gKiAgZnJlZSBwYWdlcyBjb250YWluaW5nIHBhZ2UgdGFibGVzIG9yIFRMQiBmbHVzaGluZyByZXF1aXJlcyBJUEkgYnJvYWRjYXN0LlxcbisgKiAgKikgdGxiX3JlbW92ZV90YWJsZSgpIGlzIHVzZWQgdG8gZnJlZSBwYWdlcyBjb250YWluaW5nIHBhZ2UgdGFibGVzLCB3aXRoXFxuKyAqICB0aGUgZnJlZSBkZWZlcnJlZCB1bnRpbCBhbiBSQ1UgZ3JhY2UgcGVyaW9kIGhhcyBlbGFwc2VkIChzZWVcXG4rICogIG1tL21tdV9nYXRoZXIuYykuXFxuICAqXFxuICAqICAqKSBwdGVzIGNhbiBiZSByZWFkIGF0b21pY2FsbHkgYnkgdGhlIGFyY2hpdGVjdHVyZS5cXG4gICpcXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5pbmRleCA1NDQ5NGMzZmE5ODM1Li41MDVmN2I2MmZmMjgxIDEwMDY0NFxcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXFxuQEAgLTI0NzYsNyArMjQ3Niw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB6YXBfZGVwb3NpdGVkX3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKVxcbiBcXHRwZ3RhYmxlX3QgcGd0YWJsZTtcXG4gXFxuIFxcdHBndGFibGUgPSBwZ3RhYmxlX3RyYW5zX2h1Z2Vfd2l0aGRyYXcobW0sIHBtZCk7XFxuLVxcdHB0ZV9mcmVlKG1tLCBwZ3RhYmxlKTtcXG4rXFx0cHRlX2ZyZWVfZGVmZXIobW0sIHBndGFibGUpO1xcbiBcXHRtbV9kZWNfbnJfcHRlcyhtbSk7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL21tL21tdV9nYXRoZXIuYyBiL21tL21tdV9nYXRoZXIuY1xcbmluZGV4IDM5ODVkODU2ZGU3ZjkuLjJhNzJhOTY4Njc3M2EgMTAwNjQ0XFxuLS0tIGEvbW0vbW11X2dhdGhlci5jXFxuKysrIGIvbW0vbW11X2dhdGhlci5jXFxuQEAgLTIxOCw4ICsyMTgsNiBAQCBib29sIF9fdGxiX3JlbW92ZV9wYWdlX3NpemUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBwYWdlX1xcbiBcXG4gI2VuZGlmIC8qIE1NVV9HQVRIRVJfTk9fR0FUSEVSICovXFxuIFxcbi0jaWZkZWYgQ09ORklHX01NVV9HQVRIRVJfVEFCTEVfRlJFRVxcbi1cXG4gc3RhdGljIHZvaWQgX190bGJfcmVtb3ZlX3RhYmxlX2ZyZWUoc3RydWN0IG1tdV90YWJsZV9iYXRjaCAqYmF0Y2gpXFxuIHtcXG4gXFx0aW50IGk7XFxuQEAgLTIzMCwxMCArMjI4LDggQEAgc3RhdGljIHZvaWQgX190bGJfcmVtb3ZlX3RhYmxlX2ZyZWUoc3RydWN0IG1tdV90YWJsZV9iYXRjaCAqYmF0Y2gpXFxuIFxcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyliYXRjaCk7XFxuIH1cXG4gXFxuLSNpZmRlZiBDT05GSUdfTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxcbi1cXG4gLypcXG4tICogU2VtaSBSQ1UgZnJlZWluZyBvZiB0aGUgcGFnZSBkaXJlY3Rvcmllcy5cXG4rICogUkNVIGZyZWVpbmcgb2YgdGhlIHBhZ2UgZGlyZWN0b3JpZXMuXFxuICAqXFxuICAqIFRoaXMgaXMgbmVlZGVkIGJ5IHNvbWUgYXJjaGl0ZWN0dXJlcyB0byBpbXBsZW1lbnQgc29mdHdhcmUgcGFnZXRhYmxlIHdhbGtlcnMuXFxuICAqXFxuQEAgLTI1OSwxMyArMjU1LDEzIEBAIHN0YXRpYyB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZV9mcmVlKHN0cnVjdCBtbXVfdGFibGVfYmF0Y2ggKmJhdGNoKVxcbiAgKiBtZWFucy5cXG4gICpcXG4gICogV2hhdCB3ZSBkbyBpcyBiYXRjaCB0aGUgZnJlZWQgZGlyZWN0b3J5IHBhZ2VzICh0YWJsZXMpIGFuZCBSQ1UgZnJlZSB0aGVtLlxcbi0gKiBXZSB1c2UgdGhlIHNjaGVkIFJDVSB2YXJpYW50LCBhcyB0aGF0IGd1YXJhbnRlZXMgdGhhdCBJUlEvcHJlZW1wdCBkaXNhYmxpbmdcXG4tICogaG9sZHMgb2ZmIGdyYWNlIHBlcmlvZHMuXFxuKyAqIERpc2FibGluZyBJUlFzIG9yIHByZWVtcHRpb24gaG9sZHMgb2ZmIFJDVSBncmFjZSBwZXJpb2RzLCBzbyB0aGlzIHByb3RlY3RzXFxuKyAqIGJvdGggcmN1X3JlYWRfbG9jaygpIGFuZCBJUlEtZGlzYWJsaW5nIHdhbGtlcnMuXFxuICAqXFxuICAqIEhvd2V2ZXIsIGluIG9yZGVyIHRvIGJhdGNoIHRoZXNlIHBhZ2VzIHdlIG5lZWQgdG8gYWxsb2NhdGUgc3RvcmFnZSwgdGhpc1xcbiAgKiBhbGxvY2F0aW9uIGlzIGRlZXAgaW5zaWRlIHRoZSBNTSBjb2RlIGFuZCBjYW4gdGh1cyBlYXNpbHkgZmFpbCBvbiBtZW1vcnlcXG4tICogcHJlc3N1cmUuIFRvIGd1YXJhbnRlZSBwcm9ncmVzcyB3ZSBmYWxsIGJhY2sgdG8gc2luZ2xlIHRhYmxlIGZyZWVpbmcsIHNlZVxcbi0gKiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGxiX3JlbW92ZV90YWJsZV9vbmUoKS5cXG4rICogcHJlc3N1cmUuIFRvIGd1YXJhbnRlZSBwcm9ncmVzcyB3ZSBmYWxsIGJhY2sgdG8gc2luZ2xlIHRhYmxlIGZyZWVpbmcsIHdoaWNoXFxuKyAqIGlzIGFsc28gUkNVLWRlZmVycmVkIC0gc2VlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0bGJfcmVtb3ZlX3RhYmxlX29uZSgpLlxcbiAgKlxcbiAgKi9cXG4gXFxuQEAgLTMxNSwxNSArMzExLDYgQEAgdm9pZCB0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfcmN1KHZvaWQpXFxuIFxcdHN5bmNocm9uaXplX3JjdSgpO1xcbiB9XFxuIFxcbi0jZWxzZSAvKiAhQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgKi9cXG4tXFxuLXN0YXRpYyB2b2lkIHRsYl9yZW1vdmVfdGFibGVfZnJlZShzdHJ1Y3QgbW11X3RhYmxlX2JhdGNoICpiYXRjaClcXG4te1xcbi1cXHRfX3RsYl9yZW1vdmVfdGFibGVfZnJlZShiYXRjaCk7XFxuLX1cXG4tXFxuLSNlbmRpZiAvKiBDT05GSUdfTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSAqL1xcbi1cXG4gLypcXG4gICogSWYgd2Ugd2FudCB0bGJfcmVtb3ZlX3RhYmxlKCkgdG8gaW1wbHkgVExCIGludmFsaWRhdGVzLlxcbiAgKi9cXG5AQCAtNDAzLDEzICszOTAsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdGxiX3RhYmxlX2luaXQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYilcXG4gXFx0dGxiLVxcdTAwM2ViYXRjaCA9IE5VTEw7XFxuIH1cXG4gXFxuLSNlbHNlIC8qICFDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFICovXFxuLVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgdGxiX3RhYmxlX2ZsdXNoKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIpIHsgfVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgdGxiX3RhYmxlX2luaXQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYikgeyB9XFxuLVxcbi0jZW5kaWYgLyogQ09ORklHX01NVV9HQVRIRVJfVEFCTEVfRlJFRSAqL1xcbi1cXG4gc3RhdGljIHZvaWQgdGxiX2ZsdXNoX21tdV9mcmVlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIpXFxuIHtcXG4gXFx0dGxiX3RhYmxlX2ZsdXNoKHRsYik7XFxuZGlmZiAtLWdpdCBhL21tL3BndGFibGUtZ2VuZXJpYy5jIGIvbW0vcGd0YWJsZS1nZW5lcmljLmNcXG5pbmRleCBiOTFiMWE5ODAyOWM3Li5mZjhmZjM3MDY0ODUzIDEwMDY0NFxcbi0tLSBhL21tL3BndGFibGUtZ2VuZXJpYy5jXFxuKysrIGIvbW0vcGd0YWJsZS1nZW5lcmljLmNcXG5AQCAtMzg2LDkgKzM4NiwyMSBAQCBwdGVfdCAqcHRlX29mZnNldF9tYXBfcndfbm9sb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLFxcbiAgKiBiZSByZWFkLW9ubHkvcmVhZC13cml0ZSBwcm90ZWN0ZWQuXFxuICAqXFxuICAqIE5vdGUgdGhhdCBmcmVlX3BndGFibGVzKCksIHVzZWQgYWZ0ZXIgdW5tYXBwaW5nIGRldGFjaGVkIHZtYXMsIG9yIHdoZW5cXG4tICogZXhpdGluZyB0aGUgd2hvbGUgbW0sIGRvZXMgbm90IHRha2UgcGFnZSB0YWJsZSBsb2NrIGJlZm9yZSBmcmVlaW5nIGEgcGFnZVxcbi0gKiB0YWJsZSwgYW5kIG1heSBub3QgdXNlIFJDVSBhdCBhbGw6IFxcXCJvdXRzaWRlcnNcXFwiIGxpa2Uga2h1Z2VwYWdlZCBzaG91bGQgYXZvaWRcXG4tICogcHRlX29mZnNldF9tYXAoKSBhbmQgY28gb25jZSB0aGUgdm1hIGlzIGRldGFjaGVkIGZyb20gbW0gb3IgbW1fdXNlcnMgaXMgemVyby5cXG4rICogZXhpdGluZyB0aGUgd2hvbGUgbW0sIGRvZXMgbm90IHRha2UgdGhlIHBhZ2UgdGFibGUgbG9jayBiZWZvcmUgZnJlZWluZyBhXFxuKyAqIHRhYmxlLlxcbisgKlxcbisgKiBIb3dldmVyLCB0aGUgUE1EIGVudHJ5IGlzIGNsZWFyZWQgZmlyc3QsIGFuZCB0aGUgdGFibGUgZnJlZWQgb25seSBhZnRlclxcbisgKiBhbiBSQ1UgZ3JhY2UgcGVyaW9kLCBzbyBhIHdhbGtlciB0aGF0IG1hcHBlZCB0aGUgdGFibGUgdW5kZXJcXG4rICogcmN1X3JlYWRfbG9jaygpIHN0YXlzIHNhZmUsIGFuZCB0aGUgcG1kX3NhbWUoKSByZWNoZWNrIGluXFxuKyAqIHB0ZV9vZmZzZXRfbWFwX2xvY2soKSBkZXRlY3RzIHRoZSB0ZWFyZG93bi5cXG4rICpcXG4rICogVGhlcmVmb3JlIGl0IGlzIHNhZmUgZm9yIFxcXCJvdXRzaWRlcnNcXFwiIGxpa2Uga2h1Z2VwYWdlZCB0byB1c2VcXG4rICogcHRlX29mZnNldF9tYXAoKSBhbmQgY28uIGZvciBWTUFzIHRoYXQgbWlnaHQgYmUgdW5kZXJnb2luZyBwYWdlIHRhYmxlXFxuKyAqIHRlYXJkb3duLlxcbisgKlxcbisgKiBOb3RlIHRoYXQgdGhlIFBHRCBpdHNlbGYgaXMgZnJlZWQgYXQgbW1kcm9wKCkgdGltZSwgbm90IHVuZGVyIFJDVSAtIHNvIHRoZVxcbisgKiB3YWxrZXIgbXVzdCBrZWVwIHRoZSBtbSBhbGl2ZSB2aWEgbW1ncmFiKCkuIFdpdGggdGhhdCBoZWxkLCB3YWxraW5nIHJlbWFpbnNcXG4rICogc2FmZSBldmVuIG9uY2UgbW1fdXNlcnMgaGFzIHJlYWNoZWQgemVyby5cXG4gICovXFxuIHB0ZV90ICpwdGVfb2Zmc2V0X21hcF9sb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLFxcbiBcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGFkZHIsIHNwaW5sb2NrX3QgKipwdGxwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo0Mzo1NC4xNDI0OTAzNjhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ5MzA3MjU5NDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1NVVwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0bGJfcmVtb3ZlX3RhYmxlXCIsXG4gICAgXCJwdGVfZnJlZV9kZWZlclwiLFxuICAgIFwiemFwX2h1Z2VfcG1kXCIsXG4gICAgXCJ0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfcmN1XCIsXG4gICAgXCJ0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfb25lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdW5pZmllcyBhbmQgZW5mb3JjZXMgUkNVLWRlZmVycmVkIGZyZWVpbmcgZm9yIHBhZ2UgdGFibGUgcGFnZXMgYWNyb3NzIGFsbCBhcmNoaXRlY3R1cmVzIGJ5IHJlbW92aW5nIGNvbmRpdGlvbmFsIE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBzdGFuZGFyZGl6aW5nIG9uIHRsYl9yZW1vdmVfdGFibGUoKS4gSXQgYWxzbyBtb2RpZmllcyBUSFAgZGVwb3NpdGVkIHRhYmxlIGhhbmRsaW5nIGluIG1tL2h1Z2VfbWVtb3J5LmMgdG8gdXNlIHB0ZV9mcmVlX2RlZmVyKCkgdW5kZXIgUkNVIGFuZCB1cGRhdGVzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBwYWdlIHRhYmxlIHJlbW92YWwgcm91dGluZXMuIFRoZXNlIGNvcmUgTU0gbG9naWMgY2hhbmdlcyBhZmZlY3QgVExCIGdhdGhlcmluZywgcGFnZSB0YWJsZSB0ZWFyaW5nIGRvd24sIGFuZCBtZW1vcnkgcmVjbGFpbSBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjhlOGUyMmZiMmY5MjJhNWQ5OGFjMjcyYzA0YTM5ZmI1ZDBhN2VlMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDEgMjM6NDM6NTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdFxuaW5kZXggYTcyOTZmMjUxNzk5Yy4uMWU2NWIxMzlmMzU1OSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3RcbkBAIC01MzcsNiArNTM3LDEyIEBAIFdlIGVzdGFibGlzaCBiYXNpYyBsb2NraW5nIHJ1bGVzIHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCBwYWdlIHRhYmxlczpcbiAqIFdoZW4gY2hhbmdpbmcgYSBwYWdlIHRhYmxlIGVudHJ5IHRoZSBwYWdlIHRhYmxlIGxvY2sgZm9yIHRoYXQgcGFnZSB0YWJsZVxuICAgKiptdXN0KiogYmUgaGVsZCwgZXhjZXB0IGlmIHlvdSBjYW4gc2FmZWx5IGFzc3VtZSBub2JvZHkgY2FuIGFjY2VzcyB0aGUgcGFnZVxuICAgdGFibGVzIGNvbmN1cnJlbnRseSAoc3VjaCBhcyBvbiBpbnZvY2F0aW9uIG9mIDpjOmZ1bmM6YCFmcmVlX3BndGFibGVzYCkuXG4rKiBQYWdlIHRhYmxlcyBtYXkgYmUgKndhbGtlZCogdW5kZXIgUkNVIGFsb25lLCBhcyBwYWdlIHRhYmxlcyBhcmUgZnJlZWQgb25seVxuKyAgYWZ0ZXIgYW4gUkNVIGdyYWNlIHBlcmlvZCBoYXMgZWxhcHNlZC4gSG93ZXZlciwgYW55IGVudHJ5IGZvdW5kIG11c3QgYmVcbisgIHJldmFsaWRhdGVkIGFmdGVyIHRoZSBwYWdlIHRhYmxlIGxvY2sgaXMgdGFrZW4gKHN1Y2ggYXMgdGhlXG4rICA6YzpmdW5jOmAhcG1kX3NhbWVgIHJlY2hlY2sgcGVyZm9ybWVkIGJ5IDpjOmZ1bmM6YCFwdGVfb2Zmc2V0X21hcF9sb2NrYClcbisgIGJlZm9yZSBpdCBpcyBhY3RlZCB1cG9uLiBDaGFuZ2luZyBhbiBlbnRyeSBhbHdheXMgcmVxdWlyZXMgdGhlIHBhZ2UgdGFibGVcbisgIGxvY2suXG4gKiBSZWFkcyBmcm9tIGFuZCB3cml0ZXMgdG8gcGFnZSB0YWJsZSBlbnRyaWVzIG11c3QgYmUgKmFwcHJvcHJpYXRlbHkqXG4gICBhdG9taWMuIFNlZSB0aGUgc2VjdGlvbiBvbiBhdG9taWNpdHkgYmVsb3cgZm9yIGRldGFpbHMuXG4gKiBQb3B1bGF0aW5nIHByZXZpb3VzbHkgZW1wdHkgZW50cmllcyByZXF1aXJlcyB0aGF0IHRoZSBtbWFwIG9yIFZNQSBsb2NrcyBhcmVcbmRpZmYgLS1naXQgYS9hcmNoL0tjb25maWcgYi9hcmNoL0tjb25maWdcbmluZGV4IDQ1YzY1Nzc3MjM2MjMuLjZmNzUxNjkxNjc5N2UgMTAwNjQ0XG4tLS0gYS9hcmNoL0tjb25maWdcbisrKyBiL2FyY2gvS2NvbmZpZ1xuQEAgLTUyNiwxMyArNTI2LDYgQEAgY29uZmlnIEhBVkVfQVJDSF9KVU1QX0xBQkVMXG4gY29uZmlnIEhBVkVfQVJDSF9KVU1QX0xBQkVMX1JFTEFUSVZFXG4gXHRib29sXG4gXG4tY29uZmlnIE1NVV9HQVRIRVJfVEFCTEVfRlJFRVxuLVx0Ym9vbFxuLVxuLWNvbmZpZyBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG4tXHRib29sXG4tXHRzZWxlY3QgTU1VX0dBVEhFUl9UQUJMRV9GUkVFXG4tXG4gY29uZmlnIE1NVV9HQVRIRVJfUEFHRV9TSVpFXG4gXHRib29sXG4gXG5AQCAtNTQ4LDcgKzU0MSw2IEBAIGNvbmZpZyBNTVVfR0FUSEVSX01FUkdFX1ZNQVNcbiBcbiBjb25maWcgTU1VX0dBVEhFUl9OT19HQVRIRVJcbiBcdGJvb2xcbi1cdGRlcGVuZHMgb24gTU1VX0dBVEhFUl9UQUJMRV9GUkVFXG4gXG4gY29uZmlnIEFSQ0hfV0FOVF9JUlFTX09GRl9BQ1RJVkFURV9NTVxuIFx0Ym9vbFxuZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvS2NvbmZpZyBiL2FyY2gvYWxwaGEvS2NvbmZpZ1xuaW5kZXggZTUzZWYyZDg4NDYzNi4uOTA2M2M3YmRhNGU0MSAxMDA2NDRcbi0tLSBhL2FyY2gvYWxwaGEvS2NvbmZpZ1xuKysrIGIvYXJjaC9hbHBoYS9LY29uZmlnXG5AQCAtNDIsNyArNDIsNiBAQCBjb25maWcgQUxQSEFcbiBcdHNlbGVjdCBBUkNIX1NUQUNLV0FMS1xuIFx0c2VsZWN0IENQVV9OT19FRkZJQ0lFTlRfRkZTIGlmICFBTFBIQV9FVjY3XG4gXHRzZWxlY3QgTU1VX0dBVEhFUl9OT19SQU5HRVxuLVx0c2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcbiBcdHNlbGVjdCBTUEFSU0VNRU1fRVhUUkVNRSBpZiBTUEFSU0VNRU1cbiBcdHNlbGVjdCBaT05FX0RNQVxuIFx0c2VsZWN0IFRSQUNFX0lSUUZMQUdTX1NVUFBPUlRcbmRpZmYgLS1naXQgYS9hcmNoL2FyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL2FyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcbmluZGV4IGRmYWUwNzBmZThkNTUuLjliNmMzN2Y5MmU5N2YgMTAwNjQ0XG4tLS0gYS9hcmNoL2FyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcbisrKyBiL2FyY2gvYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxuQEAgLTcyLDcgKzcyLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHA0ZF9wb3B1bGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcDRkX3QgKnA0ZHAsIHB1ZF90ICpwdWRwKVxuIFx0c2V0X3A0ZChwNGRwLCBfX3A0ZCgodW5zaWduZWQgbG9uZylwdWRwKSk7XG4gfVxuIFxuLSNkZWZpbmUgX19wdWRfZnJlZV90bGIodGxiLCBwbWQsIGFkZHIpICBwdWRfZnJlZSgodGxiKS1cdTAwM2VtbSwgcG1kKVxuKyNkZWZpbmUgX19wdWRfZnJlZV90bGIodGxiLCBwbWQsIGFkZHIpICB0bGJfcmVtb3ZlX3B0ZGVzYygodGxiKSwgdmlydF90b19wdGRlc2MocG1kKSlcbiBcbiAjZW5kaWZcbiBcbkBAIC04MywxMCArODMsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIHB1ZF9wb3B1bGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcHVkX3QgKnB1ZHAsIHBtZF90ICpwbWRwKVxuIFx0c2V0X3B1ZChwdWRwLCBfX3B1ZCgodW5zaWduZWQgbG9uZylwbWRwKSk7XG4gfVxuIFxuLSNkZWZpbmUgX19wbWRfZnJlZV90bGIodGxiLCBwbWQsIGFkZHIpICBwbWRfZnJlZSgodGxiKS1cdTAwM2VtbSwgcG1kKVxuKyNkZWZpbmUgX19wbWRfZnJlZV90bGIodGxiLCBwbWQsIGFkZHIpICB0bGJfcmVtb3ZlX3B0ZGVzYygodGxiKSwgdmlydF90b19wdGRlc2MocG1kKSlcbiBcbiAjZW5kaWZcbiBcbi0jZGVmaW5lIF9fcHRlX2ZyZWVfdGxiKHRsYiwgcHRlLCBhZGRyKSAgcHRlX2ZyZWUoKHRsYiktXHUwMDNlbW0sIHB0ZSlcbisjZGVmaW5lIF9fcHRlX2ZyZWVfdGxiKHRsYiwgcHRlLCBhZGRyKSAgdGxiX3JlbW92ZV9wdGRlc2MoKHRsYiksIHBhZ2VfcHRkZXNjKHB0ZSkpXG4gXG4gI2VuZGlmIC8qIF9BU01fQVJDX1BHQUxMT0NfSCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtL0tjb25maWcgYi9hcmNoL2FybS9LY29uZmlnXG5pbmRleCA0MDhhYTU4YTJhNWJiLi4wY2MyODlhNzE4NGFiIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm0vS2NvbmZpZ1xuKysrIGIvYXJjaC9hcm0vS2NvbmZpZ1xuQEAgLTEzNCw3ICsxMzQsNiBAQCBjb25maWcgQVJNXG4gXHRzZWxlY3QgSEFWRV9QRVJGX1JFR1NcbiBcdHNlbGVjdCBIQVZFX1BFUkZfVVNFUl9TVEFDS19EVU1QXG4gXHRzZWxlY3QgSEFWRV9QT1NJWF9DUFVfVElNRVJTX1RBU0tfV09SS1xuLVx0c2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgaWYgU01QIFx1MDAyNlx1MDAyNiBBUk1fTFBBRVxuIFx0c2VsZWN0IEhBVkVfUkVHU19BTkRfU1RBQ0tfQUNDRVNTX0FQSVxuIFx0c2VsZWN0IEhBVkVfUlNFUVxuIFx0c2VsZWN0IEhBVkVfUlVTVCBpZiBDUFVfTElUVExFX0VORElBTiBcdTAwMjZcdTAwMjYgQ1BVXzMydjcgXHUwMDI2XHUwMDI2ICFLQVNBTlxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvS2NvbmZpZyBiL2FyY2gvYXJtNjQvS2NvbmZpZ1xuaW5kZXggMmJiZWRlZDMzZGEwZC4uYjZjMmRkOGIyNjEyNCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvS2NvbmZpZ1xuKysrIGIvYXJjaC9hcm02NC9LY29uZmlnXG5AQCAtMjIxLDcgKzIyMSw2IEBAIGNvbmZpZyBBUk02NFxuIFx0c2VsZWN0IEhBVkVfUkVMSUFCTEVfU1RBQ0tUUkFDRVxuIFx0c2VsZWN0IEhBVkVfUE9TSVhfQ1BVX1RJTUVSU19UQVNLX1dPUktcbiBcdHNlbGVjdCBIQVZFX0ZVTkNUSU9OX0FSR19BQ0NFU1NfQVBJXG4tXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxuIFx0c2VsZWN0IEhBVkVfUlNFUVxuIFx0c2VsZWN0IEhBVkVfUlVTVCBpZiBSVVNUQ19TVVBQT1JUU19BUk02NFxuIFx0c2VsZWN0IEhBVkVfU1RBQ0tQUk9URUNUT1JcbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9LY29uZmlnIGIvYXJjaC9sb29uZ2FyY2gvS2NvbmZpZ1xuaW5kZXggOWM1ZGVmNzA2MjIyMi4uZDFiMjNkYTQwNzM3NSAxMDA2NDRcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL0tjb25maWdcbisrKyBiL2FyY2gvbG9vbmdhcmNoL0tjb25maWdcbkBAIC0xODgsNyArMTg4LDYgQEAgY29uZmlnIExPT05HQVJDSFxuIFx0c2VsZWN0IElSUV9MT09OR0FSQ0hfQ1BVXG4gXHRzZWxlY3QgTE9DS19NTV9BTkRfRklORF9WTUFcbiBcdHNlbGVjdCBNTVVfR0FUSEVSX01FUkdFX1ZNQVMgaWYgTU1VXG4tXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxuIFx0c2VsZWN0IE1PRFVMRVNfVVNFX0VMRl9SRUxBIGlmIE1PRFVMRVNcbiBcdHNlbGVjdCBORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTktcbiBcdHNlbGVjdCBORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOS1xuZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9LY29uZmlnIGIvYXJjaC9tNjhrL0tjb25maWdcbmluZGV4IDExODM1ZWI1OWQ5NGQuLmViODRjM2FmOTJjMDIgMTAwNjQ0XG4tLS0gYS9hcmNoL202OGsvS2NvbmZpZ1xuKysrIGIvYXJjaC9tNjhrL0tjb25maWdcbkBAIC0yOSw2ICsyOSw3IEBAIGNvbmZpZyBNNjhLXG4gXHRzZWxlY3QgSEFWRV9BUkNIX0xJQkdDQ19IXG4gXHRzZWxlY3QgSEFWRV9BUkNIX1NFQ0NPTVBcbiBcdHNlbGVjdCBIQVZFX0FSQ0hfU0VDQ09NUF9GSUxURVJcbitcdHNlbGVjdCBIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRSBpZiBNTVVfTU9UT1JPTEFcbiBcdHNlbGVjdCBIQVZFX0FTTV9NT0RWRVJTSU9OU1xuIFx0c2VsZWN0IEhBVkVfREVCVUdfQlVHVkVSQk9TRVxuIFx0c2VsZWN0IEhBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MgaWYgIUNQVV9IQVNfTk9fVU5BTElHTkVEXG5kaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21jZl9wZ2FsbG9jLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbWNmX3BnYWxsb2MuaFxuaW5kZXggZmM1NDU0ZDM3ZGEzMS4uYjUzZmYwOTUwZGIyZSAxMDA2NDRcbi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tY2ZfcGdhbGxvYy5oXG4rKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbWNmX3BnYWxsb2MuaFxuQEAgLTM5LDEwICszOSw3IEBAIGV4dGVybiBpbmxpbmUgcG1kX3QgKnBtZF9hbGxvY19rZXJuZWwocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3B0ZV9mcmVlX3RsYihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBwZ3RhYmxlX3QgcGd0YWJsZSxcbiBcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuIHtcbi1cdHN0cnVjdCBwdGRlc2MgKnB0ZGVzYyA9IHZpcnRfdG9fcHRkZXNjKHBndGFibGUpO1xuLVxuLVx0cGFnZXRhYmxlX2R0b3IocHRkZXNjKTtcbi1cdHBhZ2V0YWJsZV9mcmVlKHB0ZGVzYyk7XG4rXHR0bGJfcmVtb3ZlX3B0ZGVzYyh0bGIsIHZpcnRfdG9fcHRkZXNjKHBndGFibGUpKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBwZ3RhYmxlX3QgcHRlX2FsbG9jX29uZShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbW90b3JvbGFfcGdhbGxvYy5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21vdG9yb2xhX3BnYWxsb2MuaFxuaW5kZXggMTA5MWZiMGFmZmJlZS4uZGNkZTQwZThiNWM2YSAxMDA2NDRcbi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tb3Rvcm9sYV9wZ2FsbG9jLmhcbisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tb3Rvcm9sYV9wZ2FsbG9jLmhcbkBAIC0xNyw2ICsxNyw3IEBAIGVudW0gbTY4a190YWJsZV90eXBlcyB7XG4gZXh0ZXJuIHZvaWQgaW5pdF9wb2ludGVyX3RhYmxlKHZvaWQgKnRhYmxlLCBpbnQgdHlwZSk7XG4gZXh0ZXJuIHZvaWQgKmdldF9wb2ludGVyX3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgdHlwZSk7XG4gZXh0ZXJuIGludCBmcmVlX3BvaW50ZXJfdGFibGUodm9pZCAqdGFibGUsIGludCB0eXBlKTtcbitleHRlcm4gdm9pZCBfX3RsYl9yZW1vdmVfdGFibGUodm9pZCAqdGFibGUpO1xuIFxuIC8qXG4gICogQWxsb2NhdGUgYW5kIGZyZWUgcGFnZSB0YWJsZXMuIFRoZSB4eHhfa2VybmVsKCkgdmVyc2lvbnMgYXJlXG5AQCAtNDcsNyArNDgsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHRlX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwZ3RhYmxlKVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3B0ZV9mcmVlX3RsYihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBwZ3RhYmxlX3QgcGd0YWJsZSxcbiBcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuIHtcbi1cdGZyZWVfcG9pbnRlcl90YWJsZShwZ3RhYmxlLCBUQUJMRV9QVEUpO1xuK1x0dGxiX3JlbW92ZV90YWJsZSh0bGIsICh2b2lkICopKCh1bnNpZ25lZCBsb25nKXBndGFibGUgfCBUQUJMRV9QVEUpKTtcbiB9XG4gXG4gXG5AQCAtNjEsMTAgKzYyLDEwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHBtZF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKVxuIFx0cmV0dXJuIGZyZWVfcG9pbnRlcl90YWJsZShwbWQsIFRBQkxFX1BNRCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IF9fcG1kX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHBtZF90ICpwbWQsXG4tXHRcdFx0XHQgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3BtZF9mcmVlX3RsYihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBwbWRfdCAqcG1kLFxuK1x0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG4ge1xuLVx0cmV0dXJuIGZyZWVfcG9pbnRlcl90YWJsZShwbWQsIFRBQkxFX1BNRCk7XG4rXHR0bGJfcmVtb3ZlX3RhYmxlKHRsYiwgKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpcG1kIHwgVEFCTEVfUE1EKSk7XG4gfVxuIFxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tbS9tb3Rvcm9sYS5jIGIvYXJjaC9tNjhrL21tL21vdG9yb2xhLmNcbmluZGV4IGIzMGFhNjlhNzNhNmEuLmZmYzgwNDgzNDQwYmMgMTAwNjQ0XG4tLS0gYS9hcmNoL202OGsvbW0vbW90b3JvbGEuY1xuKysrIGIvYXJjaC9tNjhrL21tL21vdG9yb2xhLmNcbkBAIC0yMCw2ICsyMCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtYmxvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2dmcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3NldHVwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91YWNjZXNzLmhcdTAwM2VcbkBAIC0xMDMsNiArMTA0LDggQEAgc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgcHRhYmxlX2xpc3RbM10gPSB7XG4gXHRMSVNUX0hFQURfSU5JVChwdGFibGVfbGlzdFsyXSksXG4gfTtcbiBcbitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHB0YWJsZV9sb2NrKTtcbitcbiAjZGVmaW5lIFBEX1BUQUJMRShwdGRlc2MpICgocHRhYmxlX2Rlc2MgKilcdTAwMjYodmlydF90b19wdGRlc2MoKHZvaWQgKikocHRkZXNjKSktXHUwMDNlcHRfbGlzdCkpXG4gI2RlZmluZSBQRF9QVERFU0MocHRhYmxlKSAobGlzdF9lbnRyeShwdGFibGUsIHN0cnVjdCBwdGRlc2MsIHB0X2xpc3QpKVxuICNkZWZpbmUgUERfTUFSS0JJVFMoZHApICgqKHVuc2lnbmVkIGludCAqKVx1MDAyNlBEX1BUREVTQyhkcCktXHUwMDNlcHRfaW5kZXgpXG5AQCAtMTM5LDUyICsxNDIsNjYgQEAgdm9pZCBfX2luaXQgaW5pdF9wb2ludGVyX3RhYmxlKHZvaWQgKnRhYmxlLCBpbnQgdHlwZSlcbiBcdHJldHVybjtcbiB9XG4gXG4tdm9pZCAqZ2V0X3BvaW50ZXJfdGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCB0eXBlKVxuKy8qXG4rICogRm9yIGEgcG9pbnRlciB0YWJsZSBmb3IgYSB1c2VyIHByb2Nlc3MgYWRkcmVzcyBzcGFjZSwgYVxuKyAqIHRhYmxlIGlzIHRha2VuIGZyb20gYSBwdGRlc2MgYWxsb2NhdGVkIGZvciB0aGUgcHVycG9zZS4gIEVhY2hcbisgKiBwdGRlc2MgY2FuIGhvbGQgOCBwb2ludGVyIHRhYmxlcy4gIFRoZSBwdGRlc2MgaXMgcmVtYXBwZWQgaW5cbisgKiB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgdG8gYmUgbm9uY2FjaGVhYmxlLlxuKyAqL1xuK3N0YXRpYyB2b2lkICphZGRfcG9pbnRlcl90YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IHR5cGUpXG4ge1xuLVx0cHRhYmxlX2Rlc2MgKmRwID0gcHRhYmxlX2xpc3RbdHlwZV0ubmV4dDtcbi1cdHVuc2lnbmVkIGludCBtYXNrID0gbGlzdF9lbXB0eShcdTAwMjZwdGFibGVfbGlzdFt0eXBlXSkgPyAwIDogUERfTUFSS0JJVFMoZHApO1xuLVx0dW5zaWduZWQgaW50IHRtcCwgb2ZmO1xuK1x0c3RydWN0IHB0ZGVzYyAqcHRkZXNjO1xuK1x0cHRhYmxlX2Rlc2MgKm5ldztcbitcdHZvaWQgKnB0X2FkZHI7XG4gXG4tXHQvKlxuLVx0ICogRm9yIGEgcG9pbnRlciB0YWJsZSBmb3IgYSB1c2VyIHByb2Nlc3MgYWRkcmVzcyBzcGFjZSwgYVxuLVx0ICogdGFibGUgaXMgdGFrZW4gZnJvbSBhIHB0ZGVzYyBhbGxvY2F0ZWQgZm9yIHRoZSBwdXJwb3NlLiAgRWFjaFxuLVx0ICogcHRkZXNjIGNhbiBob2xkIDggcG9pbnRlciB0YWJsZXMuICBUaGUgcHRkZXNjIGlzIHJlbWFwcGVkIGluXG4tXHQgKiB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgdG8gYmUgbm9uY2FjaGVhYmxlLlxuLVx0ICovXG4tXHRpZiAobWFzayA9PSAwKSB7XG4tXHRcdHN0cnVjdCBwdGRlc2MgKnB0ZGVzYztcbi1cdFx0cHRhYmxlX2Rlc2MgKm5ldztcbi1cdFx0dm9pZCAqcHRfYWRkcjtcbi1cbi1cdFx0cHRkZXNjID0gcGFnZXRhYmxlX2FsbG9jKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPLCAwKTtcbi1cdFx0aWYgKCFwdGRlc2MpXG4tXHRcdFx0cmV0dXJuIE5VTEw7XG4tXG4tXHRcdHB0X2FkZHIgPSBwdGRlc2NfYWRkcmVzcyhwdGRlc2MpO1xuLVxuLVx0XHRzd2l0Y2ggKHR5cGUpIHtcbi1cdFx0Y2FzZSBUQUJMRV9QVEU6XG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBtNjhrIGRvZXNuJ3QgaGF2ZSBTUExJVF9QVEVfUFRMT0NLUyBmb3Igbm90IGhhdmluZ1xuLVx0XHRcdCAqIFNNUC5cbi1cdFx0XHQgKi9cbi1cdFx0XHRwYWdldGFibGVfcHRlX2N0b3IobW0sIHB0ZGVzYyk7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgVEFCTEVfUE1EOlxuLVx0XHRcdHBhZ2V0YWJsZV9wbWRfY3RvcihtbSwgcHRkZXNjKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBUQUJMRV9QR0Q6XG4tXHRcdFx0cGFnZXRhYmxlX3BnZF9jdG9yKHB0ZGVzYyk7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbitcdHB0ZGVzYyA9IHBhZ2V0YWJsZV9hbGxvYyhHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywgMCk7XG4rXHRpZiAoIXB0ZGVzYylcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRwdF9hZGRyID0gcHRkZXNjX2FkZHJlc3MocHRkZXNjKTtcbitcbitcdHN3aXRjaCAodHlwZSkge1xuK1x0Y2FzZSBUQUJMRV9QVEU6XG4rXHRcdC8qXG4rXHRcdCAqIG02OGsgZG9lc24ndCBoYXZlIFNQTElUX1BURV9QVExPQ0tTIGZvciBub3QgaGF2aW5nXG4rXHRcdCAqIFNNUC5cbitcdFx0ICovXG4rXHRcdHBhZ2V0YWJsZV9wdGVfY3RvcihtbSwgcHRkZXNjKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFRBQkxFX1BNRDpcbitcdFx0cGFnZXRhYmxlX3BtZF9jdG9yKG1tLCBwdGRlc2MpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgVEFCTEVfUEdEOlxuK1x0XHRwYWdldGFibGVfcGdkX2N0b3IocHRkZXNjKTtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXG4rXHRtbXVfcGFnZV9jdG9yKHB0X2FkZHIpO1xuK1xuK1x0bmV3ID0gUERfUFRBQkxFKHB0X2FkZHIpO1xuIFxuLVx0XHRtbXVfcGFnZV9jdG9yKHB0X2FkZHIpO1xuK1x0UERfTUFSS0JJVFMobmV3KSA9IHB0YWJsZV9tYXNrKHR5cGUpIC0gMTtcbitcdHNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCBcdTAwMjZwdGFibGVfbG9jaylcbitcdFx0bGlzdF9hZGQobmV3LCBcdTAwMjZwdGFibGVfbGlzdFt0eXBlXSk7XG4gXG4tXHRcdG5ldyA9IFBEX1BUQUJMRShwdF9hZGRyKTtcbi1cdFx0UERfTUFSS0JJVFMobmV3KSA9IHB0YWJsZV9tYXNrKHR5cGUpIC0gMTtcbi1cdFx0bGlzdF9hZGRfdGFpbChuZXcsIGRwKTtcbitcdHJldHVybiAocG1kX3QgKilwdF9hZGRyO1xuK31cbitcbit2b2lkICpnZXRfcG9pbnRlcl90YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IHR5cGUpXG4re1xuK1x0dW5zaWduZWQgaW50IHRtcCwgb2ZmO1xuK1x0dW5zaWduZWQgbG9uZyBtYXNrO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdHB0YWJsZV9kZXNjICpkcDtcbitcdHZvaWQgKnJldDtcbiBcbi1cdFx0cmV0dXJuIChwbWRfdCAqKXB0X2FkZHI7XG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwdGFibGVfbG9jaywgZmxhZ3MpO1xuK1x0ZHAgPSBwdGFibGVfbGlzdFt0eXBlXS5uZXh0O1xuK1x0bWFzayA9IGxpc3RfZW1wdHkoXHUwMDI2cHRhYmxlX2xpc3RbdHlwZV0pID8gMCA6IFBEX01BUktCSVRTKGRwKTtcbitcbitcdGlmIChtYXNrID09IDApIHtcbitcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwdGFibGVfbG9jaywgZmxhZ3MpO1xuK1x0XHRyZXR1cm4gYWRkX3BvaW50ZXJfdGFibGUobW0sIHR5cGUpO1xuIFx0fVxuIFxuIFx0Zm9yICh0bXAgPSAxLCBvZmYgPSAwOyAobWFzayBcdTAwMjYgdG1wKSA9PSAwOyB0bXAgXHUwMDNjXHUwMDNjPSAxLCBvZmYgKz0gcHRhYmxlX3NpemUodHlwZSkpXG5AQCAtMTk0LDcgKzIxMSwxMCBAQCB2b2lkICpnZXRfcG9pbnRlcl90YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IHR5cGUpXG4gXHRcdC8qIG1vdmUgdG8gZW5kIG9mIGxpc3QgKi9cbiBcdFx0bGlzdF9tb3ZlX3RhaWwoZHAsIFx1MDAyNnB0YWJsZV9saXN0W3R5cGVdKTtcbiBcdH1cbi1cdHJldHVybiBwdGRlc2NfYWRkcmVzcyhQRF9QVERFU0MoZHApKSArIG9mZjtcbitcbitcdHJldCA9IHB0ZGVzY19hZGRyZXNzKFBEX1BUREVTQyhkcCkpICsgb2ZmO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwdGFibGVfbG9jaywgZmxhZ3MpO1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gaW50IGZyZWVfcG9pbnRlcl90YWJsZSh2b2lkICp0YWJsZSwgaW50IHR5cGUpXG5AQCAtMjAzLDYgKzIyMyw5IEBAIGludCBmcmVlX3BvaW50ZXJfdGFibGUodm9pZCAqdGFibGUsIGludCB0eXBlKVxuIFx0dW5zaWduZWQgbG9uZyBwdGFibGUgPSAodW5zaWduZWQgbG9uZyl0YWJsZTtcbiBcdHVuc2lnbmVkIGxvbmcgcHRfYWRkciA9IHB0YWJsZSBcdTAwMjYgUEFHRV9NQVNLO1xuIFx0dW5zaWduZWQgaW50IG1hc2sgPSAxVSBcdTAwM2NcdTAwM2MgKChwdGFibGUgLSBwdF9hZGRyKS9wdGFibGVfc2l6ZSh0eXBlKSk7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cHRhYmxlX2xvY2ssIGZsYWdzKTtcbiBcbiBcdGRwID0gUERfUFRBQkxFKHB0X2FkZHIpO1xuIFx0aWYgKFBEX01BUktCSVRTIChkcCkgXHUwMDI2IG1hc2spXG5AQCAtMjEzLDYgKzIzNiw4IEBAIGludCBmcmVlX3BvaW50ZXJfdGFibGUodm9pZCAqdGFibGUsIGludCB0eXBlKVxuIFx0aWYgKFBEX01BUktCSVRTKGRwKSA9PSBwdGFibGVfbWFzayh0eXBlKSkge1xuIFx0XHQvKiBhbGwgdGFibGVzIGluIHB0ZGVzYyBhcmUgZnJlZSwgZnJlZSBwdGRlc2MgKi9cbiBcdFx0bGlzdF9kZWwoZHApO1xuK1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnB0YWJsZV9sb2NrLCBmbGFncyk7XG4rXG4gXHRcdG1tdV9wYWdlX2R0b3IoKHZvaWQgKilwdF9hZGRyKTtcbiBcdFx0cGFnZXRhYmxlX2R0b3JfZnJlZSh2aXJ0X3RvX3B0ZGVzYygodm9pZCAqKXB0X2FkZHIpKTtcbiBcdFx0cmV0dXJuIDE7XG5AQCAtMjIzLDkgKzI0OCwyMSBAQCBpbnQgZnJlZV9wb2ludGVyX3RhYmxlKHZvaWQgKnRhYmxlLCBpbnQgdHlwZSlcbiBcdFx0ICovXG4gXHRcdGxpc3RfbW92ZShkcCwgXHUwMDI2cHRhYmxlX2xpc3RbdHlwZV0pO1xuIFx0fVxuK1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwdGFibGVfbG9jaywgZmxhZ3MpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3ZvaWQgX190bGJfcmVtb3ZlX3RhYmxlKHZvaWQgKnRhYmxlKVxuK3tcbitcdC8qIFRoZSBib3R0b20gMiBiaXRzIGFyZSB1c2VkIHRvIGVuY29kZSBwYWdlIHRhYmxlIHR5cGUuICovXG4rXHRjb25zdCB1bnNpZ25lZCBsb25nIGVuY29kZWQgPSAodW5zaWduZWQgbG9uZyl0YWJsZTtcbitcdHZvaWQgKmFkZHIgPSAodm9pZCAqKShlbmNvZGVkIFx1MDAyNiB+M1VMKTtcbitcdGNvbnN0IGludCB0eXBlID0gZW5jb2RlZCBcdTAwMjYgMztcbitcbitcdGZyZWVfcG9pbnRlcl90YWJsZShhZGRyLCB0eXBlKTtcbit9XG4rXG4gLyogc2l6ZSBvZiBtZW1vcnkgYWxyZWFkeSBtYXBwZWQgaW4gaGVhZC5TICovXG4gZXh0ZXJuIF9faW5pdGRhdGEgdW5zaWduZWQgbG9uZyBtNjhrX2luaXRfbWFwcGVkX3NpemU7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3BnYWxsb2MuaCBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcbmluZGV4IDA4NGE4YTBkYzIzOTUuLmZmZWU2YTAwOTIxOWEgMTAwNjQ0XG4tLS0gYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcGdhbGxvYy5oXG4rKysgYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcGdhbGxvYy5oXG5AQCAtMjUsNyArMjUsNyBAQCBleHRlcm4gdm9pZCBfX2JhZF9wdGUocG1kX3QgKnBtZCk7XG4gXG4gZXh0ZXJuIHB0ZV90ICpwdGVfYWxsb2Nfb25lX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XG4gXG4tI2RlZmluZSBfX3B0ZV9mcmVlX3RsYih0bGIsIHB0ZSwgYWRkcilcdHB0ZV9mcmVlKCh0bGIpLVx1MDAzZW1tLCAocHRlKSlcbisjZGVmaW5lIF9fcHRlX2ZyZWVfdGxiKHRsYiwgcHRlLCBhZGRyKVx0dGxiX3JlbW92ZV9wdGRlc2MoKHRsYiksIHBhZ2VfcHRkZXNjKHB0ZSkpXG4gXG4gI2RlZmluZSBwbWRfcG9wdWxhdGUobW0sIHBtZCwgcHRlKSBcXFxuIFx0XHRcdChwbWRfdmFsKCoocG1kKSkgPSAodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MocHRlKSlcbmRpZmYgLS1naXQgYS9hcmNoL21pcHMvS2NvbmZpZyBiL2FyY2gvbWlwcy9LY29uZmlnXG5pbmRleCBlMmViOTYyN2JkMTRjLi5mMGM0M2QxMThjYTAwIDEwMDY0NFxuLS0tIGEvYXJjaC9taXBzL0tjb25maWdcbisrKyBiL2FyY2gvbWlwcy9LY29uZmlnXG5AQCAtOTcsNyArOTcsNiBAQCBjb25maWcgTUlQU1xuIFx0c2VsZWN0IElSUV9GT1JDRURfVEhSRUFESU5HXG4gXHRzZWxlY3QgSVNBIGlmIEVJU0FcbiBcdHNlbGVjdCBMT0NLX01NX0FORF9GSU5EX1ZNQVxuLVx0c2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcbiBcdHNlbGVjdCBNT0RVTEVTX1VTRV9FTEZfUkVMIGlmIE1PRFVMRVNcbiBcdHNlbGVjdCBNT0RVTEVTX1VTRV9FTEZfUkVMQSBpZiBNT0RVTEVTIFx1MDAyNlx1MDAyNiA2NEJJVFxuIFx0c2VsZWN0IFBFUkZfVVNFX1ZNQUxMT0NcbmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9LY29uZmlnIGIvYXJjaC9wYXJpc2MvS2NvbmZpZ1xuaW5kZXggZDNhZmFjMmYwZDliZS4uNzdmNjcwMjhhZDg5YyAxMDA2NDRcbi0tLSBhL2FyY2gvcGFyaXNjL0tjb25maWdcbisrKyBiL2FyY2gvcGFyaXNjL0tjb25maWdcbkBAIC04MCw3ICs4MCw2IEBAIGNvbmZpZyBQQVJJU0NcbiBcdHNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTXG4gXHRzZWxlY3QgQ1BVX05PX0VGRklDSUVOVF9GRlNcbiBcdHNlbGVjdCBUSFJFQURfSU5GT19JTl9UQVNLXG4tXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxuIFx0c2VsZWN0IE5FRURfRE1BX01BUF9TVEFURVxuIFx0c2VsZWN0IE5FRURfU0dfRE1BX0xFTkdUSFxuIFx0c2VsZWN0IEhBVkVfQVJDSF9LR0RCXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZ1xuaW5kZXggMjU4MGUyN2U0MzI4Ny4uMDc2N2NmY2JhYTQyMiAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9LY29uZmlnXG4rKysgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZ1xuQEAgLTMwNyw3ICszMDcsNiBAQCBjb25maWcgUFBDXG4gXHRzZWxlY3QgS0FTQU5fVk1BTExPQ1x0XHRcdGlmIEtBU0FOIFx1MDAyNlx1MDAyNiBFWEVDTUVNXG4gXHRzZWxlY3QgTE9DS19NTV9BTkRfRklORF9WTUFcbiBcdHNlbGVjdCBNTVVfR0FUSEVSX1BBR0VfU0laRVxuLVx0c2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcbiBcdHNlbGVjdCBIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRVxuIFx0c2VsZWN0IE1NVV9HQVRIRVJfTUVSR0VfVk1BU1xuIFx0c2VsZWN0IE1NVV9MQVpZX1RMQl9TSE9PVERPV05cdFx0aWYgUFBDX0JPT0szU182NFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvS2NvbmZpZyBiL2FyY2gvcmlzY3YvS2NvbmZpZ1xuaW5kZXggNTA1ZWVkNGFmOTMyYi4uNzc0MWE0Mjg3NDk4MSAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvS2NvbmZpZ1xuKysrIGIvYXJjaC9yaXNjdi9LY29uZmlnXG5AQCAtMjA4LDcgKzIwOCw2IEBAIGNvbmZpZyBSSVNDVlxuIFx0c2VsZWN0IElSUV9GT1JDRURfVEhSRUFESU5HXG4gXHRzZWxlY3QgS0FTQU5fVk1BTExPQyBpZiBLQVNBTlxuIFx0c2VsZWN0IExPQ0tfTU1fQU5EX0ZJTkRfVk1BXG4tXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSBpZiBTTVAgXHUwMDI2XHUwMDI2IE1NVVxuIFx0c2VsZWN0IE1PRFVMRVNfVVNFX0VMRl9SRUxBIGlmIE1PRFVMRVNcbiBcdHNlbGVjdCBPRlxuIFx0c2VsZWN0IE9GX0VBUkxZX0ZMQVRUUkVFXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL0tjb25maWcgYi9hcmNoL3MzOTAvS2NvbmZpZ1xuaW5kZXggYjg4Yjg1MDQyMTM2OS4uYTM0Mzc2YzA1ZjZlMyAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9LY29uZmlnXG4rKysgYi9hcmNoL3MzOTAvS2NvbmZpZ1xuQEAgLTI2Nyw3ICsyNjcsNiBAQCBjb25maWcgUzM5MFxuIFx0c2VsZWN0IExPQ0tfTU1fQU5EX0ZJTkRfVk1BXG4gXHRzZWxlY3QgTU1VX0dBVEhFUl9NRVJHRV9WTUFTXG4gXHRzZWxlY3QgTU1VX0dBVEhFUl9OT19HQVRIRVJcbi1cdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG4gXHRzZWxlY3QgTU9EVUxFU19VU0VfRUxGX1JFTEFcbiBcdHNlbGVjdCBORUVEX0RNQV9NQVBfU1RBVEVcdGlmIFBDSVxuIFx0c2VsZWN0IE5FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOS1xuZGlmZiAtLWdpdCBhL2FyY2gvc2gvS2NvbmZpZyBiL2FyY2gvc2gvS2NvbmZpZ1xuaW5kZXggZDYwZjFkNWE5NGMwZi4uZmU4NTlkZWY5MThjYyAxMDA2NDRcbi0tLSBhL2FyY2gvc2gvS2NvbmZpZ1xuKysrIGIvYXJjaC9zaC9LY29uZmlnXG5AQCAtMzMsNiArMzMsNyBAQCBjb25maWcgU1VQRVJIXG4gXHRzZWxlY3QgSEFWRV9BUkNIX0FVRElUU1lTQ0FMTFxuIFx0c2VsZWN0IEhBVkVfQVJDSF9LR0RCXG4gXHRzZWxlY3QgSEFWRV9BUkNIX1NFQ0NPTVBfRklMVEVSXG4rXHRzZWxlY3QgSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEUgaWYgWDJUTEJcbiBcdHNlbGVjdCBIQVZFX0FSQ0hfVFJBQ0VIT09LXG4gXHRzZWxlY3QgSEFWRV9ERUJVR19CVUdWRVJCT1NFXG4gXHRzZWxlY3QgSEFWRV9ERUJVR19LTUVNTEVBS1xuZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGdhbGxvYy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcbmluZGV4IDZmZTcxMjNkMzhmYTkuLjY3Y2U3ZmEyM2ZhMTIgMTAwNjQ0XG4tLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxuKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcbkBAIC0xNyw3ICsxNywxMSBAQCBleHRlcm4gdm9pZCBwZ2RfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZCk7XG4gZXh0ZXJuIHZvaWQgcHVkX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwdWRfdCAqcHVkcCwgcG1kX3QgKnBtZCk7XG4gZXh0ZXJuIHBtZF90ICpwbWRfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpO1xuIGV4dGVybiB2b2lkIHBtZF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKTtcbi0jZGVmaW5lIF9fcG1kX2ZyZWVfdGxiKHRsYiwgcG1kcCwgYWRkcilcdFx0cG1kX2ZyZWUoKHRsYiktXHUwMDNlbW0sIChwbWRwKSlcbitleHRlcm4gdm9pZCBfX3RsYl9yZW1vdmVfdGFibGUodm9pZCAqdGFibGUpO1xuK1xuKy8qIFBNRHMgYXJlIHNsYWItYWxsb2NhdGVkLCB0YWcgc28gdGhleSBhcmUgZnJlZWQgY29ycmVjdGx5LiAqL1xuKyNkZWZpbmUgX19wbWRfZnJlZV90bGIodGxiLCBwbWRwLCBhZGRyKVx0XHRcdFx0XHRcXFxuK1x0dGxiX3JlbW92ZV90YWJsZSgodGxiKSwgKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKHBtZHApIHwgMSkpXG4gI2VuZGlmXG4gXG4gc3RhdGljIGlubGluZSB2b2lkIHBtZF9wb3B1bGF0ZV9rZXJuZWwoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsXG5kaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9wZ3RhYmxlLmMgYi9hcmNoL3NoL21tL3BndGFibGUuY1xuaW5kZXggM2E0MDg1ZWEwMTYxZi4uZjYxODRiODZiODljNiAxMDA2NDRcbi0tLSBhL2FyY2gvc2gvbW0vcGd0YWJsZS5jXG4rKysgYi9hcmNoL3NoL21tL3BndGFibGUuY1xuQEAgLTU2LDQgKzU2LDI0IEBAIHZvaWQgcG1kX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQpXG4ge1xuIFx0a21lbV9jYWNoZV9mcmVlKHBtZF9jYWNoZXAsIHBtZCk7XG4gfVxuK1xuK3N0YXRpYyB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZV9zbGFiKHZvaWQgKnRhYmxlKVxuK3tcbitcdGttZW1fY2FjaGVfZnJlZShwbWRfY2FjaGVwLCB0YWJsZSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZV9wZ3RhYmxlKHZvaWQgKnRhYmxlKVxuK3tcbitcdHBhZ2V0YWJsZV9kdG9yX2ZyZWUodGFibGUpO1xuK31cbitcbit2b2lkIF9fdGxiX3JlbW92ZV90YWJsZSh2b2lkICp0YWJsZSlcbit7XG4rXHRjb25zdCB1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZyl0YWJsZTtcbitcbitcdGlmIChhZGRyIFx1MDAyNiAxKVxuK1x0XHRfX3RsYl9yZW1vdmVfdGFibGVfc2xhYigodm9pZCAqKShhZGRyIFx1MDAyNiB+MVVMKSk7XG4rXHRlbHNlXG4rXHRcdF9fdGxiX3JlbW92ZV90YWJsZV9wZ3RhYmxlKHRhYmxlKTtcbit9XG4gI2VuZGlmIC8qIFBBR0VUQUJMRV9MRVZFTFMgXHUwMDNlIDIgKi9cbmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL0tjb25maWcgYi9hcmNoL3NwYXJjL0tjb25maWdcbmluZGV4IGFiNzdkM2YyNTM2ZTEuLjc0MmZmZmY4YzM3ZjIgMTAwNjQ0XG4tLS0gYS9hcmNoL3NwYXJjL0tjb25maWdcbisrKyBiL2FyY2gvc3BhcmMvS2NvbmZpZ1xuQEAgLTY0LDYgKzY0LDcgQEAgY29uZmlnIFNQQVJDMzJcbiBcdHNlbGVjdCBIQVZFX1VJRDE2XG4gXHRzZWxlY3QgSEFWRV9QQUdFX1NJWkVfNEtCXG4gXHRzZWxlY3QgTE9DS19NTV9BTkRfRklORF9WTUFcbitcdHNlbGVjdCBIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRVxuIFx0c2VsZWN0IE9MRF9TSUdBQ1RJT05cbiBcdHNlbGVjdCBaT05FX0RNQVxuIFxuQEAgLTc1LDggKzc2LDcgQEAgY29uZmlnIFNQQVJDNjRcbiBcdHNlbGVjdCBIQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUlxuIFx0c2VsZWN0IEhBVkVfS1JFVFBST0JFU1xuIFx0c2VsZWN0IEhBVkVfS1BST0JFU1xuLVx0c2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgaWYgU01QXG4tXHRzZWxlY3QgSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEUgaWYgU01QXG4rXHRzZWxlY3QgSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEVcbiBcdHNlbGVjdCBNTVVfR0FUSEVSX01FUkdFX1ZNQVNcbiBcdHNlbGVjdCBNTVVfR0FUSEVSX05PX0ZMVVNIX0NBQ0hFXG4gXHRzZWxlY3QgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5kaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzMyLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2NfMzIuaFxuaW5kZXggNGY3M2U4N2IyMmEzMi4uMzYwMTA4NTJiYTBjMCAxMDA2NDRcbi0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY18zMi5oXG4rKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2NfMzIuaFxuQEAgLTQ4LDcgKzQ4LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIGZyZWVfcG1kX2Zhc3QocG1kX3QgKiBwbWQpXG4gfVxuIFxuICNkZWZpbmUgcG1kX2ZyZWUobW0sIHBtZClcdFx0ZnJlZV9wbWRfZmFzdChwbWQpXG4tI2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIsIHBtZCwgYWRkcilcdHBtZF9mcmVlKCh0bGIpLVx1MDAzZW1tLCBwbWQpXG4rXG4rI2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIsIHBtZCwgYWRkcilcdFx0XHRcdFx0XFxcbitcdHRsYl9yZW1vdmVfdGFibGUoKHRsYiksICh2b2lkICopKCh1bnNpZ25lZCBsb25nKShwbWQpIHwgMVVMKSlcbiBcbiAjZGVmaW5lIHBtZF9wb3B1bGF0ZShtbSwgcG1kLCBwdGUpXHRwbWRfc2V0KHBtZCwgcHRlKVxuIFxuQEAgLTcyLDYgKzc0LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGZyZWVfcHRlX2Zhc3QocHRlX3QgKnB0ZSlcbiAjZGVmaW5lIHB0ZV9mcmVlX2tlcm5lbChtbSwgcHRlKVx0ZnJlZV9wdGVfZmFzdChwdGUpXG4gXG4gdm9pZCBwdGVfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICogbW0sIHBndGFibGVfdCBwdGUpO1xuLSNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLCBwdGUsIGFkZHIpXHRwdGVfZnJlZSgodGxiKS1cdTAwM2VtbSwgcHRlKVxuK3ZvaWQgX190bGJfcmVtb3ZlX3RhYmxlKHZvaWQgKnRhYmxlKTtcbisjZGVmaW5lIF9fcHRlX2ZyZWVfdGxiKHRsYiwgcHRlLCBhZGRyKVx0dGxiX3JlbW92ZV90YWJsZSgodGxiKSwgKHZvaWQgKikocHRlKSlcbiBcbiAjZW5kaWYgLyogX1NQQVJDX1BHQUxMT0NfSCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY182NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzY0LmhcbmluZGV4IGNhYTc2MzJiZTRjMmEuLmI1MDU1ZDI1OWI3NGQgMTAwNjQ0XG4tLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2NfNjQuaFxuKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzY0LmhcbkBAIC03NCw4ICs3NCw2IEBAIHZvaWQgcHRlX2ZyZWVfZGVmZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwZ3RhYmxlKTtcbiBcbiB2b2lkIHBndGFibGVfZnJlZSh2b2lkICp0YWJsZSwgYm9vbCBpc19wYWdlKTtcbiBcbi0jaWZkZWYgQ09ORklHX1NNUFxuLVxuIHN0cnVjdCBtbXVfZ2F0aGVyO1xuIHZvaWQgdGxiX3JlbW92ZV90YWJsZShzdHJ1Y3QgbW11X2dhdGhlciAqLCB2b2lkICopO1xuIFxuQEAgLTk2LDEyICs5NCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3RsYl9yZW1vdmVfdGFibGUodm9pZCAqX3RhYmxlKVxuIFx0XHRpc19wYWdlID0gdHJ1ZTtcbiBcdHBndGFibGVfZnJlZSh0YWJsZSwgaXNfcGFnZSk7XG4gfVxuLSNlbHNlIC8qIENPTkZJR19TTVAgKi9cbi1zdGF0aWMgaW5saW5lIHZvaWQgcGd0YWJsZV9mcmVlX3RsYihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCB2b2lkICp0YWJsZSwgYm9vbCBpc19wYWdlKVxuLXtcbi1cdHBndGFibGVfZnJlZSh0YWJsZSwgaXNfcGFnZSk7XG4tfVxuLSNlbmRpZiAvKiAhQ09ORklHX1NNUCAqL1xuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3B0ZV9mcmVlX3RsYihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBwdGVfdCAqcHRlLFxuIFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG5kaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90bGJfNjQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGxiXzY0LmhcbmluZGV4IDMwMzcxODc0ODJkYjcuLmY1Zjk2MzE2ODVkNTAgMTAwNjQ0XG4tLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RsYl82NC5oXG4rKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RsYl82NC5oXG5AQCAtMjksOSArMjksNyBAQCB2b2lkIGZsdXNoX3RsYl9wZW5kaW5nKHZvaWQpO1xuICAqIGFuZCB0aGVyZWZvcmUgd2UgZG9uJ3QgbmVlZCBhIFRMQkkgd2hlbiBmcmVlaW5nIHBhZ2UtdGFibGUgcGFnZXMuXG4gICovXG4gXG4tI2lmZGVmIENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG4gI2RlZmluZSB0bGJfbmVlZHNfdGFibGVfaW52YWxpZGF0ZSgpXHQoZmFsc2UpXG4tI2VuZGlmXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtLWdlbmVyaWMvdGxiLmhcdTAwM2VcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2xpYi9iaXRleHQuYyBiL2FyY2gvc3BhcmMvbGliL2JpdGV4dC5jXG5pbmRleCAzMmE1YzFkOTQ1OWNkLi5jMzA5ZTI3OTczY2U2IDEwMDY0NFxuLS0tIGEvYXJjaC9zcGFyYy9saWIvYml0ZXh0LmNcbisrKyBiL2FyY2gvc3BhcmMvbGliL2JpdGV4dC5jXG5AQCAtMjIsOCArMjIsNiBAQFxuICAqIEBhbGlnbjogcmVxdWVzdGVkIGFsaWdubWVudFxuICAqXG4gICogUmV0dXJucyBvZmZzZXQgaW4gdGhlIG1hcCBvciAtMSBpZiBvdXQgb2Ygc3BhY2UuXG4tICpcbi0gKiBOb3Qgc2FmZSB0byBjYWxsIGZyb20gYW4gaW50ZXJydXB0ICh1c2VzIHNwaW5fbG9jaykuXG4gICovXG4gaW50IGJpdF9tYXBfc3RyaW5nX2dldChzdHJ1Y3QgYml0X21hcCAqdCwgaW50IGxlbiwgaW50IGFsaWduKVxuIHtcbkBAIC0zMSw2ICsyOSw3IEBAIGludCBiaXRfbWFwX3N0cmluZ19nZXQoc3RydWN0IGJpdF9tYXAgKnQsIGludCBsZW4sIGludCBhbGlnbilcbiBcdGludCBvZmZfbmV3O1xuIFx0aW50IGFsaWduMTtcbiBcdGludCBpLCBjb2xvcjtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4gXHRpZiAodC1cdTAwM2VudW1fY29sb3JzKSB7XG4gXHRcdC8qIGFsaWduIGlzIG92ZXJsb2FkZWQgdG8gYmUgdGhlIHBhZ2UgY29sb3IgKi9cbkBAIC01MCw3ICs0OSw3IEBAIGludCBiaXRfbWFwX3N0cmluZ19nZXQoc3RydWN0IGJpdF9tYXAgKnQsIGludCBsZW4sIGludCBhbGlnbilcbiBcdFx0QlVHKCk7XG4gXHRjb2xvciBcdTAwMjY9IGFsaWduMTtcbiBcbi1cdHNwaW5fbG9jayhcdTAwMjZ0LVx1MDAzZWxvY2spO1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRpZiAobGVuIFx1MDAzYyB0LVx1MDAzZWxhc3Rfc2l6ZSlcbiBcdFx0b2Zmc2V0ID0gdC1cdTAwM2VmaXJzdF9mcmVlO1xuIFx0ZWxzZVxuQEAgLTY0LDcgKzYzLDcgQEAgaW50IGJpdF9tYXBfc3RyaW5nX2dldChzdHJ1Y3QgYml0X21hcCAqdCwgaW50IGxlbiwgaW50IGFsaWduKVxuIFx0XHRpZiAob2Zmc2V0IFx1MDAzZT0gdC1cdTAwM2VzaXplKVxuIFx0XHRcdG9mZnNldCA9IDA7XG4gXHRcdGlmIChjb3VudCArIGxlbiBcdTAwM2UgdC1cdTAwM2VzaXplKSB7XG4tXHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2dC1cdTAwM2Vsb2NrKTtcbitcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnQtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIC8qIFAzICovIHByaW50ayhLRVJOX0VSUlxuICAgXCJiaXRtYXAgb3V0OiBzaXplICVkIHVzZWQgJWQgb2ZmICVkIGxlbiAlZCBhbGlnbiAlZCBjb3VudCAlZFxcblwiLFxuICAgdC1cdTAwM2VzaXplLCB0LVx1MDAzZXVzZWQsIG9mZnNldCwgbGVuLCBhbGlnbiwgY291bnQpO1xuQEAgLTkwLDcgKzg5LDcgQEAgaW50IGJpdF9tYXBfc3RyaW5nX2dldChzdHJ1Y3QgYml0X21hcCAqdCwgaW50IGxlbiwgaW50IGFsaWduKVxuIFx0XHRcdFx0XHR0LVx1MDAzZWxhc3Rfb2ZmID0gMDtcbiBcdFx0XHRcdHQtXHUwMDNldXNlZCArPSBsZW47XG4gXHRcdFx0XHR0LVx1MDAzZWxhc3Rfc2l6ZSA9IGxlbjtcbi1cdFx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnQtXHUwMDNlbG9jayk7XG4rXHRcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnQtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0XHRcdFx0cmV0dXJuIG9mZnNldDtcbiBcdFx0XHR9XG4gXHRcdH1cbkBAIC0xMDMsMTAgKzEwMiwxMSBAQCBpbnQgYml0X21hcF9zdHJpbmdfZ2V0KHN0cnVjdCBiaXRfbWFwICp0LCBpbnQgbGVuLCBpbnQgYWxpZ24pXG4gdm9pZCBiaXRfbWFwX2NsZWFyKHN0cnVjdCBiaXRfbWFwICp0LCBpbnQgb2Zmc2V0LCBpbnQgbGVuKVxuIHtcbiBcdGludCBpO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiBcdGlmICh0LVx1MDAzZXVzZWQgXHUwMDNjIGxlbilcbiBcdFx0QlVHKCk7XHRcdC8qIE11Y2ggdG9vIGxhdGUgdG8gZG8gYW55IGdvb2QsIGJ1dCBhbGFzLi4uICovXG4tXHRzcGluX2xvY2soXHUwMDI2dC1cdTAwM2Vsb2NrKTtcbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnQtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbGVuOyBpKyspIHtcbiBcdFx0aWYgKHRlc3RfYml0KG9mZnNldCArIGksIHQtXHUwMDNlbWFwKSA9PSAwKVxuIFx0XHRcdEJVRygpO1xuQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIGJpdF9tYXBfY2xlYXIoc3RydWN0IGJpdF9tYXAgKnQsIGludCBvZmZzZXQsIGludCBsZW4pXG4gXHRpZiAob2Zmc2V0IFx1MDAzYyB0LVx1MDAzZWZpcnN0X2ZyZWUpXG4gXHRcdHQtXHUwMDNlZmlyc3RfZnJlZSA9IG9mZnNldDtcbiBcdHQtXHUwMDNldXNlZCAtPSBsZW47XG4tXHRzcGluX3VubG9jayhcdTAwMjZ0LVx1MDAzZWxvY2spO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiB9XG4gXG4gdm9pZCBiaXRfbWFwX2luaXQoc3RydWN0IGJpdF9tYXAgKnQsIHVuc2lnbmVkIGxvbmcgKm1hcCwgaW50IHNpemUpXG5kaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tbS9zcm1tdS5jIGIvYXJjaC9zcGFyYy9tbS9zcm1tdS5jXG5pbmRleCA5YTc0OTAyYWQxODE0Li4yYTJjN2JkMjEwMTE0IDEwMDY0NFxuLS0tIGEvYXJjaC9zcGFyYy9tbS9zcm1tdS5jXG4rKysgYi9hcmNoL3NwYXJjL21tL3NybW11LmNcbkBAIC0zNTksMTkgKzM1OSwzOSBAQCBwZ3RhYmxlX3QgcHRlX2FsbG9jX29uZShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBcdHJldHVybiBwdGVwO1xuIH1cbiBcbi12b2lkIHB0ZV9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcHRlcClcbitzdGF0aWMgdm9pZCBfX3B0ZV9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcHRlcClcbiB7XG4rXHRjb25zdCBib29sIHByb2Nlc3NfY29udGV4dCA9IG1tO1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXG4gXHRwYWdlID0gcGZuX3RvX3BhZ2UoX19ub2NhY2hlX3BhKCh1bnNpZ25lZCBsb25nKXB0ZXApIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbi1cdHNwaW5fbG9jayhcdTAwMjZtbS1cdTAwM2VwYWdlX3RhYmxlX2xvY2spO1xuK1x0aWYgKHByb2Nlc3NfY29udGV4dClcbitcdFx0c3Bpbl9sb2NrKFx1MDAyNm1tLVx1MDAzZXBhZ2VfdGFibGVfbG9jayk7XG4gXHRpZiAocGFnZV9yZWZfZGVjX3JldHVybihwYWdlKSA9PSAxKVxuIFx0XHRwYWdldGFibGVfZHRvcihwYWdlX3B0ZGVzYyhwYWdlKSk7XG4tXHRzcGluX3VubG9jayhcdTAwMjZtbS1cdTAwM2VwYWdlX3RhYmxlX2xvY2spO1xuK1x0aWYgKHByb2Nlc3NfY29udGV4dClcbitcdFx0c3Bpbl91bmxvY2soXHUwMDI2bW0tXHUwMDNlcGFnZV90YWJsZV9sb2NrKTtcbiBcbiBcdHNybW11X2ZyZWVfbm9jYWNoZShwdGVwLCBTUk1NVV9QVEVfVEFCTEVfU0laRSk7XG4gfVxuIFxuK3ZvaWQgcHRlX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwdGVwKVxuK3tcbitcdF9fcHRlX2ZyZWUobW0sIHB0ZXApO1xuK31cbitcbit2b2lkIF9fdGxiX3JlbW92ZV90YWJsZSh2b2lkICp0YWJsZSlcbit7XG4rXHRjb25zdCB1bnNpZ25lZCBsb25nIGVuY29kZWQgPSAodW5zaWduZWQgbG9uZyl0YWJsZTtcbitcdGNvbnN0IHVuc2lnbmVkIGxvbmcgYWRkciA9IGVuY29kZWQgXHUwMDI2IH4xVUw7XG4rXHRjb25zdCBib29sIGlzX3BtZCA9IGVuY29kZWQgXHUwMDI2IDE7XG4rXG4rXHRpZiAoaXNfcG1kKVxuK1x0XHRmcmVlX3BtZF9mYXN0KChwbWRfdCAqKWFkZHIpO1xuK1x0ZWxzZSAvKiBDYWxsZWQgZnJvbSBzb2Z0aXJxIGNvbnRleHQsIG5vIG1tLiAqL1xuK1x0XHRfX3B0ZV9mcmVlKE5VTEwsIChwZ3RhYmxlX3QpYWRkcik7XG4rfVxuK1xuIC8qIGNvbnRleHQgaGFuZGxpbmcgLSBhIGR5bmFtaWNhbGx5IHNpemVkIHBvb2wgaXMgdXNlZCAqL1xuICNkZWZpbmUgTk9fQ09OVEVYVFx0LTFcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3VtL0tjb25maWcgYi9hcmNoL3VtL0tjb25maWdcbmluZGV4IGQ5NTQxZDEzZDllYjAuLjk0YjhmZjcwZjU3OGIgMTAwNjQ0XG4tLS0gYS9hcmNoL3VtL0tjb25maWdcbisrKyBiL2FyY2gvdW0vS2NvbmZpZ1xuQEAgLTQ0LDcgKzQ0LDYgQEAgY29uZmlnIFVNTFxuIFx0c2VsZWN0IEhBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UU1xuIFx0c2VsZWN0IFRIUkVBRF9JTkZPX0lOX1RBU0tcbiBcdHNlbGVjdCBTUEFSU0VfSVJRXG4tXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxuIFxuIGNvbmZpZyBNTVVcbiBcdGJvb2xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnIGIvYXJjaC94ODYvS2NvbmZpZ1xuaW5kZXggYThjM2IzZDMxYTI3Ni4uNmU1ZTQ2MmVjMDU5YSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L0tjb25maWdcbisrKyBiL2FyY2gveDg2L0tjb25maWdcbkBAIC0yODMsNyArMjgzLDYgQEAgY29uZmlnIFg4NlxuIFx0c2VsZWN0IEhBVkVfUEVSRl9SRUdTXG4gXHRzZWxlY3QgSEFWRV9QRVJGX1VTRVJfU1RBQ0tfRFVNUFxuIFx0c2VsZWN0IEFTWU5DX0tFUk5FTF9QR1RBQkxFX0ZSRUVcdGlmIElPTU1VX1NWQVxuLVx0c2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcbiBcdHNlbGVjdCBNTVVfR0FUSEVSX01FUkdFX1ZNQVNcbiBcdHNlbGVjdCBIQVZFX1BPU0lYX0NQVV9USU1FUlNfVEFTS19XT1JLXG4gXHRzZWxlY3QgSEFWRV9SRUdTX0FORF9TVEFDS19BQ0NFU1NfQVBJXG5kaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vdGxiLmggYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS90bGIuaFxuaW5kZXggOGMzY2ViNDI3MDE4MC4uNmZiN2I3ODE1NGY2MiAxMDA2NDRcbi0tLSBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3RsYi5oXG4rKysgYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS90bGIuaFxuQEAgLTE2LDcgKzE2LDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20tZ2VuZXJpYy90bGIuaFx1MDAzZVxuIFxuLSNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLCBwdGUsIGFkZHJlc3MpXHRwdGVfZnJlZSgodGxiKS1cdTAwM2VtbSwgcHRlKVxuKyNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLCBwdGUsIGFkZHJlc3MpXHR0bGJfcmVtb3ZlX3B0ZGVzYygodGxiKSwgcGFnZV9wdGRlc2MocHRlKSlcbiBcbiB2b2lkIGNoZWNrX3RsYl9zYW5pdHkodm9pZCk7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmhcbmluZGV4IGJkY2MyNzc4YWM2NGYuLjA0NGRhYmMxZmU5Y2IgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3RsYi5oXG4rKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3RsYi5oXG5AQCAtNjcsMTEgKzY3LDggQEBcbiAgKiAgLSB0bGJfcmVtb3ZlX3RhYmxlKClcbiAgKlxuICAqICAgIHRsYl9yZW1vdmVfdGFibGUoKSBpcyB0aGUgYmFzaWMgcHJpbWl0aXZlIHRvIGZyZWUgcGFnZS10YWJsZSBkaXJlY3Rvcmllc1xuLSAqICAgIChfX3AqX2ZyZWVfdGxiKCkpLiAgSW4gaXQncyBtb3N0IHByaW1pdGl2ZSBmb3JtIGl0IGlzIGFuIGFsaWFzIGZvclxuLSAqICAgIHRsYl9yZW1vdmVfcGFnZSgpIGJlbG93LCBmb3Igd2hlbiBwYWdlIGRpcmVjdG9yaWVzIGFyZSBwYWdlcyBhbmQgaGF2ZSBub1xuLSAqICAgIGFkZGl0aW9uYWwgY29uc3RyYWludHMuXG4tICpcbi0gKiAgICBTZWUgYWxzbyBNTVVfR0FUSEVSX1RBQkxFX0ZSRUUgYW5kIE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUuXG4rICogICAgKF9fcCpfZnJlZV90bGIoKSkuICBQYWdlIGRpcmVjdG9yaWVzIGFyZSBmcmVlZCBhZnRlciBhbiBSQ1UgZ3JhY2VcbisgKiAgICBwZXJpb2QgLSBzZWUgdGhlIGNvbW1lbnQgaW4gbW0vbW11X2dhdGhlci5jLlxuICAqXG4gICogIC0gdGxiX3JlbW92ZV9wYWdlKCkgLyB0bGJfcmVtb3ZlX3BhZ2Vfc2l6ZSgpXG4gICogIC0gX190bGJfcmVtb3ZlX2ZvbGlvX3BhZ2VzKCkgLyBfX3RsYl9yZW1vdmVfcGFnZV9zaXplKClcbkBAIC0xNTEsMjQgKzE0OCwxNSBAQFxuICAqICBUaGlzIG1pZ2h0IGJlIHVzZWZ1bCBpZiB5b3VyIGFyY2hpdGVjdHVyZSBoYXMgc2l6ZSBzcGVjaWZpYyBUTEJcbiAgKiAgaW52YWxpZGF0aW9uIGluc3RydWN0aW9ucy5cbiAgKlxuLSAqICBNTVVfR0FUSEVSX1RBQkxFX0ZSRUVcbi0gKlxuLSAqICBUaGlzIHByb3ZpZGVzIHRsYl9yZW1vdmVfdGFibGUoKSwgdG8gYmUgdXNlZCBpbnN0ZWFkIG9mIHRsYl9yZW1vdmVfcGFnZSgpXG4tICogIGZvciBwYWdlIGRpcmVjdG9yZXMgKF9fcCpfZnJlZV90bGIoKSkuXG4tICpcbi0gKiAgVXNlZnVsIGlmIHlvdXIgYXJjaGl0ZWN0dXJlIGhhcyBub24tcGFnZSBwYWdlIGRpcmVjdG9yaWVzLlxuKyAqICBQYWdlIGRpcmVjdG9yaWVzIChfX3AqX2ZyZWVfdGxiKCkpIGFyZSBhbHdheXMgZnJlZWQgdmlhIHRsYl9yZW1vdmVfdGFibGUoKSxcbisgKiAgYWZ0ZXIgYW4gUkNVIGdyYWNlIHBlcmlvZCAoc2VlIG1tL21tdV9nYXRoZXIuYykuXG4gICpcbi0gKiAgV2hlbiB1c2VkLCBhbiBhcmNoaXRlY3R1cmUgaXMgZXhwZWN0ZWQgdG8gcHJvdmlkZSBfX3RsYl9yZW1vdmVfdGFibGUoKSBvclxuLSAqICB1c2UgdGhlIGdlbmVyaWMgX190bGJfcmVtb3ZlX3RhYmxlKCksIHdoaWNoIGRvZXMgdGhlIGFjdHVhbCBmcmVlaW5nIG9mIHRoZXNlXG4tICogIHBhZ2VzLlxuKyAqIFRoaXMgc2VyaWFsaXNlcyBhZ2FpbnN0IHNvZnR3YXJlIHBhZ2UtdGFibGUgd2Fsa2VycywgaW5jbHVkaW5nIGFyY2hpdGVjdHVyZXNcbisgKiB3aGljaCBkbyBub3QgdXNlIElQSXMgZm9yIHJlbW90ZSBUTEIgaW52YWxpZGF0ZXMuXG4gICpcbi0gKiAgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxuLSAqXG4tICogIExpa2UgTU1VX0dBVEhFUl9UQUJMRV9GUkVFLCBhbmQgYWRkcyBzZW1pLVJDVSBzZW1hbnRpY3MgdG8gdGhlIGZyZWUgKHNlZVxuLSAqICBjb21tZW50IGJlbG93KS5cbi0gKlxuLSAqICBVc2VmdWwgaWYgeW91ciBhcmNoaXRlY3R1cmUgZG9lc24ndCB1c2UgSVBJcyBmb3IgcmVtb3RlIFRMQiBpbnZhbGlkYXRlc1xuLSAqICBhbmQgdGhlcmVmb3JlIGRvZXNuJ3QgbmF0dXJhbGx5IHNlcmlhbGl6ZSB3aXRoIHNvZnR3YXJlIHBhZ2UtdGFibGUgd2Fsa2Vycy5cbisgKiAgQW4gYXJjaGl0ZWN0dXJlIGlzIGV4cGVjdGVkIHRvIHByb3ZpZGUgX190bGJfcmVtb3ZlX3RhYmxlKCkgKHNlZVxuKyAqICBIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRSkgb3IgdXNlIHRoZSBnZW5lcmljIF9fdGxiX3JlbW92ZV90YWJsZSgpLCB3aGljaFxuKyAqICBkb2VzIHRoZSBhY3R1YWwgZnJlZWluZyBvZiB0aGVzZSBwYWdlcy5cbiAgKlxuICAqICBNTVVfR0FUSEVSX05PX0ZMVVNIX0NBQ0hFXG4gICpcbkBAIC0yMDAsMTIgKzE4OCw4IEBAXG4gICogIHZhcmlvdXMgcHRlcF9nZXRfYW5kX2NsZWFyKCkgZnVuY3Rpb25zLlxuICAqL1xuIFxuLSNpZmRlZiBDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFXG4tXG4gc3RydWN0IG1tdV90YWJsZV9iYXRjaCB7XG4tI2lmZGVmIENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG4gXHRzdHJ1Y3QgcmN1X2hlYWRcdFx0cmN1O1xuLSNlbmRpZlxuIFx0dW5zaWduZWQgaW50XHRcdG5yO1xuIFx0dm9pZFx0XHRcdCp0YWJsZXNbXTtcbiB9O1xuQEAgLTIyNCwyMyArMjA4LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZSh2b2lkICp0YWJsZSlcbiBcbiBleHRlcm4gdm9pZCB0bGJfcmVtb3ZlX3RhYmxlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHZvaWQgKnRhYmxlKTtcbiBcbi0jZWxzZSAvKiAhQ09ORklHX01NVV9HQVRIRVJfVEFCTEVfRlJFRSAqL1xuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfcmVtb3ZlX3BhZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHBhZ2UgKnBhZ2UpO1xuLS8qXG4tICogV2l0aG91dCBNTVVfR0FUSEVSX1RBQkxFX0ZSRUUgdGhlIGFyY2hpdGVjdHVyZSBpcyBhc3N1bWVkIHRvIGhhdmUgcGFnZSBiYXNlZFxuLSAqIHBhZ2UgZGlyZWN0b3JpZXMgYW5kIHdlIGNhbiB1c2UgdGhlIG5vcm1hbCBwYWdlIGJhdGNoaW5nIHRvIGZyZWUgdGhlbS5cbi0gKi9cbi1zdGF0aWMgaW5saW5lIHZvaWQgdGxiX3JlbW92ZV90YWJsZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCB2b2lkICp0YWJsZSlcbi17XG4tXHRzdHJ1Y3QgcHRkZXNjICpwdGRlc2MgPSAoc3RydWN0IHB0ZGVzYyAqKXRhYmxlO1xuLVxuLVx0cGFnZXRhYmxlX2R0b3IocHRkZXNjKTtcbi1cdHRsYl9yZW1vdmVfcGFnZSh0bGIsIHB0ZGVzY19wYWdlKHB0ZGVzYykpO1xuLX1cbi0jZW5kaWYgLyogQ09ORklHX01NVV9HQVRIRVJfVEFCTEVfRlJFRSAqL1xuLVxuLSNpZmRlZiBDT05GSUdfTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxuIC8qXG4gICogVGhpcyBhbGxvd3MgYW4gYXJjaGl0ZWN0dXJlIHRoYXQgZG9lcyBub3QgdXNlIHRoZSBsaW51eCBwYWdlLXRhYmxlcyBmb3JcbiAgKiBoYXJkd2FyZSB0byBza2lwIHRoZSBUTEJJIHdoZW4gZnJlZWluZyBwYWdlIHRhYmxlcy5cbkBAIC0yNTMsMTkgKzIyMCw2IEBAIHZvaWQgdGxiX3JlbW92ZV90YWJsZV9zeW5jX29uZSh2b2lkKTtcbiBcbiB2b2lkIHRsYl9yZW1vdmVfdGFibGVfc3luY19yY3Uodm9pZCk7XG4gXG4tI2Vsc2Vcbi1cbi0jaWZkZWYgdGxiX25lZWRzX3RhYmxlX2ludmFsaWRhdGVcbi0jZXJyb3IgdGxiX25lZWRzX3RhYmxlX2ludmFsaWRhdGUoKSByZXF1aXJlcyBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG4tI2VuZGlmXG4tXG4tc3RhdGljIGlubGluZSB2b2lkIHRsYl9yZW1vdmVfdGFibGVfc3luY19vbmUodm9pZCkgeyB9XG4tXG4tc3RhdGljIGlubGluZSB2b2lkIHRsYl9yZW1vdmVfdGFibGVfc3luY19yY3Uodm9pZCkgeyB9XG4tXG4tI2VuZGlmIC8qIENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFICovXG4tXG4tXG4gI2lmbmRlZiBDT05GSUdfTU1VX0dBVEhFUl9OT19HQVRIRVJcbiAvKlxuICAqIElmIHdlIGNhbid0IGFsbG9jYXRlIGEgcGFnZSB0byBtYWtlIGEgYmlnIGJhdGNoIG9mIHBhZ2UgcG9pbnRlcnNcbkBAIC0zMjUsOSArMjc5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHRsYl9mbHVzaF9ybWFwcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3RcbiBzdHJ1Y3QgbW11X2dhdGhlciB7XG4gXHRzdHJ1Y3QgbW1fc3RydWN0XHQqbW07XG4gXG4tI2lmZGVmIENPTkZJR19NTVVfR0FUSEVSX1RBQkxFX0ZSRUVcbiBcdHN0cnVjdCBtbXVfdGFibGVfYmF0Y2hcdCpiYXRjaDtcbi0jZW5kaWZcbiBcbiBcdHVuc2lnbmVkIGxvbmdcdFx0c3RhcnQ7XG4gXHR1bnNpZ25lZCBsb25nXHRcdGVuZDtcbmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZ1xuaW5kZXggYzFkZGY1OWMwZDcxYS4uYmM3YmVmYWZiNDdiNSAxMDA2NDRcbi0tLSBhL21tL0tjb25maWdcbisrKyBiL21tL0tjb25maWdcbkBAIC0xNDY1LDcgKzE0NjUsNyBAQCBjb25maWcgSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEVcbiBcbiBjb25maWcgUFRfUkVDTEFJTVxuIFx0ZGVmX2Jvb2wgeVxuLVx0ZGVwZW5kcyBvbiBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFIFx1MDAyNlx1MDAyNiAhSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEVcbitcdGRlcGVuZHMgb24gTU1VIFx1MDAyNlx1MDAyNiAhSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEVcbiBcdGhlbHBcbiBcdCAgVHJ5IHRvIHJlY2xhaW0gZW1wdHkgdXNlciBwYWdlIHRhYmxlIHBhZ2VzIGluIHBhdGhzIG90aGVyIHRoYW4gbXVubWFwXG4gXHQgIGFuZCBleGl0X21tYXAgcGF0aC5cbmRpZmYgLS1naXQgYS9tbS9ndXAuYyBiL21tL2d1cC5jXG5pbmRleCBlYjg5OGVhMWVlMjJlLi42M2I0MzVlYzYwNWM4IDEwMDY0NFxuLS0tIGEvbW0vZ3VwLmNcbisrKyBiL21tL2d1cC5jXG5AQCAtMjcwMCw4ICsyNzAwLDkgQEAgRVhQT1JUX1NZTUJPTChnZXRfdXNlcl9wYWdlc191bmxvY2tlZCk7XG4gICogQmVmb3JlIGFjdGl2YXRpbmcgdGhpcyBjb2RlLCBwbGVhc2UgYmUgYXdhcmUgdGhhdCB0aGUgZm9sbG93aW5nIGFzc3VtcHRpb25zXG4gICogYXJlIGN1cnJlbnRseSBtYWRlOlxuICAqXG4tICogICopIEVpdGhlciBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFIGlzIGVuYWJsZWQsIGFuZCB0bGJfcmVtb3ZlX3RhYmxlKCkgaXMgdXNlZCB0b1xuLSAqICBmcmVlIHBhZ2VzIGNvbnRhaW5pbmcgcGFnZSB0YWJsZXMgb3IgVExCIGZsdXNoaW5nIHJlcXVpcmVzIElQSSBicm9hZGNhc3QuXG4rICogICopIHRsYl9yZW1vdmVfdGFibGUoKSBpcyB1c2VkIHRvIGZyZWUgcGFnZXMgY29udGFpbmluZyBwYWdlIHRhYmxlcywgd2l0aFxuKyAqICB0aGUgZnJlZSBkZWZlcnJlZCB1bnRpbCBhbiBSQ1UgZ3JhY2UgcGVyaW9kIGhhcyBlbGFwc2VkIChzZWVcbisgKiAgbW0vbW11X2dhdGhlci5jKS5cbiAgKlxuICAqICAqKSBwdGVzIGNhbiBiZSByZWFkIGF0b21pY2FsbHkgYnkgdGhlIGFyY2hpdGVjdHVyZS5cbiAgKlxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCA1NDQ5NGMzZmE5ODM1Li41MDVmN2I2MmZmMjgxIDEwMDY0NFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xuQEAgLTI0NzYsNyArMjQ3Niw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB6YXBfZGVwb3NpdGVkX3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKVxuIFx0cGd0YWJsZV90IHBndGFibGU7XG4gXG4gXHRwZ3RhYmxlID0gcGd0YWJsZV90cmFuc19odWdlX3dpdGhkcmF3KG1tLCBwbWQpO1xuLVx0cHRlX2ZyZWUobW0sIHBndGFibGUpO1xuK1x0cHRlX2ZyZWVfZGVmZXIobW0sIHBndGFibGUpO1xuIFx0bW1fZGVjX25yX3B0ZXMobW0pO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9tbS9tbXVfZ2F0aGVyLmMgYi9tbS9tbXVfZ2F0aGVyLmNcbmluZGV4IDM5ODVkODU2ZGU3ZjkuLjJhNzJhOTY4Njc3M2EgMTAwNjQ0XG4tLS0gYS9tbS9tbXVfZ2F0aGVyLmNcbisrKyBiL21tL21tdV9nYXRoZXIuY1xuQEAgLTIxOCw4ICsyMTgsNiBAQCBib29sIF9fdGxiX3JlbW92ZV9wYWdlX3NpemUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBwYWdlX1xuIFxuICNlbmRpZiAvKiBNTVVfR0FUSEVSX05PX0dBVEhFUiAqL1xuIFxuLSNpZmRlZiBDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFXG4tXG4gc3RhdGljIHZvaWQgX190bGJfcmVtb3ZlX3RhYmxlX2ZyZWUoc3RydWN0IG1tdV90YWJsZV9iYXRjaCAqYmF0Y2gpXG4ge1xuIFx0aW50IGk7XG5AQCAtMjMwLDEwICsyMjgsOCBAQCBzdGF0aWMgdm9pZCBfX3RsYl9yZW1vdmVfdGFibGVfZnJlZShzdHJ1Y3QgbW11X3RhYmxlX2JhdGNoICpiYXRjaClcbiBcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyliYXRjaCk7XG4gfVxuIFxuLSNpZmRlZiBDT05GSUdfTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxuLVxuIC8qXG4tICogU2VtaSBSQ1UgZnJlZWluZyBvZiB0aGUgcGFnZSBkaXJlY3Rvcmllcy5cbisgKiBSQ1UgZnJlZWluZyBvZiB0aGUgcGFnZSBkaXJlY3Rvcmllcy5cbiAgKlxuICAqIFRoaXMgaXMgbmVlZGVkIGJ5IHNvbWUgYXJjaGl0ZWN0dXJlcyB0byBpbXBsZW1lbnQgc29mdHdhcmUgcGFnZXRhYmxlIHdhbGtlcnMuXG4gICpcbkBAIC0yNTksMTMgKzI1NSwxMyBAQCBzdGF0aWMgdm9pZCBfX3RsYl9yZW1vdmVfdGFibGVfZnJlZShzdHJ1Y3QgbW11X3RhYmxlX2JhdGNoICpiYXRjaClcbiAgKiBtZWFucy5cbiAgKlxuICAqIFdoYXQgd2UgZG8gaXMgYmF0Y2ggdGhlIGZyZWVkIGRpcmVjdG9yeSBwYWdlcyAodGFibGVzKSBhbmQgUkNVIGZyZWUgdGhlbS5cbi0gKiBXZSB1c2UgdGhlIHNjaGVkIFJDVSB2YXJpYW50LCBhcyB0aGF0IGd1YXJhbnRlZXMgdGhhdCBJUlEvcHJlZW1wdCBkaXNhYmxpbmdcbi0gKiBob2xkcyBvZmYgZ3JhY2UgcGVyaW9kcy5cbisgKiBEaXNhYmxpbmcgSVJRcyBvciBwcmVlbXB0aW9uIGhvbGRzIG9mZiBSQ1UgZ3JhY2UgcGVyaW9kcywgc28gdGhpcyBwcm90ZWN0c1xuKyAqIGJvdGggcmN1X3JlYWRfbG9jaygpIGFuZCBJUlEtZGlzYWJsaW5nIHdhbGtlcnMuXG4gICpcbiAgKiBIb3dldmVyLCBpbiBvcmRlciB0byBiYXRjaCB0aGVzZSBwYWdlcyB3ZSBuZWVkIHRvIGFsbG9jYXRlIHN0b3JhZ2UsIHRoaXNcbiAgKiBhbGxvY2F0aW9uIGlzIGRlZXAgaW5zaWRlIHRoZSBNTSBjb2RlIGFuZCBjYW4gdGh1cyBlYXNpbHkgZmFpbCBvbiBtZW1vcnlcbi0gKiBwcmVzc3VyZS4gVG8gZ3VhcmFudGVlIHByb2dyZXNzIHdlIGZhbGwgYmFjayB0byBzaW5nbGUgdGFibGUgZnJlZWluZywgc2VlXG4tICogdGhlIGltcGxlbWVudGF0aW9uIG9mIHRsYl9yZW1vdmVfdGFibGVfb25lKCkuXG4rICogcHJlc3N1cmUuIFRvIGd1YXJhbnRlZSBwcm9ncmVzcyB3ZSBmYWxsIGJhY2sgdG8gc2luZ2xlIHRhYmxlIGZyZWVpbmcsIHdoaWNoXG4rICogaXMgYWxzbyBSQ1UtZGVmZXJyZWQgLSBzZWUgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRsYl9yZW1vdmVfdGFibGVfb25lKCkuXG4gICpcbiAgKi9cbiBcbkBAIC0zMTUsMTUgKzMxMSw2IEBAIHZvaWQgdGxiX3JlbW92ZV90YWJsZV9zeW5jX3JjdSh2b2lkKVxuIFx0c3luY2hyb25pemVfcmN1KCk7XG4gfVxuIFxuLSNlbHNlIC8qICFDT05GSUdfTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSAqL1xuLVxuLXN0YXRpYyB2b2lkIHRsYl9yZW1vdmVfdGFibGVfZnJlZShzdHJ1Y3QgbW11X3RhYmxlX2JhdGNoICpiYXRjaClcbi17XG4tXHRfX3RsYl9yZW1vdmVfdGFibGVfZnJlZShiYXRjaCk7XG4tfVxuLVxuLSNlbmRpZiAvKiBDT05GSUdfTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSAqL1xuLVxuIC8qXG4gICogSWYgd2Ugd2FudCB0bGJfcmVtb3ZlX3RhYmxlKCkgdG8gaW1wbHkgVExCIGludmFsaWRhdGVzLlxuICAqL1xuQEAgLTQwMywxMyArMzkwLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIHRsYl90YWJsZV9pbml0KHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIpXG4gXHR0bGItXHUwMDNlYmF0Y2ggPSBOVUxMO1xuIH1cbiBcbi0jZWxzZSAvKiAhQ09ORklHX01NVV9HQVRIRVJfVEFCTEVfRlJFRSAqL1xuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfdGFibGVfZmx1c2goc3RydWN0IG1tdV9nYXRoZXIgKnRsYikgeyB9XG4tc3RhdGljIGlubGluZSB2b2lkIHRsYl90YWJsZV9pbml0KHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIpIHsgfVxuLVxuLSNlbmRpZiAvKiBDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFICovXG4tXG4gc3RhdGljIHZvaWQgdGxiX2ZsdXNoX21tdV9mcmVlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIpXG4ge1xuIFx0dGxiX3RhYmxlX2ZsdXNoKHRsYik7XG5kaWZmIC0tZ2l0IGEvbW0vcGd0YWJsZS1nZW5lcmljLmMgYi9tbS9wZ3RhYmxlLWdlbmVyaWMuY1xuaW5kZXggYjkxYjFhOTgwMjljNy4uZmY4ZmYzNzA2NDg1MyAxMDA2NDRcbi0tLSBhL21tL3BndGFibGUtZ2VuZXJpYy5jXG4rKysgYi9tbS9wZ3RhYmxlLWdlbmVyaWMuY1xuQEAgLTM4Niw5ICszODYsMjEgQEAgcHRlX3QgKnB0ZV9vZmZzZXRfbWFwX3J3X25vbG9jayhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCxcbiAgKiBiZSByZWFkLW9ubHkvcmVhZC13cml0ZSBwcm90ZWN0ZWQuXG4gICpcbiAgKiBOb3RlIHRoYXQgZnJlZV9wZ3RhYmxlcygpLCB1c2VkIGFmdGVyIHVubWFwcGluZyBkZXRhY2hlZCB2bWFzLCBvciB3aGVuXG4tICogZXhpdGluZyB0aGUgd2hvbGUgbW0sIGRvZXMgbm90IHRha2UgcGFnZSB0YWJsZSBsb2NrIGJlZm9yZSBmcmVlaW5nIGEgcGFnZVxuLSAqIHRhYmxlLCBhbmQgbWF5IG5vdCB1c2UgUkNVIGF0IGFsbDogXCJvdXRzaWRlcnNcIiBsaWtlIGtodWdlcGFnZWQgc2hvdWxkIGF2b2lkXG4tICogcHRlX29mZnNldF9tYXAoKSBhbmQgY28gb25jZSB0aGUgdm1hIGlzIGRldGFjaGVkIGZyb20gbW0gb3IgbW1fdXNlcnMgaXMgemVyby5cbisgKiBleGl0aW5nIHRoZSB3aG9sZSBtbSwgZG9lcyBub3QgdGFrZSB0aGUgcGFnZSB0YWJsZSBsb2NrIGJlZm9yZSBmcmVlaW5nIGFcbisgKiB0YWJsZS5cbisgKlxuKyAqIEhvd2V2ZXIsIHRoZSBQTUQgZW50cnkgaXMgY2xlYXJlZCBmaXJzdCwgYW5kIHRoZSB0YWJsZSBmcmVlZCBvbmx5IGFmdGVyXG4rICogYW4gUkNVIGdyYWNlIHBlcmlvZCwgc28gYSB3YWxrZXIgdGhhdCBtYXBwZWQgdGhlIHRhYmxlIHVuZGVyXG4rICogcmN1X3JlYWRfbG9jaygpIHN0YXlzIHNhZmUsIGFuZCB0aGUgcG1kX3NhbWUoKSByZWNoZWNrIGluXG4rICogcHRlX29mZnNldF9tYXBfbG9jaygpIGRldGVjdHMgdGhlIHRlYXJkb3duLlxuKyAqXG4rICogVGhlcmVmb3JlIGl0IGlzIHNhZmUgZm9yIFwib3V0c2lkZXJzXCIgbGlrZSBraHVnZXBhZ2VkIHRvIHVzZVxuKyAqIHB0ZV9vZmZzZXRfbWFwKCkgYW5kIGNvLiBmb3IgVk1BcyB0aGF0IG1pZ2h0IGJlIHVuZGVyZ29pbmcgcGFnZSB0YWJsZVxuKyAqIHRlYXJkb3duLlxuKyAqXG4rICogTm90ZSB0aGF0IHRoZSBQR0QgaXRzZWxmIGlzIGZyZWVkIGF0IG1tZHJvcCgpIHRpbWUsIG5vdCB1bmRlciBSQ1UgLSBzbyB0aGVcbisgKiB3YWxrZXIgbXVzdCBrZWVwIHRoZSBtbSBhbGl2ZSB2aWEgbW1ncmFiKCkuIFdpdGggdGhhdCBoZWxkLCB3YWxraW5nIHJlbWFpbnNcbisgKiBzYWZlIGV2ZW4gb25jZSBtbV91c2VycyBoYXMgcmVhY2hlZCB6ZXJvLlxuICAqL1xuIHB0ZV90ICpwdGVfb2Zmc2V0X21hcF9sb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLFxuIFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYWRkciwgc3BpbmxvY2tfdCAqKnB0bHApXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo0Mzo1NC4xNDI0OTE5NzhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0OTQ0Mzc3MTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IFJDVSBUYWJsZSBGcmVlaW5nKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgd2hhdCdzIGdvaW5nIG9uLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCdzIHNpbXBsaWZ5aW5nIFJDVSB0YWJsZSBmcmVlaW5nIGFjcm9zcyB0aGUgYm9hcmQuIFRoZSBnb2FsIHNlZW1zIHRvIGJlIHRvIG1ha2UgUkNVLWJhc2VkIHRhYmxlIGZyZWVpbmcgdGhlIHN0YW5kYXJkLCByZWdhcmRsZXNzIG9mIGFyY2hpdGVjdHVyZSwgaW5zdGVhZCBvZiBjb25kaXRpb25hbGx5IGNvbXBpbGluZyBpdCBpbi4gV2UncmUgZ2V0dGluZyByaWQgb2YgYENPTkZJR19NTVVfR0FUSEVSX1RBQkxFX0ZSRUVgIGFuZCBgQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVgLCB3aGljaCBzdWdnZXN0cyBhIG1vdmUgdG93YXJkcyBhIHVuaWZpZWQgYXBwcm9hY2guXG5cbkkgbmVlZCB0byBjb25maXJtIHRoaXMuIExvb2tpbmcgYXQgdGhlIGRpZmYsIEkgc2VlIGNoYW5nZXMgc2NhdHRlcmVkIGFjcm9zcyB0aGUgY29kZWJhc2UuIGBhcmNoL0tjb25maWdgIGZpbGVzIGFyZSBiZWluZyB1cGRhdGVkLCBhbmQgc2V2ZXJhbCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYGluY2x1ZGUvYXNtL3BnYWxsb2MuaGAgZmlsZXMgYXJlIGJlaW5nIHVwZGF0ZWQgdG8gdXNlIGB0bGJfcmVtb3ZlX3B0ZGVzY2AsIHJhdGhlciB0aGFuIGNvbmRpdGlvbmFsIGNhbGxzIHRvIGBfX3B1ZF9mcmVlX3RsYmAsIGBfX3BtZF9mcmVlX3RsYmAsIGFuZCBgX19wdGVfZnJlZV90bGJgLiBUaGF0IHJlaW5mb3JjZXMgdGhlIGlkZWEgb2Ygc3RhbmRhcmRpemluZyBvbiB0aGUgUkNVIG1lY2hhbmlzbS4gVGhlIGBpbmNsdWRlL2FzbS1nZW5lcmljL3RsYi5oYCBpcyBhbHNvIHJlbW92aW5nIHRoZSBgaWZkZWZgcyB0aGF0IHVzZWQgdG8gY29udHJvbCB0aGUgYHN0cnVjdCBtbXVfdGFibGVfYmF0Y2hgIGFuZCBSQ1UgdGFibGUgcmVtb3ZhbC5cblxuRnVydGhlciBkb3duIHRoZSBsaW5lLCBJJ20gbm90aW5nIGNoYW5nZXMgdG8gYG1tL0tjb25maWdgICh0aGUgYFBUX1JFQ0xBSU1gIG9wdGlvbiBsb29rcyBsaWtlIGl0J3MgYmVpbmcgY29uZGl0aW9uZWQgb24gdGhlIE1NVSBhbmQgYW4gYXJjaGl0ZWN0dXJlIG5vdCBoYXZpbmcgYEhBVkVfQVJDSF9UTEJfUkVNT1ZFX1RBQkxFYCksIGFuZCBjb21tZW50cyBpbiBgbW0vZ3VwLmNgIGFuZCBgbW0vcGd0YWJsZS1nZW5lcmljLmNgLiBUaGUgbW9zdCBpbnRlcmVzdGluZyBwYXJ0LCB0aG91Z2gsIGlzIHRoZSBjaGFuZ2UgdG8gYG1tL2h1Z2VfbWVtb3J5LmNgLiBgemFwX2RlcG9zaXRlZF90YWJsZWAgaXMgbm93IHVzaW5nIGBwdGVfZnJlZV9kZWZlcmAgaW5zdGVhZCBvZiBgcHRlX2ZyZWVgLiBUaGlzIGlzIGEgY3J1Y2lhbCBwb2ludCwgSSBuZWVkIHRvIGNoZWNrIGV4YWN0bHkgd2hhdCBgemFwX2RlcG9zaXRlZF90YWJsZWAgZG9lcywgYW5kIHVuZGVyc3RhbmQgYHB0ZV9mcmVlX2RlZmVyYCBpbiB0aGlzIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBodWdlIHBhZ2UgY29kZSBpcyBhZG9wdGluZyB0aGUgc2FtZSBzdHJhdGVneS5cblxuSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaG93IGBwdGVfZnJlZV9kZWZlcmAgaXMgaW1wbGVtZW50ZWQuIEknbGwgYWxzbyByZWFkIHVwIG9uIGB6YXBfZGVwb3NpdGVkX3RhYmxlYCB0byBmdWxseSB1bmRlcnN0YW5kIHdoYXQgaXMgaGFwcGVuaW5nIGhlcmUuIEknbSBnb2luZyB0byB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGNoZWNrIGBwdGVfZnJlZV9kZWZlcmAgYW5kIGB6YXBfZGVwb3NpdGVkX3RhYmxlYCwgYW5kIHRoZW4gSSB3aWxsIGJlIGFibGUgdG8gdmVyaWZ5IHRoYXQgbXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIGlzIGNvcnJlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTk1LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQ3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6NDM6NTkuMDg2ODcxNDEzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMTE0ODIyMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHRlX2ZyZWVfZGVmZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BnYWxsb2MuaD00Mz1zdGF0aWMgaW5saW5lIHZvaWQgcHRlX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwdGVwYWdlKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BnYWxsb2MuaC00Ny1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGdhbGxvYy5oOjQ4Oi8qIGFyY2ggdXNlIHB0ZV9mcmVlX2RlZmVyKCkgaW1wbGVtZW50YXRpb24gaW4gYXJjaC9wb3dlcnBjL21tL3BndGFibGUtZnJhZy5jICovXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BnYWxsb2MuaDo0OTojZGVmaW5lIHB0ZV9mcmVlX2RlZmVyIHB0ZV9mcmVlX2RlZmVyXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BnYWxsb2MuaDo1MDp2b2lkIHB0ZV9mcmVlX2RlZmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcGd0YWJsZSk7XFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BnYWxsb2MuaC01MS1cXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlLWZyYWcuYz0xMTc9dm9pZCBwdGVfZnJhZ21lbnRfZnJlZSh1bnNpZ25lZCBsb25nICp0YWJsZSwgaW50IGtlcm5lbClcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlLWZyYWcuYy0xMzMtI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbmFyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlLWZyYWcuYzoxMzQ6dm9pZCBwdGVfZnJlZV9kZWZlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHBndGFibGUpXFxuYXJjaC9wb3dlcnBjL21tL3BndGFibGUtZnJhZy5jLTEzNS17XFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGdhbGxvYy5oPTE1MT1zdGF0aWMgaW5saW5lIHZvaWQgcG1kX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BnYWxsb2MuaC0xNjctXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BnYWxsb2MuaDoxNjg6LyogYXJjaCB1c2UgcHRlX2ZyZWVfZGVmZXIoKSBpbXBsZW1lbnRhdGlvbiBpbiBhcmNoL3MzOTAvbW0vcGdhbGxvYy5jICovXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BnYWxsb2MuaDoxNjk6I2RlZmluZSBwdGVfZnJlZV9kZWZlciBwdGVfZnJlZV9kZWZlclxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmg6MTcwOnZvaWQgcHRlX2ZyZWVfZGVmZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwZ3RhYmxlKTtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGdhbGxvYy5oLTE3MS1cXG4tLVxcbmFyY2gvczM5MC9tbS9wZ2FsbG9jLmM9MTQ5PXN0YXRpYyB2b2lkIHB0ZV9mcmVlX25vdyhzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxuLS1cXG5hcmNoL3MzOTAvbW0vcGdhbGxvYy5jLTE1NS1cXG5hcmNoL3MzOTAvbW0vcGdhbGxvYy5jOjE1Njp2b2lkIHB0ZV9mcmVlX2RlZmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcGd0YWJsZSlcXG5hcmNoL3MzOTAvbW0vcGdhbGxvYy5jLTE1Ny17XFxuLS1cXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2NfNjQuaD02Nj12b2lkIHB0ZV9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcHRlcGFnZSk7XFxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzY0LmgtNjctXFxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzY0Lmg6Njg6LyogYXJjaCB1c2UgcHRlX2ZyZWVfZGVmZXIoKSBpbXBsZW1lbnRhdGlvbiBpbiBhcmNoL3NwYXJjL21tL2luaXRfNjQuYyAqL1xcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY182NC5oOjY5OiNkZWZpbmUgcHRlX2ZyZWVfZGVmZXIgcHRlX2ZyZWVfZGVmZXJcXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2NfNjQuaDo3MDp2b2lkIHB0ZV9mcmVlX2RlZmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcGd0YWJsZSk7XFxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzY0LmgtNzEtXFxuLS1cXG5hcmNoL3NwYXJjL21tL2luaXRfNjQuYz0yODY2PXN0YXRpYyB2b2lkIHB0ZV9mcmVlX25vdyhzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxuLS1cXG5hcmNoL3NwYXJjL21tL2luaXRfNjQuYy0yODczLVxcbmFyY2gvc3BhcmMvbW0vaW5pdF82NC5jOjI4NzQ6dm9pZCBwdGVfZnJlZV9kZWZlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHBndGFibGUpXFxuYXJjaC9zcGFyYy9tbS9pbml0XzY0LmMtMjg3NS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaD0xMTU9c3RhdGljIGlubGluZSB2b2lkIHB0ZV91bm1hcChwdGVfdCAqcHRlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMTIwLVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oOjEyMTp2b2lkIHB0ZV9mcmVlX2RlZmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcGd0YWJsZSk7XFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMTIyLVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0yNDc0PXN0YXRpYyBpbmxpbmUgdm9pZCB6YXBfZGVwb3NpdGVkX3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yNDc4LVxcdHBndGFibGUgPSBwZ3RhYmxlX3RyYW5zX2h1Z2Vfd2l0aGRyYXcobW0sIHBtZCk7XFxubW0vaHVnZV9tZW1vcnkuYzoyNDc5OlxcdHB0ZV9mcmVlX2RlZmVyKG1tLCBwZ3RhYmxlKTtcXG5tbS9odWdlX21lbW9yeS5jLTI0ODAtXFx0bW1fZGVjX25yX3B0ZXMobW0pO1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTE4NjI9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjA2Ny1cXHRwYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZShtbSwgaGFkZHIsIHBndF9wbWQpO1xcbm1tL2todWdlcGFnZWQuYzoyMDY4OlxcdHB0ZV9mcmVlX2RlZmVyKG1tLCBwbWRfcGd0YWJsZShwZ3RfcG1kKSk7XFxubW0va2h1Z2VwYWdlZC5jLTIwNjktXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MjE1MT1zdGF0aWMgdm9pZCByZXRyYWN0X3BhZ2VfdGFibGVzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IHBnb2ZmKVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTIyMjgtXFx0XFx0XFx0cGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2UobW0sIGFkZHIsIHBndF9wbWQpO1xcbm1tL2todWdlcGFnZWQuYzoyMjI5OlxcdFxcdFxcdHB0ZV9mcmVlX2RlZmVyKG1tLCBwbWRfcGd0YWJsZShwZ3RfcG1kKSk7XFxubW0va2h1Z2VwYWdlZC5jLTIyMzAtXFx0XFx0fVxcbi0tXFxubW0vcGd0YWJsZS1nZW5lcmljLmM9MjIxPXBtZF90IHBtZHBfY29sbGFwc2VfZmx1c2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4tLVxcbm1tL3BndGFibGUtZ2VuZXJpYy5jLTIzOS1cXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYzoyNDA6LyogYXJjaCBkZWZpbmUgcHRlX2ZyZWVfZGVmZXIgaW4gYXNtL3BnYWxsb2MuaCBmb3IgaXRzIG93biBpbXBsZW1lbnRhdGlvbiAqL1xcbm1tL3BndGFibGUtZ2VuZXJpYy5jOjI0MTojaWZuZGVmIHB0ZV9mcmVlX2RlZmVyXFxubW0vcGd0YWJsZS1nZW5lcmljLmMtMjQyLXN0YXRpYyB2b2lkIHB0ZV9mcmVlX25vdyhzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxuLS1cXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYy0yNDktXFxubW0vcGd0YWJsZS1nZW5lcmljLmM6MjUwOnZvaWQgcHRlX2ZyZWVfZGVmZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwZ3RhYmxlKVxcbm1tL3BndGFibGUtZ2VuZXJpYy5jLTI1MS17XFxuLS1cXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYy0yNTYtfVxcbm1tL3BndGFibGUtZ2VuZXJpYy5jOjI1NzojZW5kaWYgLyogcHRlX2ZyZWVfZGVmZXIgKi9cXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYy0yNTgtI2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo0NDowMS4yOTgzNTkwOTJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2Mzg3NDg1MjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRmVhc2liaWxpdHkgQXNzZXNzbWVudDogUkNVIFBhZ2UgVGFibGUgRnJlZWluZyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggc2VyaWVzIGxvb2tzIGxpa2UgYSBzaWduaWZpY2FudCByZWZhY3RvciB0byBtYWtlIFJDVS1iYXNlZCBwYWdlIHRhYmxlIGZyZWVpbmcgdGhlIHN0YW5kYXJkIGFwcHJvYWNoIGFjcm9zcyBhbGwgYXJjaGl0ZWN0dXJlcy4gSXQncyBlc3NlbnRpYWxseSB1bmlmeWluZyB0aGUgbWV0aG9kIG9mIGZyZWVpbmcgcGFnZSB0YWJsZXMgdW5kZXIgYE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVgLCBjbGVhbmluZyB1cCBzb21lIEtjb25maWcgb3B0aW9ucyByZWxhdGVkIHRvIHRhYmxlIGZyZWVpbmcsIGFuZCB1cGRhdGluZyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIHRvIHVzZSB0aGlzIGdlbmVyaWMgbWVjaGFuaXNtLiBUaGUgYHphcF9kZXBvc2l0ZWRfdGFibGVgIGZ1bmN0aW9uIG5vdyB1c2VzIGBwdGVfZnJlZV9kZWZlcmAsIHdoaWNoIGlzIGEga2V5IGNoYW5nZS5cblxuTXkgZmlyc3QgdGhvdWdodCBpcywgXCJJcyB0aGlzIGZ1bmN0aW9uYWxseSBzaWduaWZpY2FudCBlbm91Z2ggdG8gd2FycmFudCBmdXp6aW5nP1wiIEJhc2VkIG9uIHRoZSBndWlkZWxpbmVzLCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgaW1wYWN0cyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgb3IgYXJjaGl0ZWN0dXJlcy4gTGV0J3Mgc2VlLi4uXG5cbkknbSBzZWVpbmcgY2hhbmdlcyBhY3Jvc3MgYSBidW5jaCBvZiBjb3JlIE1NIGNvZGUsIGxpa2UgYG1tL21tdV9nYXRoZXIuY2AsIGBtbS9odWdlX21lbW9yeS5jYCwgYGluY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmhgLCBhbmQgYG1tL0tjb25maWdgLCBhbmQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUgZm9yIHRoaW5ncyBsaWtlIEFSQywgbTY4aywgbWljcm9ibGF6ZSwgc2gsIHNwYXJjLCB4dGVuc2EsIGFuZCB4ODYuIFRoaXMgaXNuJ3QganVzdCBjb3NtZXRpYzsgaXQncyBhIGZ1bmRhbWVudGFsIGNoYW5nZSB0byBob3cgcGFnZSB0YWJsZXMgYXJlIG1hbmFnZWQgYW5kIGZyZWVkLlxuXG5TcGVjaWZpY2FsbHk6XG5cbiogICBJbiBgbW0vaHVnZV9tZW1vcnkuY2AsIHRoZSBjcml0aWNhbCBjaGFuZ2UgaW4gYHphcF9kZXBvc2l0ZWRfdGFibGVgIG5vdyBkZWZlcnMgdGhlIGZyZWVpbmcgb2YgdGhlIGRlcG9zaXRlZCBwYWdlIHRhYmxlIHVzaW5nIFJDVSB2aWEgYHB0ZV9mcmVlX2RlZmVyYC4gVGhhdCdzIGEgaHVnZSBzaGlmdCBmcm9tIGRpcmVjdCBmcmVlaW5nLlxuKiAgIEluIGBtbS9tbXVfZ2F0aGVyLmNgIGFuZCBgaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaGAsIGFsbCBhcmNoaXRlY3R1cmVzIGFyZSBub3cgdXNpbmcgUkNVLWJhY2tlZCB0YWJsZSBmcmVlaW5nLlxuKiAgIFRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIChlLmcuLCBtNjhrLCBzcGFyYywgYXJjLCBldGMuKSBhcmUgYmVpbmcgdXBkYXRlZCB0byB1c2UgYHRsYl9yZW1vdmVfdGFibGVgIG9yIHNpbWlsYXIgUkNVLWJhc2VkIGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIHN5bmNocm9ub3VzIGZyZWVpbmcgaW4gYF9fcHRlX2ZyZWVfdGxiYCAvIGBfX3BtZF9mcmVlX3RsYmAuXG4qICAgVGhlcmUgYXJlIGFyY2hpdGVjdHVyYWwgY2hhbmdlcywgbGlrZSBzcGlubG9jayBhZGp1c3RtZW50cyBhbmQgcmV3cml0dGVuIGZ1bmN0aW9ucyBpbiBtNjhrIGFuZCBzcGFyYy5cblxuU28sIHllYWgsIHRoaXMgY2xlYXJseSBhZmZlY3RzIGNvcmUgTU0gY29kZSwgcGFnZSB0YWJsZSB0ZWFyZG93biwgVEhQIHphcC9jb2xsYXBzZSBhbmQgVExCIGdhdGhlciB0YWJsZSBmcmVlaW5nISBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZS5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIHNlcmllcyB3YXJyYW50cyBhIGNsb3NlciBsb29rIGZvciBmdXp6aW5nIHBvdGVudGlhbC4gSXQgc2VlbXMgbGlrZSBhIGhpZ2gtdmFsdWUgdGFyZ2V0LiBOZXh0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBjb25maWcgb3B0aW9ucyBhcmUgcmVsZXZhbnQgYW5kIHdoYXQgZm9jdXMgc3ltYm9scyB3b3VsZCBiZSB1c2VmdWwuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY29kZSBhcm91bmQgYHphcF9kZXBvc2l0ZWRfdGFibGVgLCBgcHRlX2ZyZWVfZGVmZXJgLCBgdGxiX3JlbW92ZV90YWJsZWAsIGFuZCBgdGxiX3RhYmxlX2ZsdXNoYCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIGBtbS9tbXVfZ2F0aGVyLmNgLCBhbmQgYG1tL3BndGFibGUtZ2VuZXJpYy5jYCB0byBuYXJyb3cgZG93biB0aGUgdGVzdCBjYXNlIGZvY3VzLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4ODUzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjQ0OjA3LjY4NTg0NjAwN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NjU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9odWdlX21lbW9yeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0NjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI0NjU6XFx0XFxuMjQ2NjpcXHRcXHRmb2xpb19tYXJrX2xhenlmcmVlKGZvbGlvKTtcXG4yNDY3OlxcdFxcdHJldCA9IHRydWU7XFxuMjQ2ODpcXHRvdXQ6XFxuMjQ2OTpcXHRcXHRzcGluX3VubG9jayhwdGwpO1xcbjI0NzA6XFx0b3V0X3VubG9ja2VkOlxcbjI0NzE6XFx0XFx0cmV0dXJuIHJldDtcXG4yNDcyOlxcdH1cXG4yNDczOlxcdFxcbjI0NzQ6XFx0c3RhdGljIGlubGluZSB2b2lkIHphcF9kZXBvc2l0ZWRfdGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQpXFxuMjQ3NTpcXHR7XFxuMjQ3NjpcXHRcXHRwZ3RhYmxlX3QgcGd0YWJsZTtcXG4yNDc3OlxcdFxcbjI0Nzg6XFx0XFx0cGd0YWJsZSA9IHBndGFibGVfdHJhbnNfaHVnZV93aXRoZHJhdyhtbSwgcG1kKTtcXG4yNDc5OlxcdFxcdHB0ZV9mcmVlX2RlZmVyKG1tLCBwZ3RhYmxlKTtcXG4yNDgwOlxcdFxcdG1tX2RlY19ucl9wdGVzKG1tKTtcXG4yNDgxOlxcdH1cXG4yNDgyOlxcdFxcbjI0ODM6XFx0c3RhdGljIHZvaWQgemFwX2h1Z2VfcG1kX2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4yNDg0OlxcdFxcdFxcdHBtZF90IHBtZHZhbCwgc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBpc19wcmVzZW50KVxcbjI0ODU6XFx0e1xcbjI0ODY6XFx0XFx0Y29uc3QgYm9vbCBpc19kZXZpY2VfcHJpdmF0ZSA9IGZvbGlvX2lzX2RldmljZV9wcml2YXRlKGZvbGlvKTtcXG4yNDg3OlxcdFxcbjI0ODg6XFx0XFx0LyogUHJlc2VudCBhbmQgZGV2aWNlIHByaXZhdGUgZm9saW9zIGFyZSBybWFwcGFibGUuICovXFxuMjQ4OTpcXHRcXHRpZiAoaXNfcHJlc2VudCB8fCBpc19kZXZpY2VfcHJpdmF0ZSlcXG4yNDkwOlxcdFxcdFxcdGZvbGlvX3JlbW92ZV9ybWFwX3BtZChmb2xpbywgXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCB2bWEpO1xcbjI0OTE6XFx0XFxuMjQ5MjpcXHRcXHRpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSkge1xcbjI0OTM6XFx0XFx0XFx0YWRkX21tX2NvdW50ZXIobW0sIE1NX0FOT05QQUdFUywgLUhQQUdFX1BNRF9OUik7XFxuMjQ5NDpcXHRcXHR9IGVsc2Uge1xcbjI0OTU6XFx0XFx0XFx0YWRkX21tX2NvdW50ZXIobW0sIG1tX2NvdW50ZXJfZmlsZShmb2xpbyksXFxuMjQ5NjpcXHRcXHRcXHRcXHQgICAgICAgLUhQQUdFX1BNRF9OUik7XFxuMjQ5NzpcXHRcXG4yNDk4OlxcdFxcdFxcdGlmIChpc19wcmVzZW50IFxcdTAwMjZcXHUwMDI2IHBtZF9kaXJ0eShwbWR2YWwpKVxcbjI0OTk6XFx0XFx0XFx0XFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XFxuMjUwMDpcXHRcXHRcXHRpZiAoaXNfcHJlc2VudCBcXHUwMDI2XFx1MDAyNiBwbWRfeW91bmcocG1kdmFsKSBcXHUwMDI2XFx1MDAyNlxcbjI1MDE6XFx0XFx0XFx0ICAgIGxpa2VseSh2bWFfaGFzX3JlY2VuY3kodm1hKSkpXFxuMjUwMjpcXHRcXHRcXHRcXHRmb2xpb19tYXJrX2FjY2Vzc2VkKGZvbGlvKTtcXG4yNTAzOlxcdFxcdH1cXG4yNTA0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo0NDowNy42ODYxMTQ4NDdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTMzNjgyODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZTpcblxuKipUcmFjaW5nIHRoZSBMaW5lYWdlIG9mIGB6YXBfZGVwb3NpdGVkX3RhYmxlYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgYHphcF9kZXBvc2l0ZWRfdGFibGVgLiBJdCdzIGEga2V5IGRhdGEgcG9pbnQsIGFuZCBJIG5lZWQgdG8gc2VlIHdoZXJlIGl0IG9yaWdpbmF0ZXMsIGhvdyBpdCdzIHVzZWQsIGFuZCBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBkZXBlbmRlbmNpZXMuIFRoZSBiZXN0IGZpcnN0IHN0ZXAgaXMgdG8gc2VlIGV4YWN0bHkgd2hlcmUgdGhpcyB0YWJsZSwgb3IgcmF0aGVyIGl0cyBuYW1lLCBpcyByZWZlcmVuY2VkIHdpdGhpbiB0aGUgY29kZWJhc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxscyBiZWluZyBtYWRlLiBLbm93aW5nIHRoZSBjYWxsIHN0YWNrIHdpbGwgbGV0IG1lIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIGludGVncmF0aW9uIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0uIEknbGwgc3RhcnQgd2l0aCBhIHN0cmFpZ2h0Zm9yd2FyZCBzZWFyY2ggZm9yIGNhbGxzLiBUaGlzIHdpbGwgcHJvdmlkZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiwgYWxsb3dpbmcgbWUgdG8gYnVpbGQgYSBwcm9wZXIgbWVudGFsIG1vZGVsIG9mIGl0cyBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMDMxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo0NDowOS42MTk3OTk2NTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc2NzI3NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemFwX2RlcG9zaXRlZF90YWJsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz0yNDAwPWJvb2wgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yNDczLVxcbm1tL2h1Z2VfbWVtb3J5LmM6MjQ3NDpzdGF0aWMgaW5saW5lIHZvaWQgemFwX2RlcG9zaXRlZF90YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZClcXG5tbS9odWdlX21lbW9yeS5jLTI0NzUte1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0yNTUxPWJvb2wgemFwX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yNTgyLVxcdGlmIChoYXNfZGVwb3NpdClcXG5tbS9odWdlX21lbW9yeS5jOjI1ODM6XFx0XFx0emFwX2RlcG9zaXRlZF90YWJsZShtbSwgcG1kKTtcXG5tbS9odWdlX21lbW9yeS5jLTI1ODQtXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTMxODg9c3RhdGljIHZvaWQgX19zcGxpdF9odWdlX3BtZF9sb2NrZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTMyMTYtXFx0XFx0aWYgKGFyY2hfbmVlZHNfcGd0YWJsZV9kZXBvc2l0KCkpXFxubW0vaHVnZV9tZW1vcnkuYzozMjE3OlxcdFxcdFxcdHphcF9kZXBvc2l0ZWRfdGFibGUobW0sIHBtZCk7XFxubW0vaHVnZV9tZW1vcnkuYy0zMjE4LVxcdFxcdGlmICh2bWFfaXNfc3BlY2lhbF9odWdlKHZtYSkpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTM1NjE9c3RhdGljIGJvb2wgX19kaXNjYXJkX2Fub25fZm9saW9fcG1kX2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzYxNC1cXHRmb2xpb19yZW1vdmVfcm1hcF9wbWQoZm9saW8sIHBtZF9wYWdlKG9yaWdfcG1kKSwgdm1hKTtcXG5tbS9odWdlX21lbW9yeS5jOjM2MTU6XFx0emFwX2RlcG9zaXRlZF90YWJsZShtbSwgcG1kcCk7XFxubW0vaHVnZV9tZW1vcnkuYy0zNjE2LVxcdGFkZF9tbV9jb3VudGVyKG1tLCBNTV9BTk9OUEFHRVMsIC1IUEFHRV9QTURfTlIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo0NDowOS42Njc0Nzg2MzVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzI3ODMzMTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy5cblxuKipFeGFtaW5pbmcgSHVnZSBQYWdlIFVubWFwcGluZyBhbmQgR2F0aGVyIE9wZXJhdGlvbnMqKlxuXG5SaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgaHVnZSBwYWdlcyBhcmUgdW5tYXBwZWQgd2l0aGluIHRoZSBrZXJuZWwuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYHphcF9odWdlX3BtZGAgd2l0aGluIGBtbS9odWdlX21lbW9yeS5jYC4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBsb2dpYyBmb3IgcmVtb3ZpbmcgYSBodWdlIHBhZ2UncyBtYXBwaW5nLiBJJ2xsIG5lZWQgdG8gc2NydXRpbml6ZSBob3cgaXQgaGFuZGxlcyB0aGUgZGV0YWlscywgZXNwZWNpYWxseSByZWdhcmRpbmcgcG90ZW50aWFsIFRMQiBpbnZhbGlkYXRpb24gYW5kIHN5bmNocm9uaXphdGlvbi5cblxuVGhlbiwgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0LCBJIHNob3VsZCBhbHNvIGxvb2sgYXQgdGhlIGBtbXVfZ2F0aGVyLmNgIGZpbGUuIFNwZWNpZmljYWxseSwgSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJvbGUgb2YgdGhlIGZ1bmN0aW9ucyB3aXRoaW4gYG1tL21tdV9nYXRoZXIuY2AuIEknbGwgYmUgbG9va2luZyB0byBzZWUgaG93IHRoZSBnYXRoZXJzIGFyZSBpbXBsZW1lbnRlZCB3aXRoaW4gYG1tdV9nYXRoZXIuY2AgYW5kIGhvdyB0aGF0IGludGVyYWN0cyB3aXRoIHRoZSBwYWdlIHVubWFwcGluZyBwcm9jZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSBnYXRoZXJzIGFyZSBnYXRoZXJpbmcsIHRoZSByZWFzb25zIGZvciBnYXRoZXJpbmcsIGFuZCBob3cgdGhhdCBpbnRlcmFjdHMgd2l0aCB0aGUgc3BlY2lmaWMgdW5tYXBwaW5nIGNhbGxzIHdpdGhpbiB0aGUgYHphcF9odWdlX3BtZGAgcHJvY2Vzcy4gV2l0aCBhIHN0cm9uZyB1bmRlcnN0YW5kaW5nIG9mIGJvdGgsIEkgc2hvdWxkIGdldCBhIG1vcmUgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgd2hvbGUgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE3MzMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo0NDoxMS45OTUzMTQyODlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg1ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbW11X2dhdGhlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI3MDpcXHRcXHQvKiBTaW1wbHkgZGVsaXZlciB0aGUgaW50ZXJydXB0ICovXFxuIDI3MTpcXHR9XFxuIDI3MjpcXHRcXG4gMjczOlxcdHZvaWQgdGxiX3JlbW92ZV90YWJsZV9zeW5jX29uZSh2b2lkKVxcbiAyNzQ6XFx0e1xcbiAyNzU6XFx0XFx0LypcXG4gMjc2OlxcdFxcdCAqIFRoaXMgaXNuJ3QgYW4gUkNVIGdyYWNlIHBlcmlvZCBhbmQgaGVuY2UgdGhlIHBhZ2UtdGFibGVzIGNhbm5vdCBiZVxcbiAyNzc6XFx0XFx0ICogYXNzdW1lZCB0byBiZSBhY3R1YWxseSBSQ1UtZnJlZWQuXFxuIDI3ODpcXHRcXHQgKlxcbiAyNzk6XFx0XFx0ICogSXQgaXMgaG93ZXZlciBzdWZmaWNpZW50IGZvciBzb2Z0d2FyZSBwYWdlLXRhYmxlIHdhbGtlcnMgdGhhdCByZWx5IG9uXFxuIDI4MDpcXHRcXHQgKiBJUlEgZGlzYWJsaW5nLlxcbiAyODE6XFx0XFx0ICovXFxuIDI4MjpcXHRcXHRzbXBfY2FsbF9mdW5jdGlvbih0bGJfcmVtb3ZlX3RhYmxlX3NtcF9zeW5jLCBOVUxMLCAxKTtcXG4gMjgzOlxcdH1cXG4gMjg0OlxcdFxcbiAyODU6XFx0c3RhdGljIHZvaWQgdGxiX3JlbW92ZV90YWJsZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbiAyODY6XFx0e1xcbiAyODc6XFx0XFx0X190bGJfcmVtb3ZlX3RhYmxlX2ZyZWUoY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBtbXVfdGFibGVfYmF0Y2gsIHJjdSkpO1xcbiAyODg6XFx0fVxcbiAyODk6XFx0XFxuIDI5MDpcXHRzdGF0aWMgdm9pZCB0bGJfcmVtb3ZlX3RhYmxlX2ZyZWUoc3RydWN0IG1tdV90YWJsZV9iYXRjaCAqYmF0Y2gpXFxuIDI5MTpcXHR7XFxuIDI5MjpcXHRcXHRjYWxsX3JjdShcXHUwMDI2YmF0Y2gtXFx1MDAzZXJjdSwgdGxiX3JlbW92ZV90YWJsZV9yY3UpO1xcbiAyOTM6XFx0fVxcbiAyOTQ6XFx0XFxuIDI5NTpcXHQvKipcXG4gMjk2OlxcdCAqIHRsYl9yZW1vdmVfdGFibGVfc3luY19yY3UgLSBzeW5jaHJvbml6ZSB3aXRoIHNvZnR3YXJlIHBhZ2UtdGFibGUgd2Fsa2Vyc1xcbiAyOTc6XFx0ICpcXG4gMjk4OlxcdCAqIExpa2UgdGxiX3JlbW92ZV90YWJsZV9zeW5jX29uZSgpIGJ1dCB1c2VzIFJDVSBncmFjZSBwZXJpb2QgaW5zdGVhZCBvZiBJUElcXG4gMjk5OlxcdCAqIGJyb2FkY2FzdC4gVXNlIGluIHNsb3cgcGF0aHMgd2hlcmUgc2xlZXBpbmcgaXMgYWNjZXB0YWJsZS5cXG4gMzAwOlxcdCAqXFxuIDMwMTpcXHQgKiBTb2Z0d2FyZS9Mb2NrbGVzcyBwYWdlLXRhYmxlIHdhbGtlcnMgdXNlIGxvY2FsX2lycV9kaXNhYmxlKCksIHdoaWNoIGlzIGFsc29cXG4gMzAyOlxcdCAqIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4gc3luY2hyb25pemVfcmN1KCkgd2FpdHMgZm9yIGFsbCBzdWNoXFxuIDMwMzpcXHQgKiBzZWN0aW9ucywgcHJvdmlkaW5nIHRoZSBzYW1lIGd1YXJhbnRlZSBhcyB0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfb25lKCkgYnV0XFxuIDMwNDpcXHQgKiB3aXRob3V0IGRpc3J1cHRpbmcgYWxsIENQVXMgd2l0aCBJUElzLlxcbiAzMDU6XFx0ICpcXG4gMzA2OlxcdCAqIERvIG5vdCB1c2UgZm9yIGZyZWVpbmcgbWVtb3J5LiBVc2UgUkNVIGNhbGxiYWNrcyBpbnN0ZWFkIHRvIGF2b2lkIGxhdGVuY3lcXG4gMzA3OlxcdCAqIHNwaWtlcy5cXG4gMzA4OlxcdCAqL1xcbiAzMDk6XFx0dm9pZCB0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfcmN1KHZvaWQpXFxuIDMxMDpcXHR7XFxuIDMxMTpcXHRcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4gMzEyOlxcdH1cXG4gMzEzOlxcdFxcbiAzMTQ6XFx0LypcXG4gMzE1OlxcdCAqIElmIHdlIHdhbnQgdGxiX3JlbW92ZV90YWJsZSgpIHRvIGltcGx5IFRMQiBpbnZhbGlkYXRlcy5cXG4gMzE2OlxcdCAqL1xcbiAzMTc6XFx0c3RhdGljIGlubGluZSB2b2lkIHRsYl90YWJsZV9pbnZhbGlkYXRlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIpXFxuIDMxODpcXHR7XFxuIDMxOTpcXHRcXHRpZiAodGxiX25lZWRzX3RhYmxlX2ludmFsaWRhdGUoKSkge1xcbiAzMjA6XFx0XFx0XFx0LypcXG4gMzIxOlxcdFxcdFxcdCAqIEludmFsaWRhdGUgcGFnZS10YWJsZSBjYWNoZXMgdXNlZCBieSBoYXJkd2FyZSB3YWxrZXJzLiBUaGVuXFxuIDMyMjpcXHRcXHRcXHQgKiB3ZSBzdGlsbCBuZWVkIHRvIFJDVS1zY2hlZCB3YWl0IHdoaWxlIGZyZWVpbmcgdGhlIHBhZ2VzXFxuIDMyMzpcXHRcXHRcXHQgKiBiZWNhdXNlIHNvZnR3YXJlIHdhbGtlcnMgY2FuIHN0aWxsIGJlIGluLWZsaWdodC5cXG4gMzI0OlxcdFxcdFxcdCAqL1xcbiAzMjU6XFx0XFx0XFx0dGxiX2ZsdXNoX21tdV90bGJvbmx5KHRsYik7XFxuIDMyNjpcXHRcXHR9XFxuIDMyNzpcXHR9XFxuIDMyODpcXHRcXG4gMzI5OlxcdCNpZmRlZiBDT05GSUdfUFRfUkVDTEFJTVxcbiAzMzA6XFx0c3RhdGljIGlubGluZSB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZV9vbmVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG4gMzMxOlxcdHtcXG4gMzMyOlxcdFxcdHN0cnVjdCBwdGRlc2MgKnB0ZGVzYztcXG4gMzMzOlxcdFxcbiAzMzQ6XFx0XFx0cHRkZXNjID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBwdGRlc2MsIHB0X3JjdV9oZWFkKTtcXG4gMzM1OlxcdFxcdF9fdGxiX3JlbW92ZV90YWJsZShwdGRlc2MpO1xcbiAzMzY6XFx0fVxcbiAzMzc6XFx0XFxuIDMzODpcXHRzdGF0aWMgaW5saW5lIHZvaWQgX190bGJfcmVtb3ZlX3RhYmxlX29uZSh2b2lkICp0YWJsZSlcXG4gMzM5OlxcdHtcXG4gMzQwOlxcdFxcdHN0cnVjdCBwdGRlc2MgKnB0ZGVzYztcXG4gMzQxOlxcdFxcbiAzNDI6XFx0XFx0cHRkZXNjID0gdGFibGU7XFxuIDM0MzpcXHRcXHRjYWxsX3JjdShcXHUwMDI2cHRkZXNjLVxcdTAwM2VwdF9yY3VfaGVhZCwgX190bGJfcmVtb3ZlX3RhYmxlX29uZV9yY3UpO1xcbiAzNDQ6XFx0fVxcbiAzNDU6XFx0I2Vsc2VcXG4gMzQ2OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBfX3RsYl9yZW1vdmVfdGFibGVfb25lKHZvaWQgKnRhYmxlKVxcbiAzNDc6XFx0e1xcbiAzNDg6XFx0XFx0dGxiX3JlbW92ZV90YWJsZV9zeW5jX3JjdSgpO1xcbiAzNDk6XFx0XFx0X190bGJfcmVtb3ZlX3RhYmxlKHRhYmxlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6NDQ6MTEuOTk1NDA1MjQ5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyODY5NzgwMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIGB0bGJfcmVtb3ZlX3RhYmxlYCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGlzc2VjdCBgdGxiX3JlbW92ZV90YWJsZWAuIFRoZSBmdW5jdGlvbiBpdHNlbGYgaXMgaW4gYG1tL21tdV9nYXRoZXIuY2AsIHNvIHRoYXQncyB3aGVyZSBJJ2xsIHN0YXJ0LiBJJ20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGl0IGhhbmRsZXMgaW52YWxpZGF0aW5nIFRMQiBlbnRyaWVzIGFzc29jaWF0ZWQgd2l0aCBhIHBhZ2UgdGFibGUuIFNwZWNpZmljYWxseSwgSSdtIGludGVyZXN0ZWQgaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBnYXRoZXIgY29udGV4dCwgYW5kIGhvdyBpdCBkZWFscyB3aXRoIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIG9mIG9wdGltaXphdGlvbiBzdHJhdGVnaWVzLCBhbmQgaWYgdGhlIGltcGxlbWVudGF0aW9uIHRha2VzIGFkdmFudGFnZSBvZiBhbnkgcHJvY2Vzc29yLXNwZWNpZmljIGluc3RydWN0aW9ucyBvciBmZWF0dXJlcy4gQmV5b25kIHRoYXQsIEkgd2lsbCBjaGVjayB0aGUgdXN1YWwgc3VzcGVjdHMgLSB0aGUgZXJyb3IgaGFuZGxpbmcsIGFuZCB0aGUgZWRnZSBjYXNlcy4gSSdtIGVzcGVjaWFsbHkga2VlbiB0byBzZWUgdGhlIGRldGFpbHMgb2YgYW55IGFyY2hpdGVjdHVyYWwgcXVpcmtzIHRoYXQgYXJlIGV4cGxpY2l0bHkgaGFuZGxlZC4gSSBleHBlY3QgdG8gYmUgYWJsZSB0byBmb2xsb3cgdGhlIGxvZ2ljIGFuZCBleHBsYWluIGl0IGJhY2sgdG8gbXlzZWxmIGluIGRldGFpbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMyOTksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjQ0OjE0LjI4MjM4NTExNFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Nzc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tbXVfZ2F0aGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzUwLFxuICBcIkxpbmVDb3VudFwiOiA1NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzUwOlxcdH1cXG4gMzUxOlxcdCNlbmRpZiAvKiBDT05GSUdfUFRfUkVDTEFJTSAqL1xcbiAzNTI6XFx0XFxuIDM1MzpcXHRzdGF0aWMgdm9pZCB0bGJfcmVtb3ZlX3RhYmxlX29uZSh2b2lkICp0YWJsZSlcXG4gMzU0OlxcdHtcXG4gMzU1OlxcdFxcdF9fdGxiX3JlbW92ZV90YWJsZV9vbmUodGFibGUpO1xcbiAzNTY6XFx0fVxcbiAzNTc6XFx0XFxuIDM1ODpcXHRzdGF0aWMgdm9pZCB0bGJfdGFibGVfZmx1c2goc3RydWN0IG1tdV9nYXRoZXIgKnRsYilcXG4gMzU5OlxcdHtcXG4gMzYwOlxcdFxcdHN0cnVjdCBtbXVfdGFibGVfYmF0Y2ggKipiYXRjaCA9IFxcdTAwMjZ0bGItXFx1MDAzZWJhdGNoO1xcbiAzNjE6XFx0XFxuIDM2MjpcXHRcXHRpZiAoKmJhdGNoKSB7XFxuIDM2MzpcXHRcXHRcXHR0bGJfdGFibGVfaW52YWxpZGF0ZSh0bGIpO1xcbiAzNjQ6XFx0XFx0XFx0dGxiX3JlbW92ZV90YWJsZV9mcmVlKCpiYXRjaCk7XFxuIDM2NTpcXHRcXHRcXHQqYmF0Y2ggPSBOVUxMO1xcbiAzNjY6XFx0XFx0fVxcbiAzNjc6XFx0fVxcbiAzNjg6XFx0XFxuIDM2OTpcXHR2b2lkIHRsYl9yZW1vdmVfdGFibGUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgdm9pZCAqdGFibGUpXFxuIDM3MDpcXHR7XFxuIDM3MTpcXHRcXHRzdHJ1Y3QgbW11X3RhYmxlX2JhdGNoICoqYmF0Y2ggPSBcXHUwMDI2dGxiLVxcdTAwM2ViYXRjaDtcXG4gMzcyOlxcdFxcbiAzNzM6XFx0XFx0aWYgKCpiYXRjaCA9PSBOVUxMKSB7XFxuIDM3NDpcXHRcXHRcXHQqYmF0Y2ggPSAoc3RydWN0IG1tdV90YWJsZV9iYXRjaCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfTk9XQUlUKTtcXG4gMzc1OlxcdFxcdFxcdGlmICgqYmF0Y2ggPT0gTlVMTCkge1xcbiAzNzY6XFx0XFx0XFx0XFx0dGxiX3RhYmxlX2ludmFsaWRhdGUodGxiKTtcXG4gMzc3OlxcdFxcdFxcdFxcdHRsYl9yZW1vdmVfdGFibGVfb25lKHRhYmxlKTtcXG4gMzc4OlxcdFxcdFxcdFxcdHJldHVybjtcXG4gMzc5OlxcdFxcdFxcdH1cXG4gMzgwOlxcdFxcdFxcdCgqYmF0Y2gpLVxcdTAwM2VuciA9IDA7XFxuIDM4MTpcXHRcXHR9XFxuIDM4MjpcXHRcXG4gMzgzOlxcdFxcdCgqYmF0Y2gpLVxcdTAwM2V0YWJsZXNbKCpiYXRjaCktXFx1MDAzZW5yKytdID0gdGFibGU7XFxuIDM4NDpcXHRcXHRpZiAoKCpiYXRjaCktXFx1MDAzZW5yID09IE1BWF9UQUJMRV9CQVRDSClcXG4gMzg1OlxcdFxcdFxcdHRsYl90YWJsZV9mbHVzaCh0bGIpO1xcbiAzODY6XFx0fVxcbiAzODc6XFx0XFxuIDM4ODpcXHRzdGF0aWMgaW5saW5lIHZvaWQgdGxiX3RhYmxlX2luaXQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYilcXG4gMzg5OlxcdHtcXG4gMzkwOlxcdFxcdHRsYi1cXHUwMDNlYmF0Y2ggPSBOVUxMO1xcbiAzOTE6XFx0fVxcbiAzOTI6XFx0XFxuIDM5MzpcXHRzdGF0aWMgdm9pZCB0bGJfZmx1c2hfbW11X2ZyZWUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYilcXG4gMzk0OlxcdHtcXG4gMzk1OlxcdFxcdHRsYl90YWJsZV9mbHVzaCh0bGIpO1xcbiAzOTY6XFx0I2lmbmRlZiBDT05GSUdfTU1VX0dBVEhFUl9OT19HQVRIRVJcXG4gMzk3OlxcdFxcdHRsYl9iYXRjaF9wYWdlc19mbHVzaCh0bGIpO1xcbiAzOTg6XFx0I2VuZGlmXFxuIDM5OTpcXHR9XFxuIDQwMDpcXHRcXG4gNDAxOlxcdHZvaWQgdGxiX2ZsdXNoX21tdShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiKVxcbiA0MDI6XFx0e1xcbiA0MDM6XFx0XFx0dGxiX2ZsdXNoX21tdV90bGJvbmx5KHRsYik7XFxuIDQwNDpcXHRcXHR0bGJfZmx1c2hfbW11X2ZyZWUodGxiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6NDQ6MTQuMjgyNDYzOTM0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NjkyMjc1MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgdGxiX3JlbW92ZV9wdGRlc2NgKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBgdGxiX3JlbW92ZV9wdGRlc2NgIGZ1bmN0aW9uLiBJIGtub3cgaXQncyByZWxhdGVkIHRvIFRMQiBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgcGFnZSB0YWJsZSBkZXNjcmlwdG9yIHJlbW92YWwsIGJ1dCBJIHdhbnQgdG8gYmUgY2VydGFpbiBhYm91dCB0aGUgZXhhY3QgaW1wbGVtZW50YXRpb24gZGV0YWlscyBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2UuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBkZWZpbml0aW9uIGluIGBpbmNsdWRlL2FzbS1nZW5lcmljL3RsYi5oYC4gVGhpcyBnZW5lcmljIGhlYWRlciBzaG91bGQgcHJvdmlkZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIGludGVyZmFjZSBhbmQgbGlrZWx5IHBvaW50IG1lIHRvIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIGlmIG5lY2Vzc2FyeS4gVW5kZXJzdGFuZGluZyB0aGUgZ2VuZXJpYyBiZWhhdmlvciBpcyB0aGUga2V5IHN0YXJ0aW5nIHBvaW50IHRvIGNvbnNpZGVyIGJlZm9yZSBsb29raW5nIGZvciBwcm9jZXNzb3Itc3BlY2lmaWMgb3B0aW1pc2F0aW9ucyBvciBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MzQ4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo0NDoxNi4yNTE2OTM4MDJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjAzNjE1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0bGJfcmVtb3ZlX3B0ZGVzY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2FzbS1nZW5lcmljL3RsYi5oPTQ3Mj1zdGF0aWMgaW5saW5lIHZvaWQgdGxiX3JlbW92ZV9wYWdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaC00NzYtXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaDo0Nzc6c3RhdGljIGlubGluZSB2b2lkIHRsYl9yZW1vdmVfcHRkZXNjKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCBwdGRlc2MgKnB0KVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmgtNDc4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6NDQ6MTYuMzY3NzM0ODA3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU5ODU4NDU3MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRGl2aW5nIGludG8gdGhlIFRMQiBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBhIGJpdCBtb3JlIGFib3V0IGhvdyB0aGUgVExCIGlzIGhhbmRsZWQgaW4gdGhlIGdlbmVyaWMgYXJjaGl0ZWN0dXJlLCBzbyBsZXQncyBqdW1wIHJpZ2h0IGludG8gdGhlIGhlYXJ0IG9mIGl0LiBTcGVjaWZpY2FsbHksIEknbSBoZWFkaW5nIG92ZXIgdG8gdGhlIGBpbmNsdWRlL2FzbS1nZW5lcmljL3RsYi5oYCBmaWxlLiBJJ20gYWltaW5nIGZvciBhcm91bmQgbGluZSA0NzUsIGdpdmUgb3IgdGFrZSwgYXMgdGhhdCdzIHVzdWFsbHkgYSBnb29kIHNwb3QgdG8gZmluZCBzb21lIGludGVyZXN0aW5nIGdlbmVyaWMgVExCLXJlbGF0ZWQgZGVmaW5pdGlvbnMgb3IgbWFjcm9zLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIHBpZWNlcyBvZiB0aGUgcHV6emxlIHRoZXJlLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIHVzdWFsbHkgcmVzaWRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ2OTQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo0NDoyMi4zNTM1ODI5NzlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNDY1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDY1OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfcmVtb3ZlX3BhZ2Vfc2l6ZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbiA0NjY6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UsIGludCBwYWdlX3NpemUpXFxuIDQ2NzpcXHR7XFxuIDQ2ODpcXHRcXHRpZiAoX190bGJfcmVtb3ZlX3BhZ2Vfc2l6ZSh0bGIsIHBhZ2UsIHBhZ2Vfc2l6ZSkpXFxuIDQ2OTpcXHRcXHRcXHR0bGJfZmx1c2hfbW11KHRsYik7XFxuIDQ3MDpcXHR9XFxuIDQ3MTpcXHRcXG4gNDcyOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfcmVtb3ZlX3BhZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuIDQ3MzpcXHR7XFxuIDQ3NDpcXHRcXHRyZXR1cm4gdGxiX3JlbW92ZV9wYWdlX3NpemUodGxiLCBwYWdlLCBQQUdFX1NJWkUpO1xcbiA0NzU6XFx0fVxcbiA0NzY6XFx0XFxuIDQ3NzpcXHRzdGF0aWMgaW5saW5lIHZvaWQgdGxiX3JlbW92ZV9wdGRlc2Moc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHB0ZGVzYyAqcHQpXFxuIDQ3ODpcXHR7XFxuIDQ3OTpcXHRcXHR0bGJfcmVtb3ZlX3RhYmxlKHRsYiwgcHQpO1xcbiA0ODA6XFx0fVxcbiA0ODE6XFx0XFxuIDQ4MjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgdGxiX2NoYW5nZV9wYWdlX3NpemUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG4gNDgzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgaW50IHBhZ2Vfc2l6ZSlcXG4gNDg0OlxcdHtcXG4gNDg1OlxcdCNpZmRlZiBDT05GSUdfTU1VX0dBVEhFUl9QQUdFX1NJWkVcXG4gNDg2OlxcdFxcdGlmICh0bGItXFx1MDAzZXBhZ2Vfc2l6ZSBcXHUwMDI2XFx1MDAyNiB0bGItXFx1MDAzZXBhZ2Vfc2l6ZSAhPSBwYWdlX3NpemUpIHtcXG4gNDg3OlxcdFxcdFxcdGlmICghdGxiLVxcdTAwM2VmdWxsbW0gXFx1MDAyNlxcdTAwMjYgIXRsYi1cXHUwMDNlbmVlZF9mbHVzaF9hbGwpXFxuIDQ4ODpcXHRcXHRcXHRcXHR0bGJfZmx1c2hfbW11KHRsYik7XFxuIDQ4OTpcXHRcXHR9XFxuIDQ5MDpcXHRcXG4gNDkxOlxcdFxcdHRsYi1cXHUwMDNlcGFnZV9zaXplID0gcGFnZV9zaXplO1xcbiA0OTI6XFx0I2VuZGlmXFxuIDQ5MzpcXHR9XFxuIDQ5NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6NDQ6MjIuMzUzNzAyMTc5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc5MzkwODgxMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUTEIgUmVtb3ZhbCBhbmQgUGFnZSBUYWJsZSBSZWNsYW1hdGlvbiBDaGFuZ2VzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyB0aGUga2V5IGZ1bmN0aW9uIHdlJ3JlIGxvb2tpbmcgYXQgaXMgYHRsYl9yZW1vdmVfcHRkZXNjYCB3aGljaCBpcyBub3cgY29uc2lzdGVudGx5IGNhbGxpbmcgYHRsYl9yZW1vdmVfdGFibGUodGxiLCBwdClgLiBUaGUgY3J1Y2lhbCBzaGlmdCBoZXJlIGlzIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgdGxiX3JlbW92ZV90YWJsZWAuIEJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgY29kZSB3YXMgaW5saW5lZCBhbmQgaGFuZGxlZCBpbW1lZGlhdGVseSwgd2hpY2ggaW52b2x2ZWQgYSBzaW1wbGUgZGVzdHJ1Y3Rpb24gb2YgdGhlIHBhZ2UgdGFibGUgZGVzY3JpcHRvciBhbmQgaW1tZWRpYXRlIHJlbW92YWwgZnJvbSB0aGUgVExCLlxuXG5Ob3csIHRob3VnaCwgYHRsYl9yZW1vdmVfdGFibGVgIGlzIEFMV0FZUyBkZWZpbmVkIGluIGBtbS9tbXVfZ2F0aGVyLmNgIGFuZCBsZXZlcmFnZXMgUkNVIGJhdGNoaW5nLCB1c2luZyBlaXRoZXIgYGNhbGxfcmN1YCBvciBgc3luY2hyb25pemVfcmN1YC4gU28sIHdlJ3JlIGRlZmVycmluZyB0aGUgYWN0dWFsIHRhYmxlIHJlbW92YWwgdXNpbmcgUkNVIG5vdywgY29ycmVjdD9cblxuQWxyaWdodCwgbGV0J3MgcXVpY2tseSBjaGVjayB0aGUgYFBUX1JFQ0xBSU1gIG9wdGlvbiBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIFByZXZpb3VzbHksIGl0cyBkZXBlbmRlbmN5IHdhcyB0aWVkIHRvIGBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFYCBhbmQgdGhlIGFic2VuY2Ugb2YgYW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGBIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRWAgZGVmaW5pdGlvbi4gTm93LCB3aXRoIHRoZSByZW1vdmFsIG9mIGBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFYCwgaXQgc29sZWx5IGRlcGVuZHMgb24gYE1NVWAgYW5kIHRoZSBhYnNlbmNlIG9mIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZnVuY3Rpb24uIEknbSBpbmZlcnJpbmcgdGhpcyBtZWFucyBgUFRfUkVDTEFJTWAgYmVjb21lcyBsZXNzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYy4gSW50ZXJlc3RpbmcuLi5cblxuRmluYWxseSwgdGhlIGRpc2N1c3Npb24gb2YgYHB0ZV9mcmVlX2RlZmVyYCBpbmRpY2F0ZXMgd2UgbmVlZCB0byBleGFtaW5lIGBtbS9wZ3RhYmxlLWdlbmVyaWMuY2AgYXJvdW5kIGxpbmUgMjQwLiBUaGF0J3MgbGlrZWx5IHdoZXJlIHRoZSBhY3R1YWwgcGFnZSB0YWJsZSBmcmVlaW5nIGRlZmVycmFsIGlzIGJlaW5nIGhhbmRsZWQgb3IgY2FsbGVkIGluIGNvbmp1bmN0aW9uIHdpdGggUkNVLiBTbywgdGhlIGtleSBpcyB0aGUgcGFnZSB0YWJsZSByZW1vdmFsIGlzIG5vIGxvbmdlciBpbW1lZGlhdGUsIGl0J3MgYmVpbmcgZGVmZXJyZWQsIHByb2JhYmx5IGltcHJvdmluZyB0aGUgcGVyZm9ybWFuY2UgYXMgYSByZXN1bHQgb2YgUkNVIGJhdGNoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTM4NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjQ0OjMwLjI5Mjc5MjM2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wZ3RhYmxlLWdlbmVyaWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMzUsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMzU6XFx0XFx0Zmx1c2hfdGxiX3JhbmdlKHZtYSwgYWRkcmVzcywgYWRkcmVzcyArIEhQQUdFX1BNRF9TSVpFKTtcXG4gMjM2OlxcdFxcdHJldHVybiBwbWQ7XFxuIDIzNzpcXHR9XFxuIDIzODpcXHQjZW5kaWZcXG4gMjM5OlxcdFxcbiAyNDA6XFx0LyogYXJjaCBkZWZpbmUgcHRlX2ZyZWVfZGVmZXIgaW4gYXNtL3BnYWxsb2MuaCBmb3IgaXRzIG93biBpbXBsZW1lbnRhdGlvbiAqL1xcbiAyNDE6XFx0I2lmbmRlZiBwdGVfZnJlZV9kZWZlclxcbiAyNDI6XFx0c3RhdGljIHZvaWQgcHRlX2ZyZWVfbm93KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG4gMjQzOlxcdHtcXG4gMjQ0OlxcdFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbiAyNDU6XFx0XFxuIDI0NjpcXHRcXHRwYWdlID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBwYWdlLCByY3VfaGVhZCk7XFxuIDI0NzpcXHRcXHRwdGVfZnJlZShOVUxMIC8qIG1tIG5vdCBwYXNzZWQgYW5kIG5vdCB1c2VkICovLCAocGd0YWJsZV90KXBhZ2UpO1xcbiAyNDg6XFx0fVxcbiAyNDk6XFx0XFxuIDI1MDpcXHR2b2lkIHB0ZV9mcmVlX2RlZmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcGd0YWJsZSlcXG4gMjUxOlxcdHtcXG4gMjUyOlxcdFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbiAyNTM6XFx0XFxuIDI1NDpcXHRcXHRwYWdlID0gcGd0YWJsZTtcXG4gMjU1OlxcdFxcdGNhbGxfcmN1KFxcdTAwMjZwYWdlLVxcdTAwM2VyY3VfaGVhZCwgcHRlX2ZyZWVfbm93KTtcXG4gMjU2OlxcdH1cXG4gMjU3OlxcdCNlbmRpZiAvKiBwdGVfZnJlZV9kZWZlciAqL1xcbiAyNTg6XFx0I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbiAyNTk6XFx0XFxuIDI2MDpcXHQjaWYgZGVmaW5lZChDT05GSUdfR1VQX0dFVF9QWFhfTE9XX0hJR0gpIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4gMjYxOlxcdFxcdChkZWZpbmVkKENPTkZJR19TTVApIHx8IGRlZmluZWQoQ09ORklHX1BSRUVNUFRfUkNVKSlcXG4gMjYyOlxcdC8qXFxuIDI2MzpcXHQgKiBTZWUgdGhlIGNvbW1lbnQgYWJvdmUgcHRlcF9nZXRfbG9ja2xlc3MoKSBpbiBpbmNsdWRlL2xpbnV4L3BndGFibGUuaDpcXG4gMjY0OlxcdCAqIHRoZSBiYXJyaWVycyBpbiBwbWRwX2dldF9sb2NrbGVzcygpIGNhbm5vdCBndWFyYW50ZWUgdGhhdCB0aGUgdmFsdWUgaW5cXG4gMjY1OlxcdCAqIHBtZF9oaWdoIGFjdHVhbGx5IGJlbG9uZ3Mgd2l0aCB0aGUgdmFsdWUgaW4gcG1kX2xvdzsgYnV0IGhvbGRpbmcgaW50ZXJydXB0c1xcbiAyNjY6XFx0ICogb2ZmIGJsb2NrcyB0aGUgVExCIGZsdXNoIGJldHdlZW4gcHJlc2VudCB1cGRhdGVzLCB3aGljaCBndWFyYW50ZWVzIHRoYXQgYVxcbiAyNjc6XFx0ICogc3VjY2Vzc2Z1bCBfX3B0ZV9vZmZzZXRfbWFwKCkgcG9pbnRzIHRvIGEgcGFnZSBmcm9tIG1hdGNoZWQgaGFsdmVzLlxcbiAyNjg6XFx0ICovXFxuIDI2OTpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBwbWRwX2dldF9sb2NrbGVzc19zdGFydCh2b2lkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo0NDozMC4yOTI5MjI3MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MDUyMTk1ODAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQYWdlIFRhYmxlIEZyZWVpbmcgaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSB3ZSd2ZSBnb3Qgc29tZSBpbnRlcmVzdGluZyBjaGFuZ2VzIGFyb3VuZCBwYWdlIHRhYmxlIGZyZWVpbmcsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIEh1Z2VUTEIgcGFnZXMuIFRoZSBgemFwX2RlcG9zaXRlZF90YWJsZWAgZnVuY3Rpb24gd2l0aGluIGBtbS9odWdlX21lbW9yeS5jYCBub3cgY2FsbHMgYHB0ZV9mcmVlX2RlZmVyYCwgd2hpY2ggaXMgdXNpbmcgUkNVIGZvciBkZWZlcnJlZCBmcmVlaW5nLiBUaGlzIGlzIG9ubHkgY29tcGlsZWQgd2hlbiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBlbmFibGVkLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhlbiB3ZSBoYXZlIGB0bGJfcmVtb3ZlX3RhYmxlYCBpbiBgbW0vbW11X2dhdGhlci5jYCwgd2hpY2ggaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX01NVWAgaXMgZW5hYmxlZCwgYW5kIGBDT05GSUdfUFRfUkVDTEFJTWAgaXMgZW5hYmxlZCB3aGVuIGJvdGggYENPTkZJR19NTVVgIGlzIGVuYWJsZWQgYW5kIGAhSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEVgLlxuXG5TbywgdGhlIGtleSBjb25maWdzIHRvIGtlZXAgaW4gbWluZCBhcmUgYE1NVWAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGVpciBpbnRlcmFjdGlvbnMuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIHJlbGV2YW50IGVudHJ5cG9pbnRzLiBPYnZpb3VzbHksIGB0bGJfcmVtb3ZlX3RhYmxlYCAoaW4gYG1tL21tdV9nYXRoZXIuY2ApIGlzIGNyaXRpY2FsLCBhcyBpdCdzIGdsb2JhbCBhbmQgY2FsbGVkIHdoZW5ldmVyIHBhZ2UgdGFibGVzIG9yIGRpcmVjdG9yaWVzIGFyZSBiZWluZyBmcmVlZC4gVGhlbiB0aGVyZSdzIHRoZSBzeW5jIHZhcmlhbnRzOiBgdGxiX3JlbW92ZV90YWJsZV9zeW5jX29uZWAgYW5kIGB0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfcmN1YCBpbiBgbW0vbW11X2dhdGhlci5jYC4gV2UgYWxzbyBoYXZlIGBwdGVfZnJlZV9kZWZlcmAgaW4gYG1tL3BndGFibGUtZ2VuZXJpYy5jYCwgd2hpY2ggaXMgdGhlIFJDVSBkZWZlcnJhbCBtZWNoYW5pc20uIEFuZCBvZiBjb3Vyc2UsIGB6YXBfaHVnZV9wbWRgIGluIGBtbS9odWdlX21lbW9yeS5jYCBpcyBpbXBvcnRhbnQuIEFsc28sIHRoZSBzdGFuZGFyZCBNTSBlbnRyeXBvaW50cyBsaWtlIGB6YXBfcGFnZV9yYW5nZV9zaW5nbGVgLCBgemFwX3ZtYV9wdGVzYCwgYW5kIGBmcmVlX3BndGFibGVzYCB3aWxsIGxpa2VseSB0cmlnZ2VyIHRoZXNlIGNhbGxzLiBXZSBhbHNvIGhhdmUgYF9fc3BsaXRfaHVnZV9wbWRfbG9ja2VkYCBhbmQgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAuXG5cbkkgc2hvdWxkIGNoZWNrIHRoZSBub24tc3RhdGljLCBub24taW5saW5lZCBmdW5jdGlvbnMgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHBvdGVudGlhbCBjYWxsIHNpdGVzLiBTcGVjaWZpY2FsbHk6IGB0bGJfcmVtb3ZlX3RhYmxlYCwgYHRsYl9yZW1vdmVfdGFibGVfc3luY19vbmVgLCBgdGxiX3JlbW92ZV90YWJsZV9zeW5jX3JjdWAgKGFsbCBpbiBgbW0vbW11X2dhdGhlci5jYCksIGBwdGVfZnJlZV9kZWZlcmAgKGluIGBtbS9wZ3RhYmxlLWdlbmVyaWMuY2ApLCBhbmQgYHphcF9odWdlX3BtZGAgKGluIGBtbS9odWdlX21lbW9yeS5jYCkuIFRoaXMgZ2l2ZXMgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgd2UgY2FuIHRyYWNlLCBvciBvdmVycmlkZS5cblxuTm93LCBsZXQncyBkaXZlIGludG8gYHphcF9odWdlX3BtZGAgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLiBJIGhhdmUgYSBmZWVsaW5nIHRoZXJlIHdpbGwgYmUgbW9yZSBpbnRlcmVzdGluZyBkZXRhaWxzIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjgwMywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjQ0OjM1LjM0NTEyMDk1MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkwMzIzODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemFwX2h1Z2VfcG1kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTI0NzQ9c3RhdGljIGlubGluZSB2b2lkIHphcF9kZXBvc2l0ZWRfdGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTI0ODItXFxubW0vaHVnZV9tZW1vcnkuYzoyNDgzOnN0YXRpYyB2b2lkIHphcF9odWdlX3BtZF9mb2xpbyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0vaHVnZV9tZW1vcnkuYy0yNDg0LVxcdFxcdHBtZF90IHBtZHZhbCwgc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBpc19wcmVzZW50KVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0yNTIxPXN0YXRpYyBib29sIGhhc19kZXBvc2l0ZWRfcGd0YWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcG1kX3QgcG1kdmFsLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yNTQyLS8qKlxcbm1tL2h1Z2VfbWVtb3J5LmM6MjU0MzogKiB6YXBfaHVnZV9wbWQgLSBaYXAgYSBodWdlIFRIUCB3aGljaCBpcyBvZiBQTUQgc2l6ZS5cXG5tbS9odWdlX21lbW9yeS5jLTI1NDQtICogQHRsYjogVGhlIE1NVSBnYXRoZXIgVExCIHN0YXRlIGFzc29jaWF0ZWQgd2l0aCB0aGUgb3BlcmF0aW9uLlxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yNTUwLSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6MjU1MTpib29sIHphcF9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9odWdlX21lbW9yeS5jLTI1NTItXFx0XFx0IHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjU4MC1cXHRpZiAoZm9saW8pXFxubW0vaHVnZV9tZW1vcnkuYzoyNTgxOlxcdFxcdHphcF9odWdlX3BtZF9mb2xpbyhtbSwgdm1hLCBvcmlnX3BtZCwgZm9saW8sIGlzX3ByZXNlbnQpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMjU4Mi1cXHRpZiAoaGFzX2RlcG9zaXQpXFxuLS1cXG5tbS9pbnRlcm5hbC5oPTU2OD12b2lkIHBtZF9pbnN0YWxsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLCBwZ3RhYmxlX3QgKnB0ZSk7XFxuLS1cXG5tbS9pbnRlcm5hbC5oLTU3NS0gKiBXaGVuIHdlIGZpbmQgYSBwbWRfbm9uZSgpIHdoaWxlIHVubWFwcGluZyBhIGZvbGlvIHdpdGhvdXQgaG9sZGluZyB0aGUgUFRMLFxcbm1tL2ludGVybmFsLmg6NTc2OiAqIHphcF9odWdlX3BtZCgpIG1heSBoYXZlIGNsZWFyZWQgdGhlIFBNRCBidXQgbm90IHlldCBtb2RpZmllZCB0aGUgZm9saW8gdG9cXG5tbS9pbnRlcm5hbC5oLTU3Ny0gKiBpbmRpY2F0ZSB0aGF0IGl0J3MgdW5tYXBwZWQuIFNraXBwaW5nIHRoZSBQTUQgd2l0aG91dCBzeW5jaHJvbml6YXRpb24gY291bGRcXG4tLVxcbm1tL21lbW9yeS5jPTIwOTk9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHphcF9wbWRfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG4tLVxcbm1tL21lbW9yeS5jLTIxMTItXFx0XFx0XFx0XFx0X19zcGxpdF9odWdlX3BtZCh2bWEsIHBtZCwgYWRkciwgZmFsc2UpO1xcbm1tL21lbW9yeS5jOjIxMTM6XFx0XFx0XFx0ZWxzZSBpZiAoemFwX2h1Z2VfcG1kKHRsYiwgdm1hLCBwbWQsIGFkZHIpKSB7XFxubW0vbWVtb3J5LmMtMjExNC1cXHRcXHRcXHRcXHRhZGRyID0gbmV4dDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6NDQ6MzUuMzk0MTU4NTY5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc5ODM0Mjk3NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVGhpcyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgc2NvcGUgb2YgdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSBpdCBzaWduaWZpY2FudGx5IGltcGFjdHMgcGFnZSB0YWJsZSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgYXJvdW5kIGZyZWVpbmcgYW5kIHJlY2xhaW0uIE15IGluaXRpYWwgc2NhbiBvZiB0aGUgY29kZSBjaGFuZ2VzIGNvbmZpcm1zIHRoaXMuIEkgc2VlIG1vZGlmaWNhdGlvbnMgdG8gc2V2ZXJhbCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmlsZXMgKGBtNjhrYCwgYHNoYCwgYHNwYXJjYCkgYW5kIGdlbmVyaWMgbWVtb3J5IG1hbmFnZW1lbnQgZmlsZXMgKGBtbXVfZ2F0aGVyLmNgLCBgaHVnZV9tZW1vcnkuY2AsIGBwZ3RhYmxlLWdlbmVyaWMuY2ApLiBTcGVjaWZpY2FsbHksIEknbSBub3RpbmcgdGhlIGludHJvZHVjdGlvbiBvciBtb2RpZmljYXRpb24gb2YgZnVuY3Rpb25zIGxpa2UgYGdldF9wb2ludGVyX3RhYmxlYCwgYGZyZWVfcG9pbnRlcl90YWJsZWAsIGBfX3RsYl9yZW1vdmVfdGFibGVgLCBgcHRlX2ZyZWVgLCBgdGxiX3JlbW92ZV90YWJsZWAsIGFuZCBgemFwX2RlcG9zaXRlZF90YWJsZWAgYWNyb3NzIHRoZXNlIHZhcmlvdXMgZmlsZXMuIFRoZSBpbmxpbmluZyBvZiBgemFwX2RlcG9zaXRlZF90YWJsZWAgaW50byBmdW5jdGlvbnMgbGlrZSBgemFwX2h1Z2VfcG1kYCBpcyBhbHNvIHdvcnRoIG5vdGluZy5cblxuSSdtIGFsc28gcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIGBDT05GSUdfTU1VYCBpcywgYXMgZXhwZWN0ZWQsIGEgYmFzZSByZXF1aXJlbWVudC4gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgY29tZXMgaW50byBwbGF5IGZvciB0aGUgaHVnZSBtZW1vcnkgemFwcGluZyBhbmQgdGhlIGRlZmVycmVkIFBURSBmcmVlaW5nLiBJIHRoZW4gY2hlY2sgYENPTkZJR19QVF9SRUNMQUlNYCBhbmQgaXRzIGRlcGVuZGVuY3kgb24gYE1NVSBcdTAwMjZcdTAwMjYgIUhBVkVfQVJDSF9UTEJfUkVNT1ZFX1RBQkxFYC5cblxuTm93LCBmb3IgdGhlIGtleSBmaW5kaW5ncyB0byBiZSByZXBvcnRlZC4gVGhpcyBwYXRjaCBpcyBtYWtpbmcgcGFnZSB0YWJsZSBmcmVlaW5nIHVuY29uZGl0aW9uYWxseSBkZWZlcnJlZCB2aWEgUkNVIGFjcm9zcyAqYWxsKiBhcmNoaXRlY3R1cmVzLiBJdCBkb2VzIHRoaXMgYnkgcmVtb3ZpbmcgdGhlIGBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFYCBhbmQgYE1NVV9HQVRIRVJfVEFCTEVfRlJFRWAgS2NvbmZpZyBmbGFncywgdGh1cyBtYWtpbmcgUkNVIHRhYmxlIGJhdGNoaW5nIGEgZ2VuZXJpYyBwcm9jZXNzLiBUaGlzIGNoYW5nZSBhbHNvIHVwZGF0ZXMgYHphcF9kZXBvc2l0ZWRfdGFibGUoKWAgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgIHRvIGxldmVyYWdlIHRoZSBkZWZlcnJlZCBSQ1UgYHB0ZV9mcmVlX2RlZmVyKClgIGZ1bmN0aW9uLCBhbmQgdGhlbiBhZGFwdHMgdmFyaW91cyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgcGFnZSB0YWJsZSBmcmVlaW5nIGltcGxlbWVudGF0aW9ucywgbGlrZSB0aG9zZSBvbiBgbTY4a2AsIGBzcGFyY2AsIGBzaGAsIGBhcmNgLCBhbmQgYHh0ZW5zYWAuXG5cbk15IGBzZXQtcmVzdWx0c2AgZGF0YSB3aWxsIGluY2x1ZGU6IGBXb3J0aEZ1enppbmdgOiB0cnVlIChiZWNhdXNlIG9mIHRoZXNlIGNvcmUgY2hhbmdlcyk7IGEgY29uY2lzZSBgUmVhc29uaW5nYCBiYXNlZCBvbiB0aGUgYWJvdmU7IHRoZSBmb2xsb3dpbmcgYEZvY3VzU3ltYm9sc2A6IGBbXCJ0bGJfcmVtb3ZlX3RhYmxlXCIsIFwicHRlX2ZyZWVfZGVmZXJcIiwgXCJ6YXBfaHVnZV9wbWRcIiwgXCJ0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfcmN1XCIsIFwidGxiX3JlbW92ZV90YWJsZV9zeW5jX29uZVwiXWA7IGFuZCBgRW5hYmxlQ29uZmlnc2A6IGBbXCJNTVVcIiwgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXWAuXG5cbkZpbmFsbHksIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIGVuc3VyZSB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBjb3JyZWN0OiBFbmFibGVDb25maWdzIHdpdGhvdXQgdGhlIGBDT05GSUdfYCBwcmVmaXg7IEZvY3VzU3ltYm9scyBhcmUgbm9uLXN0YXRpYyBhbmQgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzOyBhbmQgdGhhdCBgc2V0LXJlc3VsdHNgIGlzIGNhbGxlZCBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuIEV2ZXJ5dGhpbmcgY2hlY2tzIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg2NTQsIk91dHB1dFRva2VucyI6MjAyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjQ0OjQzLjM3NzU5MTM1OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyMTU1NDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNTVVcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGxiX3JlbW92ZV90YWJsZVwiLFxuICAgIFwicHRlX2ZyZWVfZGVmZXJcIixcbiAgICBcInphcF9odWdlX3BtZFwiLFxuICAgIFwidGxiX3JlbW92ZV90YWJsZV9zeW5jX3JjdVwiLFxuICAgIFwidGxiX3JlbW92ZV90YWJsZV9zeW5jX29uZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVuaWZpZXMgYW5kIGVuZm9yY2VzIFJDVS1kZWZlcnJlZCBmcmVlaW5nIGZvciBwYWdlIHRhYmxlIHBhZ2VzIGFjcm9zcyBhbGwgYXJjaGl0ZWN0dXJlcyBieSByZW1vdmluZyBjb25kaXRpb25hbCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgc3RhbmRhcmRpemluZyBvbiB0bGJfcmVtb3ZlX3RhYmxlKCkuIEl0IGFsc28gbW9kaWZpZXMgVEhQIGRlcG9zaXRlZCB0YWJsZSBoYW5kbGluZyBpbiBtbS9odWdlX21lbW9yeS5jIHRvIHVzZSBwdGVfZnJlZV9kZWZlcigpIHVuZGVyIFJDVSBhbmQgdXBkYXRlcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgcGFnZSB0YWJsZSByZW1vdmFsIHJvdXRpbmVzLiBUaGVzZSBjb3JlIE1NIGxvZ2ljIGNoYW5nZXMgYWZmZWN0IFRMQiBnYXRoZXJpbmcsIHBhZ2UgdGFibGUgdGVhcmluZyBkb3duLCBhbmQgbWVtb3J5IHJlY2xhaW0gcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTU1VXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRsYl9yZW1vdmVfdGFibGVcIixcbiAgICBcInB0ZV9mcmVlX2RlZmVyXCIsXG4gICAgXCJ6YXBfaHVnZV9wbWRcIixcbiAgICBcInRsYl9yZW1vdmVfdGFibGVfc3luY19yY3VcIixcbiAgICBcInRsYl9yZW1vdmVfdGFibGVfc3luY19vbmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1bmlmaWVzIGFuZCBlbmZvcmNlcyBSQ1UtZGVmZXJyZWQgZnJlZWluZyBmb3IgcGFnZSB0YWJsZSBwYWdlcyBhY3Jvc3MgYWxsIGFyY2hpdGVjdHVyZXMgYnkgcmVtb3ZpbmcgY29uZGl0aW9uYWwgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHN0YW5kYXJkaXppbmcgb24gdGxiX3JlbW92ZV90YWJsZSgpLiBJdCBhbHNvIG1vZGlmaWVzIFRIUCBkZXBvc2l0ZWQgdGFibGUgaGFuZGxpbmcgaW4gbW0vaHVnZV9tZW1vcnkuYyB0byB1c2UgcHRlX2ZyZWVfZGVmZXIoKSB1bmRlciBSQ1UgYW5kIHVwZGF0ZXMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHBhZ2UgdGFibGUgcmVtb3ZhbCByb3V0aW5lcy4gVGhlc2UgY29yZSBNTSBsb2dpYyBjaGFuZ2VzIGFmZmVjdCBUTEIgZ2F0aGVyaW5nLCBwYWdlIHRhYmxlIHRlYXJpbmcgZG93biwgYW5kIG1lbW9yeSByZWNsYWltIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo0NDo0My40NDk3NTM0OTVaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzE5OTgxMTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6NDQ6NDMuNDUwMjMzMjY1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTQzMTk0OTgzMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBzdGFuZGFyZGl6ZXMgcGFnZSB0YWJsZSBmcmVlaW5nIGFjcm9zcyBhcmNoaXRlY3R1cmVzIHRvIHVzZSBSQ1UtZGVmZXJyZWQgZnJlZWluZyAodW5pZnlpbmcgTU1VIGdhdGhlciBhbmQgcmVtb3ZpbmcgQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgLyBDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFIGNvbmZpZ3MpLiBJdCBhZGFwdHMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHBhZ2UgdGFibGUgZnJlZWluZyByb3V0aW5lcyAoZS5nLiBtNjhrLCBhcmMsIG1pY3JvYmxhemUsIHNoLCBzcGFyYywgeHRlbnNhKSB0byB1c2UgdGxiX3JlbW92ZV9wdGRlc2MgLyB0bGJfcmVtb3ZlX3RhYmxlLCBhZGRzIHNwaW5sb2NrcyBmb3IgcHRhYmxlIG1hbmFnZW1lbnQgb24gbTY4ay9zcGFyYywgYW5kIHVwZGF0ZXMgZGVmZXJyZWQgZnJlZWluZyBpbiBUSFAgKHB0ZV9mcmVlX2RlZmVyKS5cXG5cXG5UaGVzZSBjaGFuZ2VzIGRlYWwgc3RyaWN0bHkgd2l0aCBNTVUgZ2F0aGVyIGxpZmVjeWNsZSwgUkNVIGdyYWNlIHBlcmlvZHMgZm9yIHBhZ2UgdGFibGUgbWVtb3J5LCBhbmQgc3luY2hyb25pemF0aW9uIG9mIHBhZ2UgdGFibGUgZnJlZWluZyB2cyBsb2NrbGVzcy9SQ1UgcGFnZSB0YWJsZSB3YWxrZXJzLiBQb3RlbnRpYWwgYnVncyBpbiB0aGVzZSBjaGFuZ2VzIHdvdWxkIG1hbmlmZXN0IGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgY29uY3VycmVuY3kgcmFjZXMsIG9yIGRlYWRsb2Nrc+KAlHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCByZWFkcy9jb3BpZXMgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyOGU4ZTIyZmIyZjkyMmE1ZDk4YWMyNzJjMDRhMzlmYjVkMGE3ZWUxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMSAyMzo0Mzo1MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0XG5pbmRleCBhNzI5NmYyNTE3OTljLi4xZTY1YjEzOWYzNTU5IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdFxuQEAgLTUzNyw2ICs1MzcsMTIgQEAgV2UgZXN0YWJsaXNoIGJhc2ljIGxvY2tpbmcgcnVsZXMgd2hlbiBpbnRlcmFjdGluZyB3aXRoIHBhZ2UgdGFibGVzOlxuICogV2hlbiBjaGFuZ2luZyBhIHBhZ2UgdGFibGUgZW50cnkgdGhlIHBhZ2UgdGFibGUgbG9jayBmb3IgdGhhdCBwYWdlIHRhYmxlXG4gICAqKm11c3QqKiBiZSBoZWxkLCBleGNlcHQgaWYgeW91IGNhbiBzYWZlbHkgYXNzdW1lIG5vYm9keSBjYW4gYWNjZXNzIHRoZSBwYWdlXG4gICB0YWJsZXMgY29uY3VycmVudGx5IChzdWNoIGFzIG9uIGludm9jYXRpb24gb2YgOmM6ZnVuYzpgIWZyZWVfcGd0YWJsZXNgKS5cbisqIFBhZ2UgdGFibGVzIG1heSBiZSAqd2Fsa2VkKiB1bmRlciBSQ1UgYWxvbmUsIGFzIHBhZ2UgdGFibGVzIGFyZSBmcmVlZCBvbmx5XG4rICBhZnRlciBhbiBSQ1UgZ3JhY2UgcGVyaW9kIGhhcyBlbGFwc2VkLiBIb3dldmVyLCBhbnkgZW50cnkgZm91bmQgbXVzdCBiZVxuKyAgcmV2YWxpZGF0ZWQgYWZ0ZXIgdGhlIHBhZ2UgdGFibGUgbG9jayBpcyB0YWtlbiAoc3VjaCBhcyB0aGVcbisgIDpjOmZ1bmM6YCFwbWRfc2FtZWAgcmVjaGVjayBwZXJmb3JtZWQgYnkgOmM6ZnVuYzpgIXB0ZV9vZmZzZXRfbWFwX2xvY2tgKVxuKyAgYmVmb3JlIGl0IGlzIGFjdGVkIHVwb24uIENoYW5naW5nIGFuIGVudHJ5IGFsd2F5cyByZXF1aXJlcyB0aGUgcGFnZSB0YWJsZVxuKyAgbG9jay5cbiAqIFJlYWRzIGZyb20gYW5kIHdyaXRlcyB0byBwYWdlIHRhYmxlIGVudHJpZXMgbXVzdCBiZSAqYXBwcm9wcmlhdGVseSpcbiAgIGF0b21pYy4gU2VlIHRoZSBzZWN0aW9uIG9uIGF0b21pY2l0eSBiZWxvdyBmb3IgZGV0YWlscy5cbiAqIFBvcHVsYXRpbmcgcHJldmlvdXNseSBlbXB0eSBlbnRyaWVzIHJlcXVpcmVzIHRoYXQgdGhlIG1tYXAgb3IgVk1BIGxvY2tzIGFyZVxuZGlmZiAtLWdpdCBhL2FyY2gvS2NvbmZpZyBiL2FyY2gvS2NvbmZpZ1xuaW5kZXggNDVjNjU3NzcyMzYyMy4uNmY3NTE2OTE2Nzk3ZSAxMDA2NDRcbi0tLSBhL2FyY2gvS2NvbmZpZ1xuKysrIGIvYXJjaC9LY29uZmlnXG5AQCAtNTI2LDEzICs1MjYsNiBAQCBjb25maWcgSEFWRV9BUkNIX0pVTVBfTEFCRUxcbiBjb25maWcgSEFWRV9BUkNIX0pVTVBfTEFCRUxfUkVMQVRJVkVcbiBcdGJvb2xcbiBcbi1jb25maWcgTU1VX0dBVEhFUl9UQUJMRV9GUkVFXG4tXHRib29sXG4tXG4tY29uZmlnIE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcbi1cdGJvb2xcbi1cdHNlbGVjdCBNTVVfR0FUSEVSX1RBQkxFX0ZSRUVcbi1cbiBjb25maWcgTU1VX0dBVEhFUl9QQUdFX1NJWkVcbiBcdGJvb2xcbiBcbkBAIC01NDgsNyArNTQxLDYgQEAgY29uZmlnIE1NVV9HQVRIRVJfTUVSR0VfVk1BU1xuIFxuIGNvbmZpZyBNTVVfR0FUSEVSX05PX0dBVEhFUlxuIFx0Ym9vbFxuLVx0ZGVwZW5kcyBvbiBNTVVfR0FUSEVSX1RBQkxFX0ZSRUVcbiBcbiBjb25maWcgQVJDSF9XQU5UX0lSUVNfT0ZGX0FDVElWQVRFX01NXG4gXHRib29sXG5kaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9LY29uZmlnIGIvYXJjaC9hbHBoYS9LY29uZmlnXG5pbmRleCBlNTNlZjJkODg0NjM2Li45MDYzYzdiZGE0ZTQxIDEwMDY0NFxuLS0tIGEvYXJjaC9hbHBoYS9LY29uZmlnXG4rKysgYi9hcmNoL2FscGhhL0tjb25maWdcbkBAIC00Miw3ICs0Miw2IEBAIGNvbmZpZyBBTFBIQVxuIFx0c2VsZWN0IEFSQ0hfU1RBQ0tXQUxLXG4gXHRzZWxlY3QgQ1BVX05PX0VGRklDSUVOVF9GRlMgaWYgIUFMUEhBX0VWNjdcbiBcdHNlbGVjdCBNTVVfR0FUSEVSX05PX1JBTkdFXG4tXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxuIFx0c2VsZWN0IFNQQVJTRU1FTV9FWFRSRU1FIGlmIFNQQVJTRU1FTVxuIFx0c2VsZWN0IFpPTkVfRE1BXG4gXHRzZWxlY3QgVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2MuaCBiL2FyY2gvYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxuaW5kZXggZGZhZTA3MGZlOGQ1NS4uOWI2YzM3ZjkyZTk3ZiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxuKysrIGIvYXJjaC9hcmMvaW5jbHVkZS9hc20vcGdhbGxvYy5oXG5AQCAtNzIsNyArNzIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcDRkX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwNGRfdCAqcDRkcCwgcHVkX3QgKnB1ZHApXG4gXHRzZXRfcDRkKHA0ZHAsIF9fcDRkKCh1bnNpZ25lZCBsb25nKXB1ZHApKTtcbiB9XG4gXG4tI2RlZmluZSBfX3B1ZF9mcmVlX3RsYih0bGIsIHBtZCwgYWRkcikgIHB1ZF9mcmVlKCh0bGIpLVx1MDAzZW1tLCBwbWQpXG4rI2RlZmluZSBfX3B1ZF9mcmVlX3RsYih0bGIsIHBtZCwgYWRkcikgIHRsYl9yZW1vdmVfcHRkZXNjKCh0bGIpLCB2aXJ0X3RvX3B0ZGVzYyhwbWQpKVxuIFxuICNlbmRpZlxuIFxuQEAgLTgzLDEwICs4MywxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHVkX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwdWRfdCAqcHVkcCwgcG1kX3QgKnBtZHApXG4gXHRzZXRfcHVkKHB1ZHAsIF9fcHVkKCh1bnNpZ25lZCBsb25nKXBtZHApKTtcbiB9XG4gXG4tI2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIsIHBtZCwgYWRkcikgIHBtZF9mcmVlKCh0bGIpLVx1MDAzZW1tLCBwbWQpXG4rI2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIsIHBtZCwgYWRkcikgIHRsYl9yZW1vdmVfcHRkZXNjKCh0bGIpLCB2aXJ0X3RvX3B0ZGVzYyhwbWQpKVxuIFxuICNlbmRpZlxuIFxuLSNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLCBwdGUsIGFkZHIpICBwdGVfZnJlZSgodGxiKS1cdTAwM2VtbSwgcHRlKVxuKyNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLCBwdGUsIGFkZHIpICB0bGJfcmVtb3ZlX3B0ZGVzYygodGxiKSwgcGFnZV9wdGRlc2MocHRlKSlcbiBcbiAjZW5kaWYgLyogX0FTTV9BUkNfUEdBTExPQ19IICovXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm0vS2NvbmZpZyBiL2FyY2gvYXJtL0tjb25maWdcbmluZGV4IDQwOGFhNThhMmE1YmIuLjBjYzI4OWE3MTg0YWIgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybS9LY29uZmlnXG4rKysgYi9hcmNoL2FybS9LY29uZmlnXG5AQCAtMTM0LDcgKzEzNCw2IEBAIGNvbmZpZyBBUk1cbiBcdHNlbGVjdCBIQVZFX1BFUkZfUkVHU1xuIFx0c2VsZWN0IEhBVkVfUEVSRl9VU0VSX1NUQUNLX0RVTVBcbiBcdHNlbGVjdCBIQVZFX1BPU0lYX0NQVV9USU1FUlNfVEFTS19XT1JLXG4tXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSBpZiBTTVAgXHUwMDI2XHUwMDI2IEFSTV9MUEFFXG4gXHRzZWxlY3QgSEFWRV9SRUdTX0FORF9TVEFDS19BQ0NFU1NfQVBJXG4gXHRzZWxlY3QgSEFWRV9SU0VRXG4gXHRzZWxlY3QgSEFWRV9SVVNUIGlmIENQVV9MSVRUTEVfRU5ESUFOIFx1MDAyNlx1MDAyNiBDUFVfMzJ2NyBcdTAwMjZcdTAwMjYgIUtBU0FOXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9LY29uZmlnIGIvYXJjaC9hcm02NC9LY29uZmlnXG5pbmRleCAyYmJlZGVkMzNkYTBkLi5iNmMyZGQ4YjI2MTI0IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9LY29uZmlnXG4rKysgYi9hcmNoL2FybTY0L0tjb25maWdcbkBAIC0yMjEsNyArMjIxLDYgQEAgY29uZmlnIEFSTTY0XG4gXHRzZWxlY3QgSEFWRV9SRUxJQUJMRV9TVEFDS1RSQUNFXG4gXHRzZWxlY3QgSEFWRV9QT1NJWF9DUFVfVElNRVJTX1RBU0tfV09SS1xuIFx0c2VsZWN0IEhBVkVfRlVOQ1RJT05fQVJHX0FDQ0VTU19BUElcbi1cdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG4gXHRzZWxlY3QgSEFWRV9SU0VRXG4gXHRzZWxlY3QgSEFWRV9SVVNUIGlmIFJVU1RDX1NVUFBPUlRTX0FSTTY0XG4gXHRzZWxlY3QgSEFWRV9TVEFDS1BST1RFQ1RPUlxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL0tjb25maWcgYi9hcmNoL2xvb25nYXJjaC9LY29uZmlnXG5pbmRleCA5YzVkZWY3MDYyMjIyLi5kMWIyM2RhNDA3Mzc1IDEwMDY0NFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gvS2NvbmZpZ1xuKysrIGIvYXJjaC9sb29uZ2FyY2gvS2NvbmZpZ1xuQEAgLTE4OCw3ICsxODgsNiBAQCBjb25maWcgTE9PTkdBUkNIXG4gXHRzZWxlY3QgSVJRX0xPT05HQVJDSF9DUFVcbiBcdHNlbGVjdCBMT0NLX01NX0FORF9GSU5EX1ZNQVxuIFx0c2VsZWN0IE1NVV9HQVRIRVJfTUVSR0VfVk1BUyBpZiBNTVVcbi1cdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG4gXHRzZWxlY3QgTU9EVUxFU19VU0VfRUxGX1JFTEEgaWYgTU9EVUxFU1xuIFx0c2VsZWN0IE5FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOS1xuIFx0c2VsZWN0IE5FRURfUEVSX0NQVV9QQUdFX0ZJUlNUX0NIVU5LXG5kaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL0tjb25maWcgYi9hcmNoL202OGsvS2NvbmZpZ1xuaW5kZXggMTE4MzVlYjU5ZDk0ZC4uZWI4NGMzYWY5MmMwMiAxMDA2NDRcbi0tLSBhL2FyY2gvbTY4ay9LY29uZmlnXG4rKysgYi9hcmNoL202OGsvS2NvbmZpZ1xuQEAgLTI5LDYgKzI5LDcgQEAgY29uZmlnIE02OEtcbiBcdHNlbGVjdCBIQVZFX0FSQ0hfTElCR0NDX0hcbiBcdHNlbGVjdCBIQVZFX0FSQ0hfU0VDQ09NUFxuIFx0c2VsZWN0IEhBVkVfQVJDSF9TRUNDT01QX0ZJTFRFUlxuK1x0c2VsZWN0IEhBVkVfQVJDSF9UTEJfUkVNT1ZFX1RBQkxFIGlmIE1NVV9NT1RPUk9MQVxuIFx0c2VsZWN0IEhBVkVfQVNNX01PRFZFUlNJT05TXG4gXHRzZWxlY3QgSEFWRV9ERUJVR19CVUdWRVJCT1NFXG4gXHRzZWxlY3QgSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUyBpZiAhQ1BVX0hBU19OT19VTkFMSUdORURcbmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbWNmX3BnYWxsb2MuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tY2ZfcGdhbGxvYy5oXG5pbmRleCBmYzU0NTRkMzdkYTMxLi5iNTNmZjA5NTBkYjJlIDEwMDY0NFxuLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21jZl9wZ2FsbG9jLmhcbisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tY2ZfcGdhbGxvYy5oXG5AQCAtMzksMTAgKzM5LDcgQEAgZXh0ZXJuIGlubGluZSBwbWRfdCAqcG1kX2FsbG9jX2tlcm5lbChwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG4gc3RhdGljIGlubGluZSB2b2lkIF9fcHRlX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHBndGFibGVfdCBwZ3RhYmxlLFxuIFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG4ge1xuLVx0c3RydWN0IHB0ZGVzYyAqcHRkZXNjID0gdmlydF90b19wdGRlc2MocGd0YWJsZSk7XG4tXG4tXHRwYWdldGFibGVfZHRvcihwdGRlc2MpO1xuLVx0cGFnZXRhYmxlX2ZyZWUocHRkZXNjKTtcbitcdHRsYl9yZW1vdmVfcHRkZXNjKHRsYiwgdmlydF90b19wdGRlc2MocGd0YWJsZSkpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHBndGFibGVfdCBwdGVfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tb3Rvcm9sYV9wZ2FsbG9jLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbW90b3JvbGFfcGdhbGxvYy5oXG5pbmRleCAxMDkxZmIwYWZmYmVlLi5kY2RlNDBlOGI1YzZhIDEwMDY0NFxuLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21vdG9yb2xhX3BnYWxsb2MuaFxuKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21vdG9yb2xhX3BnYWxsb2MuaFxuQEAgLTE3LDYgKzE3LDcgQEAgZW51bSBtNjhrX3RhYmxlX3R5cGVzIHtcbiBleHRlcm4gdm9pZCBpbml0X3BvaW50ZXJfdGFibGUodm9pZCAqdGFibGUsIGludCB0eXBlKTtcbiBleHRlcm4gdm9pZCAqZ2V0X3BvaW50ZXJfdGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCB0eXBlKTtcbiBleHRlcm4gaW50IGZyZWVfcG9pbnRlcl90YWJsZSh2b2lkICp0YWJsZSwgaW50IHR5cGUpO1xuK2V4dGVybiB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZSh2b2lkICp0YWJsZSk7XG4gXG4gLypcbiAgKiBBbGxvY2F0ZSBhbmQgZnJlZSBwYWdlIHRhYmxlcy4gVGhlIHh4eF9rZXJuZWwoKSB2ZXJzaW9ucyBhcmVcbkBAIC00Nyw3ICs0OCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdGVfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHBndGFibGUpXG4gc3RhdGljIGlubGluZSB2b2lkIF9fcHRlX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHBndGFibGVfdCBwZ3RhYmxlLFxuIFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG4ge1xuLVx0ZnJlZV9wb2ludGVyX3RhYmxlKHBndGFibGUsIFRBQkxFX1BURSk7XG4rXHR0bGJfcmVtb3ZlX3RhYmxlKHRsYiwgKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpcGd0YWJsZSB8IFRBQkxFX1BURSkpO1xuIH1cbiBcbiBcbkBAIC02MSwxMCArNjIsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgcG1kX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQpXG4gXHRyZXR1cm4gZnJlZV9wb2ludGVyX3RhYmxlKHBtZCwgVEFCTEVfUE1EKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgX19wbWRfZnJlZV90bGIoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgcG1kX3QgKnBtZCxcbi1cdFx0XHRcdCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG4rc3RhdGljIGlubGluZSB2b2lkIF9fcG1kX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHBtZF90ICpwbWQsXG4rXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcbiB7XG4tXHRyZXR1cm4gZnJlZV9wb2ludGVyX3RhYmxlKHBtZCwgVEFCTEVfUE1EKTtcbitcdHRsYl9yZW1vdmVfdGFibGUodGxiLCAodm9pZCAqKSgodW5zaWduZWQgbG9uZylwbWQgfCBUQUJMRV9QTUQpKTtcbiB9XG4gXG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21tL21vdG9yb2xhLmMgYi9hcmNoL202OGsvbW0vbW90b3JvbGEuY1xuaW5kZXggYjMwYWE2OWE3M2E2YS4uZmZjODA0ODM0NDBiYyAxMDA2NDRcbi0tLSBhL2FyY2gvbTY4ay9tbS9tb3Rvcm9sYS5jXG4rKysgYi9hcmNoL202OGsvbW0vbW90b3JvbGEuY1xuQEAgLTIwLDYgKzIwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1ibG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZ2ZwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vc2V0dXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFx1MDAzZVxuQEAgLTEwMyw2ICsxMDQsOCBAQCBzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBwdGFibGVfbGlzdFszXSA9IHtcbiBcdExJU1RfSEVBRF9JTklUKHB0YWJsZV9saXN0WzJdKSxcbiB9O1xuIFxuK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socHRhYmxlX2xvY2spO1xuK1xuICNkZWZpbmUgUERfUFRBQkxFKHB0ZGVzYykgKChwdGFibGVfZGVzYyAqKVx1MDAyNih2aXJ0X3RvX3B0ZGVzYygodm9pZCAqKShwdGRlc2MpKS1cdTAwM2VwdF9saXN0KSlcbiAjZGVmaW5lIFBEX1BUREVTQyhwdGFibGUpIChsaXN0X2VudHJ5KHB0YWJsZSwgc3RydWN0IHB0ZGVzYywgcHRfbGlzdCkpXG4gI2RlZmluZSBQRF9NQVJLQklUUyhkcCkgKCoodW5zaWduZWQgaW50ICopXHUwMDI2UERfUFRERVNDKGRwKS1cdTAwM2VwdF9pbmRleClcbkBAIC0xMzksNTIgKzE0Miw2NiBAQCB2b2lkIF9faW5pdCBpbml0X3BvaW50ZXJfdGFibGUodm9pZCAqdGFibGUsIGludCB0eXBlKVxuIFx0cmV0dXJuO1xuIH1cbiBcbi12b2lkICpnZXRfcG9pbnRlcl90YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IHR5cGUpXG4rLypcbisgKiBGb3IgYSBwb2ludGVyIHRhYmxlIGZvciBhIHVzZXIgcHJvY2VzcyBhZGRyZXNzIHNwYWNlLCBhXG4rICogdGFibGUgaXMgdGFrZW4gZnJvbSBhIHB0ZGVzYyBhbGxvY2F0ZWQgZm9yIHRoZSBwdXJwb3NlLiAgRWFjaFxuKyAqIHB0ZGVzYyBjYW4gaG9sZCA4IHBvaW50ZXIgdGFibGVzLiAgVGhlIHB0ZGVzYyBpcyByZW1hcHBlZCBpblxuKyAqIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSB0byBiZSBub25jYWNoZWFibGUuXG4rICovXG4rc3RhdGljIHZvaWQgKmFkZF9wb2ludGVyX3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgdHlwZSlcbiB7XG4tXHRwdGFibGVfZGVzYyAqZHAgPSBwdGFibGVfbGlzdFt0eXBlXS5uZXh0O1xuLVx0dW5zaWduZWQgaW50IG1hc2sgPSBsaXN0X2VtcHR5KFx1MDAyNnB0YWJsZV9saXN0W3R5cGVdKSA/IDAgOiBQRF9NQVJLQklUUyhkcCk7XG4tXHR1bnNpZ25lZCBpbnQgdG1wLCBvZmY7XG4rXHRzdHJ1Y3QgcHRkZXNjICpwdGRlc2M7XG4rXHRwdGFibGVfZGVzYyAqbmV3O1xuK1x0dm9pZCAqcHRfYWRkcjtcbiBcbi1cdC8qXG4tXHQgKiBGb3IgYSBwb2ludGVyIHRhYmxlIGZvciBhIHVzZXIgcHJvY2VzcyBhZGRyZXNzIHNwYWNlLCBhXG4tXHQgKiB0YWJsZSBpcyB0YWtlbiBmcm9tIGEgcHRkZXNjIGFsbG9jYXRlZCBmb3IgdGhlIHB1cnBvc2UuICBFYWNoXG4tXHQgKiBwdGRlc2MgY2FuIGhvbGQgOCBwb2ludGVyIHRhYmxlcy4gIFRoZSBwdGRlc2MgaXMgcmVtYXBwZWQgaW5cbi1cdCAqIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSB0byBiZSBub25jYWNoZWFibGUuXG4tXHQgKi9cbi1cdGlmIChtYXNrID09IDApIHtcbi1cdFx0c3RydWN0IHB0ZGVzYyAqcHRkZXNjO1xuLVx0XHRwdGFibGVfZGVzYyAqbmV3O1xuLVx0XHR2b2lkICpwdF9hZGRyO1xuLVxuLVx0XHRwdGRlc2MgPSBwYWdldGFibGVfYWxsb2MoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8sIDApO1xuLVx0XHRpZiAoIXB0ZGVzYylcbi1cdFx0XHRyZXR1cm4gTlVMTDtcbi1cbi1cdFx0cHRfYWRkciA9IHB0ZGVzY19hZGRyZXNzKHB0ZGVzYyk7XG4tXG4tXHRcdHN3aXRjaCAodHlwZSkge1xuLVx0XHRjYXNlIFRBQkxFX1BURTpcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIG02OGsgZG9lc24ndCBoYXZlIFNQTElUX1BURV9QVExPQ0tTIGZvciBub3QgaGF2aW5nXG4tXHRcdFx0ICogU01QLlxuLVx0XHRcdCAqL1xuLVx0XHRcdHBhZ2V0YWJsZV9wdGVfY3RvcihtbSwgcHRkZXNjKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBUQUJMRV9QTUQ6XG4tXHRcdFx0cGFnZXRhYmxlX3BtZF9jdG9yKG1tLCBwdGRlc2MpO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIFRBQkxFX1BHRDpcbi1cdFx0XHRwYWdldGFibGVfcGdkX2N0b3IocHRkZXNjKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuK1x0cHRkZXNjID0gcGFnZXRhYmxlX2FsbG9jKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPLCAwKTtcbitcdGlmICghcHRkZXNjKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdHB0X2FkZHIgPSBwdGRlc2NfYWRkcmVzcyhwdGRlc2MpO1xuK1xuK1x0c3dpdGNoICh0eXBlKSB7XG4rXHRjYXNlIFRBQkxFX1BURTpcbitcdFx0LypcbitcdFx0ICogbTY4ayBkb2Vzbid0IGhhdmUgU1BMSVRfUFRFX1BUTE9DS1MgZm9yIG5vdCBoYXZpbmdcbitcdFx0ICogU01QLlxuK1x0XHQgKi9cbitcdFx0cGFnZXRhYmxlX3B0ZV9jdG9yKG1tLCBwdGRlc2MpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgVEFCTEVfUE1EOlxuK1x0XHRwYWdldGFibGVfcG1kX2N0b3IobW0sIHB0ZGVzYyk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBUQUJMRV9QR0Q6XG4rXHRcdHBhZ2V0YWJsZV9wZ2RfY3RvcihwdGRlc2MpO1xuK1x0XHRicmVhaztcbitcdH1cbitcbitcdG1tdV9wYWdlX2N0b3IocHRfYWRkcik7XG4rXG4rXHRuZXcgPSBQRF9QVEFCTEUocHRfYWRkcik7XG4gXG4tXHRcdG1tdV9wYWdlX2N0b3IocHRfYWRkcik7XG4rXHRQRF9NQVJLQklUUyhuZXcpID0gcHRhYmxlX21hc2sodHlwZSkgLSAxO1xuK1x0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2lycXNhdmUsIFx1MDAyNnB0YWJsZV9sb2NrKVxuK1x0XHRsaXN0X2FkZChuZXcsIFx1MDAyNnB0YWJsZV9saXN0W3R5cGVdKTtcbiBcbi1cdFx0bmV3ID0gUERfUFRBQkxFKHB0X2FkZHIpO1xuLVx0XHRQRF9NQVJLQklUUyhuZXcpID0gcHRhYmxlX21hc2sodHlwZSkgLSAxO1xuLVx0XHRsaXN0X2FkZF90YWlsKG5ldywgZHApO1xuK1x0cmV0dXJuIChwbWRfdCAqKXB0X2FkZHI7XG4rfVxuK1xuK3ZvaWQgKmdldF9wb2ludGVyX3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgdHlwZSlcbit7XG4rXHR1bnNpZ25lZCBpbnQgdG1wLCBvZmY7XG4rXHR1bnNpZ25lZCBsb25nIG1hc2s7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1x0cHRhYmxlX2Rlc2MgKmRwO1xuK1x0dm9pZCAqcmV0O1xuIFxuLVx0XHRyZXR1cm4gKHBtZF90ICopcHRfYWRkcjtcbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnB0YWJsZV9sb2NrLCBmbGFncyk7XG4rXHRkcCA9IHB0YWJsZV9saXN0W3R5cGVdLm5leHQ7XG4rXHRtYXNrID0gbGlzdF9lbXB0eShcdTAwMjZwdGFibGVfbGlzdFt0eXBlXSkgPyAwIDogUERfTUFSS0JJVFMoZHApO1xuK1xuK1x0aWYgKG1hc2sgPT0gMCkge1xuK1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnB0YWJsZV9sb2NrLCBmbGFncyk7XG4rXHRcdHJldHVybiBhZGRfcG9pbnRlcl90YWJsZShtbSwgdHlwZSk7XG4gXHR9XG4gXG4gXHRmb3IgKHRtcCA9IDEsIG9mZiA9IDA7IChtYXNrIFx1MDAyNiB0bXApID09IDA7IHRtcCBcdTAwM2NcdTAwM2M9IDEsIG9mZiArPSBwdGFibGVfc2l6ZSh0eXBlKSlcbkBAIC0xOTQsNyArMjExLDEwIEBAIHZvaWQgKmdldF9wb2ludGVyX3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgdHlwZSlcbiBcdFx0LyogbW92ZSB0byBlbmQgb2YgbGlzdCAqL1xuIFx0XHRsaXN0X21vdmVfdGFpbChkcCwgXHUwMDI2cHRhYmxlX2xpc3RbdHlwZV0pO1xuIFx0fVxuLVx0cmV0dXJuIHB0ZGVzY19hZGRyZXNzKFBEX1BUREVTQyhkcCkpICsgb2ZmO1xuK1xuK1x0cmV0ID0gcHRkZXNjX2FkZHJlc3MoUERfUFRERVNDKGRwKSkgKyBvZmY7XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnB0YWJsZV9sb2NrLCBmbGFncyk7XG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBpbnQgZnJlZV9wb2ludGVyX3RhYmxlKHZvaWQgKnRhYmxlLCBpbnQgdHlwZSlcbkBAIC0yMDMsNiArMjIzLDkgQEAgaW50IGZyZWVfcG9pbnRlcl90YWJsZSh2b2lkICp0YWJsZSwgaW50IHR5cGUpXG4gXHR1bnNpZ25lZCBsb25nIHB0YWJsZSA9ICh1bnNpZ25lZCBsb25nKXRhYmxlO1xuIFx0dW5zaWduZWQgbG9uZyBwdF9hZGRyID0gcHRhYmxlIFx1MDAyNiBQQUdFX01BU0s7XG4gXHR1bnNpZ25lZCBpbnQgbWFzayA9IDFVIFx1MDAzY1x1MDAzYyAoKHB0YWJsZSAtIHB0X2FkZHIpL3B0YWJsZV9zaXplKHR5cGUpKTtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwdGFibGVfbG9jaywgZmxhZ3MpO1xuIFxuIFx0ZHAgPSBQRF9QVEFCTEUocHRfYWRkcik7XG4gXHRpZiAoUERfTUFSS0JJVFMgKGRwKSBcdTAwMjYgbWFzaylcbkBAIC0yMTMsNiArMjM2LDggQEAgaW50IGZyZWVfcG9pbnRlcl90YWJsZSh2b2lkICp0YWJsZSwgaW50IHR5cGUpXG4gXHRpZiAoUERfTUFSS0JJVFMoZHApID09IHB0YWJsZV9tYXNrKHR5cGUpKSB7XG4gXHRcdC8qIGFsbCB0YWJsZXMgaW4gcHRkZXNjIGFyZSBmcmVlLCBmcmVlIHB0ZGVzYyAqL1xuIFx0XHRsaXN0X2RlbChkcCk7XG4rXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cHRhYmxlX2xvY2ssIGZsYWdzKTtcbitcbiBcdFx0bW11X3BhZ2VfZHRvcigodm9pZCAqKXB0X2FkZHIpO1xuIFx0XHRwYWdldGFibGVfZHRvcl9mcmVlKHZpcnRfdG9fcHRkZXNjKCh2b2lkICopcHRfYWRkcikpO1xuIFx0XHRyZXR1cm4gMTtcbkBAIC0yMjMsOSArMjQ4LDIxIEBAIGludCBmcmVlX3BvaW50ZXJfdGFibGUodm9pZCAqdGFibGUsIGludCB0eXBlKVxuIFx0XHQgKi9cbiBcdFx0bGlzdF9tb3ZlKGRwLCBcdTAwMjZwdGFibGVfbGlzdFt0eXBlXSk7XG4gXHR9XG4rXG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnB0YWJsZV9sb2NrLCBmbGFncyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rdm9pZCBfX3RsYl9yZW1vdmVfdGFibGUodm9pZCAqdGFibGUpXG4re1xuK1x0LyogVGhlIGJvdHRvbSAyIGJpdHMgYXJlIHVzZWQgdG8gZW5jb2RlIHBhZ2UgdGFibGUgdHlwZS4gKi9cbitcdGNvbnN0IHVuc2lnbmVkIGxvbmcgZW5jb2RlZCA9ICh1bnNpZ25lZCBsb25nKXRhYmxlO1xuK1x0dm9pZCAqYWRkciA9ICh2b2lkICopKGVuY29kZWQgXHUwMDI2IH4zVUwpO1xuK1x0Y29uc3QgaW50IHR5cGUgPSBlbmNvZGVkIFx1MDAyNiAzO1xuK1xuK1x0ZnJlZV9wb2ludGVyX3RhYmxlKGFkZHIsIHR5cGUpO1xuK31cbitcbiAvKiBzaXplIG9mIG1lbW9yeSBhbHJlYWR5IG1hcHBlZCBpbiBoZWFkLlMgKi9cbiBleHRlcm4gX19pbml0ZGF0YSB1bnNpZ25lZCBsb25nIG02OGtfaW5pdF9tYXBwZWRfc2l6ZTtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcGdhbGxvYy5oIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxuaW5kZXggMDg0YThhMGRjMjM5NS4uZmZlZTZhMDA5MjE5YSAxMDA2NDRcbi0tLSBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcbisrKyBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcbkBAIC0yNSw3ICsyNSw3IEBAIGV4dGVybiB2b2lkIF9fYmFkX3B0ZShwbWRfdCAqcG1kKTtcbiBcbiBleHRlcm4gcHRlX3QgKnB0ZV9hbGxvY19vbmVfa2VybmVsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcbiBcbi0jZGVmaW5lIF9fcHRlX2ZyZWVfdGxiKHRsYiwgcHRlLCBhZGRyKVx0cHRlX2ZyZWUoKHRsYiktXHUwMDNlbW0sIChwdGUpKVxuKyNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLCBwdGUsIGFkZHIpXHR0bGJfcmVtb3ZlX3B0ZGVzYygodGxiKSwgcGFnZV9wdGRlc2MocHRlKSlcbiBcbiAjZGVmaW5lIHBtZF9wb3B1bGF0ZShtbSwgcG1kLCBwdGUpIFxcXG4gXHRcdFx0KHBtZF92YWwoKihwbWQpKSA9ICh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwdGUpKVxuZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9LY29uZmlnIGIvYXJjaC9taXBzL0tjb25maWdcbmluZGV4IGUyZWI5NjI3YmQxNGMuLmYwYzQzZDExOGNhMDAgMTAwNjQ0XG4tLS0gYS9hcmNoL21pcHMvS2NvbmZpZ1xuKysrIGIvYXJjaC9taXBzL0tjb25maWdcbkBAIC05Nyw3ICs5Nyw2IEBAIGNvbmZpZyBNSVBTXG4gXHRzZWxlY3QgSVJRX0ZPUkNFRF9USFJFQURJTkdcbiBcdHNlbGVjdCBJU0EgaWYgRUlTQVxuIFx0c2VsZWN0IExPQ0tfTU1fQU5EX0ZJTkRfVk1BXG4tXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxuIFx0c2VsZWN0IE1PRFVMRVNfVVNFX0VMRl9SRUwgaWYgTU9EVUxFU1xuIFx0c2VsZWN0IE1PRFVMRVNfVVNFX0VMRl9SRUxBIGlmIE1PRFVMRVMgXHUwMDI2XHUwMDI2IDY0QklUXG4gXHRzZWxlY3QgUEVSRl9VU0VfVk1BTExPQ1xuZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL0tjb25maWcgYi9hcmNoL3BhcmlzYy9LY29uZmlnXG5pbmRleCBkM2FmYWMyZjBkOWJlLi43N2Y2NzAyOGFkODljIDEwMDY0NFxuLS0tIGEvYXJjaC9wYXJpc2MvS2NvbmZpZ1xuKysrIGIvYXJjaC9wYXJpc2MvS2NvbmZpZ1xuQEAgLTgwLDcgKzgwLDYgQEAgY29uZmlnIFBBUklTQ1xuIFx0c2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFNcbiBcdHNlbGVjdCBDUFVfTk9fRUZGSUNJRU5UX0ZGU1xuIFx0c2VsZWN0IFRIUkVBRF9JTkZPX0lOX1RBU0tcbi1cdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG4gXHRzZWxlY3QgTkVFRF9ETUFfTUFQX1NUQVRFXG4gXHRzZWxlY3QgTkVFRF9TR19ETUFfTEVOR1RIXG4gXHRzZWxlY3QgSEFWRV9BUkNIX0tHREJcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnXG5pbmRleCAyNTgwZTI3ZTQzMjg3Li4wNzY3Y2ZjYmFhNDIyIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL0tjb25maWdcbisrKyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnXG5AQCAtMzA3LDcgKzMwNyw2IEBAIGNvbmZpZyBQUENcbiBcdHNlbGVjdCBLQVNBTl9WTUFMTE9DXHRcdFx0aWYgS0FTQU4gXHUwMDI2XHUwMDI2IEVYRUNNRU1cbiBcdHNlbGVjdCBMT0NLX01NX0FORF9GSU5EX1ZNQVxuIFx0c2VsZWN0IE1NVV9HQVRIRVJfUEFHRV9TSVpFXG4tXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxuIFx0c2VsZWN0IEhBVkVfQVJDSF9UTEJfUkVNT1ZFX1RBQkxFXG4gXHRzZWxlY3QgTU1VX0dBVEhFUl9NRVJHRV9WTUFTXG4gXHRzZWxlY3QgTU1VX0xBWllfVExCX1NIT09URE9XTlx0XHRpZiBQUENfQk9PSzNTXzY0XG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9LY29uZmlnIGIvYXJjaC9yaXNjdi9LY29uZmlnXG5pbmRleCA1MDVlZWQ0YWY5MzJiLi43NzQxYTQyODc0OTgxIDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9LY29uZmlnXG4rKysgYi9hcmNoL3Jpc2N2L0tjb25maWdcbkBAIC0yMDgsNyArMjA4LDYgQEAgY29uZmlnIFJJU0NWXG4gXHRzZWxlY3QgSVJRX0ZPUkNFRF9USFJFQURJTkdcbiBcdHNlbGVjdCBLQVNBTl9WTUFMTE9DIGlmIEtBU0FOXG4gXHRzZWxlY3QgTE9DS19NTV9BTkRfRklORF9WTUFcbi1cdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFIGlmIFNNUCBcdTAwMjZcdTAwMjYgTU1VXG4gXHRzZWxlY3QgTU9EVUxFU19VU0VfRUxGX1JFTEEgaWYgTU9EVUxFU1xuIFx0c2VsZWN0IE9GXG4gXHRzZWxlY3QgT0ZfRUFSTFlfRkxBVFRSRUVcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnXG5pbmRleCBiODhiODUwNDIxMzY5Li5hMzQzNzZjMDVmNmUzIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL0tjb25maWdcbisrKyBiL2FyY2gvczM5MC9LY29uZmlnXG5AQCAtMjY3LDcgKzI2Nyw2IEBAIGNvbmZpZyBTMzkwXG4gXHRzZWxlY3QgTE9DS19NTV9BTkRfRklORF9WTUFcbiBcdHNlbGVjdCBNTVVfR0FUSEVSX01FUkdFX1ZNQVNcbiBcdHNlbGVjdCBNTVVfR0FUSEVSX05PX0dBVEhFUlxuLVx0c2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcbiBcdHNlbGVjdCBNT0RVTEVTX1VTRV9FTEZfUkVMQVxuIFx0c2VsZWN0IE5FRURfRE1BX01BUF9TVEFURVx0aWYgUENJXG4gXHRzZWxlY3QgTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LXG5kaWZmIC0tZ2l0IGEvYXJjaC9zaC9LY29uZmlnIGIvYXJjaC9zaC9LY29uZmlnXG5pbmRleCBkNjBmMWQ1YTk0YzBmLi5mZTg1OWRlZjkxOGNjIDEwMDY0NFxuLS0tIGEvYXJjaC9zaC9LY29uZmlnXG4rKysgYi9hcmNoL3NoL0tjb25maWdcbkBAIC0zMyw2ICszMyw3IEBAIGNvbmZpZyBTVVBFUkhcbiBcdHNlbGVjdCBIQVZFX0FSQ0hfQVVESVRTWVNDQUxMXG4gXHRzZWxlY3QgSEFWRV9BUkNIX0tHREJcbiBcdHNlbGVjdCBIQVZFX0FSQ0hfU0VDQ09NUF9GSUxURVJcbitcdHNlbGVjdCBIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRSBpZiBYMlRMQlxuIFx0c2VsZWN0IEhBVkVfQVJDSF9UUkFDRUhPT0tcbiBcdHNlbGVjdCBIQVZFX0RFQlVHX0JVR1ZFUkJPU0VcbiBcdHNlbGVjdCBIQVZFX0RFQlVHX0tNRU1MRUFLXG5kaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxuaW5kZXggNmZlNzEyM2QzOGZhOS4uNjdjZTdmYTIzZmExMiAxMDA2NDRcbi0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGdhbGxvYy5oXG4rKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxuQEAgLTE3LDcgKzE3LDExIEBAIGV4dGVybiB2b2lkIHBnZF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKTtcbiBleHRlcm4gdm9pZCBwdWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHB1ZF90ICpwdWRwLCBwbWRfdCAqcG1kKTtcbiBleHRlcm4gcG1kX3QgKnBtZF9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7XG4gZXh0ZXJuIHZvaWQgcG1kX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQpO1xuLSNkZWZpbmUgX19wbWRfZnJlZV90bGIodGxiLCBwbWRwLCBhZGRyKVx0XHRwbWRfZnJlZSgodGxiKS1cdTAwM2VtbSwgKHBtZHApKVxuK2V4dGVybiB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZSh2b2lkICp0YWJsZSk7XG4rXG4rLyogUE1EcyBhcmUgc2xhYi1hbGxvY2F0ZWQsIHRhZyBzbyB0aGV5IGFyZSBmcmVlZCBjb3JyZWN0bHkuICovXG4rI2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIsIHBtZHAsIGFkZHIpXHRcdFx0XHRcdFxcXG4rXHR0bGJfcmVtb3ZlX3RhYmxlKCh0bGIpLCAodm9pZCAqKSgodW5zaWduZWQgbG9uZykocG1kcCkgfCAxKSlcbiAjZW5kaWZcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgcG1kX3BvcHVsYXRlX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCxcbmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL3BndGFibGUuYyBiL2FyY2gvc2gvbW0vcGd0YWJsZS5jXG5pbmRleCAzYTQwODVlYTAxNjFmLi5mNjE4NGI4NmI4OWM2IDEwMDY0NFxuLS0tIGEvYXJjaC9zaC9tbS9wZ3RhYmxlLmNcbisrKyBiL2FyY2gvc2gvbW0vcGd0YWJsZS5jXG5AQCAtNTYsNCArNTYsMjQgQEAgdm9pZCBwbWRfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZClcbiB7XG4gXHRrbWVtX2NhY2hlX2ZyZWUocG1kX2NhY2hlcCwgcG1kKTtcbiB9XG4rXG4rc3RhdGljIHZvaWQgX190bGJfcmVtb3ZlX3RhYmxlX3NsYWIodm9pZCAqdGFibGUpXG4re1xuK1x0a21lbV9jYWNoZV9mcmVlKHBtZF9jYWNoZXAsIHRhYmxlKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgX190bGJfcmVtb3ZlX3RhYmxlX3BndGFibGUodm9pZCAqdGFibGUpXG4re1xuK1x0cGFnZXRhYmxlX2R0b3JfZnJlZSh0YWJsZSk7XG4rfVxuK1xuK3ZvaWQgX190bGJfcmVtb3ZlX3RhYmxlKHZvaWQgKnRhYmxlKVxuK3tcbitcdGNvbnN0IHVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKXRhYmxlO1xuK1xuK1x0aWYgKGFkZHIgXHUwMDI2IDEpXG4rXHRcdF9fdGxiX3JlbW92ZV90YWJsZV9zbGFiKCh2b2lkICopKGFkZHIgXHUwMDI2IH4xVUwpKTtcbitcdGVsc2VcbitcdFx0X190bGJfcmVtb3ZlX3RhYmxlX3BndGFibGUodGFibGUpO1xuK31cbiAjZW5kaWYgLyogUEFHRVRBQkxFX0xFVkVMUyBcdTAwM2UgMiAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvS2NvbmZpZyBiL2FyY2gvc3BhcmMvS2NvbmZpZ1xuaW5kZXggYWI3N2QzZjI1MzZlMS4uNzQyZmZmZjhjMzdmMiAxMDA2NDRcbi0tLSBhL2FyY2gvc3BhcmMvS2NvbmZpZ1xuKysrIGIvYXJjaC9zcGFyYy9LY29uZmlnXG5AQCAtNjQsNiArNjQsNyBAQCBjb25maWcgU1BBUkMzMlxuIFx0c2VsZWN0IEhBVkVfVUlEMTZcbiBcdHNlbGVjdCBIQVZFX1BBR0VfU0laRV80S0JcbiBcdHNlbGVjdCBMT0NLX01NX0FORF9GSU5EX1ZNQVxuK1x0c2VsZWN0IEhBVkVfQVJDSF9UTEJfUkVNT1ZFX1RBQkxFXG4gXHRzZWxlY3QgT0xEX1NJR0FDVElPTlxuIFx0c2VsZWN0IFpPTkVfRE1BXG4gXG5AQCAtNzUsOCArNzYsNyBAQCBjb25maWcgU1BBUkM2NFxuIFx0c2VsZWN0IEhBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSXG4gXHRzZWxlY3QgSEFWRV9LUkVUUFJPQkVTXG4gXHRzZWxlY3QgSEFWRV9LUFJPQkVTXG4tXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSBpZiBTTVBcbi1cdHNlbGVjdCBIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRSBpZiBTTVBcbitcdHNlbGVjdCBIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRVxuIFx0c2VsZWN0IE1NVV9HQVRIRVJfTUVSR0VfVk1BU1xuIFx0c2VsZWN0IE1NVV9HQVRIRVJfTk9fRkxVU0hfQ0FDSEVcbiBcdHNlbGVjdCBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2NfMzIuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY18zMi5oXG5pbmRleCA0ZjczZTg3YjIyYTMyLi4zNjAxMDg1MmJhMGMwIDEwMDY0NFxuLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzMyLmhcbisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY18zMi5oXG5AQCAtNDgsNyArNDgsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9wbWRfZmFzdChwbWRfdCAqIHBtZClcbiB9XG4gXG4gI2RlZmluZSBwbWRfZnJlZShtbSwgcG1kKVx0XHRmcmVlX3BtZF9mYXN0KHBtZClcbi0jZGVmaW5lIF9fcG1kX2ZyZWVfdGxiKHRsYiwgcG1kLCBhZGRyKVx0cG1kX2ZyZWUoKHRsYiktXHUwMDNlbW0sIHBtZClcbitcbisjZGVmaW5lIF9fcG1kX2ZyZWVfdGxiKHRsYiwgcG1kLCBhZGRyKVx0XHRcdFx0XHRcXFxuK1x0dGxiX3JlbW92ZV90YWJsZSgodGxiKSwgKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKHBtZCkgfCAxVUwpKVxuIFxuICNkZWZpbmUgcG1kX3BvcHVsYXRlKG1tLCBwbWQsIHB0ZSlcdHBtZF9zZXQocG1kLCBwdGUpXG4gXG5AQCAtNzIsNiArNzQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9wdGVfZmFzdChwdGVfdCAqcHRlKVxuICNkZWZpbmUgcHRlX2ZyZWVfa2VybmVsKG1tLCBwdGUpXHRmcmVlX3B0ZV9mYXN0KHB0ZSlcbiBcbiB2b2lkIHB0ZV9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKiBtbSwgcGd0YWJsZV90IHB0ZSk7XG4tI2RlZmluZSBfX3B0ZV9mcmVlX3RsYih0bGIsIHB0ZSwgYWRkcilcdHB0ZV9mcmVlKCh0bGIpLVx1MDAzZW1tLCBwdGUpXG4rdm9pZCBfX3RsYl9yZW1vdmVfdGFibGUodm9pZCAqdGFibGUpO1xuKyNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLCBwdGUsIGFkZHIpXHR0bGJfcmVtb3ZlX3RhYmxlKCh0bGIpLCAodm9pZCAqKShwdGUpKVxuIFxuICNlbmRpZiAvKiBfU1BBUkNfUEdBTExPQ19IICovXG5kaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzY0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2NfNjQuaFxuaW5kZXggY2FhNzYzMmJlNGMyYS4uYjUwNTVkMjU5Yjc0ZCAxMDA2NDRcbi0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY182NC5oXG4rKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2NfNjQuaFxuQEAgLTc0LDggKzc0LDYgQEAgdm9pZCBwdGVfZnJlZV9kZWZlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHBndGFibGUpO1xuIFxuIHZvaWQgcGd0YWJsZV9mcmVlKHZvaWQgKnRhYmxlLCBib29sIGlzX3BhZ2UpO1xuIFxuLSNpZmRlZiBDT05GSUdfU01QXG4tXG4gc3RydWN0IG1tdV9nYXRoZXI7XG4gdm9pZCB0bGJfcmVtb3ZlX3RhYmxlKHN0cnVjdCBtbXVfZ2F0aGVyICosIHZvaWQgKik7XG4gXG5AQCAtOTYsMTIgKzk0LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZSh2b2lkICpfdGFibGUpXG4gXHRcdGlzX3BhZ2UgPSB0cnVlO1xuIFx0cGd0YWJsZV9mcmVlKHRhYmxlLCBpc19wYWdlKTtcbiB9XG4tI2Vsc2UgLyogQ09ORklHX1NNUCAqL1xuLXN0YXRpYyBpbmxpbmUgdm9pZCBwZ3RhYmxlX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHZvaWQgKnRhYmxlLCBib29sIGlzX3BhZ2UpXG4te1xuLVx0cGd0YWJsZV9mcmVlKHRhYmxlLCBpc19wYWdlKTtcbi19XG4tI2VuZGlmIC8qICFDT05GSUdfU01QICovXG4gXG4gc3RhdGljIGlubGluZSB2b2lkIF9fcHRlX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHB0ZV90ICpwdGUsXG4gXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcbmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RsYl82NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90bGJfNjQuaFxuaW5kZXggMzAzNzE4NzQ4MmRiNy4uZjVmOTYzMTY4NWQ1MCAxMDA2NDRcbi0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGxiXzY0LmhcbisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGxiXzY0LmhcbkBAIC0yOSw5ICsyOSw3IEBAIHZvaWQgZmx1c2hfdGxiX3BlbmRpbmcodm9pZCk7XG4gICogYW5kIHRoZXJlZm9yZSB3ZSBkb24ndCBuZWVkIGEgVExCSSB3aGVuIGZyZWVpbmcgcGFnZS10YWJsZSBwYWdlcy5cbiAgKi9cbiBcbi0jaWZkZWYgQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcbiAjZGVmaW5lIHRsYl9uZWVkc190YWJsZV9pbnZhbGlkYXRlKClcdChmYWxzZSlcbi0jZW5kaWZcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20tZ2VuZXJpYy90bGIuaFx1MDAzZVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbGliL2JpdGV4dC5jIGIvYXJjaC9zcGFyYy9saWIvYml0ZXh0LmNcbmluZGV4IDMyYTVjMWQ5NDU5Y2QuLmMzMDllMjc5NzNjZTYgMTAwNjQ0XG4tLS0gYS9hcmNoL3NwYXJjL2xpYi9iaXRleHQuY1xuKysrIGIvYXJjaC9zcGFyYy9saWIvYml0ZXh0LmNcbkBAIC0yMiw4ICsyMiw2IEBAXG4gICogQGFsaWduOiByZXF1ZXN0ZWQgYWxpZ25tZW50XG4gICpcbiAgKiBSZXR1cm5zIG9mZnNldCBpbiB0aGUgbWFwIG9yIC0xIGlmIG91dCBvZiBzcGFjZS5cbi0gKlxuLSAqIE5vdCBzYWZlIHRvIGNhbGwgZnJvbSBhbiBpbnRlcnJ1cHQgKHVzZXMgc3Bpbl9sb2NrKS5cbiAgKi9cbiBpbnQgYml0X21hcF9zdHJpbmdfZ2V0KHN0cnVjdCBiaXRfbWFwICp0LCBpbnQgbGVuLCBpbnQgYWxpZ24pXG4ge1xuQEAgLTMxLDYgKzI5LDcgQEAgaW50IGJpdF9tYXBfc3RyaW5nX2dldChzdHJ1Y3QgYml0X21hcCAqdCwgaW50IGxlbiwgaW50IGFsaWduKVxuIFx0aW50IG9mZl9uZXc7XG4gXHRpbnQgYWxpZ24xO1xuIFx0aW50IGksIGNvbG9yO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiBcdGlmICh0LVx1MDAzZW51bV9jb2xvcnMpIHtcbiBcdFx0LyogYWxpZ24gaXMgb3ZlcmxvYWRlZCB0byBiZSB0aGUgcGFnZSBjb2xvciAqL1xuQEAgLTUwLDcgKzQ5LDcgQEAgaW50IGJpdF9tYXBfc3RyaW5nX2dldChzdHJ1Y3QgYml0X21hcCAqdCwgaW50IGxlbiwgaW50IGFsaWduKVxuIFx0XHRCVUcoKTtcbiBcdGNvbG9yIFx1MDAyNj0gYWxpZ24xO1xuIFxuLVx0c3Bpbl9sb2NrKFx1MDAyNnQtXHUwMDNlbG9jayk7XG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ0LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdGlmIChsZW4gXHUwMDNjIHQtXHUwMDNlbGFzdF9zaXplKVxuIFx0XHRvZmZzZXQgPSB0LVx1MDAzZWZpcnN0X2ZyZWU7XG4gXHRlbHNlXG5AQCAtNjQsNyArNjMsNyBAQCBpbnQgYml0X21hcF9zdHJpbmdfZ2V0KHN0cnVjdCBiaXRfbWFwICp0LCBpbnQgbGVuLCBpbnQgYWxpZ24pXG4gXHRcdGlmIChvZmZzZXQgXHUwMDNlPSB0LVx1MDAzZXNpemUpXG4gXHRcdFx0b2Zmc2V0ID0gMDtcbiBcdFx0aWYgKGNvdW50ICsgbGVuIFx1MDAzZSB0LVx1MDAzZXNpemUpIHtcbi1cdFx0XHRzcGluX3VubG9jayhcdTAwMjZ0LVx1MDAzZWxvY2spO1xuK1x0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gLyogUDMgKi8gcHJpbnRrKEtFUk5fRVJSXG4gICBcImJpdG1hcCBvdXQ6IHNpemUgJWQgdXNlZCAlZCBvZmYgJWQgbGVuICVkIGFsaWduICVkIGNvdW50ICVkXFxuXCIsXG4gICB0LVx1MDAzZXNpemUsIHQtXHUwMDNldXNlZCwgb2Zmc2V0LCBsZW4sIGFsaWduLCBjb3VudCk7XG5AQCAtOTAsNyArODksNyBAQCBpbnQgYml0X21hcF9zdHJpbmdfZ2V0KHN0cnVjdCBiaXRfbWFwICp0LCBpbnQgbGVuLCBpbnQgYWxpZ24pXG4gXHRcdFx0XHRcdHQtXHUwMDNlbGFzdF9vZmYgPSAwO1xuIFx0XHRcdFx0dC1cdTAwM2V1c2VkICs9IGxlbjtcbiBcdFx0XHRcdHQtXHUwMDNlbGFzdF9zaXplID0gbGVuO1xuLVx0XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2dC1cdTAwM2Vsb2NrKTtcbitcdFx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRcdFx0XHRyZXR1cm4gb2Zmc2V0O1xuIFx0XHRcdH1cbiBcdFx0fVxuQEAgLTEwMywxMCArMTAyLDExIEBAIGludCBiaXRfbWFwX3N0cmluZ19nZXQoc3RydWN0IGJpdF9tYXAgKnQsIGludCBsZW4sIGludCBhbGlnbilcbiB2b2lkIGJpdF9tYXBfY2xlYXIoc3RydWN0IGJpdF9tYXAgKnQsIGludCBvZmZzZXQsIGludCBsZW4pXG4ge1xuIFx0aW50IGk7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuIFx0aWYgKHQtXHUwMDNldXNlZCBcdTAwM2MgbGVuKVxuIFx0XHRCVUcoKTtcdFx0LyogTXVjaCB0b28gbGF0ZSB0byBkbyBhbnkgZ29vZCwgYnV0IGFsYXMuLi4gKi9cbi1cdHNwaW5fbG9jayhcdTAwMjZ0LVx1MDAzZWxvY2spO1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBsZW47IGkrKykge1xuIFx0XHRpZiAodGVzdF9iaXQob2Zmc2V0ICsgaSwgdC1cdTAwM2VtYXApID09IDApXG4gXHRcdFx0QlVHKCk7XG5AQCAtMTE1LDcgKzExNSw3IEBAIHZvaWQgYml0X21hcF9jbGVhcihzdHJ1Y3QgYml0X21hcCAqdCwgaW50IG9mZnNldCwgaW50IGxlbilcbiBcdGlmIChvZmZzZXQgXHUwMDNjIHQtXHUwMDNlZmlyc3RfZnJlZSlcbiBcdFx0dC1cdTAwM2VmaXJzdF9mcmVlID0gb2Zmc2V0O1xuIFx0dC1cdTAwM2V1c2VkIC09IGxlbjtcbi1cdHNwaW5fdW5sb2NrKFx1MDAyNnQtXHUwMDNlbG9jayk7XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnQtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIH1cbiBcbiB2b2lkIGJpdF9tYXBfaW5pdChzdHJ1Y3QgYml0X21hcCAqdCwgdW5zaWduZWQgbG9uZyAqbWFwLCBpbnQgc2l6ZSlcbmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL3NybW11LmMgYi9hcmNoL3NwYXJjL21tL3NybW11LmNcbmluZGV4IDlhNzQ5MDJhZDE4MTQuLjJhMmM3YmQyMTAxMTQgMTAwNjQ0XG4tLS0gYS9hcmNoL3NwYXJjL21tL3NybW11LmNcbisrKyBiL2FyY2gvc3BhcmMvbW0vc3JtbXUuY1xuQEAgLTM1OSwxOSArMzU5LDM5IEBAIHBndGFibGVfdCBwdGVfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFx0cmV0dXJuIHB0ZXA7XG4gfVxuIFxuLXZvaWQgcHRlX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwdGVwKVxuK3N0YXRpYyB2b2lkIF9fcHRlX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwdGVwKVxuIHtcbitcdGNvbnN0IGJvb2wgcHJvY2Vzc19jb250ZXh0ID0gbW07XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcbiBcdHBhZ2UgPSBwZm5fdG9fcGFnZShfX25vY2FjaGVfcGEoKHVuc2lnbmVkIGxvbmcpcHRlcCkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuLVx0c3Bpbl9sb2NrKFx1MDAyNm1tLVx1MDAzZXBhZ2VfdGFibGVfbG9jayk7XG4rXHRpZiAocHJvY2Vzc19jb250ZXh0KVxuK1x0XHRzcGluX2xvY2soXHUwMDI2bW0tXHUwMDNlcGFnZV90YWJsZV9sb2NrKTtcbiBcdGlmIChwYWdlX3JlZl9kZWNfcmV0dXJuKHBhZ2UpID09IDEpXG4gXHRcdHBhZ2V0YWJsZV9kdG9yKHBhZ2VfcHRkZXNjKHBhZ2UpKTtcbi1cdHNwaW5fdW5sb2NrKFx1MDAyNm1tLVx1MDAzZXBhZ2VfdGFibGVfbG9jayk7XG4rXHRpZiAocHJvY2Vzc19jb250ZXh0KVxuK1x0XHRzcGluX3VubG9jayhcdTAwMjZtbS1cdTAwM2VwYWdlX3RhYmxlX2xvY2spO1xuIFxuIFx0c3JtbXVfZnJlZV9ub2NhY2hlKHB0ZXAsIFNSTU1VX1BURV9UQUJMRV9TSVpFKTtcbiB9XG4gXG4rdm9pZCBwdGVfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHB0ZXApXG4re1xuK1x0X19wdGVfZnJlZShtbSwgcHRlcCk7XG4rfVxuK1xuK3ZvaWQgX190bGJfcmVtb3ZlX3RhYmxlKHZvaWQgKnRhYmxlKVxuK3tcbitcdGNvbnN0IHVuc2lnbmVkIGxvbmcgZW5jb2RlZCA9ICh1bnNpZ25lZCBsb25nKXRhYmxlO1xuK1x0Y29uc3QgdW5zaWduZWQgbG9uZyBhZGRyID0gZW5jb2RlZCBcdTAwMjYgfjFVTDtcbitcdGNvbnN0IGJvb2wgaXNfcG1kID0gZW5jb2RlZCBcdTAwMjYgMTtcbitcbitcdGlmIChpc19wbWQpXG4rXHRcdGZyZWVfcG1kX2Zhc3QoKHBtZF90ICopYWRkcik7XG4rXHRlbHNlIC8qIENhbGxlZCBmcm9tIHNvZnRpcnEgY29udGV4dCwgbm8gbW0uICovXG4rXHRcdF9fcHRlX2ZyZWUoTlVMTCwgKHBndGFibGVfdClhZGRyKTtcbit9XG4rXG4gLyogY29udGV4dCBoYW5kbGluZyAtIGEgZHluYW1pY2FsbHkgc2l6ZWQgcG9vbCBpcyB1c2VkICovXG4gI2RlZmluZSBOT19DT05URVhUXHQtMVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvdW0vS2NvbmZpZyBiL2FyY2gvdW0vS2NvbmZpZ1xuaW5kZXggZDk1NDFkMTNkOWViMC4uOTRiOGZmNzBmNTc4YiAxMDA2NDRcbi0tLSBhL2FyY2gvdW0vS2NvbmZpZ1xuKysrIGIvYXJjaC91bS9LY29uZmlnXG5AQCAtNDQsNyArNDQsNiBAQCBjb25maWcgVU1MXG4gXHRzZWxlY3QgSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTXG4gXHRzZWxlY3QgVEhSRUFEX0lORk9fSU5fVEFTS1xuIFx0c2VsZWN0IFNQQVJTRV9JUlFcbi1cdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG4gXG4gY29uZmlnIE1NVVxuIFx0Ym9vbFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcgYi9hcmNoL3g4Ni9LY29uZmlnXG5pbmRleCBhOGMzYjNkMzFhMjc2Li42ZTVlNDYyZWMwNTlhIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvS2NvbmZpZ1xuKysrIGIvYXJjaC94ODYvS2NvbmZpZ1xuQEAgLTI4Myw3ICsyODMsNiBAQCBjb25maWcgWDg2XG4gXHRzZWxlY3QgSEFWRV9QRVJGX1JFR1NcbiBcdHNlbGVjdCBIQVZFX1BFUkZfVVNFUl9TVEFDS19EVU1QXG4gXHRzZWxlY3QgQVNZTkNfS0VSTkVMX1BHVEFCTEVfRlJFRVx0aWYgSU9NTVVfU1ZBXG4tXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxuIFx0c2VsZWN0IE1NVV9HQVRIRVJfTUVSR0VfVk1BU1xuIFx0c2VsZWN0IEhBVkVfUE9TSVhfQ1BVX1RJTUVSU19UQVNLX1dPUktcbiBcdHNlbGVjdCBIQVZFX1JFR1NfQU5EX1NUQUNLX0FDQ0VTU19BUElcbmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS90bGIuaCBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3RsYi5oXG5pbmRleCA4YzNjZWI0MjcwMTgwLi42ZmI3Yjc4MTU0ZjYyIDEwMDY0NFxuLS0tIGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vdGxiLmhcbisrKyBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3RsYi5oXG5AQCAtMTYsNyArMTYsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS1nZW5lcmljL3RsYi5oXHUwMDNlXG4gXG4tI2RlZmluZSBfX3B0ZV9mcmVlX3RsYih0bGIsIHB0ZSwgYWRkcmVzcylcdHB0ZV9mcmVlKCh0bGIpLVx1MDAzZW1tLCBwdGUpXG4rI2RlZmluZSBfX3B0ZV9mcmVlX3RsYih0bGIsIHB0ZSwgYWRkcmVzcylcdHRsYl9yZW1vdmVfcHRkZXNjKCh0bGIpLCBwYWdlX3B0ZGVzYyhwdGUpKVxuIFxuIHZvaWQgY2hlY2tfdGxiX3Nhbml0eSh2b2lkKTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3RsYi5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaFxuaW5kZXggYmRjYzI3NzhhYzY0Zi4uMDQ0ZGFiYzFmZTljYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmhcbisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmhcbkBAIC02NywxMSArNjcsOCBAQFxuICAqICAtIHRsYl9yZW1vdmVfdGFibGUoKVxuICAqXG4gICogICAgdGxiX3JlbW92ZV90YWJsZSgpIGlzIHRoZSBiYXNpYyBwcmltaXRpdmUgdG8gZnJlZSBwYWdlLXRhYmxlIGRpcmVjdG9yaWVzXG4tICogICAgKF9fcCpfZnJlZV90bGIoKSkuICBJbiBpdCdzIG1vc3QgcHJpbWl0aXZlIGZvcm0gaXQgaXMgYW4gYWxpYXMgZm9yXG4tICogICAgdGxiX3JlbW92ZV9wYWdlKCkgYmVsb3csIGZvciB3aGVuIHBhZ2UgZGlyZWN0b3JpZXMgYXJlIHBhZ2VzIGFuZCBoYXZlIG5vXG4tICogICAgYWRkaXRpb25hbCBjb25zdHJhaW50cy5cbi0gKlxuLSAqICAgIFNlZSBhbHNvIE1NVV9HQVRIRVJfVEFCTEVfRlJFRSBhbmQgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRS5cbisgKiAgICAoX19wKl9mcmVlX3RsYigpKS4gIFBhZ2UgZGlyZWN0b3JpZXMgYXJlIGZyZWVkIGFmdGVyIGFuIFJDVSBncmFjZVxuKyAqICAgIHBlcmlvZCAtIHNlZSB0aGUgY29tbWVudCBpbiBtbS9tbXVfZ2F0aGVyLmMuXG4gICpcbiAgKiAgLSB0bGJfcmVtb3ZlX3BhZ2UoKSAvIHRsYl9yZW1vdmVfcGFnZV9zaXplKClcbiAgKiAgLSBfX3RsYl9yZW1vdmVfZm9saW9fcGFnZXMoKSAvIF9fdGxiX3JlbW92ZV9wYWdlX3NpemUoKVxuQEAgLTE1MSwyNCArMTQ4LDE1IEBAXG4gICogIFRoaXMgbWlnaHQgYmUgdXNlZnVsIGlmIHlvdXIgYXJjaGl0ZWN0dXJlIGhhcyBzaXplIHNwZWNpZmljIFRMQlxuICAqICBpbnZhbGlkYXRpb24gaW5zdHJ1Y3Rpb25zLlxuICAqXG4tICogIE1NVV9HQVRIRVJfVEFCTEVfRlJFRVxuLSAqXG4tICogIFRoaXMgcHJvdmlkZXMgdGxiX3JlbW92ZV90YWJsZSgpLCB0byBiZSB1c2VkIGluc3RlYWQgb2YgdGxiX3JlbW92ZV9wYWdlKClcbi0gKiAgZm9yIHBhZ2UgZGlyZWN0b3JlcyAoX19wKl9mcmVlX3RsYigpKS5cbi0gKlxuLSAqICBVc2VmdWwgaWYgeW91ciBhcmNoaXRlY3R1cmUgaGFzIG5vbi1wYWdlIHBhZ2UgZGlyZWN0b3JpZXMuXG4rICogIFBhZ2UgZGlyZWN0b3JpZXMgKF9fcCpfZnJlZV90bGIoKSkgYXJlIGFsd2F5cyBmcmVlZCB2aWEgdGxiX3JlbW92ZV90YWJsZSgpLFxuKyAqICBhZnRlciBhbiBSQ1UgZ3JhY2UgcGVyaW9kIChzZWUgbW0vbW11X2dhdGhlci5jKS5cbiAgKlxuLSAqICBXaGVuIHVzZWQsIGFuIGFyY2hpdGVjdHVyZSBpcyBleHBlY3RlZCB0byBwcm92aWRlIF9fdGxiX3JlbW92ZV90YWJsZSgpIG9yXG4tICogIHVzZSB0aGUgZ2VuZXJpYyBfX3RsYl9yZW1vdmVfdGFibGUoKSwgd2hpY2ggZG9lcyB0aGUgYWN0dWFsIGZyZWVpbmcgb2YgdGhlc2Vcbi0gKiAgcGFnZXMuXG4rICogVGhpcyBzZXJpYWxpc2VzIGFnYWluc3Qgc29mdHdhcmUgcGFnZS10YWJsZSB3YWxrZXJzLCBpbmNsdWRpbmcgYXJjaGl0ZWN0dXJlc1xuKyAqIHdoaWNoIGRvIG5vdCB1c2UgSVBJcyBmb3IgcmVtb3RlIFRMQiBpbnZhbGlkYXRlcy5cbiAgKlxuLSAqICBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG4tICpcbi0gKiAgTGlrZSBNTVVfR0FUSEVSX1RBQkxFX0ZSRUUsIGFuZCBhZGRzIHNlbWktUkNVIHNlbWFudGljcyB0byB0aGUgZnJlZSAoc2VlXG4tICogIGNvbW1lbnQgYmVsb3cpLlxuLSAqXG4tICogIFVzZWZ1bCBpZiB5b3VyIGFyY2hpdGVjdHVyZSBkb2Vzbid0IHVzZSBJUElzIGZvciByZW1vdGUgVExCIGludmFsaWRhdGVzXG4tICogIGFuZCB0aGVyZWZvcmUgZG9lc24ndCBuYXR1cmFsbHkgc2VyaWFsaXplIHdpdGggc29mdHdhcmUgcGFnZS10YWJsZSB3YWxrZXJzLlxuKyAqICBBbiBhcmNoaXRlY3R1cmUgaXMgZXhwZWN0ZWQgdG8gcHJvdmlkZSBfX3RsYl9yZW1vdmVfdGFibGUoKSAoc2VlXG4rICogIEhBVkVfQVJDSF9UTEJfUkVNT1ZFX1RBQkxFKSBvciB1c2UgdGhlIGdlbmVyaWMgX190bGJfcmVtb3ZlX3RhYmxlKCksIHdoaWNoXG4rICogIGRvZXMgdGhlIGFjdHVhbCBmcmVlaW5nIG9mIHRoZXNlIHBhZ2VzLlxuICAqXG4gICogIE1NVV9HQVRIRVJfTk9fRkxVU0hfQ0FDSEVcbiAgKlxuQEAgLTIwMCwxMiArMTg4LDggQEBcbiAgKiAgdmFyaW91cyBwdGVwX2dldF9hbmRfY2xlYXIoKSBmdW5jdGlvbnMuXG4gICovXG4gXG4tI2lmZGVmIENPTkZJR19NTVVfR0FUSEVSX1RBQkxFX0ZSRUVcbi1cbiBzdHJ1Y3QgbW11X3RhYmxlX2JhdGNoIHtcbi0jaWZkZWYgQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcbiBcdHN0cnVjdCByY3VfaGVhZFx0XHRyY3U7XG4tI2VuZGlmXG4gXHR1bnNpZ25lZCBpbnRcdFx0bnI7XG4gXHR2b2lkXHRcdFx0KnRhYmxlc1tdO1xuIH07XG5AQCAtMjI0LDIzICsyMDgsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX190bGJfcmVtb3ZlX3RhYmxlKHZvaWQgKnRhYmxlKVxuIFxuIGV4dGVybiB2b2lkIHRsYl9yZW1vdmVfdGFibGUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgdm9pZCAqdGFibGUpO1xuIFxuLSNlbHNlIC8qICFDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFICovXG4tXG4tc3RhdGljIGlubGluZSB2b2lkIHRsYl9yZW1vdmVfcGFnZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4tLypcbi0gKiBXaXRob3V0IE1NVV9HQVRIRVJfVEFCTEVfRlJFRSB0aGUgYXJjaGl0ZWN0dXJlIGlzIGFzc3VtZWQgdG8gaGF2ZSBwYWdlIGJhc2VkXG4tICogcGFnZSBkaXJlY3RvcmllcyBhbmQgd2UgY2FuIHVzZSB0aGUgbm9ybWFsIHBhZ2UgYmF0Y2hpbmcgdG8gZnJlZSB0aGVtLlxuLSAqL1xuLXN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfcmVtb3ZlX3RhYmxlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHZvaWQgKnRhYmxlKVxuLXtcbi1cdHN0cnVjdCBwdGRlc2MgKnB0ZGVzYyA9IChzdHJ1Y3QgcHRkZXNjICopdGFibGU7XG4tXG4tXHRwYWdldGFibGVfZHRvcihwdGRlc2MpO1xuLVx0dGxiX3JlbW92ZV9wYWdlKHRsYiwgcHRkZXNjX3BhZ2UocHRkZXNjKSk7XG4tfVxuLSNlbmRpZiAvKiBDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFICovXG4tXG4tI2lmZGVmIENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG4gLypcbiAgKiBUaGlzIGFsbG93cyBhbiBhcmNoaXRlY3R1cmUgdGhhdCBkb2VzIG5vdCB1c2UgdGhlIGxpbnV4IHBhZ2UtdGFibGVzIGZvclxuICAqIGhhcmR3YXJlIHRvIHNraXAgdGhlIFRMQkkgd2hlbiBmcmVlaW5nIHBhZ2UgdGFibGVzLlxuQEAgLTI1MywxOSArMjIwLDYgQEAgdm9pZCB0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfb25lKHZvaWQpO1xuIFxuIHZvaWQgdGxiX3JlbW92ZV90YWJsZV9zeW5jX3JjdSh2b2lkKTtcbiBcbi0jZWxzZVxuLVxuLSNpZmRlZiB0bGJfbmVlZHNfdGFibGVfaW52YWxpZGF0ZVxuLSNlcnJvciB0bGJfbmVlZHNfdGFibGVfaW52YWxpZGF0ZSgpIHJlcXVpcmVzIE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcbi0jZW5kaWZcbi1cbi1zdGF0aWMgaW5saW5lIHZvaWQgdGxiX3JlbW92ZV90YWJsZV9zeW5jX29uZSh2b2lkKSB7IH1cbi1cbi1zdGF0aWMgaW5saW5lIHZvaWQgdGxiX3JlbW92ZV90YWJsZV9zeW5jX3JjdSh2b2lkKSB7IH1cbi1cbi0jZW5kaWYgLyogQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgKi9cbi1cbi1cbiAjaWZuZGVmIENPTkZJR19NTVVfR0FUSEVSX05PX0dBVEhFUlxuIC8qXG4gICogSWYgd2UgY2FuJ3QgYWxsb2NhdGUgYSBwYWdlIHRvIG1ha2UgYSBiaWcgYmF0Y2ggb2YgcGFnZSBwb2ludGVyc1xuQEAgLTMyNSw5ICsyNzksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdGxiX2ZsdXNoX3JtYXBzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdFxuIHN0cnVjdCBtbXVfZ2F0aGVyIHtcbiBcdHN0cnVjdCBtbV9zdHJ1Y3RcdCptbTtcbiBcbi0jaWZkZWYgQ09ORklHX01NVV9HQVRIRVJfVEFCTEVfRlJFRVxuIFx0c3RydWN0IG1tdV90YWJsZV9iYXRjaFx0KmJhdGNoO1xuLSNlbmRpZlxuIFxuIFx0dW5zaWduZWQgbG9uZ1x0XHRzdGFydDtcbiBcdHVuc2lnbmVkIGxvbmdcdFx0ZW5kO1xuZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnXG5pbmRleCBjMWRkZjU5YzBkNzFhLi5iYzdiZWZhZmI0N2I1IDEwMDY0NFxuLS0tIGEvbW0vS2NvbmZpZ1xuKysrIGIvbW0vS2NvbmZpZ1xuQEAgLTE0NjUsNyArMTQ2NSw3IEBAIGNvbmZpZyBIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRVxuIFxuIGNvbmZpZyBQVF9SRUNMQUlNXG4gXHRkZWZfYm9vbCB5XG4tXHRkZXBlbmRzIG9uIE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgXHUwMDI2XHUwMDI2ICFIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRVxuK1x0ZGVwZW5kcyBvbiBNTVUgXHUwMDI2XHUwMDI2ICFIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRVxuIFx0aGVscFxuIFx0ICBUcnkgdG8gcmVjbGFpbSBlbXB0eSB1c2VyIHBhZ2UgdGFibGUgcGFnZXMgaW4gcGF0aHMgb3RoZXIgdGhhbiBtdW5tYXBcbiBcdCAgYW5kIGV4aXRfbW1hcCBwYXRoLlxuZGlmZiAtLWdpdCBhL21tL2d1cC5jIGIvbW0vZ3VwLmNcbmluZGV4IGViODk4ZWExZWUyMmUuLjYzYjQzNWVjNjA1YzggMTAwNjQ0XG4tLS0gYS9tbS9ndXAuY1xuKysrIGIvbW0vZ3VwLmNcbkBAIC0yNzAwLDggKzI3MDAsOSBAQCBFWFBPUlRfU1lNQk9MKGdldF91c2VyX3BhZ2VzX3VubG9ja2VkKTtcbiAgKiBCZWZvcmUgYWN0aXZhdGluZyB0aGlzIGNvZGUsIHBsZWFzZSBiZSBhd2FyZSB0aGF0IHRoZSBmb2xsb3dpbmcgYXNzdW1wdGlvbnNcbiAgKiBhcmUgY3VycmVudGx5IG1hZGU6XG4gICpcbi0gKiAgKikgRWl0aGVyIE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgaXMgZW5hYmxlZCwgYW5kIHRsYl9yZW1vdmVfdGFibGUoKSBpcyB1c2VkIHRvXG4tICogIGZyZWUgcGFnZXMgY29udGFpbmluZyBwYWdlIHRhYmxlcyBvciBUTEIgZmx1c2hpbmcgcmVxdWlyZXMgSVBJIGJyb2FkY2FzdC5cbisgKiAgKikgdGxiX3JlbW92ZV90YWJsZSgpIGlzIHVzZWQgdG8gZnJlZSBwYWdlcyBjb250YWluaW5nIHBhZ2UgdGFibGVzLCB3aXRoXG4rICogIHRoZSBmcmVlIGRlZmVycmVkIHVudGlsIGFuIFJDVSBncmFjZSBwZXJpb2QgaGFzIGVsYXBzZWQgKHNlZVxuKyAqICBtbS9tbXVfZ2F0aGVyLmMpLlxuICAqXG4gICogICopIHB0ZXMgY2FuIGJlIHJlYWQgYXRvbWljYWxseSBieSB0aGUgYXJjaGl0ZWN0dXJlLlxuICAqXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IDU0NDk0YzNmYTk4MzUuLjUwNWY3YjYyZmYyODEgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtMjQ3Niw3ICsyNDc2LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHphcF9kZXBvc2l0ZWRfdGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQpXG4gXHRwZ3RhYmxlX3QgcGd0YWJsZTtcbiBcbiBcdHBndGFibGUgPSBwZ3RhYmxlX3RyYW5zX2h1Z2Vfd2l0aGRyYXcobW0sIHBtZCk7XG4tXHRwdGVfZnJlZShtbSwgcGd0YWJsZSk7XG4rXHRwdGVfZnJlZV9kZWZlcihtbSwgcGd0YWJsZSk7XG4gXHRtbV9kZWNfbnJfcHRlcyhtbSk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL21tL21tdV9nYXRoZXIuYyBiL21tL21tdV9nYXRoZXIuY1xuaW5kZXggMzk4NWQ4NTZkZTdmOS4uMmE3MmE5Njg2NzczYSAxMDA2NDRcbi0tLSBhL21tL21tdV9nYXRoZXIuY1xuKysrIGIvbW0vbW11X2dhdGhlci5jXG5AQCAtMjE4LDggKzIxOCw2IEBAIGJvb2wgX190bGJfcmVtb3ZlX3BhZ2Vfc2l6ZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHBhZ2VfXG4gXG4gI2VuZGlmIC8qIE1NVV9HQVRIRVJfTk9fR0FUSEVSICovXG4gXG4tI2lmZGVmIENPTkZJR19NTVVfR0FUSEVSX1RBQkxFX0ZSRUVcbi1cbiBzdGF0aWMgdm9pZCBfX3RsYl9yZW1vdmVfdGFibGVfZnJlZShzdHJ1Y3QgbW11X3RhYmxlX2JhdGNoICpiYXRjaClcbiB7XG4gXHRpbnQgaTtcbkBAIC0yMzAsMTAgKzIyOCw4IEBAIHN0YXRpYyB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZV9mcmVlKHN0cnVjdCBtbXVfdGFibGVfYmF0Y2ggKmJhdGNoKVxuIFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWJhdGNoKTtcbiB9XG4gXG4tI2lmZGVmIENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG4tXG4gLypcbi0gKiBTZW1pIFJDVSBmcmVlaW5nIG9mIHRoZSBwYWdlIGRpcmVjdG9yaWVzLlxuKyAqIFJDVSBmcmVlaW5nIG9mIHRoZSBwYWdlIGRpcmVjdG9yaWVzLlxuICAqXG4gICogVGhpcyBpcyBuZWVkZWQgYnkgc29tZSBhcmNoaXRlY3R1cmVzIHRvIGltcGxlbWVudCBzb2Z0d2FyZSBwYWdldGFibGUgd2Fsa2Vycy5cbiAgKlxuQEAgLTI1OSwxMyArMjU1LDEzIEBAIHN0YXRpYyB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZV9mcmVlKHN0cnVjdCBtbXVfdGFibGVfYmF0Y2ggKmJhdGNoKVxuICAqIG1lYW5zLlxuICAqXG4gICogV2hhdCB3ZSBkbyBpcyBiYXRjaCB0aGUgZnJlZWQgZGlyZWN0b3J5IHBhZ2VzICh0YWJsZXMpIGFuZCBSQ1UgZnJlZSB0aGVtLlxuLSAqIFdlIHVzZSB0aGUgc2NoZWQgUkNVIHZhcmlhbnQsIGFzIHRoYXQgZ3VhcmFudGVlcyB0aGF0IElSUS9wcmVlbXB0IGRpc2FibGluZ1xuLSAqIGhvbGRzIG9mZiBncmFjZSBwZXJpb2RzLlxuKyAqIERpc2FibGluZyBJUlFzIG9yIHByZWVtcHRpb24gaG9sZHMgb2ZmIFJDVSBncmFjZSBwZXJpb2RzLCBzbyB0aGlzIHByb3RlY3RzXG4rICogYm90aCByY3VfcmVhZF9sb2NrKCkgYW5kIElSUS1kaXNhYmxpbmcgd2Fsa2Vycy5cbiAgKlxuICAqIEhvd2V2ZXIsIGluIG9yZGVyIHRvIGJhdGNoIHRoZXNlIHBhZ2VzIHdlIG5lZWQgdG8gYWxsb2NhdGUgc3RvcmFnZSwgdGhpc1xuICAqIGFsbG9jYXRpb24gaXMgZGVlcCBpbnNpZGUgdGhlIE1NIGNvZGUgYW5kIGNhbiB0aHVzIGVhc2lseSBmYWlsIG9uIG1lbW9yeVxuLSAqIHByZXNzdXJlLiBUbyBndWFyYW50ZWUgcHJvZ3Jlc3Mgd2UgZmFsbCBiYWNrIHRvIHNpbmdsZSB0YWJsZSBmcmVlaW5nLCBzZWVcbi0gKiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGxiX3JlbW92ZV90YWJsZV9vbmUoKS5cbisgKiBwcmVzc3VyZS4gVG8gZ3VhcmFudGVlIHByb2dyZXNzIHdlIGZhbGwgYmFjayB0byBzaW5nbGUgdGFibGUgZnJlZWluZywgd2hpY2hcbisgKiBpcyBhbHNvIFJDVS1kZWZlcnJlZCAtIHNlZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGxiX3JlbW92ZV90YWJsZV9vbmUoKS5cbiAgKlxuICAqL1xuIFxuQEAgLTMxNSwxNSArMzExLDYgQEAgdm9pZCB0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfcmN1KHZvaWQpXG4gXHRzeW5jaHJvbml6ZV9yY3UoKTtcbiB9XG4gXG4tI2Vsc2UgLyogIUNPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFICovXG4tXG4tc3RhdGljIHZvaWQgdGxiX3JlbW92ZV90YWJsZV9mcmVlKHN0cnVjdCBtbXVfdGFibGVfYmF0Y2ggKmJhdGNoKVxuLXtcbi1cdF9fdGxiX3JlbW92ZV90YWJsZV9mcmVlKGJhdGNoKTtcbi19XG4tXG4tI2VuZGlmIC8qIENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFICovXG4tXG4gLypcbiAgKiBJZiB3ZSB3YW50IHRsYl9yZW1vdmVfdGFibGUoKSB0byBpbXBseSBUTEIgaW52YWxpZGF0ZXMuXG4gICovXG5AQCAtNDAzLDEzICszOTAsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdGxiX3RhYmxlX2luaXQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYilcbiBcdHRsYi1cdTAwM2ViYXRjaCA9IE5VTEw7XG4gfVxuIFxuLSNlbHNlIC8qICFDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFICovXG4tXG4tc3RhdGljIGlubGluZSB2b2lkIHRsYl90YWJsZV9mbHVzaChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiKSB7IH1cbi1zdGF0aWMgaW5saW5lIHZvaWQgdGxiX3RhYmxlX2luaXQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYikgeyB9XG4tXG4tI2VuZGlmIC8qIENPTkZJR19NTVVfR0FUSEVSX1RBQkxFX0ZSRUUgKi9cbi1cbiBzdGF0aWMgdm9pZCB0bGJfZmx1c2hfbW11X2ZyZWUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYilcbiB7XG4gXHR0bGJfdGFibGVfZmx1c2godGxiKTtcbmRpZmYgLS1naXQgYS9tbS9wZ3RhYmxlLWdlbmVyaWMuYyBiL21tL3BndGFibGUtZ2VuZXJpYy5jXG5pbmRleCBiOTFiMWE5ODAyOWM3Li5mZjhmZjM3MDY0ODUzIDEwMDY0NFxuLS0tIGEvbW0vcGd0YWJsZS1nZW5lcmljLmNcbisrKyBiL21tL3BndGFibGUtZ2VuZXJpYy5jXG5AQCAtMzg2LDkgKzM4NiwyMSBAQCBwdGVfdCAqcHRlX29mZnNldF9tYXBfcndfbm9sb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLFxuICAqIGJlIHJlYWQtb25seS9yZWFkLXdyaXRlIHByb3RlY3RlZC5cbiAgKlxuICAqIE5vdGUgdGhhdCBmcmVlX3BndGFibGVzKCksIHVzZWQgYWZ0ZXIgdW5tYXBwaW5nIGRldGFjaGVkIHZtYXMsIG9yIHdoZW5cbi0gKiBleGl0aW5nIHRoZSB3aG9sZSBtbSwgZG9lcyBub3QgdGFrZSBwYWdlIHRhYmxlIGxvY2sgYmVmb3JlIGZyZWVpbmcgYSBwYWdlXG4tICogdGFibGUsIGFuZCBtYXkgbm90IHVzZSBSQ1UgYXQgYWxsOiBcIm91dHNpZGVyc1wiIGxpa2Uga2h1Z2VwYWdlZCBzaG91bGQgYXZvaWRcbi0gKiBwdGVfb2Zmc2V0X21hcCgpIGFuZCBjbyBvbmNlIHRoZSB2bWEgaXMgZGV0YWNoZWQgZnJvbSBtbSBvciBtbV91c2VycyBpcyB6ZXJvLlxuKyAqIGV4aXRpbmcgdGhlIHdob2xlIG1tLCBkb2VzIG5vdCB0YWtlIHRoZSBwYWdlIHRhYmxlIGxvY2sgYmVmb3JlIGZyZWVpbmcgYVxuKyAqIHRhYmxlLlxuKyAqXG4rICogSG93ZXZlciwgdGhlIFBNRCBlbnRyeSBpcyBjbGVhcmVkIGZpcnN0LCBhbmQgdGhlIHRhYmxlIGZyZWVkIG9ubHkgYWZ0ZXJcbisgKiBhbiBSQ1UgZ3JhY2UgcGVyaW9kLCBzbyBhIHdhbGtlciB0aGF0IG1hcHBlZCB0aGUgdGFibGUgdW5kZXJcbisgKiByY3VfcmVhZF9sb2NrKCkgc3RheXMgc2FmZSwgYW5kIHRoZSBwbWRfc2FtZSgpIHJlY2hlY2sgaW5cbisgKiBwdGVfb2Zmc2V0X21hcF9sb2NrKCkgZGV0ZWN0cyB0aGUgdGVhcmRvd24uXG4rICpcbisgKiBUaGVyZWZvcmUgaXQgaXMgc2FmZSBmb3IgXCJvdXRzaWRlcnNcIiBsaWtlIGtodWdlcGFnZWQgdG8gdXNlXG4rICogcHRlX29mZnNldF9tYXAoKSBhbmQgY28uIGZvciBWTUFzIHRoYXQgbWlnaHQgYmUgdW5kZXJnb2luZyBwYWdlIHRhYmxlXG4rICogdGVhcmRvd24uXG4rICpcbisgKiBOb3RlIHRoYXQgdGhlIFBHRCBpdHNlbGYgaXMgZnJlZWQgYXQgbW1kcm9wKCkgdGltZSwgbm90IHVuZGVyIFJDVSAtIHNvIHRoZVxuKyAqIHdhbGtlciBtdXN0IGtlZXAgdGhlIG1tIGFsaXZlIHZpYSBtbWdyYWIoKS4gV2l0aCB0aGF0IGhlbGQsIHdhbGtpbmcgcmVtYWluc1xuKyAqIHNhZmUgZXZlbiBvbmNlIG1tX3VzZXJzIGhhcyByZWFjaGVkIHplcm8uXG4gICovXG4gcHRlX3QgKnB0ZV9vZmZzZXRfbWFwX2xvY2soc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsXG4gXHRcdFx0ICAgdW5zaWduZWQgbG9uZyBhZGRyLCBzcGlubG9ja190ICoqcHRscClcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjQ0OjQzLjQ1MDIzNDI0NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NDk5MjgwMTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIE1lbW9yeSBTYWZldHkgYW5kIENvbmN1cnJlbmN5IEltcGxpY2F0aW9ucyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIGl0IGludHJvZHVjZXMgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMsIHNvbWV0aGluZyBLTVNBTiB3b3VsZCBmbGFnLCBvciBpZiB0aGUgY2hhbmdlcyBhcmUgbWFpbmx5IHJlbGF0ZWQgdG8gY29uY3VycmVuY3ksIG1lbW9yeSBtYW5hZ2VtZW50LCBwYWdlIHRhYmxlIGZyZWVpbmcsIGxvY2tpbmcsIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLCB3aGljaCBLQVNBTiBhbmQgTG9ja2RlcCB3b3VsZCBiZSBtb3JlIHJlbGV2YW50IGZvci5cblxuRmlyc3QsIHRoZSBwYXRjaCBpdHNlbGYgaXMgYWJvdXQgbWFraW5nIHRoZSBgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRWAgb3B0aW9uIHN0YW5kYXJkIGFjcm9zcyBhcmNoaXRlY3R1cmVzLiBFc3NlbnRpYWxseSwgaXQncyBhYm91dCBzdGFuZGFyZGl6aW5nIGhvdyBwYWdlIHRhYmxlcyBhcmUgZnJlZWQgdXNpbmcgUkNVIG1lY2hhbmlzbXMsIGludm9sdmluZyBgdGxiX3JlbW92ZV90YWJsZWAgYW5kIGB0bGJfcmVtb3ZlX3B0ZGVzY2AuXG5cbk5vdywgbGV0J3Mgd2FsayB0aHJvdWdoIHRoZSBtb2RpZmllZCBmaWxlczpcblxuKiAgIFRoZSBkb2N1bWVudGF0aW9uIGlzIGdldHRpbmcgdXBkYXRlZCB0byByZWZsZWN0IHBhZ2UgdGFibGUgbG9ja2luZyBydWxlcyBhbmQgUkNVIHVzYWdlLiBHb29kLlxuKiAgIFRoZSBgS2NvbmZpZ2AgZmlsZXMgYXJlIGJlaW5nIGNsZWFuZWQgdXAsIHJlbW92aW5nIGFuZCBjb25zb2xpZGF0aW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhpcyBzZWVtcyBzdHJhaWdodGZvcndhcmQg4oCTIHNpbXBsaWZ5aW5nIHRoZSBidWlsZCBwcm9jZXNzLlxuKiAgIFRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYEtjb25maWdgIGZpbGVzIGFyZSBnZXR0aW5nIHRoZWlyIGNvbmZpZ3VyYXRpb25zIGNsZWFuZWQgdXAgYXMgd2VsbC4gQWxzbywgZXhwZWN0ZWQuXG4qICAgV2UncmUgc2VlaW5nIGNoYW5nZXMgaW4gYHBnYWxsb2MuaGAgaGVhZGVycyBvbiBzZXZlcmFsIGFyY2hpdGVjdHVyZXMgKGBhcmNgLCBgbWljcm9ibGF6ZWAsIGB4dGVuc2FgKSB3aGVyZSBkaXJlY3QgZnJlZWluZyBpcyBiZWluZyByZXBsYWNlZCB3aXRoIGB0bGJfcmVtb3ZlX3B0ZGVzY2AuIFRoYXQgc2VlbXMgbGlrZSBhIG1vdmUgdG93YXJkcyB0aGUgUkNVIGFwcHJvYWNoLlxuKiAgIFRoZXJlJ3MgYW4gaW1wbGVtZW50YXRpb24gb2YgYF9fdGxiX3JlbW92ZV90YWJsZWAgYWxvbmcgd2l0aCBhIHNwaW5sb2NrIGZvciBhbGxvY2F0aW9uL2ZyZWVpbmcgb24gYG02OGtgLiBUaGF04oCZcyBnb29kIHRvIHNlZSwgc3BpbmxvY2tzIGFyZSBuZWNlc3NhcnkgZm9yIGNvbmN1cnJlbnQgYWNjZXNzIHByb3RlY3Rpb24uXG4qICAgYHNoYCBhbmQgYHNwYXJjYCBhcmNoaXRlY3R1cmVzIGFyZSBhbHNvIGdldHRpbmcgaW1wbGVtZW50YXRpb25zIHJlbGF0ZWQgdG8gYF9fdGxiX3JlbW92ZV90YWJsZWAuIENvbnNpc3RlbnQgd2l0aCB0aGUgUkNVIGNoYW5nZS5cbiogICBJbiBgaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaGAsIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzIGZvciB0aGUgUkNVLWJhc2VkIHRhYmxlIGZyZWVpbmcgYXJlIHJlbW92ZWQsIGluZGljYXRpbmcgdGhhdCBpdCdzIG5vdyB0aGUgc3RhbmRhcmQgYXBwcm9hY2guXG4qICAgVGhlIGBtbS9LY29uZmlnYCBmaWxlIGhhcyBhIGRlcGVuZGVuY3kgdXBkYXRlIHJlbGF0ZWQgdG8gYFBUX1JFQ0xBSU1gLlxuKiAgIEEgY29tbWVudCB1cGRhdGUgaW4gYG1tL2d1cC5jYC5cbiogICBgbW0vaHVnZV9tZW1vcnkuY2AgaGFzIGBwdGVfZnJlZShtbSwgcGd0YWJsZSlgIGNoYW5nZWQgdG8gYHB0ZV9mcmVlX2RlZmVyKG1tLCBwZ3RhYmxlKWAgaW4gYHphcF9kZXBvc2l0ZWRfdGFibGVgLiBUaGlzIGxvb2tzIGltcG9ydGFudCwgYmVjYXVzZSBkZWZlcnJpbmcgdGhlIGZyZWUgdmlhIFJDVSBpcyB0aGUgY29yZSBvZiB0aGUgcGF0Y2guXG4qICAgYG1tL21tdV9nYXRoZXIuY2AgZ2V0cyByaWQgb2YgdGhlIG9sZCBjb25kaXRpb25hbCBjb2RlIHJlbGF0ZWQgdG8gUkNVIHRhYmxlIGZyZWVpbmcuXG4qICAgVGhlIGBtbS9wZ3RhYmxlLWdlbmVyaWMuY2AgY29tbWVudHMgYXJlIHVwZGF0ZWQuXG5cbk9rYXksIHRoZSBjcnVjaWFsIHBhcnQgaXMgdGhlIGB6YXBfZGVwb3NpdGVkX3RhYmxlYCBhbmQgYHB0ZV9mcmVlX2RlZmVyYCBjaGFuZ2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBgcHRlX2ZyZWVfZGVmZXJgIHdvcmtzLiBJJ20gZ29pbmcgdG8gcnVuIGBncmVwcGVyYCBhY3Jvc3MgdGhlIGNvZGViYXNlIHRvIGdldCBhIGZ1bGwgcGljdHVyZSBvZiBgcHRlX2ZyZWVfZGVmZXJgIHVzYWdlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBjaGFuZ2VzIGludGVyYWN0IHdpdGggdGhlIGV4aXN0aW5nIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwYWdlIHRhYmxlIHN0cnVjdHVyZXMsIGFuZCBkZXRlcm1pbmUgd2hhdCB0aGUgZGVmZXJyZWQgZnJlZWluZyBhY3R1YWxseSBlbnRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTk5MiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjQ0OjQ5Ljk0OTUxNjY0NloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxNzg2MzcyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwdGVfZnJlZV9kZWZlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGdhbGxvYy5oPTQzPXN0YXRpYyBpbmxpbmUgdm9pZCBwdGVfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHB0ZXBhZ2UpXFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGdhbGxvYy5oLTQ3LVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmg6NDg6LyogYXJjaCB1c2UgcHRlX2ZyZWVfZGVmZXIoKSBpbXBsZW1lbnRhdGlvbiBpbiBhcmNoL3Bvd2VycGMvbW0vcGd0YWJsZS1mcmFnLmMgKi9cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGdhbGxvYy5oOjQ5OiNkZWZpbmUgcHRlX2ZyZWVfZGVmZXIgcHRlX2ZyZWVfZGVmZXJcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGdhbGxvYy5oOjUwOnZvaWQgcHRlX2ZyZWVfZGVmZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwZ3RhYmxlKTtcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGdhbGxvYy5oLTUxLVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL3BndGFibGUtZnJhZy5jPTExNz12b2lkIHB0ZV9mcmFnbWVudF9mcmVlKHVuc2lnbmVkIGxvbmcgKnRhYmxlLCBpbnQga2VybmVsKVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL3BndGFibGUtZnJhZy5jLTEzMy0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxuYXJjaC9wb3dlcnBjL21tL3BndGFibGUtZnJhZy5jOjEzNDp2b2lkIHB0ZV9mcmVlX2RlZmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcGd0YWJsZSlcXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZS1mcmFnLmMtMTM1LXtcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmg9MTUxPXN0YXRpYyBpbmxpbmUgdm9pZCBwbWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGdhbGxvYy5oLTE2Ny1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGdhbGxvYy5oOjE2ODovKiBhcmNoIHVzZSBwdGVfZnJlZV9kZWZlcigpIGltcGxlbWVudGF0aW9uIGluIGFyY2gvczM5MC9tbS9wZ2FsbG9jLmMgKi9cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGdhbGxvYy5oOjE2OTojZGVmaW5lIHB0ZV9mcmVlX2RlZmVyIHB0ZV9mcmVlX2RlZmVyXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BnYWxsb2MuaDoxNzA6dm9pZCBwdGVfZnJlZV9kZWZlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHBndGFibGUpO1xcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgtMTcxLVxcbi0tXFxuYXJjaC9zMzkwL21tL3BnYWxsb2MuYz0xNDk9c3RhdGljIHZvaWQgcHRlX2ZyZWVfbm93KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG4tLVxcbmFyY2gvczM5MC9tbS9wZ2FsbG9jLmMtMTU1LVxcbmFyY2gvczM5MC9tbS9wZ2FsbG9jLmM6MTU2OnZvaWQgcHRlX2ZyZWVfZGVmZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwZ3RhYmxlKVxcbmFyY2gvczM5MC9tbS9wZ2FsbG9jLmMtMTU3LXtcXG4tLVxcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY182NC5oPTY2PXZvaWQgcHRlX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwdGVwYWdlKTtcXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2NfNjQuaC02Ny1cXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2NfNjQuaDo2ODovKiBhcmNoIHVzZSBwdGVfZnJlZV9kZWZlcigpIGltcGxlbWVudGF0aW9uIGluIGFyY2gvc3BhcmMvbW0vaW5pdF82NC5jICovXFxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzY0Lmg6Njk6I2RlZmluZSBwdGVfZnJlZV9kZWZlciBwdGVfZnJlZV9kZWZlclxcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY182NC5oOjcwOnZvaWQgcHRlX2ZyZWVfZGVmZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwZ3RhYmxlKTtcXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2NfNjQuaC03MS1cXG4tLVxcbmFyY2gvc3BhcmMvbW0vaW5pdF82NC5jPTI4NjY9c3RhdGljIHZvaWQgcHRlX2ZyZWVfbm93KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG4tLVxcbmFyY2gvc3BhcmMvbW0vaW5pdF82NC5jLTI4NzMtXFxuYXJjaC9zcGFyYy9tbS9pbml0XzY0LmM6Mjg3NDp2b2lkIHB0ZV9mcmVlX2RlZmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcGd0YWJsZSlcXG5hcmNoL3NwYXJjL21tL2luaXRfNjQuYy0yODc1LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oPTExNT1zdGF0aWMgaW5saW5lIHZvaWQgcHRlX3VubWFwKHB0ZV90ICpwdGUpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0xMjAtXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg6MTIxOnZvaWQgcHRlX2ZyZWVfZGVmZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwZ3RhYmxlKTtcXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0xMjItXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTI0NzQ9c3RhdGljIGlubGluZSB2b2lkIHphcF9kZXBvc2l0ZWRfdGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTI0NzgtXFx0cGd0YWJsZSA9IHBndGFibGVfdHJhbnNfaHVnZV93aXRoZHJhdyhtbSwgcG1kKTtcXG5tbS9odWdlX21lbW9yeS5jOjI0Nzk6XFx0cHRlX2ZyZWVfZGVmZXIobW0sIHBndGFibGUpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMjQ4MC1cXHRtbV9kZWNfbnJfcHRlcyhtbSk7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MTg2Mj1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yMDY3LVxcdHBhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKG1tLCBoYWRkciwgcGd0X3BtZCk7XFxubW0va2h1Z2VwYWdlZC5jOjIwNjg6XFx0cHRlX2ZyZWVfZGVmZXIobW0sIHBtZF9wZ3RhYmxlKHBndF9wbWQpKTtcXG5tbS9raHVnZXBhZ2VkLmMtMjA2OS1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yMTUxPXN0YXRpYyB2b2lkIHJldHJhY3RfcGFnZV90YWJsZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgcGdvZmYpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjIyOC1cXHRcXHRcXHRwYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZShtbSwgYWRkciwgcGd0X3BtZCk7XFxubW0va2h1Z2VwYWdlZC5jOjIyMjk6XFx0XFx0XFx0cHRlX2ZyZWVfZGVmZXIobW0sIHBtZF9wZ3RhYmxlKHBndF9wbWQpKTtcXG5tbS9raHVnZXBhZ2VkLmMtMjIzMC1cXHRcXHR9XFxuLS1cXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYz0yMjE9cG1kX3QgcG1kcF9jb2xsYXBzZV9mbHVzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbi0tXFxubW0vcGd0YWJsZS1nZW5lcmljLmMtMjM5LVxcbm1tL3BndGFibGUtZ2VuZXJpYy5jOjI0MDovKiBhcmNoIGRlZmluZSBwdGVfZnJlZV9kZWZlciBpbiBhc20vcGdhbGxvYy5oIGZvciBpdHMgb3duIGltcGxlbWVudGF0aW9uICovXFxubW0vcGd0YWJsZS1nZW5lcmljLmM6MjQxOiNpZm5kZWYgcHRlX2ZyZWVfZGVmZXJcXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYy0yNDItc3RhdGljIHZvaWQgcHRlX2ZyZWVfbm93KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG4tLVxcbm1tL3BndGFibGUtZ2VuZXJpYy5jLTI0OS1cXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYzoyNTA6dm9pZCBwdGVfZnJlZV9kZWZlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHBndGFibGUpXFxubW0vcGd0YWJsZS1nZW5lcmljLmMtMjUxLXtcXG4tLVxcbm1tL3BndGFibGUtZ2VuZXJpYy5jLTI1Ni19XFxubW0vcGd0YWJsZS1nZW5lcmljLmM6MjU3OiNlbmRpZiAvKiBwdGVfZnJlZV9kZWZlciAqL1xcbm1tL3BndGFibGUtZ2VuZXJpYy5jLTI1OC0jZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjQ0OjUxLjU2NzM4NTY3OVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MjAyMzI3NzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzIGFuZCBLTVNBTiBBc3Nlc3NtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgaXQncyBhIGZhaXJseSBzaWduaWZpY2FudCB1bmlmaWNhdGlvbiBlZmZvcnQgaW4gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBNTVUgZ2F0aGVyIHRhYmxlIGZyZWVpbmcuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgc3RhbmRhcmRpemluZyBvbiBSQ1UgdGFibGUgZnJlZWluZyBhY3Jvc3MgYWxsIGFyY2hpdGVjdHVyZXMsIHdoaWNoLCBpZiBkb25lIHJpZ2h0LCBzaG91bGQgc2ltcGxpZnkgdGhpbmdzIGFuZCBpbXByb3ZlIG92ZXJhbGwgcm9idXN0bmVzcy4gU3BlY2lmaWNhbGx5LCBJIHNlZSBpdCdzIGNvbnZlcnRpbmcgYXJjaGl0ZWN0dXJlcyBsaWtlIGFyYywgbTY4aywgbWljcm9ibGF6ZSwgc2gsIHNwYXJjLCBhbmQgeHRlbnNhIHRvIHVzZSBgdGxiX3JlbW92ZV9wdGRlc2NgIG9yIGB0bGJfcmVtb3ZlX3RhYmxlYCB3aXRoIGBfX3RsYl9yZW1vdmVfdGFibGVgLiBUaGUgbTY4ayBhbmQgc3BhcmMgY29uY3VycmVuY3kgZml4ZXMgYXJlIGRlZmluaXRlbHkgYSBnb29kIHRoaW5nLiBJJ20gYWxzbyBub3RpbmcgdGhlIGNoYW5nZSB0byBgcHRlX2ZyZWVfZGVmZXJgIGluIGB6YXBfZGVwb3NpdGVkX3RhYmxlYCwgd2hpY2ggaXMgc3RhbmRhcmQgcHJhY3RpY2UgaW4gdGhlc2UgdHlwZXMgb2YgY2hhbmdlcy4gQW5kIHJlbW92aW5nIHRob3NlIEtjb25maWcgb3B0aW9ucyBzdWdnZXN0cyB0aGUgZGVzaWduIGhhcyBtYXR1cmVkIHRvIHRoZSBwb2ludCBpdCdzIHNhZmUgdG8gZGVmYXVsdCB0byB0aGUgUkNVIGFwcHJvYWNoLlxuXG5Ob3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogRG9lcyB0aGlzIGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcz8gSSdtIGltbWVkaWF0ZWx5IGdvaW5nIHRocm91Z2ggbXkgbWVudGFsIGNoZWNrbGlzdC4gRmlyc3QsIGFyZSB0aGVyZSBhbnkga2VybmVsIHN0cnVjdHVyZXMgYmVpbmcgcGFzc2VkIHRvIHVzZXJzcGFjZT8gTm8sIG5vdGhpbmcganVtcGluZyBvdXQgYXQgbWUgaW4gdGVybXMgb2YgaW9jdGwvc3lzY2FsbC9uZXRsaW5rL0JQRi9zb2NrZXQvY29weV90b191c2VyIGNoYW5nZXMuIEdvb2QuIFNlY29uZCwgYXJlIHRoZXJlIGFueSBuZXcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHBhZGRpbmcgaXNzdWVzLCBvciBzdHJ1Y3QgZmllbGRzIHRoYXQgY291bGQgYmUgcHJvYmxlbWF0aWM/IE5vcGUsIG5vdGhpbmcgbGlrZSB0aGF0IGhlcmUuIFRoaXJkLCBhcmUgd2UgYWxsb2NhdGluZyBvciBpbml0aWFsaXppbmcgYW55IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQ/IENoZWNraW5nIGBtNjhrL21tL21vdG9yb2xhLmNgLCBhaCwgSSBzZWUgYHBhZ2V0YWJsZV9hbGxvYyhHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywgMClgIGlzIHVzZWQsIHplcm9pbmcgcGFnZSB0YWJsZSBhbGxvY2F0aW9ucywgd2hpY2ggaXMgYXMgaXQgc2hvdWxkIGJlLiBBbmQgbGFzdGx5LCB3aGF0IGFib3V0IGFueSBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBkYXRhIGJ1ZmZlcnM/IE5vdCBpbiB0aGlzIHBhdGNoLlxuXG5TbywgdGhpcyBwYXRjaCBpcyBwcmltYXJpbHkgY29uY2VybmVkIHdpdGggcGFnZSB0YWJsZSBsaWZldGltZSwgVExCIGdhdGhlcmluZywgUkNVIHJlY2xhbWF0aW9uIG9mIHBhZ2UgdGFibGUgcGFnZXMsIGxvY2tpbmcsIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBzeW5jaHJvbml6YXRpb24uIE15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyB0byB0aGUgcG90ZW50aWFsIHBpdGZhbGxzIGluIHRoaXMgYXJlYTogY29uY3VycmVuY3kgaXNzdWVzLCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBtZW1vcnkgbGVha3MsIGludmFsaWQgZnJlZXMsIG9yIGxvY2tpbmcgcHJvYmxlbXMuIEZvcnR1bmF0ZWx5LCBhbGwgdGhlIHRvb2xzIGFyZSB0aGVyZSB0byBjYXRjaCB0aG9zZSB0eXBlcyBvZiBidWdzOiBLQVNBTiwgTE9DS0RFUCwgYW5kIHRoZSB2YXJpb3VzIHBhZ2UgdGFibGUgY2hlY2tlcnMgYW5kIGRlYnVnZ2luZyB0b29scy4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlcyBhbmQgdGhlIHNhZmVndWFyZHMgaW4gcGxhY2UsIEknbSBjb21mb3J0YWJsZSBzYXlpbmcgdGhlcmUncyBhYnNvbHV0ZWx5IG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGVseSBgZmFsc2VgLlxuXG5MZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nOlxuLSBgTmVlZHNLTVNBTmA6IGZhbHNlLiBZZXAuXG4tIGBLTVNBTlJlYXNvbmluZ2A6IGRldGFpbGVkIHJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5LiBDaGVjay5cblxuVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MzIyLCJPdXRwdXRUb2tlbnMiOjI2NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo0NDo1Ny43Njk3MTU1NzJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBzdGFuZGFyZGl6ZXMgcGFnZSB0YWJsZSBmcmVlaW5nIGFjcm9zcyBhcmNoaXRlY3R1cmVzIHRvIHVzZSBSQ1UtZGVmZXJyZWQgZnJlZWluZyAodW5pZnlpbmcgTU1VIGdhdGhlciBhbmQgcmVtb3ZpbmcgQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgLyBDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFIGNvbmZpZ3MpLiBJdCBhZGFwdHMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHBhZ2UgdGFibGUgZnJlZWluZyByb3V0aW5lcyAoZS5nLiBtNjhrLCBhcmMsIG1pY3JvYmxhemUsIHNoLCBzcGFyYywgeHRlbnNhKSB0byB1c2UgdGxiX3JlbW92ZV9wdGRlc2MgLyB0bGJfcmVtb3ZlX3RhYmxlLCBhZGRzIHNwaW5sb2NrcyBmb3IgcHRhYmxlIG1hbmFnZW1lbnQgb24gbTY4ay9zcGFyYywgYW5kIHVwZGF0ZXMgZGVmZXJyZWQgZnJlZWluZyBpbiBUSFAgKHB0ZV9mcmVlX2RlZmVyKS5cXG5cXG5UaGVzZSBjaGFuZ2VzIGRlYWwgc3RyaWN0bHkgd2l0aCBNTVUgZ2F0aGVyIGxpZmVjeWNsZSwgUkNVIGdyYWNlIHBlcmlvZHMgZm9yIHBhZ2UgdGFibGUgbWVtb3J5LCBhbmQgc3luY2hyb25pemF0aW9uIG9mIHBhZ2UgdGFibGUgZnJlZWluZyB2cyBsb2NrbGVzcy9SQ1UgcGFnZSB0YWJsZSB3YWxrZXJzLiBQb3RlbnRpYWwgYnVncyBpbiB0aGVzZSBjaGFuZ2VzIHdvdWxkIG1hbmlmZXN0IGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgY29uY3VycmVuY3kgcmFjZXMsIG9yIGRlYWRsb2Nrc+KAlHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCByZWFkcy9jb3BpZXMgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgc3RhbmRhcmRpemVzIHBhZ2UgdGFibGUgZnJlZWluZyBhY3Jvc3MgYXJjaGl0ZWN0dXJlcyB0byB1c2UgUkNVLWRlZmVycmVkIGZyZWVpbmcgKHVuaWZ5aW5nIE1NVSBnYXRoZXIgYW5kIHJlbW92aW5nIENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFIC8gQ09ORklHX01NVV9HQVRIRVJfVEFCTEVfRlJFRSBjb25maWdzKS4gSXQgYWRhcHRzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBwYWdlIHRhYmxlIGZyZWVpbmcgcm91dGluZXMgKGUuZy4gbTY4aywgYXJjLCBtaWNyb2JsYXplLCBzaCwgc3BhcmMsIHh0ZW5zYSkgdG8gdXNlIHRsYl9yZW1vdmVfcHRkZXNjIC8gdGxiX3JlbW92ZV90YWJsZSwgYWRkcyBzcGlubG9ja3MgZm9yIHB0YWJsZSBtYW5hZ2VtZW50IG9uIG02OGsvc3BhcmMsIGFuZCB1cGRhdGVzIGRlZmVycmVkIGZyZWVpbmcgaW4gVEhQIChwdGVfZnJlZV9kZWZlcikuXFxuXFxuVGhlc2UgY2hhbmdlcyBkZWFsIHN0cmljdGx5IHdpdGggTU1VIGdhdGhlciBsaWZlY3ljbGUsIFJDVSBncmFjZSBwZXJpb2RzIGZvciBwYWdlIHRhYmxlIG1lbW9yeSwgYW5kIHN5bmNocm9uaXphdGlvbiBvZiBwYWdlIHRhYmxlIGZyZWVpbmcgdnMgbG9ja2xlc3MvUkNVIHBhZ2UgdGFibGUgd2Fsa2Vycy4gUG90ZW50aWFsIGJ1Z3MgaW4gdGhlc2UgY2hhbmdlcyB3b3VsZCBtYW5pZmVzdCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIGNvbmN1cnJlbmN5IHJhY2VzLCBvciBkZWFkbG9ja3PigJR3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgcmVhZHMvY29waWVzIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjlbg5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-01 23:41:57 +0000 UTC FinishedAt: 2026-09-01 23:45:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "88297631d4d42f6004cb39c0ba3da7d2d10a616f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MMU", "TRANSPARENT_HUGEPAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "88297631d4d42f6004cb39c0ba3da7d2d10a616f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MMU", "TRANSPARENT_HUGEPAGE" ], "series_id": "6f3ac781-9301-44ab-91f0-bc64efce9720" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "tlb_remove_table", "pte_free_defer", "zap_huge_pmd", "tlb_remove_table_sync_rcu", "tlb_remove_table_sync_one" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01NVSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RsYl9yZW1vdmVfdGFibGUmIzM0OywKICAgICYjMzQ7cHRlX2ZyZWVfZGVmZXImIzM0OywKICAgICYjMzQ7emFwX2h1Z2VfcG1kJiMzNDssCiAgICAmIzM0O3RsYl9yZW1vdmVfdGFibGVfc3luY19yY3UmIzM0OywKICAgICYjMzQ7dGxiX3JlbW92ZV90YWJsZV9zeW5jX29uZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBzdGFuZGFyZGl6ZXMgcGFnZSB0YWJsZSBmcmVlaW5nIGFjcm9zcyBhcmNoaXRlY3R1cmVzIHRvIHVzZSBSQ1UtZGVmZXJyZWQgZnJlZWluZyAodW5pZnlpbmcgTU1VIGdhdGhlciBhbmQgcmVtb3ZpbmcgQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgLyBDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFIGNvbmZpZ3MpLiBJdCBhZGFwdHMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHBhZ2UgdGFibGUgZnJlZWluZyByb3V0aW5lcyAoZS5nLiBtNjhrLCBhcmMsIG1pY3JvYmxhemUsIHNoLCBzcGFyYywgeHRlbnNhKSB0byB1c2UgdGxiX3JlbW92ZV9wdGRlc2MgLyB0bGJfcmVtb3ZlX3RhYmxlLCBhZGRzIHNwaW5sb2NrcyBmb3IgcHRhYmxlIG1hbmFnZW1lbnQgb24gbTY4ay9zcGFyYywgYW5kIHVwZGF0ZXMgZGVmZXJyZWQgZnJlZWluZyBpbiBUSFAgKHB0ZV9mcmVlX2RlZmVyKS5cblxuVGhlc2UgY2hhbmdlcyBkZWFsIHN0cmljdGx5IHdpdGggTU1VIGdhdGhlciBsaWZlY3ljbGUsIFJDVSBncmFjZSBwZXJpb2RzIGZvciBwYWdlIHRhYmxlIG1lbW9yeSwgYW5kIHN5bmNocm9uaXphdGlvbiBvZiBwYWdlIHRhYmxlIGZyZWVpbmcgdnMgbG9ja2xlc3MvUkNVIHBhZ2UgdGFibGUgd2Fsa2Vycy4gUG90ZW50aWFsIGJ1Z3MgaW4gdGhlc2UgY2hhbmdlcyB3b3VsZCBtYW5pZmVzdCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIGNvbmN1cnJlbmN5IHJhY2VzLCBvciBkZWFkbG9ja3PigJR3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgcmVhZHMvY29waWVzIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVuaWZpZXMgYW5kIGVuZm9yY2VzIFJDVS1kZWZlcnJlZCBmcmVlaW5nIGZvciBwYWdlIHRhYmxlIHBhZ2VzIGFjcm9zcyBhbGwgYXJjaGl0ZWN0dXJlcyBieSByZW1vdmluZyBjb25kaXRpb25hbCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgc3RhbmRhcmRpemluZyBvbiB0bGJfcmVtb3ZlX3RhYmxlKCkuIEl0IGFsc28gbW9kaWZpZXMgVEhQIGRlcG9zaXRlZCB0YWJsZSBoYW5kbGluZyBpbiBtbS9odWdlX21lbW9yeS5jIHRvIHVzZSBwdGVfZnJlZV9kZWZlcigpIHVuZGVyIFJDVSBhbmQgdXBkYXRlcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgcGFnZSB0YWJsZSByZW1vdmFsIHJvdXRpbmVzLiBUaGVzZSBjb3JlIE1NIGxvZ2ljIGNoYW5nZXMgYWZmZWN0IFRMQiBnYXRoZXJpbmcsIHBhZ2UgdGFibGUgdGVhcmluZyBkb3duLCBhbmQgbWVtb3J5IHJlY2xhaW0gcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6NDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyOGU4ZTIyZmIyZjkyMmE1ZDk4YWMyNzJjMDRhMzlmYjVkMGE3ZWUxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMSAyMzo0Mzo1MiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdFxuaW5kZXggYTcyOTZmMjUxNzk5Yy4uMWU2NWIxMzlmMzU1OSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3RcbkBAIC01MzcsNiAmIzQzOzUzNywxMiBAQCBXZSBlc3RhYmxpc2ggYmFzaWMgbG9ja2luZyBydWxlcyB3aGVuIGludGVyYWN0aW5nIHdpdGggcGFnZSB0YWJsZXM6XG4gKiBXaGVuIGNoYW5naW5nIGEgcGFnZSB0YWJsZSBlbnRyeSB0aGUgcGFnZSB0YWJsZSBsb2NrIGZvciB0aGF0IHBhZ2UgdGFibGVcbiAgICoqbXVzdCoqIGJlIGhlbGQsIGV4Y2VwdCBpZiB5b3UgY2FuIHNhZmVseSBhc3N1bWUgbm9ib2R5IGNhbiBhY2Nlc3MgdGhlIHBhZ2VcbiAgIHRhYmxlcyBjb25jdXJyZW50bHkgKHN1Y2ggYXMgb24gaW52b2NhdGlvbiBvZiA6YzpmdW5jOmAhZnJlZV9wZ3RhYmxlc2ApLlxuJiM0MzsqIFBhZ2UgdGFibGVzIG1heSBiZSAqd2Fsa2VkKiB1bmRlciBSQ1UgYWxvbmUsIGFzIHBhZ2UgdGFibGVzIGFyZSBmcmVlZCBvbmx5XG4mIzQzOyAgYWZ0ZXIgYW4gUkNVIGdyYWNlIHBlcmlvZCBoYXMgZWxhcHNlZC4gSG93ZXZlciwgYW55IGVudHJ5IGZvdW5kIG11c3QgYmVcbiYjNDM7ICByZXZhbGlkYXRlZCBhZnRlciB0aGUgcGFnZSB0YWJsZSBsb2NrIGlzIHRha2VuIChzdWNoIGFzIHRoZVxuJiM0MzsgIDpjOmZ1bmM6YCFwbWRfc2FtZWAgcmVjaGVjayBwZXJmb3JtZWQgYnkgOmM6ZnVuYzpgIXB0ZV9vZmZzZXRfbWFwX2xvY2tgKVxuJiM0MzsgIGJlZm9yZSBpdCBpcyBhY3RlZCB1cG9uLiBDaGFuZ2luZyBhbiBlbnRyeSBhbHdheXMgcmVxdWlyZXMgdGhlIHBhZ2UgdGFibGVcbiYjNDM7ICBsb2NrLlxuICogUmVhZHMgZnJvbSBhbmQgd3JpdGVzIHRvIHBhZ2UgdGFibGUgZW50cmllcyBtdXN0IGJlICphcHByb3ByaWF0ZWx5KlxuICAgYXRvbWljLiBTZWUgdGhlIHNlY3Rpb24gb24gYXRvbWljaXR5IGJlbG93IGZvciBkZXRhaWxzLlxuICogUG9wdWxhdGluZyBwcmV2aW91c2x5IGVtcHR5IGVudHJpZXMgcmVxdWlyZXMgdGhhdCB0aGUgbW1hcCBvciBWTUEgbG9ja3MgYXJlXG5kaWZmIC0tZ2l0IGEvYXJjaC9LY29uZmlnIGIvYXJjaC9LY29uZmlnXG5pbmRleCA0NWM2NTc3NzIzNjIzLi42Zjc1MTY5MTY3OTdlIDEwMDY0NFxuLS0tIGEvYXJjaC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL0tjb25maWdcbkBAIC01MjYsMTMgJiM0Mzs1MjYsNiBAQCBjb25maWcgSEFWRV9BUkNIX0pVTVBfTEFCRUxcbiBjb25maWcgSEFWRV9BUkNIX0pVTVBfTEFCRUxfUkVMQVRJVkVcbiBcdGJvb2xcbiBcbi1jb25maWcgTU1VX0dBVEhFUl9UQUJMRV9GUkVFXG4tXHRib29sXG4tXG4tY29uZmlnIE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcbi1cdGJvb2xcbi1cdHNlbGVjdCBNTVVfR0FUSEVSX1RBQkxFX0ZSRUVcbi1cbiBjb25maWcgTU1VX0dBVEhFUl9QQUdFX1NJWkVcbiBcdGJvb2xcbiBcbkBAIC01NDgsNyAmIzQzOzU0MSw2IEBAIGNvbmZpZyBNTVVfR0FUSEVSX01FUkdFX1ZNQVNcbiBcbiBjb25maWcgTU1VX0dBVEhFUl9OT19HQVRIRVJcbiBcdGJvb2xcbi1cdGRlcGVuZHMgb24gTU1VX0dBVEhFUl9UQUJMRV9GUkVFXG4gXG4gY29uZmlnIEFSQ0hfV0FOVF9JUlFTX09GRl9BQ1RJVkFURV9NTVxuIFx0Ym9vbFxuZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvS2NvbmZpZyBiL2FyY2gvYWxwaGEvS2NvbmZpZ1xuaW5kZXggZTUzZWYyZDg4NDYzNi4uOTA2M2M3YmRhNGU0MSAxMDA2NDRcbi0tLSBhL2FyY2gvYWxwaGEvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hbHBoYS9LY29uZmlnXG5AQCAtNDIsNyAmIzQzOzQyLDYgQEAgY29uZmlnIEFMUEhBXG4gXHRzZWxlY3QgQVJDSF9TVEFDS1dBTEtcbiBcdHNlbGVjdCBDUFVfTk9fRUZGSUNJRU5UX0ZGUyBpZiAhQUxQSEFfRVY2N1xuIFx0c2VsZWN0IE1NVV9HQVRIRVJfTk9fUkFOR0Vcbi1cdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG4gXHRzZWxlY3QgU1BBUlNFTUVNX0VYVFJFTUUgaWYgU1BBUlNFTUVNXG4gXHRzZWxlY3QgWk9ORV9ETUFcbiBcdHNlbGVjdCBUUkFDRV9JUlFGTEFHU19TVVBQT1JUXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcmMvaW5jbHVkZS9hc20vcGdhbGxvYy5oIGIvYXJjaC9hcmMvaW5jbHVkZS9hc20vcGdhbGxvYy5oXG5pbmRleCBkZmFlMDcwZmU4ZDU1Li45YjZjMzdmOTJlOTdmIDEwMDY0NFxuLS0tIGEvYXJjaC9hcmMvaW5jbHVkZS9hc20vcGdhbGxvYy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcbkBAIC03Miw3ICYjNDM7NzIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcDRkX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwNGRfdCAqcDRkcCwgcHVkX3QgKnB1ZHApXG4gXHRzZXRfcDRkKHA0ZHAsIF9fcDRkKCh1bnNpZ25lZCBsb25nKXB1ZHApKTtcbiB9XG4gXG4tI2RlZmluZSBfX3B1ZF9mcmVlX3RsYih0bGIsIHBtZCwgYWRkcikgIHB1ZF9mcmVlKCh0bGIpLVx1MDAzZW1tLCBwbWQpXG4mIzQzOyNkZWZpbmUgX19wdWRfZnJlZV90bGIodGxiLCBwbWQsIGFkZHIpICB0bGJfcmVtb3ZlX3B0ZGVzYygodGxiKSwgdmlydF90b19wdGRlc2MocG1kKSlcbiBcbiAjZW5kaWZcbiBcbkBAIC04MywxMCAmIzQzOzgzLDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHB1ZF90ICpwdWRwLCBwbWRfdCAqcG1kcClcbiBcdHNldF9wdWQocHVkcCwgX19wdWQoKHVuc2lnbmVkIGxvbmcpcG1kcCkpO1xuIH1cbiBcbi0jZGVmaW5lIF9fcG1kX2ZyZWVfdGxiKHRsYiwgcG1kLCBhZGRyKSAgcG1kX2ZyZWUoKHRsYiktXHUwMDNlbW0sIHBtZClcbiYjNDM7I2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIsIHBtZCwgYWRkcikgIHRsYl9yZW1vdmVfcHRkZXNjKCh0bGIpLCB2aXJ0X3RvX3B0ZGVzYyhwbWQpKVxuIFxuICNlbmRpZlxuIFxuLSNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLCBwdGUsIGFkZHIpICBwdGVfZnJlZSgodGxiKS1cdTAwM2VtbSwgcHRlKVxuJiM0MzsjZGVmaW5lIF9fcHRlX2ZyZWVfdGxiKHRsYiwgcHRlLCBhZGRyKSAgdGxiX3JlbW92ZV9wdGRlc2MoKHRsYiksIHBhZ2VfcHRkZXNjKHB0ZSkpXG4gXG4gI2VuZGlmIC8qIF9BU01fQVJDX1BHQUxMT0NfSCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtL0tjb25maWcgYi9hcmNoL2FybS9LY29uZmlnXG5pbmRleCA0MDhhYTU4YTJhNWJiLi4wY2MyODlhNzE4NGFiIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm0vS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm0vS2NvbmZpZ1xuQEAgLTEzNCw3ICYjNDM7MTM0LDYgQEAgY29uZmlnIEFSTVxuIFx0c2VsZWN0IEhBVkVfUEVSRl9SRUdTXG4gXHRzZWxlY3QgSEFWRV9QRVJGX1VTRVJfU1RBQ0tfRFVNUFxuIFx0c2VsZWN0IEhBVkVfUE9TSVhfQ1BVX1RJTUVSU19UQVNLX1dPUktcbi1cdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFIGlmIFNNUCBcdTAwMjZcdTAwMjYgQVJNX0xQQUVcbiBcdHNlbGVjdCBIQVZFX1JFR1NfQU5EX1NUQUNLX0FDQ0VTU19BUElcbiBcdHNlbGVjdCBIQVZFX1JTRVFcbiBcdHNlbGVjdCBIQVZFX1JVU1QgaWYgQ1BVX0xJVFRMRV9FTkRJQU4gXHUwMDI2XHUwMDI2IENQVV8zMnY3IFx1MDAyNlx1MDAyNiAhS0FTQU5cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L0tjb25maWcgYi9hcmNoL2FybTY0L0tjb25maWdcbmluZGV4IDJiYmVkZWQzM2RhMGQuLmI2YzJkZDhiMjYxMjQgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvS2NvbmZpZ1xuQEAgLTIyMSw3ICYjNDM7MjIxLDYgQEAgY29uZmlnIEFSTTY0XG4gXHRzZWxlY3QgSEFWRV9SRUxJQUJMRV9TVEFDS1RSQUNFXG4gXHRzZWxlY3QgSEFWRV9QT1NJWF9DUFVfVElNRVJTX1RBU0tfV09SS1xuIFx0c2VsZWN0IEhBVkVfRlVOQ1RJT05fQVJHX0FDQ0VTU19BUElcbi1cdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG4gXHRzZWxlY3QgSEFWRV9SU0VRXG4gXHRzZWxlY3QgSEFWRV9SVVNUIGlmIFJVU1RDX1NVUFBPUlRTX0FSTTY0XG4gXHRzZWxlY3QgSEFWRV9TVEFDS1BST1RFQ1RPUlxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL0tjb25maWcgYi9hcmNoL2xvb25nYXJjaC9LY29uZmlnXG5pbmRleCA5YzVkZWY3MDYyMjIyLi5kMWIyM2RhNDA3Mzc1IDEwMDY0NFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9sb29uZ2FyY2gvS2NvbmZpZ1xuQEAgLTE4OCw3ICYjNDM7MTg4LDYgQEAgY29uZmlnIExPT05HQVJDSFxuIFx0c2VsZWN0IElSUV9MT09OR0FSQ0hfQ1BVXG4gXHRzZWxlY3QgTE9DS19NTV9BTkRfRklORF9WTUFcbiBcdHNlbGVjdCBNTVVfR0FUSEVSX01FUkdFX1ZNQVMgaWYgTU1VXG4tXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxuIFx0c2VsZWN0IE1PRFVMRVNfVVNFX0VMRl9SRUxBIGlmIE1PRFVMRVNcbiBcdHNlbGVjdCBORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTktcbiBcdHNlbGVjdCBORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOS1xuZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9LY29uZmlnIGIvYXJjaC9tNjhrL0tjb25maWdcbmluZGV4IDExODM1ZWI1OWQ5NGQuLmViODRjM2FmOTJjMDIgMTAwNjQ0XG4tLS0gYS9hcmNoL202OGsvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9tNjhrL0tjb25maWdcbkBAIC0yOSw2ICYjNDM7MjksNyBAQCBjb25maWcgTTY4S1xuIFx0c2VsZWN0IEhBVkVfQVJDSF9MSUJHQ0NfSFxuIFx0c2VsZWN0IEhBVkVfQVJDSF9TRUNDT01QXG4gXHRzZWxlY3QgSEFWRV9BUkNIX1NFQ0NPTVBfRklMVEVSXG4mIzQzO1x0c2VsZWN0IEhBVkVfQVJDSF9UTEJfUkVNT1ZFX1RBQkxFIGlmIE1NVV9NT1RPUk9MQVxuIFx0c2VsZWN0IEhBVkVfQVNNX01PRFZFUlNJT05TXG4gXHRzZWxlY3QgSEFWRV9ERUJVR19CVUdWRVJCT1NFXG4gXHRzZWxlY3QgSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUyBpZiAhQ1BVX0hBU19OT19VTkFMSUdORURcbmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbWNmX3BnYWxsb2MuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tY2ZfcGdhbGxvYy5oXG5pbmRleCBmYzU0NTRkMzdkYTMxLi5iNTNmZjA5NTBkYjJlIDEwMDY0NFxuLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21jZl9wZ2FsbG9jLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tY2ZfcGdhbGxvYy5oXG5AQCAtMzksMTAgJiM0MzszOSw3IEBAIGV4dGVybiBpbmxpbmUgcG1kX3QgKnBtZF9hbGxvY19rZXJuZWwocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3B0ZV9mcmVlX3RsYihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBwZ3RhYmxlX3QgcGd0YWJsZSxcbiBcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuIHtcbi1cdHN0cnVjdCBwdGRlc2MgKnB0ZGVzYyA9IHZpcnRfdG9fcHRkZXNjKHBndGFibGUpO1xuLVxuLVx0cGFnZXRhYmxlX2R0b3IocHRkZXNjKTtcbi1cdHBhZ2V0YWJsZV9mcmVlKHB0ZGVzYyk7XG4mIzQzO1x0dGxiX3JlbW92ZV9wdGRlc2ModGxiLCB2aXJ0X3RvX3B0ZGVzYyhwZ3RhYmxlKSk7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgcGd0YWJsZV90IHB0ZV9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5kaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21vdG9yb2xhX3BnYWxsb2MuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tb3Rvcm9sYV9wZ2FsbG9jLmhcbmluZGV4IDEwOTFmYjBhZmZiZWUuLmRjZGU0MGU4YjVjNmEgMTAwNjQ0XG4tLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbW90b3JvbGFfcGdhbGxvYy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbW90b3JvbGFfcGdhbGxvYy5oXG5AQCAtMTcsNiAmIzQzOzE3LDcgQEAgZW51bSBtNjhrX3RhYmxlX3R5cGVzIHtcbiBleHRlcm4gdm9pZCBpbml0X3BvaW50ZXJfdGFibGUodm9pZCAqdGFibGUsIGludCB0eXBlKTtcbiBleHRlcm4gdm9pZCAqZ2V0X3BvaW50ZXJfdGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCB0eXBlKTtcbiBleHRlcm4gaW50IGZyZWVfcG9pbnRlcl90YWJsZSh2b2lkICp0YWJsZSwgaW50IHR5cGUpO1xuJiM0MztleHRlcm4gdm9pZCBfX3RsYl9yZW1vdmVfdGFibGUodm9pZCAqdGFibGUpO1xuIFxuIC8qXG4gICogQWxsb2NhdGUgYW5kIGZyZWUgcGFnZSB0YWJsZXMuIFRoZSB4eHhfa2VybmVsKCkgdmVyc2lvbnMgYXJlXG5AQCAtNDcsNyAmIzQzOzQ4LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHB0ZV9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcGd0YWJsZSlcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19wdGVfZnJlZV90bGIoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgcGd0YWJsZV90IHBndGFibGUsXG4gXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcbiB7XG4tXHRmcmVlX3BvaW50ZXJfdGFibGUocGd0YWJsZSwgVEFCTEVfUFRFKTtcbiYjNDM7XHR0bGJfcmVtb3ZlX3RhYmxlKHRsYiwgKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpcGd0YWJsZSB8IFRBQkxFX1BURSkpO1xuIH1cbiBcbiBcbkBAIC02MSwxMCAmIzQzOzYyLDEwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHBtZF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKVxuIFx0cmV0dXJuIGZyZWVfcG9pbnRlcl90YWJsZShwbWQsIFRBQkxFX1BNRCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IF9fcG1kX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHBtZF90ICpwbWQsXG4tXHRcdFx0XHQgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgX19wbWRfZnJlZV90bGIoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgcG1kX3QgKnBtZCxcbiYjNDM7XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcbiB7XG4tXHRyZXR1cm4gZnJlZV9wb2ludGVyX3RhYmxlKHBtZCwgVEFCTEVfUE1EKTtcbiYjNDM7XHR0bGJfcmVtb3ZlX3RhYmxlKHRsYiwgKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpcG1kIHwgVEFCTEVfUE1EKSk7XG4gfVxuIFxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tbS9tb3Rvcm9sYS5jIGIvYXJjaC9tNjhrL21tL21vdG9yb2xhLmNcbmluZGV4IGIzMGFhNjlhNzNhNmEuLmZmYzgwNDgzNDQwYmMgMTAwNjQ0XG4tLS0gYS9hcmNoL202OGsvbW0vbW90b3JvbGEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9tNjhrL21tL21vdG9yb2xhLmNcbkBAIC0yMCw2ICYjNDM7MjAsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWJsb2NrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9nZnAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vc2V0dXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFx1MDAzZVxuQEAgLTEwMyw2ICYjNDM7MTA0LDggQEAgc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgcHRhYmxlX2xpc3RbM10gPSB7XG4gXHRMSVNUX0hFQURfSU5JVChwdGFibGVfbGlzdFsyXSksXG4gfTtcbiBcbiYjNDM7c3RhdGljIERFRklORV9TUElOTE9DSyhwdGFibGVfbG9jayk7XG4mIzQzO1xuICNkZWZpbmUgUERfUFRBQkxFKHB0ZGVzYykgKChwdGFibGVfZGVzYyAqKVx1MDAyNih2aXJ0X3RvX3B0ZGVzYygodm9pZCAqKShwdGRlc2MpKS1cdTAwM2VwdF9saXN0KSlcbiAjZGVmaW5lIFBEX1BUREVTQyhwdGFibGUpIChsaXN0X2VudHJ5KHB0YWJsZSwgc3RydWN0IHB0ZGVzYywgcHRfbGlzdCkpXG4gI2RlZmluZSBQRF9NQVJLQklUUyhkcCkgKCoodW5zaWduZWQgaW50ICopXHUwMDI2UERfUFRERVNDKGRwKS1cdTAwM2VwdF9pbmRleClcbkBAIC0xMzksNTIgJiM0MzsxNDIsNjYgQEAgdm9pZCBfX2luaXQgaW5pdF9wb2ludGVyX3RhYmxlKHZvaWQgKnRhYmxlLCBpbnQgdHlwZSlcbiBcdHJldHVybjtcbiB9XG4gXG4tdm9pZCAqZ2V0X3BvaW50ZXJfdGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCB0eXBlKVxuJiM0MzsvKlxuJiM0MzsgKiBGb3IgYSBwb2ludGVyIHRhYmxlIGZvciBhIHVzZXIgcHJvY2VzcyBhZGRyZXNzIHNwYWNlLCBhXG4mIzQzOyAqIHRhYmxlIGlzIHRha2VuIGZyb20gYSBwdGRlc2MgYWxsb2NhdGVkIGZvciB0aGUgcHVycG9zZS4gIEVhY2hcbiYjNDM7ICogcHRkZXNjIGNhbiBob2xkIDggcG9pbnRlciB0YWJsZXMuICBUaGUgcHRkZXNjIGlzIHJlbWFwcGVkIGluXG4mIzQzOyAqIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSB0byBiZSBub25jYWNoZWFibGUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCAqYWRkX3BvaW50ZXJfdGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCB0eXBlKVxuIHtcbi1cdHB0YWJsZV9kZXNjICpkcCA9IHB0YWJsZV9saXN0W3R5cGVdLm5leHQ7XG4tXHR1bnNpZ25lZCBpbnQgbWFzayA9IGxpc3RfZW1wdHkoXHUwMDI2cHRhYmxlX2xpc3RbdHlwZV0pID8gMCA6IFBEX01BUktCSVRTKGRwKTtcbi1cdHVuc2lnbmVkIGludCB0bXAsIG9mZjtcbiYjNDM7XHRzdHJ1Y3QgcHRkZXNjICpwdGRlc2M7XG4mIzQzO1x0cHRhYmxlX2Rlc2MgKm5ldztcbiYjNDM7XHR2b2lkICpwdF9hZGRyO1xuIFxuLVx0Lypcbi1cdCAqIEZvciBhIHBvaW50ZXIgdGFibGUgZm9yIGEgdXNlciBwcm9jZXNzIGFkZHJlc3Mgc3BhY2UsIGFcbi1cdCAqIHRhYmxlIGlzIHRha2VuIGZyb20gYSBwdGRlc2MgYWxsb2NhdGVkIGZvciB0aGUgcHVycG9zZS4gIEVhY2hcbi1cdCAqIHB0ZGVzYyBjYW4gaG9sZCA4IHBvaW50ZXIgdGFibGVzLiAgVGhlIHB0ZGVzYyBpcyByZW1hcHBlZCBpblxuLVx0ICogdmlydHVhbCBhZGRyZXNzIHNwYWNlIHRvIGJlIG5vbmNhY2hlYWJsZS5cbi1cdCAqL1xuLVx0aWYgKG1hc2sgPT0gMCkge1xuLVx0XHRzdHJ1Y3QgcHRkZXNjICpwdGRlc2M7XG4tXHRcdHB0YWJsZV9kZXNjICpuZXc7XG4tXHRcdHZvaWQgKnB0X2FkZHI7XG4tXG4tXHRcdHB0ZGVzYyA9IHBhZ2V0YWJsZV9hbGxvYyhHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywgMCk7XG4tXHRcdGlmICghcHRkZXNjKVxuLVx0XHRcdHJldHVybiBOVUxMO1xuLVxuLVx0XHRwdF9hZGRyID0gcHRkZXNjX2FkZHJlc3MocHRkZXNjKTtcbi1cbi1cdFx0c3dpdGNoICh0eXBlKSB7XG4tXHRcdGNhc2UgVEFCTEVfUFRFOlxuLVx0XHRcdC8qXG4tXHRcdFx0ICogbTY4ayBkb2VzbiYjMzk7dCBoYXZlIFNQTElUX1BURV9QVExPQ0tTIGZvciBub3QgaGF2aW5nXG4tXHRcdFx0ICogU01QLlxuLVx0XHRcdCAqL1xuLVx0XHRcdHBhZ2V0YWJsZV9wdGVfY3RvcihtbSwgcHRkZXNjKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBUQUJMRV9QTUQ6XG4tXHRcdFx0cGFnZXRhYmxlX3BtZF9jdG9yKG1tLCBwdGRlc2MpO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIFRBQkxFX1BHRDpcbi1cdFx0XHRwYWdldGFibGVfcGdkX2N0b3IocHRkZXNjKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuJiM0MztcdHB0ZGVzYyA9IHBhZ2V0YWJsZV9hbGxvYyhHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywgMCk7XG4mIzQzO1x0aWYgKCFwdGRlc2MpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0cHRfYWRkciA9IHB0ZGVzY19hZGRyZXNzKHB0ZGVzYyk7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAodHlwZSkge1xuJiM0MztcdGNhc2UgVEFCTEVfUFRFOlxuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIG02OGsgZG9lc24mIzM5O3QgaGF2ZSBTUExJVF9QVEVfUFRMT0NLUyBmb3Igbm90IGhhdmluZ1xuJiM0MztcdFx0ICogU01QLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRwYWdldGFibGVfcHRlX2N0b3IobW0sIHB0ZGVzYyk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFRBQkxFX1BNRDpcbiYjNDM7XHRcdHBhZ2V0YWJsZV9wbWRfY3RvcihtbSwgcHRkZXNjKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgVEFCTEVfUEdEOlxuJiM0MztcdFx0cGFnZXRhYmxlX3BnZF9jdG9yKHB0ZGVzYyk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG1tdV9wYWdlX2N0b3IocHRfYWRkcik7XG4mIzQzO1xuJiM0MztcdG5ldyA9IFBEX1BUQUJMRShwdF9hZGRyKTtcbiBcbi1cdFx0bW11X3BhZ2VfY3RvcihwdF9hZGRyKTtcbiYjNDM7XHRQRF9NQVJLQklUUyhuZXcpID0gcHRhYmxlX21hc2sodHlwZSkgLSAxO1xuJiM0MztcdHNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCBcdTAwMjZwdGFibGVfbG9jaylcbiYjNDM7XHRcdGxpc3RfYWRkKG5ldywgXHUwMDI2cHRhYmxlX2xpc3RbdHlwZV0pO1xuIFxuLVx0XHRuZXcgPSBQRF9QVEFCTEUocHRfYWRkcik7XG4tXHRcdFBEX01BUktCSVRTKG5ldykgPSBwdGFibGVfbWFzayh0eXBlKSAtIDE7XG4tXHRcdGxpc3RfYWRkX3RhaWwobmV3LCBkcCk7XG4mIzQzO1x0cmV0dXJuIChwbWRfdCAqKXB0X2FkZHI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgKmdldF9wb2ludGVyX3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgdHlwZSlcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCB0bXAsIG9mZjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG1hc2s7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XHRwdGFibGVfZGVzYyAqZHA7XG4mIzQzO1x0dm9pZCAqcmV0O1xuIFxuLVx0XHRyZXR1cm4gKHBtZF90ICopcHRfYWRkcjtcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwdGFibGVfbG9jaywgZmxhZ3MpO1xuJiM0MztcdGRwID0gcHRhYmxlX2xpc3RbdHlwZV0ubmV4dDtcbiYjNDM7XHRtYXNrID0gbGlzdF9lbXB0eShcdTAwMjZwdGFibGVfbGlzdFt0eXBlXSkgPyAwIDogUERfTUFSS0JJVFMoZHApO1xuJiM0MztcbiYjNDM7XHRpZiAobWFzayA9PSAwKSB7XG4mIzQzO1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnB0YWJsZV9sb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRyZXR1cm4gYWRkX3BvaW50ZXJfdGFibGUobW0sIHR5cGUpO1xuIFx0fVxuIFxuIFx0Zm9yICh0bXAgPSAxLCBvZmYgPSAwOyAobWFzayBcdTAwMjYgdG1wKSA9PSAwOyB0bXAgXHUwMDNjXHUwMDNjPSAxLCBvZmYgJiM0Mzs9IHB0YWJsZV9zaXplKHR5cGUpKVxuQEAgLTE5NCw3ICYjNDM7MjExLDEwIEBAIHZvaWQgKmdldF9wb2ludGVyX3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgdHlwZSlcbiBcdFx0LyogbW92ZSB0byBlbmQgb2YgbGlzdCAqL1xuIFx0XHRsaXN0X21vdmVfdGFpbChkcCwgXHUwMDI2cHRhYmxlX2xpc3RbdHlwZV0pO1xuIFx0fVxuLVx0cmV0dXJuIHB0ZGVzY19hZGRyZXNzKFBEX1BUREVTQyhkcCkpICYjNDM7IG9mZjtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcHRkZXNjX2FkZHJlc3MoUERfUFRERVNDKGRwKSkgJiM0Mzsgb2ZmO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cHRhYmxlX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBpbnQgZnJlZV9wb2ludGVyX3RhYmxlKHZvaWQgKnRhYmxlLCBpbnQgdHlwZSlcbkBAIC0yMDMsNiAmIzQzOzIyMyw5IEBAIGludCBmcmVlX3BvaW50ZXJfdGFibGUodm9pZCAqdGFibGUsIGludCB0eXBlKVxuIFx0dW5zaWduZWQgbG9uZyBwdGFibGUgPSAodW5zaWduZWQgbG9uZyl0YWJsZTtcbiBcdHVuc2lnbmVkIGxvbmcgcHRfYWRkciA9IHB0YWJsZSBcdTAwMjYgUEFHRV9NQVNLO1xuIFx0dW5zaWduZWQgaW50IG1hc2sgPSAxVSBcdTAwM2NcdTAwM2MgKChwdGFibGUgLSBwdF9hZGRyKS9wdGFibGVfc2l6ZSh0eXBlKSk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cHRhYmxlX2xvY2ssIGZsYWdzKTtcbiBcbiBcdGRwID0gUERfUFRBQkxFKHB0X2FkZHIpO1xuIFx0aWYgKFBEX01BUktCSVRTIChkcCkgXHUwMDI2IG1hc2spXG5AQCAtMjEzLDYgJiM0MzsyMzYsOCBAQCBpbnQgZnJlZV9wb2ludGVyX3RhYmxlKHZvaWQgKnRhYmxlLCBpbnQgdHlwZSlcbiBcdGlmIChQRF9NQVJLQklUUyhkcCkgPT0gcHRhYmxlX21hc2sodHlwZSkpIHtcbiBcdFx0LyogYWxsIHRhYmxlcyBpbiBwdGRlc2MgYXJlIGZyZWUsIGZyZWUgcHRkZXNjICovXG4gXHRcdGxpc3RfZGVsKGRwKTtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cHRhYmxlX2xvY2ssIGZsYWdzKTtcbiYjNDM7XG4gXHRcdG1tdV9wYWdlX2R0b3IoKHZvaWQgKilwdF9hZGRyKTtcbiBcdFx0cGFnZXRhYmxlX2R0b3JfZnJlZSh2aXJ0X3RvX3B0ZGVzYygodm9pZCAqKXB0X2FkZHIpKTtcbiBcdFx0cmV0dXJuIDE7XG5AQCAtMjIzLDkgJiM0MzsyNDgsMjEgQEAgaW50IGZyZWVfcG9pbnRlcl90YWJsZSh2b2lkICp0YWJsZSwgaW50IHR5cGUpXG4gXHRcdCAqL1xuIFx0XHRsaXN0X21vdmUoZHAsIFx1MDAyNnB0YWJsZV9saXN0W3R5cGVdKTtcbiBcdH1cbiYjNDM7XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwdGFibGVfbG9jaywgZmxhZ3MpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0Mzt2b2lkIF9fdGxiX3JlbW92ZV90YWJsZSh2b2lkICp0YWJsZSlcbiYjNDM7e1xuJiM0MztcdC8qIFRoZSBib3R0b20gMiBiaXRzIGFyZSB1c2VkIHRvIGVuY29kZSBwYWdlIHRhYmxlIHR5cGUuICovXG4mIzQzO1x0Y29uc3QgdW5zaWduZWQgbG9uZyBlbmNvZGVkID0gKHVuc2lnbmVkIGxvbmcpdGFibGU7XG4mIzQzO1x0dm9pZCAqYWRkciA9ICh2b2lkICopKGVuY29kZWQgXHUwMDI2IH4zVUwpO1xuJiM0MztcdGNvbnN0IGludCB0eXBlID0gZW5jb2RlZCBcdTAwMjYgMztcbiYjNDM7XG4mIzQzO1x0ZnJlZV9wb2ludGVyX3RhYmxlKGFkZHIsIHR5cGUpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qIHNpemUgb2YgbWVtb3J5IGFscmVhZHkgbWFwcGVkIGluIGhlYWQuUyAqL1xuIGV4dGVybiBfX2luaXRkYXRhIHVuc2lnbmVkIGxvbmcgbTY4a19pbml0X21hcHBlZF9zaXplO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcGdhbGxvYy5oXG5pbmRleCAwODRhOGEwZGMyMzk1Li5mZmVlNmEwMDkyMTlhIDEwMDY0NFxuLS0tIGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxuQEAgLTI1LDcgJiM0MzsyNSw3IEBAIGV4dGVybiB2b2lkIF9fYmFkX3B0ZShwbWRfdCAqcG1kKTtcbiBcbiBleHRlcm4gcHRlX3QgKnB0ZV9hbGxvY19vbmVfa2VybmVsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcbiBcbi0jZGVmaW5lIF9fcHRlX2ZyZWVfdGxiKHRsYiwgcHRlLCBhZGRyKVx0cHRlX2ZyZWUoKHRsYiktXHUwMDNlbW0sIChwdGUpKVxuJiM0MzsjZGVmaW5lIF9fcHRlX2ZyZWVfdGxiKHRsYiwgcHRlLCBhZGRyKVx0dGxiX3JlbW92ZV9wdGRlc2MoKHRsYiksIHBhZ2VfcHRkZXNjKHB0ZSkpXG4gXG4gI2RlZmluZSBwbWRfcG9wdWxhdGUobW0sIHBtZCwgcHRlKSBcXFxuIFx0XHRcdChwbWRfdmFsKCoocG1kKSkgPSAodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MocHRlKSlcbmRpZmYgLS1naXQgYS9hcmNoL21pcHMvS2NvbmZpZyBiL2FyY2gvbWlwcy9LY29uZmlnXG5pbmRleCBlMmViOTYyN2JkMTRjLi5mMGM0M2QxMThjYTAwIDEwMDY0NFxuLS0tIGEvYXJjaC9taXBzL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbWlwcy9LY29uZmlnXG5AQCAtOTcsNyAmIzQzOzk3LDYgQEAgY29uZmlnIE1JUFNcbiBcdHNlbGVjdCBJUlFfRk9SQ0VEX1RIUkVBRElOR1xuIFx0c2VsZWN0IElTQSBpZiBFSVNBXG4gXHRzZWxlY3QgTE9DS19NTV9BTkRfRklORF9WTUFcbi1cdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG4gXHRzZWxlY3QgTU9EVUxFU19VU0VfRUxGX1JFTCBpZiBNT0RVTEVTXG4gXHRzZWxlY3QgTU9EVUxFU19VU0VfRUxGX1JFTEEgaWYgTU9EVUxFUyBcdTAwMjZcdTAwMjYgNjRCSVRcbiBcdHNlbGVjdCBQRVJGX1VTRV9WTUFMTE9DXG5kaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvS2NvbmZpZyBiL2FyY2gvcGFyaXNjL0tjb25maWdcbmluZGV4IGQzYWZhYzJmMGQ5YmUuLjc3ZjY3MDI4YWQ4OWMgMTAwNjQ0XG4tLS0gYS9hcmNoL3BhcmlzYy9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3BhcmlzYy9LY29uZmlnXG5AQCAtODAsNyAmIzQzOzgwLDYgQEAgY29uZmlnIFBBUklTQ1xuIFx0c2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFNcbiBcdHNlbGVjdCBDUFVfTk9fRUZGSUNJRU5UX0ZGU1xuIFx0c2VsZWN0IFRIUkVBRF9JTkZPX0lOX1RBU0tcbi1cdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG4gXHRzZWxlY3QgTkVFRF9ETUFfTUFQX1NUQVRFXG4gXHRzZWxlY3QgTkVFRF9TR19ETUFfTEVOR1RIXG4gXHRzZWxlY3QgSEFWRV9BUkNIX0tHREJcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnXG5pbmRleCAyNTgwZTI3ZTQzMjg3Li4wNzY3Y2ZjYmFhNDIyIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnXG5AQCAtMzA3LDcgJiM0MzszMDcsNiBAQCBjb25maWcgUFBDXG4gXHRzZWxlY3QgS0FTQU5fVk1BTExPQ1x0XHRcdGlmIEtBU0FOIFx1MDAyNlx1MDAyNiBFWEVDTUVNXG4gXHRzZWxlY3QgTE9DS19NTV9BTkRfRklORF9WTUFcbiBcdHNlbGVjdCBNTVVfR0FUSEVSX1BBR0VfU0laRVxuLVx0c2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcbiBcdHNlbGVjdCBIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRVxuIFx0c2VsZWN0IE1NVV9HQVRIRVJfTUVSR0VfVk1BU1xuIFx0c2VsZWN0IE1NVV9MQVpZX1RMQl9TSE9PVERPV05cdFx0aWYgUFBDX0JPT0szU182NFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvS2NvbmZpZyBiL2FyY2gvcmlzY3YvS2NvbmZpZ1xuaW5kZXggNTA1ZWVkNGFmOTMyYi4uNzc0MWE0Mjg3NDk4MSAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9LY29uZmlnXG5AQCAtMjA4LDcgJiM0MzsyMDgsNiBAQCBjb25maWcgUklTQ1ZcbiBcdHNlbGVjdCBJUlFfRk9SQ0VEX1RIUkVBRElOR1xuIFx0c2VsZWN0IEtBU0FOX1ZNQUxMT0MgaWYgS0FTQU5cbiBcdHNlbGVjdCBMT0NLX01NX0FORF9GSU5EX1ZNQVxuLVx0c2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgaWYgU01QIFx1MDAyNlx1MDAyNiBNTVVcbiBcdHNlbGVjdCBNT0RVTEVTX1VTRV9FTEZfUkVMQSBpZiBNT0RVTEVTXG4gXHRzZWxlY3QgT0ZcbiBcdHNlbGVjdCBPRl9FQVJMWV9GTEFUVFJFRVxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9LY29uZmlnIGIvYXJjaC9zMzkwL0tjb25maWdcbmluZGV4IGI4OGI4NTA0MjEzNjkuLmEzNDM3NmMwNWY2ZTMgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL0tjb25maWdcbkBAIC0yNjcsNyAmIzQzOzI2Nyw2IEBAIGNvbmZpZyBTMzkwXG4gXHRzZWxlY3QgTE9DS19NTV9BTkRfRklORF9WTUFcbiBcdHNlbGVjdCBNTVVfR0FUSEVSX01FUkdFX1ZNQVNcbiBcdHNlbGVjdCBNTVVfR0FUSEVSX05PX0dBVEhFUlxuLVx0c2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcbiBcdHNlbGVjdCBNT0RVTEVTX1VTRV9FTEZfUkVMQVxuIFx0c2VsZWN0IE5FRURfRE1BX01BUF9TVEFURVx0aWYgUENJXG4gXHRzZWxlY3QgTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LXG5kaWZmIC0tZ2l0IGEvYXJjaC9zaC9LY29uZmlnIGIvYXJjaC9zaC9LY29uZmlnXG5pbmRleCBkNjBmMWQ1YTk0YzBmLi5mZTg1OWRlZjkxOGNjIDEwMDY0NFxuLS0tIGEvYXJjaC9zaC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3NoL0tjb25maWdcbkBAIC0zMyw2ICYjNDM7MzMsNyBAQCBjb25maWcgU1VQRVJIXG4gXHRzZWxlY3QgSEFWRV9BUkNIX0FVRElUU1lTQ0FMTFxuIFx0c2VsZWN0IEhBVkVfQVJDSF9LR0RCXG4gXHRzZWxlY3QgSEFWRV9BUkNIX1NFQ0NPTVBfRklMVEVSXG4mIzQzO1x0c2VsZWN0IEhBVkVfQVJDSF9UTEJfUkVNT1ZFX1RBQkxFIGlmIFgyVExCXG4gXHRzZWxlY3QgSEFWRV9BUkNIX1RSQUNFSE9PS1xuIFx0c2VsZWN0IEhBVkVfREVCVUdfQlVHVkVSQk9TRVxuIFx0c2VsZWN0IEhBVkVfREVCVUdfS01FTUxFQUtcbmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BnYWxsb2MuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGdhbGxvYy5oXG5pbmRleCA2ZmU3MTIzZDM4ZmE5Li42N2NlN2ZhMjNmYTEyIDEwMDY0NFxuLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGdhbGxvYy5oXG5AQCAtMTcsNyAmIzQzOzE3LDExIEBAIGV4dGVybiB2b2lkIHBnZF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKTtcbiBleHRlcm4gdm9pZCBwdWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHB1ZF90ICpwdWRwLCBwbWRfdCAqcG1kKTtcbiBleHRlcm4gcG1kX3QgKnBtZF9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7XG4gZXh0ZXJuIHZvaWQgcG1kX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQpO1xuLSNkZWZpbmUgX19wbWRfZnJlZV90bGIodGxiLCBwbWRwLCBhZGRyKVx0XHRwbWRfZnJlZSgodGxiKS1cdTAwM2VtbSwgKHBtZHApKVxuJiM0MztleHRlcm4gdm9pZCBfX3RsYl9yZW1vdmVfdGFibGUodm9pZCAqdGFibGUpO1xuJiM0MztcbiYjNDM7LyogUE1EcyBhcmUgc2xhYi1hbGxvY2F0ZWQsIHRhZyBzbyB0aGV5IGFyZSBmcmVlZCBjb3JyZWN0bHkuICovXG4mIzQzOyNkZWZpbmUgX19wbWRfZnJlZV90bGIodGxiLCBwbWRwLCBhZGRyKVx0XHRcdFx0XHRcXFxuJiM0MztcdHRsYl9yZW1vdmVfdGFibGUoKHRsYiksICh2b2lkICopKCh1bnNpZ25lZCBsb25nKShwbWRwKSB8IDEpKVxuICNlbmRpZlxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBwbWRfcG9wdWxhdGVfa2VybmVsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLFxuZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vcGd0YWJsZS5jIGIvYXJjaC9zaC9tbS9wZ3RhYmxlLmNcbmluZGV4IDNhNDA4NWVhMDE2MWYuLmY2MTg0Yjg2Yjg5YzYgMTAwNjQ0XG4tLS0gYS9hcmNoL3NoL21tL3BndGFibGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zaC9tbS9wZ3RhYmxlLmNcbkBAIC01Niw0ICYjNDM7NTYsMjQgQEAgdm9pZCBwbWRfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZClcbiB7XG4gXHRrbWVtX2NhY2hlX2ZyZWUocG1kX2NhY2hlcCwgcG1kKTtcbiB9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBfX3RsYl9yZW1vdmVfdGFibGVfc2xhYih2b2lkICp0YWJsZSlcbiYjNDM7e1xuJiM0MztcdGttZW1fY2FjaGVfZnJlZShwbWRfY2FjaGVwLCB0YWJsZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZV9wZ3RhYmxlKHZvaWQgKnRhYmxlKVxuJiM0Mzt7XG4mIzQzO1x0cGFnZXRhYmxlX2R0b3JfZnJlZSh0YWJsZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgX190bGJfcmVtb3ZlX3RhYmxlKHZvaWQgKnRhYmxlKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpdGFibGU7XG4mIzQzO1xuJiM0MztcdGlmIChhZGRyIFx1MDAyNiAxKVxuJiM0MztcdFx0X190bGJfcmVtb3ZlX3RhYmxlX3NsYWIoKHZvaWQgKikoYWRkciBcdTAwMjYgfjFVTCkpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdF9fdGxiX3JlbW92ZV90YWJsZV9wZ3RhYmxlKHRhYmxlKTtcbiYjNDM7fVxuICNlbmRpZiAvKiBQQUdFVEFCTEVfTEVWRUxTIFx1MDAzZSAyICovXG5kaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9LY29uZmlnIGIvYXJjaC9zcGFyYy9LY29uZmlnXG5pbmRleCBhYjc3ZDNmMjUzNmUxLi43NDJmZmZmOGMzN2YyIDEwMDY0NFxuLS0tIGEvYXJjaC9zcGFyYy9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3NwYXJjL0tjb25maWdcbkBAIC02NCw2ICYjNDM7NjQsNyBAQCBjb25maWcgU1BBUkMzMlxuIFx0c2VsZWN0IEhBVkVfVUlEMTZcbiBcdHNlbGVjdCBIQVZFX1BBR0VfU0laRV80S0JcbiBcdHNlbGVjdCBMT0NLX01NX0FORF9GSU5EX1ZNQVxuJiM0MztcdHNlbGVjdCBIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRVxuIFx0c2VsZWN0IE9MRF9TSUdBQ1RJT05cbiBcdHNlbGVjdCBaT05FX0RNQVxuIFxuQEAgLTc1LDggJiM0Mzs3Niw3IEBAIGNvbmZpZyBTUEFSQzY0XG4gXHRzZWxlY3QgSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVJcbiBcdHNlbGVjdCBIQVZFX0tSRVRQUk9CRVNcbiBcdHNlbGVjdCBIQVZFX0tQUk9CRVNcbi1cdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFIGlmIFNNUFxuLVx0c2VsZWN0IEhBVkVfQVJDSF9UTEJfUkVNT1ZFX1RBQkxFIGlmIFNNUFxuJiM0MztcdHNlbGVjdCBIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRVxuIFx0c2VsZWN0IE1NVV9HQVRIRVJfTUVSR0VfVk1BU1xuIFx0c2VsZWN0IE1NVV9HQVRIRVJfTk9fRkxVU0hfQ0FDSEVcbiBcdHNlbGVjdCBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2NfMzIuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY18zMi5oXG5pbmRleCA0ZjczZTg3YjIyYTMyLi4zNjAxMDg1MmJhMGMwIDEwMDY0NFxuLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzMyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY18zMi5oXG5AQCAtNDgsNyAmIzQzOzQ4LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIGZyZWVfcG1kX2Zhc3QocG1kX3QgKiBwbWQpXG4gfVxuIFxuICNkZWZpbmUgcG1kX2ZyZWUobW0sIHBtZClcdFx0ZnJlZV9wbWRfZmFzdChwbWQpXG4tI2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIsIHBtZCwgYWRkcilcdHBtZF9mcmVlKCh0bGIpLVx1MDAzZW1tLCBwbWQpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIF9fcG1kX2ZyZWVfdGxiKHRsYiwgcG1kLCBhZGRyKVx0XHRcdFx0XHRcXFxuJiM0MztcdHRsYl9yZW1vdmVfdGFibGUoKHRsYiksICh2b2lkICopKCh1bnNpZ25lZCBsb25nKShwbWQpIHwgMVVMKSlcbiBcbiAjZGVmaW5lIHBtZF9wb3B1bGF0ZShtbSwgcG1kLCBwdGUpXHRwbWRfc2V0KHBtZCwgcHRlKVxuIFxuQEAgLTcyLDYgJiM0Mzs3NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3B0ZV9mYXN0KHB0ZV90ICpwdGUpXG4gI2RlZmluZSBwdGVfZnJlZV9rZXJuZWwobW0sIHB0ZSlcdGZyZWVfcHRlX2Zhc3QocHRlKVxuIFxuIHZvaWQgcHRlX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqIG1tLCBwZ3RhYmxlX3QgcHRlKTtcbi0jZGVmaW5lIF9fcHRlX2ZyZWVfdGxiKHRsYiwgcHRlLCBhZGRyKVx0cHRlX2ZyZWUoKHRsYiktXHUwMDNlbW0sIHB0ZSlcbiYjNDM7dm9pZCBfX3RsYl9yZW1vdmVfdGFibGUodm9pZCAqdGFibGUpO1xuJiM0MzsjZGVmaW5lIF9fcHRlX2ZyZWVfdGxiKHRsYiwgcHRlLCBhZGRyKVx0dGxiX3JlbW92ZV90YWJsZSgodGxiKSwgKHZvaWQgKikocHRlKSlcbiBcbiAjZW5kaWYgLyogX1NQQVJDX1BHQUxMT0NfSCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY182NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzY0LmhcbmluZGV4IGNhYTc2MzJiZTRjMmEuLmI1MDU1ZDI1OWI3NGQgMTAwNjQ0XG4tLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2NfNjQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzY0LmhcbkBAIC03NCw4ICYjNDM7NzQsNiBAQCB2b2lkIHB0ZV9mcmVlX2RlZmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcGd0YWJsZSk7XG4gXG4gdm9pZCBwZ3RhYmxlX2ZyZWUodm9pZCAqdGFibGUsIGJvb2wgaXNfcGFnZSk7XG4gXG4tI2lmZGVmIENPTkZJR19TTVBcbi1cbiBzdHJ1Y3QgbW11X2dhdGhlcjtcbiB2b2lkIHRsYl9yZW1vdmVfdGFibGUoc3RydWN0IG1tdV9nYXRoZXIgKiwgdm9pZCAqKTtcbiBcbkBAIC05NiwxMiAmIzQzOzk0LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZSh2b2lkICpfdGFibGUpXG4gXHRcdGlzX3BhZ2UgPSB0cnVlO1xuIFx0cGd0YWJsZV9mcmVlKHRhYmxlLCBpc19wYWdlKTtcbiB9XG4tI2Vsc2UgLyogQ09ORklHX1NNUCAqL1xuLXN0YXRpYyBpbmxpbmUgdm9pZCBwZ3RhYmxlX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHZvaWQgKnRhYmxlLCBib29sIGlzX3BhZ2UpXG4te1xuLVx0cGd0YWJsZV9mcmVlKHRhYmxlLCBpc19wYWdlKTtcbi19XG4tI2VuZGlmIC8qICFDT05GSUdfU01QICovXG4gXG4gc3RhdGljIGlubGluZSB2b2lkIF9fcHRlX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHB0ZV90ICpwdGUsXG4gXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcbmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RsYl82NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90bGJfNjQuaFxuaW5kZXggMzAzNzE4NzQ4MmRiNy4uZjVmOTYzMTY4NWQ1MCAxMDA2NDRcbi0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGxiXzY0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGxiXzY0LmhcbkBAIC0yOSw5ICYjNDM7MjksNyBAQCB2b2lkIGZsdXNoX3RsYl9wZW5kaW5nKHZvaWQpO1xuICAqIGFuZCB0aGVyZWZvcmUgd2UgZG9uJiMzOTt0IG5lZWQgYSBUTEJJIHdoZW4gZnJlZWluZyBwYWdlLXRhYmxlIHBhZ2VzLlxuICAqL1xuIFxuLSNpZmRlZiBDT05GSUdfTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxuICNkZWZpbmUgdGxiX25lZWRzX3RhYmxlX2ludmFsaWRhdGUoKVx0KGZhbHNlKVxuLSNlbmRpZlxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS1nZW5lcmljL3RsYi5oXHUwMDNlXG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9saWIvYml0ZXh0LmMgYi9hcmNoL3NwYXJjL2xpYi9iaXRleHQuY1xuaW5kZXggMzJhNWMxZDk0NTljZC4uYzMwOWUyNzk3M2NlNiAxMDA2NDRcbi0tLSBhL2FyY2gvc3BhcmMvbGliL2JpdGV4dC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3NwYXJjL2xpYi9iaXRleHQuY1xuQEAgLTIyLDggJiM0MzsyMiw2IEBAXG4gICogQGFsaWduOiByZXF1ZXN0ZWQgYWxpZ25tZW50XG4gICpcbiAgKiBSZXR1cm5zIG9mZnNldCBpbiB0aGUgbWFwIG9yIC0xIGlmIG91dCBvZiBzcGFjZS5cbi0gKlxuLSAqIE5vdCBzYWZlIHRvIGNhbGwgZnJvbSBhbiBpbnRlcnJ1cHQgKHVzZXMgc3Bpbl9sb2NrKS5cbiAgKi9cbiBpbnQgYml0X21hcF9zdHJpbmdfZ2V0KHN0cnVjdCBiaXRfbWFwICp0LCBpbnQgbGVuLCBpbnQgYWxpZ24pXG4ge1xuQEAgLTMxLDYgJiM0MzsyOSw3IEBAIGludCBiaXRfbWFwX3N0cmluZ19nZXQoc3RydWN0IGJpdF9tYXAgKnQsIGludCBsZW4sIGludCBhbGlnbilcbiBcdGludCBvZmZfbmV3O1xuIFx0aW50IGFsaWduMTtcbiBcdGludCBpLCBjb2xvcjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuIFx0aWYgKHQtXHUwMDNlbnVtX2NvbG9ycykge1xuIFx0XHQvKiBhbGlnbiBpcyBvdmVybG9hZGVkIHRvIGJlIHRoZSBwYWdlIGNvbG9yICovXG5AQCAtNTAsNyAmIzQzOzQ5LDcgQEAgaW50IGJpdF9tYXBfc3RyaW5nX2dldChzdHJ1Y3QgYml0X21hcCAqdCwgaW50IGxlbiwgaW50IGFsaWduKVxuIFx0XHRCVUcoKTtcbiBcdGNvbG9yIFx1MDAyNj0gYWxpZ24xO1xuIFxuLVx0c3Bpbl9sb2NrKFx1MDAyNnQtXHUwMDNlbG9jayk7XG4mIzQzO1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRpZiAobGVuIFx1MDAzYyB0LVx1MDAzZWxhc3Rfc2l6ZSlcbiBcdFx0b2Zmc2V0ID0gdC1cdTAwM2VmaXJzdF9mcmVlO1xuIFx0ZWxzZVxuQEAgLTY0LDcgJiM0Mzs2Myw3IEBAIGludCBiaXRfbWFwX3N0cmluZ19nZXQoc3RydWN0IGJpdF9tYXAgKnQsIGludCBsZW4sIGludCBhbGlnbilcbiBcdFx0aWYgKG9mZnNldCBcdTAwM2U9IHQtXHUwMDNlc2l6ZSlcbiBcdFx0XHRvZmZzZXQgPSAwO1xuIFx0XHRpZiAoY291bnQgJiM0MzsgbGVuIFx1MDAzZSB0LVx1MDAzZXNpemUpIHtcbi1cdFx0XHRzcGluX3VubG9jayhcdTAwMjZ0LVx1MDAzZWxvY2spO1xuJiM0MztcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnQtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIC8qIFAzICovIHByaW50ayhLRVJOX0VSUlxuICAgXCYjMzQ7Yml0bWFwIG91dDogc2l6ZSAlZCB1c2VkICVkIG9mZiAlZCBsZW4gJWQgYWxpZ24gJWQgY291bnQgJWRcXG5cJiMzNDssXG4gICB0LVx1MDAzZXNpemUsIHQtXHUwMDNldXNlZCwgb2Zmc2V0LCBsZW4sIGFsaWduLCBjb3VudCk7XG5AQCAtOTAsNyAmIzQzOzg5LDcgQEAgaW50IGJpdF9tYXBfc3RyaW5nX2dldChzdHJ1Y3QgYml0X21hcCAqdCwgaW50IGxlbiwgaW50IGFsaWduKVxuIFx0XHRcdFx0XHR0LVx1MDAzZWxhc3Rfb2ZmID0gMDtcbiBcdFx0XHRcdHQtXHUwMDNldXNlZCAmIzQzOz0gbGVuO1xuIFx0XHRcdFx0dC1cdTAwM2VsYXN0X3NpemUgPSBsZW47XG4tXHRcdFx0XHRzcGluX3VubG9jayhcdTAwMjZ0LVx1MDAzZWxvY2spO1xuJiM0MztcdFx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRcdFx0XHRyZXR1cm4gb2Zmc2V0O1xuIFx0XHRcdH1cbiBcdFx0fVxuQEAgLTEwMywxMCAmIzQzOzEwMiwxMSBAQCBpbnQgYml0X21hcF9zdHJpbmdfZ2V0KHN0cnVjdCBiaXRfbWFwICp0LCBpbnQgbGVuLCBpbnQgYWxpZ24pXG4gdm9pZCBiaXRfbWFwX2NsZWFyKHN0cnVjdCBiaXRfbWFwICp0LCBpbnQgb2Zmc2V0LCBpbnQgbGVuKVxuIHtcbiBcdGludCBpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4gXHRpZiAodC1cdTAwM2V1c2VkIFx1MDAzYyBsZW4pXG4gXHRcdEJVRygpO1x0XHQvKiBNdWNoIHRvbyBsYXRlIHRvIGRvIGFueSBnb29kLCBidXQgYWxhcy4uLiAqL1xuLVx0c3Bpbl9sb2NrKFx1MDAyNnQtXHUwMDNlbG9jayk7XG4mIzQzO1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBsZW47IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGlmICh0ZXN0X2JpdChvZmZzZXQgJiM0MzsgaSwgdC1cdTAwM2VtYXApID09IDApXG4gXHRcdFx0QlVHKCk7XG5AQCAtMTE1LDcgJiM0MzsxMTUsNyBAQCB2b2lkIGJpdF9tYXBfY2xlYXIoc3RydWN0IGJpdF9tYXAgKnQsIGludCBvZmZzZXQsIGludCBsZW4pXG4gXHRpZiAob2Zmc2V0IFx1MDAzYyB0LVx1MDAzZWZpcnN0X2ZyZWUpXG4gXHRcdHQtXHUwMDNlZmlyc3RfZnJlZSA9IG9mZnNldDtcbiBcdHQtXHUwMDNldXNlZCAtPSBsZW47XG4tXHRzcGluX3VubG9jayhcdTAwMjZ0LVx1MDAzZWxvY2spO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gfVxuIFxuIHZvaWQgYml0X21hcF9pbml0KHN0cnVjdCBiaXRfbWFwICp0LCB1bnNpZ25lZCBsb25nICptYXAsIGludCBzaXplKVxuZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbW0vc3JtbXUuYyBiL2FyY2gvc3BhcmMvbW0vc3JtbXUuY1xuaW5kZXggOWE3NDkwMmFkMTgxNC4uMmEyYzdiZDIxMDExNCAxMDA2NDRcbi0tLSBhL2FyY2gvc3BhcmMvbW0vc3JtbXUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zcGFyYy9tbS9zcm1tdS5jXG5AQCAtMzU5LDE5ICYjNDM7MzU5LDM5IEBAIHBndGFibGVfdCBwdGVfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFx0cmV0dXJuIHB0ZXA7XG4gfVxuIFxuLXZvaWQgcHRlX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwdGVwKVxuJiM0MztzdGF0aWMgdm9pZCBfX3B0ZV9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcHRlcClcbiB7XG4mIzQzO1x0Y29uc3QgYm9vbCBwcm9jZXNzX2NvbnRleHQgPSBtbTtcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuIFxuIFx0cGFnZSA9IHBmbl90b19wYWdlKF9fbm9jYWNoZV9wYSgodW5zaWduZWQgbG9uZylwdGVwKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4tXHRzcGluX2xvY2soXHUwMDI2bW0tXHUwMDNlcGFnZV90YWJsZV9sb2NrKTtcbiYjNDM7XHRpZiAocHJvY2Vzc19jb250ZXh0KVxuJiM0MztcdFx0c3Bpbl9sb2NrKFx1MDAyNm1tLVx1MDAzZXBhZ2VfdGFibGVfbG9jayk7XG4gXHRpZiAocGFnZV9yZWZfZGVjX3JldHVybihwYWdlKSA9PSAxKVxuIFx0XHRwYWdldGFibGVfZHRvcihwYWdlX3B0ZGVzYyhwYWdlKSk7XG4tXHRzcGluX3VubG9jayhcdTAwMjZtbS1cdTAwM2VwYWdlX3RhYmxlX2xvY2spO1xuJiM0MztcdGlmIChwcm9jZXNzX2NvbnRleHQpXG4mIzQzO1x0XHRzcGluX3VubG9jayhcdTAwMjZtbS1cdTAwM2VwYWdlX3RhYmxlX2xvY2spO1xuIFxuIFx0c3JtbXVfZnJlZV9ub2NhY2hlKHB0ZXAsIFNSTU1VX1BURV9UQUJMRV9TSVpFKTtcbiB9XG4gXG4mIzQzO3ZvaWQgcHRlX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwdGVwKVxuJiM0Mzt7XG4mIzQzO1x0X19wdGVfZnJlZShtbSwgcHRlcCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgX190bGJfcmVtb3ZlX3RhYmxlKHZvaWQgKnRhYmxlKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgdW5zaWduZWQgbG9uZyBlbmNvZGVkID0gKHVuc2lnbmVkIGxvbmcpdGFibGU7XG4mIzQzO1x0Y29uc3QgdW5zaWduZWQgbG9uZyBhZGRyID0gZW5jb2RlZCBcdTAwMjYgfjFVTDtcbiYjNDM7XHRjb25zdCBib29sIGlzX3BtZCA9IGVuY29kZWQgXHUwMDI2IDE7XG4mIzQzO1xuJiM0MztcdGlmIChpc19wbWQpXG4mIzQzO1x0XHRmcmVlX3BtZF9mYXN0KChwbWRfdCAqKWFkZHIpO1xuJiM0MztcdGVsc2UgLyogQ2FsbGVkIGZyb20gc29mdGlycSBjb250ZXh0LCBubyBtbS4gKi9cbiYjNDM7XHRcdF9fcHRlX2ZyZWUoTlVMTCwgKHBndGFibGVfdClhZGRyKTtcbiYjNDM7fVxuJiM0MztcbiAvKiBjb250ZXh0IGhhbmRsaW5nIC0gYSBkeW5hbWljYWxseSBzaXplZCBwb29sIGlzIHVzZWQgKi9cbiAjZGVmaW5lIE5PX0NPTlRFWFRcdC0xXG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC91bS9LY29uZmlnIGIvYXJjaC91bS9LY29uZmlnXG5pbmRleCBkOTU0MWQxM2Q5ZWIwLi45NGI4ZmY3MGY1NzhiIDEwMDY0NFxuLS0tIGEvYXJjaC91bS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3VtL0tjb25maWdcbkBAIC00NCw3ICYjNDM7NDQsNiBAQCBjb25maWcgVU1MXG4gXHRzZWxlY3QgSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTXG4gXHRzZWxlY3QgVEhSRUFEX0lORk9fSU5fVEFTS1xuIFx0c2VsZWN0IFNQQVJTRV9JUlFcbi1cdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG4gXG4gY29uZmlnIE1NVVxuIFx0Ym9vbFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcgYi9hcmNoL3g4Ni9LY29uZmlnXG5pbmRleCBhOGMzYjNkMzFhMjc2Li42ZTVlNDYyZWMwNTlhIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvS2NvbmZpZ1xuQEAgLTI4Myw3ICYjNDM7MjgzLDYgQEAgY29uZmlnIFg4NlxuIFx0c2VsZWN0IEhBVkVfUEVSRl9SRUdTXG4gXHRzZWxlY3QgSEFWRV9QRVJGX1VTRVJfU1RBQ0tfRFVNUFxuIFx0c2VsZWN0IEFTWU5DX0tFUk5FTF9QR1RBQkxFX0ZSRUVcdGlmIElPTU1VX1NWQVxuLVx0c2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcbiBcdHNlbGVjdCBNTVVfR0FUSEVSX01FUkdFX1ZNQVNcbiBcdHNlbGVjdCBIQVZFX1BPU0lYX0NQVV9USU1FUlNfVEFTS19XT1JLXG4gXHRzZWxlY3QgSEFWRV9SRUdTX0FORF9TVEFDS19BQ0NFU1NfQVBJXG5kaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vdGxiLmggYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS90bGIuaFxuaW5kZXggOGMzY2ViNDI3MDE4MC4uNmZiN2I3ODE1NGY2MiAxMDA2NDRcbi0tLSBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3RsYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS90bGIuaFxuQEAgLTE2LDcgJiM0MzsxNiw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtLWdlbmVyaWMvdGxiLmhcdTAwM2VcbiBcbi0jZGVmaW5lIF9fcHRlX2ZyZWVfdGxiKHRsYiwgcHRlLCBhZGRyZXNzKVx0cHRlX2ZyZWUoKHRsYiktXHUwMDNlbW0sIHB0ZSlcbiYjNDM7I2RlZmluZSBfX3B0ZV9mcmVlX3RsYih0bGIsIHB0ZSwgYWRkcmVzcylcdHRsYl9yZW1vdmVfcHRkZXNjKCh0bGIpLCBwYWdlX3B0ZGVzYyhwdGUpKVxuIFxuIHZvaWQgY2hlY2tfdGxiX3Nhbml0eSh2b2lkKTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3RsYi5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaFxuaW5kZXggYmRjYzI3NzhhYzY0Zi4uMDQ0ZGFiYzFmZTljYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmhcbkBAIC02NywxMSAmIzQzOzY3LDggQEBcbiAgKiAgLSB0bGJfcmVtb3ZlX3RhYmxlKClcbiAgKlxuICAqICAgIHRsYl9yZW1vdmVfdGFibGUoKSBpcyB0aGUgYmFzaWMgcHJpbWl0aXZlIHRvIGZyZWUgcGFnZS10YWJsZSBkaXJlY3Rvcmllc1xuLSAqICAgIChfX3AqX2ZyZWVfdGxiKCkpLiAgSW4gaXQmIzM5O3MgbW9zdCBwcmltaXRpdmUgZm9ybSBpdCBpcyBhbiBhbGlhcyBmb3Jcbi0gKiAgICB0bGJfcmVtb3ZlX3BhZ2UoKSBiZWxvdywgZm9yIHdoZW4gcGFnZSBkaXJlY3RvcmllcyBhcmUgcGFnZXMgYW5kIGhhdmUgbm9cbi0gKiAgICBhZGRpdGlvbmFsIGNvbnN0cmFpbnRzLlxuLSAqXG4tICogICAgU2VlIGFsc28gTU1VX0dBVEhFUl9UQUJMRV9GUkVFIGFuZCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFLlxuJiM0MzsgKiAgICAoX19wKl9mcmVlX3RsYigpKS4gIFBhZ2UgZGlyZWN0b3JpZXMgYXJlIGZyZWVkIGFmdGVyIGFuIFJDVSBncmFjZVxuJiM0MzsgKiAgICBwZXJpb2QgLSBzZWUgdGhlIGNvbW1lbnQgaW4gbW0vbW11X2dhdGhlci5jLlxuICAqXG4gICogIC0gdGxiX3JlbW92ZV9wYWdlKCkgLyB0bGJfcmVtb3ZlX3BhZ2Vfc2l6ZSgpXG4gICogIC0gX190bGJfcmVtb3ZlX2ZvbGlvX3BhZ2VzKCkgLyBfX3RsYl9yZW1vdmVfcGFnZV9zaXplKClcbkBAIC0xNTEsMjQgJiM0MzsxNDgsMTUgQEBcbiAgKiAgVGhpcyBtaWdodCBiZSB1c2VmdWwgaWYgeW91ciBhcmNoaXRlY3R1cmUgaGFzIHNpemUgc3BlY2lmaWMgVExCXG4gICogIGludmFsaWRhdGlvbiBpbnN0cnVjdGlvbnMuXG4gICpcbi0gKiAgTU1VX0dBVEhFUl9UQUJMRV9GUkVFXG4tICpcbi0gKiAgVGhpcyBwcm92aWRlcyB0bGJfcmVtb3ZlX3RhYmxlKCksIHRvIGJlIHVzZWQgaW5zdGVhZCBvZiB0bGJfcmVtb3ZlX3BhZ2UoKVxuLSAqICBmb3IgcGFnZSBkaXJlY3RvcmVzIChfX3AqX2ZyZWVfdGxiKCkpLlxuLSAqXG4tICogIFVzZWZ1bCBpZiB5b3VyIGFyY2hpdGVjdHVyZSBoYXMgbm9uLXBhZ2UgcGFnZSBkaXJlY3Rvcmllcy5cbiYjNDM7ICogIFBhZ2UgZGlyZWN0b3JpZXMgKF9fcCpfZnJlZV90bGIoKSkgYXJlIGFsd2F5cyBmcmVlZCB2aWEgdGxiX3JlbW92ZV90YWJsZSgpLFxuJiM0MzsgKiAgYWZ0ZXIgYW4gUkNVIGdyYWNlIHBlcmlvZCAoc2VlIG1tL21tdV9nYXRoZXIuYykuXG4gICpcbi0gKiAgV2hlbiB1c2VkLCBhbiBhcmNoaXRlY3R1cmUgaXMgZXhwZWN0ZWQgdG8gcHJvdmlkZSBfX3RsYl9yZW1vdmVfdGFibGUoKSBvclxuLSAqICB1c2UgdGhlIGdlbmVyaWMgX190bGJfcmVtb3ZlX3RhYmxlKCksIHdoaWNoIGRvZXMgdGhlIGFjdHVhbCBmcmVlaW5nIG9mIHRoZXNlXG4tICogIHBhZ2VzLlxuJiM0MzsgKiBUaGlzIHNlcmlhbGlzZXMgYWdhaW5zdCBzb2Z0d2FyZSBwYWdlLXRhYmxlIHdhbGtlcnMsIGluY2x1ZGluZyBhcmNoaXRlY3R1cmVzXG4mIzQzOyAqIHdoaWNoIGRvIG5vdCB1c2UgSVBJcyBmb3IgcmVtb3RlIFRMQiBpbnZhbGlkYXRlcy5cbiAgKlxuLSAqICBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG4tICpcbi0gKiAgTGlrZSBNTVVfR0FUSEVSX1RBQkxFX0ZSRUUsIGFuZCBhZGRzIHNlbWktUkNVIHNlbWFudGljcyB0byB0aGUgZnJlZSAoc2VlXG4tICogIGNvbW1lbnQgYmVsb3cpLlxuLSAqXG4tICogIFVzZWZ1bCBpZiB5b3VyIGFyY2hpdGVjdHVyZSBkb2VzbiYjMzk7dCB1c2UgSVBJcyBmb3IgcmVtb3RlIFRMQiBpbnZhbGlkYXRlc1xuLSAqICBhbmQgdGhlcmVmb3JlIGRvZXNuJiMzOTt0IG5hdHVyYWxseSBzZXJpYWxpemUgd2l0aCBzb2Z0d2FyZSBwYWdlLXRhYmxlIHdhbGtlcnMuXG4mIzQzOyAqICBBbiBhcmNoaXRlY3R1cmUgaXMgZXhwZWN0ZWQgdG8gcHJvdmlkZSBfX3RsYl9yZW1vdmVfdGFibGUoKSAoc2VlXG4mIzQzOyAqICBIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRSkgb3IgdXNlIHRoZSBnZW5lcmljIF9fdGxiX3JlbW92ZV90YWJsZSgpLCB3aGljaFxuJiM0MzsgKiAgZG9lcyB0aGUgYWN0dWFsIGZyZWVpbmcgb2YgdGhlc2UgcGFnZXMuXG4gICpcbiAgKiAgTU1VX0dBVEhFUl9OT19GTFVTSF9DQUNIRVxuICAqXG5AQCAtMjAwLDEyICYjNDM7MTg4LDggQEBcbiAgKiAgdmFyaW91cyBwdGVwX2dldF9hbmRfY2xlYXIoKSBmdW5jdGlvbnMuXG4gICovXG4gXG4tI2lmZGVmIENPTkZJR19NTVVfR0FUSEVSX1RBQkxFX0ZSRUVcbi1cbiBzdHJ1Y3QgbW11X3RhYmxlX2JhdGNoIHtcbi0jaWZkZWYgQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcbiBcdHN0cnVjdCByY3VfaGVhZFx0XHRyY3U7XG4tI2VuZGlmXG4gXHR1bnNpZ25lZCBpbnRcdFx0bnI7XG4gXHR2b2lkXHRcdFx0KnRhYmxlc1tdO1xuIH07XG5AQCAtMjI0LDIzICYjNDM7MjA4LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZSh2b2lkICp0YWJsZSlcbiBcbiBleHRlcm4gdm9pZCB0bGJfcmVtb3ZlX3RhYmxlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHZvaWQgKnRhYmxlKTtcbiBcbi0jZWxzZSAvKiAhQ09ORklHX01NVV9HQVRIRVJfVEFCTEVfRlJFRSAqL1xuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfcmVtb3ZlX3BhZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHBhZ2UgKnBhZ2UpO1xuLS8qXG4tICogV2l0aG91dCBNTVVfR0FUSEVSX1RBQkxFX0ZSRUUgdGhlIGFyY2hpdGVjdHVyZSBpcyBhc3N1bWVkIHRvIGhhdmUgcGFnZSBiYXNlZFxuLSAqIHBhZ2UgZGlyZWN0b3JpZXMgYW5kIHdlIGNhbiB1c2UgdGhlIG5vcm1hbCBwYWdlIGJhdGNoaW5nIHRvIGZyZWUgdGhlbS5cbi0gKi9cbi1zdGF0aWMgaW5saW5lIHZvaWQgdGxiX3JlbW92ZV90YWJsZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCB2b2lkICp0YWJsZSlcbi17XG4tXHRzdHJ1Y3QgcHRkZXNjICpwdGRlc2MgPSAoc3RydWN0IHB0ZGVzYyAqKXRhYmxlO1xuLVxuLVx0cGFnZXRhYmxlX2R0b3IocHRkZXNjKTtcbi1cdHRsYl9yZW1vdmVfcGFnZSh0bGIsIHB0ZGVzY19wYWdlKHB0ZGVzYykpO1xuLX1cbi0jZW5kaWYgLyogQ09ORklHX01NVV9HQVRIRVJfVEFCTEVfRlJFRSAqL1xuLVxuLSNpZmRlZiBDT05GSUdfTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxuIC8qXG4gICogVGhpcyBhbGxvd3MgYW4gYXJjaGl0ZWN0dXJlIHRoYXQgZG9lcyBub3QgdXNlIHRoZSBsaW51eCBwYWdlLXRhYmxlcyBmb3JcbiAgKiBoYXJkd2FyZSB0byBza2lwIHRoZSBUTEJJIHdoZW4gZnJlZWluZyBwYWdlIHRhYmxlcy5cbkBAIC0yNTMsMTkgJiM0MzsyMjAsNiBAQCB2b2lkIHRsYl9yZW1vdmVfdGFibGVfc3luY19vbmUodm9pZCk7XG4gXG4gdm9pZCB0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfcmN1KHZvaWQpO1xuIFxuLSNlbHNlXG4tXG4tI2lmZGVmIHRsYl9uZWVkc190YWJsZV9pbnZhbGlkYXRlXG4tI2Vycm9yIHRsYl9uZWVkc190YWJsZV9pbnZhbGlkYXRlKCkgcmVxdWlyZXMgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxuLSNlbmRpZlxuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfb25lKHZvaWQpIHsgfVxuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfcmN1KHZvaWQpIHsgfVxuLVxuLSNlbmRpZiAvKiBDT05GSUdfTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSAqL1xuLVxuLVxuICNpZm5kZWYgQ09ORklHX01NVV9HQVRIRVJfTk9fR0FUSEVSXG4gLypcbiAgKiBJZiB3ZSBjYW4mIzM5O3QgYWxsb2NhdGUgYSBwYWdlIHRvIG1ha2UgYSBiaWcgYmF0Y2ggb2YgcGFnZSBwb2ludGVyc1xuQEAgLTMyNSw5ICYjNDM7Mjc5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHRsYl9mbHVzaF9ybWFwcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3RcbiBzdHJ1Y3QgbW11X2dhdGhlciB7XG4gXHRzdHJ1Y3QgbW1fc3RydWN0XHQqbW07XG4gXG4tI2lmZGVmIENPTkZJR19NTVVfR0FUSEVSX1RBQkxFX0ZSRUVcbiBcdHN0cnVjdCBtbXVfdGFibGVfYmF0Y2hcdCpiYXRjaDtcbi0jZW5kaWZcbiBcbiBcdHVuc2lnbmVkIGxvbmdcdFx0c3RhcnQ7XG4gXHR1bnNpZ25lZCBsb25nXHRcdGVuZDtcbmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZ1xuaW5kZXggYzFkZGY1OWMwZDcxYS4uYmM3YmVmYWZiNDdiNSAxMDA2NDRcbi0tLSBhL21tL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL21tL0tjb25maWdcbkBAIC0xNDY1LDcgJiM0MzsxNDY1LDcgQEAgY29uZmlnIEhBVkVfQVJDSF9UTEJfUkVNT1ZFX1RBQkxFXG4gXG4gY29uZmlnIFBUX1JFQ0xBSU1cbiBcdGRlZl9ib29sIHlcbi1cdGRlcGVuZHMgb24gTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSBcdTAwMjZcdTAwMjYgIUhBVkVfQVJDSF9UTEJfUkVNT1ZFX1RBQkxFXG4mIzQzO1x0ZGVwZW5kcyBvbiBNTVUgXHUwMDI2XHUwMDI2ICFIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRVxuIFx0aGVscFxuIFx0ICBUcnkgdG8gcmVjbGFpbSBlbXB0eSB1c2VyIHBhZ2UgdGFibGUgcGFnZXMgaW4gcGF0aHMgb3RoZXIgdGhhbiBtdW5tYXBcbiBcdCAgYW5kIGV4aXRfbW1hcCBwYXRoLlxuZGlmZiAtLWdpdCBhL21tL2d1cC5jIGIvbW0vZ3VwLmNcbmluZGV4IGViODk4ZWExZWUyMmUuLjYzYjQzNWVjNjA1YzggMTAwNjQ0XG4tLS0gYS9tbS9ndXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZ3VwLmNcbkBAIC0yNzAwLDggJiM0MzsyNzAwLDkgQEAgRVhQT1JUX1NZTUJPTChnZXRfdXNlcl9wYWdlc191bmxvY2tlZCk7XG4gICogQmVmb3JlIGFjdGl2YXRpbmcgdGhpcyBjb2RlLCBwbGVhc2UgYmUgYXdhcmUgdGhhdCB0aGUgZm9sbG93aW5nIGFzc3VtcHRpb25zXG4gICogYXJlIGN1cnJlbnRseSBtYWRlOlxuICAqXG4tICogICopIEVpdGhlciBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFIGlzIGVuYWJsZWQsIGFuZCB0bGJfcmVtb3ZlX3RhYmxlKCkgaXMgdXNlZCB0b1xuLSAqICBmcmVlIHBhZ2VzIGNvbnRhaW5pbmcgcGFnZSB0YWJsZXMgb3IgVExCIGZsdXNoaW5nIHJlcXVpcmVzIElQSSBicm9hZGNhc3QuXG4mIzQzOyAqICAqKSB0bGJfcmVtb3ZlX3RhYmxlKCkgaXMgdXNlZCB0byBmcmVlIHBhZ2VzIGNvbnRhaW5pbmcgcGFnZSB0YWJsZXMsIHdpdGhcbiYjNDM7ICogIHRoZSBmcmVlIGRlZmVycmVkIHVudGlsIGFuIFJDVSBncmFjZSBwZXJpb2QgaGFzIGVsYXBzZWQgKHNlZVxuJiM0MzsgKiAgbW0vbW11X2dhdGhlci5jKS5cbiAgKlxuICAqICAqKSBwdGVzIGNhbiBiZSByZWFkIGF0b21pY2FsbHkgYnkgdGhlIGFyY2hpdGVjdHVyZS5cbiAgKlxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCA1NDQ5NGMzZmE5ODM1Li41MDVmN2I2MmZmMjgxIDEwMDY0NFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuY1xuQEAgLTI0NzYsNyAmIzQzOzI0NzYsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgemFwX2RlcG9zaXRlZF90YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZClcbiBcdHBndGFibGVfdCBwZ3RhYmxlO1xuIFxuIFx0cGd0YWJsZSA9IHBndGFibGVfdHJhbnNfaHVnZV93aXRoZHJhdyhtbSwgcG1kKTtcbi1cdHB0ZV9mcmVlKG1tLCBwZ3RhYmxlKTtcbiYjNDM7XHRwdGVfZnJlZV9kZWZlcihtbSwgcGd0YWJsZSk7XG4gXHRtbV9kZWNfbnJfcHRlcyhtbSk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL21tL21tdV9nYXRoZXIuYyBiL21tL21tdV9nYXRoZXIuY1xuaW5kZXggMzk4NWQ4NTZkZTdmOS4uMmE3MmE5Njg2NzczYSAxMDA2NDRcbi0tLSBhL21tL21tdV9nYXRoZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbW11X2dhdGhlci5jXG5AQCAtMjE4LDggJiM0MzsyMTgsNiBAQCBib29sIF9fdGxiX3JlbW92ZV9wYWdlX3NpemUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBwYWdlX1xuIFxuICNlbmRpZiAvKiBNTVVfR0FUSEVSX05PX0dBVEhFUiAqL1xuIFxuLSNpZmRlZiBDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFXG4tXG4gc3RhdGljIHZvaWQgX190bGJfcmVtb3ZlX3RhYmxlX2ZyZWUoc3RydWN0IG1tdV90YWJsZV9iYXRjaCAqYmF0Y2gpXG4ge1xuIFx0aW50IGk7XG5AQCAtMjMwLDEwICYjNDM7MjI4LDggQEAgc3RhdGljIHZvaWQgX190bGJfcmVtb3ZlX3RhYmxlX2ZyZWUoc3RydWN0IG1tdV90YWJsZV9iYXRjaCAqYmF0Y2gpXG4gXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYmF0Y2gpO1xuIH1cbiBcbi0jaWZkZWYgQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcbi1cbiAvKlxuLSAqIFNlbWkgUkNVIGZyZWVpbmcgb2YgdGhlIHBhZ2UgZGlyZWN0b3JpZXMuXG4mIzQzOyAqIFJDVSBmcmVlaW5nIG9mIHRoZSBwYWdlIGRpcmVjdG9yaWVzLlxuICAqXG4gICogVGhpcyBpcyBuZWVkZWQgYnkgc29tZSBhcmNoaXRlY3R1cmVzIHRvIGltcGxlbWVudCBzb2Z0d2FyZSBwYWdldGFibGUgd2Fsa2Vycy5cbiAgKlxuQEAgLTI1OSwxMyAmIzQzOzI1NSwxMyBAQCBzdGF0aWMgdm9pZCBfX3RsYl9yZW1vdmVfdGFibGVfZnJlZShzdHJ1Y3QgbW11X3RhYmxlX2JhdGNoICpiYXRjaClcbiAgKiBtZWFucy5cbiAgKlxuICAqIFdoYXQgd2UgZG8gaXMgYmF0Y2ggdGhlIGZyZWVkIGRpcmVjdG9yeSBwYWdlcyAodGFibGVzKSBhbmQgUkNVIGZyZWUgdGhlbS5cbi0gKiBXZSB1c2UgdGhlIHNjaGVkIFJDVSB2YXJpYW50LCBhcyB0aGF0IGd1YXJhbnRlZXMgdGhhdCBJUlEvcHJlZW1wdCBkaXNhYmxpbmdcbi0gKiBob2xkcyBvZmYgZ3JhY2UgcGVyaW9kcy5cbiYjNDM7ICogRGlzYWJsaW5nIElSUXMgb3IgcHJlZW1wdGlvbiBob2xkcyBvZmYgUkNVIGdyYWNlIHBlcmlvZHMsIHNvIHRoaXMgcHJvdGVjdHNcbiYjNDM7ICogYm90aCByY3VfcmVhZF9sb2NrKCkgYW5kIElSUS1kaXNhYmxpbmcgd2Fsa2Vycy5cbiAgKlxuICAqIEhvd2V2ZXIsIGluIG9yZGVyIHRvIGJhdGNoIHRoZXNlIHBhZ2VzIHdlIG5lZWQgdG8gYWxsb2NhdGUgc3RvcmFnZSwgdGhpc1xuICAqIGFsbG9jYXRpb24gaXMgZGVlcCBpbnNpZGUgdGhlIE1NIGNvZGUgYW5kIGNhbiB0aHVzIGVhc2lseSBmYWlsIG9uIG1lbW9yeVxuLSAqIHByZXNzdXJlLiBUbyBndWFyYW50ZWUgcHJvZ3Jlc3Mgd2UgZmFsbCBiYWNrIHRvIHNpbmdsZSB0YWJsZSBmcmVlaW5nLCBzZWVcbi0gKiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGxiX3JlbW92ZV90YWJsZV9vbmUoKS5cbiYjNDM7ICogcHJlc3N1cmUuIFRvIGd1YXJhbnRlZSBwcm9ncmVzcyB3ZSBmYWxsIGJhY2sgdG8gc2luZ2xlIHRhYmxlIGZyZWVpbmcsIHdoaWNoXG4mIzQzOyAqIGlzIGFsc28gUkNVLWRlZmVycmVkIC0gc2VlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0bGJfcmVtb3ZlX3RhYmxlX29uZSgpLlxuICAqXG4gICovXG4gXG5AQCAtMzE1LDE1ICYjNDM7MzExLDYgQEAgdm9pZCB0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfcmN1KHZvaWQpXG4gXHRzeW5jaHJvbml6ZV9yY3UoKTtcbiB9XG4gXG4tI2Vsc2UgLyogIUNPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFICovXG4tXG4tc3RhdGljIHZvaWQgdGxiX3JlbW92ZV90YWJsZV9mcmVlKHN0cnVjdCBtbXVfdGFibGVfYmF0Y2ggKmJhdGNoKVxuLXtcbi1cdF9fdGxiX3JlbW92ZV90YWJsZV9mcmVlKGJhdGNoKTtcbi19XG4tXG4tI2VuZGlmIC8qIENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFICovXG4tXG4gLypcbiAgKiBJZiB3ZSB3YW50IHRsYl9yZW1vdmVfdGFibGUoKSB0byBpbXBseSBUTEIgaW52YWxpZGF0ZXMuXG4gICovXG5AQCAtNDAzLDEzICYjNDM7MzkwLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIHRsYl90YWJsZV9pbml0KHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIpXG4gXHR0bGItXHUwMDNlYmF0Y2ggPSBOVUxMO1xuIH1cbiBcbi0jZWxzZSAvKiAhQ09ORklHX01NVV9HQVRIRVJfVEFCTEVfRlJFRSAqL1xuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfdGFibGVfZmx1c2goc3RydWN0IG1tdV9nYXRoZXIgKnRsYikgeyB9XG4tc3RhdGljIGlubGluZSB2b2lkIHRsYl90YWJsZV9pbml0KHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIpIHsgfVxuLVxuLSNlbmRpZiAvKiBDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFICovXG4tXG4gc3RhdGljIHZvaWQgdGxiX2ZsdXNoX21tdV9mcmVlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIpXG4ge1xuIFx0dGxiX3RhYmxlX2ZsdXNoKHRsYik7XG5kaWZmIC0tZ2l0IGEvbW0vcGd0YWJsZS1nZW5lcmljLmMgYi9tbS9wZ3RhYmxlLWdlbmVyaWMuY1xuaW5kZXggYjkxYjFhOTgwMjljNy4uZmY4ZmYzNzA2NDg1MyAxMDA2NDRcbi0tLSBhL21tL3BndGFibGUtZ2VuZXJpYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wZ3RhYmxlLWdlbmVyaWMuY1xuQEAgLTM4Niw5ICYjNDM7Mzg2LDIxIEBAIHB0ZV90ICpwdGVfb2Zmc2V0X21hcF9yd19ub2xvY2soc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsXG4gICogYmUgcmVhZC1vbmx5L3JlYWQtd3JpdGUgcHJvdGVjdGVkLlxuICAqXG4gICogTm90ZSB0aGF0IGZyZWVfcGd0YWJsZXMoKSwgdXNlZCBhZnRlciB1bm1hcHBpbmcgZGV0YWNoZWQgdm1hcywgb3Igd2hlblxuLSAqIGV4aXRpbmcgdGhlIHdob2xlIG1tLCBkb2VzIG5vdCB0YWtlIHBhZ2UgdGFibGUgbG9jayBiZWZvcmUgZnJlZWluZyBhIHBhZ2Vcbi0gKiB0YWJsZSwgYW5kIG1heSBub3QgdXNlIFJDVSBhdCBhbGw6IFwmIzM0O291dHNpZGVyc1wmIzM0OyBsaWtlIGtodWdlcGFnZWQgc2hvdWxkIGF2b2lkXG4tICogcHRlX29mZnNldF9tYXAoKSBhbmQgY28gb25jZSB0aGUgdm1hIGlzIGRldGFjaGVkIGZyb20gbW0gb3IgbW1fdXNlcnMgaXMgemVyby5cbiYjNDM7ICogZXhpdGluZyB0aGUgd2hvbGUgbW0sIGRvZXMgbm90IHRha2UgdGhlIHBhZ2UgdGFibGUgbG9jayBiZWZvcmUgZnJlZWluZyBhXG4mIzQzOyAqIHRhYmxlLlxuJiM0MzsgKlxuJiM0MzsgKiBIb3dldmVyLCB0aGUgUE1EIGVudHJ5IGlzIGNsZWFyZWQgZmlyc3QsIGFuZCB0aGUgdGFibGUgZnJlZWQgb25seSBhZnRlclxuJiM0MzsgKiBhbiBSQ1UgZ3JhY2UgcGVyaW9kLCBzbyBhIHdhbGtlciB0aGF0IG1hcHBlZCB0aGUgdGFibGUgdW5kZXJcbiYjNDM7ICogcmN1X3JlYWRfbG9jaygpIHN0YXlzIHNhZmUsIGFuZCB0aGUgcG1kX3NhbWUoKSByZWNoZWNrIGluXG4mIzQzOyAqIHB0ZV9vZmZzZXRfbWFwX2xvY2soKSBkZXRlY3RzIHRoZSB0ZWFyZG93bi5cbiYjNDM7ICpcbiYjNDM7ICogVGhlcmVmb3JlIGl0IGlzIHNhZmUgZm9yIFwmIzM0O291dHNpZGVyc1wmIzM0OyBsaWtlIGtodWdlcGFnZWQgdG8gdXNlXG4mIzQzOyAqIHB0ZV9vZmZzZXRfbWFwKCkgYW5kIGNvLiBmb3IgVk1BcyB0aGF0IG1pZ2h0IGJlIHVuZGVyZ29pbmcgcGFnZSB0YWJsZVxuJiM0MzsgKiB0ZWFyZG93bi5cbiYjNDM7ICpcbiYjNDM7ICogTm90ZSB0aGF0IHRoZSBQR0QgaXRzZWxmIGlzIGZyZWVkIGF0IG1tZHJvcCgpIHRpbWUsIG5vdCB1bmRlciBSQ1UgLSBzbyB0aGVcbiYjNDM7ICogd2Fsa2VyIG11c3Qga2VlcCB0aGUgbW0gYWxpdmUgdmlhIG1tZ3JhYigpLiBXaXRoIHRoYXQgaGVsZCwgd2Fsa2luZyByZW1haW5zXG4mIzQzOyAqIHNhZmUgZXZlbiBvbmNlIG1tX3VzZXJzIGhhcyByZWFjaGVkIHplcm8uXG4gICovXG4gcHRlX3QgKnB0ZV9vZmZzZXRfbWFwX2xvY2soc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsXG4gXHRcdFx0ICAgdW5zaWduZWQgbG9uZyBhZGRyLCBzcGlubG9ja190ICoqcHRscClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzo0MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNTVUmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0bGJfcmVtb3ZlX3RhYmxlJiMzNDssCiAgICAmIzM0O3B0ZV9mcmVlX2RlZmVyJiMzNDssCiAgICAmIzM0O3phcF9odWdlX3BtZCYjMzQ7LAogICAgJiMzNDt0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfcmN1JiMzNDssCiAgICAmIzM0O3RsYl9yZW1vdmVfdGFibGVfc3luY19vbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdW5pZmllcyBhbmQgZW5mb3JjZXMgUkNVLWRlZmVycmVkIGZyZWVpbmcgZm9yIHBhZ2UgdGFibGUgcGFnZXMgYWNyb3NzIGFsbCBhcmNoaXRlY3R1cmVzIGJ5IHJlbW92aW5nIGNvbmRpdGlvbmFsIE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBzdGFuZGFyZGl6aW5nIG9uIHRsYl9yZW1vdmVfdGFibGUoKS4gSXQgYWxzbyBtb2RpZmllcyBUSFAgZGVwb3NpdGVkIHRhYmxlIGhhbmRsaW5nIGluIG1tL2h1Z2VfbWVtb3J5LmMgdG8gdXNlIHB0ZV9mcmVlX2RlZmVyKCkgdW5kZXIgUkNVIGFuZCB1cGRhdGVzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBwYWdlIHRhYmxlIHJlbW92YWwgcm91dGluZXMuIFRoZXNlIGNvcmUgTU0gbG9naWMgY2hhbmdlcyBhZmZlY3QgVExCIGdhdGhlcmluZywgcGFnZSB0YWJsZSB0ZWFyaW5nIGRvd24sIGFuZCBtZW1vcnkgcmVjbGFpbSBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI4ZThlMjJmYjJmOTIyYTVkOThhYzI3MmMwNGEzOWZiNWQwYTdlZTEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxIDIzOjQzOjUyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3QKaW5kZXggYTcyOTZmMjUxNzk5Yy4uMWU2NWIxMzlmMzU1OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0CkBAIC01MzcsNiAmIzQzOzUzNywxMiBAQCBXZSBlc3RhYmxpc2ggYmFzaWMgbG9ja2luZyBydWxlcyB3aGVuIGludGVyYWN0aW5nIHdpdGggcGFnZSB0YWJsZXM6CiAqIFdoZW4gY2hhbmdpbmcgYSBwYWdlIHRhYmxlIGVudHJ5IHRoZSBwYWdlIHRhYmxlIGxvY2sgZm9yIHRoYXQgcGFnZSB0YWJsZQogICAqKm11c3QqKiBiZSBoZWxkLCBleGNlcHQgaWYgeW91IGNhbiBzYWZlbHkgYXNzdW1lIG5vYm9keSBjYW4gYWNjZXNzIHRoZSBwYWdlCiAgIHRhYmxlcyBjb25jdXJyZW50bHkgKHN1Y2ggYXMgb24gaW52b2NhdGlvbiBvZiA6YzpmdW5jOmAhZnJlZV9wZ3RhYmxlc2ApLgomIzQzOyogUGFnZSB0YWJsZXMgbWF5IGJlICp3YWxrZWQqIHVuZGVyIFJDVSBhbG9uZSwgYXMgcGFnZSB0YWJsZXMgYXJlIGZyZWVkIG9ubHkKJiM0MzsgIGFmdGVyIGFuIFJDVSBncmFjZSBwZXJpb2QgaGFzIGVsYXBzZWQuIEhvd2V2ZXIsIGFueSBlbnRyeSBmb3VuZCBtdXN0IGJlCiYjNDM7ICByZXZhbGlkYXRlZCBhZnRlciB0aGUgcGFnZSB0YWJsZSBsb2NrIGlzIHRha2VuIChzdWNoIGFzIHRoZQomIzQzOyAgOmM6ZnVuYzpgIXBtZF9zYW1lYCByZWNoZWNrIHBlcmZvcm1lZCBieSA6YzpmdW5jOmAhcHRlX29mZnNldF9tYXBfbG9ja2ApCiYjNDM7ICBiZWZvcmUgaXQgaXMgYWN0ZWQgdXBvbi4gQ2hhbmdpbmcgYW4gZW50cnkgYWx3YXlzIHJlcXVpcmVzIHRoZSBwYWdlIHRhYmxlCiYjNDM7ICBsb2NrLgogKiBSZWFkcyBmcm9tIGFuZCB3cml0ZXMgdG8gcGFnZSB0YWJsZSBlbnRyaWVzIG11c3QgYmUgKmFwcHJvcHJpYXRlbHkqCiAgIGF0b21pYy4gU2VlIHRoZSBzZWN0aW9uIG9uIGF0b21pY2l0eSBiZWxvdyBmb3IgZGV0YWlscy4KICogUG9wdWxhdGluZyBwcmV2aW91c2x5IGVtcHR5IGVudHJpZXMgcmVxdWlyZXMgdGhhdCB0aGUgbW1hcCBvciBWTUEgbG9ja3MgYXJlCmRpZmYgLS1naXQgYS9hcmNoL0tjb25maWcgYi9hcmNoL0tjb25maWcKaW5kZXggNDVjNjU3NzcyMzYyMy4uNmY3NTE2OTE2Nzk3ZSAxMDA2NDQKLS0tIGEvYXJjaC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvS2NvbmZpZwpAQCAtNTI2LDEzICYjNDM7NTI2LDYgQEAgY29uZmlnIEhBVkVfQVJDSF9KVU1QX0xBQkVMCiBjb25maWcgSEFWRV9BUkNIX0pVTVBfTEFCRUxfUkVMQVRJVkUKIAlib29sCiAKLWNvbmZpZyBNTVVfR0FUSEVSX1RBQkxFX0ZSRUUKLQlib29sCi0KLWNvbmZpZyBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFCi0JYm9vbAotCXNlbGVjdCBNTVVfR0FUSEVSX1RBQkxFX0ZSRUUKLQogY29uZmlnIE1NVV9HQVRIRVJfUEFHRV9TSVpFCiAJYm9vbAogCkBAIC01NDgsNyAmIzQzOzU0MSw2IEBAIGNvbmZpZyBNTVVfR0FUSEVSX01FUkdFX1ZNQVMKIAogY29uZmlnIE1NVV9HQVRIRVJfTk9fR0FUSEVSCiAJYm9vbAotCWRlcGVuZHMgb24gTU1VX0dBVEhFUl9UQUJMRV9GUkVFCiAKIGNvbmZpZyBBUkNIX1dBTlRfSVJRU19PRkZfQUNUSVZBVEVfTU0KIAlib29sCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL0tjb25maWcgYi9hcmNoL2FscGhhL0tjb25maWcKaW5kZXggZTUzZWYyZDg4NDYzNi4uOTA2M2M3YmRhNGU0MSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYWxwaGEvS2NvbmZpZwpAQCAtNDIsNyAmIzQzOzQyLDYgQEAgY29uZmlnIEFMUEhBCiAJc2VsZWN0IEFSQ0hfU1RBQ0tXQUxLCiAJc2VsZWN0IENQVV9OT19FRkZJQ0lFTlRfRkZTIGlmICFBTFBIQV9FVjY3CiAJc2VsZWN0IE1NVV9HQVRIRVJfTk9fUkFOR0UKLQlzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRQogCXNlbGVjdCBTUEFSU0VNRU1fRVhUUkVNRSBpZiBTUEFSU0VNRU0KIAlzZWxlY3QgWk9ORV9ETUEKIAlzZWxlY3QgVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVApkaWZmIC0tZ2l0IGEvYXJjaC9hcmMvaW5jbHVkZS9hc20vcGdhbGxvYy5oIGIvYXJjaC9hcmMvaW5jbHVkZS9hc20vcGdhbGxvYy5oCmluZGV4IGRmYWUwNzBmZThkNTUuLjliNmMzN2Y5MmU5N2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2MuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKQEAgLTcyLDcgJiM0Mzs3Miw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwNGRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHA0ZF90ICpwNGRwLCBwdWRfdCAqcHVkcCkKIAlzZXRfcDRkKHA0ZHAsIF9fcDRkKCh1bnNpZ25lZCBsb25nKXB1ZHApKTsKIH0KIAotI2RlZmluZSBfX3B1ZF9mcmVlX3RsYih0bGIsIHBtZCwgYWRkcikgIHB1ZF9mcmVlKCh0bGIpLSZndDttbSwgcG1kKQomIzQzOyNkZWZpbmUgX19wdWRfZnJlZV90bGIodGxiLCBwbWQsIGFkZHIpICB0bGJfcmVtb3ZlX3B0ZGVzYygodGxiKSwgdmlydF90b19wdGRlc2MocG1kKSkKIAogI2VuZGlmCiAKQEAgLTgzLDEwICYjNDM7ODMsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIHB1ZF9wb3B1bGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcHVkX3QgKnB1ZHAsIHBtZF90ICpwbWRwKQogCXNldF9wdWQocHVkcCwgX19wdWQoKHVuc2lnbmVkIGxvbmcpcG1kcCkpOwogfQogCi0jZGVmaW5lIF9fcG1kX2ZyZWVfdGxiKHRsYiwgcG1kLCBhZGRyKSAgcG1kX2ZyZWUoKHRsYiktJmd0O21tLCBwbWQpCiYjNDM7I2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIsIHBtZCwgYWRkcikgIHRsYl9yZW1vdmVfcHRkZXNjKCh0bGIpLCB2aXJ0X3RvX3B0ZGVzYyhwbWQpKQogCiAjZW5kaWYKIAotI2RlZmluZSBfX3B0ZV9mcmVlX3RsYih0bGIsIHB0ZSwgYWRkcikgIHB0ZV9mcmVlKCh0bGIpLSZndDttbSwgcHRlKQomIzQzOyNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLCBwdGUsIGFkZHIpICB0bGJfcmVtb3ZlX3B0ZGVzYygodGxiKSwgcGFnZV9wdGRlc2MocHRlKSkKIAogI2VuZGlmIC8qIF9BU01fQVJDX1BHQUxMT0NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vS2NvbmZpZyBiL2FyY2gvYXJtL0tjb25maWcKaW5kZXggNDA4YWE1OGEyYTViYi4uMGNjMjg5YTcxODRhYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybS9LY29uZmlnCkBAIC0xMzQsNyAmIzQzOzEzNCw2IEBAIGNvbmZpZyBBUk0KIAlzZWxlY3QgSEFWRV9QRVJGX1JFR1MKIAlzZWxlY3QgSEFWRV9QRVJGX1VTRVJfU1RBQ0tfRFVNUAogCXNlbGVjdCBIQVZFX1BPU0lYX0NQVV9USU1FUlNfVEFTS19XT1JLCi0Jc2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgaWYgU01QICZhbXA7JmFtcDsgQVJNX0xQQUUKIAlzZWxlY3QgSEFWRV9SRUdTX0FORF9TVEFDS19BQ0NFU1NfQVBJCiAJc2VsZWN0IEhBVkVfUlNFUQogCXNlbGVjdCBIQVZFX1JVU1QgaWYgQ1BVX0xJVFRMRV9FTkRJQU4gJmFtcDsmYW1wOyBDUFVfMzJ2NyAmYW1wOyZhbXA7ICFLQVNBTgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9LY29uZmlnIGIvYXJjaC9hcm02NC9LY29uZmlnCmluZGV4IDJiYmVkZWQzM2RhMGQuLmI2YzJkZDhiMjYxMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L0tjb25maWcKQEAgLTIyMSw3ICYjNDM7MjIxLDYgQEAgY29uZmlnIEFSTTY0CiAJc2VsZWN0IEhBVkVfUkVMSUFCTEVfU1RBQ0tUUkFDRQogCXNlbGVjdCBIQVZFX1BPU0lYX0NQVV9USU1FUlNfVEFTS19XT1JLCiAJc2VsZWN0IEhBVkVfRlVOQ1RJT05fQVJHX0FDQ0VTU19BUEkKLQlzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRQogCXNlbGVjdCBIQVZFX1JTRVEKIAlzZWxlY3QgSEFWRV9SVVNUIGlmIFJVU1RDX1NVUFBPUlRTX0FSTTY0CiAJc2VsZWN0IEhBVkVfU1RBQ0tQUk9URUNUT1IKZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL0tjb25maWcgYi9hcmNoL2xvb25nYXJjaC9LY29uZmlnCmluZGV4IDljNWRlZjcwNjIyMjIuLmQxYjIzZGE0MDczNzUgMTAwNjQ0Ci0tLSBhL2FyY2gvbG9vbmdhcmNoL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9sb29uZ2FyY2gvS2NvbmZpZwpAQCAtMTg4LDcgJiM0MzsxODgsNiBAQCBjb25maWcgTE9PTkdBUkNICiAJc2VsZWN0IElSUV9MT09OR0FSQ0hfQ1BVCiAJc2VsZWN0IExPQ0tfTU1fQU5EX0ZJTkRfVk1BCiAJc2VsZWN0IE1NVV9HQVRIRVJfTUVSR0VfVk1BUyBpZiBNTVUKLQlzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRQogCXNlbGVjdCBNT0RVTEVTX1VTRV9FTEZfUkVMQSBpZiBNT0RVTEVTCiAJc2VsZWN0IE5FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSwogCXNlbGVjdCBORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOSwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL0tjb25maWcgYi9hcmNoL202OGsvS2NvbmZpZwppbmRleCAxMTgzNWViNTlkOTRkLi5lYjg0YzNhZjkyYzAyIDEwMDY0NAotLS0gYS9hcmNoL202OGsvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL202OGsvS2NvbmZpZwpAQCAtMjksNiAmIzQzOzI5LDcgQEAgY29uZmlnIE02OEsKIAlzZWxlY3QgSEFWRV9BUkNIX0xJQkdDQ19ICiAJc2VsZWN0IEhBVkVfQVJDSF9TRUNDT01QCiAJc2VsZWN0IEhBVkVfQVJDSF9TRUNDT01QX0ZJTFRFUgomIzQzOwlzZWxlY3QgSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEUgaWYgTU1VX01PVE9ST0xBCiAJc2VsZWN0IEhBVkVfQVNNX01PRFZFUlNJT05TCiAJc2VsZWN0IEhBVkVfREVCVUdfQlVHVkVSQk9TRQogCXNlbGVjdCBIQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTIGlmICFDUFVfSEFTX05PX1VOQUxJR05FRApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21jZl9wZ2FsbG9jLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbWNmX3BnYWxsb2MuaAppbmRleCBmYzU0NTRkMzdkYTMxLi5iNTNmZjA5NTBkYjJlIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbWNmX3BnYWxsb2MuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbWNmX3BnYWxsb2MuaApAQCAtMzksMTAgJiM0MzszOSw3IEBAIGV4dGVybiBpbmxpbmUgcG1kX3QgKnBtZF9hbGxvY19rZXJuZWwocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQogc3RhdGljIGlubGluZSB2b2lkIF9fcHRlX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHBndGFibGVfdCBwZ3RhYmxlLAogCQkJCSAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewotCXN0cnVjdCBwdGRlc2MgKnB0ZGVzYyA9IHZpcnRfdG9fcHRkZXNjKHBndGFibGUpOwotCi0JcGFnZXRhYmxlX2R0b3IocHRkZXNjKTsKLQlwYWdldGFibGVfZnJlZShwdGRlc2MpOwomIzQzOwl0bGJfcmVtb3ZlX3B0ZGVzYyh0bGIsIHZpcnRfdG9fcHRkZXNjKHBndGFibGUpKTsKIH0KIAogc3RhdGljIGlubGluZSBwZ3RhYmxlX3QgcHRlX2FsbG9jX29uZShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tb3Rvcm9sYV9wZ2FsbG9jLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbW90b3JvbGFfcGdhbGxvYy5oCmluZGV4IDEwOTFmYjBhZmZiZWUuLmRjZGU0MGU4YjVjNmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tb3Rvcm9sYV9wZ2FsbG9jLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21vdG9yb2xhX3BnYWxsb2MuaApAQCAtMTcsNiAmIzQzOzE3LDcgQEAgZW51bSBtNjhrX3RhYmxlX3R5cGVzIHsKIGV4dGVybiB2b2lkIGluaXRfcG9pbnRlcl90YWJsZSh2b2lkICp0YWJsZSwgaW50IHR5cGUpOwogZXh0ZXJuIHZvaWQgKmdldF9wb2ludGVyX3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgdHlwZSk7CiBleHRlcm4gaW50IGZyZWVfcG9pbnRlcl90YWJsZSh2b2lkICp0YWJsZSwgaW50IHR5cGUpOwomIzQzO2V4dGVybiB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZSh2b2lkICp0YWJsZSk7CiAKIC8qCiAgKiBBbGxvY2F0ZSBhbmQgZnJlZSBwYWdlIHRhYmxlcy4gVGhlIHh4eF9rZXJuZWwoKSB2ZXJzaW9ucyBhcmUKQEAgLTQ3LDcgJiM0Mzs0OCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdGVfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHBndGFibGUpCiBzdGF0aWMgaW5saW5lIHZvaWQgX19wdGVfZnJlZV90bGIoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgcGd0YWJsZV90IHBndGFibGUsCiAJCQkJICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7Ci0JZnJlZV9wb2ludGVyX3RhYmxlKHBndGFibGUsIFRBQkxFX1BURSk7CiYjNDM7CXRsYl9yZW1vdmVfdGFibGUodGxiLCAodm9pZCAqKSgodW5zaWduZWQgbG9uZylwZ3RhYmxlIHwgVEFCTEVfUFRFKSk7CiB9CiAKIApAQCAtNjEsMTAgJiM0Mzs2MiwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBwbWRfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCkKIAlyZXR1cm4gZnJlZV9wb2ludGVyX3RhYmxlKHBtZCwgVEFCTEVfUE1EKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgX19wbWRfZnJlZV90bGIoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgcG1kX3QgKnBtZCwKLQkJCQkgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBfX3BtZF9mcmVlX3RsYihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBwbWRfdCAqcG1kLAomIzQzOwkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKLQlyZXR1cm4gZnJlZV9wb2ludGVyX3RhYmxlKHBtZCwgVEFCTEVfUE1EKTsKJiM0MzsJdGxiX3JlbW92ZV90YWJsZSh0bGIsICh2b2lkICopKCh1bnNpZ25lZCBsb25nKXBtZCB8IFRBQkxFX1BNRCkpOwogfQogCiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tbS9tb3Rvcm9sYS5jIGIvYXJjaC9tNjhrL21tL21vdG9yb2xhLmMKaW5kZXggYjMwYWE2OWE3M2E2YS4uZmZjODA0ODM0NDBiYyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL21tL21vdG9yb2xhLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9tNjhrL21tL21vdG9yb2xhLmMKQEAgLTIwLDYgJiM0MzsyMCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvaW5pdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21lbWJsb2NrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZ2ZwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NsZWFudXAuaCZndDsKIAogI2luY2x1ZGUgJmx0O2FzbS9zZXR1cC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3VhY2Nlc3MuaCZndDsKQEAgLTEwMyw2ICYjNDM7MTA0LDggQEAgc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgcHRhYmxlX2xpc3RbM10gPSB7CiAJTElTVF9IRUFEX0lOSVQocHRhYmxlX2xpc3RbMl0pLAogfTsKIAomIzQzO3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socHRhYmxlX2xvY2spOwomIzQzOwogI2RlZmluZSBQRF9QVEFCTEUocHRkZXNjKSAoKHB0YWJsZV9kZXNjICopJmFtcDsodmlydF90b19wdGRlc2MoKHZvaWQgKikocHRkZXNjKSktJmd0O3B0X2xpc3QpKQogI2RlZmluZSBQRF9QVERFU0MocHRhYmxlKSAobGlzdF9lbnRyeShwdGFibGUsIHN0cnVjdCBwdGRlc2MsIHB0X2xpc3QpKQogI2RlZmluZSBQRF9NQVJLQklUUyhkcCkgKCoodW5zaWduZWQgaW50ICopJmFtcDtQRF9QVERFU0MoZHApLSZndDtwdF9pbmRleCkKQEAgLTEzOSw1MiAmIzQzOzE0Miw2NiBAQCB2b2lkIF9faW5pdCBpbml0X3BvaW50ZXJfdGFibGUodm9pZCAqdGFibGUsIGludCB0eXBlKQogCXJldHVybjsKIH0KIAotdm9pZCAqZ2V0X3BvaW50ZXJfdGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCB0eXBlKQomIzQzOy8qCiYjNDM7ICogRm9yIGEgcG9pbnRlciB0YWJsZSBmb3IgYSB1c2VyIHByb2Nlc3MgYWRkcmVzcyBzcGFjZSwgYQomIzQzOyAqIHRhYmxlIGlzIHRha2VuIGZyb20gYSBwdGRlc2MgYWxsb2NhdGVkIGZvciB0aGUgcHVycG9zZS4gIEVhY2gKJiM0MzsgKiBwdGRlc2MgY2FuIGhvbGQgOCBwb2ludGVyIHRhYmxlcy4gIFRoZSBwdGRlc2MgaXMgcmVtYXBwZWQgaW4KJiM0MzsgKiB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgdG8gYmUgbm9uY2FjaGVhYmxlLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkICphZGRfcG9pbnRlcl90YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IHR5cGUpCiB7Ci0JcHRhYmxlX2Rlc2MgKmRwID0gcHRhYmxlX2xpc3RbdHlwZV0ubmV4dDsKLQl1bnNpZ25lZCBpbnQgbWFzayA9IGxpc3RfZW1wdHkoJmFtcDtwdGFibGVfbGlzdFt0eXBlXSkgPyAwIDogUERfTUFSS0JJVFMoZHApOwotCXVuc2lnbmVkIGludCB0bXAsIG9mZjsKJiM0MzsJc3RydWN0IHB0ZGVzYyAqcHRkZXNjOwomIzQzOwlwdGFibGVfZGVzYyAqbmV3OwomIzQzOwl2b2lkICpwdF9hZGRyOwogCi0JLyoKLQkgKiBGb3IgYSBwb2ludGVyIHRhYmxlIGZvciBhIHVzZXIgcHJvY2VzcyBhZGRyZXNzIHNwYWNlLCBhCi0JICogdGFibGUgaXMgdGFrZW4gZnJvbSBhIHB0ZGVzYyBhbGxvY2F0ZWQgZm9yIHRoZSBwdXJwb3NlLiAgRWFjaAotCSAqIHB0ZGVzYyBjYW4gaG9sZCA4IHBvaW50ZXIgdGFibGVzLiAgVGhlIHB0ZGVzYyBpcyByZW1hcHBlZCBpbgotCSAqIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSB0byBiZSBub25jYWNoZWFibGUuCi0JICovCi0JaWYgKG1hc2sgPT0gMCkgewotCQlzdHJ1Y3QgcHRkZXNjICpwdGRlc2M7Ci0JCXB0YWJsZV9kZXNjICpuZXc7Ci0JCXZvaWQgKnB0X2FkZHI7Ci0KLQkJcHRkZXNjID0gcGFnZXRhYmxlX2FsbG9jKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPLCAwKTsKLQkJaWYgKCFwdGRlc2MpCi0JCQlyZXR1cm4gTlVMTDsKLQotCQlwdF9hZGRyID0gcHRkZXNjX2FkZHJlc3MocHRkZXNjKTsKLQotCQlzd2l0Y2ggKHR5cGUpIHsKLQkJY2FzZSBUQUJMRV9QVEU6Ci0JCQkvKgotCQkJICogbTY4ayBkb2VzbiYjMzk7dCBoYXZlIFNQTElUX1BURV9QVExPQ0tTIGZvciBub3QgaGF2aW5nCi0JCQkgKiBTTVAuCi0JCQkgKi8KLQkJCXBhZ2V0YWJsZV9wdGVfY3RvcihtbSwgcHRkZXNjKTsKLQkJCWJyZWFrOwotCQljYXNlIFRBQkxFX1BNRDoKLQkJCXBhZ2V0YWJsZV9wbWRfY3RvcihtbSwgcHRkZXNjKTsKLQkJCWJyZWFrOwotCQljYXNlIFRBQkxFX1BHRDoKLQkJCXBhZ2V0YWJsZV9wZ2RfY3RvcihwdGRlc2MpOwotCQkJYnJlYWs7Ci0JCX0KJiM0MzsJcHRkZXNjID0gcGFnZXRhYmxlX2FsbG9jKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPLCAwKTsKJiM0MzsJaWYgKCFwdGRlc2MpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJcHRfYWRkciA9IHB0ZGVzY19hZGRyZXNzKHB0ZGVzYyk7CiYjNDM7CiYjNDM7CXN3aXRjaCAodHlwZSkgewomIzQzOwljYXNlIFRBQkxFX1BURToKJiM0MzsJCS8qCiYjNDM7CQkgKiBtNjhrIGRvZXNuJiMzOTt0IGhhdmUgU1BMSVRfUFRFX1BUTE9DS1MgZm9yIG5vdCBoYXZpbmcKJiM0MzsJCSAqIFNNUC4KJiM0MzsJCSAqLwomIzQzOwkJcGFnZXRhYmxlX3B0ZV9jdG9yKG1tLCBwdGRlc2MpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgVEFCTEVfUE1EOgomIzQzOwkJcGFnZXRhYmxlX3BtZF9jdG9yKG1tLCBwdGRlc2MpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgVEFCTEVfUEdEOgomIzQzOwkJcGFnZXRhYmxlX3BnZF9jdG9yKHB0ZGVzYyk7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwltbXVfcGFnZV9jdG9yKHB0X2FkZHIpOwomIzQzOwomIzQzOwluZXcgPSBQRF9QVEFCTEUocHRfYWRkcik7CiAKLQkJbW11X3BhZ2VfY3RvcihwdF9hZGRyKTsKJiM0MzsJUERfTUFSS0JJVFMobmV3KSA9IHB0YWJsZV9tYXNrKHR5cGUpIC0gMTsKJiM0MzsJc2NvcGVkX2d1YXJkKHNwaW5sb2NrX2lycXNhdmUsICZhbXA7cHRhYmxlX2xvY2spCiYjNDM7CQlsaXN0X2FkZChuZXcsICZhbXA7cHRhYmxlX2xpc3RbdHlwZV0pOwogCi0JCW5ldyA9IFBEX1BUQUJMRShwdF9hZGRyKTsKLQkJUERfTUFSS0JJVFMobmV3KSA9IHB0YWJsZV9tYXNrKHR5cGUpIC0gMTsKLQkJbGlzdF9hZGRfdGFpbChuZXcsIGRwKTsKJiM0MzsJcmV0dXJuIChwbWRfdCAqKXB0X2FkZHI7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgKmdldF9wb2ludGVyX3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgdHlwZSkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCB0bXAsIG9mZjsKJiM0MzsJdW5zaWduZWQgbG9uZyBtYXNrOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwlwdGFibGVfZGVzYyAqZHA7CiYjNDM7CXZvaWQgKnJldDsKIAotCQlyZXR1cm4gKHBtZF90ICopcHRfYWRkcjsKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtwdGFibGVfbG9jaywgZmxhZ3MpOwomIzQzOwlkcCA9IHB0YWJsZV9saXN0W3R5cGVdLm5leHQ7CiYjNDM7CW1hc2sgPSBsaXN0X2VtcHR5KCZhbXA7cHRhYmxlX2xpc3RbdHlwZV0pID8gMCA6IFBEX01BUktCSVRTKGRwKTsKJiM0MzsKJiM0MzsJaWYgKG1hc2sgPT0gMCkgewomIzQzOwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3B0YWJsZV9sb2NrLCBmbGFncyk7CiYjNDM7CQlyZXR1cm4gYWRkX3BvaW50ZXJfdGFibGUobW0sIHR5cGUpOwogCX0KIAogCWZvciAodG1wID0gMSwgb2ZmID0gMDsgKG1hc2sgJmFtcDsgdG1wKSA9PSAwOyB0bXAgJmx0OyZsdDs9IDEsIG9mZiAmIzQzOz0gcHRhYmxlX3NpemUodHlwZSkpCkBAIC0xOTQsNyAmIzQzOzIxMSwxMCBAQCB2b2lkICpnZXRfcG9pbnRlcl90YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IHR5cGUpCiAJCS8qIG1vdmUgdG8gZW5kIG9mIGxpc3QgKi8KIAkJbGlzdF9tb3ZlX3RhaWwoZHAsICZhbXA7cHRhYmxlX2xpc3RbdHlwZV0pOwogCX0KLQlyZXR1cm4gcHRkZXNjX2FkZHJlc3MoUERfUFRERVNDKGRwKSkgJiM0Mzsgb2ZmOwomIzQzOwomIzQzOwlyZXQgPSBwdGRlc2NfYWRkcmVzcyhQRF9QVERFU0MoZHApKSAmIzQzOyBvZmY7CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtwdGFibGVfbG9jaywgZmxhZ3MpOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiBpbnQgZnJlZV9wb2ludGVyX3RhYmxlKHZvaWQgKnRhYmxlLCBpbnQgdHlwZSkKQEAgLTIwMyw2ICYjNDM7MjIzLDkgQEAgaW50IGZyZWVfcG9pbnRlcl90YWJsZSh2b2lkICp0YWJsZSwgaW50IHR5cGUpCiAJdW5zaWduZWQgbG9uZyBwdGFibGUgPSAodW5zaWduZWQgbG9uZyl0YWJsZTsKIAl1bnNpZ25lZCBsb25nIHB0X2FkZHIgPSBwdGFibGUgJmFtcDsgUEFHRV9NQVNLOwogCXVuc2lnbmVkIGludCBtYXNrID0gMVUgJmx0OyZsdDsgKChwdGFibGUgLSBwdF9hZGRyKS9wdGFibGVfc2l6ZSh0eXBlKSk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7cHRhYmxlX2xvY2ssIGZsYWdzKTsKIAogCWRwID0gUERfUFRBQkxFKHB0X2FkZHIpOwogCWlmIChQRF9NQVJLQklUUyAoZHApICZhbXA7IG1hc2spCkBAIC0yMTMsNiAmIzQzOzIzNiw4IEBAIGludCBmcmVlX3BvaW50ZXJfdGFibGUodm9pZCAqdGFibGUsIGludCB0eXBlKQogCWlmIChQRF9NQVJLQklUUyhkcCkgPT0gcHRhYmxlX21hc2sodHlwZSkpIHsKIAkJLyogYWxsIHRhYmxlcyBpbiBwdGRlc2MgYXJlIGZyZWUsIGZyZWUgcHRkZXNjICovCiAJCWxpc3RfZGVsKGRwKTsKJiM0MzsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtwdGFibGVfbG9jaywgZmxhZ3MpOwomIzQzOwogCQltbXVfcGFnZV9kdG9yKCh2b2lkICopcHRfYWRkcik7CiAJCXBhZ2V0YWJsZV9kdG9yX2ZyZWUodmlydF90b19wdGRlc2MoKHZvaWQgKilwdF9hZGRyKSk7CiAJCXJldHVybiAxOwpAQCAtMjIzLDkgJiM0MzsyNDgsMjEgQEAgaW50IGZyZWVfcG9pbnRlcl90YWJsZSh2b2lkICp0YWJsZSwgaW50IHR5cGUpCiAJCSAqLwogCQlsaXN0X21vdmUoZHAsICZhbXA7cHRhYmxlX2xpc3RbdHlwZV0pOwogCX0KJiM0MzsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3B0YWJsZV9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKJiM0Mzt2b2lkIF9fdGxiX3JlbW92ZV90YWJsZSh2b2lkICp0YWJsZSkKJiM0Mzt7CiYjNDM7CS8qIFRoZSBib3R0b20gMiBiaXRzIGFyZSB1c2VkIHRvIGVuY29kZSBwYWdlIHRhYmxlIHR5cGUuICovCiYjNDM7CWNvbnN0IHVuc2lnbmVkIGxvbmcgZW5jb2RlZCA9ICh1bnNpZ25lZCBsb25nKXRhYmxlOwomIzQzOwl2b2lkICphZGRyID0gKHZvaWQgKikoZW5jb2RlZCAmYW1wOyB+M1VMKTsKJiM0MzsJY29uc3QgaW50IHR5cGUgPSBlbmNvZGVkICZhbXA7IDM7CiYjNDM7CiYjNDM7CWZyZWVfcG9pbnRlcl90YWJsZShhZGRyLCB0eXBlKTsKJiM0Mzt9CiYjNDM7CiAvKiBzaXplIG9mIG1lbW9yeSBhbHJlYWR5IG1hcHBlZCBpbiBoZWFkLlMgKi8KIGV4dGVybiBfX2luaXRkYXRhIHVuc2lnbmVkIGxvbmcgbTY4a19pbml0X21hcHBlZF9zaXplOwogCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcGdhbGxvYy5oIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3BnYWxsb2MuaAppbmRleCAwODRhOGEwZGMyMzk1Li5mZmVlNmEwMDkyMTlhIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcGdhbGxvYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKQEAgLTI1LDcgJiM0MzsyNSw3IEBAIGV4dGVybiB2b2lkIF9fYmFkX3B0ZShwbWRfdCAqcG1kKTsKIAogZXh0ZXJuIHB0ZV90ICpwdGVfYWxsb2Nfb25lX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CiAKLSNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLCBwdGUsIGFkZHIpCXB0ZV9mcmVlKCh0bGIpLSZndDttbSwgKHB0ZSkpCiYjNDM7I2RlZmluZSBfX3B0ZV9mcmVlX3RsYih0bGIsIHB0ZSwgYWRkcikJdGxiX3JlbW92ZV9wdGRlc2MoKHRsYiksIHBhZ2VfcHRkZXNjKHB0ZSkpCiAKICNkZWZpbmUgcG1kX3BvcHVsYXRlKG1tLCBwbWQsIHB0ZSkgXAogCQkJKHBtZF92YWwoKihwbWQpKSA9ICh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwdGUpKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL0tjb25maWcgYi9hcmNoL21pcHMvS2NvbmZpZwppbmRleCBlMmViOTYyN2JkMTRjLi5mMGM0M2QxMThjYTAwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL21pcHMvS2NvbmZpZwpAQCAtOTcsNyAmIzQzOzk3LDYgQEAgY29uZmlnIE1JUFMKIAlzZWxlY3QgSVJRX0ZPUkNFRF9USFJFQURJTkcKIAlzZWxlY3QgSVNBIGlmIEVJU0EKIAlzZWxlY3QgTE9DS19NTV9BTkRfRklORF9WTUEKLQlzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRQogCXNlbGVjdCBNT0RVTEVTX1VTRV9FTEZfUkVMIGlmIE1PRFVMRVMKIAlzZWxlY3QgTU9EVUxFU19VU0VfRUxGX1JFTEEgaWYgTU9EVUxFUyAmYW1wOyZhbXA7IDY0QklUCiAJc2VsZWN0IFBFUkZfVVNFX1ZNQUxMT0MKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL0tjb25maWcgYi9hcmNoL3BhcmlzYy9LY29uZmlnCmluZGV4IGQzYWZhYzJmMGQ5YmUuLjc3ZjY3MDI4YWQ4OWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wYXJpc2MvS2NvbmZpZwpAQCAtODAsNyAmIzQzOzgwLDYgQEAgY29uZmlnIFBBUklTQwogCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCiAJc2VsZWN0IENQVV9OT19FRkZJQ0lFTlRfRkZTCiAJc2VsZWN0IFRIUkVBRF9JTkZPX0lOX1RBU0sKLQlzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRQogCXNlbGVjdCBORUVEX0RNQV9NQVBfU1RBVEUKIAlzZWxlY3QgTkVFRF9TR19ETUFfTEVOR1RICiAJc2VsZWN0IEhBVkVfQVJDSF9LR0RCCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnCmluZGV4IDI1ODBlMjdlNDMyODcuLjA3NjdjZmNiYWE0MjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnCkBAIC0zMDcsNyAmIzQzOzMwNyw2IEBAIGNvbmZpZyBQUEMKIAlzZWxlY3QgS0FTQU5fVk1BTExPQwkJCWlmIEtBU0FOICZhbXA7JmFtcDsgRVhFQ01FTQogCXNlbGVjdCBMT0NLX01NX0FORF9GSU5EX1ZNQQogCXNlbGVjdCBNTVVfR0FUSEVSX1BBR0VfU0laRQotCXNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFCiAJc2VsZWN0IEhBVkVfQVJDSF9UTEJfUkVNT1ZFX1RBQkxFCiAJc2VsZWN0IE1NVV9HQVRIRVJfTUVSR0VfVk1BUwogCXNlbGVjdCBNTVVfTEFaWV9UTEJfU0hPT1RET1dOCQlpZiBQUENfQk9PSzNTXzY0CmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L0tjb25maWcgYi9hcmNoL3Jpc2N2L0tjb25maWcKaW5kZXggNTA1ZWVkNGFmOTMyYi4uNzc0MWE0Mjg3NDk4MSAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvS2NvbmZpZwpAQCAtMjA4LDcgJiM0MzsyMDgsNiBAQCBjb25maWcgUklTQ1YKIAlzZWxlY3QgSVJRX0ZPUkNFRF9USFJFQURJTkcKIAlzZWxlY3QgS0FTQU5fVk1BTExPQyBpZiBLQVNBTgogCXNlbGVjdCBMT0NLX01NX0FORF9GSU5EX1ZNQQotCXNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFIGlmIFNNUCAmYW1wOyZhbXA7IE1NVQogCXNlbGVjdCBNT0RVTEVTX1VTRV9FTEZfUkVMQSBpZiBNT0RVTEVTCiAJc2VsZWN0IE9GCiAJc2VsZWN0IE9GX0VBUkxZX0ZMQVRUUkVFCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnCmluZGV4IGI4OGI4NTA0MjEzNjkuLmEzNDM3NmMwNWY2ZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9LY29uZmlnCkBAIC0yNjcsNyAmIzQzOzI2Nyw2IEBAIGNvbmZpZyBTMzkwCiAJc2VsZWN0IExPQ0tfTU1fQU5EX0ZJTkRfVk1BCiAJc2VsZWN0IE1NVV9HQVRIRVJfTUVSR0VfVk1BUwogCXNlbGVjdCBNTVVfR0FUSEVSX05PX0dBVEhFUgotCXNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFCiAJc2VsZWN0IE1PRFVMRVNfVVNFX0VMRl9SRUxBCiAJc2VsZWN0IE5FRURfRE1BX01BUF9TVEFURQlpZiBQQ0kKIAlzZWxlY3QgTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LCmRpZmYgLS1naXQgYS9hcmNoL3NoL0tjb25maWcgYi9hcmNoL3NoL0tjb25maWcKaW5kZXggZDYwZjFkNWE5NGMwZi4uZmU4NTlkZWY5MThjYyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvc2gvS2NvbmZpZwpAQCAtMzMsNiAmIzQzOzMzLDcgQEAgY29uZmlnIFNVUEVSSAogCXNlbGVjdCBIQVZFX0FSQ0hfQVVESVRTWVNDQUxMCiAJc2VsZWN0IEhBVkVfQVJDSF9LR0RCCiAJc2VsZWN0IEhBVkVfQVJDSF9TRUNDT01QX0ZJTFRFUgomIzQzOwlzZWxlY3QgSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEUgaWYgWDJUTEIKIAlzZWxlY3QgSEFWRV9BUkNIX1RSQUNFSE9PSwogCXNlbGVjdCBIQVZFX0RFQlVHX0JVR1ZFUkJPU0UKIAlzZWxlY3QgSEFWRV9ERUJVR19LTUVNTEVBSwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BnYWxsb2MuaAppbmRleCA2ZmU3MTIzZDM4ZmE5Li42N2NlN2ZhMjNmYTEyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BnYWxsb2MuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BnYWxsb2MuaApAQCAtMTcsNyAmIzQzOzE3LDExIEBAIGV4dGVybiB2b2lkIHBnZF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKTsKIGV4dGVybiB2b2lkIHB1ZF9wb3B1bGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcHVkX3QgKnB1ZHAsIHBtZF90ICpwbWQpOwogZXh0ZXJuIHBtZF90ICpwbWRfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpOwogZXh0ZXJuIHZvaWQgcG1kX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQpOwotI2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIsIHBtZHAsIGFkZHIpCQlwbWRfZnJlZSgodGxiKS0mZ3Q7bW0sIChwbWRwKSkKJiM0MztleHRlcm4gdm9pZCBfX3RsYl9yZW1vdmVfdGFibGUodm9pZCAqdGFibGUpOwomIzQzOwomIzQzOy8qIFBNRHMgYXJlIHNsYWItYWxsb2NhdGVkLCB0YWcgc28gdGhleSBhcmUgZnJlZWQgY29ycmVjdGx5LiAqLwomIzQzOyNkZWZpbmUgX19wbWRfZnJlZV90bGIodGxiLCBwbWRwLCBhZGRyKQkJCQkJXAomIzQzOwl0bGJfcmVtb3ZlX3RhYmxlKCh0bGIpLCAodm9pZCAqKSgodW5zaWduZWQgbG9uZykocG1kcCkgfCAxKSkKICNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHZvaWQgcG1kX3BvcHVsYXRlX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCwKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vcGd0YWJsZS5jIGIvYXJjaC9zaC9tbS9wZ3RhYmxlLmMKaW5kZXggM2E0MDg1ZWEwMTYxZi4uZjYxODRiODZiODljNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9wZ3RhYmxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zaC9tbS9wZ3RhYmxlLmMKQEAgLTU2LDQgJiM0Mzs1NiwyNCBAQCB2b2lkIHBtZF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKQogewogCWttZW1fY2FjaGVfZnJlZShwbWRfY2FjaGVwLCBwbWQpOwogfQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZV9zbGFiKHZvaWQgKnRhYmxlKQomIzQzO3sKJiM0MzsJa21lbV9jYWNoZV9mcmVlKHBtZF9jYWNoZXAsIHRhYmxlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgX190bGJfcmVtb3ZlX3RhYmxlX3BndGFibGUodm9pZCAqdGFibGUpCiYjNDM7ewomIzQzOwlwYWdldGFibGVfZHRvcl9mcmVlKHRhYmxlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBfX3RsYl9yZW1vdmVfdGFibGUodm9pZCAqdGFibGUpCiYjNDM7ewomIzQzOwljb25zdCB1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZyl0YWJsZTsKJiM0MzsKJiM0MzsJaWYgKGFkZHIgJmFtcDsgMSkKJiM0MzsJCV9fdGxiX3JlbW92ZV90YWJsZV9zbGFiKCh2b2lkICopKGFkZHIgJmFtcDsgfjFVTCkpOwomIzQzOwllbHNlCiYjNDM7CQlfX3RsYl9yZW1vdmVfdGFibGVfcGd0YWJsZSh0YWJsZSk7CiYjNDM7fQogI2VuZGlmIC8qIFBBR0VUQUJMRV9MRVZFTFMgJmd0OyAyICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL0tjb25maWcgYi9hcmNoL3NwYXJjL0tjb25maWcKaW5kZXggYWI3N2QzZjI1MzZlMS4uNzQyZmZmZjhjMzdmMiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvc3BhcmMvS2NvbmZpZwpAQCAtNjQsNiAmIzQzOzY0LDcgQEAgY29uZmlnIFNQQVJDMzIKIAlzZWxlY3QgSEFWRV9VSUQxNgogCXNlbGVjdCBIQVZFX1BBR0VfU0laRV80S0IKIAlzZWxlY3QgTE9DS19NTV9BTkRfRklORF9WTUEKJiM0MzsJc2VsZWN0IEhBVkVfQVJDSF9UTEJfUkVNT1ZFX1RBQkxFCiAJc2VsZWN0IE9MRF9TSUdBQ1RJT04KIAlzZWxlY3QgWk9ORV9ETUEKIApAQCAtNzUsOCAmIzQzOzc2LDcgQEAgY29uZmlnIFNQQVJDNjQKIAlzZWxlY3QgSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVIKIAlzZWxlY3QgSEFWRV9LUkVUUFJPQkVTCiAJc2VsZWN0IEhBVkVfS1BST0JFUwotCXNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFIGlmIFNNUAotCXNlbGVjdCBIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRSBpZiBTTVAKJiM0MzsJc2VsZWN0IEhBVkVfQVJDSF9UTEJfUkVNT1ZFX1RBQkxFCiAJc2VsZWN0IE1NVV9HQVRIRVJfTUVSR0VfVk1BUwogCXNlbGVjdCBNTVVfR0FUSEVSX05PX0ZMVVNIX0NBQ0hFCiAJc2VsZWN0IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzMyLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2NfMzIuaAppbmRleCA0ZjczZTg3YjIyYTMyLi4zNjAxMDg1MmJhMGMwIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2NfMzIuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2NfMzIuaApAQCAtNDgsNyAmIzQzOzQ4LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIGZyZWVfcG1kX2Zhc3QocG1kX3QgKiBwbWQpCiB9CiAKICNkZWZpbmUgcG1kX2ZyZWUobW0sIHBtZCkJCWZyZWVfcG1kX2Zhc3QocG1kKQotI2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIsIHBtZCwgYWRkcikJcG1kX2ZyZWUoKHRsYiktJmd0O21tLCBwbWQpCiYjNDM7CiYjNDM7I2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIsIHBtZCwgYWRkcikJCQkJCVwKJiM0MzsJdGxiX3JlbW92ZV90YWJsZSgodGxiKSwgKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKHBtZCkgfCAxVUwpKQogCiAjZGVmaW5lIHBtZF9wb3B1bGF0ZShtbSwgcG1kLCBwdGUpCXBtZF9zZXQocG1kLCBwdGUpCiAKQEAgLTcyLDYgJiM0Mzs3NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3B0ZV9mYXN0KHB0ZV90ICpwdGUpCiAjZGVmaW5lIHB0ZV9mcmVlX2tlcm5lbChtbSwgcHRlKQlmcmVlX3B0ZV9mYXN0KHB0ZSkKIAogdm9pZCBwdGVfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICogbW0sIHBndGFibGVfdCBwdGUpOwotI2RlZmluZSBfX3B0ZV9mcmVlX3RsYih0bGIsIHB0ZSwgYWRkcikJcHRlX2ZyZWUoKHRsYiktJmd0O21tLCBwdGUpCiYjNDM7dm9pZCBfX3RsYl9yZW1vdmVfdGFibGUodm9pZCAqdGFibGUpOwomIzQzOyNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLCBwdGUsIGFkZHIpCXRsYl9yZW1vdmVfdGFibGUoKHRsYiksICh2b2lkICopKHB0ZSkpCiAKICNlbmRpZiAvKiBfU1BBUkNfUEdBTExPQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2NfNjQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY182NC5oCmluZGV4IGNhYTc2MzJiZTRjMmEuLmI1MDU1ZDI1OWI3NGQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY182NC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY182NC5oCkBAIC03NCw4ICYjNDM7NzQsNiBAQCB2b2lkIHB0ZV9mcmVlX2RlZmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcGd0YWJsZSk7CiAKIHZvaWQgcGd0YWJsZV9mcmVlKHZvaWQgKnRhYmxlLCBib29sIGlzX3BhZ2UpOwogCi0jaWZkZWYgQ09ORklHX1NNUAotCiBzdHJ1Y3QgbW11X2dhdGhlcjsKIHZvaWQgdGxiX3JlbW92ZV90YWJsZShzdHJ1Y3QgbW11X2dhdGhlciAqLCB2b2lkICopOwogCkBAIC05NiwxMiAmIzQzOzk0LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZSh2b2lkICpfdGFibGUpCiAJCWlzX3BhZ2UgPSB0cnVlOwogCXBndGFibGVfZnJlZSh0YWJsZSwgaXNfcGFnZSk7CiB9Ci0jZWxzZSAvKiBDT05GSUdfU01QICovCi1zdGF0aWMgaW5saW5lIHZvaWQgcGd0YWJsZV9mcmVlX3RsYihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCB2b2lkICp0YWJsZSwgYm9vbCBpc19wYWdlKQotewotCXBndGFibGVfZnJlZSh0YWJsZSwgaXNfcGFnZSk7Ci19Ci0jZW5kaWYgLyogIUNPTkZJR19TTVAgKi8KIAogc3RhdGljIGlubGluZSB2b2lkIF9fcHRlX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHB0ZV90ICpwdGUsCiAJCQkJICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RsYl82NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90bGJfNjQuaAppbmRleCAzMDM3MTg3NDgyZGI3Li5mNWY5NjMxNjg1ZDUwIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RsYl82NC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGxiXzY0LmgKQEAgLTI5LDkgJiM0MzsyOSw3IEBAIHZvaWQgZmx1c2hfdGxiX3BlbmRpbmcodm9pZCk7CiAgKiBhbmQgdGhlcmVmb3JlIHdlIGRvbiYjMzk7dCBuZWVkIGEgVExCSSB3aGVuIGZyZWVpbmcgcGFnZS10YWJsZSBwYWdlcy4KICAqLwogCi0jaWZkZWYgQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUKICNkZWZpbmUgdGxiX25lZWRzX3RhYmxlX2ludmFsaWRhdGUoKQkoZmFsc2UpCi0jZW5kaWYKIAogI2luY2x1ZGUgJmx0O2FzbS1nZW5lcmljL3RsYi5oJmd0OwogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2xpYi9iaXRleHQuYyBiL2FyY2gvc3BhcmMvbGliL2JpdGV4dC5jCmluZGV4IDMyYTVjMWQ5NDU5Y2QuLmMzMDllMjc5NzNjZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbGliL2JpdGV4dC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvc3BhcmMvbGliL2JpdGV4dC5jCkBAIC0yMiw4ICYjNDM7MjIsNiBAQAogICogQGFsaWduOiByZXF1ZXN0ZWQgYWxpZ25tZW50CiAgKgogICogUmV0dXJucyBvZmZzZXQgaW4gdGhlIG1hcCBvciAtMSBpZiBvdXQgb2Ygc3BhY2UuCi0gKgotICogTm90IHNhZmUgdG8gY2FsbCBmcm9tIGFuIGludGVycnVwdCAodXNlcyBzcGluX2xvY2spLgogICovCiBpbnQgYml0X21hcF9zdHJpbmdfZ2V0KHN0cnVjdCBiaXRfbWFwICp0LCBpbnQgbGVuLCBpbnQgYWxpZ24pCiB7CkBAIC0zMSw2ICYjNDM7MjksNyBAQCBpbnQgYml0X21hcF9zdHJpbmdfZ2V0KHN0cnVjdCBiaXRfbWFwICp0LCBpbnQgbGVuLCBpbnQgYWxpZ24pCiAJaW50IG9mZl9uZXc7CiAJaW50IGFsaWduMTsKIAlpbnQgaSwgY29sb3I7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAodC0mZ3Q7bnVtX2NvbG9ycykgewogCQkvKiBhbGlnbiBpcyBvdmVybG9hZGVkIHRvIGJlIHRoZSBwYWdlIGNvbG9yICovCkBAIC01MCw3ICYjNDM7NDksNyBAQCBpbnQgYml0X21hcF9zdHJpbmdfZ2V0KHN0cnVjdCBiaXRfbWFwICp0LCBpbnQgbGVuLCBpbnQgYWxpZ24pCiAJCUJVRygpOwogCWNvbG9yICZhbXA7PSBhbGlnbjE7CiAKLQlzcGluX2xvY2soJmFtcDt0LSZndDtsb2NrKTsKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDt0LSZndDtsb2NrLCBmbGFncyk7CiAJaWYgKGxlbiAmbHQ7IHQtJmd0O2xhc3Rfc2l6ZSkKIAkJb2Zmc2V0ID0gdC0mZ3Q7Zmlyc3RfZnJlZTsKIAllbHNlCkBAIC02NCw3ICYjNDM7NjMsNyBAQCBpbnQgYml0X21hcF9zdHJpbmdfZ2V0KHN0cnVjdCBiaXRfbWFwICp0LCBpbnQgbGVuLCBpbnQgYWxpZ24pCiAJCWlmIChvZmZzZXQgJmd0Oz0gdC0mZ3Q7c2l6ZSkKIAkJCW9mZnNldCA9IDA7CiAJCWlmIChjb3VudCAmIzQzOyBsZW4gJmd0OyB0LSZndDtzaXplKSB7Ci0JCQlzcGluX3VubG9jaygmYW1wO3QtJmd0O2xvY2spOwomIzQzOwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt0LSZndDtsb2NrLCBmbGFncyk7CiAvKiBQMyAqLyBwcmludGsoS0VSTl9FUlIKICAgJiMzNDtiaXRtYXAgb3V0OiBzaXplICVkIHVzZWQgJWQgb2ZmICVkIGxlbiAlZCBhbGlnbiAlZCBjb3VudCAlZFxuJiMzNDssCiAgIHQtJmd0O3NpemUsIHQtJmd0O3VzZWQsIG9mZnNldCwgbGVuLCBhbGlnbiwgY291bnQpOwpAQCAtOTAsNyAmIzQzOzg5LDcgQEAgaW50IGJpdF9tYXBfc3RyaW5nX2dldChzdHJ1Y3QgYml0X21hcCAqdCwgaW50IGxlbiwgaW50IGFsaWduKQogCQkJCQl0LSZndDtsYXN0X29mZiA9IDA7CiAJCQkJdC0mZ3Q7dXNlZCAmIzQzOz0gbGVuOwogCQkJCXQtJmd0O2xhc3Rfc2l6ZSA9IGxlbjsKLQkJCQlzcGluX3VubG9jaygmYW1wO3QtJmd0O2xvY2spOwomIzQzOwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7dC0mZ3Q7bG9jaywgZmxhZ3MpOwogCQkJCXJldHVybiBvZmZzZXQ7CiAJCQl9CiAJCX0KQEAgLTEwMywxMCAmIzQzOzEwMiwxMSBAQCBpbnQgYml0X21hcF9zdHJpbmdfZ2V0KHN0cnVjdCBiaXRfbWFwICp0LCBpbnQgbGVuLCBpbnQgYWxpZ24pCiB2b2lkIGJpdF9tYXBfY2xlYXIoc3RydWN0IGJpdF9tYXAgKnQsIGludCBvZmZzZXQsIGludCBsZW4pCiB7CiAJaW50IGk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAodC0mZ3Q7dXNlZCAmbHQ7IGxlbikKIAkJQlVHKCk7CQkvKiBNdWNoIHRvbyBsYXRlIHRvIGRvIGFueSBnb29kLCBidXQgYWxhcy4uLiAqLwotCXNwaW5fbG9jaygmYW1wO3QtJmd0O2xvY2spOwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3QtJmd0O2xvY2ssIGZsYWdzKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgbGVuOyBpJiM0MzsmIzQzOykgewogCQlpZiAodGVzdF9iaXQob2Zmc2V0ICYjNDM7IGksIHQtJmd0O21hcCkgPT0gMCkKIAkJCUJVRygpOwpAQCAtMTE1LDcgJiM0MzsxMTUsNyBAQCB2b2lkIGJpdF9tYXBfY2xlYXIoc3RydWN0IGJpdF9tYXAgKnQsIGludCBvZmZzZXQsIGludCBsZW4pCiAJaWYgKG9mZnNldCAmbHQ7IHQtJmd0O2ZpcnN0X2ZyZWUpCiAJCXQtJmd0O2ZpcnN0X2ZyZWUgPSBvZmZzZXQ7CiAJdC0mZ3Q7dXNlZCAtPSBsZW47Ci0Jc3Bpbl91bmxvY2soJmFtcDt0LSZndDtsb2NrKTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3QtJmd0O2xvY2ssIGZsYWdzKTsKIH0KIAogdm9pZCBiaXRfbWFwX2luaXQoc3RydWN0IGJpdF9tYXAgKnQsIHVuc2lnbmVkIGxvbmcgKm1hcCwgaW50IHNpemUpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL3NybW11LmMgYi9hcmNoL3NwYXJjL21tL3NybW11LmMKaW5kZXggOWE3NDkwMmFkMTgxNC4uMmEyYzdiZDIxMDExNCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tbS9zcm1tdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvc3BhcmMvbW0vc3JtbXUuYwpAQCAtMzU5LDE5ICYjNDM7MzU5LDM5IEBAIHBndGFibGVfdCBwdGVfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogCXJldHVybiBwdGVwOwogfQogCi12b2lkIHB0ZV9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcHRlcCkKJiM0MztzdGF0aWMgdm9pZCBfX3B0ZV9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcHRlcCkKIHsKJiM0MzsJY29uc3QgYm9vbCBwcm9jZXNzX2NvbnRleHQgPSBtbTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAogCXBhZ2UgPSBwZm5fdG9fcGFnZShfX25vY2FjaGVfcGEoKHVuc2lnbmVkIGxvbmcpcHRlcCkgJmd0OyZndDsgUEFHRV9TSElGVCk7Ci0Jc3Bpbl9sb2NrKCZhbXA7bW0tJmd0O3BhZ2VfdGFibGVfbG9jayk7CiYjNDM7CWlmIChwcm9jZXNzX2NvbnRleHQpCiYjNDM7CQlzcGluX2xvY2soJmFtcDttbS0mZ3Q7cGFnZV90YWJsZV9sb2NrKTsKIAlpZiAocGFnZV9yZWZfZGVjX3JldHVybihwYWdlKSA9PSAxKQogCQlwYWdldGFibGVfZHRvcihwYWdlX3B0ZGVzYyhwYWdlKSk7Ci0Jc3Bpbl91bmxvY2soJmFtcDttbS0mZ3Q7cGFnZV90YWJsZV9sb2NrKTsKJiM0MzsJaWYgKHByb2Nlc3NfY29udGV4dCkKJiM0MzsJCXNwaW5fdW5sb2NrKCZhbXA7bW0tJmd0O3BhZ2VfdGFibGVfbG9jayk7CiAKIAlzcm1tdV9mcmVlX25vY2FjaGUocHRlcCwgU1JNTVVfUFRFX1RBQkxFX1NJWkUpOwogfQogCiYjNDM7dm9pZCBwdGVfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHB0ZXApCiYjNDM7ewomIzQzOwlfX3B0ZV9mcmVlKG1tLCBwdGVwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBfX3RsYl9yZW1vdmVfdGFibGUodm9pZCAqdGFibGUpCiYjNDM7ewomIzQzOwljb25zdCB1bnNpZ25lZCBsb25nIGVuY29kZWQgPSAodW5zaWduZWQgbG9uZyl0YWJsZTsKJiM0MzsJY29uc3QgdW5zaWduZWQgbG9uZyBhZGRyID0gZW5jb2RlZCAmYW1wOyB+MVVMOwomIzQzOwljb25zdCBib29sIGlzX3BtZCA9IGVuY29kZWQgJmFtcDsgMTsKJiM0MzsKJiM0MzsJaWYgKGlzX3BtZCkKJiM0MzsJCWZyZWVfcG1kX2Zhc3QoKHBtZF90ICopYWRkcik7CiYjNDM7CWVsc2UgLyogQ2FsbGVkIGZyb20gc29mdGlycSBjb250ZXh0LCBubyBtbS4gKi8KJiM0MzsJCV9fcHRlX2ZyZWUoTlVMTCwgKHBndGFibGVfdClhZGRyKTsKJiM0Mzt9CiYjNDM7CiAvKiBjb250ZXh0IGhhbmRsaW5nIC0gYSBkeW5hbWljYWxseSBzaXplZCBwb29sIGlzIHVzZWQgKi8KICNkZWZpbmUgTk9fQ09OVEVYVAktMQogCmRpZmYgLS1naXQgYS9hcmNoL3VtL0tjb25maWcgYi9hcmNoL3VtL0tjb25maWcKaW5kZXggZDk1NDFkMTNkOWViMC4uOTRiOGZmNzBmNTc4YiAxMDA2NDQKLS0tIGEvYXJjaC91bS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvdW0vS2NvbmZpZwpAQCAtNDQsNyAmIzQzOzQ0LDYgQEAgY29uZmlnIFVNTAogCXNlbGVjdCBIQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFMKIAlzZWxlY3QgVEhSRUFEX0lORk9fSU5fVEFTSwogCXNlbGVjdCBTUEFSU0VfSVJRCi0Jc2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUKIAogY29uZmlnIE1NVQogCWJvb2wKZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcgYi9hcmNoL3g4Ni9LY29uZmlnCmluZGV4IGE4YzNiM2QzMWEyNzYuLjZlNWU0NjJlYzA1OWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvS2NvbmZpZwpAQCAtMjgzLDcgJiM0MzsyODMsNiBAQCBjb25maWcgWDg2CiAJc2VsZWN0IEhBVkVfUEVSRl9SRUdTCiAJc2VsZWN0IEhBVkVfUEVSRl9VU0VSX1NUQUNLX0RVTVAKIAlzZWxlY3QgQVNZTkNfS0VSTkVMX1BHVEFCTEVfRlJFRQlpZiBJT01NVV9TVkEKLQlzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRQogCXNlbGVjdCBNTVVfR0FUSEVSX01FUkdFX1ZNQVMKIAlzZWxlY3QgSEFWRV9QT1NJWF9DUFVfVElNRVJTX1RBU0tfV09SSwogCXNlbGVjdCBIQVZFX1JFR1NfQU5EX1NUQUNLX0FDQ0VTU19BUEkKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3RsYi5oIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vdGxiLmgKaW5kZXggOGMzY2ViNDI3MDE4MC4uNmZiN2I3ODE1NGY2MiAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vdGxiLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vdGxiLmgKQEAgLTE2LDcgJiM0MzsxNiw3IEBACiAKICNpbmNsdWRlICZsdDthc20tZ2VuZXJpYy90bGIuaCZndDsKIAotI2RlZmluZSBfX3B0ZV9mcmVlX3RsYih0bGIsIHB0ZSwgYWRkcmVzcykJcHRlX2ZyZWUoKHRsYiktJmd0O21tLCBwdGUpCiYjNDM7I2RlZmluZSBfX3B0ZV9mcmVlX3RsYih0bGIsIHB0ZSwgYWRkcmVzcykJdGxiX3JlbW92ZV9wdGRlc2MoKHRsYiksIHBhZ2VfcHRkZXNjKHB0ZSkpCiAKIHZvaWQgY2hlY2tfdGxiX3Nhbml0eSh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmgKaW5kZXggYmRjYzI3NzhhYzY0Zi4uMDQ0ZGFiYzFmZTljYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3RsYi5oCkBAIC02NywxMSAmIzQzOzY3LDggQEAKICAqICAtIHRsYl9yZW1vdmVfdGFibGUoKQogICoKICAqICAgIHRsYl9yZW1vdmVfdGFibGUoKSBpcyB0aGUgYmFzaWMgcHJpbWl0aXZlIHRvIGZyZWUgcGFnZS10YWJsZSBkaXJlY3RvcmllcwotICogICAgKF9fcCpfZnJlZV90bGIoKSkuICBJbiBpdCYjMzk7cyBtb3N0IHByaW1pdGl2ZSBmb3JtIGl0IGlzIGFuIGFsaWFzIGZvcgotICogICAgdGxiX3JlbW92ZV9wYWdlKCkgYmVsb3csIGZvciB3aGVuIHBhZ2UgZGlyZWN0b3JpZXMgYXJlIHBhZ2VzIGFuZCBoYXZlIG5vCi0gKiAgICBhZGRpdGlvbmFsIGNvbnN0cmFpbnRzLgotICoKLSAqICAgIFNlZSBhbHNvIE1NVV9HQVRIRVJfVEFCTEVfRlJFRSBhbmQgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRS4KJiM0MzsgKiAgICAoX19wKl9mcmVlX3RsYigpKS4gIFBhZ2UgZGlyZWN0b3JpZXMgYXJlIGZyZWVkIGFmdGVyIGFuIFJDVSBncmFjZQomIzQzOyAqICAgIHBlcmlvZCAtIHNlZSB0aGUgY29tbWVudCBpbiBtbS9tbXVfZ2F0aGVyLmMuCiAgKgogICogIC0gdGxiX3JlbW92ZV9wYWdlKCkgLyB0bGJfcmVtb3ZlX3BhZ2Vfc2l6ZSgpCiAgKiAgLSBfX3RsYl9yZW1vdmVfZm9saW9fcGFnZXMoKSAvIF9fdGxiX3JlbW92ZV9wYWdlX3NpemUoKQpAQCAtMTUxLDI0ICYjNDM7MTQ4LDE1IEBACiAgKiAgVGhpcyBtaWdodCBiZSB1c2VmdWwgaWYgeW91ciBhcmNoaXRlY3R1cmUgaGFzIHNpemUgc3BlY2lmaWMgVExCCiAgKiAgaW52YWxpZGF0aW9uIGluc3RydWN0aW9ucy4KICAqCi0gKiAgTU1VX0dBVEhFUl9UQUJMRV9GUkVFCi0gKgotICogIFRoaXMgcHJvdmlkZXMgdGxiX3JlbW92ZV90YWJsZSgpLCB0byBiZSB1c2VkIGluc3RlYWQgb2YgdGxiX3JlbW92ZV9wYWdlKCkKLSAqICBmb3IgcGFnZSBkaXJlY3RvcmVzIChfX3AqX2ZyZWVfdGxiKCkpLgotICoKLSAqICBVc2VmdWwgaWYgeW91ciBhcmNoaXRlY3R1cmUgaGFzIG5vbi1wYWdlIHBhZ2UgZGlyZWN0b3JpZXMuCiYjNDM7ICogIFBhZ2UgZGlyZWN0b3JpZXMgKF9fcCpfZnJlZV90bGIoKSkgYXJlIGFsd2F5cyBmcmVlZCB2aWEgdGxiX3JlbW92ZV90YWJsZSgpLAomIzQzOyAqICBhZnRlciBhbiBSQ1UgZ3JhY2UgcGVyaW9kIChzZWUgbW0vbW11X2dhdGhlci5jKS4KICAqCi0gKiAgV2hlbiB1c2VkLCBhbiBhcmNoaXRlY3R1cmUgaXMgZXhwZWN0ZWQgdG8gcHJvdmlkZSBfX3RsYl9yZW1vdmVfdGFibGUoKSBvcgotICogIHVzZSB0aGUgZ2VuZXJpYyBfX3RsYl9yZW1vdmVfdGFibGUoKSwgd2hpY2ggZG9lcyB0aGUgYWN0dWFsIGZyZWVpbmcgb2YgdGhlc2UKLSAqICBwYWdlcy4KJiM0MzsgKiBUaGlzIHNlcmlhbGlzZXMgYWdhaW5zdCBzb2Z0d2FyZSBwYWdlLXRhYmxlIHdhbGtlcnMsIGluY2x1ZGluZyBhcmNoaXRlY3R1cmVzCiYjNDM7ICogd2hpY2ggZG8gbm90IHVzZSBJUElzIGZvciByZW1vdGUgVExCIGludmFsaWRhdGVzLgogICoKLSAqICBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFCi0gKgotICogIExpa2UgTU1VX0dBVEhFUl9UQUJMRV9GUkVFLCBhbmQgYWRkcyBzZW1pLVJDVSBzZW1hbnRpY3MgdG8gdGhlIGZyZWUgKHNlZQotICogIGNvbW1lbnQgYmVsb3cpLgotICoKLSAqICBVc2VmdWwgaWYgeW91ciBhcmNoaXRlY3R1cmUgZG9lc24mIzM5O3QgdXNlIElQSXMgZm9yIHJlbW90ZSBUTEIgaW52YWxpZGF0ZXMKLSAqICBhbmQgdGhlcmVmb3JlIGRvZXNuJiMzOTt0IG5hdHVyYWxseSBzZXJpYWxpemUgd2l0aCBzb2Z0d2FyZSBwYWdlLXRhYmxlIHdhbGtlcnMuCiYjNDM7ICogIEFuIGFyY2hpdGVjdHVyZSBpcyBleHBlY3RlZCB0byBwcm92aWRlIF9fdGxiX3JlbW92ZV90YWJsZSgpIChzZWUKJiM0MzsgKiAgSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEUpIG9yIHVzZSB0aGUgZ2VuZXJpYyBfX3RsYl9yZW1vdmVfdGFibGUoKSwgd2hpY2gKJiM0MzsgKiAgZG9lcyB0aGUgYWN0dWFsIGZyZWVpbmcgb2YgdGhlc2UgcGFnZXMuCiAgKgogICogIE1NVV9HQVRIRVJfTk9fRkxVU0hfQ0FDSEUKICAqCkBAIC0yMDAsMTIgJiM0MzsxODgsOCBAQAogICogIHZhcmlvdXMgcHRlcF9nZXRfYW5kX2NsZWFyKCkgZnVuY3Rpb25zLgogICovCiAKLSNpZmRlZiBDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFCi0KIHN0cnVjdCBtbXVfdGFibGVfYmF0Y2ggewotI2lmZGVmIENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFCiAJc3RydWN0IHJjdV9oZWFkCQlyY3U7Ci0jZW5kaWYKIAl1bnNpZ25lZCBpbnQJCW5yOwogCXZvaWQJCQkqdGFibGVzW107CiB9OwpAQCAtMjI0LDIzICYjNDM7MjA4LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZSh2b2lkICp0YWJsZSkKIAogZXh0ZXJuIHZvaWQgdGxiX3JlbW92ZV90YWJsZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCB2b2lkICp0YWJsZSk7CiAKLSNlbHNlIC8qICFDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfcmVtb3ZlX3BhZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHBhZ2UgKnBhZ2UpOwotLyoKLSAqIFdpdGhvdXQgTU1VX0dBVEhFUl9UQUJMRV9GUkVFIHRoZSBhcmNoaXRlY3R1cmUgaXMgYXNzdW1lZCB0byBoYXZlIHBhZ2UgYmFzZWQKLSAqIHBhZ2UgZGlyZWN0b3JpZXMgYW5kIHdlIGNhbiB1c2UgdGhlIG5vcm1hbCBwYWdlIGJhdGNoaW5nIHRvIGZyZWUgdGhlbS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIHRsYl9yZW1vdmVfdGFibGUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgdm9pZCAqdGFibGUpCi17Ci0Jc3RydWN0IHB0ZGVzYyAqcHRkZXNjID0gKHN0cnVjdCBwdGRlc2MgKil0YWJsZTsKLQotCXBhZ2V0YWJsZV9kdG9yKHB0ZGVzYyk7Ci0JdGxiX3JlbW92ZV9wYWdlKHRsYiwgcHRkZXNjX3BhZ2UocHRkZXNjKSk7Ci19Ci0jZW5kaWYgLyogQ09ORklHX01NVV9HQVRIRVJfVEFCTEVfRlJFRSAqLwotCi0jaWZkZWYgQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUKIC8qCiAgKiBUaGlzIGFsbG93cyBhbiBhcmNoaXRlY3R1cmUgdGhhdCBkb2VzIG5vdCB1c2UgdGhlIGxpbnV4IHBhZ2UtdGFibGVzIGZvcgogICogaGFyZHdhcmUgdG8gc2tpcCB0aGUgVExCSSB3aGVuIGZyZWVpbmcgcGFnZSB0YWJsZXMuCkBAIC0yNTMsMTkgJiM0MzsyMjAsNiBAQCB2b2lkIHRsYl9yZW1vdmVfdGFibGVfc3luY19vbmUodm9pZCk7CiAKIHZvaWQgdGxiX3JlbW92ZV90YWJsZV9zeW5jX3JjdSh2b2lkKTsKIAotI2Vsc2UKLQotI2lmZGVmIHRsYl9uZWVkc190YWJsZV9pbnZhbGlkYXRlCi0jZXJyb3IgdGxiX25lZWRzX3RhYmxlX2ludmFsaWRhdGUoKSByZXF1aXJlcyBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFCi0jZW5kaWYKLQotc3RhdGljIGlubGluZSB2b2lkIHRsYl9yZW1vdmVfdGFibGVfc3luY19vbmUodm9pZCkgeyB9Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfcmN1KHZvaWQpIHsgfQotCi0jZW5kaWYgLyogQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgKi8KLQotCiAjaWZuZGVmIENPTkZJR19NTVVfR0FUSEVSX05PX0dBVEhFUgogLyoKICAqIElmIHdlIGNhbiYjMzk7dCBhbGxvY2F0ZSBhIHBhZ2UgdG8gbWFrZSBhIGJpZyBiYXRjaCBvZiBwYWdlIHBvaW50ZXJzCkBAIC0zMjUsOSAmIzQzOzI3OSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfZmx1c2hfcm1hcHMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0CiBzdHJ1Y3QgbW11X2dhdGhlciB7CiAJc3RydWN0IG1tX3N0cnVjdAkqbW07CiAKLSNpZmRlZiBDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFCiAJc3RydWN0IG1tdV90YWJsZV9iYXRjaAkqYmF0Y2g7Ci0jZW5kaWYKIAogCXVuc2lnbmVkIGxvbmcJCXN0YXJ0OwogCXVuc2lnbmVkIGxvbmcJCWVuZDsKZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnCmluZGV4IGMxZGRmNTljMGQ3MWEuLmJjN2JlZmFmYjQ3YjUgMTAwNjQ0Ci0tLSBhL21tL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvbW0vS2NvbmZpZwpAQCAtMTQ2NSw3ICYjNDM7MTQ2NSw3IEBAIGNvbmZpZyBIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRQogCiBjb25maWcgUFRfUkVDTEFJTQogCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgJmFtcDsmYW1wOyAhSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEUKJiM0MzsJZGVwZW5kcyBvbiBNTVUgJmFtcDsmYW1wOyAhSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEUKIAloZWxwCiAJICBUcnkgdG8gcmVjbGFpbSBlbXB0eSB1c2VyIHBhZ2UgdGFibGUgcGFnZXMgaW4gcGF0aHMgb3RoZXIgdGhhbiBtdW5tYXAKIAkgIGFuZCBleGl0X21tYXAgcGF0aC4KZGlmZiAtLWdpdCBhL21tL2d1cC5jIGIvbW0vZ3VwLmMKaW5kZXggZWI4OThlYTFlZTIyZS4uNjNiNDM1ZWM2MDVjOCAxMDA2NDQKLS0tIGEvbW0vZ3VwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZ3VwLmMKQEAgLTI3MDAsOCAmIzQzOzI3MDAsOSBAQCBFWFBPUlRfU1lNQk9MKGdldF91c2VyX3BhZ2VzX3VubG9ja2VkKTsKICAqIEJlZm9yZSBhY3RpdmF0aW5nIHRoaXMgY29kZSwgcGxlYXNlIGJlIGF3YXJlIHRoYXQgdGhlIGZvbGxvd2luZyBhc3N1bXB0aW9ucwogICogYXJlIGN1cnJlbnRseSBtYWRlOgogICoKLSAqICAqKSBFaXRoZXIgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSBpcyBlbmFibGVkLCBhbmQgdGxiX3JlbW92ZV90YWJsZSgpIGlzIHVzZWQgdG8KLSAqICBmcmVlIHBhZ2VzIGNvbnRhaW5pbmcgcGFnZSB0YWJsZXMgb3IgVExCIGZsdXNoaW5nIHJlcXVpcmVzIElQSSBicm9hZGNhc3QuCiYjNDM7ICogICopIHRsYl9yZW1vdmVfdGFibGUoKSBpcyB1c2VkIHRvIGZyZWUgcGFnZXMgY29udGFpbmluZyBwYWdlIHRhYmxlcywgd2l0aAomIzQzOyAqICB0aGUgZnJlZSBkZWZlcnJlZCB1bnRpbCBhbiBSQ1UgZ3JhY2UgcGVyaW9kIGhhcyBlbGFwc2VkIChzZWUKJiM0MzsgKiAgbW0vbW11X2dhdGhlci5jKS4KICAqCiAgKiAgKikgcHRlcyBjYW4gYmUgcmVhZCBhdG9taWNhbGx5IGJ5IHRoZSBhcmNoaXRlY3R1cmUuCiAgKgpkaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmMKaW5kZXggNTQ0OTRjM2ZhOTgzNS4uNTA1ZjdiNjJmZjI4MSAxMDA2NDQKLS0tIGEvbW0vaHVnZV9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jCkBAIC0yNDc2LDcgJiM0MzsyNDc2LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHphcF9kZXBvc2l0ZWRfdGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQpCiAJcGd0YWJsZV90IHBndGFibGU7CiAKIAlwZ3RhYmxlID0gcGd0YWJsZV90cmFuc19odWdlX3dpdGhkcmF3KG1tLCBwbWQpOwotCXB0ZV9mcmVlKG1tLCBwZ3RhYmxlKTsKJiM0MzsJcHRlX2ZyZWVfZGVmZXIobW0sIHBndGFibGUpOwogCW1tX2RlY19ucl9wdGVzKG1tKTsKIH0KIApkaWZmIC0tZ2l0IGEvbW0vbW11X2dhdGhlci5jIGIvbW0vbW11X2dhdGhlci5jCmluZGV4IDM5ODVkODU2ZGU3ZjkuLjJhNzJhOTY4Njc3M2EgMTAwNjQ0Ci0tLSBhL21tL21tdV9nYXRoZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tbXVfZ2F0aGVyLmMKQEAgLTIxOCw4ICYjNDM7MjE4LDYgQEAgYm9vbCBfX3RsYl9yZW1vdmVfcGFnZV9zaXplKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgcGFnZV8KIAogI2VuZGlmIC8qIE1NVV9HQVRIRVJfTk9fR0FUSEVSICovCiAKLSNpZmRlZiBDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFCi0KIHN0YXRpYyB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZV9mcmVlKHN0cnVjdCBtbXVfdGFibGVfYmF0Y2ggKmJhdGNoKQogewogCWludCBpOwpAQCAtMjMwLDEwICYjNDM7MjI4LDggQEAgc3RhdGljIHZvaWQgX190bGJfcmVtb3ZlX3RhYmxlX2ZyZWUoc3RydWN0IG1tdV90YWJsZV9iYXRjaCAqYmF0Y2gpCiAJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWJhdGNoKTsKIH0KIAotI2lmZGVmIENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFCi0KIC8qCi0gKiBTZW1pIFJDVSBmcmVlaW5nIG9mIHRoZSBwYWdlIGRpcmVjdG9yaWVzLgomIzQzOyAqIFJDVSBmcmVlaW5nIG9mIHRoZSBwYWdlIGRpcmVjdG9yaWVzLgogICoKICAqIFRoaXMgaXMgbmVlZGVkIGJ5IHNvbWUgYXJjaGl0ZWN0dXJlcyB0byBpbXBsZW1lbnQgc29mdHdhcmUgcGFnZXRhYmxlIHdhbGtlcnMuCiAgKgpAQCAtMjU5LDEzICYjNDM7MjU1LDEzIEBAIHN0YXRpYyB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZV9mcmVlKHN0cnVjdCBtbXVfdGFibGVfYmF0Y2ggKmJhdGNoKQogICogbWVhbnMuCiAgKgogICogV2hhdCB3ZSBkbyBpcyBiYXRjaCB0aGUgZnJlZWQgZGlyZWN0b3J5IHBhZ2VzICh0YWJsZXMpIGFuZCBSQ1UgZnJlZSB0aGVtLgotICogV2UgdXNlIHRoZSBzY2hlZCBSQ1UgdmFyaWFudCwgYXMgdGhhdCBndWFyYW50ZWVzIHRoYXQgSVJRL3ByZWVtcHQgZGlzYWJsaW5nCi0gKiBob2xkcyBvZmYgZ3JhY2UgcGVyaW9kcy4KJiM0MzsgKiBEaXNhYmxpbmcgSVJRcyBvciBwcmVlbXB0aW9uIGhvbGRzIG9mZiBSQ1UgZ3JhY2UgcGVyaW9kcywgc28gdGhpcyBwcm90ZWN0cwomIzQzOyAqIGJvdGggcmN1X3JlYWRfbG9jaygpIGFuZCBJUlEtZGlzYWJsaW5nIHdhbGtlcnMuCiAgKgogICogSG93ZXZlciwgaW4gb3JkZXIgdG8gYmF0Y2ggdGhlc2UgcGFnZXMgd2UgbmVlZCB0byBhbGxvY2F0ZSBzdG9yYWdlLCB0aGlzCiAgKiBhbGxvY2F0aW9uIGlzIGRlZXAgaW5zaWRlIHRoZSBNTSBjb2RlIGFuZCBjYW4gdGh1cyBlYXNpbHkgZmFpbCBvbiBtZW1vcnkKLSAqIHByZXNzdXJlLiBUbyBndWFyYW50ZWUgcHJvZ3Jlc3Mgd2UgZmFsbCBiYWNrIHRvIHNpbmdsZSB0YWJsZSBmcmVlaW5nLCBzZWUKLSAqIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0bGJfcmVtb3ZlX3RhYmxlX29uZSgpLgomIzQzOyAqIHByZXNzdXJlLiBUbyBndWFyYW50ZWUgcHJvZ3Jlc3Mgd2UgZmFsbCBiYWNrIHRvIHNpbmdsZSB0YWJsZSBmcmVlaW5nLCB3aGljaAomIzQzOyAqIGlzIGFsc28gUkNVLWRlZmVycmVkIC0gc2VlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0bGJfcmVtb3ZlX3RhYmxlX29uZSgpLgogICoKICAqLwogCkBAIC0zMTUsMTUgJiM0MzszMTEsNiBAQCB2b2lkIHRsYl9yZW1vdmVfdGFibGVfc3luY19yY3Uodm9pZCkKIAlzeW5jaHJvbml6ZV9yY3UoKTsKIH0KIAotI2Vsc2UgLyogIUNPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFICovCi0KLXN0YXRpYyB2b2lkIHRsYl9yZW1vdmVfdGFibGVfZnJlZShzdHJ1Y3QgbW11X3RhYmxlX2JhdGNoICpiYXRjaCkKLXsKLQlfX3RsYl9yZW1vdmVfdGFibGVfZnJlZShiYXRjaCk7Ci19Ci0KLSNlbmRpZiAvKiBDT05GSUdfTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSAqLwotCiAvKgogICogSWYgd2Ugd2FudCB0bGJfcmVtb3ZlX3RhYmxlKCkgdG8gaW1wbHkgVExCIGludmFsaWRhdGVzLgogICovCkBAIC00MDMsMTMgJiM0MzszOTAsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdGxiX3RhYmxlX2luaXQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYikKIAl0bGItJmd0O2JhdGNoID0gTlVMTDsKIH0KIAotI2Vsc2UgLyogIUNPTkZJR19NTVVfR0FUSEVSX1RBQkxFX0ZSRUUgKi8KLQotc3RhdGljIGlubGluZSB2b2lkIHRsYl90YWJsZV9mbHVzaChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfdGFibGVfaW5pdChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiKSB7IH0KLQotI2VuZGlmIC8qIENPTkZJR19NTVVfR0FUSEVSX1RBQkxFX0ZSRUUgKi8KLQogc3RhdGljIHZvaWQgdGxiX2ZsdXNoX21tdV9mcmVlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIpCiB7CiAJdGxiX3RhYmxlX2ZsdXNoKHRsYik7CmRpZmYgLS1naXQgYS9tbS9wZ3RhYmxlLWdlbmVyaWMuYyBiL21tL3BndGFibGUtZ2VuZXJpYy5jCmluZGV4IGI5MWIxYTk4MDI5YzcuLmZmOGZmMzcwNjQ4NTMgMTAwNjQ0Ci0tLSBhL21tL3BndGFibGUtZ2VuZXJpYy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3BndGFibGUtZ2VuZXJpYy5jCkBAIC0zODYsOSAmIzQzOzM4NiwyMSBAQCBwdGVfdCAqcHRlX29mZnNldF9tYXBfcndfbm9sb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLAogICogYmUgcmVhZC1vbmx5L3JlYWQtd3JpdGUgcHJvdGVjdGVkLgogICoKICAqIE5vdGUgdGhhdCBmcmVlX3BndGFibGVzKCksIHVzZWQgYWZ0ZXIgdW5tYXBwaW5nIGRldGFjaGVkIHZtYXMsIG9yIHdoZW4KLSAqIGV4aXRpbmcgdGhlIHdob2xlIG1tLCBkb2VzIG5vdCB0YWtlIHBhZ2UgdGFibGUgbG9jayBiZWZvcmUgZnJlZWluZyBhIHBhZ2UKLSAqIHRhYmxlLCBhbmQgbWF5IG5vdCB1c2UgUkNVIGF0IGFsbDogJiMzNDtvdXRzaWRlcnMmIzM0OyBsaWtlIGtodWdlcGFnZWQgc2hvdWxkIGF2b2lkCi0gKiBwdGVfb2Zmc2V0X21hcCgpIGFuZCBjbyBvbmNlIHRoZSB2bWEgaXMgZGV0YWNoZWQgZnJvbSBtbSBvciBtbV91c2VycyBpcyB6ZXJvLgomIzQzOyAqIGV4aXRpbmcgdGhlIHdob2xlIG1tLCBkb2VzIG5vdCB0YWtlIHRoZSBwYWdlIHRhYmxlIGxvY2sgYmVmb3JlIGZyZWVpbmcgYQomIzQzOyAqIHRhYmxlLgomIzQzOyAqCiYjNDM7ICogSG93ZXZlciwgdGhlIFBNRCBlbnRyeSBpcyBjbGVhcmVkIGZpcnN0LCBhbmQgdGhlIHRhYmxlIGZyZWVkIG9ubHkgYWZ0ZXIKJiM0MzsgKiBhbiBSQ1UgZ3JhY2UgcGVyaW9kLCBzbyBhIHdhbGtlciB0aGF0IG1hcHBlZCB0aGUgdGFibGUgdW5kZXIKJiM0MzsgKiByY3VfcmVhZF9sb2NrKCkgc3RheXMgc2FmZSwgYW5kIHRoZSBwbWRfc2FtZSgpIHJlY2hlY2sgaW4KJiM0MzsgKiBwdGVfb2Zmc2V0X21hcF9sb2NrKCkgZGV0ZWN0cyB0aGUgdGVhcmRvd24uCiYjNDM7ICoKJiM0MzsgKiBUaGVyZWZvcmUgaXQgaXMgc2FmZSBmb3IgJiMzNDtvdXRzaWRlcnMmIzM0OyBsaWtlIGtodWdlcGFnZWQgdG8gdXNlCiYjNDM7ICogcHRlX29mZnNldF9tYXAoKSBhbmQgY28uIGZvciBWTUFzIHRoYXQgbWlnaHQgYmUgdW5kZXJnb2luZyBwYWdlIHRhYmxlCiYjNDM7ICogdGVhcmRvd24uCiYjNDM7ICoKJiM0MzsgKiBOb3RlIHRoYXQgdGhlIFBHRCBpdHNlbGYgaXMgZnJlZWQgYXQgbW1kcm9wKCkgdGltZSwgbm90IHVuZGVyIFJDVSAtIHNvIHRoZQomIzQzOyAqIHdhbGtlciBtdXN0IGtlZXAgdGhlIG1tIGFsaXZlIHZpYSBtbWdyYWIoKS4gV2l0aCB0aGF0IGhlbGQsIHdhbGtpbmcgcmVtYWlucwomIzQzOyAqIHNhZmUgZXZlbiBvbmNlIG1tX3VzZXJzIGhhcyByZWFjaGVkIHplcm8uCiAgKi8KIHB0ZV90ICpwdGVfb2Zmc2V0X21hcF9sb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLAogCQkJICAgdW5zaWduZWQgbG9uZyBhZGRyLCBzcGlubG9ja190ICoqcHRscCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5OTUKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA1NDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogUkNVIFRhYmxlIEZyZWVpbmcqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZ29pbmcgb24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0JiMzOTtzIHNpbXBsaWZ5aW5nIFJDVSB0YWJsZSBmcmVlaW5nIGFjcm9zcyB0aGUgYm9hcmQuIFRoZSBnb2FsIHNlZW1zIHRvIGJlIHRvIG1ha2UgUkNVLWJhc2VkIHRhYmxlIGZyZWVpbmcgdGhlIHN0YW5kYXJkLCByZWdhcmRsZXNzIG9mIGFyY2hpdGVjdHVyZSwgaW5zdGVhZCBvZiBjb25kaXRpb25hbGx5IGNvbXBpbGluZyBpdCBpbi4gV2UmIzM5O3JlIGdldHRpbmcgcmlkIG9mIGBDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFYCBhbmQgYENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFYCwgd2hpY2ggc3VnZ2VzdHMgYSBtb3ZlIHRvd2FyZHMgYSB1bmlmaWVkIGFwcHJvYWNoLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4gTG9va2luZyBhdCB0aGUgZGlmZiwgSSBzZWUgY2hhbmdlcyBzY2F0dGVyZWQgYWNyb3NzIHRoZSBjb2RlYmFzZS4gYGFyY2gvS2NvbmZpZ2AgZmlsZXMgYXJlIGJlaW5nIHVwZGF0ZWQsIGFuZCBzZXZlcmFsIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBgaW5jbHVkZS9hc20vcGdhbGxvYy5oYCBmaWxlcyBhcmUgYmVpbmcgdXBkYXRlZCB0byB1c2UgYHRsYl9yZW1vdmVfcHRkZXNjYCwgcmF0aGVyIHRoYW4gY29uZGl0aW9uYWwgY2FsbHMgdG8gYF9fcHVkX2ZyZWVfdGxiYCwgYF9fcG1kX2ZyZWVfdGxiYCwgYW5kIGBfX3B0ZV9mcmVlX3RsYmAuIFRoYXQgcmVpbmZvcmNlcyB0aGUgaWRlYSBvZiBzdGFuZGFyZGl6aW5nIG9uIHRoZSBSQ1UgbWVjaGFuaXNtLiBUaGUgYGluY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmhgIGlzIGFsc28gcmVtb3ZpbmcgdGhlIGBpZmRlZmBzIHRoYXQgdXNlZCB0byBjb250cm9sIHRoZSBgc3RydWN0IG1tdV90YWJsZV9iYXRjaGAgYW5kIFJDVSB0YWJsZSByZW1vdmFsLgoKRnVydGhlciBkb3duIHRoZSBsaW5lLCBJJiMzOTttIG5vdGluZyBjaGFuZ2VzIHRvIGBtbS9LY29uZmlnYCAodGhlIGBQVF9SRUNMQUlNYCBvcHRpb24gbG9va3MgbGlrZSBpdCYjMzk7cyBiZWluZyBjb25kaXRpb25lZCBvbiB0aGUgTU1VIGFuZCBhbiBhcmNoaXRlY3R1cmUgbm90IGhhdmluZyBgSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEVgKSwgYW5kIGNvbW1lbnRzIGluIGBtbS9ndXAuY2AgYW5kIGBtbS9wZ3RhYmxlLWdlbmVyaWMuY2AuIFRoZSBtb3N0IGludGVyZXN0aW5nIHBhcnQsIHRob3VnaCwgaXMgdGhlIGNoYW5nZSB0byBgbW0vaHVnZV9tZW1vcnkuY2AuIGB6YXBfZGVwb3NpdGVkX3RhYmxlYCBpcyBub3cgdXNpbmcgYHB0ZV9mcmVlX2RlZmVyYCBpbnN0ZWFkIG9mIGBwdGVfZnJlZWAuIFRoaXMgaXMgYSBjcnVjaWFsIHBvaW50LCBJIG5lZWQgdG8gY2hlY2sgZXhhY3RseSB3aGF0IGB6YXBfZGVwb3NpdGVkX3RhYmxlYCBkb2VzLCBhbmQgdW5kZXJzdGFuZCBgcHRlX2ZyZWVfZGVmZXJgIGluIHRoaXMgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGh1Z2UgcGFnZSBjb2RlIGlzIGFkb3B0aW5nIHRoZSBzYW1lIHN0cmF0ZWd5LgoKSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGhvdyBgcHRlX2ZyZWVfZGVmZXJgIGlzIGltcGxlbWVudGVkLiBJJiMzOTtsbCBhbHNvIHJlYWQgdXAgb24gYHphcF9kZXBvc2l0ZWRfdGFibGVgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgd2hhdCBpcyBoYXBwZW5pbmcgaGVyZS4gSSYjMzk7bSBnb2luZyB0byB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGNoZWNrIGBwdGVfZnJlZV9kZWZlcmAgYW5kIGB6YXBfZGVwb3NpdGVkX3RhYmxlYCwgYW5kIHRoZW4gSSB3aWxsIGJlIGFibGUgdG8gdmVyaWZ5IHRoYXQgbXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIGlzIGNvcnJlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHRlX2ZyZWVfZGVmZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BnYWxsb2MuaD00Mz1zdGF0aWMgaW5saW5lIHZvaWQgcHRlX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwdGVwYWdlKVxuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgtNDctXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGdhbGxvYy5oOjQ4Oi8qIGFyY2ggdXNlIHB0ZV9mcmVlX2RlZmVyKCkgaW1wbGVtZW50YXRpb24gaW4gYXJjaC9wb3dlcnBjL21tL3BndGFibGUtZnJhZy5jICovXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGdhbGxvYy5oOjQ5OiNkZWZpbmUgcHRlX2ZyZWVfZGVmZXIgcHRlX2ZyZWVfZGVmZXJcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmg6NTA6dm9pZCBwdGVfZnJlZV9kZWZlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHBndGFibGUpO1xuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BnYWxsb2MuaC01MS1cbi0tXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZS1mcmFnLmM9MTE3PXZvaWQgcHRlX2ZyYWdtZW50X2ZyZWUodW5zaWduZWQgbG9uZyAqdGFibGUsIGludCBrZXJuZWwpXG4tLVxuYXJjaC9wb3dlcnBjL21tL3BndGFibGUtZnJhZy5jLTEzMy0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZS1mcmFnLmM6MTM0OnZvaWQgcHRlX2ZyZWVfZGVmZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwZ3RhYmxlKVxuYXJjaC9wb3dlcnBjL21tL3BndGFibGUtZnJhZy5jLTEzNS17XG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BnYWxsb2MuaD0xNTE9c3RhdGljIGlubGluZSB2b2lkIHBtZF9wb3B1bGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGdhbGxvYy5oLTE2Ny1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmg6MTY4Oi8qIGFyY2ggdXNlIHB0ZV9mcmVlX2RlZmVyKCkgaW1wbGVtZW50YXRpb24gaW4gYXJjaC9zMzkwL21tL3BnYWxsb2MuYyAqL1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BnYWxsb2MuaDoxNjk6I2RlZmluZSBwdGVfZnJlZV9kZWZlciBwdGVfZnJlZV9kZWZlclxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BnYWxsb2MuaDoxNzA6dm9pZCBwdGVfZnJlZV9kZWZlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHBndGFibGUpO1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BnYWxsb2MuaC0xNzEtXG4tLVxuYXJjaC9zMzkwL21tL3BnYWxsb2MuYz0xNDk9c3RhdGljIHZvaWQgcHRlX2ZyZWVfbm93KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbi0tXG5hcmNoL3MzOTAvbW0vcGdhbGxvYy5jLTE1NS1cbmFyY2gvczM5MC9tbS9wZ2FsbG9jLmM6MTU2OnZvaWQgcHRlX2ZyZWVfZGVmZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwZ3RhYmxlKVxuYXJjaC9zMzkwL21tL3BnYWxsb2MuYy0xNTcte1xuLS1cbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY182NC5oPTY2PXZvaWQgcHRlX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwdGVwYWdlKTtcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY182NC5oLTY3LVxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzY0Lmg6Njg6LyogYXJjaCB1c2UgcHRlX2ZyZWVfZGVmZXIoKSBpbXBsZW1lbnRhdGlvbiBpbiBhcmNoL3NwYXJjL21tL2luaXRfNjQuYyAqL1xuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzY0Lmg6Njk6I2RlZmluZSBwdGVfZnJlZV9kZWZlciBwdGVfZnJlZV9kZWZlclxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzY0Lmg6NzA6dm9pZCBwdGVfZnJlZV9kZWZlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHBndGFibGUpO1xuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzY0LmgtNzEtXG4tLVxuYXJjaC9zcGFyYy9tbS9pbml0XzY0LmM9Mjg2Nj1zdGF0aWMgdm9pZCBwdGVfZnJlZV9ub3coc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuLS1cbmFyY2gvc3BhcmMvbW0vaW5pdF82NC5jLTI4NzMtXG5hcmNoL3NwYXJjL21tL2luaXRfNjQuYzoyODc0OnZvaWQgcHRlX2ZyZWVfZGVmZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwZ3RhYmxlKVxuYXJjaC9zcGFyYy9tbS9pbml0XzY0LmMtMjg3NS17XG4tLVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg9MTE1PXN0YXRpYyBpbmxpbmUgdm9pZCBwdGVfdW5tYXAocHRlX3QgKnB0ZSlcbi0tXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0xMjAtXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaDoxMjE6dm9pZCBwdGVfZnJlZV9kZWZlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHBndGFibGUpO1xuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMTIyLVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MjQ3ND1zdGF0aWMgaW5saW5lIHZvaWQgemFwX2RlcG9zaXRlZF90YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTI0NzgtXHRwZ3RhYmxlID0gcGd0YWJsZV90cmFuc19odWdlX3dpdGhkcmF3KG1tLCBwbWQpO1xubW0vaHVnZV9tZW1vcnkuYzoyNDc5Olx0cHRlX2ZyZWVfZGVmZXIobW0sIHBndGFibGUpO1xubW0vaHVnZV9tZW1vcnkuYy0yNDgwLVx0bW1fZGVjX25yX3B0ZXMobW0pO1xuLS1cbm1tL2todWdlcGFnZWQuYz0xODYyPXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yMDY3LVx0cGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2UobW0sIGhhZGRyLCBwZ3RfcG1kKTtcbm1tL2todWdlcGFnZWQuYzoyMDY4Olx0cHRlX2ZyZWVfZGVmZXIobW0sIHBtZF9wZ3RhYmxlKHBndF9wbWQpKTtcbm1tL2todWdlcGFnZWQuYy0yMDY5LVxuLS1cbm1tL2todWdlcGFnZWQuYz0yMTUxPXN0YXRpYyB2b2lkIHJldHJhY3RfcGFnZV90YWJsZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgcGdvZmYpXG4tLVxubW0va2h1Z2VwYWdlZC5jLTIyMjgtXHRcdFx0cGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2UobW0sIGFkZHIsIHBndF9wbWQpO1xubW0va2h1Z2VwYWdlZC5jOjIyMjk6XHRcdFx0cHRlX2ZyZWVfZGVmZXIobW0sIHBtZF9wZ3RhYmxlKHBndF9wbWQpKTtcbm1tL2todWdlcGFnZWQuYy0yMjMwLVx0XHR9XG4tLVxubW0vcGd0YWJsZS1nZW5lcmljLmM9MjIxPXBtZF90IHBtZHBfY29sbGFwc2VfZmx1c2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbi0tXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYy0yMzktXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYzoyNDA6LyogYXJjaCBkZWZpbmUgcHRlX2ZyZWVfZGVmZXIgaW4gYXNtL3BnYWxsb2MuaCBmb3IgaXRzIG93biBpbXBsZW1lbnRhdGlvbiAqL1xubW0vcGd0YWJsZS1nZW5lcmljLmM6MjQxOiNpZm5kZWYgcHRlX2ZyZWVfZGVmZXJcbm1tL3BndGFibGUtZ2VuZXJpYy5jLTI0Mi1zdGF0aWMgdm9pZCBwdGVfZnJlZV9ub3coc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuLS1cbm1tL3BndGFibGUtZ2VuZXJpYy5jLTI0OS1cbm1tL3BndGFibGUtZ2VuZXJpYy5jOjI1MDp2b2lkIHB0ZV9mcmVlX2RlZmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcGd0YWJsZSlcbm1tL3BndGFibGUtZ2VuZXJpYy5jLTI1MS17XG4tLVxubW0vcGd0YWJsZS1nZW5lcmljLmMtMjU2LX1cbm1tL3BndGFibGUtZ2VuZXJpYy5jOjI1NzojZW5kaWYgLyogcHRlX2ZyZWVfZGVmZXIgKi9cbm1tL3BndGFibGUtZ2VuZXJpYy5jLTI1OC0jZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4NTMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA4ODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBGZWFzaWJpbGl0eSBBc3Nlc3NtZW50OiBSQ1UgUGFnZSBUYWJsZSBGcmVlaW5nKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggc2VyaWVzIGxvb2tzIGxpa2UgYSBzaWduaWZpY2FudCByZWZhY3RvciB0byBtYWtlIFJDVS1iYXNlZCBwYWdlIHRhYmxlIGZyZWVpbmcgdGhlIHN0YW5kYXJkIGFwcHJvYWNoIGFjcm9zcyBhbGwgYXJjaGl0ZWN0dXJlcy4gSXQmIzM5O3MgZXNzZW50aWFsbHkgdW5pZnlpbmcgdGhlIG1ldGhvZCBvZiBmcmVlaW5nIHBhZ2UgdGFibGVzIHVuZGVyIGBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFYCwgY2xlYW5pbmcgdXAgc29tZSBLY29uZmlnIG9wdGlvbnMgcmVsYXRlZCB0byB0YWJsZSBmcmVlaW5nLCBhbmQgdXBkYXRpbmcgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGltcGxlbWVudGF0aW9ucyB0byB1c2UgdGhpcyBnZW5lcmljIG1lY2hhbmlzbS4gVGhlIGB6YXBfZGVwb3NpdGVkX3RhYmxlYCBmdW5jdGlvbiBub3cgdXNlcyBgcHRlX2ZyZWVfZGVmZXJgLCB3aGljaCBpcyBhIGtleSBjaGFuZ2UuCgpNeSBmaXJzdCB0aG91Z2h0IGlzLCAmIzM0O0lzIHRoaXMgZnVuY3Rpb25hbGx5IHNpZ25pZmljYW50IGVub3VnaCB0byB3YXJyYW50IGZ1enppbmc/JiMzNDsgQmFzZWQgb24gdGhlIGd1aWRlbGluZXMsIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBpbXBhY3RzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBvciBhcmNoaXRlY3R1cmVzLiBMZXQmIzM5O3Mgc2VlLi4uCgpJJiMzOTttIHNlZWluZyBjaGFuZ2VzIGFjcm9zcyBhIGJ1bmNoIG9mIGNvcmUgTU0gY29kZSwgbGlrZSBgbW0vbW11X2dhdGhlci5jYCwgYG1tL2h1Z2VfbWVtb3J5LmNgLCBgaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaGAsIGFuZCBgbW0vS2NvbmZpZ2AsIGFuZCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29kZSBmb3IgdGhpbmdzIGxpa2UgQVJDLCBtNjhrLCBtaWNyb2JsYXplLCBzaCwgc3BhcmMsIHh0ZW5zYSwgYW5kIHg4Ni4gVGhpcyBpc24mIzM5O3QganVzdCBjb3NtZXRpYzsgaXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgdG8gaG93IHBhZ2UgdGFibGVzIGFyZSBtYW5hZ2VkIGFuZCBmcmVlZC4KClNwZWNpZmljYWxseToKCiogICBJbiBgbW0vaHVnZV9tZW1vcnkuY2AsIHRoZSBjcml0aWNhbCBjaGFuZ2UgaW4gYHphcF9kZXBvc2l0ZWRfdGFibGVgIG5vdyBkZWZlcnMgdGhlIGZyZWVpbmcgb2YgdGhlIGRlcG9zaXRlZCBwYWdlIHRhYmxlIHVzaW5nIFJDVSB2aWEgYHB0ZV9mcmVlX2RlZmVyYC4gVGhhdCYjMzk7cyBhIGh1Z2Ugc2hpZnQgZnJvbSBkaXJlY3QgZnJlZWluZy4KKiAgIEluIGBtbS9tbXVfZ2F0aGVyLmNgIGFuZCBgaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaGAsIGFsbCBhcmNoaXRlY3R1cmVzIGFyZSBub3cgdXNpbmcgUkNVLWJhY2tlZCB0YWJsZSBmcmVlaW5nLgoqICAgVGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgKGUuZy4sIG02OGssIHNwYXJjLCBhcmMsIGV0Yy4pIGFyZSBiZWluZyB1cGRhdGVkIHRvIHVzZSBgdGxiX3JlbW92ZV90YWJsZWAgb3Igc2ltaWxhciBSQ1UtYmFzZWQgZnVuY3Rpb25zIGluc3RlYWQgb2Ygc3luY2hyb25vdXMgZnJlZWluZyBpbiBgX19wdGVfZnJlZV90bGJgIC8gYF9fcG1kX2ZyZWVfdGxiYC4KKiAgIFRoZXJlIGFyZSBhcmNoaXRlY3R1cmFsIGNoYW5nZXMsIGxpa2Ugc3BpbmxvY2sgYWRqdXN0bWVudHMgYW5kIHJld3JpdHRlbiBmdW5jdGlvbnMgaW4gbTY4ayBhbmQgc3BhcmMuCgpTbywgeWVhaCwgdGhpcyBjbGVhcmx5IGFmZmVjdHMgY29yZSBNTSBjb2RlLCBwYWdlIHRhYmxlIHRlYXJkb3duLCBUSFAgemFwL2NvbGxhcHNlIGFuZCBUTEIgZ2F0aGVyIHRhYmxlIGZyZWVpbmchIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLgoKVGhlcmVmb3JlLCB0aGlzIHBhdGNoIHNlcmllcyB3YXJyYW50cyBhIGNsb3NlciBsb29rIGZvciBmdXp6aW5nIHBvdGVudGlhbC4gSXQgc2VlbXMgbGlrZSBhIGhpZ2gtdmFsdWUgdGFyZ2V0LiBOZXh0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBjb25maWcgb3B0aW9ucyBhcmUgcmVsZXZhbnQgYW5kIHdoYXQgZm9jdXMgc3ltYm9scyB3b3VsZCBiZSB1c2VmdWwuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgYXJvdW5kIGB6YXBfZGVwb3NpdGVkX3RhYmxlYCwgYHB0ZV9mcmVlX2RlZmVyYCwgYHRsYl9yZW1vdmVfdGFibGVgLCBhbmQgYHRsYl90YWJsZV9mbHVzaGAgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLCBgbW0vbW11X2dhdGhlci5jYCwgYW5kIGBtbS9wZ3RhYmxlLWdlbmVyaWMuY2AgdG8gbmFycm93IGRvd24gdGhlIHRlc3QgY2FzZSBmb2N1cy4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI0NjU6XHRcbjI0NjY6XHRcdGZvbGlvX21hcmtfbGF6eWZyZWUoZm9saW8pO1xuMjQ2NzpcdFx0cmV0ID0gdHJ1ZTtcbjI0Njg6XHRvdXQ6XG4yNDY5Olx0XHRzcGluX3VubG9jayhwdGwpO1xuMjQ3MDpcdG91dF91bmxvY2tlZDpcbjI0NzE6XHRcdHJldHVybiByZXQ7XG4yNDcyOlx0fVxuMjQ3MzpcdFxuMjQ3NDpcdHN0YXRpYyBpbmxpbmUgdm9pZCB6YXBfZGVwb3NpdGVkX3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKVxuMjQ3NTpcdHtcbjI0NzY6XHRcdHBndGFibGVfdCBwZ3RhYmxlO1xuMjQ3NzpcdFxuMjQ3ODpcdFx0cGd0YWJsZSA9IHBndGFibGVfdHJhbnNfaHVnZV93aXRoZHJhdyhtbSwgcG1kKTtcbjI0Nzk6XHRcdHB0ZV9mcmVlX2RlZmVyKG1tLCBwZ3RhYmxlKTtcbjI0ODA6XHRcdG1tX2RlY19ucl9wdGVzKG1tKTtcbjI0ODE6XHR9XG4yNDgyOlx0XG4yNDgzOlx0c3RhdGljIHZvaWQgemFwX2h1Z2VfcG1kX2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbjI0ODQ6XHRcdFx0cG1kX3QgcG1kdmFsLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIGlzX3ByZXNlbnQpXG4yNDg1Olx0e1xuMjQ4NjpcdFx0Y29uc3QgYm9vbCBpc19kZXZpY2VfcHJpdmF0ZSA9IGZvbGlvX2lzX2RldmljZV9wcml2YXRlKGZvbGlvKTtcbjI0ODc6XHRcbjI0ODg6XHRcdC8qIFByZXNlbnQgYW5kIGRldmljZSBwcml2YXRlIGZvbGlvcyBhcmUgcm1hcHBhYmxlLiAqL1xuMjQ4OTpcdFx0aWYgKGlzX3ByZXNlbnQgfHwgaXNfZGV2aWNlX3ByaXZhdGUpXG4yNDkwOlx0XHRcdGZvbGlvX3JlbW92ZV9ybWFwX3BtZChmb2xpbywgXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSwgdm1hKTtcbjI0OTE6XHRcbjI0OTI6XHRcdGlmIChmb2xpb190ZXN0X2Fub24oZm9saW8pKSB7XG4yNDkzOlx0XHRcdGFkZF9tbV9jb3VudGVyKG1tLCBNTV9BTk9OUEFHRVMsIC1IUEFHRV9QTURfTlIpO1xuMjQ5NDpcdFx0fSBlbHNlIHtcbjI0OTU6XHRcdFx0YWRkX21tX2NvdW50ZXIobW0sIG1tX2NvdW50ZXJfZmlsZShmb2xpbyksXG4yNDk2Olx0XHRcdFx0ICAgICAgIC1IUEFHRV9QTURfTlIpO1xuMjQ5NzpcdFxuMjQ5ODpcdFx0XHRpZiAoaXNfcHJlc2VudCBcdTAwMjZcdTAwMjYgcG1kX2RpcnR5KHBtZHZhbCkpXG4yNDk5Olx0XHRcdFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG4yNTAwOlx0XHRcdGlmIChpc19wcmVzZW50IFx1MDAyNlx1MDAyNiBwbWRfeW91bmcocG1kdmFsKSBcdTAwMjZcdTAwMjZcbjI1MDE6XHRcdFx0ICAgIGxpa2VseSh2bWFfaGFzX3JlY2VuY3kodm1hKSkpXG4yNTAyOlx0XHRcdFx0Zm9saW9fbWFya19hY2Nlc3NlZChmb2xpbyk7XG4yNTAzOlx0XHR9XG4yNTA0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwMzEKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlOgoKKipUcmFjaW5nIHRoZSBMaW5lYWdlIG9mIGB6YXBfZGVwb3NpdGVkX3RhYmxlYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIG9mIGB6YXBfZGVwb3NpdGVkX3RhYmxlYC4gSXQmIzM5O3MgYSBrZXkgZGF0YSBwb2ludCwgYW5kIEkgbmVlZCB0byBzZWUgd2hlcmUgaXQgb3JpZ2luYXRlcywgaG93IGl0JiMzOTtzIHVzZWQsIGFuZCBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBkZXBlbmRlbmNpZXMuIFRoZSBiZXN0IGZpcnN0IHN0ZXAgaXMgdG8gc2VlIGV4YWN0bHkgd2hlcmUgdGhpcyB0YWJsZSwgb3IgcmF0aGVyIGl0cyBuYW1lLCBpcyByZWZlcmVuY2VkIHdpdGhpbiB0aGUgY29kZWJhc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxscyBiZWluZyBtYWRlLiBLbm93aW5nIHRoZSBjYWxsIHN0YWNrIHdpbGwgbGV0IG1lIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIGludGVncmF0aW9uIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0uIEkmIzM5O2xsIHN0YXJ0IHdpdGggYSBzdHJhaWdodGZvcndhcmQgc2VhcmNoIGZvciBjYWxscy4gVGhpcyB3aWxsIHByb3ZpZGUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24sIGFsbG93aW5nIG1lIHRvIGJ1aWxkIGEgcHJvcGVyIG1lbnRhbCBtb2RlbCBvZiBpdHMgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3phcF9kZXBvc2l0ZWRfdGFibGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz0yNDAwPWJvb2wgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjQ3My1cbm1tL2h1Z2VfbWVtb3J5LmM6MjQ3NDpzdGF0aWMgaW5saW5lIHZvaWQgemFwX2RlcG9zaXRlZF90YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZClcbm1tL2h1Z2VfbWVtb3J5LmMtMjQ3NS17XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0yNTUxPWJvb2wgemFwX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjU4Mi1cdGlmIChoYXNfZGVwb3NpdClcbm1tL2h1Z2VfbWVtb3J5LmM6MjU4MzpcdFx0emFwX2RlcG9zaXRlZF90YWJsZShtbSwgcG1kKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMjU4NC1cbi0tXG5tbS9odWdlX21lbW9yeS5jPTMxODg9c3RhdGljIHZvaWQgX19zcGxpdF9odWdlX3BtZF9sb2NrZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zMjE2LVx0XHRpZiAoYXJjaF9uZWVkc19wZ3RhYmxlX2RlcG9zaXQoKSlcbm1tL2h1Z2VfbWVtb3J5LmM6MzIxNzpcdFx0XHR6YXBfZGVwb3NpdGVkX3RhYmxlKG1tLCBwbWQpO1xubW0vaHVnZV9tZW1vcnkuYy0zMjE4LVx0XHRpZiAodm1hX2lzX3NwZWNpYWxfaHVnZSh2bWEpKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MzU2MT1zdGF0aWMgYm9vbCBfX2Rpc2NhcmRfYW5vbl9mb2xpb19wbWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzYxNC1cdGZvbGlvX3JlbW92ZV9ybWFwX3BtZChmb2xpbywgcG1kX3BhZ2Uob3JpZ19wbWQpLCB2bWEpO1xubW0vaHVnZV9tZW1vcnkuYzozNjE1Olx0emFwX2RlcG9zaXRlZF90YWJsZShtbSwgcG1kcCk7XG5tbS9odWdlX21lbW9yeS5jLTM2MTYtXHRhZGRfbW1fY291bnRlcihtbSwgTU1fQU5PTlBBR0VTLCAtSFBBR0VfUE1EX05SKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTczMwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuCgoqKkV4YW1pbmluZyBIdWdlIFBhZ2UgVW5tYXBwaW5nIGFuZCBHYXRoZXIgT3BlcmF0aW9ucyoqCgpSaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgaHVnZSBwYWdlcyBhcmUgdW5tYXBwZWQgd2l0aGluIHRoZSBrZXJuZWwuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYHphcF9odWdlX3BtZGAgd2l0aGluIGBtbS9odWdlX21lbW9yeS5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGxvZ2ljIGZvciByZW1vdmluZyBhIGh1Z2UgcGFnZSYjMzk7cyBtYXBwaW5nLiBJJiMzOTtsbCBuZWVkIHRvIHNjcnV0aW5pemUgaG93IGl0IGhhbmRsZXMgdGhlIGRldGFpbHMsIGVzcGVjaWFsbHkgcmVnYXJkaW5nIHBvdGVudGlhbCBUTEIgaW52YWxpZGF0aW9uIGFuZCBzeW5jaHJvbml6YXRpb24uCgpUaGVuLCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQsIEkgc2hvdWxkIGFsc28gbG9vayBhdCB0aGUgYG1tdV9nYXRoZXIuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJvbGUgb2YgdGhlIGZ1bmN0aW9ucyB3aXRoaW4gYG1tL21tdV9nYXRoZXIuY2AuIEkmIzM5O2xsIGJlIGxvb2tpbmcgdG8gc2VlIGhvdyB0aGUgZ2F0aGVycyBhcmUgaW1wbGVtZW50ZWQgd2l0aGluIGBtbXVfZ2F0aGVyLmNgIGFuZCBob3cgdGhhdCBpbnRlcmFjdHMgd2l0aCB0aGUgcGFnZSB1bm1hcHBpbmcgcHJvY2Vzcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgZ2F0aGVycyBhcmUgZ2F0aGVyaW5nLCB0aGUgcmVhc29ucyBmb3IgZ2F0aGVyaW5nLCBhbmQgaG93IHRoYXQgaW50ZXJhY3RzIHdpdGggdGhlIHNwZWNpZmljIHVubWFwcGluZyBjYWxscyB3aXRoaW4gdGhlIGB6YXBfaHVnZV9wbWRgIHByb2Nlc3MuIFdpdGggYSBzdHJvbmcgdW5kZXJzdGFuZGluZyBvZiBib3RoLCBJIHNob3VsZCBnZXQgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIHdob2xlIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbW11X2dhdGhlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNzA6XHRcdC8qIFNpbXBseSBkZWxpdmVyIHRoZSBpbnRlcnJ1cHQgKi9cbiAyNzE6XHR9XG4gMjcyOlx0XG4gMjczOlx0dm9pZCB0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfb25lKHZvaWQpXG4gMjc0Olx0e1xuIDI3NTpcdFx0LypcbiAyNzY6XHRcdCAqIFRoaXMgaXNuJiMzOTt0IGFuIFJDVSBncmFjZSBwZXJpb2QgYW5kIGhlbmNlIHRoZSBwYWdlLXRhYmxlcyBjYW5ub3QgYmVcbiAyNzc6XHRcdCAqIGFzc3VtZWQgdG8gYmUgYWN0dWFsbHkgUkNVLWZyZWVkLlxuIDI3ODpcdFx0ICpcbiAyNzk6XHRcdCAqIEl0IGlzIGhvd2V2ZXIgc3VmZmljaWVudCBmb3Igc29mdHdhcmUgcGFnZS10YWJsZSB3YWxrZXJzIHRoYXQgcmVseSBvblxuIDI4MDpcdFx0ICogSVJRIGRpc2FibGluZy5cbiAyODE6XHRcdCAqL1xuIDI4MjpcdFx0c21wX2NhbGxfZnVuY3Rpb24odGxiX3JlbW92ZV90YWJsZV9zbXBfc3luYywgTlVMTCwgMSk7XG4gMjgzOlx0fVxuIDI4NDpcdFxuIDI4NTpcdHN0YXRpYyB2b2lkIHRsYl9yZW1vdmVfdGFibGVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbiAyODY6XHR7XG4gMjg3Olx0XHRfX3RsYl9yZW1vdmVfdGFibGVfZnJlZShjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IG1tdV90YWJsZV9iYXRjaCwgcmN1KSk7XG4gMjg4Olx0fVxuIDI4OTpcdFxuIDI5MDpcdHN0YXRpYyB2b2lkIHRsYl9yZW1vdmVfdGFibGVfZnJlZShzdHJ1Y3QgbW11X3RhYmxlX2JhdGNoICpiYXRjaClcbiAyOTE6XHR7XG4gMjkyOlx0XHRjYWxsX3JjdShcdTAwMjZiYXRjaC1cdTAwM2VyY3UsIHRsYl9yZW1vdmVfdGFibGVfcmN1KTtcbiAyOTM6XHR9XG4gMjk0Olx0XG4gMjk1Olx0LyoqXG4gMjk2Olx0ICogdGxiX3JlbW92ZV90YWJsZV9zeW5jX3JjdSAtIHN5bmNocm9uaXplIHdpdGggc29mdHdhcmUgcGFnZS10YWJsZSB3YWxrZXJzXG4gMjk3Olx0ICpcbiAyOTg6XHQgKiBMaWtlIHRsYl9yZW1vdmVfdGFibGVfc3luY19vbmUoKSBidXQgdXNlcyBSQ1UgZ3JhY2UgcGVyaW9kIGluc3RlYWQgb2YgSVBJXG4gMjk5Olx0ICogYnJvYWRjYXN0LiBVc2UgaW4gc2xvdyBwYXRocyB3aGVyZSBzbGVlcGluZyBpcyBhY2NlcHRhYmxlLlxuIDMwMDpcdCAqXG4gMzAxOlx0ICogU29mdHdhcmUvTG9ja2xlc3MgcGFnZS10YWJsZSB3YWxrZXJzIHVzZSBsb2NhbF9pcnFfZGlzYWJsZSgpLCB3aGljaCBpcyBhbHNvXG4gMzAyOlx0ICogYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLiBzeW5jaHJvbml6ZV9yY3UoKSB3YWl0cyBmb3IgYWxsIHN1Y2hcbiAzMDM6XHQgKiBzZWN0aW9ucywgcHJvdmlkaW5nIHRoZSBzYW1lIGd1YXJhbnRlZSBhcyB0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfb25lKCkgYnV0XG4gMzA0Olx0ICogd2l0aG91dCBkaXNydXB0aW5nIGFsbCBDUFVzIHdpdGggSVBJcy5cbiAzMDU6XHQgKlxuIDMwNjpcdCAqIERvIG5vdCB1c2UgZm9yIGZyZWVpbmcgbWVtb3J5LiBVc2UgUkNVIGNhbGxiYWNrcyBpbnN0ZWFkIHRvIGF2b2lkIGxhdGVuY3lcbiAzMDc6XHQgKiBzcGlrZXMuXG4gMzA4Olx0ICovXG4gMzA5Olx0dm9pZCB0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfcmN1KHZvaWQpXG4gMzEwOlx0e1xuIDMxMTpcdFx0c3luY2hyb25pemVfcmN1KCk7XG4gMzEyOlx0fVxuIDMxMzpcdFxuIDMxNDpcdC8qXG4gMzE1Olx0ICogSWYgd2Ugd2FudCB0bGJfcmVtb3ZlX3RhYmxlKCkgdG8gaW1wbHkgVExCIGludmFsaWRhdGVzLlxuIDMxNjpcdCAqL1xuIDMxNzpcdHN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfdGFibGVfaW52YWxpZGF0ZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiKVxuIDMxODpcdHtcbiAzMTk6XHRcdGlmICh0bGJfbmVlZHNfdGFibGVfaW52YWxpZGF0ZSgpKSB7XG4gMzIwOlx0XHRcdC8qXG4gMzIxOlx0XHRcdCAqIEludmFsaWRhdGUgcGFnZS10YWJsZSBjYWNoZXMgdXNlZCBieSBoYXJkd2FyZSB3YWxrZXJzLiBUaGVuXG4gMzIyOlx0XHRcdCAqIHdlIHN0aWxsIG5lZWQgdG8gUkNVLXNjaGVkIHdhaXQgd2hpbGUgZnJlZWluZyB0aGUgcGFnZXNcbiAzMjM6XHRcdFx0ICogYmVjYXVzZSBzb2Z0d2FyZSB3YWxrZXJzIGNhbiBzdGlsbCBiZSBpbi1mbGlnaHQuXG4gMzI0Olx0XHRcdCAqL1xuIDMyNTpcdFx0XHR0bGJfZmx1c2hfbW11X3RsYm9ubHkodGxiKTtcbiAzMjY6XHRcdH1cbiAzMjc6XHR9XG4gMzI4Olx0XG4gMzI5Olx0I2lmZGVmIENPTkZJR19QVF9SRUNMQUlNXG4gMzMwOlx0c3RhdGljIGlubGluZSB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZV9vbmVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbiAzMzE6XHR7XG4gMzMyOlx0XHRzdHJ1Y3QgcHRkZXNjICpwdGRlc2M7XG4gMzMzOlx0XG4gMzM0Olx0XHRwdGRlc2MgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IHB0ZGVzYywgcHRfcmN1X2hlYWQpO1xuIDMzNTpcdFx0X190bGJfcmVtb3ZlX3RhYmxlKHB0ZGVzYyk7XG4gMzM2Olx0fVxuIDMzNzpcdFxuIDMzODpcdHN0YXRpYyBpbmxpbmUgdm9pZCBfX3RsYl9yZW1vdmVfdGFibGVfb25lKHZvaWQgKnRhYmxlKVxuIDMzOTpcdHtcbiAzNDA6XHRcdHN0cnVjdCBwdGRlc2MgKnB0ZGVzYztcbiAzNDE6XHRcbiAzNDI6XHRcdHB0ZGVzYyA9IHRhYmxlO1xuIDM0MzpcdFx0Y2FsbF9yY3UoXHUwMDI2cHRkZXNjLVx1MDAzZXB0X3JjdV9oZWFkLCBfX3RsYl9yZW1vdmVfdGFibGVfb25lX3JjdSk7XG4gMzQ0Olx0fVxuIDM0NTpcdCNlbHNlXG4gMzQ2Olx0c3RhdGljIGlubGluZSB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZV9vbmUodm9pZCAqdGFibGUpXG4gMzQ3Olx0e1xuIDM0ODpcdFx0dGxiX3JlbW92ZV90YWJsZV9zeW5jX3JjdSgpO1xuIDM0OTpcdFx0X190bGJfcmVtb3ZlX3RhYmxlKHRhYmxlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMyOTkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBgdGxiX3JlbW92ZV90YWJsZWAgSW1wbGVtZW50YXRpb24qKgoKT2theSwgdGltZSB0byBkaXNzZWN0IGB0bGJfcmVtb3ZlX3RhYmxlYC4gVGhlIGZ1bmN0aW9uIGl0c2VsZiBpcyBpbiBgbW0vbW11X2dhdGhlci5jYCwgc28gdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBzdGFydC4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgaXQgaGFuZGxlcyBpbnZhbGlkYXRpbmcgVExCIGVudHJpZXMgYXNzb2NpYXRlZCB3aXRoIGEgcGFnZSB0YWJsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBnYXRoZXIgY29udGV4dCwgYW5kIGhvdyBpdCBkZWFscyB3aXRoIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBvZiBvcHRpbWl6YXRpb24gc3RyYXRlZ2llcywgYW5kIGlmIHRoZSBpbXBsZW1lbnRhdGlvbiB0YWtlcyBhZHZhbnRhZ2Ugb2YgYW55IHByb2Nlc3Nvci1zcGVjaWZpYyBpbnN0cnVjdGlvbnMgb3IgZmVhdHVyZXMuIEJleW9uZCB0aGF0LCBJIHdpbGwgY2hlY2sgdGhlIHVzdWFsIHN1c3BlY3RzIC0gdGhlIGVycm9yIGhhbmRsaW5nLCBhbmQgdGhlIGVkZ2UgY2FzZXMuIEkmIzM5O20gZXNwZWNpYWxseSBrZWVuIHRvIHNlZSB0aGUgZGV0YWlscyBvZiBhbnkgYXJjaGl0ZWN0dXJhbCBxdWlya3MgdGhhdCBhcmUgZXhwbGljaXRseSBoYW5kbGVkLiBJIGV4cGVjdCB0byBiZSBhYmxlIHRvIGZvbGxvdyB0aGUgbG9naWMgYW5kIGV4cGxhaW4gaXQgYmFjayB0byBteXNlbGYgaW4gZGV0YWlsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21tdV9nYXRoZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzUwOlx0fVxuIDM1MTpcdCNlbmRpZiAvKiBDT05GSUdfUFRfUkVDTEFJTSAqL1xuIDM1MjpcdFxuIDM1MzpcdHN0YXRpYyB2b2lkIHRsYl9yZW1vdmVfdGFibGVfb25lKHZvaWQgKnRhYmxlKVxuIDM1NDpcdHtcbiAzNTU6XHRcdF9fdGxiX3JlbW92ZV90YWJsZV9vbmUodGFibGUpO1xuIDM1NjpcdH1cbiAzNTc6XHRcbiAzNTg6XHRzdGF0aWMgdm9pZCB0bGJfdGFibGVfZmx1c2goc3RydWN0IG1tdV9nYXRoZXIgKnRsYilcbiAzNTk6XHR7XG4gMzYwOlx0XHRzdHJ1Y3QgbW11X3RhYmxlX2JhdGNoICoqYmF0Y2ggPSBcdTAwMjZ0bGItXHUwMDNlYmF0Y2g7XG4gMzYxOlx0XG4gMzYyOlx0XHRpZiAoKmJhdGNoKSB7XG4gMzYzOlx0XHRcdHRsYl90YWJsZV9pbnZhbGlkYXRlKHRsYik7XG4gMzY0Olx0XHRcdHRsYl9yZW1vdmVfdGFibGVfZnJlZSgqYmF0Y2gpO1xuIDM2NTpcdFx0XHQqYmF0Y2ggPSBOVUxMO1xuIDM2NjpcdFx0fVxuIDM2NzpcdH1cbiAzNjg6XHRcbiAzNjk6XHR2b2lkIHRsYl9yZW1vdmVfdGFibGUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgdm9pZCAqdGFibGUpXG4gMzcwOlx0e1xuIDM3MTpcdFx0c3RydWN0IG1tdV90YWJsZV9iYXRjaCAqKmJhdGNoID0gXHUwMDI2dGxiLVx1MDAzZWJhdGNoO1xuIDM3MjpcdFxuIDM3MzpcdFx0aWYgKCpiYXRjaCA9PSBOVUxMKSB7XG4gMzc0Olx0XHRcdCpiYXRjaCA9IChzdHJ1Y3QgbW11X3RhYmxlX2JhdGNoICopX19nZXRfZnJlZV9wYWdlKEdGUF9OT1dBSVQpO1xuIDM3NTpcdFx0XHRpZiAoKmJhdGNoID09IE5VTEwpIHtcbiAzNzY6XHRcdFx0XHR0bGJfdGFibGVfaW52YWxpZGF0ZSh0bGIpO1xuIDM3NzpcdFx0XHRcdHRsYl9yZW1vdmVfdGFibGVfb25lKHRhYmxlKTtcbiAzNzg6XHRcdFx0XHRyZXR1cm47XG4gMzc5Olx0XHRcdH1cbiAzODA6XHRcdFx0KCpiYXRjaCktXHUwMDNlbnIgPSAwO1xuIDM4MTpcdFx0fVxuIDM4MjpcdFxuIDM4MzpcdFx0KCpiYXRjaCktXHUwMDNldGFibGVzWygqYmF0Y2gpLVx1MDAzZW5yJiM0MzsmIzQzO10gPSB0YWJsZTtcbiAzODQ6XHRcdGlmICgoKmJhdGNoKS1cdTAwM2VuciA9PSBNQVhfVEFCTEVfQkFUQ0gpXG4gMzg1Olx0XHRcdHRsYl90YWJsZV9mbHVzaCh0bGIpO1xuIDM4NjpcdH1cbiAzODc6XHRcbiAzODg6XHRzdGF0aWMgaW5saW5lIHZvaWQgdGxiX3RhYmxlX2luaXQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYilcbiAzODk6XHR7XG4gMzkwOlx0XHR0bGItXHUwMDNlYmF0Y2ggPSBOVUxMO1xuIDM5MTpcdH1cbiAzOTI6XHRcbiAzOTM6XHRzdGF0aWMgdm9pZCB0bGJfZmx1c2hfbW11X2ZyZWUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYilcbiAzOTQ6XHR7XG4gMzk1Olx0XHR0bGJfdGFibGVfZmx1c2godGxiKTtcbiAzOTY6XHQjaWZuZGVmIENPTkZJR19NTVVfR0FUSEVSX05PX0dBVEhFUlxuIDM5NzpcdFx0dGxiX2JhdGNoX3BhZ2VzX2ZsdXNoKHRsYik7XG4gMzk4Olx0I2VuZGlmXG4gMzk5Olx0fVxuIDQwMDpcdFxuIDQwMTpcdHZvaWQgdGxiX2ZsdXNoX21tdShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiKVxuIDQwMjpcdHtcbiA0MDM6XHRcdHRsYl9mbHVzaF9tbXVfdGxib25seSh0bGIpO1xuIDQwNDpcdFx0dGxiX2ZsdXNoX21tdV9mcmVlKHRsYik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MzQ4CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGB0bGJfcmVtb3ZlX3B0ZGVzY2AqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYHRsYl9yZW1vdmVfcHRkZXNjYCBmdW5jdGlvbi4gSSBrbm93IGl0JiMzOTtzIHJlbGF0ZWQgdG8gVExCIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBwYWdlIHRhYmxlIGRlc2NyaXB0b3IgcmVtb3ZhbCwgYnV0IEkgd2FudCB0byBiZSBjZXJ0YWluIGFib3V0IHRoZSBleGFjdCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGZvciBwZXJmb3JtYW5jZS4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBkZWZpbml0aW9uIGluIGBpbmNsdWRlL2FzbS1nZW5lcmljL3RsYi5oYC4gVGhpcyBnZW5lcmljIGhlYWRlciBzaG91bGQgcHJvdmlkZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIGludGVyZmFjZSBhbmQgbGlrZWx5IHBvaW50IG1lIHRvIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIGlmIG5lY2Vzc2FyeS4gVW5kZXJzdGFuZGluZyB0aGUgZ2VuZXJpYyBiZWhhdmlvciBpcyB0aGUga2V5IHN0YXJ0aW5nIHBvaW50IHRvIGNvbnNpZGVyIGJlZm9yZSBsb29raW5nIGZvciBwcm9jZXNzb3Itc3BlY2lmaWMgb3B0aW1pc2F0aW9ucyBvciBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RsYl9yZW1vdmVfcHRkZXNjJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaD00NzI9c3RhdGljIGlubGluZSB2b2lkIHRsYl9yZW1vdmVfcGFnZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5pbmNsdWRlL2FzbS1nZW5lcmljL3RsYi5oLTQ3Ni1cbmluY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmg6NDc3OnN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfcmVtb3ZlX3B0ZGVzYyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3QgcHRkZXNjICpwdClcbmluY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmgtNDc4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ2OTQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkRpdmluZyBpbnRvIHRoZSBUTEIgSW1wbGVtZW50YXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgd2FudCB0byB1bmRlcnN0YW5kIGEgYml0IG1vcmUgYWJvdXQgaG93IHRoZSBUTEIgaXMgaGFuZGxlZCBpbiB0aGUgZ2VuZXJpYyBhcmNoaXRlY3R1cmUsIHNvIGxldCYjMzk7cyBqdW1wIHJpZ2h0IGludG8gdGhlIGhlYXJ0IG9mIGl0LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gaGVhZGluZyBvdmVyIHRvIHRoZSBgaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaGAgZmlsZS4gSSYjMzk7bSBhaW1pbmcgZm9yIGFyb3VuZCBsaW5lIDQ3NSwgZ2l2ZSBvciB0YWtlLCBhcyB0aGF0JiMzOTtzIHVzdWFsbHkgYSBnb29kIHNwb3QgdG8gZmluZCBzb21lIGludGVyZXN0aW5nIGdlbmVyaWMgVExCLXJlbGF0ZWQgZGVmaW5pdGlvbnMgb3IgbWFjcm9zLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgY3J1Y2lhbCBwaWVjZXMgb2YgdGhlIHB1enpsZSB0aGVyZS4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyB1c3VhbGx5IHJlc2lkZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDY1Olx0c3RhdGljIGlubGluZSB2b2lkIHRsYl9yZW1vdmVfcGFnZV9zaXplKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG4gNDY2Olx0XHRcdFx0XHRcdHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgcGFnZV9zaXplKVxuIDQ2NzpcdHtcbiA0Njg6XHRcdGlmIChfX3RsYl9yZW1vdmVfcGFnZV9zaXplKHRsYiwgcGFnZSwgcGFnZV9zaXplKSlcbiA0Njk6XHRcdFx0dGxiX2ZsdXNoX21tdSh0bGIpO1xuIDQ3MDpcdH1cbiA0NzE6XHRcbiA0NzI6XHRzdGF0aWMgaW5saW5lIHZvaWQgdGxiX3JlbW92ZV9wYWdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCBwYWdlICpwYWdlKVxuIDQ3MzpcdHtcbiA0NzQ6XHRcdHJldHVybiB0bGJfcmVtb3ZlX3BhZ2Vfc2l6ZSh0bGIsIHBhZ2UsIFBBR0VfU0laRSk7XG4gNDc1Olx0fVxuIDQ3NjpcdFxuIDQ3NzpcdHN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfcmVtb3ZlX3B0ZGVzYyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3QgcHRkZXNjICpwdClcbiA0Nzg6XHR7XG4gNDc5Olx0XHR0bGJfcmVtb3ZlX3RhYmxlKHRsYiwgcHQpO1xuIDQ4MDpcdH1cbiA0ODE6XHRcbiA0ODI6XHRzdGF0aWMgaW5saW5lIHZvaWQgdGxiX2NoYW5nZV9wYWdlX3NpemUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbiA0ODM6XHRcdFx0XHRcdFx0XHQgICAgIHVuc2lnbmVkIGludCBwYWdlX3NpemUpXG4gNDg0Olx0e1xuIDQ4NTpcdCNpZmRlZiBDT05GSUdfTU1VX0dBVEhFUl9QQUdFX1NJWkVcbiA0ODY6XHRcdGlmICh0bGItXHUwMDNlcGFnZV9zaXplIFx1MDAyNlx1MDAyNiB0bGItXHUwMDNlcGFnZV9zaXplICE9IHBhZ2Vfc2l6ZSkge1xuIDQ4NzpcdFx0XHRpZiAoIXRsYi1cdTAwM2VmdWxsbW0gXHUwMDI2XHUwMDI2ICF0bGItXHUwMDNlbmVlZF9mbHVzaF9hbGwpXG4gNDg4Olx0XHRcdFx0dGxiX2ZsdXNoX21tdSh0bGIpO1xuIDQ4OTpcdFx0fVxuIDQ5MDpcdFxuIDQ5MTpcdFx0dGxiLVx1MDAzZXBhZ2Vfc2l6ZSA9IHBhZ2Vfc2l6ZTtcbiA0OTI6XHQjZW5kaWZcbiA0OTM6XHR9XG4gNDk0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1Mzg0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVExCIFJlbW92YWwgYW5kIFBhZ2UgVGFibGUgUmVjbGFtYXRpb24gQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyB0aGUga2V5IGZ1bmN0aW9uIHdlJiMzOTtyZSBsb29raW5nIGF0IGlzIGB0bGJfcmVtb3ZlX3B0ZGVzY2Agd2hpY2ggaXMgbm93IGNvbnNpc3RlbnRseSBjYWxsaW5nIGB0bGJfcmVtb3ZlX3RhYmxlKHRsYiwgcHQpYC4gVGhlIGNydWNpYWwgc2hpZnQgaGVyZSBpcyBpbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHRsYl9yZW1vdmVfdGFibGVgLiBCZWZvcmUgdGhpcyBwYXRjaCwgdGhlIGNvZGUgd2FzIGlubGluZWQgYW5kIGhhbmRsZWQgaW1tZWRpYXRlbHksIHdoaWNoIGludm9sdmVkIGEgc2ltcGxlIGRlc3RydWN0aW9uIG9mIHRoZSBwYWdlIHRhYmxlIGRlc2NyaXB0b3IgYW5kIGltbWVkaWF0ZSByZW1vdmFsIGZyb20gdGhlIFRMQi4KCk5vdywgdGhvdWdoLCBgdGxiX3JlbW92ZV90YWJsZWAgaXMgQUxXQVlTIGRlZmluZWQgaW4gYG1tL21tdV9nYXRoZXIuY2AgYW5kIGxldmVyYWdlcyBSQ1UgYmF0Y2hpbmcsIHVzaW5nIGVpdGhlciBgY2FsbF9yY3VgIG9yIGBzeW5jaHJvbml6ZV9yY3VgLiBTbywgd2UmIzM5O3JlIGRlZmVycmluZyB0aGUgYWN0dWFsIHRhYmxlIHJlbW92YWwgdXNpbmcgUkNVIG5vdywgY29ycmVjdD8KCkFscmlnaHQsIGxldCYjMzk7cyBxdWlja2x5IGNoZWNrIHRoZSBgUFRfUkVDTEFJTWAgb3B0aW9uIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gUHJldmlvdXNseSwgaXRzIGRlcGVuZGVuY3kgd2FzIHRpZWQgdG8gYE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVgIGFuZCB0aGUgYWJzZW5jZSBvZiBhbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYEhBVkVfQVJDSF9UTEJfUkVNT1ZFX1RBQkxFYCBkZWZpbml0aW9uLiBOb3csIHdpdGggdGhlIHJlbW92YWwgb2YgYE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVgLCBpdCBzb2xlbHkgZGVwZW5kcyBvbiBgTU1VYCBhbmQgdGhlIGFic2VuY2Ugb2YgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmdW5jdGlvbi4gSSYjMzk7bSBpbmZlcnJpbmcgdGhpcyBtZWFucyBgUFRfUkVDTEFJTWAgYmVjb21lcyBsZXNzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYy4gSW50ZXJlc3RpbmcuLi4KCkZpbmFsbHksIHRoZSBkaXNjdXNzaW9uIG9mIGBwdGVfZnJlZV9kZWZlcmAgaW5kaWNhdGVzIHdlIG5lZWQgdG8gZXhhbWluZSBgbW0vcGd0YWJsZS1nZW5lcmljLmNgIGFyb3VuZCBsaW5lIDI0MC4gVGhhdCYjMzk7cyBsaWtlbHkgd2hlcmUgdGhlIGFjdHVhbCBwYWdlIHRhYmxlIGZyZWVpbmcgZGVmZXJyYWwgaXMgYmVpbmcgaGFuZGxlZCBvciBjYWxsZWQgaW4gY29uanVuY3Rpb24gd2l0aCBSQ1UuIFNvLCB0aGUga2V5IGlzIHRoZSBwYWdlIHRhYmxlIHJlbW92YWwgaXMgbm8gbG9uZ2VyIGltbWVkaWF0ZSwgaXQmIzM5O3MgYmVpbmcgZGVmZXJyZWQsIHByb2JhYmx5IGltcHJvdmluZyB0aGUgcGVyZm9ybWFuY2UgYXMgYSByZXN1bHQgb2YgUkNVIGJhdGNoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3BndGFibGUtZ2VuZXJpYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMzU6XHRcdGZsdXNoX3RsYl9yYW5nZSh2bWEsIGFkZHJlc3MsIGFkZHJlc3MgJiM0MzsgSFBBR0VfUE1EX1NJWkUpO1xuIDIzNjpcdFx0cmV0dXJuIHBtZDtcbiAyMzc6XHR9XG4gMjM4Olx0I2VuZGlmXG4gMjM5Olx0XG4gMjQwOlx0LyogYXJjaCBkZWZpbmUgcHRlX2ZyZWVfZGVmZXIgaW4gYXNtL3BnYWxsb2MuaCBmb3IgaXRzIG93biBpbXBsZW1lbnRhdGlvbiAqL1xuIDI0MTpcdCNpZm5kZWYgcHRlX2ZyZWVfZGVmZXJcbiAyNDI6XHRzdGF0aWMgdm9pZCBwdGVfZnJlZV9ub3coc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuIDI0MzpcdHtcbiAyNDQ6XHRcdHN0cnVjdCBwYWdlICpwYWdlO1xuIDI0NTpcdFxuIDI0NjpcdFx0cGFnZSA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgcGFnZSwgcmN1X2hlYWQpO1xuIDI0NzpcdFx0cHRlX2ZyZWUoTlVMTCAvKiBtbSBub3QgcGFzc2VkIGFuZCBub3QgdXNlZCAqLywgKHBndGFibGVfdClwYWdlKTtcbiAyNDg6XHR9XG4gMjQ5Olx0XG4gMjUwOlx0dm9pZCBwdGVfZnJlZV9kZWZlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHBndGFibGUpXG4gMjUxOlx0e1xuIDI1MjpcdFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gMjUzOlx0XG4gMjU0Olx0XHRwYWdlID0gcGd0YWJsZTtcbiAyNTU6XHRcdGNhbGxfcmN1KFx1MDAyNnBhZ2UtXHUwMDNlcmN1X2hlYWQsIHB0ZV9mcmVlX25vdyk7XG4gMjU2Olx0fVxuIDI1NzpcdCNlbmRpZiAvKiBwdGVfZnJlZV9kZWZlciAqL1xuIDI1ODpcdCNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbiAyNTk6XHRcbiAyNjA6XHQjaWYgZGVmaW5lZChDT05GSUdfR1VQX0dFVF9QWFhfTE9XX0hJR0gpIFx1MDAyNlx1MDAyNiBcXFxuIDI2MTpcdFx0KGRlZmluZWQoQ09ORklHX1NNUCkgfHwgZGVmaW5lZChDT05GSUdfUFJFRU1QVF9SQ1UpKVxuIDI2MjpcdC8qXG4gMjYzOlx0ICogU2VlIHRoZSBjb21tZW50IGFib3ZlIHB0ZXBfZ2V0X2xvY2tsZXNzKCkgaW4gaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg6XG4gMjY0Olx0ICogdGhlIGJhcnJpZXJzIGluIHBtZHBfZ2V0X2xvY2tsZXNzKCkgY2Fubm90IGd1YXJhbnRlZSB0aGF0IHRoZSB2YWx1ZSBpblxuIDI2NTpcdCAqIHBtZF9oaWdoIGFjdHVhbGx5IGJlbG9uZ3Mgd2l0aCB0aGUgdmFsdWUgaW4gcG1kX2xvdzsgYnV0IGhvbGRpbmcgaW50ZXJydXB0c1xuIDI2NjpcdCAqIG9mZiBibG9ja3MgdGhlIFRMQiBmbHVzaCBiZXR3ZWVuIHByZXNlbnQgdXBkYXRlcywgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IGFcbiAyNjc6XHQgKiBzdWNjZXNzZnVsIF9fcHRlX29mZnNldF9tYXAoKSBwb2ludHMgdG8gYSBwYWdlIGZyb20gbWF0Y2hlZCBoYWx2ZXMuXG4gMjY4Olx0ICovXG4gMjY5Olx0c3RhdGljIHVuc2lnbmVkIGxvbmcgcG1kcF9nZXRfbG9ja2xlc3Nfc3RhcnQodm9pZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY4MDMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA1NDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBhZ2UgVGFibGUgRnJlZWluZyBpbiB0aGUgS2VybmVsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3ZlIGdvdCBzb21lIGludGVyZXN0aW5nIGNoYW5nZXMgYXJvdW5kIHBhZ2UgdGFibGUgZnJlZWluZywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gSHVnZVRMQiBwYWdlcy4gVGhlIGB6YXBfZGVwb3NpdGVkX3RhYmxlYCBmdW5jdGlvbiB3aXRoaW4gYG1tL2h1Z2VfbWVtb3J5LmNgIG5vdyBjYWxscyBgcHRlX2ZyZWVfZGVmZXJgLCB3aGljaCBpcyB1c2luZyBSQ1UgZm9yIGRlZmVycmVkIGZyZWVpbmcuIFRoaXMgaXMgb25seSBjb21waWxlZCB3aGVuIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGVuYWJsZWQsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGVuIHdlIGhhdmUgYHRsYl9yZW1vdmVfdGFibGVgIGluIGBtbS9tbXVfZ2F0aGVyLmNgLCB3aGljaCBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfTU1VYCBpcyBlbmFibGVkLCBhbmQgYENPTkZJR19QVF9SRUNMQUlNYCBpcyBlbmFibGVkIHdoZW4gYm90aCBgQ09ORklHX01NVWAgaXMgZW5hYmxlZCBhbmQgYCFIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRWAuCgpTbywgdGhlIGtleSBjb25maWdzIHRvIGtlZXAgaW4gbWluZCBhcmUgYE1NVWAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGVpciBpbnRlcmFjdGlvbnMuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgcmVsZXZhbnQgZW50cnlwb2ludHMuIE9idmlvdXNseSwgYHRsYl9yZW1vdmVfdGFibGVgIChpbiBgbW0vbW11X2dhdGhlci5jYCkgaXMgY3JpdGljYWwsIGFzIGl0JiMzOTtzIGdsb2JhbCBhbmQgY2FsbGVkIHdoZW5ldmVyIHBhZ2UgdGFibGVzIG9yIGRpcmVjdG9yaWVzIGFyZSBiZWluZyBmcmVlZC4gVGhlbiB0aGVyZSYjMzk7cyB0aGUgc3luYyB2YXJpYW50czogYHRsYl9yZW1vdmVfdGFibGVfc3luY19vbmVgIGFuZCBgdGxiX3JlbW92ZV90YWJsZV9zeW5jX3JjdWAgaW4gYG1tL21tdV9nYXRoZXIuY2AuIFdlIGFsc28gaGF2ZSBgcHRlX2ZyZWVfZGVmZXJgIGluIGBtbS9wZ3RhYmxlLWdlbmVyaWMuY2AsIHdoaWNoIGlzIHRoZSBSQ1UgZGVmZXJyYWwgbWVjaGFuaXNtLiBBbmQgb2YgY291cnNlLCBgemFwX2h1Z2VfcG1kYCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AgaXMgaW1wb3J0YW50LiBBbHNvLCB0aGUgc3RhbmRhcmQgTU0gZW50cnlwb2ludHMgbGlrZSBgemFwX3BhZ2VfcmFuZ2Vfc2luZ2xlYCwgYHphcF92bWFfcHRlc2AsIGFuZCBgZnJlZV9wZ3RhYmxlc2Agd2lsbCBsaWtlbHkgdHJpZ2dlciB0aGVzZSBjYWxscy4gV2UgYWxzbyBoYXZlIGBfX3NwbGl0X2h1Z2VfcG1kX2xvY2tlZGAgYW5kIGBtYWR2aXNlX2ZyZWVfaHVnZV9wbWRgLgoKSSBzaG91bGQgY2hlY2sgdGhlIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGZ1bmN0aW9ucyB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgcG90ZW50aWFsIGNhbGwgc2l0ZXMuIFNwZWNpZmljYWxseTogYHRsYl9yZW1vdmVfdGFibGVgLCBgdGxiX3JlbW92ZV90YWJsZV9zeW5jX29uZWAsIGB0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfcmN1YCAoYWxsIGluIGBtbS9tbXVfZ2F0aGVyLmNgKSwgYHB0ZV9mcmVlX2RlZmVyYCAoaW4gYG1tL3BndGFibGUtZ2VuZXJpYy5jYCksIGFuZCBgemFwX2h1Z2VfcG1kYCAoaW4gYG1tL2h1Z2VfbWVtb3J5LmNgKS4gVGhpcyBnaXZlcyBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB3ZSBjYW4gdHJhY2UsIG9yIG92ZXJyaWRlLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGB6YXBfaHVnZV9wbWRgIGluIGBtbS9odWdlX21lbW9yeS5jYC4gSSBoYXZlIGEgZmVlbGluZyB0aGVyZSB3aWxsIGJlIG1vcmUgaW50ZXJlc3RpbmcgZGV0YWlscyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emFwX2h1Z2VfcG1kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9MjQ3ND1zdGF0aWMgaW5saW5lIHZvaWQgemFwX2RlcG9zaXRlZF90YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTI0ODItXG5tbS9odWdlX21lbW9yeS5jOjI0ODM6c3RhdGljIHZvaWQgemFwX2h1Z2VfcG1kX2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL2h1Z2VfbWVtb3J5LmMtMjQ4NC1cdFx0cG1kX3QgcG1kdmFsLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIGlzX3ByZXNlbnQpXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0yNTIxPXN0YXRpYyBib29sIGhhc19kZXBvc2l0ZWRfcGd0YWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcG1kX3QgcG1kdmFsLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjU0Mi0vKipcbm1tL2h1Z2VfbWVtb3J5LmM6MjU0MzogKiB6YXBfaHVnZV9wbWQgLSBaYXAgYSBodWdlIFRIUCB3aGljaCBpcyBvZiBQTUQgc2l6ZS5cbm1tL2h1Z2VfbWVtb3J5LmMtMjU0NC0gKiBAdGxiOiBUaGUgTU1VIGdhdGhlciBUTEIgc3RhdGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcGVyYXRpb24uXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yNTUwLSAqL1xubW0vaHVnZV9tZW1vcnkuYzoyNTUxOmJvb2wgemFwX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vaHVnZV9tZW1vcnkuYy0yNTUyLVx0XHQgcG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjU4MC1cdGlmIChmb2xpbylcbm1tL2h1Z2VfbWVtb3J5LmM6MjU4MTpcdFx0emFwX2h1Z2VfcG1kX2ZvbGlvKG1tLCB2bWEsIG9yaWdfcG1kLCBmb2xpbywgaXNfcHJlc2VudCk7XG5tbS9odWdlX21lbW9yeS5jLTI1ODItXHRpZiAoaGFzX2RlcG9zaXQpXG4tLVxubW0vaW50ZXJuYWwuaD01Njg9dm9pZCBwbWRfaW5zdGFsbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCwgcGd0YWJsZV90ICpwdGUpO1xuLS1cbm1tL2ludGVybmFsLmgtNTc1LSAqIFdoZW4gd2UgZmluZCBhIHBtZF9ub25lKCkgd2hpbGUgdW5tYXBwaW5nIGEgZm9saW8gd2l0aG91dCBob2xkaW5nIHRoZSBQVEwsXG5tbS9pbnRlcm5hbC5oOjU3NjogKiB6YXBfaHVnZV9wbWQoKSBtYXkgaGF2ZSBjbGVhcmVkIHRoZSBQTUQgYnV0IG5vdCB5ZXQgbW9kaWZpZWQgdGhlIGZvbGlvIHRvXG5tbS9pbnRlcm5hbC5oLTU3Ny0gKiBpbmRpY2F0ZSB0aGF0IGl0JiMzOTtzIHVubWFwcGVkLiBTa2lwcGluZyB0aGUgUE1EIHdpdGhvdXQgc3luY2hyb25pemF0aW9uIGNvdWxkXG4tLVxubW0vbWVtb3J5LmM9MjA5OT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgemFwX3BtZF9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuLS1cbm1tL21lbW9yeS5jLTIxMTItXHRcdFx0XHRfX3NwbGl0X2h1Z2VfcG1kKHZtYSwgcG1kLCBhZGRyLCBmYWxzZSk7XG5tbS9tZW1vcnkuYzoyMTEzOlx0XHRcdGVsc2UgaWYgKHphcF9odWdlX3BtZCh0bGIsIHZtYSwgcG1kLCBhZGRyKSkge1xubW0vbWVtb3J5LmMtMjExNC1cdFx0XHRcdGFkZHIgPSBuZXh0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODY1NAoJCQkJCQkJb3V0cHV0OiAyMDIKCQkJCQkJCXRob3VnaHRzOiA2MTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVGhpcyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBzY29wZSBvZiB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIGl0IHNpZ25pZmljYW50bHkgaW1wYWN0cyBwYWdlIHRhYmxlIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBhcm91bmQgZnJlZWluZyBhbmQgcmVjbGFpbS4gTXkgaW5pdGlhbCBzY2FuIG9mIHRoZSBjb2RlIGNoYW5nZXMgY29uZmlybXMgdGhpcy4gSSBzZWUgbW9kaWZpY2F0aW9ucyB0byBzZXZlcmFsIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmaWxlcyAoYG02OGtgLCBgc2hgLCBgc3BhcmNgKSBhbmQgZ2VuZXJpYyBtZW1vcnkgbWFuYWdlbWVudCBmaWxlcyAoYG1tdV9nYXRoZXIuY2AsIGBodWdlX21lbW9yeS5jYCwgYHBndGFibGUtZ2VuZXJpYy5jYCkuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBub3RpbmcgdGhlIGludHJvZHVjdGlvbiBvciBtb2RpZmljYXRpb24gb2YgZnVuY3Rpb25zIGxpa2UgYGdldF9wb2ludGVyX3RhYmxlYCwgYGZyZWVfcG9pbnRlcl90YWJsZWAsIGBfX3RsYl9yZW1vdmVfdGFibGVgLCBgcHRlX2ZyZWVgLCBgdGxiX3JlbW92ZV90YWJsZWAsIGFuZCBgemFwX2RlcG9zaXRlZF90YWJsZWAgYWNyb3NzIHRoZXNlIHZhcmlvdXMgZmlsZXMuIFRoZSBpbmxpbmluZyBvZiBgemFwX2RlcG9zaXRlZF90YWJsZWAgaW50byBmdW5jdGlvbnMgbGlrZSBgemFwX2h1Z2VfcG1kYCBpcyBhbHNvIHdvcnRoIG5vdGluZy4KCkkmIzM5O20gYWxzbyBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gYENPTkZJR19NTVVgIGlzLCBhcyBleHBlY3RlZCwgYSBiYXNlIHJlcXVpcmVtZW50LiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBjb21lcyBpbnRvIHBsYXkgZm9yIHRoZSBodWdlIG1lbW9yeSB6YXBwaW5nIGFuZCB0aGUgZGVmZXJyZWQgUFRFIGZyZWVpbmcuIEkgdGhlbiBjaGVjayBgQ09ORklHX1BUX1JFQ0xBSU1gIGFuZCBpdHMgZGVwZW5kZW5jeSBvbiBgTU1VICZhbXA7JmFtcDsgIUhBVkVfQVJDSF9UTEJfUkVNT1ZFX1RBQkxFYC4KCk5vdywgZm9yIHRoZSBrZXkgZmluZGluZ3MgdG8gYmUgcmVwb3J0ZWQuIFRoaXMgcGF0Y2ggaXMgbWFraW5nIHBhZ2UgdGFibGUgZnJlZWluZyB1bmNvbmRpdGlvbmFsbHkgZGVmZXJyZWQgdmlhIFJDVSBhY3Jvc3MgKmFsbCogYXJjaGl0ZWN0dXJlcy4gSXQgZG9lcyB0aGlzIGJ5IHJlbW92aW5nIHRoZSBgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRWAgYW5kIGBNTVVfR0FUSEVSX1RBQkxFX0ZSRUVgIEtjb25maWcgZmxhZ3MsIHRodXMgbWFraW5nIFJDVSB0YWJsZSBiYXRjaGluZyBhIGdlbmVyaWMgcHJvY2Vzcy4gVGhpcyBjaGFuZ2UgYWxzbyB1cGRhdGVzIGB6YXBfZGVwb3NpdGVkX3RhYmxlKClgIGluIGBtbS9odWdlX21lbW9yeS5jYCB0byBsZXZlcmFnZSB0aGUgZGVmZXJyZWQgUkNVIGBwdGVfZnJlZV9kZWZlcigpYCBmdW5jdGlvbiwgYW5kIHRoZW4gYWRhcHRzIHZhcmlvdXMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHBhZ2UgdGFibGUgZnJlZWluZyBpbXBsZW1lbnRhdGlvbnMsIGxpa2UgdGhvc2Ugb24gYG02OGtgLCBgc3BhcmNgLCBgc2hgLCBgYXJjYCwgYW5kIGB4dGVuc2FgLgoKTXkgYHNldC1yZXN1bHRzYCBkYXRhIHdpbGwgaW5jbHVkZTogYFdvcnRoRnV6emluZ2A6IHRydWUgKGJlY2F1c2Ugb2YgdGhlc2UgY29yZSBjaGFuZ2VzKTsgYSBjb25jaXNlIGBSZWFzb25pbmdgIGJhc2VkIG9uIHRoZSBhYm92ZTsgdGhlIGZvbGxvd2luZyBgRm9jdXNTeW1ib2xzYDogYFsmIzM0O3RsYl9yZW1vdmVfdGFibGUmIzM0OywgJiMzNDtwdGVfZnJlZV9kZWZlciYjMzQ7LCAmIzM0O3phcF9odWdlX3BtZCYjMzQ7LCAmIzM0O3RsYl9yZW1vdmVfdGFibGVfc3luY19yY3UmIzM0OywgJiMzNDt0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfb25lJiMzNDtdYDsgYW5kIGBFbmFibGVDb25maWdzYDogYFsmIzM0O01NVSYjMzQ7LCAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDtdYC4KCkZpbmFsbHksIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIGVuc3VyZSB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBjb3JyZWN0OiBFbmFibGVDb25maWdzIHdpdGhvdXQgdGhlIGBDT05GSUdfYCBwcmVmaXg7IEZvY3VzU3ltYm9scyBhcmUgbm9uLXN0YXRpYyBhbmQgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzOyBhbmQgdGhhdCBgc2V0LXJlc3VsdHNgIGlzIGNhbGxlZCBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuIEV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01NVSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RsYl9yZW1vdmVfdGFibGUmIzM0OywKICAgICYjMzQ7cHRlX2ZyZWVfZGVmZXImIzM0OywKICAgICYjMzQ7emFwX2h1Z2VfcG1kJiMzNDssCiAgICAmIzM0O3RsYl9yZW1vdmVfdGFibGVfc3luY19yY3UmIzM0OywKICAgICYjMzQ7dGxiX3JlbW92ZV90YWJsZV9zeW5jX29uZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1bmlmaWVzIGFuZCBlbmZvcmNlcyBSQ1UtZGVmZXJyZWQgZnJlZWluZyBmb3IgcGFnZSB0YWJsZSBwYWdlcyBhY3Jvc3MgYWxsIGFyY2hpdGVjdHVyZXMgYnkgcmVtb3ZpbmcgY29uZGl0aW9uYWwgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHN0YW5kYXJkaXppbmcgb24gdGxiX3JlbW92ZV90YWJsZSgpLiBJdCBhbHNvIG1vZGlmaWVzIFRIUCBkZXBvc2l0ZWQgdGFibGUgaGFuZGxpbmcgaW4gbW0vaHVnZV9tZW1vcnkuYyB0byB1c2UgcHRlX2ZyZWVfZGVmZXIoKSB1bmRlciBSQ1UgYW5kIHVwZGF0ZXMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHBhZ2UgdGFibGUgcmVtb3ZhbCByb3V0aW5lcy4gVGhlc2UgY29yZSBNTSBsb2dpYyBjaGFuZ2VzIGFmZmVjdCBUTEIgZ2F0aGVyaW5nLCBwYWdlIHRhYmxlIHRlYXJpbmcgZG93biwgYW5kIG1lbW9yeSByZWNsYWltIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNTVUmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0bGJfcmVtb3ZlX3RhYmxlJiMzNDssCiAgICAmIzM0O3B0ZV9mcmVlX2RlZmVyJiMzNDssCiAgICAmIzM0O3phcF9odWdlX3BtZCYjMzQ7LAogICAgJiMzNDt0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfcmN1JiMzNDssCiAgICAmIzM0O3RsYl9yZW1vdmVfdGFibGVfc3luY19vbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdW5pZmllcyBhbmQgZW5mb3JjZXMgUkNVLWRlZmVycmVkIGZyZWVpbmcgZm9yIHBhZ2UgdGFibGUgcGFnZXMgYWNyb3NzIGFsbCBhcmNoaXRlY3R1cmVzIGJ5IHJlbW92aW5nIGNvbmRpdGlvbmFsIE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBzdGFuZGFyZGl6aW5nIG9uIHRsYl9yZW1vdmVfdGFibGUoKS4gSXQgYWxzbyBtb2RpZmllcyBUSFAgZGVwb3NpdGVkIHRhYmxlIGhhbmRsaW5nIGluIG1tL2h1Z2VfbWVtb3J5LmMgdG8gdXNlIHB0ZV9mcmVlX2RlZmVyKCkgdW5kZXIgUkNVIGFuZCB1cGRhdGVzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBwYWdlIHRhYmxlIHJlbW92YWwgcm91dGluZXMuIFRoZXNlIGNvcmUgTU0gbG9naWMgY2hhbmdlcyBhZmZlY3QgVExCIGdhdGhlcmluZywgcGFnZSB0YWJsZSB0ZWFyaW5nIGRvd24sIGFuZCBtZW1vcnkgcmVjbGFpbSBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6NDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzo0NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBzdGFuZGFyZGl6ZXMgcGFnZSB0YWJsZSBmcmVlaW5nIGFjcm9zcyBhcmNoaXRlY3R1cmVzIHRvIHVzZSBSQ1UtZGVmZXJyZWQgZnJlZWluZyAodW5pZnlpbmcgTU1VIGdhdGhlciBhbmQgcmVtb3ZpbmcgQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgLyBDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFIGNvbmZpZ3MpLiBJdCBhZGFwdHMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHBhZ2UgdGFibGUgZnJlZWluZyByb3V0aW5lcyAoZS5nLiBtNjhrLCBhcmMsIG1pY3JvYmxhemUsIHNoLCBzcGFyYywgeHRlbnNhKSB0byB1c2UgdGxiX3JlbW92ZV9wdGRlc2MgLyB0bGJfcmVtb3ZlX3RhYmxlLCBhZGRzIHNwaW5sb2NrcyBmb3IgcHRhYmxlIG1hbmFnZW1lbnQgb24gbTY4ay9zcGFyYywgYW5kIHVwZGF0ZXMgZGVmZXJyZWQgZnJlZWluZyBpbiBUSFAgKHB0ZV9mcmVlX2RlZmVyKS5cblxuVGhlc2UgY2hhbmdlcyBkZWFsIHN0cmljdGx5IHdpdGggTU1VIGdhdGhlciBsaWZlY3ljbGUsIFJDVSBncmFjZSBwZXJpb2RzIGZvciBwYWdlIHRhYmxlIG1lbW9yeSwgYW5kIHN5bmNocm9uaXphdGlvbiBvZiBwYWdlIHRhYmxlIGZyZWVpbmcgdnMgbG9ja2xlc3MvUkNVIHBhZ2UgdGFibGUgd2Fsa2Vycy4gUG90ZW50aWFsIGJ1Z3MgaW4gdGhlc2UgY2hhbmdlcyB3b3VsZCBtYW5pZmVzdCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIGNvbmN1cnJlbmN5IHJhY2VzLCBvciBkZWFkbG9ja3PigJR3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgcmVhZHMvY29waWVzIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI4ZThlMjJmYjJmOTIyYTVkOThhYzI3MmMwNGEzOWZiNWQwYTdlZTEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxIDIzOjQzOjUyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3QKaW5kZXggYTcyOTZmMjUxNzk5Yy4uMWU2NWIxMzlmMzU1OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0CkBAIC01MzcsNiAmIzQzOzUzNywxMiBAQCBXZSBlc3RhYmxpc2ggYmFzaWMgbG9ja2luZyBydWxlcyB3aGVuIGludGVyYWN0aW5nIHdpdGggcGFnZSB0YWJsZXM6CiAqIFdoZW4gY2hhbmdpbmcgYSBwYWdlIHRhYmxlIGVudHJ5IHRoZSBwYWdlIHRhYmxlIGxvY2sgZm9yIHRoYXQgcGFnZSB0YWJsZQogICAqKm11c3QqKiBiZSBoZWxkLCBleGNlcHQgaWYgeW91IGNhbiBzYWZlbHkgYXNzdW1lIG5vYm9keSBjYW4gYWNjZXNzIHRoZSBwYWdlCiAgIHRhYmxlcyBjb25jdXJyZW50bHkgKHN1Y2ggYXMgb24gaW52b2NhdGlvbiBvZiA6YzpmdW5jOmAhZnJlZV9wZ3RhYmxlc2ApLgomIzQzOyogUGFnZSB0YWJsZXMgbWF5IGJlICp3YWxrZWQqIHVuZGVyIFJDVSBhbG9uZSwgYXMgcGFnZSB0YWJsZXMgYXJlIGZyZWVkIG9ubHkKJiM0MzsgIGFmdGVyIGFuIFJDVSBncmFjZSBwZXJpb2QgaGFzIGVsYXBzZWQuIEhvd2V2ZXIsIGFueSBlbnRyeSBmb3VuZCBtdXN0IGJlCiYjNDM7ICByZXZhbGlkYXRlZCBhZnRlciB0aGUgcGFnZSB0YWJsZSBsb2NrIGlzIHRha2VuIChzdWNoIGFzIHRoZQomIzQzOyAgOmM6ZnVuYzpgIXBtZF9zYW1lYCByZWNoZWNrIHBlcmZvcm1lZCBieSA6YzpmdW5jOmAhcHRlX29mZnNldF9tYXBfbG9ja2ApCiYjNDM7ICBiZWZvcmUgaXQgaXMgYWN0ZWQgdXBvbi4gQ2hhbmdpbmcgYW4gZW50cnkgYWx3YXlzIHJlcXVpcmVzIHRoZSBwYWdlIHRhYmxlCiYjNDM7ICBsb2NrLgogKiBSZWFkcyBmcm9tIGFuZCB3cml0ZXMgdG8gcGFnZSB0YWJsZSBlbnRyaWVzIG11c3QgYmUgKmFwcHJvcHJpYXRlbHkqCiAgIGF0b21pYy4gU2VlIHRoZSBzZWN0aW9uIG9uIGF0b21pY2l0eSBiZWxvdyBmb3IgZGV0YWlscy4KICogUG9wdWxhdGluZyBwcmV2aW91c2x5IGVtcHR5IGVudHJpZXMgcmVxdWlyZXMgdGhhdCB0aGUgbW1hcCBvciBWTUEgbG9ja3MgYXJlCmRpZmYgLS1naXQgYS9hcmNoL0tjb25maWcgYi9hcmNoL0tjb25maWcKaW5kZXggNDVjNjU3NzcyMzYyMy4uNmY3NTE2OTE2Nzk3ZSAxMDA2NDQKLS0tIGEvYXJjaC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvS2NvbmZpZwpAQCAtNTI2LDEzICYjNDM7NTI2LDYgQEAgY29uZmlnIEhBVkVfQVJDSF9KVU1QX0xBQkVMCiBjb25maWcgSEFWRV9BUkNIX0pVTVBfTEFCRUxfUkVMQVRJVkUKIAlib29sCiAKLWNvbmZpZyBNTVVfR0FUSEVSX1RBQkxFX0ZSRUUKLQlib29sCi0KLWNvbmZpZyBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFCi0JYm9vbAotCXNlbGVjdCBNTVVfR0FUSEVSX1RBQkxFX0ZSRUUKLQogY29uZmlnIE1NVV9HQVRIRVJfUEFHRV9TSVpFCiAJYm9vbAogCkBAIC01NDgsNyAmIzQzOzU0MSw2IEBAIGNvbmZpZyBNTVVfR0FUSEVSX01FUkdFX1ZNQVMKIAogY29uZmlnIE1NVV9HQVRIRVJfTk9fR0FUSEVSCiAJYm9vbAotCWRlcGVuZHMgb24gTU1VX0dBVEhFUl9UQUJMRV9GUkVFCiAKIGNvbmZpZyBBUkNIX1dBTlRfSVJRU19PRkZfQUNUSVZBVEVfTU0KIAlib29sCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL0tjb25maWcgYi9hcmNoL2FscGhhL0tjb25maWcKaW5kZXggZTUzZWYyZDg4NDYzNi4uOTA2M2M3YmRhNGU0MSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYWxwaGEvS2NvbmZpZwpAQCAtNDIsNyAmIzQzOzQyLDYgQEAgY29uZmlnIEFMUEhBCiAJc2VsZWN0IEFSQ0hfU1RBQ0tXQUxLCiAJc2VsZWN0IENQVV9OT19FRkZJQ0lFTlRfRkZTIGlmICFBTFBIQV9FVjY3CiAJc2VsZWN0IE1NVV9HQVRIRVJfTk9fUkFOR0UKLQlzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRQogCXNlbGVjdCBTUEFSU0VNRU1fRVhUUkVNRSBpZiBTUEFSU0VNRU0KIAlzZWxlY3QgWk9ORV9ETUEKIAlzZWxlY3QgVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVApkaWZmIC0tZ2l0IGEvYXJjaC9hcmMvaW5jbHVkZS9hc20vcGdhbGxvYy5oIGIvYXJjaC9hcmMvaW5jbHVkZS9hc20vcGdhbGxvYy5oCmluZGV4IGRmYWUwNzBmZThkNTUuLjliNmMzN2Y5MmU5N2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2MuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKQEAgLTcyLDcgJiM0Mzs3Miw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwNGRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHA0ZF90ICpwNGRwLCBwdWRfdCAqcHVkcCkKIAlzZXRfcDRkKHA0ZHAsIF9fcDRkKCh1bnNpZ25lZCBsb25nKXB1ZHApKTsKIH0KIAotI2RlZmluZSBfX3B1ZF9mcmVlX3RsYih0bGIsIHBtZCwgYWRkcikgIHB1ZF9mcmVlKCh0bGIpLSZndDttbSwgcG1kKQomIzQzOyNkZWZpbmUgX19wdWRfZnJlZV90bGIodGxiLCBwbWQsIGFkZHIpICB0bGJfcmVtb3ZlX3B0ZGVzYygodGxiKSwgdmlydF90b19wdGRlc2MocG1kKSkKIAogI2VuZGlmCiAKQEAgLTgzLDEwICYjNDM7ODMsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIHB1ZF9wb3B1bGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcHVkX3QgKnB1ZHAsIHBtZF90ICpwbWRwKQogCXNldF9wdWQocHVkcCwgX19wdWQoKHVuc2lnbmVkIGxvbmcpcG1kcCkpOwogfQogCi0jZGVmaW5lIF9fcG1kX2ZyZWVfdGxiKHRsYiwgcG1kLCBhZGRyKSAgcG1kX2ZyZWUoKHRsYiktJmd0O21tLCBwbWQpCiYjNDM7I2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIsIHBtZCwgYWRkcikgIHRsYl9yZW1vdmVfcHRkZXNjKCh0bGIpLCB2aXJ0X3RvX3B0ZGVzYyhwbWQpKQogCiAjZW5kaWYKIAotI2RlZmluZSBfX3B0ZV9mcmVlX3RsYih0bGIsIHB0ZSwgYWRkcikgIHB0ZV9mcmVlKCh0bGIpLSZndDttbSwgcHRlKQomIzQzOyNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLCBwdGUsIGFkZHIpICB0bGJfcmVtb3ZlX3B0ZGVzYygodGxiKSwgcGFnZV9wdGRlc2MocHRlKSkKIAogI2VuZGlmIC8qIF9BU01fQVJDX1BHQUxMT0NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vS2NvbmZpZyBiL2FyY2gvYXJtL0tjb25maWcKaW5kZXggNDA4YWE1OGEyYTViYi4uMGNjMjg5YTcxODRhYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybS9LY29uZmlnCkBAIC0xMzQsNyAmIzQzOzEzNCw2IEBAIGNvbmZpZyBBUk0KIAlzZWxlY3QgSEFWRV9QRVJGX1JFR1MKIAlzZWxlY3QgSEFWRV9QRVJGX1VTRVJfU1RBQ0tfRFVNUAogCXNlbGVjdCBIQVZFX1BPU0lYX0NQVV9USU1FUlNfVEFTS19XT1JLCi0Jc2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgaWYgU01QICZhbXA7JmFtcDsgQVJNX0xQQUUKIAlzZWxlY3QgSEFWRV9SRUdTX0FORF9TVEFDS19BQ0NFU1NfQVBJCiAJc2VsZWN0IEhBVkVfUlNFUQogCXNlbGVjdCBIQVZFX1JVU1QgaWYgQ1BVX0xJVFRMRV9FTkRJQU4gJmFtcDsmYW1wOyBDUFVfMzJ2NyAmYW1wOyZhbXA7ICFLQVNBTgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9LY29uZmlnIGIvYXJjaC9hcm02NC9LY29uZmlnCmluZGV4IDJiYmVkZWQzM2RhMGQuLmI2YzJkZDhiMjYxMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L0tjb25maWcKQEAgLTIyMSw3ICYjNDM7MjIxLDYgQEAgY29uZmlnIEFSTTY0CiAJc2VsZWN0IEhBVkVfUkVMSUFCTEVfU1RBQ0tUUkFDRQogCXNlbGVjdCBIQVZFX1BPU0lYX0NQVV9USU1FUlNfVEFTS19XT1JLCiAJc2VsZWN0IEhBVkVfRlVOQ1RJT05fQVJHX0FDQ0VTU19BUEkKLQlzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRQogCXNlbGVjdCBIQVZFX1JTRVEKIAlzZWxlY3QgSEFWRV9SVVNUIGlmIFJVU1RDX1NVUFBPUlRTX0FSTTY0CiAJc2VsZWN0IEhBVkVfU1RBQ0tQUk9URUNUT1IKZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL0tjb25maWcgYi9hcmNoL2xvb25nYXJjaC9LY29uZmlnCmluZGV4IDljNWRlZjcwNjIyMjIuLmQxYjIzZGE0MDczNzUgMTAwNjQ0Ci0tLSBhL2FyY2gvbG9vbmdhcmNoL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9sb29uZ2FyY2gvS2NvbmZpZwpAQCAtMTg4LDcgJiM0MzsxODgsNiBAQCBjb25maWcgTE9PTkdBUkNICiAJc2VsZWN0IElSUV9MT09OR0FSQ0hfQ1BVCiAJc2VsZWN0IExPQ0tfTU1fQU5EX0ZJTkRfVk1BCiAJc2VsZWN0IE1NVV9HQVRIRVJfTUVSR0VfVk1BUyBpZiBNTVUKLQlzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRQogCXNlbGVjdCBNT0RVTEVTX1VTRV9FTEZfUkVMQSBpZiBNT0RVTEVTCiAJc2VsZWN0IE5FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSwogCXNlbGVjdCBORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOSwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL0tjb25maWcgYi9hcmNoL202OGsvS2NvbmZpZwppbmRleCAxMTgzNWViNTlkOTRkLi5lYjg0YzNhZjkyYzAyIDEwMDY0NAotLS0gYS9hcmNoL202OGsvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL202OGsvS2NvbmZpZwpAQCAtMjksNiAmIzQzOzI5LDcgQEAgY29uZmlnIE02OEsKIAlzZWxlY3QgSEFWRV9BUkNIX0xJQkdDQ19ICiAJc2VsZWN0IEhBVkVfQVJDSF9TRUNDT01QCiAJc2VsZWN0IEhBVkVfQVJDSF9TRUNDT01QX0ZJTFRFUgomIzQzOwlzZWxlY3QgSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEUgaWYgTU1VX01PVE9ST0xBCiAJc2VsZWN0IEhBVkVfQVNNX01PRFZFUlNJT05TCiAJc2VsZWN0IEhBVkVfREVCVUdfQlVHVkVSQk9TRQogCXNlbGVjdCBIQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTIGlmICFDUFVfSEFTX05PX1VOQUxJR05FRApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21jZl9wZ2FsbG9jLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbWNmX3BnYWxsb2MuaAppbmRleCBmYzU0NTRkMzdkYTMxLi5iNTNmZjA5NTBkYjJlIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbWNmX3BnYWxsb2MuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbWNmX3BnYWxsb2MuaApAQCAtMzksMTAgJiM0MzszOSw3IEBAIGV4dGVybiBpbmxpbmUgcG1kX3QgKnBtZF9hbGxvY19rZXJuZWwocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQogc3RhdGljIGlubGluZSB2b2lkIF9fcHRlX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHBndGFibGVfdCBwZ3RhYmxlLAogCQkJCSAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewotCXN0cnVjdCBwdGRlc2MgKnB0ZGVzYyA9IHZpcnRfdG9fcHRkZXNjKHBndGFibGUpOwotCi0JcGFnZXRhYmxlX2R0b3IocHRkZXNjKTsKLQlwYWdldGFibGVfZnJlZShwdGRlc2MpOwomIzQzOwl0bGJfcmVtb3ZlX3B0ZGVzYyh0bGIsIHZpcnRfdG9fcHRkZXNjKHBndGFibGUpKTsKIH0KIAogc3RhdGljIGlubGluZSBwZ3RhYmxlX3QgcHRlX2FsbG9jX29uZShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tb3Rvcm9sYV9wZ2FsbG9jLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbW90b3JvbGFfcGdhbGxvYy5oCmluZGV4IDEwOTFmYjBhZmZiZWUuLmRjZGU0MGU4YjVjNmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tb3Rvcm9sYV9wZ2FsbG9jLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21vdG9yb2xhX3BnYWxsb2MuaApAQCAtMTcsNiAmIzQzOzE3LDcgQEAgZW51bSBtNjhrX3RhYmxlX3R5cGVzIHsKIGV4dGVybiB2b2lkIGluaXRfcG9pbnRlcl90YWJsZSh2b2lkICp0YWJsZSwgaW50IHR5cGUpOwogZXh0ZXJuIHZvaWQgKmdldF9wb2ludGVyX3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgdHlwZSk7CiBleHRlcm4gaW50IGZyZWVfcG9pbnRlcl90YWJsZSh2b2lkICp0YWJsZSwgaW50IHR5cGUpOwomIzQzO2V4dGVybiB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZSh2b2lkICp0YWJsZSk7CiAKIC8qCiAgKiBBbGxvY2F0ZSBhbmQgZnJlZSBwYWdlIHRhYmxlcy4gVGhlIHh4eF9rZXJuZWwoKSB2ZXJzaW9ucyBhcmUKQEAgLTQ3LDcgJiM0Mzs0OCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdGVfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHBndGFibGUpCiBzdGF0aWMgaW5saW5lIHZvaWQgX19wdGVfZnJlZV90bGIoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgcGd0YWJsZV90IHBndGFibGUsCiAJCQkJICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7Ci0JZnJlZV9wb2ludGVyX3RhYmxlKHBndGFibGUsIFRBQkxFX1BURSk7CiYjNDM7CXRsYl9yZW1vdmVfdGFibGUodGxiLCAodm9pZCAqKSgodW5zaWduZWQgbG9uZylwZ3RhYmxlIHwgVEFCTEVfUFRFKSk7CiB9CiAKIApAQCAtNjEsMTAgJiM0Mzs2MiwxMCBAQCBzdGF0aWMgaW5saW5lIGludCBwbWRfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCkKIAlyZXR1cm4gZnJlZV9wb2ludGVyX3RhYmxlKHBtZCwgVEFCTEVfUE1EKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgX19wbWRfZnJlZV90bGIoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgcG1kX3QgKnBtZCwKLQkJCQkgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBfX3BtZF9mcmVlX3RsYihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBwbWRfdCAqcG1kLAomIzQzOwkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKLQlyZXR1cm4gZnJlZV9wb2ludGVyX3RhYmxlKHBtZCwgVEFCTEVfUE1EKTsKJiM0MzsJdGxiX3JlbW92ZV90YWJsZSh0bGIsICh2b2lkICopKCh1bnNpZ25lZCBsb25nKXBtZCB8IFRBQkxFX1BNRCkpOwogfQogCiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tbS9tb3Rvcm9sYS5jIGIvYXJjaC9tNjhrL21tL21vdG9yb2xhLmMKaW5kZXggYjMwYWE2OWE3M2E2YS4uZmZjODA0ODM0NDBiYyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL21tL21vdG9yb2xhLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9tNjhrL21tL21vdG9yb2xhLmMKQEAgLTIwLDYgJiM0MzsyMCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvaW5pdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21lbWJsb2NrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZ2ZwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NsZWFudXAuaCZndDsKIAogI2luY2x1ZGUgJmx0O2FzbS9zZXR1cC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3VhY2Nlc3MuaCZndDsKQEAgLTEwMyw2ICYjNDM7MTA0LDggQEAgc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgcHRhYmxlX2xpc3RbM10gPSB7CiAJTElTVF9IRUFEX0lOSVQocHRhYmxlX2xpc3RbMl0pLAogfTsKIAomIzQzO3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socHRhYmxlX2xvY2spOwomIzQzOwogI2RlZmluZSBQRF9QVEFCTEUocHRkZXNjKSAoKHB0YWJsZV9kZXNjICopJmFtcDsodmlydF90b19wdGRlc2MoKHZvaWQgKikocHRkZXNjKSktJmd0O3B0X2xpc3QpKQogI2RlZmluZSBQRF9QVERFU0MocHRhYmxlKSAobGlzdF9lbnRyeShwdGFibGUsIHN0cnVjdCBwdGRlc2MsIHB0X2xpc3QpKQogI2RlZmluZSBQRF9NQVJLQklUUyhkcCkgKCoodW5zaWduZWQgaW50ICopJmFtcDtQRF9QVERFU0MoZHApLSZndDtwdF9pbmRleCkKQEAgLTEzOSw1MiAmIzQzOzE0Miw2NiBAQCB2b2lkIF9faW5pdCBpbml0X3BvaW50ZXJfdGFibGUodm9pZCAqdGFibGUsIGludCB0eXBlKQogCXJldHVybjsKIH0KIAotdm9pZCAqZ2V0X3BvaW50ZXJfdGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCB0eXBlKQomIzQzOy8qCiYjNDM7ICogRm9yIGEgcG9pbnRlciB0YWJsZSBmb3IgYSB1c2VyIHByb2Nlc3MgYWRkcmVzcyBzcGFjZSwgYQomIzQzOyAqIHRhYmxlIGlzIHRha2VuIGZyb20gYSBwdGRlc2MgYWxsb2NhdGVkIGZvciB0aGUgcHVycG9zZS4gIEVhY2gKJiM0MzsgKiBwdGRlc2MgY2FuIGhvbGQgOCBwb2ludGVyIHRhYmxlcy4gIFRoZSBwdGRlc2MgaXMgcmVtYXBwZWQgaW4KJiM0MzsgKiB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgdG8gYmUgbm9uY2FjaGVhYmxlLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkICphZGRfcG9pbnRlcl90YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IHR5cGUpCiB7Ci0JcHRhYmxlX2Rlc2MgKmRwID0gcHRhYmxlX2xpc3RbdHlwZV0ubmV4dDsKLQl1bnNpZ25lZCBpbnQgbWFzayA9IGxpc3RfZW1wdHkoJmFtcDtwdGFibGVfbGlzdFt0eXBlXSkgPyAwIDogUERfTUFSS0JJVFMoZHApOwotCXVuc2lnbmVkIGludCB0bXAsIG9mZjsKJiM0MzsJc3RydWN0IHB0ZGVzYyAqcHRkZXNjOwomIzQzOwlwdGFibGVfZGVzYyAqbmV3OwomIzQzOwl2b2lkICpwdF9hZGRyOwogCi0JLyoKLQkgKiBGb3IgYSBwb2ludGVyIHRhYmxlIGZvciBhIHVzZXIgcHJvY2VzcyBhZGRyZXNzIHNwYWNlLCBhCi0JICogdGFibGUgaXMgdGFrZW4gZnJvbSBhIHB0ZGVzYyBhbGxvY2F0ZWQgZm9yIHRoZSBwdXJwb3NlLiAgRWFjaAotCSAqIHB0ZGVzYyBjYW4gaG9sZCA4IHBvaW50ZXIgdGFibGVzLiAgVGhlIHB0ZGVzYyBpcyByZW1hcHBlZCBpbgotCSAqIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSB0byBiZSBub25jYWNoZWFibGUuCi0JICovCi0JaWYgKG1hc2sgPT0gMCkgewotCQlzdHJ1Y3QgcHRkZXNjICpwdGRlc2M7Ci0JCXB0YWJsZV9kZXNjICpuZXc7Ci0JCXZvaWQgKnB0X2FkZHI7Ci0KLQkJcHRkZXNjID0gcGFnZXRhYmxlX2FsbG9jKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPLCAwKTsKLQkJaWYgKCFwdGRlc2MpCi0JCQlyZXR1cm4gTlVMTDsKLQotCQlwdF9hZGRyID0gcHRkZXNjX2FkZHJlc3MocHRkZXNjKTsKLQotCQlzd2l0Y2ggKHR5cGUpIHsKLQkJY2FzZSBUQUJMRV9QVEU6Ci0JCQkvKgotCQkJICogbTY4ayBkb2VzbiYjMzk7dCBoYXZlIFNQTElUX1BURV9QVExPQ0tTIGZvciBub3QgaGF2aW5nCi0JCQkgKiBTTVAuCi0JCQkgKi8KLQkJCXBhZ2V0YWJsZV9wdGVfY3RvcihtbSwgcHRkZXNjKTsKLQkJCWJyZWFrOwotCQljYXNlIFRBQkxFX1BNRDoKLQkJCXBhZ2V0YWJsZV9wbWRfY3RvcihtbSwgcHRkZXNjKTsKLQkJCWJyZWFrOwotCQljYXNlIFRBQkxFX1BHRDoKLQkJCXBhZ2V0YWJsZV9wZ2RfY3RvcihwdGRlc2MpOwotCQkJYnJlYWs7Ci0JCX0KJiM0MzsJcHRkZXNjID0gcGFnZXRhYmxlX2FsbG9jKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPLCAwKTsKJiM0MzsJaWYgKCFwdGRlc2MpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJcHRfYWRkciA9IHB0ZGVzY19hZGRyZXNzKHB0ZGVzYyk7CiYjNDM7CiYjNDM7CXN3aXRjaCAodHlwZSkgewomIzQzOwljYXNlIFRBQkxFX1BURToKJiM0MzsJCS8qCiYjNDM7CQkgKiBtNjhrIGRvZXNuJiMzOTt0IGhhdmUgU1BMSVRfUFRFX1BUTE9DS1MgZm9yIG5vdCBoYXZpbmcKJiM0MzsJCSAqIFNNUC4KJiM0MzsJCSAqLwomIzQzOwkJcGFnZXRhYmxlX3B0ZV9jdG9yKG1tLCBwdGRlc2MpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgVEFCTEVfUE1EOgomIzQzOwkJcGFnZXRhYmxlX3BtZF9jdG9yKG1tLCBwdGRlc2MpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgVEFCTEVfUEdEOgomIzQzOwkJcGFnZXRhYmxlX3BnZF9jdG9yKHB0ZGVzYyk7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwltbXVfcGFnZV9jdG9yKHB0X2FkZHIpOwomIzQzOwomIzQzOwluZXcgPSBQRF9QVEFCTEUocHRfYWRkcik7CiAKLQkJbW11X3BhZ2VfY3RvcihwdF9hZGRyKTsKJiM0MzsJUERfTUFSS0JJVFMobmV3KSA9IHB0YWJsZV9tYXNrKHR5cGUpIC0gMTsKJiM0MzsJc2NvcGVkX2d1YXJkKHNwaW5sb2NrX2lycXNhdmUsICZhbXA7cHRhYmxlX2xvY2spCiYjNDM7CQlsaXN0X2FkZChuZXcsICZhbXA7cHRhYmxlX2xpc3RbdHlwZV0pOwogCi0JCW5ldyA9IFBEX1BUQUJMRShwdF9hZGRyKTsKLQkJUERfTUFSS0JJVFMobmV3KSA9IHB0YWJsZV9tYXNrKHR5cGUpIC0gMTsKLQkJbGlzdF9hZGRfdGFpbChuZXcsIGRwKTsKJiM0MzsJcmV0dXJuIChwbWRfdCAqKXB0X2FkZHI7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgKmdldF9wb2ludGVyX3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgdHlwZSkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCB0bXAsIG9mZjsKJiM0MzsJdW5zaWduZWQgbG9uZyBtYXNrOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwlwdGFibGVfZGVzYyAqZHA7CiYjNDM7CXZvaWQgKnJldDsKIAotCQlyZXR1cm4gKHBtZF90ICopcHRfYWRkcjsKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtwdGFibGVfbG9jaywgZmxhZ3MpOwomIzQzOwlkcCA9IHB0YWJsZV9saXN0W3R5cGVdLm5leHQ7CiYjNDM7CW1hc2sgPSBsaXN0X2VtcHR5KCZhbXA7cHRhYmxlX2xpc3RbdHlwZV0pID8gMCA6IFBEX01BUktCSVRTKGRwKTsKJiM0MzsKJiM0MzsJaWYgKG1hc2sgPT0gMCkgewomIzQzOwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3B0YWJsZV9sb2NrLCBmbGFncyk7CiYjNDM7CQlyZXR1cm4gYWRkX3BvaW50ZXJfdGFibGUobW0sIHR5cGUpOwogCX0KIAogCWZvciAodG1wID0gMSwgb2ZmID0gMDsgKG1hc2sgJmFtcDsgdG1wKSA9PSAwOyB0bXAgJmx0OyZsdDs9IDEsIG9mZiAmIzQzOz0gcHRhYmxlX3NpemUodHlwZSkpCkBAIC0xOTQsNyAmIzQzOzIxMSwxMCBAQCB2b2lkICpnZXRfcG9pbnRlcl90YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IHR5cGUpCiAJCS8qIG1vdmUgdG8gZW5kIG9mIGxpc3QgKi8KIAkJbGlzdF9tb3ZlX3RhaWwoZHAsICZhbXA7cHRhYmxlX2xpc3RbdHlwZV0pOwogCX0KLQlyZXR1cm4gcHRkZXNjX2FkZHJlc3MoUERfUFRERVNDKGRwKSkgJiM0Mzsgb2ZmOwomIzQzOwomIzQzOwlyZXQgPSBwdGRlc2NfYWRkcmVzcyhQRF9QVERFU0MoZHApKSAmIzQzOyBvZmY7CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtwdGFibGVfbG9jaywgZmxhZ3MpOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiBpbnQgZnJlZV9wb2ludGVyX3RhYmxlKHZvaWQgKnRhYmxlLCBpbnQgdHlwZSkKQEAgLTIwMyw2ICYjNDM7MjIzLDkgQEAgaW50IGZyZWVfcG9pbnRlcl90YWJsZSh2b2lkICp0YWJsZSwgaW50IHR5cGUpCiAJdW5zaWduZWQgbG9uZyBwdGFibGUgPSAodW5zaWduZWQgbG9uZyl0YWJsZTsKIAl1bnNpZ25lZCBsb25nIHB0X2FkZHIgPSBwdGFibGUgJmFtcDsgUEFHRV9NQVNLOwogCXVuc2lnbmVkIGludCBtYXNrID0gMVUgJmx0OyZsdDsgKChwdGFibGUgLSBwdF9hZGRyKS9wdGFibGVfc2l6ZSh0eXBlKSk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7cHRhYmxlX2xvY2ssIGZsYWdzKTsKIAogCWRwID0gUERfUFRBQkxFKHB0X2FkZHIpOwogCWlmIChQRF9NQVJLQklUUyAoZHApICZhbXA7IG1hc2spCkBAIC0yMTMsNiAmIzQzOzIzNiw4IEBAIGludCBmcmVlX3BvaW50ZXJfdGFibGUodm9pZCAqdGFibGUsIGludCB0eXBlKQogCWlmIChQRF9NQVJLQklUUyhkcCkgPT0gcHRhYmxlX21hc2sodHlwZSkpIHsKIAkJLyogYWxsIHRhYmxlcyBpbiBwdGRlc2MgYXJlIGZyZWUsIGZyZWUgcHRkZXNjICovCiAJCWxpc3RfZGVsKGRwKTsKJiM0MzsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtwdGFibGVfbG9jaywgZmxhZ3MpOwomIzQzOwogCQltbXVfcGFnZV9kdG9yKCh2b2lkICopcHRfYWRkcik7CiAJCXBhZ2V0YWJsZV9kdG9yX2ZyZWUodmlydF90b19wdGRlc2MoKHZvaWQgKilwdF9hZGRyKSk7CiAJCXJldHVybiAxOwpAQCAtMjIzLDkgJiM0MzsyNDgsMjEgQEAgaW50IGZyZWVfcG9pbnRlcl90YWJsZSh2b2lkICp0YWJsZSwgaW50IHR5cGUpCiAJCSAqLwogCQlsaXN0X21vdmUoZHAsICZhbXA7cHRhYmxlX2xpc3RbdHlwZV0pOwogCX0KJiM0MzsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3B0YWJsZV9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKJiM0Mzt2b2lkIF9fdGxiX3JlbW92ZV90YWJsZSh2b2lkICp0YWJsZSkKJiM0Mzt7CiYjNDM7CS8qIFRoZSBib3R0b20gMiBiaXRzIGFyZSB1c2VkIHRvIGVuY29kZSBwYWdlIHRhYmxlIHR5cGUuICovCiYjNDM7CWNvbnN0IHVuc2lnbmVkIGxvbmcgZW5jb2RlZCA9ICh1bnNpZ25lZCBsb25nKXRhYmxlOwomIzQzOwl2b2lkICphZGRyID0gKHZvaWQgKikoZW5jb2RlZCAmYW1wOyB+M1VMKTsKJiM0MzsJY29uc3QgaW50IHR5cGUgPSBlbmNvZGVkICZhbXA7IDM7CiYjNDM7CiYjNDM7CWZyZWVfcG9pbnRlcl90YWJsZShhZGRyLCB0eXBlKTsKJiM0Mzt9CiYjNDM7CiAvKiBzaXplIG9mIG1lbW9yeSBhbHJlYWR5IG1hcHBlZCBpbiBoZWFkLlMgKi8KIGV4dGVybiBfX2luaXRkYXRhIHVuc2lnbmVkIGxvbmcgbTY4a19pbml0X21hcHBlZF9zaXplOwogCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcGdhbGxvYy5oIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3BnYWxsb2MuaAppbmRleCAwODRhOGEwZGMyMzk1Li5mZmVlNmEwMDkyMTlhIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcGdhbGxvYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKQEAgLTI1LDcgJiM0MzsyNSw3IEBAIGV4dGVybiB2b2lkIF9fYmFkX3B0ZShwbWRfdCAqcG1kKTsKIAogZXh0ZXJuIHB0ZV90ICpwdGVfYWxsb2Nfb25lX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CiAKLSNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLCBwdGUsIGFkZHIpCXB0ZV9mcmVlKCh0bGIpLSZndDttbSwgKHB0ZSkpCiYjNDM7I2RlZmluZSBfX3B0ZV9mcmVlX3RsYih0bGIsIHB0ZSwgYWRkcikJdGxiX3JlbW92ZV9wdGRlc2MoKHRsYiksIHBhZ2VfcHRkZXNjKHB0ZSkpCiAKICNkZWZpbmUgcG1kX3BvcHVsYXRlKG1tLCBwbWQsIHB0ZSkgXAogCQkJKHBtZF92YWwoKihwbWQpKSA9ICh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwdGUpKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL0tjb25maWcgYi9hcmNoL21pcHMvS2NvbmZpZwppbmRleCBlMmViOTYyN2JkMTRjLi5mMGM0M2QxMThjYTAwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL21pcHMvS2NvbmZpZwpAQCAtOTcsNyAmIzQzOzk3LDYgQEAgY29uZmlnIE1JUFMKIAlzZWxlY3QgSVJRX0ZPUkNFRF9USFJFQURJTkcKIAlzZWxlY3QgSVNBIGlmIEVJU0EKIAlzZWxlY3QgTE9DS19NTV9BTkRfRklORF9WTUEKLQlzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRQogCXNlbGVjdCBNT0RVTEVTX1VTRV9FTEZfUkVMIGlmIE1PRFVMRVMKIAlzZWxlY3QgTU9EVUxFU19VU0VfRUxGX1JFTEEgaWYgTU9EVUxFUyAmYW1wOyZhbXA7IDY0QklUCiAJc2VsZWN0IFBFUkZfVVNFX1ZNQUxMT0MKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL0tjb25maWcgYi9hcmNoL3BhcmlzYy9LY29uZmlnCmluZGV4IGQzYWZhYzJmMGQ5YmUuLjc3ZjY3MDI4YWQ4OWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wYXJpc2MvS2NvbmZpZwpAQCAtODAsNyAmIzQzOzgwLDYgQEAgY29uZmlnIFBBUklTQwogCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCiAJc2VsZWN0IENQVV9OT19FRkZJQ0lFTlRfRkZTCiAJc2VsZWN0IFRIUkVBRF9JTkZPX0lOX1RBU0sKLQlzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRQogCXNlbGVjdCBORUVEX0RNQV9NQVBfU1RBVEUKIAlzZWxlY3QgTkVFRF9TR19ETUFfTEVOR1RICiAJc2VsZWN0IEhBVkVfQVJDSF9LR0RCCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnCmluZGV4IDI1ODBlMjdlNDMyODcuLjA3NjdjZmNiYWE0MjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnCkBAIC0zMDcsNyAmIzQzOzMwNyw2IEBAIGNvbmZpZyBQUEMKIAlzZWxlY3QgS0FTQU5fVk1BTExPQwkJCWlmIEtBU0FOICZhbXA7JmFtcDsgRVhFQ01FTQogCXNlbGVjdCBMT0NLX01NX0FORF9GSU5EX1ZNQQogCXNlbGVjdCBNTVVfR0FUSEVSX1BBR0VfU0laRQotCXNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFCiAJc2VsZWN0IEhBVkVfQVJDSF9UTEJfUkVNT1ZFX1RBQkxFCiAJc2VsZWN0IE1NVV9HQVRIRVJfTUVSR0VfVk1BUwogCXNlbGVjdCBNTVVfTEFaWV9UTEJfU0hPT1RET1dOCQlpZiBQUENfQk9PSzNTXzY0CmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L0tjb25maWcgYi9hcmNoL3Jpc2N2L0tjb25maWcKaW5kZXggNTA1ZWVkNGFmOTMyYi4uNzc0MWE0Mjg3NDk4MSAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvS2NvbmZpZwpAQCAtMjA4LDcgJiM0MzsyMDgsNiBAQCBjb25maWcgUklTQ1YKIAlzZWxlY3QgSVJRX0ZPUkNFRF9USFJFQURJTkcKIAlzZWxlY3QgS0FTQU5fVk1BTExPQyBpZiBLQVNBTgogCXNlbGVjdCBMT0NLX01NX0FORF9GSU5EX1ZNQQotCXNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFIGlmIFNNUCAmYW1wOyZhbXA7IE1NVQogCXNlbGVjdCBNT0RVTEVTX1VTRV9FTEZfUkVMQSBpZiBNT0RVTEVTCiAJc2VsZWN0IE9GCiAJc2VsZWN0IE9GX0VBUkxZX0ZMQVRUUkVFCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnCmluZGV4IGI4OGI4NTA0MjEzNjkuLmEzNDM3NmMwNWY2ZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9LY29uZmlnCkBAIC0yNjcsNyAmIzQzOzI2Nyw2IEBAIGNvbmZpZyBTMzkwCiAJc2VsZWN0IExPQ0tfTU1fQU5EX0ZJTkRfVk1BCiAJc2VsZWN0IE1NVV9HQVRIRVJfTUVSR0VfVk1BUwogCXNlbGVjdCBNTVVfR0FUSEVSX05PX0dBVEhFUgotCXNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFCiAJc2VsZWN0IE1PRFVMRVNfVVNFX0VMRl9SRUxBCiAJc2VsZWN0IE5FRURfRE1BX01BUF9TVEFURQlpZiBQQ0kKIAlzZWxlY3QgTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LCmRpZmYgLS1naXQgYS9hcmNoL3NoL0tjb25maWcgYi9hcmNoL3NoL0tjb25maWcKaW5kZXggZDYwZjFkNWE5NGMwZi4uZmU4NTlkZWY5MThjYyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvc2gvS2NvbmZpZwpAQCAtMzMsNiAmIzQzOzMzLDcgQEAgY29uZmlnIFNVUEVSSAogCXNlbGVjdCBIQVZFX0FSQ0hfQVVESVRTWVNDQUxMCiAJc2VsZWN0IEhBVkVfQVJDSF9LR0RCCiAJc2VsZWN0IEhBVkVfQVJDSF9TRUNDT01QX0ZJTFRFUgomIzQzOwlzZWxlY3QgSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEUgaWYgWDJUTEIKIAlzZWxlY3QgSEFWRV9BUkNIX1RSQUNFSE9PSwogCXNlbGVjdCBIQVZFX0RFQlVHX0JVR1ZFUkJPU0UKIAlzZWxlY3QgSEFWRV9ERUJVR19LTUVNTEVBSwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BnYWxsb2MuaAppbmRleCA2ZmU3MTIzZDM4ZmE5Li42N2NlN2ZhMjNmYTEyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BnYWxsb2MuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BnYWxsb2MuaApAQCAtMTcsNyAmIzQzOzE3LDExIEBAIGV4dGVybiB2b2lkIHBnZF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKTsKIGV4dGVybiB2b2lkIHB1ZF9wb3B1bGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcHVkX3QgKnB1ZHAsIHBtZF90ICpwbWQpOwogZXh0ZXJuIHBtZF90ICpwbWRfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpOwogZXh0ZXJuIHZvaWQgcG1kX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQpOwotI2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIsIHBtZHAsIGFkZHIpCQlwbWRfZnJlZSgodGxiKS0mZ3Q7bW0sIChwbWRwKSkKJiM0MztleHRlcm4gdm9pZCBfX3RsYl9yZW1vdmVfdGFibGUodm9pZCAqdGFibGUpOwomIzQzOwomIzQzOy8qIFBNRHMgYXJlIHNsYWItYWxsb2NhdGVkLCB0YWcgc28gdGhleSBhcmUgZnJlZWQgY29ycmVjdGx5LiAqLwomIzQzOyNkZWZpbmUgX19wbWRfZnJlZV90bGIodGxiLCBwbWRwLCBhZGRyKQkJCQkJXAomIzQzOwl0bGJfcmVtb3ZlX3RhYmxlKCh0bGIpLCAodm9pZCAqKSgodW5zaWduZWQgbG9uZykocG1kcCkgfCAxKSkKICNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHZvaWQgcG1kX3BvcHVsYXRlX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCwKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vcGd0YWJsZS5jIGIvYXJjaC9zaC9tbS9wZ3RhYmxlLmMKaW5kZXggM2E0MDg1ZWEwMTYxZi4uZjYxODRiODZiODljNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9wZ3RhYmxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zaC9tbS9wZ3RhYmxlLmMKQEAgLTU2LDQgJiM0Mzs1NiwyNCBAQCB2b2lkIHBtZF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKQogewogCWttZW1fY2FjaGVfZnJlZShwbWRfY2FjaGVwLCBwbWQpOwogfQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZV9zbGFiKHZvaWQgKnRhYmxlKQomIzQzO3sKJiM0MzsJa21lbV9jYWNoZV9mcmVlKHBtZF9jYWNoZXAsIHRhYmxlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgX190bGJfcmVtb3ZlX3RhYmxlX3BndGFibGUodm9pZCAqdGFibGUpCiYjNDM7ewomIzQzOwlwYWdldGFibGVfZHRvcl9mcmVlKHRhYmxlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBfX3RsYl9yZW1vdmVfdGFibGUodm9pZCAqdGFibGUpCiYjNDM7ewomIzQzOwljb25zdCB1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZyl0YWJsZTsKJiM0MzsKJiM0MzsJaWYgKGFkZHIgJmFtcDsgMSkKJiM0MzsJCV9fdGxiX3JlbW92ZV90YWJsZV9zbGFiKCh2b2lkICopKGFkZHIgJmFtcDsgfjFVTCkpOwomIzQzOwllbHNlCiYjNDM7CQlfX3RsYl9yZW1vdmVfdGFibGVfcGd0YWJsZSh0YWJsZSk7CiYjNDM7fQogI2VuZGlmIC8qIFBBR0VUQUJMRV9MRVZFTFMgJmd0OyAyICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL0tjb25maWcgYi9hcmNoL3NwYXJjL0tjb25maWcKaW5kZXggYWI3N2QzZjI1MzZlMS4uNzQyZmZmZjhjMzdmMiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvc3BhcmMvS2NvbmZpZwpAQCAtNjQsNiAmIzQzOzY0LDcgQEAgY29uZmlnIFNQQVJDMzIKIAlzZWxlY3QgSEFWRV9VSUQxNgogCXNlbGVjdCBIQVZFX1BBR0VfU0laRV80S0IKIAlzZWxlY3QgTE9DS19NTV9BTkRfRklORF9WTUEKJiM0MzsJc2VsZWN0IEhBVkVfQVJDSF9UTEJfUkVNT1ZFX1RBQkxFCiAJc2VsZWN0IE9MRF9TSUdBQ1RJT04KIAlzZWxlY3QgWk9ORV9ETUEKIApAQCAtNzUsOCAmIzQzOzc2LDcgQEAgY29uZmlnIFNQQVJDNjQKIAlzZWxlY3QgSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVIKIAlzZWxlY3QgSEFWRV9LUkVUUFJPQkVTCiAJc2VsZWN0IEhBVkVfS1BST0JFUwotCXNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFIGlmIFNNUAotCXNlbGVjdCBIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRSBpZiBTTVAKJiM0MzsJc2VsZWN0IEhBVkVfQVJDSF9UTEJfUkVNT1ZFX1RBQkxFCiAJc2VsZWN0IE1NVV9HQVRIRVJfTUVSR0VfVk1BUwogCXNlbGVjdCBNTVVfR0FUSEVSX05PX0ZMVVNIX0NBQ0hFCiAJc2VsZWN0IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzMyLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2NfMzIuaAppbmRleCA0ZjczZTg3YjIyYTMyLi4zNjAxMDg1MmJhMGMwIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2NfMzIuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2NfMzIuaApAQCAtNDgsNyAmIzQzOzQ4LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIGZyZWVfcG1kX2Zhc3QocG1kX3QgKiBwbWQpCiB9CiAKICNkZWZpbmUgcG1kX2ZyZWUobW0sIHBtZCkJCWZyZWVfcG1kX2Zhc3QocG1kKQotI2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIsIHBtZCwgYWRkcikJcG1kX2ZyZWUoKHRsYiktJmd0O21tLCBwbWQpCiYjNDM7CiYjNDM7I2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIsIHBtZCwgYWRkcikJCQkJCVwKJiM0MzsJdGxiX3JlbW92ZV90YWJsZSgodGxiKSwgKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKHBtZCkgfCAxVUwpKQogCiAjZGVmaW5lIHBtZF9wb3B1bGF0ZShtbSwgcG1kLCBwdGUpCXBtZF9zZXQocG1kLCBwdGUpCiAKQEAgLTcyLDYgJiM0Mzs3NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3B0ZV9mYXN0KHB0ZV90ICpwdGUpCiAjZGVmaW5lIHB0ZV9mcmVlX2tlcm5lbChtbSwgcHRlKQlmcmVlX3B0ZV9mYXN0KHB0ZSkKIAogdm9pZCBwdGVfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICogbW0sIHBndGFibGVfdCBwdGUpOwotI2RlZmluZSBfX3B0ZV9mcmVlX3RsYih0bGIsIHB0ZSwgYWRkcikJcHRlX2ZyZWUoKHRsYiktJmd0O21tLCBwdGUpCiYjNDM7dm9pZCBfX3RsYl9yZW1vdmVfdGFibGUodm9pZCAqdGFibGUpOwomIzQzOyNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLCBwdGUsIGFkZHIpCXRsYl9yZW1vdmVfdGFibGUoKHRsYiksICh2b2lkICopKHB0ZSkpCiAKICNlbmRpZiAvKiBfU1BBUkNfUEdBTExPQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2NfNjQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY182NC5oCmluZGV4IGNhYTc2MzJiZTRjMmEuLmI1MDU1ZDI1OWI3NGQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY182NC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY182NC5oCkBAIC03NCw4ICYjNDM7NzQsNiBAQCB2b2lkIHB0ZV9mcmVlX2RlZmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcGd0YWJsZSk7CiAKIHZvaWQgcGd0YWJsZV9mcmVlKHZvaWQgKnRhYmxlLCBib29sIGlzX3BhZ2UpOwogCi0jaWZkZWYgQ09ORklHX1NNUAotCiBzdHJ1Y3QgbW11X2dhdGhlcjsKIHZvaWQgdGxiX3JlbW92ZV90YWJsZShzdHJ1Y3QgbW11X2dhdGhlciAqLCB2b2lkICopOwogCkBAIC05NiwxMiAmIzQzOzk0LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZSh2b2lkICpfdGFibGUpCiAJCWlzX3BhZ2UgPSB0cnVlOwogCXBndGFibGVfZnJlZSh0YWJsZSwgaXNfcGFnZSk7CiB9Ci0jZWxzZSAvKiBDT05GSUdfU01QICovCi1zdGF0aWMgaW5saW5lIHZvaWQgcGd0YWJsZV9mcmVlX3RsYihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCB2b2lkICp0YWJsZSwgYm9vbCBpc19wYWdlKQotewotCXBndGFibGVfZnJlZSh0YWJsZSwgaXNfcGFnZSk7Ci19Ci0jZW5kaWYgLyogIUNPTkZJR19TTVAgKi8KIAogc3RhdGljIGlubGluZSB2b2lkIF9fcHRlX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHB0ZV90ICpwdGUsCiAJCQkJICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RsYl82NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90bGJfNjQuaAppbmRleCAzMDM3MTg3NDgyZGI3Li5mNWY5NjMxNjg1ZDUwIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RsYl82NC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGxiXzY0LmgKQEAgLTI5LDkgJiM0MzsyOSw3IEBAIHZvaWQgZmx1c2hfdGxiX3BlbmRpbmcodm9pZCk7CiAgKiBhbmQgdGhlcmVmb3JlIHdlIGRvbiYjMzk7dCBuZWVkIGEgVExCSSB3aGVuIGZyZWVpbmcgcGFnZS10YWJsZSBwYWdlcy4KICAqLwogCi0jaWZkZWYgQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUKICNkZWZpbmUgdGxiX25lZWRzX3RhYmxlX2ludmFsaWRhdGUoKQkoZmFsc2UpCi0jZW5kaWYKIAogI2luY2x1ZGUgJmx0O2FzbS1nZW5lcmljL3RsYi5oJmd0OwogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2xpYi9iaXRleHQuYyBiL2FyY2gvc3BhcmMvbGliL2JpdGV4dC5jCmluZGV4IDMyYTVjMWQ5NDU5Y2QuLmMzMDllMjc5NzNjZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbGliL2JpdGV4dC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvc3BhcmMvbGliL2JpdGV4dC5jCkBAIC0yMiw4ICYjNDM7MjIsNiBAQAogICogQGFsaWduOiByZXF1ZXN0ZWQgYWxpZ25tZW50CiAgKgogICogUmV0dXJucyBvZmZzZXQgaW4gdGhlIG1hcCBvciAtMSBpZiBvdXQgb2Ygc3BhY2UuCi0gKgotICogTm90IHNhZmUgdG8gY2FsbCBmcm9tIGFuIGludGVycnVwdCAodXNlcyBzcGluX2xvY2spLgogICovCiBpbnQgYml0X21hcF9zdHJpbmdfZ2V0KHN0cnVjdCBiaXRfbWFwICp0LCBpbnQgbGVuLCBpbnQgYWxpZ24pCiB7CkBAIC0zMSw2ICYjNDM7MjksNyBAQCBpbnQgYml0X21hcF9zdHJpbmdfZ2V0KHN0cnVjdCBiaXRfbWFwICp0LCBpbnQgbGVuLCBpbnQgYWxpZ24pCiAJaW50IG9mZl9uZXc7CiAJaW50IGFsaWduMTsKIAlpbnQgaSwgY29sb3I7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAodC0mZ3Q7bnVtX2NvbG9ycykgewogCQkvKiBhbGlnbiBpcyBvdmVybG9hZGVkIHRvIGJlIHRoZSBwYWdlIGNvbG9yICovCkBAIC01MCw3ICYjNDM7NDksNyBAQCBpbnQgYml0X21hcF9zdHJpbmdfZ2V0KHN0cnVjdCBiaXRfbWFwICp0LCBpbnQgbGVuLCBpbnQgYWxpZ24pCiAJCUJVRygpOwogCWNvbG9yICZhbXA7PSBhbGlnbjE7CiAKLQlzcGluX2xvY2soJmFtcDt0LSZndDtsb2NrKTsKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDt0LSZndDtsb2NrLCBmbGFncyk7CiAJaWYgKGxlbiAmbHQ7IHQtJmd0O2xhc3Rfc2l6ZSkKIAkJb2Zmc2V0ID0gdC0mZ3Q7Zmlyc3RfZnJlZTsKIAllbHNlCkBAIC02NCw3ICYjNDM7NjMsNyBAQCBpbnQgYml0X21hcF9zdHJpbmdfZ2V0KHN0cnVjdCBiaXRfbWFwICp0LCBpbnQgbGVuLCBpbnQgYWxpZ24pCiAJCWlmIChvZmZzZXQgJmd0Oz0gdC0mZ3Q7c2l6ZSkKIAkJCW9mZnNldCA9IDA7CiAJCWlmIChjb3VudCAmIzQzOyBsZW4gJmd0OyB0LSZndDtzaXplKSB7Ci0JCQlzcGluX3VubG9jaygmYW1wO3QtJmd0O2xvY2spOwomIzQzOwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt0LSZndDtsb2NrLCBmbGFncyk7CiAvKiBQMyAqLyBwcmludGsoS0VSTl9FUlIKICAgJiMzNDtiaXRtYXAgb3V0OiBzaXplICVkIHVzZWQgJWQgb2ZmICVkIGxlbiAlZCBhbGlnbiAlZCBjb3VudCAlZFxuJiMzNDssCiAgIHQtJmd0O3NpemUsIHQtJmd0O3VzZWQsIG9mZnNldCwgbGVuLCBhbGlnbiwgY291bnQpOwpAQCAtOTAsNyAmIzQzOzg5LDcgQEAgaW50IGJpdF9tYXBfc3RyaW5nX2dldChzdHJ1Y3QgYml0X21hcCAqdCwgaW50IGxlbiwgaW50IGFsaWduKQogCQkJCQl0LSZndDtsYXN0X29mZiA9IDA7CiAJCQkJdC0mZ3Q7dXNlZCAmIzQzOz0gbGVuOwogCQkJCXQtJmd0O2xhc3Rfc2l6ZSA9IGxlbjsKLQkJCQlzcGluX3VubG9jaygmYW1wO3QtJmd0O2xvY2spOwomIzQzOwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7dC0mZ3Q7bG9jaywgZmxhZ3MpOwogCQkJCXJldHVybiBvZmZzZXQ7CiAJCQl9CiAJCX0KQEAgLTEwMywxMCAmIzQzOzEwMiwxMSBAQCBpbnQgYml0X21hcF9zdHJpbmdfZ2V0KHN0cnVjdCBiaXRfbWFwICp0LCBpbnQgbGVuLCBpbnQgYWxpZ24pCiB2b2lkIGJpdF9tYXBfY2xlYXIoc3RydWN0IGJpdF9tYXAgKnQsIGludCBvZmZzZXQsIGludCBsZW4pCiB7CiAJaW50IGk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAodC0mZ3Q7dXNlZCAmbHQ7IGxlbikKIAkJQlVHKCk7CQkvKiBNdWNoIHRvbyBsYXRlIHRvIGRvIGFueSBnb29kLCBidXQgYWxhcy4uLiAqLwotCXNwaW5fbG9jaygmYW1wO3QtJmd0O2xvY2spOwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3QtJmd0O2xvY2ssIGZsYWdzKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgbGVuOyBpJiM0MzsmIzQzOykgewogCQlpZiAodGVzdF9iaXQob2Zmc2V0ICYjNDM7IGksIHQtJmd0O21hcCkgPT0gMCkKIAkJCUJVRygpOwpAQCAtMTE1LDcgJiM0MzsxMTUsNyBAQCB2b2lkIGJpdF9tYXBfY2xlYXIoc3RydWN0IGJpdF9tYXAgKnQsIGludCBvZmZzZXQsIGludCBsZW4pCiAJaWYgKG9mZnNldCAmbHQ7IHQtJmd0O2ZpcnN0X2ZyZWUpCiAJCXQtJmd0O2ZpcnN0X2ZyZWUgPSBvZmZzZXQ7CiAJdC0mZ3Q7dXNlZCAtPSBsZW47Ci0Jc3Bpbl91bmxvY2soJmFtcDt0LSZndDtsb2NrKTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3QtJmd0O2xvY2ssIGZsYWdzKTsKIH0KIAogdm9pZCBiaXRfbWFwX2luaXQoc3RydWN0IGJpdF9tYXAgKnQsIHVuc2lnbmVkIGxvbmcgKm1hcCwgaW50IHNpemUpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL3NybW11LmMgYi9hcmNoL3NwYXJjL21tL3NybW11LmMKaW5kZXggOWE3NDkwMmFkMTgxNC4uMmEyYzdiZDIxMDExNCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tbS9zcm1tdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvc3BhcmMvbW0vc3JtbXUuYwpAQCAtMzU5LDE5ICYjNDM7MzU5LDM5IEBAIHBndGFibGVfdCBwdGVfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogCXJldHVybiBwdGVwOwogfQogCi12b2lkIHB0ZV9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcHRlcCkKJiM0MztzdGF0aWMgdm9pZCBfX3B0ZV9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcHRlcCkKIHsKJiM0MzsJY29uc3QgYm9vbCBwcm9jZXNzX2NvbnRleHQgPSBtbTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAogCXBhZ2UgPSBwZm5fdG9fcGFnZShfX25vY2FjaGVfcGEoKHVuc2lnbmVkIGxvbmcpcHRlcCkgJmd0OyZndDsgUEFHRV9TSElGVCk7Ci0Jc3Bpbl9sb2NrKCZhbXA7bW0tJmd0O3BhZ2VfdGFibGVfbG9jayk7CiYjNDM7CWlmIChwcm9jZXNzX2NvbnRleHQpCiYjNDM7CQlzcGluX2xvY2soJmFtcDttbS0mZ3Q7cGFnZV90YWJsZV9sb2NrKTsKIAlpZiAocGFnZV9yZWZfZGVjX3JldHVybihwYWdlKSA9PSAxKQogCQlwYWdldGFibGVfZHRvcihwYWdlX3B0ZGVzYyhwYWdlKSk7Ci0Jc3Bpbl91bmxvY2soJmFtcDttbS0mZ3Q7cGFnZV90YWJsZV9sb2NrKTsKJiM0MzsJaWYgKHByb2Nlc3NfY29udGV4dCkKJiM0MzsJCXNwaW5fdW5sb2NrKCZhbXA7bW0tJmd0O3BhZ2VfdGFibGVfbG9jayk7CiAKIAlzcm1tdV9mcmVlX25vY2FjaGUocHRlcCwgU1JNTVVfUFRFX1RBQkxFX1NJWkUpOwogfQogCiYjNDM7dm9pZCBwdGVfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHB0ZXApCiYjNDM7ewomIzQzOwlfX3B0ZV9mcmVlKG1tLCBwdGVwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBfX3RsYl9yZW1vdmVfdGFibGUodm9pZCAqdGFibGUpCiYjNDM7ewomIzQzOwljb25zdCB1bnNpZ25lZCBsb25nIGVuY29kZWQgPSAodW5zaWduZWQgbG9uZyl0YWJsZTsKJiM0MzsJY29uc3QgdW5zaWduZWQgbG9uZyBhZGRyID0gZW5jb2RlZCAmYW1wOyB+MVVMOwomIzQzOwljb25zdCBib29sIGlzX3BtZCA9IGVuY29kZWQgJmFtcDsgMTsKJiM0MzsKJiM0MzsJaWYgKGlzX3BtZCkKJiM0MzsJCWZyZWVfcG1kX2Zhc3QoKHBtZF90ICopYWRkcik7CiYjNDM7CWVsc2UgLyogQ2FsbGVkIGZyb20gc29mdGlycSBjb250ZXh0LCBubyBtbS4gKi8KJiM0MzsJCV9fcHRlX2ZyZWUoTlVMTCwgKHBndGFibGVfdClhZGRyKTsKJiM0Mzt9CiYjNDM7CiAvKiBjb250ZXh0IGhhbmRsaW5nIC0gYSBkeW5hbWljYWxseSBzaXplZCBwb29sIGlzIHVzZWQgKi8KICNkZWZpbmUgTk9fQ09OVEVYVAktMQogCmRpZmYgLS1naXQgYS9hcmNoL3VtL0tjb25maWcgYi9hcmNoL3VtL0tjb25maWcKaW5kZXggZDk1NDFkMTNkOWViMC4uOTRiOGZmNzBmNTc4YiAxMDA2NDQKLS0tIGEvYXJjaC91bS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvdW0vS2NvbmZpZwpAQCAtNDQsNyAmIzQzOzQ0LDYgQEAgY29uZmlnIFVNTAogCXNlbGVjdCBIQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFMKIAlzZWxlY3QgVEhSRUFEX0lORk9fSU5fVEFTSwogCXNlbGVjdCBTUEFSU0VfSVJRCi0Jc2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUKIAogY29uZmlnIE1NVQogCWJvb2wKZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcgYi9hcmNoL3g4Ni9LY29uZmlnCmluZGV4IGE4YzNiM2QzMWEyNzYuLjZlNWU0NjJlYzA1OWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvS2NvbmZpZwpAQCAtMjgzLDcgJiM0MzsyODMsNiBAQCBjb25maWcgWDg2CiAJc2VsZWN0IEhBVkVfUEVSRl9SRUdTCiAJc2VsZWN0IEhBVkVfUEVSRl9VU0VSX1NUQUNLX0RVTVAKIAlzZWxlY3QgQVNZTkNfS0VSTkVMX1BHVEFCTEVfRlJFRQlpZiBJT01NVV9TVkEKLQlzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRQogCXNlbGVjdCBNTVVfR0FUSEVSX01FUkdFX1ZNQVMKIAlzZWxlY3QgSEFWRV9QT1NJWF9DUFVfVElNRVJTX1RBU0tfV09SSwogCXNlbGVjdCBIQVZFX1JFR1NfQU5EX1NUQUNLX0FDQ0VTU19BUEkKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3RsYi5oIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vdGxiLmgKaW5kZXggOGMzY2ViNDI3MDE4MC4uNmZiN2I3ODE1NGY2MiAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vdGxiLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vdGxiLmgKQEAgLTE2LDcgJiM0MzsxNiw3IEBACiAKICNpbmNsdWRlICZsdDthc20tZ2VuZXJpYy90bGIuaCZndDsKIAotI2RlZmluZSBfX3B0ZV9mcmVlX3RsYih0bGIsIHB0ZSwgYWRkcmVzcykJcHRlX2ZyZWUoKHRsYiktJmd0O21tLCBwdGUpCiYjNDM7I2RlZmluZSBfX3B0ZV9mcmVlX3RsYih0bGIsIHB0ZSwgYWRkcmVzcykJdGxiX3JlbW92ZV9wdGRlc2MoKHRsYiksIHBhZ2VfcHRkZXNjKHB0ZSkpCiAKIHZvaWQgY2hlY2tfdGxiX3Nhbml0eSh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmgKaW5kZXggYmRjYzI3NzhhYzY0Zi4uMDQ0ZGFiYzFmZTljYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3RsYi5oCkBAIC02NywxMSAmIzQzOzY3LDggQEAKICAqICAtIHRsYl9yZW1vdmVfdGFibGUoKQogICoKICAqICAgIHRsYl9yZW1vdmVfdGFibGUoKSBpcyB0aGUgYmFzaWMgcHJpbWl0aXZlIHRvIGZyZWUgcGFnZS10YWJsZSBkaXJlY3RvcmllcwotICogICAgKF9fcCpfZnJlZV90bGIoKSkuICBJbiBpdCYjMzk7cyBtb3N0IHByaW1pdGl2ZSBmb3JtIGl0IGlzIGFuIGFsaWFzIGZvcgotICogICAgdGxiX3JlbW92ZV9wYWdlKCkgYmVsb3csIGZvciB3aGVuIHBhZ2UgZGlyZWN0b3JpZXMgYXJlIHBhZ2VzIGFuZCBoYXZlIG5vCi0gKiAgICBhZGRpdGlvbmFsIGNvbnN0cmFpbnRzLgotICoKLSAqICAgIFNlZSBhbHNvIE1NVV9HQVRIRVJfVEFCTEVfRlJFRSBhbmQgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRS4KJiM0MzsgKiAgICAoX19wKl9mcmVlX3RsYigpKS4gIFBhZ2UgZGlyZWN0b3JpZXMgYXJlIGZyZWVkIGFmdGVyIGFuIFJDVSBncmFjZQomIzQzOyAqICAgIHBlcmlvZCAtIHNlZSB0aGUgY29tbWVudCBpbiBtbS9tbXVfZ2F0aGVyLmMuCiAgKgogICogIC0gdGxiX3JlbW92ZV9wYWdlKCkgLyB0bGJfcmVtb3ZlX3BhZ2Vfc2l6ZSgpCiAgKiAgLSBfX3RsYl9yZW1vdmVfZm9saW9fcGFnZXMoKSAvIF9fdGxiX3JlbW92ZV9wYWdlX3NpemUoKQpAQCAtMTUxLDI0ICYjNDM7MTQ4LDE1IEBACiAgKiAgVGhpcyBtaWdodCBiZSB1c2VmdWwgaWYgeW91ciBhcmNoaXRlY3R1cmUgaGFzIHNpemUgc3BlY2lmaWMgVExCCiAgKiAgaW52YWxpZGF0aW9uIGluc3RydWN0aW9ucy4KICAqCi0gKiAgTU1VX0dBVEhFUl9UQUJMRV9GUkVFCi0gKgotICogIFRoaXMgcHJvdmlkZXMgdGxiX3JlbW92ZV90YWJsZSgpLCB0byBiZSB1c2VkIGluc3RlYWQgb2YgdGxiX3JlbW92ZV9wYWdlKCkKLSAqICBmb3IgcGFnZSBkaXJlY3RvcmVzIChfX3AqX2ZyZWVfdGxiKCkpLgotICoKLSAqICBVc2VmdWwgaWYgeW91ciBhcmNoaXRlY3R1cmUgaGFzIG5vbi1wYWdlIHBhZ2UgZGlyZWN0b3JpZXMuCiYjNDM7ICogIFBhZ2UgZGlyZWN0b3JpZXMgKF9fcCpfZnJlZV90bGIoKSkgYXJlIGFsd2F5cyBmcmVlZCB2aWEgdGxiX3JlbW92ZV90YWJsZSgpLAomIzQzOyAqICBhZnRlciBhbiBSQ1UgZ3JhY2UgcGVyaW9kIChzZWUgbW0vbW11X2dhdGhlci5jKS4KICAqCi0gKiAgV2hlbiB1c2VkLCBhbiBhcmNoaXRlY3R1cmUgaXMgZXhwZWN0ZWQgdG8gcHJvdmlkZSBfX3RsYl9yZW1vdmVfdGFibGUoKSBvcgotICogIHVzZSB0aGUgZ2VuZXJpYyBfX3RsYl9yZW1vdmVfdGFibGUoKSwgd2hpY2ggZG9lcyB0aGUgYWN0dWFsIGZyZWVpbmcgb2YgdGhlc2UKLSAqICBwYWdlcy4KJiM0MzsgKiBUaGlzIHNlcmlhbGlzZXMgYWdhaW5zdCBzb2Z0d2FyZSBwYWdlLXRhYmxlIHdhbGtlcnMsIGluY2x1ZGluZyBhcmNoaXRlY3R1cmVzCiYjNDM7ICogd2hpY2ggZG8gbm90IHVzZSBJUElzIGZvciByZW1vdGUgVExCIGludmFsaWRhdGVzLgogICoKLSAqICBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFCi0gKgotICogIExpa2UgTU1VX0dBVEhFUl9UQUJMRV9GUkVFLCBhbmQgYWRkcyBzZW1pLVJDVSBzZW1hbnRpY3MgdG8gdGhlIGZyZWUgKHNlZQotICogIGNvbW1lbnQgYmVsb3cpLgotICoKLSAqICBVc2VmdWwgaWYgeW91ciBhcmNoaXRlY3R1cmUgZG9lc24mIzM5O3QgdXNlIElQSXMgZm9yIHJlbW90ZSBUTEIgaW52YWxpZGF0ZXMKLSAqICBhbmQgdGhlcmVmb3JlIGRvZXNuJiMzOTt0IG5hdHVyYWxseSBzZXJpYWxpemUgd2l0aCBzb2Z0d2FyZSBwYWdlLXRhYmxlIHdhbGtlcnMuCiYjNDM7ICogIEFuIGFyY2hpdGVjdHVyZSBpcyBleHBlY3RlZCB0byBwcm92aWRlIF9fdGxiX3JlbW92ZV90YWJsZSgpIChzZWUKJiM0MzsgKiAgSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEUpIG9yIHVzZSB0aGUgZ2VuZXJpYyBfX3RsYl9yZW1vdmVfdGFibGUoKSwgd2hpY2gKJiM0MzsgKiAgZG9lcyB0aGUgYWN0dWFsIGZyZWVpbmcgb2YgdGhlc2UgcGFnZXMuCiAgKgogICogIE1NVV9HQVRIRVJfTk9fRkxVU0hfQ0FDSEUKICAqCkBAIC0yMDAsMTIgJiM0MzsxODgsOCBAQAogICogIHZhcmlvdXMgcHRlcF9nZXRfYW5kX2NsZWFyKCkgZnVuY3Rpb25zLgogICovCiAKLSNpZmRlZiBDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFCi0KIHN0cnVjdCBtbXVfdGFibGVfYmF0Y2ggewotI2lmZGVmIENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFCiAJc3RydWN0IHJjdV9oZWFkCQlyY3U7Ci0jZW5kaWYKIAl1bnNpZ25lZCBpbnQJCW5yOwogCXZvaWQJCQkqdGFibGVzW107CiB9OwpAQCAtMjI0LDIzICYjNDM7MjA4LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZSh2b2lkICp0YWJsZSkKIAogZXh0ZXJuIHZvaWQgdGxiX3JlbW92ZV90YWJsZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCB2b2lkICp0YWJsZSk7CiAKLSNlbHNlIC8qICFDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfcmVtb3ZlX3BhZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHBhZ2UgKnBhZ2UpOwotLyoKLSAqIFdpdGhvdXQgTU1VX0dBVEhFUl9UQUJMRV9GUkVFIHRoZSBhcmNoaXRlY3R1cmUgaXMgYXNzdW1lZCB0byBoYXZlIHBhZ2UgYmFzZWQKLSAqIHBhZ2UgZGlyZWN0b3JpZXMgYW5kIHdlIGNhbiB1c2UgdGhlIG5vcm1hbCBwYWdlIGJhdGNoaW5nIHRvIGZyZWUgdGhlbS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIHRsYl9yZW1vdmVfdGFibGUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgdm9pZCAqdGFibGUpCi17Ci0Jc3RydWN0IHB0ZGVzYyAqcHRkZXNjID0gKHN0cnVjdCBwdGRlc2MgKil0YWJsZTsKLQotCXBhZ2V0YWJsZV9kdG9yKHB0ZGVzYyk7Ci0JdGxiX3JlbW92ZV9wYWdlKHRsYiwgcHRkZXNjX3BhZ2UocHRkZXNjKSk7Ci19Ci0jZW5kaWYgLyogQ09ORklHX01NVV9HQVRIRVJfVEFCTEVfRlJFRSAqLwotCi0jaWZkZWYgQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUKIC8qCiAgKiBUaGlzIGFsbG93cyBhbiBhcmNoaXRlY3R1cmUgdGhhdCBkb2VzIG5vdCB1c2UgdGhlIGxpbnV4IHBhZ2UtdGFibGVzIGZvcgogICogaGFyZHdhcmUgdG8gc2tpcCB0aGUgVExCSSB3aGVuIGZyZWVpbmcgcGFnZSB0YWJsZXMuCkBAIC0yNTMsMTkgJiM0MzsyMjAsNiBAQCB2b2lkIHRsYl9yZW1vdmVfdGFibGVfc3luY19vbmUodm9pZCk7CiAKIHZvaWQgdGxiX3JlbW92ZV90YWJsZV9zeW5jX3JjdSh2b2lkKTsKIAotI2Vsc2UKLQotI2lmZGVmIHRsYl9uZWVkc190YWJsZV9pbnZhbGlkYXRlCi0jZXJyb3IgdGxiX25lZWRzX3RhYmxlX2ludmFsaWRhdGUoKSByZXF1aXJlcyBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFCi0jZW5kaWYKLQotc3RhdGljIGlubGluZSB2b2lkIHRsYl9yZW1vdmVfdGFibGVfc3luY19vbmUodm9pZCkgeyB9Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfcmN1KHZvaWQpIHsgfQotCi0jZW5kaWYgLyogQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgKi8KLQotCiAjaWZuZGVmIENPTkZJR19NTVVfR0FUSEVSX05PX0dBVEhFUgogLyoKICAqIElmIHdlIGNhbiYjMzk7dCBhbGxvY2F0ZSBhIHBhZ2UgdG8gbWFrZSBhIGJpZyBiYXRjaCBvZiBwYWdlIHBvaW50ZXJzCkBAIC0zMjUsOSAmIzQzOzI3OSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfZmx1c2hfcm1hcHMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0CiBzdHJ1Y3QgbW11X2dhdGhlciB7CiAJc3RydWN0IG1tX3N0cnVjdAkqbW07CiAKLSNpZmRlZiBDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFCiAJc3RydWN0IG1tdV90YWJsZV9iYXRjaAkqYmF0Y2g7Ci0jZW5kaWYKIAogCXVuc2lnbmVkIGxvbmcJCXN0YXJ0OwogCXVuc2lnbmVkIGxvbmcJCWVuZDsKZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnCmluZGV4IGMxZGRmNTljMGQ3MWEuLmJjN2JlZmFmYjQ3YjUgMTAwNjQ0Ci0tLSBhL21tL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvbW0vS2NvbmZpZwpAQCAtMTQ2NSw3ICYjNDM7MTQ2NSw3IEBAIGNvbmZpZyBIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRQogCiBjb25maWcgUFRfUkVDTEFJTQogCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgJmFtcDsmYW1wOyAhSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEUKJiM0MzsJZGVwZW5kcyBvbiBNTVUgJmFtcDsmYW1wOyAhSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEUKIAloZWxwCiAJICBUcnkgdG8gcmVjbGFpbSBlbXB0eSB1c2VyIHBhZ2UgdGFibGUgcGFnZXMgaW4gcGF0aHMgb3RoZXIgdGhhbiBtdW5tYXAKIAkgIGFuZCBleGl0X21tYXAgcGF0aC4KZGlmZiAtLWdpdCBhL21tL2d1cC5jIGIvbW0vZ3VwLmMKaW5kZXggZWI4OThlYTFlZTIyZS4uNjNiNDM1ZWM2MDVjOCAxMDA2NDQKLS0tIGEvbW0vZ3VwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZ3VwLmMKQEAgLTI3MDAsOCAmIzQzOzI3MDAsOSBAQCBFWFBPUlRfU1lNQk9MKGdldF91c2VyX3BhZ2VzX3VubG9ja2VkKTsKICAqIEJlZm9yZSBhY3RpdmF0aW5nIHRoaXMgY29kZSwgcGxlYXNlIGJlIGF3YXJlIHRoYXQgdGhlIGZvbGxvd2luZyBhc3N1bXB0aW9ucwogICogYXJlIGN1cnJlbnRseSBtYWRlOgogICoKLSAqICAqKSBFaXRoZXIgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSBpcyBlbmFibGVkLCBhbmQgdGxiX3JlbW92ZV90YWJsZSgpIGlzIHVzZWQgdG8KLSAqICBmcmVlIHBhZ2VzIGNvbnRhaW5pbmcgcGFnZSB0YWJsZXMgb3IgVExCIGZsdXNoaW5nIHJlcXVpcmVzIElQSSBicm9hZGNhc3QuCiYjNDM7ICogICopIHRsYl9yZW1vdmVfdGFibGUoKSBpcyB1c2VkIHRvIGZyZWUgcGFnZXMgY29udGFpbmluZyBwYWdlIHRhYmxlcywgd2l0aAomIzQzOyAqICB0aGUgZnJlZSBkZWZlcnJlZCB1bnRpbCBhbiBSQ1UgZ3JhY2UgcGVyaW9kIGhhcyBlbGFwc2VkIChzZWUKJiM0MzsgKiAgbW0vbW11X2dhdGhlci5jKS4KICAqCiAgKiAgKikgcHRlcyBjYW4gYmUgcmVhZCBhdG9taWNhbGx5IGJ5IHRoZSBhcmNoaXRlY3R1cmUuCiAgKgpkaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmMKaW5kZXggNTQ0OTRjM2ZhOTgzNS4uNTA1ZjdiNjJmZjI4MSAxMDA2NDQKLS0tIGEvbW0vaHVnZV9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jCkBAIC0yNDc2LDcgJiM0MzsyNDc2LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHphcF9kZXBvc2l0ZWRfdGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQpCiAJcGd0YWJsZV90IHBndGFibGU7CiAKIAlwZ3RhYmxlID0gcGd0YWJsZV90cmFuc19odWdlX3dpdGhkcmF3KG1tLCBwbWQpOwotCXB0ZV9mcmVlKG1tLCBwZ3RhYmxlKTsKJiM0MzsJcHRlX2ZyZWVfZGVmZXIobW0sIHBndGFibGUpOwogCW1tX2RlY19ucl9wdGVzKG1tKTsKIH0KIApkaWZmIC0tZ2l0IGEvbW0vbW11X2dhdGhlci5jIGIvbW0vbW11X2dhdGhlci5jCmluZGV4IDM5ODVkODU2ZGU3ZjkuLjJhNzJhOTY4Njc3M2EgMTAwNjQ0Ci0tLSBhL21tL21tdV9nYXRoZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tbXVfZ2F0aGVyLmMKQEAgLTIxOCw4ICYjNDM7MjE4LDYgQEAgYm9vbCBfX3RsYl9yZW1vdmVfcGFnZV9zaXplKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgcGFnZV8KIAogI2VuZGlmIC8qIE1NVV9HQVRIRVJfTk9fR0FUSEVSICovCiAKLSNpZmRlZiBDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFCi0KIHN0YXRpYyB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZV9mcmVlKHN0cnVjdCBtbXVfdGFibGVfYmF0Y2ggKmJhdGNoKQogewogCWludCBpOwpAQCAtMjMwLDEwICYjNDM7MjI4LDggQEAgc3RhdGljIHZvaWQgX190bGJfcmVtb3ZlX3RhYmxlX2ZyZWUoc3RydWN0IG1tdV90YWJsZV9iYXRjaCAqYmF0Y2gpCiAJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWJhdGNoKTsKIH0KIAotI2lmZGVmIENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFCi0KIC8qCi0gKiBTZW1pIFJDVSBmcmVlaW5nIG9mIHRoZSBwYWdlIGRpcmVjdG9yaWVzLgomIzQzOyAqIFJDVSBmcmVlaW5nIG9mIHRoZSBwYWdlIGRpcmVjdG9yaWVzLgogICoKICAqIFRoaXMgaXMgbmVlZGVkIGJ5IHNvbWUgYXJjaGl0ZWN0dXJlcyB0byBpbXBsZW1lbnQgc29mdHdhcmUgcGFnZXRhYmxlIHdhbGtlcnMuCiAgKgpAQCAtMjU5LDEzICYjNDM7MjU1LDEzIEBAIHN0YXRpYyB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZV9mcmVlKHN0cnVjdCBtbXVfdGFibGVfYmF0Y2ggKmJhdGNoKQogICogbWVhbnMuCiAgKgogICogV2hhdCB3ZSBkbyBpcyBiYXRjaCB0aGUgZnJlZWQgZGlyZWN0b3J5IHBhZ2VzICh0YWJsZXMpIGFuZCBSQ1UgZnJlZSB0aGVtLgotICogV2UgdXNlIHRoZSBzY2hlZCBSQ1UgdmFyaWFudCwgYXMgdGhhdCBndWFyYW50ZWVzIHRoYXQgSVJRL3ByZWVtcHQgZGlzYWJsaW5nCi0gKiBob2xkcyBvZmYgZ3JhY2UgcGVyaW9kcy4KJiM0MzsgKiBEaXNhYmxpbmcgSVJRcyBvciBwcmVlbXB0aW9uIGhvbGRzIG9mZiBSQ1UgZ3JhY2UgcGVyaW9kcywgc28gdGhpcyBwcm90ZWN0cwomIzQzOyAqIGJvdGggcmN1X3JlYWRfbG9jaygpIGFuZCBJUlEtZGlzYWJsaW5nIHdhbGtlcnMuCiAgKgogICogSG93ZXZlciwgaW4gb3JkZXIgdG8gYmF0Y2ggdGhlc2UgcGFnZXMgd2UgbmVlZCB0byBhbGxvY2F0ZSBzdG9yYWdlLCB0aGlzCiAgKiBhbGxvY2F0aW9uIGlzIGRlZXAgaW5zaWRlIHRoZSBNTSBjb2RlIGFuZCBjYW4gdGh1cyBlYXNpbHkgZmFpbCBvbiBtZW1vcnkKLSAqIHByZXNzdXJlLiBUbyBndWFyYW50ZWUgcHJvZ3Jlc3Mgd2UgZmFsbCBiYWNrIHRvIHNpbmdsZSB0YWJsZSBmcmVlaW5nLCBzZWUKLSAqIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0bGJfcmVtb3ZlX3RhYmxlX29uZSgpLgomIzQzOyAqIHByZXNzdXJlLiBUbyBndWFyYW50ZWUgcHJvZ3Jlc3Mgd2UgZmFsbCBiYWNrIHRvIHNpbmdsZSB0YWJsZSBmcmVlaW5nLCB3aGljaAomIzQzOyAqIGlzIGFsc28gUkNVLWRlZmVycmVkIC0gc2VlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0bGJfcmVtb3ZlX3RhYmxlX29uZSgpLgogICoKICAqLwogCkBAIC0zMTUsMTUgJiM0MzszMTEsNiBAQCB2b2lkIHRsYl9yZW1vdmVfdGFibGVfc3luY19yY3Uodm9pZCkKIAlzeW5jaHJvbml6ZV9yY3UoKTsKIH0KIAotI2Vsc2UgLyogIUNPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFICovCi0KLXN0YXRpYyB2b2lkIHRsYl9yZW1vdmVfdGFibGVfZnJlZShzdHJ1Y3QgbW11X3RhYmxlX2JhdGNoICpiYXRjaCkKLXsKLQlfX3RsYl9yZW1vdmVfdGFibGVfZnJlZShiYXRjaCk7Ci19Ci0KLSNlbmRpZiAvKiBDT05GSUdfTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSAqLwotCiAvKgogICogSWYgd2Ugd2FudCB0bGJfcmVtb3ZlX3RhYmxlKCkgdG8gaW1wbHkgVExCIGludmFsaWRhdGVzLgogICovCkBAIC00MDMsMTMgJiM0MzszOTAsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdGxiX3RhYmxlX2luaXQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYikKIAl0bGItJmd0O2JhdGNoID0gTlVMTDsKIH0KIAotI2Vsc2UgLyogIUNPTkZJR19NTVVfR0FUSEVSX1RBQkxFX0ZSRUUgKi8KLQotc3RhdGljIGlubGluZSB2b2lkIHRsYl90YWJsZV9mbHVzaChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfdGFibGVfaW5pdChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiKSB7IH0KLQotI2VuZGlmIC8qIENPTkZJR19NTVVfR0FUSEVSX1RBQkxFX0ZSRUUgKi8KLQogc3RhdGljIHZvaWQgdGxiX2ZsdXNoX21tdV9mcmVlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIpCiB7CiAJdGxiX3RhYmxlX2ZsdXNoKHRsYik7CmRpZmYgLS1naXQgYS9tbS9wZ3RhYmxlLWdlbmVyaWMuYyBiL21tL3BndGFibGUtZ2VuZXJpYy5jCmluZGV4IGI5MWIxYTk4MDI5YzcuLmZmOGZmMzcwNjQ4NTMgMTAwNjQ0Ci0tLSBhL21tL3BndGFibGUtZ2VuZXJpYy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3BndGFibGUtZ2VuZXJpYy5jCkBAIC0zODYsOSAmIzQzOzM4NiwyMSBAQCBwdGVfdCAqcHRlX29mZnNldF9tYXBfcndfbm9sb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLAogICogYmUgcmVhZC1vbmx5L3JlYWQtd3JpdGUgcHJvdGVjdGVkLgogICoKICAqIE5vdGUgdGhhdCBmcmVlX3BndGFibGVzKCksIHVzZWQgYWZ0ZXIgdW5tYXBwaW5nIGRldGFjaGVkIHZtYXMsIG9yIHdoZW4KLSAqIGV4aXRpbmcgdGhlIHdob2xlIG1tLCBkb2VzIG5vdCB0YWtlIHBhZ2UgdGFibGUgbG9jayBiZWZvcmUgZnJlZWluZyBhIHBhZ2UKLSAqIHRhYmxlLCBhbmQgbWF5IG5vdCB1c2UgUkNVIGF0IGFsbDogJiMzNDtvdXRzaWRlcnMmIzM0OyBsaWtlIGtodWdlcGFnZWQgc2hvdWxkIGF2b2lkCi0gKiBwdGVfb2Zmc2V0X21hcCgpIGFuZCBjbyBvbmNlIHRoZSB2bWEgaXMgZGV0YWNoZWQgZnJvbSBtbSBvciBtbV91c2VycyBpcyB6ZXJvLgomIzQzOyAqIGV4aXRpbmcgdGhlIHdob2xlIG1tLCBkb2VzIG5vdCB0YWtlIHRoZSBwYWdlIHRhYmxlIGxvY2sgYmVmb3JlIGZyZWVpbmcgYQomIzQzOyAqIHRhYmxlLgomIzQzOyAqCiYjNDM7ICogSG93ZXZlciwgdGhlIFBNRCBlbnRyeSBpcyBjbGVhcmVkIGZpcnN0LCBhbmQgdGhlIHRhYmxlIGZyZWVkIG9ubHkgYWZ0ZXIKJiM0MzsgKiBhbiBSQ1UgZ3JhY2UgcGVyaW9kLCBzbyBhIHdhbGtlciB0aGF0IG1hcHBlZCB0aGUgdGFibGUgdW5kZXIKJiM0MzsgKiByY3VfcmVhZF9sb2NrKCkgc3RheXMgc2FmZSwgYW5kIHRoZSBwbWRfc2FtZSgpIHJlY2hlY2sgaW4KJiM0MzsgKiBwdGVfb2Zmc2V0X21hcF9sb2NrKCkgZGV0ZWN0cyB0aGUgdGVhcmRvd24uCiYjNDM7ICoKJiM0MzsgKiBUaGVyZWZvcmUgaXQgaXMgc2FmZSBmb3IgJiMzNDtvdXRzaWRlcnMmIzM0OyBsaWtlIGtodWdlcGFnZWQgdG8gdXNlCiYjNDM7ICogcHRlX29mZnNldF9tYXAoKSBhbmQgY28uIGZvciBWTUFzIHRoYXQgbWlnaHQgYmUgdW5kZXJnb2luZyBwYWdlIHRhYmxlCiYjNDM7ICogdGVhcmRvd24uCiYjNDM7ICoKJiM0MzsgKiBOb3RlIHRoYXQgdGhlIFBHRCBpdHNlbGYgaXMgZnJlZWQgYXQgbW1kcm9wKCkgdGltZSwgbm90IHVuZGVyIFJDVSAtIHNvIHRoZQomIzQzOyAqIHdhbGtlciBtdXN0IGtlZXAgdGhlIG1tIGFsaXZlIHZpYSBtbWdyYWIoKS4gV2l0aCB0aGF0IGhlbGQsIHdhbGtpbmcgcmVtYWlucwomIzQzOyAqIHNhZmUgZXZlbiBvbmNlIG1tX3VzZXJzIGhhcyByZWFjaGVkIHplcm8uCiAgKi8KIHB0ZV90ICpwdGVfb2Zmc2V0X21hcF9sb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLAogCQkJICAgdW5zaWduZWQgbG9uZyBhZGRyLCBzcGlubG9ja190ICoqcHRscCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTkyCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogODg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIE1lbW9yeSBTYWZldHkgYW5kIENvbmN1cnJlbmN5IEltcGxpY2F0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdoZXRoZXIgaXQgaW50cm9kdWNlcyBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcywgc29tZXRoaW5nIEtNU0FOIHdvdWxkIGZsYWcsIG9yIGlmIHRoZSBjaGFuZ2VzIGFyZSBtYWlubHkgcmVsYXRlZCB0byBjb25jdXJyZW5jeSwgbWVtb3J5IG1hbmFnZW1lbnQsIHBhZ2UgdGFibGUgZnJlZWluZywgbG9ja2luZywgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIHdoaWNoIEtBU0FOIGFuZCBMb2NrZGVwIHdvdWxkIGJlIG1vcmUgcmVsZXZhbnQgZm9yLgoKRmlyc3QsIHRoZSBwYXRjaCBpdHNlbGYgaXMgYWJvdXQgbWFraW5nIHRoZSBgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRWAgb3B0aW9uIHN0YW5kYXJkIGFjcm9zcyBhcmNoaXRlY3R1cmVzLiBFc3NlbnRpYWxseSwgaXQmIzM5O3MgYWJvdXQgc3RhbmRhcmRpemluZyBob3cgcGFnZSB0YWJsZXMgYXJlIGZyZWVkIHVzaW5nIFJDVSBtZWNoYW5pc21zLCBpbnZvbHZpbmcgYHRsYl9yZW1vdmVfdGFibGVgIGFuZCBgdGxiX3JlbW92ZV9wdGRlc2NgLgoKTm93LCBsZXQmIzM5O3Mgd2FsayB0aHJvdWdoIHRoZSBtb2RpZmllZCBmaWxlczoKCiogICBUaGUgZG9jdW1lbnRhdGlvbiBpcyBnZXR0aW5nIHVwZGF0ZWQgdG8gcmVmbGVjdCBwYWdlIHRhYmxlIGxvY2tpbmcgcnVsZXMgYW5kIFJDVSB1c2FnZS4gR29vZC4KKiAgIFRoZSBgS2NvbmZpZ2AgZmlsZXMgYXJlIGJlaW5nIGNsZWFuZWQgdXAsIHJlbW92aW5nIGFuZCBjb25zb2xpZGF0aW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhpcyBzZWVtcyBzdHJhaWdodGZvcndhcmQg4oCTIHNpbXBsaWZ5aW5nIHRoZSBidWlsZCBwcm9jZXNzLgoqICAgVGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBgS2NvbmZpZ2AgZmlsZXMgYXJlIGdldHRpbmcgdGhlaXIgY29uZmlndXJhdGlvbnMgY2xlYW5lZCB1cCBhcyB3ZWxsLiBBbHNvLCBleHBlY3RlZC4KKiAgIFdlJiMzOTtyZSBzZWVpbmcgY2hhbmdlcyBpbiBgcGdhbGxvYy5oYCBoZWFkZXJzIG9uIHNldmVyYWwgYXJjaGl0ZWN0dXJlcyAoYGFyY2AsIGBtaWNyb2JsYXplYCwgYHh0ZW5zYWApIHdoZXJlIGRpcmVjdCBmcmVlaW5nIGlzIGJlaW5nIHJlcGxhY2VkIHdpdGggYHRsYl9yZW1vdmVfcHRkZXNjYC4gVGhhdCBzZWVtcyBsaWtlIGEgbW92ZSB0b3dhcmRzIHRoZSBSQ1UgYXBwcm9hY2guCiogICBUaGVyZSYjMzk7cyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBgX190bGJfcmVtb3ZlX3RhYmxlYCBhbG9uZyB3aXRoIGEgc3BpbmxvY2sgZm9yIGFsbG9jYXRpb24vZnJlZWluZyBvbiBgbTY4a2AuIFRoYXTigJlzIGdvb2QgdG8gc2VlLCBzcGlubG9ja3MgYXJlIG5lY2Vzc2FyeSBmb3IgY29uY3VycmVudCBhY2Nlc3MgcHJvdGVjdGlvbi4KKiAgIGBzaGAgYW5kIGBzcGFyY2AgYXJjaGl0ZWN0dXJlcyBhcmUgYWxzbyBnZXR0aW5nIGltcGxlbWVudGF0aW9ucyByZWxhdGVkIHRvIGBfX3RsYl9yZW1vdmVfdGFibGVgLiBDb25zaXN0ZW50IHdpdGggdGhlIFJDVSBjaGFuZ2UuCiogICBJbiBgaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaGAsIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzIGZvciB0aGUgUkNVLWJhc2VkIHRhYmxlIGZyZWVpbmcgYXJlIHJlbW92ZWQsIGluZGljYXRpbmcgdGhhdCBpdCYjMzk7cyBub3cgdGhlIHN0YW5kYXJkIGFwcHJvYWNoLgoqICAgVGhlIGBtbS9LY29uZmlnYCBmaWxlIGhhcyBhIGRlcGVuZGVuY3kgdXBkYXRlIHJlbGF0ZWQgdG8gYFBUX1JFQ0xBSU1gLgoqICAgQSBjb21tZW50IHVwZGF0ZSBpbiBgbW0vZ3VwLmNgLgoqICAgYG1tL2h1Z2VfbWVtb3J5LmNgIGhhcyBgcHRlX2ZyZWUobW0sIHBndGFibGUpYCBjaGFuZ2VkIHRvIGBwdGVfZnJlZV9kZWZlcihtbSwgcGd0YWJsZSlgIGluIGB6YXBfZGVwb3NpdGVkX3RhYmxlYC4gVGhpcyBsb29rcyBpbXBvcnRhbnQsIGJlY2F1c2UgZGVmZXJyaW5nIHRoZSBmcmVlIHZpYSBSQ1UgaXMgdGhlIGNvcmUgb2YgdGhlIHBhdGNoLgoqICAgYG1tL21tdV9nYXRoZXIuY2AgZ2V0cyByaWQgb2YgdGhlIG9sZCBjb25kaXRpb25hbCBjb2RlIHJlbGF0ZWQgdG8gUkNVIHRhYmxlIGZyZWVpbmcuCiogICBUaGUgYG1tL3BndGFibGUtZ2VuZXJpYy5jYCBjb21tZW50cyBhcmUgdXBkYXRlZC4KCk9rYXksIHRoZSBjcnVjaWFsIHBhcnQgaXMgdGhlIGB6YXBfZGVwb3NpdGVkX3RhYmxlYCBhbmQgYHB0ZV9mcmVlX2RlZmVyYCBjaGFuZ2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBgcHRlX2ZyZWVfZGVmZXJgIHdvcmtzLiBJJiMzOTttIGdvaW5nIHRvIHJ1biBgZ3JlcHBlcmAgYWNyb3NzIHRoZSBjb2RlYmFzZSB0byBnZXQgYSBmdWxsIHBpY3R1cmUgb2YgYHB0ZV9mcmVlX2RlZmVyYCB1c2FnZS4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgY2hhbmdlcyBpbnRlcmFjdCB3aXRoIHRoZSBleGlzdGluZyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcGFnZSB0YWJsZSBzdHJ1Y3R1cmVzLCBhbmQgZGV0ZXJtaW5lIHdoYXQgdGhlIGRlZmVycmVkIGZyZWVpbmcgYWN0dWFsbHkgZW50YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHRlX2ZyZWVfZGVmZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BnYWxsb2MuaD00Mz1zdGF0aWMgaW5saW5lIHZvaWQgcHRlX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwdGVwYWdlKVxuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgtNDctXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGdhbGxvYy5oOjQ4Oi8qIGFyY2ggdXNlIHB0ZV9mcmVlX2RlZmVyKCkgaW1wbGVtZW50YXRpb24gaW4gYXJjaC9wb3dlcnBjL21tL3BndGFibGUtZnJhZy5jICovXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGdhbGxvYy5oOjQ5OiNkZWZpbmUgcHRlX2ZyZWVfZGVmZXIgcHRlX2ZyZWVfZGVmZXJcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmg6NTA6dm9pZCBwdGVfZnJlZV9kZWZlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHBndGFibGUpO1xuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BnYWxsb2MuaC01MS1cbi0tXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZS1mcmFnLmM9MTE3PXZvaWQgcHRlX2ZyYWdtZW50X2ZyZWUodW5zaWduZWQgbG9uZyAqdGFibGUsIGludCBrZXJuZWwpXG4tLVxuYXJjaC9wb3dlcnBjL21tL3BndGFibGUtZnJhZy5jLTEzMy0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZS1mcmFnLmM6MTM0OnZvaWQgcHRlX2ZyZWVfZGVmZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwZ3RhYmxlKVxuYXJjaC9wb3dlcnBjL21tL3BndGFibGUtZnJhZy5jLTEzNS17XG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BnYWxsb2MuaD0xNTE9c3RhdGljIGlubGluZSB2b2lkIHBtZF9wb3B1bGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGdhbGxvYy5oLTE2Ny1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmg6MTY4Oi8qIGFyY2ggdXNlIHB0ZV9mcmVlX2RlZmVyKCkgaW1wbGVtZW50YXRpb24gaW4gYXJjaC9zMzkwL21tL3BnYWxsb2MuYyAqL1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BnYWxsb2MuaDoxNjk6I2RlZmluZSBwdGVfZnJlZV9kZWZlciBwdGVfZnJlZV9kZWZlclxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BnYWxsb2MuaDoxNzA6dm9pZCBwdGVfZnJlZV9kZWZlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHBndGFibGUpO1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BnYWxsb2MuaC0xNzEtXG4tLVxuYXJjaC9zMzkwL21tL3BnYWxsb2MuYz0xNDk9c3RhdGljIHZvaWQgcHRlX2ZyZWVfbm93KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbi0tXG5hcmNoL3MzOTAvbW0vcGdhbGxvYy5jLTE1NS1cbmFyY2gvczM5MC9tbS9wZ2FsbG9jLmM6MTU2OnZvaWQgcHRlX2ZyZWVfZGVmZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwZ3RhYmxlKVxuYXJjaC9zMzkwL21tL3BnYWxsb2MuYy0xNTcte1xuLS1cbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY182NC5oPTY2PXZvaWQgcHRlX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwdGVwYWdlKTtcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY182NC5oLTY3LVxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzY0Lmg6Njg6LyogYXJjaCB1c2UgcHRlX2ZyZWVfZGVmZXIoKSBpbXBsZW1lbnRhdGlvbiBpbiBhcmNoL3NwYXJjL21tL2luaXRfNjQuYyAqL1xuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzY0Lmg6Njk6I2RlZmluZSBwdGVfZnJlZV9kZWZlciBwdGVfZnJlZV9kZWZlclxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzY0Lmg6NzA6dm9pZCBwdGVfZnJlZV9kZWZlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHBndGFibGUpO1xuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzY0LmgtNzEtXG4tLVxuYXJjaC9zcGFyYy9tbS9pbml0XzY0LmM9Mjg2Nj1zdGF0aWMgdm9pZCBwdGVfZnJlZV9ub3coc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuLS1cbmFyY2gvc3BhcmMvbW0vaW5pdF82NC5jLTI4NzMtXG5hcmNoL3NwYXJjL21tL2luaXRfNjQuYzoyODc0OnZvaWQgcHRlX2ZyZWVfZGVmZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwZ3RhYmxlKVxuYXJjaC9zcGFyYy9tbS9pbml0XzY0LmMtMjg3NS17XG4tLVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg9MTE1PXN0YXRpYyBpbmxpbmUgdm9pZCBwdGVfdW5tYXAocHRlX3QgKnB0ZSlcbi0tXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0xMjAtXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaDoxMjE6dm9pZCBwdGVfZnJlZV9kZWZlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHBndGFibGUpO1xuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMTIyLVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MjQ3ND1zdGF0aWMgaW5saW5lIHZvaWQgemFwX2RlcG9zaXRlZF90YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTI0NzgtXHRwZ3RhYmxlID0gcGd0YWJsZV90cmFuc19odWdlX3dpdGhkcmF3KG1tLCBwbWQpO1xubW0vaHVnZV9tZW1vcnkuYzoyNDc5Olx0cHRlX2ZyZWVfZGVmZXIobW0sIHBndGFibGUpO1xubW0vaHVnZV9tZW1vcnkuYy0yNDgwLVx0bW1fZGVjX25yX3B0ZXMobW0pO1xuLS1cbm1tL2todWdlcGFnZWQuYz0xODYyPXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yMDY3LVx0cGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2UobW0sIGhhZGRyLCBwZ3RfcG1kKTtcbm1tL2todWdlcGFnZWQuYzoyMDY4Olx0cHRlX2ZyZWVfZGVmZXIobW0sIHBtZF9wZ3RhYmxlKHBndF9wbWQpKTtcbm1tL2todWdlcGFnZWQuYy0yMDY5LVxuLS1cbm1tL2todWdlcGFnZWQuYz0yMTUxPXN0YXRpYyB2b2lkIHJldHJhY3RfcGFnZV90YWJsZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgcGdvZmYpXG4tLVxubW0va2h1Z2VwYWdlZC5jLTIyMjgtXHRcdFx0cGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2UobW0sIGFkZHIsIHBndF9wbWQpO1xubW0va2h1Z2VwYWdlZC5jOjIyMjk6XHRcdFx0cHRlX2ZyZWVfZGVmZXIobW0sIHBtZF9wZ3RhYmxlKHBndF9wbWQpKTtcbm1tL2todWdlcGFnZWQuYy0yMjMwLVx0XHR9XG4tLVxubW0vcGd0YWJsZS1nZW5lcmljLmM9MjIxPXBtZF90IHBtZHBfY29sbGFwc2VfZmx1c2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbi0tXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYy0yMzktXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYzoyNDA6LyogYXJjaCBkZWZpbmUgcHRlX2ZyZWVfZGVmZXIgaW4gYXNtL3BnYWxsb2MuaCBmb3IgaXRzIG93biBpbXBsZW1lbnRhdGlvbiAqL1xubW0vcGd0YWJsZS1nZW5lcmljLmM6MjQxOiNpZm5kZWYgcHRlX2ZyZWVfZGVmZXJcbm1tL3BndGFibGUtZ2VuZXJpYy5jLTI0Mi1zdGF0aWMgdm9pZCBwdGVfZnJlZV9ub3coc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuLS1cbm1tL3BndGFibGUtZ2VuZXJpYy5jLTI0OS1cbm1tL3BndGFibGUtZ2VuZXJpYy5jOjI1MDp2b2lkIHB0ZV9mcmVlX2RlZmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcGd0YWJsZSlcbm1tL3BndGFibGUtZ2VuZXJpYy5jLTI1MS17XG4tLVxubW0vcGd0YWJsZS1nZW5lcmljLmMtMjU2LX1cbm1tL3BndGFibGUtZ2VuZXJpYy5jOjI1NzojZW5kaWYgLyogcHRlX2ZyZWVfZGVmZXIgKi9cbm1tL3BndGFibGUtZ2VuZXJpYy5jLTI1OC0jZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MzIyCgkJCQkJCQlvdXRwdXQ6IDI2NgoJCQkJCQkJdGhvdWdodHM6IDUwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpcyBhbmQgS01TQU4gQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgaXQmIzM5O3MgYSBmYWlybHkgc2lnbmlmaWNhbnQgdW5pZmljYXRpb24gZWZmb3J0IGluIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgTU1VIGdhdGhlciB0YWJsZSBmcmVlaW5nLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBzdGFuZGFyZGl6aW5nIG9uIFJDVSB0YWJsZSBmcmVlaW5nIGFjcm9zcyBhbGwgYXJjaGl0ZWN0dXJlcywgd2hpY2gsIGlmIGRvbmUgcmlnaHQsIHNob3VsZCBzaW1wbGlmeSB0aGluZ3MgYW5kIGltcHJvdmUgb3ZlcmFsbCByb2J1c3RuZXNzLiBTcGVjaWZpY2FsbHksIEkgc2VlIGl0JiMzOTtzIGNvbnZlcnRpbmcgYXJjaGl0ZWN0dXJlcyBsaWtlIGFyYywgbTY4aywgbWljcm9ibGF6ZSwgc2gsIHNwYXJjLCBhbmQgeHRlbnNhIHRvIHVzZSBgdGxiX3JlbW92ZV9wdGRlc2NgIG9yIGB0bGJfcmVtb3ZlX3RhYmxlYCB3aXRoIGBfX3RsYl9yZW1vdmVfdGFibGVgLiBUaGUgbTY4ayBhbmQgc3BhcmMgY29uY3VycmVuY3kgZml4ZXMgYXJlIGRlZmluaXRlbHkgYSBnb29kIHRoaW5nLiBJJiMzOTttIGFsc28gbm90aW5nIHRoZSBjaGFuZ2UgdG8gYHB0ZV9mcmVlX2RlZmVyYCBpbiBgemFwX2RlcG9zaXRlZF90YWJsZWAsIHdoaWNoIGlzIHN0YW5kYXJkIHByYWN0aWNlIGluIHRoZXNlIHR5cGVzIG9mIGNoYW5nZXMuIEFuZCByZW1vdmluZyB0aG9zZSBLY29uZmlnIG9wdGlvbnMgc3VnZ2VzdHMgdGhlIGRlc2lnbiBoYXMgbWF0dXJlZCB0byB0aGUgcG9pbnQgaXQmIzM5O3Mgc2FmZSB0byBkZWZhdWx0IHRvIHRoZSBSQ1UgYXBwcm9hY2guCgpOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogRG9lcyB0aGlzIGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcz8gSSYjMzk7bSBpbW1lZGlhdGVseSBnb2luZyB0aHJvdWdoIG15IG1lbnRhbCBjaGVja2xpc3QuIEZpcnN0LCBhcmUgdGhlcmUgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIGJlaW5nIHBhc3NlZCB0byB1c2Vyc3BhY2U/IE5vLCBub3RoaW5nIGp1bXBpbmcgb3V0IGF0IG1lIGluIHRlcm1zIG9mIGlvY3RsL3N5c2NhbGwvbmV0bGluay9CUEYvc29ja2V0L2NvcHlfdG9fdXNlciBjaGFuZ2VzLiBHb29kLiBTZWNvbmQsIGFyZSB0aGVyZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBwYWRkaW5nIGlzc3Vlcywgb3Igc3RydWN0IGZpZWxkcyB0aGF0IGNvdWxkIGJlIHByb2JsZW1hdGljPyBOb3BlLCBub3RoaW5nIGxpa2UgdGhhdCBoZXJlLiBUaGlyZCwgYXJlIHdlIGFsbG9jYXRpbmcgb3IgaW5pdGlhbGl6aW5nIGFueSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkPyBDaGVja2luZyBgbTY4ay9tbS9tb3Rvcm9sYS5jYCwgYWgsIEkgc2VlIGBwYWdldGFibGVfYWxsb2MoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8sIDApYCBpcyB1c2VkLCB6ZXJvaW5nIHBhZ2UgdGFibGUgYWxsb2NhdGlvbnMsIHdoaWNoIGlzIGFzIGl0IHNob3VsZCBiZS4gQW5kIGxhc3RseSwgd2hhdCBhYm91dCBhbnkgYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgZGF0YSBidWZmZXJzPyBOb3QgaW4gdGhpcyBwYXRjaC4KClNvLCB0aGlzIHBhdGNoIGlzIHByaW1hcmlseSBjb25jZXJuZWQgd2l0aCBwYWdlIHRhYmxlIGxpZmV0aW1lLCBUTEIgZ2F0aGVyaW5nLCBSQ1UgcmVjbGFtYXRpb24gb2YgcGFnZSB0YWJsZSBwYWdlcywgbG9ja2luZywgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IHN5bmNocm9uaXphdGlvbi4gTXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvIHRoZSBwb3RlbnRpYWwgcGl0ZmFsbHMgaW4gdGhpcyBhcmVhOiBjb25jdXJyZW5jeSBpc3N1ZXMsIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMsIG1lbW9yeSBsZWFrcywgaW52YWxpZCBmcmVlcywgb3IgbG9ja2luZyBwcm9ibGVtcy4gRm9ydHVuYXRlbHksIGFsbCB0aGUgdG9vbHMgYXJlIHRoZXJlIHRvIGNhdGNoIHRob3NlIHR5cGVzIG9mIGJ1Z3M6IEtBU0FOLCBMT0NLREVQLCBhbmQgdGhlIHZhcmlvdXMgcGFnZSB0YWJsZSBjaGVja2VycyBhbmQgZGVidWdnaW5nIHRvb2xzLiBHaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2VzIGFuZCB0aGUgc2FmZWd1YXJkcyBpbiBwbGFjZSwgSSYjMzk7bSBjb21mb3J0YWJsZSBzYXlpbmcgdGhlcmUmIzM5O3MgYWJzb2x1dGVseSBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGtlcm5lbCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0ZWx5IGBmYWxzZWAuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZzoKLSBgTmVlZHNLTVNBTmA6IGZhbHNlLiBZZXAuCi0gYEtNU0FOUmVhc29uaW5nYDogZGV0YWlsZWQgcmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkuIENoZWNrLgoKVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBzdGFuZGFyZGl6ZXMgcGFnZSB0YWJsZSBmcmVlaW5nIGFjcm9zcyBhcmNoaXRlY3R1cmVzIHRvIHVzZSBSQ1UtZGVmZXJyZWQgZnJlZWluZyAodW5pZnlpbmcgTU1VIGdhdGhlciBhbmQgcmVtb3ZpbmcgQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgLyBDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFIGNvbmZpZ3MpLiBJdCBhZGFwdHMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHBhZ2UgdGFibGUgZnJlZWluZyByb3V0aW5lcyAoZS5nLiBtNjhrLCBhcmMsIG1pY3JvYmxhemUsIHNoLCBzcGFyYywgeHRlbnNhKSB0byB1c2UgdGxiX3JlbW92ZV9wdGRlc2MgLyB0bGJfcmVtb3ZlX3RhYmxlLCBhZGRzIHNwaW5sb2NrcyBmb3IgcHRhYmxlIG1hbmFnZW1lbnQgb24gbTY4ay9zcGFyYywgYW5kIHVwZGF0ZXMgZGVmZXJyZWQgZnJlZWluZyBpbiBUSFAgKHB0ZV9mcmVlX2RlZmVyKS5cblxuVGhlc2UgY2hhbmdlcyBkZWFsIHN0cmljdGx5IHdpdGggTU1VIGdhdGhlciBsaWZlY3ljbGUsIFJDVSBncmFjZSBwZXJpb2RzIGZvciBwYWdlIHRhYmxlIG1lbW9yeSwgYW5kIHN5bmNocm9uaXphdGlvbiBvZiBwYWdlIHRhYmxlIGZyZWVpbmcgdnMgbG9ja2xlc3MvUkNVIHBhZ2UgdGFibGUgd2Fsa2Vycy4gUG90ZW50aWFsIGJ1Z3MgaW4gdGhlc2UgY2hhbmdlcyB3b3VsZCBtYW5pZmVzdCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIGNvbmN1cnJlbmN5IHJhY2VzLCBvciBkZWFkbG9ja3PigJR3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgcmVhZHMvY29waWVzIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgc3RhbmRhcmRpemVzIHBhZ2UgdGFibGUgZnJlZWluZyBhY3Jvc3MgYXJjaGl0ZWN0dXJlcyB0byB1c2UgUkNVLWRlZmVycmVkIGZyZWVpbmcgKHVuaWZ5aW5nIE1NVSBnYXRoZXIgYW5kIHJlbW92aW5nIENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFIC8gQ09ORklHX01NVV9HQVRIRVJfVEFCTEVfRlJFRSBjb25maWdzKS4gSXQgYWRhcHRzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBwYWdlIHRhYmxlIGZyZWVpbmcgcm91dGluZXMgKGUuZy4gbTY4aywgYXJjLCBtaWNyb2JsYXplLCBzaCwgc3BhcmMsIHh0ZW5zYSkgdG8gdXNlIHRsYl9yZW1vdmVfcHRkZXNjIC8gdGxiX3JlbW92ZV90YWJsZSwgYWRkcyBzcGlubG9ja3MgZm9yIHB0YWJsZSBtYW5hZ2VtZW50IG9uIG02OGsvc3BhcmMsIGFuZCB1cGRhdGVzIGRlZmVycmVkIGZyZWVpbmcgaW4gVEhQIChwdGVfZnJlZV9kZWZlcikuXG5cblRoZXNlIGNoYW5nZXMgZGVhbCBzdHJpY3RseSB3aXRoIE1NVSBnYXRoZXIgbGlmZWN5Y2xlLCBSQ1UgZ3JhY2UgcGVyaW9kcyBmb3IgcGFnZSB0YWJsZSBtZW1vcnksIGFuZCBzeW5jaHJvbml6YXRpb24gb2YgcGFnZSB0YWJsZSBmcmVlaW5nIHZzIGxvY2tsZXNzL1JDVSBwYWdlIHRhYmxlIHdhbGtlcnMuIFBvdGVudGlhbCBidWdzIGluIHRoZXNlIGNoYW5nZXMgd291bGQgbWFuaWZlc3QgYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBjb25jdXJyZW5jeSByYWNlcywgb3IgZGVhZGxvY2tz4oCUd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIHJlYWRzL2NvcGllcyB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo0Mzo1My41MTQxOTI0MTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDI1NTU1MDkzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNTVVcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGxiX3JlbW92ZV90YWJsZVwiLFxuICAgIFwicHRlX2ZyZWVfZGVmZXJcIixcbiAgICBcInphcF9odWdlX3BtZFwiLFxuICAgIFwidGxiX3JlbW92ZV90YWJsZV9zeW5jX3JjdVwiLFxuICAgIFwidGxiX3JlbW92ZV90YWJsZV9zeW5jX29uZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHN0YW5kYXJkaXplcyBwYWdlIHRhYmxlIGZyZWVpbmcgYWNyb3NzIGFyY2hpdGVjdHVyZXMgdG8gdXNlIFJDVS1kZWZlcnJlZCBmcmVlaW5nICh1bmlmeWluZyBNTVUgZ2F0aGVyIGFuZCByZW1vdmluZyBDT05GSUdfTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSAvIENPTkZJR19NTVVfR0FUSEVSX1RBQkxFX0ZSRUUgY29uZmlncykuIEl0IGFkYXB0cyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgcGFnZSB0YWJsZSBmcmVlaW5nIHJvdXRpbmVzIChlLmcuIG02OGssIGFyYywgbWljcm9ibGF6ZSwgc2gsIHNwYXJjLCB4dGVuc2EpIHRvIHVzZSB0bGJfcmVtb3ZlX3B0ZGVzYyAvIHRsYl9yZW1vdmVfdGFibGUsIGFkZHMgc3BpbmxvY2tzIGZvciBwdGFibGUgbWFuYWdlbWVudCBvbiBtNjhrL3NwYXJjLCBhbmQgdXBkYXRlcyBkZWZlcnJlZCBmcmVlaW5nIGluIFRIUCAocHRlX2ZyZWVfZGVmZXIpLlxcblxcblRoZXNlIGNoYW5nZXMgZGVhbCBzdHJpY3RseSB3aXRoIE1NVSBnYXRoZXIgbGlmZWN5Y2xlLCBSQ1UgZ3JhY2UgcGVyaW9kcyBmb3IgcGFnZSB0YWJsZSBtZW1vcnksIGFuZCBzeW5jaHJvbml6YXRpb24gb2YgcGFnZSB0YWJsZSBmcmVlaW5nIHZzIGxvY2tsZXNzL1JDVSBwYWdlIHRhYmxlIHdhbGtlcnMuIFBvdGVudGlhbCBidWdzIGluIHRoZXNlIGNoYW5nZXMgd291bGQgbWFuaWZlc3QgYXMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBjb25jdXJyZW5jeSByYWNlcywgb3IgZGVhZGxvY2tz4oCUd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBwYWRkaW5nIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIHJlYWRzL2NvcGllcyB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVuaWZpZXMgYW5kIGVuZm9yY2VzIFJDVS1kZWZlcnJlZCBmcmVlaW5nIGZvciBwYWdlIHRhYmxlIHBhZ2VzIGFjcm9zcyBhbGwgYXJjaGl0ZWN0dXJlcyBieSByZW1vdmluZyBjb25kaXRpb25hbCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgc3RhbmRhcmRpemluZyBvbiB0bGJfcmVtb3ZlX3RhYmxlKCkuIEl0IGFsc28gbW9kaWZpZXMgVEhQIGRlcG9zaXRlZCB0YWJsZSBoYW5kbGluZyBpbiBtbS9odWdlX21lbW9yeS5jIHRvIHVzZSBwdGVfZnJlZV9kZWZlcigpIHVuZGVyIFJDVSBhbmQgdXBkYXRlcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgcGFnZSB0YWJsZSByZW1vdmFsIHJvdXRpbmVzLiBUaGVzZSBjb3JlIE1NIGxvZ2ljIGNoYW5nZXMgYWZmZWN0IFRMQiBnYXRoZXJpbmcsIHBhZ2UgdGFibGUgdGVhcmluZyBkb3duLCBhbmQgbWVtb3J5IHJlY2xhaW0gcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjQzOjUzLjUxNDE5NzE0NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI3NTc4Mzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMjhlOGUyMmZiMmY5MjJhNWQ5OGFjMjcyYzA0YTM5ZmI1ZDBhN2VlMVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCAxIDIzOjQzOjUyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0XFxuaW5kZXggYTcyOTZmMjUxNzk5Yy4uMWU2NWIxMzlmMzU1OSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdFxcbkBAIC01MzcsNiArNTM3LDEyIEBAIFdlIGVzdGFibGlzaCBiYXNpYyBsb2NraW5nIHJ1bGVzIHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCBwYWdlIHRhYmxlczpcXG4gKiBXaGVuIGNoYW5naW5nIGEgcGFnZSB0YWJsZSBlbnRyeSB0aGUgcGFnZSB0YWJsZSBsb2NrIGZvciB0aGF0IHBhZ2UgdGFibGVcXG4gICAqKm11c3QqKiBiZSBoZWxkLCBleGNlcHQgaWYgeW91IGNhbiBzYWZlbHkgYXNzdW1lIG5vYm9keSBjYW4gYWNjZXNzIHRoZSBwYWdlXFxuICAgdGFibGVzIGNvbmN1cnJlbnRseSAoc3VjaCBhcyBvbiBpbnZvY2F0aW9uIG9mIDpjOmZ1bmM6YCFmcmVlX3BndGFibGVzYCkuXFxuKyogUGFnZSB0YWJsZXMgbWF5IGJlICp3YWxrZWQqIHVuZGVyIFJDVSBhbG9uZSwgYXMgcGFnZSB0YWJsZXMgYXJlIGZyZWVkIG9ubHlcXG4rICBhZnRlciBhbiBSQ1UgZ3JhY2UgcGVyaW9kIGhhcyBlbGFwc2VkLiBIb3dldmVyLCBhbnkgZW50cnkgZm91bmQgbXVzdCBiZVxcbisgIHJldmFsaWRhdGVkIGFmdGVyIHRoZSBwYWdlIHRhYmxlIGxvY2sgaXMgdGFrZW4gKHN1Y2ggYXMgdGhlXFxuKyAgOmM6ZnVuYzpgIXBtZF9zYW1lYCByZWNoZWNrIHBlcmZvcm1lZCBieSA6YzpmdW5jOmAhcHRlX29mZnNldF9tYXBfbG9ja2ApXFxuKyAgYmVmb3JlIGl0IGlzIGFjdGVkIHVwb24uIENoYW5naW5nIGFuIGVudHJ5IGFsd2F5cyByZXF1aXJlcyB0aGUgcGFnZSB0YWJsZVxcbisgIGxvY2suXFxuICogUmVhZHMgZnJvbSBhbmQgd3JpdGVzIHRvIHBhZ2UgdGFibGUgZW50cmllcyBtdXN0IGJlICphcHByb3ByaWF0ZWx5KlxcbiAgIGF0b21pYy4gU2VlIHRoZSBzZWN0aW9uIG9uIGF0b21pY2l0eSBiZWxvdyBmb3IgZGV0YWlscy5cXG4gKiBQb3B1bGF0aW5nIHByZXZpb3VzbHkgZW1wdHkgZW50cmllcyByZXF1aXJlcyB0aGF0IHRoZSBtbWFwIG9yIFZNQSBsb2NrcyBhcmVcXG5kaWZmIC0tZ2l0IGEvYXJjaC9LY29uZmlnIGIvYXJjaC9LY29uZmlnXFxuaW5kZXggNDVjNjU3NzcyMzYyMy4uNmY3NTE2OTE2Nzk3ZSAxMDA2NDRcXG4tLS0gYS9hcmNoL0tjb25maWdcXG4rKysgYi9hcmNoL0tjb25maWdcXG5AQCAtNTI2LDEzICs1MjYsNiBAQCBjb25maWcgSEFWRV9BUkNIX0pVTVBfTEFCRUxcXG4gY29uZmlnIEhBVkVfQVJDSF9KVU1QX0xBQkVMX1JFTEFUSVZFXFxuIFxcdGJvb2xcXG4gXFxuLWNvbmZpZyBNTVVfR0FUSEVSX1RBQkxFX0ZSRUVcXG4tXFx0Ym9vbFxcbi1cXG4tY29uZmlnIE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcXG4tXFx0Ym9vbFxcbi1cXHRzZWxlY3QgTU1VX0dBVEhFUl9UQUJMRV9GUkVFXFxuLVxcbiBjb25maWcgTU1VX0dBVEhFUl9QQUdFX1NJWkVcXG4gXFx0Ym9vbFxcbiBcXG5AQCAtNTQ4LDcgKzU0MSw2IEBAIGNvbmZpZyBNTVVfR0FUSEVSX01FUkdFX1ZNQVNcXG4gXFxuIGNvbmZpZyBNTVVfR0FUSEVSX05PX0dBVEhFUlxcbiBcXHRib29sXFxuLVxcdGRlcGVuZHMgb24gTU1VX0dBVEhFUl9UQUJMRV9GUkVFXFxuIFxcbiBjb25maWcgQVJDSF9XQU5UX0lSUVNfT0ZGX0FDVElWQVRFX01NXFxuIFxcdGJvb2xcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9LY29uZmlnIGIvYXJjaC9hbHBoYS9LY29uZmlnXFxuaW5kZXggZTUzZWYyZDg4NDYzNi4uOTA2M2M3YmRhNGU0MSAxMDA2NDRcXG4tLS0gYS9hcmNoL2FscGhhL0tjb25maWdcXG4rKysgYi9hcmNoL2FscGhhL0tjb25maWdcXG5AQCAtNDIsNyArNDIsNiBAQCBjb25maWcgQUxQSEFcXG4gXFx0c2VsZWN0IEFSQ0hfU1RBQ0tXQUxLXFxuIFxcdHNlbGVjdCBDUFVfTk9fRUZGSUNJRU5UX0ZGUyBpZiAhQUxQSEFfRVY2N1xcbiBcXHRzZWxlY3QgTU1VX0dBVEhFUl9OT19SQU5HRVxcbi1cXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxcbiBcXHRzZWxlY3QgU1BBUlNFTUVNX0VYVFJFTUUgaWYgU1BBUlNFTUVNXFxuIFxcdHNlbGVjdCBaT05FX0RNQVxcbiBcXHRzZWxlY3QgVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVFxcbmRpZmYgLS1naXQgYS9hcmNoL2FyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL2FyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcXG5pbmRleCBkZmFlMDcwZmU4ZDU1Li45YjZjMzdmOTJlOTdmIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxcbisrKyBiL2FyY2gvYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxcbkBAIC03Miw3ICs3Miw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwNGRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHA0ZF90ICpwNGRwLCBwdWRfdCAqcHVkcClcXG4gXFx0c2V0X3A0ZChwNGRwLCBfX3A0ZCgodW5zaWduZWQgbG9uZylwdWRwKSk7XFxuIH1cXG4gXFxuLSNkZWZpbmUgX19wdWRfZnJlZV90bGIodGxiLCBwbWQsIGFkZHIpICBwdWRfZnJlZSgodGxiKS1cXHUwMDNlbW0sIHBtZClcXG4rI2RlZmluZSBfX3B1ZF9mcmVlX3RsYih0bGIsIHBtZCwgYWRkcikgIHRsYl9yZW1vdmVfcHRkZXNjKCh0bGIpLCB2aXJ0X3RvX3B0ZGVzYyhwbWQpKVxcbiBcXG4gI2VuZGlmXFxuIFxcbkBAIC04MywxMCArODMsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIHB1ZF9wb3B1bGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcHVkX3QgKnB1ZHAsIHBtZF90ICpwbWRwKVxcbiBcXHRzZXRfcHVkKHB1ZHAsIF9fcHVkKCh1bnNpZ25lZCBsb25nKXBtZHApKTtcXG4gfVxcbiBcXG4tI2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIsIHBtZCwgYWRkcikgIHBtZF9mcmVlKCh0bGIpLVxcdTAwM2VtbSwgcG1kKVxcbisjZGVmaW5lIF9fcG1kX2ZyZWVfdGxiKHRsYiwgcG1kLCBhZGRyKSAgdGxiX3JlbW92ZV9wdGRlc2MoKHRsYiksIHZpcnRfdG9fcHRkZXNjKHBtZCkpXFxuIFxcbiAjZW5kaWZcXG4gXFxuLSNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLCBwdGUsIGFkZHIpICBwdGVfZnJlZSgodGxiKS1cXHUwMDNlbW0sIHB0ZSlcXG4rI2RlZmluZSBfX3B0ZV9mcmVlX3RsYih0bGIsIHB0ZSwgYWRkcikgIHRsYl9yZW1vdmVfcHRkZXNjKCh0bGIpLCBwYWdlX3B0ZGVzYyhwdGUpKVxcbiBcXG4gI2VuZGlmIC8qIF9BU01fQVJDX1BHQUxMT0NfSCAqL1xcbmRpZmYgLS1naXQgYS9hcmNoL2FybS9LY29uZmlnIGIvYXJjaC9hcm0vS2NvbmZpZ1xcbmluZGV4IDQwOGFhNThhMmE1YmIuLjBjYzI4OWE3MTg0YWIgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm0vS2NvbmZpZ1xcbisrKyBiL2FyY2gvYXJtL0tjb25maWdcXG5AQCAtMTM0LDcgKzEzNCw2IEBAIGNvbmZpZyBBUk1cXG4gXFx0c2VsZWN0IEhBVkVfUEVSRl9SRUdTXFxuIFxcdHNlbGVjdCBIQVZFX1BFUkZfVVNFUl9TVEFDS19EVU1QXFxuIFxcdHNlbGVjdCBIQVZFX1BPU0lYX0NQVV9USU1FUlNfVEFTS19XT1JLXFxuLVxcdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFIGlmIFNNUCBcXHUwMDI2XFx1MDAyNiBBUk1fTFBBRVxcbiBcXHRzZWxlY3QgSEFWRV9SRUdTX0FORF9TVEFDS19BQ0NFU1NfQVBJXFxuIFxcdHNlbGVjdCBIQVZFX1JTRVFcXG4gXFx0c2VsZWN0IEhBVkVfUlVTVCBpZiBDUFVfTElUVExFX0VORElBTiBcXHUwMDI2XFx1MDAyNiBDUFVfMzJ2NyBcXHUwMDI2XFx1MDAyNiAhS0FTQU5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9LY29uZmlnIGIvYXJjaC9hcm02NC9LY29uZmlnXFxuaW5kZXggMmJiZWRlZDMzZGEwZC4uYjZjMmRkOGIyNjEyNCAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L0tjb25maWdcXG4rKysgYi9hcmNoL2FybTY0L0tjb25maWdcXG5AQCAtMjIxLDcgKzIyMSw2IEBAIGNvbmZpZyBBUk02NFxcbiBcXHRzZWxlY3QgSEFWRV9SRUxJQUJMRV9TVEFDS1RSQUNFXFxuIFxcdHNlbGVjdCBIQVZFX1BPU0lYX0NQVV9USU1FUlNfVEFTS19XT1JLXFxuIFxcdHNlbGVjdCBIQVZFX0ZVTkNUSU9OX0FSR19BQ0NFU1NfQVBJXFxuLVxcdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXFxuIFxcdHNlbGVjdCBIQVZFX1JTRVFcXG4gXFx0c2VsZWN0IEhBVkVfUlVTVCBpZiBSVVNUQ19TVVBQT1JUU19BUk02NFxcbiBcXHRzZWxlY3QgSEFWRV9TVEFDS1BST1RFQ1RPUlxcbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9LY29uZmlnIGIvYXJjaC9sb29uZ2FyY2gvS2NvbmZpZ1xcbmluZGV4IDljNWRlZjcwNjIyMjIuLmQxYjIzZGE0MDczNzUgMTAwNjQ0XFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gvS2NvbmZpZ1xcbisrKyBiL2FyY2gvbG9vbmdhcmNoL0tjb25maWdcXG5AQCAtMTg4LDcgKzE4OCw2IEBAIGNvbmZpZyBMT09OR0FSQ0hcXG4gXFx0c2VsZWN0IElSUV9MT09OR0FSQ0hfQ1BVXFxuIFxcdHNlbGVjdCBMT0NLX01NX0FORF9GSU5EX1ZNQVxcbiBcXHRzZWxlY3QgTU1VX0dBVEhFUl9NRVJHRV9WTUFTIGlmIE1NVVxcbi1cXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxcbiBcXHRzZWxlY3QgTU9EVUxFU19VU0VfRUxGX1JFTEEgaWYgTU9EVUxFU1xcbiBcXHRzZWxlY3QgTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LXFxuIFxcdHNlbGVjdCBORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOS1xcbmRpZmYgLS1naXQgYS9hcmNoL202OGsvS2NvbmZpZyBiL2FyY2gvbTY4ay9LY29uZmlnXFxuaW5kZXggMTE4MzVlYjU5ZDk0ZC4uZWI4NGMzYWY5MmMwMiAxMDA2NDRcXG4tLS0gYS9hcmNoL202OGsvS2NvbmZpZ1xcbisrKyBiL2FyY2gvbTY4ay9LY29uZmlnXFxuQEAgLTI5LDYgKzI5LDcgQEAgY29uZmlnIE02OEtcXG4gXFx0c2VsZWN0IEhBVkVfQVJDSF9MSUJHQ0NfSFxcbiBcXHRzZWxlY3QgSEFWRV9BUkNIX1NFQ0NPTVBcXG4gXFx0c2VsZWN0IEhBVkVfQVJDSF9TRUNDT01QX0ZJTFRFUlxcbitcXHRzZWxlY3QgSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEUgaWYgTU1VX01PVE9ST0xBXFxuIFxcdHNlbGVjdCBIQVZFX0FTTV9NT0RWRVJTSU9OU1xcbiBcXHRzZWxlY3QgSEFWRV9ERUJVR19CVUdWRVJCT1NFXFxuIFxcdHNlbGVjdCBIQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTIGlmICFDUFVfSEFTX05PX1VOQUxJR05FRFxcbmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbWNmX3BnYWxsb2MuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tY2ZfcGdhbGxvYy5oXFxuaW5kZXggZmM1NDU0ZDM3ZGEzMS4uYjUzZmYwOTUwZGIyZSAxMDA2NDRcXG4tLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbWNmX3BnYWxsb2MuaFxcbisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tY2ZfcGdhbGxvYy5oXFxuQEAgLTM5LDEwICszOSw3IEBAIGV4dGVybiBpbmxpbmUgcG1kX3QgKnBtZF9hbGxvY19rZXJuZWwocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19wdGVfZnJlZV90bGIoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgcGd0YWJsZV90IHBndGFibGUsXFxuIFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxcbiB7XFxuLVxcdHN0cnVjdCBwdGRlc2MgKnB0ZGVzYyA9IHZpcnRfdG9fcHRkZXNjKHBndGFibGUpO1xcbi1cXG4tXFx0cGFnZXRhYmxlX2R0b3IocHRkZXNjKTtcXG4tXFx0cGFnZXRhYmxlX2ZyZWUocHRkZXNjKTtcXG4rXFx0dGxiX3JlbW92ZV9wdGRlc2ModGxiLCB2aXJ0X3RvX3B0ZGVzYyhwZ3RhYmxlKSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbmxpbmUgcGd0YWJsZV90IHB0ZV9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tb3Rvcm9sYV9wZ2FsbG9jLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbW90b3JvbGFfcGdhbGxvYy5oXFxuaW5kZXggMTA5MWZiMGFmZmJlZS4uZGNkZTQwZThiNWM2YSAxMDA2NDRcXG4tLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbW90b3JvbGFfcGdhbGxvYy5oXFxuKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21vdG9yb2xhX3BnYWxsb2MuaFxcbkBAIC0xNyw2ICsxNyw3IEBAIGVudW0gbTY4a190YWJsZV90eXBlcyB7XFxuIGV4dGVybiB2b2lkIGluaXRfcG9pbnRlcl90YWJsZSh2b2lkICp0YWJsZSwgaW50IHR5cGUpO1xcbiBleHRlcm4gdm9pZCAqZ2V0X3BvaW50ZXJfdGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCB0eXBlKTtcXG4gZXh0ZXJuIGludCBmcmVlX3BvaW50ZXJfdGFibGUodm9pZCAqdGFibGUsIGludCB0eXBlKTtcXG4rZXh0ZXJuIHZvaWQgX190bGJfcmVtb3ZlX3RhYmxlKHZvaWQgKnRhYmxlKTtcXG4gXFxuIC8qXFxuICAqIEFsbG9jYXRlIGFuZCBmcmVlIHBhZ2UgdGFibGVzLiBUaGUgeHh4X2tlcm5lbCgpIHZlcnNpb25zIGFyZVxcbkBAIC00Nyw3ICs0OCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdGVfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHBndGFibGUpXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3B0ZV9mcmVlX3RsYihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBwZ3RhYmxlX3QgcGd0YWJsZSxcXG4gXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXFxuIHtcXG4tXFx0ZnJlZV9wb2ludGVyX3RhYmxlKHBndGFibGUsIFRBQkxFX1BURSk7XFxuK1xcdHRsYl9yZW1vdmVfdGFibGUodGxiLCAodm9pZCAqKSgodW5zaWduZWQgbG9uZylwZ3RhYmxlIHwgVEFCTEVfUFRFKSk7XFxuIH1cXG4gXFxuIFxcbkBAIC02MSwxMCArNjIsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgcG1kX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQpXFxuIFxcdHJldHVybiBmcmVlX3BvaW50ZXJfdGFibGUocG1kLCBUQUJMRV9QTUQpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGludCBfX3BtZF9mcmVlX3RsYihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBwbWRfdCAqcG1kLFxcbi1cXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxcbitzdGF0aWMgaW5saW5lIHZvaWQgX19wbWRfZnJlZV90bGIoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgcG1kX3QgKnBtZCxcXG4rXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXFxuIHtcXG4tXFx0cmV0dXJuIGZyZWVfcG9pbnRlcl90YWJsZShwbWQsIFRBQkxFX1BNRCk7XFxuK1xcdHRsYl9yZW1vdmVfdGFibGUodGxiLCAodm9pZCAqKSgodW5zaWduZWQgbG9uZylwbWQgfCBUQUJMRV9QTUQpKTtcXG4gfVxcbiBcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tbS9tb3Rvcm9sYS5jIGIvYXJjaC9tNjhrL21tL21vdG9yb2xhLmNcXG5pbmRleCBiMzBhYTY5YTczYTZhLi5mZmM4MDQ4MzQ0MGJjIDEwMDY0NFxcbi0tLSBhL2FyY2gvbTY4ay9tbS9tb3Rvcm9sYS5jXFxuKysrIGIvYXJjaC9tNjhrL21tL21vdG9yb2xhLmNcXG5AQCAtMjAsNiArMjAsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaW5pdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtYmxvY2suaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2dmcC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xlYW51cC5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9zZXR1cC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdWFjY2Vzcy5oXFx1MDAzZVxcbkBAIC0xMDMsNiArMTA0LDggQEAgc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgcHRhYmxlX2xpc3RbM10gPSB7XFxuIFxcdExJU1RfSEVBRF9JTklUKHB0YWJsZV9saXN0WzJdKSxcXG4gfTtcXG4gXFxuK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socHRhYmxlX2xvY2spO1xcbitcXG4gI2RlZmluZSBQRF9QVEFCTEUocHRkZXNjKSAoKHB0YWJsZV9kZXNjICopXFx1MDAyNih2aXJ0X3RvX3B0ZGVzYygodm9pZCAqKShwdGRlc2MpKS1cXHUwMDNlcHRfbGlzdCkpXFxuICNkZWZpbmUgUERfUFRERVNDKHB0YWJsZSkgKGxpc3RfZW50cnkocHRhYmxlLCBzdHJ1Y3QgcHRkZXNjLCBwdF9saXN0KSlcXG4gI2RlZmluZSBQRF9NQVJLQklUUyhkcCkgKCoodW5zaWduZWQgaW50ICopXFx1MDAyNlBEX1BUREVTQyhkcCktXFx1MDAzZXB0X2luZGV4KVxcbkBAIC0xMzksNTIgKzE0Miw2NiBAQCB2b2lkIF9faW5pdCBpbml0X3BvaW50ZXJfdGFibGUodm9pZCAqdGFibGUsIGludCB0eXBlKVxcbiBcXHRyZXR1cm47XFxuIH1cXG4gXFxuLXZvaWQgKmdldF9wb2ludGVyX3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgdHlwZSlcXG4rLypcXG4rICogRm9yIGEgcG9pbnRlciB0YWJsZSBmb3IgYSB1c2VyIHByb2Nlc3MgYWRkcmVzcyBzcGFjZSwgYVxcbisgKiB0YWJsZSBpcyB0YWtlbiBmcm9tIGEgcHRkZXNjIGFsbG9jYXRlZCBmb3IgdGhlIHB1cnBvc2UuICBFYWNoXFxuKyAqIHB0ZGVzYyBjYW4gaG9sZCA4IHBvaW50ZXIgdGFibGVzLiAgVGhlIHB0ZGVzYyBpcyByZW1hcHBlZCBpblxcbisgKiB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgdG8gYmUgbm9uY2FjaGVhYmxlLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgKmFkZF9wb2ludGVyX3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgdHlwZSlcXG4ge1xcbi1cXHRwdGFibGVfZGVzYyAqZHAgPSBwdGFibGVfbGlzdFt0eXBlXS5uZXh0O1xcbi1cXHR1bnNpZ25lZCBpbnQgbWFzayA9IGxpc3RfZW1wdHkoXFx1MDAyNnB0YWJsZV9saXN0W3R5cGVdKSA/IDAgOiBQRF9NQVJLQklUUyhkcCk7XFxuLVxcdHVuc2lnbmVkIGludCB0bXAsIG9mZjtcXG4rXFx0c3RydWN0IHB0ZGVzYyAqcHRkZXNjO1xcbitcXHRwdGFibGVfZGVzYyAqbmV3O1xcbitcXHR2b2lkICpwdF9hZGRyO1xcbiBcXG4tXFx0LypcXG4tXFx0ICogRm9yIGEgcG9pbnRlciB0YWJsZSBmb3IgYSB1c2VyIHByb2Nlc3MgYWRkcmVzcyBzcGFjZSwgYVxcbi1cXHQgKiB0YWJsZSBpcyB0YWtlbiBmcm9tIGEgcHRkZXNjIGFsbG9jYXRlZCBmb3IgdGhlIHB1cnBvc2UuICBFYWNoXFxuLVxcdCAqIHB0ZGVzYyBjYW4gaG9sZCA4IHBvaW50ZXIgdGFibGVzLiAgVGhlIHB0ZGVzYyBpcyByZW1hcHBlZCBpblxcbi1cXHQgKiB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgdG8gYmUgbm9uY2FjaGVhYmxlLlxcbi1cXHQgKi9cXG4tXFx0aWYgKG1hc2sgPT0gMCkge1xcbi1cXHRcXHRzdHJ1Y3QgcHRkZXNjICpwdGRlc2M7XFxuLVxcdFxcdHB0YWJsZV9kZXNjICpuZXc7XFxuLVxcdFxcdHZvaWQgKnB0X2FkZHI7XFxuLVxcbi1cXHRcXHRwdGRlc2MgPSBwYWdldGFibGVfYWxsb2MoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8sIDApO1xcbi1cXHRcXHRpZiAoIXB0ZGVzYylcXG4tXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuLVxcbi1cXHRcXHRwdF9hZGRyID0gcHRkZXNjX2FkZHJlc3MocHRkZXNjKTtcXG4tXFxuLVxcdFxcdHN3aXRjaCAodHlwZSkge1xcbi1cXHRcXHRjYXNlIFRBQkxFX1BURTpcXG4tXFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0ICogbTY4ayBkb2Vzbid0IGhhdmUgU1BMSVRfUFRFX1BUTE9DS1MgZm9yIG5vdCBoYXZpbmdcXG4tXFx0XFx0XFx0ICogU01QLlxcbi1cXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0cGFnZXRhYmxlX3B0ZV9jdG9yKG1tLCBwdGRlc2MpO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSBUQUJMRV9QTUQ6XFxuLVxcdFxcdFxcdHBhZ2V0YWJsZV9wbWRfY3RvcihtbSwgcHRkZXNjKTtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGNhc2UgVEFCTEVfUEdEOlxcbi1cXHRcXHRcXHRwYWdldGFibGVfcGdkX2N0b3IocHRkZXNjKTtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdH1cXG4rXFx0cHRkZXNjID0gcGFnZXRhYmxlX2FsbG9jKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPLCAwKTtcXG4rXFx0aWYgKCFwdGRlc2MpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0cHRfYWRkciA9IHB0ZGVzY19hZGRyZXNzKHB0ZGVzYyk7XFxuK1xcbitcXHRzd2l0Y2ggKHR5cGUpIHtcXG4rXFx0Y2FzZSBUQUJMRV9QVEU6XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIG02OGsgZG9lc24ndCBoYXZlIFNQTElUX1BURV9QVExPQ0tTIGZvciBub3QgaGF2aW5nXFxuK1xcdFxcdCAqIFNNUC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHBhZ2V0YWJsZV9wdGVfY3RvcihtbSwgcHRkZXNjKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgVEFCTEVfUE1EOlxcbitcXHRcXHRwYWdldGFibGVfcG1kX2N0b3IobW0sIHB0ZGVzYyk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFRBQkxFX1BHRDpcXG4rXFx0XFx0cGFnZXRhYmxlX3BnZF9jdG9yKHB0ZGVzYyk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRtbXVfcGFnZV9jdG9yKHB0X2FkZHIpO1xcbitcXG4rXFx0bmV3ID0gUERfUFRBQkxFKHB0X2FkZHIpO1xcbiBcXG4tXFx0XFx0bW11X3BhZ2VfY3RvcihwdF9hZGRyKTtcXG4rXFx0UERfTUFSS0JJVFMobmV3KSA9IHB0YWJsZV9tYXNrKHR5cGUpIC0gMTtcXG4rXFx0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2lycXNhdmUsIFxcdTAwMjZwdGFibGVfbG9jaylcXG4rXFx0XFx0bGlzdF9hZGQobmV3LCBcXHUwMDI2cHRhYmxlX2xpc3RbdHlwZV0pO1xcbiBcXG4tXFx0XFx0bmV3ID0gUERfUFRBQkxFKHB0X2FkZHIpO1xcbi1cXHRcXHRQRF9NQVJLQklUUyhuZXcpID0gcHRhYmxlX21hc2sodHlwZSkgLSAxO1xcbi1cXHRcXHRsaXN0X2FkZF90YWlsKG5ldywgZHApO1xcbitcXHRyZXR1cm4gKHBtZF90ICopcHRfYWRkcjtcXG4rfVxcbitcXG4rdm9pZCAqZ2V0X3BvaW50ZXJfdGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCB0eXBlKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCB0bXAsIG9mZjtcXG4rXFx0dW5zaWduZWQgbG9uZyBtYXNrO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXHRwdGFibGVfZGVzYyAqZHA7XFxuK1xcdHZvaWQgKnJldDtcXG4gXFxuLVxcdFxcdHJldHVybiAocG1kX3QgKilwdF9hZGRyO1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2cHRhYmxlX2xvY2ssIGZsYWdzKTtcXG4rXFx0ZHAgPSBwdGFibGVfbGlzdFt0eXBlXS5uZXh0O1xcbitcXHRtYXNrID0gbGlzdF9lbXB0eShcXHUwMDI2cHRhYmxlX2xpc3RbdHlwZV0pID8gMCA6IFBEX01BUktCSVRTKGRwKTtcXG4rXFxuK1xcdGlmIChtYXNrID09IDApIHtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cHRhYmxlX2xvY2ssIGZsYWdzKTtcXG4rXFx0XFx0cmV0dXJuIGFkZF9wb2ludGVyX3RhYmxlKG1tLCB0eXBlKTtcXG4gXFx0fVxcbiBcXG4gXFx0Zm9yICh0bXAgPSAxLCBvZmYgPSAwOyAobWFzayBcXHUwMDI2IHRtcCkgPT0gMDsgdG1wIFxcdTAwM2NcXHUwMDNjPSAxLCBvZmYgKz0gcHRhYmxlX3NpemUodHlwZSkpXFxuQEAgLTE5NCw3ICsyMTEsMTAgQEAgdm9pZCAqZ2V0X3BvaW50ZXJfdGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCB0eXBlKVxcbiBcXHRcXHQvKiBtb3ZlIHRvIGVuZCBvZiBsaXN0ICovXFxuIFxcdFxcdGxpc3RfbW92ZV90YWlsKGRwLCBcXHUwMDI2cHRhYmxlX2xpc3RbdHlwZV0pO1xcbiBcXHR9XFxuLVxcdHJldHVybiBwdGRlc2NfYWRkcmVzcyhQRF9QVERFU0MoZHApKSArIG9mZjtcXG4rXFxuK1xcdHJldCA9IHB0ZGVzY19hZGRyZXNzKFBEX1BUREVTQyhkcCkpICsgb2ZmO1xcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZwdGFibGVfbG9jaywgZmxhZ3MpO1xcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbiBpbnQgZnJlZV9wb2ludGVyX3RhYmxlKHZvaWQgKnRhYmxlLCBpbnQgdHlwZSlcXG5AQCAtMjAzLDYgKzIyMyw5IEBAIGludCBmcmVlX3BvaW50ZXJfdGFibGUodm9pZCAqdGFibGUsIGludCB0eXBlKVxcbiBcXHR1bnNpZ25lZCBsb25nIHB0YWJsZSA9ICh1bnNpZ25lZCBsb25nKXRhYmxlO1xcbiBcXHR1bnNpZ25lZCBsb25nIHB0X2FkZHIgPSBwdGFibGUgXFx1MDAyNiBQQUdFX01BU0s7XFxuIFxcdHVuc2lnbmVkIGludCBtYXNrID0gMVUgXFx1MDAzY1xcdTAwM2MgKChwdGFibGUgLSBwdF9hZGRyKS9wdGFibGVfc2l6ZSh0eXBlKSk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2cHRhYmxlX2xvY2ssIGZsYWdzKTtcXG4gXFxuIFxcdGRwID0gUERfUFRBQkxFKHB0X2FkZHIpO1xcbiBcXHRpZiAoUERfTUFSS0JJVFMgKGRwKSBcXHUwMDI2IG1hc2spXFxuQEAgLTIxMyw2ICsyMzYsOCBAQCBpbnQgZnJlZV9wb2ludGVyX3RhYmxlKHZvaWQgKnRhYmxlLCBpbnQgdHlwZSlcXG4gXFx0aWYgKFBEX01BUktCSVRTKGRwKSA9PSBwdGFibGVfbWFzayh0eXBlKSkge1xcbiBcXHRcXHQvKiBhbGwgdGFibGVzIGluIHB0ZGVzYyBhcmUgZnJlZSwgZnJlZSBwdGRlc2MgKi9cXG4gXFx0XFx0bGlzdF9kZWwoZHApO1xcbitcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZwdGFibGVfbG9jaywgZmxhZ3MpO1xcbitcXG4gXFx0XFx0bW11X3BhZ2VfZHRvcigodm9pZCAqKXB0X2FkZHIpO1xcbiBcXHRcXHRwYWdldGFibGVfZHRvcl9mcmVlKHZpcnRfdG9fcHRkZXNjKCh2b2lkICopcHRfYWRkcikpO1xcbiBcXHRcXHRyZXR1cm4gMTtcXG5AQCAtMjIzLDkgKzI0OCwyMSBAQCBpbnQgZnJlZV9wb2ludGVyX3RhYmxlKHZvaWQgKnRhYmxlLCBpbnQgdHlwZSlcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGxpc3RfbW92ZShkcCwgXFx1MDAyNnB0YWJsZV9saXN0W3R5cGVdKTtcXG4gXFx0fVxcbitcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cHRhYmxlX2xvY2ssIGZsYWdzKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3ZvaWQgX190bGJfcmVtb3ZlX3RhYmxlKHZvaWQgKnRhYmxlKVxcbit7XFxuK1xcdC8qIFRoZSBib3R0b20gMiBiaXRzIGFyZSB1c2VkIHRvIGVuY29kZSBwYWdlIHRhYmxlIHR5cGUuICovXFxuK1xcdGNvbnN0IHVuc2lnbmVkIGxvbmcgZW5jb2RlZCA9ICh1bnNpZ25lZCBsb25nKXRhYmxlO1xcbitcXHR2b2lkICphZGRyID0gKHZvaWQgKikoZW5jb2RlZCBcXHUwMDI2IH4zVUwpO1xcbitcXHRjb25zdCBpbnQgdHlwZSA9IGVuY29kZWQgXFx1MDAyNiAzO1xcbitcXG4rXFx0ZnJlZV9wb2ludGVyX3RhYmxlKGFkZHIsIHR5cGUpO1xcbit9XFxuK1xcbiAvKiBzaXplIG9mIG1lbW9yeSBhbHJlYWR5IG1hcHBlZCBpbiBoZWFkLlMgKi9cXG4gZXh0ZXJuIF9faW5pdGRhdGEgdW5zaWduZWQgbG9uZyBtNjhrX2luaXRfbWFwcGVkX3NpemU7XFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcGdhbGxvYy5oIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxcbmluZGV4IDA4NGE4YTBkYzIzOTUuLmZmZWU2YTAwOTIxOWEgMTAwNjQ0XFxuLS0tIGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxcbisrKyBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcXG5AQCAtMjUsNyArMjUsNyBAQCBleHRlcm4gdm9pZCBfX2JhZF9wdGUocG1kX3QgKnBtZCk7XFxuIFxcbiBleHRlcm4gcHRlX3QgKnB0ZV9hbGxvY19vbmVfa2VybmVsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcXG4gXFxuLSNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLCBwdGUsIGFkZHIpXFx0cHRlX2ZyZWUoKHRsYiktXFx1MDAzZW1tLCAocHRlKSlcXG4rI2RlZmluZSBfX3B0ZV9mcmVlX3RsYih0bGIsIHB0ZSwgYWRkcilcXHR0bGJfcmVtb3ZlX3B0ZGVzYygodGxiKSwgcGFnZV9wdGRlc2MocHRlKSlcXG4gXFxuICNkZWZpbmUgcG1kX3BvcHVsYXRlKG1tLCBwbWQsIHB0ZSkgXFxcXFxcbiBcXHRcXHRcXHQocG1kX3ZhbCgqKHBtZCkpID0gKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKHB0ZSkpXFxuZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9LY29uZmlnIGIvYXJjaC9taXBzL0tjb25maWdcXG5pbmRleCBlMmViOTYyN2JkMTRjLi5mMGM0M2QxMThjYTAwIDEwMDY0NFxcbi0tLSBhL2FyY2gvbWlwcy9LY29uZmlnXFxuKysrIGIvYXJjaC9taXBzL0tjb25maWdcXG5AQCAtOTcsNyArOTcsNiBAQCBjb25maWcgTUlQU1xcbiBcXHRzZWxlY3QgSVJRX0ZPUkNFRF9USFJFQURJTkdcXG4gXFx0c2VsZWN0IElTQSBpZiBFSVNBXFxuIFxcdHNlbGVjdCBMT0NLX01NX0FORF9GSU5EX1ZNQVxcbi1cXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxcbiBcXHRzZWxlY3QgTU9EVUxFU19VU0VfRUxGX1JFTCBpZiBNT0RVTEVTXFxuIFxcdHNlbGVjdCBNT0RVTEVTX1VTRV9FTEZfUkVMQSBpZiBNT0RVTEVTIFxcdTAwMjZcXHUwMDI2IDY0QklUXFxuIFxcdHNlbGVjdCBQRVJGX1VTRV9WTUFMTE9DXFxuZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL0tjb25maWcgYi9hcmNoL3BhcmlzYy9LY29uZmlnXFxuaW5kZXggZDNhZmFjMmYwZDliZS4uNzdmNjcwMjhhZDg5YyAxMDA2NDRcXG4tLS0gYS9hcmNoL3BhcmlzYy9LY29uZmlnXFxuKysrIGIvYXJjaC9wYXJpc2MvS2NvbmZpZ1xcbkBAIC04MCw3ICs4MCw2IEBAIGNvbmZpZyBQQVJJU0NcXG4gXFx0c2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFNcXG4gXFx0c2VsZWN0IENQVV9OT19FRkZJQ0lFTlRfRkZTXFxuIFxcdHNlbGVjdCBUSFJFQURfSU5GT19JTl9UQVNLXFxuLVxcdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXFxuIFxcdHNlbGVjdCBORUVEX0RNQV9NQVBfU1RBVEVcXG4gXFx0c2VsZWN0IE5FRURfU0dfRE1BX0xFTkdUSFxcbiBcXHRzZWxlY3QgSEFWRV9BUkNIX0tHREJcXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZ1xcbmluZGV4IDI1ODBlMjdlNDMyODcuLjA3NjdjZmNiYWE0MjIgMTAwNjQ0XFxuLS0tIGEvYXJjaC9wb3dlcnBjL0tjb25maWdcXG4rKysgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZ1xcbkBAIC0zMDcsNyArMzA3LDYgQEAgY29uZmlnIFBQQ1xcbiBcXHRzZWxlY3QgS0FTQU5fVk1BTExPQ1xcdFxcdFxcdGlmIEtBU0FOIFxcdTAwMjZcXHUwMDI2IEVYRUNNRU1cXG4gXFx0c2VsZWN0IExPQ0tfTU1fQU5EX0ZJTkRfVk1BXFxuIFxcdHNlbGVjdCBNTVVfR0FUSEVSX1BBR0VfU0laRVxcbi1cXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxcbiBcXHRzZWxlY3QgSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEVcXG4gXFx0c2VsZWN0IE1NVV9HQVRIRVJfTUVSR0VfVk1BU1xcbiBcXHRzZWxlY3QgTU1VX0xBWllfVExCX1NIT09URE9XTlxcdFxcdGlmIFBQQ19CT09LM1NfNjRcXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9LY29uZmlnIGIvYXJjaC9yaXNjdi9LY29uZmlnXFxuaW5kZXggNTA1ZWVkNGFmOTMyYi4uNzc0MWE0Mjg3NDk4MSAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L0tjb25maWdcXG4rKysgYi9hcmNoL3Jpc2N2L0tjb25maWdcXG5AQCAtMjA4LDcgKzIwOCw2IEBAIGNvbmZpZyBSSVNDVlxcbiBcXHRzZWxlY3QgSVJRX0ZPUkNFRF9USFJFQURJTkdcXG4gXFx0c2VsZWN0IEtBU0FOX1ZNQUxMT0MgaWYgS0FTQU5cXG4gXFx0c2VsZWN0IExPQ0tfTU1fQU5EX0ZJTkRfVk1BXFxuLVxcdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFIGlmIFNNUCBcXHUwMDI2XFx1MDAyNiBNTVVcXG4gXFx0c2VsZWN0IE1PRFVMRVNfVVNFX0VMRl9SRUxBIGlmIE1PRFVMRVNcXG4gXFx0c2VsZWN0IE9GXFxuIFxcdHNlbGVjdCBPRl9FQVJMWV9GTEFUVFJFRVxcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnXFxuaW5kZXggYjg4Yjg1MDQyMTM2OS4uYTM0Mzc2YzA1ZjZlMyAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAvS2NvbmZpZ1xcbisrKyBiL2FyY2gvczM5MC9LY29uZmlnXFxuQEAgLTI2Nyw3ICsyNjcsNiBAQCBjb25maWcgUzM5MFxcbiBcXHRzZWxlY3QgTE9DS19NTV9BTkRfRklORF9WTUFcXG4gXFx0c2VsZWN0IE1NVV9HQVRIRVJfTUVSR0VfVk1BU1xcbiBcXHRzZWxlY3QgTU1VX0dBVEhFUl9OT19HQVRIRVJcXG4tXFx0c2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcXG4gXFx0c2VsZWN0IE1PRFVMRVNfVVNFX0VMRl9SRUxBXFxuIFxcdHNlbGVjdCBORUVEX0RNQV9NQVBfU1RBVEVcXHRpZiBQQ0lcXG4gXFx0c2VsZWN0IE5FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOS1xcbmRpZmYgLS1naXQgYS9hcmNoL3NoL0tjb25maWcgYi9hcmNoL3NoL0tjb25maWdcXG5pbmRleCBkNjBmMWQ1YTk0YzBmLi5mZTg1OWRlZjkxOGNjIDEwMDY0NFxcbi0tLSBhL2FyY2gvc2gvS2NvbmZpZ1xcbisrKyBiL2FyY2gvc2gvS2NvbmZpZ1xcbkBAIC0zMyw2ICszMyw3IEBAIGNvbmZpZyBTVVBFUkhcXG4gXFx0c2VsZWN0IEhBVkVfQVJDSF9BVURJVFNZU0NBTExcXG4gXFx0c2VsZWN0IEhBVkVfQVJDSF9LR0RCXFxuIFxcdHNlbGVjdCBIQVZFX0FSQ0hfU0VDQ09NUF9GSUxURVJcXG4rXFx0c2VsZWN0IEhBVkVfQVJDSF9UTEJfUkVNT1ZFX1RBQkxFIGlmIFgyVExCXFxuIFxcdHNlbGVjdCBIQVZFX0FSQ0hfVFJBQ0VIT09LXFxuIFxcdHNlbGVjdCBIQVZFX0RFQlVHX0JVR1ZFUkJPU0VcXG4gXFx0c2VsZWN0IEhBVkVfREVCVUdfS01FTUxFQUtcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxcbmluZGV4IDZmZTcxMjNkMzhmYTkuLjY3Y2U3ZmEyM2ZhMTIgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcXG4rKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxcbkBAIC0xNyw3ICsxNywxMSBAQCBleHRlcm4gdm9pZCBwZ2RfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZCk7XFxuIGV4dGVybiB2b2lkIHB1ZF9wb3B1bGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcHVkX3QgKnB1ZHAsIHBtZF90ICpwbWQpO1xcbiBleHRlcm4gcG1kX3QgKnBtZF9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7XFxuIGV4dGVybiB2b2lkIHBtZF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKTtcXG4tI2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIsIHBtZHAsIGFkZHIpXFx0XFx0cG1kX2ZyZWUoKHRsYiktXFx1MDAzZW1tLCAocG1kcCkpXFxuK2V4dGVybiB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZSh2b2lkICp0YWJsZSk7XFxuK1xcbisvKiBQTURzIGFyZSBzbGFiLWFsbG9jYXRlZCwgdGFnIHNvIHRoZXkgYXJlIGZyZWVkIGNvcnJlY3RseS4gKi9cXG4rI2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIsIHBtZHAsIGFkZHIpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHR0bGJfcmVtb3ZlX3RhYmxlKCh0bGIpLCAodm9pZCAqKSgodW5zaWduZWQgbG9uZykocG1kcCkgfCAxKSlcXG4gI2VuZGlmXFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgcG1kX3BvcHVsYXRlX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCxcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9wZ3RhYmxlLmMgYi9hcmNoL3NoL21tL3BndGFibGUuY1xcbmluZGV4IDNhNDA4NWVhMDE2MWYuLmY2MTg0Yjg2Yjg5YzYgMTAwNjQ0XFxuLS0tIGEvYXJjaC9zaC9tbS9wZ3RhYmxlLmNcXG4rKysgYi9hcmNoL3NoL21tL3BndGFibGUuY1xcbkBAIC01Niw0ICs1NiwyNCBAQCB2b2lkIHBtZF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKVxcbiB7XFxuIFxcdGttZW1fY2FjaGVfZnJlZShwbWRfY2FjaGVwLCBwbWQpO1xcbiB9XFxuK1xcbitzdGF0aWMgdm9pZCBfX3RsYl9yZW1vdmVfdGFibGVfc2xhYih2b2lkICp0YWJsZSlcXG4re1xcbitcXHRrbWVtX2NhY2hlX2ZyZWUocG1kX2NhY2hlcCwgdGFibGUpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBfX3RsYl9yZW1vdmVfdGFibGVfcGd0YWJsZSh2b2lkICp0YWJsZSlcXG4re1xcbitcXHRwYWdldGFibGVfZHRvcl9mcmVlKHRhYmxlKTtcXG4rfVxcbitcXG4rdm9pZCBfX3RsYl9yZW1vdmVfdGFibGUodm9pZCAqdGFibGUpXFxuK3tcXG4rXFx0Y29uc3QgdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpdGFibGU7XFxuK1xcbitcXHRpZiAoYWRkciBcXHUwMDI2IDEpXFxuK1xcdFxcdF9fdGxiX3JlbW92ZV90YWJsZV9zbGFiKCh2b2lkICopKGFkZHIgXFx1MDAyNiB+MVVMKSk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0X190bGJfcmVtb3ZlX3RhYmxlX3BndGFibGUodGFibGUpO1xcbit9XFxuICNlbmRpZiAvKiBQQUdFVEFCTEVfTEVWRUxTIFxcdTAwM2UgMiAqL1xcbmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL0tjb25maWcgYi9hcmNoL3NwYXJjL0tjb25maWdcXG5pbmRleCBhYjc3ZDNmMjUzNmUxLi43NDJmZmZmOGMzN2YyIDEwMDY0NFxcbi0tLSBhL2FyY2gvc3BhcmMvS2NvbmZpZ1xcbisrKyBiL2FyY2gvc3BhcmMvS2NvbmZpZ1xcbkBAIC02NCw2ICs2NCw3IEBAIGNvbmZpZyBTUEFSQzMyXFxuIFxcdHNlbGVjdCBIQVZFX1VJRDE2XFxuIFxcdHNlbGVjdCBIQVZFX1BBR0VfU0laRV80S0JcXG4gXFx0c2VsZWN0IExPQ0tfTU1fQU5EX0ZJTkRfVk1BXFxuK1xcdHNlbGVjdCBIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRVxcbiBcXHRzZWxlY3QgT0xEX1NJR0FDVElPTlxcbiBcXHRzZWxlY3QgWk9ORV9ETUFcXG4gXFxuQEAgLTc1LDggKzc2LDcgQEAgY29uZmlnIFNQQVJDNjRcXG4gXFx0c2VsZWN0IEhBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSXFxuIFxcdHNlbGVjdCBIQVZFX0tSRVRQUk9CRVNcXG4gXFx0c2VsZWN0IEhBVkVfS1BST0JFU1xcbi1cXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSBpZiBTTVBcXG4tXFx0c2VsZWN0IEhBVkVfQVJDSF9UTEJfUkVNT1ZFX1RBQkxFIGlmIFNNUFxcbitcXHRzZWxlY3QgSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEVcXG4gXFx0c2VsZWN0IE1NVV9HQVRIRVJfTUVSR0VfVk1BU1xcbiBcXHRzZWxlY3QgTU1VX0dBVEhFUl9OT19GTFVTSF9DQUNIRVxcbiBcXHRzZWxlY3QgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxuZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY18zMi5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzMyLmhcXG5pbmRleCA0ZjczZTg3YjIyYTMyLi4zNjAxMDg1MmJhMGMwIDEwMDY0NFxcbi0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY18zMi5oXFxuKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzMyLmhcXG5AQCAtNDgsNyArNDgsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9wbWRfZmFzdChwbWRfdCAqIHBtZClcXG4gfVxcbiBcXG4gI2RlZmluZSBwbWRfZnJlZShtbSwgcG1kKVxcdFxcdGZyZWVfcG1kX2Zhc3QocG1kKVxcbi0jZGVmaW5lIF9fcG1kX2ZyZWVfdGxiKHRsYiwgcG1kLCBhZGRyKVxcdHBtZF9mcmVlKCh0bGIpLVxcdTAwM2VtbSwgcG1kKVxcbitcXG4rI2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIsIHBtZCwgYWRkcilcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHRsYl9yZW1vdmVfdGFibGUoKHRsYiksICh2b2lkICopKCh1bnNpZ25lZCBsb25nKShwbWQpIHwgMVVMKSlcXG4gXFxuICNkZWZpbmUgcG1kX3BvcHVsYXRlKG1tLCBwbWQsIHB0ZSlcXHRwbWRfc2V0KHBtZCwgcHRlKVxcbiBcXG5AQCAtNzIsNiArNzQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9wdGVfZmFzdChwdGVfdCAqcHRlKVxcbiAjZGVmaW5lIHB0ZV9mcmVlX2tlcm5lbChtbSwgcHRlKVxcdGZyZWVfcHRlX2Zhc3QocHRlKVxcbiBcXG4gdm9pZCBwdGVfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICogbW0sIHBndGFibGVfdCBwdGUpO1xcbi0jZGVmaW5lIF9fcHRlX2ZyZWVfdGxiKHRsYiwgcHRlLCBhZGRyKVxcdHB0ZV9mcmVlKCh0bGIpLVxcdTAwM2VtbSwgcHRlKVxcbit2b2lkIF9fdGxiX3JlbW92ZV90YWJsZSh2b2lkICp0YWJsZSk7XFxuKyNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLCBwdGUsIGFkZHIpXFx0dGxiX3JlbW92ZV90YWJsZSgodGxiKSwgKHZvaWQgKikocHRlKSlcXG4gXFxuICNlbmRpZiAvKiBfU1BBUkNfUEdBTExPQ19IICovXFxuZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY182NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzY0LmhcXG5pbmRleCBjYWE3NjMyYmU0YzJhLi5iNTA1NWQyNTliNzRkIDEwMDY0NFxcbi0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY182NC5oXFxuKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzY0LmhcXG5AQCAtNzQsOCArNzQsNiBAQCB2b2lkIHB0ZV9mcmVlX2RlZmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcGd0YWJsZSk7XFxuIFxcbiB2b2lkIHBndGFibGVfZnJlZSh2b2lkICp0YWJsZSwgYm9vbCBpc19wYWdlKTtcXG4gXFxuLSNpZmRlZiBDT05GSUdfU01QXFxuLVxcbiBzdHJ1Y3QgbW11X2dhdGhlcjtcXG4gdm9pZCB0bGJfcmVtb3ZlX3RhYmxlKHN0cnVjdCBtbXVfZ2F0aGVyICosIHZvaWQgKik7XFxuIFxcbkBAIC05NiwxMiArOTQsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX190bGJfcmVtb3ZlX3RhYmxlKHZvaWQgKl90YWJsZSlcXG4gXFx0XFx0aXNfcGFnZSA9IHRydWU7XFxuIFxcdHBndGFibGVfZnJlZSh0YWJsZSwgaXNfcGFnZSk7XFxuIH1cXG4tI2Vsc2UgLyogQ09ORklHX1NNUCAqL1xcbi1zdGF0aWMgaW5saW5lIHZvaWQgcGd0YWJsZV9mcmVlX3RsYihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCB2b2lkICp0YWJsZSwgYm9vbCBpc19wYWdlKVxcbi17XFxuLVxcdHBndGFibGVfZnJlZSh0YWJsZSwgaXNfcGFnZSk7XFxuLX1cXG4tI2VuZGlmIC8qICFDT05GSUdfU01QICovXFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19wdGVfZnJlZV90bGIoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgcHRlX3QgKnB0ZSxcXG4gXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXFxuZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGxiXzY0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RsYl82NC5oXFxuaW5kZXggMzAzNzE4NzQ4MmRiNy4uZjVmOTYzMTY4NWQ1MCAxMDA2NDRcXG4tLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RsYl82NC5oXFxuKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90bGJfNjQuaFxcbkBAIC0yOSw5ICsyOSw3IEBAIHZvaWQgZmx1c2hfdGxiX3BlbmRpbmcodm9pZCk7XFxuICAqIGFuZCB0aGVyZWZvcmUgd2UgZG9uJ3QgbmVlZCBhIFRMQkkgd2hlbiBmcmVlaW5nIHBhZ2UtdGFibGUgcGFnZXMuXFxuICAqL1xcbiBcXG4tI2lmZGVmIENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXFxuICNkZWZpbmUgdGxiX25lZWRzX3RhYmxlX2ludmFsaWRhdGUoKVxcdChmYWxzZSlcXG4tI2VuZGlmXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtLWdlbmVyaWMvdGxiLmhcXHUwMDNlXFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2xpYi9iaXRleHQuYyBiL2FyY2gvc3BhcmMvbGliL2JpdGV4dC5jXFxuaW5kZXggMzJhNWMxZDk0NTljZC4uYzMwOWUyNzk3M2NlNiAxMDA2NDRcXG4tLS0gYS9hcmNoL3NwYXJjL2xpYi9iaXRleHQuY1xcbisrKyBiL2FyY2gvc3BhcmMvbGliL2JpdGV4dC5jXFxuQEAgLTIyLDggKzIyLDYgQEBcXG4gICogQGFsaWduOiByZXF1ZXN0ZWQgYWxpZ25tZW50XFxuICAqXFxuICAqIFJldHVybnMgb2Zmc2V0IGluIHRoZSBtYXAgb3IgLTEgaWYgb3V0IG9mIHNwYWNlLlxcbi0gKlxcbi0gKiBOb3Qgc2FmZSB0byBjYWxsIGZyb20gYW4gaW50ZXJydXB0ICh1c2VzIHNwaW5fbG9jaykuXFxuICAqL1xcbiBpbnQgYml0X21hcF9zdHJpbmdfZ2V0KHN0cnVjdCBiaXRfbWFwICp0LCBpbnQgbGVuLCBpbnQgYWxpZ24pXFxuIHtcXG5AQCAtMzEsNiArMjksNyBAQCBpbnQgYml0X21hcF9zdHJpbmdfZ2V0KHN0cnVjdCBiaXRfbWFwICp0LCBpbnQgbGVuLCBpbnQgYWxpZ24pXFxuIFxcdGludCBvZmZfbmV3O1xcbiBcXHRpbnQgYWxpZ24xO1xcbiBcXHRpbnQgaSwgY29sb3I7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcbiBcXHRpZiAodC1cXHUwMDNlbnVtX2NvbG9ycykge1xcbiBcXHRcXHQvKiBhbGlnbiBpcyBvdmVybG9hZGVkIHRvIGJlIHRoZSBwYWdlIGNvbG9yICovXFxuQEAgLTUwLDcgKzQ5LDcgQEAgaW50IGJpdF9tYXBfc3RyaW5nX2dldChzdHJ1Y3QgYml0X21hcCAqdCwgaW50IGxlbiwgaW50IGFsaWduKVxcbiBcXHRcXHRCVUcoKTtcXG4gXFx0Y29sb3IgXFx1MDAyNj0gYWxpZ24xO1xcbiBcXG4tXFx0c3Bpbl9sb2NrKFxcdTAwMjZ0LVxcdTAwM2Vsb2NrKTtcXG4rXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnQtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gXFx0aWYgKGxlbiBcXHUwMDNjIHQtXFx1MDAzZWxhc3Rfc2l6ZSlcXG4gXFx0XFx0b2Zmc2V0ID0gdC1cXHUwMDNlZmlyc3RfZnJlZTtcXG4gXFx0ZWxzZVxcbkBAIC02NCw3ICs2Myw3IEBAIGludCBiaXRfbWFwX3N0cmluZ19nZXQoc3RydWN0IGJpdF9tYXAgKnQsIGludCBsZW4sIGludCBhbGlnbilcXG4gXFx0XFx0aWYgKG9mZnNldCBcXHUwMDNlPSB0LVxcdTAwM2VzaXplKVxcbiBcXHRcXHRcXHRvZmZzZXQgPSAwO1xcbiBcXHRcXHRpZiAoY291bnQgKyBsZW4gXFx1MDAzZSB0LVxcdTAwM2VzaXplKSB7XFxuLVxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ0LVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2dC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiAvKiBQMyAqLyBwcmludGsoS0VSTl9FUlJcXG4gICBcXFwiYml0bWFwIG91dDogc2l6ZSAlZCB1c2VkICVkIG9mZiAlZCBsZW4gJWQgYWxpZ24gJWQgY291bnQgJWRcXFxcblxcXCIsXFxuICAgdC1cXHUwMDNlc2l6ZSwgdC1cXHUwMDNldXNlZCwgb2Zmc2V0LCBsZW4sIGFsaWduLCBjb3VudCk7XFxuQEAgLTkwLDcgKzg5LDcgQEAgaW50IGJpdF9tYXBfc3RyaW5nX2dldChzdHJ1Y3QgYml0X21hcCAqdCwgaW50IGxlbiwgaW50IGFsaWduKVxcbiBcXHRcXHRcXHRcXHRcXHR0LVxcdTAwM2VsYXN0X29mZiA9IDA7XFxuIFxcdFxcdFxcdFxcdHQtXFx1MDAzZXVzZWQgKz0gbGVuO1xcbiBcXHRcXHRcXHRcXHR0LVxcdTAwM2VsYXN0X3NpemUgPSBsZW47XFxuLVxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ0LVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2dC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiBcXHRcXHRcXHRcXHRyZXR1cm4gb2Zmc2V0O1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG5AQCAtMTAzLDEwICsxMDIsMTEgQEAgaW50IGJpdF9tYXBfc3RyaW5nX2dldChzdHJ1Y3QgYml0X21hcCAqdCwgaW50IGxlbiwgaW50IGFsaWduKVxcbiB2b2lkIGJpdF9tYXBfY2xlYXIoc3RydWN0IGJpdF9tYXAgKnQsIGludCBvZmZzZXQsIGludCBsZW4pXFxuIHtcXG4gXFx0aW50IGk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcbiBcXHRpZiAodC1cXHUwMDNldXNlZCBcXHUwMDNjIGxlbilcXG4gXFx0XFx0QlVHKCk7XFx0XFx0LyogTXVjaCB0b28gbGF0ZSB0byBkbyBhbnkgZ29vZCwgYnV0IGFsYXMuLi4gKi9cXG4tXFx0c3Bpbl9sb2NrKFxcdTAwMjZ0LVxcdTAwM2Vsb2NrKTtcXG4rXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnQtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGxlbjsgaSsrKSB7XFxuIFxcdFxcdGlmICh0ZXN0X2JpdChvZmZzZXQgKyBpLCB0LVxcdTAwM2VtYXApID09IDApXFxuIFxcdFxcdFxcdEJVRygpO1xcbkBAIC0xMTUsNyArMTE1LDcgQEAgdm9pZCBiaXRfbWFwX2NsZWFyKHN0cnVjdCBiaXRfbWFwICp0LCBpbnQgb2Zmc2V0LCBpbnQgbGVuKVxcbiBcXHRpZiAob2Zmc2V0IFxcdTAwM2MgdC1cXHUwMDNlZmlyc3RfZnJlZSlcXG4gXFx0XFx0dC1cXHUwMDNlZmlyc3RfZnJlZSA9IG9mZnNldDtcXG4gXFx0dC1cXHUwMDNldXNlZCAtPSBsZW47XFxuLVxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ0LVxcdTAwM2Vsb2NrKTtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2dC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiB9XFxuIFxcbiB2b2lkIGJpdF9tYXBfaW5pdChzdHJ1Y3QgYml0X21hcCAqdCwgdW5zaWduZWQgbG9uZyAqbWFwLCBpbnQgc2l6ZSlcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tbS9zcm1tdS5jIGIvYXJjaC9zcGFyYy9tbS9zcm1tdS5jXFxuaW5kZXggOWE3NDkwMmFkMTgxNC4uMmEyYzdiZDIxMDExNCAxMDA2NDRcXG4tLS0gYS9hcmNoL3NwYXJjL21tL3NybW11LmNcXG4rKysgYi9hcmNoL3NwYXJjL21tL3NybW11LmNcXG5AQCAtMzU5LDE5ICszNTksMzkgQEAgcGd0YWJsZV90IHB0ZV9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuIFxcdHJldHVybiBwdGVwO1xcbiB9XFxuIFxcbi12b2lkIHB0ZV9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcHRlcClcXG4rc3RhdGljIHZvaWQgX19wdGVfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHB0ZXApXFxuIHtcXG4rXFx0Y29uc3QgYm9vbCBwcm9jZXNzX2NvbnRleHQgPSBtbTtcXG4gXFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuIFxcbiBcXHRwYWdlID0gcGZuX3RvX3BhZ2UoX19ub2NhY2hlX3BhKCh1bnNpZ25lZCBsb25nKXB0ZXApIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbi1cXHRzcGluX2xvY2soXFx1MDAyNm1tLVxcdTAwM2VwYWdlX3RhYmxlX2xvY2spO1xcbitcXHRpZiAocHJvY2Vzc19jb250ZXh0KVxcbitcXHRcXHRzcGluX2xvY2soXFx1MDAyNm1tLVxcdTAwM2VwYWdlX3RhYmxlX2xvY2spO1xcbiBcXHRpZiAocGFnZV9yZWZfZGVjX3JldHVybihwYWdlKSA9PSAxKVxcbiBcXHRcXHRwYWdldGFibGVfZHRvcihwYWdlX3B0ZGVzYyhwYWdlKSk7XFxuLVxcdHNwaW5fdW5sb2NrKFxcdTAwMjZtbS1cXHUwMDNlcGFnZV90YWJsZV9sb2NrKTtcXG4rXFx0aWYgKHByb2Nlc3NfY29udGV4dClcXG4rXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNm1tLVxcdTAwM2VwYWdlX3RhYmxlX2xvY2spO1xcbiBcXG4gXFx0c3JtbXVfZnJlZV9ub2NhY2hlKHB0ZXAsIFNSTU1VX1BURV9UQUJMRV9TSVpFKTtcXG4gfVxcbiBcXG4rdm9pZCBwdGVfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHB0ZXApXFxuK3tcXG4rXFx0X19wdGVfZnJlZShtbSwgcHRlcCk7XFxuK31cXG4rXFxuK3ZvaWQgX190bGJfcmVtb3ZlX3RhYmxlKHZvaWQgKnRhYmxlKVxcbit7XFxuK1xcdGNvbnN0IHVuc2lnbmVkIGxvbmcgZW5jb2RlZCA9ICh1bnNpZ25lZCBsb25nKXRhYmxlO1xcbitcXHRjb25zdCB1bnNpZ25lZCBsb25nIGFkZHIgPSBlbmNvZGVkIFxcdTAwMjYgfjFVTDtcXG4rXFx0Y29uc3QgYm9vbCBpc19wbWQgPSBlbmNvZGVkIFxcdTAwMjYgMTtcXG4rXFxuK1xcdGlmIChpc19wbWQpXFxuK1xcdFxcdGZyZWVfcG1kX2Zhc3QoKHBtZF90ICopYWRkcik7XFxuK1xcdGVsc2UgLyogQ2FsbGVkIGZyb20gc29mdGlycSBjb250ZXh0LCBubyBtbS4gKi9cXG4rXFx0XFx0X19wdGVfZnJlZShOVUxMLCAocGd0YWJsZV90KWFkZHIpO1xcbit9XFxuK1xcbiAvKiBjb250ZXh0IGhhbmRsaW5nIC0gYSBkeW5hbWljYWxseSBzaXplZCBwb29sIGlzIHVzZWQgKi9cXG4gI2RlZmluZSBOT19DT05URVhUXFx0LTFcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gvdW0vS2NvbmZpZyBiL2FyY2gvdW0vS2NvbmZpZ1xcbmluZGV4IGQ5NTQxZDEzZDllYjAuLjk0YjhmZjcwZjU3OGIgMTAwNjQ0XFxuLS0tIGEvYXJjaC91bS9LY29uZmlnXFxuKysrIGIvYXJjaC91bS9LY29uZmlnXFxuQEAgLTQ0LDcgKzQ0LDYgQEAgY29uZmlnIFVNTFxcbiBcXHRzZWxlY3QgSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTXFxuIFxcdHNlbGVjdCBUSFJFQURfSU5GT19JTl9UQVNLXFxuIFxcdHNlbGVjdCBTUEFSU0VfSVJRXFxuLVxcdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXFxuIFxcbiBjb25maWcgTU1VXFxuIFxcdGJvb2xcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWdcXG5pbmRleCBhOGMzYjNkMzFhMjc2Li42ZTVlNDYyZWMwNTlhIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L0tjb25maWdcXG4rKysgYi9hcmNoL3g4Ni9LY29uZmlnXFxuQEAgLTI4Myw3ICsyODMsNiBAQCBjb25maWcgWDg2XFxuIFxcdHNlbGVjdCBIQVZFX1BFUkZfUkVHU1xcbiBcXHRzZWxlY3QgSEFWRV9QRVJGX1VTRVJfU1RBQ0tfRFVNUFxcbiBcXHRzZWxlY3QgQVNZTkNfS0VSTkVMX1BHVEFCTEVfRlJFRVxcdGlmIElPTU1VX1NWQVxcbi1cXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxcbiBcXHRzZWxlY3QgTU1VX0dBVEhFUl9NRVJHRV9WTUFTXFxuIFxcdHNlbGVjdCBIQVZFX1BPU0lYX0NQVV9USU1FUlNfVEFTS19XT1JLXFxuIFxcdHNlbGVjdCBIQVZFX1JFR1NfQU5EX1NUQUNLX0FDQ0VTU19BUElcXG5kaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vdGxiLmggYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS90bGIuaFxcbmluZGV4IDhjM2NlYjQyNzAxODAuLjZmYjdiNzgxNTRmNjIgMTAwNjQ0XFxuLS0tIGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vdGxiLmhcXG4rKysgYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS90bGIuaFxcbkBAIC0xNiw3ICsxNiw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtLWdlbmVyaWMvdGxiLmhcXHUwMDNlXFxuIFxcbi0jZGVmaW5lIF9fcHRlX2ZyZWVfdGxiKHRsYiwgcHRlLCBhZGRyZXNzKVxcdHB0ZV9mcmVlKCh0bGIpLVxcdTAwM2VtbSwgcHRlKVxcbisjZGVmaW5lIF9fcHRlX2ZyZWVfdGxiKHRsYiwgcHRlLCBhZGRyZXNzKVxcdHRsYl9yZW1vdmVfcHRkZXNjKCh0bGIpLCBwYWdlX3B0ZGVzYyhwdGUpKVxcbiBcXG4gdm9pZCBjaGVja190bGJfc2FuaXR5KHZvaWQpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmhcXG5pbmRleCBiZGNjMjc3OGFjNjRmLi4wNDRkYWJjMWZlOWNiIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmhcXG4rKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3RsYi5oXFxuQEAgLTY3LDExICs2Nyw4IEBAXFxuICAqICAtIHRsYl9yZW1vdmVfdGFibGUoKVxcbiAgKlxcbiAgKiAgICB0bGJfcmVtb3ZlX3RhYmxlKCkgaXMgdGhlIGJhc2ljIHByaW1pdGl2ZSB0byBmcmVlIHBhZ2UtdGFibGUgZGlyZWN0b3JpZXNcXG4tICogICAgKF9fcCpfZnJlZV90bGIoKSkuICBJbiBpdCdzIG1vc3QgcHJpbWl0aXZlIGZvcm0gaXQgaXMgYW4gYWxpYXMgZm9yXFxuLSAqICAgIHRsYl9yZW1vdmVfcGFnZSgpIGJlbG93LCBmb3Igd2hlbiBwYWdlIGRpcmVjdG9yaWVzIGFyZSBwYWdlcyBhbmQgaGF2ZSBub1xcbi0gKiAgICBhZGRpdGlvbmFsIGNvbnN0cmFpbnRzLlxcbi0gKlxcbi0gKiAgICBTZWUgYWxzbyBNTVVfR0FUSEVSX1RBQkxFX0ZSRUUgYW5kIE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUuXFxuKyAqICAgIChfX3AqX2ZyZWVfdGxiKCkpLiAgUGFnZSBkaXJlY3RvcmllcyBhcmUgZnJlZWQgYWZ0ZXIgYW4gUkNVIGdyYWNlXFxuKyAqICAgIHBlcmlvZCAtIHNlZSB0aGUgY29tbWVudCBpbiBtbS9tbXVfZ2F0aGVyLmMuXFxuICAqXFxuICAqICAtIHRsYl9yZW1vdmVfcGFnZSgpIC8gdGxiX3JlbW92ZV9wYWdlX3NpemUoKVxcbiAgKiAgLSBfX3RsYl9yZW1vdmVfZm9saW9fcGFnZXMoKSAvIF9fdGxiX3JlbW92ZV9wYWdlX3NpemUoKVxcbkBAIC0xNTEsMjQgKzE0OCwxNSBAQFxcbiAgKiAgVGhpcyBtaWdodCBiZSB1c2VmdWwgaWYgeW91ciBhcmNoaXRlY3R1cmUgaGFzIHNpemUgc3BlY2lmaWMgVExCXFxuICAqICBpbnZhbGlkYXRpb24gaW5zdHJ1Y3Rpb25zLlxcbiAgKlxcbi0gKiAgTU1VX0dBVEhFUl9UQUJMRV9GUkVFXFxuLSAqXFxuLSAqICBUaGlzIHByb3ZpZGVzIHRsYl9yZW1vdmVfdGFibGUoKSwgdG8gYmUgdXNlZCBpbnN0ZWFkIG9mIHRsYl9yZW1vdmVfcGFnZSgpXFxuLSAqICBmb3IgcGFnZSBkaXJlY3RvcmVzIChfX3AqX2ZyZWVfdGxiKCkpLlxcbi0gKlxcbi0gKiAgVXNlZnVsIGlmIHlvdXIgYXJjaGl0ZWN0dXJlIGhhcyBub24tcGFnZSBwYWdlIGRpcmVjdG9yaWVzLlxcbisgKiAgUGFnZSBkaXJlY3RvcmllcyAoX19wKl9mcmVlX3RsYigpKSBhcmUgYWx3YXlzIGZyZWVkIHZpYSB0bGJfcmVtb3ZlX3RhYmxlKCksXFxuKyAqICBhZnRlciBhbiBSQ1UgZ3JhY2UgcGVyaW9kIChzZWUgbW0vbW11X2dhdGhlci5jKS5cXG4gICpcXG4tICogIFdoZW4gdXNlZCwgYW4gYXJjaGl0ZWN0dXJlIGlzIGV4cGVjdGVkIHRvIHByb3ZpZGUgX190bGJfcmVtb3ZlX3RhYmxlKCkgb3JcXG4tICogIHVzZSB0aGUgZ2VuZXJpYyBfX3RsYl9yZW1vdmVfdGFibGUoKSwgd2hpY2ggZG9lcyB0aGUgYWN0dWFsIGZyZWVpbmcgb2YgdGhlc2VcXG4tICogIHBhZ2VzLlxcbisgKiBUaGlzIHNlcmlhbGlzZXMgYWdhaW5zdCBzb2Z0d2FyZSBwYWdlLXRhYmxlIHdhbGtlcnMsIGluY2x1ZGluZyBhcmNoaXRlY3R1cmVzXFxuKyAqIHdoaWNoIGRvIG5vdCB1c2UgSVBJcyBmb3IgcmVtb3RlIFRMQiBpbnZhbGlkYXRlcy5cXG4gICpcXG4tICogIE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcXG4tICpcXG4tICogIExpa2UgTU1VX0dBVEhFUl9UQUJMRV9GUkVFLCBhbmQgYWRkcyBzZW1pLVJDVSBzZW1hbnRpY3MgdG8gdGhlIGZyZWUgKHNlZVxcbi0gKiAgY29tbWVudCBiZWxvdykuXFxuLSAqXFxuLSAqICBVc2VmdWwgaWYgeW91ciBhcmNoaXRlY3R1cmUgZG9lc24ndCB1c2UgSVBJcyBmb3IgcmVtb3RlIFRMQiBpbnZhbGlkYXRlc1xcbi0gKiAgYW5kIHRoZXJlZm9yZSBkb2Vzbid0IG5hdHVyYWxseSBzZXJpYWxpemUgd2l0aCBzb2Z0d2FyZSBwYWdlLXRhYmxlIHdhbGtlcnMuXFxuKyAqICBBbiBhcmNoaXRlY3R1cmUgaXMgZXhwZWN0ZWQgdG8gcHJvdmlkZSBfX3RsYl9yZW1vdmVfdGFibGUoKSAoc2VlXFxuKyAqICBIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRSkgb3IgdXNlIHRoZSBnZW5lcmljIF9fdGxiX3JlbW92ZV90YWJsZSgpLCB3aGljaFxcbisgKiAgZG9lcyB0aGUgYWN0dWFsIGZyZWVpbmcgb2YgdGhlc2UgcGFnZXMuXFxuICAqXFxuICAqICBNTVVfR0FUSEVSX05PX0ZMVVNIX0NBQ0hFXFxuICAqXFxuQEAgLTIwMCwxMiArMTg4LDggQEBcXG4gICogIHZhcmlvdXMgcHRlcF9nZXRfYW5kX2NsZWFyKCkgZnVuY3Rpb25zLlxcbiAgKi9cXG4gXFxuLSNpZmRlZiBDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFXFxuLVxcbiBzdHJ1Y3QgbW11X3RhYmxlX2JhdGNoIHtcXG4tI2lmZGVmIENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXFxuIFxcdHN0cnVjdCByY3VfaGVhZFxcdFxcdHJjdTtcXG4tI2VuZGlmXFxuIFxcdHVuc2lnbmVkIGludFxcdFxcdG5yO1xcbiBcXHR2b2lkXFx0XFx0XFx0KnRhYmxlc1tdO1xcbiB9O1xcbkBAIC0yMjQsMjMgKzIwOCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3RsYl9yZW1vdmVfdGFibGUodm9pZCAqdGFibGUpXFxuIFxcbiBleHRlcm4gdm9pZCB0bGJfcmVtb3ZlX3RhYmxlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHZvaWQgKnRhYmxlKTtcXG4gXFxuLSNlbHNlIC8qICFDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFICovXFxuLVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgdGxiX3JlbW92ZV9wYWdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCBwYWdlICpwYWdlKTtcXG4tLypcXG4tICogV2l0aG91dCBNTVVfR0FUSEVSX1RBQkxFX0ZSRUUgdGhlIGFyY2hpdGVjdHVyZSBpcyBhc3N1bWVkIHRvIGhhdmUgcGFnZSBiYXNlZFxcbi0gKiBwYWdlIGRpcmVjdG9yaWVzIGFuZCB3ZSBjYW4gdXNlIHRoZSBub3JtYWwgcGFnZSBiYXRjaGluZyB0byBmcmVlIHRoZW0uXFxuLSAqL1xcbi1zdGF0aWMgaW5saW5lIHZvaWQgdGxiX3JlbW92ZV90YWJsZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCB2b2lkICp0YWJsZSlcXG4te1xcbi1cXHRzdHJ1Y3QgcHRkZXNjICpwdGRlc2MgPSAoc3RydWN0IHB0ZGVzYyAqKXRhYmxlO1xcbi1cXG4tXFx0cGFnZXRhYmxlX2R0b3IocHRkZXNjKTtcXG4tXFx0dGxiX3JlbW92ZV9wYWdlKHRsYiwgcHRkZXNjX3BhZ2UocHRkZXNjKSk7XFxuLX1cXG4tI2VuZGlmIC8qIENPTkZJR19NTVVfR0FUSEVSX1RBQkxFX0ZSRUUgKi9cXG4tXFxuLSNpZmRlZiBDT05GSUdfTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxcbiAvKlxcbiAgKiBUaGlzIGFsbG93cyBhbiBhcmNoaXRlY3R1cmUgdGhhdCBkb2VzIG5vdCB1c2UgdGhlIGxpbnV4IHBhZ2UtdGFibGVzIGZvclxcbiAgKiBoYXJkd2FyZSB0byBza2lwIHRoZSBUTEJJIHdoZW4gZnJlZWluZyBwYWdlIHRhYmxlcy5cXG5AQCAtMjUzLDE5ICsyMjAsNiBAQCB2b2lkIHRsYl9yZW1vdmVfdGFibGVfc3luY19vbmUodm9pZCk7XFxuIFxcbiB2b2lkIHRsYl9yZW1vdmVfdGFibGVfc3luY19yY3Uodm9pZCk7XFxuIFxcbi0jZWxzZVxcbi1cXG4tI2lmZGVmIHRsYl9uZWVkc190YWJsZV9pbnZhbGlkYXRlXFxuLSNlcnJvciB0bGJfbmVlZHNfdGFibGVfaW52YWxpZGF0ZSgpIHJlcXVpcmVzIE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcXG4tI2VuZGlmXFxuLVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgdGxiX3JlbW92ZV90YWJsZV9zeW5jX29uZSh2b2lkKSB7IH1cXG4tXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfcmN1KHZvaWQpIHsgfVxcbi1cXG4tI2VuZGlmIC8qIENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFICovXFxuLVxcbi1cXG4gI2lmbmRlZiBDT05GSUdfTU1VX0dBVEhFUl9OT19HQVRIRVJcXG4gLypcXG4gICogSWYgd2UgY2FuJ3QgYWxsb2NhdGUgYSBwYWdlIHRvIG1ha2UgYSBiaWcgYmF0Y2ggb2YgcGFnZSBwb2ludGVyc1xcbkBAIC0zMjUsOSArMjc5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHRsYl9mbHVzaF9ybWFwcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3RcXG4gc3RydWN0IG1tdV9nYXRoZXIge1xcbiBcXHRzdHJ1Y3QgbW1fc3RydWN0XFx0Km1tO1xcbiBcXG4tI2lmZGVmIENPTkZJR19NTVVfR0FUSEVSX1RBQkxFX0ZSRUVcXG4gXFx0c3RydWN0IG1tdV90YWJsZV9iYXRjaFxcdCpiYXRjaDtcXG4tI2VuZGlmXFxuIFxcbiBcXHR1bnNpZ25lZCBsb25nXFx0XFx0c3RhcnQ7XFxuIFxcdHVuc2lnbmVkIGxvbmdcXHRcXHRlbmQ7XFxuZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnXFxuaW5kZXggYzFkZGY1OWMwZDcxYS4uYmM3YmVmYWZiNDdiNSAxMDA2NDRcXG4tLS0gYS9tbS9LY29uZmlnXFxuKysrIGIvbW0vS2NvbmZpZ1xcbkBAIC0xNDY1LDcgKzE0NjUsNyBAQCBjb25maWcgSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEVcXG4gXFxuIGNvbmZpZyBQVF9SRUNMQUlNXFxuIFxcdGRlZl9ib29sIHlcXG4tXFx0ZGVwZW5kcyBvbiBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFIFxcdTAwMjZcXHUwMDI2ICFIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRVxcbitcXHRkZXBlbmRzIG9uIE1NVSBcXHUwMDI2XFx1MDAyNiAhSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEVcXG4gXFx0aGVscFxcbiBcXHQgIFRyeSB0byByZWNsYWltIGVtcHR5IHVzZXIgcGFnZSB0YWJsZSBwYWdlcyBpbiBwYXRocyBvdGhlciB0aGFuIG11bm1hcFxcbiBcXHQgIGFuZCBleGl0X21tYXAgcGF0aC5cXG5kaWZmIC0tZ2l0IGEvbW0vZ3VwLmMgYi9tbS9ndXAuY1xcbmluZGV4IGViODk4ZWExZWUyMmUuLjYzYjQzNWVjNjA1YzggMTAwNjQ0XFxuLS0tIGEvbW0vZ3VwLmNcXG4rKysgYi9tbS9ndXAuY1xcbkBAIC0yNzAwLDggKzI3MDAsOSBAQCBFWFBPUlRfU1lNQk9MKGdldF91c2VyX3BhZ2VzX3VubG9ja2VkKTtcXG4gICogQmVmb3JlIGFjdGl2YXRpbmcgdGhpcyBjb2RlLCBwbGVhc2UgYmUgYXdhcmUgdGhhdCB0aGUgZm9sbG93aW5nIGFzc3VtcHRpb25zXFxuICAqIGFyZSBjdXJyZW50bHkgbWFkZTpcXG4gICpcXG4tICogICopIEVpdGhlciBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFIGlzIGVuYWJsZWQsIGFuZCB0bGJfcmVtb3ZlX3RhYmxlKCkgaXMgdXNlZCB0b1xcbi0gKiAgZnJlZSBwYWdlcyBjb250YWluaW5nIHBhZ2UgdGFibGVzIG9yIFRMQiBmbHVzaGluZyByZXF1aXJlcyBJUEkgYnJvYWRjYXN0LlxcbisgKiAgKikgdGxiX3JlbW92ZV90YWJsZSgpIGlzIHVzZWQgdG8gZnJlZSBwYWdlcyBjb250YWluaW5nIHBhZ2UgdGFibGVzLCB3aXRoXFxuKyAqICB0aGUgZnJlZSBkZWZlcnJlZCB1bnRpbCBhbiBSQ1UgZ3JhY2UgcGVyaW9kIGhhcyBlbGFwc2VkIChzZWVcXG4rICogIG1tL21tdV9nYXRoZXIuYykuXFxuICAqXFxuICAqICAqKSBwdGVzIGNhbiBiZSByZWFkIGF0b21pY2FsbHkgYnkgdGhlIGFyY2hpdGVjdHVyZS5cXG4gICpcXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5pbmRleCA1NDQ5NGMzZmE5ODM1Li41MDVmN2I2MmZmMjgxIDEwMDY0NFxcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXFxuQEAgLTI0NzYsNyArMjQ3Niw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB6YXBfZGVwb3NpdGVkX3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKVxcbiBcXHRwZ3RhYmxlX3QgcGd0YWJsZTtcXG4gXFxuIFxcdHBndGFibGUgPSBwZ3RhYmxlX3RyYW5zX2h1Z2Vfd2l0aGRyYXcobW0sIHBtZCk7XFxuLVxcdHB0ZV9mcmVlKG1tLCBwZ3RhYmxlKTtcXG4rXFx0cHRlX2ZyZWVfZGVmZXIobW0sIHBndGFibGUpO1xcbiBcXHRtbV9kZWNfbnJfcHRlcyhtbSk7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL21tL21tdV9nYXRoZXIuYyBiL21tL21tdV9nYXRoZXIuY1xcbmluZGV4IDM5ODVkODU2ZGU3ZjkuLjJhNzJhOTY4Njc3M2EgMTAwNjQ0XFxuLS0tIGEvbW0vbW11X2dhdGhlci5jXFxuKysrIGIvbW0vbW11X2dhdGhlci5jXFxuQEAgLTIxOCw4ICsyMTgsNiBAQCBib29sIF9fdGxiX3JlbW92ZV9wYWdlX3NpemUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBwYWdlX1xcbiBcXG4gI2VuZGlmIC8qIE1NVV9HQVRIRVJfTk9fR0FUSEVSICovXFxuIFxcbi0jaWZkZWYgQ09ORklHX01NVV9HQVRIRVJfVEFCTEVfRlJFRVxcbi1cXG4gc3RhdGljIHZvaWQgX190bGJfcmVtb3ZlX3RhYmxlX2ZyZWUoc3RydWN0IG1tdV90YWJsZV9iYXRjaCAqYmF0Y2gpXFxuIHtcXG4gXFx0aW50IGk7XFxuQEAgLTIzMCwxMCArMjI4LDggQEAgc3RhdGljIHZvaWQgX190bGJfcmVtb3ZlX3RhYmxlX2ZyZWUoc3RydWN0IG1tdV90YWJsZV9iYXRjaCAqYmF0Y2gpXFxuIFxcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyliYXRjaCk7XFxuIH1cXG4gXFxuLSNpZmRlZiBDT05GSUdfTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxcbi1cXG4gLypcXG4tICogU2VtaSBSQ1UgZnJlZWluZyBvZiB0aGUgcGFnZSBkaXJlY3Rvcmllcy5cXG4rICogUkNVIGZyZWVpbmcgb2YgdGhlIHBhZ2UgZGlyZWN0b3JpZXMuXFxuICAqXFxuICAqIFRoaXMgaXMgbmVlZGVkIGJ5IHNvbWUgYXJjaGl0ZWN0dXJlcyB0byBpbXBsZW1lbnQgc29mdHdhcmUgcGFnZXRhYmxlIHdhbGtlcnMuXFxuICAqXFxuQEAgLTI1OSwxMyArMjU1LDEzIEBAIHN0YXRpYyB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZV9mcmVlKHN0cnVjdCBtbXVfdGFibGVfYmF0Y2ggKmJhdGNoKVxcbiAgKiBtZWFucy5cXG4gICpcXG4gICogV2hhdCB3ZSBkbyBpcyBiYXRjaCB0aGUgZnJlZWQgZGlyZWN0b3J5IHBhZ2VzICh0YWJsZXMpIGFuZCBSQ1UgZnJlZSB0aGVtLlxcbi0gKiBXZSB1c2UgdGhlIHNjaGVkIFJDVSB2YXJpYW50LCBhcyB0aGF0IGd1YXJhbnRlZXMgdGhhdCBJUlEvcHJlZW1wdCBkaXNhYmxpbmdcXG4tICogaG9sZHMgb2ZmIGdyYWNlIHBlcmlvZHMuXFxuKyAqIERpc2FibGluZyBJUlFzIG9yIHByZWVtcHRpb24gaG9sZHMgb2ZmIFJDVSBncmFjZSBwZXJpb2RzLCBzbyB0aGlzIHByb3RlY3RzXFxuKyAqIGJvdGggcmN1X3JlYWRfbG9jaygpIGFuZCBJUlEtZGlzYWJsaW5nIHdhbGtlcnMuXFxuICAqXFxuICAqIEhvd2V2ZXIsIGluIG9yZGVyIHRvIGJhdGNoIHRoZXNlIHBhZ2VzIHdlIG5lZWQgdG8gYWxsb2NhdGUgc3RvcmFnZSwgdGhpc1xcbiAgKiBhbGxvY2F0aW9uIGlzIGRlZXAgaW5zaWRlIHRoZSBNTSBjb2RlIGFuZCBjYW4gdGh1cyBlYXNpbHkgZmFpbCBvbiBtZW1vcnlcXG4tICogcHJlc3N1cmUuIFRvIGd1YXJhbnRlZSBwcm9ncmVzcyB3ZSBmYWxsIGJhY2sgdG8gc2luZ2xlIHRhYmxlIGZyZWVpbmcsIHNlZVxcbi0gKiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGxiX3JlbW92ZV90YWJsZV9vbmUoKS5cXG4rICogcHJlc3N1cmUuIFRvIGd1YXJhbnRlZSBwcm9ncmVzcyB3ZSBmYWxsIGJhY2sgdG8gc2luZ2xlIHRhYmxlIGZyZWVpbmcsIHdoaWNoXFxuKyAqIGlzIGFsc28gUkNVLWRlZmVycmVkIC0gc2VlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0bGJfcmVtb3ZlX3RhYmxlX29uZSgpLlxcbiAgKlxcbiAgKi9cXG4gXFxuQEAgLTMxNSwxNSArMzExLDYgQEAgdm9pZCB0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfcmN1KHZvaWQpXFxuIFxcdHN5bmNocm9uaXplX3JjdSgpO1xcbiB9XFxuIFxcbi0jZWxzZSAvKiAhQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgKi9cXG4tXFxuLXN0YXRpYyB2b2lkIHRsYl9yZW1vdmVfdGFibGVfZnJlZShzdHJ1Y3QgbW11X3RhYmxlX2JhdGNoICpiYXRjaClcXG4te1xcbi1cXHRfX3RsYl9yZW1vdmVfdGFibGVfZnJlZShiYXRjaCk7XFxuLX1cXG4tXFxuLSNlbmRpZiAvKiBDT05GSUdfTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSAqL1xcbi1cXG4gLypcXG4gICogSWYgd2Ugd2FudCB0bGJfcmVtb3ZlX3RhYmxlKCkgdG8gaW1wbHkgVExCIGludmFsaWRhdGVzLlxcbiAgKi9cXG5AQCAtNDAzLDEzICszOTAsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdGxiX3RhYmxlX2luaXQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYilcXG4gXFx0dGxiLVxcdTAwM2ViYXRjaCA9IE5VTEw7XFxuIH1cXG4gXFxuLSNlbHNlIC8qICFDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFICovXFxuLVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgdGxiX3RhYmxlX2ZsdXNoKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIpIHsgfVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgdGxiX3RhYmxlX2luaXQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYikgeyB9XFxuLVxcbi0jZW5kaWYgLyogQ09ORklHX01NVV9HQVRIRVJfVEFCTEVfRlJFRSAqL1xcbi1cXG4gc3RhdGljIHZvaWQgdGxiX2ZsdXNoX21tdV9mcmVlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIpXFxuIHtcXG4gXFx0dGxiX3RhYmxlX2ZsdXNoKHRsYik7XFxuZGlmZiAtLWdpdCBhL21tL3BndGFibGUtZ2VuZXJpYy5jIGIvbW0vcGd0YWJsZS1nZW5lcmljLmNcXG5pbmRleCBiOTFiMWE5ODAyOWM3Li5mZjhmZjM3MDY0ODUzIDEwMDY0NFxcbi0tLSBhL21tL3BndGFibGUtZ2VuZXJpYy5jXFxuKysrIGIvbW0vcGd0YWJsZS1nZW5lcmljLmNcXG5AQCAtMzg2LDkgKzM4NiwyMSBAQCBwdGVfdCAqcHRlX29mZnNldF9tYXBfcndfbm9sb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLFxcbiAgKiBiZSByZWFkLW9ubHkvcmVhZC13cml0ZSBwcm90ZWN0ZWQuXFxuICAqXFxuICAqIE5vdGUgdGhhdCBmcmVlX3BndGFibGVzKCksIHVzZWQgYWZ0ZXIgdW5tYXBwaW5nIGRldGFjaGVkIHZtYXMsIG9yIHdoZW5cXG4tICogZXhpdGluZyB0aGUgd2hvbGUgbW0sIGRvZXMgbm90IHRha2UgcGFnZSB0YWJsZSBsb2NrIGJlZm9yZSBmcmVlaW5nIGEgcGFnZVxcbi0gKiB0YWJsZSwgYW5kIG1heSBub3QgdXNlIFJDVSBhdCBhbGw6IFxcXCJvdXRzaWRlcnNcXFwiIGxpa2Uga2h1Z2VwYWdlZCBzaG91bGQgYXZvaWRcXG4tICogcHRlX29mZnNldF9tYXAoKSBhbmQgY28gb25jZSB0aGUgdm1hIGlzIGRldGFjaGVkIGZyb20gbW0gb3IgbW1fdXNlcnMgaXMgemVyby5cXG4rICogZXhpdGluZyB0aGUgd2hvbGUgbW0sIGRvZXMgbm90IHRha2UgdGhlIHBhZ2UgdGFibGUgbG9jayBiZWZvcmUgZnJlZWluZyBhXFxuKyAqIHRhYmxlLlxcbisgKlxcbisgKiBIb3dldmVyLCB0aGUgUE1EIGVudHJ5IGlzIGNsZWFyZWQgZmlyc3QsIGFuZCB0aGUgdGFibGUgZnJlZWQgb25seSBhZnRlclxcbisgKiBhbiBSQ1UgZ3JhY2UgcGVyaW9kLCBzbyBhIHdhbGtlciB0aGF0IG1hcHBlZCB0aGUgdGFibGUgdW5kZXJcXG4rICogcmN1X3JlYWRfbG9jaygpIHN0YXlzIHNhZmUsIGFuZCB0aGUgcG1kX3NhbWUoKSByZWNoZWNrIGluXFxuKyAqIHB0ZV9vZmZzZXRfbWFwX2xvY2soKSBkZXRlY3RzIHRoZSB0ZWFyZG93bi5cXG4rICpcXG4rICogVGhlcmVmb3JlIGl0IGlzIHNhZmUgZm9yIFxcXCJvdXRzaWRlcnNcXFwiIGxpa2Uga2h1Z2VwYWdlZCB0byB1c2VcXG4rICogcHRlX29mZnNldF9tYXAoKSBhbmQgY28uIGZvciBWTUFzIHRoYXQgbWlnaHQgYmUgdW5kZXJnb2luZyBwYWdlIHRhYmxlXFxuKyAqIHRlYXJkb3duLlxcbisgKlxcbisgKiBOb3RlIHRoYXQgdGhlIFBHRCBpdHNlbGYgaXMgZnJlZWQgYXQgbW1kcm9wKCkgdGltZSwgbm90IHVuZGVyIFJDVSAtIHNvIHRoZVxcbisgKiB3YWxrZXIgbXVzdCBrZWVwIHRoZSBtbSBhbGl2ZSB2aWEgbW1ncmFiKCkuIFdpdGggdGhhdCBoZWxkLCB3YWxraW5nIHJlbWFpbnNcXG4rICogc2FmZSBldmVuIG9uY2UgbW1fdXNlcnMgaGFzIHJlYWNoZWQgemVyby5cXG4gICovXFxuIHB0ZV90ICpwdGVfb2Zmc2V0X21hcF9sb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLFxcbiBcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGFkZHIsIHNwaW5sb2NrX3QgKipwdGxwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo0Mzo1NC4xNDI0OTAzNjhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ5MzA3MjU5NDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1NVVwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0bGJfcmVtb3ZlX3RhYmxlXCIsXG4gICAgXCJwdGVfZnJlZV9kZWZlclwiLFxuICAgIFwiemFwX2h1Z2VfcG1kXCIsXG4gICAgXCJ0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfcmN1XCIsXG4gICAgXCJ0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfb25lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdW5pZmllcyBhbmQgZW5mb3JjZXMgUkNVLWRlZmVycmVkIGZyZWVpbmcgZm9yIHBhZ2UgdGFibGUgcGFnZXMgYWNyb3NzIGFsbCBhcmNoaXRlY3R1cmVzIGJ5IHJlbW92aW5nIGNvbmRpdGlvbmFsIE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBzdGFuZGFyZGl6aW5nIG9uIHRsYl9yZW1vdmVfdGFibGUoKS4gSXQgYWxzbyBtb2RpZmllcyBUSFAgZGVwb3NpdGVkIHRhYmxlIGhhbmRsaW5nIGluIG1tL2h1Z2VfbWVtb3J5LmMgdG8gdXNlIHB0ZV9mcmVlX2RlZmVyKCkgdW5kZXIgUkNVIGFuZCB1cGRhdGVzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBwYWdlIHRhYmxlIHJlbW92YWwgcm91dGluZXMuIFRoZXNlIGNvcmUgTU0gbG9naWMgY2hhbmdlcyBhZmZlY3QgVExCIGdhdGhlcmluZywgcGFnZSB0YWJsZSB0ZWFyaW5nIGRvd24sIGFuZCBtZW1vcnkgcmVjbGFpbSBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjhlOGUyMmZiMmY5MjJhNWQ5OGFjMjcyYzA0YTM5ZmI1ZDBhN2VlMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDEgMjM6NDM6NTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdFxuaW5kZXggYTcyOTZmMjUxNzk5Yy4uMWU2NWIxMzlmMzU1OSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3RcbkBAIC01MzcsNiArNTM3LDEyIEBAIFdlIGVzdGFibGlzaCBiYXNpYyBsb2NraW5nIHJ1bGVzIHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCBwYWdlIHRhYmxlczpcbiAqIFdoZW4gY2hhbmdpbmcgYSBwYWdlIHRhYmxlIGVudHJ5IHRoZSBwYWdlIHRhYmxlIGxvY2sgZm9yIHRoYXQgcGFnZSB0YWJsZVxuICAgKiptdXN0KiogYmUgaGVsZCwgZXhjZXB0IGlmIHlvdSBjYW4gc2FmZWx5IGFzc3VtZSBub2JvZHkgY2FuIGFjY2VzcyB0aGUgcGFnZVxuICAgdGFibGVzIGNvbmN1cnJlbnRseSAoc3VjaCBhcyBvbiBpbnZvY2F0aW9uIG9mIDpjOmZ1bmM6YCFmcmVlX3BndGFibGVzYCkuXG4rKiBQYWdlIHRhYmxlcyBtYXkgYmUgKndhbGtlZCogdW5kZXIgUkNVIGFsb25lLCBhcyBwYWdlIHRhYmxlcyBhcmUgZnJlZWQgb25seVxuKyAgYWZ0ZXIgYW4gUkNVIGdyYWNlIHBlcmlvZCBoYXMgZWxhcHNlZC4gSG93ZXZlciwgYW55IGVudHJ5IGZvdW5kIG11c3QgYmVcbisgIHJldmFsaWRhdGVkIGFmdGVyIHRoZSBwYWdlIHRhYmxlIGxvY2sgaXMgdGFrZW4gKHN1Y2ggYXMgdGhlXG4rICA6YzpmdW5jOmAhcG1kX3NhbWVgIHJlY2hlY2sgcGVyZm9ybWVkIGJ5IDpjOmZ1bmM6YCFwdGVfb2Zmc2V0X21hcF9sb2NrYClcbisgIGJlZm9yZSBpdCBpcyBhY3RlZCB1cG9uLiBDaGFuZ2luZyBhbiBlbnRyeSBhbHdheXMgcmVxdWlyZXMgdGhlIHBhZ2UgdGFibGVcbisgIGxvY2suXG4gKiBSZWFkcyBmcm9tIGFuZCB3cml0ZXMgdG8gcGFnZSB0YWJsZSBlbnRyaWVzIG11c3QgYmUgKmFwcHJvcHJpYXRlbHkqXG4gICBhdG9taWMuIFNlZSB0aGUgc2VjdGlvbiBvbiBhdG9taWNpdHkgYmVsb3cgZm9yIGRldGFpbHMuXG4gKiBQb3B1bGF0aW5nIHByZXZpb3VzbHkgZW1wdHkgZW50cmllcyByZXF1aXJlcyB0aGF0IHRoZSBtbWFwIG9yIFZNQSBsb2NrcyBhcmVcbmRpZmYgLS1naXQgYS9hcmNoL0tjb25maWcgYi9hcmNoL0tjb25maWdcbmluZGV4IDQ1YzY1Nzc3MjM2MjMuLjZmNzUxNjkxNjc5N2UgMTAwNjQ0XG4tLS0gYS9hcmNoL0tjb25maWdcbisrKyBiL2FyY2gvS2NvbmZpZ1xuQEAgLTUyNiwxMyArNTI2LDYgQEAgY29uZmlnIEhBVkVfQVJDSF9KVU1QX0xBQkVMXG4gY29uZmlnIEhBVkVfQVJDSF9KVU1QX0xBQkVMX1JFTEFUSVZFXG4gXHRib29sXG4gXG4tY29uZmlnIE1NVV9HQVRIRVJfVEFCTEVfRlJFRVxuLVx0Ym9vbFxuLVxuLWNvbmZpZyBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG4tXHRib29sXG4tXHRzZWxlY3QgTU1VX0dBVEhFUl9UQUJMRV9GUkVFXG4tXG4gY29uZmlnIE1NVV9HQVRIRVJfUEFHRV9TSVpFXG4gXHRib29sXG4gXG5AQCAtNTQ4LDcgKzU0MSw2IEBAIGNvbmZpZyBNTVVfR0FUSEVSX01FUkdFX1ZNQVNcbiBcbiBjb25maWcgTU1VX0dBVEhFUl9OT19HQVRIRVJcbiBcdGJvb2xcbi1cdGRlcGVuZHMgb24gTU1VX0dBVEhFUl9UQUJMRV9GUkVFXG4gXG4gY29uZmlnIEFSQ0hfV0FOVF9JUlFTX09GRl9BQ1RJVkFURV9NTVxuIFx0Ym9vbFxuZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvS2NvbmZpZyBiL2FyY2gvYWxwaGEvS2NvbmZpZ1xuaW5kZXggZTUzZWYyZDg4NDYzNi4uOTA2M2M3YmRhNGU0MSAxMDA2NDRcbi0tLSBhL2FyY2gvYWxwaGEvS2NvbmZpZ1xuKysrIGIvYXJjaC9hbHBoYS9LY29uZmlnXG5AQCAtNDIsNyArNDIsNiBAQCBjb25maWcgQUxQSEFcbiBcdHNlbGVjdCBBUkNIX1NUQUNLV0FMS1xuIFx0c2VsZWN0IENQVV9OT19FRkZJQ0lFTlRfRkZTIGlmICFBTFBIQV9FVjY3XG4gXHRzZWxlY3QgTU1VX0dBVEhFUl9OT19SQU5HRVxuLVx0c2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcbiBcdHNlbGVjdCBTUEFSU0VNRU1fRVhUUkVNRSBpZiBTUEFSU0VNRU1cbiBcdHNlbGVjdCBaT05FX0RNQVxuIFx0c2VsZWN0IFRSQUNFX0lSUUZMQUdTX1NVUFBPUlRcbmRpZmYgLS1naXQgYS9hcmNoL2FyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL2FyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcbmluZGV4IGRmYWUwNzBmZThkNTUuLjliNmMzN2Y5MmU5N2YgMTAwNjQ0XG4tLS0gYS9hcmNoL2FyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcbisrKyBiL2FyY2gvYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxuQEAgLTcyLDcgKzcyLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHA0ZF9wb3B1bGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcDRkX3QgKnA0ZHAsIHB1ZF90ICpwdWRwKVxuIFx0c2V0X3A0ZChwNGRwLCBfX3A0ZCgodW5zaWduZWQgbG9uZylwdWRwKSk7XG4gfVxuIFxuLSNkZWZpbmUgX19wdWRfZnJlZV90bGIodGxiLCBwbWQsIGFkZHIpICBwdWRfZnJlZSgodGxiKS1cdTAwM2VtbSwgcG1kKVxuKyNkZWZpbmUgX19wdWRfZnJlZV90bGIodGxiLCBwbWQsIGFkZHIpICB0bGJfcmVtb3ZlX3B0ZGVzYygodGxiKSwgdmlydF90b19wdGRlc2MocG1kKSlcbiBcbiAjZW5kaWZcbiBcbkBAIC04MywxMCArODMsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIHB1ZF9wb3B1bGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcHVkX3QgKnB1ZHAsIHBtZF90ICpwbWRwKVxuIFx0c2V0X3B1ZChwdWRwLCBfX3B1ZCgodW5zaWduZWQgbG9uZylwbWRwKSk7XG4gfVxuIFxuLSNkZWZpbmUgX19wbWRfZnJlZV90bGIodGxiLCBwbWQsIGFkZHIpICBwbWRfZnJlZSgodGxiKS1cdTAwM2VtbSwgcG1kKVxuKyNkZWZpbmUgX19wbWRfZnJlZV90bGIodGxiLCBwbWQsIGFkZHIpICB0bGJfcmVtb3ZlX3B0ZGVzYygodGxiKSwgdmlydF90b19wdGRlc2MocG1kKSlcbiBcbiAjZW5kaWZcbiBcbi0jZGVmaW5lIF9fcHRlX2ZyZWVfdGxiKHRsYiwgcHRlLCBhZGRyKSAgcHRlX2ZyZWUoKHRsYiktXHUwMDNlbW0sIHB0ZSlcbisjZGVmaW5lIF9fcHRlX2ZyZWVfdGxiKHRsYiwgcHRlLCBhZGRyKSAgdGxiX3JlbW92ZV9wdGRlc2MoKHRsYiksIHBhZ2VfcHRkZXNjKHB0ZSkpXG4gXG4gI2VuZGlmIC8qIF9BU01fQVJDX1BHQUxMT0NfSCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtL0tjb25maWcgYi9hcmNoL2FybS9LY29uZmlnXG5pbmRleCA0MDhhYTU4YTJhNWJiLi4wY2MyODlhNzE4NGFiIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm0vS2NvbmZpZ1xuKysrIGIvYXJjaC9hcm0vS2NvbmZpZ1xuQEAgLTEzNCw3ICsxMzQsNiBAQCBjb25maWcgQVJNXG4gXHRzZWxlY3QgSEFWRV9QRVJGX1JFR1NcbiBcdHNlbGVjdCBIQVZFX1BFUkZfVVNFUl9TVEFDS19EVU1QXG4gXHRzZWxlY3QgSEFWRV9QT1NJWF9DUFVfVElNRVJTX1RBU0tfV09SS1xuLVx0c2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgaWYgU01QIFx1MDAyNlx1MDAyNiBBUk1fTFBBRVxuIFx0c2VsZWN0IEhBVkVfUkVHU19BTkRfU1RBQ0tfQUNDRVNTX0FQSVxuIFx0c2VsZWN0IEhBVkVfUlNFUVxuIFx0c2VsZWN0IEhBVkVfUlVTVCBpZiBDUFVfTElUVExFX0VORElBTiBcdTAwMjZcdTAwMjYgQ1BVXzMydjcgXHUwMDI2XHUwMDI2ICFLQVNBTlxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvS2NvbmZpZyBiL2FyY2gvYXJtNjQvS2NvbmZpZ1xuaW5kZXggMmJiZWRlZDMzZGEwZC4uYjZjMmRkOGIyNjEyNCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvS2NvbmZpZ1xuKysrIGIvYXJjaC9hcm02NC9LY29uZmlnXG5AQCAtMjIxLDcgKzIyMSw2IEBAIGNvbmZpZyBBUk02NFxuIFx0c2VsZWN0IEhBVkVfUkVMSUFCTEVfU1RBQ0tUUkFDRVxuIFx0c2VsZWN0IEhBVkVfUE9TSVhfQ1BVX1RJTUVSU19UQVNLX1dPUktcbiBcdHNlbGVjdCBIQVZFX0ZVTkNUSU9OX0FSR19BQ0NFU1NfQVBJXG4tXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxuIFx0c2VsZWN0IEhBVkVfUlNFUVxuIFx0c2VsZWN0IEhBVkVfUlVTVCBpZiBSVVNUQ19TVVBQT1JUU19BUk02NFxuIFx0c2VsZWN0IEhBVkVfU1RBQ0tQUk9URUNUT1JcbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9LY29uZmlnIGIvYXJjaC9sb29uZ2FyY2gvS2NvbmZpZ1xuaW5kZXggOWM1ZGVmNzA2MjIyMi4uZDFiMjNkYTQwNzM3NSAxMDA2NDRcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL0tjb25maWdcbisrKyBiL2FyY2gvbG9vbmdhcmNoL0tjb25maWdcbkBAIC0xODgsNyArMTg4LDYgQEAgY29uZmlnIExPT05HQVJDSFxuIFx0c2VsZWN0IElSUV9MT09OR0FSQ0hfQ1BVXG4gXHRzZWxlY3QgTE9DS19NTV9BTkRfRklORF9WTUFcbiBcdHNlbGVjdCBNTVVfR0FUSEVSX01FUkdFX1ZNQVMgaWYgTU1VXG4tXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxuIFx0c2VsZWN0IE1PRFVMRVNfVVNFX0VMRl9SRUxBIGlmIE1PRFVMRVNcbiBcdHNlbGVjdCBORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTktcbiBcdHNlbGVjdCBORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOS1xuZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9LY29uZmlnIGIvYXJjaC9tNjhrL0tjb25maWdcbmluZGV4IDExODM1ZWI1OWQ5NGQuLmViODRjM2FmOTJjMDIgMTAwNjQ0XG4tLS0gYS9hcmNoL202OGsvS2NvbmZpZ1xuKysrIGIvYXJjaC9tNjhrL0tjb25maWdcbkBAIC0yOSw2ICsyOSw3IEBAIGNvbmZpZyBNNjhLXG4gXHRzZWxlY3QgSEFWRV9BUkNIX0xJQkdDQ19IXG4gXHRzZWxlY3QgSEFWRV9BUkNIX1NFQ0NPTVBcbiBcdHNlbGVjdCBIQVZFX0FSQ0hfU0VDQ09NUF9GSUxURVJcbitcdHNlbGVjdCBIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRSBpZiBNTVVfTU9UT1JPTEFcbiBcdHNlbGVjdCBIQVZFX0FTTV9NT0RWRVJTSU9OU1xuIFx0c2VsZWN0IEhBVkVfREVCVUdfQlVHVkVSQk9TRVxuIFx0c2VsZWN0IEhBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MgaWYgIUNQVV9IQVNfTk9fVU5BTElHTkVEXG5kaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21jZl9wZ2FsbG9jLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbWNmX3BnYWxsb2MuaFxuaW5kZXggZmM1NDU0ZDM3ZGEzMS4uYjUzZmYwOTUwZGIyZSAxMDA2NDRcbi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tY2ZfcGdhbGxvYy5oXG4rKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbWNmX3BnYWxsb2MuaFxuQEAgLTM5LDEwICszOSw3IEBAIGV4dGVybiBpbmxpbmUgcG1kX3QgKnBtZF9hbGxvY19rZXJuZWwocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3B0ZV9mcmVlX3RsYihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBwZ3RhYmxlX3QgcGd0YWJsZSxcbiBcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuIHtcbi1cdHN0cnVjdCBwdGRlc2MgKnB0ZGVzYyA9IHZpcnRfdG9fcHRkZXNjKHBndGFibGUpO1xuLVxuLVx0cGFnZXRhYmxlX2R0b3IocHRkZXNjKTtcbi1cdHBhZ2V0YWJsZV9mcmVlKHB0ZGVzYyk7XG4rXHR0bGJfcmVtb3ZlX3B0ZGVzYyh0bGIsIHZpcnRfdG9fcHRkZXNjKHBndGFibGUpKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBwZ3RhYmxlX3QgcHRlX2FsbG9jX29uZShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbW90b3JvbGFfcGdhbGxvYy5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21vdG9yb2xhX3BnYWxsb2MuaFxuaW5kZXggMTA5MWZiMGFmZmJlZS4uZGNkZTQwZThiNWM2YSAxMDA2NDRcbi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tb3Rvcm9sYV9wZ2FsbG9jLmhcbisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tb3Rvcm9sYV9wZ2FsbG9jLmhcbkBAIC0xNyw2ICsxNyw3IEBAIGVudW0gbTY4a190YWJsZV90eXBlcyB7XG4gZXh0ZXJuIHZvaWQgaW5pdF9wb2ludGVyX3RhYmxlKHZvaWQgKnRhYmxlLCBpbnQgdHlwZSk7XG4gZXh0ZXJuIHZvaWQgKmdldF9wb2ludGVyX3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgdHlwZSk7XG4gZXh0ZXJuIGludCBmcmVlX3BvaW50ZXJfdGFibGUodm9pZCAqdGFibGUsIGludCB0eXBlKTtcbitleHRlcm4gdm9pZCBfX3RsYl9yZW1vdmVfdGFibGUodm9pZCAqdGFibGUpO1xuIFxuIC8qXG4gICogQWxsb2NhdGUgYW5kIGZyZWUgcGFnZSB0YWJsZXMuIFRoZSB4eHhfa2VybmVsKCkgdmVyc2lvbnMgYXJlXG5AQCAtNDcsNyArNDgsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHRlX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwZ3RhYmxlKVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3B0ZV9mcmVlX3RsYihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBwZ3RhYmxlX3QgcGd0YWJsZSxcbiBcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuIHtcbi1cdGZyZWVfcG9pbnRlcl90YWJsZShwZ3RhYmxlLCBUQUJMRV9QVEUpO1xuK1x0dGxiX3JlbW92ZV90YWJsZSh0bGIsICh2b2lkICopKCh1bnNpZ25lZCBsb25nKXBndGFibGUgfCBUQUJMRV9QVEUpKTtcbiB9XG4gXG4gXG5AQCAtNjEsMTAgKzYyLDEwIEBAIHN0YXRpYyBpbmxpbmUgaW50IHBtZF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKVxuIFx0cmV0dXJuIGZyZWVfcG9pbnRlcl90YWJsZShwbWQsIFRBQkxFX1BNRCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IF9fcG1kX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHBtZF90ICpwbWQsXG4tXHRcdFx0XHQgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3BtZF9mcmVlX3RsYihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBwbWRfdCAqcG1kLFxuK1x0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG4ge1xuLVx0cmV0dXJuIGZyZWVfcG9pbnRlcl90YWJsZShwbWQsIFRBQkxFX1BNRCk7XG4rXHR0bGJfcmVtb3ZlX3RhYmxlKHRsYiwgKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpcG1kIHwgVEFCTEVfUE1EKSk7XG4gfVxuIFxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tbS9tb3Rvcm9sYS5jIGIvYXJjaC9tNjhrL21tL21vdG9yb2xhLmNcbmluZGV4IGIzMGFhNjlhNzNhNmEuLmZmYzgwNDgzNDQwYmMgMTAwNjQ0XG4tLS0gYS9hcmNoL202OGsvbW0vbW90b3JvbGEuY1xuKysrIGIvYXJjaC9tNjhrL21tL21vdG9yb2xhLmNcbkBAIC0yMCw2ICsyMCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtYmxvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2dmcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY2xlYW51cC5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3NldHVwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91YWNjZXNzLmhcdTAwM2VcbkBAIC0xMDMsNiArMTA0LDggQEAgc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgcHRhYmxlX2xpc3RbM10gPSB7XG4gXHRMSVNUX0hFQURfSU5JVChwdGFibGVfbGlzdFsyXSksXG4gfTtcbiBcbitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHB0YWJsZV9sb2NrKTtcbitcbiAjZGVmaW5lIFBEX1BUQUJMRShwdGRlc2MpICgocHRhYmxlX2Rlc2MgKilcdTAwMjYodmlydF90b19wdGRlc2MoKHZvaWQgKikocHRkZXNjKSktXHUwMDNlcHRfbGlzdCkpXG4gI2RlZmluZSBQRF9QVERFU0MocHRhYmxlKSAobGlzdF9lbnRyeShwdGFibGUsIHN0cnVjdCBwdGRlc2MsIHB0X2xpc3QpKVxuICNkZWZpbmUgUERfTUFSS0JJVFMoZHApICgqKHVuc2lnbmVkIGludCAqKVx1MDAyNlBEX1BUREVTQyhkcCktXHUwMDNlcHRfaW5kZXgpXG5AQCAtMTM5LDUyICsxNDIsNjYgQEAgdm9pZCBfX2luaXQgaW5pdF9wb2ludGVyX3RhYmxlKHZvaWQgKnRhYmxlLCBpbnQgdHlwZSlcbiBcdHJldHVybjtcbiB9XG4gXG4tdm9pZCAqZ2V0X3BvaW50ZXJfdGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCB0eXBlKVxuKy8qXG4rICogRm9yIGEgcG9pbnRlciB0YWJsZSBmb3IgYSB1c2VyIHByb2Nlc3MgYWRkcmVzcyBzcGFjZSwgYVxuKyAqIHRhYmxlIGlzIHRha2VuIGZyb20gYSBwdGRlc2MgYWxsb2NhdGVkIGZvciB0aGUgcHVycG9zZS4gIEVhY2hcbisgKiBwdGRlc2MgY2FuIGhvbGQgOCBwb2ludGVyIHRhYmxlcy4gIFRoZSBwdGRlc2MgaXMgcmVtYXBwZWQgaW5cbisgKiB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgdG8gYmUgbm9uY2FjaGVhYmxlLlxuKyAqL1xuK3N0YXRpYyB2b2lkICphZGRfcG9pbnRlcl90YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IHR5cGUpXG4ge1xuLVx0cHRhYmxlX2Rlc2MgKmRwID0gcHRhYmxlX2xpc3RbdHlwZV0ubmV4dDtcbi1cdHVuc2lnbmVkIGludCBtYXNrID0gbGlzdF9lbXB0eShcdTAwMjZwdGFibGVfbGlzdFt0eXBlXSkgPyAwIDogUERfTUFSS0JJVFMoZHApO1xuLVx0dW5zaWduZWQgaW50IHRtcCwgb2ZmO1xuK1x0c3RydWN0IHB0ZGVzYyAqcHRkZXNjO1xuK1x0cHRhYmxlX2Rlc2MgKm5ldztcbitcdHZvaWQgKnB0X2FkZHI7XG4gXG4tXHQvKlxuLVx0ICogRm9yIGEgcG9pbnRlciB0YWJsZSBmb3IgYSB1c2VyIHByb2Nlc3MgYWRkcmVzcyBzcGFjZSwgYVxuLVx0ICogdGFibGUgaXMgdGFrZW4gZnJvbSBhIHB0ZGVzYyBhbGxvY2F0ZWQgZm9yIHRoZSBwdXJwb3NlLiAgRWFjaFxuLVx0ICogcHRkZXNjIGNhbiBob2xkIDggcG9pbnRlciB0YWJsZXMuICBUaGUgcHRkZXNjIGlzIHJlbWFwcGVkIGluXG4tXHQgKiB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgdG8gYmUgbm9uY2FjaGVhYmxlLlxuLVx0ICovXG4tXHRpZiAobWFzayA9PSAwKSB7XG4tXHRcdHN0cnVjdCBwdGRlc2MgKnB0ZGVzYztcbi1cdFx0cHRhYmxlX2Rlc2MgKm5ldztcbi1cdFx0dm9pZCAqcHRfYWRkcjtcbi1cbi1cdFx0cHRkZXNjID0gcGFnZXRhYmxlX2FsbG9jKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPLCAwKTtcbi1cdFx0aWYgKCFwdGRlc2MpXG4tXHRcdFx0cmV0dXJuIE5VTEw7XG4tXG4tXHRcdHB0X2FkZHIgPSBwdGRlc2NfYWRkcmVzcyhwdGRlc2MpO1xuLVxuLVx0XHRzd2l0Y2ggKHR5cGUpIHtcbi1cdFx0Y2FzZSBUQUJMRV9QVEU6XG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBtNjhrIGRvZXNuJ3QgaGF2ZSBTUExJVF9QVEVfUFRMT0NLUyBmb3Igbm90IGhhdmluZ1xuLVx0XHRcdCAqIFNNUC5cbi1cdFx0XHQgKi9cbi1cdFx0XHRwYWdldGFibGVfcHRlX2N0b3IobW0sIHB0ZGVzYyk7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgVEFCTEVfUE1EOlxuLVx0XHRcdHBhZ2V0YWJsZV9wbWRfY3RvcihtbSwgcHRkZXNjKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBUQUJMRV9QR0Q6XG4tXHRcdFx0cGFnZXRhYmxlX3BnZF9jdG9yKHB0ZGVzYyk7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbitcdHB0ZGVzYyA9IHBhZ2V0YWJsZV9hbGxvYyhHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywgMCk7XG4rXHRpZiAoIXB0ZGVzYylcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRwdF9hZGRyID0gcHRkZXNjX2FkZHJlc3MocHRkZXNjKTtcbitcbitcdHN3aXRjaCAodHlwZSkge1xuK1x0Y2FzZSBUQUJMRV9QVEU6XG4rXHRcdC8qXG4rXHRcdCAqIG02OGsgZG9lc24ndCBoYXZlIFNQTElUX1BURV9QVExPQ0tTIGZvciBub3QgaGF2aW5nXG4rXHRcdCAqIFNNUC5cbitcdFx0ICovXG4rXHRcdHBhZ2V0YWJsZV9wdGVfY3RvcihtbSwgcHRkZXNjKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFRBQkxFX1BNRDpcbitcdFx0cGFnZXRhYmxlX3BtZF9jdG9yKG1tLCBwdGRlc2MpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgVEFCTEVfUEdEOlxuK1x0XHRwYWdldGFibGVfcGdkX2N0b3IocHRkZXNjKTtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXG4rXHRtbXVfcGFnZV9jdG9yKHB0X2FkZHIpO1xuK1xuK1x0bmV3ID0gUERfUFRBQkxFKHB0X2FkZHIpO1xuIFxuLVx0XHRtbXVfcGFnZV9jdG9yKHB0X2FkZHIpO1xuK1x0UERfTUFSS0JJVFMobmV3KSA9IHB0YWJsZV9tYXNrKHR5cGUpIC0gMTtcbitcdHNjb3BlZF9ndWFyZChzcGlubG9ja19pcnFzYXZlLCBcdTAwMjZwdGFibGVfbG9jaylcbitcdFx0bGlzdF9hZGQobmV3LCBcdTAwMjZwdGFibGVfbGlzdFt0eXBlXSk7XG4gXG4tXHRcdG5ldyA9IFBEX1BUQUJMRShwdF9hZGRyKTtcbi1cdFx0UERfTUFSS0JJVFMobmV3KSA9IHB0YWJsZV9tYXNrKHR5cGUpIC0gMTtcbi1cdFx0bGlzdF9hZGRfdGFpbChuZXcsIGRwKTtcbitcdHJldHVybiAocG1kX3QgKilwdF9hZGRyO1xuK31cbitcbit2b2lkICpnZXRfcG9pbnRlcl90YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IHR5cGUpXG4re1xuK1x0dW5zaWduZWQgaW50IHRtcCwgb2ZmO1xuK1x0dW5zaWduZWQgbG9uZyBtYXNrO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdHB0YWJsZV9kZXNjICpkcDtcbitcdHZvaWQgKnJldDtcbiBcbi1cdFx0cmV0dXJuIChwbWRfdCAqKXB0X2FkZHI7XG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwdGFibGVfbG9jaywgZmxhZ3MpO1xuK1x0ZHAgPSBwdGFibGVfbGlzdFt0eXBlXS5uZXh0O1xuK1x0bWFzayA9IGxpc3RfZW1wdHkoXHUwMDI2cHRhYmxlX2xpc3RbdHlwZV0pID8gMCA6IFBEX01BUktCSVRTKGRwKTtcbitcbitcdGlmIChtYXNrID09IDApIHtcbitcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwdGFibGVfbG9jaywgZmxhZ3MpO1xuK1x0XHRyZXR1cm4gYWRkX3BvaW50ZXJfdGFibGUobW0sIHR5cGUpO1xuIFx0fVxuIFxuIFx0Zm9yICh0bXAgPSAxLCBvZmYgPSAwOyAobWFzayBcdTAwMjYgdG1wKSA9PSAwOyB0bXAgXHUwMDNjXHUwMDNjPSAxLCBvZmYgKz0gcHRhYmxlX3NpemUodHlwZSkpXG5AQCAtMTk0LDcgKzIxMSwxMCBAQCB2b2lkICpnZXRfcG9pbnRlcl90YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IHR5cGUpXG4gXHRcdC8qIG1vdmUgdG8gZW5kIG9mIGxpc3QgKi9cbiBcdFx0bGlzdF9tb3ZlX3RhaWwoZHAsIFx1MDAyNnB0YWJsZV9saXN0W3R5cGVdKTtcbiBcdH1cbi1cdHJldHVybiBwdGRlc2NfYWRkcmVzcyhQRF9QVERFU0MoZHApKSArIG9mZjtcbitcbitcdHJldCA9IHB0ZGVzY19hZGRyZXNzKFBEX1BUREVTQyhkcCkpICsgb2ZmO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwdGFibGVfbG9jaywgZmxhZ3MpO1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gaW50IGZyZWVfcG9pbnRlcl90YWJsZSh2b2lkICp0YWJsZSwgaW50IHR5cGUpXG5AQCAtMjAzLDYgKzIyMyw5IEBAIGludCBmcmVlX3BvaW50ZXJfdGFibGUodm9pZCAqdGFibGUsIGludCB0eXBlKVxuIFx0dW5zaWduZWQgbG9uZyBwdGFibGUgPSAodW5zaWduZWQgbG9uZyl0YWJsZTtcbiBcdHVuc2lnbmVkIGxvbmcgcHRfYWRkciA9IHB0YWJsZSBcdTAwMjYgUEFHRV9NQVNLO1xuIFx0dW5zaWduZWQgaW50IG1hc2sgPSAxVSBcdTAwM2NcdTAwM2MgKChwdGFibGUgLSBwdF9hZGRyKS9wdGFibGVfc2l6ZSh0eXBlKSk7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cHRhYmxlX2xvY2ssIGZsYWdzKTtcbiBcbiBcdGRwID0gUERfUFRBQkxFKHB0X2FkZHIpO1xuIFx0aWYgKFBEX01BUktCSVRTIChkcCkgXHUwMDI2IG1hc2spXG5AQCAtMjEzLDYgKzIzNiw4IEBAIGludCBmcmVlX3BvaW50ZXJfdGFibGUodm9pZCAqdGFibGUsIGludCB0eXBlKVxuIFx0aWYgKFBEX01BUktCSVRTKGRwKSA9PSBwdGFibGVfbWFzayh0eXBlKSkge1xuIFx0XHQvKiBhbGwgdGFibGVzIGluIHB0ZGVzYyBhcmUgZnJlZSwgZnJlZSBwdGRlc2MgKi9cbiBcdFx0bGlzdF9kZWwoZHApO1xuK1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnB0YWJsZV9sb2NrLCBmbGFncyk7XG4rXG4gXHRcdG1tdV9wYWdlX2R0b3IoKHZvaWQgKilwdF9hZGRyKTtcbiBcdFx0cGFnZXRhYmxlX2R0b3JfZnJlZSh2aXJ0X3RvX3B0ZGVzYygodm9pZCAqKXB0X2FkZHIpKTtcbiBcdFx0cmV0dXJuIDE7XG5AQCAtMjIzLDkgKzI0OCwyMSBAQCBpbnQgZnJlZV9wb2ludGVyX3RhYmxlKHZvaWQgKnRhYmxlLCBpbnQgdHlwZSlcbiBcdFx0ICovXG4gXHRcdGxpc3RfbW92ZShkcCwgXHUwMDI2cHRhYmxlX2xpc3RbdHlwZV0pO1xuIFx0fVxuK1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwdGFibGVfbG9jaywgZmxhZ3MpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3ZvaWQgX190bGJfcmVtb3ZlX3RhYmxlKHZvaWQgKnRhYmxlKVxuK3tcbitcdC8qIFRoZSBib3R0b20gMiBiaXRzIGFyZSB1c2VkIHRvIGVuY29kZSBwYWdlIHRhYmxlIHR5cGUuICovXG4rXHRjb25zdCB1bnNpZ25lZCBsb25nIGVuY29kZWQgPSAodW5zaWduZWQgbG9uZyl0YWJsZTtcbitcdHZvaWQgKmFkZHIgPSAodm9pZCAqKShlbmNvZGVkIFx1MDAyNiB+M1VMKTtcbitcdGNvbnN0IGludCB0eXBlID0gZW5jb2RlZCBcdTAwMjYgMztcbitcbitcdGZyZWVfcG9pbnRlcl90YWJsZShhZGRyLCB0eXBlKTtcbit9XG4rXG4gLyogc2l6ZSBvZiBtZW1vcnkgYWxyZWFkeSBtYXBwZWQgaW4gaGVhZC5TICovXG4gZXh0ZXJuIF9faW5pdGRhdGEgdW5zaWduZWQgbG9uZyBtNjhrX2luaXRfbWFwcGVkX3NpemU7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3BnYWxsb2MuaCBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcbmluZGV4IDA4NGE4YTBkYzIzOTUuLmZmZWU2YTAwOTIxOWEgMTAwNjQ0XG4tLS0gYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcGdhbGxvYy5oXG4rKysgYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcGdhbGxvYy5oXG5AQCAtMjUsNyArMjUsNyBAQCBleHRlcm4gdm9pZCBfX2JhZF9wdGUocG1kX3QgKnBtZCk7XG4gXG4gZXh0ZXJuIHB0ZV90ICpwdGVfYWxsb2Nfb25lX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XG4gXG4tI2RlZmluZSBfX3B0ZV9mcmVlX3RsYih0bGIsIHB0ZSwgYWRkcilcdHB0ZV9mcmVlKCh0bGIpLVx1MDAzZW1tLCAocHRlKSlcbisjZGVmaW5lIF9fcHRlX2ZyZWVfdGxiKHRsYiwgcHRlLCBhZGRyKVx0dGxiX3JlbW92ZV9wdGRlc2MoKHRsYiksIHBhZ2VfcHRkZXNjKHB0ZSkpXG4gXG4gI2RlZmluZSBwbWRfcG9wdWxhdGUobW0sIHBtZCwgcHRlKSBcXFxuIFx0XHRcdChwbWRfdmFsKCoocG1kKSkgPSAodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MocHRlKSlcbmRpZmYgLS1naXQgYS9hcmNoL21pcHMvS2NvbmZpZyBiL2FyY2gvbWlwcy9LY29uZmlnXG5pbmRleCBlMmViOTYyN2JkMTRjLi5mMGM0M2QxMThjYTAwIDEwMDY0NFxuLS0tIGEvYXJjaC9taXBzL0tjb25maWdcbisrKyBiL2FyY2gvbWlwcy9LY29uZmlnXG5AQCAtOTcsNyArOTcsNiBAQCBjb25maWcgTUlQU1xuIFx0c2VsZWN0IElSUV9GT1JDRURfVEhSRUFESU5HXG4gXHRzZWxlY3QgSVNBIGlmIEVJU0FcbiBcdHNlbGVjdCBMT0NLX01NX0FORF9GSU5EX1ZNQVxuLVx0c2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcbiBcdHNlbGVjdCBNT0RVTEVTX1VTRV9FTEZfUkVMIGlmIE1PRFVMRVNcbiBcdHNlbGVjdCBNT0RVTEVTX1VTRV9FTEZfUkVMQSBpZiBNT0RVTEVTIFx1MDAyNlx1MDAyNiA2NEJJVFxuIFx0c2VsZWN0IFBFUkZfVVNFX1ZNQUxMT0NcbmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9LY29uZmlnIGIvYXJjaC9wYXJpc2MvS2NvbmZpZ1xuaW5kZXggZDNhZmFjMmYwZDliZS4uNzdmNjcwMjhhZDg5YyAxMDA2NDRcbi0tLSBhL2FyY2gvcGFyaXNjL0tjb25maWdcbisrKyBiL2FyY2gvcGFyaXNjL0tjb25maWdcbkBAIC04MCw3ICs4MCw2IEBAIGNvbmZpZyBQQVJJU0NcbiBcdHNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTXG4gXHRzZWxlY3QgQ1BVX05PX0VGRklDSUVOVF9GRlNcbiBcdHNlbGVjdCBUSFJFQURfSU5GT19JTl9UQVNLXG4tXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxuIFx0c2VsZWN0IE5FRURfRE1BX01BUF9TVEFURVxuIFx0c2VsZWN0IE5FRURfU0dfRE1BX0xFTkdUSFxuIFx0c2VsZWN0IEhBVkVfQVJDSF9LR0RCXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZ1xuaW5kZXggMjU4MGUyN2U0MzI4Ny4uMDc2N2NmY2JhYTQyMiAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9LY29uZmlnXG4rKysgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZ1xuQEAgLTMwNyw3ICszMDcsNiBAQCBjb25maWcgUFBDXG4gXHRzZWxlY3QgS0FTQU5fVk1BTExPQ1x0XHRcdGlmIEtBU0FOIFx1MDAyNlx1MDAyNiBFWEVDTUVNXG4gXHRzZWxlY3QgTE9DS19NTV9BTkRfRklORF9WTUFcbiBcdHNlbGVjdCBNTVVfR0FUSEVSX1BBR0VfU0laRVxuLVx0c2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcbiBcdHNlbGVjdCBIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRVxuIFx0c2VsZWN0IE1NVV9HQVRIRVJfTUVSR0VfVk1BU1xuIFx0c2VsZWN0IE1NVV9MQVpZX1RMQl9TSE9PVERPV05cdFx0aWYgUFBDX0JPT0szU182NFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvS2NvbmZpZyBiL2FyY2gvcmlzY3YvS2NvbmZpZ1xuaW5kZXggNTA1ZWVkNGFmOTMyYi4uNzc0MWE0Mjg3NDk4MSAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvS2NvbmZpZ1xuKysrIGIvYXJjaC9yaXNjdi9LY29uZmlnXG5AQCAtMjA4LDcgKzIwOCw2IEBAIGNvbmZpZyBSSVNDVlxuIFx0c2VsZWN0IElSUV9GT1JDRURfVEhSRUFESU5HXG4gXHRzZWxlY3QgS0FTQU5fVk1BTExPQyBpZiBLQVNBTlxuIFx0c2VsZWN0IExPQ0tfTU1fQU5EX0ZJTkRfVk1BXG4tXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSBpZiBTTVAgXHUwMDI2XHUwMDI2IE1NVVxuIFx0c2VsZWN0IE1PRFVMRVNfVVNFX0VMRl9SRUxBIGlmIE1PRFVMRVNcbiBcdHNlbGVjdCBPRlxuIFx0c2VsZWN0IE9GX0VBUkxZX0ZMQVRUUkVFXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL0tjb25maWcgYi9hcmNoL3MzOTAvS2NvbmZpZ1xuaW5kZXggYjg4Yjg1MDQyMTM2OS4uYTM0Mzc2YzA1ZjZlMyAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9LY29uZmlnXG4rKysgYi9hcmNoL3MzOTAvS2NvbmZpZ1xuQEAgLTI2Nyw3ICsyNjcsNiBAQCBjb25maWcgUzM5MFxuIFx0c2VsZWN0IExPQ0tfTU1fQU5EX0ZJTkRfVk1BXG4gXHRzZWxlY3QgTU1VX0dBVEhFUl9NRVJHRV9WTUFTXG4gXHRzZWxlY3QgTU1VX0dBVEhFUl9OT19HQVRIRVJcbi1cdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG4gXHRzZWxlY3QgTU9EVUxFU19VU0VfRUxGX1JFTEFcbiBcdHNlbGVjdCBORUVEX0RNQV9NQVBfU1RBVEVcdGlmIFBDSVxuIFx0c2VsZWN0IE5FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOS1xuZGlmZiAtLWdpdCBhL2FyY2gvc2gvS2NvbmZpZyBiL2FyY2gvc2gvS2NvbmZpZ1xuaW5kZXggZDYwZjFkNWE5NGMwZi4uZmU4NTlkZWY5MThjYyAxMDA2NDRcbi0tLSBhL2FyY2gvc2gvS2NvbmZpZ1xuKysrIGIvYXJjaC9zaC9LY29uZmlnXG5AQCAtMzMsNiArMzMsNyBAQCBjb25maWcgU1VQRVJIXG4gXHRzZWxlY3QgSEFWRV9BUkNIX0FVRElUU1lTQ0FMTFxuIFx0c2VsZWN0IEhBVkVfQVJDSF9LR0RCXG4gXHRzZWxlY3QgSEFWRV9BUkNIX1NFQ0NPTVBfRklMVEVSXG4rXHRzZWxlY3QgSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEUgaWYgWDJUTEJcbiBcdHNlbGVjdCBIQVZFX0FSQ0hfVFJBQ0VIT09LXG4gXHRzZWxlY3QgSEFWRV9ERUJVR19CVUdWRVJCT1NFXG4gXHRzZWxlY3QgSEFWRV9ERUJVR19LTUVNTEVBS1xuZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGdhbGxvYy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcbmluZGV4IDZmZTcxMjNkMzhmYTkuLjY3Y2U3ZmEyM2ZhMTIgMTAwNjQ0XG4tLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxuKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcbkBAIC0xNyw3ICsxNywxMSBAQCBleHRlcm4gdm9pZCBwZ2RfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZCk7XG4gZXh0ZXJuIHZvaWQgcHVkX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwdWRfdCAqcHVkcCwgcG1kX3QgKnBtZCk7XG4gZXh0ZXJuIHBtZF90ICpwbWRfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpO1xuIGV4dGVybiB2b2lkIHBtZF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKTtcbi0jZGVmaW5lIF9fcG1kX2ZyZWVfdGxiKHRsYiwgcG1kcCwgYWRkcilcdFx0cG1kX2ZyZWUoKHRsYiktXHUwMDNlbW0sIChwbWRwKSlcbitleHRlcm4gdm9pZCBfX3RsYl9yZW1vdmVfdGFibGUodm9pZCAqdGFibGUpO1xuK1xuKy8qIFBNRHMgYXJlIHNsYWItYWxsb2NhdGVkLCB0YWcgc28gdGhleSBhcmUgZnJlZWQgY29ycmVjdGx5LiAqL1xuKyNkZWZpbmUgX19wbWRfZnJlZV90bGIodGxiLCBwbWRwLCBhZGRyKVx0XHRcdFx0XHRcXFxuK1x0dGxiX3JlbW92ZV90YWJsZSgodGxiKSwgKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKHBtZHApIHwgMSkpXG4gI2VuZGlmXG4gXG4gc3RhdGljIGlubGluZSB2b2lkIHBtZF9wb3B1bGF0ZV9rZXJuZWwoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsXG5kaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9wZ3RhYmxlLmMgYi9hcmNoL3NoL21tL3BndGFibGUuY1xuaW5kZXggM2E0MDg1ZWEwMTYxZi4uZjYxODRiODZiODljNiAxMDA2NDRcbi0tLSBhL2FyY2gvc2gvbW0vcGd0YWJsZS5jXG4rKysgYi9hcmNoL3NoL21tL3BndGFibGUuY1xuQEAgLTU2LDQgKzU2LDI0IEBAIHZvaWQgcG1kX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQpXG4ge1xuIFx0a21lbV9jYWNoZV9mcmVlKHBtZF9jYWNoZXAsIHBtZCk7XG4gfVxuK1xuK3N0YXRpYyB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZV9zbGFiKHZvaWQgKnRhYmxlKVxuK3tcbitcdGttZW1fY2FjaGVfZnJlZShwbWRfY2FjaGVwLCB0YWJsZSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZV9wZ3RhYmxlKHZvaWQgKnRhYmxlKVxuK3tcbitcdHBhZ2V0YWJsZV9kdG9yX2ZyZWUodGFibGUpO1xuK31cbitcbit2b2lkIF9fdGxiX3JlbW92ZV90YWJsZSh2b2lkICp0YWJsZSlcbit7XG4rXHRjb25zdCB1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZyl0YWJsZTtcbitcbitcdGlmIChhZGRyIFx1MDAyNiAxKVxuK1x0XHRfX3RsYl9yZW1vdmVfdGFibGVfc2xhYigodm9pZCAqKShhZGRyIFx1MDAyNiB+MVVMKSk7XG4rXHRlbHNlXG4rXHRcdF9fdGxiX3JlbW92ZV90YWJsZV9wZ3RhYmxlKHRhYmxlKTtcbit9XG4gI2VuZGlmIC8qIFBBR0VUQUJMRV9MRVZFTFMgXHUwMDNlIDIgKi9cbmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL0tjb25maWcgYi9hcmNoL3NwYXJjL0tjb25maWdcbmluZGV4IGFiNzdkM2YyNTM2ZTEuLjc0MmZmZmY4YzM3ZjIgMTAwNjQ0XG4tLS0gYS9hcmNoL3NwYXJjL0tjb25maWdcbisrKyBiL2FyY2gvc3BhcmMvS2NvbmZpZ1xuQEAgLTY0LDYgKzY0LDcgQEAgY29uZmlnIFNQQVJDMzJcbiBcdHNlbGVjdCBIQVZFX1VJRDE2XG4gXHRzZWxlY3QgSEFWRV9QQUdFX1NJWkVfNEtCXG4gXHRzZWxlY3QgTE9DS19NTV9BTkRfRklORF9WTUFcbitcdHNlbGVjdCBIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRVxuIFx0c2VsZWN0IE9MRF9TSUdBQ1RJT05cbiBcdHNlbGVjdCBaT05FX0RNQVxuIFxuQEAgLTc1LDggKzc2LDcgQEAgY29uZmlnIFNQQVJDNjRcbiBcdHNlbGVjdCBIQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUlxuIFx0c2VsZWN0IEhBVkVfS1JFVFBST0JFU1xuIFx0c2VsZWN0IEhBVkVfS1BST0JFU1xuLVx0c2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgaWYgU01QXG4tXHRzZWxlY3QgSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEUgaWYgU01QXG4rXHRzZWxlY3QgSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEVcbiBcdHNlbGVjdCBNTVVfR0FUSEVSX01FUkdFX1ZNQVNcbiBcdHNlbGVjdCBNTVVfR0FUSEVSX05PX0ZMVVNIX0NBQ0hFXG4gXHRzZWxlY3QgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5kaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzMyLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2NfMzIuaFxuaW5kZXggNGY3M2U4N2IyMmEzMi4uMzYwMTA4NTJiYTBjMCAxMDA2NDRcbi0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY18zMi5oXG4rKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2NfMzIuaFxuQEAgLTQ4LDcgKzQ4LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIGZyZWVfcG1kX2Zhc3QocG1kX3QgKiBwbWQpXG4gfVxuIFxuICNkZWZpbmUgcG1kX2ZyZWUobW0sIHBtZClcdFx0ZnJlZV9wbWRfZmFzdChwbWQpXG4tI2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIsIHBtZCwgYWRkcilcdHBtZF9mcmVlKCh0bGIpLVx1MDAzZW1tLCBwbWQpXG4rXG4rI2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIsIHBtZCwgYWRkcilcdFx0XHRcdFx0XFxcbitcdHRsYl9yZW1vdmVfdGFibGUoKHRsYiksICh2b2lkICopKCh1bnNpZ25lZCBsb25nKShwbWQpIHwgMVVMKSlcbiBcbiAjZGVmaW5lIHBtZF9wb3B1bGF0ZShtbSwgcG1kLCBwdGUpXHRwbWRfc2V0KHBtZCwgcHRlKVxuIFxuQEAgLTcyLDYgKzc0LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGZyZWVfcHRlX2Zhc3QocHRlX3QgKnB0ZSlcbiAjZGVmaW5lIHB0ZV9mcmVlX2tlcm5lbChtbSwgcHRlKVx0ZnJlZV9wdGVfZmFzdChwdGUpXG4gXG4gdm9pZCBwdGVfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICogbW0sIHBndGFibGVfdCBwdGUpO1xuLSNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLCBwdGUsIGFkZHIpXHRwdGVfZnJlZSgodGxiKS1cdTAwM2VtbSwgcHRlKVxuK3ZvaWQgX190bGJfcmVtb3ZlX3RhYmxlKHZvaWQgKnRhYmxlKTtcbisjZGVmaW5lIF9fcHRlX2ZyZWVfdGxiKHRsYiwgcHRlLCBhZGRyKVx0dGxiX3JlbW92ZV90YWJsZSgodGxiKSwgKHZvaWQgKikocHRlKSlcbiBcbiAjZW5kaWYgLyogX1NQQVJDX1BHQUxMT0NfSCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY182NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzY0LmhcbmluZGV4IGNhYTc2MzJiZTRjMmEuLmI1MDU1ZDI1OWI3NGQgMTAwNjQ0XG4tLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2NfNjQuaFxuKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzY0LmhcbkBAIC03NCw4ICs3NCw2IEBAIHZvaWQgcHRlX2ZyZWVfZGVmZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwZ3RhYmxlKTtcbiBcbiB2b2lkIHBndGFibGVfZnJlZSh2b2lkICp0YWJsZSwgYm9vbCBpc19wYWdlKTtcbiBcbi0jaWZkZWYgQ09ORklHX1NNUFxuLVxuIHN0cnVjdCBtbXVfZ2F0aGVyO1xuIHZvaWQgdGxiX3JlbW92ZV90YWJsZShzdHJ1Y3QgbW11X2dhdGhlciAqLCB2b2lkICopO1xuIFxuQEAgLTk2LDEyICs5NCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3RsYl9yZW1vdmVfdGFibGUodm9pZCAqX3RhYmxlKVxuIFx0XHRpc19wYWdlID0gdHJ1ZTtcbiBcdHBndGFibGVfZnJlZSh0YWJsZSwgaXNfcGFnZSk7XG4gfVxuLSNlbHNlIC8qIENPTkZJR19TTVAgKi9cbi1zdGF0aWMgaW5saW5lIHZvaWQgcGd0YWJsZV9mcmVlX3RsYihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCB2b2lkICp0YWJsZSwgYm9vbCBpc19wYWdlKVxuLXtcbi1cdHBndGFibGVfZnJlZSh0YWJsZSwgaXNfcGFnZSk7XG4tfVxuLSNlbmRpZiAvKiAhQ09ORklHX1NNUCAqL1xuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3B0ZV9mcmVlX3RsYihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBwdGVfdCAqcHRlLFxuIFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG5kaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90bGJfNjQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGxiXzY0LmhcbmluZGV4IDMwMzcxODc0ODJkYjcuLmY1Zjk2MzE2ODVkNTAgMTAwNjQ0XG4tLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RsYl82NC5oXG4rKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RsYl82NC5oXG5AQCAtMjksOSArMjksNyBAQCB2b2lkIGZsdXNoX3RsYl9wZW5kaW5nKHZvaWQpO1xuICAqIGFuZCB0aGVyZWZvcmUgd2UgZG9uJ3QgbmVlZCBhIFRMQkkgd2hlbiBmcmVlaW5nIHBhZ2UtdGFibGUgcGFnZXMuXG4gICovXG4gXG4tI2lmZGVmIENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG4gI2RlZmluZSB0bGJfbmVlZHNfdGFibGVfaW52YWxpZGF0ZSgpXHQoZmFsc2UpXG4tI2VuZGlmXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtLWdlbmVyaWMvdGxiLmhcdTAwM2VcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2xpYi9iaXRleHQuYyBiL2FyY2gvc3BhcmMvbGliL2JpdGV4dC5jXG5pbmRleCAzMmE1YzFkOTQ1OWNkLi5jMzA5ZTI3OTczY2U2IDEwMDY0NFxuLS0tIGEvYXJjaC9zcGFyYy9saWIvYml0ZXh0LmNcbisrKyBiL2FyY2gvc3BhcmMvbGliL2JpdGV4dC5jXG5AQCAtMjIsOCArMjIsNiBAQFxuICAqIEBhbGlnbjogcmVxdWVzdGVkIGFsaWdubWVudFxuICAqXG4gICogUmV0dXJucyBvZmZzZXQgaW4gdGhlIG1hcCBvciAtMSBpZiBvdXQgb2Ygc3BhY2UuXG4tICpcbi0gKiBOb3Qgc2FmZSB0byBjYWxsIGZyb20gYW4gaW50ZXJydXB0ICh1c2VzIHNwaW5fbG9jaykuXG4gICovXG4gaW50IGJpdF9tYXBfc3RyaW5nX2dldChzdHJ1Y3QgYml0X21hcCAqdCwgaW50IGxlbiwgaW50IGFsaWduKVxuIHtcbkBAIC0zMSw2ICsyOSw3IEBAIGludCBiaXRfbWFwX3N0cmluZ19nZXQoc3RydWN0IGJpdF9tYXAgKnQsIGludCBsZW4sIGludCBhbGlnbilcbiBcdGludCBvZmZfbmV3O1xuIFx0aW50IGFsaWduMTtcbiBcdGludCBpLCBjb2xvcjtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4gXHRpZiAodC1cdTAwM2VudW1fY29sb3JzKSB7XG4gXHRcdC8qIGFsaWduIGlzIG92ZXJsb2FkZWQgdG8gYmUgdGhlIHBhZ2UgY29sb3IgKi9cbkBAIC01MCw3ICs0OSw3IEBAIGludCBiaXRfbWFwX3N0cmluZ19nZXQoc3RydWN0IGJpdF9tYXAgKnQsIGludCBsZW4sIGludCBhbGlnbilcbiBcdFx0QlVHKCk7XG4gXHRjb2xvciBcdTAwMjY9IGFsaWduMTtcbiBcbi1cdHNwaW5fbG9jayhcdTAwMjZ0LVx1MDAzZWxvY2spO1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRpZiAobGVuIFx1MDAzYyB0LVx1MDAzZWxhc3Rfc2l6ZSlcbiBcdFx0b2Zmc2V0ID0gdC1cdTAwM2VmaXJzdF9mcmVlO1xuIFx0ZWxzZVxuQEAgLTY0LDcgKzYzLDcgQEAgaW50IGJpdF9tYXBfc3RyaW5nX2dldChzdHJ1Y3QgYml0X21hcCAqdCwgaW50IGxlbiwgaW50IGFsaWduKVxuIFx0XHRpZiAob2Zmc2V0IFx1MDAzZT0gdC1cdTAwM2VzaXplKVxuIFx0XHRcdG9mZnNldCA9IDA7XG4gXHRcdGlmIChjb3VudCArIGxlbiBcdTAwM2UgdC1cdTAwM2VzaXplKSB7XG4tXHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2dC1cdTAwM2Vsb2NrKTtcbitcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnQtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIC8qIFAzICovIHByaW50ayhLRVJOX0VSUlxuICAgXCJiaXRtYXAgb3V0OiBzaXplICVkIHVzZWQgJWQgb2ZmICVkIGxlbiAlZCBhbGlnbiAlZCBjb3VudCAlZFxcblwiLFxuICAgdC1cdTAwM2VzaXplLCB0LVx1MDAzZXVzZWQsIG9mZnNldCwgbGVuLCBhbGlnbiwgY291bnQpO1xuQEAgLTkwLDcgKzg5LDcgQEAgaW50IGJpdF9tYXBfc3RyaW5nX2dldChzdHJ1Y3QgYml0X21hcCAqdCwgaW50IGxlbiwgaW50IGFsaWduKVxuIFx0XHRcdFx0XHR0LVx1MDAzZWxhc3Rfb2ZmID0gMDtcbiBcdFx0XHRcdHQtXHUwMDNldXNlZCArPSBsZW47XG4gXHRcdFx0XHR0LVx1MDAzZWxhc3Rfc2l6ZSA9IGxlbjtcbi1cdFx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnQtXHUwMDNlbG9jayk7XG4rXHRcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnQtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0XHRcdFx0cmV0dXJuIG9mZnNldDtcbiBcdFx0XHR9XG4gXHRcdH1cbkBAIC0xMDMsMTAgKzEwMiwxMSBAQCBpbnQgYml0X21hcF9zdHJpbmdfZ2V0KHN0cnVjdCBiaXRfbWFwICp0LCBpbnQgbGVuLCBpbnQgYWxpZ24pXG4gdm9pZCBiaXRfbWFwX2NsZWFyKHN0cnVjdCBiaXRfbWFwICp0LCBpbnQgb2Zmc2V0LCBpbnQgbGVuKVxuIHtcbiBcdGludCBpO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiBcdGlmICh0LVx1MDAzZXVzZWQgXHUwMDNjIGxlbilcbiBcdFx0QlVHKCk7XHRcdC8qIE11Y2ggdG9vIGxhdGUgdG8gZG8gYW55IGdvb2QsIGJ1dCBhbGFzLi4uICovXG4tXHRzcGluX2xvY2soXHUwMDI2dC1cdTAwM2Vsb2NrKTtcbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnQtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbGVuOyBpKyspIHtcbiBcdFx0aWYgKHRlc3RfYml0KG9mZnNldCArIGksIHQtXHUwMDNlbWFwKSA9PSAwKVxuIFx0XHRcdEJVRygpO1xuQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIGJpdF9tYXBfY2xlYXIoc3RydWN0IGJpdF9tYXAgKnQsIGludCBvZmZzZXQsIGludCBsZW4pXG4gXHRpZiAob2Zmc2V0IFx1MDAzYyB0LVx1MDAzZWZpcnN0X2ZyZWUpXG4gXHRcdHQtXHUwMDNlZmlyc3RfZnJlZSA9IG9mZnNldDtcbiBcdHQtXHUwMDNldXNlZCAtPSBsZW47XG4tXHRzcGluX3VubG9jayhcdTAwMjZ0LVx1MDAzZWxvY2spO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiB9XG4gXG4gdm9pZCBiaXRfbWFwX2luaXQoc3RydWN0IGJpdF9tYXAgKnQsIHVuc2lnbmVkIGxvbmcgKm1hcCwgaW50IHNpemUpXG5kaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tbS9zcm1tdS5jIGIvYXJjaC9zcGFyYy9tbS9zcm1tdS5jXG5pbmRleCA5YTc0OTAyYWQxODE0Li4yYTJjN2JkMjEwMTE0IDEwMDY0NFxuLS0tIGEvYXJjaC9zcGFyYy9tbS9zcm1tdS5jXG4rKysgYi9hcmNoL3NwYXJjL21tL3NybW11LmNcbkBAIC0zNTksMTkgKzM1OSwzOSBAQCBwZ3RhYmxlX3QgcHRlX2FsbG9jX29uZShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBcdHJldHVybiBwdGVwO1xuIH1cbiBcbi12b2lkIHB0ZV9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcHRlcClcbitzdGF0aWMgdm9pZCBfX3B0ZV9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcHRlcClcbiB7XG4rXHRjb25zdCBib29sIHByb2Nlc3NfY29udGV4dCA9IG1tO1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXG4gXHRwYWdlID0gcGZuX3RvX3BhZ2UoX19ub2NhY2hlX3BhKCh1bnNpZ25lZCBsb25nKXB0ZXApIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbi1cdHNwaW5fbG9jayhcdTAwMjZtbS1cdTAwM2VwYWdlX3RhYmxlX2xvY2spO1xuK1x0aWYgKHByb2Nlc3NfY29udGV4dClcbitcdFx0c3Bpbl9sb2NrKFx1MDAyNm1tLVx1MDAzZXBhZ2VfdGFibGVfbG9jayk7XG4gXHRpZiAocGFnZV9yZWZfZGVjX3JldHVybihwYWdlKSA9PSAxKVxuIFx0XHRwYWdldGFibGVfZHRvcihwYWdlX3B0ZGVzYyhwYWdlKSk7XG4tXHRzcGluX3VubG9jayhcdTAwMjZtbS1cdTAwM2VwYWdlX3RhYmxlX2xvY2spO1xuK1x0aWYgKHByb2Nlc3NfY29udGV4dClcbitcdFx0c3Bpbl91bmxvY2soXHUwMDI2bW0tXHUwMDNlcGFnZV90YWJsZV9sb2NrKTtcbiBcbiBcdHNybW11X2ZyZWVfbm9jYWNoZShwdGVwLCBTUk1NVV9QVEVfVEFCTEVfU0laRSk7XG4gfVxuIFxuK3ZvaWQgcHRlX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwdGVwKVxuK3tcbitcdF9fcHRlX2ZyZWUobW0sIHB0ZXApO1xuK31cbitcbit2b2lkIF9fdGxiX3JlbW92ZV90YWJsZSh2b2lkICp0YWJsZSlcbit7XG4rXHRjb25zdCB1bnNpZ25lZCBsb25nIGVuY29kZWQgPSAodW5zaWduZWQgbG9uZyl0YWJsZTtcbitcdGNvbnN0IHVuc2lnbmVkIGxvbmcgYWRkciA9IGVuY29kZWQgXHUwMDI2IH4xVUw7XG4rXHRjb25zdCBib29sIGlzX3BtZCA9IGVuY29kZWQgXHUwMDI2IDE7XG4rXG4rXHRpZiAoaXNfcG1kKVxuK1x0XHRmcmVlX3BtZF9mYXN0KChwbWRfdCAqKWFkZHIpO1xuK1x0ZWxzZSAvKiBDYWxsZWQgZnJvbSBzb2Z0aXJxIGNvbnRleHQsIG5vIG1tLiAqL1xuK1x0XHRfX3B0ZV9mcmVlKE5VTEwsIChwZ3RhYmxlX3QpYWRkcik7XG4rfVxuK1xuIC8qIGNvbnRleHQgaGFuZGxpbmcgLSBhIGR5bmFtaWNhbGx5IHNpemVkIHBvb2wgaXMgdXNlZCAqL1xuICNkZWZpbmUgTk9fQ09OVEVYVFx0LTFcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3VtL0tjb25maWcgYi9hcmNoL3VtL0tjb25maWdcbmluZGV4IGQ5NTQxZDEzZDllYjAuLjk0YjhmZjcwZjU3OGIgMTAwNjQ0XG4tLS0gYS9hcmNoL3VtL0tjb25maWdcbisrKyBiL2FyY2gvdW0vS2NvbmZpZ1xuQEAgLTQ0LDcgKzQ0LDYgQEAgY29uZmlnIFVNTFxuIFx0c2VsZWN0IEhBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UU1xuIFx0c2VsZWN0IFRIUkVBRF9JTkZPX0lOX1RBU0tcbiBcdHNlbGVjdCBTUEFSU0VfSVJRXG4tXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxuIFxuIGNvbmZpZyBNTVVcbiBcdGJvb2xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnIGIvYXJjaC94ODYvS2NvbmZpZ1xuaW5kZXggYThjM2IzZDMxYTI3Ni4uNmU1ZTQ2MmVjMDU5YSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L0tjb25maWdcbisrKyBiL2FyY2gveDg2L0tjb25maWdcbkBAIC0yODMsNyArMjgzLDYgQEAgY29uZmlnIFg4NlxuIFx0c2VsZWN0IEhBVkVfUEVSRl9SRUdTXG4gXHRzZWxlY3QgSEFWRV9QRVJGX1VTRVJfU1RBQ0tfRFVNUFxuIFx0c2VsZWN0IEFTWU5DX0tFUk5FTF9QR1RBQkxFX0ZSRUVcdGlmIElPTU1VX1NWQVxuLVx0c2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcbiBcdHNlbGVjdCBNTVVfR0FUSEVSX01FUkdFX1ZNQVNcbiBcdHNlbGVjdCBIQVZFX1BPU0lYX0NQVV9USU1FUlNfVEFTS19XT1JLXG4gXHRzZWxlY3QgSEFWRV9SRUdTX0FORF9TVEFDS19BQ0NFU1NfQVBJXG5kaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vdGxiLmggYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS90bGIuaFxuaW5kZXggOGMzY2ViNDI3MDE4MC4uNmZiN2I3ODE1NGY2MiAxMDA2NDRcbi0tLSBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3RsYi5oXG4rKysgYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS90bGIuaFxuQEAgLTE2LDcgKzE2LDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20tZ2VuZXJpYy90bGIuaFx1MDAzZVxuIFxuLSNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLCBwdGUsIGFkZHJlc3MpXHRwdGVfZnJlZSgodGxiKS1cdTAwM2VtbSwgcHRlKVxuKyNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLCBwdGUsIGFkZHJlc3MpXHR0bGJfcmVtb3ZlX3B0ZGVzYygodGxiKSwgcGFnZV9wdGRlc2MocHRlKSlcbiBcbiB2b2lkIGNoZWNrX3RsYl9zYW5pdHkodm9pZCk7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmhcbmluZGV4IGJkY2MyNzc4YWM2NGYuLjA0NGRhYmMxZmU5Y2IgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3RsYi5oXG4rKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3RsYi5oXG5AQCAtNjcsMTEgKzY3LDggQEBcbiAgKiAgLSB0bGJfcmVtb3ZlX3RhYmxlKClcbiAgKlxuICAqICAgIHRsYl9yZW1vdmVfdGFibGUoKSBpcyB0aGUgYmFzaWMgcHJpbWl0aXZlIHRvIGZyZWUgcGFnZS10YWJsZSBkaXJlY3Rvcmllc1xuLSAqICAgIChfX3AqX2ZyZWVfdGxiKCkpLiAgSW4gaXQncyBtb3N0IHByaW1pdGl2ZSBmb3JtIGl0IGlzIGFuIGFsaWFzIGZvclxuLSAqICAgIHRsYl9yZW1vdmVfcGFnZSgpIGJlbG93LCBmb3Igd2hlbiBwYWdlIGRpcmVjdG9yaWVzIGFyZSBwYWdlcyBhbmQgaGF2ZSBub1xuLSAqICAgIGFkZGl0aW9uYWwgY29uc3RyYWludHMuXG4tICpcbi0gKiAgICBTZWUgYWxzbyBNTVVfR0FUSEVSX1RBQkxFX0ZSRUUgYW5kIE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUuXG4rICogICAgKF9fcCpfZnJlZV90bGIoKSkuICBQYWdlIGRpcmVjdG9yaWVzIGFyZSBmcmVlZCBhZnRlciBhbiBSQ1UgZ3JhY2VcbisgKiAgICBwZXJpb2QgLSBzZWUgdGhlIGNvbW1lbnQgaW4gbW0vbW11X2dhdGhlci5jLlxuICAqXG4gICogIC0gdGxiX3JlbW92ZV9wYWdlKCkgLyB0bGJfcmVtb3ZlX3BhZ2Vfc2l6ZSgpXG4gICogIC0gX190bGJfcmVtb3ZlX2ZvbGlvX3BhZ2VzKCkgLyBfX3RsYl9yZW1vdmVfcGFnZV9zaXplKClcbkBAIC0xNTEsMjQgKzE0OCwxNSBAQFxuICAqICBUaGlzIG1pZ2h0IGJlIHVzZWZ1bCBpZiB5b3VyIGFyY2hpdGVjdHVyZSBoYXMgc2l6ZSBzcGVjaWZpYyBUTEJcbiAgKiAgaW52YWxpZGF0aW9uIGluc3RydWN0aW9ucy5cbiAgKlxuLSAqICBNTVVfR0FUSEVSX1RBQkxFX0ZSRUVcbi0gKlxuLSAqICBUaGlzIHByb3ZpZGVzIHRsYl9yZW1vdmVfdGFibGUoKSwgdG8gYmUgdXNlZCBpbnN0ZWFkIG9mIHRsYl9yZW1vdmVfcGFnZSgpXG4tICogIGZvciBwYWdlIGRpcmVjdG9yZXMgKF9fcCpfZnJlZV90bGIoKSkuXG4tICpcbi0gKiAgVXNlZnVsIGlmIHlvdXIgYXJjaGl0ZWN0dXJlIGhhcyBub24tcGFnZSBwYWdlIGRpcmVjdG9yaWVzLlxuKyAqICBQYWdlIGRpcmVjdG9yaWVzIChfX3AqX2ZyZWVfdGxiKCkpIGFyZSBhbHdheXMgZnJlZWQgdmlhIHRsYl9yZW1vdmVfdGFibGUoKSxcbisgKiAgYWZ0ZXIgYW4gUkNVIGdyYWNlIHBlcmlvZCAoc2VlIG1tL21tdV9nYXRoZXIuYykuXG4gICpcbi0gKiAgV2hlbiB1c2VkLCBhbiBhcmNoaXRlY3R1cmUgaXMgZXhwZWN0ZWQgdG8gcHJvdmlkZSBfX3RsYl9yZW1vdmVfdGFibGUoKSBvclxuLSAqICB1c2UgdGhlIGdlbmVyaWMgX190bGJfcmVtb3ZlX3RhYmxlKCksIHdoaWNoIGRvZXMgdGhlIGFjdHVhbCBmcmVlaW5nIG9mIHRoZXNlXG4tICogIHBhZ2VzLlxuKyAqIFRoaXMgc2VyaWFsaXNlcyBhZ2FpbnN0IHNvZnR3YXJlIHBhZ2UtdGFibGUgd2Fsa2VycywgaW5jbHVkaW5nIGFyY2hpdGVjdHVyZXNcbisgKiB3aGljaCBkbyBub3QgdXNlIElQSXMgZm9yIHJlbW90ZSBUTEIgaW52YWxpZGF0ZXMuXG4gICpcbi0gKiAgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxuLSAqXG4tICogIExpa2UgTU1VX0dBVEhFUl9UQUJMRV9GUkVFLCBhbmQgYWRkcyBzZW1pLVJDVSBzZW1hbnRpY3MgdG8gdGhlIGZyZWUgKHNlZVxuLSAqICBjb21tZW50IGJlbG93KS5cbi0gKlxuLSAqICBVc2VmdWwgaWYgeW91ciBhcmNoaXRlY3R1cmUgZG9lc24ndCB1c2UgSVBJcyBmb3IgcmVtb3RlIFRMQiBpbnZhbGlkYXRlc1xuLSAqICBhbmQgdGhlcmVmb3JlIGRvZXNuJ3QgbmF0dXJhbGx5IHNlcmlhbGl6ZSB3aXRoIHNvZnR3YXJlIHBhZ2UtdGFibGUgd2Fsa2Vycy5cbisgKiAgQW4gYXJjaGl0ZWN0dXJlIGlzIGV4cGVjdGVkIHRvIHByb3ZpZGUgX190bGJfcmVtb3ZlX3RhYmxlKCkgKHNlZVxuKyAqICBIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRSkgb3IgdXNlIHRoZSBnZW5lcmljIF9fdGxiX3JlbW92ZV90YWJsZSgpLCB3aGljaFxuKyAqICBkb2VzIHRoZSBhY3R1YWwgZnJlZWluZyBvZiB0aGVzZSBwYWdlcy5cbiAgKlxuICAqICBNTVVfR0FUSEVSX05PX0ZMVVNIX0NBQ0hFXG4gICpcbkBAIC0yMDAsMTIgKzE4OCw4IEBAXG4gICogIHZhcmlvdXMgcHRlcF9nZXRfYW5kX2NsZWFyKCkgZnVuY3Rpb25zLlxuICAqL1xuIFxuLSNpZmRlZiBDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFXG4tXG4gc3RydWN0IG1tdV90YWJsZV9iYXRjaCB7XG4tI2lmZGVmIENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG4gXHRzdHJ1Y3QgcmN1X2hlYWRcdFx0cmN1O1xuLSNlbmRpZlxuIFx0dW5zaWduZWQgaW50XHRcdG5yO1xuIFx0dm9pZFx0XHRcdCp0YWJsZXNbXTtcbiB9O1xuQEAgLTIyNCwyMyArMjA4LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZSh2b2lkICp0YWJsZSlcbiBcbiBleHRlcm4gdm9pZCB0bGJfcmVtb3ZlX3RhYmxlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHZvaWQgKnRhYmxlKTtcbiBcbi0jZWxzZSAvKiAhQ09ORklHX01NVV9HQVRIRVJfVEFCTEVfRlJFRSAqL1xuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfcmVtb3ZlX3BhZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHBhZ2UgKnBhZ2UpO1xuLS8qXG4tICogV2l0aG91dCBNTVVfR0FUSEVSX1RBQkxFX0ZSRUUgdGhlIGFyY2hpdGVjdHVyZSBpcyBhc3N1bWVkIHRvIGhhdmUgcGFnZSBiYXNlZFxuLSAqIHBhZ2UgZGlyZWN0b3JpZXMgYW5kIHdlIGNhbiB1c2UgdGhlIG5vcm1hbCBwYWdlIGJhdGNoaW5nIHRvIGZyZWUgdGhlbS5cbi0gKi9cbi1zdGF0aWMgaW5saW5lIHZvaWQgdGxiX3JlbW92ZV90YWJsZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCB2b2lkICp0YWJsZSlcbi17XG4tXHRzdHJ1Y3QgcHRkZXNjICpwdGRlc2MgPSAoc3RydWN0IHB0ZGVzYyAqKXRhYmxlO1xuLVxuLVx0cGFnZXRhYmxlX2R0b3IocHRkZXNjKTtcbi1cdHRsYl9yZW1vdmVfcGFnZSh0bGIsIHB0ZGVzY19wYWdlKHB0ZGVzYykpO1xuLX1cbi0jZW5kaWYgLyogQ09ORklHX01NVV9HQVRIRVJfVEFCTEVfRlJFRSAqL1xuLVxuLSNpZmRlZiBDT05GSUdfTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxuIC8qXG4gICogVGhpcyBhbGxvd3MgYW4gYXJjaGl0ZWN0dXJlIHRoYXQgZG9lcyBub3QgdXNlIHRoZSBsaW51eCBwYWdlLXRhYmxlcyBmb3JcbiAgKiBoYXJkd2FyZSB0byBza2lwIHRoZSBUTEJJIHdoZW4gZnJlZWluZyBwYWdlIHRhYmxlcy5cbkBAIC0yNTMsMTkgKzIyMCw2IEBAIHZvaWQgdGxiX3JlbW92ZV90YWJsZV9zeW5jX29uZSh2b2lkKTtcbiBcbiB2b2lkIHRsYl9yZW1vdmVfdGFibGVfc3luY19yY3Uodm9pZCk7XG4gXG4tI2Vsc2Vcbi1cbi0jaWZkZWYgdGxiX25lZWRzX3RhYmxlX2ludmFsaWRhdGVcbi0jZXJyb3IgdGxiX25lZWRzX3RhYmxlX2ludmFsaWRhdGUoKSByZXF1aXJlcyBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG4tI2VuZGlmXG4tXG4tc3RhdGljIGlubGluZSB2b2lkIHRsYl9yZW1vdmVfdGFibGVfc3luY19vbmUodm9pZCkgeyB9XG4tXG4tc3RhdGljIGlubGluZSB2b2lkIHRsYl9yZW1vdmVfdGFibGVfc3luY19yY3Uodm9pZCkgeyB9XG4tXG4tI2VuZGlmIC8qIENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFICovXG4tXG4tXG4gI2lmbmRlZiBDT05GSUdfTU1VX0dBVEhFUl9OT19HQVRIRVJcbiAvKlxuICAqIElmIHdlIGNhbid0IGFsbG9jYXRlIGEgcGFnZSB0byBtYWtlIGEgYmlnIGJhdGNoIG9mIHBhZ2UgcG9pbnRlcnNcbkBAIC0zMjUsOSArMjc5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHRsYl9mbHVzaF9ybWFwcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3RcbiBzdHJ1Y3QgbW11X2dhdGhlciB7XG4gXHRzdHJ1Y3QgbW1fc3RydWN0XHQqbW07XG4gXG4tI2lmZGVmIENPTkZJR19NTVVfR0FUSEVSX1RBQkxFX0ZSRUVcbiBcdHN0cnVjdCBtbXVfdGFibGVfYmF0Y2hcdCpiYXRjaDtcbi0jZW5kaWZcbiBcbiBcdHVuc2lnbmVkIGxvbmdcdFx0c3RhcnQ7XG4gXHR1bnNpZ25lZCBsb25nXHRcdGVuZDtcbmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZ1xuaW5kZXggYzFkZGY1OWMwZDcxYS4uYmM3YmVmYWZiNDdiNSAxMDA2NDRcbi0tLSBhL21tL0tjb25maWdcbisrKyBiL21tL0tjb25maWdcbkBAIC0xNDY1LDcgKzE0NjUsNyBAQCBjb25maWcgSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEVcbiBcbiBjb25maWcgUFRfUkVDTEFJTVxuIFx0ZGVmX2Jvb2wgeVxuLVx0ZGVwZW5kcyBvbiBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFIFx1MDAyNlx1MDAyNiAhSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEVcbitcdGRlcGVuZHMgb24gTU1VIFx1MDAyNlx1MDAyNiAhSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEVcbiBcdGhlbHBcbiBcdCAgVHJ5IHRvIHJlY2xhaW0gZW1wdHkgdXNlciBwYWdlIHRhYmxlIHBhZ2VzIGluIHBhdGhzIG90aGVyIHRoYW4gbXVubWFwXG4gXHQgIGFuZCBleGl0X21tYXAgcGF0aC5cbmRpZmYgLS1naXQgYS9tbS9ndXAuYyBiL21tL2d1cC5jXG5pbmRleCBlYjg5OGVhMWVlMjJlLi42M2I0MzVlYzYwNWM4IDEwMDY0NFxuLS0tIGEvbW0vZ3VwLmNcbisrKyBiL21tL2d1cC5jXG5AQCAtMjcwMCw4ICsyNzAwLDkgQEAgRVhQT1JUX1NZTUJPTChnZXRfdXNlcl9wYWdlc191bmxvY2tlZCk7XG4gICogQmVmb3JlIGFjdGl2YXRpbmcgdGhpcyBjb2RlLCBwbGVhc2UgYmUgYXdhcmUgdGhhdCB0aGUgZm9sbG93aW5nIGFzc3VtcHRpb25zXG4gICogYXJlIGN1cnJlbnRseSBtYWRlOlxuICAqXG4tICogICopIEVpdGhlciBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFIGlzIGVuYWJsZWQsIGFuZCB0bGJfcmVtb3ZlX3RhYmxlKCkgaXMgdXNlZCB0b1xuLSAqICBmcmVlIHBhZ2VzIGNvbnRhaW5pbmcgcGFnZSB0YWJsZXMgb3IgVExCIGZsdXNoaW5nIHJlcXVpcmVzIElQSSBicm9hZGNhc3QuXG4rICogICopIHRsYl9yZW1vdmVfdGFibGUoKSBpcyB1c2VkIHRvIGZyZWUgcGFnZXMgY29udGFpbmluZyBwYWdlIHRhYmxlcywgd2l0aFxuKyAqICB0aGUgZnJlZSBkZWZlcnJlZCB1bnRpbCBhbiBSQ1UgZ3JhY2UgcGVyaW9kIGhhcyBlbGFwc2VkIChzZWVcbisgKiAgbW0vbW11X2dhdGhlci5jKS5cbiAgKlxuICAqICAqKSBwdGVzIGNhbiBiZSByZWFkIGF0b21pY2FsbHkgYnkgdGhlIGFyY2hpdGVjdHVyZS5cbiAgKlxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCA1NDQ5NGMzZmE5ODM1Li41MDVmN2I2MmZmMjgxIDEwMDY0NFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xuQEAgLTI0NzYsNyArMjQ3Niw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB6YXBfZGVwb3NpdGVkX3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKVxuIFx0cGd0YWJsZV90IHBndGFibGU7XG4gXG4gXHRwZ3RhYmxlID0gcGd0YWJsZV90cmFuc19odWdlX3dpdGhkcmF3KG1tLCBwbWQpO1xuLVx0cHRlX2ZyZWUobW0sIHBndGFibGUpO1xuK1x0cHRlX2ZyZWVfZGVmZXIobW0sIHBndGFibGUpO1xuIFx0bW1fZGVjX25yX3B0ZXMobW0pO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9tbS9tbXVfZ2F0aGVyLmMgYi9tbS9tbXVfZ2F0aGVyLmNcbmluZGV4IDM5ODVkODU2ZGU3ZjkuLjJhNzJhOTY4Njc3M2EgMTAwNjQ0XG4tLS0gYS9tbS9tbXVfZ2F0aGVyLmNcbisrKyBiL21tL21tdV9nYXRoZXIuY1xuQEAgLTIxOCw4ICsyMTgsNiBAQCBib29sIF9fdGxiX3JlbW92ZV9wYWdlX3NpemUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBwYWdlX1xuIFxuICNlbmRpZiAvKiBNTVVfR0FUSEVSX05PX0dBVEhFUiAqL1xuIFxuLSNpZmRlZiBDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFXG4tXG4gc3RhdGljIHZvaWQgX190bGJfcmVtb3ZlX3RhYmxlX2ZyZWUoc3RydWN0IG1tdV90YWJsZV9iYXRjaCAqYmF0Y2gpXG4ge1xuIFx0aW50IGk7XG5AQCAtMjMwLDEwICsyMjgsOCBAQCBzdGF0aWMgdm9pZCBfX3RsYl9yZW1vdmVfdGFibGVfZnJlZShzdHJ1Y3QgbW11X3RhYmxlX2JhdGNoICpiYXRjaClcbiBcdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyliYXRjaCk7XG4gfVxuIFxuLSNpZmRlZiBDT05GSUdfTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxuLVxuIC8qXG4tICogU2VtaSBSQ1UgZnJlZWluZyBvZiB0aGUgcGFnZSBkaXJlY3Rvcmllcy5cbisgKiBSQ1UgZnJlZWluZyBvZiB0aGUgcGFnZSBkaXJlY3Rvcmllcy5cbiAgKlxuICAqIFRoaXMgaXMgbmVlZGVkIGJ5IHNvbWUgYXJjaGl0ZWN0dXJlcyB0byBpbXBsZW1lbnQgc29mdHdhcmUgcGFnZXRhYmxlIHdhbGtlcnMuXG4gICpcbkBAIC0yNTksMTMgKzI1NSwxMyBAQCBzdGF0aWMgdm9pZCBfX3RsYl9yZW1vdmVfdGFibGVfZnJlZShzdHJ1Y3QgbW11X3RhYmxlX2JhdGNoICpiYXRjaClcbiAgKiBtZWFucy5cbiAgKlxuICAqIFdoYXQgd2UgZG8gaXMgYmF0Y2ggdGhlIGZyZWVkIGRpcmVjdG9yeSBwYWdlcyAodGFibGVzKSBhbmQgUkNVIGZyZWUgdGhlbS5cbi0gKiBXZSB1c2UgdGhlIHNjaGVkIFJDVSB2YXJpYW50LCBhcyB0aGF0IGd1YXJhbnRlZXMgdGhhdCBJUlEvcHJlZW1wdCBkaXNhYmxpbmdcbi0gKiBob2xkcyBvZmYgZ3JhY2UgcGVyaW9kcy5cbisgKiBEaXNhYmxpbmcgSVJRcyBvciBwcmVlbXB0aW9uIGhvbGRzIG9mZiBSQ1UgZ3JhY2UgcGVyaW9kcywgc28gdGhpcyBwcm90ZWN0c1xuKyAqIGJvdGggcmN1X3JlYWRfbG9jaygpIGFuZCBJUlEtZGlzYWJsaW5nIHdhbGtlcnMuXG4gICpcbiAgKiBIb3dldmVyLCBpbiBvcmRlciB0byBiYXRjaCB0aGVzZSBwYWdlcyB3ZSBuZWVkIHRvIGFsbG9jYXRlIHN0b3JhZ2UsIHRoaXNcbiAgKiBhbGxvY2F0aW9uIGlzIGRlZXAgaW5zaWRlIHRoZSBNTSBjb2RlIGFuZCBjYW4gdGh1cyBlYXNpbHkgZmFpbCBvbiBtZW1vcnlcbi0gKiBwcmVzc3VyZS4gVG8gZ3VhcmFudGVlIHByb2dyZXNzIHdlIGZhbGwgYmFjayB0byBzaW5nbGUgdGFibGUgZnJlZWluZywgc2VlXG4tICogdGhlIGltcGxlbWVudGF0aW9uIG9mIHRsYl9yZW1vdmVfdGFibGVfb25lKCkuXG4rICogcHJlc3N1cmUuIFRvIGd1YXJhbnRlZSBwcm9ncmVzcyB3ZSBmYWxsIGJhY2sgdG8gc2luZ2xlIHRhYmxlIGZyZWVpbmcsIHdoaWNoXG4rICogaXMgYWxzbyBSQ1UtZGVmZXJyZWQgLSBzZWUgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRsYl9yZW1vdmVfdGFibGVfb25lKCkuXG4gICpcbiAgKi9cbiBcbkBAIC0zMTUsMTUgKzMxMSw2IEBAIHZvaWQgdGxiX3JlbW92ZV90YWJsZV9zeW5jX3JjdSh2b2lkKVxuIFx0c3luY2hyb25pemVfcmN1KCk7XG4gfVxuIFxuLSNlbHNlIC8qICFDT05GSUdfTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSAqL1xuLVxuLXN0YXRpYyB2b2lkIHRsYl9yZW1vdmVfdGFibGVfZnJlZShzdHJ1Y3QgbW11X3RhYmxlX2JhdGNoICpiYXRjaClcbi17XG4tXHRfX3RsYl9yZW1vdmVfdGFibGVfZnJlZShiYXRjaCk7XG4tfVxuLVxuLSNlbmRpZiAvKiBDT05GSUdfTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSAqL1xuLVxuIC8qXG4gICogSWYgd2Ugd2FudCB0bGJfcmVtb3ZlX3RhYmxlKCkgdG8gaW1wbHkgVExCIGludmFsaWRhdGVzLlxuICAqL1xuQEAgLTQwMywxMyArMzkwLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIHRsYl90YWJsZV9pbml0KHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIpXG4gXHR0bGItXHUwMDNlYmF0Y2ggPSBOVUxMO1xuIH1cbiBcbi0jZWxzZSAvKiAhQ09ORklHX01NVV9HQVRIRVJfVEFCTEVfRlJFRSAqL1xuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfdGFibGVfZmx1c2goc3RydWN0IG1tdV9nYXRoZXIgKnRsYikgeyB9XG4tc3RhdGljIGlubGluZSB2b2lkIHRsYl90YWJsZV9pbml0KHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIpIHsgfVxuLVxuLSNlbmRpZiAvKiBDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFICovXG4tXG4gc3RhdGljIHZvaWQgdGxiX2ZsdXNoX21tdV9mcmVlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIpXG4ge1xuIFx0dGxiX3RhYmxlX2ZsdXNoKHRsYik7XG5kaWZmIC0tZ2l0IGEvbW0vcGd0YWJsZS1nZW5lcmljLmMgYi9tbS9wZ3RhYmxlLWdlbmVyaWMuY1xuaW5kZXggYjkxYjFhOTgwMjljNy4uZmY4ZmYzNzA2NDg1MyAxMDA2NDRcbi0tLSBhL21tL3BndGFibGUtZ2VuZXJpYy5jXG4rKysgYi9tbS9wZ3RhYmxlLWdlbmVyaWMuY1xuQEAgLTM4Niw5ICszODYsMjEgQEAgcHRlX3QgKnB0ZV9vZmZzZXRfbWFwX3J3X25vbG9jayhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCxcbiAgKiBiZSByZWFkLW9ubHkvcmVhZC13cml0ZSBwcm90ZWN0ZWQuXG4gICpcbiAgKiBOb3RlIHRoYXQgZnJlZV9wZ3RhYmxlcygpLCB1c2VkIGFmdGVyIHVubWFwcGluZyBkZXRhY2hlZCB2bWFzLCBvciB3aGVuXG4tICogZXhpdGluZyB0aGUgd2hvbGUgbW0sIGRvZXMgbm90IHRha2UgcGFnZSB0YWJsZSBsb2NrIGJlZm9yZSBmcmVlaW5nIGEgcGFnZVxuLSAqIHRhYmxlLCBhbmQgbWF5IG5vdCB1c2UgUkNVIGF0IGFsbDogXCJvdXRzaWRlcnNcIiBsaWtlIGtodWdlcGFnZWQgc2hvdWxkIGF2b2lkXG4tICogcHRlX29mZnNldF9tYXAoKSBhbmQgY28gb25jZSB0aGUgdm1hIGlzIGRldGFjaGVkIGZyb20gbW0gb3IgbW1fdXNlcnMgaXMgemVyby5cbisgKiBleGl0aW5nIHRoZSB3aG9sZSBtbSwgZG9lcyBub3QgdGFrZSB0aGUgcGFnZSB0YWJsZSBsb2NrIGJlZm9yZSBmcmVlaW5nIGFcbisgKiB0YWJsZS5cbisgKlxuKyAqIEhvd2V2ZXIsIHRoZSBQTUQgZW50cnkgaXMgY2xlYXJlZCBmaXJzdCwgYW5kIHRoZSB0YWJsZSBmcmVlZCBvbmx5IGFmdGVyXG4rICogYW4gUkNVIGdyYWNlIHBlcmlvZCwgc28gYSB3YWxrZXIgdGhhdCBtYXBwZWQgdGhlIHRhYmxlIHVuZGVyXG4rICogcmN1X3JlYWRfbG9jaygpIHN0YXlzIHNhZmUsIGFuZCB0aGUgcG1kX3NhbWUoKSByZWNoZWNrIGluXG4rICogcHRlX29mZnNldF9tYXBfbG9jaygpIGRldGVjdHMgdGhlIHRlYXJkb3duLlxuKyAqXG4rICogVGhlcmVmb3JlIGl0IGlzIHNhZmUgZm9yIFwib3V0c2lkZXJzXCIgbGlrZSBraHVnZXBhZ2VkIHRvIHVzZVxuKyAqIHB0ZV9vZmZzZXRfbWFwKCkgYW5kIGNvLiBmb3IgVk1BcyB0aGF0IG1pZ2h0IGJlIHVuZGVyZ29pbmcgcGFnZSB0YWJsZVxuKyAqIHRlYXJkb3duLlxuKyAqXG4rICogTm90ZSB0aGF0IHRoZSBQR0QgaXRzZWxmIGlzIGZyZWVkIGF0IG1tZHJvcCgpIHRpbWUsIG5vdCB1bmRlciBSQ1UgLSBzbyB0aGVcbisgKiB3YWxrZXIgbXVzdCBrZWVwIHRoZSBtbSBhbGl2ZSB2aWEgbW1ncmFiKCkuIFdpdGggdGhhdCBoZWxkLCB3YWxraW5nIHJlbWFpbnNcbisgKiBzYWZlIGV2ZW4gb25jZSBtbV91c2VycyBoYXMgcmVhY2hlZCB6ZXJvLlxuICAqL1xuIHB0ZV90ICpwdGVfb2Zmc2V0X21hcF9sb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLFxuIFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYWRkciwgc3BpbmxvY2tfdCAqKnB0bHApXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo0Mzo1NC4xNDI0OTE5NzhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0OTQ0Mzc3MTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IFJDVSBUYWJsZSBGcmVlaW5nKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgd2hhdCdzIGdvaW5nIG9uLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCdzIHNpbXBsaWZ5aW5nIFJDVSB0YWJsZSBmcmVlaW5nIGFjcm9zcyB0aGUgYm9hcmQuIFRoZSBnb2FsIHNlZW1zIHRvIGJlIHRvIG1ha2UgUkNVLWJhc2VkIHRhYmxlIGZyZWVpbmcgdGhlIHN0YW5kYXJkLCByZWdhcmRsZXNzIG9mIGFyY2hpdGVjdHVyZSwgaW5zdGVhZCBvZiBjb25kaXRpb25hbGx5IGNvbXBpbGluZyBpdCBpbi4gV2UncmUgZ2V0dGluZyByaWQgb2YgYENPTkZJR19NTVVfR0FUSEVSX1RBQkxFX0ZSRUVgIGFuZCBgQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVgLCB3aGljaCBzdWdnZXN0cyBhIG1vdmUgdG93YXJkcyBhIHVuaWZpZWQgYXBwcm9hY2guXG5cbkkgbmVlZCB0byBjb25maXJtIHRoaXMuIExvb2tpbmcgYXQgdGhlIGRpZmYsIEkgc2VlIGNoYW5nZXMgc2NhdHRlcmVkIGFjcm9zcyB0aGUgY29kZWJhc2UuIGBhcmNoL0tjb25maWdgIGZpbGVzIGFyZSBiZWluZyB1cGRhdGVkLCBhbmQgc2V2ZXJhbCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYGluY2x1ZGUvYXNtL3BnYWxsb2MuaGAgZmlsZXMgYXJlIGJlaW5nIHVwZGF0ZWQgdG8gdXNlIGB0bGJfcmVtb3ZlX3B0ZGVzY2AsIHJhdGhlciB0aGFuIGNvbmRpdGlvbmFsIGNhbGxzIHRvIGBfX3B1ZF9mcmVlX3RsYmAsIGBfX3BtZF9mcmVlX3RsYmAsIGFuZCBgX19wdGVfZnJlZV90bGJgLiBUaGF0IHJlaW5mb3JjZXMgdGhlIGlkZWEgb2Ygc3RhbmRhcmRpemluZyBvbiB0aGUgUkNVIG1lY2hhbmlzbS4gVGhlIGBpbmNsdWRlL2FzbS1nZW5lcmljL3RsYi5oYCBpcyBhbHNvIHJlbW92aW5nIHRoZSBgaWZkZWZgcyB0aGF0IHVzZWQgdG8gY29udHJvbCB0aGUgYHN0cnVjdCBtbXVfdGFibGVfYmF0Y2hgIGFuZCBSQ1UgdGFibGUgcmVtb3ZhbC5cblxuRnVydGhlciBkb3duIHRoZSBsaW5lLCBJJ20gbm90aW5nIGNoYW5nZXMgdG8gYG1tL0tjb25maWdgICh0aGUgYFBUX1JFQ0xBSU1gIG9wdGlvbiBsb29rcyBsaWtlIGl0J3MgYmVpbmcgY29uZGl0aW9uZWQgb24gdGhlIE1NVSBhbmQgYW4gYXJjaGl0ZWN0dXJlIG5vdCBoYXZpbmcgYEhBVkVfQVJDSF9UTEJfUkVNT1ZFX1RBQkxFYCksIGFuZCBjb21tZW50cyBpbiBgbW0vZ3VwLmNgIGFuZCBgbW0vcGd0YWJsZS1nZW5lcmljLmNgLiBUaGUgbW9zdCBpbnRlcmVzdGluZyBwYXJ0LCB0aG91Z2gsIGlzIHRoZSBjaGFuZ2UgdG8gYG1tL2h1Z2VfbWVtb3J5LmNgLiBgemFwX2RlcG9zaXRlZF90YWJsZWAgaXMgbm93IHVzaW5nIGBwdGVfZnJlZV9kZWZlcmAgaW5zdGVhZCBvZiBgcHRlX2ZyZWVgLiBUaGlzIGlzIGEgY3J1Y2lhbCBwb2ludCwgSSBuZWVkIHRvIGNoZWNrIGV4YWN0bHkgd2hhdCBgemFwX2RlcG9zaXRlZF90YWJsZWAgZG9lcywgYW5kIHVuZGVyc3RhbmQgYHB0ZV9mcmVlX2RlZmVyYCBpbiB0aGlzIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBodWdlIHBhZ2UgY29kZSBpcyBhZG9wdGluZyB0aGUgc2FtZSBzdHJhdGVneS5cblxuSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaG93IGBwdGVfZnJlZV9kZWZlcmAgaXMgaW1wbGVtZW50ZWQuIEknbGwgYWxzbyByZWFkIHVwIG9uIGB6YXBfZGVwb3NpdGVkX3RhYmxlYCB0byBmdWxseSB1bmRlcnN0YW5kIHdoYXQgaXMgaGFwcGVuaW5nIGhlcmUuIEknbSBnb2luZyB0byB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGNoZWNrIGBwdGVfZnJlZV9kZWZlcmAgYW5kIGB6YXBfZGVwb3NpdGVkX3RhYmxlYCwgYW5kIHRoZW4gSSB3aWxsIGJlIGFibGUgdG8gdmVyaWZ5IHRoYXQgbXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIGlzIGNvcnJlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTk1LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQ3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6NDM6NTkuMDg2ODcxNDEzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMTE0ODIyMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHRlX2ZyZWVfZGVmZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BnYWxsb2MuaD00Mz1zdGF0aWMgaW5saW5lIHZvaWQgcHRlX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwdGVwYWdlKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BnYWxsb2MuaC00Ny1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGdhbGxvYy5oOjQ4Oi8qIGFyY2ggdXNlIHB0ZV9mcmVlX2RlZmVyKCkgaW1wbGVtZW50YXRpb24gaW4gYXJjaC9wb3dlcnBjL21tL3BndGFibGUtZnJhZy5jICovXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BnYWxsb2MuaDo0OTojZGVmaW5lIHB0ZV9mcmVlX2RlZmVyIHB0ZV9mcmVlX2RlZmVyXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BnYWxsb2MuaDo1MDp2b2lkIHB0ZV9mcmVlX2RlZmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcGd0YWJsZSk7XFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BnYWxsb2MuaC01MS1cXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlLWZyYWcuYz0xMTc9dm9pZCBwdGVfZnJhZ21lbnRfZnJlZSh1bnNpZ25lZCBsb25nICp0YWJsZSwgaW50IGtlcm5lbClcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlLWZyYWcuYy0xMzMtI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbmFyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlLWZyYWcuYzoxMzQ6dm9pZCBwdGVfZnJlZV9kZWZlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHBndGFibGUpXFxuYXJjaC9wb3dlcnBjL21tL3BndGFibGUtZnJhZy5jLTEzNS17XFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGdhbGxvYy5oPTE1MT1zdGF0aWMgaW5saW5lIHZvaWQgcG1kX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BnYWxsb2MuaC0xNjctXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BnYWxsb2MuaDoxNjg6LyogYXJjaCB1c2UgcHRlX2ZyZWVfZGVmZXIoKSBpbXBsZW1lbnRhdGlvbiBpbiBhcmNoL3MzOTAvbW0vcGdhbGxvYy5jICovXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BnYWxsb2MuaDoxNjk6I2RlZmluZSBwdGVfZnJlZV9kZWZlciBwdGVfZnJlZV9kZWZlclxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmg6MTcwOnZvaWQgcHRlX2ZyZWVfZGVmZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwZ3RhYmxlKTtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGdhbGxvYy5oLTE3MS1cXG4tLVxcbmFyY2gvczM5MC9tbS9wZ2FsbG9jLmM9MTQ5PXN0YXRpYyB2b2lkIHB0ZV9mcmVlX25vdyhzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxuLS1cXG5hcmNoL3MzOTAvbW0vcGdhbGxvYy5jLTE1NS1cXG5hcmNoL3MzOTAvbW0vcGdhbGxvYy5jOjE1Njp2b2lkIHB0ZV9mcmVlX2RlZmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcGd0YWJsZSlcXG5hcmNoL3MzOTAvbW0vcGdhbGxvYy5jLTE1Ny17XFxuLS1cXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2NfNjQuaD02Nj12b2lkIHB0ZV9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcHRlcGFnZSk7XFxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzY0LmgtNjctXFxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzY0Lmg6Njg6LyogYXJjaCB1c2UgcHRlX2ZyZWVfZGVmZXIoKSBpbXBsZW1lbnRhdGlvbiBpbiBhcmNoL3NwYXJjL21tL2luaXRfNjQuYyAqL1xcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY182NC5oOjY5OiNkZWZpbmUgcHRlX2ZyZWVfZGVmZXIgcHRlX2ZyZWVfZGVmZXJcXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2NfNjQuaDo3MDp2b2lkIHB0ZV9mcmVlX2RlZmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcGd0YWJsZSk7XFxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzY0LmgtNzEtXFxuLS1cXG5hcmNoL3NwYXJjL21tL2luaXRfNjQuYz0yODY2PXN0YXRpYyB2b2lkIHB0ZV9mcmVlX25vdyhzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxuLS1cXG5hcmNoL3NwYXJjL21tL2luaXRfNjQuYy0yODczLVxcbmFyY2gvc3BhcmMvbW0vaW5pdF82NC5jOjI4NzQ6dm9pZCBwdGVfZnJlZV9kZWZlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHBndGFibGUpXFxuYXJjaC9zcGFyYy9tbS9pbml0XzY0LmMtMjg3NS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaD0xMTU9c3RhdGljIGlubGluZSB2b2lkIHB0ZV91bm1hcChwdGVfdCAqcHRlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMTIwLVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oOjEyMTp2b2lkIHB0ZV9mcmVlX2RlZmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcGd0YWJsZSk7XFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMTIyLVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0yNDc0PXN0YXRpYyBpbmxpbmUgdm9pZCB6YXBfZGVwb3NpdGVkX3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yNDc4LVxcdHBndGFibGUgPSBwZ3RhYmxlX3RyYW5zX2h1Z2Vfd2l0aGRyYXcobW0sIHBtZCk7XFxubW0vaHVnZV9tZW1vcnkuYzoyNDc5OlxcdHB0ZV9mcmVlX2RlZmVyKG1tLCBwZ3RhYmxlKTtcXG5tbS9odWdlX21lbW9yeS5jLTI0ODAtXFx0bW1fZGVjX25yX3B0ZXMobW0pO1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTE4NjI9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjA2Ny1cXHRwYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZShtbSwgaGFkZHIsIHBndF9wbWQpO1xcbm1tL2todWdlcGFnZWQuYzoyMDY4OlxcdHB0ZV9mcmVlX2RlZmVyKG1tLCBwbWRfcGd0YWJsZShwZ3RfcG1kKSk7XFxubW0va2h1Z2VwYWdlZC5jLTIwNjktXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MjE1MT1zdGF0aWMgdm9pZCByZXRyYWN0X3BhZ2VfdGFibGVzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IHBnb2ZmKVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTIyMjgtXFx0XFx0XFx0cGFnZV90YWJsZV9jaGVja19wdGVfY2xlYXJfcmFuZ2UobW0sIGFkZHIsIHBndF9wbWQpO1xcbm1tL2todWdlcGFnZWQuYzoyMjI5OlxcdFxcdFxcdHB0ZV9mcmVlX2RlZmVyKG1tLCBwbWRfcGd0YWJsZShwZ3RfcG1kKSk7XFxubW0va2h1Z2VwYWdlZC5jLTIyMzAtXFx0XFx0fVxcbi0tXFxubW0vcGd0YWJsZS1nZW5lcmljLmM9MjIxPXBtZF90IHBtZHBfY29sbGFwc2VfZmx1c2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4tLVxcbm1tL3BndGFibGUtZ2VuZXJpYy5jLTIzOS1cXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYzoyNDA6LyogYXJjaCBkZWZpbmUgcHRlX2ZyZWVfZGVmZXIgaW4gYXNtL3BnYWxsb2MuaCBmb3IgaXRzIG93biBpbXBsZW1lbnRhdGlvbiAqL1xcbm1tL3BndGFibGUtZ2VuZXJpYy5jOjI0MTojaWZuZGVmIHB0ZV9mcmVlX2RlZmVyXFxubW0vcGd0YWJsZS1nZW5lcmljLmMtMjQyLXN0YXRpYyB2b2lkIHB0ZV9mcmVlX25vdyhzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxuLS1cXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYy0yNDktXFxubW0vcGd0YWJsZS1nZW5lcmljLmM6MjUwOnZvaWQgcHRlX2ZyZWVfZGVmZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwZ3RhYmxlKVxcbm1tL3BndGFibGUtZ2VuZXJpYy5jLTI1MS17XFxuLS1cXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYy0yNTYtfVxcbm1tL3BndGFibGUtZ2VuZXJpYy5jOjI1NzojZW5kaWYgLyogcHRlX2ZyZWVfZGVmZXIgKi9cXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYy0yNTgtI2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo0NDowMS4yOTgzNTkwOTJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2Mzg3NDg1MjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRmVhc2liaWxpdHkgQXNzZXNzbWVudDogUkNVIFBhZ2UgVGFibGUgRnJlZWluZyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggc2VyaWVzIGxvb2tzIGxpa2UgYSBzaWduaWZpY2FudCByZWZhY3RvciB0byBtYWtlIFJDVS1iYXNlZCBwYWdlIHRhYmxlIGZyZWVpbmcgdGhlIHN0YW5kYXJkIGFwcHJvYWNoIGFjcm9zcyBhbGwgYXJjaGl0ZWN0dXJlcy4gSXQncyBlc3NlbnRpYWxseSB1bmlmeWluZyB0aGUgbWV0aG9kIG9mIGZyZWVpbmcgcGFnZSB0YWJsZXMgdW5kZXIgYE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVgLCBjbGVhbmluZyB1cCBzb21lIEtjb25maWcgb3B0aW9ucyByZWxhdGVkIHRvIHRhYmxlIGZyZWVpbmcsIGFuZCB1cGRhdGluZyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIHRvIHVzZSB0aGlzIGdlbmVyaWMgbWVjaGFuaXNtLiBUaGUgYHphcF9kZXBvc2l0ZWRfdGFibGVgIGZ1bmN0aW9uIG5vdyB1c2VzIGBwdGVfZnJlZV9kZWZlcmAsIHdoaWNoIGlzIGEga2V5IGNoYW5nZS5cblxuTXkgZmlyc3QgdGhvdWdodCBpcywgXCJJcyB0aGlzIGZ1bmN0aW9uYWxseSBzaWduaWZpY2FudCBlbm91Z2ggdG8gd2FycmFudCBmdXp6aW5nP1wiIEJhc2VkIG9uIHRoZSBndWlkZWxpbmVzLCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgaW1wYWN0cyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgb3IgYXJjaGl0ZWN0dXJlcy4gTGV0J3Mgc2VlLi4uXG5cbkknbSBzZWVpbmcgY2hhbmdlcyBhY3Jvc3MgYSBidW5jaCBvZiBjb3JlIE1NIGNvZGUsIGxpa2UgYG1tL21tdV9nYXRoZXIuY2AsIGBtbS9odWdlX21lbW9yeS5jYCwgYGluY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmhgLCBhbmQgYG1tL0tjb25maWdgLCBhbmQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUgZm9yIHRoaW5ncyBsaWtlIEFSQywgbTY4aywgbWljcm9ibGF6ZSwgc2gsIHNwYXJjLCB4dGVuc2EsIGFuZCB4ODYuIFRoaXMgaXNuJ3QganVzdCBjb3NtZXRpYzsgaXQncyBhIGZ1bmRhbWVudGFsIGNoYW5nZSB0byBob3cgcGFnZSB0YWJsZXMgYXJlIG1hbmFnZWQgYW5kIGZyZWVkLlxuXG5TcGVjaWZpY2FsbHk6XG5cbiogICBJbiBgbW0vaHVnZV9tZW1vcnkuY2AsIHRoZSBjcml0aWNhbCBjaGFuZ2UgaW4gYHphcF9kZXBvc2l0ZWRfdGFibGVgIG5vdyBkZWZlcnMgdGhlIGZyZWVpbmcgb2YgdGhlIGRlcG9zaXRlZCBwYWdlIHRhYmxlIHVzaW5nIFJDVSB2aWEgYHB0ZV9mcmVlX2RlZmVyYC4gVGhhdCdzIGEgaHVnZSBzaGlmdCBmcm9tIGRpcmVjdCBmcmVlaW5nLlxuKiAgIEluIGBtbS9tbXVfZ2F0aGVyLmNgIGFuZCBgaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaGAsIGFsbCBhcmNoaXRlY3R1cmVzIGFyZSBub3cgdXNpbmcgUkNVLWJhY2tlZCB0YWJsZSBmcmVlaW5nLlxuKiAgIFRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIChlLmcuLCBtNjhrLCBzcGFyYywgYXJjLCBldGMuKSBhcmUgYmVpbmcgdXBkYXRlZCB0byB1c2UgYHRsYl9yZW1vdmVfdGFibGVgIG9yIHNpbWlsYXIgUkNVLWJhc2VkIGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIHN5bmNocm9ub3VzIGZyZWVpbmcgaW4gYF9fcHRlX2ZyZWVfdGxiYCAvIGBfX3BtZF9mcmVlX3RsYmAuXG4qICAgVGhlcmUgYXJlIGFyY2hpdGVjdHVyYWwgY2hhbmdlcywgbGlrZSBzcGlubG9jayBhZGp1c3RtZW50cyBhbmQgcmV3cml0dGVuIGZ1bmN0aW9ucyBpbiBtNjhrIGFuZCBzcGFyYy5cblxuU28sIHllYWgsIHRoaXMgY2xlYXJseSBhZmZlY3RzIGNvcmUgTU0gY29kZSwgcGFnZSB0YWJsZSB0ZWFyZG93biwgVEhQIHphcC9jb2xsYXBzZSBhbmQgVExCIGdhdGhlciB0YWJsZSBmcmVlaW5nISBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZS5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIHNlcmllcyB3YXJyYW50cyBhIGNsb3NlciBsb29rIGZvciBmdXp6aW5nIHBvdGVudGlhbC4gSXQgc2VlbXMgbGlrZSBhIGhpZ2gtdmFsdWUgdGFyZ2V0LiBOZXh0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBjb25maWcgb3B0aW9ucyBhcmUgcmVsZXZhbnQgYW5kIHdoYXQgZm9jdXMgc3ltYm9scyB3b3VsZCBiZSB1c2VmdWwuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY29kZSBhcm91bmQgYHphcF9kZXBvc2l0ZWRfdGFibGVgLCBgcHRlX2ZyZWVfZGVmZXJgLCBgdGxiX3JlbW92ZV90YWJsZWAsIGFuZCBgdGxiX3RhYmxlX2ZsdXNoYCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIGBtbS9tbXVfZ2F0aGVyLmNgLCBhbmQgYG1tL3BndGFibGUtZ2VuZXJpYy5jYCB0byBuYXJyb3cgZG93biB0aGUgdGVzdCBjYXNlIGZvY3VzLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4ODUzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjQ0OjA3LjY4NTg0NjAwN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NjU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9odWdlX21lbW9yeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0NjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI0NjU6XFx0XFxuMjQ2NjpcXHRcXHRmb2xpb19tYXJrX2xhenlmcmVlKGZvbGlvKTtcXG4yNDY3OlxcdFxcdHJldCA9IHRydWU7XFxuMjQ2ODpcXHRvdXQ6XFxuMjQ2OTpcXHRcXHRzcGluX3VubG9jayhwdGwpO1xcbjI0NzA6XFx0b3V0X3VubG9ja2VkOlxcbjI0NzE6XFx0XFx0cmV0dXJuIHJldDtcXG4yNDcyOlxcdH1cXG4yNDczOlxcdFxcbjI0NzQ6XFx0c3RhdGljIGlubGluZSB2b2lkIHphcF9kZXBvc2l0ZWRfdGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQpXFxuMjQ3NTpcXHR7XFxuMjQ3NjpcXHRcXHRwZ3RhYmxlX3QgcGd0YWJsZTtcXG4yNDc3OlxcdFxcbjI0Nzg6XFx0XFx0cGd0YWJsZSA9IHBndGFibGVfdHJhbnNfaHVnZV93aXRoZHJhdyhtbSwgcG1kKTtcXG4yNDc5OlxcdFxcdHB0ZV9mcmVlX2RlZmVyKG1tLCBwZ3RhYmxlKTtcXG4yNDgwOlxcdFxcdG1tX2RlY19ucl9wdGVzKG1tKTtcXG4yNDgxOlxcdH1cXG4yNDgyOlxcdFxcbjI0ODM6XFx0c3RhdGljIHZvaWQgemFwX2h1Z2VfcG1kX2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4yNDg0OlxcdFxcdFxcdHBtZF90IHBtZHZhbCwgc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBpc19wcmVzZW50KVxcbjI0ODU6XFx0e1xcbjI0ODY6XFx0XFx0Y29uc3QgYm9vbCBpc19kZXZpY2VfcHJpdmF0ZSA9IGZvbGlvX2lzX2RldmljZV9wcml2YXRlKGZvbGlvKTtcXG4yNDg3OlxcdFxcbjI0ODg6XFx0XFx0LyogUHJlc2VudCBhbmQgZGV2aWNlIHByaXZhdGUgZm9saW9zIGFyZSBybWFwcGFibGUuICovXFxuMjQ4OTpcXHRcXHRpZiAoaXNfcHJlc2VudCB8fCBpc19kZXZpY2VfcHJpdmF0ZSlcXG4yNDkwOlxcdFxcdFxcdGZvbGlvX3JlbW92ZV9ybWFwX3BtZChmb2xpbywgXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlLCB2bWEpO1xcbjI0OTE6XFx0XFxuMjQ5MjpcXHRcXHRpZiAoZm9saW9fdGVzdF9hbm9uKGZvbGlvKSkge1xcbjI0OTM6XFx0XFx0XFx0YWRkX21tX2NvdW50ZXIobW0sIE1NX0FOT05QQUdFUywgLUhQQUdFX1BNRF9OUik7XFxuMjQ5NDpcXHRcXHR9IGVsc2Uge1xcbjI0OTU6XFx0XFx0XFx0YWRkX21tX2NvdW50ZXIobW0sIG1tX2NvdW50ZXJfZmlsZShmb2xpbyksXFxuMjQ5NjpcXHRcXHRcXHRcXHQgICAgICAgLUhQQUdFX1BNRF9OUik7XFxuMjQ5NzpcXHRcXG4yNDk4OlxcdFxcdFxcdGlmIChpc19wcmVzZW50IFxcdTAwMjZcXHUwMDI2IHBtZF9kaXJ0eShwbWR2YWwpKVxcbjI0OTk6XFx0XFx0XFx0XFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XFxuMjUwMDpcXHRcXHRcXHRpZiAoaXNfcHJlc2VudCBcXHUwMDI2XFx1MDAyNiBwbWRfeW91bmcocG1kdmFsKSBcXHUwMDI2XFx1MDAyNlxcbjI1MDE6XFx0XFx0XFx0ICAgIGxpa2VseSh2bWFfaGFzX3JlY2VuY3kodm1hKSkpXFxuMjUwMjpcXHRcXHRcXHRcXHRmb2xpb19tYXJrX2FjY2Vzc2VkKGZvbGlvKTtcXG4yNTAzOlxcdFxcdH1cXG4yNTA0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo0NDowNy42ODYxMTQ4NDdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTMzNjgyODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZTpcblxuKipUcmFjaW5nIHRoZSBMaW5lYWdlIG9mIGB6YXBfZGVwb3NpdGVkX3RhYmxlYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgYHphcF9kZXBvc2l0ZWRfdGFibGVgLiBJdCdzIGEga2V5IGRhdGEgcG9pbnQsIGFuZCBJIG5lZWQgdG8gc2VlIHdoZXJlIGl0IG9yaWdpbmF0ZXMsIGhvdyBpdCdzIHVzZWQsIGFuZCBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBkZXBlbmRlbmNpZXMuIFRoZSBiZXN0IGZpcnN0IHN0ZXAgaXMgdG8gc2VlIGV4YWN0bHkgd2hlcmUgdGhpcyB0YWJsZSwgb3IgcmF0aGVyIGl0cyBuYW1lLCBpcyByZWZlcmVuY2VkIHdpdGhpbiB0aGUgY29kZWJhc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxscyBiZWluZyBtYWRlLiBLbm93aW5nIHRoZSBjYWxsIHN0YWNrIHdpbGwgbGV0IG1lIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIGludGVncmF0aW9uIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0uIEknbGwgc3RhcnQgd2l0aCBhIHN0cmFpZ2h0Zm9yd2FyZCBzZWFyY2ggZm9yIGNhbGxzLiBUaGlzIHdpbGwgcHJvdmlkZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiwgYWxsb3dpbmcgbWUgdG8gYnVpbGQgYSBwcm9wZXIgbWVudGFsIG1vZGVsIG9mIGl0cyBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMDMxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo0NDowOS42MTk3OTk2NTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc2NzI3NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemFwX2RlcG9zaXRlZF90YWJsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz0yNDAwPWJvb2wgbWFkdmlzZV9mcmVlX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yNDczLVxcbm1tL2h1Z2VfbWVtb3J5LmM6MjQ3NDpzdGF0aWMgaW5saW5lIHZvaWQgemFwX2RlcG9zaXRlZF90YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZClcXG5tbS9odWdlX21lbW9yeS5jLTI0NzUte1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0yNTUxPWJvb2wgemFwX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yNTgyLVxcdGlmIChoYXNfZGVwb3NpdClcXG5tbS9odWdlX21lbW9yeS5jOjI1ODM6XFx0XFx0emFwX2RlcG9zaXRlZF90YWJsZShtbSwgcG1kKTtcXG5tbS9odWdlX21lbW9yeS5jLTI1ODQtXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTMxODg9c3RhdGljIHZvaWQgX19zcGxpdF9odWdlX3BtZF9sb2NrZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTMyMTYtXFx0XFx0aWYgKGFyY2hfbmVlZHNfcGd0YWJsZV9kZXBvc2l0KCkpXFxubW0vaHVnZV9tZW1vcnkuYzozMjE3OlxcdFxcdFxcdHphcF9kZXBvc2l0ZWRfdGFibGUobW0sIHBtZCk7XFxubW0vaHVnZV9tZW1vcnkuYy0zMjE4LVxcdFxcdGlmICh2bWFfaXNfc3BlY2lhbF9odWdlKHZtYSkpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTM1NjE9c3RhdGljIGJvb2wgX19kaXNjYXJkX2Fub25fZm9saW9fcG1kX2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzYxNC1cXHRmb2xpb19yZW1vdmVfcm1hcF9wbWQoZm9saW8sIHBtZF9wYWdlKG9yaWdfcG1kKSwgdm1hKTtcXG5tbS9odWdlX21lbW9yeS5jOjM2MTU6XFx0emFwX2RlcG9zaXRlZF90YWJsZShtbSwgcG1kcCk7XFxubW0vaHVnZV9tZW1vcnkuYy0zNjE2LVxcdGFkZF9tbV9jb3VudGVyKG1tLCBNTV9BTk9OUEFHRVMsIC1IUEFHRV9QTURfTlIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo0NDowOS42Njc0Nzg2MzVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzI3ODMzMTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy5cblxuKipFeGFtaW5pbmcgSHVnZSBQYWdlIFVubWFwcGluZyBhbmQgR2F0aGVyIE9wZXJhdGlvbnMqKlxuXG5SaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgaHVnZSBwYWdlcyBhcmUgdW5tYXBwZWQgd2l0aGluIHRoZSBrZXJuZWwuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYHphcF9odWdlX3BtZGAgd2l0aGluIGBtbS9odWdlX21lbW9yeS5jYC4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBsb2dpYyBmb3IgcmVtb3ZpbmcgYSBodWdlIHBhZ2UncyBtYXBwaW5nLiBJJ2xsIG5lZWQgdG8gc2NydXRpbml6ZSBob3cgaXQgaGFuZGxlcyB0aGUgZGV0YWlscywgZXNwZWNpYWxseSByZWdhcmRpbmcgcG90ZW50aWFsIFRMQiBpbnZhbGlkYXRpb24gYW5kIHN5bmNocm9uaXphdGlvbi5cblxuVGhlbiwgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0LCBJIHNob3VsZCBhbHNvIGxvb2sgYXQgdGhlIGBtbXVfZ2F0aGVyLmNgIGZpbGUuIFNwZWNpZmljYWxseSwgSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJvbGUgb2YgdGhlIGZ1bmN0aW9ucyB3aXRoaW4gYG1tL21tdV9nYXRoZXIuY2AuIEknbGwgYmUgbG9va2luZyB0byBzZWUgaG93IHRoZSBnYXRoZXJzIGFyZSBpbXBsZW1lbnRlZCB3aXRoaW4gYG1tdV9nYXRoZXIuY2AgYW5kIGhvdyB0aGF0IGludGVyYWN0cyB3aXRoIHRoZSBwYWdlIHVubWFwcGluZyBwcm9jZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSBnYXRoZXJzIGFyZSBnYXRoZXJpbmcsIHRoZSByZWFzb25zIGZvciBnYXRoZXJpbmcsIGFuZCBob3cgdGhhdCBpbnRlcmFjdHMgd2l0aCB0aGUgc3BlY2lmaWMgdW5tYXBwaW5nIGNhbGxzIHdpdGhpbiB0aGUgYHphcF9odWdlX3BtZGAgcHJvY2Vzcy4gV2l0aCBhIHN0cm9uZyB1bmRlcnN0YW5kaW5nIG9mIGJvdGgsIEkgc2hvdWxkIGdldCBhIG1vcmUgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgd2hvbGUgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE3MzMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo0NDoxMS45OTUzMTQyODlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg1ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbW11X2dhdGhlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI3MDpcXHRcXHQvKiBTaW1wbHkgZGVsaXZlciB0aGUgaW50ZXJydXB0ICovXFxuIDI3MTpcXHR9XFxuIDI3MjpcXHRcXG4gMjczOlxcdHZvaWQgdGxiX3JlbW92ZV90YWJsZV9zeW5jX29uZSh2b2lkKVxcbiAyNzQ6XFx0e1xcbiAyNzU6XFx0XFx0LypcXG4gMjc2OlxcdFxcdCAqIFRoaXMgaXNuJ3QgYW4gUkNVIGdyYWNlIHBlcmlvZCBhbmQgaGVuY2UgdGhlIHBhZ2UtdGFibGVzIGNhbm5vdCBiZVxcbiAyNzc6XFx0XFx0ICogYXNzdW1lZCB0byBiZSBhY3R1YWxseSBSQ1UtZnJlZWQuXFxuIDI3ODpcXHRcXHQgKlxcbiAyNzk6XFx0XFx0ICogSXQgaXMgaG93ZXZlciBzdWZmaWNpZW50IGZvciBzb2Z0d2FyZSBwYWdlLXRhYmxlIHdhbGtlcnMgdGhhdCByZWx5IG9uXFxuIDI4MDpcXHRcXHQgKiBJUlEgZGlzYWJsaW5nLlxcbiAyODE6XFx0XFx0ICovXFxuIDI4MjpcXHRcXHRzbXBfY2FsbF9mdW5jdGlvbih0bGJfcmVtb3ZlX3RhYmxlX3NtcF9zeW5jLCBOVUxMLCAxKTtcXG4gMjgzOlxcdH1cXG4gMjg0OlxcdFxcbiAyODU6XFx0c3RhdGljIHZvaWQgdGxiX3JlbW92ZV90YWJsZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbiAyODY6XFx0e1xcbiAyODc6XFx0XFx0X190bGJfcmVtb3ZlX3RhYmxlX2ZyZWUoY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBtbXVfdGFibGVfYmF0Y2gsIHJjdSkpO1xcbiAyODg6XFx0fVxcbiAyODk6XFx0XFxuIDI5MDpcXHRzdGF0aWMgdm9pZCB0bGJfcmVtb3ZlX3RhYmxlX2ZyZWUoc3RydWN0IG1tdV90YWJsZV9iYXRjaCAqYmF0Y2gpXFxuIDI5MTpcXHR7XFxuIDI5MjpcXHRcXHRjYWxsX3JjdShcXHUwMDI2YmF0Y2gtXFx1MDAzZXJjdSwgdGxiX3JlbW92ZV90YWJsZV9yY3UpO1xcbiAyOTM6XFx0fVxcbiAyOTQ6XFx0XFxuIDI5NTpcXHQvKipcXG4gMjk2OlxcdCAqIHRsYl9yZW1vdmVfdGFibGVfc3luY19yY3UgLSBzeW5jaHJvbml6ZSB3aXRoIHNvZnR3YXJlIHBhZ2UtdGFibGUgd2Fsa2Vyc1xcbiAyOTc6XFx0ICpcXG4gMjk4OlxcdCAqIExpa2UgdGxiX3JlbW92ZV90YWJsZV9zeW5jX29uZSgpIGJ1dCB1c2VzIFJDVSBncmFjZSBwZXJpb2QgaW5zdGVhZCBvZiBJUElcXG4gMjk5OlxcdCAqIGJyb2FkY2FzdC4gVXNlIGluIHNsb3cgcGF0aHMgd2hlcmUgc2xlZXBpbmcgaXMgYWNjZXB0YWJsZS5cXG4gMzAwOlxcdCAqXFxuIDMwMTpcXHQgKiBTb2Z0d2FyZS9Mb2NrbGVzcyBwYWdlLXRhYmxlIHdhbGtlcnMgdXNlIGxvY2FsX2lycV9kaXNhYmxlKCksIHdoaWNoIGlzIGFsc29cXG4gMzAyOlxcdCAqIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4gc3luY2hyb25pemVfcmN1KCkgd2FpdHMgZm9yIGFsbCBzdWNoXFxuIDMwMzpcXHQgKiBzZWN0aW9ucywgcHJvdmlkaW5nIHRoZSBzYW1lIGd1YXJhbnRlZSBhcyB0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfb25lKCkgYnV0XFxuIDMwNDpcXHQgKiB3aXRob3V0IGRpc3J1cHRpbmcgYWxsIENQVXMgd2l0aCBJUElzLlxcbiAzMDU6XFx0ICpcXG4gMzA2OlxcdCAqIERvIG5vdCB1c2UgZm9yIGZyZWVpbmcgbWVtb3J5LiBVc2UgUkNVIGNhbGxiYWNrcyBpbnN0ZWFkIHRvIGF2b2lkIGxhdGVuY3lcXG4gMzA3OlxcdCAqIHNwaWtlcy5cXG4gMzA4OlxcdCAqL1xcbiAzMDk6XFx0dm9pZCB0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfcmN1KHZvaWQpXFxuIDMxMDpcXHR7XFxuIDMxMTpcXHRcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4gMzEyOlxcdH1cXG4gMzEzOlxcdFxcbiAzMTQ6XFx0LypcXG4gMzE1OlxcdCAqIElmIHdlIHdhbnQgdGxiX3JlbW92ZV90YWJsZSgpIHRvIGltcGx5IFRMQiBpbnZhbGlkYXRlcy5cXG4gMzE2OlxcdCAqL1xcbiAzMTc6XFx0c3RhdGljIGlubGluZSB2b2lkIHRsYl90YWJsZV9pbnZhbGlkYXRlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIpXFxuIDMxODpcXHR7XFxuIDMxOTpcXHRcXHRpZiAodGxiX25lZWRzX3RhYmxlX2ludmFsaWRhdGUoKSkge1xcbiAzMjA6XFx0XFx0XFx0LypcXG4gMzIxOlxcdFxcdFxcdCAqIEludmFsaWRhdGUgcGFnZS10YWJsZSBjYWNoZXMgdXNlZCBieSBoYXJkd2FyZSB3YWxrZXJzLiBUaGVuXFxuIDMyMjpcXHRcXHRcXHQgKiB3ZSBzdGlsbCBuZWVkIHRvIFJDVS1zY2hlZCB3YWl0IHdoaWxlIGZyZWVpbmcgdGhlIHBhZ2VzXFxuIDMyMzpcXHRcXHRcXHQgKiBiZWNhdXNlIHNvZnR3YXJlIHdhbGtlcnMgY2FuIHN0aWxsIGJlIGluLWZsaWdodC5cXG4gMzI0OlxcdFxcdFxcdCAqL1xcbiAzMjU6XFx0XFx0XFx0dGxiX2ZsdXNoX21tdV90bGJvbmx5KHRsYik7XFxuIDMyNjpcXHRcXHR9XFxuIDMyNzpcXHR9XFxuIDMyODpcXHRcXG4gMzI5OlxcdCNpZmRlZiBDT05GSUdfUFRfUkVDTEFJTVxcbiAzMzA6XFx0c3RhdGljIGlubGluZSB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZV9vbmVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG4gMzMxOlxcdHtcXG4gMzMyOlxcdFxcdHN0cnVjdCBwdGRlc2MgKnB0ZGVzYztcXG4gMzMzOlxcdFxcbiAzMzQ6XFx0XFx0cHRkZXNjID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBwdGRlc2MsIHB0X3JjdV9oZWFkKTtcXG4gMzM1OlxcdFxcdF9fdGxiX3JlbW92ZV90YWJsZShwdGRlc2MpO1xcbiAzMzY6XFx0fVxcbiAzMzc6XFx0XFxuIDMzODpcXHRzdGF0aWMgaW5saW5lIHZvaWQgX190bGJfcmVtb3ZlX3RhYmxlX29uZSh2b2lkICp0YWJsZSlcXG4gMzM5OlxcdHtcXG4gMzQwOlxcdFxcdHN0cnVjdCBwdGRlc2MgKnB0ZGVzYztcXG4gMzQxOlxcdFxcbiAzNDI6XFx0XFx0cHRkZXNjID0gdGFibGU7XFxuIDM0MzpcXHRcXHRjYWxsX3JjdShcXHUwMDI2cHRkZXNjLVxcdTAwM2VwdF9yY3VfaGVhZCwgX190bGJfcmVtb3ZlX3RhYmxlX29uZV9yY3UpO1xcbiAzNDQ6XFx0fVxcbiAzNDU6XFx0I2Vsc2VcXG4gMzQ2OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBfX3RsYl9yZW1vdmVfdGFibGVfb25lKHZvaWQgKnRhYmxlKVxcbiAzNDc6XFx0e1xcbiAzNDg6XFx0XFx0dGxiX3JlbW92ZV90YWJsZV9zeW5jX3JjdSgpO1xcbiAzNDk6XFx0XFx0X190bGJfcmVtb3ZlX3RhYmxlKHRhYmxlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6NDQ6MTEuOTk1NDA1MjQ5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyODY5NzgwMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIGB0bGJfcmVtb3ZlX3RhYmxlYCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGlzc2VjdCBgdGxiX3JlbW92ZV90YWJsZWAuIFRoZSBmdW5jdGlvbiBpdHNlbGYgaXMgaW4gYG1tL21tdV9nYXRoZXIuY2AsIHNvIHRoYXQncyB3aGVyZSBJJ2xsIHN0YXJ0LiBJJ20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGl0IGhhbmRsZXMgaW52YWxpZGF0aW5nIFRMQiBlbnRyaWVzIGFzc29jaWF0ZWQgd2l0aCBhIHBhZ2UgdGFibGUuIFNwZWNpZmljYWxseSwgSSdtIGludGVyZXN0ZWQgaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBnYXRoZXIgY29udGV4dCwgYW5kIGhvdyBpdCBkZWFscyB3aXRoIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIG9mIG9wdGltaXphdGlvbiBzdHJhdGVnaWVzLCBhbmQgaWYgdGhlIGltcGxlbWVudGF0aW9uIHRha2VzIGFkdmFudGFnZSBvZiBhbnkgcHJvY2Vzc29yLXNwZWNpZmljIGluc3RydWN0aW9ucyBvciBmZWF0dXJlcy4gQmV5b25kIHRoYXQsIEkgd2lsbCBjaGVjayB0aGUgdXN1YWwgc3VzcGVjdHMgLSB0aGUgZXJyb3IgaGFuZGxpbmcsIGFuZCB0aGUgZWRnZSBjYXNlcy4gSSdtIGVzcGVjaWFsbHkga2VlbiB0byBzZWUgdGhlIGRldGFpbHMgb2YgYW55IGFyY2hpdGVjdHVyYWwgcXVpcmtzIHRoYXQgYXJlIGV4cGxpY2l0bHkgaGFuZGxlZC4gSSBleHBlY3QgdG8gYmUgYWJsZSB0byBmb2xsb3cgdGhlIGxvZ2ljIGFuZCBleHBsYWluIGl0IGJhY2sgdG8gbXlzZWxmIGluIGRldGFpbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMyOTksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjQ0OjE0LjI4MjM4NTExNFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Nzc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tbXVfZ2F0aGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzUwLFxuICBcIkxpbmVDb3VudFwiOiA1NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzUwOlxcdH1cXG4gMzUxOlxcdCNlbmRpZiAvKiBDT05GSUdfUFRfUkVDTEFJTSAqL1xcbiAzNTI6XFx0XFxuIDM1MzpcXHRzdGF0aWMgdm9pZCB0bGJfcmVtb3ZlX3RhYmxlX29uZSh2b2lkICp0YWJsZSlcXG4gMzU0OlxcdHtcXG4gMzU1OlxcdFxcdF9fdGxiX3JlbW92ZV90YWJsZV9vbmUodGFibGUpO1xcbiAzNTY6XFx0fVxcbiAzNTc6XFx0XFxuIDM1ODpcXHRzdGF0aWMgdm9pZCB0bGJfdGFibGVfZmx1c2goc3RydWN0IG1tdV9nYXRoZXIgKnRsYilcXG4gMzU5OlxcdHtcXG4gMzYwOlxcdFxcdHN0cnVjdCBtbXVfdGFibGVfYmF0Y2ggKipiYXRjaCA9IFxcdTAwMjZ0bGItXFx1MDAzZWJhdGNoO1xcbiAzNjE6XFx0XFxuIDM2MjpcXHRcXHRpZiAoKmJhdGNoKSB7XFxuIDM2MzpcXHRcXHRcXHR0bGJfdGFibGVfaW52YWxpZGF0ZSh0bGIpO1xcbiAzNjQ6XFx0XFx0XFx0dGxiX3JlbW92ZV90YWJsZV9mcmVlKCpiYXRjaCk7XFxuIDM2NTpcXHRcXHRcXHQqYmF0Y2ggPSBOVUxMO1xcbiAzNjY6XFx0XFx0fVxcbiAzNjc6XFx0fVxcbiAzNjg6XFx0XFxuIDM2OTpcXHR2b2lkIHRsYl9yZW1vdmVfdGFibGUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgdm9pZCAqdGFibGUpXFxuIDM3MDpcXHR7XFxuIDM3MTpcXHRcXHRzdHJ1Y3QgbW11X3RhYmxlX2JhdGNoICoqYmF0Y2ggPSBcXHUwMDI2dGxiLVxcdTAwM2ViYXRjaDtcXG4gMzcyOlxcdFxcbiAzNzM6XFx0XFx0aWYgKCpiYXRjaCA9PSBOVUxMKSB7XFxuIDM3NDpcXHRcXHRcXHQqYmF0Y2ggPSAoc3RydWN0IG1tdV90YWJsZV9iYXRjaCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfTk9XQUlUKTtcXG4gMzc1OlxcdFxcdFxcdGlmICgqYmF0Y2ggPT0gTlVMTCkge1xcbiAzNzY6XFx0XFx0XFx0XFx0dGxiX3RhYmxlX2ludmFsaWRhdGUodGxiKTtcXG4gMzc3OlxcdFxcdFxcdFxcdHRsYl9yZW1vdmVfdGFibGVfb25lKHRhYmxlKTtcXG4gMzc4OlxcdFxcdFxcdFxcdHJldHVybjtcXG4gMzc5OlxcdFxcdFxcdH1cXG4gMzgwOlxcdFxcdFxcdCgqYmF0Y2gpLVxcdTAwM2VuciA9IDA7XFxuIDM4MTpcXHRcXHR9XFxuIDM4MjpcXHRcXG4gMzgzOlxcdFxcdCgqYmF0Y2gpLVxcdTAwM2V0YWJsZXNbKCpiYXRjaCktXFx1MDAzZW5yKytdID0gdGFibGU7XFxuIDM4NDpcXHRcXHRpZiAoKCpiYXRjaCktXFx1MDAzZW5yID09IE1BWF9UQUJMRV9CQVRDSClcXG4gMzg1OlxcdFxcdFxcdHRsYl90YWJsZV9mbHVzaCh0bGIpO1xcbiAzODY6XFx0fVxcbiAzODc6XFx0XFxuIDM4ODpcXHRzdGF0aWMgaW5saW5lIHZvaWQgdGxiX3RhYmxlX2luaXQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYilcXG4gMzg5OlxcdHtcXG4gMzkwOlxcdFxcdHRsYi1cXHUwMDNlYmF0Y2ggPSBOVUxMO1xcbiAzOTE6XFx0fVxcbiAzOTI6XFx0XFxuIDM5MzpcXHRzdGF0aWMgdm9pZCB0bGJfZmx1c2hfbW11X2ZyZWUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYilcXG4gMzk0OlxcdHtcXG4gMzk1OlxcdFxcdHRsYl90YWJsZV9mbHVzaCh0bGIpO1xcbiAzOTY6XFx0I2lmbmRlZiBDT05GSUdfTU1VX0dBVEhFUl9OT19HQVRIRVJcXG4gMzk3OlxcdFxcdHRsYl9iYXRjaF9wYWdlc19mbHVzaCh0bGIpO1xcbiAzOTg6XFx0I2VuZGlmXFxuIDM5OTpcXHR9XFxuIDQwMDpcXHRcXG4gNDAxOlxcdHZvaWQgdGxiX2ZsdXNoX21tdShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiKVxcbiA0MDI6XFx0e1xcbiA0MDM6XFx0XFx0dGxiX2ZsdXNoX21tdV90bGJvbmx5KHRsYik7XFxuIDQwNDpcXHRcXHR0bGJfZmx1c2hfbW11X2ZyZWUodGxiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6NDQ6MTQuMjgyNDYzOTM0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NjkyMjc1MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgdGxiX3JlbW92ZV9wdGRlc2NgKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBgdGxiX3JlbW92ZV9wdGRlc2NgIGZ1bmN0aW9uLiBJIGtub3cgaXQncyByZWxhdGVkIHRvIFRMQiBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgcGFnZSB0YWJsZSBkZXNjcmlwdG9yIHJlbW92YWwsIGJ1dCBJIHdhbnQgdG8gYmUgY2VydGFpbiBhYm91dCB0aGUgZXhhY3QgaW1wbGVtZW50YXRpb24gZGV0YWlscyBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBmb3IgcGVyZm9ybWFuY2UuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBkZWZpbml0aW9uIGluIGBpbmNsdWRlL2FzbS1nZW5lcmljL3RsYi5oYC4gVGhpcyBnZW5lcmljIGhlYWRlciBzaG91bGQgcHJvdmlkZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIGludGVyZmFjZSBhbmQgbGlrZWx5IHBvaW50IG1lIHRvIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIGlmIG5lY2Vzc2FyeS4gVW5kZXJzdGFuZGluZyB0aGUgZ2VuZXJpYyBiZWhhdmlvciBpcyB0aGUga2V5IHN0YXJ0aW5nIHBvaW50IHRvIGNvbnNpZGVyIGJlZm9yZSBsb29raW5nIGZvciBwcm9jZXNzb3Itc3BlY2lmaWMgb3B0aW1pc2F0aW9ucyBvciBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MzQ4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo0NDoxNi4yNTE2OTM4MDJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjAzNjE1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0bGJfcmVtb3ZlX3B0ZGVzY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2FzbS1nZW5lcmljL3RsYi5oPTQ3Mj1zdGF0aWMgaW5saW5lIHZvaWQgdGxiX3JlbW92ZV9wYWdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaC00NzYtXFxuaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaDo0Nzc6c3RhdGljIGlubGluZSB2b2lkIHRsYl9yZW1vdmVfcHRkZXNjKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCBwdGRlc2MgKnB0KVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmgtNDc4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6NDQ6MTYuMzY3NzM0ODA3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU5ODU4NDU3MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRGl2aW5nIGludG8gdGhlIFRMQiBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBhIGJpdCBtb3JlIGFib3V0IGhvdyB0aGUgVExCIGlzIGhhbmRsZWQgaW4gdGhlIGdlbmVyaWMgYXJjaGl0ZWN0dXJlLCBzbyBsZXQncyBqdW1wIHJpZ2h0IGludG8gdGhlIGhlYXJ0IG9mIGl0LiBTcGVjaWZpY2FsbHksIEknbSBoZWFkaW5nIG92ZXIgdG8gdGhlIGBpbmNsdWRlL2FzbS1nZW5lcmljL3RsYi5oYCBmaWxlLiBJJ20gYWltaW5nIGZvciBhcm91bmQgbGluZSA0NzUsIGdpdmUgb3IgdGFrZSwgYXMgdGhhdCdzIHVzdWFsbHkgYSBnb29kIHNwb3QgdG8gZmluZCBzb21lIGludGVyZXN0aW5nIGdlbmVyaWMgVExCLXJlbGF0ZWQgZGVmaW5pdGlvbnMgb3IgbWFjcm9zLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIHBpZWNlcyBvZiB0aGUgcHV6emxlIHRoZXJlLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIHVzdWFsbHkgcmVzaWRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ2OTQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo0NDoyMi4zNTM1ODI5NzlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNDY1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDY1OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfcmVtb3ZlX3BhZ2Vfc2l6ZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbiA0NjY6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UsIGludCBwYWdlX3NpemUpXFxuIDQ2NzpcXHR7XFxuIDQ2ODpcXHRcXHRpZiAoX190bGJfcmVtb3ZlX3BhZ2Vfc2l6ZSh0bGIsIHBhZ2UsIHBhZ2Vfc2l6ZSkpXFxuIDQ2OTpcXHRcXHRcXHR0bGJfZmx1c2hfbW11KHRsYik7XFxuIDQ3MDpcXHR9XFxuIDQ3MTpcXHRcXG4gNDcyOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfcmVtb3ZlX3BhZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuIDQ3MzpcXHR7XFxuIDQ3NDpcXHRcXHRyZXR1cm4gdGxiX3JlbW92ZV9wYWdlX3NpemUodGxiLCBwYWdlLCBQQUdFX1NJWkUpO1xcbiA0NzU6XFx0fVxcbiA0NzY6XFx0XFxuIDQ3NzpcXHRzdGF0aWMgaW5saW5lIHZvaWQgdGxiX3JlbW92ZV9wdGRlc2Moc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHB0ZGVzYyAqcHQpXFxuIDQ3ODpcXHR7XFxuIDQ3OTpcXHRcXHR0bGJfcmVtb3ZlX3RhYmxlKHRsYiwgcHQpO1xcbiA0ODA6XFx0fVxcbiA0ODE6XFx0XFxuIDQ4MjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgdGxiX2NoYW5nZV9wYWdlX3NpemUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG4gNDgzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgaW50IHBhZ2Vfc2l6ZSlcXG4gNDg0OlxcdHtcXG4gNDg1OlxcdCNpZmRlZiBDT05GSUdfTU1VX0dBVEhFUl9QQUdFX1NJWkVcXG4gNDg2OlxcdFxcdGlmICh0bGItXFx1MDAzZXBhZ2Vfc2l6ZSBcXHUwMDI2XFx1MDAyNiB0bGItXFx1MDAzZXBhZ2Vfc2l6ZSAhPSBwYWdlX3NpemUpIHtcXG4gNDg3OlxcdFxcdFxcdGlmICghdGxiLVxcdTAwM2VmdWxsbW0gXFx1MDAyNlxcdTAwMjYgIXRsYi1cXHUwMDNlbmVlZF9mbHVzaF9hbGwpXFxuIDQ4ODpcXHRcXHRcXHRcXHR0bGJfZmx1c2hfbW11KHRsYik7XFxuIDQ4OTpcXHRcXHR9XFxuIDQ5MDpcXHRcXG4gNDkxOlxcdFxcdHRsYi1cXHUwMDNlcGFnZV9zaXplID0gcGFnZV9zaXplO1xcbiA0OTI6XFx0I2VuZGlmXFxuIDQ5MzpcXHR9XFxuIDQ5NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6NDQ6MjIuMzUzNzAyMTc5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc5MzkwODgxMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUTEIgUmVtb3ZhbCBhbmQgUGFnZSBUYWJsZSBSZWNsYW1hdGlvbiBDaGFuZ2VzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBzZWVtcyB0aGUga2V5IGZ1bmN0aW9uIHdlJ3JlIGxvb2tpbmcgYXQgaXMgYHRsYl9yZW1vdmVfcHRkZXNjYCB3aGljaCBpcyBub3cgY29uc2lzdGVudGx5IGNhbGxpbmcgYHRsYl9yZW1vdmVfdGFibGUodGxiLCBwdClgLiBUaGUgY3J1Y2lhbCBzaGlmdCBoZXJlIGlzIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgdGxiX3JlbW92ZV90YWJsZWAuIEJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgY29kZSB3YXMgaW5saW5lZCBhbmQgaGFuZGxlZCBpbW1lZGlhdGVseSwgd2hpY2ggaW52b2x2ZWQgYSBzaW1wbGUgZGVzdHJ1Y3Rpb24gb2YgdGhlIHBhZ2UgdGFibGUgZGVzY3JpcHRvciBhbmQgaW1tZWRpYXRlIHJlbW92YWwgZnJvbSB0aGUgVExCLlxuXG5Ob3csIHRob3VnaCwgYHRsYl9yZW1vdmVfdGFibGVgIGlzIEFMV0FZUyBkZWZpbmVkIGluIGBtbS9tbXVfZ2F0aGVyLmNgIGFuZCBsZXZlcmFnZXMgUkNVIGJhdGNoaW5nLCB1c2luZyBlaXRoZXIgYGNhbGxfcmN1YCBvciBgc3luY2hyb25pemVfcmN1YC4gU28sIHdlJ3JlIGRlZmVycmluZyB0aGUgYWN0dWFsIHRhYmxlIHJlbW92YWwgdXNpbmcgUkNVIG5vdywgY29ycmVjdD9cblxuQWxyaWdodCwgbGV0J3MgcXVpY2tseSBjaGVjayB0aGUgYFBUX1JFQ0xBSU1gIG9wdGlvbiBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIFByZXZpb3VzbHksIGl0cyBkZXBlbmRlbmN5IHdhcyB0aWVkIHRvIGBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFYCBhbmQgdGhlIGFic2VuY2Ugb2YgYW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGBIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRWAgZGVmaW5pdGlvbi4gTm93LCB3aXRoIHRoZSByZW1vdmFsIG9mIGBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFYCwgaXQgc29sZWx5IGRlcGVuZHMgb24gYE1NVWAgYW5kIHRoZSBhYnNlbmNlIG9mIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZnVuY3Rpb24uIEknbSBpbmZlcnJpbmcgdGhpcyBtZWFucyBgUFRfUkVDTEFJTWAgYmVjb21lcyBsZXNzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYy4gSW50ZXJlc3RpbmcuLi5cblxuRmluYWxseSwgdGhlIGRpc2N1c3Npb24gb2YgYHB0ZV9mcmVlX2RlZmVyYCBpbmRpY2F0ZXMgd2UgbmVlZCB0byBleGFtaW5lIGBtbS9wZ3RhYmxlLWdlbmVyaWMuY2AgYXJvdW5kIGxpbmUgMjQwLiBUaGF0J3MgbGlrZWx5IHdoZXJlIHRoZSBhY3R1YWwgcGFnZSB0YWJsZSBmcmVlaW5nIGRlZmVycmFsIGlzIGJlaW5nIGhhbmRsZWQgb3IgY2FsbGVkIGluIGNvbmp1bmN0aW9uIHdpdGggUkNVLiBTbywgdGhlIGtleSBpcyB0aGUgcGFnZSB0YWJsZSByZW1vdmFsIGlzIG5vIGxvbmdlciBpbW1lZGlhdGUsIGl0J3MgYmVpbmcgZGVmZXJyZWQsIHByb2JhYmx5IGltcHJvdmluZyB0aGUgcGVyZm9ybWFuY2UgYXMgYSByZXN1bHQgb2YgUkNVIGJhdGNoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTM4NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjQ0OjMwLjI5Mjc5MjM2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wZ3RhYmxlLWdlbmVyaWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMzUsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMzU6XFx0XFx0Zmx1c2hfdGxiX3JhbmdlKHZtYSwgYWRkcmVzcywgYWRkcmVzcyArIEhQQUdFX1BNRF9TSVpFKTtcXG4gMjM2OlxcdFxcdHJldHVybiBwbWQ7XFxuIDIzNzpcXHR9XFxuIDIzODpcXHQjZW5kaWZcXG4gMjM5OlxcdFxcbiAyNDA6XFx0LyogYXJjaCBkZWZpbmUgcHRlX2ZyZWVfZGVmZXIgaW4gYXNtL3BnYWxsb2MuaCBmb3IgaXRzIG93biBpbXBsZW1lbnRhdGlvbiAqL1xcbiAyNDE6XFx0I2lmbmRlZiBwdGVfZnJlZV9kZWZlclxcbiAyNDI6XFx0c3RhdGljIHZvaWQgcHRlX2ZyZWVfbm93KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG4gMjQzOlxcdHtcXG4gMjQ0OlxcdFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbiAyNDU6XFx0XFxuIDI0NjpcXHRcXHRwYWdlID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBwYWdlLCByY3VfaGVhZCk7XFxuIDI0NzpcXHRcXHRwdGVfZnJlZShOVUxMIC8qIG1tIG5vdCBwYXNzZWQgYW5kIG5vdCB1c2VkICovLCAocGd0YWJsZV90KXBhZ2UpO1xcbiAyNDg6XFx0fVxcbiAyNDk6XFx0XFxuIDI1MDpcXHR2b2lkIHB0ZV9mcmVlX2RlZmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcGd0YWJsZSlcXG4gMjUxOlxcdHtcXG4gMjUyOlxcdFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbiAyNTM6XFx0XFxuIDI1NDpcXHRcXHRwYWdlID0gcGd0YWJsZTtcXG4gMjU1OlxcdFxcdGNhbGxfcmN1KFxcdTAwMjZwYWdlLVxcdTAwM2VyY3VfaGVhZCwgcHRlX2ZyZWVfbm93KTtcXG4gMjU2OlxcdH1cXG4gMjU3OlxcdCNlbmRpZiAvKiBwdGVfZnJlZV9kZWZlciAqL1xcbiAyNTg6XFx0I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbiAyNTk6XFx0XFxuIDI2MDpcXHQjaWYgZGVmaW5lZChDT05GSUdfR1VQX0dFVF9QWFhfTE9XX0hJR0gpIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4gMjYxOlxcdFxcdChkZWZpbmVkKENPTkZJR19TTVApIHx8IGRlZmluZWQoQ09ORklHX1BSRUVNUFRfUkNVKSlcXG4gMjYyOlxcdC8qXFxuIDI2MzpcXHQgKiBTZWUgdGhlIGNvbW1lbnQgYWJvdmUgcHRlcF9nZXRfbG9ja2xlc3MoKSBpbiBpbmNsdWRlL2xpbnV4L3BndGFibGUuaDpcXG4gMjY0OlxcdCAqIHRoZSBiYXJyaWVycyBpbiBwbWRwX2dldF9sb2NrbGVzcygpIGNhbm5vdCBndWFyYW50ZWUgdGhhdCB0aGUgdmFsdWUgaW5cXG4gMjY1OlxcdCAqIHBtZF9oaWdoIGFjdHVhbGx5IGJlbG9uZ3Mgd2l0aCB0aGUgdmFsdWUgaW4gcG1kX2xvdzsgYnV0IGhvbGRpbmcgaW50ZXJydXB0c1xcbiAyNjY6XFx0ICogb2ZmIGJsb2NrcyB0aGUgVExCIGZsdXNoIGJldHdlZW4gcHJlc2VudCB1cGRhdGVzLCB3aGljaCBndWFyYW50ZWVzIHRoYXQgYVxcbiAyNjc6XFx0ICogc3VjY2Vzc2Z1bCBfX3B0ZV9vZmZzZXRfbWFwKCkgcG9pbnRzIHRvIGEgcGFnZSBmcm9tIG1hdGNoZWQgaGFsdmVzLlxcbiAyNjg6XFx0ICovXFxuIDI2OTpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBwbWRwX2dldF9sb2NrbGVzc19zdGFydCh2b2lkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo0NDozMC4yOTI5MjI3MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MDUyMTk1ODAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQYWdlIFRhYmxlIEZyZWVpbmcgaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSB3ZSd2ZSBnb3Qgc29tZSBpbnRlcmVzdGluZyBjaGFuZ2VzIGFyb3VuZCBwYWdlIHRhYmxlIGZyZWVpbmcsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIEh1Z2VUTEIgcGFnZXMuIFRoZSBgemFwX2RlcG9zaXRlZF90YWJsZWAgZnVuY3Rpb24gd2l0aGluIGBtbS9odWdlX21lbW9yeS5jYCBub3cgY2FsbHMgYHB0ZV9mcmVlX2RlZmVyYCwgd2hpY2ggaXMgdXNpbmcgUkNVIGZvciBkZWZlcnJlZCBmcmVlaW5nLiBUaGlzIGlzIG9ubHkgY29tcGlsZWQgd2hlbiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBlbmFibGVkLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhlbiB3ZSBoYXZlIGB0bGJfcmVtb3ZlX3RhYmxlYCBpbiBgbW0vbW11X2dhdGhlci5jYCwgd2hpY2ggaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX01NVWAgaXMgZW5hYmxlZCwgYW5kIGBDT05GSUdfUFRfUkVDTEFJTWAgaXMgZW5hYmxlZCB3aGVuIGJvdGggYENPTkZJR19NTVVgIGlzIGVuYWJsZWQgYW5kIGAhSEFWRV9BUkNIX1RMQl9SRU1PVkVfVEFCTEVgLlxuXG5TbywgdGhlIGtleSBjb25maWdzIHRvIGtlZXAgaW4gbWluZCBhcmUgYE1NVWAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGVpciBpbnRlcmFjdGlvbnMuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIHJlbGV2YW50IGVudHJ5cG9pbnRzLiBPYnZpb3VzbHksIGB0bGJfcmVtb3ZlX3RhYmxlYCAoaW4gYG1tL21tdV9nYXRoZXIuY2ApIGlzIGNyaXRpY2FsLCBhcyBpdCdzIGdsb2JhbCBhbmQgY2FsbGVkIHdoZW5ldmVyIHBhZ2UgdGFibGVzIG9yIGRpcmVjdG9yaWVzIGFyZSBiZWluZyBmcmVlZC4gVGhlbiB0aGVyZSdzIHRoZSBzeW5jIHZhcmlhbnRzOiBgdGxiX3JlbW92ZV90YWJsZV9zeW5jX29uZWAgYW5kIGB0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfcmN1YCBpbiBgbW0vbW11X2dhdGhlci5jYC4gV2UgYWxzbyBoYXZlIGBwdGVfZnJlZV9kZWZlcmAgaW4gYG1tL3BndGFibGUtZ2VuZXJpYy5jYCwgd2hpY2ggaXMgdGhlIFJDVSBkZWZlcnJhbCBtZWNoYW5pc20uIEFuZCBvZiBjb3Vyc2UsIGB6YXBfaHVnZV9wbWRgIGluIGBtbS9odWdlX21lbW9yeS5jYCBpcyBpbXBvcnRhbnQuIEFsc28sIHRoZSBzdGFuZGFyZCBNTSBlbnRyeXBvaW50cyBsaWtlIGB6YXBfcGFnZV9yYW5nZV9zaW5nbGVgLCBgemFwX3ZtYV9wdGVzYCwgYW5kIGBmcmVlX3BndGFibGVzYCB3aWxsIGxpa2VseSB0cmlnZ2VyIHRoZXNlIGNhbGxzLiBXZSBhbHNvIGhhdmUgYF9fc3BsaXRfaHVnZV9wbWRfbG9ja2VkYCBhbmQgYG1hZHZpc2VfZnJlZV9odWdlX3BtZGAuXG5cbkkgc2hvdWxkIGNoZWNrIHRoZSBub24tc3RhdGljLCBub24taW5saW5lZCBmdW5jdGlvbnMgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHBvdGVudGlhbCBjYWxsIHNpdGVzLiBTcGVjaWZpY2FsbHk6IGB0bGJfcmVtb3ZlX3RhYmxlYCwgYHRsYl9yZW1vdmVfdGFibGVfc3luY19vbmVgLCBgdGxiX3JlbW92ZV90YWJsZV9zeW5jX3JjdWAgKGFsbCBpbiBgbW0vbW11X2dhdGhlci5jYCksIGBwdGVfZnJlZV9kZWZlcmAgKGluIGBtbS9wZ3RhYmxlLWdlbmVyaWMuY2ApLCBhbmQgYHphcF9odWdlX3BtZGAgKGluIGBtbS9odWdlX21lbW9yeS5jYCkuIFRoaXMgZ2l2ZXMgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgd2UgY2FuIHRyYWNlLCBvciBvdmVycmlkZS5cblxuTm93LCBsZXQncyBkaXZlIGludG8gYHphcF9odWdlX3BtZGAgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLiBJIGhhdmUgYSBmZWVsaW5nIHRoZXJlIHdpbGwgYmUgbW9yZSBpbnRlcmVzdGluZyBkZXRhaWxzIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjgwMywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjQ0OjM1LjM0NTEyMDk1MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkwMzIzODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemFwX2h1Z2VfcG1kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTI0NzQ9c3RhdGljIGlubGluZSB2b2lkIHphcF9kZXBvc2l0ZWRfdGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTI0ODItXFxubW0vaHVnZV9tZW1vcnkuYzoyNDgzOnN0YXRpYyB2b2lkIHphcF9odWdlX3BtZF9mb2xpbyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0vaHVnZV9tZW1vcnkuYy0yNDg0LVxcdFxcdHBtZF90IHBtZHZhbCwgc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBpc19wcmVzZW50KVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0yNTIxPXN0YXRpYyBib29sIGhhc19kZXBvc2l0ZWRfcGd0YWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcG1kX3QgcG1kdmFsLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yNTQyLS8qKlxcbm1tL2h1Z2VfbWVtb3J5LmM6MjU0MzogKiB6YXBfaHVnZV9wbWQgLSBaYXAgYSBodWdlIFRIUCB3aGljaCBpcyBvZiBQTUQgc2l6ZS5cXG5tbS9odWdlX21lbW9yeS5jLTI1NDQtICogQHRsYjogVGhlIE1NVSBnYXRoZXIgVExCIHN0YXRlIGFzc29jaWF0ZWQgd2l0aCB0aGUgb3BlcmF0aW9uLlxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yNTUwLSAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6MjU1MTpib29sIHphcF9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9odWdlX21lbW9yeS5jLTI1NTItXFx0XFx0IHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjU4MC1cXHRpZiAoZm9saW8pXFxubW0vaHVnZV9tZW1vcnkuYzoyNTgxOlxcdFxcdHphcF9odWdlX3BtZF9mb2xpbyhtbSwgdm1hLCBvcmlnX3BtZCwgZm9saW8sIGlzX3ByZXNlbnQpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMjU4Mi1cXHRpZiAoaGFzX2RlcG9zaXQpXFxuLS1cXG5tbS9pbnRlcm5hbC5oPTU2OD12b2lkIHBtZF9pbnN0YWxsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLCBwZ3RhYmxlX3QgKnB0ZSk7XFxuLS1cXG5tbS9pbnRlcm5hbC5oLTU3NS0gKiBXaGVuIHdlIGZpbmQgYSBwbWRfbm9uZSgpIHdoaWxlIHVubWFwcGluZyBhIGZvbGlvIHdpdGhvdXQgaG9sZGluZyB0aGUgUFRMLFxcbm1tL2ludGVybmFsLmg6NTc2OiAqIHphcF9odWdlX3BtZCgpIG1heSBoYXZlIGNsZWFyZWQgdGhlIFBNRCBidXQgbm90IHlldCBtb2RpZmllZCB0aGUgZm9saW8gdG9cXG5tbS9pbnRlcm5hbC5oLTU3Ny0gKiBpbmRpY2F0ZSB0aGF0IGl0J3MgdW5tYXBwZWQuIFNraXBwaW5nIHRoZSBQTUQgd2l0aG91dCBzeW5jaHJvbml6YXRpb24gY291bGRcXG4tLVxcbm1tL21lbW9yeS5jPTIwOTk9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHphcF9wbWRfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG4tLVxcbm1tL21lbW9yeS5jLTIxMTItXFx0XFx0XFx0XFx0X19zcGxpdF9odWdlX3BtZCh2bWEsIHBtZCwgYWRkciwgZmFsc2UpO1xcbm1tL21lbW9yeS5jOjIxMTM6XFx0XFx0XFx0ZWxzZSBpZiAoemFwX2h1Z2VfcG1kKHRsYiwgdm1hLCBwbWQsIGFkZHIpKSB7XFxubW0vbWVtb3J5LmMtMjExNC1cXHRcXHRcXHRcXHRhZGRyID0gbmV4dDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6NDQ6MzUuMzk0MTU4NTY5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc5ODM0Mjk3NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVGhpcyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgc2NvcGUgb2YgdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSBpdCBzaWduaWZpY2FudGx5IGltcGFjdHMgcGFnZSB0YWJsZSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgYXJvdW5kIGZyZWVpbmcgYW5kIHJlY2xhaW0uIE15IGluaXRpYWwgc2NhbiBvZiB0aGUgY29kZSBjaGFuZ2VzIGNvbmZpcm1zIHRoaXMuIEkgc2VlIG1vZGlmaWNhdGlvbnMgdG8gc2V2ZXJhbCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmlsZXMgKGBtNjhrYCwgYHNoYCwgYHNwYXJjYCkgYW5kIGdlbmVyaWMgbWVtb3J5IG1hbmFnZW1lbnQgZmlsZXMgKGBtbXVfZ2F0aGVyLmNgLCBgaHVnZV9tZW1vcnkuY2AsIGBwZ3RhYmxlLWdlbmVyaWMuY2ApLiBTcGVjaWZpY2FsbHksIEknbSBub3RpbmcgdGhlIGludHJvZHVjdGlvbiBvciBtb2RpZmljYXRpb24gb2YgZnVuY3Rpb25zIGxpa2UgYGdldF9wb2ludGVyX3RhYmxlYCwgYGZyZWVfcG9pbnRlcl90YWJsZWAsIGBfX3RsYl9yZW1vdmVfdGFibGVgLCBgcHRlX2ZyZWVgLCBgdGxiX3JlbW92ZV90YWJsZWAsIGFuZCBgemFwX2RlcG9zaXRlZF90YWJsZWAgYWNyb3NzIHRoZXNlIHZhcmlvdXMgZmlsZXMuIFRoZSBpbmxpbmluZyBvZiBgemFwX2RlcG9zaXRlZF90YWJsZWAgaW50byBmdW5jdGlvbnMgbGlrZSBgemFwX2h1Z2VfcG1kYCBpcyBhbHNvIHdvcnRoIG5vdGluZy5cblxuSSdtIGFsc28gcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIGBDT05GSUdfTU1VYCBpcywgYXMgZXhwZWN0ZWQsIGEgYmFzZSByZXF1aXJlbWVudC4gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgY29tZXMgaW50byBwbGF5IGZvciB0aGUgaHVnZSBtZW1vcnkgemFwcGluZyBhbmQgdGhlIGRlZmVycmVkIFBURSBmcmVlaW5nLiBJIHRoZW4gY2hlY2sgYENPTkZJR19QVF9SRUNMQUlNYCBhbmQgaXRzIGRlcGVuZGVuY3kgb24gYE1NVSBcdTAwMjZcdTAwMjYgIUhBVkVfQVJDSF9UTEJfUkVNT1ZFX1RBQkxFYC5cblxuTm93LCBmb3IgdGhlIGtleSBmaW5kaW5ncyB0byBiZSByZXBvcnRlZC4gVGhpcyBwYXRjaCBpcyBtYWtpbmcgcGFnZSB0YWJsZSBmcmVlaW5nIHVuY29uZGl0aW9uYWxseSBkZWZlcnJlZCB2aWEgUkNVIGFjcm9zcyAqYWxsKiBhcmNoaXRlY3R1cmVzLiBJdCBkb2VzIHRoaXMgYnkgcmVtb3ZpbmcgdGhlIGBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFYCBhbmQgYE1NVV9HQVRIRVJfVEFCTEVfRlJFRWAgS2NvbmZpZyBmbGFncywgdGh1cyBtYWtpbmcgUkNVIHRhYmxlIGJhdGNoaW5nIGEgZ2VuZXJpYyBwcm9jZXNzLiBUaGlzIGNoYW5nZSBhbHNvIHVwZGF0ZXMgYHphcF9kZXBvc2l0ZWRfdGFibGUoKWAgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgIHRvIGxldmVyYWdlIHRoZSBkZWZlcnJlZCBSQ1UgYHB0ZV9mcmVlX2RlZmVyKClgIGZ1bmN0aW9uLCBhbmQgdGhlbiBhZGFwdHMgdmFyaW91cyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgcGFnZSB0YWJsZSBmcmVlaW5nIGltcGxlbWVudGF0aW9ucywgbGlrZSB0aG9zZSBvbiBgbTY4a2AsIGBzcGFyY2AsIGBzaGAsIGBhcmNgLCBhbmQgYHh0ZW5zYWAuXG5cbk15IGBzZXQtcmVzdWx0c2AgZGF0YSB3aWxsIGluY2x1ZGU6IGBXb3J0aEZ1enppbmdgOiB0cnVlIChiZWNhdXNlIG9mIHRoZXNlIGNvcmUgY2hhbmdlcyk7IGEgY29uY2lzZSBgUmVhc29uaW5nYCBiYXNlZCBvbiB0aGUgYWJvdmU7IHRoZSBmb2xsb3dpbmcgYEZvY3VzU3ltYm9sc2A6IGBbXCJ0bGJfcmVtb3ZlX3RhYmxlXCIsIFwicHRlX2ZyZWVfZGVmZXJcIiwgXCJ6YXBfaHVnZV9wbWRcIiwgXCJ0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfcmN1XCIsIFwidGxiX3JlbW92ZV90YWJsZV9zeW5jX29uZVwiXWA7IGFuZCBgRW5hYmxlQ29uZmlnc2A6IGBbXCJNTVVcIiwgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXWAuXG5cbkZpbmFsbHksIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIGVuc3VyZSB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBjb3JyZWN0OiBFbmFibGVDb25maWdzIHdpdGhvdXQgdGhlIGBDT05GSUdfYCBwcmVmaXg7IEZvY3VzU3ltYm9scyBhcmUgbm9uLXN0YXRpYyBhbmQgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzOyBhbmQgdGhhdCBgc2V0LXJlc3VsdHNgIGlzIGNhbGxlZCBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuIEV2ZXJ5dGhpbmcgY2hlY2tzIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg2NTQsIk91dHB1dFRva2VucyI6MjAyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjQ0OjQzLjM3NzU5MTM1OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyMTU1NDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNTVVcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGxiX3JlbW92ZV90YWJsZVwiLFxuICAgIFwicHRlX2ZyZWVfZGVmZXJcIixcbiAgICBcInphcF9odWdlX3BtZFwiLFxuICAgIFwidGxiX3JlbW92ZV90YWJsZV9zeW5jX3JjdVwiLFxuICAgIFwidGxiX3JlbW92ZV90YWJsZV9zeW5jX29uZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVuaWZpZXMgYW5kIGVuZm9yY2VzIFJDVS1kZWZlcnJlZCBmcmVlaW5nIGZvciBwYWdlIHRhYmxlIHBhZ2VzIGFjcm9zcyBhbGwgYXJjaGl0ZWN0dXJlcyBieSByZW1vdmluZyBjb25kaXRpb25hbCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgc3RhbmRhcmRpemluZyBvbiB0bGJfcmVtb3ZlX3RhYmxlKCkuIEl0IGFsc28gbW9kaWZpZXMgVEhQIGRlcG9zaXRlZCB0YWJsZSBoYW5kbGluZyBpbiBtbS9odWdlX21lbW9yeS5jIHRvIHVzZSBwdGVfZnJlZV9kZWZlcigpIHVuZGVyIFJDVSBhbmQgdXBkYXRlcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgcGFnZSB0YWJsZSByZW1vdmFsIHJvdXRpbmVzLiBUaGVzZSBjb3JlIE1NIGxvZ2ljIGNoYW5nZXMgYWZmZWN0IFRMQiBnYXRoZXJpbmcsIHBhZ2UgdGFibGUgdGVhcmluZyBkb3duLCBhbmQgbWVtb3J5IHJlY2xhaW0gcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTU1VXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRsYl9yZW1vdmVfdGFibGVcIixcbiAgICBcInB0ZV9mcmVlX2RlZmVyXCIsXG4gICAgXCJ6YXBfaHVnZV9wbWRcIixcbiAgICBcInRsYl9yZW1vdmVfdGFibGVfc3luY19yY3VcIixcbiAgICBcInRsYl9yZW1vdmVfdGFibGVfc3luY19vbmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1bmlmaWVzIGFuZCBlbmZvcmNlcyBSQ1UtZGVmZXJyZWQgZnJlZWluZyBmb3IgcGFnZSB0YWJsZSBwYWdlcyBhY3Jvc3MgYWxsIGFyY2hpdGVjdHVyZXMgYnkgcmVtb3ZpbmcgY29uZGl0aW9uYWwgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHN0YW5kYXJkaXppbmcgb24gdGxiX3JlbW92ZV90YWJsZSgpLiBJdCBhbHNvIG1vZGlmaWVzIFRIUCBkZXBvc2l0ZWQgdGFibGUgaGFuZGxpbmcgaW4gbW0vaHVnZV9tZW1vcnkuYyB0byB1c2UgcHRlX2ZyZWVfZGVmZXIoKSB1bmRlciBSQ1UgYW5kIHVwZGF0ZXMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHBhZ2UgdGFibGUgcmVtb3ZhbCByb3V0aW5lcy4gVGhlc2UgY29yZSBNTSBsb2dpYyBjaGFuZ2VzIGFmZmVjdCBUTEIgZ2F0aGVyaW5nLCBwYWdlIHRhYmxlIHRlYXJpbmcgZG93biwgYW5kIG1lbW9yeSByZWNsYWltIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo0NDo0My40NDk3NTM0OTVaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzE5OTgxMTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6NDQ6NDMuNDUwMjMzMjY1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTQzMTk0OTgzMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBzdGFuZGFyZGl6ZXMgcGFnZSB0YWJsZSBmcmVlaW5nIGFjcm9zcyBhcmNoaXRlY3R1cmVzIHRvIHVzZSBSQ1UtZGVmZXJyZWQgZnJlZWluZyAodW5pZnlpbmcgTU1VIGdhdGhlciBhbmQgcmVtb3ZpbmcgQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgLyBDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFIGNvbmZpZ3MpLiBJdCBhZGFwdHMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHBhZ2UgdGFibGUgZnJlZWluZyByb3V0aW5lcyAoZS5nLiBtNjhrLCBhcmMsIG1pY3JvYmxhemUsIHNoLCBzcGFyYywgeHRlbnNhKSB0byB1c2UgdGxiX3JlbW92ZV9wdGRlc2MgLyB0bGJfcmVtb3ZlX3RhYmxlLCBhZGRzIHNwaW5sb2NrcyBmb3IgcHRhYmxlIG1hbmFnZW1lbnQgb24gbTY4ay9zcGFyYywgYW5kIHVwZGF0ZXMgZGVmZXJyZWQgZnJlZWluZyBpbiBUSFAgKHB0ZV9mcmVlX2RlZmVyKS5cXG5cXG5UaGVzZSBjaGFuZ2VzIGRlYWwgc3RyaWN0bHkgd2l0aCBNTVUgZ2F0aGVyIGxpZmVjeWNsZSwgUkNVIGdyYWNlIHBlcmlvZHMgZm9yIHBhZ2UgdGFibGUgbWVtb3J5LCBhbmQgc3luY2hyb25pemF0aW9uIG9mIHBhZ2UgdGFibGUgZnJlZWluZyB2cyBsb2NrbGVzcy9SQ1UgcGFnZSB0YWJsZSB3YWxrZXJzLiBQb3RlbnRpYWwgYnVncyBpbiB0aGVzZSBjaGFuZ2VzIHdvdWxkIG1hbmlmZXN0IGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgY29uY3VycmVuY3kgcmFjZXMsIG9yIGRlYWRsb2Nrc+KAlHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCByZWFkcy9jb3BpZXMgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyOGU4ZTIyZmIyZjkyMmE1ZDk4YWMyNzJjMDRhMzlmYjVkMGE3ZWUxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMSAyMzo0Mzo1MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0XG5pbmRleCBhNzI5NmYyNTE3OTljLi4xZTY1YjEzOWYzNTU5IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdFxuQEAgLTUzNyw2ICs1MzcsMTIgQEAgV2UgZXN0YWJsaXNoIGJhc2ljIGxvY2tpbmcgcnVsZXMgd2hlbiBpbnRlcmFjdGluZyB3aXRoIHBhZ2UgdGFibGVzOlxuICogV2hlbiBjaGFuZ2luZyBhIHBhZ2UgdGFibGUgZW50cnkgdGhlIHBhZ2UgdGFibGUgbG9jayBmb3IgdGhhdCBwYWdlIHRhYmxlXG4gICAqKm11c3QqKiBiZSBoZWxkLCBleGNlcHQgaWYgeW91IGNhbiBzYWZlbHkgYXNzdW1lIG5vYm9keSBjYW4gYWNjZXNzIHRoZSBwYWdlXG4gICB0YWJsZXMgY29uY3VycmVudGx5IChzdWNoIGFzIG9uIGludm9jYXRpb24gb2YgOmM6ZnVuYzpgIWZyZWVfcGd0YWJsZXNgKS5cbisqIFBhZ2UgdGFibGVzIG1heSBiZSAqd2Fsa2VkKiB1bmRlciBSQ1UgYWxvbmUsIGFzIHBhZ2UgdGFibGVzIGFyZSBmcmVlZCBvbmx5XG4rICBhZnRlciBhbiBSQ1UgZ3JhY2UgcGVyaW9kIGhhcyBlbGFwc2VkLiBIb3dldmVyLCBhbnkgZW50cnkgZm91bmQgbXVzdCBiZVxuKyAgcmV2YWxpZGF0ZWQgYWZ0ZXIgdGhlIHBhZ2UgdGFibGUgbG9jayBpcyB0YWtlbiAoc3VjaCBhcyB0aGVcbisgIDpjOmZ1bmM6YCFwbWRfc2FtZWAgcmVjaGVjayBwZXJmb3JtZWQgYnkgOmM6ZnVuYzpgIXB0ZV9vZmZzZXRfbWFwX2xvY2tgKVxuKyAgYmVmb3JlIGl0IGlzIGFjdGVkIHVwb24uIENoYW5naW5nIGFuIGVudHJ5IGFsd2F5cyByZXF1aXJlcyB0aGUgcGFnZSB0YWJsZVxuKyAgbG9jay5cbiAqIFJlYWRzIGZyb20gYW5kIHdyaXRlcyB0byBwYWdlIHRhYmxlIGVudHJpZXMgbXVzdCBiZSAqYXBwcm9wcmlhdGVseSpcbiAgIGF0b21pYy4gU2VlIHRoZSBzZWN0aW9uIG9uIGF0b21pY2l0eSBiZWxvdyBmb3IgZGV0YWlscy5cbiAqIFBvcHVsYXRpbmcgcHJldmlvdXNseSBlbXB0eSBlbnRyaWVzIHJlcXVpcmVzIHRoYXQgdGhlIG1tYXAgb3IgVk1BIGxvY2tzIGFyZVxuZGlmZiAtLWdpdCBhL2FyY2gvS2NvbmZpZyBiL2FyY2gvS2NvbmZpZ1xuaW5kZXggNDVjNjU3NzcyMzYyMy4uNmY3NTE2OTE2Nzk3ZSAxMDA2NDRcbi0tLSBhL2FyY2gvS2NvbmZpZ1xuKysrIGIvYXJjaC9LY29uZmlnXG5AQCAtNTI2LDEzICs1MjYsNiBAQCBjb25maWcgSEFWRV9BUkNIX0pVTVBfTEFCRUxcbiBjb25maWcgSEFWRV9BUkNIX0pVTVBfTEFCRUxfUkVMQVRJVkVcbiBcdGJvb2xcbiBcbi1jb25maWcgTU1VX0dBVEhFUl9UQUJMRV9GUkVFXG4tXHRib29sXG4tXG4tY29uZmlnIE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcbi1cdGJvb2xcbi1cdHNlbGVjdCBNTVVfR0FUSEVSX1RBQkxFX0ZSRUVcbi1cbiBjb25maWcgTU1VX0dBVEhFUl9QQUdFX1NJWkVcbiBcdGJvb2xcbiBcbkBAIC01NDgsNyArNTQxLDYgQEAgY29uZmlnIE1NVV9HQVRIRVJfTUVSR0VfVk1BU1xuIFxuIGNvbmZpZyBNTVVfR0FUSEVSX05PX0dBVEhFUlxuIFx0Ym9vbFxuLVx0ZGVwZW5kcyBvbiBNTVVfR0FUSEVSX1RBQkxFX0ZSRUVcbiBcbiBjb25maWcgQVJDSF9XQU5UX0lSUVNfT0ZGX0FDVElWQVRFX01NXG4gXHRib29sXG5kaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9LY29uZmlnIGIvYXJjaC9hbHBoYS9LY29uZmlnXG5pbmRleCBlNTNlZjJkODg0NjM2Li45MDYzYzdiZGE0ZTQxIDEwMDY0NFxuLS0tIGEvYXJjaC9hbHBoYS9LY29uZmlnXG4rKysgYi9hcmNoL2FscGhhL0tjb25maWdcbkBAIC00Miw3ICs0Miw2IEBAIGNvbmZpZyBBTFBIQVxuIFx0c2VsZWN0IEFSQ0hfU1RBQ0tXQUxLXG4gXHRzZWxlY3QgQ1BVX05PX0VGRklDSUVOVF9GRlMgaWYgIUFMUEhBX0VWNjdcbiBcdHNlbGVjdCBNTVVfR0FUSEVSX05PX1JBTkdFXG4tXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxuIFx0c2VsZWN0IFNQQVJTRU1FTV9FWFRSRU1FIGlmIFNQQVJTRU1FTVxuIFx0c2VsZWN0IFpPTkVfRE1BXG4gXHRzZWxlY3QgVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2MuaCBiL2FyY2gvYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxuaW5kZXggZGZhZTA3MGZlOGQ1NS4uOWI2YzM3ZjkyZTk3ZiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxuKysrIGIvYXJjaC9hcmMvaW5jbHVkZS9hc20vcGdhbGxvYy5oXG5AQCAtNzIsNyArNzIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcDRkX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwNGRfdCAqcDRkcCwgcHVkX3QgKnB1ZHApXG4gXHRzZXRfcDRkKHA0ZHAsIF9fcDRkKCh1bnNpZ25lZCBsb25nKXB1ZHApKTtcbiB9XG4gXG4tI2RlZmluZSBfX3B1ZF9mcmVlX3RsYih0bGIsIHBtZCwgYWRkcikgIHB1ZF9mcmVlKCh0bGIpLVx1MDAzZW1tLCBwbWQpXG4rI2RlZmluZSBfX3B1ZF9mcmVlX3RsYih0bGIsIHBtZCwgYWRkcikgIHRsYl9yZW1vdmVfcHRkZXNjKCh0bGIpLCB2aXJ0X3RvX3B0ZGVzYyhwbWQpKVxuIFxuICNlbmRpZlxuIFxuQEAgLTgzLDEwICs4MywxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHVkX3BvcHVsYXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwdWRfdCAqcHVkcCwgcG1kX3QgKnBtZHApXG4gXHRzZXRfcHVkKHB1ZHAsIF9fcHVkKCh1bnNpZ25lZCBsb25nKXBtZHApKTtcbiB9XG4gXG4tI2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIsIHBtZCwgYWRkcikgIHBtZF9mcmVlKCh0bGIpLVx1MDAzZW1tLCBwbWQpXG4rI2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIsIHBtZCwgYWRkcikgIHRsYl9yZW1vdmVfcHRkZXNjKCh0bGIpLCB2aXJ0X3RvX3B0ZGVzYyhwbWQpKVxuIFxuICNlbmRpZlxuIFxuLSNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLCBwdGUsIGFkZHIpICBwdGVfZnJlZSgodGxiKS1cdTAwM2VtbSwgcHRlKVxuKyNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLCBwdGUsIGFkZHIpICB0bGJfcmVtb3ZlX3B0ZGVzYygodGxiKSwgcGFnZV9wdGRlc2MocHRlKSlcbiBcbiAjZW5kaWYgLyogX0FTTV9BUkNfUEdBTExPQ19IICovXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm0vS2NvbmZpZyBiL2FyY2gvYXJtL0tjb25maWdcbmluZGV4IDQwOGFhNThhMmE1YmIuLjBjYzI4OWE3MTg0YWIgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybS9LY29uZmlnXG4rKysgYi9hcmNoL2FybS9LY29uZmlnXG5AQCAtMTM0LDcgKzEzNCw2IEBAIGNvbmZpZyBBUk1cbiBcdHNlbGVjdCBIQVZFX1BFUkZfUkVHU1xuIFx0c2VsZWN0IEhBVkVfUEVSRl9VU0VSX1NUQUNLX0RVTVBcbiBcdHNlbGVjdCBIQVZFX1BPU0lYX0NQVV9USU1FUlNfVEFTS19XT1JLXG4tXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSBpZiBTTVAgXHUwMDI2XHUwMDI2IEFSTV9MUEFFXG4gXHRzZWxlY3QgSEFWRV9SRUdTX0FORF9TVEFDS19BQ0NFU1NfQVBJXG4gXHRzZWxlY3QgSEFWRV9SU0VRXG4gXHRzZWxlY3QgSEFWRV9SVVNUIGlmIENQVV9MSVRUTEVfRU5ESUFOIFx1MDAyNlx1MDAyNiBDUFVfMzJ2NyBcdTAwMjZcdTAwMjYgIUtBU0FOXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9LY29uZmlnIGIvYXJjaC9hcm02NC9LY29uZmlnXG5pbmRleCAyYmJlZGVkMzNkYTBkLi5iNmMyZGQ4YjI2MTI0IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9LY29uZmlnXG4rKysgYi9hcmNoL2FybTY0L0tjb25maWdcbkBAIC0yMjEsNyArMjIxLDYgQEAgY29uZmlnIEFSTTY0XG4gXHRzZWxlY3QgSEFWRV9SRUxJQUJMRV9TVEFDS1RSQUNFXG4gXHRzZWxlY3QgSEFWRV9QT1NJWF9DUFVfVElNRVJTX1RBU0tfV09SS1xuIFx0c2VsZWN0IEhBVkVfRlVOQ1RJT05fQVJHX0FDQ0VTU19BUElcbi1cdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG4gXHRzZWxlY3QgSEFWRV9SU0VRXG4gXHRzZWxlY3QgSEFWRV9SVVNUIGlmIFJVU1RDX1NVUFBPUlRTX0FSTTY0XG4gXHRzZWxlY3QgSEFWRV9TVEFDS1BST1RFQ1RPUlxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL0tjb25maWcgYi9hcmNoL2xvb25nYXJjaC9LY29uZmlnXG5pbmRleCA5YzVkZWY3MDYyMjIyLi5kMWIyM2RhNDA3Mzc1IDEwMDY0NFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gvS2NvbmZpZ1xuKysrIGIvYXJjaC9sb29uZ2FyY2gvS2NvbmZpZ1xuQEAgLTE4OCw3ICsxODgsNiBAQCBjb25maWcgTE9PTkdBUkNIXG4gXHRzZWxlY3QgSVJRX0xPT05HQVJDSF9DUFVcbiBcdHNlbGVjdCBMT0NLX01NX0FORF9GSU5EX1ZNQVxuIFx0c2VsZWN0IE1NVV9HQVRIRVJfTUVSR0VfVk1BUyBpZiBNTVVcbi1cdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG4gXHRzZWxlY3QgTU9EVUxFU19VU0VfRUxGX1JFTEEgaWYgTU9EVUxFU1xuIFx0c2VsZWN0IE5FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOS1xuIFx0c2VsZWN0IE5FRURfUEVSX0NQVV9QQUdFX0ZJUlNUX0NIVU5LXG5kaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL0tjb25maWcgYi9hcmNoL202OGsvS2NvbmZpZ1xuaW5kZXggMTE4MzVlYjU5ZDk0ZC4uZWI4NGMzYWY5MmMwMiAxMDA2NDRcbi0tLSBhL2FyY2gvbTY4ay9LY29uZmlnXG4rKysgYi9hcmNoL202OGsvS2NvbmZpZ1xuQEAgLTI5LDYgKzI5LDcgQEAgY29uZmlnIE02OEtcbiBcdHNlbGVjdCBIQVZFX0FSQ0hfTElCR0NDX0hcbiBcdHNlbGVjdCBIQVZFX0FSQ0hfU0VDQ09NUFxuIFx0c2VsZWN0IEhBVkVfQVJDSF9TRUNDT01QX0ZJTFRFUlxuK1x0c2VsZWN0IEhBVkVfQVJDSF9UTEJfUkVNT1ZFX1RBQkxFIGlmIE1NVV9NT1RPUk9MQVxuIFx0c2VsZWN0IEhBVkVfQVNNX01PRFZFUlNJT05TXG4gXHRzZWxlY3QgSEFWRV9ERUJVR19CVUdWRVJCT1NFXG4gXHRzZWxlY3QgSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUyBpZiAhQ1BVX0hBU19OT19VTkFMSUdORURcbmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbWNmX3BnYWxsb2MuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tY2ZfcGdhbGxvYy5oXG5pbmRleCBmYzU0NTRkMzdkYTMxLi5iNTNmZjA5NTBkYjJlIDEwMDY0NFxuLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21jZl9wZ2FsbG9jLmhcbisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tY2ZfcGdhbGxvYy5oXG5AQCAtMzksMTAgKzM5LDcgQEAgZXh0ZXJuIGlubGluZSBwbWRfdCAqcG1kX2FsbG9jX2tlcm5lbChwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG4gc3RhdGljIGlubGluZSB2b2lkIF9fcHRlX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHBndGFibGVfdCBwZ3RhYmxlLFxuIFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG4ge1xuLVx0c3RydWN0IHB0ZGVzYyAqcHRkZXNjID0gdmlydF90b19wdGRlc2MocGd0YWJsZSk7XG4tXG4tXHRwYWdldGFibGVfZHRvcihwdGRlc2MpO1xuLVx0cGFnZXRhYmxlX2ZyZWUocHRkZXNjKTtcbitcdHRsYl9yZW1vdmVfcHRkZXNjKHRsYiwgdmlydF90b19wdGRlc2MocGd0YWJsZSkpO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHBndGFibGVfdCBwdGVfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tb3Rvcm9sYV9wZ2FsbG9jLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbW90b3JvbGFfcGdhbGxvYy5oXG5pbmRleCAxMDkxZmIwYWZmYmVlLi5kY2RlNDBlOGI1YzZhIDEwMDY0NFxuLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21vdG9yb2xhX3BnYWxsb2MuaFxuKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21vdG9yb2xhX3BnYWxsb2MuaFxuQEAgLTE3LDYgKzE3LDcgQEAgZW51bSBtNjhrX3RhYmxlX3R5cGVzIHtcbiBleHRlcm4gdm9pZCBpbml0X3BvaW50ZXJfdGFibGUodm9pZCAqdGFibGUsIGludCB0eXBlKTtcbiBleHRlcm4gdm9pZCAqZ2V0X3BvaW50ZXJfdGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCB0eXBlKTtcbiBleHRlcm4gaW50IGZyZWVfcG9pbnRlcl90YWJsZSh2b2lkICp0YWJsZSwgaW50IHR5cGUpO1xuK2V4dGVybiB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZSh2b2lkICp0YWJsZSk7XG4gXG4gLypcbiAgKiBBbGxvY2F0ZSBhbmQgZnJlZSBwYWdlIHRhYmxlcy4gVGhlIHh4eF9rZXJuZWwoKSB2ZXJzaW9ucyBhcmVcbkBAIC00Nyw3ICs0OCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdGVfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHBndGFibGUpXG4gc3RhdGljIGlubGluZSB2b2lkIF9fcHRlX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHBndGFibGVfdCBwZ3RhYmxlLFxuIFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG4ge1xuLVx0ZnJlZV9wb2ludGVyX3RhYmxlKHBndGFibGUsIFRBQkxFX1BURSk7XG4rXHR0bGJfcmVtb3ZlX3RhYmxlKHRsYiwgKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpcGd0YWJsZSB8IFRBQkxFX1BURSkpO1xuIH1cbiBcbiBcbkBAIC02MSwxMCArNjIsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgcG1kX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQpXG4gXHRyZXR1cm4gZnJlZV9wb2ludGVyX3RhYmxlKHBtZCwgVEFCTEVfUE1EKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgX19wbWRfZnJlZV90bGIoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgcG1kX3QgKnBtZCxcbi1cdFx0XHRcdCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG4rc3RhdGljIGlubGluZSB2b2lkIF9fcG1kX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHBtZF90ICpwbWQsXG4rXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcbiB7XG4tXHRyZXR1cm4gZnJlZV9wb2ludGVyX3RhYmxlKHBtZCwgVEFCTEVfUE1EKTtcbitcdHRsYl9yZW1vdmVfdGFibGUodGxiLCAodm9pZCAqKSgodW5zaWduZWQgbG9uZylwbWQgfCBUQUJMRV9QTUQpKTtcbiB9XG4gXG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21tL21vdG9yb2xhLmMgYi9hcmNoL202OGsvbW0vbW90b3JvbGEuY1xuaW5kZXggYjMwYWE2OWE3M2E2YS4uZmZjODA0ODM0NDBiYyAxMDA2NDRcbi0tLSBhL2FyY2gvbTY4ay9tbS9tb3Rvcm9sYS5jXG4rKysgYi9hcmNoL202OGsvbW0vbW90b3JvbGEuY1xuQEAgLTIwLDYgKzIwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1ibG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZ2ZwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vc2V0dXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFx1MDAzZVxuQEAgLTEwMyw2ICsxMDQsOCBAQCBzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBwdGFibGVfbGlzdFszXSA9IHtcbiBcdExJU1RfSEVBRF9JTklUKHB0YWJsZV9saXN0WzJdKSxcbiB9O1xuIFxuK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socHRhYmxlX2xvY2spO1xuK1xuICNkZWZpbmUgUERfUFRBQkxFKHB0ZGVzYykgKChwdGFibGVfZGVzYyAqKVx1MDAyNih2aXJ0X3RvX3B0ZGVzYygodm9pZCAqKShwdGRlc2MpKS1cdTAwM2VwdF9saXN0KSlcbiAjZGVmaW5lIFBEX1BUREVTQyhwdGFibGUpIChsaXN0X2VudHJ5KHB0YWJsZSwgc3RydWN0IHB0ZGVzYywgcHRfbGlzdCkpXG4gI2RlZmluZSBQRF9NQVJLQklUUyhkcCkgKCoodW5zaWduZWQgaW50ICopXHUwMDI2UERfUFRERVNDKGRwKS1cdTAwM2VwdF9pbmRleClcbkBAIC0xMzksNTIgKzE0Miw2NiBAQCB2b2lkIF9faW5pdCBpbml0X3BvaW50ZXJfdGFibGUodm9pZCAqdGFibGUsIGludCB0eXBlKVxuIFx0cmV0dXJuO1xuIH1cbiBcbi12b2lkICpnZXRfcG9pbnRlcl90YWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IHR5cGUpXG4rLypcbisgKiBGb3IgYSBwb2ludGVyIHRhYmxlIGZvciBhIHVzZXIgcHJvY2VzcyBhZGRyZXNzIHNwYWNlLCBhXG4rICogdGFibGUgaXMgdGFrZW4gZnJvbSBhIHB0ZGVzYyBhbGxvY2F0ZWQgZm9yIHRoZSBwdXJwb3NlLiAgRWFjaFxuKyAqIHB0ZGVzYyBjYW4gaG9sZCA4IHBvaW50ZXIgdGFibGVzLiAgVGhlIHB0ZGVzYyBpcyByZW1hcHBlZCBpblxuKyAqIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSB0byBiZSBub25jYWNoZWFibGUuXG4rICovXG4rc3RhdGljIHZvaWQgKmFkZF9wb2ludGVyX3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgdHlwZSlcbiB7XG4tXHRwdGFibGVfZGVzYyAqZHAgPSBwdGFibGVfbGlzdFt0eXBlXS5uZXh0O1xuLVx0dW5zaWduZWQgaW50IG1hc2sgPSBsaXN0X2VtcHR5KFx1MDAyNnB0YWJsZV9saXN0W3R5cGVdKSA/IDAgOiBQRF9NQVJLQklUUyhkcCk7XG4tXHR1bnNpZ25lZCBpbnQgdG1wLCBvZmY7XG4rXHRzdHJ1Y3QgcHRkZXNjICpwdGRlc2M7XG4rXHRwdGFibGVfZGVzYyAqbmV3O1xuK1x0dm9pZCAqcHRfYWRkcjtcbiBcbi1cdC8qXG4tXHQgKiBGb3IgYSBwb2ludGVyIHRhYmxlIGZvciBhIHVzZXIgcHJvY2VzcyBhZGRyZXNzIHNwYWNlLCBhXG4tXHQgKiB0YWJsZSBpcyB0YWtlbiBmcm9tIGEgcHRkZXNjIGFsbG9jYXRlZCBmb3IgdGhlIHB1cnBvc2UuICBFYWNoXG4tXHQgKiBwdGRlc2MgY2FuIGhvbGQgOCBwb2ludGVyIHRhYmxlcy4gIFRoZSBwdGRlc2MgaXMgcmVtYXBwZWQgaW5cbi1cdCAqIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSB0byBiZSBub25jYWNoZWFibGUuXG4tXHQgKi9cbi1cdGlmIChtYXNrID09IDApIHtcbi1cdFx0c3RydWN0IHB0ZGVzYyAqcHRkZXNjO1xuLVx0XHRwdGFibGVfZGVzYyAqbmV3O1xuLVx0XHR2b2lkICpwdF9hZGRyO1xuLVxuLVx0XHRwdGRlc2MgPSBwYWdldGFibGVfYWxsb2MoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8sIDApO1xuLVx0XHRpZiAoIXB0ZGVzYylcbi1cdFx0XHRyZXR1cm4gTlVMTDtcbi1cbi1cdFx0cHRfYWRkciA9IHB0ZGVzY19hZGRyZXNzKHB0ZGVzYyk7XG4tXG4tXHRcdHN3aXRjaCAodHlwZSkge1xuLVx0XHRjYXNlIFRBQkxFX1BURTpcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIG02OGsgZG9lc24ndCBoYXZlIFNQTElUX1BURV9QVExPQ0tTIGZvciBub3QgaGF2aW5nXG4tXHRcdFx0ICogU01QLlxuLVx0XHRcdCAqL1xuLVx0XHRcdHBhZ2V0YWJsZV9wdGVfY3RvcihtbSwgcHRkZXNjKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBUQUJMRV9QTUQ6XG4tXHRcdFx0cGFnZXRhYmxlX3BtZF9jdG9yKG1tLCBwdGRlc2MpO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIFRBQkxFX1BHRDpcbi1cdFx0XHRwYWdldGFibGVfcGdkX2N0b3IocHRkZXNjKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuK1x0cHRkZXNjID0gcGFnZXRhYmxlX2FsbG9jKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPLCAwKTtcbitcdGlmICghcHRkZXNjKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdHB0X2FkZHIgPSBwdGRlc2NfYWRkcmVzcyhwdGRlc2MpO1xuK1xuK1x0c3dpdGNoICh0eXBlKSB7XG4rXHRjYXNlIFRBQkxFX1BURTpcbitcdFx0LypcbitcdFx0ICogbTY4ayBkb2Vzbid0IGhhdmUgU1BMSVRfUFRFX1BUTE9DS1MgZm9yIG5vdCBoYXZpbmdcbitcdFx0ICogU01QLlxuK1x0XHQgKi9cbitcdFx0cGFnZXRhYmxlX3B0ZV9jdG9yKG1tLCBwdGRlc2MpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgVEFCTEVfUE1EOlxuK1x0XHRwYWdldGFibGVfcG1kX2N0b3IobW0sIHB0ZGVzYyk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBUQUJMRV9QR0Q6XG4rXHRcdHBhZ2V0YWJsZV9wZ2RfY3RvcihwdGRlc2MpO1xuK1x0XHRicmVhaztcbitcdH1cbitcbitcdG1tdV9wYWdlX2N0b3IocHRfYWRkcik7XG4rXG4rXHRuZXcgPSBQRF9QVEFCTEUocHRfYWRkcik7XG4gXG4tXHRcdG1tdV9wYWdlX2N0b3IocHRfYWRkcik7XG4rXHRQRF9NQVJLQklUUyhuZXcpID0gcHRhYmxlX21hc2sodHlwZSkgLSAxO1xuK1x0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2lycXNhdmUsIFx1MDAyNnB0YWJsZV9sb2NrKVxuK1x0XHRsaXN0X2FkZChuZXcsIFx1MDAyNnB0YWJsZV9saXN0W3R5cGVdKTtcbiBcbi1cdFx0bmV3ID0gUERfUFRBQkxFKHB0X2FkZHIpO1xuLVx0XHRQRF9NQVJLQklUUyhuZXcpID0gcHRhYmxlX21hc2sodHlwZSkgLSAxO1xuLVx0XHRsaXN0X2FkZF90YWlsKG5ldywgZHApO1xuK1x0cmV0dXJuIChwbWRfdCAqKXB0X2FkZHI7XG4rfVxuK1xuK3ZvaWQgKmdldF9wb2ludGVyX3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgdHlwZSlcbit7XG4rXHR1bnNpZ25lZCBpbnQgdG1wLCBvZmY7XG4rXHR1bnNpZ25lZCBsb25nIG1hc2s7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1x0cHRhYmxlX2Rlc2MgKmRwO1xuK1x0dm9pZCAqcmV0O1xuIFxuLVx0XHRyZXR1cm4gKHBtZF90ICopcHRfYWRkcjtcbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnB0YWJsZV9sb2NrLCBmbGFncyk7XG4rXHRkcCA9IHB0YWJsZV9saXN0W3R5cGVdLm5leHQ7XG4rXHRtYXNrID0gbGlzdF9lbXB0eShcdTAwMjZwdGFibGVfbGlzdFt0eXBlXSkgPyAwIDogUERfTUFSS0JJVFMoZHApO1xuK1xuK1x0aWYgKG1hc2sgPT0gMCkge1xuK1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnB0YWJsZV9sb2NrLCBmbGFncyk7XG4rXHRcdHJldHVybiBhZGRfcG9pbnRlcl90YWJsZShtbSwgdHlwZSk7XG4gXHR9XG4gXG4gXHRmb3IgKHRtcCA9IDEsIG9mZiA9IDA7IChtYXNrIFx1MDAyNiB0bXApID09IDA7IHRtcCBcdTAwM2NcdTAwM2M9IDEsIG9mZiArPSBwdGFibGVfc2l6ZSh0eXBlKSlcbkBAIC0xOTQsNyArMjExLDEwIEBAIHZvaWQgKmdldF9wb2ludGVyX3RhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgdHlwZSlcbiBcdFx0LyogbW92ZSB0byBlbmQgb2YgbGlzdCAqL1xuIFx0XHRsaXN0X21vdmVfdGFpbChkcCwgXHUwMDI2cHRhYmxlX2xpc3RbdHlwZV0pO1xuIFx0fVxuLVx0cmV0dXJuIHB0ZGVzY19hZGRyZXNzKFBEX1BUREVTQyhkcCkpICsgb2ZmO1xuK1xuK1x0cmV0ID0gcHRkZXNjX2FkZHJlc3MoUERfUFRERVNDKGRwKSkgKyBvZmY7XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnB0YWJsZV9sb2NrLCBmbGFncyk7XG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBpbnQgZnJlZV9wb2ludGVyX3RhYmxlKHZvaWQgKnRhYmxlLCBpbnQgdHlwZSlcbkBAIC0yMDMsNiArMjIzLDkgQEAgaW50IGZyZWVfcG9pbnRlcl90YWJsZSh2b2lkICp0YWJsZSwgaW50IHR5cGUpXG4gXHR1bnNpZ25lZCBsb25nIHB0YWJsZSA9ICh1bnNpZ25lZCBsb25nKXRhYmxlO1xuIFx0dW5zaWduZWQgbG9uZyBwdF9hZGRyID0gcHRhYmxlIFx1MDAyNiBQQUdFX01BU0s7XG4gXHR1bnNpZ25lZCBpbnQgbWFzayA9IDFVIFx1MDAzY1x1MDAzYyAoKHB0YWJsZSAtIHB0X2FkZHIpL3B0YWJsZV9zaXplKHR5cGUpKTtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwdGFibGVfbG9jaywgZmxhZ3MpO1xuIFxuIFx0ZHAgPSBQRF9QVEFCTEUocHRfYWRkcik7XG4gXHRpZiAoUERfTUFSS0JJVFMgKGRwKSBcdTAwMjYgbWFzaylcbkBAIC0yMTMsNiArMjM2LDggQEAgaW50IGZyZWVfcG9pbnRlcl90YWJsZSh2b2lkICp0YWJsZSwgaW50IHR5cGUpXG4gXHRpZiAoUERfTUFSS0JJVFMoZHApID09IHB0YWJsZV9tYXNrKHR5cGUpKSB7XG4gXHRcdC8qIGFsbCB0YWJsZXMgaW4gcHRkZXNjIGFyZSBmcmVlLCBmcmVlIHB0ZGVzYyAqL1xuIFx0XHRsaXN0X2RlbChkcCk7XG4rXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cHRhYmxlX2xvY2ssIGZsYWdzKTtcbitcbiBcdFx0bW11X3BhZ2VfZHRvcigodm9pZCAqKXB0X2FkZHIpO1xuIFx0XHRwYWdldGFibGVfZHRvcl9mcmVlKHZpcnRfdG9fcHRkZXNjKCh2b2lkICopcHRfYWRkcikpO1xuIFx0XHRyZXR1cm4gMTtcbkBAIC0yMjMsOSArMjQ4LDIxIEBAIGludCBmcmVlX3BvaW50ZXJfdGFibGUodm9pZCAqdGFibGUsIGludCB0eXBlKVxuIFx0XHQgKi9cbiBcdFx0bGlzdF9tb3ZlKGRwLCBcdTAwMjZwdGFibGVfbGlzdFt0eXBlXSk7XG4gXHR9XG4rXG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnB0YWJsZV9sb2NrLCBmbGFncyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rdm9pZCBfX3RsYl9yZW1vdmVfdGFibGUodm9pZCAqdGFibGUpXG4re1xuK1x0LyogVGhlIGJvdHRvbSAyIGJpdHMgYXJlIHVzZWQgdG8gZW5jb2RlIHBhZ2UgdGFibGUgdHlwZS4gKi9cbitcdGNvbnN0IHVuc2lnbmVkIGxvbmcgZW5jb2RlZCA9ICh1bnNpZ25lZCBsb25nKXRhYmxlO1xuK1x0dm9pZCAqYWRkciA9ICh2b2lkICopKGVuY29kZWQgXHUwMDI2IH4zVUwpO1xuK1x0Y29uc3QgaW50IHR5cGUgPSBlbmNvZGVkIFx1MDAyNiAzO1xuK1xuK1x0ZnJlZV9wb2ludGVyX3RhYmxlKGFkZHIsIHR5cGUpO1xuK31cbitcbiAvKiBzaXplIG9mIG1lbW9yeSBhbHJlYWR5IG1hcHBlZCBpbiBoZWFkLlMgKi9cbiBleHRlcm4gX19pbml0ZGF0YSB1bnNpZ25lZCBsb25nIG02OGtfaW5pdF9tYXBwZWRfc2l6ZTtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcGdhbGxvYy5oIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxuaW5kZXggMDg0YThhMGRjMjM5NS4uZmZlZTZhMDA5MjE5YSAxMDA2NDRcbi0tLSBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcbisrKyBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wZ2FsbG9jLmhcbkBAIC0yNSw3ICsyNSw3IEBAIGV4dGVybiB2b2lkIF9fYmFkX3B0ZShwbWRfdCAqcG1kKTtcbiBcbiBleHRlcm4gcHRlX3QgKnB0ZV9hbGxvY19vbmVfa2VybmVsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcbiBcbi0jZGVmaW5lIF9fcHRlX2ZyZWVfdGxiKHRsYiwgcHRlLCBhZGRyKVx0cHRlX2ZyZWUoKHRsYiktXHUwMDNlbW0sIChwdGUpKVxuKyNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLCBwdGUsIGFkZHIpXHR0bGJfcmVtb3ZlX3B0ZGVzYygodGxiKSwgcGFnZV9wdGRlc2MocHRlKSlcbiBcbiAjZGVmaW5lIHBtZF9wb3B1bGF0ZShtbSwgcG1kLCBwdGUpIFxcXG4gXHRcdFx0KHBtZF92YWwoKihwbWQpKSA9ICh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwdGUpKVxuZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9LY29uZmlnIGIvYXJjaC9taXBzL0tjb25maWdcbmluZGV4IGUyZWI5NjI3YmQxNGMuLmYwYzQzZDExOGNhMDAgMTAwNjQ0XG4tLS0gYS9hcmNoL21pcHMvS2NvbmZpZ1xuKysrIGIvYXJjaC9taXBzL0tjb25maWdcbkBAIC05Nyw3ICs5Nyw2IEBAIGNvbmZpZyBNSVBTXG4gXHRzZWxlY3QgSVJRX0ZPUkNFRF9USFJFQURJTkdcbiBcdHNlbGVjdCBJU0EgaWYgRUlTQVxuIFx0c2VsZWN0IExPQ0tfTU1fQU5EX0ZJTkRfVk1BXG4tXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxuIFx0c2VsZWN0IE1PRFVMRVNfVVNFX0VMRl9SRUwgaWYgTU9EVUxFU1xuIFx0c2VsZWN0IE1PRFVMRVNfVVNFX0VMRl9SRUxBIGlmIE1PRFVMRVMgXHUwMDI2XHUwMDI2IDY0QklUXG4gXHRzZWxlY3QgUEVSRl9VU0VfVk1BTExPQ1xuZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL0tjb25maWcgYi9hcmNoL3BhcmlzYy9LY29uZmlnXG5pbmRleCBkM2FmYWMyZjBkOWJlLi43N2Y2NzAyOGFkODljIDEwMDY0NFxuLS0tIGEvYXJjaC9wYXJpc2MvS2NvbmZpZ1xuKysrIGIvYXJjaC9wYXJpc2MvS2NvbmZpZ1xuQEAgLTgwLDcgKzgwLDYgQEAgY29uZmlnIFBBUklTQ1xuIFx0c2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFNcbiBcdHNlbGVjdCBDUFVfTk9fRUZGSUNJRU5UX0ZGU1xuIFx0c2VsZWN0IFRIUkVBRF9JTkZPX0lOX1RBU0tcbi1cdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG4gXHRzZWxlY3QgTkVFRF9ETUFfTUFQX1NUQVRFXG4gXHRzZWxlY3QgTkVFRF9TR19ETUFfTEVOR1RIXG4gXHRzZWxlY3QgSEFWRV9BUkNIX0tHREJcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnXG5pbmRleCAyNTgwZTI3ZTQzMjg3Li4wNzY3Y2ZjYmFhNDIyIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL0tjb25maWdcbisrKyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnXG5AQCAtMzA3LDcgKzMwNyw2IEBAIGNvbmZpZyBQUENcbiBcdHNlbGVjdCBLQVNBTl9WTUFMTE9DXHRcdFx0aWYgS0FTQU4gXHUwMDI2XHUwMDI2IEVYRUNNRU1cbiBcdHNlbGVjdCBMT0NLX01NX0FORF9GSU5EX1ZNQVxuIFx0c2VsZWN0IE1NVV9HQVRIRVJfUEFHRV9TSVpFXG4tXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxuIFx0c2VsZWN0IEhBVkVfQVJDSF9UTEJfUkVNT1ZFX1RBQkxFXG4gXHRzZWxlY3QgTU1VX0dBVEhFUl9NRVJHRV9WTUFTXG4gXHRzZWxlY3QgTU1VX0xBWllfVExCX1NIT09URE9XTlx0XHRpZiBQUENfQk9PSzNTXzY0XG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9LY29uZmlnIGIvYXJjaC9yaXNjdi9LY29uZmlnXG5pbmRleCA1MDVlZWQ0YWY5MzJiLi43NzQxYTQyODc0OTgxIDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9LY29uZmlnXG4rKysgYi9hcmNoL3Jpc2N2L0tjb25maWdcbkBAIC0yMDgsNyArMjA4LDYgQEAgY29uZmlnIFJJU0NWXG4gXHRzZWxlY3QgSVJRX0ZPUkNFRF9USFJFQURJTkdcbiBcdHNlbGVjdCBLQVNBTl9WTUFMTE9DIGlmIEtBU0FOXG4gXHRzZWxlY3QgTE9DS19NTV9BTkRfRklORF9WTUFcbi1cdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFIGlmIFNNUCBcdTAwMjZcdTAwMjYgTU1VXG4gXHRzZWxlY3QgTU9EVUxFU19VU0VfRUxGX1JFTEEgaWYgTU9EVUxFU1xuIFx0c2VsZWN0IE9GXG4gXHRzZWxlY3QgT0ZfRUFSTFlfRkxBVFRSRUVcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnXG5pbmRleCBiODhiODUwNDIxMzY5Li5hMzQzNzZjMDVmNmUzIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL0tjb25maWdcbisrKyBiL2FyY2gvczM5MC9LY29uZmlnXG5AQCAtMjY3LDcgKzI2Nyw2IEBAIGNvbmZpZyBTMzkwXG4gXHRzZWxlY3QgTE9DS19NTV9BTkRfRklORF9WTUFcbiBcdHNlbGVjdCBNTVVfR0FUSEVSX01FUkdFX1ZNQVNcbiBcdHNlbGVjdCBNTVVfR0FUSEVSX05PX0dBVEhFUlxuLVx0c2VsZWN0IE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcbiBcdHNlbGVjdCBNT0RVTEVTX1VTRV9FTEZfUkVMQVxuIFx0c2VsZWN0IE5FRURfRE1BX01BUF9TVEFURVx0aWYgUENJXG4gXHRzZWxlY3QgTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LXG5kaWZmIC0tZ2l0IGEvYXJjaC9zaC9LY29uZmlnIGIvYXJjaC9zaC9LY29uZmlnXG5pbmRleCBkNjBmMWQ1YTk0YzBmLi5mZTg1OWRlZjkxOGNjIDEwMDY0NFxuLS0tIGEvYXJjaC9zaC9LY29uZmlnXG4rKysgYi9hcmNoL3NoL0tjb25maWdcbkBAIC0zMyw2ICszMyw3IEBAIGNvbmZpZyBTVVBFUkhcbiBcdHNlbGVjdCBIQVZFX0FSQ0hfQVVESVRTWVNDQUxMXG4gXHRzZWxlY3QgSEFWRV9BUkNIX0tHREJcbiBcdHNlbGVjdCBIQVZFX0FSQ0hfU0VDQ09NUF9GSUxURVJcbitcdHNlbGVjdCBIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRSBpZiBYMlRMQlxuIFx0c2VsZWN0IEhBVkVfQVJDSF9UUkFDRUhPT0tcbiBcdHNlbGVjdCBIQVZFX0RFQlVHX0JVR1ZFUkJPU0VcbiBcdHNlbGVjdCBIQVZFX0RFQlVHX0tNRU1MRUFLXG5kaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxuaW5kZXggNmZlNzEyM2QzOGZhOS4uNjdjZTdmYTIzZmExMiAxMDA2NDRcbi0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGdhbGxvYy5oXG4rKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BnYWxsb2MuaFxuQEAgLTE3LDcgKzE3LDExIEBAIGV4dGVybiB2b2lkIHBnZF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKTtcbiBleHRlcm4gdm9pZCBwdWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHB1ZF90ICpwdWRwLCBwbWRfdCAqcG1kKTtcbiBleHRlcm4gcG1kX3QgKnBtZF9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7XG4gZXh0ZXJuIHZvaWQgcG1kX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQpO1xuLSNkZWZpbmUgX19wbWRfZnJlZV90bGIodGxiLCBwbWRwLCBhZGRyKVx0XHRwbWRfZnJlZSgodGxiKS1cdTAwM2VtbSwgKHBtZHApKVxuK2V4dGVybiB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZSh2b2lkICp0YWJsZSk7XG4rXG4rLyogUE1EcyBhcmUgc2xhYi1hbGxvY2F0ZWQsIHRhZyBzbyB0aGV5IGFyZSBmcmVlZCBjb3JyZWN0bHkuICovXG4rI2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIsIHBtZHAsIGFkZHIpXHRcdFx0XHRcdFxcXG4rXHR0bGJfcmVtb3ZlX3RhYmxlKCh0bGIpLCAodm9pZCAqKSgodW5zaWduZWQgbG9uZykocG1kcCkgfCAxKSlcbiAjZW5kaWZcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgcG1kX3BvcHVsYXRlX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCxcbmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL3BndGFibGUuYyBiL2FyY2gvc2gvbW0vcGd0YWJsZS5jXG5pbmRleCAzYTQwODVlYTAxNjFmLi5mNjE4NGI4NmI4OWM2IDEwMDY0NFxuLS0tIGEvYXJjaC9zaC9tbS9wZ3RhYmxlLmNcbisrKyBiL2FyY2gvc2gvbW0vcGd0YWJsZS5jXG5AQCAtNTYsNCArNTYsMjQgQEAgdm9pZCBwbWRfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZClcbiB7XG4gXHRrbWVtX2NhY2hlX2ZyZWUocG1kX2NhY2hlcCwgcG1kKTtcbiB9XG4rXG4rc3RhdGljIHZvaWQgX190bGJfcmVtb3ZlX3RhYmxlX3NsYWIodm9pZCAqdGFibGUpXG4re1xuK1x0a21lbV9jYWNoZV9mcmVlKHBtZF9jYWNoZXAsIHRhYmxlKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgX190bGJfcmVtb3ZlX3RhYmxlX3BndGFibGUodm9pZCAqdGFibGUpXG4re1xuK1x0cGFnZXRhYmxlX2R0b3JfZnJlZSh0YWJsZSk7XG4rfVxuK1xuK3ZvaWQgX190bGJfcmVtb3ZlX3RhYmxlKHZvaWQgKnRhYmxlKVxuK3tcbitcdGNvbnN0IHVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKXRhYmxlO1xuK1xuK1x0aWYgKGFkZHIgXHUwMDI2IDEpXG4rXHRcdF9fdGxiX3JlbW92ZV90YWJsZV9zbGFiKCh2b2lkICopKGFkZHIgXHUwMDI2IH4xVUwpKTtcbitcdGVsc2VcbitcdFx0X190bGJfcmVtb3ZlX3RhYmxlX3BndGFibGUodGFibGUpO1xuK31cbiAjZW5kaWYgLyogUEFHRVRBQkxFX0xFVkVMUyBcdTAwM2UgMiAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvS2NvbmZpZyBiL2FyY2gvc3BhcmMvS2NvbmZpZ1xuaW5kZXggYWI3N2QzZjI1MzZlMS4uNzQyZmZmZjhjMzdmMiAxMDA2NDRcbi0tLSBhL2FyY2gvc3BhcmMvS2NvbmZpZ1xuKysrIGIvYXJjaC9zcGFyYy9LY29uZmlnXG5AQCAtNjQsNiArNjQsNyBAQCBjb25maWcgU1BBUkMzMlxuIFx0c2VsZWN0IEhBVkVfVUlEMTZcbiBcdHNlbGVjdCBIQVZFX1BBR0VfU0laRV80S0JcbiBcdHNlbGVjdCBMT0NLX01NX0FORF9GSU5EX1ZNQVxuK1x0c2VsZWN0IEhBVkVfQVJDSF9UTEJfUkVNT1ZFX1RBQkxFXG4gXHRzZWxlY3QgT0xEX1NJR0FDVElPTlxuIFx0c2VsZWN0IFpPTkVfRE1BXG4gXG5AQCAtNzUsOCArNzYsNyBAQCBjb25maWcgU1BBUkM2NFxuIFx0c2VsZWN0IEhBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSXG4gXHRzZWxlY3QgSEFWRV9LUkVUUFJPQkVTXG4gXHRzZWxlY3QgSEFWRV9LUFJPQkVTXG4tXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRSBpZiBTTVBcbi1cdHNlbGVjdCBIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRSBpZiBTTVBcbitcdHNlbGVjdCBIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRVxuIFx0c2VsZWN0IE1NVV9HQVRIRVJfTUVSR0VfVk1BU1xuIFx0c2VsZWN0IE1NVV9HQVRIRVJfTk9fRkxVU0hfQ0FDSEVcbiBcdHNlbGVjdCBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2NfMzIuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY18zMi5oXG5pbmRleCA0ZjczZTg3YjIyYTMyLi4zNjAxMDg1MmJhMGMwIDEwMDY0NFxuLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzMyLmhcbisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY18zMi5oXG5AQCAtNDgsNyArNDgsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9wbWRfZmFzdChwbWRfdCAqIHBtZClcbiB9XG4gXG4gI2RlZmluZSBwbWRfZnJlZShtbSwgcG1kKVx0XHRmcmVlX3BtZF9mYXN0KHBtZClcbi0jZGVmaW5lIF9fcG1kX2ZyZWVfdGxiKHRsYiwgcG1kLCBhZGRyKVx0cG1kX2ZyZWUoKHRsYiktXHUwMDNlbW0sIHBtZClcbitcbisjZGVmaW5lIF9fcG1kX2ZyZWVfdGxiKHRsYiwgcG1kLCBhZGRyKVx0XHRcdFx0XHRcXFxuK1x0dGxiX3JlbW92ZV90YWJsZSgodGxiKSwgKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKHBtZCkgfCAxVUwpKVxuIFxuICNkZWZpbmUgcG1kX3BvcHVsYXRlKG1tLCBwbWQsIHB0ZSlcdHBtZF9zZXQocG1kLCBwdGUpXG4gXG5AQCAtNzIsNiArNzQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9wdGVfZmFzdChwdGVfdCAqcHRlKVxuICNkZWZpbmUgcHRlX2ZyZWVfa2VybmVsKG1tLCBwdGUpXHRmcmVlX3B0ZV9mYXN0KHB0ZSlcbiBcbiB2b2lkIHB0ZV9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKiBtbSwgcGd0YWJsZV90IHB0ZSk7XG4tI2RlZmluZSBfX3B0ZV9mcmVlX3RsYih0bGIsIHB0ZSwgYWRkcilcdHB0ZV9mcmVlKCh0bGIpLVx1MDAzZW1tLCBwdGUpXG4rdm9pZCBfX3RsYl9yZW1vdmVfdGFibGUodm9pZCAqdGFibGUpO1xuKyNkZWZpbmUgX19wdGVfZnJlZV90bGIodGxiLCBwdGUsIGFkZHIpXHR0bGJfcmVtb3ZlX3RhYmxlKCh0bGIpLCAodm9pZCAqKShwdGUpKVxuIFxuICNlbmRpZiAvKiBfU1BBUkNfUEdBTExPQ19IICovXG5kaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzY0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2NfNjQuaFxuaW5kZXggY2FhNzYzMmJlNGMyYS4uYjUwNTVkMjU5Yjc0ZCAxMDA2NDRcbi0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY182NC5oXG4rKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2NfNjQuaFxuQEAgLTc0LDggKzc0LDYgQEAgdm9pZCBwdGVfZnJlZV9kZWZlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHBndGFibGUpO1xuIFxuIHZvaWQgcGd0YWJsZV9mcmVlKHZvaWQgKnRhYmxlLCBib29sIGlzX3BhZ2UpO1xuIFxuLSNpZmRlZiBDT05GSUdfU01QXG4tXG4gc3RydWN0IG1tdV9nYXRoZXI7XG4gdm9pZCB0bGJfcmVtb3ZlX3RhYmxlKHN0cnVjdCBtbXVfZ2F0aGVyICosIHZvaWQgKik7XG4gXG5AQCAtOTYsMTIgKzk0LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZSh2b2lkICpfdGFibGUpXG4gXHRcdGlzX3BhZ2UgPSB0cnVlO1xuIFx0cGd0YWJsZV9mcmVlKHRhYmxlLCBpc19wYWdlKTtcbiB9XG4tI2Vsc2UgLyogQ09ORklHX1NNUCAqL1xuLXN0YXRpYyBpbmxpbmUgdm9pZCBwZ3RhYmxlX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHZvaWQgKnRhYmxlLCBib29sIGlzX3BhZ2UpXG4te1xuLVx0cGd0YWJsZV9mcmVlKHRhYmxlLCBpc19wYWdlKTtcbi19XG4tI2VuZGlmIC8qICFDT05GSUdfU01QICovXG4gXG4gc3RhdGljIGlubGluZSB2b2lkIF9fcHRlX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHB0ZV90ICpwdGUsXG4gXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcbmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RsYl82NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90bGJfNjQuaFxuaW5kZXggMzAzNzE4NzQ4MmRiNy4uZjVmOTYzMTY4NWQ1MCAxMDA2NDRcbi0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGxiXzY0LmhcbisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGxiXzY0LmhcbkBAIC0yOSw5ICsyOSw3IEBAIHZvaWQgZmx1c2hfdGxiX3BlbmRpbmcodm9pZCk7XG4gICogYW5kIHRoZXJlZm9yZSB3ZSBkb24ndCBuZWVkIGEgVExCSSB3aGVuIGZyZWVpbmcgcGFnZS10YWJsZSBwYWdlcy5cbiAgKi9cbiBcbi0jaWZkZWYgQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcbiAjZGVmaW5lIHRsYl9uZWVkc190YWJsZV9pbnZhbGlkYXRlKClcdChmYWxzZSlcbi0jZW5kaWZcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20tZ2VuZXJpYy90bGIuaFx1MDAzZVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbGliL2JpdGV4dC5jIGIvYXJjaC9zcGFyYy9saWIvYml0ZXh0LmNcbmluZGV4IDMyYTVjMWQ5NDU5Y2QuLmMzMDllMjc5NzNjZTYgMTAwNjQ0XG4tLS0gYS9hcmNoL3NwYXJjL2xpYi9iaXRleHQuY1xuKysrIGIvYXJjaC9zcGFyYy9saWIvYml0ZXh0LmNcbkBAIC0yMiw4ICsyMiw2IEBAXG4gICogQGFsaWduOiByZXF1ZXN0ZWQgYWxpZ25tZW50XG4gICpcbiAgKiBSZXR1cm5zIG9mZnNldCBpbiB0aGUgbWFwIG9yIC0xIGlmIG91dCBvZiBzcGFjZS5cbi0gKlxuLSAqIE5vdCBzYWZlIHRvIGNhbGwgZnJvbSBhbiBpbnRlcnJ1cHQgKHVzZXMgc3Bpbl9sb2NrKS5cbiAgKi9cbiBpbnQgYml0X21hcF9zdHJpbmdfZ2V0KHN0cnVjdCBiaXRfbWFwICp0LCBpbnQgbGVuLCBpbnQgYWxpZ24pXG4ge1xuQEAgLTMxLDYgKzI5LDcgQEAgaW50IGJpdF9tYXBfc3RyaW5nX2dldChzdHJ1Y3QgYml0X21hcCAqdCwgaW50IGxlbiwgaW50IGFsaWduKVxuIFx0aW50IG9mZl9uZXc7XG4gXHRpbnQgYWxpZ24xO1xuIFx0aW50IGksIGNvbG9yO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiBcdGlmICh0LVx1MDAzZW51bV9jb2xvcnMpIHtcbiBcdFx0LyogYWxpZ24gaXMgb3ZlcmxvYWRlZCB0byBiZSB0aGUgcGFnZSBjb2xvciAqL1xuQEAgLTUwLDcgKzQ5LDcgQEAgaW50IGJpdF9tYXBfc3RyaW5nX2dldChzdHJ1Y3QgYml0X21hcCAqdCwgaW50IGxlbiwgaW50IGFsaWduKVxuIFx0XHRCVUcoKTtcbiBcdGNvbG9yIFx1MDAyNj0gYWxpZ24xO1xuIFxuLVx0c3Bpbl9sb2NrKFx1MDAyNnQtXHUwMDNlbG9jayk7XG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ0LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdGlmIChsZW4gXHUwMDNjIHQtXHUwMDNlbGFzdF9zaXplKVxuIFx0XHRvZmZzZXQgPSB0LVx1MDAzZWZpcnN0X2ZyZWU7XG4gXHRlbHNlXG5AQCAtNjQsNyArNjMsNyBAQCBpbnQgYml0X21hcF9zdHJpbmdfZ2V0KHN0cnVjdCBiaXRfbWFwICp0LCBpbnQgbGVuLCBpbnQgYWxpZ24pXG4gXHRcdGlmIChvZmZzZXQgXHUwMDNlPSB0LVx1MDAzZXNpemUpXG4gXHRcdFx0b2Zmc2V0ID0gMDtcbiBcdFx0aWYgKGNvdW50ICsgbGVuIFx1MDAzZSB0LVx1MDAzZXNpemUpIHtcbi1cdFx0XHRzcGluX3VubG9jayhcdTAwMjZ0LVx1MDAzZWxvY2spO1xuK1x0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gLyogUDMgKi8gcHJpbnRrKEtFUk5fRVJSXG4gICBcImJpdG1hcCBvdXQ6IHNpemUgJWQgdXNlZCAlZCBvZmYgJWQgbGVuICVkIGFsaWduICVkIGNvdW50ICVkXFxuXCIsXG4gICB0LVx1MDAzZXNpemUsIHQtXHUwMDNldXNlZCwgb2Zmc2V0LCBsZW4sIGFsaWduLCBjb3VudCk7XG5AQCAtOTAsNyArODksNyBAQCBpbnQgYml0X21hcF9zdHJpbmdfZ2V0KHN0cnVjdCBiaXRfbWFwICp0LCBpbnQgbGVuLCBpbnQgYWxpZ24pXG4gXHRcdFx0XHRcdHQtXHUwMDNlbGFzdF9vZmYgPSAwO1xuIFx0XHRcdFx0dC1cdTAwM2V1c2VkICs9IGxlbjtcbiBcdFx0XHRcdHQtXHUwMDNlbGFzdF9zaXplID0gbGVuO1xuLVx0XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2dC1cdTAwM2Vsb2NrKTtcbitcdFx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRcdFx0XHRyZXR1cm4gb2Zmc2V0O1xuIFx0XHRcdH1cbiBcdFx0fVxuQEAgLTEwMywxMCArMTAyLDExIEBAIGludCBiaXRfbWFwX3N0cmluZ19nZXQoc3RydWN0IGJpdF9tYXAgKnQsIGludCBsZW4sIGludCBhbGlnbilcbiB2b2lkIGJpdF9tYXBfY2xlYXIoc3RydWN0IGJpdF9tYXAgKnQsIGludCBvZmZzZXQsIGludCBsZW4pXG4ge1xuIFx0aW50IGk7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuIFx0aWYgKHQtXHUwMDNldXNlZCBcdTAwM2MgbGVuKVxuIFx0XHRCVUcoKTtcdFx0LyogTXVjaCB0b28gbGF0ZSB0byBkbyBhbnkgZ29vZCwgYnV0IGFsYXMuLi4gKi9cbi1cdHNwaW5fbG9jayhcdTAwMjZ0LVx1MDAzZWxvY2spO1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBsZW47IGkrKykge1xuIFx0XHRpZiAodGVzdF9iaXQob2Zmc2V0ICsgaSwgdC1cdTAwM2VtYXApID09IDApXG4gXHRcdFx0QlVHKCk7XG5AQCAtMTE1LDcgKzExNSw3IEBAIHZvaWQgYml0X21hcF9jbGVhcihzdHJ1Y3QgYml0X21hcCAqdCwgaW50IG9mZnNldCwgaW50IGxlbilcbiBcdGlmIChvZmZzZXQgXHUwMDNjIHQtXHUwMDNlZmlyc3RfZnJlZSlcbiBcdFx0dC1cdTAwM2VmaXJzdF9mcmVlID0gb2Zmc2V0O1xuIFx0dC1cdTAwM2V1c2VkIC09IGxlbjtcbi1cdHNwaW5fdW5sb2NrKFx1MDAyNnQtXHUwMDNlbG9jayk7XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnQtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIH1cbiBcbiB2b2lkIGJpdF9tYXBfaW5pdChzdHJ1Y3QgYml0X21hcCAqdCwgdW5zaWduZWQgbG9uZyAqbWFwLCBpbnQgc2l6ZSlcbmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL3NybW11LmMgYi9hcmNoL3NwYXJjL21tL3NybW11LmNcbmluZGV4IDlhNzQ5MDJhZDE4MTQuLjJhMmM3YmQyMTAxMTQgMTAwNjQ0XG4tLS0gYS9hcmNoL3NwYXJjL21tL3NybW11LmNcbisrKyBiL2FyY2gvc3BhcmMvbW0vc3JtbXUuY1xuQEAgLTM1OSwxOSArMzU5LDM5IEBAIHBndGFibGVfdCBwdGVfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFx0cmV0dXJuIHB0ZXA7XG4gfVxuIFxuLXZvaWQgcHRlX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwdGVwKVxuK3N0YXRpYyB2b2lkIF9fcHRlX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwdGVwKVxuIHtcbitcdGNvbnN0IGJvb2wgcHJvY2Vzc19jb250ZXh0ID0gbW07XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcbiBcdHBhZ2UgPSBwZm5fdG9fcGFnZShfX25vY2FjaGVfcGEoKHVuc2lnbmVkIGxvbmcpcHRlcCkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuLVx0c3Bpbl9sb2NrKFx1MDAyNm1tLVx1MDAzZXBhZ2VfdGFibGVfbG9jayk7XG4rXHRpZiAocHJvY2Vzc19jb250ZXh0KVxuK1x0XHRzcGluX2xvY2soXHUwMDI2bW0tXHUwMDNlcGFnZV90YWJsZV9sb2NrKTtcbiBcdGlmIChwYWdlX3JlZl9kZWNfcmV0dXJuKHBhZ2UpID09IDEpXG4gXHRcdHBhZ2V0YWJsZV9kdG9yKHBhZ2VfcHRkZXNjKHBhZ2UpKTtcbi1cdHNwaW5fdW5sb2NrKFx1MDAyNm1tLVx1MDAzZXBhZ2VfdGFibGVfbG9jayk7XG4rXHRpZiAocHJvY2Vzc19jb250ZXh0KVxuK1x0XHRzcGluX3VubG9jayhcdTAwMjZtbS1cdTAwM2VwYWdlX3RhYmxlX2xvY2spO1xuIFxuIFx0c3JtbXVfZnJlZV9ub2NhY2hlKHB0ZXAsIFNSTU1VX1BURV9UQUJMRV9TSVpFKTtcbiB9XG4gXG4rdm9pZCBwdGVfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHB0ZXApXG4re1xuK1x0X19wdGVfZnJlZShtbSwgcHRlcCk7XG4rfVxuK1xuK3ZvaWQgX190bGJfcmVtb3ZlX3RhYmxlKHZvaWQgKnRhYmxlKVxuK3tcbitcdGNvbnN0IHVuc2lnbmVkIGxvbmcgZW5jb2RlZCA9ICh1bnNpZ25lZCBsb25nKXRhYmxlO1xuK1x0Y29uc3QgdW5zaWduZWQgbG9uZyBhZGRyID0gZW5jb2RlZCBcdTAwMjYgfjFVTDtcbitcdGNvbnN0IGJvb2wgaXNfcG1kID0gZW5jb2RlZCBcdTAwMjYgMTtcbitcbitcdGlmIChpc19wbWQpXG4rXHRcdGZyZWVfcG1kX2Zhc3QoKHBtZF90ICopYWRkcik7XG4rXHRlbHNlIC8qIENhbGxlZCBmcm9tIHNvZnRpcnEgY29udGV4dCwgbm8gbW0uICovXG4rXHRcdF9fcHRlX2ZyZWUoTlVMTCwgKHBndGFibGVfdClhZGRyKTtcbit9XG4rXG4gLyogY29udGV4dCBoYW5kbGluZyAtIGEgZHluYW1pY2FsbHkgc2l6ZWQgcG9vbCBpcyB1c2VkICovXG4gI2RlZmluZSBOT19DT05URVhUXHQtMVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvdW0vS2NvbmZpZyBiL2FyY2gvdW0vS2NvbmZpZ1xuaW5kZXggZDk1NDFkMTNkOWViMC4uOTRiOGZmNzBmNTc4YiAxMDA2NDRcbi0tLSBhL2FyY2gvdW0vS2NvbmZpZ1xuKysrIGIvYXJjaC91bS9LY29uZmlnXG5AQCAtNDQsNyArNDQsNiBAQCBjb25maWcgVU1MXG4gXHRzZWxlY3QgSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTXG4gXHRzZWxlY3QgVEhSRUFEX0lORk9fSU5fVEFTS1xuIFx0c2VsZWN0IFNQQVJTRV9JUlFcbi1cdHNlbGVjdCBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG4gXG4gY29uZmlnIE1NVVxuIFx0Ym9vbFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcgYi9hcmNoL3g4Ni9LY29uZmlnXG5pbmRleCBhOGMzYjNkMzFhMjc2Li42ZTVlNDYyZWMwNTlhIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvS2NvbmZpZ1xuKysrIGIvYXJjaC94ODYvS2NvbmZpZ1xuQEAgLTI4Myw3ICsyODMsNiBAQCBjb25maWcgWDg2XG4gXHRzZWxlY3QgSEFWRV9QRVJGX1JFR1NcbiBcdHNlbGVjdCBIQVZFX1BFUkZfVVNFUl9TVEFDS19EVU1QXG4gXHRzZWxlY3QgQVNZTkNfS0VSTkVMX1BHVEFCTEVfRlJFRVx0aWYgSU9NTVVfU1ZBXG4tXHRzZWxlY3QgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRVxuIFx0c2VsZWN0IE1NVV9HQVRIRVJfTUVSR0VfVk1BU1xuIFx0c2VsZWN0IEhBVkVfUE9TSVhfQ1BVX1RJTUVSU19UQVNLX1dPUktcbiBcdHNlbGVjdCBIQVZFX1JFR1NfQU5EX1NUQUNLX0FDQ0VTU19BUElcbmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS90bGIuaCBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3RsYi5oXG5pbmRleCA4YzNjZWI0MjcwMTgwLi42ZmI3Yjc4MTU0ZjYyIDEwMDY0NFxuLS0tIGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vdGxiLmhcbisrKyBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3RsYi5oXG5AQCAtMTYsNyArMTYsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS1nZW5lcmljL3RsYi5oXHUwMDNlXG4gXG4tI2RlZmluZSBfX3B0ZV9mcmVlX3RsYih0bGIsIHB0ZSwgYWRkcmVzcylcdHB0ZV9mcmVlKCh0bGIpLVx1MDAzZW1tLCBwdGUpXG4rI2RlZmluZSBfX3B0ZV9mcmVlX3RsYih0bGIsIHB0ZSwgYWRkcmVzcylcdHRsYl9yZW1vdmVfcHRkZXNjKCh0bGIpLCBwYWdlX3B0ZGVzYyhwdGUpKVxuIFxuIHZvaWQgY2hlY2tfdGxiX3Nhbml0eSh2b2lkKTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3RsYi5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaFxuaW5kZXggYmRjYzI3NzhhYzY0Zi4uMDQ0ZGFiYzFmZTljYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmhcbisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmhcbkBAIC02NywxMSArNjcsOCBAQFxuICAqICAtIHRsYl9yZW1vdmVfdGFibGUoKVxuICAqXG4gICogICAgdGxiX3JlbW92ZV90YWJsZSgpIGlzIHRoZSBiYXNpYyBwcmltaXRpdmUgdG8gZnJlZSBwYWdlLXRhYmxlIGRpcmVjdG9yaWVzXG4tICogICAgKF9fcCpfZnJlZV90bGIoKSkuICBJbiBpdCdzIG1vc3QgcHJpbWl0aXZlIGZvcm0gaXQgaXMgYW4gYWxpYXMgZm9yXG4tICogICAgdGxiX3JlbW92ZV9wYWdlKCkgYmVsb3csIGZvciB3aGVuIHBhZ2UgZGlyZWN0b3JpZXMgYXJlIHBhZ2VzIGFuZCBoYXZlIG5vXG4tICogICAgYWRkaXRpb25hbCBjb25zdHJhaW50cy5cbi0gKlxuLSAqICAgIFNlZSBhbHNvIE1NVV9HQVRIRVJfVEFCTEVfRlJFRSBhbmQgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRS5cbisgKiAgICAoX19wKl9mcmVlX3RsYigpKS4gIFBhZ2UgZGlyZWN0b3JpZXMgYXJlIGZyZWVkIGFmdGVyIGFuIFJDVSBncmFjZVxuKyAqICAgIHBlcmlvZCAtIHNlZSB0aGUgY29tbWVudCBpbiBtbS9tbXVfZ2F0aGVyLmMuXG4gICpcbiAgKiAgLSB0bGJfcmVtb3ZlX3BhZ2UoKSAvIHRsYl9yZW1vdmVfcGFnZV9zaXplKClcbiAgKiAgLSBfX3RsYl9yZW1vdmVfZm9saW9fcGFnZXMoKSAvIF9fdGxiX3JlbW92ZV9wYWdlX3NpemUoKVxuQEAgLTE1MSwyNCArMTQ4LDE1IEBAXG4gICogIFRoaXMgbWlnaHQgYmUgdXNlZnVsIGlmIHlvdXIgYXJjaGl0ZWN0dXJlIGhhcyBzaXplIHNwZWNpZmljIFRMQlxuICAqICBpbnZhbGlkYXRpb24gaW5zdHJ1Y3Rpb25zLlxuICAqXG4tICogIE1NVV9HQVRIRVJfVEFCTEVfRlJFRVxuLSAqXG4tICogIFRoaXMgcHJvdmlkZXMgdGxiX3JlbW92ZV90YWJsZSgpLCB0byBiZSB1c2VkIGluc3RlYWQgb2YgdGxiX3JlbW92ZV9wYWdlKClcbi0gKiAgZm9yIHBhZ2UgZGlyZWN0b3JlcyAoX19wKl9mcmVlX3RsYigpKS5cbi0gKlxuLSAqICBVc2VmdWwgaWYgeW91ciBhcmNoaXRlY3R1cmUgaGFzIG5vbi1wYWdlIHBhZ2UgZGlyZWN0b3JpZXMuXG4rICogIFBhZ2UgZGlyZWN0b3JpZXMgKF9fcCpfZnJlZV90bGIoKSkgYXJlIGFsd2F5cyBmcmVlZCB2aWEgdGxiX3JlbW92ZV90YWJsZSgpLFxuKyAqICBhZnRlciBhbiBSQ1UgZ3JhY2UgcGVyaW9kIChzZWUgbW0vbW11X2dhdGhlci5jKS5cbiAgKlxuLSAqICBXaGVuIHVzZWQsIGFuIGFyY2hpdGVjdHVyZSBpcyBleHBlY3RlZCB0byBwcm92aWRlIF9fdGxiX3JlbW92ZV90YWJsZSgpIG9yXG4tICogIHVzZSB0aGUgZ2VuZXJpYyBfX3RsYl9yZW1vdmVfdGFibGUoKSwgd2hpY2ggZG9lcyB0aGUgYWN0dWFsIGZyZWVpbmcgb2YgdGhlc2Vcbi0gKiAgcGFnZXMuXG4rICogVGhpcyBzZXJpYWxpc2VzIGFnYWluc3Qgc29mdHdhcmUgcGFnZS10YWJsZSB3YWxrZXJzLCBpbmNsdWRpbmcgYXJjaGl0ZWN0dXJlc1xuKyAqIHdoaWNoIGRvIG5vdCB1c2UgSVBJcyBmb3IgcmVtb3RlIFRMQiBpbnZhbGlkYXRlcy5cbiAgKlxuLSAqICBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG4tICpcbi0gKiAgTGlrZSBNTVVfR0FUSEVSX1RBQkxFX0ZSRUUsIGFuZCBhZGRzIHNlbWktUkNVIHNlbWFudGljcyB0byB0aGUgZnJlZSAoc2VlXG4tICogIGNvbW1lbnQgYmVsb3cpLlxuLSAqXG4tICogIFVzZWZ1bCBpZiB5b3VyIGFyY2hpdGVjdHVyZSBkb2Vzbid0IHVzZSBJUElzIGZvciByZW1vdGUgVExCIGludmFsaWRhdGVzXG4tICogIGFuZCB0aGVyZWZvcmUgZG9lc24ndCBuYXR1cmFsbHkgc2VyaWFsaXplIHdpdGggc29mdHdhcmUgcGFnZS10YWJsZSB3YWxrZXJzLlxuKyAqICBBbiBhcmNoaXRlY3R1cmUgaXMgZXhwZWN0ZWQgdG8gcHJvdmlkZSBfX3RsYl9yZW1vdmVfdGFibGUoKSAoc2VlXG4rICogIEhBVkVfQVJDSF9UTEJfUkVNT1ZFX1RBQkxFKSBvciB1c2UgdGhlIGdlbmVyaWMgX190bGJfcmVtb3ZlX3RhYmxlKCksIHdoaWNoXG4rICogIGRvZXMgdGhlIGFjdHVhbCBmcmVlaW5nIG9mIHRoZXNlIHBhZ2VzLlxuICAqXG4gICogIE1NVV9HQVRIRVJfTk9fRkxVU0hfQ0FDSEVcbiAgKlxuQEAgLTIwMCwxMiArMTg4LDggQEBcbiAgKiAgdmFyaW91cyBwdGVwX2dldF9hbmRfY2xlYXIoKSBmdW5jdGlvbnMuXG4gICovXG4gXG4tI2lmZGVmIENPTkZJR19NTVVfR0FUSEVSX1RBQkxFX0ZSRUVcbi1cbiBzdHJ1Y3QgbW11X3RhYmxlX2JhdGNoIHtcbi0jaWZkZWYgQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcbiBcdHN0cnVjdCByY3VfaGVhZFx0XHRyY3U7XG4tI2VuZGlmXG4gXHR1bnNpZ25lZCBpbnRcdFx0bnI7XG4gXHR2b2lkXHRcdFx0KnRhYmxlc1tdO1xuIH07XG5AQCAtMjI0LDIzICsyMDgsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX190bGJfcmVtb3ZlX3RhYmxlKHZvaWQgKnRhYmxlKVxuIFxuIGV4dGVybiB2b2lkIHRsYl9yZW1vdmVfdGFibGUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgdm9pZCAqdGFibGUpO1xuIFxuLSNlbHNlIC8qICFDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFICovXG4tXG4tc3RhdGljIGlubGluZSB2b2lkIHRsYl9yZW1vdmVfcGFnZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4tLypcbi0gKiBXaXRob3V0IE1NVV9HQVRIRVJfVEFCTEVfRlJFRSB0aGUgYXJjaGl0ZWN0dXJlIGlzIGFzc3VtZWQgdG8gaGF2ZSBwYWdlIGJhc2VkXG4tICogcGFnZSBkaXJlY3RvcmllcyBhbmQgd2UgY2FuIHVzZSB0aGUgbm9ybWFsIHBhZ2UgYmF0Y2hpbmcgdG8gZnJlZSB0aGVtLlxuLSAqL1xuLXN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfcmVtb3ZlX3RhYmxlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHZvaWQgKnRhYmxlKVxuLXtcbi1cdHN0cnVjdCBwdGRlc2MgKnB0ZGVzYyA9IChzdHJ1Y3QgcHRkZXNjICopdGFibGU7XG4tXG4tXHRwYWdldGFibGVfZHRvcihwdGRlc2MpO1xuLVx0dGxiX3JlbW92ZV9wYWdlKHRsYiwgcHRkZXNjX3BhZ2UocHRkZXNjKSk7XG4tfVxuLSNlbmRpZiAvKiBDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFICovXG4tXG4tI2lmZGVmIENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG4gLypcbiAgKiBUaGlzIGFsbG93cyBhbiBhcmNoaXRlY3R1cmUgdGhhdCBkb2VzIG5vdCB1c2UgdGhlIGxpbnV4IHBhZ2UtdGFibGVzIGZvclxuICAqIGhhcmR3YXJlIHRvIHNraXAgdGhlIFRMQkkgd2hlbiBmcmVlaW5nIHBhZ2UgdGFibGVzLlxuQEAgLTI1MywxOSArMjIwLDYgQEAgdm9pZCB0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfb25lKHZvaWQpO1xuIFxuIHZvaWQgdGxiX3JlbW92ZV90YWJsZV9zeW5jX3JjdSh2b2lkKTtcbiBcbi0jZWxzZVxuLVxuLSNpZmRlZiB0bGJfbmVlZHNfdGFibGVfaW52YWxpZGF0ZVxuLSNlcnJvciB0bGJfbmVlZHNfdGFibGVfaW52YWxpZGF0ZSgpIHJlcXVpcmVzIE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUVcbi0jZW5kaWZcbi1cbi1zdGF0aWMgaW5saW5lIHZvaWQgdGxiX3JlbW92ZV90YWJsZV9zeW5jX29uZSh2b2lkKSB7IH1cbi1cbi1zdGF0aWMgaW5saW5lIHZvaWQgdGxiX3JlbW92ZV90YWJsZV9zeW5jX3JjdSh2b2lkKSB7IH1cbi1cbi0jZW5kaWYgLyogQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgKi9cbi1cbi1cbiAjaWZuZGVmIENPTkZJR19NTVVfR0FUSEVSX05PX0dBVEhFUlxuIC8qXG4gICogSWYgd2UgY2FuJ3QgYWxsb2NhdGUgYSBwYWdlIHRvIG1ha2UgYSBiaWcgYmF0Y2ggb2YgcGFnZSBwb2ludGVyc1xuQEAgLTMyNSw5ICsyNzksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdGxiX2ZsdXNoX3JtYXBzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdFxuIHN0cnVjdCBtbXVfZ2F0aGVyIHtcbiBcdHN0cnVjdCBtbV9zdHJ1Y3RcdCptbTtcbiBcbi0jaWZkZWYgQ09ORklHX01NVV9HQVRIRVJfVEFCTEVfRlJFRVxuIFx0c3RydWN0IG1tdV90YWJsZV9iYXRjaFx0KmJhdGNoO1xuLSNlbmRpZlxuIFxuIFx0dW5zaWduZWQgbG9uZ1x0XHRzdGFydDtcbiBcdHVuc2lnbmVkIGxvbmdcdFx0ZW5kO1xuZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnXG5pbmRleCBjMWRkZjU5YzBkNzFhLi5iYzdiZWZhZmI0N2I1IDEwMDY0NFxuLS0tIGEvbW0vS2NvbmZpZ1xuKysrIGIvbW0vS2NvbmZpZ1xuQEAgLTE0NjUsNyArMTQ2NSw3IEBAIGNvbmZpZyBIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRVxuIFxuIGNvbmZpZyBQVF9SRUNMQUlNXG4gXHRkZWZfYm9vbCB5XG4tXHRkZXBlbmRzIG9uIE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgXHUwMDI2XHUwMDI2ICFIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRVxuK1x0ZGVwZW5kcyBvbiBNTVUgXHUwMDI2XHUwMDI2ICFIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRVxuIFx0aGVscFxuIFx0ICBUcnkgdG8gcmVjbGFpbSBlbXB0eSB1c2VyIHBhZ2UgdGFibGUgcGFnZXMgaW4gcGF0aHMgb3RoZXIgdGhhbiBtdW5tYXBcbiBcdCAgYW5kIGV4aXRfbW1hcCBwYXRoLlxuZGlmZiAtLWdpdCBhL21tL2d1cC5jIGIvbW0vZ3VwLmNcbmluZGV4IGViODk4ZWExZWUyMmUuLjYzYjQzNWVjNjA1YzggMTAwNjQ0XG4tLS0gYS9tbS9ndXAuY1xuKysrIGIvbW0vZ3VwLmNcbkBAIC0yNzAwLDggKzI3MDAsOSBAQCBFWFBPUlRfU1lNQk9MKGdldF91c2VyX3BhZ2VzX3VubG9ja2VkKTtcbiAgKiBCZWZvcmUgYWN0aXZhdGluZyB0aGlzIGNvZGUsIHBsZWFzZSBiZSBhd2FyZSB0aGF0IHRoZSBmb2xsb3dpbmcgYXNzdW1wdGlvbnNcbiAgKiBhcmUgY3VycmVudGx5IG1hZGU6XG4gICpcbi0gKiAgKikgRWl0aGVyIE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgaXMgZW5hYmxlZCwgYW5kIHRsYl9yZW1vdmVfdGFibGUoKSBpcyB1c2VkIHRvXG4tICogIGZyZWUgcGFnZXMgY29udGFpbmluZyBwYWdlIHRhYmxlcyBvciBUTEIgZmx1c2hpbmcgcmVxdWlyZXMgSVBJIGJyb2FkY2FzdC5cbisgKiAgKikgdGxiX3JlbW92ZV90YWJsZSgpIGlzIHVzZWQgdG8gZnJlZSBwYWdlcyBjb250YWluaW5nIHBhZ2UgdGFibGVzLCB3aXRoXG4rICogIHRoZSBmcmVlIGRlZmVycmVkIHVudGlsIGFuIFJDVSBncmFjZSBwZXJpb2QgaGFzIGVsYXBzZWQgKHNlZVxuKyAqICBtbS9tbXVfZ2F0aGVyLmMpLlxuICAqXG4gICogICopIHB0ZXMgY2FuIGJlIHJlYWQgYXRvbWljYWxseSBieSB0aGUgYXJjaGl0ZWN0dXJlLlxuICAqXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IDU0NDk0YzNmYTk4MzUuLjUwNWY3YjYyZmYyODEgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtMjQ3Niw3ICsyNDc2LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHphcF9kZXBvc2l0ZWRfdGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQpXG4gXHRwZ3RhYmxlX3QgcGd0YWJsZTtcbiBcbiBcdHBndGFibGUgPSBwZ3RhYmxlX3RyYW5zX2h1Z2Vfd2l0aGRyYXcobW0sIHBtZCk7XG4tXHRwdGVfZnJlZShtbSwgcGd0YWJsZSk7XG4rXHRwdGVfZnJlZV9kZWZlcihtbSwgcGd0YWJsZSk7XG4gXHRtbV9kZWNfbnJfcHRlcyhtbSk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL21tL21tdV9nYXRoZXIuYyBiL21tL21tdV9nYXRoZXIuY1xuaW5kZXggMzk4NWQ4NTZkZTdmOS4uMmE3MmE5Njg2NzczYSAxMDA2NDRcbi0tLSBhL21tL21tdV9nYXRoZXIuY1xuKysrIGIvbW0vbW11X2dhdGhlci5jXG5AQCAtMjE4LDggKzIxOCw2IEBAIGJvb2wgX190bGJfcmVtb3ZlX3BhZ2Vfc2l6ZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHBhZ2VfXG4gXG4gI2VuZGlmIC8qIE1NVV9HQVRIRVJfTk9fR0FUSEVSICovXG4gXG4tI2lmZGVmIENPTkZJR19NTVVfR0FUSEVSX1RBQkxFX0ZSRUVcbi1cbiBzdGF0aWMgdm9pZCBfX3RsYl9yZW1vdmVfdGFibGVfZnJlZShzdHJ1Y3QgbW11X3RhYmxlX2JhdGNoICpiYXRjaClcbiB7XG4gXHRpbnQgaTtcbkBAIC0yMzAsMTAgKzIyOCw4IEBAIHN0YXRpYyB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZV9mcmVlKHN0cnVjdCBtbXVfdGFibGVfYmF0Y2ggKmJhdGNoKVxuIFx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWJhdGNoKTtcbiB9XG4gXG4tI2lmZGVmIENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFXG4tXG4gLypcbi0gKiBTZW1pIFJDVSBmcmVlaW5nIG9mIHRoZSBwYWdlIGRpcmVjdG9yaWVzLlxuKyAqIFJDVSBmcmVlaW5nIG9mIHRoZSBwYWdlIGRpcmVjdG9yaWVzLlxuICAqXG4gICogVGhpcyBpcyBuZWVkZWQgYnkgc29tZSBhcmNoaXRlY3R1cmVzIHRvIGltcGxlbWVudCBzb2Z0d2FyZSBwYWdldGFibGUgd2Fsa2Vycy5cbiAgKlxuQEAgLTI1OSwxMyArMjU1LDEzIEBAIHN0YXRpYyB2b2lkIF9fdGxiX3JlbW92ZV90YWJsZV9mcmVlKHN0cnVjdCBtbXVfdGFibGVfYmF0Y2ggKmJhdGNoKVxuICAqIG1lYW5zLlxuICAqXG4gICogV2hhdCB3ZSBkbyBpcyBiYXRjaCB0aGUgZnJlZWQgZGlyZWN0b3J5IHBhZ2VzICh0YWJsZXMpIGFuZCBSQ1UgZnJlZSB0aGVtLlxuLSAqIFdlIHVzZSB0aGUgc2NoZWQgUkNVIHZhcmlhbnQsIGFzIHRoYXQgZ3VhcmFudGVlcyB0aGF0IElSUS9wcmVlbXB0IGRpc2FibGluZ1xuLSAqIGhvbGRzIG9mZiBncmFjZSBwZXJpb2RzLlxuKyAqIERpc2FibGluZyBJUlFzIG9yIHByZWVtcHRpb24gaG9sZHMgb2ZmIFJDVSBncmFjZSBwZXJpb2RzLCBzbyB0aGlzIHByb3RlY3RzXG4rICogYm90aCByY3VfcmVhZF9sb2NrKCkgYW5kIElSUS1kaXNhYmxpbmcgd2Fsa2Vycy5cbiAgKlxuICAqIEhvd2V2ZXIsIGluIG9yZGVyIHRvIGJhdGNoIHRoZXNlIHBhZ2VzIHdlIG5lZWQgdG8gYWxsb2NhdGUgc3RvcmFnZSwgdGhpc1xuICAqIGFsbG9jYXRpb24gaXMgZGVlcCBpbnNpZGUgdGhlIE1NIGNvZGUgYW5kIGNhbiB0aHVzIGVhc2lseSBmYWlsIG9uIG1lbW9yeVxuLSAqIHByZXNzdXJlLiBUbyBndWFyYW50ZWUgcHJvZ3Jlc3Mgd2UgZmFsbCBiYWNrIHRvIHNpbmdsZSB0YWJsZSBmcmVlaW5nLCBzZWVcbi0gKiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGxiX3JlbW92ZV90YWJsZV9vbmUoKS5cbisgKiBwcmVzc3VyZS4gVG8gZ3VhcmFudGVlIHByb2dyZXNzIHdlIGZhbGwgYmFjayB0byBzaW5nbGUgdGFibGUgZnJlZWluZywgd2hpY2hcbisgKiBpcyBhbHNvIFJDVS1kZWZlcnJlZCAtIHNlZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGxiX3JlbW92ZV90YWJsZV9vbmUoKS5cbiAgKlxuICAqL1xuIFxuQEAgLTMxNSwxNSArMzExLDYgQEAgdm9pZCB0bGJfcmVtb3ZlX3RhYmxlX3N5bmNfcmN1KHZvaWQpXG4gXHRzeW5jaHJvbml6ZV9yY3UoKTtcbiB9XG4gXG4tI2Vsc2UgLyogIUNPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFICovXG4tXG4tc3RhdGljIHZvaWQgdGxiX3JlbW92ZV90YWJsZV9mcmVlKHN0cnVjdCBtbXVfdGFibGVfYmF0Y2ggKmJhdGNoKVxuLXtcbi1cdF9fdGxiX3JlbW92ZV90YWJsZV9mcmVlKGJhdGNoKTtcbi19XG4tXG4tI2VuZGlmIC8qIENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFICovXG4tXG4gLypcbiAgKiBJZiB3ZSB3YW50IHRsYl9yZW1vdmVfdGFibGUoKSB0byBpbXBseSBUTEIgaW52YWxpZGF0ZXMuXG4gICovXG5AQCAtNDAzLDEzICszOTAsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdGxiX3RhYmxlX2luaXQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYilcbiBcdHRsYi1cdTAwM2ViYXRjaCA9IE5VTEw7XG4gfVxuIFxuLSNlbHNlIC8qICFDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFICovXG4tXG4tc3RhdGljIGlubGluZSB2b2lkIHRsYl90YWJsZV9mbHVzaChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiKSB7IH1cbi1zdGF0aWMgaW5saW5lIHZvaWQgdGxiX3RhYmxlX2luaXQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYikgeyB9XG4tXG4tI2VuZGlmIC8qIENPTkZJR19NTVVfR0FUSEVSX1RBQkxFX0ZSRUUgKi9cbi1cbiBzdGF0aWMgdm9pZCB0bGJfZmx1c2hfbW11X2ZyZWUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYilcbiB7XG4gXHR0bGJfdGFibGVfZmx1c2godGxiKTtcbmRpZmYgLS1naXQgYS9tbS9wZ3RhYmxlLWdlbmVyaWMuYyBiL21tL3BndGFibGUtZ2VuZXJpYy5jXG5pbmRleCBiOTFiMWE5ODAyOWM3Li5mZjhmZjM3MDY0ODUzIDEwMDY0NFxuLS0tIGEvbW0vcGd0YWJsZS1nZW5lcmljLmNcbisrKyBiL21tL3BndGFibGUtZ2VuZXJpYy5jXG5AQCAtMzg2LDkgKzM4NiwyMSBAQCBwdGVfdCAqcHRlX29mZnNldF9tYXBfcndfbm9sb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLFxuICAqIGJlIHJlYWQtb25seS9yZWFkLXdyaXRlIHByb3RlY3RlZC5cbiAgKlxuICAqIE5vdGUgdGhhdCBmcmVlX3BndGFibGVzKCksIHVzZWQgYWZ0ZXIgdW5tYXBwaW5nIGRldGFjaGVkIHZtYXMsIG9yIHdoZW5cbi0gKiBleGl0aW5nIHRoZSB3aG9sZSBtbSwgZG9lcyBub3QgdGFrZSBwYWdlIHRhYmxlIGxvY2sgYmVmb3JlIGZyZWVpbmcgYSBwYWdlXG4tICogdGFibGUsIGFuZCBtYXkgbm90IHVzZSBSQ1UgYXQgYWxsOiBcIm91dHNpZGVyc1wiIGxpa2Uga2h1Z2VwYWdlZCBzaG91bGQgYXZvaWRcbi0gKiBwdGVfb2Zmc2V0X21hcCgpIGFuZCBjbyBvbmNlIHRoZSB2bWEgaXMgZGV0YWNoZWQgZnJvbSBtbSBvciBtbV91c2VycyBpcyB6ZXJvLlxuKyAqIGV4aXRpbmcgdGhlIHdob2xlIG1tLCBkb2VzIG5vdCB0YWtlIHRoZSBwYWdlIHRhYmxlIGxvY2sgYmVmb3JlIGZyZWVpbmcgYVxuKyAqIHRhYmxlLlxuKyAqXG4rICogSG93ZXZlciwgdGhlIFBNRCBlbnRyeSBpcyBjbGVhcmVkIGZpcnN0LCBhbmQgdGhlIHRhYmxlIGZyZWVkIG9ubHkgYWZ0ZXJcbisgKiBhbiBSQ1UgZ3JhY2UgcGVyaW9kLCBzbyBhIHdhbGtlciB0aGF0IG1hcHBlZCB0aGUgdGFibGUgdW5kZXJcbisgKiByY3VfcmVhZF9sb2NrKCkgc3RheXMgc2FmZSwgYW5kIHRoZSBwbWRfc2FtZSgpIHJlY2hlY2sgaW5cbisgKiBwdGVfb2Zmc2V0X21hcF9sb2NrKCkgZGV0ZWN0cyB0aGUgdGVhcmRvd24uXG4rICpcbisgKiBUaGVyZWZvcmUgaXQgaXMgc2FmZSBmb3IgXCJvdXRzaWRlcnNcIiBsaWtlIGtodWdlcGFnZWQgdG8gdXNlXG4rICogcHRlX29mZnNldF9tYXAoKSBhbmQgY28uIGZvciBWTUFzIHRoYXQgbWlnaHQgYmUgdW5kZXJnb2luZyBwYWdlIHRhYmxlXG4rICogdGVhcmRvd24uXG4rICpcbisgKiBOb3RlIHRoYXQgdGhlIFBHRCBpdHNlbGYgaXMgZnJlZWQgYXQgbW1kcm9wKCkgdGltZSwgbm90IHVuZGVyIFJDVSAtIHNvIHRoZVxuKyAqIHdhbGtlciBtdXN0IGtlZXAgdGhlIG1tIGFsaXZlIHZpYSBtbWdyYWIoKS4gV2l0aCB0aGF0IGhlbGQsIHdhbGtpbmcgcmVtYWluc1xuKyAqIHNhZmUgZXZlbiBvbmNlIG1tX3VzZXJzIGhhcyByZWFjaGVkIHplcm8uXG4gICovXG4gcHRlX3QgKnB0ZV9vZmZzZXRfbWFwX2xvY2soc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsXG4gXHRcdFx0ICAgdW5zaWduZWQgbG9uZyBhZGRyLCBzcGlubG9ja190ICoqcHRscClcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjQ0OjQzLjQ1MDIzNDI0NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NDk5MjgwMTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIE1lbW9yeSBTYWZldHkgYW5kIENvbmN1cnJlbmN5IEltcGxpY2F0aW9ucyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIGl0IGludHJvZHVjZXMgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMsIHNvbWV0aGluZyBLTVNBTiB3b3VsZCBmbGFnLCBvciBpZiB0aGUgY2hhbmdlcyBhcmUgbWFpbmx5IHJlbGF0ZWQgdG8gY29uY3VycmVuY3ksIG1lbW9yeSBtYW5hZ2VtZW50LCBwYWdlIHRhYmxlIGZyZWVpbmcsIGxvY2tpbmcsIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLCB3aGljaCBLQVNBTiBhbmQgTG9ja2RlcCB3b3VsZCBiZSBtb3JlIHJlbGV2YW50IGZvci5cblxuRmlyc3QsIHRoZSBwYXRjaCBpdHNlbGYgaXMgYWJvdXQgbWFraW5nIHRoZSBgTU1VX0dBVEhFUl9SQ1VfVEFCTEVfRlJFRWAgb3B0aW9uIHN0YW5kYXJkIGFjcm9zcyBhcmNoaXRlY3R1cmVzLiBFc3NlbnRpYWxseSwgaXQncyBhYm91dCBzdGFuZGFyZGl6aW5nIGhvdyBwYWdlIHRhYmxlcyBhcmUgZnJlZWQgdXNpbmcgUkNVIG1lY2hhbmlzbXMsIGludm9sdmluZyBgdGxiX3JlbW92ZV90YWJsZWAgYW5kIGB0bGJfcmVtb3ZlX3B0ZGVzY2AuXG5cbk5vdywgbGV0J3Mgd2FsayB0aHJvdWdoIHRoZSBtb2RpZmllZCBmaWxlczpcblxuKiAgIFRoZSBkb2N1bWVudGF0aW9uIGlzIGdldHRpbmcgdXBkYXRlZCB0byByZWZsZWN0IHBhZ2UgdGFibGUgbG9ja2luZyBydWxlcyBhbmQgUkNVIHVzYWdlLiBHb29kLlxuKiAgIFRoZSBgS2NvbmZpZ2AgZmlsZXMgYXJlIGJlaW5nIGNsZWFuZWQgdXAsIHJlbW92aW5nIGFuZCBjb25zb2xpZGF0aW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhpcyBzZWVtcyBzdHJhaWdodGZvcndhcmQg4oCTIHNpbXBsaWZ5aW5nIHRoZSBidWlsZCBwcm9jZXNzLlxuKiAgIFRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYEtjb25maWdgIGZpbGVzIGFyZSBnZXR0aW5nIHRoZWlyIGNvbmZpZ3VyYXRpb25zIGNsZWFuZWQgdXAgYXMgd2VsbC4gQWxzbywgZXhwZWN0ZWQuXG4qICAgV2UncmUgc2VlaW5nIGNoYW5nZXMgaW4gYHBnYWxsb2MuaGAgaGVhZGVycyBvbiBzZXZlcmFsIGFyY2hpdGVjdHVyZXMgKGBhcmNgLCBgbWljcm9ibGF6ZWAsIGB4dGVuc2FgKSB3aGVyZSBkaXJlY3QgZnJlZWluZyBpcyBiZWluZyByZXBsYWNlZCB3aXRoIGB0bGJfcmVtb3ZlX3B0ZGVzY2AuIFRoYXQgc2VlbXMgbGlrZSBhIG1vdmUgdG93YXJkcyB0aGUgUkNVIGFwcHJvYWNoLlxuKiAgIFRoZXJlJ3MgYW4gaW1wbGVtZW50YXRpb24gb2YgYF9fdGxiX3JlbW92ZV90YWJsZWAgYWxvbmcgd2l0aCBhIHNwaW5sb2NrIGZvciBhbGxvY2F0aW9uL2ZyZWVpbmcgb24gYG02OGtgLiBUaGF04oCZcyBnb29kIHRvIHNlZSwgc3BpbmxvY2tzIGFyZSBuZWNlc3NhcnkgZm9yIGNvbmN1cnJlbnQgYWNjZXNzIHByb3RlY3Rpb24uXG4qICAgYHNoYCBhbmQgYHNwYXJjYCBhcmNoaXRlY3R1cmVzIGFyZSBhbHNvIGdldHRpbmcgaW1wbGVtZW50YXRpb25zIHJlbGF0ZWQgdG8gYF9fdGxiX3JlbW92ZV90YWJsZWAuIENvbnNpc3RlbnQgd2l0aCB0aGUgUkNVIGNoYW5nZS5cbiogICBJbiBgaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaGAsIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzIGZvciB0aGUgUkNVLWJhc2VkIHRhYmxlIGZyZWVpbmcgYXJlIHJlbW92ZWQsIGluZGljYXRpbmcgdGhhdCBpdCdzIG5vdyB0aGUgc3RhbmRhcmQgYXBwcm9hY2guXG4qICAgVGhlIGBtbS9LY29uZmlnYCBmaWxlIGhhcyBhIGRlcGVuZGVuY3kgdXBkYXRlIHJlbGF0ZWQgdG8gYFBUX1JFQ0xBSU1gLlxuKiAgIEEgY29tbWVudCB1cGRhdGUgaW4gYG1tL2d1cC5jYC5cbiogICBgbW0vaHVnZV9tZW1vcnkuY2AgaGFzIGBwdGVfZnJlZShtbSwgcGd0YWJsZSlgIGNoYW5nZWQgdG8gYHB0ZV9mcmVlX2RlZmVyKG1tLCBwZ3RhYmxlKWAgaW4gYHphcF9kZXBvc2l0ZWRfdGFibGVgLiBUaGlzIGxvb2tzIGltcG9ydGFudCwgYmVjYXVzZSBkZWZlcnJpbmcgdGhlIGZyZWUgdmlhIFJDVSBpcyB0aGUgY29yZSBvZiB0aGUgcGF0Y2guXG4qICAgYG1tL21tdV9nYXRoZXIuY2AgZ2V0cyByaWQgb2YgdGhlIG9sZCBjb25kaXRpb25hbCBjb2RlIHJlbGF0ZWQgdG8gUkNVIHRhYmxlIGZyZWVpbmcuXG4qICAgVGhlIGBtbS9wZ3RhYmxlLWdlbmVyaWMuY2AgY29tbWVudHMgYXJlIHVwZGF0ZWQuXG5cbk9rYXksIHRoZSBjcnVjaWFsIHBhcnQgaXMgdGhlIGB6YXBfZGVwb3NpdGVkX3RhYmxlYCBhbmQgYHB0ZV9mcmVlX2RlZmVyYCBjaGFuZ2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBgcHRlX2ZyZWVfZGVmZXJgIHdvcmtzLiBJJ20gZ29pbmcgdG8gcnVuIGBncmVwcGVyYCBhY3Jvc3MgdGhlIGNvZGViYXNlIHRvIGdldCBhIGZ1bGwgcGljdHVyZSBvZiBgcHRlX2ZyZWVfZGVmZXJgIHVzYWdlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBjaGFuZ2VzIGludGVyYWN0IHdpdGggdGhlIGV4aXN0aW5nIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwYWdlIHRhYmxlIHN0cnVjdHVyZXMsIGFuZCBkZXRlcm1pbmUgd2hhdCB0aGUgZGVmZXJyZWQgZnJlZWluZyBhY3R1YWxseSBlbnRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTk5MiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjQ0OjQ5Ljk0OTUxNjY0NloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxNzg2MzcyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwdGVfZnJlZV9kZWZlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGdhbGxvYy5oPTQzPXN0YXRpYyBpbmxpbmUgdm9pZCBwdGVfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHB0ZXBhZ2UpXFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGdhbGxvYy5oLTQ3LVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmg6NDg6LyogYXJjaCB1c2UgcHRlX2ZyZWVfZGVmZXIoKSBpbXBsZW1lbnRhdGlvbiBpbiBhcmNoL3Bvd2VycGMvbW0vcGd0YWJsZS1mcmFnLmMgKi9cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGdhbGxvYy5oOjQ5OiNkZWZpbmUgcHRlX2ZyZWVfZGVmZXIgcHRlX2ZyZWVfZGVmZXJcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGdhbGxvYy5oOjUwOnZvaWQgcHRlX2ZyZWVfZGVmZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwZ3RhYmxlKTtcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGdhbGxvYy5oLTUxLVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL3BndGFibGUtZnJhZy5jPTExNz12b2lkIHB0ZV9mcmFnbWVudF9mcmVlKHVuc2lnbmVkIGxvbmcgKnRhYmxlLCBpbnQga2VybmVsKVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL3BndGFibGUtZnJhZy5jLTEzMy0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxuYXJjaC9wb3dlcnBjL21tL3BndGFibGUtZnJhZy5jOjEzNDp2b2lkIHB0ZV9mcmVlX2RlZmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcGd0YWJsZSlcXG5hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZS1mcmFnLmMtMTM1LXtcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmg9MTUxPXN0YXRpYyBpbmxpbmUgdm9pZCBwbWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGdhbGxvYy5oLTE2Ny1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGdhbGxvYy5oOjE2ODovKiBhcmNoIHVzZSBwdGVfZnJlZV9kZWZlcigpIGltcGxlbWVudGF0aW9uIGluIGFyY2gvczM5MC9tbS9wZ2FsbG9jLmMgKi9cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGdhbGxvYy5oOjE2OTojZGVmaW5lIHB0ZV9mcmVlX2RlZmVyIHB0ZV9mcmVlX2RlZmVyXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BnYWxsb2MuaDoxNzA6dm9pZCBwdGVfZnJlZV9kZWZlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHBndGFibGUpO1xcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgtMTcxLVxcbi0tXFxuYXJjaC9zMzkwL21tL3BnYWxsb2MuYz0xNDk9c3RhdGljIHZvaWQgcHRlX2ZyZWVfbm93KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG4tLVxcbmFyY2gvczM5MC9tbS9wZ2FsbG9jLmMtMTU1LVxcbmFyY2gvczM5MC9tbS9wZ2FsbG9jLmM6MTU2OnZvaWQgcHRlX2ZyZWVfZGVmZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwZ3RhYmxlKVxcbmFyY2gvczM5MC9tbS9wZ2FsbG9jLmMtMTU3LXtcXG4tLVxcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY182NC5oPTY2PXZvaWQgcHRlX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwdGVwYWdlKTtcXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2NfNjQuaC02Ny1cXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2NfNjQuaDo2ODovKiBhcmNoIHVzZSBwdGVfZnJlZV9kZWZlcigpIGltcGxlbWVudGF0aW9uIGluIGFyY2gvc3BhcmMvbW0vaW5pdF82NC5jICovXFxuYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ2FsbG9jXzY0Lmg6Njk6I2RlZmluZSBwdGVfZnJlZV9kZWZlciBwdGVfZnJlZV9kZWZlclxcbmFyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGdhbGxvY182NC5oOjcwOnZvaWQgcHRlX2ZyZWVfZGVmZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwZ3RhYmxlKTtcXG5hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BnYWxsb2NfNjQuaC03MS1cXG4tLVxcbmFyY2gvc3BhcmMvbW0vaW5pdF82NC5jPTI4NjY9c3RhdGljIHZvaWQgcHRlX2ZyZWVfbm93KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG4tLVxcbmFyY2gvc3BhcmMvbW0vaW5pdF82NC5jLTI4NzMtXFxuYXJjaC9zcGFyYy9tbS9pbml0XzY0LmM6Mjg3NDp2b2lkIHB0ZV9mcmVlX2RlZmVyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ3RhYmxlX3QgcGd0YWJsZSlcXG5hcmNoL3NwYXJjL21tL2luaXRfNjQuYy0yODc1LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oPTExNT1zdGF0aWMgaW5saW5lIHZvaWQgcHRlX3VubWFwKHB0ZV90ICpwdGUpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0xMjAtXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg6MTIxOnZvaWQgcHRlX2ZyZWVfZGVmZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBndGFibGVfdCBwZ3RhYmxlKTtcXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0xMjItXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTI0NzQ9c3RhdGljIGlubGluZSB2b2lkIHphcF9kZXBvc2l0ZWRfdGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTI0NzgtXFx0cGd0YWJsZSA9IHBndGFibGVfdHJhbnNfaHVnZV93aXRoZHJhdyhtbSwgcG1kKTtcXG5tbS9odWdlX21lbW9yeS5jOjI0Nzk6XFx0cHRlX2ZyZWVfZGVmZXIobW0sIHBndGFibGUpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMjQ4MC1cXHRtbV9kZWNfbnJfcHRlcyhtbSk7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MTg2Mj1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yMDY3LVxcdHBhZ2VfdGFibGVfY2hlY2tfcHRlX2NsZWFyX3JhbmdlKG1tLCBoYWRkciwgcGd0X3BtZCk7XFxubW0va2h1Z2VwYWdlZC5jOjIwNjg6XFx0cHRlX2ZyZWVfZGVmZXIobW0sIHBtZF9wZ3RhYmxlKHBndF9wbWQpKTtcXG5tbS9raHVnZXBhZ2VkLmMtMjA2OS1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yMTUxPXN0YXRpYyB2b2lkIHJldHJhY3RfcGFnZV90YWJsZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgcGdvZmYpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjIyOC1cXHRcXHRcXHRwYWdlX3RhYmxlX2NoZWNrX3B0ZV9jbGVhcl9yYW5nZShtbSwgYWRkciwgcGd0X3BtZCk7XFxubW0va2h1Z2VwYWdlZC5jOjIyMjk6XFx0XFx0XFx0cHRlX2ZyZWVfZGVmZXIobW0sIHBtZF9wZ3RhYmxlKHBndF9wbWQpKTtcXG5tbS9raHVnZXBhZ2VkLmMtMjIzMC1cXHRcXHR9XFxuLS1cXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYz0yMjE9cG1kX3QgcG1kcF9jb2xsYXBzZV9mbHVzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbi0tXFxubW0vcGd0YWJsZS1nZW5lcmljLmMtMjM5LVxcbm1tL3BndGFibGUtZ2VuZXJpYy5jOjI0MDovKiBhcmNoIGRlZmluZSBwdGVfZnJlZV9kZWZlciBpbiBhc20vcGdhbGxvYy5oIGZvciBpdHMgb3duIGltcGxlbWVudGF0aW9uICovXFxubW0vcGd0YWJsZS1nZW5lcmljLmM6MjQxOiNpZm5kZWYgcHRlX2ZyZWVfZGVmZXJcXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYy0yNDItc3RhdGljIHZvaWQgcHRlX2ZyZWVfbm93KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG4tLVxcbm1tL3BndGFibGUtZ2VuZXJpYy5jLTI0OS1cXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYzoyNTA6dm9pZCBwdGVfZnJlZV9kZWZlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGd0YWJsZV90IHBndGFibGUpXFxubW0vcGd0YWJsZS1nZW5lcmljLmMtMjUxLXtcXG4tLVxcbm1tL3BndGFibGUtZ2VuZXJpYy5jLTI1Ni19XFxubW0vcGd0YWJsZS1nZW5lcmljLmM6MjU3OiNlbmRpZiAvKiBwdGVfZnJlZV9kZWZlciAqL1xcbm1tL3BndGFibGUtZ2VuZXJpYy5jLTI1OC0jZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjQ0OjUxLjU2NzM4NTY3OVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MjAyMzI3NzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzIGFuZCBLTVNBTiBBc3Nlc3NtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgaXQncyBhIGZhaXJseSBzaWduaWZpY2FudCB1bmlmaWNhdGlvbiBlZmZvcnQgaW4gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBNTVUgZ2F0aGVyIHRhYmxlIGZyZWVpbmcuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgc3RhbmRhcmRpemluZyBvbiBSQ1UgdGFibGUgZnJlZWluZyBhY3Jvc3MgYWxsIGFyY2hpdGVjdHVyZXMsIHdoaWNoLCBpZiBkb25lIHJpZ2h0LCBzaG91bGQgc2ltcGxpZnkgdGhpbmdzIGFuZCBpbXByb3ZlIG92ZXJhbGwgcm9idXN0bmVzcy4gU3BlY2lmaWNhbGx5LCBJIHNlZSBpdCdzIGNvbnZlcnRpbmcgYXJjaGl0ZWN0dXJlcyBsaWtlIGFyYywgbTY4aywgbWljcm9ibGF6ZSwgc2gsIHNwYXJjLCBhbmQgeHRlbnNhIHRvIHVzZSBgdGxiX3JlbW92ZV9wdGRlc2NgIG9yIGB0bGJfcmVtb3ZlX3RhYmxlYCB3aXRoIGBfX3RsYl9yZW1vdmVfdGFibGVgLiBUaGUgbTY4ayBhbmQgc3BhcmMgY29uY3VycmVuY3kgZml4ZXMgYXJlIGRlZmluaXRlbHkgYSBnb29kIHRoaW5nLiBJJ20gYWxzbyBub3RpbmcgdGhlIGNoYW5nZSB0byBgcHRlX2ZyZWVfZGVmZXJgIGluIGB6YXBfZGVwb3NpdGVkX3RhYmxlYCwgd2hpY2ggaXMgc3RhbmRhcmQgcHJhY3RpY2UgaW4gdGhlc2UgdHlwZXMgb2YgY2hhbmdlcy4gQW5kIHJlbW92aW5nIHRob3NlIEtjb25maWcgb3B0aW9ucyBzdWdnZXN0cyB0aGUgZGVzaWduIGhhcyBtYXR1cmVkIHRvIHRoZSBwb2ludCBpdCdzIHNhZmUgdG8gZGVmYXVsdCB0byB0aGUgUkNVIGFwcHJvYWNoLlxuXG5Ob3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogRG9lcyB0aGlzIGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcz8gSSdtIGltbWVkaWF0ZWx5IGdvaW5nIHRocm91Z2ggbXkgbWVudGFsIGNoZWNrbGlzdC4gRmlyc3QsIGFyZSB0aGVyZSBhbnkga2VybmVsIHN0cnVjdHVyZXMgYmVpbmcgcGFzc2VkIHRvIHVzZXJzcGFjZT8gTm8sIG5vdGhpbmcganVtcGluZyBvdXQgYXQgbWUgaW4gdGVybXMgb2YgaW9jdGwvc3lzY2FsbC9uZXRsaW5rL0JQRi9zb2NrZXQvY29weV90b191c2VyIGNoYW5nZXMuIEdvb2QuIFNlY29uZCwgYXJlIHRoZXJlIGFueSBuZXcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHBhZGRpbmcgaXNzdWVzLCBvciBzdHJ1Y3QgZmllbGRzIHRoYXQgY291bGQgYmUgcHJvYmxlbWF0aWM/IE5vcGUsIG5vdGhpbmcgbGlrZSB0aGF0IGhlcmUuIFRoaXJkLCBhcmUgd2UgYWxsb2NhdGluZyBvciBpbml0aWFsaXppbmcgYW55IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQ/IENoZWNraW5nIGBtNjhrL21tL21vdG9yb2xhLmNgLCBhaCwgSSBzZWUgYHBhZ2V0YWJsZV9hbGxvYyhHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywgMClgIGlzIHVzZWQsIHplcm9pbmcgcGFnZSB0YWJsZSBhbGxvY2F0aW9ucywgd2hpY2ggaXMgYXMgaXQgc2hvdWxkIGJlLiBBbmQgbGFzdGx5LCB3aGF0IGFib3V0IGFueSBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBkYXRhIGJ1ZmZlcnM/IE5vdCBpbiB0aGlzIHBhdGNoLlxuXG5TbywgdGhpcyBwYXRjaCBpcyBwcmltYXJpbHkgY29uY2VybmVkIHdpdGggcGFnZSB0YWJsZSBsaWZldGltZSwgVExCIGdhdGhlcmluZywgUkNVIHJlY2xhbWF0aW9uIG9mIHBhZ2UgdGFibGUgcGFnZXMsIGxvY2tpbmcsIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBzeW5jaHJvbml6YXRpb24uIE15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyB0byB0aGUgcG90ZW50aWFsIHBpdGZhbGxzIGluIHRoaXMgYXJlYTogY29uY3VycmVuY3kgaXNzdWVzLCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBtZW1vcnkgbGVha3MsIGludmFsaWQgZnJlZXMsIG9yIGxvY2tpbmcgcHJvYmxlbXMuIEZvcnR1bmF0ZWx5LCBhbGwgdGhlIHRvb2xzIGFyZSB0aGVyZSB0byBjYXRjaCB0aG9zZSB0eXBlcyBvZiBidWdzOiBLQVNBTiwgTE9DS0RFUCwgYW5kIHRoZSB2YXJpb3VzIHBhZ2UgdGFibGUgY2hlY2tlcnMgYW5kIGRlYnVnZ2luZyB0b29scy4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlcyBhbmQgdGhlIHNhZmVndWFyZHMgaW4gcGxhY2UsIEknbSBjb21mb3J0YWJsZSBzYXlpbmcgdGhlcmUncyBhYnNvbHV0ZWx5IG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Iga2VybmVsIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGVseSBgZmFsc2VgLlxuXG5MZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nOlxuLSBgTmVlZHNLTVNBTmA6IGZhbHNlLiBZZXAuXG4tIGBLTVNBTlJlYXNvbmluZ2A6IGRldGFpbGVkIHJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5LiBDaGVjay5cblxuVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MzIyLCJPdXRwdXRUb2tlbnMiOjI2NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzo0NDo1Ny43Njk3MTU1NzJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBzdGFuZGFyZGl6ZXMgcGFnZSB0YWJsZSBmcmVlaW5nIGFjcm9zcyBhcmNoaXRlY3R1cmVzIHRvIHVzZSBSQ1UtZGVmZXJyZWQgZnJlZWluZyAodW5pZnlpbmcgTU1VIGdhdGhlciBhbmQgcmVtb3ZpbmcgQ09ORklHX01NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgLyBDT05GSUdfTU1VX0dBVEhFUl9UQUJMRV9GUkVFIGNvbmZpZ3MpLiBJdCBhZGFwdHMgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHBhZ2UgdGFibGUgZnJlZWluZyByb3V0aW5lcyAoZS5nLiBtNjhrLCBhcmMsIG1pY3JvYmxhemUsIHNoLCBzcGFyYywgeHRlbnNhKSB0byB1c2UgdGxiX3JlbW92ZV9wdGRlc2MgLyB0bGJfcmVtb3ZlX3RhYmxlLCBhZGRzIHNwaW5sb2NrcyBmb3IgcHRhYmxlIG1hbmFnZW1lbnQgb24gbTY4ay9zcGFyYywgYW5kIHVwZGF0ZXMgZGVmZXJyZWQgZnJlZWluZyBpbiBUSFAgKHB0ZV9mcmVlX2RlZmVyKS5cXG5cXG5UaGVzZSBjaGFuZ2VzIGRlYWwgc3RyaWN0bHkgd2l0aCBNTVUgZ2F0aGVyIGxpZmVjeWNsZSwgUkNVIGdyYWNlIHBlcmlvZHMgZm9yIHBhZ2UgdGFibGUgbWVtb3J5LCBhbmQgc3luY2hyb25pemF0aW9uIG9mIHBhZ2UgdGFibGUgZnJlZWluZyB2cyBsb2NrbGVzcy9SQ1UgcGFnZSB0YWJsZSB3YWxrZXJzLiBQb3RlbnRpYWwgYnVncyBpbiB0aGVzZSBjaGFuZ2VzIHdvdWxkIG1hbmlmZXN0IGFzIHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgY29uY3VycmVuY3kgcmFjZXMsIG9yIGRlYWRsb2Nrc+KAlHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgcGFkZGluZyBsZWFrcywgb3IgdW5pbml0aWFsaXplZCByZWFkcy9jb3BpZXMgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgc3RhbmRhcmRpemVzIHBhZ2UgdGFibGUgZnJlZWluZyBhY3Jvc3MgYXJjaGl0ZWN0dXJlcyB0byB1c2UgUkNVLWRlZmVycmVkIGZyZWVpbmcgKHVuaWZ5aW5nIE1NVSBnYXRoZXIgYW5kIHJlbW92aW5nIENPTkZJR19NTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFIC8gQ09ORklHX01NVV9HQVRIRVJfVEFCTEVfRlJFRSBjb25maWdzKS4gSXQgYWRhcHRzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBwYWdlIHRhYmxlIGZyZWVpbmcgcm91dGluZXMgKGUuZy4gbTY4aywgYXJjLCBtaWNyb2JsYXplLCBzaCwgc3BhcmMsIHh0ZW5zYSkgdG8gdXNlIHRsYl9yZW1vdmVfcHRkZXNjIC8gdGxiX3JlbW92ZV90YWJsZSwgYWRkcyBzcGlubG9ja3MgZm9yIHB0YWJsZSBtYW5hZ2VtZW50IG9uIG02OGsvc3BhcmMsIGFuZCB1cGRhdGVzIGRlZmVycmVkIGZyZWVpbmcgaW4gVEhQIChwdGVfZnJlZV9kZWZlcikuXFxuXFxuVGhlc2UgY2hhbmdlcyBkZWFsIHN0cmljdGx5IHdpdGggTU1VIGdhdGhlciBsaWZlY3ljbGUsIFJDVSBncmFjZSBwZXJpb2RzIGZvciBwYWdlIHRhYmxlIG1lbW9yeSwgYW5kIHN5bmNocm9uaXphdGlvbiBvZiBwYWdlIHRhYmxlIGZyZWVpbmcgdnMgbG9ja2xlc3MvUkNVIHBhZ2UgdGFibGUgd2Fsa2Vycy4gUG90ZW50aWFsIGJ1Z3MgaW4gdGhlc2UgY2hhbmdlcyB3b3VsZCBtYW5pZmVzdCBhcyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIGNvbmN1cnJlbmN5IHJhY2VzLCBvciBkZWFkbG9ja3PigJR3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHBhZGRpbmcgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgcmVhZHMvY29waWVzIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjlbg5[1] Phase: Succeeded StartedAt: 2026-09-01 23:45:24 +0000 UTC FinishedAt: 2026-09-01 23:45:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjlbg5[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-01 23:45:24 +0000 UTC FinishedAt: 2026-09-01 23:45:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjlbg5[2] Phase: Succeeded StartedAt: 2026-09-01 23:45:24 +0000 UTC FinishedAt: 2026-09-02 03:31:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjlbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tlb_remove_table","pte_free_defer","zap_huge_pmd","tlb_remove_table_sync_rcu","tlb_remove_table_sync_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"6f3ac781-9301-44ab-91f0-bc64efce9720","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-01 23:45:24 +0000 UTC FinishedAt: 2026-09-02 03:31:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tlb_remove_table","pte_free_defer","zap_huge_pmd","tlb_remove_table_sync_rcu","tlb_remove_table_sync_one"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"6f3ac781-9301-44ab-91f0-bc64efce9720","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowjlbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tlb_remove_table","pte_free_defer","zap_huge_pmd","tlb_remove_table_sync_rcu","tlb_remove_table_sync_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"6f3ac781-9301-44ab-91f0-bc64efce9720","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-01 23:45:24 +0000 UTC FinishedAt: 2026-09-01 23:45:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjlbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tlb_remove_table","pte_free_defer","zap_huge_pmd","tlb_remove_table_sync_rcu","tlb_remove_table_sync_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"6f3ac781-9301-44ab-91f0-bc64efce9720","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-01 23:45:24 +0000 UTC FinishedAt: 2026-09-01 23:45:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowjlbg5/series-workflowjlbg5-convert-artifact-1578666797/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjlbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tlb_remove_table","pte_free_defer","zap_huge_pmd","tlb_remove_table_sync_rcu","tlb_remove_table_sync_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"6f3ac781-9301-44ab-91f0-bc64efce9720","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-01 23:45:34 +0000 UTC FinishedAt: 2026-09-02 00:03:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjlbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tlb_remove_table","pte_free_defer","zap_huge_pmd","tlb_remove_table_sync_rcu","tlb_remove_table_sync_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"6f3ac781-9301-44ab-91f0-bc64efce9720","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-01 23:45:34 +0000 UTC FinishedAt: 2026-09-02 00:03:40 +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:*8dd44356-e45d-40e4-a607-307a86350d14,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-workflowjlbg5/series-workflowjlbg5-convert-artifact-1578666797/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": "8dd4d257-cc58-490e-885c-de7b910ed0b1", "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-workflowjlbg5/series-workflowjlbg5-build-action-706135843/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjlbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tlb_remove_table","pte_free_defer","zap_huge_pmd","tlb_remove_table_sync_rcu","tlb_remove_table_sync_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"6f3ac781-9301-44ab-91f0-bc64efce9720","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-01 23:45:34 +0000 UTC FinishedAt: 2026-09-02 00:03:30 +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:*8dd44356-e45d-40e4-a607-307a86350d14,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-workflowjlbg5/series-workflowjlbg5-convert-artifact-1578666797/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": "8dd4d257-cc58-490e-885c-de7b910ed0b1", "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-workflowjlbg5/series-workflowjlbg5-build-action-706135843/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjlbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tlb_remove_table","pte_free_defer","zap_huge_pmd","tlb_remove_table_sync_rcu","tlb_remove_table_sync_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"6f3ac781-9301-44ab-91f0-bc64efce9720","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-02 00:03:40 +0000 UTC FinishedAt: 2026-09-02 00:03:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjlbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tlb_remove_table","pte_free_defer","zap_huge_pmd","tlb_remove_table_sync_rcu","tlb_remove_table_sync_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"6f3ac781-9301-44ab-91f0-bc64efce9720","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-02 00:03:40 +0000 UTC FinishedAt: 2026-09-02 00:03:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjlbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tlb_remove_table","pte_free_defer","zap_huge_pmd","tlb_remove_table_sync_rcu","tlb_remove_table_sync_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"6f3ac781-9301-44ab-91f0-bc64efce9720","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-02 00:03:40 +0000 UTC FinishedAt: 2026-09-02 00:03:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjlbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tlb_remove_table","pte_free_defer","zap_huge_pmd","tlb_remove_table_sync_rcu","tlb_remove_table_sync_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"6f3ac781-9301-44ab-91f0-bc64efce9720","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-02 00:03:40 +0000 UTC FinishedAt: 2026-09-02 00:03:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"6f3ac781-9301-44ab-91f0-bc64efce9720","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowjlbg5/series-workflowjlbg5-convert-artifact-3216398984/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjlbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tlb_remove_table","pte_free_defer","zap_huge_pmd","tlb_remove_table_sync_rcu","tlb_remove_table_sync_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"6f3ac781-9301-44ab-91f0-bc64efce9720","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-02 00:03:50 +0000 UTC FinishedAt: 2026-09-02 00:05:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjlbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tlb_remove_table","pte_free_defer","zap_huge_pmd","tlb_remove_table_sync_rcu","tlb_remove_table_sync_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"6f3ac781-9301-44ab-91f0-bc64efce9720","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-02 00:03:50 +0000 UTC FinishedAt: 2026-09-02 00:05:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8dd4d257-cc58-490e-885c-de7b910ed0b1,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-workflowjlbg5/series-workflowjlbg5-build-action-706135843/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-workflowjlbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tlb_remove_table","pte_free_defer","zap_huge_pmd","tlb_remove_table_sync_rcu","tlb_remove_table_sync_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"6f3ac781-9301-44ab-91f0-bc64efce9720","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-02 00:05:39 +0000 UTC FinishedAt: 2026-09-02 00:05:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjlbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tlb_remove_table","pte_free_defer","zap_huge_pmd","tlb_remove_table_sync_rcu","tlb_remove_table_sync_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"6f3ac781-9301-44ab-91f0-bc64efce9720","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-02 00:05:39 +0000 UTC FinishedAt: 2026-09-02 00:05:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjlbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tlb_remove_table","pte_free_defer","zap_huge_pmd","tlb_remove_table_sync_rcu","tlb_remove_table_sync_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"6f3ac781-9301-44ab-91f0-bc64efce9720","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-02 00:05:39 +0000 UTC FinishedAt: 2026-09-02 00:22:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjlbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tlb_remove_table","pte_free_defer","zap_huge_pmd","tlb_remove_table_sync_rcu","tlb_remove_table_sync_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"6f3ac781-9301-44ab-91f0-bc64efce9720","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-02 00:05:39 +0000 UTC FinishedAt: 2026-09-02 00:22:55 +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:*8dd44356-e45d-40e4-a607-307a86350d14,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-workflowjlbg5/series-workflowjlbg5-convert-artifact-3216398984/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": "be886028-8d06-4c9e-baa7-6582ddedf4a0", "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-workflowjlbg5/series-workflowjlbg5-build-action-2928606772/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjlbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tlb_remove_table","pte_free_defer","zap_huge_pmd","tlb_remove_table_sync_rcu","tlb_remove_table_sync_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"6f3ac781-9301-44ab-91f0-bc64efce9720","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-02 00:05:39 +0000 UTC FinishedAt: 2026-09-02 00:22:45 +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:*8dd44356-e45d-40e4-a607-307a86350d14,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-workflowjlbg5/series-workflowjlbg5-convert-artifact-3216398984/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": "be886028-8d06-4c9e-baa7-6582ddedf4a0", "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-workflowjlbg5/series-workflowjlbg5-build-action-2928606772/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjlbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tlb_remove_table","pte_free_defer","zap_huge_pmd","tlb_remove_table_sync_rcu","tlb_remove_table_sync_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"6f3ac781-9301-44ab-91f0-bc64efce9720","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-02 00:22:55 +0000 UTC FinishedAt: 2026-09-02 00:22:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjlbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tlb_remove_table","pte_free_defer","zap_huge_pmd","tlb_remove_table_sync_rcu","tlb_remove_table_sync_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"6f3ac781-9301-44ab-91f0-bc64efce9720","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-02 00:22:55 +0000 UTC FinishedAt: 2026-09-02 00:22:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjlbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tlb_remove_table","pte_free_defer","zap_huge_pmd","tlb_remove_table_sync_rcu","tlb_remove_table_sync_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"6f3ac781-9301-44ab-91f0-bc64efce9720","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-02 00:22:55 +0000 UTC FinishedAt: 2026-09-02 00:24:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjlbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tlb_remove_table","pte_free_defer","zap_huge_pmd","tlb_remove_table_sync_rcu","tlb_remove_table_sync_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"6f3ac781-9301-44ab-91f0-bc64efce9720","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-02 00:22:55 +0000 UTC FinishedAt: 2026-09-02 00:24:34 +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:*be886028-8d06-4c9e-baa7-6582ddedf4a0,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-workflowjlbg5/series-workflowjlbg5-build-action-2928606772/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-workflowjlbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tlb_remove_table","pte_free_defer","zap_huge_pmd","tlb_remove_table_sync_rcu","tlb_remove_table_sync_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"6f3ac781-9301-44ab-91f0-bc64efce9720","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-02 00:24:44 +0000 UTC FinishedAt: 2026-09-02 03:31:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjlbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tlb_remove_table","pte_free_defer","zap_huge_pmd","tlb_remove_table_sync_rcu","tlb_remove_table_sync_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"6f3ac781-9301-44ab-91f0-bc64efce9720","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-02 00:24:44 +0000 UTC FinishedAt: 2026-09-02 03:31:25 +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":["tlb_remove_table","pte_free_defer","zap_huge_pmd","tlb_remove_table_sync_rcu","tlb_remove_table_sync_one"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*8dd4d257-cc58-490e-885c-de7b910ed0b1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*be886028-8d06-4c9e-baa7-6582ddedf4a0,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-workflowjlbg5/series-workflowjlbg5-build-action-706135843/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-workflowjlbg5/series-workflowjlbg5-build-action-2928606772/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjlbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tlb_remove_table","pte_free_defer","zap_huge_pmd","tlb_remove_table_sync_rcu","tlb_remove_table_sync_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"6f3ac781-9301-44ab-91f0-bc64efce9720","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-02 00:24:44 +0000 UTC FinishedAt: 2026-09-02 00:24:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjlbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tlb_remove_table","pte_free_defer","zap_huge_pmd","tlb_remove_table_sync_rcu","tlb_remove_table_sync_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"6f3ac781-9301-44ab-91f0-bc64efce9720","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-02 00:24:44 +0000 UTC FinishedAt: 2026-09-02 00:24:49 +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":["tlb_remove_table","pte_free_defer","zap_huge_pmd","tlb_remove_table_sync_rcu","tlb_remove_table_sync_one"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjlbg5/series-workflowjlbg5-convert-artifact-62906689/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjlbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tlb_remove_table","pte_free_defer","zap_huge_pmd","tlb_remove_table_sync_rcu","tlb_remove_table_sync_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"6f3ac781-9301-44ab-91f0-bc64efce9720","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-02 00:24:44 +0000 UTC FinishedAt: 2026-09-02 00:24:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjlbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tlb_remove_table","pte_free_defer","zap_huge_pmd","tlb_remove_table_sync_rcu","tlb_remove_table_sync_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"6f3ac781-9301-44ab-91f0-bc64efce9720","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-02 00:24:44 +0000 UTC FinishedAt: 2026-09-02 00:24:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjlbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tlb_remove_table","pte_free_defer","zap_huge_pmd","tlb_remove_table_sync_rcu","tlb_remove_table_sync_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"6f3ac781-9301-44ab-91f0-bc64efce9720","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-02 00:24:44 +0000 UTC FinishedAt: 2026-09-02 00:24:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjlbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tlb_remove_table","pte_free_defer","zap_huge_pmd","tlb_remove_table_sync_rcu","tlb_remove_table_sync_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"6f3ac781-9301-44ab-91f0-bc64efce9720","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-02 00:24:54 +0000 UTC FinishedAt: 2026-09-02 03:31:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjlbg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["tlb_remove_table","pte_free_defer","zap_huge_pmd","tlb_remove_table_sync_rcu","tlb_remove_table_sync_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MMU","TRANSPARENT_HUGEPAGE"],"series_id":"6f3ac781-9301-44ab-91f0-bc64efce9720","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-02 00:24:54 +0000 UTC FinishedAt: 2026-09-02 03:31:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8dd4d257-cc58-490e-885c-de7b910ed0b1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*be886028-8d06-4c9e-baa7-6582ddedf4a0,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-workflowjlbg5/series-workflowjlbg5-build-action-706135843/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-workflowjlbg5/series-workflowjlbg5-build-action-2928606772/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-workflowjlbg5/series-workflowjlbg5-convert-artifact-62906689/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,}