Name: series-workflowj5cp4 Phase: Succeeded StartedAt: 2026-09-09 14:07:51 +0000 UTC FinishedAt: 2026-09-09 17:51:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj5cp4[0] Phase: Succeeded StartedAt: 2026-09-09 14:07:51 +0000 UTC FinishedAt: 2026-09-09 14:10:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj5cp4[0].run-triage Phase: Succeeded StartedAt: 2026-09-09 14:07:51 +0000 UTC FinishedAt: 2026-09-09 14:10:35 +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": "a9d7ced84989ec05be09b4b8428759ef60450a0f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EFI_POISONED_MEMORY", "MEMORY_FAILURE", "EFI_STUB", "EFI" ], "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": "a9d7ced84989ec05be09b4b8428759ef60450a0f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EFI_POISONED_MEMORY", "MEMORY_FAILURE", "EFI_STUB", "EFI" ], "series_id": "78467678-9406-49b6-8091-e91cf164230c" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "efi_hwpoison_record_pfn", "range_contains_poisoned_memory", "hwpoison_boot_page", "memory_failure" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE0OjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VGSV9QT0lTT05FRF9NRU1PUlkmIzM0OywKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OywKICAgICYjMzQ7RUZJX1NUVUImIzM0OywKICAgICYjMzQ7RUZJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZWZpX2h3cG9pc29uX3JlY29yZF9wZm4mIzM0OywKICAgICYjMzQ7cmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5JiMzNDssCiAgICAmIzM0O2h3cG9pc29uX2Jvb3RfcGFnZSYjMzQ7LAogICAgJiMzNDttZW1vcnlfZmFpbHVyZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIEVGSSBwb2lzb25lZCBtZW1vcnkgdHJhY2tpbmcgKENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZKSB0byBwcmVzZXJ2ZSBoYXJkd2FyZS1wb2lzb25lZCBwYWdlIGluZm9ybWF0aW9uIGFjcm9zcyBrZXhlYyByZWJvb3RzLiBcblxuMS4gQWxsb2NhdGlvbiBcdTAwMjYgSW5pdGlhbGl6YXRpb246IFRoZSB0YWJsZSBzdHJ1Y3R1cmUgYHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5YCBhbmQgaXRzIHRyYWlsaW5nIGJpdG1hcCBhcmUgYWxsb2NhdGVkIGluIHRoZSBFRkkgc3R1YiBhbmQgZXhwbGljaXRseSBmdWxseSBpbml0aWFsaXplZCAoYWxsIGhlYWRlciBmaWVsZHMgYXNzaWduZWQsIGFuZCBgbWVtc2V0KHBtLVx1MDAzZWJpdG1hcCwgMCwgYml0bWFwX3NpemUpYCBjbGVhcnMgdGhlIGJpdG1hcCkuXG4yLiBNZW1vcnkgQWNjZXNzZXM6IFJ1bnRpbWUgb3BlcmF0aW9ucyAoYHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeWAsIGBlZmlfaHdwb2lzb25fcmVjb3JkX3BmbmAsIGBwb2lzb25fYmxvY2tgLCBhbmQgYGh3cG9pc29uX2Jvb3RfcGFnZWApIG9ubHkgcmVhZCBhbmQgdXBkYXRlIGZ1bGx5IGluaXRpYWxpemVkIG1lbW9yeSBzdHJ1Y3R1cmVzIGFuZCBzdHJ1Y3QgcGFnZSBmbGFncy5cbjMuIE5vIFVuaW5pdGlhbGl6ZWQgTGVha3Mgb3IgUmVhZHM6IFRoZXJlIGFyZSBubyBkYXRhIHRyYW5zZmVycyB0byB1c2VyIHNwYWNlLCBubyBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIG5vIGV4cG9zZWQgcGFkZGluZy5cbjQuIEtBU0FOIHZzIEtNU0FOOiBQb3RlbnRpYWwgcmlza3Mgc3VjaCBhcyBpbnZhbGlkIHBvaW50ZXIgbWF0aCwgb3V0LW9mLWJvdW5kcyBiaXRtYXAgYWNjZXNzZXMsIG9yIG1lbW9yeSByZXNlcnZhdGlvbiBlcnJvcnMgYXJlIHByb3Blcmx5IGhhbmRsZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0cmFja2luZyBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgYWNyb3NzIGtleGVjIHZpYSBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSAoQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUlkpLiBJdCBpbnRyb2R1Y2VzIGhvb2tzIGluIGNvcmUgbWVtb3J5LWZhaWx1cmUgaGFuZGxpbmcgKGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuIGluIGFjdGlvbl9yZXN1bHQpIGFuZCBtZW1vcnkgaW5pdGlhbGl6YXRpb24vaG90cGx1ZyAoX19mcmVlX3BhZ2VzX2NvcmUsIGh3cG9pc29uX2Jvb3RfcGFnZSkuIFRoZXNlIHBhdGhzIGFyZSByZWFjaGFibGUgYXQgcnVudGltZSB2aWEgbWVtb3J5IGZhaWx1cmUgbWVjaGFuaXNtcyBzdWNoIGFzIG1hZHZpc2UoTUFEVl9IV1BPSVNPTikgYW5kIG1lbW9yeSBob3RwbHVnZ2luZyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2l0aCBFRkkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTQ6MDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhNzljYmIxMDVjNTk4MTdhZjMyYTIyYTAwMTcxZjdiYjkxNDY3NjU0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAxNDowOTowNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpLmMgYi9hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpLmNcbmluZGV4IDBjMzlhZGI5NmI5MTIuLjJiMzdiOTZhMzZlMDkgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmkuY1xuQEAgLTkzLDYgJiM0Mzs5Myw5IEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nICogY29uc3QgZWZpX3RhYmxlc1tdID0ge1xuICNpZmRlZiBDT05GSUdfVU5BQ0NFUFRFRF9NRU1PUllcbiBcdFx1MDAyNmVmaS51bmFjY2VwdGVkLFxuICNlbmRpZlxuJiM0MzsjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllcbiYjNDM7XHRcdTAwMjZlZmkucG9pc29uZWRfbWVtb3J5LFxuJiM0MzsjZW5kaWZcbiB9O1xuIFxuIHU2NCBlZmlfc2V0dXA7XHRcdC8qIGVmaSBzZXR1cF9kYXRhIHBoeXNpY2FsIGFkZHJlc3MgKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ1xuaW5kZXggMjllMDcyOTI5OWY1Yi4uYWFmY2Q0MWJjMDA2MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWdcbkBAIC0yNjMsNiAmIzQzOzI2MywxNCBAQCBjb25maWcgRUZJX0NPQ09fU0VDUkVUXG4gXHQgIHZpcnQvY29jby9lZmlfc2VjcmV0IG1vZHVsZSB0byBhY2Nlc3MgdGhlIHNlY3JldHMsIHdoaWNoIGluIHR1cm5cbiBcdCAgYWxsb3dzIHVzZXJzcGFjZSBwcm9ncmFtcyB0byBhY2Nlc3MgdGhlIGluamVjdGVkIHNlY3JldHMuXG4gXG4mIzQzO2NvbmZpZyBFRklfUE9JU09ORURfTUVNT1JZXG4mIzQzO1x0ZGVmX2Jvb2wgeVxuJiM0MztcdGRlcGVuZHMgb24gRUZJX1NUVUIgXHUwMDI2XHUwMDI2IE1FTU9SWV9GQUlMVVJFIFx1MDAyNlx1MDAyNiA2NEJJVFxuJiM0MztcdGhlbHBcbiYjNDM7XHQgIFJlY29yZCBwYWdlIGZyYW1lcyB0aGF0IGFyZSBoYXJkd2FyZS1wb2lzb25lZCB3aGlsZSB0aGlzIGtlcm5lbCBydW5zXG4mIzQzO1x0ICBpbnRvIGFuIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlLCBhbmQgaG9ub3IgdGhhdCB0YWJsZSBlYXJseSBvbiB0aGVcbiYjNDM7XHQgIG5leHQga2VybmVsIHNvIGEga2V4ZWMgZG9lcyBub3QgaGFuZCBrbm93bi1iYWQgUkFNIGJhY2sgb3V0LlxuJiM0MztcbiBjb25maWcgT1ZNRl9ERUJVR19MT0dcbiBcdGJvb2wgXCYjMzQ7RXhwb3NlIE9WTUYgZmlybXdhcmUgZGVidWcgbG9nIHZpYSBzeXNmc1wmIzM0O1xuIFx0ZGVwZW5kcyBvbiBFRklcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9NYWtlZmlsZSBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlXG5pbmRleCA4ZWZiY2Y2OTllNGZmLi4wNWQwYTQ5MDkyM2U1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlXG5AQCAtNDMsNCAmIzQzOzQzLDUgQEAgb2JqLSQoQ09ORklHX0VGSV9FQVJMWUNPTilcdFx0JiM0Mzs9IGVhcmx5Y29uLm9cbiBvYmotJChDT05GSUdfVUVGSV9DUEVSX0FSTSlcdFx0JiM0Mzs9IGNwZXItYXJtLm9cbiBvYmotJChDT05GSUdfVUVGSV9DUEVSX1g4NilcdFx0JiM0Mzs9IGNwZXIteDg2Lm9cbiBvYmotJChDT05GSUdfVU5BQ0NFUFRFRF9NRU1PUlkpXHRcdCYjNDM7PSB1bmFjY2VwdGVkX21lbW9yeS5vXG4mIzQzO29iai0kKENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZKVx0JiM0Mzs9IHBvaXNvbi5vXG4gb2JqLSQoQ09ORklHX1RFRV9TVE1NX0VGSSlcdFx0JiM0Mzs9IHN0bW0vdGVlX3N0bW1fZWZpLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jXG5pbmRleCA2ZDk4N2Q3Zjk3NzgxLi41NWIyZWU1M2ZjMjY4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jXG5AQCAtNTUsNiAmIzQzOzU1LDkgQEAgc3RydWN0IGVmaSBfX3JlYWRfbW9zdGx5IGVmaSA9IHtcbiAjaWZkZWYgQ09ORklHX1VOQUNDRVBURURfTUVNT1JZXG4gXHQudW5hY2NlcHRlZFx0XHQ9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIsXG4gI2VuZGlmXG4mIzQzOyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWVxuJiM0MztcdC5wb2lzb25lZF9tZW1vcnlcdD0gRUZJX0lOVkFMSURfVEFCTEVfQUREUixcbiYjNDM7I2VuZGlmXG4gfTtcbiBFWFBPUlRfU1lNQk9MKGVmaSk7XG4gXG5AQCAtNjc3LDYgJiM0Mzs2ODAsOSBAQCBzdGF0aWMgY29uc3QgZWZpX2NvbmZpZ190YWJsZV90eXBlX3QgY29tbW9uX3RhYmxlc1tdIF9faW5pdGNvbnN0ID0ge1xuICNpZmRlZiBDT05GSUdfVU5BQ0NFUFRFRF9NRU1PUllcbiBcdHtMSU5VWF9FRklfVU5BQ0NFUFRFRF9NRU1fVEFCTEVfR1VJRCxcdFx1MDAyNmVmaS51bmFjY2VwdGVkLFx0XCYjMzQ7VW5hY2NlcHRlZFwmIzM0O1x0fSxcbiAjZW5kaWZcbiYjNDM7I2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXG4mIzQzO1x0e0xJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRCxcdFx1MDAyNmVmaS5wb2lzb25lZF9tZW1vcnksXHRcJiMzNDtQT0lTT05cJiMzNDtcdH0sXG4mIzQzOyNlbmRpZlxuICNpZmRlZiBDT05GSUdfRUZJX0dFTkVSSUNfU1RVQlxuIFx0e0xJTlVYX0VGSV9QUklNQVJZX0RJU1BMQVlfVEFCTEVfR1VJRCxcdFx1MDAyNnByaW1hcnlfZGlzcGxheV90YWJsZVx0XHRcdH0sXG4gI2VuZGlmXG5AQCAtODc3LDYgJiM0Mzs4ODMsOCBAQCBpbnQgX19pbml0IGVmaV9jb25maWdfcGFyc2VfdGFibGVzKGNvbnN0IGVmaV9jb25maWdfdGFibGVfdCAqY29uZmlnX3RhYmxlcyxcbiBcdFx0fVxuIFx0fVxuIFxuJiM0MztcdGVmaV9wb2lzb25lZF9tZW1vcnlfcmVzZXJ2ZSgpO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuY1xuaW5kZXggNDhmOTNmNzc1OGU5ZS4uNWNiZTY3NTQ5MTMzMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmNcbkBAIC03NzQsMyAmIzQzOzc3NCwxMDMgQEAgdm9pZCBlZmlfcmVtYXBfaW1hZ2UodW5zaWduZWQgbG9uZyBpbWFnZV9iYXNlLCB1bnNpZ25lZCBhbGxvY19zaXplLFxuIFx0XHRcdGVmaV93YXJuKFwmIzM0O0ZhaWxlZCB0byByZW1hcCBkYXRhIHJlZ2lvbiBub24tZXhlY3V0YWJsZVxcblwmIzM0Oyk7XG4gXHR9XG4gfVxuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXG4mIzQzOy8qXG4mIzQzOyAqIEZpbmQgdGhlIGJhc2UgYW5kIHRvcCBvZiB0aGUgbWVtb3J5LCBzbywgd2UgY2FuIGNyZWF0ZSB0aGUgYml0bWFwIGZvclxuJiM0MzsgKiB0aGUgZnVsbCByYW5nZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBlZmlfc3RhdHVzX3QgZWZpX2dldF9yYW1fcmFuZ2UodTY0ICpiYXNlLCB1NjQgKnRvcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBlZmlfYm9vdF9tZW1tYXAgKm1hcCBfX2ZyZWUoZWZpX3Bvb2wpID0gTlVMTDtcbiYjNDM7XHR1NjQgcmFtX2Jhc2UgPSBVTExPTkdfTUFYLCByYW1fdG9wID0gMDtcbiYjNDM7XHRlZmlfc3RhdHVzX3Qgc3RhdHVzO1xuJiM0MztcdGludCBpLCBucl9kZXNjO1xuJiM0MztcbiYjNDM7XHRzdGF0dXMgPSBlZmlfZ2V0X21lbW9yeV9tYXAoXHUwMDI2bWFwLCBmYWxzZSk7XG4mIzQzO1x0aWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUylcbiYjNDM7XHRcdHJldHVybiBzdGF0dXM7XG4mIzQzO1xuJiM0MztcdG5yX2Rlc2MgPSBtYXAtXHUwMDNlbWFwX3NpemUgLyBtYXAtXHUwMDNlZGVzY19zaXplO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2Rlc2M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRlZmlfbWVtb3J5X2Rlc2NfdCAqZDtcbiYjNDM7XG4mIzQzO1x0XHRkID0gZWZpX21lbWRlc2NfcHRyKCh1bnNpZ25lZCBsb25nKW1hcC1cdTAwM2VtYXAsIG1hcC1cdTAwM2VkZXNjX3NpemUsIGkpO1xuJiM0MztcdFx0cmFtX2Jhc2UgPSBtaW4ocmFtX2Jhc2UsIGQtXHUwMDNlcGh5c19hZGRyKTtcbiYjNDM7XHRcdHJhbV90b3AgPSBtYXgocmFtX3RvcCxcbiYjNDM7XHRcdFx0ICAgICAgZC1cdTAwM2VwaHlzX2FkZHIgJiM0MzsgZC1cdTAwM2VudW1fcGFnZXMgKiBFRklfUEFHRV9TSVpFKTtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKCFyYW1fdG9wIHx8IHJhbV9iYXNlID09IFVMTE9OR19NQVgpXG4mIzQzO1x0XHRyZXR1cm4gRUZJX05PVF9GT1VORDtcbiYjNDM7XG4mIzQzO1x0KmJhc2UgPSByb3VuZF9kb3duKHJhbV9iYXNlLCBFRklfUE9JU09OX1VOSVRfU0laRSk7XG4mIzQzO1x0KnRvcCA9IHJvdW5kX3VwKHJhbV90b3AsIEVGSV9QT0lTT05fVU5JVF9TSVpFKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIEVGSV9TVUNDRVNTO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBUaGUgc2l6ZSBvZiB0aGUgYml0bWFwICovXG4mIzQzO3N0YXRpYyB1NjQgZWZpX3BvaXNvbl9iaXRtYXBfc2l6ZSh1NjQgc3BhbilcbiYjNDM7e1xuJiM0MztcdHU2NCBieXRlcyA9IERJVl9ST1VORF9VUChESVZfUk9VTkRfVVAoc3BhbiwgRUZJX1BPSVNPTl9VTklUX1NJWkUpLFxuJiM0MztcdFx0XHRcdCBCSVRTX1BFUl9CWVRFKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJvdW5kX3VwKGJ5dGVzLCBzaXplb2YodW5zaWduZWQgbG9uZykpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKmVmaV9wb2lzb25fYWxsb2ModTY0IHBoeXNfYmFzZSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgIHU2NCBiaXRtYXBfc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTtcbiYjNDM7XHRlZmlfc3RhdHVzX3Qgc3RhdHVzO1xuJiM0MztcbiYjNDM7XHRzdGF0dXMgPSBlZmlfYnNfY2FsbChhbGxvY2F0ZV9wb29sLCBFRklfQUNQSV9SRUNMQUlNX01FTU9SWSxcbiYjNDM7XHRcdFx0ICAgICBzaXplb2YoKnBtKSAmIzQzOyBiaXRtYXBfc2l6ZSwgKHZvaWQgKiopXHUwMDI2cG0pO1xuJiM0MztcdGlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0cG0tXHUwMDNldmVyc2lvbiA9IDE7XG4mIzQzO1x0cG0tXHUwMDNldW5pdF9zaXplID0gRUZJX1BPSVNPTl9VTklUX1NJWkU7XG4mIzQzO1x0cG0tXHUwMDNlcGh5c19iYXNlID0gcGh5c19iYXNlO1xuJiM0MztcdHBtLVx1MDAzZXNpemUgPSBiaXRtYXBfc2l6ZTtcbiYjNDM7XHRtZW1zZXQocG0tXHUwMDNlYml0bWFwLCAwLCBiaXRtYXBfc2l6ZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwbTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogVGhpcyBuZWVkcyB0byBiZSBkb25lIHdoaWxlIGJvb3Qgc2VydmljZSBpcyBzdGlsbCBhY3RpdmUgKi9cbiYjNDM7dm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0ZWZpX2d1aWRfdCBwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCA9IExJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRDtcbiYjNDM7XHRzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG07XG4mIzQzO1x0dTY0IHJhbV9iYXNlLCByYW1fdG9wLCBiaXRtYXBfc2l6ZTtcbiYjNDM7XHRlZmlfc3RhdHVzX3Qgc3RhdHVzO1xuJiM0MztcbiYjNDM7XHQvKiBBIHRhYmxlIGluc3RhbGxlZCBieSBhbiBlYXJsaWVyIGJvb3QgcmlkZXMgdGhlIHN5c3RlbSB0YWJsZSBhY3Jvc3Mga2V4ZWMuICovXG4mIzQzO1x0cG0gPSBnZXRfZWZpX2NvbmZpZ190YWJsZShwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCk7XG4mIzQzO1x0aWYgKHBtKSB7XG4mIzQzO1x0XHRpZiAocG0tXHUwMDNldmVyc2lvbiAhPSAxKVxuJiM0MztcdFx0XHRlZmlfZXJyKFwmIzM0O1Vua25vd24gdmVyc2lvbiBvZiBwb2lzb25lZC1tZW1vcnkgdGFibGVcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGVmaV9nZXRfcmFtX3JhbmdlKFx1MDAyNnJhbV9iYXNlLCBcdTAwMjZyYW1fdG9wKSAhPSBFRklfU1VDQ0VTUykge1xuJiM0MztcdFx0ZWZpX2VycihcJiMzNDtGYWlsZWQgdG8gc2l6ZSB0aGUgcG9pc29uZWQtbWVtb3J5IHRhYmxlIVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRiaXRtYXBfc2l6ZSA9IGVmaV9wb2lzb25fYml0bWFwX3NpemUocmFtX3RvcCAtIHJhbV9iYXNlKTtcbiYjNDM7XHRwbSA9IGVmaV9wb2lzb25fYWxsb2MocmFtX2Jhc2UsIGJpdG1hcF9zaXplKTtcbiYjNDM7XHRpZiAoIXBtKSB7XG4mIzQzO1x0XHRlZmlfZXJyKFwmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSBwb2lzb25lZC1tZW1vcnkgdGFibGUhXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHN0YXR1cyA9IGVmaV9ic19jYWxsKGluc3RhbGxfY29uZmlndXJhdGlvbl90YWJsZSxcbiYjNDM7XHRcdFx0ICAgICBcdTAwMjZwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCwgcG0pO1xuJiM0MztcdGlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIHtcbiYjNDM7XHRcdGVmaV9ic19jYWxsKGZyZWVfcG9vbCwgcG0pO1xuJiM0MztcdFx0ZWZpX2VycihcJiMzNDtGYWlsZWQgdG8gaW5zdGFsbCBwb2lzb25lZC1tZW1vcnkgY29uZmlnIHRhYmxlIVxcblwmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuY1xuaW5kZXggMjM1Yzk3MzhkYTJkNi4uMjJhMzE1ZTI4MTRhMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jXG5AQCAtMTc5LDYgJiM0MzsxNzksNyBAQCBlZmlfc3RhdHVzX3QgZWZpX3N0dWJfY29tbW9uKGVmaV9oYW5kbGVfdCBoYW5kbGUsXG4gXHRcdFx0IEVGSV9SVF9TVVBQT1JURURfU0VUX1ZJUlRVQUxfQUREUkVTU19NQVApO1xuIFxuIFx0aW5zdGFsbF9tZW1yZXNlcnZlX3RhYmxlKCk7XG4mIzQzO1x0aW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUoKTtcbiBcbiBcdHN0YXR1cyA9IGVmaV9ib290X2tlcm5lbChoYW5kbGUsIGltYWdlLCBpbWFnZV9hZGRyLCBjbWRsaW5lX3B0cik7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmggYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaFxuaW5kZXggZmQ5MWZjMTVlYzgxMC4uNDQ0MzY4NjljNGVmZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaFxuQEAgLTExNjksNiAmIzQzOzExNjksMTIgQEAgZWZpX2VuYWJsZV9yZXNldF9hdHRhY2tfbWl0aWdhdGlvbih2b2lkKSB7IH1cbiBcbiB2b2lkIGVmaV9yZXRyaWV2ZV9ldmVudGxvZyh2b2lkKTtcbiBcbiYjNDM7I2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXG4mIzQzO3ZvaWQgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUodm9pZCk7XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKSB7IH1cbiYjNDM7I2VuZGlmXG4mIzQzO1xuIHN0cnVjdCBzeXNmYl9kaXNwbGF5X2luZm8gKmFsbG9jX3ByaW1hcnlfZGlzcGxheSh2b2lkKTtcbiBzdHJ1Y3Qgc3lzZmJfZGlzcGxheV9pbmZvICpfX2FsbG9jX3ByaW1hcnlfZGlzcGxheSh2b2lkKTtcbiB2b2lkIGZyZWVfcHJpbWFyeV9kaXNwbGF5KHN0cnVjdCBzeXNmYl9kaXNwbGF5X2luZm8gKmRweSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jXG5pbmRleCAwYmFlMGYwNmI2NzYzLi4zMTM2MTMyYjk2MjhhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmNcbkBAIC0xMDI0LDYgJiM0MzsxMDI0LDggQEAgdm9pZCBfX25vcmV0dXJuIGVmaV9zdHViX2VudHJ5KGVmaV9oYW5kbGVfdCBoYW5kbGUsXG4gXG4gXHRzZXR1cF91bmFjY2VwdGVkX21lbW9yeSgpO1xuIFxuJiM0MztcdGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKCk7XG4mIzQzO1xuIFx0c3RhdHVzID0gZXhpdF9ib290KGJvb3RfcGFyYW1zLCBoYW5kbGUpO1xuIFx0aWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUykge1xuIFx0XHRlZmlfZXJyKFwmIzM0O2V4aXRfYm9vdCgpIGZhaWxlZCFcXG5cJiMzNDspO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5lMTZkNDNmNDQzOGVlXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uY1xuQEAgLTAsMCAmIzQzOzEsMTQxIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7LypcbiYjNDM7ICogUnVudGltZSBzaWRlIG9mIHRoZSBMSU5VWF9FRklfUE9JU09ORURfTUVNT1JZIHRhYmxlOiBvbmUgYml0IHBlclxuJiM0MzsgKiBFRklfUE9JU09OX1VOSVRfU0laRSwgc2V0IGhlcmUgYXMgZnJhbWVzIGdvIGJhZCwgaG9ub3JlZCBieSB0aGUgbmV4dCBrZXJuZWwuXG4mIzQzOyAqXG4mIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IEJyZW5vIExlaXRhbyBcdTAwM2NsZWl0YW9AZGViaWFuLm9yZ1x1MDAzZVxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNkZWZpbmUgcHJfZm10KGZtdCkgXCYjMzQ7ZWZpOiBcJiMzNDsgZm10XG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRtYXAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9lZmkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xvZzIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1ibG9jay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvb3ZlcmZsb3cuaFx1MDAzZVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgX19pbml0XG4mIzQzO2VmaV9wb2lzb25fZ2VvbWV0cnlfdmFsaWQoY29uc3Qgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IG5iaXRzO1xuJiM0MztcbiYjNDM7XHQvKiBXaG9sZSB3b3JkcywgYW5kIGEgYml0IGNvdW50IHRoYXQgY2FuIGJlIHRha2VuIHdpdGhvdXQgd3JhcHBpbmcuICovXG4mIzQzO1x0aWYgKCFwbS1cdTAwM2VzaXplIHx8ICFJU19BTElHTkVEKHBtLVx1MDAzZXNpemUsIHNpemVvZih1bnNpZ25lZCBsb25nKSkgfHxcbiYjNDM7XHQgICAgY2hlY2tfbXVsX292ZXJmbG93KHBtLVx1MDAzZXNpemUsICh1NjQpQklUU19QRVJfQllURSwgXHUwMDI2bmJpdHMpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRpZiAocG0tXHUwMDNldW5pdF9zaXplIFx1MDAzYyBQQUdFX1NJWkUgfHwgIWlzX3Bvd2VyX29mXzIocG0tXHUwMDNldW5pdF9zaXplKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIElTX0FMSUdORUQocG0tXHUwMDNlcGh5c19iYXNlLCBwbS1cdTAwM2V1bml0X3NpemUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBUaGUgdGFibGUgbWF5IGNvbWUgZnJvbSBhbiBlYXJsaWVyIGtlcm5lbCwgc28gdmV0IGl0IGJlZm9yZSB1c2luZyBpdC4gKi9cbiYjNDM7c3RhdGljIGJvb2wgX19pbml0XG4mIzQzO2VmaV9wb2lzb25fdGFibGVfdmFsaWQoY29uc3Qgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHBtLVx1MDAzZXZlcnNpb24gIT0gMSkge1xuJiM0MztcdFx0cHJfd2FybihcJiMzNDtJZ25vcmluZyBwb2lzb25lZC1tZW1vcnkgdGFibGUgd2l0aCB2ZXJzaW9uICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRwbS1cdTAwM2V2ZXJzaW9uKTtcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghZWZpX3BvaXNvbl9nZW9tZXRyeV92YWxpZChwbSkpIHtcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7SWdub3JpbmcgbWFsZm9ybWVkIHBvaXNvbmVkLW1lbW9yeSB0YWJsZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVmV0IHRoZSBpbmhlcml0ZWQgdGFibGUgYW5kIGhhbmQgaXRzIHBhZ2VzIHRvIG1lbWJsb2NrLCB0aGUgd2F5IHRoZVxuJiM0MzsgKiB1bmFjY2VwdGVkIG1lbW9yeSB0YWJsZSBpcyBoYW5kbGVkLiBJdCBpcyBFRkkgQUNQSSByZWNsYWltIG1lbW9yeSwgd2hpY2hcbiYjNDM7ICogYmVjb21lcyBFODIwX1RZUEVfQUNQSSBhbmQgd291bGQgb3RoZXJ3aXNlIHN0YXkgb3V0IG9mIHRoZSBkaXJlY3QgbWFwLCBhbmRcbiYjNDM7ICogdG91Y2hpbmcgaXQgdGhlbiBmYXVsdHMuIENhbGxlZCBmcm9tIGVmaV9jb25maWdfcGFyc2VfdGFibGVzKCksIHNvXG4mIzQzOyAqIGV2ZXJ5dGhpbmcgbGF0ZXIgY2FuIHJlYWNoIGl0IHdpdGggZWZpX3BvaXNvbmVkX21lbW9yeSgpLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBfX2luaXQgZWZpX3BvaXNvbmVkX21lbW9yeV9yZXNlcnZlKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG07XG4mIzQzO1x0cGh5c19hZGRyX3Qgc3RhcnQsIGVuZDtcbiYjNDM7XG4mIzQzO1x0aWYgKGVmaS5wb2lzb25lZF9tZW1vcnkgPT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUilcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0cG0gPSBlYXJseV9tZW1yZW1hcChlZmkucG9pc29uZWRfbWVtb3J5LCBzaXplb2YoKnBtKSk7XG4mIzQzO1x0aWYgKCFwbSkge1xuJiM0MztcdFx0cHJfd2FybihcJiMzNDtDb3VsZCBub3QgbWFwIHBvaXNvbmVkLW1lbW9yeSB0YWJsZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRlZmkucG9pc29uZWRfbWVtb3J5ID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUjtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghZWZpX3BvaXNvbl90YWJsZV92YWxpZChwbSkpIHtcbiYjNDM7XHRcdGVmaS5wb2lzb25lZF9tZW1vcnkgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSO1xuJiM0MztcdFx0ZWFybHlfbWVtdW5tYXAocG0sIHNpemVvZigqcG0pKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHN0YXJ0ID0gUEFHRV9BTElHTl9ET1dOKGVmaS5wb2lzb25lZF9tZW1vcnkpO1xuJiM0MztcdGVuZCA9IFBBR0VfQUxJR04oZWZpLnBvaXNvbmVkX21lbW9yeSAmIzQzOyBzaXplb2YoKnBtKSAmIzQzOyBwbS1cdTAwM2VzaXplKTtcbiYjNDM7XHRlYXJseV9tZW11bm1hcChwbSwgc2l6ZW9mKCpwbSkpO1xuJiM0MztcbiYjNDM7XHRtZW1ibG9ja19hZGQoc3RhcnQsIGVuZCAtIHN0YXJ0KTtcbiYjNDM7XHRtZW1ibG9ja19yZXNlcnZlKHN0YXJ0LCBlbmQgLSBzdGFydCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFRoZSB0YWJsZSwgdmV0dGVkIGF0IHBhcnNlIHRpbWUsIG9yIE5VTEwgaWYgdGhpcyBib290IGhhcyBub25lLiAqL1xuJiM0MztzdGF0aWMgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKmVmaV9wb2lzb25lZF9tZW1vcnkodm9pZClcbiYjNDM7e1xuJiM0MztcdGlmIChlZmkucG9pc29uZWRfbWVtb3J5ID09IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHBoeXNfdG9fdmlydChlZmkucG9pc29uZWRfbWVtb3J5KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogRG9lcyB0aGUgcmFuZ2UgY292ZXIgYSB1bml0IGFuIGVhcmxpZXIga2VybmVsIHJlY29yZGVkIGFzIGJhZD8gKi9cbiYjNDM7Ym9vbCByYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnkocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSA9IGVmaV9wb2lzb25lZF9tZW1vcnkoKTtcbiYjNDM7XHR1NjQgZmlyc3QsIGxhc3QsIG5iaXRzO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBtKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRuYml0cyA9IHBtLVx1MDAzZXNpemUgKiBCSVRTX1BFUl9CWVRFO1xuJiM0MztcbiYjNDM7XHRpZiAoc3RhcnQgJiM0Mzsgc2l6ZSBcdTAwM2M9IHBtLVx1MDAzZXBoeXNfYmFzZSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRpZiAoc3RhcnQgXHUwMDNjIHBtLVx1MDAzZXBoeXNfYmFzZSlcbiYjNDM7XHRcdHN0YXJ0ID0gcG0tXHUwMDNlcGh5c19iYXNlO1xuJiM0MztcbiYjNDM7XHRmaXJzdCA9IChzdGFydCAtIHBtLVx1MDAzZXBoeXNfYmFzZSkgLyBwbS1cdTAwM2V1bml0X3NpemU7XG4mIzQzO1x0aWYgKGZpcnN0IFx1MDAzZT0gbmJpdHMpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGxhc3QgPSAoc3RhcnQgJiM0Mzsgc2l6ZSAtIDEgLSBwbS1cdTAwM2VwaHlzX2Jhc2UpIC8gcG0tXHUwMDNldW5pdF9zaXplO1xuJiM0MztcdGxhc3QgPSBtaW4obGFzdCwgbmJpdHMgLSAxKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZpbmRfbmV4dF9iaXQocG0tXHUwMDNlYml0bWFwLCBsYXN0ICYjNDM7IDEsIGZpcnN0KSBcdTAwM2M9IGxhc3Q7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEEgYml0IGlzIG5ldmVyIGNsZWFyZWQ6IGl0IHN0YW5kcyBmb3IgYSB3aG9sZSBFRklfUE9JU09OX1VOSVRfU0laRSwgc28gYW5cbiYjNDM7ICogdW5wb2lzb24gY2Fubm90IHRlbGwgd2hldGhlciB0aGUgdW5pdCBhcyBhIHdob2xlIGlzIGdvb2QgYWdhaW4uXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtID0gZWZpX3BvaXNvbmVkX21lbW9yeSgpO1xuJiM0MztcdHBoeXNfYWRkcl90IGFkZHIgPSBQRk5fUEhZUyhwZm4pO1xuJiM0MztcdHU2NCB1bml0O1xuJiM0MztcbiYjNDM7XHRpZiAoIXBtIHx8IGFkZHIgXHUwMDNjIHBtLVx1MDAzZXBoeXNfYmFzZSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0dW5pdCA9IChhZGRyIC0gcG0tXHUwMDNlcGh5c19iYXNlKSAvIHBtLVx1MDAzZXVuaXRfc2l6ZTtcbiYjNDM7XHRpZiAodW5pdCBcdTAwM2MgcG0tXHUwMDNlc2l6ZSAqIEJJVFNfUEVSX0JZVEUpXG4mIzQzO1x0XHRzZXRfYml0KHVuaXQsIHBtLVx1MDAzZWJpdG1hcCk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2VmaS5oIGIvaW5jbHVkZS9saW51eC9lZmkuaFxuaW5kZXggYzM1NDQ2YTBiNjZmYS4uNTY0MDJmZGNjZDExNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZWZpLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZWZpLmhcbkBAIC0yMyw2ICYjNDM7MjMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzdG9yZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmFuZ2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlYm9vdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NpemVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91dWlkLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcGFnZS5oXHUwMDNlXG5AQCAtNDIyLDYgJiM0Mzs0MjMsNyBAQCB2b2lkIGVmaV9uYXRpdmVfcnVudGltZV9zZXR1cCh2b2lkKTtcbiAjZGVmaW5lIExJTlVYX0VGSV9DT0NPX1NFQ1JFVF9BUkVBX0dVSURcdFx0RUZJX0dVSUQoMHhhZGY5NTZhZCwgMHhlOThjLCAweDQ4NGMsICAweGFlLCAweDExLCAweGI1LCAweDFjLCAweDdkLCAweDMzLCAweDY0LCAweDQ3KVxuICNkZWZpbmUgTElOVVhfRUZJX0JPT1RfTUVNTUFQX0dVSURcdFx0RUZJX0dVSUQoMHg4MDBmNjgzZiwgMHhkMDhiLCAweDQyM2EsICAweGEyLCAweDkzLCAweDk2LCAweDVjLCAweDNjLCAweDZmLCAweGUyLCAweGI0KVxuICNkZWZpbmUgTElOVVhfRUZJX1VOQUNDRVBURURfTUVNX1RBQkxFX0dVSURcdEVGSV9HVUlEKDB4ZDVkMWRlM2MsIDB4MTA1YywgMHg0NGY5LCAgMHg5ZSwgMHhhOSwgMHhiYywgMHhlZiwgMHg5OCwgMHgxMiwgMHgwMCwgMHgzMSlcbiYjNDM7I2RlZmluZSBMSU5VWF9FRklfUE9JU09ORURfTUVNT1JZX1RBQkxFX0dVSURcdEVGSV9HVUlEKDB4YWY4MjhhMTUsIDB4MGVmNCwgMHg0MzlhLCAgMHhiOCwgMHg2YSwgMHhkNiwgMHhkNiwgMHg5ZSwgMHhhZiwgMHhiYSwgMHhmYSlcbiBcbiAjZGVmaW5lIFJJU0NWX0VGSV9CT09UX1BST1RPQ09MX0dVSURcdFx0RUZJX0dVSUQoMHhjY2QxNWZlYywgMHg2ZjczLCAweDRlZWMsICAweDgzLCAweDk1LCAweDNlLCAweDY5LCAweGU0LCAweGI5LCAweDQwLCAweGJmKVxuIFxuQEAgLTY1MCw2ICYjNDM7NjUyLDcgQEAgZXh0ZXJuIHN0cnVjdCBlZmkge1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRcdG1va3Zhcl90YWJsZTtcdFx0LyogTU9LIHZhcmlhYmxlIGNvbmZpZyB0YWJsZSAqL1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRcdGNvY29fc2VjcmV0O1x0XHQvKiBDb25maWRlbnRpYWwgY29tcHV0aW5nIHNlY3JldCB0YWJsZSAqL1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRcdHVuYWNjZXB0ZWQ7XHRcdC8qIFVuYWNjZXB0ZWQgbWVtb3J5IHRhYmxlICovXG4mIzQzO1x0dW5zaWduZWQgbG9uZ1x0XHRcdHBvaXNvbmVkX21lbW9yeTtcdC8qIEhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSB0YWJsZSAqL1xuIFxuIFx0ZWZpX2dldF90aW1lX3RcdFx0XHQqZ2V0X3RpbWU7XG4gXHRlZmlfc2V0X3RpbWVfdFx0XHRcdCpzZXRfdGltZTtcbkBAIC0xMjcyLDYgJiM0MzsxMjc1LDI1IEBAIHN0cnVjdCBsaW51eF9lZmlfbWVtcmVzZXJ2ZSB7XG4gI2RlZmluZSBFRklfTUVNUkVTRVJWRV9DT1VOVChzaXplKSAoKChzaXplKSAtIHNpemVvZihzdHJ1Y3QgbGludXhfZWZpX21lbXJlc2VydmUpKSBcXFxuIFx0LyBzaXplb2ZfZmllbGQoc3RydWN0IGxpbnV4X2VmaV9tZW1yZXNlcnZlLCBlbnRyeVswXSkpXG4gXG4mIzQzOy8qIEJpdCBOIGNvdmVycyB0aGUgdW5pdCBhdCBAcGh5c19iYXNlICYjNDM7IE4gKiBAdW5pdF9zaXplLiAqL1xuJiM0MztzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSB7XG4mIzQzO1x0dTMyXHRcdHZlcnNpb247XG4mIzQzO1x0dTMyXHRcdHVuaXRfc2l6ZTtcdC8qIGJ5dGVzIG9mIHBoeXMgc3BhY2UgcGVyIGJpdG1hcCBiaXQgKi9cbiYjNDM7XHR1NjRcdFx0cGh5c19iYXNlO1x0LyogYWRkcmVzcyB0aGUgZmlyc3QgYml0IGNvdmVycyAqL1xuJiM0MztcdHU2NFx0XHRzaXplO1x0XHQvKiBiaXRtYXAgc2l6ZSBpbiBieXRlcyAqL1xuJiM0MztcdHVuc2lnbmVkIGxvbmdcdGJpdG1hcFtdO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2RlZmluZSBFRklfUE9JU09OX1VOSVRfU0laRVx0U1pfMk1cbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWVxuJiM0Mzt2b2lkIF9faW5pdCBlZmlfcG9pc29uZWRfbWVtb3J5X3Jlc2VydmUodm9pZCk7XG4mIzQzO3ZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pO1xuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZWZpX3BvaXNvbmVkX21lbW9yeV9yZXNlcnZlKHZvaWQpIHsgfVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pIHsgfVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gdm9pZCBfX2luaXQgZWZpX2FyY2hfbWVtX3Jlc2VydmUocGh5c19hZGRyX3QgYWRkciwgdTY0IHNpemUpO1xuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXG5pbmRleCAyNzRmYTg4MDA3N2M1Li45ZDlmMmU4ZmRjMTM2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmhcbkBAIC01MjI1LDYgJiM0Mzs1MjI1LDcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbWVtb3J5X2ZhaWx1cmVfYXR0cl9ncm91cDtcbiBleHRlcm4gdm9pZCBtZW1vcnlfZmFpbHVyZV9xdWV1ZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKTtcbiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pO1xuIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX3N1Yih1bnNpZ25lZCBsb25nIHBmbiwgbG9uZyBpKTtcbiYjNDM7dm9pZCBfX21lbWluaXQgaHdwb2lzb25fYm9vdF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTtcbiBwaHlzX2FkZHJfdCByYW5nZV9maXJzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKTtcbiBwaHlzX2FkZHJfdCByYW5nZV9sYXN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpO1xuICNlbHNlXG5AQCAtNTIzMiw2ICYjNDM7NTIzMywxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtb3J5X2ZhaWx1cmVfcXVldWUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbiB7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaHdwb2lzb25fYm9vdF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pXG4ge1xuIH1cbkBAIC01Mzg3LDYgJiM0Mzs1MzkyLDIwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwZm5faXNfdW5hY2NlcHRlZF9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXG4gXHRyZXR1cm4gcmFuZ2VfY29udGFpbnNfdW5hY2NlcHRlZF9tZW1vcnkocGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULCBQQUdFX1NJWkUpO1xuIH1cbiBcbiYjNDM7I2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXG4mIzQzO1xuJiM0Mztib29sIHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeShwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKTtcbiYjNDM7XG4mIzQzOyNlbHNlXG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5KHBoeXNfYWRkcl90IHN0YXJ0LFxuJiM0MztcdFx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2VuZGlmXG4mIzQzO1xuIHZvaWQgdm1hX3BndGFibGVfd2Fsa19iZWdpbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4gdm9pZCB2bWFfcGd0YWJsZV93YWxrX2VuZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4gXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbmluZGV4IGEyY2E4ZGY1MDFjYWUuLmY2YWZkYjJhODlhOTQgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5AQCAtNDMsNiAmIzQzOzQzLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3Rhc2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RheC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2VmaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3NtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ybWFwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuQEAgLTEzNiw2ICYjNDM7MTM3LDIxIEBAIHBoeXNfYWRkcl90IHJhbmdlX2xhc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiBcdHJldHVybiByYW5nZV9od3BvaXNvbihzdGFydCwgc2l6ZSwgZmFsc2UpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgdXBkYXRlX3Blcl9ub2RlX21mX3N0YXRzKHVuc2lnbmVkIGxvbmcgcGZuLCBlbnVtIG1mX3Jlc3VsdCByZXN1bHQpO1xuJiM0MztcbiYjNDM7LyogTm90IG51bV9wb2lzb25lZF9wYWdlc19pbmMoKTogaXRzIHBlciBibG9jayBoYWxmIGRpdmlkZXMgYnkgemVybyB0aGlzIGVhcmx5LiAqL1xuJiM0Mzt2b2lkIF9fbWVtaW5pdCBod3BvaXNvbl9ib290X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4mIzQzO3tcbiYjNDM7XHRpZiAoUGFnZUhXUG9pc29uKHBhZ2UpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRTZXRQYWdlSFdQb2lzb24ocGFnZSk7XG4mIzQzO1x0c2V0X3BhZ2VfY291bnQocGFnZSwgMSk7XG4mIzQzO1x0LyogVGhlIHBhZ2UgaGFzIGJlZW4gY29tcGxldGVseSBpc29sYXRlZCA9PSBNRl9SRUNPVkVSRUQgKi9cbiYjNDM7XHR1cGRhdGVfcGVyX25vZGVfbWZfc3RhdHMocGFnZV90b19wZm4ocGFnZSksIE1GX1JFQ09WRVJFRCk7XG4mIzQzO1x0YXRvbWljX2xvbmdfaW5jKFx1MDAyNm51bV9wb2lzb25lZF9wYWdlcyk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogTUZfQVRUUl9STyAtIENyZWF0ZSBzeXNmcyBlbnRyeSBmb3IgZWFjaCBtZW1vcnkgZmFpbHVyZSBzdGF0aXN0aWNzLlxuICAqIEBfbmFtZTogbmFtZSBvZiB0aGUgZmlsZSBpbiB0aGUgcGVyIE5VTUEgc3lzZnMgZGlyZWN0b3J5LlxuQEAgLTEzMjYsNiAmIzQzOzEzNDIsOCBAQCBzdGF0aWMgaW50IGFjdGlvbl9yZXN1bHQodW5zaWduZWQgbG9uZyBwZm4sIGVudW0gbWZfYWN0aW9uX3BhZ2VfdHlwZSB0eXBlLFxuIFx0aWYgKHR5cGUgIT0gTUZfTVNHX0FMUkVBRFlfUE9JU09ORUQgXHUwMDI2XHUwMDI2IHR5cGUgIT0gTUZfTVNHX1BGTl9NQVApIHtcbiBcdFx0bnVtX3BvaXNvbmVkX3BhZ2VzX2luYyhwZm4pO1xuIFx0XHR1cGRhdGVfcGVyX25vZGVfbWZfc3RhdHMocGZuLCByZXN1bHQpO1xuJiM0MztcdFx0LyogT25seSBoYXJkIG9mZmxpbmVzIGFyZSBjYXJyaWVkIG92ZXIgdG8gdGhlIG5leHQga2VybmVsLiAqL1xuJiM0MztcdFx0ZWZpX2h3cG9pc29uX3JlY29yZF9wZm4ocGZuKTtcbiBcdH1cbiBcbiBcdHByX2VycihcJiMzNDslI2x4OiByZWNvdmVyeSBhY3Rpb24gZm9yICVzOiAlc1xcblwmIzM0OyxcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcbmluZGV4IDQwNDg5NmI1MzAwM2UuLjllMmNlODMzZmQ0MDkgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2FsbG9jLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2VfYWxsb2MuY1xuQEAgLTE1NzksNiAmIzQzOzE1NzksMTkgQEAgc3RhdGljIHZvaWQgX19mcmVlX3BhZ2VzX29rKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4gXHRcdGZyZWVfb25lX3BhZ2Uoem9uZSwgcGFnZSwgcGZuLCBvcmRlciwgZnBpX2ZsYWdzKTtcbiB9XG4gXG4mIzQzOy8qIEZsYWcgdGhlIGZyYW1lcyBhbiBlYXJsaWVyIGtlcm5lbCByZWNvcmRlZCBhcyBiYWQuICovXG4mIzQzO3N0YXRpYyB2b2lkIF9fbWVtaW5pdCBwb2lzb25fYmxvY2soc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaSwgbnJfcGFnZXMgPSAxVUwgXHUwMDNjXHUwMDNjIG9yZGVyO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9wYWdlczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBwYWdlICpwID0gcGFnZSAmIzQzOyBpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChyYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnkocGFnZV90b19waHlzKHApLCBQQUdFX1NJWkUpKVxuJiM0MztcdFx0XHRod3BvaXNvbl9ib290X3BhZ2UocCk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHZvaWQgX19tZW1pbml0IF9fZnJlZV9wYWdlc19jb3JlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4gXHRcdGVudW0gbWVtaW5pdF9jb250ZXh0IGNvbnRleHQpXG4ge1xuQEAgLTE2MTMsNiAmIzQzOzE2MjYsMTggQEAgdm9pZCBfX21lbWluaXQgX19mcmVlX3BhZ2VzX2NvcmUoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcixcbiBcdFx0YXRvbWljX2xvbmdfYWRkKG5yX3BhZ2VzLCBcdTAwMjZwYWdlX3pvbmUocGFnZSktXHUwMDNlbWFuYWdlZF9wYWdlcyk7XG4gXHR9XG4gXG4mIzQzO1x0LyogRmlyc3Q6IGEgYmxvY2sgcGFya2VkIGJ5IF9fZnJlZV91bmFjY2VwdGVkKCkgbmV2ZXIgcmV0dXJucyBoZXJlLiAqL1xuJiM0MztcdGlmIChyYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnkocGFnZV90b19waHlzKHBhZ2UpLFxuJiM0MztcdFx0XHRcdFx0ICAgUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyBvcmRlcikpIHtcbiYjNDM7XHRcdHBvaXNvbl9ibG9jayhwYWdlLCBvcmRlcik7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVE9ETzogZnJlZSB0aGUgZnJhbWVzIGluIHRoZSBibG9jayB0aGF0IGFyZSBub3QgcG9pc29uZWQuXG4mIzQzO1x0XHQgKiBUaGV5IHN0YXkgb3V0IG9mIHRoZSBhbGxvY2F0b3IgYW5kIHN0aWxsIGNvdW50IGluXG4mIzQzO1x0XHQgKiBtYW5hZ2VkX3BhZ2VzLCBzbyBhIHVuaXQgY29zdHMgdXAgdG8gYSBibG9jay5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAocGFnZV9jb250YWluc191bmFjY2VwdGVkKHBhZ2UsIG9yZGVyKSkge1xuIFx0XHRpZiAob3JkZXIgPT0gTUFYX1BBR0VfT1JERVIgXHUwMDI2XHUwMDI2IF9fZnJlZV91bmFjY2VwdGVkKHBhZ2UpKVxuIFx0XHRcdHJldHVybjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNDowOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFRklfUE9JU09ORURfTUVNT1JZJiMzNDssCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O0VGSV9TVFVCJiMzNDssCiAgICAmIzM0O0VGSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2VmaV9od3BvaXNvbl9yZWNvcmRfcGZuJiMzNDssCiAgICAmIzM0O3JhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeSYjMzQ7LAogICAgJiMzNDtod3BvaXNvbl9ib290X3BhZ2UmIzM0OywKICAgICYjMzQ7bWVtb3J5X2ZhaWx1cmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0cmFja2luZyBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgYWNyb3NzIGtleGVjIHZpYSBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSAoQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUlkpLiBJdCBpbnRyb2R1Y2VzIGhvb2tzIGluIGNvcmUgbWVtb3J5LWZhaWx1cmUgaGFuZGxpbmcgKGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuIGluIGFjdGlvbl9yZXN1bHQpIGFuZCBtZW1vcnkgaW5pdGlhbGl6YXRpb24vaG90cGx1ZyAoX19mcmVlX3BhZ2VzX2NvcmUsIGh3cG9pc29uX2Jvb3RfcGFnZSkuIFRoZXNlIHBhdGhzIGFyZSByZWFjaGFibGUgYXQgcnVudGltZSB2aWEgbWVtb3J5IGZhaWx1cmUgbWVjaGFuaXNtcyBzdWNoIGFzIG1hZHZpc2UoTUFEVl9IV1BPSVNPTikgYW5kIG1lbW9yeSBob3RwbHVnZ2luZyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2l0aCBFRkkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhNzljYmIxMDVjNTk4MTdhZjMyYTIyYTAwMTcxZjdiYjkxNDY3NjU0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAxNDowOTowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmkuYyBiL2FyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmkuYwppbmRleCAwYzM5YWRiOTZiOTEyLi4yYjM3Yjk2YTM2ZTA5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaS5jCkBAIC05Myw2ICYjNDM7OTMsOSBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyAqIGNvbnN0IGVmaV90YWJsZXNbXSA9IHsKICNpZmRlZiBDT05GSUdfVU5BQ0NFUFRFRF9NRU1PUlkKIAkmYW1wO2VmaS51bmFjY2VwdGVkLAogI2VuZGlmCiYjNDM7I2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZCiYjNDM7CSZhbXA7ZWZpLnBvaXNvbmVkX21lbW9yeSwKJiM0MzsjZW5kaWYKIH07CiAKIHU2NCBlZmlfc2V0dXA7CQkvKiBlZmkgc2V0dXBfZGF0YSBwaHlzaWNhbCBhZGRyZXNzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZwppbmRleCAyOWUwNzI5Mjk5ZjViLi5hYWZjZDQxYmMwMDYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWcKQEAgLTI2Myw2ICYjNDM7MjYzLDE0IEBAIGNvbmZpZyBFRklfQ09DT19TRUNSRVQKIAkgIHZpcnQvY29jby9lZmlfc2VjcmV0IG1vZHVsZSB0byBhY2Nlc3MgdGhlIHNlY3JldHMsIHdoaWNoIGluIHR1cm4KIAkgIGFsbG93cyB1c2Vyc3BhY2UgcHJvZ3JhbXMgdG8gYWNjZXNzIHRoZSBpbmplY3RlZCBzZWNyZXRzLgogCiYjNDM7Y29uZmlnIEVGSV9QT0lTT05FRF9NRU1PUlkKJiM0MzsJZGVmX2Jvb2wgeQomIzQzOwlkZXBlbmRzIG9uIEVGSV9TVFVCICZhbXA7JmFtcDsgTUVNT1JZX0ZBSUxVUkUgJmFtcDsmYW1wOyA2NEJJVAomIzQzOwloZWxwCiYjNDM7CSAgUmVjb3JkIHBhZ2UgZnJhbWVzIHRoYXQgYXJlIGhhcmR3YXJlLXBvaXNvbmVkIHdoaWxlIHRoaXMga2VybmVsIHJ1bnMKJiM0MzsJICBpbnRvIGFuIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlLCBhbmQgaG9ub3IgdGhhdCB0YWJsZSBlYXJseSBvbiB0aGUKJiM0MzsJICBuZXh0IGtlcm5lbCBzbyBhIGtleGVjIGRvZXMgbm90IGhhbmQga25vd24tYmFkIFJBTSBiYWNrIG91dC4KJiM0MzsKIGNvbmZpZyBPVk1GX0RFQlVHX0xPRwogCWJvb2wgJiMzNDtFeHBvc2UgT1ZNRiBmaXJtd2FyZSBkZWJ1ZyBsb2cgdmlhIHN5c2ZzJiMzNDsKIAlkZXBlbmRzIG9uIEVGSQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGUgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9NYWtlZmlsZQppbmRleCA4ZWZiY2Y2OTllNGZmLi4wNWQwYTQ5MDkyM2U1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9NYWtlZmlsZQpAQCAtNDMsNCAmIzQzOzQzLDUgQEAgb2JqLSQoQ09ORklHX0VGSV9FQVJMWUNPTikJCSYjNDM7PSBlYXJseWNvbi5vCiBvYmotJChDT05GSUdfVUVGSV9DUEVSX0FSTSkJCSYjNDM7PSBjcGVyLWFybS5vCiBvYmotJChDT05GSUdfVUVGSV9DUEVSX1g4NikJCSYjNDM7PSBjcGVyLXg4Ni5vCiBvYmotJChDT05GSUdfVU5BQ0NFUFRFRF9NRU1PUlkpCQkmIzQzOz0gdW5hY2NlcHRlZF9tZW1vcnkubwomIzQzO29iai0kKENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZKQkmIzQzOz0gcG9pc29uLm8KIG9iai0kKENPTkZJR19URUVfU1RNTV9FRkkpCQkmIzQzOz0gc3RtbS90ZWVfc3RtbV9lZmkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYwppbmRleCA2ZDk4N2Q3Zjk3NzgxLi41NWIyZWU1M2ZjMjY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYwpAQCAtNTUsNiAmIzQzOzU1LDkgQEAgc3RydWN0IGVmaSBfX3JlYWRfbW9zdGx5IGVmaSA9IHsKICNpZmRlZiBDT05GSUdfVU5BQ0NFUFRFRF9NRU1PUlkKIAkudW5hY2NlcHRlZAkJPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSLAogI2VuZGlmCiYjNDM7I2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZCiYjNDM7CS5wb2lzb25lZF9tZW1vcnkJPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSLAomIzQzOyNlbmRpZgogfTsKIEVYUE9SVF9TWU1CT0woZWZpKTsKIApAQCAtNjc3LDYgJiM0Mzs2ODAsOSBAQCBzdGF0aWMgY29uc3QgZWZpX2NvbmZpZ190YWJsZV90eXBlX3QgY29tbW9uX3RhYmxlc1tdIF9faW5pdGNvbnN0ID0gewogI2lmZGVmIENPTkZJR19VTkFDQ0VQVEVEX01FTU9SWQogCXtMSU5VWF9FRklfVU5BQ0NFUFRFRF9NRU1fVEFCTEVfR1VJRCwJJmFtcDtlZmkudW5hY2NlcHRlZCwJJiMzNDtVbmFjY2VwdGVkJiMzNDsJfSwKICNlbmRpZgomIzQzOyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWQomIzQzOwl7TElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWV9UQUJMRV9HVUlELAkmYW1wO2VmaS5wb2lzb25lZF9tZW1vcnksCSYjMzQ7UE9JU09OJiMzNDsJfSwKJiM0MzsjZW5kaWYKICNpZmRlZiBDT05GSUdfRUZJX0dFTkVSSUNfU1RVQgogCXtMSU5VWF9FRklfUFJJTUFSWV9ESVNQTEFZX1RBQkxFX0dVSUQsCSZhbXA7cHJpbWFyeV9kaXNwbGF5X3RhYmxlCQkJfSwKICNlbmRpZgpAQCAtODc3LDYgJiM0Mzs4ODMsOCBAQCBpbnQgX19pbml0IGVmaV9jb25maWdfcGFyc2VfdGFibGVzKGNvbnN0IGVmaV9jb25maWdfdGFibGVfdCAqY29uZmlnX3RhYmxlcywKIAkJfQogCX0KIAomIzQzOwllZmlfcG9pc29uZWRfbWVtb3J5X3Jlc2VydmUoKTsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmMKaW5kZXggNDhmOTNmNzc1OGU5ZS4uNWNiZTY3NTQ5MTMzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jCkBAIC03NzQsMyAmIzQzOzc3NCwxMDMgQEAgdm9pZCBlZmlfcmVtYXBfaW1hZ2UodW5zaWduZWQgbG9uZyBpbWFnZV9iYXNlLCB1bnNpZ25lZCBhbGxvY19zaXplLAogCQkJZWZpX3dhcm4oJiMzNDtGYWlsZWQgdG8gcmVtYXAgZGF0YSByZWdpb24gbm9uLWV4ZWN1dGFibGVcbiYjMzQ7KTsKIAl9CiB9CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZCiYjNDM7LyoKJiM0MzsgKiBGaW5kIHRoZSBiYXNlIGFuZCB0b3Agb2YgdGhlIG1lbW9yeSwgc28sIHdlIGNhbiBjcmVhdGUgdGhlIGJpdG1hcCBmb3IKJiM0MzsgKiB0aGUgZnVsbCByYW5nZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgZWZpX3N0YXR1c190IGVmaV9nZXRfcmFtX3JhbmdlKHU2NCAqYmFzZSwgdTY0ICp0b3ApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZWZpX2Jvb3RfbWVtbWFwICptYXAgX19mcmVlKGVmaV9wb29sKSA9IE5VTEw7CiYjNDM7CXU2NCByYW1fYmFzZSA9IFVMTE9OR19NQVgsIHJhbV90b3AgPSAwOwomIzQzOwllZmlfc3RhdHVzX3Qgc3RhdHVzOwomIzQzOwlpbnQgaSwgbnJfZGVzYzsKJiM0MzsKJiM0MzsJc3RhdHVzID0gZWZpX2dldF9tZW1vcnlfbWFwKCZhbXA7bWFwLCBmYWxzZSk7CiYjNDM7CWlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpCiYjNDM7CQlyZXR1cm4gc3RhdHVzOwomIzQzOwomIzQzOwlucl9kZXNjID0gbWFwLSZndDttYXBfc2l6ZSAvIG1hcC0mZ3Q7ZGVzY19zaXplOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnJfZGVzYzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWVmaV9tZW1vcnlfZGVzY190ICpkOwomIzQzOwomIzQzOwkJZCA9IGVmaV9tZW1kZXNjX3B0cigodW5zaWduZWQgbG9uZyltYXAtJmd0O21hcCwgbWFwLSZndDtkZXNjX3NpemUsIGkpOwomIzQzOwkJcmFtX2Jhc2UgPSBtaW4ocmFtX2Jhc2UsIGQtJmd0O3BoeXNfYWRkcik7CiYjNDM7CQlyYW1fdG9wID0gbWF4KHJhbV90b3AsCiYjNDM7CQkJICAgICAgZC0mZ3Q7cGh5c19hZGRyICYjNDM7IGQtJmd0O251bV9wYWdlcyAqIEVGSV9QQUdFX1NJWkUpOwomIzQzOwl9CiYjNDM7CWlmICghcmFtX3RvcCB8fCByYW1fYmFzZSA9PSBVTExPTkdfTUFYKQomIzQzOwkJcmV0dXJuIEVGSV9OT1RfRk9VTkQ7CiYjNDM7CiYjNDM7CSpiYXNlID0gcm91bmRfZG93bihyYW1fYmFzZSwgRUZJX1BPSVNPTl9VTklUX1NJWkUpOwomIzQzOwkqdG9wID0gcm91bmRfdXAocmFtX3RvcCwgRUZJX1BPSVNPTl9VTklUX1NJWkUpOwomIzQzOwomIzQzOwlyZXR1cm4gRUZJX1NVQ0NFU1M7CiYjNDM7fQomIzQzOwomIzQzOy8qIFRoZSBzaXplIG9mIHRoZSBiaXRtYXAgKi8KJiM0MztzdGF0aWMgdTY0IGVmaV9wb2lzb25fYml0bWFwX3NpemUodTY0IHNwYW4pCiYjNDM7ewomIzQzOwl1NjQgYnl0ZXMgPSBESVZfUk9VTkRfVVAoRElWX1JPVU5EX1VQKHNwYW4sIEVGSV9QT0lTT05fVU5JVF9TSVpFKSwKJiM0MzsJCQkJIEJJVFNfUEVSX0JZVEUpOwomIzQzOwomIzQzOwlyZXR1cm4gcm91bmRfdXAoYnl0ZXMsIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqZWZpX3BvaXNvbl9hbGxvYyh1NjQgcGh5c19iYXNlLAomIzQzOwkJCQkJCQkgIHU2NCBiaXRtYXBfc2l6ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTsKJiM0MzsJZWZpX3N0YXR1c190IHN0YXR1czsKJiM0MzsKJiM0MzsJc3RhdHVzID0gZWZpX2JzX2NhbGwoYWxsb2NhdGVfcG9vbCwgRUZJX0FDUElfUkVDTEFJTV9NRU1PUlksCiYjNDM7CQkJICAgICBzaXplb2YoKnBtKSAmIzQzOyBiaXRtYXBfc2l6ZSwgKHZvaWQgKiopJmFtcDtwbSk7CiYjNDM7CWlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJcG0tJmd0O3ZlcnNpb24gPSAxOwomIzQzOwlwbS0mZ3Q7dW5pdF9zaXplID0gRUZJX1BPSVNPTl9VTklUX1NJWkU7CiYjNDM7CXBtLSZndDtwaHlzX2Jhc2UgPSBwaHlzX2Jhc2U7CiYjNDM7CXBtLSZndDtzaXplID0gYml0bWFwX3NpemU7CiYjNDM7CW1lbXNldChwbS0mZ3Q7Yml0bWFwLCAwLCBiaXRtYXBfc2l6ZSk7CiYjNDM7CiYjNDM7CXJldHVybiBwbTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogVGhpcyBuZWVkcyB0byBiZSBkb25lIHdoaWxlIGJvb3Qgc2VydmljZSBpcyBzdGlsbCBhY3RpdmUgKi8KJiM0Mzt2b2lkIGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKHZvaWQpCiYjNDM7ewomIzQzOwllZmlfZ3VpZF90IHBvaXNvbmVkX21lbW9yeV90YWJsZV9ndWlkID0gTElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWV9UQUJMRV9HVUlEOwomIzQzOwlzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG07CiYjNDM7CXU2NCByYW1fYmFzZSwgcmFtX3RvcCwgYml0bWFwX3NpemU7CiYjNDM7CWVmaV9zdGF0dXNfdCBzdGF0dXM7CiYjNDM7CiYjNDM7CS8qIEEgdGFibGUgaW5zdGFsbGVkIGJ5IGFuIGVhcmxpZXIgYm9vdCByaWRlcyB0aGUgc3lzdGVtIHRhYmxlIGFjcm9zcyBrZXhlYy4gKi8KJiM0MzsJcG0gPSBnZXRfZWZpX2NvbmZpZ190YWJsZShwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCk7CiYjNDM7CWlmIChwbSkgewomIzQzOwkJaWYgKHBtLSZndDt2ZXJzaW9uICE9IDEpCiYjNDM7CQkJZWZpX2VycigmIzM0O1Vua25vd24gdmVyc2lvbiBvZiBwb2lzb25lZC1tZW1vcnkgdGFibGVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZWZpX2dldF9yYW1fcmFuZ2UoJmFtcDtyYW1fYmFzZSwgJmFtcDtyYW1fdG9wKSAhPSBFRklfU1VDQ0VTUykgewomIzQzOwkJZWZpX2VycigmIzM0O0ZhaWxlZCB0byBzaXplIHRoZSBwb2lzb25lZC1tZW1vcnkgdGFibGUhXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJYml0bWFwX3NpemUgPSBlZmlfcG9pc29uX2JpdG1hcF9zaXplKHJhbV90b3AgLSByYW1fYmFzZSk7CiYjNDM7CXBtID0gZWZpX3BvaXNvbl9hbGxvYyhyYW1fYmFzZSwgYml0bWFwX3NpemUpOwomIzQzOwlpZiAoIXBtKSB7CiYjNDM7CQllZmlfZXJyKCYjMzQ7RmFpbGVkIHRvIGFsbG9jYXRlIHBvaXNvbmVkLW1lbW9yeSB0YWJsZSFcbiYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlzdGF0dXMgPSBlZmlfYnNfY2FsbChpbnN0YWxsX2NvbmZpZ3VyYXRpb25fdGFibGUsCiYjNDM7CQkJICAgICAmYW1wO3BvaXNvbmVkX21lbW9yeV90YWJsZV9ndWlkLCBwbSk7CiYjNDM7CWlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIHsKJiM0MzsJCWVmaV9ic19jYWxsKGZyZWVfcG9vbCwgcG0pOwomIzQzOwkJZWZpX2VycigmIzM0O0ZhaWxlZCB0byBpbnN0YWxsIHBvaXNvbmVkLW1lbW9yeSBjb25maWcgdGFibGUhXG4mIzM0Oyk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7I2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmMKaW5kZXggMjM1Yzk3MzhkYTJkNi4uMjJhMzE1ZTI4MTRhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuYwpAQCAtMTc5LDYgJiM0MzsxNzksNyBAQCBlZmlfc3RhdHVzX3QgZWZpX3N0dWJfY29tbW9uKGVmaV9oYW5kbGVfdCBoYW5kbGUsCiAJCQkgRUZJX1JUX1NVUFBPUlRFRF9TRVRfVklSVFVBTF9BRERSRVNTX01BUCk7CiAKIAlpbnN0YWxsX21lbXJlc2VydmVfdGFibGUoKTsKJiM0MzsJaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUoKTsKIAogCXN0YXR1cyA9IGVmaV9ib290X2tlcm5lbChoYW5kbGUsIGltYWdlLCBpbWFnZV9hZGRyLCBjbWRsaW5lX3B0cik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmgKaW5kZXggZmQ5MWZjMTVlYzgxMC4uNDQ0MzY4NjljNGVmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmgKQEAgLTExNjksNiAmIzQzOzExNjksMTIgQEAgZWZpX2VuYWJsZV9yZXNldF9hdHRhY2tfbWl0aWdhdGlvbih2b2lkKSB7IH0KIAogdm9pZCBlZmlfcmV0cmlldmVfZXZlbnRsb2codm9pZCk7CiAKJiM0MzsjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUlkKJiM0Mzt2b2lkIGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKHZvaWQpOwomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKHZvaWQpIHsgfQomIzQzOyNlbmRpZgomIzQzOwogc3RydWN0IHN5c2ZiX2Rpc3BsYXlfaW5mbyAqYWxsb2NfcHJpbWFyeV9kaXNwbGF5KHZvaWQpOwogc3RydWN0IHN5c2ZiX2Rpc3BsYXlfaW5mbyAqX19hbGxvY19wcmltYXJ5X2Rpc3BsYXkodm9pZCk7CiB2b2lkIGZyZWVfcHJpbWFyeV9kaXNwbGF5KHN0cnVjdCBzeXNmYl9kaXNwbGF5X2luZm8gKmRweSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmMKaW5kZXggMGJhZTBmMDZiNjc2My4uMzEzNjEzMmI5NjI4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuYwpAQCAtMTAyNCw2ICYjNDM7MTAyNCw4IEBAIHZvaWQgX19ub3JldHVybiBlZmlfc3R1Yl9lbnRyeShlZmlfaGFuZGxlX3QgaGFuZGxlLAogCiAJc2V0dXBfdW5hY2NlcHRlZF9tZW1vcnkoKTsKIAomIzQzOwlpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSgpOwomIzQzOwogCXN0YXR1cyA9IGV4aXRfYm9vdChib290X3BhcmFtcywgaGFuZGxlKTsKIAlpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7CiAJCWVmaV9lcnIoJiMzNDtleGl0X2Jvb3QoKSBmYWlsZWQhXG4mIzM0Oyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmUxNmQ0M2Y0NDM4ZWUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYwpAQCAtMCwwICYjNDM7MSwxNDEgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7LyoKJiM0MzsgKiBSdW50aW1lIHNpZGUgb2YgdGhlIExJTlVYX0VGSV9QT0lTT05FRF9NRU1PUlkgdGFibGU6IG9uZSBiaXQgcGVyCiYjNDM7ICogRUZJX1BPSVNPTl9VTklUX1NJWkUsIHNldCBoZXJlIGFzIGZyYW1lcyBnbyBiYWQsIGhvbm9yZWQgYnkgdGhlIG5leHQga2VybmVsLgomIzQzOyAqCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBCcmVubyBMZWl0YW8gJmx0O2xlaXRhb0BkZWJpYW4ub3JnJmd0OwomIzQzOyAqLwomIzQzOwomIzQzOyNkZWZpbmUgcHJfZm10KGZtdCkgJiMzNDtlZmk6ICYjMzQ7IGZtdAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaXRtYXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZWZpLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xvZzIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWVtYmxvY2suaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW0uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb3ZlcmZsb3cuaCZndDsKJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBfX2luaXQKJiM0MztlZmlfcG9pc29uX2dlb21ldHJ5X3ZhbGlkKGNvbnN0IHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSkKJiM0Mzt7CiYjNDM7CXU2NCBuYml0czsKJiM0MzsKJiM0MzsJLyogV2hvbGUgd29yZHMsIGFuZCBhIGJpdCBjb3VudCB0aGF0IGNhbiBiZSB0YWtlbiB3aXRob3V0IHdyYXBwaW5nLiAqLwomIzQzOwlpZiAoIXBtLSZndDtzaXplIHx8ICFJU19BTElHTkVEKHBtLSZndDtzaXplLCBzaXplb2YodW5zaWduZWQgbG9uZykpIHx8CiYjNDM7CSAgICBjaGVja19tdWxfb3ZlcmZsb3cocG0tJmd0O3NpemUsICh1NjQpQklUU19QRVJfQllURSwgJmFtcDtuYml0cykpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChwbS0mZ3Q7dW5pdF9zaXplICZsdDsgUEFHRV9TSVpFIHx8ICFpc19wb3dlcl9vZl8yKHBtLSZndDt1bml0X3NpemUpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gSVNfQUxJR05FRChwbS0mZ3Q7cGh5c19iYXNlLCBwbS0mZ3Q7dW5pdF9zaXplKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogVGhlIHRhYmxlIG1heSBjb21lIGZyb20gYW4gZWFybGllciBrZXJuZWwsIHNvIHZldCBpdCBiZWZvcmUgdXNpbmcgaXQuICovCiYjNDM7c3RhdGljIGJvb2wgX19pbml0CiYjNDM7ZWZpX3BvaXNvbl90YWJsZV92YWxpZChjb25zdCBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0pCiYjNDM7ewomIzQzOwlpZiAocG0tJmd0O3ZlcnNpb24gIT0gMSkgewomIzQzOwkJcHJfd2FybigmIzM0O0lnbm9yaW5nIHBvaXNvbmVkLW1lbW9yeSB0YWJsZSB3aXRoIHZlcnNpb24gJXVcbiYjMzQ7LAomIzQzOwkJCXBtLSZndDt2ZXJzaW9uKTsKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWVmaV9wb2lzb25fZ2VvbWV0cnlfdmFsaWQocG0pKSB7CiYjNDM7CQlwcl93YXJuKCYjMzQ7SWdub3JpbmcgbWFsZm9ybWVkIHBvaXNvbmVkLW1lbW9yeSB0YWJsZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFZldCB0aGUgaW5oZXJpdGVkIHRhYmxlIGFuZCBoYW5kIGl0cyBwYWdlcyB0byBtZW1ibG9jaywgdGhlIHdheSB0aGUKJiM0MzsgKiB1bmFjY2VwdGVkIG1lbW9yeSB0YWJsZSBpcyBoYW5kbGVkLiBJdCBpcyBFRkkgQUNQSSByZWNsYWltIG1lbW9yeSwgd2hpY2gKJiM0MzsgKiBiZWNvbWVzIEU4MjBfVFlQRV9BQ1BJIGFuZCB3b3VsZCBvdGhlcndpc2Ugc3RheSBvdXQgb2YgdGhlIGRpcmVjdCBtYXAsIGFuZAomIzQzOyAqIHRvdWNoaW5nIGl0IHRoZW4gZmF1bHRzLiBDYWxsZWQgZnJvbSBlZmlfY29uZmlnX3BhcnNlX3RhYmxlcygpLCBzbwomIzQzOyAqIGV2ZXJ5dGhpbmcgbGF0ZXIgY2FuIHJlYWNoIGl0IHdpdGggZWZpX3BvaXNvbmVkX21lbW9yeSgpLgomIzQzOyAqLwomIzQzO3ZvaWQgX19pbml0IGVmaV9wb2lzb25lZF9tZW1vcnlfcmVzZXJ2ZSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtOwomIzQzOwlwaHlzX2FkZHJfdCBzdGFydCwgZW5kOwomIzQzOwomIzQzOwlpZiAoZWZpLnBvaXNvbmVkX21lbW9yeSA9PSBFRklfSU5WQUxJRF9UQUJMRV9BRERSKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlwbSA9IGVhcmx5X21lbXJlbWFwKGVmaS5wb2lzb25lZF9tZW1vcnksIHNpemVvZigqcG0pKTsKJiM0MzsJaWYgKCFwbSkgewomIzQzOwkJcHJfd2FybigmIzM0O0NvdWxkIG5vdCBtYXAgcG9pc29uZWQtbWVtb3J5IHRhYmxlXG4mIzM0Oyk7CiYjNDM7CQllZmkucG9pc29uZWRfbWVtb3J5ID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUjsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWVmaV9wb2lzb25fdGFibGVfdmFsaWQocG0pKSB7CiYjNDM7CQllZmkucG9pc29uZWRfbWVtb3J5ID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUjsKJiM0MzsJCWVhcmx5X21lbXVubWFwKHBtLCBzaXplb2YoKnBtKSk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3RhcnQgPSBQQUdFX0FMSUdOX0RPV04oZWZpLnBvaXNvbmVkX21lbW9yeSk7CiYjNDM7CWVuZCA9IFBBR0VfQUxJR04oZWZpLnBvaXNvbmVkX21lbW9yeSAmIzQzOyBzaXplb2YoKnBtKSAmIzQzOyBwbS0mZ3Q7c2l6ZSk7CiYjNDM7CWVhcmx5X21lbXVubWFwKHBtLCBzaXplb2YoKnBtKSk7CiYjNDM7CiYjNDM7CW1lbWJsb2NrX2FkZChzdGFydCwgZW5kIC0gc3RhcnQpOwomIzQzOwltZW1ibG9ja19yZXNlcnZlKHN0YXJ0LCBlbmQgLSBzdGFydCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFRoZSB0YWJsZSwgdmV0dGVkIGF0IHBhcnNlIHRpbWUsIG9yIE5VTEwgaWYgdGhpcyBib290IGhhcyBub25lLiAqLwomIzQzO3N0YXRpYyBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqZWZpX3BvaXNvbmVkX21lbW9yeSh2b2lkKQomIzQzO3sKJiM0MzsJaWYgKGVmaS5wb2lzb25lZF9tZW1vcnkgPT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUikKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlyZXR1cm4gcGh5c190b192aXJ0KGVmaS5wb2lzb25lZF9tZW1vcnkpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBEb2VzIHRoZSByYW5nZSBjb3ZlciBhIHVuaXQgYW4gZWFybGllciBrZXJuZWwgcmVjb3JkZWQgYXMgYmFkPyAqLwomIzQzO2Jvb2wgcmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5KHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0gPSBlZmlfcG9pc29uZWRfbWVtb3J5KCk7CiYjNDM7CXU2NCBmaXJzdCwgbGFzdCwgbmJpdHM7CiYjNDM7CiYjNDM7CWlmICghcG0pCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CW5iaXRzID0gcG0tJmd0O3NpemUgKiBCSVRTX1BFUl9CWVRFOwomIzQzOwomIzQzOwlpZiAoc3RhcnQgJiM0Mzsgc2l6ZSAmbHQ7PSBwbS0mZ3Q7cGh5c19iYXNlKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwlpZiAoc3RhcnQgJmx0OyBwbS0mZ3Q7cGh5c19iYXNlKQomIzQzOwkJc3RhcnQgPSBwbS0mZ3Q7cGh5c19iYXNlOwomIzQzOwomIzQzOwlmaXJzdCA9IChzdGFydCAtIHBtLSZndDtwaHlzX2Jhc2UpIC8gcG0tJmd0O3VuaXRfc2l6ZTsKJiM0MzsJaWYgKGZpcnN0ICZndDs9IG5iaXRzKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlsYXN0ID0gKHN0YXJ0ICYjNDM7IHNpemUgLSAxIC0gcG0tJmd0O3BoeXNfYmFzZSkgLyBwbS0mZ3Q7dW5pdF9zaXplOwomIzQzOwlsYXN0ID0gbWluKGxhc3QsIG5iaXRzIC0gMSk7CiYjNDM7CiYjNDM7CXJldHVybiBmaW5kX25leHRfYml0KHBtLSZndDtiaXRtYXAsIGxhc3QgJiM0MzsgMSwgZmlyc3QpICZsdDs9IGxhc3Q7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQSBiaXQgaXMgbmV2ZXIgY2xlYXJlZDogaXQgc3RhbmRzIGZvciBhIHdob2xlIEVGSV9QT0lTT05fVU5JVF9TSVpFLCBzbyBhbgomIzQzOyAqIHVucG9pc29uIGNhbm5vdCB0ZWxsIHdoZXRoZXIgdGhlIHVuaXQgYXMgYSB3aG9sZSBpcyBnb29kIGFnYWluLgomIzQzOyAqLwomIzQzO3ZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0gPSBlZmlfcG9pc29uZWRfbWVtb3J5KCk7CiYjNDM7CXBoeXNfYWRkcl90IGFkZHIgPSBQRk5fUEhZUyhwZm4pOwomIzQzOwl1NjQgdW5pdDsKJiM0MzsKJiM0MzsJaWYgKCFwbSB8fCBhZGRyICZsdDsgcG0tJmd0O3BoeXNfYmFzZSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJdW5pdCA9IChhZGRyIC0gcG0tJmd0O3BoeXNfYmFzZSkgLyBwbS0mZ3Q7dW5pdF9zaXplOwomIzQzOwlpZiAodW5pdCAmbHQ7IHBtLSZndDtzaXplICogQklUU19QRVJfQllURSkKJiM0MzsJCXNldF9iaXQodW5pdCwgcG0tJmd0O2JpdG1hcCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lZmkuaCBiL2luY2x1ZGUvbGludXgvZWZpLmgKaW5kZXggYzM1NDQ2YTBiNjZmYS4uNTY0MDJmZGNjZDExNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9lZmkuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2VmaS5oCkBAIC0yMyw2ICYjNDM7MjMsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3BzdG9yZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JhbmdlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmVib290LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NpemVzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdXVpZC5oJmd0OwogCiAjaW5jbHVkZSAmbHQ7YXNtL3BhZ2UuaCZndDsKQEAgLTQyMiw2ICYjNDM7NDIzLDcgQEAgdm9pZCBlZmlfbmF0aXZlX3J1bnRpbWVfc2V0dXAodm9pZCk7CiAjZGVmaW5lIExJTlVYX0VGSV9DT0NPX1NFQ1JFVF9BUkVBX0dVSUQJCUVGSV9HVUlEKDB4YWRmOTU2YWQsIDB4ZTk4YywgMHg0ODRjLCAgMHhhZSwgMHgxMSwgMHhiNSwgMHgxYywgMHg3ZCwgMHgzMywgMHg2NCwgMHg0NykKICNkZWZpbmUgTElOVVhfRUZJX0JPT1RfTUVNTUFQX0dVSUQJCUVGSV9HVUlEKDB4ODAwZjY4M2YsIDB4ZDA4YiwgMHg0MjNhLCAgMHhhMiwgMHg5MywgMHg5NiwgMHg1YywgMHgzYywgMHg2ZiwgMHhlMiwgMHhiNCkKICNkZWZpbmUgTElOVVhfRUZJX1VOQUNDRVBURURfTUVNX1RBQkxFX0dVSUQJRUZJX0dVSUQoMHhkNWQxZGUzYywgMHgxMDVjLCAweDQ0ZjksICAweDllLCAweGE5LCAweGJjLCAweGVmLCAweDk4LCAweDEyLCAweDAwLCAweDMxKQomIzQzOyNkZWZpbmUgTElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWV9UQUJMRV9HVUlECUVGSV9HVUlEKDB4YWY4MjhhMTUsIDB4MGVmNCwgMHg0MzlhLCAgMHhiOCwgMHg2YSwgMHhkNiwgMHhkNiwgMHg5ZSwgMHhhZiwgMHhiYSwgMHhmYSkKIAogI2RlZmluZSBSSVNDVl9FRklfQk9PVF9QUk9UT0NPTF9HVUlECQlFRklfR1VJRCgweGNjZDE1ZmVjLCAweDZmNzMsIDB4NGVlYywgIDB4ODMsIDB4OTUsIDB4M2UsIDB4NjksIDB4ZTQsIDB4YjksIDB4NDAsIDB4YmYpCiAKQEAgLTY1MCw2ICYjNDM7NjUyLDcgQEAgZXh0ZXJuIHN0cnVjdCBlZmkgewogCXVuc2lnbmVkIGxvbmcJCQltb2t2YXJfdGFibGU7CQkvKiBNT0sgdmFyaWFibGUgY29uZmlnIHRhYmxlICovCiAJdW5zaWduZWQgbG9uZwkJCWNvY29fc2VjcmV0OwkJLyogQ29uZmlkZW50aWFsIGNvbXB1dGluZyBzZWNyZXQgdGFibGUgKi8KIAl1bnNpZ25lZCBsb25nCQkJdW5hY2NlcHRlZDsJCS8qIFVuYWNjZXB0ZWQgbWVtb3J5IHRhYmxlICovCiYjNDM7CXVuc2lnbmVkIGxvbmcJCQlwb2lzb25lZF9tZW1vcnk7CS8qIEhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSB0YWJsZSAqLwogCiAJZWZpX2dldF90aW1lX3QJCQkqZ2V0X3RpbWU7CiAJZWZpX3NldF90aW1lX3QJCQkqc2V0X3RpbWU7CkBAIC0xMjcyLDYgJiM0MzsxMjc1LDI1IEBAIHN0cnVjdCBsaW51eF9lZmlfbWVtcmVzZXJ2ZSB7CiAjZGVmaW5lIEVGSV9NRU1SRVNFUlZFX0NPVU5UKHNpemUpICgoKHNpemUpIC0gc2l6ZW9mKHN0cnVjdCBsaW51eF9lZmlfbWVtcmVzZXJ2ZSkpIFwKIAkvIHNpemVvZl9maWVsZChzdHJ1Y3QgbGludXhfZWZpX21lbXJlc2VydmUsIGVudHJ5WzBdKSkKIAomIzQzOy8qIEJpdCBOIGNvdmVycyB0aGUgdW5pdCBhdCBAcGh5c19iYXNlICYjNDM7IE4gKiBAdW5pdF9zaXplLiAqLwomIzQzO3N0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5IHsKJiM0MzsJdTMyCQl2ZXJzaW9uOwomIzQzOwl1MzIJCXVuaXRfc2l6ZTsJLyogYnl0ZXMgb2YgcGh5cyBzcGFjZSBwZXIgYml0bWFwIGJpdCAqLwomIzQzOwl1NjQJCXBoeXNfYmFzZTsJLyogYWRkcmVzcyB0aGUgZmlyc3QgYml0IGNvdmVycyAqLwomIzQzOwl1NjQJCXNpemU7CQkvKiBiaXRtYXAgc2l6ZSBpbiBieXRlcyAqLwomIzQzOwl1bnNpZ25lZCBsb25nCWJpdG1hcFtdOwomIzQzO307CiYjNDM7CiYjNDM7I2RlZmluZSBFRklfUE9JU09OX1VOSVRfU0laRQlTWl8yTQomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWQomIzQzO3ZvaWQgX19pbml0IGVmaV9wb2lzb25lZF9tZW1vcnlfcmVzZXJ2ZSh2b2lkKTsKJiM0Mzt2b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBlZmlfcG9pc29uZWRfbWVtb3J5X3Jlc2VydmUodm9pZCkgeyB9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKSB7IH0KJiM0MzsjZW5kaWYKJiM0MzsKIHZvaWQgX19pbml0IGVmaV9hcmNoX21lbV9yZXNlcnZlKHBoeXNfYWRkcl90IGFkZHIsIHU2NCBzaXplKTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCAyNzRmYTg4MDA3N2M1Li45ZDlmMmU4ZmRjMTM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC01MjI1LDYgJiM0Mzs1MjI1LDcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbWVtb3J5X2ZhaWx1cmVfYXR0cl9ncm91cDsKIGV4dGVybiB2b2lkIG1lbW9yeV9mYWlsdXJlX3F1ZXVlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpOwogdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfaW5jKHVuc2lnbmVkIGxvbmcgcGZuKTsKIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX3N1Yih1bnNpZ25lZCBsb25nIHBmbiwgbG9uZyBpKTsKJiM0Mzt2b2lkIF9fbWVtaW5pdCBod3BvaXNvbl9ib290X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpOwogcGh5c19hZGRyX3QgcmFuZ2VfZmlyc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiBwaHlzX2FkZHJfdCByYW5nZV9sYXN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpOwogI2Vsc2UKQEAgLTUyMzIsNiAmIzQzOzUyMzMsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbW9yeV9mYWlsdXJlX3F1ZXVlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpCiB7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaHdwb2lzb25fYm9vdF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQomIzQzO3sKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX2luYyh1bnNpZ25lZCBsb25nIHBmbikKIHsKIH0KQEAgLTUzODcsNiAmIzQzOzUzOTIsMjAgQEAgc3RhdGljIGlubGluZSBib29sIHBmbl9pc191bmFjY2VwdGVkX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbikKIAlyZXR1cm4gcmFuZ2VfY29udGFpbnNfdW5hY2NlcHRlZF9tZW1vcnkocGZuICZsdDsmbHQ7IFBBR0VfU0hJRlQsIFBBR0VfU0laRSk7CiB9CiAKJiM0MzsjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUlkKJiM0MzsKJiM0Mztib29sIHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeShwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKTsKJiM0MzsKJiM0MzsjZWxzZQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCByYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnkocGh5c19hZGRyX3Qgc3RhcnQsCiYjNDM7CQkJCQkJICB1bnNpZ25lZCBsb25nIHNpemUpCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzOyNlbmRpZgomIzQzOwogdm9pZCB2bWFfcGd0YWJsZV93YWxrX2JlZ2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKIHZvaWQgdm1hX3BndGFibGVfd2Fsa19lbmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwogCmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuYwppbmRleCBhMmNhOGRmNTAxY2FlLi5mNmFmZGIyYTg5YTk0IDEwMDY0NAotLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS1mYWlsdXJlLmMKQEAgLTQzLDYgJiM0Mzs0Myw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvc2lnbmFsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvdGFzay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2RheC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9lZmkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rc20uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ybWFwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXhwb3J0LmgmZ3Q7CkBAIC0xMzYsNiAmIzQzOzEzNywyMSBAQCBwaHlzX2FkZHJfdCByYW5nZV9sYXN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpCiAJcmV0dXJuIHJhbmdlX2h3cG9pc29uKHN0YXJ0LCBzaXplLCBmYWxzZSk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCB1cGRhdGVfcGVyX25vZGVfbWZfc3RhdHModW5zaWduZWQgbG9uZyBwZm4sIGVudW0gbWZfcmVzdWx0IHJlc3VsdCk7CiYjNDM7CiYjNDM7LyogTm90IG51bV9wb2lzb25lZF9wYWdlc19pbmMoKTogaXRzIHBlciBibG9jayBoYWxmIGRpdmlkZXMgYnkgemVybyB0aGlzIGVhcmx5LiAqLwomIzQzO3ZvaWQgX19tZW1pbml0IGh3cG9pc29uX2Jvb3RfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKJiM0Mzt7CiYjNDM7CWlmIChQYWdlSFdQb2lzb24ocGFnZSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CVNldFBhZ2VIV1BvaXNvbihwYWdlKTsKJiM0MzsJc2V0X3BhZ2VfY291bnQocGFnZSwgMSk7CiYjNDM7CS8qIFRoZSBwYWdlIGhhcyBiZWVuIGNvbXBsZXRlbHkgaXNvbGF0ZWQgPT0gTUZfUkVDT1ZFUkVEICovCiYjNDM7CXVwZGF0ZV9wZXJfbm9kZV9tZl9zdGF0cyhwYWdlX3RvX3BmbihwYWdlKSwgTUZfUkVDT1ZFUkVEKTsKJiM0MzsJYXRvbWljX2xvbmdfaW5jKCZhbXA7bnVtX3BvaXNvbmVkX3BhZ2VzKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIE1GX0FUVFJfUk8gLSBDcmVhdGUgc3lzZnMgZW50cnkgZm9yIGVhY2ggbWVtb3J5IGZhaWx1cmUgc3RhdGlzdGljcy4KICAqIEBfbmFtZTogbmFtZSBvZiB0aGUgZmlsZSBpbiB0aGUgcGVyIE5VTUEgc3lzZnMgZGlyZWN0b3J5LgpAQCAtMTMyNiw2ICYjNDM7MTM0Miw4IEBAIHN0YXRpYyBpbnQgYWN0aW9uX3Jlc3VsdCh1bnNpZ25lZCBsb25nIHBmbiwgZW51bSBtZl9hY3Rpb25fcGFnZV90eXBlIHR5cGUsCiAJaWYgKHR5cGUgIT0gTUZfTVNHX0FMUkVBRFlfUE9JU09ORUQgJmFtcDsmYW1wOyB0eXBlICE9IE1GX01TR19QRk5fTUFQKSB7CiAJCW51bV9wb2lzb25lZF9wYWdlc19pbmMocGZuKTsKIAkJdXBkYXRlX3Blcl9ub2RlX21mX3N0YXRzKHBmbiwgcmVzdWx0KTsKJiM0MzsJCS8qIE9ubHkgaGFyZCBvZmZsaW5lcyBhcmUgY2FycmllZCBvdmVyIHRvIHRoZSBuZXh0IGtlcm5lbC4gKi8KJiM0MzsJCWVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHBmbik7CiAJfQogCiAJcHJfZXJyKCYjMzQ7JSNseDogcmVjb3ZlcnkgYWN0aW9uIGZvciAlczogJXNcbiYjMzQ7LApkaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jCmluZGV4IDQwNDg5NmI1MzAwM2UuLjllMmNlODMzZmQ0MDkgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTE1NzksNiAmIzQzOzE1NzksMTkgQEAgc3RhdGljIHZvaWQgX19mcmVlX3BhZ2VzX29rKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsCiAJCWZyZWVfb25lX3BhZ2Uoem9uZSwgcGFnZSwgcGZuLCBvcmRlciwgZnBpX2ZsYWdzKTsKIH0KIAomIzQzOy8qIEZsYWcgdGhlIGZyYW1lcyBhbiBlYXJsaWVyIGtlcm5lbCByZWNvcmRlZCBhcyBiYWQuICovCiYjNDM7c3RhdGljIHZvaWQgX19tZW1pbml0IHBvaXNvbl9ibG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBpLCBucl9wYWdlcyA9IDFVTCAmbHQ7Jmx0OyBvcmRlcjsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3BhZ2VzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IHBhZ2UgKnAgPSBwYWdlICYjNDM7IGk7CiYjNDM7CiYjNDM7CQlpZiAocmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5KHBhZ2VfdG9fcGh5cyhwKSwgUEFHRV9TSVpFKSkKJiM0MzsJCQlod3BvaXNvbl9ib290X3BhZ2UocCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiB2b2lkIF9fbWVtaW5pdCBfX2ZyZWVfcGFnZXNfY29yZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLAogCQllbnVtIG1lbWluaXRfY29udGV4dCBjb250ZXh0KQogewpAQCAtMTYxMyw2ICYjNDM7MTYyNiwxOCBAQCB2b2lkIF9fbWVtaW5pdCBfX2ZyZWVfcGFnZXNfY29yZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLAogCQlhdG9taWNfbG9uZ19hZGQobnJfcGFnZXMsICZhbXA7cGFnZV96b25lKHBhZ2UpLSZndDttYW5hZ2VkX3BhZ2VzKTsKIAl9CiAKJiM0MzsJLyogRmlyc3Q6IGEgYmxvY2sgcGFya2VkIGJ5IF9fZnJlZV91bmFjY2VwdGVkKCkgbmV2ZXIgcmV0dXJucyBoZXJlLiAqLwomIzQzOwlpZiAocmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5KHBhZ2VfdG9fcGh5cyhwYWdlKSwKJiM0MzsJCQkJCSAgIFBBR0VfU0laRSAmbHQ7Jmx0OyBvcmRlcikpIHsKJiM0MzsJCXBvaXNvbl9ibG9jayhwYWdlLCBvcmRlcik7CiYjNDM7CQkvKgomIzQzOwkJICogVE9ETzogZnJlZSB0aGUgZnJhbWVzIGluIHRoZSBibG9jayB0aGF0IGFyZSBub3QgcG9pc29uZWQuCiYjNDM7CQkgKiBUaGV5IHN0YXkgb3V0IG9mIHRoZSBhbGxvY2F0b3IgYW5kIHN0aWxsIGNvdW50IGluCiYjNDM7CQkgKiBtYW5hZ2VkX3BhZ2VzLCBzbyBhIHVuaXQgY29zdHMgdXAgdG8gYSBibG9jay4KJiM0MzsJCSAqLwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiAJaWYgKHBhZ2VfY29udGFpbnNfdW5hY2NlcHRlZChwYWdlLCBvcmRlcikpIHsKIAkJaWYgKG9yZGVyID09IE1BWF9QQUdFX09SREVSICZhbXA7JmFtcDsgX19mcmVlX3VuYWNjZXB0ZWQocGFnZSkpCiAJCQlyZXR1cm47CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE0OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTk5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2ggU2VyaWVzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBzZXJpZXMuIE15IGluaXRpYWwgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gdGhlIHRyaWFnZSBwcm9jZXNzLCBtYWtpbmcgc3VyZSB3ZSBoYXZlIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQmIzM5O3MgYmVpbmcgZXZhbHVhdGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBwcmluY2lwbGVzLCBhbmQgaXQgc2VlbXMgcmVhY2hhYmlsaXR5IGlzIHRoZSBwcmltYXJ5IGNvbmNlcm4g4oCTIGNhbiB0aGUgbW9kaWZpZWQgY29kZSBhY3R1YWxseSBleGVjdXRlIGluIGEgdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciBRRU1VPyBUaGF0JiMzOTtzIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludC4KCk5leHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGV4dGVudCBvZiB0aGUgY2hhbmdlcy4gVGhlIGZpbGVzIG1vZGlmaWVkIGFyZTogYGFyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmkuY2AsIGBkcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnYCwgYGRyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlYCwgYGRyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jYCwgYGRyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmNgLCBgZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jYCwgYGRyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oYCwgYGRyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuY2AsIGBkcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uY2AsIGBpbmNsdWRlL2xpbnV4L2VmaS5oYCwgYGluY2x1ZGUvbGludXgvbW0uaGAsIGBtbS9tZW1vcnktZmFpbHVyZS5jYCwgYW5kIGBtbS9wYWdlX2FsbG9jLmNgLiBUaGF0JiMzOTtzIGEgZmFpcmx5IGV4dGVuc2l2ZSB0b3VjaCwgbW9zdGx5IGNvbmNlbnRyYXRlZCBhcm91bmQgRUZJIGFuZCBtZW1vcnkgbWFuYWdlbWVudC4KCk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiB3aGF0IHBhcnRzIG9mIHRoaXMgY29kZSBhcmUgYWN0aXZlIGR1cmluZyBydW50aW1lIHZlcnN1cyBib290IHRpbWU/IEFuZCB3aGF0IHN5c2NhbGxzIG9yIGludGVyZmFjZXMgY2FuICpyZWFjaCogdGhpcyBjb2RlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXR0YWNrIHN1cmZhY2UuCgpTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBsb29rIGF0IGBlZmlfaHdwb2lzb25fcmVjb3JkX3BmbihwZm4pYC4gSSBzZWUgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGFjdGlvbl9yZXN1bHQoKWAgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgLiBUaGF0IG1lYW5zIEkgaGF2ZSB0byB0cmFjZSBob3cgYG1tL21lbW9yeS1mYWlsdXJlLmNgIGdldHMgdHJpZ2dlcmVkIGF0IHJ1bnRpbWUuIEkgbmVlZCB0byB2ZXJpZnkgaG93IGBtZW1vcnlfZmFpbHVyZWAgb3IgYGFjdGlvbl9yZXN1bHRgIGFyZSBjYWxsZWQgb3IgZXhwb3NlZC4gQ2FuIGEgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIGNhbGwsIG9yIG1heWJlIHNvbWV0aGluZyB0aHJvdWdoIGRlYnVnZnMgb3Igc3lzZnMsIHRyaWdnZXIgdGhpcyBjb2RlIHBhdGg/IEdyZXAgaXMgZ29pbmcgdG8gYmUgbXkgZnJpZW5kIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTQ6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWN0aW9uX3Jlc3VsdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbW9yeS1mYWlsdXJlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LWZhaWx1cmUuYz0xMzI0PXN0YXRpYyBib29sIHBhbmljX29uX3VucmVjb3ZlcmFibGVfbWYoZW51bSBtZl9hY3Rpb25fcGFnZV90eXBlIHR5cGUsXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMzM2LSAqL1xubW0vbWVtb3J5LWZhaWx1cmUuYzoxMzM3OnN0YXRpYyBpbnQgYWN0aW9uX3Jlc3VsdCh1bnNpZ25lZCBsb25nIHBmbiwgZW51bSBtZl9hY3Rpb25fcGFnZV90eXBlIHR5cGUsXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEzMzgtXHRcdFx0IGVudW0gbWZfcmVzdWx0IHJlc3VsdClcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTEzNTg9c3RhdGljIGludCBwYWdlX2FjdGlvbihzdHJ1Y3QgcGFnZV9zdGF0ZSAqcHMsIHN0cnVjdCBwYWdlICpwLFxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMTM3MC1cbm1tL21lbW9yeS1mYWlsdXJlLmM6MTM3MTpcdHJldHVybiBhY3Rpb25fcmVzdWx0KHBmbiwgcHMtXHUwMDNldHlwZSwgcmVzdWx0KTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTM3Mi19XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMTM5PXN0YXRpYyBpbnQgdHJ5X21lbW9yeV9mYWlsdXJlX2h1Z2V0bGIodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIxNTYtXHRcdH1cbm1tL21lbW9yeS1mYWlsdXJlLmM6MjE1NzpcdFx0cmV0dXJuIGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfR0VUX0hXUE9JU09OLCBNRl9JR05PUkVEKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjE1OC1cdGNhc2UgTUZfSFVHRVRMQl9GT0xJT19QUkVfUE9JU09ORUQ6XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTYzLVx0XHRpZiAocmVzID09IE1GX0hVR0VUTEJfUEFHRV9QUkVfUE9JU09ORUQpXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIxNjQ6XHRcdFx0YWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19BTFJFQURZX1BPSVNPTkVELCBNRl9GQUlMRUQpO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTY1LVx0XHRlbHNlXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIxNjY6XHRcdFx0YWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19IVUdFLCBNRl9GQUlMRUQpO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTY3LVx0XHRyZXR1cm4gcnY7XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTk3LVx0XHR9XG5tbS9tZW1vcnktZmFpbHVyZS5jOjIxOTg6XHRcdHJldHVybiBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0ZSRUVfSFVHRSwgcmVzKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjE5OS1cdH1cbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIyMDQtXHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG5tbS9tZW1vcnktZmFpbHVyZS5jOjIyMDU6XHRcdHJldHVybiBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX1VOTUFQX0ZBSUxFRCwgTUZfRkFJTEVEKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjIwNi1cdH1cbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTIyMzI9c3RhdGljIGludCBtZW1vcnlfZmFpbHVyZV9kZXZfcGFnZW1hcCh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzLFxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjI1OS1cdGlmIChyYyAhPSAtRU9QTk9UU1VQUClcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjI2MDpcdFx0YWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19EQVgsIHJjID8gTUZfRkFJTEVEIDogTUZfUkVDT1ZFUkVEKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjI2MS1cdHJldHVybiByYztcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTIzNzg9c3RhdGljIGludCBtZW1vcnlfZmFpbHVyZV9wZm4odW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0MDItXHRcdGlmICghbWZfaGFuZGxlZClcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjQwMzpcdFx0XHRyZXR1cm4gYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19QRk5fTUFQLCBNRl9JR05PUkVEKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQwNC1cdH1cbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0MTUtXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI0MTY6XHRyZXR1cm4gYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19QRk5fTUFQLCBNRl9SRUNPVkVSRUQpO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0yNDE3LX1cbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTI0NDQ9aW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNTAyLVx0XHRcdHB1dF9wYWdlKHApO1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyNTAzOlx0XHRhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0FMUkVBRFlfUE9JU09ORUQsIE1GX0ZBSUxFRCk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI1MDQtXHRcdGdvdG8gdW5sb2NrX211dGV4O1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjUzMy1cdFx0XHR9XG5tbS9tZW1vcnktZmFpbHVyZS5jOjI1MzQ6XHRcdFx0cmVzID0gYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19CVUREWSwgcmVzKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjUzNS1cdFx0fSBlbHNlIHtcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjUzNjpcdFx0XHRyZXMgPSBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0tFUk5FTF9ISUdIX09SREVSLCBNRl9JR05PUkVEKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjUzNy1cdFx0fVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjU0Ny1cdFx0ICovXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI1NDg6XHRcdHJlcyA9IGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfS0VSTkVMLCBNRl9JR05PUkVEKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjU0OS1cdFx0Z290byB1bmxvY2tfbXV0ZXg7XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNTUxLVx0XHQvKiBUcmFuc2llbnQgbGlmZWN5Y2xlIHJhY2Ugd2l0aCB0aGUgcGFnZSBhbGxvY2F0b3IuICovXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI1NTI6XHRcdHJlcyA9IGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfR0VUX0hXUE9JU09OLCBNRl9JR05PUkVEKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjU1My1cdFx0Z290byB1bmxvY2tfbXV0ZXg7XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNTk5LVx0XHRcdHB1dF9wYWdlKHApO1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjAwOlx0XHRcdGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfVU5TUExJVF9USFAsIE1GX0ZBSUxFRCk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2MDEtXHRcdFx0Z290byB1bmxvY2tfbXV0ZXg7XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjUzLVx0aWYgKCFod3BvaXNvbl91c2VyX21hcHBpbmdzKGZvbGlvLCBwLCBwZm4sIGZsYWdzKSkge1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjU0Olx0XHRyZXMgPSBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX1VOTUFQX0ZBSUxFRCwgTUZfRkFJTEVEKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjY1NS1cdFx0Z290byB1bmxvY2tfcGFnZTtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2NjItXHQgICAgZm9saW8tXHUwMDNlbWFwcGluZyA9PSBOVUxMKSB7XG5tbS9tZW1vcnktZmFpbHVyZS5jOjI2NjM6XHRcdHJlcyA9IGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfVFJVTkNBVEVEX0xSVSwgTUZfSUdOT1JFRCk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2NjQtXHRcdGdvdG8gdW5sb2NrX3BhZ2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTQ6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2NTYKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqRGl2aW5nIGludG8gdGhlIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCBSYWJiaXQgSG9sZSoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCBhbmQgaG93IGl0IHdvcmtzIHVuZGVyIHRoZSBob29kLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCB0aGF0IGNhbGwgc2VlbXMgdG8gbGVhZCB0byBgbWFkdmlzZV9pbmplY3RfZXJyb3IoKWAsIHdoaWNoIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgdGhhdCBkaXJlY3RseSBjYWxscyBgbWVtb3J5X2ZhaWx1cmUoKWAuJiMzNDsgSW50ZXJlc3RpbmcsIHNvIGBtYWR2aXNlYCBpcyB1c2luZyB0aGUgc2FtZSBpbmZyYXN0cnVjdHVyZSBhcyBvdGhlciBtZW1vcnkgZXJyb3IgaW5qZWN0aW9uIG1lY2hhbmlzbXMuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgaW5qZWN0aW9uIGlzLiBMZXQmIzM5O3Mgc2VlIGhvdyBgbWFkdmlzZWAgYWN0dWFsbHkgY2FsbHMgdGhpcyBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIGZ1bmN0aW9uLiBJIHdpbGwgbmVlZCB0byBsb29rIGRlZXBlciBpbnRvIGBtYWR2aXNlYCB0byBzZWUgd2hlcmUgYE1BRFZfSFdQT0lTT05gIGlzIGhhbmRsZWQgYW5kIGhvdyBpdCBkZWNpZGVzIHRvIGluamVjdCBhbiBlcnJvci4gQWx0ZXJuYXRpdmVseSwgcGVyaGFwcyBpdCYjMzk7cyBtb3JlIGRpcmVjdCBhbmQgSSBzaG91bGQgbG9vayBhdCBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIGFuZCBzZWUgd2hlcmUgaXQmIzM5O3MgYmVpbmcgY2FsbGVkLCB3aGljaCBtaWdodCBnaXZlIG1lIG1vcmUgY29udGV4dC4gQm90aCBhcHByb2FjaGVzIGFyZSB2YWxpZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtNQURWX0hXUE9JU09OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYz0xNTA0PXN0YXRpYyBib29sIGlzX21lbW9yeV9mYWlsdXJlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNTA2LVx0c3dpdGNoIChtYWR2X2JlaGF2aW9yLVx1MDAzZWJlaGF2aW9yKSB7XG5tbS9tYWR2aXNlLmM6MTUwNzpcdGNhc2UgTUFEVl9IV1BPSVNPTjpcbm1tL21hZHZpc2UuYy0xNTA4LVx0Y2FzZSBNQURWX1NPRlRfT0ZGTElORTpcbi0tXG5tbS9tYWR2aXNlLmM9MTUzMD1tYWR2aXNlX2JlaGF2aW9yX3ZhbGlkKGludCBiZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTU2My1cdGNhc2UgTUFEVl9TT0ZUX09GRkxJTkU6XG5tbS9tYWR2aXNlLmM6MTU2NDpcdGNhc2UgTUFEVl9IV1BPSVNPTjpcbm1tL21hZHZpc2UuYy0xNTY1LSNlbmRpZlxuLS1cbm1tL21hZHZpc2UuYz0xODk5PXN0YXRpYyBpbnQgbWFkdmlzZV9kb19iZWhhdmlvcih1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuX2luLFxuLS1cbm1tL21hZHZpc2UuYy0xOTU1LSAqICBNQURWX0tFRVBPTkZPUksgLSB1bmRvIHRoZSBlZmZlY3Qgb2YgTUFEVl9XSVBFT05GT1JLXG5tbS9tYWR2aXNlLmM6MTk1NjogKiAgTUFEVl9IV1BPSVNPTiAtIHRyaWdnZXIgbWVtb3J5IGVycm9yIGhhbmRsZXIgYXMgaWYgdGhlIGdpdmVuIG1lbW9yeSByYW5nZVxubW0vbWFkdmlzZS5jLTE5NTctICpcdFx0d2VyZSBjb3JydXB0ZWQgYnkgdW5yZWNvdmVyYWJsZSBoYXJkd2FyZSBtZW1vcnkgZmFpbHVyZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzMxNAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgTWVtb3J5IFBvaXNvbmluZyBpbiB0aGUgS2VybmVsKioKCk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSB1c2FnZSBvZiBgcmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5KClgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgdHdvIGxpa2VseSBsb2NhdGlvbnM6IGBtbS9wYWdlX2FsbG9jLmNgIGFuZCBgZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmNgLiBUaG9zZSBzZWVtIGxpa2UgdGhlIG1vc3QgcmVsZXZhbnQgc3BvdHMgZ2l2ZW4gdGhlIGZ1bmN0aW9uJiMzOTtzIG5hbWUgYW5kIGdlbmVyYWwgbWVtb3J5IG1hbmFnZW1lbnQgY29uY2VwdHMuCgpCdXQsIEkgbmVlZCB0byBrbm93ICp3aGVyZSogaXQmIzM5O3MgYWN0dWFsbHkgYmVpbmcgY2FsbGVkLiBObyBzZW5zZSBpbiBqdXN0IHN0YXJpbmcgYXQgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24uIFNvLCBsZXQmIzM5O3MgZmlyZSB1cCBgZ3JlcHBlcmAuIFRoYXQgc2hvdWxkIHF1aWNrbHkgdW5jb3ZlciBhbGwgdGhlIGNhbGwgc2l0ZXMgYWNyb3NzIHRoZSBjb2RlYmFzZS4gV2l0aCBgZ3JlcHBlcmAsIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSBsaXN0IG9mIGV2ZXJ5IHBsYWNlIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBhbmQgdGhlbiBuYXJyb3cgaXQgZG93biBiYXNlZCBvbiB0aGUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmM9OTE9c3RhdGljIHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICplZmlfcG9pc29uZWRfbWVtb3J5KHZvaWQpXG4tLVxuZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmMtOTktLyogRG9lcyB0aGUgcmFuZ2UgY292ZXIgYSB1bml0IGFuIGVhcmxpZXIga2VybmVsIHJlY29yZGVkIGFzIGJhZD8gKi9cbmRyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jOjEwMDpib29sIHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeShwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKVxuZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmMtMTAxLXtcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmg9NTM5MD1zdGF0aWMgaW5saW5lIGJvb2wgcGZuX2lzX3VuYWNjZXB0ZWRfbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxuLS1cbmluY2x1ZGUvbGludXgvbW0uaC01Mzk2LVxuaW5jbHVkZS9saW51eC9tbS5oOjUzOTc6Ym9vbCByYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnkocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7XG5pbmNsdWRlL2xpbnV4L21tLmgtNTM5OC1cbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtNTQwMC1cbmluY2x1ZGUvbGludXgvbW0uaDo1NDAxOnN0YXRpYyBpbmxpbmUgYm9vbCByYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnkocGh5c19hZGRyX3Qgc3RhcnQsXG5pbmNsdWRlL2xpbnV4L21tLmgtNTQwMi1cdFx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbi0tXG5tbS9wYWdlX2FsbG9jLmM9MTU4Mz1zdGF0aWMgdm9pZCBfX21lbWluaXQgcG9pc29uX2Jsb2NrKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4tLVxubW0vcGFnZV9hbGxvYy5jLTE1ODktXG5tbS9wYWdlX2FsbG9jLmM6MTU5MDpcdFx0aWYgKHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeShwYWdlX3RvX3BoeXMocCksIFBBR0VfU0laRSkpXG5tbS9wYWdlX2FsbG9jLmMtMTU5MS1cdFx0XHRod3BvaXNvbl9ib290X3BhZ2UocCk7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTE1OTU9dm9pZCBfX21lbWluaXQgX19mcmVlX3BhZ2VzX2NvcmUoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcixcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMTYyOS1cdC8qIEZpcnN0OiBhIGJsb2NrIHBhcmtlZCBieSBfX2ZyZWVfdW5hY2NlcHRlZCgpIG5ldmVyIHJldHVybnMgaGVyZS4gKi9cbm1tL3BhZ2VfYWxsb2MuYzoxNjMwOlx0aWYgKHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeShwYWdlX3RvX3BoeXMocGFnZSksXG5tbS9wYWdlX2FsbG9jLmMtMTYzMS1cdFx0XHRcdFx0ICAgUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyBvcmRlcikpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDEwNAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDYwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDdXJyZW50IEFuYWx5c2lzIG9mIHRoZSBFRkkgSGFyZHdhcmUgUG9pc29uaW5nIExvZ2ljKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gIHdvcmtzIGFuZCB3aGVuIGl0IGdldHMgY2FsbGVkLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nLiBGaXJzdCwgSSBzZWUgaXQmIzM5O3MgY2FsbGVkIHdpdGhpbiBgYWN0aW9uX3Jlc3VsdCgpYCBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AsIHNwZWNpZmljYWxseSB3aGVuIHRoZSBtZW1vcnkgZmFpbHVyZSB0eXBlIGlzbiYjMzk7dCBhbHJlYWR5IHBvaXNvbmVkIG9yIGEgUEZOIG1hcC4gVGhpcyBtYWtlcyBzZW5zZTsgaXQmIzM5O3MgcmVjb3JkaW5nIHRoZSBmYWlsdXJlIGZvciBwZXJzaXN0ZW50IHRyYWNraW5nIGFjcm9zcyByZWJvb3RzIGluIHRob3NlIGNhc2VzLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHdoYXQgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCBpdHNlbGYgZG9lcy4gTG9va2luZyBhdCBgZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmNgLCBpdCBzZWVtcyB0byBiZSBzZXR0aW5nIGEgYml0IGluIGEgYml0bWFwIHdpdGhpbiB0aGUgYGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnlgIHN0cnVjdHVyZS4gVGhpcyBzdHJ1Y3R1cmUmIzM5O3MgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gaXMgd2hhdCBJJiMzOTttIHJlYWxseSBjdXJpb3VzIGFib3V0LiBJdCBhcHBlYXJzIHRoYXQgaXQmIzM5O3MgdXNpbmcgdGhlIFBoeXNpY2FsIEZyYW1lIE51bWJlciAoUEZOKSB0byBjYWxjdWxhdGUgYSB1bml0IHdpdGhpbiB0aGF0IGJpdG1hcCBhbmQgdGhlbiBzZXRzIHRoZSBjb3JyZXNwb25kaW5nIGJpdC4gVGhlIGNoZWNrIGZvciBgcG1gIGJlaW5nIE5VTEwgb3IgdGhlIGFkZHJlc3MgYmVpbmcgb3V0c2lkZSB0aGUgZXhwZWN0ZWQgcmFuZ2UgaXMgY3J1Y2lhbCwgd2hpY2ggY291bGQgYmUgYW4gaXNzdWUgaWYgd2UgaGF2ZSBkaWZmZXJlbnQgRUZJIGNvbmZpZ3VyYXRpb25zLgoKQSB0aG91Z2h0OiBXaGF0IGlmIEVGSSBpcyBlbmFibGVkLCBsaWtlIGluIGEgUUVNVS9PVk1GIGVudmlyb25tZW50IGFuZCBgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllgIGlzIGFsc28gZW5hYmxlZD8gT3IsIGlmIGEgdG9vbCBsaWtlIHN5emthbGxlciBvciBhIHVzZXJzcGFjZSBhcHBsaWNhdGlvbiB1c2VzIGBtYWR2aXNlKC4uLiwgTUFEVl9IV1BPSVNPTilgIG9yIGludGVudGlvbmFsbHkgaW5qZWN0cyBtZW1vcnkgZmFpbHVyZXM/IEluIHN0YW5kYXJkIHN5emthbGxlciBydW5zLCBkb2VzIFFFTVUgZXZlbiBib290IHdpdGggVUVGSS9FRkk/IEV2ZW4gd2l0aG91dCBVRUZJLCBpZiBgZWZpLnBvaXNvbmVkX21lbW9yeWAgaXMgYEVGSV9JTlZBTElEX1RBQkxFX0FERFJgLCB0aGVuIGBlZmlfcG9pc29uZWRfbWVtb3J5KClgIHJldHVybnMgTlVMTCEgQW5kIHRoYXQgc2VlbXMgdG8gYmUgdGhlIGNhc2Ugd2hlbiBsb29raW5nIGF0IGBlZmlfaHdwb2lzb25fcmVjb3JkX3BmbmAuCgpXYWl0LCBjYW4gYG1hZHZpc2UoLi4uLCBNQURWX0hXUE9JU09OKWAgdHJpZ2dlciBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gPyBZZXMsIGJlY2F1c2UgYGFjdGlvbl9yZXN1bHRgIGlzIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIGl0LCB3aGljaCByZWNlaXZlcyB0aGUgUEZOIGZyb20gbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgbG9naWMuCgpOb3csIHRoZXJlJiMzOTtzIGBod3BvaXNvbl9ib290X3BhZ2UoKWAgaW4gYG1lbW9yeS1mYWlsdXJlLmNgLiBCdXQgaXQmIzM5O3Mgb25seSBjYWxsZWQgZHVyaW5nIGVhcmx5IGJvb3Qgd2l0aGluIGBfX2ZyZWVfcGFnZXNfY29yZSgpYC4gSGFuZyBvbiBhIHNlY29uZCwgdGhvdWdoLCBiZWNhdXNlIGBfX2ZyZWVfcGFnZXNfY29yZWAgYWxzbyBnZXRzIGNhbGxlZCBkdXJpbmcgbWVtb3J5IGhvdHBsdWcuIFRoYXQgbWVhbnMgdGhpcyBlbnRpcmUgc2VxdWVuY2Ugb2YgZXZlbnRzIGNvdWxkIHBsYXkgb3V0IGR1cmluZyBob3RwbHVnZ2luZyB0b28sIG1ha2luZyB0aGlzIGV2ZW4gbW9yZSBjb21wbGljYXRlZCB0byB2ZXJpZnkuIEkgbmVlZCB0byBjaGVjayB3aGVyZSBlbHNlIGBfX2ZyZWVfcGFnZXNfY29yZWAgaXMgY2FsbGVkLiBJdCB3b3VsZCBhcHBlYXIgdGhpcyBjb3VsZCBjYXVzZSBhIHBvdGVudGlhbCByYWNlIGFuZC9vciBhZmZlY3Qgd2hhdCB3ZSB3ZXJlIHRyeWluZyB0byBkZXRlcm1pbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE0OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fZnJlZV9wYWdlc19jb3JlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ttc2FuL2luaXQuYz0xNjg9c3RhdGljIHZvaWQgZG9fY29sbGVjdGlvbih2b2lkKVxuLS1cbm1tL2ttc2FuL2luaXQuYy0xNzYtXHRcdGttc2FuX3NldHVwX21ldGEocGFnZSwgc2hhZG93LCBvcmlnaW4sIGNvbGxlY3Qub3JkZXIpO1xubW0va21zYW4vaW5pdC5jOjE3NzpcdFx0X19mcmVlX3BhZ2VzX2NvcmUocGFnZSwgY29sbGVjdC5vcmRlciwgTUVNSU5JVF9FQVJMWSk7XG5tbS9rbXNhbi9pbml0LmMtMTc4LVx0fVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9NjQ4PXZvaWQgZ2VuZXJpY19vbmxpbmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxubW0vbWVtb3J5X2hvdHBsdWcuYy02NDkte1xubW0vbWVtb3J5X2hvdHBsdWcuYzo2NTA6XHRfX2ZyZWVfcGFnZXNfY29yZShwYWdlLCBvcmRlciwgTUVNSU5JVF9IT1RQTFVHKTtcbm1tL21lbW9yeV9ob3RwbHVnLmMtNjUxLX1cbi0tXG5tbS9tbV9pbml0LmM9MTk1Nz1zdGF0aWMgdm9pZCBfX2luaXQgZGVmZXJyZWRfZnJlZV9wYWdlcyh1bnNpZ25lZCBsb25nIHBmbixcbi0tXG5tbS9tbV9pbml0LmMtMTk3Mi1cdGlmIChucl9wYWdlcyA9PSBNQVhfT1JERVJfTlJfUEFHRVMgXHUwMDI2XHUwMDI2IElTX01BWF9PUkRFUl9BTElHTkVEKHBmbikpIHtcbm1tL21tX2luaXQuYzoxOTczOlx0XHRfX2ZyZWVfcGFnZXNfY29yZShwYWdlLCBNQVhfUEFHRV9PUkRFUiwgTUVNSU5JVF9FQVJMWSk7XG5tbS9tbV9pbml0LmMtMTk3NC1cdFx0cmV0dXJuO1xuLS1cbm1tL21tX2luaXQuYy0xOTgwLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcGFnZXM7IGkmIzQzOyYjNDM7KVxubW0vbW1faW5pdC5jOjE5ODE6XHRcdF9fZnJlZV9wYWdlc19jb3JlKHBhZ2UgJiM0MzsgaSwgMCwgTUVNSU5JVF9FQVJMWSk7XG5tbS9tbV9pbml0LmMtMTk4Mi19XG4tLVxubW0vbW1faW5pdC5jPTI0NTI9dm9pZCBfX2luaXQgbWVtYmxvY2tfZnJlZV9wYWdlcyh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgaW50IG9yZGVyKVxuLS1cbm1tL21tX2luaXQuYy0yNDY5LVx0Y2xlYXJfcGFnZV90YWdfcmVmKHBhZ2UpO1xubW0vbW1faW5pdC5jOjI0NzA6XHRfX2ZyZWVfcGFnZXNfY29yZShwYWdlLCBvcmRlciwgTUVNSU5JVF9FQVJMWSk7XG5tbS9tbV9pbml0LmMtMjQ3MS19XG4tLVxubW0vcGFnZV9hbGxvYy5jPTE1ODM9c3RhdGljIHZvaWQgX19tZW1pbml0IHBvaXNvbl9ibG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy0xNTk0LVxubW0vcGFnZV9hbGxvYy5jOjE1OTU6dm9pZCBfX21lbWluaXQgX19mcmVlX3BhZ2VzX2NvcmUoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcixcbm1tL3BhZ2VfYWxsb2MuYy0xNTk2LVx0XHRlbnVtIG1lbWluaXRfY29udGV4dCBjb250ZXh0KVxuLS1cbm1tL3BhZ2VfYWxsb2MuaD0yMTQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqcGFnZWJsb2NrX3Bmbl90b19wYWdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuLS1cbm1tL3BhZ2VfYWxsb2MuaC0yMjItXG5tbS9wYWdlX2FsbG9jLmg6MjIzOmV4dGVybiB2b2lkIF9fZnJlZV9wYWdlc19jb3JlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG5tbS9wYWdlX2FsbG9jLmgtMjI0LVx0XHRlbnVtIG1lbWluaXRfY29udGV4dCBjb250ZXh0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTQ6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwNDQKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBIb3RwbHVnIGFuZCBQb3RlbnRpYWwgRmFpbHVyZSBJbmplY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBtZW1vcnkgaG90cGx1ZyBpcyBoYW5kbGVkIHdpdGhpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGBnZW5lcmljX29ubGluZV9wYWdlKClgIGZ1bmN0aW9uIGluIGBtbS9tZW1vcnlfaG90cGx1Zy5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBtZW1vcnkgZGVhbGxvY2F0aW9uIHVzaW5nIGBfX2ZyZWVfcGFnZXNfY29yZSgpYCBoYXBwZW5zLCBmbGFnZ2VkIHdpdGggYE1FTUlOSVRfSE9UUExVR2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSB2YXJpb3VzIHRyaWdnZXJzIGZvciB0aGlzIHByb2Nlc3MsIHdoaWNoLCBhcyBJIHJlY2FsbCwgY29tZSB0aHJvdWdoIHN5c2ZzIGludGVyZmFjZXMgbGlrZSBgL3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvbWVtb3J5WC9zdGF0ZWAsIG9yIHBlcmhhcHMgdmlhIGBkYXhfa21lbWAgb3IgZXZlbiBgdmlydGlvLW1lbWAgaW4gc29tZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cuCgpOb3csIEkmIzM5O20gZ2V0dGluZyBpbnRlcmVzdGVkIGluIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIG1lbW9yeSBmYWlsdXJlIHNjZW5hcmlvcy4gIEkgc3VzcGVjdCB0aGVyZSBtaWdodCBiZSBhIGNvbm5lY3Rpb24gYmV0d2VlbiBob3RwbHVnIGFuZCBmYWlsdXJlIGluamVjdGlvbiwgcG90ZW50aWFsbHkgdGhyb3VnaCBtZWNoYW5pc21zIGxpa2UgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB3aGVyZSBgYWN0aW9uX3Jlc3VsdGAgaXMgY2FsbGVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYC4gSSBuZWVkIHRvIHJldmlldyBhbGwgdGhlIGNhbGwgcGF0aHMgdG8gYGFjdGlvbl9yZXN1bHRgIGZyb20gdGhhdCBmaWxlLCBpbmNsdWRpbmcgYW55IHRoYXQgb3JpZ2luYXRlIGZyb20gYG1hZHZpc2VfaW5qZWN0X2Vycm9yYC4gIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhvc2UgY2FsbHMgZG8gYW5kIGhvdyB0aGV5IG1pZ2h0IHJlbGF0ZSB0byBtZW1vcnkgaG90cGx1ZyBldmVudHMgYW5kIHBvdGVudGlhbCBoYXJkd2FyZSBpc3N1ZXMuIEkmIzM5O20gbG9va2luZyBmb3IgYSBjbGVhciBwYXRoIGNvbm5lY3RpbmcgdGhlc2Ugc2VlbWluZ2x5IGRpc3BhcmF0ZSBhcmVhcy4gIFRoaXMgaW52ZXN0aWdhdGlvbiBzaG91bGQgaWxsdW1pbmF0ZSBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciB1bmV4cGVjdGVkIGJlaGF2aW9ycyBkdXJpbmcgaG90cGx1ZyBvcGVyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtNQURWX0hXUE9JU09OJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbW0vaHdwb2lzb24ucnN0PTEwNj1UZXN0aW5nXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9od3BvaXNvbi5yc3QtMTA4LVxuRG9jdW1lbnRhdGlvbi9tbS9od3BvaXNvbi5yc3Q6MTA5OiogbWFkdmlzZShNQURWX0hXUE9JU09OLCAuLi4uKSAoYXMgcm9vdCkgLSBQb2lzb24gYSBwYWdlIGluIHRoZVxuRG9jdW1lbnRhdGlvbi9tbS9od3BvaXNvbi5yc3QtMTEwLSAgcHJvY2VzcyBmb3IgdGVzdGluZ1xuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h3cG9pc29uLnJzdD05Nj1QUl9NQ0VfS0lMTF9HRVRcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9od3BvaXNvbi5yc3QtMTAxLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHdwb2lzb24ucnN0OjEwMjoqIG1hZHZpc2UoTUFEVl9IV1BPSVNPTiwgLi4uLikgKGFzIHJvb3QpIC0g5Zyo5rWL6K+V6L+H56iL5LitUG9pc29u5LiA5Liq6aG16Z2iXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9od3BvaXNvbi5yc3QtMTAzLVxuLS1cbmFyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC04NS0jZGVmaW5lIE1BRFZfVU5NRVJHRUFCTEUgMTNcdFx0LyogS1NNIG1heSBub3QgbWVyZ2UgaWRlbnRpY2FsIHBhZ2VzICovXG5hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmg6ODY6I2RlZmluZSBNQURWX0hXUE9JU09OXHQgMTAwXHRcdC8qIHBvaXNvbiBhIHBhZ2UgZm9yIHRlc3RpbmcgKi9cbmFyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC04Ny1cbi0tXG5hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC03NC1cbmFyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oOjc1OiNkZWZpbmUgTUFEVl9IV1BPSVNPTiAgICAgMTAwXHRcdC8qIHBvaXNvbiBhIHBhZ2UgZm9yIHRlc3RpbmcgKi9cbmFyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTc2LSNkZWZpbmUgTUFEVl9TT0ZUX09GRkxJTkUgMTAxXHRcdC8qIHNvZnQgb2ZmbGluZSBwYWdlIGZvciB0ZXN0aW5nICovXG4tLVxuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmgtNTUtI2RlZmluZSBNQURWX0RPRk9SS1x0MTFcdFx0LyogZG8gaW5oZXJpdCBhY3Jvc3MgZm9yayAqL1xuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmg6NTY6I2RlZmluZSBNQURWX0hXUE9JU09OXHQxMDBcdFx0LyogcG9pc29uIGEgcGFnZSBmb3IgdGVzdGluZyAqL1xuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmgtNTctI2RlZmluZSBNQURWX1NPRlRfT0ZGTElORSAxMDFcdFx0Lyogc29mdCBvZmZsaW5lIHBhZ2UgZm9yIHRlc3RpbmcgKi9cbi0tXG5tbS9tYWR2aXNlLmM9MTUwND1zdGF0aWMgYm9vbCBpc19tZW1vcnlfZmFpbHVyZShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTUwNi1cdHN3aXRjaCAobWFkdl9iZWhhdmlvci1cdTAwM2ViZWhhdmlvcikge1xubW0vbWFkdmlzZS5jOjE1MDc6XHRjYXNlIE1BRFZfSFdQT0lTT046XG5tbS9tYWR2aXNlLmMtMTUwOC1cdGNhc2UgTUFEVl9TT0ZUX09GRkxJTkU6XG4tLVxubW0vbWFkdmlzZS5jPTE1MzA9bWFkdmlzZV9iZWhhdmlvcl92YWxpZChpbnQgYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTE1NjMtXHRjYXNlIE1BRFZfU09GVF9PRkZMSU5FOlxubW0vbWFkdmlzZS5jOjE1NjQ6XHRjYXNlIE1BRFZfSFdQT0lTT046XG5tbS9tYWR2aXNlLmMtMTU2NS0jZW5kaWZcbi0tXG5tbS9tYWR2aXNlLmM9MTg5OT1zdGF0aWMgaW50IG1hZHZpc2VfZG9fYmVoYXZpb3IodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbixcbi0tXG5tbS9tYWR2aXNlLmMtMTk1NS0gKiAgTUFEVl9LRUVQT05GT1JLIC0gdW5kbyB0aGUgZWZmZWN0IG9mIE1BRFZfV0lQRU9ORk9SS1xubW0vbWFkdmlzZS5jOjE5NTY6ICogIE1BRFZfSFdQT0lTT04gLSB0cmlnZ2VyIG1lbW9yeSBlcnJvciBoYW5kbGVyIGFzIGlmIHRoZSBnaXZlbiBtZW1vcnkgcmFuZ2Vcbm1tL21hZHZpc2UuYy0xOTU3LSAqXHRcdHdlcmUgY29ycnVwdGVkIGJ5IHVucmVjb3ZlcmFibGUgaGFyZHdhcmUgbWVtb3J5IGZhaWx1cmUuXG4tLVxudG9vbHMvYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC0zNy0jZGVmaW5lIFBST1RfV1JJVEVcdDB4MlxudG9vbHMvYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaDozODovKiBNQURWX0hXUE9JU09OIGlzIHVuZGVmaW5lZCBvbiBhbHBoYSwgZml4IGl0IGZvciBwZXJmICovXG50b29scy9hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oOjM5OiNkZWZpbmUgTUFEVl9IV1BPSVNPTlx0MTAwXG50b29scy9hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTQwLS8qIE1BRFZfU09GVF9PRkZMSU5FIGlzIHVuZGVmaW5lZCBvbiBhbHBoYSwgZml4IGl0IGZvciBwZXJmICovXG4tLVxudG9vbHMvYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTEwLSNkZWZpbmUgTUFEVl9IVUdFUEFHRVx0MTRcbnRvb2xzL2FyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaDoxMTojZGVmaW5lIE1BRFZfSFdQT0lTT05cdCAxMDBcbnRvb2xzL2FyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC0xMi0jZGVmaW5lIE1BRFZfTUVSR0VBQkxFXHQgMTJcbi0tXG50b29scy9hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC0zNy0jZGVmaW5lIFBST1RfV1JJVEVcdDB4MlxudG9vbHMvYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmg6Mzg6I2RlZmluZSBNQURWX0hXUE9JU09OXHQxMDBcbnRvb2xzL2FyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTM5LSNkZWZpbmUgTUFEVl9TT0ZUX09GRkxJTkUgMTAxXG4tLVxudG9vbHMvYXJjaC94dGVuc2EvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmgtMzctI2RlZmluZSBQUk9UX1dSSVRFXHQweDJcbnRvb2xzL2FyY2gveHRlbnNhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oOjM4Oi8qIE1BRFZfSFdQT0lTT04gaXMgdW5kZWZpbmVkIG9uIHh0ZW5zYSwgZml4IGl0IGZvciBwZXJmICovXG50b29scy9hcmNoL3h0ZW5zYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaDozOTojZGVmaW5lIE1BRFZfSFdQT0lTT05cdDEwMFxudG9vbHMvYXJjaC94dGVuc2EvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmgtNDAtLyogTUFEVl9TT0ZUX09GRkxJTkUgaXMgdW5kZWZpbmVkIG9uIHh0ZW5zYSwgZml4IGl0IGZvciBwZXJmICovXG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmgtNTUtI2RlZmluZSBNQURWX0RPRk9SS1x0MTFcdFx0LyogZG8gaW5oZXJpdCBhY3Jvc3MgZm9yayAqL1xudG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmg6NTY6I2RlZmluZSBNQURWX0hXUE9JU09OXHQxMDBcdFx0LyogcG9pc29uIGEgcGFnZSBmb3IgdGVzdGluZyAqL1xudG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmgtNTctI2RlZmluZSBNQURWX1NPRlRfT0ZGTElORSAxMDFcdFx0Lyogc29mdCBvZmZsaW5lIHBhZ2UgZm9yIHRlc3RpbmcgKi9cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXJlYWQtaHdwb2lzb24uYz0xNzY9dGVzdF9odWdldGxiX3JlYWRfaHdwb2lzb24oaW50IGZkLCBzaXplX3QgbGVuLCBzaXplX3Qgd3JfY2h1bmtfc2l6ZSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXJlYWQtaHdwb2lzb24uYy0yMDUtXHRod3BfYWRkciA9IGZpbGVtYXAgJiM0MzsgbGVuIC8gMiAmIzQzOyBwYWdlc2l6ZTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItcmVhZC1od3BvaXNvbi5jOjIwNjpcdGlmIChtYWR2aXNlKGh3cF9hZGRyLCBwYWdlc2l6ZSwgTUFEVl9IV1BPSVNPTikgXHUwMDNjIDApIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItcmVhZC1od3BvaXNvbi5jOjIwNzpcdFx0a3NmdF9wZXJyb3IoXCYjMzQ7TUFEVl9IV1BPSVNPTiBmYWlsZWRcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1yZWFkLWh3cG9pc29uLmMtMjA4LVx0XHRnb3RvIHVubWFwO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmM9NTg9c3RhdGljIGludCBtYWR2X2hhcmRfaW5qZWN0KEZJWFRVUkVfREFUQShtZW1vcnlfZmFpbHVyZSkgKiBzZWxmLCB2b2lkICp2YWRkcilcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmMtNTkte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuYzo2MDpcdHJldHVybiBtYWR2aXNlKHZhZGRyLCBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZSwgTUFEVl9IV1BPSVNPTik7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jLTYxLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTQ6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzNzcKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkRpdmluZyBpbnRvIGBtYWR2aXNlX2luamVjdF9lcnJvcmAqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzLiBJJiMzOTttIGdvaW5nIHRvIGhlYWQgc3RyYWlnaHQgZm9yIGBtbS9tYWR2aXNlLmNgIGFuZCBzcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgYXQgdGhlIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgZnVuY3Rpb24uIFRoaXMgb25lIGlzIGtleSwgYW5kIEkga25vdyBpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgaGFuZGxlZCwgdGhlIG1lY2hhbmljcyBvZiBob3cgd2UmIzM5O3JlIGluamVjdGluZyBlcnJvcnMgdXNpbmcgbWFkdmlzZS4gSSB3YW50IHRvIHNlZSB0aGUgZXJyb3IgaW5qZWN0aW9uIGJlaGF2aW9yIGRldGFpbHMuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQgd2hlbiBpdCBjb21lcyB0byB1bmRlcnN0YW5kaW5nIGV4YWN0bHkgaG93IHRoaXMgcGFydGljdWxhciBjb250cm9sIHBhdGggYmVoYXZlcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIGhhcyB0byBzYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE0OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hZHZpc2VfaW5qZWN0X2Vycm9yJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYz0xMzUwPXN0YXRpYyBpbnQgbWFkdmlzZV92bWFfYmVoYXZpb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTE0NTgtICovXG5tbS9tYWR2aXNlLmM6MTQ1OTpzdGF0aWMgaW50IG1hZHZpc2VfaW5qZWN0X2Vycm9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxubW0vbWFkdmlzZS5jLTE0NjAte1xuLS1cbm1tL21hZHZpc2UuYz0xNTA0PXN0YXRpYyBib29sIGlzX21lbW9yeV9mYWlsdXJlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNTE2LVxubW0vbWFkdmlzZS5jOjE1MTc6c3RhdGljIGludCBtYWR2aXNlX2luamVjdF9lcnJvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbm1tL21hZHZpc2UuYy0xNTE4LXtcbi0tXG5tbS9tYWR2aXNlLmM9MTg5OT1zdGF0aWMgaW50IG1hZHZpc2VfZG9fYmVoYXZpb3IodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbixcbi0tXG5tbS9tYWR2aXNlLmMtMTkwOC1cdFx0cmFuZ2UtXHUwMDNlZW5kID0gc3RhcnQgJiM0MzsgbGVuX2luO1xubW0vbWFkdmlzZS5jOjE5MDk6XHRcdHJldHVybiBtYWR2aXNlX2luamVjdF9lcnJvcihtYWR2X2JlaGF2aW9yKTtcbm1tL21hZHZpc2UuYy0xOTEwLVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODg5MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgbWFkdmlzZV9pbmplY3RfZXJyb3JgKioKCk9rYXksIHRpbWUgdG8gZGlzc2VjdCB0aGUgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgZnVuY3Rpb24gaXMgc3VwcG9zZWQgdG8gd29yayBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGhvdyBpdCBtaWdodCBkZXZpYXRlIGZyb20gZXhwZWN0ZWQgYmVoYXZpb3Igb3IgaW50ZXJhY3Qgd2l0aCB0aGUga2VybmVsIGluIHVuZXhwZWN0ZWQgd2F5cy4gTXkgZm9jdXMgaXMgb24gcG90ZW50aWFsIGVkZ2UgY2FzZXMsIHJhY2UgY29uZGl0aW9ucywgYW5kIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHVuaXQgdGhhdCBjb3VsZCBsZWFkIHRvIHZ1bG5lcmFiaWxpdGllcyBvciBzdWJ0bGUgYnVncy4gSSYjMzk7bSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBpbmplY3Rpb24gbG9naWMgaXRzZWxmIOKAkyB3aGF0IHRyaWdnZXJzIGl0LCBob3cgcHJlY2lzZWx5IGlzIHRoZSBlcnJvciBjb21tdW5pY2F0ZWQgb3Igc2ltdWxhdGVkLCBhbmQgYXJlIHRoZXJlIGFueSBvYnZpb3VzIChvciBub24tb2J2aW91cykgZmxhd3MgaW4gdGhlIGVycm9yIGhhbmRsaW5nPyBJIHdpbGwgbG9vayBmb3IgYW55IGFyZWFzIHRoYXQgcG90ZW50aWFsbHkgYnlwYXNzIGludGVuZGVkIG1lbW9yeSBwcm90ZWN0aW9uLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSBwYWdlIGZhdWx0IGhhbmRsaW5nIHBhdGhzLCBhbmQgY29uc2lkZXIgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB3aXRoIG90aGVyIG9wZXJhdGlvbnMgdGhhdCBtYW5pcHVsYXRlIHRoZSBzYW1lIG1lbW9yeSByZWdpb25zLiBMZXQmIzM5O3Mgc2VlLi4uIHdoZXJlIGRvZXMgdGhlIGtlcm5lbCBhY3R1YWxseSBpbmplY3QgdGhlICYjMzQ7ZXJyb3ImIzM0OyBhZnRlciBgbWFkdmlzZWA/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyByZWxhdGVkIHRvIHRoZSBlcnJvciBzdGF0ZT8gSXMgdGhlIGVycm9yIHRydWx5IGFuIGVycm9yLCBvciBhIHRyaWdnZXIgdGhhdCBleHBvc2VzIHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBhbGxvY2F0aW9uIG1lY2hhbmlzbXM/IExldCYjMzk7cyBnZXQgc3RhcnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTQ6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0NTU6XHQjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXG4xNDU2Olx0LypcbjE0NTc6XHQgKiBFcnJvciBpbmplY3Rpb24gc3VwcG9ydCBmb3IgbWVtb3J5IGVycm9yIGhhbmRsaW5nLlxuMTQ1ODpcdCAqL1xuMTQ1OTpcdHN0YXRpYyBpbnQgbWFkdmlzZV9pbmplY3RfZXJyb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4xNDYwOlx0e1xuMTQ2MTpcdFx0dW5zaWduZWQgbG9uZyBzaXplO1xuMTQ2MjpcdFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IG1hZHZfYmVoYXZpb3ItXHUwMDNlcmFuZ2Uuc3RhcnQ7XG4xNDYzOlx0XHR1bnNpZ25lZCBsb25nIGVuZCA9IG1hZHZfYmVoYXZpb3ItXHUwMDNlcmFuZ2UuZW5kO1xuMTQ2NDpcdFxuMTQ2NTpcdFx0aWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKVxuMTQ2NjpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuMTQ2NzpcdFxuMTQ2ODpcdFx0Zm9yICg7IHN0YXJ0IFx1MDAzYyBlbmQ7IHN0YXJ0ICYjNDM7PSBzaXplKSB7XG4xNDY5Olx0XHRcdHVuc2lnbmVkIGxvbmcgcGZuO1xuMTQ3MDpcdFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbjE0NzE6XHRcdFx0aW50IHJldDtcbjE0NzI6XHRcbjE0NzM6XHRcdFx0cmV0ID0gZ2V0X3VzZXJfcGFnZXNfZmFzdChzdGFydCwgMSwgMCwgXHUwMDI2cGFnZSk7XG4xNDc0Olx0XHRcdGlmIChyZXQgIT0gMSlcbjE0NzU6XHRcdFx0XHRyZXR1cm4gcmV0O1xuMTQ3NjpcdFx0XHRwZm4gPSBwYWdlX3RvX3BmbihwYWdlKTtcbjE0Nzc6XHRcbjE0Nzg6XHRcdFx0LypcbjE0Nzk6XHRcdFx0ICogV2hlbiBzb2Z0IG9mZmxpbmluZyBodWdlcGFnZXMsIGFmdGVyIG1pZ3JhdGluZyB0aGUgcGFnZVxuMTQ4MDpcdFx0XHQgKiB3ZSBkaXNzb2x2ZSBpdCwgdGhlcmVmb3JlIGluIHRoZSBzZWNvbmQgbG9vcCBcJiMzNDtwYWdlXCYjMzQ7IHdpbGxcbjE0ODE6XHRcdFx0ICogbm8gbG9uZ2VyIGJlIGEgY29tcG91bmQgcGFnZS5cbjE0ODI6XHRcdFx0ICovXG4xNDgzOlx0XHRcdHNpemUgPSBwYWdlX3NpemUoY29tcG91bmRfaGVhZChwYWdlKSk7XG4xNDg0Olx0XG4xNDg1Olx0XHRcdGlmIChtYWR2X2JlaGF2aW9yLVx1MDAzZWJlaGF2aW9yID09IE1BRFZfU09GVF9PRkZMSU5FKSB7XG4xNDg2Olx0XHRcdFx0cHJfaW5mbyhcJiMzNDtTb2Z0IG9mZmxpbmluZyBwZm4gJSNseCBhdCBwcm9jZXNzIHZpcnR1YWwgYWRkcmVzcyAlI2x4XFxuXCYjMzQ7LFxuMTQ4NzpcdFx0XHRcdFx0IHBmbiwgc3RhcnQpO1xuMTQ4ODpcdFx0XHRcdHJldCA9IHNvZnRfb2ZmbGluZV9wYWdlKHBmbiwgTUZfQ09VTlRfSU5DUkVBU0VEKTtcbjE0ODk6XHRcdFx0fSBlbHNlIHtcbjE0OTA6XHRcdFx0XHRwcl9pbmZvKFwmIzM0O0luamVjdGluZyBtZW1vcnkgZmFpbHVyZSBmb3IgcGZuICUjbHggYXQgcHJvY2VzcyB2aXJ0dWFsIGFkZHJlc3MgJSNseFxcblwmIzM0OyxcbjE0OTE6XHRcdFx0XHRcdCBwZm4sIHN0YXJ0KTtcbjE0OTI6XHRcdFx0XHRyZXQgPSBtZW1vcnlfZmFpbHVyZShwZm4sIE1GX0FDVElPTl9SRVFVSVJFRCB8IE1GX0NPVU5UX0lOQ1JFQVNFRCB8IE1GX1NXX1NJTVVMQVRFRCk7XG4xNDkzOlx0XHRcdFx0aWYgKHJldCA9PSAtRU9QTk9UU1VQUClcbjE0OTQ6XHRcdFx0XHRcdHJldCA9IDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE0OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5ODQyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IERlZXAgRGl2ZSBpbnRvIEVGSSBIYXJkd2FyZSBQb2lzb25pbmcgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHRyYWNlIHRoZSBwYXRoIG9mIGhhcmR3YXJlIHBvaXNvbmluZyBldmVudHMuIEl0IGxvb2tzIGxpa2UgYG1hZHZpc2UoYWRkciwgbGVuLCBNQURWX0hXUE9JU09OKWAgdHJpZ2dlcnMgYSBjaGFpbiBvZiBldmVudHMsIHN0YXJ0aW5nIHdpdGggYG1lbW9yeV9mYWlsdXJlKClgLCBsZWFkaW5nIHRvIGBhY3Rpb25fcmVzdWx0KClgLCBhbmQgdWx0aW1hdGVseSBjYWxsaW5nIGBlZmlfaHdwb2lzb25fcmVjb3JkX3BmbihwZm4pYC4gVGhhdCYjMzk7cyB0aGUgY29yZSBmdW5jdGlvbiBJIG5lZWQgdG8gdW5kZXJzdGFuZC4KCkkgYWxzbyBzZWUgb3RoZXIgaW5qZWN0aW9uIG1ldGhvZHMgbWVudGlvbmVkOiB0aGUgZGVidWdmcyBlbnRyeSBgL3N5cy9rZXJuZWwvZGVidWcvaHdwb2lzb24vY29ycnVwdC1wZm5gIGZvciBkaXJlY3QgaW5qZWN0aW9uLCBhbmQgdGhlIFJBUy9NQ0UgaW5qZWN0aW9uIG1lY2hhbmlzbXMgdXNpbmcgYC9kZXYvbWNlbG9nYCBhbmQgQVBFSS4gVGhlc2UgcHJvdmlkZSB3YXlzIHRvIHNpbXVsYXRlIHRoZSBoYXJkd2FyZSBlcnJvciB0aGF0IHVsdGltYXRlbHkgcmVhY2hlcyB0aGUgc2FtZSBwb2ludC4KCk5vdywgbGV0JiMzOTtzIHplcm8gaW4gb24gYGRyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jYC4gVGhlIGtleSBmdW5jdGlvbiBoZXJlIGlzIGNsZWFybHkgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKWAuICBMb29raW5nIGF0IHRoZSBjb2RlLCBpdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJdCBnZXRzIGEgcG9pbnRlciB0byBhIGBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeWAgdmlhIGBlZmlfcG9pc29uZWRfbWVtb3J5KClgLCBjb252ZXJ0cyB0aGUgcGFnZSBmcmFtZSBudW1iZXIgKGBwZm5gKSB0byBhIHBoeXNpY2FsIGFkZHJlc3MsIGFuZCB0aGVuIG1hcHMgdGhlIGFkZHJlc3MgdG8gYSBiaXQgd2l0aGluIGEgYml0bWFwLiBUaGlzIGJpdG1hcCBzZWVtcyB0byB0cmFjayB3aGljaCBtZW1vcnkgdW5pdHMgYXJlIGNvbnNpZGVyZWQgJiMzNDtwb2lzb25lZCYjMzQ7LiBBIHNpbXBsZSBjaGVjayB0byBlbnN1cmUgd2UmIzM5O3JlIHdpdGhpbiB0aGUgdmFsaWQgcG9pc29uZWQgcmVnaW9uIGlzIGFsc28gcHJlc2VudC4gSWYgdGhlIGFkZHJlc3MgaXMgdmFsaWQsIGl0IHRoZW4gc2V0cyB0aGUgcmVsZXZhbnQgYml0IGluIHRoZSBgcG0tJmd0O2JpdG1hcGAuCgpJIGFsc28gbm90aWNlZCBgcmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5YC4gIFRoaXMgY29kZSYjMzk7cyBqb2IgaXMgdG8gY2hlY2sgaWYgYSBzcGVjaWZpZWQgcGh5c2ljYWwgbWVtb3J5IHJhbmdlIGNvbnRhaW5zIGFueSBwb2lzb25lZCBtZW1vcnkuIEl0IGRvZXMgc2ltaWxhciBhZGRyZXNzIGNhbGN1bGF0aW9ucyB0byBmaW5kIHRoZSBhcHByb3ByaWF0ZSBiaXQgcmFuZ2Ugd2l0aGluIHRoZSBwb2lzb25lZCBtZW1vcnkgYml0bWFwLiBJIHNlZSBpdCBoYW5kbGVzIHRoZSBlZGdlIGNhc2VzIHdoZXJlIHRoZSBwcm92aWRlZCByYW5nZSBtaWdodCBzdGFydCBiZWZvcmUgb3IgZXh0ZW5kIGJleW9uZCB0aGUga25vd24gcG9pc29uZWQgbWVtb3J5IHJlZ2lvbi4gSXQgdXNlcyBgZmluZF9uZXh0X2JpdGAgdG8gZWZmaWNpZW50bHkgY2hlY2sgaWYgYW55IGJpdCBpcyBzZXQgd2l0aGluIHRoZSByYW5nZS4KClRoZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBgZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmNgIGNvbXBsZXRlbHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbnRleHQuIEkmIzM5O2xsIHJlYWQgdGhpcyBmaWxlIGZyb20gdG9wIHRvIGJvdHRvbSwgcGF5aW5nIGF0dGVudGlvbiB0byB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBvaXNvbmVkIG1lbW9yeSByZWdpb24gYW5kIGhvdyB0aGUgYml0bWFwIGlzIG1hbmFnZWQsIHRvIGJ1aWxkIGEgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQvKlxuICAgMzpcdCAqIFJ1bnRpbWUgc2lkZSBvZiB0aGUgTElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWSB0YWJsZTogb25lIGJpdCBwZXJcbiAgIDQ6XHQgKiBFRklfUE9JU09OX1VOSVRfU0laRSwgc2V0IGhlcmUgYXMgZnJhbWVzIGdvIGJhZCwgaG9ub3JlZCBieSB0aGUgbmV4dCBrZXJuZWwuXG4gICA1Olx0ICpcbiAgIDY6XHQgKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gICA3Olx0ICogQ29weXJpZ2h0IChjKSAyMDI2IEJyZW5vIExlaXRhbyBcdTAwM2NsZWl0YW9AZGViaWFuLm9yZ1x1MDAzZVxuICAgODpcdCAqL1xuICAgOTpcdFxuICAxMDpcdCNkZWZpbmUgcHJfZm10KGZtdCkgXCYjMzQ7ZWZpOiBcJiMzNDsgZm10XG4gIDExOlx0XG4gIDEyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvYml0bWFwLmhcdTAwM2VcbiAgMTM6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9lZmkuaFx1MDAzZVxuICAxNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvLmhcdTAwM2VcbiAgMTU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9sb2cyLmhcdTAwM2VcbiAgMTY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1ibG9jay5oXHUwMDNlXG4gIDE3Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZVxuICAxODpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L292ZXJmbG93LmhcdTAwM2VcbiAgMTk6XHRcbiAgMjA6XHRzdGF0aWMgYm9vbCBfX2luaXRcbiAgMjE6XHRlZmlfcG9pc29uX2dlb21ldHJ5X3ZhbGlkKGNvbnN0IHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSlcbiAgMjI6XHR7XG4gIDIzOlx0XHR1NjQgbmJpdHM7XG4gIDI0Olx0XG4gIDI1Olx0XHQvKiBXaG9sZSB3b3JkcywgYW5kIGEgYml0IGNvdW50IHRoYXQgY2FuIGJlIHRha2VuIHdpdGhvdXQgd3JhcHBpbmcuICovXG4gIDI2Olx0XHRpZiAoIXBtLVx1MDAzZXNpemUgfHwgIUlTX0FMSUdORUQocG0tXHUwMDNlc2l6ZSwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSB8fFxuICAyNzpcdFx0ICAgIGNoZWNrX211bF9vdmVyZmxvdyhwbS1cdTAwM2VzaXplLCAodTY0KUJJVFNfUEVSX0JZVEUsIFx1MDAyNm5iaXRzKSlcbiAgMjg6XHRcdFx0cmV0dXJuIGZhbHNlO1xuICAyOTpcdFxuICAzMDpcdFx0aWYgKHBtLVx1MDAzZXVuaXRfc2l6ZSBcdTAwM2MgUEFHRV9TSVpFIHx8ICFpc19wb3dlcl9vZl8yKHBtLVx1MDAzZXVuaXRfc2l6ZSkpXG4gIDMxOlx0XHRcdHJldHVybiBmYWxzZTtcbiAgMzI6XHRcbiAgMzM6XHRcdHJldHVybiBJU19BTElHTkVEKHBtLVx1MDAzZXBoeXNfYmFzZSwgcG0tXHUwMDNldW5pdF9zaXplKTtcbiAgMzQ6XHR9XG4gIDM1Olx0XG4gIDM2Olx0LyogVGhlIHRhYmxlIG1heSBjb21lIGZyb20gYW4gZWFybGllciBrZXJuZWwsIHNvIHZldCBpdCBiZWZvcmUgdXNpbmcgaXQuICovXG4gIDM3Olx0c3RhdGljIGJvb2wgX19pbml0XG4gIDM4Olx0ZWZpX3BvaXNvbl90YWJsZV92YWxpZChjb25zdCBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0pXG4gIDM5Olx0e1xuICA0MDpcdFx0aWYgKHBtLVx1MDAzZXZlcnNpb24gIT0gMSkge1xuICA0MTpcdFx0XHRwcl93YXJuKFwmIzM0O0lnbm9yaW5nIHBvaXNvbmVkLW1lbW9yeSB0YWJsZSB3aXRoIHZlcnNpb24gJXVcXG5cJiMzNDssXG4gIDQyOlx0XHRcdFx0cG0tXHUwMDNldmVyc2lvbik7XG4gIDQzOlx0XHRcdHJldHVybiBmYWxzZTtcbiAgNDQ6XHRcdH1cbiAgNDU6XHRcbiAgNDY6XHRcdGlmICghZWZpX3BvaXNvbl9nZW9tZXRyeV92YWxpZChwbSkpIHtcbiAgNDc6XHRcdFx0cHJfd2FybihcJiMzNDtJZ25vcmluZyBtYWxmb3JtZWQgcG9pc29uZWQtbWVtb3J5IHRhYmxlXFxuXCYjMzQ7KTtcbiAgNDg6XHRcdFx0cmV0dXJuIGZhbHNlO1xuICA0OTpcdFx0fVxuICA1MDpcdFxuICA1MTpcdFx0cmV0dXJuIHRydWU7XG4gIDUyOlx0fVxuICA1MzpcdFxuICA1NDpcdC8qXG4gIDU1Olx0ICogVmV0IHRoZSBpbmhlcml0ZWQgdGFibGUgYW5kIGhhbmQgaXRzIHBhZ2VzIHRvIG1lbWJsb2NrLCB0aGUgd2F5IHRoZVxuICA1NjpcdCAqIHVuYWNjZXB0ZWQgbWVtb3J5IHRhYmxlIGlzIGhhbmRsZWQuIEl0IGlzIEVGSSBBQ1BJIHJlY2xhaW0gbWVtb3J5LCB3aGljaFxuICA1NzpcdCAqIGJlY29tZXMgRTgyMF9UWVBFX0FDUEkgYW5kIHdvdWxkIG90aGVyd2lzZSBzdGF5IG91dCBvZiB0aGUgZGlyZWN0IG1hcCwgYW5kXG4gIDU4Olx0ICogdG91Y2hpbmcgaXQgdGhlbiBmYXVsdHMuIENhbGxlZCBmcm9tIGVmaV9jb25maWdfcGFyc2VfdGFibGVzKCksIHNvXG4gIDU5Olx0ICogZXZlcnl0aGluZyBsYXRlciBjYW4gcmVhY2ggaXQgd2l0aCBlZmlfcG9pc29uZWRfbWVtb3J5KCkuXG4gIDYwOlx0ICovXG4gIDYxOlx0dm9pZCBfX2luaXQgZWZpX3BvaXNvbmVkX21lbW9yeV9yZXNlcnZlKHZvaWQpXG4gIDYyOlx0e1xuICA2MzpcdFx0c3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtO1xuICA2NDpcdFx0cGh5c19hZGRyX3Qgc3RhcnQsIGVuZDtcbiAgNjU6XHRcbiAgNjY6XHRcdGlmIChlZmkucG9pc29uZWRfbWVtb3J5ID09IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpXG4gIDY3Olx0XHRcdHJldHVybjtcbiAgNjg6XHRcbiAgNjk6XHRcdHBtID0gZWFybHlfbWVtcmVtYXAoZWZpLnBvaXNvbmVkX21lbW9yeSwgc2l6ZW9mKCpwbSkpO1xuICA3MDpcdFx0aWYgKCFwbSkge1xuICA3MTpcdFx0XHRwcl93YXJuKFwmIzM0O0NvdWxkIG5vdCBtYXAgcG9pc29uZWQtbWVtb3J5IHRhYmxlXFxuXCYjMzQ7KTtcbiAgNzI6XHRcdFx0ZWZpLnBvaXNvbmVkX21lbW9yeSA9IEVGSV9JTlZBTElEX1RBQkxFX0FERFI7XG4gIDczOlx0XHRcdHJldHVybjtcbiAgNzQ6XHRcdH1cbiAgNzU6XHRcbiAgNzY6XHRcdGlmICghZWZpX3BvaXNvbl90YWJsZV92YWxpZChwbSkpIHtcbiAgNzc6XHRcdFx0ZWZpLnBvaXNvbmVkX21lbW9yeSA9IEVGSV9JTlZBTElEX1RBQkxFX0FERFI7XG4gIDc4Olx0XHRcdGVhcmx5X21lbXVubWFwKHBtLCBzaXplb2YoKnBtKSk7XG4gIDc5Olx0XHRcdHJldHVybjtcbiAgODA6XHRcdH1cbiAgODE6XHRcbiAgODI6XHRcdHN0YXJ0ID0gUEFHRV9BTElHTl9ET1dOKGVmaS5wb2lzb25lZF9tZW1vcnkpO1xuICA4MzpcdFx0ZW5kID0gUEFHRV9BTElHTihlZmkucG9pc29uZWRfbWVtb3J5ICYjNDM7IHNpemVvZigqcG0pICYjNDM7IHBtLVx1MDAzZXNpemUpO1xuICA4NDpcdFx0ZWFybHlfbWVtdW5tYXAocG0sIHNpemVvZigqcG0pKTtcbiAgODU6XHRcbiAgODY6XHRcdG1lbWJsb2NrX2FkZChzdGFydCwgZW5kIC0gc3RhcnQpO1xuICA4NzpcdFx0bWVtYmxvY2tfcmVzZXJ2ZShzdGFydCwgZW5kIC0gc3RhcnQpO1xuICA4ODpcdH1cbiAgODk6XHRcbiAgOTA6XHQvKiBUaGUgdGFibGUsIHZldHRlZCBhdCBwYXJzZSB0aW1lLCBvciBOVUxMIGlmIHRoaXMgYm9vdCBoYXMgbm9uZS4gKi9cbiAgOTE6XHRzdGF0aWMgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKmVmaV9wb2lzb25lZF9tZW1vcnkodm9pZClcbiAgOTI6XHR7XG4gIDkzOlx0XHRpZiAoZWZpLnBvaXNvbmVkX21lbW9yeSA9PSBFRklfSU5WQUxJRF9UQUJMRV9BRERSKVxuICA5NDpcdFx0XHRyZXR1cm4gTlVMTDtcbiAgOTU6XHRcbiAgOTY6XHRcdHJldHVybiBwaHlzX3RvX3ZpcnQoZWZpLnBvaXNvbmVkX21lbW9yeSk7XG4gIDk3Olx0fVxuICA5ODpcdFxuICA5OTpcdC8qIERvZXMgdGhlIHJhbmdlIGNvdmVyIGEgdW5pdCBhbiBlYXJsaWVyIGtlcm5lbCByZWNvcmRlZCBhcyBiYWQ/ICovXG4gMTAwOlx0Ym9vbCByYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnkocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTQ6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI0MDEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0JiMzOTtzIGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFwcHJvYWNoIHRoaXMgYGRyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jYCBmaWxlLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgUG9pc29uKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGludG8gdGhlIGhlYXJ0IG9mIHRoaXMgYHBvaXNvbi5jYCBmaWxlIHdpdGhpbiB0aGUgRUZJIGZpcm13YXJlIGRyaXZlcnMuIEdpdmVuIHRoZSBuYW1lLCAmIzM0O3BvaXNvbiYjMzQ7IGltbWVkaWF0ZWx5IGZsYWdzIGEgcG90ZW50aWFsIGFyZWEgb2YgaW50ZXJlc3QgZm9yIG1lbW9yeSBjb3JydXB0aW9uIHZ1bG5lcmFiaWxpdGllcywgZGVmZW5zaXZlIHByb2dyYW1taW5nIHRlY2huaXF1ZXMsIG9yIHBlcmhhcHMgZXZlbiBhIGRlbGliZXJhdGUsIGlmIHVudXN1YWwsIG1lbW9yeSBzYW5pdGl6YXRpb24gc3RyYXRlZ3kuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgY29kZSB0aGF0IGRlYWxzIHdpdGggZWl0aGVyIGRlbGliZXJhdGVseSBvdmVyd3JpdGluZyBtZW1vcnkgd2l0aCBrbm93biBwYXR0ZXJucywgcG90ZW50aWFsbHkgdG8gZGV0ZWN0IHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgb3Igb3RoZXIgbWVtb3J5IGVycm9ycywgb3IgY29kZSB0aGF0IGlzIGRlZmVuc2l2ZSBpbiBuYXR1cmUuCgpJJiMzOTtsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBmb3IgaG93IG1lbW9yeSByZWdpb25zIGFyZSBoYW5kbGVkLCBhbGxvY2F0ZWQsIGRlYWxsb2NhdGVkLCBhbmQgZXNwZWNpYWxseSBob3cgdGhleSBhcmUgaW5pdGlhbGl6ZWQgYW5kIHBvdGVudGlhbGx5IG92ZXJ3cml0dGVuLiBJJiMzOTtsbCBiZSB3YXRjaGluZyBmb3IgYW55IHVzZSBvZiBtYWdpYyB2YWx1ZXMsIHNlbnRpbmVsIHZhbHVlcywgb3IgZGVidWctb3JpZW50ZWQgcGF0dGVybnMgdGhhdCBzY3JlYW0gJiMzNDt0aGlzIGlzIGEgY2FuYXJ5IGluIHRoZSBjb2FsIG1pbmUuJiMzNDsgVGhlIEVGSSBjb250ZXh0IHN1Z2dlc3RzIEkgc2hvdWxkIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGludGVyYWN0aW9uIHdpdGggZmlybXdhcmUgdGFibGVzLCBydW50aW1lIHNlcnZpY2VzLCBvciBwb3RlbnRpYWxseSBldmVuIFNNUkFNLiBJdCBpcyB2aXRhbCB0byBzZWUgaG93IHRoZXNlIHBvdGVudGlhbGx5IHNlbnNpdGl2ZSByZWdpb25zIGFyZSBwcm90ZWN0ZWQuCgpNeSBmaXJzdCByZWFkLXRocm91Z2ggd2lsbCBwcm9iYWJseSBiZSBhIGJyb2FkIHNjYW4sIGJ1dCBJJiMzOTtsbCB6ZXJvIGluIG9uIGZ1bmN0aW9ucyByZWxhdGVkIHRvIG1lbW9yeSBhbGxvY2F0aW9uLCBjb3B5aW5nLCBhbmQgaW5pdGlhbGl6YXRpb24uIEkmIzM5O2xsIGJlIHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBleHBsb2l0IHZlY3RvcnMgYXMgSSBnbywgc3VjaCBhcyBidWZmZXIgb3ZlcmZsb3dzLCBvZmYtYnktb25lIGVycm9ycywgb3IgaW5jb3JyZWN0IHBvaW50ZXIgYXJpdGhtZXRpYywgcGFydGljdWxhcmx5IGluIHRoZSBjb250ZXh0IG9mIHRoZSBFRkkgZW52aXJvbm1lbnQuIEFueSBjdXN0b20gYWxsb2NhdGlvbiBvciBkZWFsbG9jYXRpb24gcm91dGluZXMgd291bGQgYmUgZXNwZWNpYWxseSBpbnRlcmVzdGluZywgYXMgdGhvc2Ugb2Z0ZW4gaGFyYm9yIHN1YnRsZSBidWdzLiBJJiMzOTttIGhvcGluZyB0byB1bmRlcnN0YW5kIGhvdyAmIzM0O3BvaXNvbiYjMzQ7IGlzIGFwcGxpZWQgYW5kIHdoYXQgdGhlIGludGVuZGVkIHB1cnBvc2Ugb2YgdGhhdCAmIzM0O3BvaXNvbiYjMzQ7IG1pZ2h0IGJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDA6XHRib29sIHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeShwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKVxuIDEwMTpcdHtcbiAxMDI6XHRcdHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSA9IGVmaV9wb2lzb25lZF9tZW1vcnkoKTtcbiAxMDM6XHRcdHU2NCBmaXJzdCwgbGFzdCwgbmJpdHM7XG4gMTA0Olx0XG4gMTA1Olx0XHRpZiAoIXBtKVxuIDEwNjpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMTA3Olx0XG4gMTA4Olx0XHRuYml0cyA9IHBtLVx1MDAzZXNpemUgKiBCSVRTX1BFUl9CWVRFO1xuIDEwOTpcdFxuIDExMDpcdFx0aWYgKHN0YXJ0ICYjNDM7IHNpemUgXHUwMDNjPSBwbS1cdTAwM2VwaHlzX2Jhc2UpXG4gMTExOlx0XHRcdHJldHVybiBmYWxzZTtcbiAxMTI6XHRcdGlmIChzdGFydCBcdTAwM2MgcG0tXHUwMDNlcGh5c19iYXNlKVxuIDExMzpcdFx0XHRzdGFydCA9IHBtLVx1MDAzZXBoeXNfYmFzZTtcbiAxMTQ6XHRcbiAxMTU6XHRcdGZpcnN0ID0gKHN0YXJ0IC0gcG0tXHUwMDNlcGh5c19iYXNlKSAvIHBtLVx1MDAzZXVuaXRfc2l6ZTtcbiAxMTY6XHRcdGlmIChmaXJzdCBcdTAwM2U9IG5iaXRzKVxuIDExNzpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMTE4Olx0XG4gMTE5Olx0XHRsYXN0ID0gKHN0YXJ0ICYjNDM7IHNpemUgLSAxIC0gcG0tXHUwMDNlcGh5c19iYXNlKSAvIHBtLVx1MDAzZXVuaXRfc2l6ZTtcbiAxMjA6XHRcdGxhc3QgPSBtaW4obGFzdCwgbmJpdHMgLSAxKTtcbiAxMjE6XHRcbiAxMjI6XHRcdHJldHVybiBmaW5kX25leHRfYml0KHBtLVx1MDAzZWJpdG1hcCwgbGFzdCAmIzQzOyAxLCBmaXJzdCkgXHUwMDNjPSBsYXN0O1xuIDEyMzpcdH1cbiAxMjQ6XHRcbiAxMjU6XHQvKlxuIDEyNjpcdCAqIEEgYml0IGlzIG5ldmVyIGNsZWFyZWQ6IGl0IHN0YW5kcyBmb3IgYSB3aG9sZSBFRklfUE9JU09OX1VOSVRfU0laRSwgc28gYW5cbiAxMjc6XHQgKiB1bnBvaXNvbiBjYW5ub3QgdGVsbCB3aGV0aGVyIHRoZSB1bml0IGFzIGEgd2hvbGUgaXMgZ29vZCBhZ2Fpbi5cbiAxMjg6XHQgKi9cbiAxMjk6XHR2b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKVxuIDEzMDpcdHtcbiAxMzE6XHRcdHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSA9IGVmaV9wb2lzb25lZF9tZW1vcnkoKTtcbiAxMzI6XHRcdHBoeXNfYWRkcl90IGFkZHIgPSBQRk5fUEhZUyhwZm4pO1xuIDEzMzpcdFx0dTY0IHVuaXQ7XG4gMTM0Olx0XG4gMTM1Olx0XHRpZiAoIXBtIHx8IGFkZHIgXHUwMDNjIHBtLVx1MDAzZXBoeXNfYmFzZSlcbiAxMzY6XHRcdFx0cmV0dXJuO1xuIDEzNzpcdFxuIDEzODpcdFx0dW5pdCA9IChhZGRyIC0gcG0tXHUwMDNlcGh5c19iYXNlKSAvIHBtLVx1MDAzZXVuaXRfc2l6ZTtcbiAxMzk6XHRcdGlmICh1bml0IFx1MDAzYyBwbS1cdTAwM2VzaXplICogQklUU19QRVJfQllURSlcbiAxNDA6XHRcdFx0c2V0X2JpdCh1bml0LCBwbS1cdTAwM2ViaXRtYXApO1xuIDE0MTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTQ6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM0NzUKCQkJCQkJCW91dHB1dDogMjAyCgkJCQkJCQl0aG91Z2h0czogMTMzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogUG9pc29uZWQgTWVtb3J5IGluIHRoZSBMaW51eCBLZXJuZWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgYG1tL3BhZ2VfYWxsb2MuY2AgYW5kIGBtbS9tZW1vcnktZmFpbHVyZS5jYCBmaWxlcywgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgdGhlIGludGVyYWN0aW9uIG9mIG1lbW9yeSBwb2lzb25pbmcgd2l0aGluIHRoZSBwYWdlIGFsbG9jYXRpb24gYW5kIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nIHN1YnN5c3RlbXMuIFRoZSBjb2RlIHNuaXBwZXRzIGZvciBgcG9pc29uX2Jsb2NrYCBhbmQgYGh3cG9pc29uX2Jvb3RfcGFnZWAgYXJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZywgZXNwZWNpYWxseSBob3cgdGhleSBpbnRlcmFjdCB3aXRoIGByYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnlgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgcG9pc29uZWQgbWVtb3J5IGlzIGlkZW50aWZpZWQgYW5kIHRoZW4gaGFuZGxlZCBkdXJpbmcgcGFnZSBmcmVlaW5nLCBwYXJ0aWN1bGFybHkgdGhlIFRPRE8gY29tbWVudCBpbiBgX19mcmVlX3BhZ2VzX2NvcmVgLgoKTm93LCB0aGUgS2NvbmZpZyBvcHRpb25zLiBgRUZJX1BPSVNPTkVEX01FTU9SWWAgaXMgd2hhdCBmbGFncyB0aGUgZmVhdHVyZSwgYW5kIGl0IGRlcGVuZHMgb24gYEVGSV9TVFVCYCwgYE1FTU9SWV9GQUlMVVJFYCwgYW5kIGA2NEJJVGAuICBUaGlzIGltcGxpZXMgYSBVRUZJIGVudmlyb25tZW50LCBzb21ldGhpbmcgSSBjYW4gcmVhZGlseSB0ZXN0IGluIFFFTVUuICBgQ09ORklHX0VGSWAgaXMgYSBwcmVyZXF1aXNpdGUgZm9yIGBFRklfU1RVQmAuCgpOZXh0LCB0aGUgZXhlY3V0aW9uIGZsb3cuIEluIGEgUUVNVS9VRUZJIHNldHVwLCB0aGUgRUZJIHN0dWIgaW5pdGlhbGl6ZXMsIHNldHMgdXAgbWVtb3J5IHRhYmxlcywgdGhlIGtlcm5lbCBib290cywgcHJvY2Vzc2VzIHRoZXNlIHRhYmxlcyAoZS5nLiBgZWZpX2NvbmZpZ19wYXJzZV90YWJsZXNgKSwgYW5kIHRoZW4gY2FsbHMgYGVmaV9wb2lzb25lZF9tZW1vcnlfcmVzZXJ2ZSgpYC4gIFJ1bnRpbWUgaW5qZWN0aW9uICh2aWEgYG1hZHZpc2VgIG9yIHN5c2ZzL2RlYnVnZnMpIHRoZW4gdHJpZ2dlcnMgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYC4gQ3JpdGljYWxseSwgYHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeWAgYWxzbyBjb21lcyBpbnRvIHBsYXkgZHVyaW5nIGJvb3QgYW5kIGhvdHBsdWcgb3BlcmF0aW9ucy4KCklzIHRoaXMgZnV6emFibGU/IEFic29sdXRlbHkuIFRoaXMgaXMgY29yZSBNTSBhbmQgRUZJIGNoYW5nZXMuIEZ1bmN0aW9ucyBJIHdhbnQgdG8gZm9jdXMgb246IGBlZmlfaHdwb2lzb25fcmVjb3JkX3BmbmAsIGByYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnlgLCBgaHdwb2lzb25fYm9vdF9wYWdlYCwgYW5kIGBwb2lzb25fYmxvY2tgLiBBbHNvLCBzaW5jZSB0aGUgZnV6emluZyBpcyB0YXJnZXRpbmcgRUZJIGVudmlyb25tZW50cywgb3RoZXIgY2FsbHMgYXJlIHdvcnRoIHRlc3RpbmcsIGBhY3Rpb25fcmVzdWx0YCwgYW5kIGBtZW1vcnlfZmFpbHVyZWAuCgpJJiMzOTtsbCBwaW5wb2ludCB0aGUgZnVuY3Rpb25zIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgYnkgdGhpcyBwYXRjaC4gIGBkcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uY2AgaW50cm9kdWNlcyBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gLCBgcmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5YCwgYW5kIGBlZmlfcG9pc29uZWRfbWVtb3J5X3Jlc2VydmVgLiAgYG1tL21lbW9yeS1mYWlsdXJlLmNgIGdpdmVzIHVzIGBod3BvaXNvbl9ib290X3BhZ2VgLCBgYWN0aW9uX3Jlc3VsdGAsIGFuZCBgbWVtb3J5X2ZhaWx1cmVgLiAgYG1tL3BhZ2VfYWxsb2MuY2AgaGFzIGBfX2ZyZWVfcGFnZXNfY29yZWAuIEhvd2V2ZXIsIGBfX2ZyZWVfcGFnZXNfY29yZWAgaXMgb25seSBkdXJpbmcgYm9vdC9ob3RwbHVnLCB3aGljaCBtYXkgbm90IHJlcXVpcmUgZm9jdXMuIFRoZSByZWxldmFudCBmdW5jdGlvbnMgYXJlIGBlZmlfaHdwb2lzb25fcmVjb3JkX3BmbmAsIGByYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnlgLCBhbmQgYGh3cG9pc29uX2Jvb3RfcGFnZWAuCgpJJiMzOTtsbCBjaGVjayB0aGUgcGF0Y2ggZm9yIHRoZSBvdGhlciBmdW5jdGlvbnM6IGBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZWAsIGBlZmlfcG9pc29uZWRfbWVtb3J5X3Jlc2VydmVgLCBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gLCBgcmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5YCwgYW5kIGBod3BvaXNvbl9ib290X3BhZ2VgLgoKYGFjdGlvbl9yZXN1bHRgIGlzIHN0YXRpYywgYnV0IGBtZW1vcnlfZmFpbHVyZWAgYW5kIHRoZSBvdGhlcnMgYXJlIGdsb2JhbCBzeW1ib2xzLgoKRmluYWxseSwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkOiBgRUZJX1BPSVNPTkVEX01FTU9SWWAsIGBNRU1PUllfRkFJTFVSRWAsIGBFRklfU1RVQmAsIGFuZCBgRUZJYC4KClRoZXJlZm9yZSwgYmFzZWQgb24gbXkgZXhwZXJ0IGFzc2Vzc21lbnQ6CgoqICAgKipXb3J0aEZ1enppbmc6KiogVFJVRQoqICAgKipFbmFibGVDb25maWdzOioqIGBbJiMzNDtFRklfUE9JU09ORURfTUVNT1JZJiMzNDssICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OywgJiMzNDtFRklfU1RVQiYjMzQ7LCAmIzM0O0VGSSYjMzQ7XWAKKiAgICoqRm9jdXNTeW1ib2xzOioqIGBbJiMzNDtlZmlfaHdwb2lzb25fcmVjb3JkX3BmbiYjMzQ7LCAmIzM0O3JhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeSYjMzQ7LCAmIzM0O2h3cG9pc29uX2Jvb3RfcGFnZSYjMzQ7LCAmIzM0O21lbW9yeV9mYWlsdXJlJiMzNDtdYAoqICAgKipSZWFzb25pbmc6KiogVGhlIGludGVyc2VjdGlvbiBvZiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBFRkkvVUVGSSBpbnRlcmFjdGlvbnMsIGFuZCBhIGZlYXR1cmUgZGVzaWduZWQgdG8gZGV0ZWN0IGFuZCBoYW5kbGUgbWVtb3J5IGZhaWx1cmVzIHByZXNlbnRzIGEgaGlnaC12YWx1ZSBmdXp6aW5nIHRhcmdldC4gVGhlIHBvdGVudGlhbCBmb3IgYnVncyBpcyBoaWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RUZJX1BPSVNPTkVEX01FTU9SWSYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LAogICAgJiMzNDtFRklfU1RVQiYjMzQ7LAogICAgJiMzNDtFRkkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlZmlfaHdwb2lzb25fcmVjb3JkX3BmbiYjMzQ7LAogICAgJiMzNDtyYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnkmIzM0OywKICAgICYjMzQ7aHdwb2lzb25fYm9vdF9wYWdlJiMzNDssCiAgICAmIzM0O21lbW9yeV9mYWlsdXJlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdHJhY2tpbmcgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IGFjcm9zcyBrZXhlYyB2aWEgYW4gRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUgKENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZKS4gSXQgaW50cm9kdWNlcyBob29rcyBpbiBjb3JlIG1lbW9yeS1mYWlsdXJlIGhhbmRsaW5nIChlZmlfaHdwb2lzb25fcmVjb3JkX3BmbiBpbiBhY3Rpb25fcmVzdWx0KSBhbmQgbWVtb3J5IGluaXRpYWxpemF0aW9uL2hvdHBsdWcgKF9fZnJlZV9wYWdlc19jb3JlLCBod3BvaXNvbl9ib290X3BhZ2UpLiBUaGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIGF0IHJ1bnRpbWUgdmlhIG1lbW9yeSBmYWlsdXJlIG1lY2hhbmlzbXMgc3VjaCBhcyBtYWR2aXNlKE1BRFZfSFdQT0lTT04pIGFuZCBtZW1vcnkgaG90cGx1Z2dpbmcgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHdpdGggRUZJLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFRklfUE9JU09ORURfTUVNT1JZJiMzNDssCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O0VGSV9TVFVCJiMzNDssCiAgICAmIzM0O0VGSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2VmaV9od3BvaXNvbl9yZWNvcmRfcGZuJiMzNDssCiAgICAmIzM0O3JhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeSYjMzQ7LAogICAgJiMzNDtod3BvaXNvbl9ib290X3BhZ2UmIzM0OywKICAgICYjMzQ7bWVtb3J5X2ZhaWx1cmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0cmFja2luZyBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgYWNyb3NzIGtleGVjIHZpYSBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSAoQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUlkpLiBJdCBpbnRyb2R1Y2VzIGhvb2tzIGluIGNvcmUgbWVtb3J5LWZhaWx1cmUgaGFuZGxpbmcgKGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuIGluIGFjdGlvbl9yZXN1bHQpIGFuZCBtZW1vcnkgaW5pdGlhbGl6YXRpb24vaG90cGx1ZyAoX19mcmVlX3BhZ2VzX2NvcmUsIGh3cG9pc29uX2Jvb3RfcGFnZSkuIFRoZXNlIHBhdGhzIGFyZSByZWFjaGFibGUgYXQgcnVudGltZSB2aWEgbWVtb3J5IGZhaWx1cmUgbWVjaGFuaXNtcyBzdWNoIGFzIG1hZHZpc2UoTUFEVl9IV1BPSVNPTikgYW5kIG1lbW9yeSBob3RwbHVnZ2luZyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2l0aCBFRkkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE0OjEwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTQ6MTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBFRkkgcG9pc29uZWQgbWVtb3J5IHRyYWNraW5nIChDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWSkgdG8gcHJlc2VydmUgaGFyZHdhcmUtcG9pc29uZWQgcGFnZSBpbmZvcm1hdGlvbiBhY3Jvc3Mga2V4ZWMgcmVib290cy4gXG5cbjEuIEFsbG9jYXRpb24gXHUwMDI2IEluaXRpYWxpemF0aW9uOiBUaGUgdGFibGUgc3RydWN0dXJlIGBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeWAgYW5kIGl0cyB0cmFpbGluZyBiaXRtYXAgYXJlIGFsbG9jYXRlZCBpbiB0aGUgRUZJIHN0dWIgYW5kIGV4cGxpY2l0bHkgZnVsbHkgaW5pdGlhbGl6ZWQgKGFsbCBoZWFkZXIgZmllbGRzIGFzc2lnbmVkLCBhbmQgYG1lbXNldChwbS1cdTAwM2ViaXRtYXAsIDAsIGJpdG1hcF9zaXplKWAgY2xlYXJzIHRoZSBiaXRtYXApLlxuMi4gTWVtb3J5IEFjY2Vzc2VzOiBSdW50aW1lIG9wZXJhdGlvbnMgKGByYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnlgLCBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gLCBgcG9pc29uX2Jsb2NrYCwgYW5kIGBod3BvaXNvbl9ib290X3BhZ2VgKSBvbmx5IHJlYWQgYW5kIHVwZGF0ZSBmdWxseSBpbml0aWFsaXplZCBtZW1vcnkgc3RydWN0dXJlcyBhbmQgc3RydWN0IHBhZ2UgZmxhZ3MuXG4zLiBObyBVbmluaXRpYWxpemVkIExlYWtzIG9yIFJlYWRzOiBUaGVyZSBhcmUgbm8gZGF0YSB0cmFuc2ZlcnMgdG8gdXNlciBzcGFjZSwgbm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBubyBleHBvc2VkIHBhZGRpbmcuXG40LiBLQVNBTiB2cyBLTVNBTjogUG90ZW50aWFsIHJpc2tzIHN1Y2ggYXMgaW52YWxpZCBwb2ludGVyIG1hdGgsIG91dC1vZi1ib3VuZHMgYml0bWFwIGFjY2Vzc2VzLCBvciBtZW1vcnkgcmVzZXJ2YXRpb24gZXJyb3JzIGFyZSBwcm9wZXJseSBoYW5kbGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBLTVNBTiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhNzljYmIxMDVjNTk4MTdhZjMyYTIyYTAwMTcxZjdiYjkxNDY3NjU0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAxNDowOTowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmkuYyBiL2FyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmkuYwppbmRleCAwYzM5YWRiOTZiOTEyLi4yYjM3Yjk2YTM2ZTA5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaS5jCkBAIC05Myw2ICYjNDM7OTMsOSBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyAqIGNvbnN0IGVmaV90YWJsZXNbXSA9IHsKICNpZmRlZiBDT05GSUdfVU5BQ0NFUFRFRF9NRU1PUlkKIAkmYW1wO2VmaS51bmFjY2VwdGVkLAogI2VuZGlmCiYjNDM7I2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZCiYjNDM7CSZhbXA7ZWZpLnBvaXNvbmVkX21lbW9yeSwKJiM0MzsjZW5kaWYKIH07CiAKIHU2NCBlZmlfc2V0dXA7CQkvKiBlZmkgc2V0dXBfZGF0YSBwaHlzaWNhbCBhZGRyZXNzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZwppbmRleCAyOWUwNzI5Mjk5ZjViLi5hYWZjZDQxYmMwMDYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWcKQEAgLTI2Myw2ICYjNDM7MjYzLDE0IEBAIGNvbmZpZyBFRklfQ09DT19TRUNSRVQKIAkgIHZpcnQvY29jby9lZmlfc2VjcmV0IG1vZHVsZSB0byBhY2Nlc3MgdGhlIHNlY3JldHMsIHdoaWNoIGluIHR1cm4KIAkgIGFsbG93cyB1c2Vyc3BhY2UgcHJvZ3JhbXMgdG8gYWNjZXNzIHRoZSBpbmplY3RlZCBzZWNyZXRzLgogCiYjNDM7Y29uZmlnIEVGSV9QT0lTT05FRF9NRU1PUlkKJiM0MzsJZGVmX2Jvb2wgeQomIzQzOwlkZXBlbmRzIG9uIEVGSV9TVFVCICZhbXA7JmFtcDsgTUVNT1JZX0ZBSUxVUkUgJmFtcDsmYW1wOyA2NEJJVAomIzQzOwloZWxwCiYjNDM7CSAgUmVjb3JkIHBhZ2UgZnJhbWVzIHRoYXQgYXJlIGhhcmR3YXJlLXBvaXNvbmVkIHdoaWxlIHRoaXMga2VybmVsIHJ1bnMKJiM0MzsJICBpbnRvIGFuIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlLCBhbmQgaG9ub3IgdGhhdCB0YWJsZSBlYXJseSBvbiB0aGUKJiM0MzsJICBuZXh0IGtlcm5lbCBzbyBhIGtleGVjIGRvZXMgbm90IGhhbmQga25vd24tYmFkIFJBTSBiYWNrIG91dC4KJiM0MzsKIGNvbmZpZyBPVk1GX0RFQlVHX0xPRwogCWJvb2wgJiMzNDtFeHBvc2UgT1ZNRiBmaXJtd2FyZSBkZWJ1ZyBsb2cgdmlhIHN5c2ZzJiMzNDsKIAlkZXBlbmRzIG9uIEVGSQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGUgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9NYWtlZmlsZQppbmRleCA4ZWZiY2Y2OTllNGZmLi4wNWQwYTQ5MDkyM2U1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9NYWtlZmlsZQpAQCAtNDMsNCAmIzQzOzQzLDUgQEAgb2JqLSQoQ09ORklHX0VGSV9FQVJMWUNPTikJCSYjNDM7PSBlYXJseWNvbi5vCiBvYmotJChDT05GSUdfVUVGSV9DUEVSX0FSTSkJCSYjNDM7PSBjcGVyLWFybS5vCiBvYmotJChDT05GSUdfVUVGSV9DUEVSX1g4NikJCSYjNDM7PSBjcGVyLXg4Ni5vCiBvYmotJChDT05GSUdfVU5BQ0NFUFRFRF9NRU1PUlkpCQkmIzQzOz0gdW5hY2NlcHRlZF9tZW1vcnkubwomIzQzO29iai0kKENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZKQkmIzQzOz0gcG9pc29uLm8KIG9iai0kKENPTkZJR19URUVfU1RNTV9FRkkpCQkmIzQzOz0gc3RtbS90ZWVfc3RtbV9lZmkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYwppbmRleCA2ZDk4N2Q3Zjk3NzgxLi41NWIyZWU1M2ZjMjY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYwpAQCAtNTUsNiAmIzQzOzU1LDkgQEAgc3RydWN0IGVmaSBfX3JlYWRfbW9zdGx5IGVmaSA9IHsKICNpZmRlZiBDT05GSUdfVU5BQ0NFUFRFRF9NRU1PUlkKIAkudW5hY2NlcHRlZAkJPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSLAogI2VuZGlmCiYjNDM7I2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZCiYjNDM7CS5wb2lzb25lZF9tZW1vcnkJPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSLAomIzQzOyNlbmRpZgogfTsKIEVYUE9SVF9TWU1CT0woZWZpKTsKIApAQCAtNjc3LDYgJiM0Mzs2ODAsOSBAQCBzdGF0aWMgY29uc3QgZWZpX2NvbmZpZ190YWJsZV90eXBlX3QgY29tbW9uX3RhYmxlc1tdIF9faW5pdGNvbnN0ID0gewogI2lmZGVmIENPTkZJR19VTkFDQ0VQVEVEX01FTU9SWQogCXtMSU5VWF9FRklfVU5BQ0NFUFRFRF9NRU1fVEFCTEVfR1VJRCwJJmFtcDtlZmkudW5hY2NlcHRlZCwJJiMzNDtVbmFjY2VwdGVkJiMzNDsJfSwKICNlbmRpZgomIzQzOyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWQomIzQzOwl7TElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWV9UQUJMRV9HVUlELAkmYW1wO2VmaS5wb2lzb25lZF9tZW1vcnksCSYjMzQ7UE9JU09OJiMzNDsJfSwKJiM0MzsjZW5kaWYKICNpZmRlZiBDT05GSUdfRUZJX0dFTkVSSUNfU1RVQgogCXtMSU5VWF9FRklfUFJJTUFSWV9ESVNQTEFZX1RBQkxFX0dVSUQsCSZhbXA7cHJpbWFyeV9kaXNwbGF5X3RhYmxlCQkJfSwKICNlbmRpZgpAQCAtODc3LDYgJiM0Mzs4ODMsOCBAQCBpbnQgX19pbml0IGVmaV9jb25maWdfcGFyc2VfdGFibGVzKGNvbnN0IGVmaV9jb25maWdfdGFibGVfdCAqY29uZmlnX3RhYmxlcywKIAkJfQogCX0KIAomIzQzOwllZmlfcG9pc29uZWRfbWVtb3J5X3Jlc2VydmUoKTsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmMKaW5kZXggNDhmOTNmNzc1OGU5ZS4uNWNiZTY3NTQ5MTMzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jCkBAIC03NzQsMyAmIzQzOzc3NCwxMDMgQEAgdm9pZCBlZmlfcmVtYXBfaW1hZ2UodW5zaWduZWQgbG9uZyBpbWFnZV9iYXNlLCB1bnNpZ25lZCBhbGxvY19zaXplLAogCQkJZWZpX3dhcm4oJiMzNDtGYWlsZWQgdG8gcmVtYXAgZGF0YSByZWdpb24gbm9uLWV4ZWN1dGFibGVcbiYjMzQ7KTsKIAl9CiB9CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZCiYjNDM7LyoKJiM0MzsgKiBGaW5kIHRoZSBiYXNlIGFuZCB0b3Agb2YgdGhlIG1lbW9yeSwgc28sIHdlIGNhbiBjcmVhdGUgdGhlIGJpdG1hcCBmb3IKJiM0MzsgKiB0aGUgZnVsbCByYW5nZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgZWZpX3N0YXR1c190IGVmaV9nZXRfcmFtX3JhbmdlKHU2NCAqYmFzZSwgdTY0ICp0b3ApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZWZpX2Jvb3RfbWVtbWFwICptYXAgX19mcmVlKGVmaV9wb29sKSA9IE5VTEw7CiYjNDM7CXU2NCByYW1fYmFzZSA9IFVMTE9OR19NQVgsIHJhbV90b3AgPSAwOwomIzQzOwllZmlfc3RhdHVzX3Qgc3RhdHVzOwomIzQzOwlpbnQgaSwgbnJfZGVzYzsKJiM0MzsKJiM0MzsJc3RhdHVzID0gZWZpX2dldF9tZW1vcnlfbWFwKCZhbXA7bWFwLCBmYWxzZSk7CiYjNDM7CWlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpCiYjNDM7CQlyZXR1cm4gc3RhdHVzOwomIzQzOwomIzQzOwlucl9kZXNjID0gbWFwLSZndDttYXBfc2l6ZSAvIG1hcC0mZ3Q7ZGVzY19zaXplOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnJfZGVzYzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWVmaV9tZW1vcnlfZGVzY190ICpkOwomIzQzOwomIzQzOwkJZCA9IGVmaV9tZW1kZXNjX3B0cigodW5zaWduZWQgbG9uZyltYXAtJmd0O21hcCwgbWFwLSZndDtkZXNjX3NpemUsIGkpOwomIzQzOwkJcmFtX2Jhc2UgPSBtaW4ocmFtX2Jhc2UsIGQtJmd0O3BoeXNfYWRkcik7CiYjNDM7CQlyYW1fdG9wID0gbWF4KHJhbV90b3AsCiYjNDM7CQkJICAgICAgZC0mZ3Q7cGh5c19hZGRyICYjNDM7IGQtJmd0O251bV9wYWdlcyAqIEVGSV9QQUdFX1NJWkUpOwomIzQzOwl9CiYjNDM7CWlmICghcmFtX3RvcCB8fCByYW1fYmFzZSA9PSBVTExPTkdfTUFYKQomIzQzOwkJcmV0dXJuIEVGSV9OT1RfRk9VTkQ7CiYjNDM7CiYjNDM7CSpiYXNlID0gcm91bmRfZG93bihyYW1fYmFzZSwgRUZJX1BPSVNPTl9VTklUX1NJWkUpOwomIzQzOwkqdG9wID0gcm91bmRfdXAocmFtX3RvcCwgRUZJX1BPSVNPTl9VTklUX1NJWkUpOwomIzQzOwomIzQzOwlyZXR1cm4gRUZJX1NVQ0NFU1M7CiYjNDM7fQomIzQzOwomIzQzOy8qIFRoZSBzaXplIG9mIHRoZSBiaXRtYXAgKi8KJiM0MztzdGF0aWMgdTY0IGVmaV9wb2lzb25fYml0bWFwX3NpemUodTY0IHNwYW4pCiYjNDM7ewomIzQzOwl1NjQgYnl0ZXMgPSBESVZfUk9VTkRfVVAoRElWX1JPVU5EX1VQKHNwYW4sIEVGSV9QT0lTT05fVU5JVF9TSVpFKSwKJiM0MzsJCQkJIEJJVFNfUEVSX0JZVEUpOwomIzQzOwomIzQzOwlyZXR1cm4gcm91bmRfdXAoYnl0ZXMsIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqZWZpX3BvaXNvbl9hbGxvYyh1NjQgcGh5c19iYXNlLAomIzQzOwkJCQkJCQkgIHU2NCBiaXRtYXBfc2l6ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTsKJiM0MzsJZWZpX3N0YXR1c190IHN0YXR1czsKJiM0MzsKJiM0MzsJc3RhdHVzID0gZWZpX2JzX2NhbGwoYWxsb2NhdGVfcG9vbCwgRUZJX0FDUElfUkVDTEFJTV9NRU1PUlksCiYjNDM7CQkJICAgICBzaXplb2YoKnBtKSAmIzQzOyBiaXRtYXBfc2l6ZSwgKHZvaWQgKiopJmFtcDtwbSk7CiYjNDM7CWlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJcG0tJmd0O3ZlcnNpb24gPSAxOwomIzQzOwlwbS0mZ3Q7dW5pdF9zaXplID0gRUZJX1BPSVNPTl9VTklUX1NJWkU7CiYjNDM7CXBtLSZndDtwaHlzX2Jhc2UgPSBwaHlzX2Jhc2U7CiYjNDM7CXBtLSZndDtzaXplID0gYml0bWFwX3NpemU7CiYjNDM7CW1lbXNldChwbS0mZ3Q7Yml0bWFwLCAwLCBiaXRtYXBfc2l6ZSk7CiYjNDM7CiYjNDM7CXJldHVybiBwbTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogVGhpcyBuZWVkcyB0byBiZSBkb25lIHdoaWxlIGJvb3Qgc2VydmljZSBpcyBzdGlsbCBhY3RpdmUgKi8KJiM0Mzt2b2lkIGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKHZvaWQpCiYjNDM7ewomIzQzOwllZmlfZ3VpZF90IHBvaXNvbmVkX21lbW9yeV90YWJsZV9ndWlkID0gTElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWV9UQUJMRV9HVUlEOwomIzQzOwlzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG07CiYjNDM7CXU2NCByYW1fYmFzZSwgcmFtX3RvcCwgYml0bWFwX3NpemU7CiYjNDM7CWVmaV9zdGF0dXNfdCBzdGF0dXM7CiYjNDM7CiYjNDM7CS8qIEEgdGFibGUgaW5zdGFsbGVkIGJ5IGFuIGVhcmxpZXIgYm9vdCByaWRlcyB0aGUgc3lzdGVtIHRhYmxlIGFjcm9zcyBrZXhlYy4gKi8KJiM0MzsJcG0gPSBnZXRfZWZpX2NvbmZpZ190YWJsZShwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCk7CiYjNDM7CWlmIChwbSkgewomIzQzOwkJaWYgKHBtLSZndDt2ZXJzaW9uICE9IDEpCiYjNDM7CQkJZWZpX2VycigmIzM0O1Vua25vd24gdmVyc2lvbiBvZiBwb2lzb25lZC1tZW1vcnkgdGFibGVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZWZpX2dldF9yYW1fcmFuZ2UoJmFtcDtyYW1fYmFzZSwgJmFtcDtyYW1fdG9wKSAhPSBFRklfU1VDQ0VTUykgewomIzQzOwkJZWZpX2VycigmIzM0O0ZhaWxlZCB0byBzaXplIHRoZSBwb2lzb25lZC1tZW1vcnkgdGFibGUhXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJYml0bWFwX3NpemUgPSBlZmlfcG9pc29uX2JpdG1hcF9zaXplKHJhbV90b3AgLSByYW1fYmFzZSk7CiYjNDM7CXBtID0gZWZpX3BvaXNvbl9hbGxvYyhyYW1fYmFzZSwgYml0bWFwX3NpemUpOwomIzQzOwlpZiAoIXBtKSB7CiYjNDM7CQllZmlfZXJyKCYjMzQ7RmFpbGVkIHRvIGFsbG9jYXRlIHBvaXNvbmVkLW1lbW9yeSB0YWJsZSFcbiYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlzdGF0dXMgPSBlZmlfYnNfY2FsbChpbnN0YWxsX2NvbmZpZ3VyYXRpb25fdGFibGUsCiYjNDM7CQkJICAgICAmYW1wO3BvaXNvbmVkX21lbW9yeV90YWJsZV9ndWlkLCBwbSk7CiYjNDM7CWlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIHsKJiM0MzsJCWVmaV9ic19jYWxsKGZyZWVfcG9vbCwgcG0pOwomIzQzOwkJZWZpX2VycigmIzM0O0ZhaWxlZCB0byBpbnN0YWxsIHBvaXNvbmVkLW1lbW9yeSBjb25maWcgdGFibGUhXG4mIzM0Oyk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7I2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmMKaW5kZXggMjM1Yzk3MzhkYTJkNi4uMjJhMzE1ZTI4MTRhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuYwpAQCAtMTc5LDYgJiM0MzsxNzksNyBAQCBlZmlfc3RhdHVzX3QgZWZpX3N0dWJfY29tbW9uKGVmaV9oYW5kbGVfdCBoYW5kbGUsCiAJCQkgRUZJX1JUX1NVUFBPUlRFRF9TRVRfVklSVFVBTF9BRERSRVNTX01BUCk7CiAKIAlpbnN0YWxsX21lbXJlc2VydmVfdGFibGUoKTsKJiM0MzsJaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUoKTsKIAogCXN0YXR1cyA9IGVmaV9ib290X2tlcm5lbChoYW5kbGUsIGltYWdlLCBpbWFnZV9hZGRyLCBjbWRsaW5lX3B0cik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmgKaW5kZXggZmQ5MWZjMTVlYzgxMC4uNDQ0MzY4NjljNGVmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmgKQEAgLTExNjksNiAmIzQzOzExNjksMTIgQEAgZWZpX2VuYWJsZV9yZXNldF9hdHRhY2tfbWl0aWdhdGlvbih2b2lkKSB7IH0KIAogdm9pZCBlZmlfcmV0cmlldmVfZXZlbnRsb2codm9pZCk7CiAKJiM0MzsjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUlkKJiM0Mzt2b2lkIGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKHZvaWQpOwomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKHZvaWQpIHsgfQomIzQzOyNlbmRpZgomIzQzOwogc3RydWN0IHN5c2ZiX2Rpc3BsYXlfaW5mbyAqYWxsb2NfcHJpbWFyeV9kaXNwbGF5KHZvaWQpOwogc3RydWN0IHN5c2ZiX2Rpc3BsYXlfaW5mbyAqX19hbGxvY19wcmltYXJ5X2Rpc3BsYXkodm9pZCk7CiB2b2lkIGZyZWVfcHJpbWFyeV9kaXNwbGF5KHN0cnVjdCBzeXNmYl9kaXNwbGF5X2luZm8gKmRweSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmMKaW5kZXggMGJhZTBmMDZiNjc2My4uMzEzNjEzMmI5NjI4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuYwpAQCAtMTAyNCw2ICYjNDM7MTAyNCw4IEBAIHZvaWQgX19ub3JldHVybiBlZmlfc3R1Yl9lbnRyeShlZmlfaGFuZGxlX3QgaGFuZGxlLAogCiAJc2V0dXBfdW5hY2NlcHRlZF9tZW1vcnkoKTsKIAomIzQzOwlpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSgpOwomIzQzOwogCXN0YXR1cyA9IGV4aXRfYm9vdChib290X3BhcmFtcywgaGFuZGxlKTsKIAlpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7CiAJCWVmaV9lcnIoJiMzNDtleGl0X2Jvb3QoKSBmYWlsZWQhXG4mIzM0Oyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmUxNmQ0M2Y0NDM4ZWUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYwpAQCAtMCwwICYjNDM7MSwxNDEgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7LyoKJiM0MzsgKiBSdW50aW1lIHNpZGUgb2YgdGhlIExJTlVYX0VGSV9QT0lTT05FRF9NRU1PUlkgdGFibGU6IG9uZSBiaXQgcGVyCiYjNDM7ICogRUZJX1BPSVNPTl9VTklUX1NJWkUsIHNldCBoZXJlIGFzIGZyYW1lcyBnbyBiYWQsIGhvbm9yZWQgYnkgdGhlIG5leHQga2VybmVsLgomIzQzOyAqCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBCcmVubyBMZWl0YW8gJmx0O2xlaXRhb0BkZWJpYW4ub3JnJmd0OwomIzQzOyAqLwomIzQzOwomIzQzOyNkZWZpbmUgcHJfZm10KGZtdCkgJiMzNDtlZmk6ICYjMzQ7IGZtdAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaXRtYXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZWZpLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xvZzIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWVtYmxvY2suaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW0uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb3ZlcmZsb3cuaCZndDsKJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBfX2luaXQKJiM0MztlZmlfcG9pc29uX2dlb21ldHJ5X3ZhbGlkKGNvbnN0IHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSkKJiM0Mzt7CiYjNDM7CXU2NCBuYml0czsKJiM0MzsKJiM0MzsJLyogV2hvbGUgd29yZHMsIGFuZCBhIGJpdCBjb3VudCB0aGF0IGNhbiBiZSB0YWtlbiB3aXRob3V0IHdyYXBwaW5nLiAqLwomIzQzOwlpZiAoIXBtLSZndDtzaXplIHx8ICFJU19BTElHTkVEKHBtLSZndDtzaXplLCBzaXplb2YodW5zaWduZWQgbG9uZykpIHx8CiYjNDM7CSAgICBjaGVja19tdWxfb3ZlcmZsb3cocG0tJmd0O3NpemUsICh1NjQpQklUU19QRVJfQllURSwgJmFtcDtuYml0cykpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChwbS0mZ3Q7dW5pdF9zaXplICZsdDsgUEFHRV9TSVpFIHx8ICFpc19wb3dlcl9vZl8yKHBtLSZndDt1bml0X3NpemUpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gSVNfQUxJR05FRChwbS0mZ3Q7cGh5c19iYXNlLCBwbS0mZ3Q7dW5pdF9zaXplKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogVGhlIHRhYmxlIG1heSBjb21lIGZyb20gYW4gZWFybGllciBrZXJuZWwsIHNvIHZldCBpdCBiZWZvcmUgdXNpbmcgaXQuICovCiYjNDM7c3RhdGljIGJvb2wgX19pbml0CiYjNDM7ZWZpX3BvaXNvbl90YWJsZV92YWxpZChjb25zdCBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0pCiYjNDM7ewomIzQzOwlpZiAocG0tJmd0O3ZlcnNpb24gIT0gMSkgewomIzQzOwkJcHJfd2FybigmIzM0O0lnbm9yaW5nIHBvaXNvbmVkLW1lbW9yeSB0YWJsZSB3aXRoIHZlcnNpb24gJXVcbiYjMzQ7LAomIzQzOwkJCXBtLSZndDt2ZXJzaW9uKTsKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWVmaV9wb2lzb25fZ2VvbWV0cnlfdmFsaWQocG0pKSB7CiYjNDM7CQlwcl93YXJuKCYjMzQ7SWdub3JpbmcgbWFsZm9ybWVkIHBvaXNvbmVkLW1lbW9yeSB0YWJsZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFZldCB0aGUgaW5oZXJpdGVkIHRhYmxlIGFuZCBoYW5kIGl0cyBwYWdlcyB0byBtZW1ibG9jaywgdGhlIHdheSB0aGUKJiM0MzsgKiB1bmFjY2VwdGVkIG1lbW9yeSB0YWJsZSBpcyBoYW5kbGVkLiBJdCBpcyBFRkkgQUNQSSByZWNsYWltIG1lbW9yeSwgd2hpY2gKJiM0MzsgKiBiZWNvbWVzIEU4MjBfVFlQRV9BQ1BJIGFuZCB3b3VsZCBvdGhlcndpc2Ugc3RheSBvdXQgb2YgdGhlIGRpcmVjdCBtYXAsIGFuZAomIzQzOyAqIHRvdWNoaW5nIGl0IHRoZW4gZmF1bHRzLiBDYWxsZWQgZnJvbSBlZmlfY29uZmlnX3BhcnNlX3RhYmxlcygpLCBzbwomIzQzOyAqIGV2ZXJ5dGhpbmcgbGF0ZXIgY2FuIHJlYWNoIGl0IHdpdGggZWZpX3BvaXNvbmVkX21lbW9yeSgpLgomIzQzOyAqLwomIzQzO3ZvaWQgX19pbml0IGVmaV9wb2lzb25lZF9tZW1vcnlfcmVzZXJ2ZSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtOwomIzQzOwlwaHlzX2FkZHJfdCBzdGFydCwgZW5kOwomIzQzOwomIzQzOwlpZiAoZWZpLnBvaXNvbmVkX21lbW9yeSA9PSBFRklfSU5WQUxJRF9UQUJMRV9BRERSKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlwbSA9IGVhcmx5X21lbXJlbWFwKGVmaS5wb2lzb25lZF9tZW1vcnksIHNpemVvZigqcG0pKTsKJiM0MzsJaWYgKCFwbSkgewomIzQzOwkJcHJfd2FybigmIzM0O0NvdWxkIG5vdCBtYXAgcG9pc29uZWQtbWVtb3J5IHRhYmxlXG4mIzM0Oyk7CiYjNDM7CQllZmkucG9pc29uZWRfbWVtb3J5ID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUjsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWVmaV9wb2lzb25fdGFibGVfdmFsaWQocG0pKSB7CiYjNDM7CQllZmkucG9pc29uZWRfbWVtb3J5ID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUjsKJiM0MzsJCWVhcmx5X21lbXVubWFwKHBtLCBzaXplb2YoKnBtKSk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3RhcnQgPSBQQUdFX0FMSUdOX0RPV04oZWZpLnBvaXNvbmVkX21lbW9yeSk7CiYjNDM7CWVuZCA9IFBBR0VfQUxJR04oZWZpLnBvaXNvbmVkX21lbW9yeSAmIzQzOyBzaXplb2YoKnBtKSAmIzQzOyBwbS0mZ3Q7c2l6ZSk7CiYjNDM7CWVhcmx5X21lbXVubWFwKHBtLCBzaXplb2YoKnBtKSk7CiYjNDM7CiYjNDM7CW1lbWJsb2NrX2FkZChzdGFydCwgZW5kIC0gc3RhcnQpOwomIzQzOwltZW1ibG9ja19yZXNlcnZlKHN0YXJ0LCBlbmQgLSBzdGFydCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFRoZSB0YWJsZSwgdmV0dGVkIGF0IHBhcnNlIHRpbWUsIG9yIE5VTEwgaWYgdGhpcyBib290IGhhcyBub25lLiAqLwomIzQzO3N0YXRpYyBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqZWZpX3BvaXNvbmVkX21lbW9yeSh2b2lkKQomIzQzO3sKJiM0MzsJaWYgKGVmaS5wb2lzb25lZF9tZW1vcnkgPT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUikKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlyZXR1cm4gcGh5c190b192aXJ0KGVmaS5wb2lzb25lZF9tZW1vcnkpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBEb2VzIHRoZSByYW5nZSBjb3ZlciBhIHVuaXQgYW4gZWFybGllciBrZXJuZWwgcmVjb3JkZWQgYXMgYmFkPyAqLwomIzQzO2Jvb2wgcmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5KHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0gPSBlZmlfcG9pc29uZWRfbWVtb3J5KCk7CiYjNDM7CXU2NCBmaXJzdCwgbGFzdCwgbmJpdHM7CiYjNDM7CiYjNDM7CWlmICghcG0pCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CW5iaXRzID0gcG0tJmd0O3NpemUgKiBCSVRTX1BFUl9CWVRFOwomIzQzOwomIzQzOwlpZiAoc3RhcnQgJiM0Mzsgc2l6ZSAmbHQ7PSBwbS0mZ3Q7cGh5c19iYXNlKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwlpZiAoc3RhcnQgJmx0OyBwbS0mZ3Q7cGh5c19iYXNlKQomIzQzOwkJc3RhcnQgPSBwbS0mZ3Q7cGh5c19iYXNlOwomIzQzOwomIzQzOwlmaXJzdCA9IChzdGFydCAtIHBtLSZndDtwaHlzX2Jhc2UpIC8gcG0tJmd0O3VuaXRfc2l6ZTsKJiM0MzsJaWYgKGZpcnN0ICZndDs9IG5iaXRzKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlsYXN0ID0gKHN0YXJ0ICYjNDM7IHNpemUgLSAxIC0gcG0tJmd0O3BoeXNfYmFzZSkgLyBwbS0mZ3Q7dW5pdF9zaXplOwomIzQzOwlsYXN0ID0gbWluKGxhc3QsIG5iaXRzIC0gMSk7CiYjNDM7CiYjNDM7CXJldHVybiBmaW5kX25leHRfYml0KHBtLSZndDtiaXRtYXAsIGxhc3QgJiM0MzsgMSwgZmlyc3QpICZsdDs9IGxhc3Q7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQSBiaXQgaXMgbmV2ZXIgY2xlYXJlZDogaXQgc3RhbmRzIGZvciBhIHdob2xlIEVGSV9QT0lTT05fVU5JVF9TSVpFLCBzbyBhbgomIzQzOyAqIHVucG9pc29uIGNhbm5vdCB0ZWxsIHdoZXRoZXIgdGhlIHVuaXQgYXMgYSB3aG9sZSBpcyBnb29kIGFnYWluLgomIzQzOyAqLwomIzQzO3ZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0gPSBlZmlfcG9pc29uZWRfbWVtb3J5KCk7CiYjNDM7CXBoeXNfYWRkcl90IGFkZHIgPSBQRk5fUEhZUyhwZm4pOwomIzQzOwl1NjQgdW5pdDsKJiM0MzsKJiM0MzsJaWYgKCFwbSB8fCBhZGRyICZsdDsgcG0tJmd0O3BoeXNfYmFzZSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJdW5pdCA9IChhZGRyIC0gcG0tJmd0O3BoeXNfYmFzZSkgLyBwbS0mZ3Q7dW5pdF9zaXplOwomIzQzOwlpZiAodW5pdCAmbHQ7IHBtLSZndDtzaXplICogQklUU19QRVJfQllURSkKJiM0MzsJCXNldF9iaXQodW5pdCwgcG0tJmd0O2JpdG1hcCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lZmkuaCBiL2luY2x1ZGUvbGludXgvZWZpLmgKaW5kZXggYzM1NDQ2YTBiNjZmYS4uNTY0MDJmZGNjZDExNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9lZmkuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2VmaS5oCkBAIC0yMyw2ICYjNDM7MjMsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3BzdG9yZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JhbmdlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmVib290LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NpemVzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdXVpZC5oJmd0OwogCiAjaW5jbHVkZSAmbHQ7YXNtL3BhZ2UuaCZndDsKQEAgLTQyMiw2ICYjNDM7NDIzLDcgQEAgdm9pZCBlZmlfbmF0aXZlX3J1bnRpbWVfc2V0dXAodm9pZCk7CiAjZGVmaW5lIExJTlVYX0VGSV9DT0NPX1NFQ1JFVF9BUkVBX0dVSUQJCUVGSV9HVUlEKDB4YWRmOTU2YWQsIDB4ZTk4YywgMHg0ODRjLCAgMHhhZSwgMHgxMSwgMHhiNSwgMHgxYywgMHg3ZCwgMHgzMywgMHg2NCwgMHg0NykKICNkZWZpbmUgTElOVVhfRUZJX0JPT1RfTUVNTUFQX0dVSUQJCUVGSV9HVUlEKDB4ODAwZjY4M2YsIDB4ZDA4YiwgMHg0MjNhLCAgMHhhMiwgMHg5MywgMHg5NiwgMHg1YywgMHgzYywgMHg2ZiwgMHhlMiwgMHhiNCkKICNkZWZpbmUgTElOVVhfRUZJX1VOQUNDRVBURURfTUVNX1RBQkxFX0dVSUQJRUZJX0dVSUQoMHhkNWQxZGUzYywgMHgxMDVjLCAweDQ0ZjksICAweDllLCAweGE5LCAweGJjLCAweGVmLCAweDk4LCAweDEyLCAweDAwLCAweDMxKQomIzQzOyNkZWZpbmUgTElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWV9UQUJMRV9HVUlECUVGSV9HVUlEKDB4YWY4MjhhMTUsIDB4MGVmNCwgMHg0MzlhLCAgMHhiOCwgMHg2YSwgMHhkNiwgMHhkNiwgMHg5ZSwgMHhhZiwgMHhiYSwgMHhmYSkKIAogI2RlZmluZSBSSVNDVl9FRklfQk9PVF9QUk9UT0NPTF9HVUlECQlFRklfR1VJRCgweGNjZDE1ZmVjLCAweDZmNzMsIDB4NGVlYywgIDB4ODMsIDB4OTUsIDB4M2UsIDB4NjksIDB4ZTQsIDB4YjksIDB4NDAsIDB4YmYpCiAKQEAgLTY1MCw2ICYjNDM7NjUyLDcgQEAgZXh0ZXJuIHN0cnVjdCBlZmkgewogCXVuc2lnbmVkIGxvbmcJCQltb2t2YXJfdGFibGU7CQkvKiBNT0sgdmFyaWFibGUgY29uZmlnIHRhYmxlICovCiAJdW5zaWduZWQgbG9uZwkJCWNvY29fc2VjcmV0OwkJLyogQ29uZmlkZW50aWFsIGNvbXB1dGluZyBzZWNyZXQgdGFibGUgKi8KIAl1bnNpZ25lZCBsb25nCQkJdW5hY2NlcHRlZDsJCS8qIFVuYWNjZXB0ZWQgbWVtb3J5IHRhYmxlICovCiYjNDM7CXVuc2lnbmVkIGxvbmcJCQlwb2lzb25lZF9tZW1vcnk7CS8qIEhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSB0YWJsZSAqLwogCiAJZWZpX2dldF90aW1lX3QJCQkqZ2V0X3RpbWU7CiAJZWZpX3NldF90aW1lX3QJCQkqc2V0X3RpbWU7CkBAIC0xMjcyLDYgJiM0MzsxMjc1LDI1IEBAIHN0cnVjdCBsaW51eF9lZmlfbWVtcmVzZXJ2ZSB7CiAjZGVmaW5lIEVGSV9NRU1SRVNFUlZFX0NPVU5UKHNpemUpICgoKHNpemUpIC0gc2l6ZW9mKHN0cnVjdCBsaW51eF9lZmlfbWVtcmVzZXJ2ZSkpIFwKIAkvIHNpemVvZl9maWVsZChzdHJ1Y3QgbGludXhfZWZpX21lbXJlc2VydmUsIGVudHJ5WzBdKSkKIAomIzQzOy8qIEJpdCBOIGNvdmVycyB0aGUgdW5pdCBhdCBAcGh5c19iYXNlICYjNDM7IE4gKiBAdW5pdF9zaXplLiAqLwomIzQzO3N0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5IHsKJiM0MzsJdTMyCQl2ZXJzaW9uOwomIzQzOwl1MzIJCXVuaXRfc2l6ZTsJLyogYnl0ZXMgb2YgcGh5cyBzcGFjZSBwZXIgYml0bWFwIGJpdCAqLwomIzQzOwl1NjQJCXBoeXNfYmFzZTsJLyogYWRkcmVzcyB0aGUgZmlyc3QgYml0IGNvdmVycyAqLwomIzQzOwl1NjQJCXNpemU7CQkvKiBiaXRtYXAgc2l6ZSBpbiBieXRlcyAqLwomIzQzOwl1bnNpZ25lZCBsb25nCWJpdG1hcFtdOwomIzQzO307CiYjNDM7CiYjNDM7I2RlZmluZSBFRklfUE9JU09OX1VOSVRfU0laRQlTWl8yTQomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWQomIzQzO3ZvaWQgX19pbml0IGVmaV9wb2lzb25lZF9tZW1vcnlfcmVzZXJ2ZSh2b2lkKTsKJiM0Mzt2b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBlZmlfcG9pc29uZWRfbWVtb3J5X3Jlc2VydmUodm9pZCkgeyB9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKSB7IH0KJiM0MzsjZW5kaWYKJiM0MzsKIHZvaWQgX19pbml0IGVmaV9hcmNoX21lbV9yZXNlcnZlKHBoeXNfYWRkcl90IGFkZHIsIHU2NCBzaXplKTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCAyNzRmYTg4MDA3N2M1Li45ZDlmMmU4ZmRjMTM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC01MjI1LDYgJiM0Mzs1MjI1LDcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbWVtb3J5X2ZhaWx1cmVfYXR0cl9ncm91cDsKIGV4dGVybiB2b2lkIG1lbW9yeV9mYWlsdXJlX3F1ZXVlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpOwogdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfaW5jKHVuc2lnbmVkIGxvbmcgcGZuKTsKIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX3N1Yih1bnNpZ25lZCBsb25nIHBmbiwgbG9uZyBpKTsKJiM0Mzt2b2lkIF9fbWVtaW5pdCBod3BvaXNvbl9ib290X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpOwogcGh5c19hZGRyX3QgcmFuZ2VfZmlyc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiBwaHlzX2FkZHJfdCByYW5nZV9sYXN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpOwogI2Vsc2UKQEAgLTUyMzIsNiAmIzQzOzUyMzMsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbW9yeV9mYWlsdXJlX3F1ZXVlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpCiB7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaHdwb2lzb25fYm9vdF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQomIzQzO3sKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX2luYyh1bnNpZ25lZCBsb25nIHBmbikKIHsKIH0KQEAgLTUzODcsNiAmIzQzOzUzOTIsMjAgQEAgc3RhdGljIGlubGluZSBib29sIHBmbl9pc191bmFjY2VwdGVkX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbikKIAlyZXR1cm4gcmFuZ2VfY29udGFpbnNfdW5hY2NlcHRlZF9tZW1vcnkocGZuICZsdDsmbHQ7IFBBR0VfU0hJRlQsIFBBR0VfU0laRSk7CiB9CiAKJiM0MzsjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUlkKJiM0MzsKJiM0Mztib29sIHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeShwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKTsKJiM0MzsKJiM0MzsjZWxzZQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCByYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnkocGh5c19hZGRyX3Qgc3RhcnQsCiYjNDM7CQkJCQkJICB1bnNpZ25lZCBsb25nIHNpemUpCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzOyNlbmRpZgomIzQzOwogdm9pZCB2bWFfcGd0YWJsZV93YWxrX2JlZ2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKIHZvaWQgdm1hX3BndGFibGVfd2Fsa19lbmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwogCmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuYwppbmRleCBhMmNhOGRmNTAxY2FlLi5mNmFmZGIyYTg5YTk0IDEwMDY0NAotLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS1mYWlsdXJlLmMKQEAgLTQzLDYgJiM0Mzs0Myw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvc2lnbmFsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvdGFzay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2RheC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9lZmkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rc20uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ybWFwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXhwb3J0LmgmZ3Q7CkBAIC0xMzYsNiAmIzQzOzEzNywyMSBAQCBwaHlzX2FkZHJfdCByYW5nZV9sYXN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpCiAJcmV0dXJuIHJhbmdlX2h3cG9pc29uKHN0YXJ0LCBzaXplLCBmYWxzZSk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCB1cGRhdGVfcGVyX25vZGVfbWZfc3RhdHModW5zaWduZWQgbG9uZyBwZm4sIGVudW0gbWZfcmVzdWx0IHJlc3VsdCk7CiYjNDM7CiYjNDM7LyogTm90IG51bV9wb2lzb25lZF9wYWdlc19pbmMoKTogaXRzIHBlciBibG9jayBoYWxmIGRpdmlkZXMgYnkgemVybyB0aGlzIGVhcmx5LiAqLwomIzQzO3ZvaWQgX19tZW1pbml0IGh3cG9pc29uX2Jvb3RfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKJiM0Mzt7CiYjNDM7CWlmIChQYWdlSFdQb2lzb24ocGFnZSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CVNldFBhZ2VIV1BvaXNvbihwYWdlKTsKJiM0MzsJc2V0X3BhZ2VfY291bnQocGFnZSwgMSk7CiYjNDM7CS8qIFRoZSBwYWdlIGhhcyBiZWVuIGNvbXBsZXRlbHkgaXNvbGF0ZWQgPT0gTUZfUkVDT1ZFUkVEICovCiYjNDM7CXVwZGF0ZV9wZXJfbm9kZV9tZl9zdGF0cyhwYWdlX3RvX3BmbihwYWdlKSwgTUZfUkVDT1ZFUkVEKTsKJiM0MzsJYXRvbWljX2xvbmdfaW5jKCZhbXA7bnVtX3BvaXNvbmVkX3BhZ2VzKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIE1GX0FUVFJfUk8gLSBDcmVhdGUgc3lzZnMgZW50cnkgZm9yIGVhY2ggbWVtb3J5IGZhaWx1cmUgc3RhdGlzdGljcy4KICAqIEBfbmFtZTogbmFtZSBvZiB0aGUgZmlsZSBpbiB0aGUgcGVyIE5VTUEgc3lzZnMgZGlyZWN0b3J5LgpAQCAtMTMyNiw2ICYjNDM7MTM0Miw4IEBAIHN0YXRpYyBpbnQgYWN0aW9uX3Jlc3VsdCh1bnNpZ25lZCBsb25nIHBmbiwgZW51bSBtZl9hY3Rpb25fcGFnZV90eXBlIHR5cGUsCiAJaWYgKHR5cGUgIT0gTUZfTVNHX0FMUkVBRFlfUE9JU09ORUQgJmFtcDsmYW1wOyB0eXBlICE9IE1GX01TR19QRk5fTUFQKSB7CiAJCW51bV9wb2lzb25lZF9wYWdlc19pbmMocGZuKTsKIAkJdXBkYXRlX3Blcl9ub2RlX21mX3N0YXRzKHBmbiwgcmVzdWx0KTsKJiM0MzsJCS8qIE9ubHkgaGFyZCBvZmZsaW5lcyBhcmUgY2FycmllZCBvdmVyIHRvIHRoZSBuZXh0IGtlcm5lbC4gKi8KJiM0MzsJCWVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHBmbik7CiAJfQogCiAJcHJfZXJyKCYjMzQ7JSNseDogcmVjb3ZlcnkgYWN0aW9uIGZvciAlczogJXNcbiYjMzQ7LApkaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jCmluZGV4IDQwNDg5NmI1MzAwM2UuLjllMmNlODMzZmQ0MDkgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTE1NzksNiAmIzQzOzE1NzksMTkgQEAgc3RhdGljIHZvaWQgX19mcmVlX3BhZ2VzX29rKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsCiAJCWZyZWVfb25lX3BhZ2Uoem9uZSwgcGFnZSwgcGZuLCBvcmRlciwgZnBpX2ZsYWdzKTsKIH0KIAomIzQzOy8qIEZsYWcgdGhlIGZyYW1lcyBhbiBlYXJsaWVyIGtlcm5lbCByZWNvcmRlZCBhcyBiYWQuICovCiYjNDM7c3RhdGljIHZvaWQgX19tZW1pbml0IHBvaXNvbl9ibG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBpLCBucl9wYWdlcyA9IDFVTCAmbHQ7Jmx0OyBvcmRlcjsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3BhZ2VzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IHBhZ2UgKnAgPSBwYWdlICYjNDM7IGk7CiYjNDM7CiYjNDM7CQlpZiAocmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5KHBhZ2VfdG9fcGh5cyhwKSwgUEFHRV9TSVpFKSkKJiM0MzsJCQlod3BvaXNvbl9ib290X3BhZ2UocCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiB2b2lkIF9fbWVtaW5pdCBfX2ZyZWVfcGFnZXNfY29yZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLAogCQllbnVtIG1lbWluaXRfY29udGV4dCBjb250ZXh0KQogewpAQCAtMTYxMyw2ICYjNDM7MTYyNiwxOCBAQCB2b2lkIF9fbWVtaW5pdCBfX2ZyZWVfcGFnZXNfY29yZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLAogCQlhdG9taWNfbG9uZ19hZGQobnJfcGFnZXMsICZhbXA7cGFnZV96b25lKHBhZ2UpLSZndDttYW5hZ2VkX3BhZ2VzKTsKIAl9CiAKJiM0MzsJLyogRmlyc3Q6IGEgYmxvY2sgcGFya2VkIGJ5IF9fZnJlZV91bmFjY2VwdGVkKCkgbmV2ZXIgcmV0dXJucyBoZXJlLiAqLwomIzQzOwlpZiAocmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5KHBhZ2VfdG9fcGh5cyhwYWdlKSwKJiM0MzsJCQkJCSAgIFBBR0VfU0laRSAmbHQ7Jmx0OyBvcmRlcikpIHsKJiM0MzsJCXBvaXNvbl9ibG9jayhwYWdlLCBvcmRlcik7CiYjNDM7CQkvKgomIzQzOwkJICogVE9ETzogZnJlZSB0aGUgZnJhbWVzIGluIHRoZSBibG9jayB0aGF0IGFyZSBub3QgcG9pc29uZWQuCiYjNDM7CQkgKiBUaGV5IHN0YXkgb3V0IG9mIHRoZSBhbGxvY2F0b3IgYW5kIHN0aWxsIGNvdW50IGluCiYjNDM7CQkgKiBtYW5hZ2VkX3BhZ2VzLCBzbyBhIHVuaXQgY29zdHMgdXAgdG8gYSBibG9jay4KJiM0MzsJCSAqLwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiAJaWYgKHBhZ2VfY29udGFpbnNfdW5hY2NlcHRlZChwYWdlLCBvcmRlcikpIHsKIAkJaWYgKG9yZGVyID09IE1BWF9QQUdFX09SREVSICZhbXA7JmFtcDsgX19mcmVlX3VuYWNjZXB0ZWQocGFnZSkpCiAJCQlyZXR1cm47CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDExCgkJCQkJCQlvdXRwdXQ6IDI1OQoJCQkJCQkJdGhvdWdodHM6IDEyOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBTZXNzaW9uIEFzc2Vzc21lbnQ6IEVGSSBQb2lzb25lZCBNZW1vcnkgVGFibGUgTWFuYWdlbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lIGlmIGl0IGp1c3RpZmllcyBhIEtNU0FOIGZ1enppbmcgcnVuLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgbGVhbmluZyB0b3dhcmRzIGEgJiMzNDtubywmIzM0OyBidXQgd2UgbmVlZCB0byBiZSB0aG9yb3VnaC4KCkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggZnVuZGFtZW50YWxseSBkb2VzLiBJdCBpbnRyb2R1Y2VzIGBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWWAgYW5kLCBjcml0aWNhbGx5LCBhIG1lY2hhbmlzbSBmb3IgbWFuYWdpbmcgYSAmIzM0O3BvaXNvbmVkIG1lbW9yeSYjMzQ7IHRhYmxlIHdpdGhpbiB0aGUgRUZJIGVudmlyb25tZW50LiBUaGlzIHRhYmxlIHNlZW1zIHRvIHRyYWNrIHJlZ2lvbnMgb2YgUkFNIHRoYXQgYXJlIGNvbnNpZGVyZWQgJiMzNDtwb2lzb25lZCYjMzQ7IOKAkyBsaWtlbHkgbWFya2VkIGZvciBtZW1vcnkgZmFpbHVyZSBpbmplY3Rpb24uCgpUaGUgY29yZSBvZiB0aGUgbG9naWMgaW52b2x2ZXMgYWxsb2NhdGluZyBhIGBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeWAgc3RydWN0dXJlLiBUaGlzIGFsbG9jYXRpb24gaGFwcGVucyB2aWEgRUZJIGJvb3Qgc2VydmljZXMgKGBhbGxvY2F0ZV9wb29sYCkuIEltcG9ydGFudGx5LCB0aGUgYWxsb2NhdGVkIGJpdG1hcCBpcyBpbW1lZGlhdGVseSB6ZXJvZWQgdmlhIGBtZW1zZXRgLiBUaGlzIGlzIGtleS4gVGhlIGNvZGUgdGhlbiBpbml0aWFsaXplcyB0aGUgc3RydWN0dXJlJiMzOTtzIGZpZWxkczogYHZlcnNpb25gLCBgdW5pdF9zaXplYCwgYHBoeXNfYmFzZWAsIGBzaXplYCDigJMgYWxsIGV4cGxpY2l0bHkgYXNzaWduZWQuIFRoaXMgdGFibGUgaXMgdGhlbiBpbnN0YWxsZWQgYXMgYSBjb25maWcgdGFibGUuCgpEdXJpbmcga2VybmVsIGJvb3QsIHRoZSBjb2RlIHBhcnNlcyB0aGUgRUZJIGNvbmZpZyB0YWJsZXMgYW5kIGNhbGxzIGBlZmlfcG9pc29uZWRfbWVtb3J5X3Jlc2VydmUoKWAgdG8gdmFsaWRhdGUsIG1hcCBhbmQgcmVzZXJ2ZSB0aGUgZGVzY3JpYmVkIG1lbW9yeSB1c2luZyBgbWVtYmxvY2tfcmVzZXJ2ZSgpYC4gVGhlIGNyaXRpY2FsIGJpdCBpcyB0aGF0IGR1cmluZyBwYWdlIGZyZWVpbmcsIGBfX2ZyZWVfcGFnZXNfY29yZWAsIGlmIGEgcGFnZSBmYWxscyB3aXRoaW4gdGhlIGRlZmluZWQgJiMzNDtwb2lzb25lZCYjMzQ7IHJlZ2lvbiwgYSBgaHdwb2lzb25gIGZsYWcgaXMgc2V0IHVzaW5nIGBod3BvaXNvbl9ib290X3BhZ2UoKWAuICBMYXRlciwgaW4gdGhlIGV2ZW50IG9mIGEgbWVtb3J5IGZhaWx1cmUsIHRoZSBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4oKWAgZnVuY3Rpb24gdXBkYXRlcyB0aGUgYml0bWFwIHRvIHJlY29yZCB0aGUgcG9pc29uZWQgcGFnZS4gVGhpcyBiaXRtYXAgaXMgdGhlbiBjaGVja2VkIGxhdGVyIHVzaW5nIGByYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnkoKWAuCgpOb3csIHRoZSBtYWluIGNvbmNlcm4gZm9yIEtNU0FOIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBEb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIG5ldyBwYXRod2F5cyBmb3IgdW5pbml0aWFsaXplZCBkYXRhIHRvIGxlYWsgb3IgYmUgdXNlZD8KCjEuICAqKlVzZXItc3BhY2UgZXhwb3N1cmU/KiogTm8sIHRoZXJlIGFyZSBubyB1c2VyLXNwYWNlIGNvcGllcywgc3lzZnMgZW50cmllcywgb3IgaW9jdGxzIGludHJvZHVjZWQuCjIuICAqKkluaXRpYWxpemF0aW9uPyoqIFRoZSBjb2RlIGRvZXMgc2VlbSBtZXRpY3Vsb3VzbHkgaW5pdGlhbGl6ZWQuIGBtZW1zZXRgIG9uIHRoZSBiaXRtYXAsIGFuZCBleHBsaWNpdCBmaWVsZCBhc3NpZ25tZW50cyB3aXRoaW4gdGhlIHN0cnVjdC4gVGhlIGZ1bmN0aW9ucyBsaWtlIGBlZmlfZ2V0X3JhbV9yYW5nZWAsIGByYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnlgIGFsbCBhcHBlYXIgdG8gaGFuZGxlIHRoZWlyIGludGVybmFsIHN0YXRlIGNvcnJlY3RseS4KMy4gICoqQ29udHJvbCBmbG93IGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YT8qKiAgTm8sIHRoaXMgYXBwZWFycyB0byBiZSBqdXN0IGhhcmR3YXJlIHBvaXNvbiB0cmFja2luZyBhY3Jvc3Mga2V4ZWMgLyBFRkkgYm9vdC4gVGhlIGJpdG1hcCBhbmQgc3RhdGUgdmFyaWFibGVzIGFyZSBhbGwgaW5pdGlhbGl6ZWQuCjQuICAqKktNU0FOIFNwZWNpZmljIENvbmNlcm5zPyoqIEtNU0FO4oCZcyBwcmltYXJ5IGZvY3VzIGlzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIChzdGFjaywgaGVhcCwgcGFnZXMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgbGVha3MuICBUaGlzIHBhdGNoICpkb2VzbiYjMzk7dCogYXBwZWFyIHRvIGhhdmUgYW55LiBFdmVyeXRoaW5nIHJldm9sdmVzIGFyb3VuZCBlYXJseSBib290IG1lbW9yeSByZXNlcnZhdGlvbi90YWJsZSBjcmVhdGlvbi9iaXQgc2V0dGluZyBhbmQgY2hlY2tpbmcgaW4gdGhlIGluaXRpYWxpemVkIGJpdG1hcC4gQW55IHBvdGVudGlhbCBlcnJvcnMgaGVyZSB3b3VsZCBiZSBhZGRyZXNzIHRyYW5zbGF0aW9uIGVycm9ycywgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIG9yIGluY29ycmVjdCBtZW1vcnkgcmVzZXJ2YXRpb24uIFRoZXNlIGFyZSB0aGluZ3MgdGhhdCBhcmUgaGFuZGxlZCBieSBLQVNBTiBvciBtb3JlIHN0YW5kYXJkIHZlcmlmaWNhdGlvbiB0ZWNobmlxdWVzLgoKTGV0JiMzOTtzIGRvIGEgcXVpY2sgZG91YmxlLWNoZWNrIG9mIGFsbCBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcy4KCiogICBgZWZpX2dldF9yYW1fcmFuZ2VgOiBJbml0aWFsaXplcyBhbmQgcmV0dXJucywgdGhlIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQuCiogICBgZWZpX3BvaXNvbl9iaXRtYXBfc2l6ZWA6IEEgcHVyZSBjYWxjdWxhdGlvbi4KKiAgIGBlZmlfcG9pc29uX2FsbG9jYDogQWxsb2NhdGVzIGFuZCBjb3JyZWN0bHkgaW5pdGlhbGl6ZXMgdGhlIGJpdG1hcC4KKiAgIGBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZWA6IEluaXRpYWxpemVzIGxvY2FscyBvciBjaGVja3Mgc3RhdHVzZXMuCiogICBgZWZpX3BvaXNvbl9nZW9tZXRyeV92YWxpZGAsIGBlZmlfcG9pc29uX3RhYmxlX3ZhbGlkYDogVmFsaWRhdGlvbiBvbiB0aGUgdGFibGUgZmllbGRzLgoqICAgYGVmaV9wb2lzb25lZF9tZW1vcnlfcmVzZXJ2ZWA6IEluY2x1ZGVzIGVhcmx5IG1lbXJlbWFwLCB2YWxpZGF0aW9uLCBhbmQgbWVtYmxvY2suCiogICBgZWZpX3BvaXNvbmVkX21lbW9yeWA6IFJldHVybnMgYSBwb2ludGVyLgoqICAgYHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeWA6IEJvdW5kYXJ5IGNoZWNrcyBhbmQgYGZpbmRfbmV4dF9iaXRgIGNhbGxzLgoqICAgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYDogSW5jbHVkZXMgYm91bmRhcnkgY2hlY2tzIGFuZCBgc2V0X2JpdGAgY2FsbHMuCiogICBgaHdwb2lzb25fYm9vdF9wYWdlYDogT3BlcmF0ZXMgb24gYHN0cnVjdCBwYWdlYCwgd2l0aCBzZXRcX3BhZ2VcX2NvdW50LCBhdG9taWNcX2xvbmdcX2luYywgZXRjLgoqICAgYHBvaXNvbl9ibG9ja2A6IEl0ZXJhdGVzIG92ZXIgdGhlIHBhZ2VzIGFuZCBjYWxscyBgcmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5YCBhbmQgYGh3cG9pc29uX2Jvb3RfcGFnZWAuCgpPa2F5LCB0aGUgY29uY2x1c2lvbiByZW1haW5zOiAqKk5lZWRzS01TQU4gPSBmYWxzZS4qKgoKSGVyZeKAmXMgdGhlIGRpc3RpbGxlZCByZWFzb25pbmcsIGNsZWFybHkgY29udHJhc3RpbmcgS01TQU4gYW5kIEtBU0FOOgoKKiAgIEtNU0FOIGlzIGxvb2tpbmcgZm9yICp1bmluaXRpYWxpemVkKiBtZW1vcnkgcmVhZHMvbGVha3MuCiogICBUaGlzIHBhdGNoIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZXMgdGhlIG1lbW9yeSB0YWJsZSBhbmQgdGhlIGJpdG1hcCB3aXRoIGBtZW1zZXRgLiBFdmVyeSBzdHJ1Y3QgZmllbGQgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZC4KKiAgIFRoZSBydW50aW1lIGZ1bmN0aW9ucyBvbmx5IHJlYWQgYW5kIG1vZGlmeSBpbml0aWFsaXplZCBkYXRhLgoqICAgVGhlcmUmIzM5O3Mgbm8gaW50cm9kdWN0aW9uIG9mIG5ldyB1c2VyLXNwYWNlIGNvcGllcyBvciB1bmluaXRpYWxpemVkIGNvbmRpdGlvbmFsIGxvZ2ljLgoqICAgQW55IGJ1Z3Mgd291bGQgcmVsYXRlIHRvIGFkZHJlc3MKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBFRkkgcG9pc29uZWQgbWVtb3J5IHRyYWNraW5nIChDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWSkgdG8gcHJlc2VydmUgaGFyZHdhcmUtcG9pc29uZWQgcGFnZSBpbmZvcm1hdGlvbiBhY3Jvc3Mga2V4ZWMgcmVib290cy4gXG5cbjEuIEFsbG9jYXRpb24gXHUwMDI2IEluaXRpYWxpemF0aW9uOiBUaGUgdGFibGUgc3RydWN0dXJlIGBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeWAgYW5kIGl0cyB0cmFpbGluZyBiaXRtYXAgYXJlIGFsbG9jYXRlZCBpbiB0aGUgRUZJIHN0dWIgYW5kIGV4cGxpY2l0bHkgZnVsbHkgaW5pdGlhbGl6ZWQgKGFsbCBoZWFkZXIgZmllbGRzIGFzc2lnbmVkLCBhbmQgYG1lbXNldChwbS1cdTAwM2ViaXRtYXAsIDAsIGJpdG1hcF9zaXplKWAgY2xlYXJzIHRoZSBiaXRtYXApLlxuMi4gTWVtb3J5IEFjY2Vzc2VzOiBSdW50aW1lIG9wZXJhdGlvbnMgKGByYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnlgLCBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gLCBgcG9pc29uX2Jsb2NrYCwgYW5kIGBod3BvaXNvbl9ib290X3BhZ2VgKSBvbmx5IHJlYWQgYW5kIHVwZGF0ZSBmdWxseSBpbml0aWFsaXplZCBtZW1vcnkgc3RydWN0dXJlcyBhbmQgc3RydWN0IHBhZ2UgZmxhZ3MuXG4zLiBObyBVbmluaXRpYWxpemVkIExlYWtzIG9yIFJlYWRzOiBUaGVyZSBhcmUgbm8gZGF0YSB0cmFuc2ZlcnMgdG8gdXNlciBzcGFjZSwgbm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBubyBleHBvc2VkIHBhZGRpbmcuXG40LiBLQVNBTiB2cyBLTVNBTjogUG90ZW50aWFsIHJpc2tzIHN1Y2ggYXMgaW52YWxpZCBwb2ludGVyIG1hdGgsIG91dC1vZi1ib3VuZHMgYml0bWFwIGFjY2Vzc2VzLCBvciBtZW1vcnkgcmVzZXJ2YXRpb24gZXJyb3JzIGFyZSBwcm9wZXJseSBoYW5kbGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBLTVNBTiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBFRkkgcG9pc29uZWQgbWVtb3J5IHRyYWNraW5nIChDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWSkgdG8gcHJlc2VydmUgaGFyZHdhcmUtcG9pc29uZWQgcGFnZSBpbmZvcm1hdGlvbiBhY3Jvc3Mga2V4ZWMgcmVib290cy4gXG5cbjEuIEFsbG9jYXRpb24gXHUwMDI2IEluaXRpYWxpemF0aW9uOiBUaGUgdGFibGUgc3RydWN0dXJlIGBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeWAgYW5kIGl0cyB0cmFpbGluZyBiaXRtYXAgYXJlIGFsbG9jYXRlZCBpbiB0aGUgRUZJIHN0dWIgYW5kIGV4cGxpY2l0bHkgZnVsbHkgaW5pdGlhbGl6ZWQgKGFsbCBoZWFkZXIgZmllbGRzIGFzc2lnbmVkLCBhbmQgYG1lbXNldChwbS1cdTAwM2ViaXRtYXAsIDAsIGJpdG1hcF9zaXplKWAgY2xlYXJzIHRoZSBiaXRtYXApLlxuMi4gTWVtb3J5IEFjY2Vzc2VzOiBSdW50aW1lIG9wZXJhdGlvbnMgKGByYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnlgLCBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gLCBgcG9pc29uX2Jsb2NrYCwgYW5kIGBod3BvaXNvbl9ib290X3BhZ2VgKSBvbmx5IHJlYWQgYW5kIHVwZGF0ZSBmdWxseSBpbml0aWFsaXplZCBtZW1vcnkgc3RydWN0dXJlcyBhbmQgc3RydWN0IHBhZ2UgZmxhZ3MuXG4zLiBObyBVbmluaXRpYWxpemVkIExlYWtzIG9yIFJlYWRzOiBUaGVyZSBhcmUgbm8gZGF0YSB0cmFuc2ZlcnMgdG8gdXNlciBzcGFjZSwgbm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBubyBleHBvc2VkIHBhZGRpbmcuXG40LiBLQVNBTiB2cyBLTVNBTjogUG90ZW50aWFsIHJpc2tzIHN1Y2ggYXMgaW52YWxpZCBwb2ludGVyIG1hdGgsIG91dC1vZi1ib3VuZHMgYml0bWFwIGFjY2Vzc2VzLCBvciBtZW1vcnkgcmVzZXJ2YXRpb24gZXJyb3JzIGFyZSBwcm9wZXJseSBoYW5kbGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBLTVNBTiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE0OjA5OjA2LjE2MjgyMzQxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc0MDYxOTg1NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRUZJX1BPSVNPTkVEX01FTU9SWVwiLFxuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgICBcIkVGSV9TVFVCXCIsXG4gICAgXCJFRklcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlZmlfaHdwb2lzb25fcmVjb3JkX3BmblwiLFxuICAgIFwicmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5XCIsXG4gICAgXCJod3BvaXNvbl9ib290X3BhZ2VcIixcbiAgICBcIm1lbW9yeV9mYWlsdXJlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBFRkkgcG9pc29uZWQgbWVtb3J5IHRyYWNraW5nIChDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWSkgdG8gcHJlc2VydmUgaGFyZHdhcmUtcG9pc29uZWQgcGFnZSBpbmZvcm1hdGlvbiBhY3Jvc3Mga2V4ZWMgcmVib290cy4gXFxuXFxuMS4gQWxsb2NhdGlvbiBcXHUwMDI2IEluaXRpYWxpemF0aW9uOiBUaGUgdGFibGUgc3RydWN0dXJlIGBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeWAgYW5kIGl0cyB0cmFpbGluZyBiaXRtYXAgYXJlIGFsbG9jYXRlZCBpbiB0aGUgRUZJIHN0dWIgYW5kIGV4cGxpY2l0bHkgZnVsbHkgaW5pdGlhbGl6ZWQgKGFsbCBoZWFkZXIgZmllbGRzIGFzc2lnbmVkLCBhbmQgYG1lbXNldChwbS1cXHUwMDNlYml0bWFwLCAwLCBiaXRtYXBfc2l6ZSlgIGNsZWFycyB0aGUgYml0bWFwKS5cXG4yLiBNZW1vcnkgQWNjZXNzZXM6IFJ1bnRpbWUgb3BlcmF0aW9ucyAoYHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeWAsIGBlZmlfaHdwb2lzb25fcmVjb3JkX3BmbmAsIGBwb2lzb25fYmxvY2tgLCBhbmQgYGh3cG9pc29uX2Jvb3RfcGFnZWApIG9ubHkgcmVhZCBhbmQgdXBkYXRlIGZ1bGx5IGluaXRpYWxpemVkIG1lbW9yeSBzdHJ1Y3R1cmVzIGFuZCBzdHJ1Y3QgcGFnZSBmbGFncy5cXG4zLiBObyBVbmluaXRpYWxpemVkIExlYWtzIG9yIFJlYWRzOiBUaGVyZSBhcmUgbm8gZGF0YSB0cmFuc2ZlcnMgdG8gdXNlciBzcGFjZSwgbm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBubyBleHBvc2VkIHBhZGRpbmcuXFxuNC4gS0FTQU4gdnMgS01TQU46IFBvdGVudGlhbCByaXNrcyBzdWNoIGFzIGludmFsaWQgcG9pbnRlciBtYXRoLCBvdXQtb2YtYm91bmRzIGJpdG1hcCBhY2Nlc3Nlcywgb3IgbWVtb3J5IHJlc2VydmF0aW9uIGVycm9ycyBhcmUgcHJvcGVybHkgaGFuZGxlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdHJhY2tpbmcgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IGFjcm9zcyBrZXhlYyB2aWEgYW4gRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUgKENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZKS4gSXQgaW50cm9kdWNlcyBob29rcyBpbiBjb3JlIG1lbW9yeS1mYWlsdXJlIGhhbmRsaW5nIChlZmlfaHdwb2lzb25fcmVjb3JkX3BmbiBpbiBhY3Rpb25fcmVzdWx0KSBhbmQgbWVtb3J5IGluaXRpYWxpemF0aW9uL2hvdHBsdWcgKF9fZnJlZV9wYWdlc19jb3JlLCBod3BvaXNvbl9ib290X3BhZ2UpLiBUaGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIGF0IHJ1bnRpbWUgdmlhIG1lbW9yeSBmYWlsdXJlIG1lY2hhbmlzbXMgc3VjaCBhcyBtYWR2aXNlKE1BRFZfSFdQT0lTT04pIGFuZCBtZW1vcnkgaG90cGx1Z2dpbmcgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHdpdGggRUZJLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNDowOTowNi4xNjI4Mjg2NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgwNzc1MDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTc5Y2JiMTA1YzU5ODE3YWYzMmEyMmEwMDE3MWY3YmI5MTQ2NzY1NFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCA5IDE0OjA5OjA1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmkuYyBiL2FyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmkuY1xcbmluZGV4IDBjMzlhZGI5NmI5MTIuLjJiMzdiOTZhMzZlMDkgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaS5jXFxuKysrIGIvYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaS5jXFxuQEAgLTkzLDYgKzkzLDkgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgKiBjb25zdCBlZmlfdGFibGVzW10gPSB7XFxuICNpZmRlZiBDT05GSUdfVU5BQ0NFUFRFRF9NRU1PUllcXG4gXFx0XFx1MDAyNmVmaS51bmFjY2VwdGVkLFxcbiAjZW5kaWZcXG4rI2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXFxuK1xcdFxcdTAwMjZlZmkucG9pc29uZWRfbWVtb3J5LFxcbisjZW5kaWZcXG4gfTtcXG4gXFxuIHU2NCBlZmlfc2V0dXA7XFx0XFx0LyogZWZpIHNldHVwX2RhdGEgcGh5c2ljYWwgYWRkcmVzcyAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ1xcbmluZGV4IDI5ZTA3MjkyOTlmNWIuLmFhZmNkNDFiYzAwNjMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWdcXG5AQCAtMjYzLDYgKzI2MywxNCBAQCBjb25maWcgRUZJX0NPQ09fU0VDUkVUXFxuIFxcdCAgdmlydC9jb2NvL2VmaV9zZWNyZXQgbW9kdWxlIHRvIGFjY2VzcyB0aGUgc2VjcmV0cywgd2hpY2ggaW4gdHVyblxcbiBcXHQgIGFsbG93cyB1c2Vyc3BhY2UgcHJvZ3JhbXMgdG8gYWNjZXNzIHRoZSBpbmplY3RlZCBzZWNyZXRzLlxcbiBcXG4rY29uZmlnIEVGSV9QT0lTT05FRF9NRU1PUllcXG4rXFx0ZGVmX2Jvb2wgeVxcbitcXHRkZXBlbmRzIG9uIEVGSV9TVFVCIFxcdTAwMjZcXHUwMDI2IE1FTU9SWV9GQUlMVVJFIFxcdTAwMjZcXHUwMDI2IDY0QklUXFxuK1xcdGhlbHBcXG4rXFx0ICBSZWNvcmQgcGFnZSBmcmFtZXMgdGhhdCBhcmUgaGFyZHdhcmUtcG9pc29uZWQgd2hpbGUgdGhpcyBrZXJuZWwgcnVuc1xcbitcXHQgIGludG8gYW4gRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUsIGFuZCBob25vciB0aGF0IHRhYmxlIGVhcmx5IG9uIHRoZVxcbitcXHQgIG5leHQga2VybmVsIHNvIGEga2V4ZWMgZG9lcyBub3QgaGFuZCBrbm93bi1iYWQgUkFNIGJhY2sgb3V0LlxcbitcXG4gY29uZmlnIE9WTUZfREVCVUdfTE9HXFxuIFxcdGJvb2wgXFxcIkV4cG9zZSBPVk1GIGZpcm13YXJlIGRlYnVnIGxvZyB2aWEgc3lzZnNcXFwiXFxuIFxcdGRlcGVuZHMgb24gRUZJXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGVcXG5pbmRleCA4ZWZiY2Y2OTllNGZmLi4wNWQwYTQ5MDkyM2U1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGVcXG5AQCAtNDMsNCArNDMsNSBAQCBvYmotJChDT05GSUdfRUZJX0VBUkxZQ09OKVxcdFxcdCs9IGVhcmx5Y29uLm9cXG4gb2JqLSQoQ09ORklHX1VFRklfQ1BFUl9BUk0pXFx0XFx0Kz0gY3Blci1hcm0ub1xcbiBvYmotJChDT05GSUdfVUVGSV9DUEVSX1g4NilcXHRcXHQrPSBjcGVyLXg4Ni5vXFxuIG9iai0kKENPTkZJR19VTkFDQ0VQVEVEX01FTU9SWSlcXHRcXHQrPSB1bmFjY2VwdGVkX21lbW9yeS5vXFxuK29iai0kKENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZKVxcdCs9IHBvaXNvbi5vXFxuIG9iai0kKENPTkZJR19URUVfU1RNTV9FRkkpXFx0XFx0Kz0gc3RtbS90ZWVfc3RtbV9lZmkub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jXFxuaW5kZXggNmQ5ODdkN2Y5Nzc4MS4uNTViMmVlNTNmYzI2OCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuY1xcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jXFxuQEAgLTU1LDYgKzU1LDkgQEAgc3RydWN0IGVmaSBfX3JlYWRfbW9zdGx5IGVmaSA9IHtcXG4gI2lmZGVmIENPTkZJR19VTkFDQ0VQVEVEX01FTU9SWVxcbiBcXHQudW5hY2NlcHRlZFxcdFxcdD0gRUZJX0lOVkFMSURfVEFCTEVfQUREUixcXG4gI2VuZGlmXFxuKyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWVxcbitcXHQucG9pc29uZWRfbWVtb3J5XFx0PSBFRklfSU5WQUxJRF9UQUJMRV9BRERSLFxcbisjZW5kaWZcXG4gfTtcXG4gRVhQT1JUX1NZTUJPTChlZmkpO1xcbiBcXG5AQCAtNjc3LDYgKzY4MCw5IEBAIHN0YXRpYyBjb25zdCBlZmlfY29uZmlnX3RhYmxlX3R5cGVfdCBjb21tb25fdGFibGVzW10gX19pbml0Y29uc3QgPSB7XFxuICNpZmRlZiBDT05GSUdfVU5BQ0NFUFRFRF9NRU1PUllcXG4gXFx0e0xJTlVYX0VGSV9VTkFDQ0VQVEVEX01FTV9UQUJMRV9HVUlELFxcdFxcdTAwMjZlZmkudW5hY2NlcHRlZCxcXHRcXFwiVW5hY2NlcHRlZFxcXCJcXHR9LFxcbiAjZW5kaWZcXG4rI2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXFxuK1xcdHtMSU5VWF9FRklfUE9JU09ORURfTUVNT1JZX1RBQkxFX0dVSUQsXFx0XFx1MDAyNmVmaS5wb2lzb25lZF9tZW1vcnksXFx0XFxcIlBPSVNPTlxcXCJcXHR9LFxcbisjZW5kaWZcXG4gI2lmZGVmIENPTkZJR19FRklfR0VORVJJQ19TVFVCXFxuIFxcdHtMSU5VWF9FRklfUFJJTUFSWV9ESVNQTEFZX1RBQkxFX0dVSUQsXFx0XFx1MDAyNnByaW1hcnlfZGlzcGxheV90YWJsZVxcdFxcdFxcdH0sXFxuICNlbmRpZlxcbkBAIC04NzcsNiArODgzLDggQEAgaW50IF9faW5pdCBlZmlfY29uZmlnX3BhcnNlX3RhYmxlcyhjb25zdCBlZmlfY29uZmlnX3RhYmxlX3QgKmNvbmZpZ190YWJsZXMsXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4rXFx0ZWZpX3BvaXNvbmVkX21lbW9yeV9yZXNlcnZlKCk7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmNcXG5pbmRleCA0OGY5M2Y3NzU4ZTllLi41Y2JlNjc1NDkxMzMzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmNcXG4rKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jXFxuQEAgLTc3NCwzICs3NzQsMTAzIEBAIHZvaWQgZWZpX3JlbWFwX2ltYWdlKHVuc2lnbmVkIGxvbmcgaW1hZ2VfYmFzZSwgdW5zaWduZWQgYWxsb2Nfc2l6ZSxcXG4gXFx0XFx0XFx0ZWZpX3dhcm4oXFxcIkZhaWxlZCB0byByZW1hcCBkYXRhIHJlZ2lvbiBub24tZXhlY3V0YWJsZVxcXFxuXFxcIik7XFxuIFxcdH1cXG4gfVxcbitcXG4rI2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXFxuKy8qXFxuKyAqIEZpbmQgdGhlIGJhc2UgYW5kIHRvcCBvZiB0aGUgbWVtb3J5LCBzbywgd2UgY2FuIGNyZWF0ZSB0aGUgYml0bWFwIGZvclxcbisgKiB0aGUgZnVsbCByYW5nZS5cXG4rICovXFxuK3N0YXRpYyBlZmlfc3RhdHVzX3QgZWZpX2dldF9yYW1fcmFuZ2UodTY0ICpiYXNlLCB1NjQgKnRvcClcXG4re1xcbitcXHRzdHJ1Y3QgZWZpX2Jvb3RfbWVtbWFwICptYXAgX19mcmVlKGVmaV9wb29sKSA9IE5VTEw7XFxuK1xcdHU2NCByYW1fYmFzZSA9IFVMTE9OR19NQVgsIHJhbV90b3AgPSAwO1xcbitcXHRlZmlfc3RhdHVzX3Qgc3RhdHVzO1xcbitcXHRpbnQgaSwgbnJfZGVzYztcXG4rXFxuK1xcdHN0YXR1cyA9IGVmaV9nZXRfbWVtb3J5X21hcChcXHUwMDI2bWFwLCBmYWxzZSk7XFxuK1xcdGlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpXFxuK1xcdFxcdHJldHVybiBzdGF0dXM7XFxuK1xcbitcXHRucl9kZXNjID0gbWFwLVxcdTAwM2VtYXBfc2l6ZSAvIG1hcC1cXHUwMDNlZGVzY19zaXplO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfZGVzYzsgaSsrKSB7XFxuK1xcdFxcdGVmaV9tZW1vcnlfZGVzY190ICpkO1xcbitcXG4rXFx0XFx0ZCA9IGVmaV9tZW1kZXNjX3B0cigodW5zaWduZWQgbG9uZyltYXAtXFx1MDAzZW1hcCwgbWFwLVxcdTAwM2VkZXNjX3NpemUsIGkpO1xcbitcXHRcXHRyYW1fYmFzZSA9IG1pbihyYW1fYmFzZSwgZC1cXHUwMDNlcGh5c19hZGRyKTtcXG4rXFx0XFx0cmFtX3RvcCA9IG1heChyYW1fdG9wLFxcbitcXHRcXHRcXHQgICAgICBkLVxcdTAwM2VwaHlzX2FkZHIgKyBkLVxcdTAwM2VudW1fcGFnZXMgKiBFRklfUEFHRV9TSVpFKTtcXG4rXFx0fVxcbitcXHRpZiAoIXJhbV90b3AgfHwgcmFtX2Jhc2UgPT0gVUxMT05HX01BWClcXG4rXFx0XFx0cmV0dXJuIEVGSV9OT1RfRk9VTkQ7XFxuK1xcbitcXHQqYmFzZSA9IHJvdW5kX2Rvd24ocmFtX2Jhc2UsIEVGSV9QT0lTT05fVU5JVF9TSVpFKTtcXG4rXFx0KnRvcCA9IHJvdW5kX3VwKHJhbV90b3AsIEVGSV9QT0lTT05fVU5JVF9TSVpFKTtcXG4rXFxuK1xcdHJldHVybiBFRklfU1VDQ0VTUztcXG4rfVxcbitcXG4rLyogVGhlIHNpemUgb2YgdGhlIGJpdG1hcCAqL1xcbitzdGF0aWMgdTY0IGVmaV9wb2lzb25fYml0bWFwX3NpemUodTY0IHNwYW4pXFxuK3tcXG4rXFx0dTY0IGJ5dGVzID0gRElWX1JPVU5EX1VQKERJVl9ST1VORF9VUChzcGFuLCBFRklfUE9JU09OX1VOSVRfU0laRSksXFxuK1xcdFxcdFxcdFxcdCBCSVRTX1BFUl9CWVRFKTtcXG4rXFxuK1xcdHJldHVybiByb3VuZF91cChieXRlcywgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICplZmlfcG9pc29uX2FsbG9jKHU2NCBwaHlzX2Jhc2UsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgdTY0IGJpdG1hcF9zaXplKVxcbit7XFxuK1xcdHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTtcXG4rXFx0ZWZpX3N0YXR1c190IHN0YXR1cztcXG4rXFxuK1xcdHN0YXR1cyA9IGVmaV9ic19jYWxsKGFsbG9jYXRlX3Bvb2wsIEVGSV9BQ1BJX1JFQ0xBSU1fTUVNT1JZLFxcbitcXHRcXHRcXHQgICAgIHNpemVvZigqcG0pICsgYml0bWFwX3NpemUsICh2b2lkICoqKVxcdTAwMjZwbSk7XFxuK1xcdGlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0cG0tXFx1MDAzZXZlcnNpb24gPSAxO1xcbitcXHRwbS1cXHUwMDNldW5pdF9zaXplID0gRUZJX1BPSVNPTl9VTklUX1NJWkU7XFxuK1xcdHBtLVxcdTAwM2VwaHlzX2Jhc2UgPSBwaHlzX2Jhc2U7XFxuK1xcdHBtLVxcdTAwM2VzaXplID0gYml0bWFwX3NpemU7XFxuK1xcdG1lbXNldChwbS1cXHUwMDNlYml0bWFwLCAwLCBiaXRtYXBfc2l6ZSk7XFxuK1xcbitcXHRyZXR1cm4gcG07XFxuK31cXG4rXFxuKy8qIFRoaXMgbmVlZHMgdG8gYmUgZG9uZSB3aGlsZSBib290IHNlcnZpY2UgaXMgc3RpbGwgYWN0aXZlICovXFxuK3ZvaWQgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUodm9pZClcXG4re1xcbitcXHRlZmlfZ3VpZF90IHBvaXNvbmVkX21lbW9yeV90YWJsZV9ndWlkID0gTElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWV9UQUJMRV9HVUlEO1xcbitcXHRzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG07XFxuK1xcdHU2NCByYW1fYmFzZSwgcmFtX3RvcCwgYml0bWFwX3NpemU7XFxuK1xcdGVmaV9zdGF0dXNfdCBzdGF0dXM7XFxuK1xcbitcXHQvKiBBIHRhYmxlIGluc3RhbGxlZCBieSBhbiBlYXJsaWVyIGJvb3QgcmlkZXMgdGhlIHN5c3RlbSB0YWJsZSBhY3Jvc3Mga2V4ZWMuICovXFxuK1xcdHBtID0gZ2V0X2VmaV9jb25maWdfdGFibGUocG9pc29uZWRfbWVtb3J5X3RhYmxlX2d1aWQpO1xcbitcXHRpZiAocG0pIHtcXG4rXFx0XFx0aWYgKHBtLVxcdTAwM2V2ZXJzaW9uICE9IDEpXFxuK1xcdFxcdFxcdGVmaV9lcnIoXFxcIlVua25vd24gdmVyc2lvbiBvZiBwb2lzb25lZC1tZW1vcnkgdGFibGVcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChlZmlfZ2V0X3JhbV9yYW5nZShcXHUwMDI2cmFtX2Jhc2UsIFxcdTAwMjZyYW1fdG9wKSAhPSBFRklfU1VDQ0VTUykge1xcbitcXHRcXHRlZmlfZXJyKFxcXCJGYWlsZWQgdG8gc2l6ZSB0aGUgcG9pc29uZWQtbWVtb3J5IHRhYmxlIVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0Yml0bWFwX3NpemUgPSBlZmlfcG9pc29uX2JpdG1hcF9zaXplKHJhbV90b3AgLSByYW1fYmFzZSk7XFxuK1xcdHBtID0gZWZpX3BvaXNvbl9hbGxvYyhyYW1fYmFzZSwgYml0bWFwX3NpemUpO1xcbitcXHRpZiAoIXBtKSB7XFxuK1xcdFxcdGVmaV9lcnIoXFxcIkZhaWxlZCB0byBhbGxvY2F0ZSBwb2lzb25lZC1tZW1vcnkgdGFibGUhXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRzdGF0dXMgPSBlZmlfYnNfY2FsbChpbnN0YWxsX2NvbmZpZ3VyYXRpb25fdGFibGUsXFxuK1xcdFxcdFxcdCAgICAgXFx1MDAyNnBvaXNvbmVkX21lbW9yeV90YWJsZV9ndWlkLCBwbSk7XFxuK1xcdGlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIHtcXG4rXFx0XFx0ZWZpX2JzX2NhbGwoZnJlZV9wb29sLCBwbSk7XFxuK1xcdFxcdGVmaV9lcnIoXFxcIkZhaWxlZCB0byBpbnN0YWxsIHBvaXNvbmVkLW1lbW9yeSBjb25maWcgdGFibGUhXFxcXG5cXFwiKTtcXG4rXFx0fVxcbit9XFxuKyNlbmRpZlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmNcXG5pbmRleCAyMzVjOTczOGRhMmQ2Li4yMmEzMTVlMjgxNGExIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuY1xcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuY1xcbkBAIC0xNzksNiArMTc5LDcgQEAgZWZpX3N0YXR1c190IGVmaV9zdHViX2NvbW1vbihlZmlfaGFuZGxlX3QgaGFuZGxlLFxcbiBcXHRcXHRcXHQgRUZJX1JUX1NVUFBPUlRFRF9TRVRfVklSVFVBTF9BRERSRVNTX01BUCk7XFxuIFxcbiBcXHRpbnN0YWxsX21lbXJlc2VydmVfdGFibGUoKTtcXG4rXFx0aW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUoKTtcXG4gXFxuIFxcdHN0YXR1cyA9IGVmaV9ib290X2tlcm5lbChoYW5kbGUsIGltYWdlLCBpbWFnZV9hZGRyLCBjbWRsaW5lX3B0cik7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaCBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oXFxuaW5kZXggZmQ5MWZjMTVlYzgxMC4uNDQ0MzY4NjljNGVmZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaFxcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oXFxuQEAgLTExNjksNiArMTE2OSwxMiBAQCBlZmlfZW5hYmxlX3Jlc2V0X2F0dGFja19taXRpZ2F0aW9uKHZvaWQpIHsgfVxcbiBcXG4gdm9pZCBlZmlfcmV0cmlldmVfZXZlbnRsb2codm9pZCk7XFxuIFxcbisjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllcXG4rdm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKTtcXG4rI2Vsc2VcXG4rc3RhdGljIGlubGluZSB2b2lkIGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKHZvaWQpIHsgfVxcbisjZW5kaWZcXG4rXFxuIHN0cnVjdCBzeXNmYl9kaXNwbGF5X2luZm8gKmFsbG9jX3ByaW1hcnlfZGlzcGxheSh2b2lkKTtcXG4gc3RydWN0IHN5c2ZiX2Rpc3BsYXlfaW5mbyAqX19hbGxvY19wcmltYXJ5X2Rpc3BsYXkodm9pZCk7XFxuIHZvaWQgZnJlZV9wcmltYXJ5X2Rpc3BsYXkoc3RydWN0IHN5c2ZiX2Rpc3BsYXlfaW5mbyAqZHB5KTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jXFxuaW5kZXggMGJhZTBmMDZiNjc2My4uMzEzNjEzMmI5NjI4YSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmNcXG4rKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmNcXG5AQCAtMTAyNCw2ICsxMDI0LDggQEAgdm9pZCBfX25vcmV0dXJuIGVmaV9zdHViX2VudHJ5KGVmaV9oYW5kbGVfdCBoYW5kbGUsXFxuIFxcbiBcXHRzZXR1cF91bmFjY2VwdGVkX21lbW9yeSgpO1xcbiBcXG4rXFx0aW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUoKTtcXG4rXFxuIFxcdHN0YXR1cyA9IGV4aXRfYm9vdChib290X3BhcmFtcywgaGFuZGxlKTtcXG4gXFx0aWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUykge1xcbiBcXHRcXHRlZmlfZXJyKFxcXCJleGl0X2Jvb3QoKSBmYWlsZWQhXFxcXG5cXFwiKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZTE2ZDQzZjQ0MzhlZVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uY1xcbkBAIC0wLDAgKzEsMTQxIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rLypcXG4rICogUnVudGltZSBzaWRlIG9mIHRoZSBMSU5VWF9FRklfUE9JU09ORURfTUVNT1JZIHRhYmxlOiBvbmUgYml0IHBlclxcbisgKiBFRklfUE9JU09OX1VOSVRfU0laRSwgc2V0IGhlcmUgYXMgZnJhbWVzIGdvIGJhZCwgaG9ub3JlZCBieSB0aGUgbmV4dCBrZXJuZWwuXFxuKyAqXFxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IEJyZW5vIExlaXRhbyBcXHUwMDNjbGVpdGFvQGRlYmlhbi5vcmdcXHUwMDNlXFxuKyAqL1xcbitcXG4rI2RlZmluZSBwcl9mbXQoZm10KSBcXFwiZWZpOiBcXFwiIGZtdFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdG1hcC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZWZpLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbG9nMi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtYmxvY2suaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9vdmVyZmxvdy5oXFx1MDAzZVxcbitcXG4rc3RhdGljIGJvb2wgX19pbml0XFxuK2VmaV9wb2lzb25fZ2VvbWV0cnlfdmFsaWQoY29uc3Qgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtKVxcbit7XFxuK1xcdHU2NCBuYml0cztcXG4rXFxuK1xcdC8qIFdob2xlIHdvcmRzLCBhbmQgYSBiaXQgY291bnQgdGhhdCBjYW4gYmUgdGFrZW4gd2l0aG91dCB3cmFwcGluZy4gKi9cXG4rXFx0aWYgKCFwbS1cXHUwMDNlc2l6ZSB8fCAhSVNfQUxJR05FRChwbS1cXHUwMDNlc2l6ZSwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSB8fFxcbitcXHQgICAgY2hlY2tfbXVsX292ZXJmbG93KHBtLVxcdTAwM2VzaXplLCAodTY0KUJJVFNfUEVSX0JZVEUsIFxcdTAwMjZuYml0cykpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmIChwbS1cXHUwMDNldW5pdF9zaXplIFxcdTAwM2MgUEFHRV9TSVpFIHx8ICFpc19wb3dlcl9vZl8yKHBtLVxcdTAwM2V1bml0X3NpemUpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRyZXR1cm4gSVNfQUxJR05FRChwbS1cXHUwMDNlcGh5c19iYXNlLCBwbS1cXHUwMDNldW5pdF9zaXplKTtcXG4rfVxcbitcXG4rLyogVGhlIHRhYmxlIG1heSBjb21lIGZyb20gYW4gZWFybGllciBrZXJuZWwsIHNvIHZldCBpdCBiZWZvcmUgdXNpbmcgaXQuICovXFxuK3N0YXRpYyBib29sIF9faW5pdFxcbitlZmlfcG9pc29uX3RhYmxlX3ZhbGlkKGNvbnN0IHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSlcXG4re1xcbitcXHRpZiAocG0tXFx1MDAzZXZlcnNpb24gIT0gMSkge1xcbitcXHRcXHRwcl93YXJuKFxcXCJJZ25vcmluZyBwb2lzb25lZC1tZW1vcnkgdGFibGUgd2l0aCB2ZXJzaW9uICV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRwbS1cXHUwMDNldmVyc2lvbik7XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFlZmlfcG9pc29uX2dlb21ldHJ5X3ZhbGlkKHBtKSkge1xcbitcXHRcXHRwcl93YXJuKFxcXCJJZ25vcmluZyBtYWxmb3JtZWQgcG9pc29uZWQtbWVtb3J5IHRhYmxlXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rLypcXG4rICogVmV0IHRoZSBpbmhlcml0ZWQgdGFibGUgYW5kIGhhbmQgaXRzIHBhZ2VzIHRvIG1lbWJsb2NrLCB0aGUgd2F5IHRoZVxcbisgKiB1bmFjY2VwdGVkIG1lbW9yeSB0YWJsZSBpcyBoYW5kbGVkLiBJdCBpcyBFRkkgQUNQSSByZWNsYWltIG1lbW9yeSwgd2hpY2hcXG4rICogYmVjb21lcyBFODIwX1RZUEVfQUNQSSBhbmQgd291bGQgb3RoZXJ3aXNlIHN0YXkgb3V0IG9mIHRoZSBkaXJlY3QgbWFwLCBhbmRcXG4rICogdG91Y2hpbmcgaXQgdGhlbiBmYXVsdHMuIENhbGxlZCBmcm9tIGVmaV9jb25maWdfcGFyc2VfdGFibGVzKCksIHNvXFxuKyAqIGV2ZXJ5dGhpbmcgbGF0ZXIgY2FuIHJlYWNoIGl0IHdpdGggZWZpX3BvaXNvbmVkX21lbW9yeSgpLlxcbisgKi9cXG4rdm9pZCBfX2luaXQgZWZpX3BvaXNvbmVkX21lbW9yeV9yZXNlcnZlKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtO1xcbitcXHRwaHlzX2FkZHJfdCBzdGFydCwgZW5kO1xcbitcXG4rXFx0aWYgKGVmaS5wb2lzb25lZF9tZW1vcnkgPT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUilcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cG0gPSBlYXJseV9tZW1yZW1hcChlZmkucG9pc29uZWRfbWVtb3J5LCBzaXplb2YoKnBtKSk7XFxuK1xcdGlmICghcG0pIHtcXG4rXFx0XFx0cHJfd2FybihcXFwiQ291bGQgbm90IG1hcCBwb2lzb25lZC1tZW1vcnkgdGFibGVcXFxcblxcXCIpO1xcbitcXHRcXHRlZmkucG9pc29uZWRfbWVtb3J5ID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUjtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIWVmaV9wb2lzb25fdGFibGVfdmFsaWQocG0pKSB7XFxuK1xcdFxcdGVmaS5wb2lzb25lZF9tZW1vcnkgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSO1xcbitcXHRcXHRlYXJseV9tZW11bm1hcChwbSwgc2l6ZW9mKCpwbSkpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdHN0YXJ0ID0gUEFHRV9BTElHTl9ET1dOKGVmaS5wb2lzb25lZF9tZW1vcnkpO1xcbitcXHRlbmQgPSBQQUdFX0FMSUdOKGVmaS5wb2lzb25lZF9tZW1vcnkgKyBzaXplb2YoKnBtKSArIHBtLVxcdTAwM2VzaXplKTtcXG4rXFx0ZWFybHlfbWVtdW5tYXAocG0sIHNpemVvZigqcG0pKTtcXG4rXFxuK1xcdG1lbWJsb2NrX2FkZChzdGFydCwgZW5kIC0gc3RhcnQpO1xcbitcXHRtZW1ibG9ja19yZXNlcnZlKHN0YXJ0LCBlbmQgLSBzdGFydCk7XFxuK31cXG4rXFxuKy8qIFRoZSB0YWJsZSwgdmV0dGVkIGF0IHBhcnNlIHRpbWUsIG9yIE5VTEwgaWYgdGhpcyBib290IGhhcyBub25lLiAqL1xcbitzdGF0aWMgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKmVmaV9wb2lzb25lZF9tZW1vcnkodm9pZClcXG4re1xcbitcXHRpZiAoZWZpLnBvaXNvbmVkX21lbW9yeSA9PSBFRklfSU5WQUxJRF9UQUJMRV9BRERSKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdHJldHVybiBwaHlzX3RvX3ZpcnQoZWZpLnBvaXNvbmVkX21lbW9yeSk7XFxuK31cXG4rXFxuKy8qIERvZXMgdGhlIHJhbmdlIGNvdmVyIGEgdW5pdCBhbiBlYXJsaWVyIGtlcm5lbCByZWNvcmRlZCBhcyBiYWQ/ICovXFxuK2Jvb2wgcmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5KHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpXFxuK3tcXG4rXFx0c3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtID0gZWZpX3BvaXNvbmVkX21lbW9yeSgpO1xcbitcXHR1NjQgZmlyc3QsIGxhc3QsIG5iaXRzO1xcbitcXG4rXFx0aWYgKCFwbSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0bmJpdHMgPSBwbS1cXHUwMDNlc2l6ZSAqIEJJVFNfUEVSX0JZVEU7XFxuK1xcbitcXHRpZiAoc3RhcnQgKyBzaXplIFxcdTAwM2M9IHBtLVxcdTAwM2VwaHlzX2Jhc2UpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0aWYgKHN0YXJ0IFxcdTAwM2MgcG0tXFx1MDAzZXBoeXNfYmFzZSlcXG4rXFx0XFx0c3RhcnQgPSBwbS1cXHUwMDNlcGh5c19iYXNlO1xcbitcXG4rXFx0Zmlyc3QgPSAoc3RhcnQgLSBwbS1cXHUwMDNlcGh5c19iYXNlKSAvIHBtLVxcdTAwM2V1bml0X3NpemU7XFxuK1xcdGlmIChmaXJzdCBcXHUwMDNlPSBuYml0cylcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0bGFzdCA9IChzdGFydCArIHNpemUgLSAxIC0gcG0tXFx1MDAzZXBoeXNfYmFzZSkgLyBwbS1cXHUwMDNldW5pdF9zaXplO1xcbitcXHRsYXN0ID0gbWluKGxhc3QsIG5iaXRzIC0gMSk7XFxuK1xcbitcXHRyZXR1cm4gZmluZF9uZXh0X2JpdChwbS1cXHUwMDNlYml0bWFwLCBsYXN0ICsgMSwgZmlyc3QpIFxcdTAwM2M9IGxhc3Q7XFxuK31cXG4rXFxuKy8qXFxuKyAqIEEgYml0IGlzIG5ldmVyIGNsZWFyZWQ6IGl0IHN0YW5kcyBmb3IgYSB3aG9sZSBFRklfUE9JU09OX1VOSVRfU0laRSwgc28gYW5cXG4rICogdW5wb2lzb24gY2Fubm90IHRlbGwgd2hldGhlciB0aGUgdW5pdCBhcyBhIHdob2xlIGlzIGdvb2QgYWdhaW4uXFxuKyAqL1xcbit2b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKVxcbit7XFxuK1xcdHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSA9IGVmaV9wb2lzb25lZF9tZW1vcnkoKTtcXG4rXFx0cGh5c19hZGRyX3QgYWRkciA9IFBGTl9QSFlTKHBmbik7XFxuK1xcdHU2NCB1bml0O1xcbitcXG4rXFx0aWYgKCFwbSB8fCBhZGRyIFxcdTAwM2MgcG0tXFx1MDAzZXBoeXNfYmFzZSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0dW5pdCA9IChhZGRyIC0gcG0tXFx1MDAzZXBoeXNfYmFzZSkgLyBwbS1cXHUwMDNldW5pdF9zaXplO1xcbitcXHRpZiAodW5pdCBcXHUwMDNjIHBtLVxcdTAwM2VzaXplICogQklUU19QRVJfQllURSlcXG4rXFx0XFx0c2V0X2JpdCh1bml0LCBwbS1cXHUwMDNlYml0bWFwKTtcXG4rfVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2VmaS5oIGIvaW5jbHVkZS9saW51eC9lZmkuaFxcbmluZGV4IGMzNTQ0NmEwYjY2ZmEuLjU2NDAyZmRjY2QxMTQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9lZmkuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZWZpLmhcXG5AQCAtMjMsNiArMjMsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHN0b3JlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yYW5nZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcmVib290LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zaXplcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdXVpZC5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9wYWdlLmhcXHUwMDNlXFxuQEAgLTQyMiw2ICs0MjMsNyBAQCB2b2lkIGVmaV9uYXRpdmVfcnVudGltZV9zZXR1cCh2b2lkKTtcXG4gI2RlZmluZSBMSU5VWF9FRklfQ09DT19TRUNSRVRfQVJFQV9HVUlEXFx0XFx0RUZJX0dVSUQoMHhhZGY5NTZhZCwgMHhlOThjLCAweDQ4NGMsICAweGFlLCAweDExLCAweGI1LCAweDFjLCAweDdkLCAweDMzLCAweDY0LCAweDQ3KVxcbiAjZGVmaW5lIExJTlVYX0VGSV9CT09UX01FTU1BUF9HVUlEXFx0XFx0RUZJX0dVSUQoMHg4MDBmNjgzZiwgMHhkMDhiLCAweDQyM2EsICAweGEyLCAweDkzLCAweDk2LCAweDVjLCAweDNjLCAweDZmLCAweGUyLCAweGI0KVxcbiAjZGVmaW5lIExJTlVYX0VGSV9VTkFDQ0VQVEVEX01FTV9UQUJMRV9HVUlEXFx0RUZJX0dVSUQoMHhkNWQxZGUzYywgMHgxMDVjLCAweDQ0ZjksICAweDllLCAweGE5LCAweGJjLCAweGVmLCAweDk4LCAweDEyLCAweDAwLCAweDMxKVxcbisjZGVmaW5lIExJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRFxcdEVGSV9HVUlEKDB4YWY4MjhhMTUsIDB4MGVmNCwgMHg0MzlhLCAgMHhiOCwgMHg2YSwgMHhkNiwgMHhkNiwgMHg5ZSwgMHhhZiwgMHhiYSwgMHhmYSlcXG4gXFxuICNkZWZpbmUgUklTQ1ZfRUZJX0JPT1RfUFJPVE9DT0xfR1VJRFxcdFxcdEVGSV9HVUlEKDB4Y2NkMTVmZWMsIDB4NmY3MywgMHg0ZWVjLCAgMHg4MywgMHg5NSwgMHgzZSwgMHg2OSwgMHhlNCwgMHhiOSwgMHg0MCwgMHhiZilcXG4gXFxuQEAgLTY1MCw2ICs2NTIsNyBAQCBleHRlcm4gc3RydWN0IGVmaSB7XFxuIFxcdHVuc2lnbmVkIGxvbmdcXHRcXHRcXHRtb2t2YXJfdGFibGU7XFx0XFx0LyogTU9LIHZhcmlhYmxlIGNvbmZpZyB0YWJsZSAqL1xcbiBcXHR1bnNpZ25lZCBsb25nXFx0XFx0XFx0Y29jb19zZWNyZXQ7XFx0XFx0LyogQ29uZmlkZW50aWFsIGNvbXB1dGluZyBzZWNyZXQgdGFibGUgKi9cXG4gXFx0dW5zaWduZWQgbG9uZ1xcdFxcdFxcdHVuYWNjZXB0ZWQ7XFx0XFx0LyogVW5hY2NlcHRlZCBtZW1vcnkgdGFibGUgKi9cXG4rXFx0dW5zaWduZWQgbG9uZ1xcdFxcdFxcdHBvaXNvbmVkX21lbW9yeTtcXHQvKiBIYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgdGFibGUgKi9cXG4gXFxuIFxcdGVmaV9nZXRfdGltZV90XFx0XFx0XFx0KmdldF90aW1lO1xcbiBcXHRlZmlfc2V0X3RpbWVfdFxcdFxcdFxcdCpzZXRfdGltZTtcXG5AQCAtMTI3Miw2ICsxMjc1LDI1IEBAIHN0cnVjdCBsaW51eF9lZmlfbWVtcmVzZXJ2ZSB7XFxuICNkZWZpbmUgRUZJX01FTVJFU0VSVkVfQ09VTlQoc2l6ZSkgKCgoc2l6ZSkgLSBzaXplb2Yoc3RydWN0IGxpbnV4X2VmaV9tZW1yZXNlcnZlKSkgXFxcXFxcbiBcXHQvIHNpemVvZl9maWVsZChzdHJ1Y3QgbGludXhfZWZpX21lbXJlc2VydmUsIGVudHJ5WzBdKSlcXG4gXFxuKy8qIEJpdCBOIGNvdmVycyB0aGUgdW5pdCBhdCBAcGh5c19iYXNlICsgTiAqIEB1bml0X3NpemUuICovXFxuK3N0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5IHtcXG4rXFx0dTMyXFx0XFx0dmVyc2lvbjtcXG4rXFx0dTMyXFx0XFx0dW5pdF9zaXplO1xcdC8qIGJ5dGVzIG9mIHBoeXMgc3BhY2UgcGVyIGJpdG1hcCBiaXQgKi9cXG4rXFx0dTY0XFx0XFx0cGh5c19iYXNlO1xcdC8qIGFkZHJlc3MgdGhlIGZpcnN0IGJpdCBjb3ZlcnMgKi9cXG4rXFx0dTY0XFx0XFx0c2l6ZTtcXHRcXHQvKiBiaXRtYXAgc2l6ZSBpbiBieXRlcyAqL1xcbitcXHR1bnNpZ25lZCBsb25nXFx0Yml0bWFwW107XFxuK307XFxuK1xcbisjZGVmaW5lIEVGSV9QT0lTT05fVU5JVF9TSVpFXFx0U1pfMk1cXG4rXFxuKyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWVxcbit2b2lkIF9faW5pdCBlZmlfcG9pc29uZWRfbWVtb3J5X3Jlc2VydmUodm9pZCk7XFxuK3ZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pO1xcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIHZvaWQgZWZpX3BvaXNvbmVkX21lbW9yeV9yZXNlcnZlKHZvaWQpIHsgfVxcbitzdGF0aWMgaW5saW5lIHZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pIHsgfVxcbisjZW5kaWZcXG4rXFxuIHZvaWQgX19pbml0IGVmaV9hcmNoX21lbV9yZXNlcnZlKHBoeXNfYWRkcl90IGFkZHIsIHU2NCBzaXplKTtcXG4gXFxuIC8qXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaFxcbmluZGV4IDI3NGZhODgwMDc3YzUuLjlkOWYyZThmZGMxMzYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tbS5oXFxuQEAgLTUyMjUsNiArNTIyNSw3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG1lbW9yeV9mYWlsdXJlX2F0dHJfZ3JvdXA7XFxuIGV4dGVybiB2b2lkIG1lbW9yeV9mYWlsdXJlX3F1ZXVlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpO1xcbiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pO1xcbiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSk7XFxuK3ZvaWQgX19tZW1pbml0IGh3cG9pc29uX2Jvb3RfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuIHBoeXNfYWRkcl90IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpO1xcbiBwaHlzX2FkZHJfdCByYW5nZV9sYXN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpO1xcbiAjZWxzZVxcbkBAIC01MjMyLDYgKzUyMzMsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbW9yeV9mYWlsdXJlX3F1ZXVlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXFxuIHtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSB2b2lkIGh3cG9pc29uX2Jvb3RfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4re1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX2luYyh1bnNpZ25lZCBsb25nIHBmbilcXG4ge1xcbiB9XFxuQEAgLTUzODcsNiArNTM5MiwyMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcGZuX2lzX3VuYWNjZXB0ZWRfbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxcbiBcXHRyZXR1cm4gcmFuZ2VfY29udGFpbnNfdW5hY2NlcHRlZF9tZW1vcnkocGZuIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQsIFBBR0VfU0laRSk7XFxuIH1cXG4gXFxuKyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWVxcbitcXG4rYm9vbCByYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnkocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7XFxuK1xcbisjZWxzZVxcbitcXG4rc3RhdGljIGlubGluZSBib29sIHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeShwaHlzX2FkZHJfdCBzdGFydCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIHNpemUpXFxuK3tcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbisjZW5kaWZcXG4rXFxuIHZvaWQgdm1hX3BndGFibGVfd2Fsa19iZWdpbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuIHZvaWQgdm1hX3BndGFibGVfd2Fsa19lbmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmNcXG5pbmRleCBhMmNhOGRmNTAxY2FlLi5mNmFmZGIyYTg5YTk0IDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmNcXG4rKysgYi9tbS9tZW1vcnktZmFpbHVyZS5jXFxuQEAgLTQzLDYgKzQzLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL3NpZ25hbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvdGFzay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGF4LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9lZmkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tzbS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcm1hcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxuQEAgLTEzNiw2ICsxMzcsMjEgQEAgcGh5c19hZGRyX3QgcmFuZ2VfbGFzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKVxcbiBcXHRyZXR1cm4gcmFuZ2VfaHdwb2lzb24oc3RhcnQsIHNpemUsIGZhbHNlKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgdXBkYXRlX3Blcl9ub2RlX21mX3N0YXRzKHVuc2lnbmVkIGxvbmcgcGZuLCBlbnVtIG1mX3Jlc3VsdCByZXN1bHQpO1xcbitcXG4rLyogTm90IG51bV9wb2lzb25lZF9wYWdlc19pbmMoKTogaXRzIHBlciBibG9jayBoYWxmIGRpdmlkZXMgYnkgemVybyB0aGlzIGVhcmx5LiAqL1xcbit2b2lkIF9fbWVtaW5pdCBod3BvaXNvbl9ib290X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuK3tcXG4rXFx0aWYgKFBhZ2VIV1BvaXNvbihwYWdlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0U2V0UGFnZUhXUG9pc29uKHBhZ2UpO1xcbitcXHRzZXRfcGFnZV9jb3VudChwYWdlLCAxKTtcXG4rXFx0LyogVGhlIHBhZ2UgaGFzIGJlZW4gY29tcGxldGVseSBpc29sYXRlZCA9PSBNRl9SRUNPVkVSRUQgKi9cXG4rXFx0dXBkYXRlX3Blcl9ub2RlX21mX3N0YXRzKHBhZ2VfdG9fcGZuKHBhZ2UpLCBNRl9SRUNPVkVSRUQpO1xcbitcXHRhdG9taWNfbG9uZ19pbmMoXFx1MDAyNm51bV9wb2lzb25lZF9wYWdlcyk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBNRl9BVFRSX1JPIC0gQ3JlYXRlIHN5c2ZzIGVudHJ5IGZvciBlYWNoIG1lbW9yeSBmYWlsdXJlIHN0YXRpc3RpY3MuXFxuICAqIEBfbmFtZTogbmFtZSBvZiB0aGUgZmlsZSBpbiB0aGUgcGVyIE5VTUEgc3lzZnMgZGlyZWN0b3J5LlxcbkBAIC0xMzI2LDYgKzEzNDIsOCBAQCBzdGF0aWMgaW50IGFjdGlvbl9yZXN1bHQodW5zaWduZWQgbG9uZyBwZm4sIGVudW0gbWZfYWN0aW9uX3BhZ2VfdHlwZSB0eXBlLFxcbiBcXHRpZiAodHlwZSAhPSBNRl9NU0dfQUxSRUFEWV9QT0lTT05FRCBcXHUwMDI2XFx1MDAyNiB0eXBlICE9IE1GX01TR19QRk5fTUFQKSB7XFxuIFxcdFxcdG51bV9wb2lzb25lZF9wYWdlc19pbmMocGZuKTtcXG4gXFx0XFx0dXBkYXRlX3Blcl9ub2RlX21mX3N0YXRzKHBmbiwgcmVzdWx0KTtcXG4rXFx0XFx0LyogT25seSBoYXJkIG9mZmxpbmVzIGFyZSBjYXJyaWVkIG92ZXIgdG8gdGhlIG5leHQga2VybmVsLiAqL1xcbitcXHRcXHRlZmlfaHdwb2lzb25fcmVjb3JkX3BmbihwZm4pO1xcbiBcXHR9XFxuIFxcbiBcXHRwcl9lcnIoXFxcIiUjbHg6IHJlY292ZXJ5IGFjdGlvbiBmb3IgJXM6ICVzXFxcXG5cXFwiLFxcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcXG5pbmRleCA0MDQ4OTZiNTMwMDNlLi45ZTJjZTgzM2ZkNDA5IDEwMDY0NFxcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xcbisrKyBiL21tL3BhZ2VfYWxsb2MuY1xcbkBAIC0xNTc5LDYgKzE1NzksMTkgQEAgc3RhdGljIHZvaWQgX19mcmVlX3BhZ2VzX29rKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuIFxcdFxcdGZyZWVfb25lX3BhZ2Uoem9uZSwgcGFnZSwgcGZuLCBvcmRlciwgZnBpX2ZsYWdzKTtcXG4gfVxcbiBcXG4rLyogRmxhZyB0aGUgZnJhbWVzIGFuIGVhcmxpZXIga2VybmVsIHJlY29yZGVkIGFzIGJhZC4gKi9cXG4rc3RhdGljIHZvaWQgX19tZW1pbml0IHBvaXNvbl9ibG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgaSwgbnJfcGFnZXMgPSAxVUwgXFx1MDAzY1xcdTAwM2Mgb3JkZXI7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfcGFnZXM7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgcGFnZSAqcCA9IHBhZ2UgKyBpO1xcbitcXG4rXFx0XFx0aWYgKHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeShwYWdlX3RvX3BoeXMocCksIFBBR0VfU0laRSkpXFxuK1xcdFxcdFxcdGh3cG9pc29uX2Jvb3RfcGFnZShwKTtcXG4rXFx0fVxcbit9XFxuK1xcbiB2b2lkIF9fbWVtaW5pdCBfX2ZyZWVfcGFnZXNfY29yZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxcbiBcXHRcXHRlbnVtIG1lbWluaXRfY29udGV4dCBjb250ZXh0KVxcbiB7XFxuQEAgLTE2MTMsNiArMTYyNiwxOCBAQCB2b2lkIF9fbWVtaW5pdCBfX2ZyZWVfcGFnZXNfY29yZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxcbiBcXHRcXHRhdG9taWNfbG9uZ19hZGQobnJfcGFnZXMsIFxcdTAwMjZwYWdlX3pvbmUocGFnZSktXFx1MDAzZW1hbmFnZWRfcGFnZXMpO1xcbiBcXHR9XFxuIFxcbitcXHQvKiBGaXJzdDogYSBibG9jayBwYXJrZWQgYnkgX19mcmVlX3VuYWNjZXB0ZWQoKSBuZXZlciByZXR1cm5zIGhlcmUuICovXFxuK1xcdGlmIChyYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnkocGFnZV90b19waHlzKHBhZ2UpLFxcbitcXHRcXHRcXHRcXHRcXHQgICBQQUdFX1NJWkUgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpKSB7XFxuK1xcdFxcdHBvaXNvbl9ibG9jayhwYWdlLCBvcmRlcik7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRPRE86IGZyZWUgdGhlIGZyYW1lcyBpbiB0aGUgYmxvY2sgdGhhdCBhcmUgbm90IHBvaXNvbmVkLlxcbitcXHRcXHQgKiBUaGV5IHN0YXkgb3V0IG9mIHRoZSBhbGxvY2F0b3IgYW5kIHN0aWxsIGNvdW50IGluXFxuK1xcdFxcdCAqIG1hbmFnZWRfcGFnZXMsIHNvIGEgdW5pdCBjb3N0cyB1cCB0byBhIGJsb2NrLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAocGFnZV9jb250YWluc191bmFjY2VwdGVkKHBhZ2UsIG9yZGVyKSkge1xcbiBcXHRcXHRpZiAob3JkZXIgPT0gTUFYX1BBR0VfT1JERVIgXFx1MDAyNlxcdTAwMjYgX19mcmVlX3VuYWNjZXB0ZWQocGFnZSkpXFxuIFxcdFxcdFxcdHJldHVybjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTQ6MDk6MDYuNzQ0Mzk1ODExWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2MzQwMjA2MjY0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFRklfUE9JU09ORURfTUVNT1JZXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiRUZJX1NUVUJcIixcbiAgICBcIkVGSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImVmaV9od3BvaXNvbl9yZWNvcmRfcGZuXCIsXG4gICAgXCJyYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnlcIixcbiAgICBcImh3cG9pc29uX2Jvb3RfcGFnZVwiLFxuICAgIFwibWVtb3J5X2ZhaWx1cmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRyYWNraW5nIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSBhY3Jvc3Mga2V4ZWMgdmlhIGFuIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlIChDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWSkuIEl0IGludHJvZHVjZXMgaG9va3MgaW4gY29yZSBtZW1vcnktZmFpbHVyZSBoYW5kbGluZyAoZWZpX2h3cG9pc29uX3JlY29yZF9wZm4gaW4gYWN0aW9uX3Jlc3VsdCkgYW5kIG1lbW9yeSBpbml0aWFsaXphdGlvbi9ob3RwbHVnIChfX2ZyZWVfcGFnZXNfY29yZSwgaHdwb2lzb25fYm9vdF9wYWdlKS4gVGhlc2UgcGF0aHMgYXJlIHJlYWNoYWJsZSBhdCBydW50aW1lIHZpYSBtZW1vcnkgZmFpbHVyZSBtZWNoYW5pc21zIHN1Y2ggYXMgbWFkdmlzZShNQURWX0hXUE9JU09OKSBhbmQgbWVtb3J5IGhvdHBsdWdnaW5nIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB3aXRoIEVGSS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhNzljYmIxMDVjNTk4MTdhZjMyYTIyYTAwMTcxZjdiYjkxNDY3NjU0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAxNDowOTowNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmkuYyBiL2FyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmkuY1xuaW5kZXggMGMzOWFkYjk2YjkxMi4uMmIzN2I5NmEzNmUwOSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmkuY1xuKysrIGIvYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaS5jXG5AQCAtOTMsNiArOTMsOSBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyAqIGNvbnN0IGVmaV90YWJsZXNbXSA9IHtcbiAjaWZkZWYgQ09ORklHX1VOQUNDRVBURURfTUVNT1JZXG4gXHRcdTAwMjZlZmkudW5hY2NlcHRlZCxcbiAjZW5kaWZcbisjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllcbitcdFx1MDAyNmVmaS5wb2lzb25lZF9tZW1vcnksXG4rI2VuZGlmXG4gfTtcbiBcbiB1NjQgZWZpX3NldHVwO1x0XHQvKiBlZmkgc2V0dXBfZGF0YSBwaHlzaWNhbCBhZGRyZXNzICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWdcbmluZGV4IDI5ZTA3MjkyOTlmNWIuLmFhZmNkNDFiYzAwNjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnXG4rKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnXG5AQCAtMjYzLDYgKzI2MywxNCBAQCBjb25maWcgRUZJX0NPQ09fU0VDUkVUXG4gXHQgIHZpcnQvY29jby9lZmlfc2VjcmV0IG1vZHVsZSB0byBhY2Nlc3MgdGhlIHNlY3JldHMsIHdoaWNoIGluIHR1cm5cbiBcdCAgYWxsb3dzIHVzZXJzcGFjZSBwcm9ncmFtcyB0byBhY2Nlc3MgdGhlIGluamVjdGVkIHNlY3JldHMuXG4gXG4rY29uZmlnIEVGSV9QT0lTT05FRF9NRU1PUllcbitcdGRlZl9ib29sIHlcbitcdGRlcGVuZHMgb24gRUZJX1NUVUIgXHUwMDI2XHUwMDI2IE1FTU9SWV9GQUlMVVJFIFx1MDAyNlx1MDAyNiA2NEJJVFxuK1x0aGVscFxuK1x0ICBSZWNvcmQgcGFnZSBmcmFtZXMgdGhhdCBhcmUgaGFyZHdhcmUtcG9pc29uZWQgd2hpbGUgdGhpcyBrZXJuZWwgcnVuc1xuK1x0ICBpbnRvIGFuIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlLCBhbmQgaG9ub3IgdGhhdCB0YWJsZSBlYXJseSBvbiB0aGVcbitcdCAgbmV4dCBrZXJuZWwgc28gYSBrZXhlYyBkb2VzIG5vdCBoYW5kIGtub3duLWJhZCBSQU0gYmFjayBvdXQuXG4rXG4gY29uZmlnIE9WTUZfREVCVUdfTE9HXG4gXHRib29sIFwiRXhwb3NlIE9WTUYgZmlybXdhcmUgZGVidWcgbG9nIHZpYSBzeXNmc1wiXG4gXHRkZXBlbmRzIG9uIEVGSVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGVcbmluZGV4IDhlZmJjZjY5OWU0ZmYuLjA1ZDBhNDkwOTIzZTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9NYWtlZmlsZVxuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGVcbkBAIC00Myw0ICs0Myw1IEBAIG9iai0kKENPTkZJR19FRklfRUFSTFlDT04pXHRcdCs9IGVhcmx5Y29uLm9cbiBvYmotJChDT05GSUdfVUVGSV9DUEVSX0FSTSlcdFx0Kz0gY3Blci1hcm0ub1xuIG9iai0kKENPTkZJR19VRUZJX0NQRVJfWDg2KVx0XHQrPSBjcGVyLXg4Ni5vXG4gb2JqLSQoQ09ORklHX1VOQUNDRVBURURfTUVNT1JZKVx0XHQrPSB1bmFjY2VwdGVkX21lbW9yeS5vXG4rb2JqLSQoQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUlkpXHQrPSBwb2lzb24ub1xuIG9iai0kKENPTkZJR19URUVfU1RNTV9FRkkpXHRcdCs9IHN0bW0vdGVlX3N0bW1fZWZpLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jXG5pbmRleCA2ZDk4N2Q3Zjk3NzgxLi41NWIyZWU1M2ZjMjY4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmNcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jXG5AQCAtNTUsNiArNTUsOSBAQCBzdHJ1Y3QgZWZpIF9fcmVhZF9tb3N0bHkgZWZpID0ge1xuICNpZmRlZiBDT05GSUdfVU5BQ0NFUFRFRF9NRU1PUllcbiBcdC51bmFjY2VwdGVkXHRcdD0gRUZJX0lOVkFMSURfVEFCTEVfQUREUixcbiAjZW5kaWZcbisjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllcbitcdC5wb2lzb25lZF9tZW1vcnlcdD0gRUZJX0lOVkFMSURfVEFCTEVfQUREUixcbisjZW5kaWZcbiB9O1xuIEVYUE9SVF9TWU1CT0woZWZpKTtcbiBcbkBAIC02NzcsNiArNjgwLDkgQEAgc3RhdGljIGNvbnN0IGVmaV9jb25maWdfdGFibGVfdHlwZV90IGNvbW1vbl90YWJsZXNbXSBfX2luaXRjb25zdCA9IHtcbiAjaWZkZWYgQ09ORklHX1VOQUNDRVBURURfTUVNT1JZXG4gXHR7TElOVVhfRUZJX1VOQUNDRVBURURfTUVNX1RBQkxFX0dVSUQsXHRcdTAwMjZlZmkudW5hY2NlcHRlZCxcdFwiVW5hY2NlcHRlZFwiXHR9LFxuICNlbmRpZlxuKyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWVxuK1x0e0xJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRCxcdFx1MDAyNmVmaS5wb2lzb25lZF9tZW1vcnksXHRcIlBPSVNPTlwiXHR9LFxuKyNlbmRpZlxuICNpZmRlZiBDT05GSUdfRUZJX0dFTkVSSUNfU1RVQlxuIFx0e0xJTlVYX0VGSV9QUklNQVJZX0RJU1BMQVlfVEFCTEVfR1VJRCxcdFx1MDAyNnByaW1hcnlfZGlzcGxheV90YWJsZVx0XHRcdH0sXG4gI2VuZGlmXG5AQCAtODc3LDYgKzg4Myw4IEBAIGludCBfX2luaXQgZWZpX2NvbmZpZ19wYXJzZV90YWJsZXMoY29uc3QgZWZpX2NvbmZpZ190YWJsZV90ICpjb25maWdfdGFibGVzLFxuIFx0XHR9XG4gXHR9XG4gXG4rXHRlZmlfcG9pc29uZWRfbWVtb3J5X3Jlc2VydmUoKTtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuY1xuaW5kZXggNDhmOTNmNzc1OGU5ZS4uNWNiZTY3NTQ5MTMzMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmNcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmNcbkBAIC03NzQsMyArNzc0LDEwMyBAQCB2b2lkIGVmaV9yZW1hcF9pbWFnZSh1bnNpZ25lZCBsb25nIGltYWdlX2Jhc2UsIHVuc2lnbmVkIGFsbG9jX3NpemUsXG4gXHRcdFx0ZWZpX3dhcm4oXCJGYWlsZWQgdG8gcmVtYXAgZGF0YSByZWdpb24gbm9uLWV4ZWN1dGFibGVcXG5cIik7XG4gXHR9XG4gfVxuK1xuKyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWVxuKy8qXG4rICogRmluZCB0aGUgYmFzZSBhbmQgdG9wIG9mIHRoZSBtZW1vcnksIHNvLCB3ZSBjYW4gY3JlYXRlIHRoZSBiaXRtYXAgZm9yXG4rICogdGhlIGZ1bGwgcmFuZ2UuXG4rICovXG4rc3RhdGljIGVmaV9zdGF0dXNfdCBlZmlfZ2V0X3JhbV9yYW5nZSh1NjQgKmJhc2UsIHU2NCAqdG9wKVxuK3tcbitcdHN0cnVjdCBlZmlfYm9vdF9tZW1tYXAgKm1hcCBfX2ZyZWUoZWZpX3Bvb2wpID0gTlVMTDtcbitcdHU2NCByYW1fYmFzZSA9IFVMTE9OR19NQVgsIHJhbV90b3AgPSAwO1xuK1x0ZWZpX3N0YXR1c190IHN0YXR1cztcbitcdGludCBpLCBucl9kZXNjO1xuK1xuK1x0c3RhdHVzID0gZWZpX2dldF9tZW1vcnlfbWFwKFx1MDAyNm1hcCwgZmFsc2UpO1xuK1x0aWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUylcbitcdFx0cmV0dXJuIHN0YXR1cztcbitcbitcdG5yX2Rlc2MgPSBtYXAtXHUwMDNlbWFwX3NpemUgLyBtYXAtXHUwMDNlZGVzY19zaXplO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfZGVzYzsgaSsrKSB7XG4rXHRcdGVmaV9tZW1vcnlfZGVzY190ICpkO1xuK1xuK1x0XHRkID0gZWZpX21lbWRlc2NfcHRyKCh1bnNpZ25lZCBsb25nKW1hcC1cdTAwM2VtYXAsIG1hcC1cdTAwM2VkZXNjX3NpemUsIGkpO1xuK1x0XHRyYW1fYmFzZSA9IG1pbihyYW1fYmFzZSwgZC1cdTAwM2VwaHlzX2FkZHIpO1xuK1x0XHRyYW1fdG9wID0gbWF4KHJhbV90b3AsXG4rXHRcdFx0ICAgICAgZC1cdTAwM2VwaHlzX2FkZHIgKyBkLVx1MDAzZW51bV9wYWdlcyAqIEVGSV9QQUdFX1NJWkUpO1xuK1x0fVxuK1x0aWYgKCFyYW1fdG9wIHx8IHJhbV9iYXNlID09IFVMTE9OR19NQVgpXG4rXHRcdHJldHVybiBFRklfTk9UX0ZPVU5EO1xuK1xuK1x0KmJhc2UgPSByb3VuZF9kb3duKHJhbV9iYXNlLCBFRklfUE9JU09OX1VOSVRfU0laRSk7XG4rXHQqdG9wID0gcm91bmRfdXAocmFtX3RvcCwgRUZJX1BPSVNPTl9VTklUX1NJWkUpO1xuK1xuK1x0cmV0dXJuIEVGSV9TVUNDRVNTO1xuK31cbitcbisvKiBUaGUgc2l6ZSBvZiB0aGUgYml0bWFwICovXG4rc3RhdGljIHU2NCBlZmlfcG9pc29uX2JpdG1hcF9zaXplKHU2NCBzcGFuKVxuK3tcbitcdHU2NCBieXRlcyA9IERJVl9ST1VORF9VUChESVZfUk9VTkRfVVAoc3BhbiwgRUZJX1BPSVNPTl9VTklUX1NJWkUpLFxuK1x0XHRcdFx0IEJJVFNfUEVSX0JZVEUpO1xuK1xuK1x0cmV0dXJuIHJvdW5kX3VwKGJ5dGVzLCBzaXplb2YodW5zaWduZWQgbG9uZykpO1xuK31cbitcbitzdGF0aWMgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKmVmaV9wb2lzb25fYWxsb2ModTY0IHBoeXNfYmFzZSxcbitcdFx0XHRcdFx0XHRcdCAgdTY0IGJpdG1hcF9zaXplKVxuK3tcbitcdHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTtcbitcdGVmaV9zdGF0dXNfdCBzdGF0dXM7XG4rXG4rXHRzdGF0dXMgPSBlZmlfYnNfY2FsbChhbGxvY2F0ZV9wb29sLCBFRklfQUNQSV9SRUNMQUlNX01FTU9SWSxcbitcdFx0XHQgICAgIHNpemVvZigqcG0pICsgYml0bWFwX3NpemUsICh2b2lkICoqKVx1MDAyNnBtKTtcbitcdGlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0cG0tXHUwMDNldmVyc2lvbiA9IDE7XG4rXHRwbS1cdTAwM2V1bml0X3NpemUgPSBFRklfUE9JU09OX1VOSVRfU0laRTtcbitcdHBtLVx1MDAzZXBoeXNfYmFzZSA9IHBoeXNfYmFzZTtcbitcdHBtLVx1MDAzZXNpemUgPSBiaXRtYXBfc2l6ZTtcbitcdG1lbXNldChwbS1cdTAwM2ViaXRtYXAsIDAsIGJpdG1hcF9zaXplKTtcbitcbitcdHJldHVybiBwbTtcbit9XG4rXG4rLyogVGhpcyBuZWVkcyB0byBiZSBkb25lIHdoaWxlIGJvb3Qgc2VydmljZSBpcyBzdGlsbCBhY3RpdmUgKi9cbit2b2lkIGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKHZvaWQpXG4re1xuK1x0ZWZpX2d1aWRfdCBwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCA9IExJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRDtcbitcdHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTtcbitcdHU2NCByYW1fYmFzZSwgcmFtX3RvcCwgYml0bWFwX3NpemU7XG4rXHRlZmlfc3RhdHVzX3Qgc3RhdHVzO1xuK1xuK1x0LyogQSB0YWJsZSBpbnN0YWxsZWQgYnkgYW4gZWFybGllciBib290IHJpZGVzIHRoZSBzeXN0ZW0gdGFibGUgYWNyb3NzIGtleGVjLiAqL1xuK1x0cG0gPSBnZXRfZWZpX2NvbmZpZ190YWJsZShwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCk7XG4rXHRpZiAocG0pIHtcbitcdFx0aWYgKHBtLVx1MDAzZXZlcnNpb24gIT0gMSlcbitcdFx0XHRlZmlfZXJyKFwiVW5rbm93biB2ZXJzaW9uIG9mIHBvaXNvbmVkLW1lbW9yeSB0YWJsZVxcblwiKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0aWYgKGVmaV9nZXRfcmFtX3JhbmdlKFx1MDAyNnJhbV9iYXNlLCBcdTAwMjZyYW1fdG9wKSAhPSBFRklfU1VDQ0VTUykge1xuK1x0XHRlZmlfZXJyKFwiRmFpbGVkIHRvIHNpemUgdGhlIHBvaXNvbmVkLW1lbW9yeSB0YWJsZSFcXG5cIik7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGJpdG1hcF9zaXplID0gZWZpX3BvaXNvbl9iaXRtYXBfc2l6ZShyYW1fdG9wIC0gcmFtX2Jhc2UpO1xuK1x0cG0gPSBlZmlfcG9pc29uX2FsbG9jKHJhbV9iYXNlLCBiaXRtYXBfc2l6ZSk7XG4rXHRpZiAoIXBtKSB7XG4rXHRcdGVmaV9lcnIoXCJGYWlsZWQgdG8gYWxsb2NhdGUgcG9pc29uZWQtbWVtb3J5IHRhYmxlIVxcblwiKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0c3RhdHVzID0gZWZpX2JzX2NhbGwoaW5zdGFsbF9jb25maWd1cmF0aW9uX3RhYmxlLFxuK1x0XHRcdCAgICAgXHUwMDI2cG9pc29uZWRfbWVtb3J5X3RhYmxlX2d1aWQsIHBtKTtcbitcdGlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIHtcbitcdFx0ZWZpX2JzX2NhbGwoZnJlZV9wb29sLCBwbSk7XG4rXHRcdGVmaV9lcnIoXCJGYWlsZWQgdG8gaW5zdGFsbCBwb2lzb25lZC1tZW1vcnkgY29uZmlnIHRhYmxlIVxcblwiKTtcbitcdH1cbit9XG4rI2VuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jXG5pbmRleCAyMzVjOTczOGRhMmQ2Li4yMmEzMTVlMjgxNGExIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jXG4rKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmNcbkBAIC0xNzksNiArMTc5LDcgQEAgZWZpX3N0YXR1c190IGVmaV9zdHViX2NvbW1vbihlZmlfaGFuZGxlX3QgaGFuZGxlLFxuIFx0XHRcdCBFRklfUlRfU1VQUE9SVEVEX1NFVF9WSVJUVUFMX0FERFJFU1NfTUFQKTtcbiBcbiBcdGluc3RhbGxfbWVtcmVzZXJ2ZV90YWJsZSgpO1xuK1x0aW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUoKTtcbiBcbiBcdHN0YXR1cyA9IGVmaV9ib290X2tlcm5lbChoYW5kbGUsIGltYWdlLCBpbWFnZV9hZGRyLCBjbWRsaW5lX3B0cik7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmggYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaFxuaW5kZXggZmQ5MWZjMTVlYzgxMC4uNDQ0MzY4NjljNGVmZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oXG4rKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaFxuQEAgLTExNjksNiArMTE2OSwxMiBAQCBlZmlfZW5hYmxlX3Jlc2V0X2F0dGFja19taXRpZ2F0aW9uKHZvaWQpIHsgfVxuIFxuIHZvaWQgZWZpX3JldHJpZXZlX2V2ZW50bG9nKHZvaWQpO1xuIFxuKyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWVxuK3ZvaWQgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUodm9pZCk7XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIHZvaWQgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUodm9pZCkgeyB9XG4rI2VuZGlmXG4rXG4gc3RydWN0IHN5c2ZiX2Rpc3BsYXlfaW5mbyAqYWxsb2NfcHJpbWFyeV9kaXNwbGF5KHZvaWQpO1xuIHN0cnVjdCBzeXNmYl9kaXNwbGF5X2luZm8gKl9fYWxsb2NfcHJpbWFyeV9kaXNwbGF5KHZvaWQpO1xuIHZvaWQgZnJlZV9wcmltYXJ5X2Rpc3BsYXkoc3RydWN0IHN5c2ZiX2Rpc3BsYXlfaW5mbyAqZHB5KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmNcbmluZGV4IDBiYWUwZjA2YjY3NjMuLjMxMzYxMzJiOTYyOGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmNcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuY1xuQEAgLTEwMjQsNiArMTAyNCw4IEBAIHZvaWQgX19ub3JldHVybiBlZmlfc3R1Yl9lbnRyeShlZmlfaGFuZGxlX3QgaGFuZGxlLFxuIFxuIFx0c2V0dXBfdW5hY2NlcHRlZF9tZW1vcnkoKTtcbiBcbitcdGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKCk7XG4rXG4gXHRzdGF0dXMgPSBleGl0X2Jvb3QoYm9vdF9wYXJhbXMsIGhhbmRsZSk7XG4gXHRpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7XG4gXHRcdGVmaV9lcnIoXCJleGl0X2Jvb3QoKSBmYWlsZWQhXFxuXCIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5lMTZkNDNmNDQzOGVlXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uY1xuQEAgLTAsMCArMSwxNDEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rLypcbisgKiBSdW50aW1lIHNpZGUgb2YgdGhlIExJTlVYX0VGSV9QT0lTT05FRF9NRU1PUlkgdGFibGU6IG9uZSBiaXQgcGVyXG4rICogRUZJX1BPSVNPTl9VTklUX1NJWkUsIHNldCBoZXJlIGFzIGZyYW1lcyBnbyBiYWQsIGhvbm9yZWQgYnkgdGhlIG5leHQga2VybmVsLlxuKyAqXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBCcmVubyBMZWl0YW8gXHUwMDNjbGVpdGFvQGRlYmlhbi5vcmdcdTAwM2VcbisgKi9cbitcbisjZGVmaW5lIHByX2ZtdChmbXQpIFwiZWZpOiBcIiBmbXRcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRtYXAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2VmaS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xvZzIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWJsb2NrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvb3ZlcmZsb3cuaFx1MDAzZVxuK1xuK3N0YXRpYyBib29sIF9faW5pdFxuK2VmaV9wb2lzb25fZ2VvbWV0cnlfdmFsaWQoY29uc3Qgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtKVxuK3tcbitcdHU2NCBuYml0cztcbitcbitcdC8qIFdob2xlIHdvcmRzLCBhbmQgYSBiaXQgY291bnQgdGhhdCBjYW4gYmUgdGFrZW4gd2l0aG91dCB3cmFwcGluZy4gKi9cbitcdGlmICghcG0tXHUwMDNlc2l6ZSB8fCAhSVNfQUxJR05FRChwbS1cdTAwM2VzaXplLCBzaXplb2YodW5zaWduZWQgbG9uZykpIHx8XG4rXHQgICAgY2hlY2tfbXVsX292ZXJmbG93KHBtLVx1MDAzZXNpemUsICh1NjQpQklUU19QRVJfQllURSwgXHUwMDI2bmJpdHMpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAocG0tXHUwMDNldW5pdF9zaXplIFx1MDAzYyBQQUdFX1NJWkUgfHwgIWlzX3Bvd2VyX29mXzIocG0tXHUwMDNldW5pdF9zaXplKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cmV0dXJuIElTX0FMSUdORUQocG0tXHUwMDNlcGh5c19iYXNlLCBwbS1cdTAwM2V1bml0X3NpemUpO1xuK31cbitcbisvKiBUaGUgdGFibGUgbWF5IGNvbWUgZnJvbSBhbiBlYXJsaWVyIGtlcm5lbCwgc28gdmV0IGl0IGJlZm9yZSB1c2luZyBpdC4gKi9cbitzdGF0aWMgYm9vbCBfX2luaXRcbitlZmlfcG9pc29uX3RhYmxlX3ZhbGlkKGNvbnN0IHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSlcbit7XG4rXHRpZiAocG0tXHUwMDNldmVyc2lvbiAhPSAxKSB7XG4rXHRcdHByX3dhcm4oXCJJZ25vcmluZyBwb2lzb25lZC1tZW1vcnkgdGFibGUgd2l0aCB2ZXJzaW9uICV1XFxuXCIsXG4rXHRcdFx0cG0tXHUwMDNldmVyc2lvbik7XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbitcdGlmICghZWZpX3BvaXNvbl9nZW9tZXRyeV92YWxpZChwbSkpIHtcbitcdFx0cHJfd2FybihcIklnbm9yaW5nIG1hbGZvcm1lZCBwb2lzb25lZC1tZW1vcnkgdGFibGVcXG5cIik7XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbisvKlxuKyAqIFZldCB0aGUgaW5oZXJpdGVkIHRhYmxlIGFuZCBoYW5kIGl0cyBwYWdlcyB0byBtZW1ibG9jaywgdGhlIHdheSB0aGVcbisgKiB1bmFjY2VwdGVkIG1lbW9yeSB0YWJsZSBpcyBoYW5kbGVkLiBJdCBpcyBFRkkgQUNQSSByZWNsYWltIG1lbW9yeSwgd2hpY2hcbisgKiBiZWNvbWVzIEU4MjBfVFlQRV9BQ1BJIGFuZCB3b3VsZCBvdGhlcndpc2Ugc3RheSBvdXQgb2YgdGhlIGRpcmVjdCBtYXAsIGFuZFxuKyAqIHRvdWNoaW5nIGl0IHRoZW4gZmF1bHRzLiBDYWxsZWQgZnJvbSBlZmlfY29uZmlnX3BhcnNlX3RhYmxlcygpLCBzb1xuKyAqIGV2ZXJ5dGhpbmcgbGF0ZXIgY2FuIHJlYWNoIGl0IHdpdGggZWZpX3BvaXNvbmVkX21lbW9yeSgpLlxuKyAqL1xuK3ZvaWQgX19pbml0IGVmaV9wb2lzb25lZF9tZW1vcnlfcmVzZXJ2ZSh2b2lkKVxuK3tcbitcdHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTtcbitcdHBoeXNfYWRkcl90IHN0YXJ0LCBlbmQ7XG4rXG4rXHRpZiAoZWZpLnBvaXNvbmVkX21lbW9yeSA9PSBFRklfSU5WQUxJRF9UQUJMRV9BRERSKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRwbSA9IGVhcmx5X21lbXJlbWFwKGVmaS5wb2lzb25lZF9tZW1vcnksIHNpemVvZigqcG0pKTtcbitcdGlmICghcG0pIHtcbitcdFx0cHJfd2FybihcIkNvdWxkIG5vdCBtYXAgcG9pc29uZWQtbWVtb3J5IHRhYmxlXFxuXCIpO1xuK1x0XHRlZmkucG9pc29uZWRfbWVtb3J5ID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUjtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0aWYgKCFlZmlfcG9pc29uX3RhYmxlX3ZhbGlkKHBtKSkge1xuK1x0XHRlZmkucG9pc29uZWRfbWVtb3J5ID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUjtcbitcdFx0ZWFybHlfbWVtdW5tYXAocG0sIHNpemVvZigqcG0pKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0c3RhcnQgPSBQQUdFX0FMSUdOX0RPV04oZWZpLnBvaXNvbmVkX21lbW9yeSk7XG4rXHRlbmQgPSBQQUdFX0FMSUdOKGVmaS5wb2lzb25lZF9tZW1vcnkgKyBzaXplb2YoKnBtKSArIHBtLVx1MDAzZXNpemUpO1xuK1x0ZWFybHlfbWVtdW5tYXAocG0sIHNpemVvZigqcG0pKTtcbitcbitcdG1lbWJsb2NrX2FkZChzdGFydCwgZW5kIC0gc3RhcnQpO1xuK1x0bWVtYmxvY2tfcmVzZXJ2ZShzdGFydCwgZW5kIC0gc3RhcnQpO1xuK31cbitcbisvKiBUaGUgdGFibGUsIHZldHRlZCBhdCBwYXJzZSB0aW1lLCBvciBOVUxMIGlmIHRoaXMgYm9vdCBoYXMgbm9uZS4gKi9cbitzdGF0aWMgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKmVmaV9wb2lzb25lZF9tZW1vcnkodm9pZClcbit7XG4rXHRpZiAoZWZpLnBvaXNvbmVkX21lbW9yeSA9PSBFRklfSU5WQUxJRF9UQUJMRV9BRERSKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdHJldHVybiBwaHlzX3RvX3ZpcnQoZWZpLnBvaXNvbmVkX21lbW9yeSk7XG4rfVxuK1xuKy8qIERvZXMgdGhlIHJhbmdlIGNvdmVyIGEgdW5pdCBhbiBlYXJsaWVyIGtlcm5lbCByZWNvcmRlZCBhcyBiYWQ/ICovXG4rYm9vbCByYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnkocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbit7XG4rXHRzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0gPSBlZmlfcG9pc29uZWRfbWVtb3J5KCk7XG4rXHR1NjQgZmlyc3QsIGxhc3QsIG5iaXRzO1xuK1xuK1x0aWYgKCFwbSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0bmJpdHMgPSBwbS1cdTAwM2VzaXplICogQklUU19QRVJfQllURTtcbitcbitcdGlmIChzdGFydCArIHNpemUgXHUwMDNjPSBwbS1cdTAwM2VwaHlzX2Jhc2UpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdGlmIChzdGFydCBcdTAwM2MgcG0tXHUwMDNlcGh5c19iYXNlKVxuK1x0XHRzdGFydCA9IHBtLVx1MDAzZXBoeXNfYmFzZTtcbitcbitcdGZpcnN0ID0gKHN0YXJ0IC0gcG0tXHUwMDNlcGh5c19iYXNlKSAvIHBtLVx1MDAzZXVuaXRfc2l6ZTtcbitcdGlmIChmaXJzdCBcdTAwM2U9IG5iaXRzKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRsYXN0ID0gKHN0YXJ0ICsgc2l6ZSAtIDEgLSBwbS1cdTAwM2VwaHlzX2Jhc2UpIC8gcG0tXHUwMDNldW5pdF9zaXplO1xuK1x0bGFzdCA9IG1pbihsYXN0LCBuYml0cyAtIDEpO1xuK1xuK1x0cmV0dXJuIGZpbmRfbmV4dF9iaXQocG0tXHUwMDNlYml0bWFwLCBsYXN0ICsgMSwgZmlyc3QpIFx1MDAzYz0gbGFzdDtcbit9XG4rXG4rLypcbisgKiBBIGJpdCBpcyBuZXZlciBjbGVhcmVkOiBpdCBzdGFuZHMgZm9yIGEgd2hvbGUgRUZJX1BPSVNPTl9VTklUX1NJWkUsIHNvIGFuXG4rICogdW5wb2lzb24gY2Fubm90IHRlbGwgd2hldGhlciB0aGUgdW5pdCBhcyBhIHdob2xlIGlzIGdvb2QgYWdhaW4uXG4rICovXG4rdm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbilcbit7XG4rXHRzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0gPSBlZmlfcG9pc29uZWRfbWVtb3J5KCk7XG4rXHRwaHlzX2FkZHJfdCBhZGRyID0gUEZOX1BIWVMocGZuKTtcbitcdHU2NCB1bml0O1xuK1xuK1x0aWYgKCFwbSB8fCBhZGRyIFx1MDAzYyBwbS1cdTAwM2VwaHlzX2Jhc2UpXG4rXHRcdHJldHVybjtcbitcbitcdHVuaXQgPSAoYWRkciAtIHBtLVx1MDAzZXBoeXNfYmFzZSkgLyBwbS1cdTAwM2V1bml0X3NpemU7XG4rXHRpZiAodW5pdCBcdTAwM2MgcG0tXHUwMDNlc2l6ZSAqIEJJVFNfUEVSX0JZVEUpXG4rXHRcdHNldF9iaXQodW5pdCwgcG0tXHUwMDNlYml0bWFwKTtcbit9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lZmkuaCBiL2luY2x1ZGUvbGludXgvZWZpLmhcbmluZGV4IGMzNTQ0NmEwYjY2ZmEuLjU2NDAyZmRjY2QxMTQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2VmaS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2VmaS5oXG5AQCAtMjMsNiArMjMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzdG9yZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmFuZ2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlYm9vdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2l6ZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3V1aWQuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS9wYWdlLmhcdTAwM2VcbkBAIC00MjIsNiArNDIzLDcgQEAgdm9pZCBlZmlfbmF0aXZlX3J1bnRpbWVfc2V0dXAodm9pZCk7XG4gI2RlZmluZSBMSU5VWF9FRklfQ09DT19TRUNSRVRfQVJFQV9HVUlEXHRcdEVGSV9HVUlEKDB4YWRmOTU2YWQsIDB4ZTk4YywgMHg0ODRjLCAgMHhhZSwgMHgxMSwgMHhiNSwgMHgxYywgMHg3ZCwgMHgzMywgMHg2NCwgMHg0NylcbiAjZGVmaW5lIExJTlVYX0VGSV9CT09UX01FTU1BUF9HVUlEXHRcdEVGSV9HVUlEKDB4ODAwZjY4M2YsIDB4ZDA4YiwgMHg0MjNhLCAgMHhhMiwgMHg5MywgMHg5NiwgMHg1YywgMHgzYywgMHg2ZiwgMHhlMiwgMHhiNClcbiAjZGVmaW5lIExJTlVYX0VGSV9VTkFDQ0VQVEVEX01FTV9UQUJMRV9HVUlEXHRFRklfR1VJRCgweGQ1ZDFkZTNjLCAweDEwNWMsIDB4NDRmOSwgIDB4OWUsIDB4YTksIDB4YmMsIDB4ZWYsIDB4OTgsIDB4MTIsIDB4MDAsIDB4MzEpXG4rI2RlZmluZSBMSU5VWF9FRklfUE9JU09ORURfTUVNT1JZX1RBQkxFX0dVSURcdEVGSV9HVUlEKDB4YWY4MjhhMTUsIDB4MGVmNCwgMHg0MzlhLCAgMHhiOCwgMHg2YSwgMHhkNiwgMHhkNiwgMHg5ZSwgMHhhZiwgMHhiYSwgMHhmYSlcbiBcbiAjZGVmaW5lIFJJU0NWX0VGSV9CT09UX1BST1RPQ09MX0dVSURcdFx0RUZJX0dVSUQoMHhjY2QxNWZlYywgMHg2ZjczLCAweDRlZWMsICAweDgzLCAweDk1LCAweDNlLCAweDY5LCAweGU0LCAweGI5LCAweDQwLCAweGJmKVxuIFxuQEAgLTY1MCw2ICs2NTIsNyBAQCBleHRlcm4gc3RydWN0IGVmaSB7XG4gXHR1bnNpZ25lZCBsb25nXHRcdFx0bW9rdmFyX3RhYmxlO1x0XHQvKiBNT0sgdmFyaWFibGUgY29uZmlnIHRhYmxlICovXG4gXHR1bnNpZ25lZCBsb25nXHRcdFx0Y29jb19zZWNyZXQ7XHRcdC8qIENvbmZpZGVudGlhbCBjb21wdXRpbmcgc2VjcmV0IHRhYmxlICovXG4gXHR1bnNpZ25lZCBsb25nXHRcdFx0dW5hY2NlcHRlZDtcdFx0LyogVW5hY2NlcHRlZCBtZW1vcnkgdGFibGUgKi9cbitcdHVuc2lnbmVkIGxvbmdcdFx0XHRwb2lzb25lZF9tZW1vcnk7XHQvKiBIYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgdGFibGUgKi9cbiBcbiBcdGVmaV9nZXRfdGltZV90XHRcdFx0KmdldF90aW1lO1xuIFx0ZWZpX3NldF90aW1lX3RcdFx0XHQqc2V0X3RpbWU7XG5AQCAtMTI3Miw2ICsxMjc1LDI1IEBAIHN0cnVjdCBsaW51eF9lZmlfbWVtcmVzZXJ2ZSB7XG4gI2RlZmluZSBFRklfTUVNUkVTRVJWRV9DT1VOVChzaXplKSAoKChzaXplKSAtIHNpemVvZihzdHJ1Y3QgbGludXhfZWZpX21lbXJlc2VydmUpKSBcXFxuIFx0LyBzaXplb2ZfZmllbGQoc3RydWN0IGxpbnV4X2VmaV9tZW1yZXNlcnZlLCBlbnRyeVswXSkpXG4gXG4rLyogQml0IE4gY292ZXJzIHRoZSB1bml0IGF0IEBwaHlzX2Jhc2UgKyBOICogQHVuaXRfc2l6ZS4gKi9cbitzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSB7XG4rXHR1MzJcdFx0dmVyc2lvbjtcbitcdHUzMlx0XHR1bml0X3NpemU7XHQvKiBieXRlcyBvZiBwaHlzIHNwYWNlIHBlciBiaXRtYXAgYml0ICovXG4rXHR1NjRcdFx0cGh5c19iYXNlO1x0LyogYWRkcmVzcyB0aGUgZmlyc3QgYml0IGNvdmVycyAqL1xuK1x0dTY0XHRcdHNpemU7XHRcdC8qIGJpdG1hcCBzaXplIGluIGJ5dGVzICovXG4rXHR1bnNpZ25lZCBsb25nXHRiaXRtYXBbXTtcbit9O1xuK1xuKyNkZWZpbmUgRUZJX1BPSVNPTl9VTklUX1NJWkVcdFNaXzJNXG4rXG4rI2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXG4rdm9pZCBfX2luaXQgZWZpX3BvaXNvbmVkX21lbW9yeV9yZXNlcnZlKHZvaWQpO1xuK3ZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pO1xuKyNlbHNlXG4rc3RhdGljIGlubGluZSB2b2lkIGVmaV9wb2lzb25lZF9tZW1vcnlfcmVzZXJ2ZSh2b2lkKSB7IH1cbitzdGF0aWMgaW5saW5lIHZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pIHsgfVxuKyNlbmRpZlxuK1xuIHZvaWQgX19pbml0IGVmaV9hcmNoX21lbV9yZXNlcnZlKHBoeXNfYWRkcl90IGFkZHIsIHU2NCBzaXplKTtcbiBcbiAvKlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaFxuaW5kZXggMjc0ZmE4ODAwNzdjNS4uOWQ5ZjJlOGZkYzEzNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW0uaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbS5oXG5AQCAtNTIyNSw2ICs1MjI1LDcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbWVtb3J5X2ZhaWx1cmVfYXR0cl9ncm91cDtcbiBleHRlcm4gdm9pZCBtZW1vcnlfZmFpbHVyZV9xdWV1ZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKTtcbiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pO1xuIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX3N1Yih1bnNpZ25lZCBsb25nIHBmbiwgbG9uZyBpKTtcbit2b2lkIF9fbWVtaW5pdCBod3BvaXNvbl9ib290X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpO1xuIHBoeXNfYWRkcl90IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpO1xuIHBoeXNfYWRkcl90IHJhbmdlX2xhc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7XG4gI2Vsc2VcbkBAIC01MjMyLDYgKzUyMzMsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbW9yeV9mYWlsdXJlX3F1ZXVlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG4ge1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHZvaWQgaHdwb2lzb25fYm9vdF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuK3tcbit9XG4rXG4gc3RhdGljIGlubGluZSB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pXG4ge1xuIH1cbkBAIC01Mzg3LDYgKzUzOTIsMjAgQEAgc3RhdGljIGlubGluZSBib29sIHBmbl9pc191bmFjY2VwdGVkX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbilcbiBcdHJldHVybiByYW5nZV9jb250YWluc191bmFjY2VwdGVkX21lbW9yeShwZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsIFBBR0VfU0laRSk7XG4gfVxuIFxuKyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWVxuK1xuK2Jvb2wgcmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5KHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpO1xuK1xuKyNlbHNlXG4rXG4rc3RhdGljIGlubGluZSBib29sIHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeShwaHlzX2FkZHJfdCBzdGFydCxcbitcdFx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbit7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuKyNlbmRpZlxuK1xuIHZvaWQgdm1hX3BndGFibGVfd2Fsa19iZWdpbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4gdm9pZCB2bWFfcGd0YWJsZV93YWxrX2VuZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4gXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbmluZGV4IGEyY2E4ZGY1MDFjYWUuLmY2YWZkYjJhODlhOTQgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jXG4rKysgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5AQCAtNDMsNiArNDMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3NpZ25hbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvdGFzay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGF4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9lZmkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tzbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcm1hcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbkBAIC0xMzYsNiArMTM3LDIxIEBAIHBoeXNfYWRkcl90IHJhbmdlX2xhc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiBcdHJldHVybiByYW5nZV9od3BvaXNvbihzdGFydCwgc2l6ZSwgZmFsc2UpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB1cGRhdGVfcGVyX25vZGVfbWZfc3RhdHModW5zaWduZWQgbG9uZyBwZm4sIGVudW0gbWZfcmVzdWx0IHJlc3VsdCk7XG4rXG4rLyogTm90IG51bV9wb2lzb25lZF9wYWdlc19pbmMoKTogaXRzIHBlciBibG9jayBoYWxmIGRpdmlkZXMgYnkgemVybyB0aGlzIGVhcmx5LiAqL1xuK3ZvaWQgX19tZW1pbml0IGh3cG9pc29uX2Jvb3RfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbit7XG4rXHRpZiAoUGFnZUhXUG9pc29uKHBhZ2UpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRTZXRQYWdlSFdQb2lzb24ocGFnZSk7XG4rXHRzZXRfcGFnZV9jb3VudChwYWdlLCAxKTtcbitcdC8qIFRoZSBwYWdlIGhhcyBiZWVuIGNvbXBsZXRlbHkgaXNvbGF0ZWQgPT0gTUZfUkVDT1ZFUkVEICovXG4rXHR1cGRhdGVfcGVyX25vZGVfbWZfc3RhdHMocGFnZV90b19wZm4ocGFnZSksIE1GX1JFQ09WRVJFRCk7XG4rXHRhdG9taWNfbG9uZ19pbmMoXHUwMDI2bnVtX3BvaXNvbmVkX3BhZ2VzKTtcbit9XG4rXG4gLyoqXG4gICogTUZfQVRUUl9STyAtIENyZWF0ZSBzeXNmcyBlbnRyeSBmb3IgZWFjaCBtZW1vcnkgZmFpbHVyZSBzdGF0aXN0aWNzLlxuICAqIEBfbmFtZTogbmFtZSBvZiB0aGUgZmlsZSBpbiB0aGUgcGVyIE5VTUEgc3lzZnMgZGlyZWN0b3J5LlxuQEAgLTEzMjYsNiArMTM0Miw4IEBAIHN0YXRpYyBpbnQgYWN0aW9uX3Jlc3VsdCh1bnNpZ25lZCBsb25nIHBmbiwgZW51bSBtZl9hY3Rpb25fcGFnZV90eXBlIHR5cGUsXG4gXHRpZiAodHlwZSAhPSBNRl9NU0dfQUxSRUFEWV9QT0lTT05FRCBcdTAwMjZcdTAwMjYgdHlwZSAhPSBNRl9NU0dfUEZOX01BUCkge1xuIFx0XHRudW1fcG9pc29uZWRfcGFnZXNfaW5jKHBmbik7XG4gXHRcdHVwZGF0ZV9wZXJfbm9kZV9tZl9zdGF0cyhwZm4sIHJlc3VsdCk7XG4rXHRcdC8qIE9ubHkgaGFyZCBvZmZsaW5lcyBhcmUgY2FycmllZCBvdmVyIHRvIHRoZSBuZXh0IGtlcm5lbC4gKi9cbitcdFx0ZWZpX2h3cG9pc29uX3JlY29yZF9wZm4ocGZuKTtcbiBcdH1cbiBcbiBcdHByX2VycihcIiUjbHg6IHJlY292ZXJ5IGFjdGlvbiBmb3IgJXM6ICVzXFxuXCIsXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jXG5pbmRleCA0MDQ4OTZiNTMwMDNlLi45ZTJjZTgzM2ZkNDA5IDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9hbGxvYy5jXG4rKysgYi9tbS9wYWdlX2FsbG9jLmNcbkBAIC0xNTc5LDYgKzE1NzksMTkgQEAgc3RhdGljIHZvaWQgX19mcmVlX3BhZ2VzX29rKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4gXHRcdGZyZWVfb25lX3BhZ2Uoem9uZSwgcGFnZSwgcGZuLCBvcmRlciwgZnBpX2ZsYWdzKTtcbiB9XG4gXG4rLyogRmxhZyB0aGUgZnJhbWVzIGFuIGVhcmxpZXIga2VybmVsIHJlY29yZGVkIGFzIGJhZC4gKi9cbitzdGF0aWMgdm9pZCBfX21lbWluaXQgcG9pc29uX2Jsb2NrKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBpLCBucl9wYWdlcyA9IDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXI7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9wYWdlczsgaSsrKSB7XG4rXHRcdHN0cnVjdCBwYWdlICpwID0gcGFnZSArIGk7XG4rXG4rXHRcdGlmIChyYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnkocGFnZV90b19waHlzKHApLCBQQUdFX1NJWkUpKVxuK1x0XHRcdGh3cG9pc29uX2Jvb3RfcGFnZShwKTtcbitcdH1cbit9XG4rXG4gdm9pZCBfX21lbWluaXQgX19mcmVlX3BhZ2VzX2NvcmUoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcixcbiBcdFx0ZW51bSBtZW1pbml0X2NvbnRleHQgY29udGV4dClcbiB7XG5AQCAtMTYxMyw2ICsxNjI2LDE4IEBAIHZvaWQgX19tZW1pbml0IF9fZnJlZV9wYWdlc19jb3JlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4gXHRcdGF0b21pY19sb25nX2FkZChucl9wYWdlcywgXHUwMDI2cGFnZV96b25lKHBhZ2UpLVx1MDAzZW1hbmFnZWRfcGFnZXMpO1xuIFx0fVxuIFxuK1x0LyogRmlyc3Q6IGEgYmxvY2sgcGFya2VkIGJ5IF9fZnJlZV91bmFjY2VwdGVkKCkgbmV2ZXIgcmV0dXJucyBoZXJlLiAqL1xuK1x0aWYgKHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeShwYWdlX3RvX3BoeXMocGFnZSksXG4rXHRcdFx0XHRcdCAgIFBBR0VfU0laRSBcdTAwM2NcdTAwM2Mgb3JkZXIpKSB7XG4rXHRcdHBvaXNvbl9ibG9jayhwYWdlLCBvcmRlcik7XG4rXHRcdC8qXG4rXHRcdCAqIFRPRE86IGZyZWUgdGhlIGZyYW1lcyBpbiB0aGUgYmxvY2sgdGhhdCBhcmUgbm90IHBvaXNvbmVkLlxuK1x0XHQgKiBUaGV5IHN0YXkgb3V0IG9mIHRoZSBhbGxvY2F0b3IgYW5kIHN0aWxsIGNvdW50IGluXG4rXHRcdCAqIG1hbmFnZWRfcGFnZXMsIHNvIGEgdW5pdCBjb3N0cyB1cCB0byBhIGJsb2NrLlxuK1x0XHQgKi9cbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuIFx0aWYgKHBhZ2VfY29udGFpbnNfdW5hY2NlcHRlZChwYWdlLCBvcmRlcikpIHtcbiBcdFx0aWYgKG9yZGVyID09IE1BWF9QQUdFX09SREVSIFx1MDAyNlx1MDAyNiBfX2ZyZWVfdW5hY2NlcHRlZChwYWdlKSlcbiBcdFx0XHRyZXR1cm47XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNDowOTowNi43NDQzOTY5MjFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1OTExOTM0MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggc2VyaWVzLiBNeSBpbml0aWFsIGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHRoZSB0cmlhZ2UgcHJvY2VzcywgbWFraW5nIHN1cmUgd2UgaGF2ZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0J3MgYmVpbmcgZXZhbHVhdGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBwcmluY2lwbGVzLCBhbmQgaXQgc2VlbXMgcmVhY2hhYmlsaXR5IGlzIHRoZSBwcmltYXJ5IGNvbmNlcm4g4oCTIGNhbiB0aGUgbW9kaWZpZWQgY29kZSBhY3R1YWxseSBleGVjdXRlIGluIGEgdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciBRRU1VPyBUaGF0J3MgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50LlxuXG5OZXh0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBleHRlbnQgb2YgdGhlIGNoYW5nZXMuIFRoZSBmaWxlcyBtb2RpZmllZCBhcmU6IGBhcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpLmNgLCBgZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ2AsIGBkcml2ZXJzL2Zpcm13YXJlL2VmaS9NYWtlZmlsZWAsIGBkcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuY2AsIGBkcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jYCwgYGRyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuY2AsIGBkcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaGAsIGBkcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmNgLCBgZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmNgLCBgaW5jbHVkZS9saW51eC9lZmkuaGAsIGBpbmNsdWRlL2xpbnV4L21tLmhgLCBgbW0vbWVtb3J5LWZhaWx1cmUuY2AsIGFuZCBgbW0vcGFnZV9hbGxvYy5jYC4gVGhhdCdzIGEgZmFpcmx5IGV4dGVuc2l2ZSB0b3VjaCwgbW9zdGx5IGNvbmNlbnRyYXRlZCBhcm91bmQgRUZJIGFuZCBtZW1vcnkgbWFuYWdlbWVudC5cblxuTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IHdoYXQgcGFydHMgb2YgdGhpcyBjb2RlIGFyZSBhY3RpdmUgZHVyaW5nIHJ1bnRpbWUgdmVyc3VzIGJvb3QgdGltZT8gQW5kIHdoYXQgc3lzY2FsbHMgb3IgaW50ZXJmYWNlcyBjYW4gKnJlYWNoKiB0aGlzIGNvZGU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBhdHRhY2sgc3VyZmFjZS5cblxuU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gbG9vayBhdCBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4ocGZuKWAuIEkgc2VlIGl0J3MgY2FsbGVkIGZyb20gYGFjdGlvbl9yZXN1bHQoKWAgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgLiBUaGF0IG1lYW5zIEkgaGF2ZSB0byB0cmFjZSBob3cgYG1tL21lbW9yeS1mYWlsdXJlLmNgIGdldHMgdHJpZ2dlcmVkIGF0IHJ1bnRpbWUuIEkgbmVlZCB0byB2ZXJpZnkgaG93IGBtZW1vcnlfZmFpbHVyZWAgb3IgYGFjdGlvbl9yZXN1bHRgIGFyZSBjYWxsZWQgb3IgZXhwb3NlZC4gQ2FuIGEgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIGNhbGwsIG9yIG1heWJlIHNvbWV0aGluZyB0aHJvdWdoIGRlYnVnZnMgb3Igc3lzZnMsIHRyaWdnZXIgdGhpcyBjb2RlIHBhdGg/IEdyZXAgaXMgZ29pbmcgdG8gYmUgbXkgZnJpZW5kIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTk5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTQ6MDk6MTIuNjU2MzMzMzAxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NTU3MjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFjdGlvbl9yZXN1bHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtb3J5LWZhaWx1cmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnktZmFpbHVyZS5jPTEzMjQ9c3RhdGljIGJvb2wgcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZihlbnVtIG1mX2FjdGlvbl9wYWdlX3R5cGUgdHlwZSxcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTMzNi0gKi9cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjEzMzc6c3RhdGljIGludCBhY3Rpb25fcmVzdWx0KHVuc2lnbmVkIGxvbmcgcGZuLCBlbnVtIG1mX2FjdGlvbl9wYWdlX3R5cGUgdHlwZSxcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEzMzgtXFx0XFx0XFx0IGVudW0gbWZfcmVzdWx0IHJlc3VsdClcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MTM1OD1zdGF0aWMgaW50IHBhZ2VfYWN0aW9uKHN0cnVjdCBwYWdlX3N0YXRlICpwcywgc3RydWN0IHBhZ2UgKnAsXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEzNzAtXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxMzcxOlxcdHJldHVybiBhY3Rpb25fcmVzdWx0KHBmbiwgcHMtXFx1MDAzZXR5cGUsIHJlc3VsdCk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMzcyLX1cXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MjEzOT1zdGF0aWMgaW50IHRyeV9tZW1vcnlfZmFpbHVyZV9odWdldGxiKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIxNTYtXFx0XFx0fVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjE1NzpcXHRcXHRyZXR1cm4gYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19HRVRfSFdQT0lTT04sIE1GX0lHTk9SRUQpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjE1OC1cXHRjYXNlIE1GX0hVR0VUTEJfRk9MSU9fUFJFX1BPSVNPTkVEOlxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTYzLVxcdFxcdGlmIChyZXMgPT0gTUZfSFVHRVRMQl9QQUdFX1BSRV9QT0lTT05FRClcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIxNjQ6XFx0XFx0XFx0YWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19BTFJFQURZX1BPSVNPTkVELCBNRl9GQUlMRUQpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjE2NS1cXHRcXHRlbHNlXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMTY2OlxcdFxcdFxcdGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfSFVHRSwgTUZfRkFJTEVEKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIxNjctXFx0XFx0cmV0dXJuIHJ2O1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTk3LVxcdFxcdH1cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIxOTg6XFx0XFx0cmV0dXJuIGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfRlJFRV9IVUdFLCByZXMpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjE5OS1cXHR9XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIyMDQtXFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIyMDU6XFx0XFx0cmV0dXJuIGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfVU5NQVBfRkFJTEVELCBNRl9GQUlMRUQpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjIwNi1cXHR9XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTIyMzI9c3RhdGljIGludCBtZW1vcnlfZmFpbHVyZV9kZXZfcGFnZW1hcCh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzLFxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMjU5LVxcdGlmIChyYyAhPSAtRU9QTk9UU1VQUClcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIyNjA6XFx0XFx0YWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19EQVgsIHJjID8gTUZfRkFJTEVEIDogTUZfUkVDT1ZFUkVEKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIyNjEtXFx0cmV0dXJuIHJjO1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMzc4PXN0YXRpYyBpbnQgbWVtb3J5X2ZhaWx1cmVfcGZuKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0MDItXFx0XFx0aWYgKCFtZl9oYW5kbGVkKVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjQwMzpcXHRcXHRcXHRyZXR1cm4gYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19QRk5fTUFQLCBNRl9JR05PUkVEKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0MDQtXFx0fVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNDE1LVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjQxNjpcXHRyZXR1cm4gYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19QRk5fTUFQLCBNRl9SRUNPVkVSRUQpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQxNy19XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTI0NDQ9aW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI1MDItXFx0XFx0XFx0cHV0X3BhZ2UocCk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNTAzOlxcdFxcdGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfQUxSRUFEWV9QT0lTT05FRCwgTUZfRkFJTEVEKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI1MDQtXFx0XFx0Z290byB1bmxvY2tfbXV0ZXg7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI1MzMtXFx0XFx0XFx0fVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjUzNDpcXHRcXHRcXHRyZXMgPSBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0JVRERZLCByZXMpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjUzNS1cXHRcXHR9IGVsc2Uge1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjUzNjpcXHRcXHRcXHRyZXMgPSBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0tFUk5FTF9ISUdIX09SREVSLCBNRl9JR05PUkVEKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI1MzctXFx0XFx0fVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNTQ3LVxcdFxcdCAqL1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjU0ODpcXHRcXHRyZXMgPSBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0tFUk5FTCwgTUZfSUdOT1JFRCk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNTQ5LVxcdFxcdGdvdG8gdW5sb2NrX211dGV4O1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNTUxLVxcdFxcdC8qIFRyYW5zaWVudCBsaWZlY3ljbGUgcmFjZSB3aXRoIHRoZSBwYWdlIGFsbG9jYXRvci4gKi9cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI1NTI6XFx0XFx0cmVzID0gYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19HRVRfSFdQT0lTT04sIE1GX0lHTk9SRUQpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjU1My1cXHRcXHRnb3RvIHVubG9ja19tdXRleDtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjU5OS1cXHRcXHRcXHRwdXRfcGFnZShwKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI2MDA6XFx0XFx0XFx0YWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19VTlNQTElUX1RIUCwgTUZfRkFJTEVEKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2MDEtXFx0XFx0XFx0Z290byB1bmxvY2tfbXV0ZXg7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2NTMtXFx0aWYgKCFod3BvaXNvbl91c2VyX21hcHBpbmdzKGZvbGlvLCBwLCBwZm4sIGZsYWdzKSkge1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjY1NDpcXHRcXHRyZXMgPSBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX1VOTUFQX0ZBSUxFRCwgTUZfRkFJTEVEKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2NTUtXFx0XFx0Z290byB1bmxvY2tfcGFnZTtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjY2Mi1cXHQgICAgZm9saW8tXFx1MDAzZW1hcHBpbmcgPT0gTlVMTCkge1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjY2MzpcXHRcXHRyZXMgPSBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX1RSVU5DQVRFRF9MUlUsIE1GX0lHTk9SRUQpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjY2NC1cXHRcXHRnb3RvIHVubG9ja19wYWdlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNDowOToxMi43MDI4OTU1OTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjA3NTUwNTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqRGl2aW5nIGludG8gdGhlIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCBSYWJiaXQgSG9sZSoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAgYW5kIGhvdyBpdCB3b3JrcyB1bmRlciB0aGUgaG9vZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgdGhhdCBjYWxsIHNlZW1zIHRvIGxlYWQgdG8gYG1hZHZpc2VfaW5qZWN0X2Vycm9yKClgLCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIHRoYXQgZGlyZWN0bHkgY2FsbHMgYG1lbW9yeV9mYWlsdXJlKClgLlwiIEludGVyZXN0aW5nLCBzbyBgbWFkdmlzZWAgaXMgdXNpbmcgdGhlIHNhbWUgaW5mcmFzdHJ1Y3R1cmUgYXMgb3RoZXIgbWVtb3J5IGVycm9yIGluamVjdGlvbiBtZWNoYW5pc21zLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgaW5qZWN0aW9uIGlzLiBMZXQncyBzZWUgaG93IGBtYWR2aXNlYCBhY3R1YWxseSBjYWxscyB0aGlzIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgZnVuY3Rpb24uIEkgd2lsbCBuZWVkIHRvIGxvb2sgZGVlcGVyIGludG8gYG1hZHZpc2VgIHRvIHNlZSB3aGVyZSBgTUFEVl9IV1BPSVNPTmAgaXMgaGFuZGxlZCBhbmQgaG93IGl0IGRlY2lkZXMgdG8gaW5qZWN0IGFuIGVycm9yLiBBbHRlcm5hdGl2ZWx5LCBwZXJoYXBzIGl0J3MgbW9yZSBkaXJlY3QgYW5kIEkgc2hvdWxkIGxvb2sgYXQgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBhbmQgc2VlIHdoZXJlIGl0J3MgYmVpbmcgY2FsbGVkLCB3aGljaCBtaWdodCBnaXZlIG1lIG1vcmUgY29udGV4dC4gQm90aCBhcHByb2FjaGVzIGFyZSB2YWxpZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2NTYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNDowOToxNS4zMTA0NDg1NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDc4MjIxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJNQURWX0hXUE9JU09OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tYWR2aXNlLmM9MTUwND1zdGF0aWMgYm9vbCBpc19tZW1vcnlfZmFpbHVyZShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xNTA2LVxcdHN3aXRjaCAobWFkdl9iZWhhdmlvci1cXHUwMDNlYmVoYXZpb3IpIHtcXG5tbS9tYWR2aXNlLmM6MTUwNzpcXHRjYXNlIE1BRFZfSFdQT0lTT046XFxubW0vbWFkdmlzZS5jLTE1MDgtXFx0Y2FzZSBNQURWX1NPRlRfT0ZGTElORTpcXG4tLVxcbm1tL21hZHZpc2UuYz0xNTMwPW1hZHZpc2VfYmVoYXZpb3JfdmFsaWQoaW50IGJlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTE1NjMtXFx0Y2FzZSBNQURWX1NPRlRfT0ZGTElORTpcXG5tbS9tYWR2aXNlLmM6MTU2NDpcXHRjYXNlIE1BRFZfSFdQT0lTT046XFxubW0vbWFkdmlzZS5jLTE1NjUtI2VuZGlmXFxuLS1cXG5tbS9tYWR2aXNlLmM9MTg5OT1zdGF0aWMgaW50IG1hZHZpc2VfZG9fYmVoYXZpb3IodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbixcXG4tLVxcbm1tL21hZHZpc2UuYy0xOTU1LSAqICBNQURWX0tFRVBPTkZPUksgLSB1bmRvIHRoZSBlZmZlY3Qgb2YgTUFEVl9XSVBFT05GT1JLXFxubW0vbWFkdmlzZS5jOjE5NTY6ICogIE1BRFZfSFdQT0lTT04gLSB0cmlnZ2VyIG1lbW9yeSBlcnJvciBoYW5kbGVyIGFzIGlmIHRoZSBnaXZlbiBtZW1vcnkgcmFuZ2VcXG5tbS9tYWR2aXNlLmMtMTk1Ny0gKlxcdFxcdHdlcmUgY29ycnVwdGVkIGJ5IHVucmVjb3ZlcmFibGUgaGFyZHdhcmUgbWVtb3J5IGZhaWx1cmUuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE0OjA5OjE1LjM2MTIzODgyOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MDk0MzcxMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBNZW1vcnkgUG9pc29uaW5nIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgdXNhZ2Ugb2YgYHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeSgpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIHR3byBsaWtlbHkgbG9jYXRpb25zOiBgbW0vcGFnZV9hbGxvYy5jYCBhbmQgYGRyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jYC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBtb3N0IHJlbGV2YW50IHNwb3RzIGdpdmVuIHRoZSBmdW5jdGlvbidzIG5hbWUgYW5kIGdlbmVyYWwgbWVtb3J5IG1hbmFnZW1lbnQgY29uY2VwdHMuXG5cbkJ1dCwgSSBuZWVkIHRvIGtub3cgKndoZXJlKiBpdCdzIGFjdHVhbGx5IGJlaW5nIGNhbGxlZC4gTm8gc2Vuc2UgaW4ganVzdCBzdGFyaW5nIGF0IHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLiBTbywgbGV0J3MgZmlyZSB1cCBgZ3JlcHBlcmAuIFRoYXQgc2hvdWxkIHF1aWNrbHkgdW5jb3ZlciBhbGwgdGhlIGNhbGwgc2l0ZXMgYWNyb3NzIHRoZSBjb2RlYmFzZS4gV2l0aCBgZ3JlcHBlcmAsIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSBsaXN0IG9mIGV2ZXJ5IHBsYWNlIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBhbmQgdGhlbiBuYXJyb3cgaXQgZG93biBiYXNlZCBvbiB0aGUgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzMTQsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNDowOToxNy43NzA2NzkxODlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxMjMxODMyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmM9OTE9c3RhdGljIHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICplZmlfcG9pc29uZWRfbWVtb3J5KHZvaWQpXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYy05OS0vKiBEb2VzIHRoZSByYW5nZSBjb3ZlciBhIHVuaXQgYW4gZWFybGllciBrZXJuZWwgcmVjb3JkZWQgYXMgYmFkPyAqL1xcbmRyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jOjEwMDpib29sIHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeShwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jLTEwMS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9NTM5MD1zdGF0aWMgaW5saW5lIGJvb2wgcGZuX2lzX3VuYWNjZXB0ZWRfbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTUzOTYtXFxuaW5jbHVkZS9saW51eC9tbS5oOjUzOTc6Ym9vbCByYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnkocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7XFxuaW5jbHVkZS9saW51eC9tbS5oLTUzOTgtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtNTQwMC1cXG5pbmNsdWRlL2xpbnV4L21tLmg6NTQwMTpzdGF0aWMgaW5saW5lIGJvb2wgcmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5KHBoeXNfYWRkcl90IHN0YXJ0LFxcbmluY2x1ZGUvbGludXgvbW0uaC01NDAyLVxcdFxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBzaXplKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTE1ODM9c3RhdGljIHZvaWQgX19tZW1pbml0IHBvaXNvbl9ibG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTE1ODktXFxubW0vcGFnZV9hbGxvYy5jOjE1OTA6XFx0XFx0aWYgKHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeShwYWdlX3RvX3BoeXMocCksIFBBR0VfU0laRSkpXFxubW0vcGFnZV9hbGxvYy5jLTE1OTEtXFx0XFx0XFx0aHdwb2lzb25fYm9vdF9wYWdlKHApO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTE1OTU9dm9pZCBfX21lbWluaXQgX19mcmVlX3BhZ2VzX2NvcmUoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcixcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy0xNjI5LVxcdC8qIEZpcnN0OiBhIGJsb2NrIHBhcmtlZCBieSBfX2ZyZWVfdW5hY2NlcHRlZCgpIG5ldmVyIHJldHVybnMgaGVyZS4gKi9cXG5tbS9wYWdlX2FsbG9jLmM6MTYzMDpcXHRpZiAocmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5KHBhZ2VfdG9fcGh5cyhwYWdlKSxcXG5tbS9wYWdlX2FsbG9jLmMtMTYzMS1cXHRcXHRcXHRcXHRcXHQgICBQQUdFX1NJWkUgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE0OjA5OjE5LjQ4MzAwMjYyMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExMzU1MDg0NTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEN1cnJlbnQgQW5hbHlzaXMgb2YgdGhlIEVGSSBIYXJkd2FyZSBQb2lzb25pbmcgTG9naWMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gIHdvcmtzIGFuZCB3aGVuIGl0IGdldHMgY2FsbGVkLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nLiBGaXJzdCwgSSBzZWUgaXQncyBjYWxsZWQgd2l0aGluIGBhY3Rpb25fcmVzdWx0KClgIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYCwgc3BlY2lmaWNhbGx5IHdoZW4gdGhlIG1lbW9yeSBmYWlsdXJlIHR5cGUgaXNuJ3QgYWxyZWFkeSBwb2lzb25lZCBvciBhIFBGTiBtYXAuIFRoaXMgbWFrZXMgc2Vuc2U7IGl0J3MgcmVjb3JkaW5nIHRoZSBmYWlsdXJlIGZvciBwZXJzaXN0ZW50IHRyYWNraW5nIGFjcm9zcyByZWJvb3RzIGluIHRob3NlIGNhc2VzLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB3aGF0IGBlZmlfaHdwb2lzb25fcmVjb3JkX3BmbmAgaXRzZWxmIGRvZXMuIExvb2tpbmcgYXQgYGRyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jYCwgaXQgc2VlbXMgdG8gYmUgc2V0dGluZyBhIGJpdCBpbiBhIGJpdG1hcCB3aXRoaW4gdGhlIGBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5YCBzdHJ1Y3R1cmUuIFRoaXMgc3RydWN0dXJlJ3MgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gaXMgd2hhdCBJJ20gcmVhbGx5IGN1cmlvdXMgYWJvdXQuIEl0IGFwcGVhcnMgdGhhdCBpdCdzIHVzaW5nIHRoZSBQaHlzaWNhbCBGcmFtZSBOdW1iZXIgKFBGTikgdG8gY2FsY3VsYXRlIGEgdW5pdCB3aXRoaW4gdGhhdCBiaXRtYXAgYW5kIHRoZW4gc2V0cyB0aGUgY29ycmVzcG9uZGluZyBiaXQuIFRoZSBjaGVjayBmb3IgYHBtYCBiZWluZyBOVUxMIG9yIHRoZSBhZGRyZXNzIGJlaW5nIG91dHNpZGUgdGhlIGV4cGVjdGVkIHJhbmdlIGlzIGNydWNpYWwsIHdoaWNoIGNvdWxkIGJlIGFuIGlzc3VlIGlmIHdlIGhhdmUgZGlmZmVyZW50IEVGSSBjb25maWd1cmF0aW9ucy5cblxuQSB0aG91Z2h0OiBXaGF0IGlmIEVGSSBpcyBlbmFibGVkLCBsaWtlIGluIGEgUUVNVS9PVk1GIGVudmlyb25tZW50IGFuZCBgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllgIGlzIGFsc28gZW5hYmxlZD8gT3IsIGlmIGEgdG9vbCBsaWtlIHN5emthbGxlciBvciBhIHVzZXJzcGFjZSBhcHBsaWNhdGlvbiB1c2VzIGBtYWR2aXNlKC4uLiwgTUFEVl9IV1BPSVNPTilgIG9yIGludGVudGlvbmFsbHkgaW5qZWN0cyBtZW1vcnkgZmFpbHVyZXM/IEluIHN0YW5kYXJkIHN5emthbGxlciBydW5zLCBkb2VzIFFFTVUgZXZlbiBib290IHdpdGggVUVGSS9FRkk/IEV2ZW4gd2l0aG91dCBVRUZJLCBpZiBgZWZpLnBvaXNvbmVkX21lbW9yeWAgaXMgYEVGSV9JTlZBTElEX1RBQkxFX0FERFJgLCB0aGVuIGBlZmlfcG9pc29uZWRfbWVtb3J5KClgIHJldHVybnMgTlVMTCEgQW5kIHRoYXQgc2VlbXMgdG8gYmUgdGhlIGNhc2Ugd2hlbiBsb29raW5nIGF0IGBlZmlfaHdwb2lzb25fcmVjb3JkX3BmbmAuXG5cbldhaXQsIGNhbiBgbWFkdmlzZSguLi4sIE1BRFZfSFdQT0lTT04pYCB0cmlnZ2VyIGBlZmlfaHdwb2lzb25fcmVjb3JkX3BmbmA/IFllcywgYmVjYXVzZSBgYWN0aW9uX3Jlc3VsdGAgaXMgcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgaXQsIHdoaWNoIHJlY2VpdmVzIHRoZSBQRk4gZnJvbSBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZyBsb2dpYy5cblxuTm93LCB0aGVyZSdzIGBod3BvaXNvbl9ib290X3BhZ2UoKWAgaW4gYG1lbW9yeS1mYWlsdXJlLmNgLiBCdXQgaXQncyBvbmx5IGNhbGxlZCBkdXJpbmcgZWFybHkgYm9vdCB3aXRoaW4gYF9fZnJlZV9wYWdlc19jb3JlKClgLiBIYW5nIG9uIGEgc2Vjb25kLCB0aG91Z2gsIGJlY2F1c2UgYF9fZnJlZV9wYWdlc19jb3JlYCBhbHNvIGdldHMgY2FsbGVkIGR1cmluZyBtZW1vcnkgaG90cGx1Zy4gVGhhdCBtZWFucyB0aGlzIGVudGlyZSBzZXF1ZW5jZSBvZiBldmVudHMgY291bGQgcGxheSBvdXQgZHVyaW5nIGhvdHBsdWdnaW5nIHRvbywgbWFraW5nIHRoaXMgZXZlbiBtb3JlIGNvbXBsaWNhdGVkIHRvIHZlcmlmeS4gSSBuZWVkIHRvIGNoZWNrIHdoZXJlIGVsc2UgYF9fZnJlZV9wYWdlc19jb3JlYCBpcyBjYWxsZWQuIEl0IHdvdWxkIGFwcGVhciB0aGlzIGNvdWxkIGNhdXNlIGEgcG90ZW50aWFsIHJhY2UgYW5kL29yIGFmZmVjdCB3aGF0IHdlIHdlcmUgdHJ5aW5nIHRvIGRldGVybWluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxMDQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTQ6MDk6MzAuODM4MDg5MzM2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODkwNDUxNjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fZnJlZV9wYWdlc19jb3JlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ttc2FuL2luaXQuYz0xNjg9c3RhdGljIHZvaWQgZG9fY29sbGVjdGlvbih2b2lkKVxcbi0tXFxubW0va21zYW4vaW5pdC5jLTE3Ni1cXHRcXHRrbXNhbl9zZXR1cF9tZXRhKHBhZ2UsIHNoYWRvdywgb3JpZ2luLCBjb2xsZWN0Lm9yZGVyKTtcXG5tbS9rbXNhbi9pbml0LmM6MTc3OlxcdFxcdF9fZnJlZV9wYWdlc19jb3JlKHBhZ2UsIGNvbGxlY3Qub3JkZXIsIE1FTUlOSVRfRUFSTFkpO1xcbm1tL2ttc2FuL2luaXQuYy0xNzgtXFx0fVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz02NDg9dm9pZCBnZW5lcmljX29ubGluZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxubW0vbWVtb3J5X2hvdHBsdWcuYy02NDkte1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6NjUwOlxcdF9fZnJlZV9wYWdlc19jb3JlKHBhZ2UsIG9yZGVyLCBNRU1JTklUX0hPVFBMVUcpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtNjUxLX1cXG4tLVxcbm1tL21tX2luaXQuYz0xOTU3PXN0YXRpYyB2b2lkIF9faW5pdCBkZWZlcnJlZF9mcmVlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgcGZuLFxcbi0tXFxubW0vbW1faW5pdC5jLTE5NzItXFx0aWYgKG5yX3BhZ2VzID09IE1BWF9PUkRFUl9OUl9QQUdFUyBcXHUwMDI2XFx1MDAyNiBJU19NQVhfT1JERVJfQUxJR05FRChwZm4pKSB7XFxubW0vbW1faW5pdC5jOjE5NzM6XFx0XFx0X19mcmVlX3BhZ2VzX2NvcmUocGFnZSwgTUFYX1BBR0VfT1JERVIsIE1FTUlOSVRfRUFSTFkpO1xcbm1tL21tX2luaXQuYy0xOTc0LVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL21tX2luaXQuYy0xOTgwLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9wYWdlczsgaSsrKVxcbm1tL21tX2luaXQuYzoxOTgxOlxcdFxcdF9fZnJlZV9wYWdlc19jb3JlKHBhZ2UgKyBpLCAwLCBNRU1JTklUX0VBUkxZKTtcXG5tbS9tbV9pbml0LmMtMTk4Mi19XFxuLS1cXG5tbS9tbV9pbml0LmM9MjQ1Mj12b2lkIF9faW5pdCBtZW1ibG9ja19mcmVlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuLS1cXG5tbS9tbV9pbml0LmMtMjQ2OS1cXHRjbGVhcl9wYWdlX3RhZ19yZWYocGFnZSk7XFxubW0vbW1faW5pdC5jOjI0NzA6XFx0X19mcmVlX3BhZ2VzX2NvcmUocGFnZSwgb3JkZXIsIE1FTUlOSVRfRUFSTFkpO1xcbm1tL21tX2luaXQuYy0yNDcxLX1cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz0xNTgzPXN0YXRpYyB2b2lkIF9fbWVtaW5pdCBwb2lzb25fYmxvY2soc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy0xNTk0LVxcbm1tL3BhZ2VfYWxsb2MuYzoxNTk1OnZvaWQgX19tZW1pbml0IF9fZnJlZV9wYWdlc19jb3JlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxubW0vcGFnZV9hbGxvYy5jLTE1OTYtXFx0XFx0ZW51bSBtZW1pbml0X2NvbnRleHQgY29udGV4dClcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuaD0yMTQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqcGFnZWJsb2NrX3Bmbl90b19wYWdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5oLTIyMi1cXG5tbS9wYWdlX2FsbG9jLmg6MjIzOmV4dGVybiB2b2lkIF9fZnJlZV9wYWdlc19jb3JlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxubW0vcGFnZV9hbGxvYy5oLTIyNC1cXHRcXHRlbnVtIG1lbWluaXRfY29udGV4dCBjb250ZXh0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTQ6MDk6MzIuNzI4NTQ3NzM1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc1NDc2MjgxMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBIb3RwbHVnIGFuZCBQb3RlbnRpYWwgRmFpbHVyZSBJbmplY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgbWVtb3J5IGhvdHBsdWcgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBgZ2VuZXJpY19vbmxpbmVfcGFnZSgpYCBmdW5jdGlvbiBpbiBgbW0vbWVtb3J5X2hvdHBsdWcuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbWVtb3J5IGRlYWxsb2NhdGlvbiB1c2luZyBgX19mcmVlX3BhZ2VzX2NvcmUoKWAgaGFwcGVucywgZmxhZ2dlZCB3aXRoIGBNRU1JTklUX0hPVFBMVUdgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgdmFyaW91cyB0cmlnZ2VycyBmb3IgdGhpcyBwcm9jZXNzLCB3aGljaCwgYXMgSSByZWNhbGwsIGNvbWUgdGhyb3VnaCBzeXNmcyBpbnRlcmZhY2VzIGxpa2UgYC9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L21lbW9yeVgvc3RhdGVgLCBvciBwZXJoYXBzIHZpYSBgZGF4X2ttZW1gIG9yIGV2ZW4gYHZpcnRpby1tZW1gIGluIHNvbWUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LlxuXG5Ob3csIEknbSBnZXR0aW5nIGludGVyZXN0ZWQgaW4gaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggbWVtb3J5IGZhaWx1cmUgc2NlbmFyaW9zLiAgSSBzdXNwZWN0IHRoZXJlIG1pZ2h0IGJlIGEgY29ubmVjdGlvbiBiZXR3ZWVuIGhvdHBsdWcgYW5kIGZhaWx1cmUgaW5qZWN0aW9uLCBwb3RlbnRpYWxseSB0aHJvdWdoIG1lY2hhbmlzbXMgbGlrZSBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGludmVzdGlnYXRlIHdoZXJlIGBhY3Rpb25fcmVzdWx0YCBpcyBjYWxsZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgLiBJIG5lZWQgdG8gcmV2aWV3IGFsbCB0aGUgY2FsbCBwYXRocyB0byBgYWN0aW9uX3Jlc3VsdGAgZnJvbSB0aGF0IGZpbGUsIGluY2x1ZGluZyBhbnkgdGhhdCBvcmlnaW5hdGUgZnJvbSBgbWFkdmlzZV9pbmplY3RfZXJyb3JgLiAgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aG9zZSBjYWxscyBkbyBhbmQgaG93IHRoZXkgbWlnaHQgcmVsYXRlIHRvIG1lbW9yeSBob3RwbHVnIGV2ZW50cyBhbmQgcG90ZW50aWFsIGhhcmR3YXJlIGlzc3Vlcy4gSSdtIGxvb2tpbmcgZm9yIGEgY2xlYXIgcGF0aCBjb25uZWN0aW5nIHRoZXNlIHNlZW1pbmdseSBkaXNwYXJhdGUgYXJlYXMuICBUaGlzIGludmVzdGlnYXRpb24gc2hvdWxkIGlsbHVtaW5hdGUgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvcnMgZHVyaW5nIGhvdHBsdWcgb3BlcmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwNDQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTQ6MDk6NDAuMjc2MTc4MjI2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc1NDA5OTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk1BRFZfSFdQT0lTT05cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9tbS9od3BvaXNvbi5yc3Q9MTA2PVRlc3RpbmdcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaHdwb2lzb24ucnN0LTEwOC1cXG5Eb2N1bWVudGF0aW9uL21tL2h3cG9pc29uLnJzdDoxMDk6KiBtYWR2aXNlKE1BRFZfSFdQT0lTT04sIC4uLi4pIChhcyByb290KSAtIFBvaXNvbiBhIHBhZ2UgaW4gdGhlXFxuRG9jdW1lbnRhdGlvbi9tbS9od3BvaXNvbi5yc3QtMTEwLSAgcHJvY2VzcyBmb3IgdGVzdGluZ1xcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHdwb2lzb24ucnN0PTk2PVBSX01DRV9LSUxMX0dFVFxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHdwb2lzb24ucnN0LTEwMS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9od3BvaXNvbi5yc3Q6MTAyOiogbWFkdmlzZShNQURWX0hXUE9JU09OLCAuLi4uKSAoYXMgcm9vdCkgLSDlnKjmtYvor5Xov4fnqIvkuK1Qb2lzb27kuIDkuKrpobXpnaJcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9od3BvaXNvbi5yc3QtMTAzLVxcbi0tXFxuYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTg1LSNkZWZpbmUgTUFEVl9VTk1FUkdFQUJMRSAxM1xcdFxcdC8qIEtTTSBtYXkgbm90IG1lcmdlIGlkZW50aWNhbCBwYWdlcyAqL1xcbmFyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaDo4NjojZGVmaW5lIE1BRFZfSFdQT0lTT05cXHQgMTAwXFx0XFx0LyogcG9pc29uIGEgcGFnZSBmb3IgdGVzdGluZyAqL1xcbmFyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC04Ny1cXG4tLVxcbmFyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTc0LVxcbmFyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oOjc1OiNkZWZpbmUgTUFEVl9IV1BPSVNPTiAgICAgMTAwXFx0XFx0LyogcG9pc29uIGEgcGFnZSBmb3IgdGVzdGluZyAqL1xcbmFyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTc2LSNkZWZpbmUgTUFEVl9TT0ZUX09GRkxJTkUgMTAxXFx0XFx0Lyogc29mdCBvZmZsaW5lIHBhZ2UgZm9yIHRlc3RpbmcgKi9cXG4tLVxcbmluY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oLTU1LSNkZWZpbmUgTUFEVl9ET0ZPUktcXHQxMVxcdFxcdC8qIGRvIGluaGVyaXQgYWNyb3NzIGZvcmsgKi9cXG5pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaDo1NjojZGVmaW5lIE1BRFZfSFdQT0lTT05cXHQxMDBcXHRcXHQvKiBwb2lzb24gYSBwYWdlIGZvciB0ZXN0aW5nICovXFxuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmgtNTctI2RlZmluZSBNQURWX1NPRlRfT0ZGTElORSAxMDFcXHRcXHQvKiBzb2Z0IG9mZmxpbmUgcGFnZSBmb3IgdGVzdGluZyAqL1xcbi0tXFxubW0vbWFkdmlzZS5jPTE1MDQ9c3RhdGljIGJvb2wgaXNfbWVtb3J5X2ZhaWx1cmUoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTUwNi1cXHRzd2l0Y2ggKG1hZHZfYmVoYXZpb3ItXFx1MDAzZWJlaGF2aW9yKSB7XFxubW0vbWFkdmlzZS5jOjE1MDc6XFx0Y2FzZSBNQURWX0hXUE9JU09OOlxcbm1tL21hZHZpc2UuYy0xNTA4LVxcdGNhc2UgTUFEVl9TT0ZUX09GRkxJTkU6XFxuLS1cXG5tbS9tYWR2aXNlLmM9MTUzMD1tYWR2aXNlX2JlaGF2aW9yX3ZhbGlkKGludCBiZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xNTYzLVxcdGNhc2UgTUFEVl9TT0ZUX09GRkxJTkU6XFxubW0vbWFkdmlzZS5jOjE1NjQ6XFx0Y2FzZSBNQURWX0hXUE9JU09OOlxcbm1tL21hZHZpc2UuYy0xNTY1LSNlbmRpZlxcbi0tXFxubW0vbWFkdmlzZS5jPTE4OTk9c3RhdGljIGludCBtYWR2aXNlX2RvX2JlaGF2aW9yKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW5faW4sXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTk1NS0gKiAgTUFEVl9LRUVQT05GT1JLIC0gdW5kbyB0aGUgZWZmZWN0IG9mIE1BRFZfV0lQRU9ORk9SS1xcbm1tL21hZHZpc2UuYzoxOTU2OiAqICBNQURWX0hXUE9JU09OIC0gdHJpZ2dlciBtZW1vcnkgZXJyb3IgaGFuZGxlciBhcyBpZiB0aGUgZ2l2ZW4gbWVtb3J5IHJhbmdlXFxubW0vbWFkdmlzZS5jLTE5NTctICpcXHRcXHR3ZXJlIGNvcnJ1cHRlZCBieSB1bnJlY292ZXJhYmxlIGhhcmR3YXJlIG1lbW9yeSBmYWlsdXJlLlxcbi0tXFxudG9vbHMvYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC0zNy0jZGVmaW5lIFBST1RfV1JJVEVcXHQweDJcXG50b29scy9hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oOjM4Oi8qIE1BRFZfSFdQT0lTT04gaXMgdW5kZWZpbmVkIG9uIGFscGhhLCBmaXggaXQgZm9yIHBlcmYgKi9cXG50b29scy9hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oOjM5OiNkZWZpbmUgTUFEVl9IV1BPSVNPTlxcdDEwMFxcbnRvb2xzL2FyY2gvYWxwaGEvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmgtNDAtLyogTUFEVl9TT0ZUX09GRkxJTkUgaXMgdW5kZWZpbmVkIG9uIGFscGhhLCBmaXggaXQgZm9yIHBlcmYgKi9cXG4tLVxcbnRvb2xzL2FyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC0xMC0jZGVmaW5lIE1BRFZfSFVHRVBBR0VcXHQxNFxcbnRvb2xzL2FyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaDoxMTojZGVmaW5lIE1BRFZfSFdQT0lTT05cXHQgMTAwXFxudG9vbHMvYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTEyLSNkZWZpbmUgTUFEVl9NRVJHRUFCTEVcXHQgMTJcXG4tLVxcbnRvb2xzL2FyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTM3LSNkZWZpbmUgUFJPVF9XUklURVxcdDB4MlxcbnRvb2xzL2FyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oOjM4OiNkZWZpbmUgTUFEVl9IV1BPSVNPTlxcdDEwMFxcbnRvb2xzL2FyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTM5LSNkZWZpbmUgTUFEVl9TT0ZUX09GRkxJTkUgMTAxXFxuLS1cXG50b29scy9hcmNoL3h0ZW5zYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC0zNy0jZGVmaW5lIFBST1RfV1JJVEVcXHQweDJcXG50b29scy9hcmNoL3h0ZW5zYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaDozODovKiBNQURWX0hXUE9JU09OIGlzIHVuZGVmaW5lZCBvbiB4dGVuc2EsIGZpeCBpdCBmb3IgcGVyZiAqL1xcbnRvb2xzL2FyY2gveHRlbnNhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oOjM5OiNkZWZpbmUgTUFEVl9IV1BPSVNPTlxcdDEwMFxcbnRvb2xzL2FyY2gveHRlbnNhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTQwLS8qIE1BRFZfU09GVF9PRkZMSU5FIGlzIHVuZGVmaW5lZCBvbiB4dGVuc2EsIGZpeCBpdCBmb3IgcGVyZiAqL1xcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmgtNTUtI2RlZmluZSBNQURWX0RPRk9SS1xcdDExXFx0XFx0LyogZG8gaW5oZXJpdCBhY3Jvc3MgZm9yayAqL1xcbnRvb2xzL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oOjU2OiNkZWZpbmUgTUFEVl9IV1BPSVNPTlxcdDEwMFxcdFxcdC8qIHBvaXNvbiBhIHBhZ2UgZm9yIHRlc3RpbmcgKi9cXG50b29scy9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaC01Ny0jZGVmaW5lIE1BRFZfU09GVF9PRkZMSU5FIDEwMVxcdFxcdC8qIHNvZnQgb2ZmbGluZSBwYWdlIGZvciB0ZXN0aW5nICovXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXJlYWQtaHdwb2lzb24uYz0xNzY9dGVzdF9odWdldGxiX3JlYWRfaHdwb2lzb24oaW50IGZkLCBzaXplX3QgbGVuLCBzaXplX3Qgd3JfY2h1bmtfc2l6ZSxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItcmVhZC1od3BvaXNvbi5jLTIwNS1cXHRod3BfYWRkciA9IGZpbGVtYXAgKyBsZW4gLyAyICsgcGFnZXNpemU7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1yZWFkLWh3cG9pc29uLmM6MjA2OlxcdGlmIChtYWR2aXNlKGh3cF9hZGRyLCBwYWdlc2l6ZSwgTUFEVl9IV1BPSVNPTikgXFx1MDAzYyAwKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1yZWFkLWh3cG9pc29uLmM6MjA3OlxcdFxcdGtzZnRfcGVycm9yKFxcXCJNQURWX0hXUE9JU09OIGZhaWxlZFxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItcmVhZC1od3BvaXNvbi5jLTIwOC1cXHRcXHRnb3RvIHVubWFwO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuYz01OD1zdGF0aWMgaW50IG1hZHZfaGFyZF9pbmplY3QoRklYVFVSRV9EQVRBKG1lbW9yeV9mYWlsdXJlKSAqIHNlbGYsIHZvaWQgKnZhZGRyKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmMtNTkte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmM6NjA6XFx0cmV0dXJuIG1hZHZpc2UodmFkZHIsIHNlbGYtXFx1MDAzZXBhZ2Vfc2l6ZSwgTUFEVl9IV1BPSVNPTik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuYy02MS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE0OjA5OjQxLjk1MTYwMjMyNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODM1OTc4NTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkRpdmluZyBpbnRvIGBtYWR2aXNlX2luamVjdF9lcnJvcmAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEknbSBnb2luZyB0byBoZWFkIHN0cmFpZ2h0IGZvciBgbW0vbWFkdmlzZS5jYCBhbmQgc3BlY2lmaWNhbGx5LCBJJ2xsIGJlIGxvb2tpbmcgYXQgdGhlIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgZnVuY3Rpb24uIFRoaXMgb25lIGlzIGtleSwgYW5kIEkga25vdyBpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgaGFuZGxlZCwgdGhlIG1lY2hhbmljcyBvZiBob3cgd2UncmUgaW5qZWN0aW5nIGVycm9ycyB1c2luZyBtYWR2aXNlLiBJIHdhbnQgdG8gc2VlIHRoZSBlcnJvciBpbmplY3Rpb24gYmVoYXZpb3IgZGV0YWlscy4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCB3aGVuIGl0IGNvbWVzIHRvIHVuZGVyc3RhbmRpbmcgZXhhY3RseSBob3cgdGhpcyBwYXJ0aWN1bGFyIGNvbnRyb2wgcGF0aCBiZWhhdmVzLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSBoYXMgdG8gc2F5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODM3NywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE0OjA5OjQzLjc4NzU4MzI5M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3MDU2NTc1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWR2aXNlX2luamVjdF9lcnJvclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tYWR2aXNlLmM9MTM1MD1zdGF0aWMgaW50IG1hZHZpc2Vfdm1hX2JlaGF2aW9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTE0NTgtICovXFxubW0vbWFkdmlzZS5jOjE0NTk6c3RhdGljIGludCBtYWR2aXNlX2luamVjdF9lcnJvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG5tbS9tYWR2aXNlLmMtMTQ2MC17XFxuLS1cXG5tbS9tYWR2aXNlLmM9MTUwND1zdGF0aWMgYm9vbCBpc19tZW1vcnlfZmFpbHVyZShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xNTE2LVxcbm1tL21hZHZpc2UuYzoxNTE3OnN0YXRpYyBpbnQgbWFkdmlzZV9pbmplY3RfZXJyb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxubW0vbWFkdmlzZS5jLTE1MTgte1xcbi0tXFxubW0vbWFkdmlzZS5jPTE4OTk9c3RhdGljIGludCBtYWR2aXNlX2RvX2JlaGF2aW9yKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW5faW4sXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTkwOC1cXHRcXHRyYW5nZS1cXHUwMDNlZW5kID0gc3RhcnQgKyBsZW5faW47XFxubW0vbWFkdmlzZS5jOjE5MDk6XFx0XFx0cmV0dXJuIG1hZHZpc2VfaW5qZWN0X2Vycm9yKG1hZHZfYmVoYXZpb3IpO1xcbm1tL21hZHZpc2UuYy0xOTEwLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTQ6MDk6NDUuNDU4MTU1NjA3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgwNTY1NzY5NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBgbWFkdmlzZV9pbmplY3RfZXJyb3JgKipcblxuT2theSwgdGltZSB0byBkaXNzZWN0IHRoZSBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBmdW5jdGlvbiBpcyBzdXBwb3NlZCB0byB3b3JrIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgaG93IGl0IG1pZ2h0IGRldmlhdGUgZnJvbSBleHBlY3RlZCBiZWhhdmlvciBvciBpbnRlcmFjdCB3aXRoIHRoZSBrZXJuZWwgaW4gdW5leHBlY3RlZCB3YXlzLiBNeSBmb2N1cyBpcyBvbiBwb3RlbnRpYWwgZWRnZSBjYXNlcywgcmFjZSBjb25kaXRpb25zLCBhbmQgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgdW5pdCB0aGF0IGNvdWxkIGxlYWQgdG8gdnVsbmVyYWJpbGl0aWVzIG9yIHN1YnRsZSBidWdzLiBJJ20gZ29pbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaW5qZWN0aW9uIGxvZ2ljIGl0c2VsZiDigJMgd2hhdCB0cmlnZ2VycyBpdCwgaG93IHByZWNpc2VseSBpcyB0aGUgZXJyb3IgY29tbXVuaWNhdGVkIG9yIHNpbXVsYXRlZCwgYW5kIGFyZSB0aGVyZSBhbnkgb2J2aW91cyAob3Igbm9uLW9idmlvdXMpIGZsYXdzIGluIHRoZSBlcnJvciBoYW5kbGluZz8gSSB3aWxsIGxvb2sgZm9yIGFueSBhcmVhcyB0aGF0IHBvdGVudGlhbGx5IGJ5cGFzcyBpbnRlbmRlZCBtZW1vcnkgcHJvdGVjdGlvbi4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCB0aGUgcGFnZSBmYXVsdCBoYW5kbGluZyBwYXRocywgYW5kIGNvbnNpZGVyIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgd2l0aCBvdGhlciBvcGVyYXRpb25zIHRoYXQgbWFuaXB1bGF0ZSB0aGUgc2FtZSBtZW1vcnkgcmVnaW9ucy4gTGV0J3Mgc2VlLi4uIHdoZXJlIGRvZXMgdGhlIGtlcm5lbCBhY3R1YWxseSBpbmplY3QgdGhlIFwiZXJyb3JcIiBhZnRlciBgbWFkdmlzZWA/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyByZWxhdGVkIHRvIHRoZSBlcnJvciBzdGF0ZT8gSXMgdGhlIGVycm9yIHRydWx5IGFuIGVycm9yLCBvciBhIHRyaWdnZXIgdGhhdCBleHBvc2VzIHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBhbGxvY2F0aW9uIG1lY2hhbmlzbXM/IExldCdzIGdldCBzdGFydGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODg5MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE0OjA5OjUzLjUxNDczNTI4M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTcwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWFkdmlzZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0NTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0NTU6XFx0I2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxcbjE0NTY6XFx0LypcXG4xNDU3OlxcdCAqIEVycm9yIGluamVjdGlvbiBzdXBwb3J0IGZvciBtZW1vcnkgZXJyb3IgaGFuZGxpbmcuXFxuMTQ1ODpcXHQgKi9cXG4xNDU5OlxcdHN0YXRpYyBpbnQgbWFkdmlzZV9pbmplY3RfZXJyb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuMTQ2MDpcXHR7XFxuMTQ2MTpcXHRcXHR1bnNpZ25lZCBsb25nIHNpemU7XFxuMTQ2MjpcXHRcXHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gbWFkdl9iZWhhdmlvci1cXHUwMDNlcmFuZ2Uuc3RhcnQ7XFxuMTQ2MzpcXHRcXHR1bnNpZ25lZCBsb25nIGVuZCA9IG1hZHZfYmVoYXZpb3ItXFx1MDAzZXJhbmdlLmVuZDtcXG4xNDY0OlxcdFxcbjE0NjU6XFx0XFx0aWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKVxcbjE0NjY6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4xNDY3OlxcdFxcbjE0Njg6XFx0XFx0Zm9yICg7IHN0YXJ0IFxcdTAwM2MgZW5kOyBzdGFydCArPSBzaXplKSB7XFxuMTQ2OTpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHBmbjtcXG4xNDcwOlxcdFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbjE0NzE6XFx0XFx0XFx0aW50IHJldDtcXG4xNDcyOlxcdFxcbjE0NzM6XFx0XFx0XFx0cmV0ID0gZ2V0X3VzZXJfcGFnZXNfZmFzdChzdGFydCwgMSwgMCwgXFx1MDAyNnBhZ2UpO1xcbjE0NzQ6XFx0XFx0XFx0aWYgKHJldCAhPSAxKVxcbjE0NzU6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xNDc2OlxcdFxcdFxcdHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpO1xcbjE0Nzc6XFx0XFxuMTQ3ODpcXHRcXHRcXHQvKlxcbjE0Nzk6XFx0XFx0XFx0ICogV2hlbiBzb2Z0IG9mZmxpbmluZyBodWdlcGFnZXMsIGFmdGVyIG1pZ3JhdGluZyB0aGUgcGFnZVxcbjE0ODA6XFx0XFx0XFx0ICogd2UgZGlzc29sdmUgaXQsIHRoZXJlZm9yZSBpbiB0aGUgc2Vjb25kIGxvb3AgXFxcInBhZ2VcXFwiIHdpbGxcXG4xNDgxOlxcdFxcdFxcdCAqIG5vIGxvbmdlciBiZSBhIGNvbXBvdW5kIHBhZ2UuXFxuMTQ4MjpcXHRcXHRcXHQgKi9cXG4xNDgzOlxcdFxcdFxcdHNpemUgPSBwYWdlX3NpemUoY29tcG91bmRfaGVhZChwYWdlKSk7XFxuMTQ4NDpcXHRcXG4xNDg1OlxcdFxcdFxcdGlmIChtYWR2X2JlaGF2aW9yLVxcdTAwM2ViZWhhdmlvciA9PSBNQURWX1NPRlRfT0ZGTElORSkge1xcbjE0ODY6XFx0XFx0XFx0XFx0cHJfaW5mbyhcXFwiU29mdCBvZmZsaW5pbmcgcGZuICUjbHggYXQgcHJvY2VzcyB2aXJ0dWFsIGFkZHJlc3MgJSNseFxcXFxuXFxcIixcXG4xNDg3OlxcdFxcdFxcdFxcdFxcdCBwZm4sIHN0YXJ0KTtcXG4xNDg4OlxcdFxcdFxcdFxcdHJldCA9IHNvZnRfb2ZmbGluZV9wYWdlKHBmbiwgTUZfQ09VTlRfSU5DUkVBU0VEKTtcXG4xNDg5OlxcdFxcdFxcdH0gZWxzZSB7XFxuMTQ5MDpcXHRcXHRcXHRcXHRwcl9pbmZvKFxcXCJJbmplY3RpbmcgbWVtb3J5IGZhaWx1cmUgZm9yIHBmbiAlI2x4IGF0IHByb2Nlc3MgdmlydHVhbCBhZGRyZXNzICUjbHhcXFxcblxcXCIsXFxuMTQ5MTpcXHRcXHRcXHRcXHRcXHQgcGZuLCBzdGFydCk7XFxuMTQ5MjpcXHRcXHRcXHRcXHRyZXQgPSBtZW1vcnlfZmFpbHVyZShwZm4sIE1GX0FDVElPTl9SRVFVSVJFRCB8IE1GX0NPVU5UX0lOQ1JFQVNFRCB8IE1GX1NXX1NJTVVMQVRFRCk7XFxuMTQ5MzpcXHRcXHRcXHRcXHRpZiAocmV0ID09IC1FT1BOT1RTVVBQKVxcbjE0OTQ6XFx0XFx0XFx0XFx0XFx0cmV0ID0gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTQ6MDk6NTMuNTE0OTU0MTMzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUxMDgyMzQzNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRGVlcCBEaXZlIGludG8gRUZJIEhhcmR3YXJlIFBvaXNvbmluZyBpbiB0aGUgS2VybmVsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHRyYWNlIHRoZSBwYXRoIG9mIGhhcmR3YXJlIHBvaXNvbmluZyBldmVudHMuIEl0IGxvb2tzIGxpa2UgYG1hZHZpc2UoYWRkciwgbGVuLCBNQURWX0hXUE9JU09OKWAgdHJpZ2dlcnMgYSBjaGFpbiBvZiBldmVudHMsIHN0YXJ0aW5nIHdpdGggYG1lbW9yeV9mYWlsdXJlKClgLCBsZWFkaW5nIHRvIGBhY3Rpb25fcmVzdWx0KClgLCBhbmQgdWx0aW1hdGVseSBjYWxsaW5nIGBlZmlfaHdwb2lzb25fcmVjb3JkX3BmbihwZm4pYC4gVGhhdCdzIHRoZSBjb3JlIGZ1bmN0aW9uIEkgbmVlZCB0byB1bmRlcnN0YW5kLlxuXG5JIGFsc28gc2VlIG90aGVyIGluamVjdGlvbiBtZXRob2RzIG1lbnRpb25lZDogdGhlIGRlYnVnZnMgZW50cnkgYC9zeXMva2VybmVsL2RlYnVnL2h3cG9pc29uL2NvcnJ1cHQtcGZuYCBmb3IgZGlyZWN0IGluamVjdGlvbiwgYW5kIHRoZSBSQVMvTUNFIGluamVjdGlvbiBtZWNoYW5pc21zIHVzaW5nIGAvZGV2L21jZWxvZ2AgYW5kIEFQRUkuIFRoZXNlIHByb3ZpZGUgd2F5cyB0byBzaW11bGF0ZSB0aGUgaGFyZHdhcmUgZXJyb3IgdGhhdCB1bHRpbWF0ZWx5IHJlYWNoZXMgdGhlIHNhbWUgcG9pbnQuXG5cbk5vdywgbGV0J3MgemVybyBpbiBvbiBgZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmNgLiBUaGUga2V5IGZ1bmN0aW9uIGhlcmUgaXMgY2xlYXJseSBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pYC4gIExvb2tpbmcgYXQgdGhlIGNvZGUsIGl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQgZ2V0cyBhIHBvaW50ZXIgdG8gYSBgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnlgIHZpYSBgZWZpX3BvaXNvbmVkX21lbW9yeSgpYCwgY29udmVydHMgdGhlIHBhZ2UgZnJhbWUgbnVtYmVyIChgcGZuYCkgdG8gYSBwaHlzaWNhbCBhZGRyZXNzLCBhbmQgdGhlbiBtYXBzIHRoZSBhZGRyZXNzIHRvIGEgYml0IHdpdGhpbiBhIGJpdG1hcC4gVGhpcyBiaXRtYXAgc2VlbXMgdG8gdHJhY2sgd2hpY2ggbWVtb3J5IHVuaXRzIGFyZSBjb25zaWRlcmVkIFwicG9pc29uZWRcIi4gQSBzaW1wbGUgY2hlY2sgdG8gZW5zdXJlIHdlJ3JlIHdpdGhpbiB0aGUgdmFsaWQgcG9pc29uZWQgcmVnaW9uIGlzIGFsc28gcHJlc2VudC4gSWYgdGhlIGFkZHJlc3MgaXMgdmFsaWQsIGl0IHRoZW4gc2V0cyB0aGUgcmVsZXZhbnQgYml0IGluIHRoZSBgcG0tXHUwMDNlYml0bWFwYC5cblxuSSBhbHNvIG5vdGljZWQgYHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeWAuICBUaGlzIGNvZGUncyBqb2IgaXMgdG8gY2hlY2sgaWYgYSBzcGVjaWZpZWQgcGh5c2ljYWwgbWVtb3J5IHJhbmdlIGNvbnRhaW5zIGFueSBwb2lzb25lZCBtZW1vcnkuIEl0IGRvZXMgc2ltaWxhciBhZGRyZXNzIGNhbGN1bGF0aW9ucyB0byBmaW5kIHRoZSBhcHByb3ByaWF0ZSBiaXQgcmFuZ2Ugd2l0aGluIHRoZSBwb2lzb25lZCBtZW1vcnkgYml0bWFwLiBJIHNlZSBpdCBoYW5kbGVzIHRoZSBlZGdlIGNhc2VzIHdoZXJlIHRoZSBwcm92aWRlZCByYW5nZSBtaWdodCBzdGFydCBiZWZvcmUgb3IgZXh0ZW5kIGJleW9uZCB0aGUga25vd24gcG9pc29uZWQgbWVtb3J5IHJlZ2lvbi4gSXQgdXNlcyBgZmluZF9uZXh0X2JpdGAgdG8gZWZmaWNpZW50bHkgY2hlY2sgaWYgYW55IGJpdCBpcyBzZXQgd2l0aGluIHRoZSByYW5nZS5cblxuVGhlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBkcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uY2AgY29tcGxldGVseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dC4gSSdsbCByZWFkIHRoaXMgZmlsZSBmcm9tIHRvcCB0byBib3R0b20sIHBheWluZyBhdHRlbnRpb24gdG8gdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwb2lzb25lZCBtZW1vcnkgcmVnaW9uIGFuZCBob3cgdGhlIGJpdG1hcCBpcyBtYW5hZ2VkLCB0byBidWlsZCBhIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk4NDIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNDowOTo1OC42MjMxOTExNDVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqIFJ1bnRpbWUgc2lkZSBvZiB0aGUgTElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWSB0YWJsZTogb25lIGJpdCBwZXJcXG4gICA0OlxcdCAqIEVGSV9QT0lTT05fVU5JVF9TSVpFLCBzZXQgaGVyZSBhcyBmcmFtZXMgZ28gYmFkLCBob25vcmVkIGJ5IHRoZSBuZXh0IGtlcm5lbC5cXG4gICA1OlxcdCAqXFxuICAgNjpcXHQgKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXFxuICAgNzpcXHQgKiBDb3B5cmlnaHQgKGMpIDIwMjYgQnJlbm8gTGVpdGFvIFxcdTAwM2NsZWl0YW9AZGViaWFuLm9yZ1xcdTAwM2VcXG4gICA4OlxcdCAqL1xcbiAgIDk6XFx0XFxuICAxMDpcXHQjZGVmaW5lIHByX2ZtdChmbXQpIFxcXCJlZmk6IFxcXCIgZm10XFxuICAxMTpcXHRcXG4gIDEyOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRtYXAuaFxcdTAwM2VcXG4gIDEzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9lZmkuaFxcdTAwM2VcXG4gIDE0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9pby5oXFx1MDAzZVxcbiAgMTU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xvZzIuaFxcdTAwM2VcXG4gIDE2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1ibG9jay5oXFx1MDAzZVxcbiAgMTc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tLmhcXHUwMDNlXFxuICAxODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvb3ZlcmZsb3cuaFxcdTAwM2VcXG4gIDE5OlxcdFxcbiAgMjA6XFx0c3RhdGljIGJvb2wgX19pbml0XFxuICAyMTpcXHRlZmlfcG9pc29uX2dlb21ldHJ5X3ZhbGlkKGNvbnN0IHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSlcXG4gIDIyOlxcdHtcXG4gIDIzOlxcdFxcdHU2NCBuYml0cztcXG4gIDI0OlxcdFxcbiAgMjU6XFx0XFx0LyogV2hvbGUgd29yZHMsIGFuZCBhIGJpdCBjb3VudCB0aGF0IGNhbiBiZSB0YWtlbiB3aXRob3V0IHdyYXBwaW5nLiAqL1xcbiAgMjY6XFx0XFx0aWYgKCFwbS1cXHUwMDNlc2l6ZSB8fCAhSVNfQUxJR05FRChwbS1cXHUwMDNlc2l6ZSwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSB8fFxcbiAgMjc6XFx0XFx0ICAgIGNoZWNrX211bF9vdmVyZmxvdyhwbS1cXHUwMDNlc2l6ZSwgKHU2NClCSVRTX1BFUl9CWVRFLCBcXHUwMDI2bmJpdHMpKVxcbiAgMjg6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAgMjk6XFx0XFxuICAzMDpcXHRcXHRpZiAocG0tXFx1MDAzZXVuaXRfc2l6ZSBcXHUwMDNjIFBBR0VfU0laRSB8fCAhaXNfcG93ZXJfb2ZfMihwbS1cXHUwMDNldW5pdF9zaXplKSlcXG4gIDMxOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gIDMyOlxcdFxcbiAgMzM6XFx0XFx0cmV0dXJuIElTX0FMSUdORUQocG0tXFx1MDAzZXBoeXNfYmFzZSwgcG0tXFx1MDAzZXVuaXRfc2l6ZSk7XFxuICAzNDpcXHR9XFxuICAzNTpcXHRcXG4gIDM2OlxcdC8qIFRoZSB0YWJsZSBtYXkgY29tZSBmcm9tIGFuIGVhcmxpZXIga2VybmVsLCBzbyB2ZXQgaXQgYmVmb3JlIHVzaW5nIGl0LiAqL1xcbiAgMzc6XFx0c3RhdGljIGJvb2wgX19pbml0XFxuICAzODpcXHRlZmlfcG9pc29uX3RhYmxlX3ZhbGlkKGNvbnN0IHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSlcXG4gIDM5OlxcdHtcXG4gIDQwOlxcdFxcdGlmIChwbS1cXHUwMDNldmVyc2lvbiAhPSAxKSB7XFxuICA0MTpcXHRcXHRcXHRwcl93YXJuKFxcXCJJZ25vcmluZyBwb2lzb25lZC1tZW1vcnkgdGFibGUgd2l0aCB2ZXJzaW9uICV1XFxcXG5cXFwiLFxcbiAgNDI6XFx0XFx0XFx0XFx0cG0tXFx1MDAzZXZlcnNpb24pO1xcbiAgNDM6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAgNDQ6XFx0XFx0fVxcbiAgNDU6XFx0XFxuICA0NjpcXHRcXHRpZiAoIWVmaV9wb2lzb25fZ2VvbWV0cnlfdmFsaWQocG0pKSB7XFxuICA0NzpcXHRcXHRcXHRwcl93YXJuKFxcXCJJZ25vcmluZyBtYWxmb3JtZWQgcG9pc29uZWQtbWVtb3J5IHRhYmxlXFxcXG5cXFwiKTtcXG4gIDQ4OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gIDQ5OlxcdFxcdH1cXG4gIDUwOlxcdFxcbiAgNTE6XFx0XFx0cmV0dXJuIHRydWU7XFxuICA1MjpcXHR9XFxuICA1MzpcXHRcXG4gIDU0OlxcdC8qXFxuICA1NTpcXHQgKiBWZXQgdGhlIGluaGVyaXRlZCB0YWJsZSBhbmQgaGFuZCBpdHMgcGFnZXMgdG8gbWVtYmxvY2ssIHRoZSB3YXkgdGhlXFxuICA1NjpcXHQgKiB1bmFjY2VwdGVkIG1lbW9yeSB0YWJsZSBpcyBoYW5kbGVkLiBJdCBpcyBFRkkgQUNQSSByZWNsYWltIG1lbW9yeSwgd2hpY2hcXG4gIDU3OlxcdCAqIGJlY29tZXMgRTgyMF9UWVBFX0FDUEkgYW5kIHdvdWxkIG90aGVyd2lzZSBzdGF5IG91dCBvZiB0aGUgZGlyZWN0IG1hcCwgYW5kXFxuICA1ODpcXHQgKiB0b3VjaGluZyBpdCB0aGVuIGZhdWx0cy4gQ2FsbGVkIGZyb20gZWZpX2NvbmZpZ19wYXJzZV90YWJsZXMoKSwgc29cXG4gIDU5OlxcdCAqIGV2ZXJ5dGhpbmcgbGF0ZXIgY2FuIHJlYWNoIGl0IHdpdGggZWZpX3BvaXNvbmVkX21lbW9yeSgpLlxcbiAgNjA6XFx0ICovXFxuICA2MTpcXHR2b2lkIF9faW5pdCBlZmlfcG9pc29uZWRfbWVtb3J5X3Jlc2VydmUodm9pZClcXG4gIDYyOlxcdHtcXG4gIDYzOlxcdFxcdHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTtcXG4gIDY0OlxcdFxcdHBoeXNfYWRkcl90IHN0YXJ0LCBlbmQ7XFxuICA2NTpcXHRcXG4gIDY2OlxcdFxcdGlmIChlZmkucG9pc29uZWRfbWVtb3J5ID09IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpXFxuICA2NzpcXHRcXHRcXHRyZXR1cm47XFxuICA2ODpcXHRcXG4gIDY5OlxcdFxcdHBtID0gZWFybHlfbWVtcmVtYXAoZWZpLnBvaXNvbmVkX21lbW9yeSwgc2l6ZW9mKCpwbSkpO1xcbiAgNzA6XFx0XFx0aWYgKCFwbSkge1xcbiAgNzE6XFx0XFx0XFx0cHJfd2FybihcXFwiQ291bGQgbm90IG1hcCBwb2lzb25lZC1tZW1vcnkgdGFibGVcXFxcblxcXCIpO1xcbiAgNzI6XFx0XFx0XFx0ZWZpLnBvaXNvbmVkX21lbW9yeSA9IEVGSV9JTlZBTElEX1RBQkxFX0FERFI7XFxuICA3MzpcXHRcXHRcXHRyZXR1cm47XFxuICA3NDpcXHRcXHR9XFxuICA3NTpcXHRcXG4gIDc2OlxcdFxcdGlmICghZWZpX3BvaXNvbl90YWJsZV92YWxpZChwbSkpIHtcXG4gIDc3OlxcdFxcdFxcdGVmaS5wb2lzb25lZF9tZW1vcnkgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSO1xcbiAgNzg6XFx0XFx0XFx0ZWFybHlfbWVtdW5tYXAocG0sIHNpemVvZigqcG0pKTtcXG4gIDc5OlxcdFxcdFxcdHJldHVybjtcXG4gIDgwOlxcdFxcdH1cXG4gIDgxOlxcdFxcbiAgODI6XFx0XFx0c3RhcnQgPSBQQUdFX0FMSUdOX0RPV04oZWZpLnBvaXNvbmVkX21lbW9yeSk7XFxuICA4MzpcXHRcXHRlbmQgPSBQQUdFX0FMSUdOKGVmaS5wb2lzb25lZF9tZW1vcnkgKyBzaXplb2YoKnBtKSArIHBtLVxcdTAwM2VzaXplKTtcXG4gIDg0OlxcdFxcdGVhcmx5X21lbXVubWFwKHBtLCBzaXplb2YoKnBtKSk7XFxuICA4NTpcXHRcXG4gIDg2OlxcdFxcdG1lbWJsb2NrX2FkZChzdGFydCwgZW5kIC0gc3RhcnQpO1xcbiAgODc6XFx0XFx0bWVtYmxvY2tfcmVzZXJ2ZShzdGFydCwgZW5kIC0gc3RhcnQpO1xcbiAgODg6XFx0fVxcbiAgODk6XFx0XFxuICA5MDpcXHQvKiBUaGUgdGFibGUsIHZldHRlZCBhdCBwYXJzZSB0aW1lLCBvciBOVUxMIGlmIHRoaXMgYm9vdCBoYXMgbm9uZS4gKi9cXG4gIDkxOlxcdHN0YXRpYyBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqZWZpX3BvaXNvbmVkX21lbW9yeSh2b2lkKVxcbiAgOTI6XFx0e1xcbiAgOTM6XFx0XFx0aWYgKGVmaS5wb2lzb25lZF9tZW1vcnkgPT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUilcXG4gIDk0OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAgOTU6XFx0XFxuICA5NjpcXHRcXHRyZXR1cm4gcGh5c190b192aXJ0KGVmaS5wb2lzb25lZF9tZW1vcnkpO1xcbiAgOTc6XFx0fVxcbiAgOTg6XFx0XFxuICA5OTpcXHQvKiBEb2VzIHRoZSByYW5nZSBjb3ZlciBhIHVuaXQgYW4gZWFybGllciBrZXJuZWwgcmVjb3JkZWQgYXMgYmFkPyAqL1xcbiAxMDA6XFx0Ym9vbCByYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnkocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTQ6MDk6NTguNjIzMjc3MzU1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5NTY3NTgyNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0J3MgZ29pbmcgdGhyb3VnaCBteSBtaW5kIGFzIEkgYXBwcm9hY2ggdGhpcyBgZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmNgIGZpbGUsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIFBvaXNvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGludG8gdGhlIGhlYXJ0IG9mIHRoaXMgYHBvaXNvbi5jYCBmaWxlIHdpdGhpbiB0aGUgRUZJIGZpcm13YXJlIGRyaXZlcnMuIEdpdmVuIHRoZSBuYW1lLCBcInBvaXNvblwiIGltbWVkaWF0ZWx5IGZsYWdzIGEgcG90ZW50aWFsIGFyZWEgb2YgaW50ZXJlc3QgZm9yIG1lbW9yeSBjb3JydXB0aW9uIHZ1bG5lcmFiaWxpdGllcywgZGVmZW5zaXZlIHByb2dyYW1taW5nIHRlY2huaXF1ZXMsIG9yIHBlcmhhcHMgZXZlbiBhIGRlbGliZXJhdGUsIGlmIHVudXN1YWwsIG1lbW9yeSBzYW5pdGl6YXRpb24gc3RyYXRlZ3kuIEknbSBleHBlY3RpbmcgdG8gZmluZCBjb2RlIHRoYXQgZGVhbHMgd2l0aCBlaXRoZXIgZGVsaWJlcmF0ZWx5IG92ZXJ3cml0aW5nIG1lbW9yeSB3aXRoIGtub3duIHBhdHRlcm5zLCBwb3RlbnRpYWxseSB0byBkZXRlY3QgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyBvciBvdGhlciBtZW1vcnkgZXJyb3JzLCBvciBjb2RlIHRoYXQgaXMgZGVmZW5zaXZlIGluIG5hdHVyZS5cblxuSSdsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBmb3IgaG93IG1lbW9yeSByZWdpb25zIGFyZSBoYW5kbGVkLCBhbGxvY2F0ZWQsIGRlYWxsb2NhdGVkLCBhbmQgZXNwZWNpYWxseSBob3cgdGhleSBhcmUgaW5pdGlhbGl6ZWQgYW5kIHBvdGVudGlhbGx5IG92ZXJ3cml0dGVuLiBJJ2xsIGJlIHdhdGNoaW5nIGZvciBhbnkgdXNlIG9mIG1hZ2ljIHZhbHVlcywgc2VudGluZWwgdmFsdWVzLCBvciBkZWJ1Zy1vcmllbnRlZCBwYXR0ZXJucyB0aGF0IHNjcmVhbSBcInRoaXMgaXMgYSBjYW5hcnkgaW4gdGhlIGNvYWwgbWluZS5cIiBUaGUgRUZJIGNvbnRleHQgc3VnZ2VzdHMgSSBzaG91bGQgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgaW50ZXJhY3Rpb24gd2l0aCBmaXJtd2FyZSB0YWJsZXMsIHJ1bnRpbWUgc2VydmljZXMsIG9yIHBvdGVudGlhbGx5IGV2ZW4gU01SQU0uIEl0IGlzIHZpdGFsIHRvIHNlZSBob3cgdGhlc2UgcG90ZW50aWFsbHkgc2Vuc2l0aXZlIHJlZ2lvbnMgYXJlIHByb3RlY3RlZC5cblxuTXkgZmlyc3QgcmVhZC10aHJvdWdoIHdpbGwgcHJvYmFibHkgYmUgYSBicm9hZCBzY2FuLCBidXQgSSdsbCB6ZXJvIGluIG9uIGZ1bmN0aW9ucyByZWxhdGVkIHRvIG1lbW9yeSBhbGxvY2F0aW9uLCBjb3B5aW5nLCBhbmQgaW5pdGlhbGl6YXRpb24uIEknbGwgYmUgdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIGV4cGxvaXQgdmVjdG9ycyBhcyBJIGdvLCBzdWNoIGFzIGJ1ZmZlciBvdmVyZmxvd3MsIG9mZi1ieS1vbmUgZXJyb3JzLCBvciBpbmNvcnJlY3QgcG9pbnRlciBhcml0aG1ldGljLCBwYXJ0aWN1bGFybHkgaW4gdGhlIGNvbnRleHQgb2YgdGhlIEVGSSBlbnZpcm9ubWVudC4gQW55IGN1c3RvbSBhbGxvY2F0aW9uIG9yIGRlYWxsb2NhdGlvbiByb3V0aW5lcyB3b3VsZCBiZSBlc3BlY2lhbGx5IGludGVyZXN0aW5nLCBhcyB0aG9zZSBvZnRlbiBoYXJib3Igc3VidGxlIGJ1Z3MuIEknbSBob3BpbmcgdG8gdW5kZXJzdGFuZCBob3cgXCJwb2lzb25cIiBpcyBhcHBsaWVkIGFuZCB3aGF0IHRoZSBpbnRlbmRlZCBwdXJwb3NlIG9mIHRoYXQgXCJwb2lzb25cIiBtaWdodCBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI0MDEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE0OjEwOjAxLjU4MDAzODI2NloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDA6XFx0Ym9vbCByYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnkocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG4gMTAxOlxcdHtcXG4gMTAyOlxcdFxcdHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSA9IGVmaV9wb2lzb25lZF9tZW1vcnkoKTtcXG4gMTAzOlxcdFxcdHU2NCBmaXJzdCwgbGFzdCwgbmJpdHM7XFxuIDEwNDpcXHRcXG4gMTA1OlxcdFxcdGlmICghcG0pXFxuIDEwNjpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDEwNzpcXHRcXG4gMTA4OlxcdFxcdG5iaXRzID0gcG0tXFx1MDAzZXNpemUgKiBCSVRTX1BFUl9CWVRFO1xcbiAxMDk6XFx0XFxuIDExMDpcXHRcXHRpZiAoc3RhcnQgKyBzaXplIFxcdTAwM2M9IHBtLVxcdTAwM2VwaHlzX2Jhc2UpXFxuIDExMTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDExMjpcXHRcXHRpZiAoc3RhcnQgXFx1MDAzYyBwbS1cXHUwMDNlcGh5c19iYXNlKVxcbiAxMTM6XFx0XFx0XFx0c3RhcnQgPSBwbS1cXHUwMDNlcGh5c19iYXNlO1xcbiAxMTQ6XFx0XFxuIDExNTpcXHRcXHRmaXJzdCA9IChzdGFydCAtIHBtLVxcdTAwM2VwaHlzX2Jhc2UpIC8gcG0tXFx1MDAzZXVuaXRfc2l6ZTtcXG4gMTE2OlxcdFxcdGlmIChmaXJzdCBcXHUwMDNlPSBuYml0cylcXG4gMTE3OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMTE4OlxcdFxcbiAxMTk6XFx0XFx0bGFzdCA9IChzdGFydCArIHNpemUgLSAxIC0gcG0tXFx1MDAzZXBoeXNfYmFzZSkgLyBwbS1cXHUwMDNldW5pdF9zaXplO1xcbiAxMjA6XFx0XFx0bGFzdCA9IG1pbihsYXN0LCBuYml0cyAtIDEpO1xcbiAxMjE6XFx0XFxuIDEyMjpcXHRcXHRyZXR1cm4gZmluZF9uZXh0X2JpdChwbS1cXHUwMDNlYml0bWFwLCBsYXN0ICsgMSwgZmlyc3QpIFxcdTAwM2M9IGxhc3Q7XFxuIDEyMzpcXHR9XFxuIDEyNDpcXHRcXG4gMTI1OlxcdC8qXFxuIDEyNjpcXHQgKiBBIGJpdCBpcyBuZXZlciBjbGVhcmVkOiBpdCBzdGFuZHMgZm9yIGEgd2hvbGUgRUZJX1BPSVNPTl9VTklUX1NJWkUsIHNvIGFuXFxuIDEyNzpcXHQgKiB1bnBvaXNvbiBjYW5ub3QgdGVsbCB3aGV0aGVyIHRoZSB1bml0IGFzIGEgd2hvbGUgaXMgZ29vZCBhZ2Fpbi5cXG4gMTI4OlxcdCAqL1xcbiAxMjk6XFx0dm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbilcXG4gMTMwOlxcdHtcXG4gMTMxOlxcdFxcdHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSA9IGVmaV9wb2lzb25lZF9tZW1vcnkoKTtcXG4gMTMyOlxcdFxcdHBoeXNfYWRkcl90IGFkZHIgPSBQRk5fUEhZUyhwZm4pO1xcbiAxMzM6XFx0XFx0dTY0IHVuaXQ7XFxuIDEzNDpcXHRcXG4gMTM1OlxcdFxcdGlmICghcG0gfHwgYWRkciBcXHUwMDNjIHBtLVxcdTAwM2VwaHlzX2Jhc2UpXFxuIDEzNjpcXHRcXHRcXHRyZXR1cm47XFxuIDEzNzpcXHRcXG4gMTM4OlxcdFxcdHVuaXQgPSAoYWRkciAtIHBtLVxcdTAwM2VwaHlzX2Jhc2UpIC8gcG0tXFx1MDAzZXVuaXRfc2l6ZTtcXG4gMTM5OlxcdFxcdGlmICh1bml0IFxcdTAwM2MgcG0tXFx1MDAzZXNpemUgKiBCSVRTX1BFUl9CWVRFKVxcbiAxNDA6XFx0XFx0XFx0c2V0X2JpdCh1bml0LCBwbS1cXHUwMDNlYml0bWFwKTtcXG4gMTQxOlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTQ6MTA6MDEuNTgwMTIwODQ2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg0Nzk4MzgwMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IFBvaXNvbmVkIE1lbW9yeSBpbiB0aGUgTGludXggS2VybmVsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBgbW0vcGFnZV9hbGxvYy5jYCBhbmQgYG1tL21lbW9yeS1mYWlsdXJlLmNgIGZpbGVzLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGUgaW50ZXJhY3Rpb24gb2YgbWVtb3J5IHBvaXNvbmluZyB3aXRoaW4gdGhlIHBhZ2UgYWxsb2NhdGlvbiBhbmQgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgc3Vic3lzdGVtcy4gVGhlIGNvZGUgc25pcHBldHMgZm9yIGBwb2lzb25fYmxvY2tgIGFuZCBgaHdwb2lzb25fYm9vdF9wYWdlYCBhcmUgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLCBlc3BlY2lhbGx5IGhvdyB0aGV5IGludGVyYWN0IHdpdGggYHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBwb2lzb25lZCBtZW1vcnkgaXMgaWRlbnRpZmllZCBhbmQgdGhlbiBoYW5kbGVkIGR1cmluZyBwYWdlIGZyZWVpbmcsIHBhcnRpY3VsYXJseSB0aGUgVE9ETyBjb21tZW50IGluIGBfX2ZyZWVfcGFnZXNfY29yZWAuXG5cbk5vdywgdGhlIEtjb25maWcgb3B0aW9ucy4gYEVGSV9QT0lTT05FRF9NRU1PUllgIGlzIHdoYXQgZmxhZ3MgdGhlIGZlYXR1cmUsIGFuZCBpdCBkZXBlbmRzIG9uIGBFRklfU1RVQmAsIGBNRU1PUllfRkFJTFVSRWAsIGFuZCBgNjRCSVRgLiAgVGhpcyBpbXBsaWVzIGEgVUVGSSBlbnZpcm9ubWVudCwgc29tZXRoaW5nIEkgY2FuIHJlYWRpbHkgdGVzdCBpbiBRRU1VLiAgYENPTkZJR19FRklgIGlzIGEgcHJlcmVxdWlzaXRlIGZvciBgRUZJX1NUVUJgLlxuXG5OZXh0LCB0aGUgZXhlY3V0aW9uIGZsb3cuIEluIGEgUUVNVS9VRUZJIHNldHVwLCB0aGUgRUZJIHN0dWIgaW5pdGlhbGl6ZXMsIHNldHMgdXAgbWVtb3J5IHRhYmxlcywgdGhlIGtlcm5lbCBib290cywgcHJvY2Vzc2VzIHRoZXNlIHRhYmxlcyAoZS5nLiBgZWZpX2NvbmZpZ19wYXJzZV90YWJsZXNgKSwgYW5kIHRoZW4gY2FsbHMgYGVmaV9wb2lzb25lZF9tZW1vcnlfcmVzZXJ2ZSgpYC4gIFJ1bnRpbWUgaW5qZWN0aW9uICh2aWEgYG1hZHZpc2VgIG9yIHN5c2ZzL2RlYnVnZnMpIHRoZW4gdHJpZ2dlcnMgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYC4gQ3JpdGljYWxseSwgYHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeWAgYWxzbyBjb21lcyBpbnRvIHBsYXkgZHVyaW5nIGJvb3QgYW5kIGhvdHBsdWcgb3BlcmF0aW9ucy5cblxuSXMgdGhpcyBmdXp6YWJsZT8gQWJzb2x1dGVseS4gVGhpcyBpcyBjb3JlIE1NIGFuZCBFRkkgY2hhbmdlcy4gRnVuY3Rpb25zIEkgd2FudCB0byBmb2N1cyBvbjogYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCwgYHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeWAsIGBod3BvaXNvbl9ib290X3BhZ2VgLCBhbmQgYHBvaXNvbl9ibG9ja2AuIEFsc28sIHNpbmNlIHRoZSBmdXp6aW5nIGlzIHRhcmdldGluZyBFRkkgZW52aXJvbm1lbnRzLCBvdGhlciBjYWxscyBhcmUgd29ydGggdGVzdGluZywgYGFjdGlvbl9yZXN1bHRgLCBhbmQgYG1lbW9yeV9mYWlsdXJlYC5cblxuSSdsbCBwaW5wb2ludCB0aGUgZnVuY3Rpb25zIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgYnkgdGhpcyBwYXRjaC4gIGBkcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uY2AgaW50cm9kdWNlcyBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gLCBgcmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5YCwgYW5kIGBlZmlfcG9pc29uZWRfbWVtb3J5X3Jlc2VydmVgLiAgYG1tL21lbW9yeS1mYWlsdXJlLmNgIGdpdmVzIHVzIGBod3BvaXNvbl9ib290X3BhZ2VgLCBgYWN0aW9uX3Jlc3VsdGAsIGFuZCBgbWVtb3J5X2ZhaWx1cmVgLiAgYG1tL3BhZ2VfYWxsb2MuY2AgaGFzIGBfX2ZyZWVfcGFnZXNfY29yZWAuIEhvd2V2ZXIsIGBfX2ZyZWVfcGFnZXNfY29yZWAgaXMgb25seSBkdXJpbmcgYm9vdC9ob3RwbHVnLCB3aGljaCBtYXkgbm90IHJlcXVpcmUgZm9jdXMuIFRoZSByZWxldmFudCBmdW5jdGlvbnMgYXJlIGBlZmlfaHdwb2lzb25fcmVjb3JkX3BmbmAsIGByYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnlgLCBhbmQgYGh3cG9pc29uX2Jvb3RfcGFnZWAuXG5cbkknbGwgY2hlY2sgdGhlIHBhdGNoIGZvciB0aGUgb3RoZXIgZnVuY3Rpb25zOiBgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGVgLCBgZWZpX3BvaXNvbmVkX21lbW9yeV9yZXNlcnZlYCwgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCwgYHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeWAsIGFuZCBgaHdwb2lzb25fYm9vdF9wYWdlYC5cblxuYGFjdGlvbl9yZXN1bHRgIGlzIHN0YXRpYywgYnV0IGBtZW1vcnlfZmFpbHVyZWAgYW5kIHRoZSBvdGhlcnMgYXJlIGdsb2JhbCBzeW1ib2xzLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQ6IGBFRklfUE9JU09ORURfTUVNT1JZYCwgYE1FTU9SWV9GQUlMVVJFYCwgYEVGSV9TVFVCYCwgYW5kIGBFRklgLlxuXG5UaGVyZWZvcmUsIGJhc2VkIG9uIG15IGV4cGVydCBhc3Nlc3NtZW50OlxuXG4qICAgKipXb3J0aEZ1enppbmc6KiogVFJVRVxuKiAgICoqRW5hYmxlQ29uZmlnczoqKiBgW1wiRUZJX1BPSVNPTkVEX01FTU9SWVwiLCBcIk1FTU9SWV9GQUlMVVJFXCIsIFwiRUZJX1NUVUJcIiwgXCJFRklcIl1gXG4qICAgKipGb2N1c1N5bWJvbHM6KiogYFtcImVmaV9od3BvaXNvbl9yZWNvcmRfcGZuXCIsIFwicmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5XCIsIFwiaHdwb2lzb25fYm9vdF9wYWdlXCIsIFwibWVtb3J5X2ZhaWx1cmVcIl1gXG4qICAgKipSZWFzb25pbmc6KiogVGhlIGludGVyc2VjdGlvbiBvZiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBFRkkvVUVGSSBpbnRlcmFjdGlvbnMsIGFuZCBhIGZlYXR1cmUgZGVzaWduZWQgdG8gZGV0ZWN0IGFuZCBoYW5kbGUgbWVtb3J5IGZhaWx1cmVzIHByZXNlbnRzIGEgaGlnaC12YWx1ZSBmdXp6aW5nIHRhcmdldC4gVGhlIHBvdGVudGlhbCBmb3IgYnVncyBpcyBoaWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzQ3NSwiT3V0cHV0VG9rZW5zIjoyMDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTQ6MTA6MTAuMDU5OTYxMDQ1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY0OTM3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVGSV9QT0lTT05FRF9NRU1PUllcIixcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCIsXG4gICAgXCJFRklfU1RVQlwiLFxuICAgIFwiRUZJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZWZpX2h3cG9pc29uX3JlY29yZF9wZm5cIixcbiAgICBcInJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeVwiLFxuICAgIFwiaHdwb2lzb25fYm9vdF9wYWdlXCIsXG4gICAgXCJtZW1vcnlfZmFpbHVyZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdHJhY2tpbmcgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IGFjcm9zcyBrZXhlYyB2aWEgYW4gRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUgKENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZKS4gSXQgaW50cm9kdWNlcyBob29rcyBpbiBjb3JlIG1lbW9yeS1mYWlsdXJlIGhhbmRsaW5nIChlZmlfaHdwb2lzb25fcmVjb3JkX3BmbiBpbiBhY3Rpb25fcmVzdWx0KSBhbmQgbWVtb3J5IGluaXRpYWxpemF0aW9uL2hvdHBsdWcgKF9fZnJlZV9wYWdlc19jb3JlLCBod3BvaXNvbl9ib290X3BhZ2UpLiBUaGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIGF0IHJ1bnRpbWUgdmlhIG1lbW9yeSBmYWlsdXJlIG1lY2hhbmlzbXMgc3VjaCBhcyBtYWR2aXNlKE1BRFZfSFdQT0lTT04pIGFuZCBtZW1vcnkgaG90cGx1Z2dpbmcgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHdpdGggRUZJLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVGSV9QT0lTT05FRF9NRU1PUllcIixcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCIsXG4gICAgXCJFRklfU1RVQlwiLFxuICAgIFwiRUZJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZWZpX2h3cG9pc29uX3JlY29yZF9wZm5cIixcbiAgICBcInJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeVwiLFxuICAgIFwiaHdwb2lzb25fYm9vdF9wYWdlXCIsXG4gICAgXCJtZW1vcnlfZmFpbHVyZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdHJhY2tpbmcgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IGFjcm9zcyBrZXhlYyB2aWEgYW4gRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUgKENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZKS4gSXQgaW50cm9kdWNlcyBob29rcyBpbiBjb3JlIG1lbW9yeS1mYWlsdXJlIGhhbmRsaW5nIChlZmlfaHdwb2lzb25fcmVjb3JkX3BmbiBpbiBhY3Rpb25fcmVzdWx0KSBhbmQgbWVtb3J5IGluaXRpYWxpemF0aW9uL2hvdHBsdWcgKF9fZnJlZV9wYWdlc19jb3JlLCBod3BvaXNvbl9ib290X3BhZ2UpLiBUaGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIGF0IHJ1bnRpbWUgdmlhIG1lbW9yeSBmYWlsdXJlIG1lY2hhbmlzbXMgc3VjaCBhcyBtYWR2aXNlKE1BRFZfSFdQT0lTT04pIGFuZCBtZW1vcnkgaG90cGx1Z2dpbmcgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHdpdGggRUZJLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNDoxMDoxMC4xNDY0NjI3MjVaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDIyNTQ5MTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTQ6MTA6MTAuMTQ3MDUwOTk2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTM0MjE5NTY3MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIEVGSSBwb2lzb25lZCBtZW1vcnkgdHJhY2tpbmcgKENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZKSB0byBwcmVzZXJ2ZSBoYXJkd2FyZS1wb2lzb25lZCBwYWdlIGluZm9ybWF0aW9uIGFjcm9zcyBrZXhlYyByZWJvb3RzLiBcXG5cXG4xLiBBbGxvY2F0aW9uIFxcdTAwMjYgSW5pdGlhbGl6YXRpb246IFRoZSB0YWJsZSBzdHJ1Y3R1cmUgYHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5YCBhbmQgaXRzIHRyYWlsaW5nIGJpdG1hcCBhcmUgYWxsb2NhdGVkIGluIHRoZSBFRkkgc3R1YiBhbmQgZXhwbGljaXRseSBmdWxseSBpbml0aWFsaXplZCAoYWxsIGhlYWRlciBmaWVsZHMgYXNzaWduZWQsIGFuZCBgbWVtc2V0KHBtLVxcdTAwM2ViaXRtYXAsIDAsIGJpdG1hcF9zaXplKWAgY2xlYXJzIHRoZSBiaXRtYXApLlxcbjIuIE1lbW9yeSBBY2Nlc3NlczogUnVudGltZSBvcGVyYXRpb25zIChgcmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5YCwgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCwgYHBvaXNvbl9ibG9ja2AsIGFuZCBgaHdwb2lzb25fYm9vdF9wYWdlYCkgb25seSByZWFkIGFuZCB1cGRhdGUgZnVsbHkgaW5pdGlhbGl6ZWQgbWVtb3J5IHN0cnVjdHVyZXMgYW5kIHN0cnVjdCBwYWdlIGZsYWdzLlxcbjMuIE5vIFVuaW5pdGlhbGl6ZWQgTGVha3Mgb3IgUmVhZHM6IFRoZXJlIGFyZSBubyBkYXRhIHRyYW5zZmVycyB0byB1c2VyIHNwYWNlLCBubyBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIG5vIGV4cG9zZWQgcGFkZGluZy5cXG40LiBLQVNBTiB2cyBLTVNBTjogUG90ZW50aWFsIHJpc2tzIHN1Y2ggYXMgaW52YWxpZCBwb2ludGVyIG1hdGgsIG91dC1vZi1ib3VuZHMgYml0bWFwIGFjY2Vzc2VzLCBvciBtZW1vcnkgcmVzZXJ2YXRpb24gZXJyb3JzIGFyZSBwcm9wZXJseSBoYW5kbGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBLTVNBTiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTc5Y2JiMTA1YzU5ODE3YWYzMmEyMmEwMDE3MWY3YmI5MTQ2NzY1NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTQ6MDk6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpLmMgYi9hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpLmNcbmluZGV4IDBjMzlhZGI5NmI5MTIuLjJiMzdiOTZhMzZlMDkgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpLmNcbisrKyBiL2FyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmkuY1xuQEAgLTkzLDYgKzkzLDkgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgKiBjb25zdCBlZmlfdGFibGVzW10gPSB7XG4gI2lmZGVmIENPTkZJR19VTkFDQ0VQVEVEX01FTU9SWVxuIFx0XHUwMDI2ZWZpLnVuYWNjZXB0ZWQsXG4gI2VuZGlmXG4rI2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXG4rXHRcdTAwMjZlZmkucG9pc29uZWRfbWVtb3J5LFxuKyNlbmRpZlxuIH07XG4gXG4gdTY0IGVmaV9zZXR1cDtcdFx0LyogZWZpIHNldHVwX2RhdGEgcGh5c2ljYWwgYWRkcmVzcyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWcgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnXG5pbmRleCAyOWUwNzI5Mjk5ZjViLi5hYWZjZDQxYmMwMDYzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ1xuQEAgLTI2Myw2ICsyNjMsMTQgQEAgY29uZmlnIEVGSV9DT0NPX1NFQ1JFVFxuIFx0ICB2aXJ0L2NvY28vZWZpX3NlY3JldCBtb2R1bGUgdG8gYWNjZXNzIHRoZSBzZWNyZXRzLCB3aGljaCBpbiB0dXJuXG4gXHQgIGFsbG93cyB1c2Vyc3BhY2UgcHJvZ3JhbXMgdG8gYWNjZXNzIHRoZSBpbmplY3RlZCBzZWNyZXRzLlxuIFxuK2NvbmZpZyBFRklfUE9JU09ORURfTUVNT1JZXG4rXHRkZWZfYm9vbCB5XG4rXHRkZXBlbmRzIG9uIEVGSV9TVFVCIFx1MDAyNlx1MDAyNiBNRU1PUllfRkFJTFVSRSBcdTAwMjZcdTAwMjYgNjRCSVRcbitcdGhlbHBcbitcdCAgUmVjb3JkIHBhZ2UgZnJhbWVzIHRoYXQgYXJlIGhhcmR3YXJlLXBvaXNvbmVkIHdoaWxlIHRoaXMga2VybmVsIHJ1bnNcbitcdCAgaW50byBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSwgYW5kIGhvbm9yIHRoYXQgdGFibGUgZWFybHkgb24gdGhlXG4rXHQgIG5leHQga2VybmVsIHNvIGEga2V4ZWMgZG9lcyBub3QgaGFuZCBrbm93bi1iYWQgUkFNIGJhY2sgb3V0LlxuK1xuIGNvbmZpZyBPVk1GX0RFQlVHX0xPR1xuIFx0Ym9vbCBcIkV4cG9zZSBPVk1GIGZpcm13YXJlIGRlYnVnIGxvZyB2aWEgc3lzZnNcIlxuIFx0ZGVwZW5kcyBvbiBFRklcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9NYWtlZmlsZSBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlXG5pbmRleCA4ZWZiY2Y2OTllNGZmLi4wNWQwYTQ5MDkyM2U1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlXG5AQCAtNDMsNCArNDMsNSBAQCBvYmotJChDT05GSUdfRUZJX0VBUkxZQ09OKVx0XHQrPSBlYXJseWNvbi5vXG4gb2JqLSQoQ09ORklHX1VFRklfQ1BFUl9BUk0pXHRcdCs9IGNwZXItYXJtLm9cbiBvYmotJChDT05GSUdfVUVGSV9DUEVSX1g4NilcdFx0Kz0gY3Blci14ODYub1xuIG9iai0kKENPTkZJR19VTkFDQ0VQVEVEX01FTU9SWSlcdFx0Kz0gdW5hY2NlcHRlZF9tZW1vcnkub1xuK29iai0kKENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZKVx0Kz0gcG9pc29uLm9cbiBvYmotJChDT05GSUdfVEVFX1NUTU1fRUZJKVx0XHQrPSBzdG1tL3RlZV9zdG1tX2VmaS5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuY1xuaW5kZXggNmQ5ODdkN2Y5Nzc4MS4uNTViMmVlNTNmYzI2OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jXG4rKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuY1xuQEAgLTU1LDYgKzU1LDkgQEAgc3RydWN0IGVmaSBfX3JlYWRfbW9zdGx5IGVmaSA9IHtcbiAjaWZkZWYgQ09ORklHX1VOQUNDRVBURURfTUVNT1JZXG4gXHQudW5hY2NlcHRlZFx0XHQ9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIsXG4gI2VuZGlmXG4rI2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXG4rXHQucG9pc29uZWRfbWVtb3J5XHQ9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIsXG4rI2VuZGlmXG4gfTtcbiBFWFBPUlRfU1lNQk9MKGVmaSk7XG4gXG5AQCAtNjc3LDYgKzY4MCw5IEBAIHN0YXRpYyBjb25zdCBlZmlfY29uZmlnX3RhYmxlX3R5cGVfdCBjb21tb25fdGFibGVzW10gX19pbml0Y29uc3QgPSB7XG4gI2lmZGVmIENPTkZJR19VTkFDQ0VQVEVEX01FTU9SWVxuIFx0e0xJTlVYX0VGSV9VTkFDQ0VQVEVEX01FTV9UQUJMRV9HVUlELFx0XHUwMDI2ZWZpLnVuYWNjZXB0ZWQsXHRcIlVuYWNjZXB0ZWRcIlx0fSxcbiAjZW5kaWZcbisjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllcbitcdHtMSU5VWF9FRklfUE9JU09ORURfTUVNT1JZX1RBQkxFX0dVSUQsXHRcdTAwMjZlZmkucG9pc29uZWRfbWVtb3J5LFx0XCJQT0lTT05cIlx0fSxcbisjZW5kaWZcbiAjaWZkZWYgQ09ORklHX0VGSV9HRU5FUklDX1NUVUJcbiBcdHtMSU5VWF9FRklfUFJJTUFSWV9ESVNQTEFZX1RBQkxFX0dVSUQsXHRcdTAwMjZwcmltYXJ5X2Rpc3BsYXlfdGFibGVcdFx0XHR9LFxuICNlbmRpZlxuQEAgLTg3Nyw2ICs4ODMsOCBAQCBpbnQgX19pbml0IGVmaV9jb25maWdfcGFyc2VfdGFibGVzKGNvbnN0IGVmaV9jb25maWdfdGFibGVfdCAqY29uZmlnX3RhYmxlcyxcbiBcdFx0fVxuIFx0fVxuIFxuK1x0ZWZpX3BvaXNvbmVkX21lbW9yeV9yZXNlcnZlKCk7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmNcbmluZGV4IDQ4ZjkzZjc3NThlOWUuLjVjYmU2NzU0OTEzMzMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jXG4rKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jXG5AQCAtNzc0LDMgKzc3NCwxMDMgQEAgdm9pZCBlZmlfcmVtYXBfaW1hZ2UodW5zaWduZWQgbG9uZyBpbWFnZV9iYXNlLCB1bnNpZ25lZCBhbGxvY19zaXplLFxuIFx0XHRcdGVmaV93YXJuKFwiRmFpbGVkIHRvIHJlbWFwIGRhdGEgcmVnaW9uIG5vbi1leGVjdXRhYmxlXFxuXCIpO1xuIFx0fVxuIH1cbitcbisjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllcbisvKlxuKyAqIEZpbmQgdGhlIGJhc2UgYW5kIHRvcCBvZiB0aGUgbWVtb3J5LCBzbywgd2UgY2FuIGNyZWF0ZSB0aGUgYml0bWFwIGZvclxuKyAqIHRoZSBmdWxsIHJhbmdlLlxuKyAqL1xuK3N0YXRpYyBlZmlfc3RhdHVzX3QgZWZpX2dldF9yYW1fcmFuZ2UodTY0ICpiYXNlLCB1NjQgKnRvcClcbit7XG4rXHRzdHJ1Y3QgZWZpX2Jvb3RfbWVtbWFwICptYXAgX19mcmVlKGVmaV9wb29sKSA9IE5VTEw7XG4rXHR1NjQgcmFtX2Jhc2UgPSBVTExPTkdfTUFYLCByYW1fdG9wID0gMDtcbitcdGVmaV9zdGF0dXNfdCBzdGF0dXM7XG4rXHRpbnQgaSwgbnJfZGVzYztcbitcbitcdHN0YXR1cyA9IGVmaV9nZXRfbWVtb3J5X21hcChcdTAwMjZtYXAsIGZhbHNlKTtcbitcdGlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpXG4rXHRcdHJldHVybiBzdGF0dXM7XG4rXG4rXHRucl9kZXNjID0gbWFwLVx1MDAzZW1hcF9zaXplIC8gbWFwLVx1MDAzZWRlc2Nfc2l6ZTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2Rlc2M7IGkrKykge1xuK1x0XHRlZmlfbWVtb3J5X2Rlc2NfdCAqZDtcbitcbitcdFx0ZCA9IGVmaV9tZW1kZXNjX3B0cigodW5zaWduZWQgbG9uZyltYXAtXHUwMDNlbWFwLCBtYXAtXHUwMDNlZGVzY19zaXplLCBpKTtcbitcdFx0cmFtX2Jhc2UgPSBtaW4ocmFtX2Jhc2UsIGQtXHUwMDNlcGh5c19hZGRyKTtcbitcdFx0cmFtX3RvcCA9IG1heChyYW1fdG9wLFxuK1x0XHRcdCAgICAgIGQtXHUwMDNlcGh5c19hZGRyICsgZC1cdTAwM2VudW1fcGFnZXMgKiBFRklfUEFHRV9TSVpFKTtcbitcdH1cbitcdGlmICghcmFtX3RvcCB8fCByYW1fYmFzZSA9PSBVTExPTkdfTUFYKVxuK1x0XHRyZXR1cm4gRUZJX05PVF9GT1VORDtcbitcbitcdCpiYXNlID0gcm91bmRfZG93bihyYW1fYmFzZSwgRUZJX1BPSVNPTl9VTklUX1NJWkUpO1xuK1x0KnRvcCA9IHJvdW5kX3VwKHJhbV90b3AsIEVGSV9QT0lTT05fVU5JVF9TSVpFKTtcbitcbitcdHJldHVybiBFRklfU1VDQ0VTUztcbit9XG4rXG4rLyogVGhlIHNpemUgb2YgdGhlIGJpdG1hcCAqL1xuK3N0YXRpYyB1NjQgZWZpX3BvaXNvbl9iaXRtYXBfc2l6ZSh1NjQgc3Bhbilcbit7XG4rXHR1NjQgYnl0ZXMgPSBESVZfUk9VTkRfVVAoRElWX1JPVU5EX1VQKHNwYW4sIEVGSV9QT0lTT05fVU5JVF9TSVpFKSxcbitcdFx0XHRcdCBCSVRTX1BFUl9CWVRFKTtcbitcbitcdHJldHVybiByb3VuZF91cChieXRlcywgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICplZmlfcG9pc29uX2FsbG9jKHU2NCBwaHlzX2Jhc2UsXG4rXHRcdFx0XHRcdFx0XHQgIHU2NCBiaXRtYXBfc2l6ZSlcbit7XG4rXHRzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG07XG4rXHRlZmlfc3RhdHVzX3Qgc3RhdHVzO1xuK1xuK1x0c3RhdHVzID0gZWZpX2JzX2NhbGwoYWxsb2NhdGVfcG9vbCwgRUZJX0FDUElfUkVDTEFJTV9NRU1PUlksXG4rXHRcdFx0ICAgICBzaXplb2YoKnBtKSArIGJpdG1hcF9zaXplLCAodm9pZCAqKilcdTAwMjZwbSk7XG4rXHRpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdHBtLVx1MDAzZXZlcnNpb24gPSAxO1xuK1x0cG0tXHUwMDNldW5pdF9zaXplID0gRUZJX1BPSVNPTl9VTklUX1NJWkU7XG4rXHRwbS1cdTAwM2VwaHlzX2Jhc2UgPSBwaHlzX2Jhc2U7XG4rXHRwbS1cdTAwM2VzaXplID0gYml0bWFwX3NpemU7XG4rXHRtZW1zZXQocG0tXHUwMDNlYml0bWFwLCAwLCBiaXRtYXBfc2l6ZSk7XG4rXG4rXHRyZXR1cm4gcG07XG4rfVxuK1xuKy8qIFRoaXMgbmVlZHMgdG8gYmUgZG9uZSB3aGlsZSBib290IHNlcnZpY2UgaXMgc3RpbGwgYWN0aXZlICovXG4rdm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKVxuK3tcbitcdGVmaV9ndWlkX3QgcG9pc29uZWRfbWVtb3J5X3RhYmxlX2d1aWQgPSBMSU5VWF9FRklfUE9JU09ORURfTUVNT1JZX1RBQkxFX0dVSUQ7XG4rXHRzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG07XG4rXHR1NjQgcmFtX2Jhc2UsIHJhbV90b3AsIGJpdG1hcF9zaXplO1xuK1x0ZWZpX3N0YXR1c190IHN0YXR1cztcbitcbitcdC8qIEEgdGFibGUgaW5zdGFsbGVkIGJ5IGFuIGVhcmxpZXIgYm9vdCByaWRlcyB0aGUgc3lzdGVtIHRhYmxlIGFjcm9zcyBrZXhlYy4gKi9cbitcdHBtID0gZ2V0X2VmaV9jb25maWdfdGFibGUocG9pc29uZWRfbWVtb3J5X3RhYmxlX2d1aWQpO1xuK1x0aWYgKHBtKSB7XG4rXHRcdGlmIChwbS1cdTAwM2V2ZXJzaW9uICE9IDEpXG4rXHRcdFx0ZWZpX2VycihcIlVua25vd24gdmVyc2lvbiBvZiBwb2lzb25lZC1tZW1vcnkgdGFibGVcXG5cIik7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGlmIChlZmlfZ2V0X3JhbV9yYW5nZShcdTAwMjZyYW1fYmFzZSwgXHUwMDI2cmFtX3RvcCkgIT0gRUZJX1NVQ0NFU1MpIHtcbitcdFx0ZWZpX2VycihcIkZhaWxlZCB0byBzaXplIHRoZSBwb2lzb25lZC1tZW1vcnkgdGFibGUhXFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRiaXRtYXBfc2l6ZSA9IGVmaV9wb2lzb25fYml0bWFwX3NpemUocmFtX3RvcCAtIHJhbV9iYXNlKTtcbitcdHBtID0gZWZpX3BvaXNvbl9hbGxvYyhyYW1fYmFzZSwgYml0bWFwX3NpemUpO1xuK1x0aWYgKCFwbSkge1xuK1x0XHRlZmlfZXJyKFwiRmFpbGVkIHRvIGFsbG9jYXRlIHBvaXNvbmVkLW1lbW9yeSB0YWJsZSFcXG5cIik7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHN0YXR1cyA9IGVmaV9ic19jYWxsKGluc3RhbGxfY29uZmlndXJhdGlvbl90YWJsZSxcbitcdFx0XHQgICAgIFx1MDAyNnBvaXNvbmVkX21lbW9yeV90YWJsZV9ndWlkLCBwbSk7XG4rXHRpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7XG4rXHRcdGVmaV9ic19jYWxsKGZyZWVfcG9vbCwgcG0pO1xuK1x0XHRlZmlfZXJyKFwiRmFpbGVkIHRvIGluc3RhbGwgcG9pc29uZWQtbWVtb3J5IGNvbmZpZyB0YWJsZSFcXG5cIik7XG4rXHR9XG4rfVxuKyNlbmRpZlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuY1xuaW5kZXggMjM1Yzk3MzhkYTJkNi4uMjJhMzE1ZTI4MTRhMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuY1xuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jXG5AQCAtMTc5LDYgKzE3OSw3IEBAIGVmaV9zdGF0dXNfdCBlZmlfc3R1Yl9jb21tb24oZWZpX2hhbmRsZV90IGhhbmRsZSxcbiBcdFx0XHQgRUZJX1JUX1NVUFBPUlRFRF9TRVRfVklSVFVBTF9BRERSRVNTX01BUCk7XG4gXG4gXHRpbnN0YWxsX21lbXJlc2VydmVfdGFibGUoKTtcbitcdGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKCk7XG4gXG4gXHRzdGF0dXMgPSBlZmlfYm9vdF9rZXJuZWwoaGFuZGxlLCBpbWFnZSwgaW1hZ2VfYWRkciwgY21kbGluZV9wdHIpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmhcbmluZGV4IGZkOTFmYzE1ZWM4MTAuLjQ0NDM2ODY5YzRlZmUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaFxuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmhcbkBAIC0xMTY5LDYgKzExNjksMTIgQEAgZWZpX2VuYWJsZV9yZXNldF9hdHRhY2tfbWl0aWdhdGlvbih2b2lkKSB7IH1cbiBcbiB2b2lkIGVmaV9yZXRyaWV2ZV9ldmVudGxvZyh2b2lkKTtcbiBcbisjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllcbit2b2lkIGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKHZvaWQpO1xuKyNlbHNlXG4rc3RhdGljIGlubGluZSB2b2lkIGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKHZvaWQpIHsgfVxuKyNlbmRpZlxuK1xuIHN0cnVjdCBzeXNmYl9kaXNwbGF5X2luZm8gKmFsbG9jX3ByaW1hcnlfZGlzcGxheSh2b2lkKTtcbiBzdHJ1Y3Qgc3lzZmJfZGlzcGxheV9pbmZvICpfX2FsbG9jX3ByaW1hcnlfZGlzcGxheSh2b2lkKTtcbiB2b2lkIGZyZWVfcHJpbWFyeV9kaXNwbGF5KHN0cnVjdCBzeXNmYl9kaXNwbGF5X2luZm8gKmRweSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jXG5pbmRleCAwYmFlMGYwNmI2NzYzLi4zMTM2MTMyYjk2MjhhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jXG4rKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmNcbkBAIC0xMDI0LDYgKzEwMjQsOCBAQCB2b2lkIF9fbm9yZXR1cm4gZWZpX3N0dWJfZW50cnkoZWZpX2hhbmRsZV90IGhhbmRsZSxcbiBcbiBcdHNldHVwX3VuYWNjZXB0ZWRfbWVtb3J5KCk7XG4gXG4rXHRpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSgpO1xuK1xuIFx0c3RhdHVzID0gZXhpdF9ib290KGJvb3RfcGFyYW1zLCBoYW5kbGUpO1xuIFx0aWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUykge1xuIFx0XHRlZmlfZXJyKFwiZXhpdF9ib290KCkgZmFpbGVkIVxcblwiKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZTE2ZDQzZjQ0MzhlZVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmNcbkBAIC0wLDAgKzEsMTQxIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKy8qXG4rICogUnVudGltZSBzaWRlIG9mIHRoZSBMSU5VWF9FRklfUE9JU09ORURfTUVNT1JZIHRhYmxlOiBvbmUgYml0IHBlclxuKyAqIEVGSV9QT0lTT05fVU5JVF9TSVpFLCBzZXQgaGVyZSBhcyBmcmFtZXMgZ28gYmFkLCBob25vcmVkIGJ5IHRoZSBuZXh0IGtlcm5lbC5cbisgKlxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgQnJlbm8gTGVpdGFvIFx1MDAzY2xlaXRhb0BkZWJpYW4ub3JnXHUwMDNlXG4rICovXG4rXG4rI2RlZmluZSBwcl9mbXQoZm10KSBcImVmaTogXCIgZm10XG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYml0bWFwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9lZmkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9sb2cyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1ibG9jay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L292ZXJmbG93LmhcdTAwM2VcbitcbitzdGF0aWMgYm9vbCBfX2luaXRcbitlZmlfcG9pc29uX2dlb21ldHJ5X3ZhbGlkKGNvbnN0IHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSlcbit7XG4rXHR1NjQgbmJpdHM7XG4rXG4rXHQvKiBXaG9sZSB3b3JkcywgYW5kIGEgYml0IGNvdW50IHRoYXQgY2FuIGJlIHRha2VuIHdpdGhvdXQgd3JhcHBpbmcuICovXG4rXHRpZiAoIXBtLVx1MDAzZXNpemUgfHwgIUlTX0FMSUdORUQocG0tXHUwMDNlc2l6ZSwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSB8fFxuK1x0ICAgIGNoZWNrX211bF9vdmVyZmxvdyhwbS1cdTAwM2VzaXplLCAodTY0KUJJVFNfUEVSX0JZVEUsIFx1MDAyNm5iaXRzKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKHBtLVx1MDAzZXVuaXRfc2l6ZSBcdTAwM2MgUEFHRV9TSVpFIHx8ICFpc19wb3dlcl9vZl8yKHBtLVx1MDAzZXVuaXRfc2l6ZSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiBJU19BTElHTkVEKHBtLVx1MDAzZXBoeXNfYmFzZSwgcG0tXHUwMDNldW5pdF9zaXplKTtcbit9XG4rXG4rLyogVGhlIHRhYmxlIG1heSBjb21lIGZyb20gYW4gZWFybGllciBrZXJuZWwsIHNvIHZldCBpdCBiZWZvcmUgdXNpbmcgaXQuICovXG4rc3RhdGljIGJvb2wgX19pbml0XG4rZWZpX3BvaXNvbl90YWJsZV92YWxpZChjb25zdCBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0pXG4re1xuK1x0aWYgKHBtLVx1MDAzZXZlcnNpb24gIT0gMSkge1xuK1x0XHRwcl93YXJuKFwiSWdub3JpbmcgcG9pc29uZWQtbWVtb3J5IHRhYmxlIHdpdGggdmVyc2lvbiAldVxcblwiLFxuK1x0XHRcdHBtLVx1MDAzZXZlcnNpb24pO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4rXG4rXHRpZiAoIWVmaV9wb2lzb25fZ2VvbWV0cnlfdmFsaWQocG0pKSB7XG4rXHRcdHByX3dhcm4oXCJJZ25vcmluZyBtYWxmb3JtZWQgcG9pc29uZWQtbWVtb3J5IHRhYmxlXFxuXCIpO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rLypcbisgKiBWZXQgdGhlIGluaGVyaXRlZCB0YWJsZSBhbmQgaGFuZCBpdHMgcGFnZXMgdG8gbWVtYmxvY2ssIHRoZSB3YXkgdGhlXG4rICogdW5hY2NlcHRlZCBtZW1vcnkgdGFibGUgaXMgaGFuZGxlZC4gSXQgaXMgRUZJIEFDUEkgcmVjbGFpbSBtZW1vcnksIHdoaWNoXG4rICogYmVjb21lcyBFODIwX1RZUEVfQUNQSSBhbmQgd291bGQgb3RoZXJ3aXNlIHN0YXkgb3V0IG9mIHRoZSBkaXJlY3QgbWFwLCBhbmRcbisgKiB0b3VjaGluZyBpdCB0aGVuIGZhdWx0cy4gQ2FsbGVkIGZyb20gZWZpX2NvbmZpZ19wYXJzZV90YWJsZXMoKSwgc29cbisgKiBldmVyeXRoaW5nIGxhdGVyIGNhbiByZWFjaCBpdCB3aXRoIGVmaV9wb2lzb25lZF9tZW1vcnkoKS5cbisgKi9cbit2b2lkIF9faW5pdCBlZmlfcG9pc29uZWRfbWVtb3J5X3Jlc2VydmUodm9pZClcbit7XG4rXHRzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG07XG4rXHRwaHlzX2FkZHJfdCBzdGFydCwgZW5kO1xuK1xuK1x0aWYgKGVmaS5wb2lzb25lZF9tZW1vcnkgPT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUilcbitcdFx0cmV0dXJuO1xuK1xuK1x0cG0gPSBlYXJseV9tZW1yZW1hcChlZmkucG9pc29uZWRfbWVtb3J5LCBzaXplb2YoKnBtKSk7XG4rXHRpZiAoIXBtKSB7XG4rXHRcdHByX3dhcm4oXCJDb3VsZCBub3QgbWFwIHBvaXNvbmVkLW1lbW9yeSB0YWJsZVxcblwiKTtcbitcdFx0ZWZpLnBvaXNvbmVkX21lbW9yeSA9IEVGSV9JTlZBTElEX1RBQkxFX0FERFI7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGlmICghZWZpX3BvaXNvbl90YWJsZV92YWxpZChwbSkpIHtcbitcdFx0ZWZpLnBvaXNvbmVkX21lbW9yeSA9IEVGSV9JTlZBTElEX1RBQkxFX0FERFI7XG4rXHRcdGVhcmx5X21lbXVubWFwKHBtLCBzaXplb2YoKnBtKSk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHN0YXJ0ID0gUEFHRV9BTElHTl9ET1dOKGVmaS5wb2lzb25lZF9tZW1vcnkpO1xuK1x0ZW5kID0gUEFHRV9BTElHTihlZmkucG9pc29uZWRfbWVtb3J5ICsgc2l6ZW9mKCpwbSkgKyBwbS1cdTAwM2VzaXplKTtcbitcdGVhcmx5X21lbXVubWFwKHBtLCBzaXplb2YoKnBtKSk7XG4rXG4rXHRtZW1ibG9ja19hZGQoc3RhcnQsIGVuZCAtIHN0YXJ0KTtcbitcdG1lbWJsb2NrX3Jlc2VydmUoc3RhcnQsIGVuZCAtIHN0YXJ0KTtcbit9XG4rXG4rLyogVGhlIHRhYmxlLCB2ZXR0ZWQgYXQgcGFyc2UgdGltZSwgb3IgTlVMTCBpZiB0aGlzIGJvb3QgaGFzIG5vbmUuICovXG4rc3RhdGljIHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICplZmlfcG9pc29uZWRfbWVtb3J5KHZvaWQpXG4re1xuK1x0aWYgKGVmaS5wb2lzb25lZF9tZW1vcnkgPT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUilcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRyZXR1cm4gcGh5c190b192aXJ0KGVmaS5wb2lzb25lZF9tZW1vcnkpO1xuK31cbitcbisvKiBEb2VzIHRoZSByYW5nZSBjb3ZlciBhIHVuaXQgYW4gZWFybGllciBrZXJuZWwgcmVjb3JkZWQgYXMgYmFkPyAqL1xuK2Jvb2wgcmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5KHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpXG4re1xuK1x0c3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtID0gZWZpX3BvaXNvbmVkX21lbW9yeSgpO1xuK1x0dTY0IGZpcnN0LCBsYXN0LCBuYml0cztcbitcbitcdGlmICghcG0pXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdG5iaXRzID0gcG0tXHUwMDNlc2l6ZSAqIEJJVFNfUEVSX0JZVEU7XG4rXG4rXHRpZiAoc3RhcnQgKyBzaXplIFx1MDAzYz0gcG0tXHUwMDNlcGh5c19iYXNlKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRpZiAoc3RhcnQgXHUwMDNjIHBtLVx1MDAzZXBoeXNfYmFzZSlcbitcdFx0c3RhcnQgPSBwbS1cdTAwM2VwaHlzX2Jhc2U7XG4rXG4rXHRmaXJzdCA9IChzdGFydCAtIHBtLVx1MDAzZXBoeXNfYmFzZSkgLyBwbS1cdTAwM2V1bml0X3NpemU7XG4rXHRpZiAoZmlyc3QgXHUwMDNlPSBuYml0cylcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0bGFzdCA9IChzdGFydCArIHNpemUgLSAxIC0gcG0tXHUwMDNlcGh5c19iYXNlKSAvIHBtLVx1MDAzZXVuaXRfc2l6ZTtcbitcdGxhc3QgPSBtaW4obGFzdCwgbmJpdHMgLSAxKTtcbitcbitcdHJldHVybiBmaW5kX25leHRfYml0KHBtLVx1MDAzZWJpdG1hcCwgbGFzdCArIDEsIGZpcnN0KSBcdTAwM2M9IGxhc3Q7XG4rfVxuK1xuKy8qXG4rICogQSBiaXQgaXMgbmV2ZXIgY2xlYXJlZDogaXQgc3RhbmRzIGZvciBhIHdob2xlIEVGSV9QT0lTT05fVU5JVF9TSVpFLCBzbyBhblxuKyAqIHVucG9pc29uIGNhbm5vdCB0ZWxsIHdoZXRoZXIgdGhlIHVuaXQgYXMgYSB3aG9sZSBpcyBnb29kIGFnYWluLlxuKyAqL1xuK3ZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pXG4re1xuK1x0c3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtID0gZWZpX3BvaXNvbmVkX21lbW9yeSgpO1xuK1x0cGh5c19hZGRyX3QgYWRkciA9IFBGTl9QSFlTKHBmbik7XG4rXHR1NjQgdW5pdDtcbitcbitcdGlmICghcG0gfHwgYWRkciBcdTAwM2MgcG0tXHUwMDNlcGh5c19iYXNlKVxuK1x0XHRyZXR1cm47XG4rXG4rXHR1bml0ID0gKGFkZHIgLSBwbS1cdTAwM2VwaHlzX2Jhc2UpIC8gcG0tXHUwMDNldW5pdF9zaXplO1xuK1x0aWYgKHVuaXQgXHUwMDNjIHBtLVx1MDAzZXNpemUgKiBCSVRTX1BFUl9CWVRFKVxuK1x0XHRzZXRfYml0KHVuaXQsIHBtLVx1MDAzZWJpdG1hcCk7XG4rfVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWZpLmggYi9pbmNsdWRlL2xpbnV4L2VmaS5oXG5pbmRleCBjMzU0NDZhMGI2NmZhLi41NjQwMmZkY2NkMTE0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9lZmkuaFxuKysrIGIvaW5jbHVkZS9saW51eC9lZmkuaFxuQEAgLTIzLDYgKzIzLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wc3RvcmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JhbmdlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWJvb3QuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NpemVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91dWlkLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcGFnZS5oXHUwMDNlXG5AQCAtNDIyLDYgKzQyMyw3IEBAIHZvaWQgZWZpX25hdGl2ZV9ydW50aW1lX3NldHVwKHZvaWQpO1xuICNkZWZpbmUgTElOVVhfRUZJX0NPQ09fU0VDUkVUX0FSRUFfR1VJRFx0XHRFRklfR1VJRCgweGFkZjk1NmFkLCAweGU5OGMsIDB4NDg0YywgIDB4YWUsIDB4MTEsIDB4YjUsIDB4MWMsIDB4N2QsIDB4MzMsIDB4NjQsIDB4NDcpXG4gI2RlZmluZSBMSU5VWF9FRklfQk9PVF9NRU1NQVBfR1VJRFx0XHRFRklfR1VJRCgweDgwMGY2ODNmLCAweGQwOGIsIDB4NDIzYSwgIDB4YTIsIDB4OTMsIDB4OTYsIDB4NWMsIDB4M2MsIDB4NmYsIDB4ZTIsIDB4YjQpXG4gI2RlZmluZSBMSU5VWF9FRklfVU5BQ0NFUFRFRF9NRU1fVEFCTEVfR1VJRFx0RUZJX0dVSUQoMHhkNWQxZGUzYywgMHgxMDVjLCAweDQ0ZjksICAweDllLCAweGE5LCAweGJjLCAweGVmLCAweDk4LCAweDEyLCAweDAwLCAweDMxKVxuKyNkZWZpbmUgTElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWV9UQUJMRV9HVUlEXHRFRklfR1VJRCgweGFmODI4YTE1LCAweDBlZjQsIDB4NDM5YSwgIDB4YjgsIDB4NmEsIDB4ZDYsIDB4ZDYsIDB4OWUsIDB4YWYsIDB4YmEsIDB4ZmEpXG4gXG4gI2RlZmluZSBSSVNDVl9FRklfQk9PVF9QUk9UT0NPTF9HVUlEXHRcdEVGSV9HVUlEKDB4Y2NkMTVmZWMsIDB4NmY3MywgMHg0ZWVjLCAgMHg4MywgMHg5NSwgMHgzZSwgMHg2OSwgMHhlNCwgMHhiOSwgMHg0MCwgMHhiZilcbiBcbkBAIC02NTAsNiArNjUyLDcgQEAgZXh0ZXJuIHN0cnVjdCBlZmkge1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRcdG1va3Zhcl90YWJsZTtcdFx0LyogTU9LIHZhcmlhYmxlIGNvbmZpZyB0YWJsZSAqL1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRcdGNvY29fc2VjcmV0O1x0XHQvKiBDb25maWRlbnRpYWwgY29tcHV0aW5nIHNlY3JldCB0YWJsZSAqL1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRcdHVuYWNjZXB0ZWQ7XHRcdC8qIFVuYWNjZXB0ZWQgbWVtb3J5IHRhYmxlICovXG4rXHR1bnNpZ25lZCBsb25nXHRcdFx0cG9pc29uZWRfbWVtb3J5O1x0LyogSGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IHRhYmxlICovXG4gXG4gXHRlZmlfZ2V0X3RpbWVfdFx0XHRcdCpnZXRfdGltZTtcbiBcdGVmaV9zZXRfdGltZV90XHRcdFx0KnNldF90aW1lO1xuQEAgLTEyNzIsNiArMTI3NSwyNSBAQCBzdHJ1Y3QgbGludXhfZWZpX21lbXJlc2VydmUge1xuICNkZWZpbmUgRUZJX01FTVJFU0VSVkVfQ09VTlQoc2l6ZSkgKCgoc2l6ZSkgLSBzaXplb2Yoc3RydWN0IGxpbnV4X2VmaV9tZW1yZXNlcnZlKSkgXFxcbiBcdC8gc2l6ZW9mX2ZpZWxkKHN0cnVjdCBsaW51eF9lZmlfbWVtcmVzZXJ2ZSwgZW50cnlbMF0pKVxuIFxuKy8qIEJpdCBOIGNvdmVycyB0aGUgdW5pdCBhdCBAcGh5c19iYXNlICsgTiAqIEB1bml0X3NpemUuICovXG4rc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkge1xuK1x0dTMyXHRcdHZlcnNpb247XG4rXHR1MzJcdFx0dW5pdF9zaXplO1x0LyogYnl0ZXMgb2YgcGh5cyBzcGFjZSBwZXIgYml0bWFwIGJpdCAqL1xuK1x0dTY0XHRcdHBoeXNfYmFzZTtcdC8qIGFkZHJlc3MgdGhlIGZpcnN0IGJpdCBjb3ZlcnMgKi9cbitcdHU2NFx0XHRzaXplO1x0XHQvKiBiaXRtYXAgc2l6ZSBpbiBieXRlcyAqL1xuK1x0dW5zaWduZWQgbG9uZ1x0Yml0bWFwW107XG4rfTtcbitcbisjZGVmaW5lIEVGSV9QT0lTT05fVU5JVF9TSVpFXHRTWl8yTVxuK1xuKyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWVxuK3ZvaWQgX19pbml0IGVmaV9wb2lzb25lZF9tZW1vcnlfcmVzZXJ2ZSh2b2lkKTtcbit2b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKTtcbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBlZmlfcG9pc29uZWRfbWVtb3J5X3Jlc2VydmUodm9pZCkgeyB9XG4rc3RhdGljIGlubGluZSB2b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKSB7IH1cbisjZW5kaWZcbitcbiB2b2lkIF9faW5pdCBlZmlfYXJjaF9tZW1fcmVzZXJ2ZShwaHlzX2FkZHJfdCBhZGRyLCB1NjQgc2l6ZSk7XG4gXG4gLypcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcbmluZGV4IDI3NGZhODgwMDc3YzUuLjlkOWYyZThmZGMxMzYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW0uaFxuQEAgLTUyMjUsNiArNTIyNSw3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG1lbW9yeV9mYWlsdXJlX2F0dHJfZ3JvdXA7XG4gZXh0ZXJuIHZvaWQgbWVtb3J5X2ZhaWx1cmVfcXVldWUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncyk7XG4gdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfaW5jKHVuc2lnbmVkIGxvbmcgcGZuKTtcbiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSk7XG4rdm9pZCBfX21lbWluaXQgaHdwb2lzb25fYm9vdF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTtcbiBwaHlzX2FkZHJfdCByYW5nZV9maXJzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKTtcbiBwaHlzX2FkZHJfdCByYW5nZV9sYXN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpO1xuICNlbHNlXG5AQCAtNTIzMiw2ICs1MjMzLDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1vcnlfZmFpbHVyZV9xdWV1ZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxuIHtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIGh3cG9pc29uX2Jvb3RfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbit7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfaW5jKHVuc2lnbmVkIGxvbmcgcGZuKVxuIHtcbiB9XG5AQCAtNTM4Nyw2ICs1MzkyLDIwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwZm5faXNfdW5hY2NlcHRlZF9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXG4gXHRyZXR1cm4gcmFuZ2VfY29udGFpbnNfdW5hY2NlcHRlZF9tZW1vcnkocGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULCBQQUdFX1NJWkUpO1xuIH1cbiBcbisjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllcbitcbitib29sIHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeShwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKTtcbitcbisjZWxzZVxuK1xuK3N0YXRpYyBpbmxpbmUgYm9vbCByYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnkocGh5c19hZGRyX3Qgc3RhcnQsXG4rXHRcdFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIHNpemUpXG4re1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbisjZW5kaWZcbitcbiB2b2lkIHZtYV9wZ3RhYmxlX3dhbGtfYmVnaW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuIHZvaWQgdm1hX3BndGFibGVfd2Fsa19lbmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuIFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5pbmRleCBhMmNhOGRmNTAxY2FlLi5mNmFmZGIyYTg5YTk0IDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xuKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuQEAgLTQzLDYgKzQzLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3Rhc2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RheC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZWZpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rc20uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JtYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG5AQCAtMTM2LDYgKzEzNywyMSBAQCBwaHlzX2FkZHJfdCByYW5nZV9sYXN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpXG4gXHRyZXR1cm4gcmFuZ2VfaHdwb2lzb24oc3RhcnQsIHNpemUsIGZhbHNlKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgdXBkYXRlX3Blcl9ub2RlX21mX3N0YXRzKHVuc2lnbmVkIGxvbmcgcGZuLCBlbnVtIG1mX3Jlc3VsdCByZXN1bHQpO1xuK1xuKy8qIE5vdCBudW1fcG9pc29uZWRfcGFnZXNfaW5jKCk6IGl0cyBwZXIgYmxvY2sgaGFsZiBkaXZpZGVzIGJ5IHplcm8gdGhpcyBlYXJseS4gKi9cbit2b2lkIF9fbWVtaW5pdCBod3BvaXNvbl9ib290X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4re1xuK1x0aWYgKFBhZ2VIV1BvaXNvbihwYWdlKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0U2V0UGFnZUhXUG9pc29uKHBhZ2UpO1xuK1x0c2V0X3BhZ2VfY291bnQocGFnZSwgMSk7XG4rXHQvKiBUaGUgcGFnZSBoYXMgYmVlbiBjb21wbGV0ZWx5IGlzb2xhdGVkID09IE1GX1JFQ09WRVJFRCAqL1xuK1x0dXBkYXRlX3Blcl9ub2RlX21mX3N0YXRzKHBhZ2VfdG9fcGZuKHBhZ2UpLCBNRl9SRUNPVkVSRUQpO1xuK1x0YXRvbWljX2xvbmdfaW5jKFx1MDAyNm51bV9wb2lzb25lZF9wYWdlcyk7XG4rfVxuK1xuIC8qKlxuICAqIE1GX0FUVFJfUk8gLSBDcmVhdGUgc3lzZnMgZW50cnkgZm9yIGVhY2ggbWVtb3J5IGZhaWx1cmUgc3RhdGlzdGljcy5cbiAgKiBAX25hbWU6IG5hbWUgb2YgdGhlIGZpbGUgaW4gdGhlIHBlciBOVU1BIHN5c2ZzIGRpcmVjdG9yeS5cbkBAIC0xMzI2LDYgKzEzNDIsOCBAQCBzdGF0aWMgaW50IGFjdGlvbl9yZXN1bHQodW5zaWduZWQgbG9uZyBwZm4sIGVudW0gbWZfYWN0aW9uX3BhZ2VfdHlwZSB0eXBlLFxuIFx0aWYgKHR5cGUgIT0gTUZfTVNHX0FMUkVBRFlfUE9JU09ORUQgXHUwMDI2XHUwMDI2IHR5cGUgIT0gTUZfTVNHX1BGTl9NQVApIHtcbiBcdFx0bnVtX3BvaXNvbmVkX3BhZ2VzX2luYyhwZm4pO1xuIFx0XHR1cGRhdGVfcGVyX25vZGVfbWZfc3RhdHMocGZuLCByZXN1bHQpO1xuK1x0XHQvKiBPbmx5IGhhcmQgb2ZmbGluZXMgYXJlIGNhcnJpZWQgb3ZlciB0byB0aGUgbmV4dCBrZXJuZWwuICovXG4rXHRcdGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHBmbik7XG4gXHR9XG4gXG4gXHRwcl9lcnIoXCIlI2x4OiByZWNvdmVyeSBhY3Rpb24gZm9yICVzOiAlc1xcblwiLFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xuaW5kZXggNDA0ODk2YjUzMDAzZS4uOWUyY2U4MzNmZDQwOSAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xuKysrIGIvbW0vcGFnZV9hbGxvYy5jXG5AQCAtMTU3OSw2ICsxNTc5LDE5IEBAIHN0YXRpYyB2b2lkIF9fZnJlZV9wYWdlc19vayhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0XHRmcmVlX29uZV9wYWdlKHpvbmUsIHBhZ2UsIHBmbiwgb3JkZXIsIGZwaV9mbGFncyk7XG4gfVxuIFxuKy8qIEZsYWcgdGhlIGZyYW1lcyBhbiBlYXJsaWVyIGtlcm5lbCByZWNvcmRlZCBhcyBiYWQuICovXG4rc3RhdGljIHZvaWQgX19tZW1pbml0IHBvaXNvbl9ibG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgaSwgbnJfcGFnZXMgPSAxVUwgXHUwMDNjXHUwMDNjIG9yZGVyO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcGFnZXM7IGkrKykge1xuK1x0XHRzdHJ1Y3QgcGFnZSAqcCA9IHBhZ2UgKyBpO1xuK1xuK1x0XHRpZiAocmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5KHBhZ2VfdG9fcGh5cyhwKSwgUEFHRV9TSVpFKSlcbitcdFx0XHRod3BvaXNvbl9ib290X3BhZ2UocCk7XG4rXHR9XG4rfVxuK1xuIHZvaWQgX19tZW1pbml0IF9fZnJlZV9wYWdlc19jb3JlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4gXHRcdGVudW0gbWVtaW5pdF9jb250ZXh0IGNvbnRleHQpXG4ge1xuQEAgLTE2MTMsNiArMTYyNiwxOCBAQCB2b2lkIF9fbWVtaW5pdCBfX2ZyZWVfcGFnZXNfY29yZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0XHRhdG9taWNfbG9uZ19hZGQobnJfcGFnZXMsIFx1MDAyNnBhZ2Vfem9uZShwYWdlKS1cdTAwM2VtYW5hZ2VkX3BhZ2VzKTtcbiBcdH1cbiBcbitcdC8qIEZpcnN0OiBhIGJsb2NrIHBhcmtlZCBieSBfX2ZyZWVfdW5hY2NlcHRlZCgpIG5ldmVyIHJldHVybnMgaGVyZS4gKi9cbitcdGlmIChyYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnkocGFnZV90b19waHlzKHBhZ2UpLFxuK1x0XHRcdFx0XHQgICBQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIG9yZGVyKSkge1xuK1x0XHRwb2lzb25fYmxvY2socGFnZSwgb3JkZXIpO1xuK1x0XHQvKlxuK1x0XHQgKiBUT0RPOiBmcmVlIHRoZSBmcmFtZXMgaW4gdGhlIGJsb2NrIHRoYXQgYXJlIG5vdCBwb2lzb25lZC5cbitcdFx0ICogVGhleSBzdGF5IG91dCBvZiB0aGUgYWxsb2NhdG9yIGFuZCBzdGlsbCBjb3VudCBpblxuK1x0XHQgKiBtYW5hZ2VkX3BhZ2VzLCBzbyBhIHVuaXQgY29zdHMgdXAgdG8gYSBibG9jay5cbitcdFx0ICovXG4rXHRcdHJldHVybjtcbitcdH1cbitcbiBcdGlmIChwYWdlX2NvbnRhaW5zX3VuYWNjZXB0ZWQocGFnZSwgb3JkZXIpKSB7XG4gXHRcdGlmIChvcmRlciA9PSBNQVhfUEFHRV9PUkRFUiBcdTAwMjZcdTAwMjYgX19mcmVlX3VuYWNjZXB0ZWQocGFnZSkpXG4gXHRcdFx0cmV0dXJuO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTQ6MTA6MTAuMTQ3MDUyMDM2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEzNDIxOTMyOTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBBc3Nlc3NtZW50OiBFRkkgUG9pc29uZWQgTWVtb3J5IFRhYmxlIE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUgaWYgaXQganVzdGlmaWVzIGEgS01TQU4gZnV6emluZyBydW4uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBsZWFuaW5nIHRvd2FyZHMgYSBcIm5vLFwiIGJ1dCB3ZSBuZWVkIHRvIGJlIHRob3JvdWdoLlxuXG5GaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGZ1bmRhbWVudGFsbHkgZG9lcy4gSXQgaW50cm9kdWNlcyBgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllgIGFuZCwgY3JpdGljYWxseSwgYSBtZWNoYW5pc20gZm9yIG1hbmFnaW5nIGEgXCJwb2lzb25lZCBtZW1vcnlcIiB0YWJsZSB3aXRoaW4gdGhlIEVGSSBlbnZpcm9ubWVudC4gVGhpcyB0YWJsZSBzZWVtcyB0byB0cmFjayByZWdpb25zIG9mIFJBTSB0aGF0IGFyZSBjb25zaWRlcmVkIFwicG9pc29uZWRcIiDigJMgbGlrZWx5IG1hcmtlZCBmb3IgbWVtb3J5IGZhaWx1cmUgaW5qZWN0aW9uLlxuXG5UaGUgY29yZSBvZiB0aGUgbG9naWMgaW52b2x2ZXMgYWxsb2NhdGluZyBhIGBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeWAgc3RydWN0dXJlLiBUaGlzIGFsbG9jYXRpb24gaGFwcGVucyB2aWEgRUZJIGJvb3Qgc2VydmljZXMgKGBhbGxvY2F0ZV9wb29sYCkuIEltcG9ydGFudGx5LCB0aGUgYWxsb2NhdGVkIGJpdG1hcCBpcyBpbW1lZGlhdGVseSB6ZXJvZWQgdmlhIGBtZW1zZXRgLiBUaGlzIGlzIGtleS4gVGhlIGNvZGUgdGhlbiBpbml0aWFsaXplcyB0aGUgc3RydWN0dXJlJ3MgZmllbGRzOiBgdmVyc2lvbmAsIGB1bml0X3NpemVgLCBgcGh5c19iYXNlYCwgYHNpemVgIOKAkyBhbGwgZXhwbGljaXRseSBhc3NpZ25lZC4gVGhpcyB0YWJsZSBpcyB0aGVuIGluc3RhbGxlZCBhcyBhIGNvbmZpZyB0YWJsZS5cblxuRHVyaW5nIGtlcm5lbCBib290LCB0aGUgY29kZSBwYXJzZXMgdGhlIEVGSSBjb25maWcgdGFibGVzIGFuZCBjYWxscyBgZWZpX3BvaXNvbmVkX21lbW9yeV9yZXNlcnZlKClgIHRvIHZhbGlkYXRlLCBtYXAgYW5kIHJlc2VydmUgdGhlIGRlc2NyaWJlZCBtZW1vcnkgdXNpbmcgYG1lbWJsb2NrX3Jlc2VydmUoKWAuIFRoZSBjcml0aWNhbCBiaXQgaXMgdGhhdCBkdXJpbmcgcGFnZSBmcmVlaW5nLCBgX19mcmVlX3BhZ2VzX2NvcmVgLCBpZiBhIHBhZ2UgZmFsbHMgd2l0aGluIHRoZSBkZWZpbmVkIFwicG9pc29uZWRcIiByZWdpb24sIGEgYGh3cG9pc29uYCBmbGFnIGlzIHNldCB1c2luZyBgaHdwb2lzb25fYm9vdF9wYWdlKClgLiAgTGF0ZXIsIGluIHRoZSBldmVudCBvZiBhIG1lbW9yeSBmYWlsdXJlLCB0aGUgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKClgIGZ1bmN0aW9uIHVwZGF0ZXMgdGhlIGJpdG1hcCB0byByZWNvcmQgdGhlIHBvaXNvbmVkIHBhZ2UuIFRoaXMgYml0bWFwIGlzIHRoZW4gY2hlY2tlZCBsYXRlciB1c2luZyBgcmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5KClgLlxuXG5Ob3csIHRoZSBtYWluIGNvbmNlcm4gZm9yIEtNU0FOIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBEb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIG5ldyBwYXRod2F5cyBmb3IgdW5pbml0aWFsaXplZCBkYXRhIHRvIGxlYWsgb3IgYmUgdXNlZD9cblxuMS4gICoqVXNlci1zcGFjZSBleHBvc3VyZT8qKiBObywgdGhlcmUgYXJlIG5vIHVzZXItc3BhY2UgY29waWVzLCBzeXNmcyBlbnRyaWVzLCBvciBpb2N0bHMgaW50cm9kdWNlZC5cbjIuICAqKkluaXRpYWxpemF0aW9uPyoqIFRoZSBjb2RlIGRvZXMgc2VlbSBtZXRpY3Vsb3VzbHkgaW5pdGlhbGl6ZWQuIGBtZW1zZXRgIG9uIHRoZSBiaXRtYXAsIGFuZCBleHBsaWNpdCBmaWVsZCBhc3NpZ25tZW50cyB3aXRoaW4gdGhlIHN0cnVjdC4gVGhlIGZ1bmN0aW9ucyBsaWtlIGBlZmlfZ2V0X3JhbV9yYW5nZWAsIGByYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnlgIGFsbCBhcHBlYXIgdG8gaGFuZGxlIHRoZWlyIGludGVybmFsIHN0YXRlIGNvcnJlY3RseS5cbjMuICAqKkNvbnRyb2wgZmxvdyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGE/KiogIE5vLCB0aGlzIGFwcGVhcnMgdG8gYmUganVzdCBoYXJkd2FyZSBwb2lzb24gdHJhY2tpbmcgYWNyb3NzIGtleGVjIC8gRUZJIGJvb3QuIFRoZSBiaXRtYXAgYW5kIHN0YXRlIHZhcmlhYmxlcyBhcmUgYWxsIGluaXRpYWxpemVkLlxuNC4gICoqS01TQU4gU3BlY2lmaWMgQ29uY2VybnM/KiogS01TQU7igJlzIHByaW1hcnkgZm9jdXMgaXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgKHN0YWNrLCBoZWFwLCBwYWdlcykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBsZWFrcy4gIFRoaXMgcGF0Y2ggKmRvZXNuJ3QqIGFwcGVhciB0byBoYXZlIGFueS4gRXZlcnl0aGluZyByZXZvbHZlcyBhcm91bmQgZWFybHkgYm9vdCBtZW1vcnkgcmVzZXJ2YXRpb24vdGFibGUgY3JlYXRpb24vYml0IHNldHRpbmcgYW5kIGNoZWNraW5nIGluIHRoZSBpbml0aWFsaXplZCBiaXRtYXAuIEFueSBwb3RlbnRpYWwgZXJyb3JzIGhlcmUgd291bGQgYmUgYWRkcmVzcyB0cmFuc2xhdGlvbiBlcnJvcnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvciBpbmNvcnJlY3QgbWVtb3J5IHJlc2VydmF0aW9uLiBUaGVzZSBhcmUgdGhpbmdzIHRoYXQgYXJlIGhhbmRsZWQgYnkgS0FTQU4gb3IgbW9yZSBzdGFuZGFyZCB2ZXJpZmljYXRpb24gdGVjaG5pcXVlcy5cblxuTGV0J3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2sgb2YgYWxsIGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzLlxuXG4qICAgYGVmaV9nZXRfcmFtX3JhbmdlYDogSW5pdGlhbGl6ZXMgYW5kIHJldHVybnMsIHRoZSB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkLlxuKiAgIGBlZmlfcG9pc29uX2JpdG1hcF9zaXplYDogQSBwdXJlIGNhbGN1bGF0aW9uLlxuKiAgIGBlZmlfcG9pc29uX2FsbG9jYDogQWxsb2NhdGVzIGFuZCBjb3JyZWN0bHkgaW5pdGlhbGl6ZXMgdGhlIGJpdG1hcC5cbiogICBgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGVgOiBJbml0aWFsaXplcyBsb2NhbHMgb3IgY2hlY2tzIHN0YXR1c2VzLlxuKiAgIGBlZmlfcG9pc29uX2dlb21ldHJ5X3ZhbGlkYCwgYGVmaV9wb2lzb25fdGFibGVfdmFsaWRgOiBWYWxpZGF0aW9uIG9uIHRoZSB0YWJsZSBmaWVsZHMuXG4qICAgYGVmaV9wb2lzb25lZF9tZW1vcnlfcmVzZXJ2ZWA6IEluY2x1ZGVzIGVhcmx5IG1lbXJlbWFwLCB2YWxpZGF0aW9uLCBhbmQgbWVtYmxvY2suXG4qICAgYGVmaV9wb2lzb25lZF9tZW1vcnlgOiBSZXR1cm5zIGEgcG9pbnRlci5cbiogICBgcmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5YDogQm91bmRhcnkgY2hlY2tzIGFuZCBgZmluZF9uZXh0X2JpdGAgY2FsbHMuXG4qICAgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYDogSW5jbHVkZXMgYm91bmRhcnkgY2hlY2tzIGFuZCBgc2V0X2JpdGAgY2FsbHMuXG4qICAgYGh3cG9pc29uX2Jvb3RfcGFnZWA6IE9wZXJhdGVzIG9uIGBzdHJ1Y3QgcGFnZWAsIHdpdGggc2V0XFxfcGFnZVxcX2NvdW50LCBhdG9taWNcXF9sb25nXFxfaW5jLCBldGMuXG4qICAgYHBvaXNvbl9ibG9ja2A6IEl0ZXJhdGVzIG92ZXIgdGhlIHBhZ2VzIGFuZCBjYWxscyBgcmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5YCBhbmQgYGh3cG9pc29uX2Jvb3RfcGFnZWAuXG5cbk9rYXksIHRoZSBjb25jbHVzaW9uIHJlbWFpbnM6ICoqTmVlZHNLTVNBTiA9IGZhbHNlLioqXG5cbkhlcmXigJlzIHRoZSBkaXN0aWxsZWQgcmVhc29uaW5nLCBjbGVhcmx5IGNvbnRyYXN0aW5nIEtNU0FOIGFuZCBLQVNBTjpcblxuKiAgIEtNU0FOIGlzIGxvb2tpbmcgZm9yICp1bmluaXRpYWxpemVkKiBtZW1vcnkgcmVhZHMvbGVha3MuXG4qICAgVGhpcyBwYXRjaCBleHBsaWNpdGx5IGluaXRpYWxpemVzIHRoZSBtZW1vcnkgdGFibGUgYW5kIHRoZSBiaXRtYXAgd2l0aCBgbWVtc2V0YC4gRXZlcnkgc3RydWN0IGZpZWxkIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuXG4qICAgVGhlIHJ1bnRpbWUgZnVuY3Rpb25zIG9ubHkgcmVhZCBhbmQgbW9kaWZ5IGluaXRpYWxpemVkIGRhdGEuXG4qICAgVGhlcmUncyBubyBpbnRyb2R1Y3Rpb24gb2YgbmV3IHVzZXItc3BhY2UgY29waWVzIG9yIHVuaW5pdGlhbGl6ZWQgY29uZGl0aW9uYWwgbG9naWMuXG4qICAgQW55IGJ1Z3Mgd291bGQgcmVsYXRlIHRvIGFkZHJlc3NcblxuIiwiSW5wdXRUb2tlbnMiOjk0MTEsIk91dHB1dFRva2VucyI6MjU5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI5NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE0OjEwOjIzLjU2ODk4ODE3MloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3OTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgRUZJIHBvaXNvbmVkIG1lbW9yeSB0cmFja2luZyAoQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUlkpIHRvIHByZXNlcnZlIGhhcmR3YXJlLXBvaXNvbmVkIHBhZ2UgaW5mb3JtYXRpb24gYWNyb3NzIGtleGVjIHJlYm9vdHMuIFxcblxcbjEuIEFsbG9jYXRpb24gXFx1MDAyNiBJbml0aWFsaXphdGlvbjogVGhlIHRhYmxlIHN0cnVjdHVyZSBgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnlgIGFuZCBpdHMgdHJhaWxpbmcgYml0bWFwIGFyZSBhbGxvY2F0ZWQgaW4gdGhlIEVGSSBzdHViIGFuZCBleHBsaWNpdGx5IGZ1bGx5IGluaXRpYWxpemVkIChhbGwgaGVhZGVyIGZpZWxkcyBhc3NpZ25lZCwgYW5kIGBtZW1zZXQocG0tXFx1MDAzZWJpdG1hcCwgMCwgYml0bWFwX3NpemUpYCBjbGVhcnMgdGhlIGJpdG1hcCkuXFxuMi4gTWVtb3J5IEFjY2Vzc2VzOiBSdW50aW1lIG9wZXJhdGlvbnMgKGByYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnlgLCBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gLCBgcG9pc29uX2Jsb2NrYCwgYW5kIGBod3BvaXNvbl9ib290X3BhZ2VgKSBvbmx5IHJlYWQgYW5kIHVwZGF0ZSBmdWxseSBpbml0aWFsaXplZCBtZW1vcnkgc3RydWN0dXJlcyBhbmQgc3RydWN0IHBhZ2UgZmxhZ3MuXFxuMy4gTm8gVW5pbml0aWFsaXplZCBMZWFrcyBvciBSZWFkczogVGhlcmUgYXJlIG5vIGRhdGEgdHJhbnNmZXJzIHRvIHVzZXIgc3BhY2UsIG5vIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgbm8gZXhwb3NlZCBwYWRkaW5nLlxcbjQuIEtBU0FOIHZzIEtNU0FOOiBQb3RlbnRpYWwgcmlza3Mgc3VjaCBhcyBpbnZhbGlkIHBvaW50ZXIgbWF0aCwgb3V0LW9mLWJvdW5kcyBiaXRtYXAgYWNjZXNzZXMsIG9yIG1lbW9yeSByZXNlcnZhdGlvbiBlcnJvcnMgYXJlIHByb3Blcmx5IGhhbmRsZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIEtNU0FOIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBFRkkgcG9pc29uZWQgbWVtb3J5IHRyYWNraW5nIChDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWSkgdG8gcHJlc2VydmUgaGFyZHdhcmUtcG9pc29uZWQgcGFnZSBpbmZvcm1hdGlvbiBhY3Jvc3Mga2V4ZWMgcmVib290cy4gXFxuXFxuMS4gQWxsb2NhdGlvbiBcXHUwMDI2IEluaXRpYWxpemF0aW9uOiBUaGUgdGFibGUgc3RydWN0dXJlIGBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeWAgYW5kIGl0cyB0cmFpbGluZyBiaXRtYXAgYXJlIGFsbG9jYXRlZCBpbiB0aGUgRUZJIHN0dWIgYW5kIGV4cGxpY2l0bHkgZnVsbHkgaW5pdGlhbGl6ZWQgKGFsbCBoZWFkZXIgZmllbGRzIGFzc2lnbmVkLCBhbmQgYG1lbXNldChwbS1cXHUwMDNlYml0bWFwLCAwLCBiaXRtYXBfc2l6ZSlgIGNsZWFycyB0aGUgYml0bWFwKS5cXG4yLiBNZW1vcnkgQWNjZXNzZXM6IFJ1bnRpbWUgb3BlcmF0aW9ucyAoYHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeWAsIGBlZmlfaHdwb2lzb25fcmVjb3JkX3BmbmAsIGBwb2lzb25fYmxvY2tgLCBhbmQgYGh3cG9pc29uX2Jvb3RfcGFnZWApIG9ubHkgcmVhZCBhbmQgdXBkYXRlIGZ1bGx5IGluaXRpYWxpemVkIG1lbW9yeSBzdHJ1Y3R1cmVzIGFuZCBzdHJ1Y3QgcGFnZSBmbGFncy5cXG4zLiBObyBVbmluaXRpYWxpemVkIExlYWtzIG9yIFJlYWRzOiBUaGVyZSBhcmUgbm8gZGF0YSB0cmFuc2ZlcnMgdG8gdXNlciBzcGFjZSwgbm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBubyBleHBvc2VkIHBhZGRpbmcuXFxuNC4gS0FTQU4gdnMgS01TQU46IFBvdGVudGlhbCByaXNrcyBzdWNoIGFzIGludmFsaWQgcG9pbnRlciBtYXRoLCBvdXQtb2YtYm91bmRzIGJpdG1hcCBhY2Nlc3Nlcywgb3IgbWVtb3J5IHJlc2VydmF0aW9uIGVycm9ycyBhcmUgcHJvcGVybHkgaGFuZGxlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowj5cp4[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-09 14:07:51 +0000 UTC FinishedAt: 2026-09-09 14:10:25 +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": "a9d7ced84989ec05be09b4b8428759ef60450a0f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EFI_POISONED_MEMORY", "MEMORY_FAILURE", "EFI_STUB", "EFI" ], "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": "a9d7ced84989ec05be09b4b8428759ef60450a0f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EFI_POISONED_MEMORY", "MEMORY_FAILURE", "EFI_STUB", "EFI" ], "series_id": "78467678-9406-49b6-8091-e91cf164230c" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "efi_hwpoison_record_pfn", "range_contains_poisoned_memory", "hwpoison_boot_page", "memory_failure" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE0OjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VGSV9QT0lTT05FRF9NRU1PUlkmIzM0OywKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OywKICAgICYjMzQ7RUZJX1NUVUImIzM0OywKICAgICYjMzQ7RUZJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZWZpX2h3cG9pc29uX3JlY29yZF9wZm4mIzM0OywKICAgICYjMzQ7cmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5JiMzNDssCiAgICAmIzM0O2h3cG9pc29uX2Jvb3RfcGFnZSYjMzQ7LAogICAgJiMzNDttZW1vcnlfZmFpbHVyZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIEVGSSBwb2lzb25lZCBtZW1vcnkgdHJhY2tpbmcgKENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZKSB0byBwcmVzZXJ2ZSBoYXJkd2FyZS1wb2lzb25lZCBwYWdlIGluZm9ybWF0aW9uIGFjcm9zcyBrZXhlYyByZWJvb3RzLiBcblxuMS4gQWxsb2NhdGlvbiBcdTAwMjYgSW5pdGlhbGl6YXRpb246IFRoZSB0YWJsZSBzdHJ1Y3R1cmUgYHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5YCBhbmQgaXRzIHRyYWlsaW5nIGJpdG1hcCBhcmUgYWxsb2NhdGVkIGluIHRoZSBFRkkgc3R1YiBhbmQgZXhwbGljaXRseSBmdWxseSBpbml0aWFsaXplZCAoYWxsIGhlYWRlciBmaWVsZHMgYXNzaWduZWQsIGFuZCBgbWVtc2V0KHBtLVx1MDAzZWJpdG1hcCwgMCwgYml0bWFwX3NpemUpYCBjbGVhcnMgdGhlIGJpdG1hcCkuXG4yLiBNZW1vcnkgQWNjZXNzZXM6IFJ1bnRpbWUgb3BlcmF0aW9ucyAoYHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeWAsIGBlZmlfaHdwb2lzb25fcmVjb3JkX3BmbmAsIGBwb2lzb25fYmxvY2tgLCBhbmQgYGh3cG9pc29uX2Jvb3RfcGFnZWApIG9ubHkgcmVhZCBhbmQgdXBkYXRlIGZ1bGx5IGluaXRpYWxpemVkIG1lbW9yeSBzdHJ1Y3R1cmVzIGFuZCBzdHJ1Y3QgcGFnZSBmbGFncy5cbjMuIE5vIFVuaW5pdGlhbGl6ZWQgTGVha3Mgb3IgUmVhZHM6IFRoZXJlIGFyZSBubyBkYXRhIHRyYW5zZmVycyB0byB1c2VyIHNwYWNlLCBubyBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIG5vIGV4cG9zZWQgcGFkZGluZy5cbjQuIEtBU0FOIHZzIEtNU0FOOiBQb3RlbnRpYWwgcmlza3Mgc3VjaCBhcyBpbnZhbGlkIHBvaW50ZXIgbWF0aCwgb3V0LW9mLWJvdW5kcyBiaXRtYXAgYWNjZXNzZXMsIG9yIG1lbW9yeSByZXNlcnZhdGlvbiBlcnJvcnMgYXJlIHByb3Blcmx5IGhhbmRsZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0cmFja2luZyBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgYWNyb3NzIGtleGVjIHZpYSBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSAoQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUlkpLiBJdCBpbnRyb2R1Y2VzIGhvb2tzIGluIGNvcmUgbWVtb3J5LWZhaWx1cmUgaGFuZGxpbmcgKGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuIGluIGFjdGlvbl9yZXN1bHQpIGFuZCBtZW1vcnkgaW5pdGlhbGl6YXRpb24vaG90cGx1ZyAoX19mcmVlX3BhZ2VzX2NvcmUsIGh3cG9pc29uX2Jvb3RfcGFnZSkuIFRoZXNlIHBhdGhzIGFyZSByZWFjaGFibGUgYXQgcnVudGltZSB2aWEgbWVtb3J5IGZhaWx1cmUgbWVjaGFuaXNtcyBzdWNoIGFzIG1hZHZpc2UoTUFEVl9IV1BPSVNPTikgYW5kIG1lbW9yeSBob3RwbHVnZ2luZyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2l0aCBFRkkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTQ6MDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhNzljYmIxMDVjNTk4MTdhZjMyYTIyYTAwMTcxZjdiYjkxNDY3NjU0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAxNDowOTowNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpLmMgYi9hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpLmNcbmluZGV4IDBjMzlhZGI5NmI5MTIuLjJiMzdiOTZhMzZlMDkgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmkuY1xuQEAgLTkzLDYgJiM0Mzs5Myw5IEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nICogY29uc3QgZWZpX3RhYmxlc1tdID0ge1xuICNpZmRlZiBDT05GSUdfVU5BQ0NFUFRFRF9NRU1PUllcbiBcdFx1MDAyNmVmaS51bmFjY2VwdGVkLFxuICNlbmRpZlxuJiM0MzsjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllcbiYjNDM7XHRcdTAwMjZlZmkucG9pc29uZWRfbWVtb3J5LFxuJiM0MzsjZW5kaWZcbiB9O1xuIFxuIHU2NCBlZmlfc2V0dXA7XHRcdC8qIGVmaSBzZXR1cF9kYXRhIHBoeXNpY2FsIGFkZHJlc3MgKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ1xuaW5kZXggMjllMDcyOTI5OWY1Yi4uYWFmY2Q0MWJjMDA2MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWdcbkBAIC0yNjMsNiAmIzQzOzI2MywxNCBAQCBjb25maWcgRUZJX0NPQ09fU0VDUkVUXG4gXHQgIHZpcnQvY29jby9lZmlfc2VjcmV0IG1vZHVsZSB0byBhY2Nlc3MgdGhlIHNlY3JldHMsIHdoaWNoIGluIHR1cm5cbiBcdCAgYWxsb3dzIHVzZXJzcGFjZSBwcm9ncmFtcyB0byBhY2Nlc3MgdGhlIGluamVjdGVkIHNlY3JldHMuXG4gXG4mIzQzO2NvbmZpZyBFRklfUE9JU09ORURfTUVNT1JZXG4mIzQzO1x0ZGVmX2Jvb2wgeVxuJiM0MztcdGRlcGVuZHMgb24gRUZJX1NUVUIgXHUwMDI2XHUwMDI2IE1FTU9SWV9GQUlMVVJFIFx1MDAyNlx1MDAyNiA2NEJJVFxuJiM0MztcdGhlbHBcbiYjNDM7XHQgIFJlY29yZCBwYWdlIGZyYW1lcyB0aGF0IGFyZSBoYXJkd2FyZS1wb2lzb25lZCB3aGlsZSB0aGlzIGtlcm5lbCBydW5zXG4mIzQzO1x0ICBpbnRvIGFuIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlLCBhbmQgaG9ub3IgdGhhdCB0YWJsZSBlYXJseSBvbiB0aGVcbiYjNDM7XHQgIG5leHQga2VybmVsIHNvIGEga2V4ZWMgZG9lcyBub3QgaGFuZCBrbm93bi1iYWQgUkFNIGJhY2sgb3V0LlxuJiM0MztcbiBjb25maWcgT1ZNRl9ERUJVR19MT0dcbiBcdGJvb2wgXCYjMzQ7RXhwb3NlIE9WTUYgZmlybXdhcmUgZGVidWcgbG9nIHZpYSBzeXNmc1wmIzM0O1xuIFx0ZGVwZW5kcyBvbiBFRklcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9NYWtlZmlsZSBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlXG5pbmRleCA4ZWZiY2Y2OTllNGZmLi4wNWQwYTQ5MDkyM2U1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlXG5AQCAtNDMsNCAmIzQzOzQzLDUgQEAgb2JqLSQoQ09ORklHX0VGSV9FQVJMWUNPTilcdFx0JiM0Mzs9IGVhcmx5Y29uLm9cbiBvYmotJChDT05GSUdfVUVGSV9DUEVSX0FSTSlcdFx0JiM0Mzs9IGNwZXItYXJtLm9cbiBvYmotJChDT05GSUdfVUVGSV9DUEVSX1g4NilcdFx0JiM0Mzs9IGNwZXIteDg2Lm9cbiBvYmotJChDT05GSUdfVU5BQ0NFUFRFRF9NRU1PUlkpXHRcdCYjNDM7PSB1bmFjY2VwdGVkX21lbW9yeS5vXG4mIzQzO29iai0kKENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZKVx0JiM0Mzs9IHBvaXNvbi5vXG4gb2JqLSQoQ09ORklHX1RFRV9TVE1NX0VGSSlcdFx0JiM0Mzs9IHN0bW0vdGVlX3N0bW1fZWZpLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jXG5pbmRleCA2ZDk4N2Q3Zjk3NzgxLi41NWIyZWU1M2ZjMjY4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jXG5AQCAtNTUsNiAmIzQzOzU1LDkgQEAgc3RydWN0IGVmaSBfX3JlYWRfbW9zdGx5IGVmaSA9IHtcbiAjaWZkZWYgQ09ORklHX1VOQUNDRVBURURfTUVNT1JZXG4gXHQudW5hY2NlcHRlZFx0XHQ9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIsXG4gI2VuZGlmXG4mIzQzOyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWVxuJiM0MztcdC5wb2lzb25lZF9tZW1vcnlcdD0gRUZJX0lOVkFMSURfVEFCTEVfQUREUixcbiYjNDM7I2VuZGlmXG4gfTtcbiBFWFBPUlRfU1lNQk9MKGVmaSk7XG4gXG5AQCAtNjc3LDYgJiM0Mzs2ODAsOSBAQCBzdGF0aWMgY29uc3QgZWZpX2NvbmZpZ190YWJsZV90eXBlX3QgY29tbW9uX3RhYmxlc1tdIF9faW5pdGNvbnN0ID0ge1xuICNpZmRlZiBDT05GSUdfVU5BQ0NFUFRFRF9NRU1PUllcbiBcdHtMSU5VWF9FRklfVU5BQ0NFUFRFRF9NRU1fVEFCTEVfR1VJRCxcdFx1MDAyNmVmaS51bmFjY2VwdGVkLFx0XCYjMzQ7VW5hY2NlcHRlZFwmIzM0O1x0fSxcbiAjZW5kaWZcbiYjNDM7I2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXG4mIzQzO1x0e0xJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRCxcdFx1MDAyNmVmaS5wb2lzb25lZF9tZW1vcnksXHRcJiMzNDtQT0lTT05cJiMzNDtcdH0sXG4mIzQzOyNlbmRpZlxuICNpZmRlZiBDT05GSUdfRUZJX0dFTkVSSUNfU1RVQlxuIFx0e0xJTlVYX0VGSV9QUklNQVJZX0RJU1BMQVlfVEFCTEVfR1VJRCxcdFx1MDAyNnByaW1hcnlfZGlzcGxheV90YWJsZVx0XHRcdH0sXG4gI2VuZGlmXG5AQCAtODc3LDYgJiM0Mzs4ODMsOCBAQCBpbnQgX19pbml0IGVmaV9jb25maWdfcGFyc2VfdGFibGVzKGNvbnN0IGVmaV9jb25maWdfdGFibGVfdCAqY29uZmlnX3RhYmxlcyxcbiBcdFx0fVxuIFx0fVxuIFxuJiM0MztcdGVmaV9wb2lzb25lZF9tZW1vcnlfcmVzZXJ2ZSgpO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuY1xuaW5kZXggNDhmOTNmNzc1OGU5ZS4uNWNiZTY3NTQ5MTMzMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmNcbkBAIC03NzQsMyAmIzQzOzc3NCwxMDMgQEAgdm9pZCBlZmlfcmVtYXBfaW1hZ2UodW5zaWduZWQgbG9uZyBpbWFnZV9iYXNlLCB1bnNpZ25lZCBhbGxvY19zaXplLFxuIFx0XHRcdGVmaV93YXJuKFwmIzM0O0ZhaWxlZCB0byByZW1hcCBkYXRhIHJlZ2lvbiBub24tZXhlY3V0YWJsZVxcblwmIzM0Oyk7XG4gXHR9XG4gfVxuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXG4mIzQzOy8qXG4mIzQzOyAqIEZpbmQgdGhlIGJhc2UgYW5kIHRvcCBvZiB0aGUgbWVtb3J5LCBzbywgd2UgY2FuIGNyZWF0ZSB0aGUgYml0bWFwIGZvclxuJiM0MzsgKiB0aGUgZnVsbCByYW5nZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBlZmlfc3RhdHVzX3QgZWZpX2dldF9yYW1fcmFuZ2UodTY0ICpiYXNlLCB1NjQgKnRvcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBlZmlfYm9vdF9tZW1tYXAgKm1hcCBfX2ZyZWUoZWZpX3Bvb2wpID0gTlVMTDtcbiYjNDM7XHR1NjQgcmFtX2Jhc2UgPSBVTExPTkdfTUFYLCByYW1fdG9wID0gMDtcbiYjNDM7XHRlZmlfc3RhdHVzX3Qgc3RhdHVzO1xuJiM0MztcdGludCBpLCBucl9kZXNjO1xuJiM0MztcbiYjNDM7XHRzdGF0dXMgPSBlZmlfZ2V0X21lbW9yeV9tYXAoXHUwMDI2bWFwLCBmYWxzZSk7XG4mIzQzO1x0aWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUylcbiYjNDM7XHRcdHJldHVybiBzdGF0dXM7XG4mIzQzO1xuJiM0MztcdG5yX2Rlc2MgPSBtYXAtXHUwMDNlbWFwX3NpemUgLyBtYXAtXHUwMDNlZGVzY19zaXplO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2Rlc2M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRlZmlfbWVtb3J5X2Rlc2NfdCAqZDtcbiYjNDM7XG4mIzQzO1x0XHRkID0gZWZpX21lbWRlc2NfcHRyKCh1bnNpZ25lZCBsb25nKW1hcC1cdTAwM2VtYXAsIG1hcC1cdTAwM2VkZXNjX3NpemUsIGkpO1xuJiM0MztcdFx0cmFtX2Jhc2UgPSBtaW4ocmFtX2Jhc2UsIGQtXHUwMDNlcGh5c19hZGRyKTtcbiYjNDM7XHRcdHJhbV90b3AgPSBtYXgocmFtX3RvcCxcbiYjNDM7XHRcdFx0ICAgICAgZC1cdTAwM2VwaHlzX2FkZHIgJiM0MzsgZC1cdTAwM2VudW1fcGFnZXMgKiBFRklfUEFHRV9TSVpFKTtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKCFyYW1fdG9wIHx8IHJhbV9iYXNlID09IFVMTE9OR19NQVgpXG4mIzQzO1x0XHRyZXR1cm4gRUZJX05PVF9GT1VORDtcbiYjNDM7XG4mIzQzO1x0KmJhc2UgPSByb3VuZF9kb3duKHJhbV9iYXNlLCBFRklfUE9JU09OX1VOSVRfU0laRSk7XG4mIzQzO1x0KnRvcCA9IHJvdW5kX3VwKHJhbV90b3AsIEVGSV9QT0lTT05fVU5JVF9TSVpFKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIEVGSV9TVUNDRVNTO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBUaGUgc2l6ZSBvZiB0aGUgYml0bWFwICovXG4mIzQzO3N0YXRpYyB1NjQgZWZpX3BvaXNvbl9iaXRtYXBfc2l6ZSh1NjQgc3BhbilcbiYjNDM7e1xuJiM0MztcdHU2NCBieXRlcyA9IERJVl9ST1VORF9VUChESVZfUk9VTkRfVVAoc3BhbiwgRUZJX1BPSVNPTl9VTklUX1NJWkUpLFxuJiM0MztcdFx0XHRcdCBCSVRTX1BFUl9CWVRFKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJvdW5kX3VwKGJ5dGVzLCBzaXplb2YodW5zaWduZWQgbG9uZykpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKmVmaV9wb2lzb25fYWxsb2ModTY0IHBoeXNfYmFzZSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgIHU2NCBiaXRtYXBfc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTtcbiYjNDM7XHRlZmlfc3RhdHVzX3Qgc3RhdHVzO1xuJiM0MztcbiYjNDM7XHRzdGF0dXMgPSBlZmlfYnNfY2FsbChhbGxvY2F0ZV9wb29sLCBFRklfQUNQSV9SRUNMQUlNX01FTU9SWSxcbiYjNDM7XHRcdFx0ICAgICBzaXplb2YoKnBtKSAmIzQzOyBiaXRtYXBfc2l6ZSwgKHZvaWQgKiopXHUwMDI2cG0pO1xuJiM0MztcdGlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0cG0tXHUwMDNldmVyc2lvbiA9IDE7XG4mIzQzO1x0cG0tXHUwMDNldW5pdF9zaXplID0gRUZJX1BPSVNPTl9VTklUX1NJWkU7XG4mIzQzO1x0cG0tXHUwMDNlcGh5c19iYXNlID0gcGh5c19iYXNlO1xuJiM0MztcdHBtLVx1MDAzZXNpemUgPSBiaXRtYXBfc2l6ZTtcbiYjNDM7XHRtZW1zZXQocG0tXHUwMDNlYml0bWFwLCAwLCBiaXRtYXBfc2l6ZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwbTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogVGhpcyBuZWVkcyB0byBiZSBkb25lIHdoaWxlIGJvb3Qgc2VydmljZSBpcyBzdGlsbCBhY3RpdmUgKi9cbiYjNDM7dm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0ZWZpX2d1aWRfdCBwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCA9IExJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRDtcbiYjNDM7XHRzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG07XG4mIzQzO1x0dTY0IHJhbV9iYXNlLCByYW1fdG9wLCBiaXRtYXBfc2l6ZTtcbiYjNDM7XHRlZmlfc3RhdHVzX3Qgc3RhdHVzO1xuJiM0MztcbiYjNDM7XHQvKiBBIHRhYmxlIGluc3RhbGxlZCBieSBhbiBlYXJsaWVyIGJvb3QgcmlkZXMgdGhlIHN5c3RlbSB0YWJsZSBhY3Jvc3Mga2V4ZWMuICovXG4mIzQzO1x0cG0gPSBnZXRfZWZpX2NvbmZpZ190YWJsZShwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCk7XG4mIzQzO1x0aWYgKHBtKSB7XG4mIzQzO1x0XHRpZiAocG0tXHUwMDNldmVyc2lvbiAhPSAxKVxuJiM0MztcdFx0XHRlZmlfZXJyKFwmIzM0O1Vua25vd24gdmVyc2lvbiBvZiBwb2lzb25lZC1tZW1vcnkgdGFibGVcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGVmaV9nZXRfcmFtX3JhbmdlKFx1MDAyNnJhbV9iYXNlLCBcdTAwMjZyYW1fdG9wKSAhPSBFRklfU1VDQ0VTUykge1xuJiM0MztcdFx0ZWZpX2VycihcJiMzNDtGYWlsZWQgdG8gc2l6ZSB0aGUgcG9pc29uZWQtbWVtb3J5IHRhYmxlIVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRiaXRtYXBfc2l6ZSA9IGVmaV9wb2lzb25fYml0bWFwX3NpemUocmFtX3RvcCAtIHJhbV9iYXNlKTtcbiYjNDM7XHRwbSA9IGVmaV9wb2lzb25fYWxsb2MocmFtX2Jhc2UsIGJpdG1hcF9zaXplKTtcbiYjNDM7XHRpZiAoIXBtKSB7XG4mIzQzO1x0XHRlZmlfZXJyKFwmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSBwb2lzb25lZC1tZW1vcnkgdGFibGUhXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHN0YXR1cyA9IGVmaV9ic19jYWxsKGluc3RhbGxfY29uZmlndXJhdGlvbl90YWJsZSxcbiYjNDM7XHRcdFx0ICAgICBcdTAwMjZwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCwgcG0pO1xuJiM0MztcdGlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIHtcbiYjNDM7XHRcdGVmaV9ic19jYWxsKGZyZWVfcG9vbCwgcG0pO1xuJiM0MztcdFx0ZWZpX2VycihcJiMzNDtGYWlsZWQgdG8gaW5zdGFsbCBwb2lzb25lZC1tZW1vcnkgY29uZmlnIHRhYmxlIVxcblwmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuY1xuaW5kZXggMjM1Yzk3MzhkYTJkNi4uMjJhMzE1ZTI4MTRhMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jXG5AQCAtMTc5LDYgJiM0MzsxNzksNyBAQCBlZmlfc3RhdHVzX3QgZWZpX3N0dWJfY29tbW9uKGVmaV9oYW5kbGVfdCBoYW5kbGUsXG4gXHRcdFx0IEVGSV9SVF9TVVBQT1JURURfU0VUX1ZJUlRVQUxfQUREUkVTU19NQVApO1xuIFxuIFx0aW5zdGFsbF9tZW1yZXNlcnZlX3RhYmxlKCk7XG4mIzQzO1x0aW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUoKTtcbiBcbiBcdHN0YXR1cyA9IGVmaV9ib290X2tlcm5lbChoYW5kbGUsIGltYWdlLCBpbWFnZV9hZGRyLCBjbWRsaW5lX3B0cik7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmggYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaFxuaW5kZXggZmQ5MWZjMTVlYzgxMC4uNDQ0MzY4NjljNGVmZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaFxuQEAgLTExNjksNiAmIzQzOzExNjksMTIgQEAgZWZpX2VuYWJsZV9yZXNldF9hdHRhY2tfbWl0aWdhdGlvbih2b2lkKSB7IH1cbiBcbiB2b2lkIGVmaV9yZXRyaWV2ZV9ldmVudGxvZyh2b2lkKTtcbiBcbiYjNDM7I2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXG4mIzQzO3ZvaWQgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUodm9pZCk7XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKSB7IH1cbiYjNDM7I2VuZGlmXG4mIzQzO1xuIHN0cnVjdCBzeXNmYl9kaXNwbGF5X2luZm8gKmFsbG9jX3ByaW1hcnlfZGlzcGxheSh2b2lkKTtcbiBzdHJ1Y3Qgc3lzZmJfZGlzcGxheV9pbmZvICpfX2FsbG9jX3ByaW1hcnlfZGlzcGxheSh2b2lkKTtcbiB2b2lkIGZyZWVfcHJpbWFyeV9kaXNwbGF5KHN0cnVjdCBzeXNmYl9kaXNwbGF5X2luZm8gKmRweSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jXG5pbmRleCAwYmFlMGYwNmI2NzYzLi4zMTM2MTMyYjk2MjhhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmNcbkBAIC0xMDI0LDYgJiM0MzsxMDI0LDggQEAgdm9pZCBfX25vcmV0dXJuIGVmaV9zdHViX2VudHJ5KGVmaV9oYW5kbGVfdCBoYW5kbGUsXG4gXG4gXHRzZXR1cF91bmFjY2VwdGVkX21lbW9yeSgpO1xuIFxuJiM0MztcdGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKCk7XG4mIzQzO1xuIFx0c3RhdHVzID0gZXhpdF9ib290KGJvb3RfcGFyYW1zLCBoYW5kbGUpO1xuIFx0aWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUykge1xuIFx0XHRlZmlfZXJyKFwmIzM0O2V4aXRfYm9vdCgpIGZhaWxlZCFcXG5cJiMzNDspO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5lMTZkNDNmNDQzOGVlXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uY1xuQEAgLTAsMCAmIzQzOzEsMTQxIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7LypcbiYjNDM7ICogUnVudGltZSBzaWRlIG9mIHRoZSBMSU5VWF9FRklfUE9JU09ORURfTUVNT1JZIHRhYmxlOiBvbmUgYml0IHBlclxuJiM0MzsgKiBFRklfUE9JU09OX1VOSVRfU0laRSwgc2V0IGhlcmUgYXMgZnJhbWVzIGdvIGJhZCwgaG9ub3JlZCBieSB0aGUgbmV4dCBrZXJuZWwuXG4mIzQzOyAqXG4mIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IEJyZW5vIExlaXRhbyBcdTAwM2NsZWl0YW9AZGViaWFuLm9yZ1x1MDAzZVxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNkZWZpbmUgcHJfZm10KGZtdCkgXCYjMzQ7ZWZpOiBcJiMzNDsgZm10XG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRtYXAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9lZmkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xvZzIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1ibG9jay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvb3ZlcmZsb3cuaFx1MDAzZVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgX19pbml0XG4mIzQzO2VmaV9wb2lzb25fZ2VvbWV0cnlfdmFsaWQoY29uc3Qgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IG5iaXRzO1xuJiM0MztcbiYjNDM7XHQvKiBXaG9sZSB3b3JkcywgYW5kIGEgYml0IGNvdW50IHRoYXQgY2FuIGJlIHRha2VuIHdpdGhvdXQgd3JhcHBpbmcuICovXG4mIzQzO1x0aWYgKCFwbS1cdTAwM2VzaXplIHx8ICFJU19BTElHTkVEKHBtLVx1MDAzZXNpemUsIHNpemVvZih1bnNpZ25lZCBsb25nKSkgfHxcbiYjNDM7XHQgICAgY2hlY2tfbXVsX292ZXJmbG93KHBtLVx1MDAzZXNpemUsICh1NjQpQklUU19QRVJfQllURSwgXHUwMDI2bmJpdHMpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRpZiAocG0tXHUwMDNldW5pdF9zaXplIFx1MDAzYyBQQUdFX1NJWkUgfHwgIWlzX3Bvd2VyX29mXzIocG0tXHUwMDNldW5pdF9zaXplKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIElTX0FMSUdORUQocG0tXHUwMDNlcGh5c19iYXNlLCBwbS1cdTAwM2V1bml0X3NpemUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBUaGUgdGFibGUgbWF5IGNvbWUgZnJvbSBhbiBlYXJsaWVyIGtlcm5lbCwgc28gdmV0IGl0IGJlZm9yZSB1c2luZyBpdC4gKi9cbiYjNDM7c3RhdGljIGJvb2wgX19pbml0XG4mIzQzO2VmaV9wb2lzb25fdGFibGVfdmFsaWQoY29uc3Qgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHBtLVx1MDAzZXZlcnNpb24gIT0gMSkge1xuJiM0MztcdFx0cHJfd2FybihcJiMzNDtJZ25vcmluZyBwb2lzb25lZC1tZW1vcnkgdGFibGUgd2l0aCB2ZXJzaW9uICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRwbS1cdTAwM2V2ZXJzaW9uKTtcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghZWZpX3BvaXNvbl9nZW9tZXRyeV92YWxpZChwbSkpIHtcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7SWdub3JpbmcgbWFsZm9ybWVkIHBvaXNvbmVkLW1lbW9yeSB0YWJsZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVmV0IHRoZSBpbmhlcml0ZWQgdGFibGUgYW5kIGhhbmQgaXRzIHBhZ2VzIHRvIG1lbWJsb2NrLCB0aGUgd2F5IHRoZVxuJiM0MzsgKiB1bmFjY2VwdGVkIG1lbW9yeSB0YWJsZSBpcyBoYW5kbGVkLiBJdCBpcyBFRkkgQUNQSSByZWNsYWltIG1lbW9yeSwgd2hpY2hcbiYjNDM7ICogYmVjb21lcyBFODIwX1RZUEVfQUNQSSBhbmQgd291bGQgb3RoZXJ3aXNlIHN0YXkgb3V0IG9mIHRoZSBkaXJlY3QgbWFwLCBhbmRcbiYjNDM7ICogdG91Y2hpbmcgaXQgdGhlbiBmYXVsdHMuIENhbGxlZCBmcm9tIGVmaV9jb25maWdfcGFyc2VfdGFibGVzKCksIHNvXG4mIzQzOyAqIGV2ZXJ5dGhpbmcgbGF0ZXIgY2FuIHJlYWNoIGl0IHdpdGggZWZpX3BvaXNvbmVkX21lbW9yeSgpLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBfX2luaXQgZWZpX3BvaXNvbmVkX21lbW9yeV9yZXNlcnZlKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG07XG4mIzQzO1x0cGh5c19hZGRyX3Qgc3RhcnQsIGVuZDtcbiYjNDM7XG4mIzQzO1x0aWYgKGVmaS5wb2lzb25lZF9tZW1vcnkgPT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUilcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0cG0gPSBlYXJseV9tZW1yZW1hcChlZmkucG9pc29uZWRfbWVtb3J5LCBzaXplb2YoKnBtKSk7XG4mIzQzO1x0aWYgKCFwbSkge1xuJiM0MztcdFx0cHJfd2FybihcJiMzNDtDb3VsZCBub3QgbWFwIHBvaXNvbmVkLW1lbW9yeSB0YWJsZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRlZmkucG9pc29uZWRfbWVtb3J5ID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUjtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghZWZpX3BvaXNvbl90YWJsZV92YWxpZChwbSkpIHtcbiYjNDM7XHRcdGVmaS5wb2lzb25lZF9tZW1vcnkgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSO1xuJiM0MztcdFx0ZWFybHlfbWVtdW5tYXAocG0sIHNpemVvZigqcG0pKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHN0YXJ0ID0gUEFHRV9BTElHTl9ET1dOKGVmaS5wb2lzb25lZF9tZW1vcnkpO1xuJiM0MztcdGVuZCA9IFBBR0VfQUxJR04oZWZpLnBvaXNvbmVkX21lbW9yeSAmIzQzOyBzaXplb2YoKnBtKSAmIzQzOyBwbS1cdTAwM2VzaXplKTtcbiYjNDM7XHRlYXJseV9tZW11bm1hcChwbSwgc2l6ZW9mKCpwbSkpO1xuJiM0MztcbiYjNDM7XHRtZW1ibG9ja19hZGQoc3RhcnQsIGVuZCAtIHN0YXJ0KTtcbiYjNDM7XHRtZW1ibG9ja19yZXNlcnZlKHN0YXJ0LCBlbmQgLSBzdGFydCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFRoZSB0YWJsZSwgdmV0dGVkIGF0IHBhcnNlIHRpbWUsIG9yIE5VTEwgaWYgdGhpcyBib290IGhhcyBub25lLiAqL1xuJiM0MztzdGF0aWMgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKmVmaV9wb2lzb25lZF9tZW1vcnkodm9pZClcbiYjNDM7e1xuJiM0MztcdGlmIChlZmkucG9pc29uZWRfbWVtb3J5ID09IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHBoeXNfdG9fdmlydChlZmkucG9pc29uZWRfbWVtb3J5KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogRG9lcyB0aGUgcmFuZ2UgY292ZXIgYSB1bml0IGFuIGVhcmxpZXIga2VybmVsIHJlY29yZGVkIGFzIGJhZD8gKi9cbiYjNDM7Ym9vbCByYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnkocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSA9IGVmaV9wb2lzb25lZF9tZW1vcnkoKTtcbiYjNDM7XHR1NjQgZmlyc3QsIGxhc3QsIG5iaXRzO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBtKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRuYml0cyA9IHBtLVx1MDAzZXNpemUgKiBCSVRTX1BFUl9CWVRFO1xuJiM0MztcbiYjNDM7XHRpZiAoc3RhcnQgJiM0Mzsgc2l6ZSBcdTAwM2M9IHBtLVx1MDAzZXBoeXNfYmFzZSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRpZiAoc3RhcnQgXHUwMDNjIHBtLVx1MDAzZXBoeXNfYmFzZSlcbiYjNDM7XHRcdHN0YXJ0ID0gcG0tXHUwMDNlcGh5c19iYXNlO1xuJiM0MztcbiYjNDM7XHRmaXJzdCA9IChzdGFydCAtIHBtLVx1MDAzZXBoeXNfYmFzZSkgLyBwbS1cdTAwM2V1bml0X3NpemU7XG4mIzQzO1x0aWYgKGZpcnN0IFx1MDAzZT0gbmJpdHMpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGxhc3QgPSAoc3RhcnQgJiM0Mzsgc2l6ZSAtIDEgLSBwbS1cdTAwM2VwaHlzX2Jhc2UpIC8gcG0tXHUwMDNldW5pdF9zaXplO1xuJiM0MztcdGxhc3QgPSBtaW4obGFzdCwgbmJpdHMgLSAxKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZpbmRfbmV4dF9iaXQocG0tXHUwMDNlYml0bWFwLCBsYXN0ICYjNDM7IDEsIGZpcnN0KSBcdTAwM2M9IGxhc3Q7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEEgYml0IGlzIG5ldmVyIGNsZWFyZWQ6IGl0IHN0YW5kcyBmb3IgYSB3aG9sZSBFRklfUE9JU09OX1VOSVRfU0laRSwgc28gYW5cbiYjNDM7ICogdW5wb2lzb24gY2Fubm90IHRlbGwgd2hldGhlciB0aGUgdW5pdCBhcyBhIHdob2xlIGlzIGdvb2QgYWdhaW4uXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtID0gZWZpX3BvaXNvbmVkX21lbW9yeSgpO1xuJiM0MztcdHBoeXNfYWRkcl90IGFkZHIgPSBQRk5fUEhZUyhwZm4pO1xuJiM0MztcdHU2NCB1bml0O1xuJiM0MztcbiYjNDM7XHRpZiAoIXBtIHx8IGFkZHIgXHUwMDNjIHBtLVx1MDAzZXBoeXNfYmFzZSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0dW5pdCA9IChhZGRyIC0gcG0tXHUwMDNlcGh5c19iYXNlKSAvIHBtLVx1MDAzZXVuaXRfc2l6ZTtcbiYjNDM7XHRpZiAodW5pdCBcdTAwM2MgcG0tXHUwMDNlc2l6ZSAqIEJJVFNfUEVSX0JZVEUpXG4mIzQzO1x0XHRzZXRfYml0KHVuaXQsIHBtLVx1MDAzZWJpdG1hcCk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2VmaS5oIGIvaW5jbHVkZS9saW51eC9lZmkuaFxuaW5kZXggYzM1NDQ2YTBiNjZmYS4uNTY0MDJmZGNjZDExNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZWZpLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZWZpLmhcbkBAIC0yMyw2ICYjNDM7MjMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzdG9yZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmFuZ2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlYm9vdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NpemVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91dWlkLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcGFnZS5oXHUwMDNlXG5AQCAtNDIyLDYgJiM0Mzs0MjMsNyBAQCB2b2lkIGVmaV9uYXRpdmVfcnVudGltZV9zZXR1cCh2b2lkKTtcbiAjZGVmaW5lIExJTlVYX0VGSV9DT0NPX1NFQ1JFVF9BUkVBX0dVSURcdFx0RUZJX0dVSUQoMHhhZGY5NTZhZCwgMHhlOThjLCAweDQ4NGMsICAweGFlLCAweDExLCAweGI1LCAweDFjLCAweDdkLCAweDMzLCAweDY0LCAweDQ3KVxuICNkZWZpbmUgTElOVVhfRUZJX0JPT1RfTUVNTUFQX0dVSURcdFx0RUZJX0dVSUQoMHg4MDBmNjgzZiwgMHhkMDhiLCAweDQyM2EsICAweGEyLCAweDkzLCAweDk2LCAweDVjLCAweDNjLCAweDZmLCAweGUyLCAweGI0KVxuICNkZWZpbmUgTElOVVhfRUZJX1VOQUNDRVBURURfTUVNX1RBQkxFX0dVSURcdEVGSV9HVUlEKDB4ZDVkMWRlM2MsIDB4MTA1YywgMHg0NGY5LCAgMHg5ZSwgMHhhOSwgMHhiYywgMHhlZiwgMHg5OCwgMHgxMiwgMHgwMCwgMHgzMSlcbiYjNDM7I2RlZmluZSBMSU5VWF9FRklfUE9JU09ORURfTUVNT1JZX1RBQkxFX0dVSURcdEVGSV9HVUlEKDB4YWY4MjhhMTUsIDB4MGVmNCwgMHg0MzlhLCAgMHhiOCwgMHg2YSwgMHhkNiwgMHhkNiwgMHg5ZSwgMHhhZiwgMHhiYSwgMHhmYSlcbiBcbiAjZGVmaW5lIFJJU0NWX0VGSV9CT09UX1BST1RPQ09MX0dVSURcdFx0RUZJX0dVSUQoMHhjY2QxNWZlYywgMHg2ZjczLCAweDRlZWMsICAweDgzLCAweDk1LCAweDNlLCAweDY5LCAweGU0LCAweGI5LCAweDQwLCAweGJmKVxuIFxuQEAgLTY1MCw2ICYjNDM7NjUyLDcgQEAgZXh0ZXJuIHN0cnVjdCBlZmkge1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRcdG1va3Zhcl90YWJsZTtcdFx0LyogTU9LIHZhcmlhYmxlIGNvbmZpZyB0YWJsZSAqL1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRcdGNvY29fc2VjcmV0O1x0XHQvKiBDb25maWRlbnRpYWwgY29tcHV0aW5nIHNlY3JldCB0YWJsZSAqL1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRcdHVuYWNjZXB0ZWQ7XHRcdC8qIFVuYWNjZXB0ZWQgbWVtb3J5IHRhYmxlICovXG4mIzQzO1x0dW5zaWduZWQgbG9uZ1x0XHRcdHBvaXNvbmVkX21lbW9yeTtcdC8qIEhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSB0YWJsZSAqL1xuIFxuIFx0ZWZpX2dldF90aW1lX3RcdFx0XHQqZ2V0X3RpbWU7XG4gXHRlZmlfc2V0X3RpbWVfdFx0XHRcdCpzZXRfdGltZTtcbkBAIC0xMjcyLDYgJiM0MzsxMjc1LDI1IEBAIHN0cnVjdCBsaW51eF9lZmlfbWVtcmVzZXJ2ZSB7XG4gI2RlZmluZSBFRklfTUVNUkVTRVJWRV9DT1VOVChzaXplKSAoKChzaXplKSAtIHNpemVvZihzdHJ1Y3QgbGludXhfZWZpX21lbXJlc2VydmUpKSBcXFxuIFx0LyBzaXplb2ZfZmllbGQoc3RydWN0IGxpbnV4X2VmaV9tZW1yZXNlcnZlLCBlbnRyeVswXSkpXG4gXG4mIzQzOy8qIEJpdCBOIGNvdmVycyB0aGUgdW5pdCBhdCBAcGh5c19iYXNlICYjNDM7IE4gKiBAdW5pdF9zaXplLiAqL1xuJiM0MztzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSB7XG4mIzQzO1x0dTMyXHRcdHZlcnNpb247XG4mIzQzO1x0dTMyXHRcdHVuaXRfc2l6ZTtcdC8qIGJ5dGVzIG9mIHBoeXMgc3BhY2UgcGVyIGJpdG1hcCBiaXQgKi9cbiYjNDM7XHR1NjRcdFx0cGh5c19iYXNlO1x0LyogYWRkcmVzcyB0aGUgZmlyc3QgYml0IGNvdmVycyAqL1xuJiM0MztcdHU2NFx0XHRzaXplO1x0XHQvKiBiaXRtYXAgc2l6ZSBpbiBieXRlcyAqL1xuJiM0MztcdHVuc2lnbmVkIGxvbmdcdGJpdG1hcFtdO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2RlZmluZSBFRklfUE9JU09OX1VOSVRfU0laRVx0U1pfMk1cbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWVxuJiM0Mzt2b2lkIF9faW5pdCBlZmlfcG9pc29uZWRfbWVtb3J5X3Jlc2VydmUodm9pZCk7XG4mIzQzO3ZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pO1xuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZWZpX3BvaXNvbmVkX21lbW9yeV9yZXNlcnZlKHZvaWQpIHsgfVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pIHsgfVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gdm9pZCBfX2luaXQgZWZpX2FyY2hfbWVtX3Jlc2VydmUocGh5c19hZGRyX3QgYWRkciwgdTY0IHNpemUpO1xuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXG5pbmRleCAyNzRmYTg4MDA3N2M1Li45ZDlmMmU4ZmRjMTM2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmhcbkBAIC01MjI1LDYgJiM0Mzs1MjI1LDcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbWVtb3J5X2ZhaWx1cmVfYXR0cl9ncm91cDtcbiBleHRlcm4gdm9pZCBtZW1vcnlfZmFpbHVyZV9xdWV1ZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKTtcbiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pO1xuIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX3N1Yih1bnNpZ25lZCBsb25nIHBmbiwgbG9uZyBpKTtcbiYjNDM7dm9pZCBfX21lbWluaXQgaHdwb2lzb25fYm9vdF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTtcbiBwaHlzX2FkZHJfdCByYW5nZV9maXJzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKTtcbiBwaHlzX2FkZHJfdCByYW5nZV9sYXN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpO1xuICNlbHNlXG5AQCAtNTIzMiw2ICYjNDM7NTIzMywxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtb3J5X2ZhaWx1cmVfcXVldWUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbiB7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaHdwb2lzb25fYm9vdF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pXG4ge1xuIH1cbkBAIC01Mzg3LDYgJiM0Mzs1MzkyLDIwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwZm5faXNfdW5hY2NlcHRlZF9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXG4gXHRyZXR1cm4gcmFuZ2VfY29udGFpbnNfdW5hY2NlcHRlZF9tZW1vcnkocGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULCBQQUdFX1NJWkUpO1xuIH1cbiBcbiYjNDM7I2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXG4mIzQzO1xuJiM0Mztib29sIHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeShwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKTtcbiYjNDM7XG4mIzQzOyNlbHNlXG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5KHBoeXNfYWRkcl90IHN0YXJ0LFxuJiM0MztcdFx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2VuZGlmXG4mIzQzO1xuIHZvaWQgdm1hX3BndGFibGVfd2Fsa19iZWdpbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4gdm9pZCB2bWFfcGd0YWJsZV93YWxrX2VuZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4gXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbmluZGV4IGEyY2E4ZGY1MDFjYWUuLmY2YWZkYjJhODlhOTQgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5AQCAtNDMsNiAmIzQzOzQzLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3Rhc2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RheC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2VmaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva3NtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ybWFwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuQEAgLTEzNiw2ICYjNDM7MTM3LDIxIEBAIHBoeXNfYWRkcl90IHJhbmdlX2xhc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiBcdHJldHVybiByYW5nZV9od3BvaXNvbihzdGFydCwgc2l6ZSwgZmFsc2UpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgdXBkYXRlX3Blcl9ub2RlX21mX3N0YXRzKHVuc2lnbmVkIGxvbmcgcGZuLCBlbnVtIG1mX3Jlc3VsdCByZXN1bHQpO1xuJiM0MztcbiYjNDM7LyogTm90IG51bV9wb2lzb25lZF9wYWdlc19pbmMoKTogaXRzIHBlciBibG9jayBoYWxmIGRpdmlkZXMgYnkgemVybyB0aGlzIGVhcmx5LiAqL1xuJiM0Mzt2b2lkIF9fbWVtaW5pdCBod3BvaXNvbl9ib290X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4mIzQzO3tcbiYjNDM7XHRpZiAoUGFnZUhXUG9pc29uKHBhZ2UpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRTZXRQYWdlSFdQb2lzb24ocGFnZSk7XG4mIzQzO1x0c2V0X3BhZ2VfY291bnQocGFnZSwgMSk7XG4mIzQzO1x0LyogVGhlIHBhZ2UgaGFzIGJlZW4gY29tcGxldGVseSBpc29sYXRlZCA9PSBNRl9SRUNPVkVSRUQgKi9cbiYjNDM7XHR1cGRhdGVfcGVyX25vZGVfbWZfc3RhdHMocGFnZV90b19wZm4ocGFnZSksIE1GX1JFQ09WRVJFRCk7XG4mIzQzO1x0YXRvbWljX2xvbmdfaW5jKFx1MDAyNm51bV9wb2lzb25lZF9wYWdlcyk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogTUZfQVRUUl9STyAtIENyZWF0ZSBzeXNmcyBlbnRyeSBmb3IgZWFjaCBtZW1vcnkgZmFpbHVyZSBzdGF0aXN0aWNzLlxuICAqIEBfbmFtZTogbmFtZSBvZiB0aGUgZmlsZSBpbiB0aGUgcGVyIE5VTUEgc3lzZnMgZGlyZWN0b3J5LlxuQEAgLTEzMjYsNiAmIzQzOzEzNDIsOCBAQCBzdGF0aWMgaW50IGFjdGlvbl9yZXN1bHQodW5zaWduZWQgbG9uZyBwZm4sIGVudW0gbWZfYWN0aW9uX3BhZ2VfdHlwZSB0eXBlLFxuIFx0aWYgKHR5cGUgIT0gTUZfTVNHX0FMUkVBRFlfUE9JU09ORUQgXHUwMDI2XHUwMDI2IHR5cGUgIT0gTUZfTVNHX1BGTl9NQVApIHtcbiBcdFx0bnVtX3BvaXNvbmVkX3BhZ2VzX2luYyhwZm4pO1xuIFx0XHR1cGRhdGVfcGVyX25vZGVfbWZfc3RhdHMocGZuLCByZXN1bHQpO1xuJiM0MztcdFx0LyogT25seSBoYXJkIG9mZmxpbmVzIGFyZSBjYXJyaWVkIG92ZXIgdG8gdGhlIG5leHQga2VybmVsLiAqL1xuJiM0MztcdFx0ZWZpX2h3cG9pc29uX3JlY29yZF9wZm4ocGZuKTtcbiBcdH1cbiBcbiBcdHByX2VycihcJiMzNDslI2x4OiByZWNvdmVyeSBhY3Rpb24gZm9yICVzOiAlc1xcblwmIzM0OyxcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcbmluZGV4IDQwNDg5NmI1MzAwM2UuLjllMmNlODMzZmQ0MDkgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2FsbG9jLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2VfYWxsb2MuY1xuQEAgLTE1NzksNiAmIzQzOzE1NzksMTkgQEAgc3RhdGljIHZvaWQgX19mcmVlX3BhZ2VzX29rKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4gXHRcdGZyZWVfb25lX3BhZ2Uoem9uZSwgcGFnZSwgcGZuLCBvcmRlciwgZnBpX2ZsYWdzKTtcbiB9XG4gXG4mIzQzOy8qIEZsYWcgdGhlIGZyYW1lcyBhbiBlYXJsaWVyIGtlcm5lbCByZWNvcmRlZCBhcyBiYWQuICovXG4mIzQzO3N0YXRpYyB2b2lkIF9fbWVtaW5pdCBwb2lzb25fYmxvY2soc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaSwgbnJfcGFnZXMgPSAxVUwgXHUwMDNjXHUwMDNjIG9yZGVyO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9wYWdlczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBwYWdlICpwID0gcGFnZSAmIzQzOyBpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChyYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnkocGFnZV90b19waHlzKHApLCBQQUdFX1NJWkUpKVxuJiM0MztcdFx0XHRod3BvaXNvbl9ib290X3BhZ2UocCk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHZvaWQgX19tZW1pbml0IF9fZnJlZV9wYWdlc19jb3JlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4gXHRcdGVudW0gbWVtaW5pdF9jb250ZXh0IGNvbnRleHQpXG4ge1xuQEAgLTE2MTMsNiAmIzQzOzE2MjYsMTggQEAgdm9pZCBfX21lbWluaXQgX19mcmVlX3BhZ2VzX2NvcmUoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcixcbiBcdFx0YXRvbWljX2xvbmdfYWRkKG5yX3BhZ2VzLCBcdTAwMjZwYWdlX3pvbmUocGFnZSktXHUwMDNlbWFuYWdlZF9wYWdlcyk7XG4gXHR9XG4gXG4mIzQzO1x0LyogRmlyc3Q6IGEgYmxvY2sgcGFya2VkIGJ5IF9fZnJlZV91bmFjY2VwdGVkKCkgbmV2ZXIgcmV0dXJucyBoZXJlLiAqL1xuJiM0MztcdGlmIChyYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnkocGFnZV90b19waHlzKHBhZ2UpLFxuJiM0MztcdFx0XHRcdFx0ICAgUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyBvcmRlcikpIHtcbiYjNDM7XHRcdHBvaXNvbl9ibG9jayhwYWdlLCBvcmRlcik7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVE9ETzogZnJlZSB0aGUgZnJhbWVzIGluIHRoZSBibG9jayB0aGF0IGFyZSBub3QgcG9pc29uZWQuXG4mIzQzO1x0XHQgKiBUaGV5IHN0YXkgb3V0IG9mIHRoZSBhbGxvY2F0b3IgYW5kIHN0aWxsIGNvdW50IGluXG4mIzQzO1x0XHQgKiBtYW5hZ2VkX3BhZ2VzLCBzbyBhIHVuaXQgY29zdHMgdXAgdG8gYSBibG9jay5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAocGFnZV9jb250YWluc191bmFjY2VwdGVkKHBhZ2UsIG9yZGVyKSkge1xuIFx0XHRpZiAob3JkZXIgPT0gTUFYX1BBR0VfT1JERVIgXHUwMDI2XHUwMDI2IF9fZnJlZV91bmFjY2VwdGVkKHBhZ2UpKVxuIFx0XHRcdHJldHVybjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNDowOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFRklfUE9JU09ORURfTUVNT1JZJiMzNDssCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O0VGSV9TVFVCJiMzNDssCiAgICAmIzM0O0VGSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2VmaV9od3BvaXNvbl9yZWNvcmRfcGZuJiMzNDssCiAgICAmIzM0O3JhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeSYjMzQ7LAogICAgJiMzNDtod3BvaXNvbl9ib290X3BhZ2UmIzM0OywKICAgICYjMzQ7bWVtb3J5X2ZhaWx1cmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0cmFja2luZyBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgYWNyb3NzIGtleGVjIHZpYSBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSAoQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUlkpLiBJdCBpbnRyb2R1Y2VzIGhvb2tzIGluIGNvcmUgbWVtb3J5LWZhaWx1cmUgaGFuZGxpbmcgKGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuIGluIGFjdGlvbl9yZXN1bHQpIGFuZCBtZW1vcnkgaW5pdGlhbGl6YXRpb24vaG90cGx1ZyAoX19mcmVlX3BhZ2VzX2NvcmUsIGh3cG9pc29uX2Jvb3RfcGFnZSkuIFRoZXNlIHBhdGhzIGFyZSByZWFjaGFibGUgYXQgcnVudGltZSB2aWEgbWVtb3J5IGZhaWx1cmUgbWVjaGFuaXNtcyBzdWNoIGFzIG1hZHZpc2UoTUFEVl9IV1BPSVNPTikgYW5kIG1lbW9yeSBob3RwbHVnZ2luZyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2l0aCBFRkkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhNzljYmIxMDVjNTk4MTdhZjMyYTIyYTAwMTcxZjdiYjkxNDY3NjU0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAxNDowOTowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmkuYyBiL2FyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmkuYwppbmRleCAwYzM5YWRiOTZiOTEyLi4yYjM3Yjk2YTM2ZTA5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaS5jCkBAIC05Myw2ICYjNDM7OTMsOSBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyAqIGNvbnN0IGVmaV90YWJsZXNbXSA9IHsKICNpZmRlZiBDT05GSUdfVU5BQ0NFUFRFRF9NRU1PUlkKIAkmYW1wO2VmaS51bmFjY2VwdGVkLAogI2VuZGlmCiYjNDM7I2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZCiYjNDM7CSZhbXA7ZWZpLnBvaXNvbmVkX21lbW9yeSwKJiM0MzsjZW5kaWYKIH07CiAKIHU2NCBlZmlfc2V0dXA7CQkvKiBlZmkgc2V0dXBfZGF0YSBwaHlzaWNhbCBhZGRyZXNzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZwppbmRleCAyOWUwNzI5Mjk5ZjViLi5hYWZjZDQxYmMwMDYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWcKQEAgLTI2Myw2ICYjNDM7MjYzLDE0IEBAIGNvbmZpZyBFRklfQ09DT19TRUNSRVQKIAkgIHZpcnQvY29jby9lZmlfc2VjcmV0IG1vZHVsZSB0byBhY2Nlc3MgdGhlIHNlY3JldHMsIHdoaWNoIGluIHR1cm4KIAkgIGFsbG93cyB1c2Vyc3BhY2UgcHJvZ3JhbXMgdG8gYWNjZXNzIHRoZSBpbmplY3RlZCBzZWNyZXRzLgogCiYjNDM7Y29uZmlnIEVGSV9QT0lTT05FRF9NRU1PUlkKJiM0MzsJZGVmX2Jvb2wgeQomIzQzOwlkZXBlbmRzIG9uIEVGSV9TVFVCICZhbXA7JmFtcDsgTUVNT1JZX0ZBSUxVUkUgJmFtcDsmYW1wOyA2NEJJVAomIzQzOwloZWxwCiYjNDM7CSAgUmVjb3JkIHBhZ2UgZnJhbWVzIHRoYXQgYXJlIGhhcmR3YXJlLXBvaXNvbmVkIHdoaWxlIHRoaXMga2VybmVsIHJ1bnMKJiM0MzsJICBpbnRvIGFuIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlLCBhbmQgaG9ub3IgdGhhdCB0YWJsZSBlYXJseSBvbiB0aGUKJiM0MzsJICBuZXh0IGtlcm5lbCBzbyBhIGtleGVjIGRvZXMgbm90IGhhbmQga25vd24tYmFkIFJBTSBiYWNrIG91dC4KJiM0MzsKIGNvbmZpZyBPVk1GX0RFQlVHX0xPRwogCWJvb2wgJiMzNDtFeHBvc2UgT1ZNRiBmaXJtd2FyZSBkZWJ1ZyBsb2cgdmlhIHN5c2ZzJiMzNDsKIAlkZXBlbmRzIG9uIEVGSQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGUgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9NYWtlZmlsZQppbmRleCA4ZWZiY2Y2OTllNGZmLi4wNWQwYTQ5MDkyM2U1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9NYWtlZmlsZQpAQCAtNDMsNCAmIzQzOzQzLDUgQEAgb2JqLSQoQ09ORklHX0VGSV9FQVJMWUNPTikJCSYjNDM7PSBlYXJseWNvbi5vCiBvYmotJChDT05GSUdfVUVGSV9DUEVSX0FSTSkJCSYjNDM7PSBjcGVyLWFybS5vCiBvYmotJChDT05GSUdfVUVGSV9DUEVSX1g4NikJCSYjNDM7PSBjcGVyLXg4Ni5vCiBvYmotJChDT05GSUdfVU5BQ0NFUFRFRF9NRU1PUlkpCQkmIzQzOz0gdW5hY2NlcHRlZF9tZW1vcnkubwomIzQzO29iai0kKENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZKQkmIzQzOz0gcG9pc29uLm8KIG9iai0kKENPTkZJR19URUVfU1RNTV9FRkkpCQkmIzQzOz0gc3RtbS90ZWVfc3RtbV9lZmkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYwppbmRleCA2ZDk4N2Q3Zjk3NzgxLi41NWIyZWU1M2ZjMjY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYwpAQCAtNTUsNiAmIzQzOzU1LDkgQEAgc3RydWN0IGVmaSBfX3JlYWRfbW9zdGx5IGVmaSA9IHsKICNpZmRlZiBDT05GSUdfVU5BQ0NFUFRFRF9NRU1PUlkKIAkudW5hY2NlcHRlZAkJPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSLAogI2VuZGlmCiYjNDM7I2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZCiYjNDM7CS5wb2lzb25lZF9tZW1vcnkJPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSLAomIzQzOyNlbmRpZgogfTsKIEVYUE9SVF9TWU1CT0woZWZpKTsKIApAQCAtNjc3LDYgJiM0Mzs2ODAsOSBAQCBzdGF0aWMgY29uc3QgZWZpX2NvbmZpZ190YWJsZV90eXBlX3QgY29tbW9uX3RhYmxlc1tdIF9faW5pdGNvbnN0ID0gewogI2lmZGVmIENPTkZJR19VTkFDQ0VQVEVEX01FTU9SWQogCXtMSU5VWF9FRklfVU5BQ0NFUFRFRF9NRU1fVEFCTEVfR1VJRCwJJmFtcDtlZmkudW5hY2NlcHRlZCwJJiMzNDtVbmFjY2VwdGVkJiMzNDsJfSwKICNlbmRpZgomIzQzOyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWQomIzQzOwl7TElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWV9UQUJMRV9HVUlELAkmYW1wO2VmaS5wb2lzb25lZF9tZW1vcnksCSYjMzQ7UE9JU09OJiMzNDsJfSwKJiM0MzsjZW5kaWYKICNpZmRlZiBDT05GSUdfRUZJX0dFTkVSSUNfU1RVQgogCXtMSU5VWF9FRklfUFJJTUFSWV9ESVNQTEFZX1RBQkxFX0dVSUQsCSZhbXA7cHJpbWFyeV9kaXNwbGF5X3RhYmxlCQkJfSwKICNlbmRpZgpAQCAtODc3LDYgJiM0Mzs4ODMsOCBAQCBpbnQgX19pbml0IGVmaV9jb25maWdfcGFyc2VfdGFibGVzKGNvbnN0IGVmaV9jb25maWdfdGFibGVfdCAqY29uZmlnX3RhYmxlcywKIAkJfQogCX0KIAomIzQzOwllZmlfcG9pc29uZWRfbWVtb3J5X3Jlc2VydmUoKTsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmMKaW5kZXggNDhmOTNmNzc1OGU5ZS4uNWNiZTY3NTQ5MTMzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jCkBAIC03NzQsMyAmIzQzOzc3NCwxMDMgQEAgdm9pZCBlZmlfcmVtYXBfaW1hZ2UodW5zaWduZWQgbG9uZyBpbWFnZV9iYXNlLCB1bnNpZ25lZCBhbGxvY19zaXplLAogCQkJZWZpX3dhcm4oJiMzNDtGYWlsZWQgdG8gcmVtYXAgZGF0YSByZWdpb24gbm9uLWV4ZWN1dGFibGVcbiYjMzQ7KTsKIAl9CiB9CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZCiYjNDM7LyoKJiM0MzsgKiBGaW5kIHRoZSBiYXNlIGFuZCB0b3Agb2YgdGhlIG1lbW9yeSwgc28sIHdlIGNhbiBjcmVhdGUgdGhlIGJpdG1hcCBmb3IKJiM0MzsgKiB0aGUgZnVsbCByYW5nZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgZWZpX3N0YXR1c190IGVmaV9nZXRfcmFtX3JhbmdlKHU2NCAqYmFzZSwgdTY0ICp0b3ApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZWZpX2Jvb3RfbWVtbWFwICptYXAgX19mcmVlKGVmaV9wb29sKSA9IE5VTEw7CiYjNDM7CXU2NCByYW1fYmFzZSA9IFVMTE9OR19NQVgsIHJhbV90b3AgPSAwOwomIzQzOwllZmlfc3RhdHVzX3Qgc3RhdHVzOwomIzQzOwlpbnQgaSwgbnJfZGVzYzsKJiM0MzsKJiM0MzsJc3RhdHVzID0gZWZpX2dldF9tZW1vcnlfbWFwKCZhbXA7bWFwLCBmYWxzZSk7CiYjNDM7CWlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpCiYjNDM7CQlyZXR1cm4gc3RhdHVzOwomIzQzOwomIzQzOwlucl9kZXNjID0gbWFwLSZndDttYXBfc2l6ZSAvIG1hcC0mZ3Q7ZGVzY19zaXplOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnJfZGVzYzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWVmaV9tZW1vcnlfZGVzY190ICpkOwomIzQzOwomIzQzOwkJZCA9IGVmaV9tZW1kZXNjX3B0cigodW5zaWduZWQgbG9uZyltYXAtJmd0O21hcCwgbWFwLSZndDtkZXNjX3NpemUsIGkpOwomIzQzOwkJcmFtX2Jhc2UgPSBtaW4ocmFtX2Jhc2UsIGQtJmd0O3BoeXNfYWRkcik7CiYjNDM7CQlyYW1fdG9wID0gbWF4KHJhbV90b3AsCiYjNDM7CQkJICAgICAgZC0mZ3Q7cGh5c19hZGRyICYjNDM7IGQtJmd0O251bV9wYWdlcyAqIEVGSV9QQUdFX1NJWkUpOwomIzQzOwl9CiYjNDM7CWlmICghcmFtX3RvcCB8fCByYW1fYmFzZSA9PSBVTExPTkdfTUFYKQomIzQzOwkJcmV0dXJuIEVGSV9OT1RfRk9VTkQ7CiYjNDM7CiYjNDM7CSpiYXNlID0gcm91bmRfZG93bihyYW1fYmFzZSwgRUZJX1BPSVNPTl9VTklUX1NJWkUpOwomIzQzOwkqdG9wID0gcm91bmRfdXAocmFtX3RvcCwgRUZJX1BPSVNPTl9VTklUX1NJWkUpOwomIzQzOwomIzQzOwlyZXR1cm4gRUZJX1NVQ0NFU1M7CiYjNDM7fQomIzQzOwomIzQzOy8qIFRoZSBzaXplIG9mIHRoZSBiaXRtYXAgKi8KJiM0MztzdGF0aWMgdTY0IGVmaV9wb2lzb25fYml0bWFwX3NpemUodTY0IHNwYW4pCiYjNDM7ewomIzQzOwl1NjQgYnl0ZXMgPSBESVZfUk9VTkRfVVAoRElWX1JPVU5EX1VQKHNwYW4sIEVGSV9QT0lTT05fVU5JVF9TSVpFKSwKJiM0MzsJCQkJIEJJVFNfUEVSX0JZVEUpOwomIzQzOwomIzQzOwlyZXR1cm4gcm91bmRfdXAoYnl0ZXMsIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqZWZpX3BvaXNvbl9hbGxvYyh1NjQgcGh5c19iYXNlLAomIzQzOwkJCQkJCQkgIHU2NCBiaXRtYXBfc2l6ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTsKJiM0MzsJZWZpX3N0YXR1c190IHN0YXR1czsKJiM0MzsKJiM0MzsJc3RhdHVzID0gZWZpX2JzX2NhbGwoYWxsb2NhdGVfcG9vbCwgRUZJX0FDUElfUkVDTEFJTV9NRU1PUlksCiYjNDM7CQkJICAgICBzaXplb2YoKnBtKSAmIzQzOyBiaXRtYXBfc2l6ZSwgKHZvaWQgKiopJmFtcDtwbSk7CiYjNDM7CWlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJcG0tJmd0O3ZlcnNpb24gPSAxOwomIzQzOwlwbS0mZ3Q7dW5pdF9zaXplID0gRUZJX1BPSVNPTl9VTklUX1NJWkU7CiYjNDM7CXBtLSZndDtwaHlzX2Jhc2UgPSBwaHlzX2Jhc2U7CiYjNDM7CXBtLSZndDtzaXplID0gYml0bWFwX3NpemU7CiYjNDM7CW1lbXNldChwbS0mZ3Q7Yml0bWFwLCAwLCBiaXRtYXBfc2l6ZSk7CiYjNDM7CiYjNDM7CXJldHVybiBwbTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogVGhpcyBuZWVkcyB0byBiZSBkb25lIHdoaWxlIGJvb3Qgc2VydmljZSBpcyBzdGlsbCBhY3RpdmUgKi8KJiM0Mzt2b2lkIGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKHZvaWQpCiYjNDM7ewomIzQzOwllZmlfZ3VpZF90IHBvaXNvbmVkX21lbW9yeV90YWJsZV9ndWlkID0gTElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWV9UQUJMRV9HVUlEOwomIzQzOwlzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG07CiYjNDM7CXU2NCByYW1fYmFzZSwgcmFtX3RvcCwgYml0bWFwX3NpemU7CiYjNDM7CWVmaV9zdGF0dXNfdCBzdGF0dXM7CiYjNDM7CiYjNDM7CS8qIEEgdGFibGUgaW5zdGFsbGVkIGJ5IGFuIGVhcmxpZXIgYm9vdCByaWRlcyB0aGUgc3lzdGVtIHRhYmxlIGFjcm9zcyBrZXhlYy4gKi8KJiM0MzsJcG0gPSBnZXRfZWZpX2NvbmZpZ190YWJsZShwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCk7CiYjNDM7CWlmIChwbSkgewomIzQzOwkJaWYgKHBtLSZndDt2ZXJzaW9uICE9IDEpCiYjNDM7CQkJZWZpX2VycigmIzM0O1Vua25vd24gdmVyc2lvbiBvZiBwb2lzb25lZC1tZW1vcnkgdGFibGVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZWZpX2dldF9yYW1fcmFuZ2UoJmFtcDtyYW1fYmFzZSwgJmFtcDtyYW1fdG9wKSAhPSBFRklfU1VDQ0VTUykgewomIzQzOwkJZWZpX2VycigmIzM0O0ZhaWxlZCB0byBzaXplIHRoZSBwb2lzb25lZC1tZW1vcnkgdGFibGUhXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJYml0bWFwX3NpemUgPSBlZmlfcG9pc29uX2JpdG1hcF9zaXplKHJhbV90b3AgLSByYW1fYmFzZSk7CiYjNDM7CXBtID0gZWZpX3BvaXNvbl9hbGxvYyhyYW1fYmFzZSwgYml0bWFwX3NpemUpOwomIzQzOwlpZiAoIXBtKSB7CiYjNDM7CQllZmlfZXJyKCYjMzQ7RmFpbGVkIHRvIGFsbG9jYXRlIHBvaXNvbmVkLW1lbW9yeSB0YWJsZSFcbiYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlzdGF0dXMgPSBlZmlfYnNfY2FsbChpbnN0YWxsX2NvbmZpZ3VyYXRpb25fdGFibGUsCiYjNDM7CQkJICAgICAmYW1wO3BvaXNvbmVkX21lbW9yeV90YWJsZV9ndWlkLCBwbSk7CiYjNDM7CWlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIHsKJiM0MzsJCWVmaV9ic19jYWxsKGZyZWVfcG9vbCwgcG0pOwomIzQzOwkJZWZpX2VycigmIzM0O0ZhaWxlZCB0byBpbnN0YWxsIHBvaXNvbmVkLW1lbW9yeSBjb25maWcgdGFibGUhXG4mIzM0Oyk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7I2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmMKaW5kZXggMjM1Yzk3MzhkYTJkNi4uMjJhMzE1ZTI4MTRhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuYwpAQCAtMTc5LDYgJiM0MzsxNzksNyBAQCBlZmlfc3RhdHVzX3QgZWZpX3N0dWJfY29tbW9uKGVmaV9oYW5kbGVfdCBoYW5kbGUsCiAJCQkgRUZJX1JUX1NVUFBPUlRFRF9TRVRfVklSVFVBTF9BRERSRVNTX01BUCk7CiAKIAlpbnN0YWxsX21lbXJlc2VydmVfdGFibGUoKTsKJiM0MzsJaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUoKTsKIAogCXN0YXR1cyA9IGVmaV9ib290X2tlcm5lbChoYW5kbGUsIGltYWdlLCBpbWFnZV9hZGRyLCBjbWRsaW5lX3B0cik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmgKaW5kZXggZmQ5MWZjMTVlYzgxMC4uNDQ0MzY4NjljNGVmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmgKQEAgLTExNjksNiAmIzQzOzExNjksMTIgQEAgZWZpX2VuYWJsZV9yZXNldF9hdHRhY2tfbWl0aWdhdGlvbih2b2lkKSB7IH0KIAogdm9pZCBlZmlfcmV0cmlldmVfZXZlbnRsb2codm9pZCk7CiAKJiM0MzsjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUlkKJiM0Mzt2b2lkIGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKHZvaWQpOwomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKHZvaWQpIHsgfQomIzQzOyNlbmRpZgomIzQzOwogc3RydWN0IHN5c2ZiX2Rpc3BsYXlfaW5mbyAqYWxsb2NfcHJpbWFyeV9kaXNwbGF5KHZvaWQpOwogc3RydWN0IHN5c2ZiX2Rpc3BsYXlfaW5mbyAqX19hbGxvY19wcmltYXJ5X2Rpc3BsYXkodm9pZCk7CiB2b2lkIGZyZWVfcHJpbWFyeV9kaXNwbGF5KHN0cnVjdCBzeXNmYl9kaXNwbGF5X2luZm8gKmRweSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmMKaW5kZXggMGJhZTBmMDZiNjc2My4uMzEzNjEzMmI5NjI4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuYwpAQCAtMTAyNCw2ICYjNDM7MTAyNCw4IEBAIHZvaWQgX19ub3JldHVybiBlZmlfc3R1Yl9lbnRyeShlZmlfaGFuZGxlX3QgaGFuZGxlLAogCiAJc2V0dXBfdW5hY2NlcHRlZF9tZW1vcnkoKTsKIAomIzQzOwlpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSgpOwomIzQzOwogCXN0YXR1cyA9IGV4aXRfYm9vdChib290X3BhcmFtcywgaGFuZGxlKTsKIAlpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7CiAJCWVmaV9lcnIoJiMzNDtleGl0X2Jvb3QoKSBmYWlsZWQhXG4mIzM0Oyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmUxNmQ0M2Y0NDM4ZWUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYwpAQCAtMCwwICYjNDM7MSwxNDEgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7LyoKJiM0MzsgKiBSdW50aW1lIHNpZGUgb2YgdGhlIExJTlVYX0VGSV9QT0lTT05FRF9NRU1PUlkgdGFibGU6IG9uZSBiaXQgcGVyCiYjNDM7ICogRUZJX1BPSVNPTl9VTklUX1NJWkUsIHNldCBoZXJlIGFzIGZyYW1lcyBnbyBiYWQsIGhvbm9yZWQgYnkgdGhlIG5leHQga2VybmVsLgomIzQzOyAqCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBCcmVubyBMZWl0YW8gJmx0O2xlaXRhb0BkZWJpYW4ub3JnJmd0OwomIzQzOyAqLwomIzQzOwomIzQzOyNkZWZpbmUgcHJfZm10KGZtdCkgJiMzNDtlZmk6ICYjMzQ7IGZtdAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaXRtYXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZWZpLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xvZzIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWVtYmxvY2suaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW0uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb3ZlcmZsb3cuaCZndDsKJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBfX2luaXQKJiM0MztlZmlfcG9pc29uX2dlb21ldHJ5X3ZhbGlkKGNvbnN0IHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSkKJiM0Mzt7CiYjNDM7CXU2NCBuYml0czsKJiM0MzsKJiM0MzsJLyogV2hvbGUgd29yZHMsIGFuZCBhIGJpdCBjb3VudCB0aGF0IGNhbiBiZSB0YWtlbiB3aXRob3V0IHdyYXBwaW5nLiAqLwomIzQzOwlpZiAoIXBtLSZndDtzaXplIHx8ICFJU19BTElHTkVEKHBtLSZndDtzaXplLCBzaXplb2YodW5zaWduZWQgbG9uZykpIHx8CiYjNDM7CSAgICBjaGVja19tdWxfb3ZlcmZsb3cocG0tJmd0O3NpemUsICh1NjQpQklUU19QRVJfQllURSwgJmFtcDtuYml0cykpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChwbS0mZ3Q7dW5pdF9zaXplICZsdDsgUEFHRV9TSVpFIHx8ICFpc19wb3dlcl9vZl8yKHBtLSZndDt1bml0X3NpemUpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gSVNfQUxJR05FRChwbS0mZ3Q7cGh5c19iYXNlLCBwbS0mZ3Q7dW5pdF9zaXplKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogVGhlIHRhYmxlIG1heSBjb21lIGZyb20gYW4gZWFybGllciBrZXJuZWwsIHNvIHZldCBpdCBiZWZvcmUgdXNpbmcgaXQuICovCiYjNDM7c3RhdGljIGJvb2wgX19pbml0CiYjNDM7ZWZpX3BvaXNvbl90YWJsZV92YWxpZChjb25zdCBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0pCiYjNDM7ewomIzQzOwlpZiAocG0tJmd0O3ZlcnNpb24gIT0gMSkgewomIzQzOwkJcHJfd2FybigmIzM0O0lnbm9yaW5nIHBvaXNvbmVkLW1lbW9yeSB0YWJsZSB3aXRoIHZlcnNpb24gJXVcbiYjMzQ7LAomIzQzOwkJCXBtLSZndDt2ZXJzaW9uKTsKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWVmaV9wb2lzb25fZ2VvbWV0cnlfdmFsaWQocG0pKSB7CiYjNDM7CQlwcl93YXJuKCYjMzQ7SWdub3JpbmcgbWFsZm9ybWVkIHBvaXNvbmVkLW1lbW9yeSB0YWJsZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFZldCB0aGUgaW5oZXJpdGVkIHRhYmxlIGFuZCBoYW5kIGl0cyBwYWdlcyB0byBtZW1ibG9jaywgdGhlIHdheSB0aGUKJiM0MzsgKiB1bmFjY2VwdGVkIG1lbW9yeSB0YWJsZSBpcyBoYW5kbGVkLiBJdCBpcyBFRkkgQUNQSSByZWNsYWltIG1lbW9yeSwgd2hpY2gKJiM0MzsgKiBiZWNvbWVzIEU4MjBfVFlQRV9BQ1BJIGFuZCB3b3VsZCBvdGhlcndpc2Ugc3RheSBvdXQgb2YgdGhlIGRpcmVjdCBtYXAsIGFuZAomIzQzOyAqIHRvdWNoaW5nIGl0IHRoZW4gZmF1bHRzLiBDYWxsZWQgZnJvbSBlZmlfY29uZmlnX3BhcnNlX3RhYmxlcygpLCBzbwomIzQzOyAqIGV2ZXJ5dGhpbmcgbGF0ZXIgY2FuIHJlYWNoIGl0IHdpdGggZWZpX3BvaXNvbmVkX21lbW9yeSgpLgomIzQzOyAqLwomIzQzO3ZvaWQgX19pbml0IGVmaV9wb2lzb25lZF9tZW1vcnlfcmVzZXJ2ZSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtOwomIzQzOwlwaHlzX2FkZHJfdCBzdGFydCwgZW5kOwomIzQzOwomIzQzOwlpZiAoZWZpLnBvaXNvbmVkX21lbW9yeSA9PSBFRklfSU5WQUxJRF9UQUJMRV9BRERSKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlwbSA9IGVhcmx5X21lbXJlbWFwKGVmaS5wb2lzb25lZF9tZW1vcnksIHNpemVvZigqcG0pKTsKJiM0MzsJaWYgKCFwbSkgewomIzQzOwkJcHJfd2FybigmIzM0O0NvdWxkIG5vdCBtYXAgcG9pc29uZWQtbWVtb3J5IHRhYmxlXG4mIzM0Oyk7CiYjNDM7CQllZmkucG9pc29uZWRfbWVtb3J5ID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUjsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWVmaV9wb2lzb25fdGFibGVfdmFsaWQocG0pKSB7CiYjNDM7CQllZmkucG9pc29uZWRfbWVtb3J5ID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUjsKJiM0MzsJCWVhcmx5X21lbXVubWFwKHBtLCBzaXplb2YoKnBtKSk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3RhcnQgPSBQQUdFX0FMSUdOX0RPV04oZWZpLnBvaXNvbmVkX21lbW9yeSk7CiYjNDM7CWVuZCA9IFBBR0VfQUxJR04oZWZpLnBvaXNvbmVkX21lbW9yeSAmIzQzOyBzaXplb2YoKnBtKSAmIzQzOyBwbS0mZ3Q7c2l6ZSk7CiYjNDM7CWVhcmx5X21lbXVubWFwKHBtLCBzaXplb2YoKnBtKSk7CiYjNDM7CiYjNDM7CW1lbWJsb2NrX2FkZChzdGFydCwgZW5kIC0gc3RhcnQpOwomIzQzOwltZW1ibG9ja19yZXNlcnZlKHN0YXJ0LCBlbmQgLSBzdGFydCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFRoZSB0YWJsZSwgdmV0dGVkIGF0IHBhcnNlIHRpbWUsIG9yIE5VTEwgaWYgdGhpcyBib290IGhhcyBub25lLiAqLwomIzQzO3N0YXRpYyBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqZWZpX3BvaXNvbmVkX21lbW9yeSh2b2lkKQomIzQzO3sKJiM0MzsJaWYgKGVmaS5wb2lzb25lZF9tZW1vcnkgPT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUikKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlyZXR1cm4gcGh5c190b192aXJ0KGVmaS5wb2lzb25lZF9tZW1vcnkpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBEb2VzIHRoZSByYW5nZSBjb3ZlciBhIHVuaXQgYW4gZWFybGllciBrZXJuZWwgcmVjb3JkZWQgYXMgYmFkPyAqLwomIzQzO2Jvb2wgcmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5KHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0gPSBlZmlfcG9pc29uZWRfbWVtb3J5KCk7CiYjNDM7CXU2NCBmaXJzdCwgbGFzdCwgbmJpdHM7CiYjNDM7CiYjNDM7CWlmICghcG0pCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CW5iaXRzID0gcG0tJmd0O3NpemUgKiBCSVRTX1BFUl9CWVRFOwomIzQzOwomIzQzOwlpZiAoc3RhcnQgJiM0Mzsgc2l6ZSAmbHQ7PSBwbS0mZ3Q7cGh5c19iYXNlKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwlpZiAoc3RhcnQgJmx0OyBwbS0mZ3Q7cGh5c19iYXNlKQomIzQzOwkJc3RhcnQgPSBwbS0mZ3Q7cGh5c19iYXNlOwomIzQzOwomIzQzOwlmaXJzdCA9IChzdGFydCAtIHBtLSZndDtwaHlzX2Jhc2UpIC8gcG0tJmd0O3VuaXRfc2l6ZTsKJiM0MzsJaWYgKGZpcnN0ICZndDs9IG5iaXRzKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlsYXN0ID0gKHN0YXJ0ICYjNDM7IHNpemUgLSAxIC0gcG0tJmd0O3BoeXNfYmFzZSkgLyBwbS0mZ3Q7dW5pdF9zaXplOwomIzQzOwlsYXN0ID0gbWluKGxhc3QsIG5iaXRzIC0gMSk7CiYjNDM7CiYjNDM7CXJldHVybiBmaW5kX25leHRfYml0KHBtLSZndDtiaXRtYXAsIGxhc3QgJiM0MzsgMSwgZmlyc3QpICZsdDs9IGxhc3Q7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQSBiaXQgaXMgbmV2ZXIgY2xlYXJlZDogaXQgc3RhbmRzIGZvciBhIHdob2xlIEVGSV9QT0lTT05fVU5JVF9TSVpFLCBzbyBhbgomIzQzOyAqIHVucG9pc29uIGNhbm5vdCB0ZWxsIHdoZXRoZXIgdGhlIHVuaXQgYXMgYSB3aG9sZSBpcyBnb29kIGFnYWluLgomIzQzOyAqLwomIzQzO3ZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0gPSBlZmlfcG9pc29uZWRfbWVtb3J5KCk7CiYjNDM7CXBoeXNfYWRkcl90IGFkZHIgPSBQRk5fUEhZUyhwZm4pOwomIzQzOwl1NjQgdW5pdDsKJiM0MzsKJiM0MzsJaWYgKCFwbSB8fCBhZGRyICZsdDsgcG0tJmd0O3BoeXNfYmFzZSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJdW5pdCA9IChhZGRyIC0gcG0tJmd0O3BoeXNfYmFzZSkgLyBwbS0mZ3Q7dW5pdF9zaXplOwomIzQzOwlpZiAodW5pdCAmbHQ7IHBtLSZndDtzaXplICogQklUU19QRVJfQllURSkKJiM0MzsJCXNldF9iaXQodW5pdCwgcG0tJmd0O2JpdG1hcCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lZmkuaCBiL2luY2x1ZGUvbGludXgvZWZpLmgKaW5kZXggYzM1NDQ2YTBiNjZmYS4uNTY0MDJmZGNjZDExNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9lZmkuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2VmaS5oCkBAIC0yMyw2ICYjNDM7MjMsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3BzdG9yZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JhbmdlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmVib290LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NpemVzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdXVpZC5oJmd0OwogCiAjaW5jbHVkZSAmbHQ7YXNtL3BhZ2UuaCZndDsKQEAgLTQyMiw2ICYjNDM7NDIzLDcgQEAgdm9pZCBlZmlfbmF0aXZlX3J1bnRpbWVfc2V0dXAodm9pZCk7CiAjZGVmaW5lIExJTlVYX0VGSV9DT0NPX1NFQ1JFVF9BUkVBX0dVSUQJCUVGSV9HVUlEKDB4YWRmOTU2YWQsIDB4ZTk4YywgMHg0ODRjLCAgMHhhZSwgMHgxMSwgMHhiNSwgMHgxYywgMHg3ZCwgMHgzMywgMHg2NCwgMHg0NykKICNkZWZpbmUgTElOVVhfRUZJX0JPT1RfTUVNTUFQX0dVSUQJCUVGSV9HVUlEKDB4ODAwZjY4M2YsIDB4ZDA4YiwgMHg0MjNhLCAgMHhhMiwgMHg5MywgMHg5NiwgMHg1YywgMHgzYywgMHg2ZiwgMHhlMiwgMHhiNCkKICNkZWZpbmUgTElOVVhfRUZJX1VOQUNDRVBURURfTUVNX1RBQkxFX0dVSUQJRUZJX0dVSUQoMHhkNWQxZGUzYywgMHgxMDVjLCAweDQ0ZjksICAweDllLCAweGE5LCAweGJjLCAweGVmLCAweDk4LCAweDEyLCAweDAwLCAweDMxKQomIzQzOyNkZWZpbmUgTElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWV9UQUJMRV9HVUlECUVGSV9HVUlEKDB4YWY4MjhhMTUsIDB4MGVmNCwgMHg0MzlhLCAgMHhiOCwgMHg2YSwgMHhkNiwgMHhkNiwgMHg5ZSwgMHhhZiwgMHhiYSwgMHhmYSkKIAogI2RlZmluZSBSSVNDVl9FRklfQk9PVF9QUk9UT0NPTF9HVUlECQlFRklfR1VJRCgweGNjZDE1ZmVjLCAweDZmNzMsIDB4NGVlYywgIDB4ODMsIDB4OTUsIDB4M2UsIDB4NjksIDB4ZTQsIDB4YjksIDB4NDAsIDB4YmYpCiAKQEAgLTY1MCw2ICYjNDM7NjUyLDcgQEAgZXh0ZXJuIHN0cnVjdCBlZmkgewogCXVuc2lnbmVkIGxvbmcJCQltb2t2YXJfdGFibGU7CQkvKiBNT0sgdmFyaWFibGUgY29uZmlnIHRhYmxlICovCiAJdW5zaWduZWQgbG9uZwkJCWNvY29fc2VjcmV0OwkJLyogQ29uZmlkZW50aWFsIGNvbXB1dGluZyBzZWNyZXQgdGFibGUgKi8KIAl1bnNpZ25lZCBsb25nCQkJdW5hY2NlcHRlZDsJCS8qIFVuYWNjZXB0ZWQgbWVtb3J5IHRhYmxlICovCiYjNDM7CXVuc2lnbmVkIGxvbmcJCQlwb2lzb25lZF9tZW1vcnk7CS8qIEhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSB0YWJsZSAqLwogCiAJZWZpX2dldF90aW1lX3QJCQkqZ2V0X3RpbWU7CiAJZWZpX3NldF90aW1lX3QJCQkqc2V0X3RpbWU7CkBAIC0xMjcyLDYgJiM0MzsxMjc1LDI1IEBAIHN0cnVjdCBsaW51eF9lZmlfbWVtcmVzZXJ2ZSB7CiAjZGVmaW5lIEVGSV9NRU1SRVNFUlZFX0NPVU5UKHNpemUpICgoKHNpemUpIC0gc2l6ZW9mKHN0cnVjdCBsaW51eF9lZmlfbWVtcmVzZXJ2ZSkpIFwKIAkvIHNpemVvZl9maWVsZChzdHJ1Y3QgbGludXhfZWZpX21lbXJlc2VydmUsIGVudHJ5WzBdKSkKIAomIzQzOy8qIEJpdCBOIGNvdmVycyB0aGUgdW5pdCBhdCBAcGh5c19iYXNlICYjNDM7IE4gKiBAdW5pdF9zaXplLiAqLwomIzQzO3N0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5IHsKJiM0MzsJdTMyCQl2ZXJzaW9uOwomIzQzOwl1MzIJCXVuaXRfc2l6ZTsJLyogYnl0ZXMgb2YgcGh5cyBzcGFjZSBwZXIgYml0bWFwIGJpdCAqLwomIzQzOwl1NjQJCXBoeXNfYmFzZTsJLyogYWRkcmVzcyB0aGUgZmlyc3QgYml0IGNvdmVycyAqLwomIzQzOwl1NjQJCXNpemU7CQkvKiBiaXRtYXAgc2l6ZSBpbiBieXRlcyAqLwomIzQzOwl1bnNpZ25lZCBsb25nCWJpdG1hcFtdOwomIzQzO307CiYjNDM7CiYjNDM7I2RlZmluZSBFRklfUE9JU09OX1VOSVRfU0laRQlTWl8yTQomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWQomIzQzO3ZvaWQgX19pbml0IGVmaV9wb2lzb25lZF9tZW1vcnlfcmVzZXJ2ZSh2b2lkKTsKJiM0Mzt2b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBlZmlfcG9pc29uZWRfbWVtb3J5X3Jlc2VydmUodm9pZCkgeyB9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKSB7IH0KJiM0MzsjZW5kaWYKJiM0MzsKIHZvaWQgX19pbml0IGVmaV9hcmNoX21lbV9yZXNlcnZlKHBoeXNfYWRkcl90IGFkZHIsIHU2NCBzaXplKTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCAyNzRmYTg4MDA3N2M1Li45ZDlmMmU4ZmRjMTM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC01MjI1LDYgJiM0Mzs1MjI1LDcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbWVtb3J5X2ZhaWx1cmVfYXR0cl9ncm91cDsKIGV4dGVybiB2b2lkIG1lbW9yeV9mYWlsdXJlX3F1ZXVlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpOwogdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfaW5jKHVuc2lnbmVkIGxvbmcgcGZuKTsKIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX3N1Yih1bnNpZ25lZCBsb25nIHBmbiwgbG9uZyBpKTsKJiM0Mzt2b2lkIF9fbWVtaW5pdCBod3BvaXNvbl9ib290X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpOwogcGh5c19hZGRyX3QgcmFuZ2VfZmlyc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiBwaHlzX2FkZHJfdCByYW5nZV9sYXN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpOwogI2Vsc2UKQEAgLTUyMzIsNiAmIzQzOzUyMzMsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbW9yeV9mYWlsdXJlX3F1ZXVlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpCiB7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaHdwb2lzb25fYm9vdF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQomIzQzO3sKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX2luYyh1bnNpZ25lZCBsb25nIHBmbikKIHsKIH0KQEAgLTUzODcsNiAmIzQzOzUzOTIsMjAgQEAgc3RhdGljIGlubGluZSBib29sIHBmbl9pc191bmFjY2VwdGVkX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbikKIAlyZXR1cm4gcmFuZ2VfY29udGFpbnNfdW5hY2NlcHRlZF9tZW1vcnkocGZuICZsdDsmbHQ7IFBBR0VfU0hJRlQsIFBBR0VfU0laRSk7CiB9CiAKJiM0MzsjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUlkKJiM0MzsKJiM0Mztib29sIHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeShwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKTsKJiM0MzsKJiM0MzsjZWxzZQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCByYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnkocGh5c19hZGRyX3Qgc3RhcnQsCiYjNDM7CQkJCQkJICB1bnNpZ25lZCBsb25nIHNpemUpCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzOyNlbmRpZgomIzQzOwogdm9pZCB2bWFfcGd0YWJsZV93YWxrX2JlZ2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKIHZvaWQgdm1hX3BndGFibGVfd2Fsa19lbmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwogCmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuYwppbmRleCBhMmNhOGRmNTAxY2FlLi5mNmFmZGIyYTg5YTk0IDEwMDY0NAotLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS1mYWlsdXJlLmMKQEAgLTQzLDYgJiM0Mzs0Myw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvc2lnbmFsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvdGFzay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2RheC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9lZmkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rc20uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ybWFwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXhwb3J0LmgmZ3Q7CkBAIC0xMzYsNiAmIzQzOzEzNywyMSBAQCBwaHlzX2FkZHJfdCByYW5nZV9sYXN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpCiAJcmV0dXJuIHJhbmdlX2h3cG9pc29uKHN0YXJ0LCBzaXplLCBmYWxzZSk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCB1cGRhdGVfcGVyX25vZGVfbWZfc3RhdHModW5zaWduZWQgbG9uZyBwZm4sIGVudW0gbWZfcmVzdWx0IHJlc3VsdCk7CiYjNDM7CiYjNDM7LyogTm90IG51bV9wb2lzb25lZF9wYWdlc19pbmMoKTogaXRzIHBlciBibG9jayBoYWxmIGRpdmlkZXMgYnkgemVybyB0aGlzIGVhcmx5LiAqLwomIzQzO3ZvaWQgX19tZW1pbml0IGh3cG9pc29uX2Jvb3RfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKJiM0Mzt7CiYjNDM7CWlmIChQYWdlSFdQb2lzb24ocGFnZSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CVNldFBhZ2VIV1BvaXNvbihwYWdlKTsKJiM0MzsJc2V0X3BhZ2VfY291bnQocGFnZSwgMSk7CiYjNDM7CS8qIFRoZSBwYWdlIGhhcyBiZWVuIGNvbXBsZXRlbHkgaXNvbGF0ZWQgPT0gTUZfUkVDT1ZFUkVEICovCiYjNDM7CXVwZGF0ZV9wZXJfbm9kZV9tZl9zdGF0cyhwYWdlX3RvX3BmbihwYWdlKSwgTUZfUkVDT1ZFUkVEKTsKJiM0MzsJYXRvbWljX2xvbmdfaW5jKCZhbXA7bnVtX3BvaXNvbmVkX3BhZ2VzKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIE1GX0FUVFJfUk8gLSBDcmVhdGUgc3lzZnMgZW50cnkgZm9yIGVhY2ggbWVtb3J5IGZhaWx1cmUgc3RhdGlzdGljcy4KICAqIEBfbmFtZTogbmFtZSBvZiB0aGUgZmlsZSBpbiB0aGUgcGVyIE5VTUEgc3lzZnMgZGlyZWN0b3J5LgpAQCAtMTMyNiw2ICYjNDM7MTM0Miw4IEBAIHN0YXRpYyBpbnQgYWN0aW9uX3Jlc3VsdCh1bnNpZ25lZCBsb25nIHBmbiwgZW51bSBtZl9hY3Rpb25fcGFnZV90eXBlIHR5cGUsCiAJaWYgKHR5cGUgIT0gTUZfTVNHX0FMUkVBRFlfUE9JU09ORUQgJmFtcDsmYW1wOyB0eXBlICE9IE1GX01TR19QRk5fTUFQKSB7CiAJCW51bV9wb2lzb25lZF9wYWdlc19pbmMocGZuKTsKIAkJdXBkYXRlX3Blcl9ub2RlX21mX3N0YXRzKHBmbiwgcmVzdWx0KTsKJiM0MzsJCS8qIE9ubHkgaGFyZCBvZmZsaW5lcyBhcmUgY2FycmllZCBvdmVyIHRvIHRoZSBuZXh0IGtlcm5lbC4gKi8KJiM0MzsJCWVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHBmbik7CiAJfQogCiAJcHJfZXJyKCYjMzQ7JSNseDogcmVjb3ZlcnkgYWN0aW9uIGZvciAlczogJXNcbiYjMzQ7LApkaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jCmluZGV4IDQwNDg5NmI1MzAwM2UuLjllMmNlODMzZmQ0MDkgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTE1NzksNiAmIzQzOzE1NzksMTkgQEAgc3RhdGljIHZvaWQgX19mcmVlX3BhZ2VzX29rKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsCiAJCWZyZWVfb25lX3BhZ2Uoem9uZSwgcGFnZSwgcGZuLCBvcmRlciwgZnBpX2ZsYWdzKTsKIH0KIAomIzQzOy8qIEZsYWcgdGhlIGZyYW1lcyBhbiBlYXJsaWVyIGtlcm5lbCByZWNvcmRlZCBhcyBiYWQuICovCiYjNDM7c3RhdGljIHZvaWQgX19tZW1pbml0IHBvaXNvbl9ibG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBpLCBucl9wYWdlcyA9IDFVTCAmbHQ7Jmx0OyBvcmRlcjsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3BhZ2VzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IHBhZ2UgKnAgPSBwYWdlICYjNDM7IGk7CiYjNDM7CiYjNDM7CQlpZiAocmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5KHBhZ2VfdG9fcGh5cyhwKSwgUEFHRV9TSVpFKSkKJiM0MzsJCQlod3BvaXNvbl9ib290X3BhZ2UocCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiB2b2lkIF9fbWVtaW5pdCBfX2ZyZWVfcGFnZXNfY29yZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLAogCQllbnVtIG1lbWluaXRfY29udGV4dCBjb250ZXh0KQogewpAQCAtMTYxMyw2ICYjNDM7MTYyNiwxOCBAQCB2b2lkIF9fbWVtaW5pdCBfX2ZyZWVfcGFnZXNfY29yZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLAogCQlhdG9taWNfbG9uZ19hZGQobnJfcGFnZXMsICZhbXA7cGFnZV96b25lKHBhZ2UpLSZndDttYW5hZ2VkX3BhZ2VzKTsKIAl9CiAKJiM0MzsJLyogRmlyc3Q6IGEgYmxvY2sgcGFya2VkIGJ5IF9fZnJlZV91bmFjY2VwdGVkKCkgbmV2ZXIgcmV0dXJucyBoZXJlLiAqLwomIzQzOwlpZiAocmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5KHBhZ2VfdG9fcGh5cyhwYWdlKSwKJiM0MzsJCQkJCSAgIFBBR0VfU0laRSAmbHQ7Jmx0OyBvcmRlcikpIHsKJiM0MzsJCXBvaXNvbl9ibG9jayhwYWdlLCBvcmRlcik7CiYjNDM7CQkvKgomIzQzOwkJICogVE9ETzogZnJlZSB0aGUgZnJhbWVzIGluIHRoZSBibG9jayB0aGF0IGFyZSBub3QgcG9pc29uZWQuCiYjNDM7CQkgKiBUaGV5IHN0YXkgb3V0IG9mIHRoZSBhbGxvY2F0b3IgYW5kIHN0aWxsIGNvdW50IGluCiYjNDM7CQkgKiBtYW5hZ2VkX3BhZ2VzLCBzbyBhIHVuaXQgY29zdHMgdXAgdG8gYSBibG9jay4KJiM0MzsJCSAqLwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiAJaWYgKHBhZ2VfY29udGFpbnNfdW5hY2NlcHRlZChwYWdlLCBvcmRlcikpIHsKIAkJaWYgKG9yZGVyID09IE1BWF9QQUdFX09SREVSICZhbXA7JmFtcDsgX19mcmVlX3VuYWNjZXB0ZWQocGFnZSkpCiAJCQlyZXR1cm47CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE0OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTk5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2ggU2VyaWVzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBzZXJpZXMuIE15IGluaXRpYWwgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gdGhlIHRyaWFnZSBwcm9jZXNzLCBtYWtpbmcgc3VyZSB3ZSBoYXZlIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQmIzM5O3MgYmVpbmcgZXZhbHVhdGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBwcmluY2lwbGVzLCBhbmQgaXQgc2VlbXMgcmVhY2hhYmlsaXR5IGlzIHRoZSBwcmltYXJ5IGNvbmNlcm4g4oCTIGNhbiB0aGUgbW9kaWZpZWQgY29kZSBhY3R1YWxseSBleGVjdXRlIGluIGEgdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciBRRU1VPyBUaGF0JiMzOTtzIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludC4KCk5leHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGV4dGVudCBvZiB0aGUgY2hhbmdlcy4gVGhlIGZpbGVzIG1vZGlmaWVkIGFyZTogYGFyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmkuY2AsIGBkcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnYCwgYGRyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlYCwgYGRyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jYCwgYGRyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmNgLCBgZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jYCwgYGRyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oYCwgYGRyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuY2AsIGBkcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uY2AsIGBpbmNsdWRlL2xpbnV4L2VmaS5oYCwgYGluY2x1ZGUvbGludXgvbW0uaGAsIGBtbS9tZW1vcnktZmFpbHVyZS5jYCwgYW5kIGBtbS9wYWdlX2FsbG9jLmNgLiBUaGF0JiMzOTtzIGEgZmFpcmx5IGV4dGVuc2l2ZSB0b3VjaCwgbW9zdGx5IGNvbmNlbnRyYXRlZCBhcm91bmQgRUZJIGFuZCBtZW1vcnkgbWFuYWdlbWVudC4KCk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiB3aGF0IHBhcnRzIG9mIHRoaXMgY29kZSBhcmUgYWN0aXZlIGR1cmluZyBydW50aW1lIHZlcnN1cyBib290IHRpbWU/IEFuZCB3aGF0IHN5c2NhbGxzIG9yIGludGVyZmFjZXMgY2FuICpyZWFjaCogdGhpcyBjb2RlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXR0YWNrIHN1cmZhY2UuCgpTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBsb29rIGF0IGBlZmlfaHdwb2lzb25fcmVjb3JkX3BmbihwZm4pYC4gSSBzZWUgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGFjdGlvbl9yZXN1bHQoKWAgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgLiBUaGF0IG1lYW5zIEkgaGF2ZSB0byB0cmFjZSBob3cgYG1tL21lbW9yeS1mYWlsdXJlLmNgIGdldHMgdHJpZ2dlcmVkIGF0IHJ1bnRpbWUuIEkgbmVlZCB0byB2ZXJpZnkgaG93IGBtZW1vcnlfZmFpbHVyZWAgb3IgYGFjdGlvbl9yZXN1bHRgIGFyZSBjYWxsZWQgb3IgZXhwb3NlZC4gQ2FuIGEgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIGNhbGwsIG9yIG1heWJlIHNvbWV0aGluZyB0aHJvdWdoIGRlYnVnZnMgb3Igc3lzZnMsIHRyaWdnZXIgdGhpcyBjb2RlIHBhdGg/IEdyZXAgaXMgZ29pbmcgdG8gYmUgbXkgZnJpZW5kIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTQ6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWN0aW9uX3Jlc3VsdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbW9yeS1mYWlsdXJlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LWZhaWx1cmUuYz0xMzI0PXN0YXRpYyBib29sIHBhbmljX29uX3VucmVjb3ZlcmFibGVfbWYoZW51bSBtZl9hY3Rpb25fcGFnZV90eXBlIHR5cGUsXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMzM2LSAqL1xubW0vbWVtb3J5LWZhaWx1cmUuYzoxMzM3OnN0YXRpYyBpbnQgYWN0aW9uX3Jlc3VsdCh1bnNpZ25lZCBsb25nIHBmbiwgZW51bSBtZl9hY3Rpb25fcGFnZV90eXBlIHR5cGUsXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEzMzgtXHRcdFx0IGVudW0gbWZfcmVzdWx0IHJlc3VsdClcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTEzNTg9c3RhdGljIGludCBwYWdlX2FjdGlvbihzdHJ1Y3QgcGFnZV9zdGF0ZSAqcHMsIHN0cnVjdCBwYWdlICpwLFxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMTM3MC1cbm1tL21lbW9yeS1mYWlsdXJlLmM6MTM3MTpcdHJldHVybiBhY3Rpb25fcmVzdWx0KHBmbiwgcHMtXHUwMDNldHlwZSwgcmVzdWx0KTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTM3Mi19XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMTM5PXN0YXRpYyBpbnQgdHJ5X21lbW9yeV9mYWlsdXJlX2h1Z2V0bGIodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIxNTYtXHRcdH1cbm1tL21lbW9yeS1mYWlsdXJlLmM6MjE1NzpcdFx0cmV0dXJuIGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfR0VUX0hXUE9JU09OLCBNRl9JR05PUkVEKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjE1OC1cdGNhc2UgTUZfSFVHRVRMQl9GT0xJT19QUkVfUE9JU09ORUQ6XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTYzLVx0XHRpZiAocmVzID09IE1GX0hVR0VUTEJfUEFHRV9QUkVfUE9JU09ORUQpXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIxNjQ6XHRcdFx0YWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19BTFJFQURZX1BPSVNPTkVELCBNRl9GQUlMRUQpO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTY1LVx0XHRlbHNlXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIxNjY6XHRcdFx0YWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19IVUdFLCBNRl9GQUlMRUQpO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTY3LVx0XHRyZXR1cm4gcnY7XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTk3LVx0XHR9XG5tbS9tZW1vcnktZmFpbHVyZS5jOjIxOTg6XHRcdHJldHVybiBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0ZSRUVfSFVHRSwgcmVzKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjE5OS1cdH1cbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIyMDQtXHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG5tbS9tZW1vcnktZmFpbHVyZS5jOjIyMDU6XHRcdHJldHVybiBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX1VOTUFQX0ZBSUxFRCwgTUZfRkFJTEVEKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjIwNi1cdH1cbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTIyMzI9c3RhdGljIGludCBtZW1vcnlfZmFpbHVyZV9kZXZfcGFnZW1hcCh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzLFxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjI1OS1cdGlmIChyYyAhPSAtRU9QTk9UU1VQUClcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjI2MDpcdFx0YWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19EQVgsIHJjID8gTUZfRkFJTEVEIDogTUZfUkVDT1ZFUkVEKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjI2MS1cdHJldHVybiByYztcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTIzNzg9c3RhdGljIGludCBtZW1vcnlfZmFpbHVyZV9wZm4odW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0MDItXHRcdGlmICghbWZfaGFuZGxlZClcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjQwMzpcdFx0XHRyZXR1cm4gYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19QRk5fTUFQLCBNRl9JR05PUkVEKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQwNC1cdH1cbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0MTUtXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI0MTY6XHRyZXR1cm4gYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19QRk5fTUFQLCBNRl9SRUNPVkVSRUQpO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0yNDE3LX1cbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTI0NDQ9aW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNTAyLVx0XHRcdHB1dF9wYWdlKHApO1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyNTAzOlx0XHRhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0FMUkVBRFlfUE9JU09ORUQsIE1GX0ZBSUxFRCk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI1MDQtXHRcdGdvdG8gdW5sb2NrX211dGV4O1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjUzMy1cdFx0XHR9XG5tbS9tZW1vcnktZmFpbHVyZS5jOjI1MzQ6XHRcdFx0cmVzID0gYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19CVUREWSwgcmVzKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjUzNS1cdFx0fSBlbHNlIHtcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjUzNjpcdFx0XHRyZXMgPSBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0tFUk5FTF9ISUdIX09SREVSLCBNRl9JR05PUkVEKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjUzNy1cdFx0fVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjU0Ny1cdFx0ICovXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI1NDg6XHRcdHJlcyA9IGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfS0VSTkVMLCBNRl9JR05PUkVEKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjU0OS1cdFx0Z290byB1bmxvY2tfbXV0ZXg7XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNTUxLVx0XHQvKiBUcmFuc2llbnQgbGlmZWN5Y2xlIHJhY2Ugd2l0aCB0aGUgcGFnZSBhbGxvY2F0b3IuICovXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI1NTI6XHRcdHJlcyA9IGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfR0VUX0hXUE9JU09OLCBNRl9JR05PUkVEKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjU1My1cdFx0Z290byB1bmxvY2tfbXV0ZXg7XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNTk5LVx0XHRcdHB1dF9wYWdlKHApO1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjAwOlx0XHRcdGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfVU5TUExJVF9USFAsIE1GX0ZBSUxFRCk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2MDEtXHRcdFx0Z290byB1bmxvY2tfbXV0ZXg7XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjUzLVx0aWYgKCFod3BvaXNvbl91c2VyX21hcHBpbmdzKGZvbGlvLCBwLCBwZm4sIGZsYWdzKSkge1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjU0Olx0XHRyZXMgPSBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX1VOTUFQX0ZBSUxFRCwgTUZfRkFJTEVEKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjY1NS1cdFx0Z290byB1bmxvY2tfcGFnZTtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2NjItXHQgICAgZm9saW8tXHUwMDNlbWFwcGluZyA9PSBOVUxMKSB7XG5tbS9tZW1vcnktZmFpbHVyZS5jOjI2NjM6XHRcdHJlcyA9IGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfVFJVTkNBVEVEX0xSVSwgTUZfSUdOT1JFRCk7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2NjQtXHRcdGdvdG8gdW5sb2NrX3BhZ2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTQ6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2NTYKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqRGl2aW5nIGludG8gdGhlIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCBSYWJiaXQgSG9sZSoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCBhbmQgaG93IGl0IHdvcmtzIHVuZGVyIHRoZSBob29kLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCB0aGF0IGNhbGwgc2VlbXMgdG8gbGVhZCB0byBgbWFkdmlzZV9pbmplY3RfZXJyb3IoKWAsIHdoaWNoIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgdGhhdCBkaXJlY3RseSBjYWxscyBgbWVtb3J5X2ZhaWx1cmUoKWAuJiMzNDsgSW50ZXJlc3RpbmcsIHNvIGBtYWR2aXNlYCBpcyB1c2luZyB0aGUgc2FtZSBpbmZyYXN0cnVjdHVyZSBhcyBvdGhlciBtZW1vcnkgZXJyb3IgaW5qZWN0aW9uIG1lY2hhbmlzbXMuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgaW5qZWN0aW9uIGlzLiBMZXQmIzM5O3Mgc2VlIGhvdyBgbWFkdmlzZWAgYWN0dWFsbHkgY2FsbHMgdGhpcyBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIGZ1bmN0aW9uLiBJIHdpbGwgbmVlZCB0byBsb29rIGRlZXBlciBpbnRvIGBtYWR2aXNlYCB0byBzZWUgd2hlcmUgYE1BRFZfSFdQT0lTT05gIGlzIGhhbmRsZWQgYW5kIGhvdyBpdCBkZWNpZGVzIHRvIGluamVjdCBhbiBlcnJvci4gQWx0ZXJuYXRpdmVseSwgcGVyaGFwcyBpdCYjMzk7cyBtb3JlIGRpcmVjdCBhbmQgSSBzaG91bGQgbG9vayBhdCBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIGFuZCBzZWUgd2hlcmUgaXQmIzM5O3MgYmVpbmcgY2FsbGVkLCB3aGljaCBtaWdodCBnaXZlIG1lIG1vcmUgY29udGV4dC4gQm90aCBhcHByb2FjaGVzIGFyZSB2YWxpZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtNQURWX0hXUE9JU09OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYz0xNTA0PXN0YXRpYyBib29sIGlzX21lbW9yeV9mYWlsdXJlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNTA2LVx0c3dpdGNoIChtYWR2X2JlaGF2aW9yLVx1MDAzZWJlaGF2aW9yKSB7XG5tbS9tYWR2aXNlLmM6MTUwNzpcdGNhc2UgTUFEVl9IV1BPSVNPTjpcbm1tL21hZHZpc2UuYy0xNTA4LVx0Y2FzZSBNQURWX1NPRlRfT0ZGTElORTpcbi0tXG5tbS9tYWR2aXNlLmM9MTUzMD1tYWR2aXNlX2JlaGF2aW9yX3ZhbGlkKGludCBiZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTU2My1cdGNhc2UgTUFEVl9TT0ZUX09GRkxJTkU6XG5tbS9tYWR2aXNlLmM6MTU2NDpcdGNhc2UgTUFEVl9IV1BPSVNPTjpcbm1tL21hZHZpc2UuYy0xNTY1LSNlbmRpZlxuLS1cbm1tL21hZHZpc2UuYz0xODk5PXN0YXRpYyBpbnQgbWFkdmlzZV9kb19iZWhhdmlvcih1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuX2luLFxuLS1cbm1tL21hZHZpc2UuYy0xOTU1LSAqICBNQURWX0tFRVBPTkZPUksgLSB1bmRvIHRoZSBlZmZlY3Qgb2YgTUFEVl9XSVBFT05GT1JLXG5tbS9tYWR2aXNlLmM6MTk1NjogKiAgTUFEVl9IV1BPSVNPTiAtIHRyaWdnZXIgbWVtb3J5IGVycm9yIGhhbmRsZXIgYXMgaWYgdGhlIGdpdmVuIG1lbW9yeSByYW5nZVxubW0vbWFkdmlzZS5jLTE5NTctICpcdFx0d2VyZSBjb3JydXB0ZWQgYnkgdW5yZWNvdmVyYWJsZSBoYXJkd2FyZSBtZW1vcnkgZmFpbHVyZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzMxNAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgTWVtb3J5IFBvaXNvbmluZyBpbiB0aGUgS2VybmVsKioKCk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSB1c2FnZSBvZiBgcmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5KClgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgdHdvIGxpa2VseSBsb2NhdGlvbnM6IGBtbS9wYWdlX2FsbG9jLmNgIGFuZCBgZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmNgLiBUaG9zZSBzZWVtIGxpa2UgdGhlIG1vc3QgcmVsZXZhbnQgc3BvdHMgZ2l2ZW4gdGhlIGZ1bmN0aW9uJiMzOTtzIG5hbWUgYW5kIGdlbmVyYWwgbWVtb3J5IG1hbmFnZW1lbnQgY29uY2VwdHMuCgpCdXQsIEkgbmVlZCB0byBrbm93ICp3aGVyZSogaXQmIzM5O3MgYWN0dWFsbHkgYmVpbmcgY2FsbGVkLiBObyBzZW5zZSBpbiBqdXN0IHN0YXJpbmcgYXQgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24uIFNvLCBsZXQmIzM5O3MgZmlyZSB1cCBgZ3JlcHBlcmAuIFRoYXQgc2hvdWxkIHF1aWNrbHkgdW5jb3ZlciBhbGwgdGhlIGNhbGwgc2l0ZXMgYWNyb3NzIHRoZSBjb2RlYmFzZS4gV2l0aCBgZ3JlcHBlcmAsIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSBsaXN0IG9mIGV2ZXJ5IHBsYWNlIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBhbmQgdGhlbiBuYXJyb3cgaXQgZG93biBiYXNlZCBvbiB0aGUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmM9OTE9c3RhdGljIHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICplZmlfcG9pc29uZWRfbWVtb3J5KHZvaWQpXG4tLVxuZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmMtOTktLyogRG9lcyB0aGUgcmFuZ2UgY292ZXIgYSB1bml0IGFuIGVhcmxpZXIga2VybmVsIHJlY29yZGVkIGFzIGJhZD8gKi9cbmRyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jOjEwMDpib29sIHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeShwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKVxuZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmMtMTAxLXtcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmg9NTM5MD1zdGF0aWMgaW5saW5lIGJvb2wgcGZuX2lzX3VuYWNjZXB0ZWRfbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxuLS1cbmluY2x1ZGUvbGludXgvbW0uaC01Mzk2LVxuaW5jbHVkZS9saW51eC9tbS5oOjUzOTc6Ym9vbCByYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnkocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7XG5pbmNsdWRlL2xpbnV4L21tLmgtNTM5OC1cbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtNTQwMC1cbmluY2x1ZGUvbGludXgvbW0uaDo1NDAxOnN0YXRpYyBpbmxpbmUgYm9vbCByYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnkocGh5c19hZGRyX3Qgc3RhcnQsXG5pbmNsdWRlL2xpbnV4L21tLmgtNTQwMi1cdFx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbi0tXG5tbS9wYWdlX2FsbG9jLmM9MTU4Mz1zdGF0aWMgdm9pZCBfX21lbWluaXQgcG9pc29uX2Jsb2NrKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4tLVxubW0vcGFnZV9hbGxvYy5jLTE1ODktXG5tbS9wYWdlX2FsbG9jLmM6MTU5MDpcdFx0aWYgKHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeShwYWdlX3RvX3BoeXMocCksIFBBR0VfU0laRSkpXG5tbS9wYWdlX2FsbG9jLmMtMTU5MS1cdFx0XHRod3BvaXNvbl9ib290X3BhZ2UocCk7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTE1OTU9dm9pZCBfX21lbWluaXQgX19mcmVlX3BhZ2VzX2NvcmUoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcixcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMTYyOS1cdC8qIEZpcnN0OiBhIGJsb2NrIHBhcmtlZCBieSBfX2ZyZWVfdW5hY2NlcHRlZCgpIG5ldmVyIHJldHVybnMgaGVyZS4gKi9cbm1tL3BhZ2VfYWxsb2MuYzoxNjMwOlx0aWYgKHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeShwYWdlX3RvX3BoeXMocGFnZSksXG5tbS9wYWdlX2FsbG9jLmMtMTYzMS1cdFx0XHRcdFx0ICAgUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyBvcmRlcikpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDEwNAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDYwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDdXJyZW50IEFuYWx5c2lzIG9mIHRoZSBFRkkgSGFyZHdhcmUgUG9pc29uaW5nIExvZ2ljKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gIHdvcmtzIGFuZCB3aGVuIGl0IGdldHMgY2FsbGVkLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nLiBGaXJzdCwgSSBzZWUgaXQmIzM5O3MgY2FsbGVkIHdpdGhpbiBgYWN0aW9uX3Jlc3VsdCgpYCBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AsIHNwZWNpZmljYWxseSB3aGVuIHRoZSBtZW1vcnkgZmFpbHVyZSB0eXBlIGlzbiYjMzk7dCBhbHJlYWR5IHBvaXNvbmVkIG9yIGEgUEZOIG1hcC4gVGhpcyBtYWtlcyBzZW5zZTsgaXQmIzM5O3MgcmVjb3JkaW5nIHRoZSBmYWlsdXJlIGZvciBwZXJzaXN0ZW50IHRyYWNraW5nIGFjcm9zcyByZWJvb3RzIGluIHRob3NlIGNhc2VzLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHdoYXQgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCBpdHNlbGYgZG9lcy4gTG9va2luZyBhdCBgZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmNgLCBpdCBzZWVtcyB0byBiZSBzZXR0aW5nIGEgYml0IGluIGEgYml0bWFwIHdpdGhpbiB0aGUgYGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnlgIHN0cnVjdHVyZS4gVGhpcyBzdHJ1Y3R1cmUmIzM5O3MgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gaXMgd2hhdCBJJiMzOTttIHJlYWxseSBjdXJpb3VzIGFib3V0LiBJdCBhcHBlYXJzIHRoYXQgaXQmIzM5O3MgdXNpbmcgdGhlIFBoeXNpY2FsIEZyYW1lIE51bWJlciAoUEZOKSB0byBjYWxjdWxhdGUgYSB1bml0IHdpdGhpbiB0aGF0IGJpdG1hcCBhbmQgdGhlbiBzZXRzIHRoZSBjb3JyZXNwb25kaW5nIGJpdC4gVGhlIGNoZWNrIGZvciBgcG1gIGJlaW5nIE5VTEwgb3IgdGhlIGFkZHJlc3MgYmVpbmcgb3V0c2lkZSB0aGUgZXhwZWN0ZWQgcmFuZ2UgaXMgY3J1Y2lhbCwgd2hpY2ggY291bGQgYmUgYW4gaXNzdWUgaWYgd2UgaGF2ZSBkaWZmZXJlbnQgRUZJIGNvbmZpZ3VyYXRpb25zLgoKQSB0aG91Z2h0OiBXaGF0IGlmIEVGSSBpcyBlbmFibGVkLCBsaWtlIGluIGEgUUVNVS9PVk1GIGVudmlyb25tZW50IGFuZCBgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllgIGlzIGFsc28gZW5hYmxlZD8gT3IsIGlmIGEgdG9vbCBsaWtlIHN5emthbGxlciBvciBhIHVzZXJzcGFjZSBhcHBsaWNhdGlvbiB1c2VzIGBtYWR2aXNlKC4uLiwgTUFEVl9IV1BPSVNPTilgIG9yIGludGVudGlvbmFsbHkgaW5qZWN0cyBtZW1vcnkgZmFpbHVyZXM/IEluIHN0YW5kYXJkIHN5emthbGxlciBydW5zLCBkb2VzIFFFTVUgZXZlbiBib290IHdpdGggVUVGSS9FRkk/IEV2ZW4gd2l0aG91dCBVRUZJLCBpZiBgZWZpLnBvaXNvbmVkX21lbW9yeWAgaXMgYEVGSV9JTlZBTElEX1RBQkxFX0FERFJgLCB0aGVuIGBlZmlfcG9pc29uZWRfbWVtb3J5KClgIHJldHVybnMgTlVMTCEgQW5kIHRoYXQgc2VlbXMgdG8gYmUgdGhlIGNhc2Ugd2hlbiBsb29raW5nIGF0IGBlZmlfaHdwb2lzb25fcmVjb3JkX3BmbmAuCgpXYWl0LCBjYW4gYG1hZHZpc2UoLi4uLCBNQURWX0hXUE9JU09OKWAgdHJpZ2dlciBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gPyBZZXMsIGJlY2F1c2UgYGFjdGlvbl9yZXN1bHRgIGlzIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIGl0LCB3aGljaCByZWNlaXZlcyB0aGUgUEZOIGZyb20gbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgbG9naWMuCgpOb3csIHRoZXJlJiMzOTtzIGBod3BvaXNvbl9ib290X3BhZ2UoKWAgaW4gYG1lbW9yeS1mYWlsdXJlLmNgLiBCdXQgaXQmIzM5O3Mgb25seSBjYWxsZWQgZHVyaW5nIGVhcmx5IGJvb3Qgd2l0aGluIGBfX2ZyZWVfcGFnZXNfY29yZSgpYC4gSGFuZyBvbiBhIHNlY29uZCwgdGhvdWdoLCBiZWNhdXNlIGBfX2ZyZWVfcGFnZXNfY29yZWAgYWxzbyBnZXRzIGNhbGxlZCBkdXJpbmcgbWVtb3J5IGhvdHBsdWcuIFRoYXQgbWVhbnMgdGhpcyBlbnRpcmUgc2VxdWVuY2Ugb2YgZXZlbnRzIGNvdWxkIHBsYXkgb3V0IGR1cmluZyBob3RwbHVnZ2luZyB0b28sIG1ha2luZyB0aGlzIGV2ZW4gbW9yZSBjb21wbGljYXRlZCB0byB2ZXJpZnkuIEkgbmVlZCB0byBjaGVjayB3aGVyZSBlbHNlIGBfX2ZyZWVfcGFnZXNfY29yZWAgaXMgY2FsbGVkLiBJdCB3b3VsZCBhcHBlYXIgdGhpcyBjb3VsZCBjYXVzZSBhIHBvdGVudGlhbCByYWNlIGFuZC9vciBhZmZlY3Qgd2hhdCB3ZSB3ZXJlIHRyeWluZyB0byBkZXRlcm1pbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE0OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fZnJlZV9wYWdlc19jb3JlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ttc2FuL2luaXQuYz0xNjg9c3RhdGljIHZvaWQgZG9fY29sbGVjdGlvbih2b2lkKVxuLS1cbm1tL2ttc2FuL2luaXQuYy0xNzYtXHRcdGttc2FuX3NldHVwX21ldGEocGFnZSwgc2hhZG93LCBvcmlnaW4sIGNvbGxlY3Qub3JkZXIpO1xubW0va21zYW4vaW5pdC5jOjE3NzpcdFx0X19mcmVlX3BhZ2VzX2NvcmUocGFnZSwgY29sbGVjdC5vcmRlciwgTUVNSU5JVF9FQVJMWSk7XG5tbS9rbXNhbi9pbml0LmMtMTc4LVx0fVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9NjQ4PXZvaWQgZ2VuZXJpY19vbmxpbmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxubW0vbWVtb3J5X2hvdHBsdWcuYy02NDkte1xubW0vbWVtb3J5X2hvdHBsdWcuYzo2NTA6XHRfX2ZyZWVfcGFnZXNfY29yZShwYWdlLCBvcmRlciwgTUVNSU5JVF9IT1RQTFVHKTtcbm1tL21lbW9yeV9ob3RwbHVnLmMtNjUxLX1cbi0tXG5tbS9tbV9pbml0LmM9MTk1Nz1zdGF0aWMgdm9pZCBfX2luaXQgZGVmZXJyZWRfZnJlZV9wYWdlcyh1bnNpZ25lZCBsb25nIHBmbixcbi0tXG5tbS9tbV9pbml0LmMtMTk3Mi1cdGlmIChucl9wYWdlcyA9PSBNQVhfT1JERVJfTlJfUEFHRVMgXHUwMDI2XHUwMDI2IElTX01BWF9PUkRFUl9BTElHTkVEKHBmbikpIHtcbm1tL21tX2luaXQuYzoxOTczOlx0XHRfX2ZyZWVfcGFnZXNfY29yZShwYWdlLCBNQVhfUEFHRV9PUkRFUiwgTUVNSU5JVF9FQVJMWSk7XG5tbS9tbV9pbml0LmMtMTk3NC1cdFx0cmV0dXJuO1xuLS1cbm1tL21tX2luaXQuYy0xOTgwLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcGFnZXM7IGkmIzQzOyYjNDM7KVxubW0vbW1faW5pdC5jOjE5ODE6XHRcdF9fZnJlZV9wYWdlc19jb3JlKHBhZ2UgJiM0MzsgaSwgMCwgTUVNSU5JVF9FQVJMWSk7XG5tbS9tbV9pbml0LmMtMTk4Mi19XG4tLVxubW0vbW1faW5pdC5jPTI0NTI9dm9pZCBfX2luaXQgbWVtYmxvY2tfZnJlZV9wYWdlcyh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgaW50IG9yZGVyKVxuLS1cbm1tL21tX2luaXQuYy0yNDY5LVx0Y2xlYXJfcGFnZV90YWdfcmVmKHBhZ2UpO1xubW0vbW1faW5pdC5jOjI0NzA6XHRfX2ZyZWVfcGFnZXNfY29yZShwYWdlLCBvcmRlciwgTUVNSU5JVF9FQVJMWSk7XG5tbS9tbV9pbml0LmMtMjQ3MS19XG4tLVxubW0vcGFnZV9hbGxvYy5jPTE1ODM9c3RhdGljIHZvaWQgX19tZW1pbml0IHBvaXNvbl9ibG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy0xNTk0LVxubW0vcGFnZV9hbGxvYy5jOjE1OTU6dm9pZCBfX21lbWluaXQgX19mcmVlX3BhZ2VzX2NvcmUoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcixcbm1tL3BhZ2VfYWxsb2MuYy0xNTk2LVx0XHRlbnVtIG1lbWluaXRfY29udGV4dCBjb250ZXh0KVxuLS1cbm1tL3BhZ2VfYWxsb2MuaD0yMTQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqcGFnZWJsb2NrX3Bmbl90b19wYWdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuLS1cbm1tL3BhZ2VfYWxsb2MuaC0yMjItXG5tbS9wYWdlX2FsbG9jLmg6MjIzOmV4dGVybiB2b2lkIF9fZnJlZV9wYWdlc19jb3JlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG5tbS9wYWdlX2FsbG9jLmgtMjI0LVx0XHRlbnVtIG1lbWluaXRfY29udGV4dCBjb250ZXh0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTQ6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwNDQKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBIb3RwbHVnIGFuZCBQb3RlbnRpYWwgRmFpbHVyZSBJbmplY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBtZW1vcnkgaG90cGx1ZyBpcyBoYW5kbGVkIHdpdGhpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGBnZW5lcmljX29ubGluZV9wYWdlKClgIGZ1bmN0aW9uIGluIGBtbS9tZW1vcnlfaG90cGx1Zy5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBtZW1vcnkgZGVhbGxvY2F0aW9uIHVzaW5nIGBfX2ZyZWVfcGFnZXNfY29yZSgpYCBoYXBwZW5zLCBmbGFnZ2VkIHdpdGggYE1FTUlOSVRfSE9UUExVR2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSB2YXJpb3VzIHRyaWdnZXJzIGZvciB0aGlzIHByb2Nlc3MsIHdoaWNoLCBhcyBJIHJlY2FsbCwgY29tZSB0aHJvdWdoIHN5c2ZzIGludGVyZmFjZXMgbGlrZSBgL3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvbWVtb3J5WC9zdGF0ZWAsIG9yIHBlcmhhcHMgdmlhIGBkYXhfa21lbWAgb3IgZXZlbiBgdmlydGlvLW1lbWAgaW4gc29tZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cuCgpOb3csIEkmIzM5O20gZ2V0dGluZyBpbnRlcmVzdGVkIGluIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIG1lbW9yeSBmYWlsdXJlIHNjZW5hcmlvcy4gIEkgc3VzcGVjdCB0aGVyZSBtaWdodCBiZSBhIGNvbm5lY3Rpb24gYmV0d2VlbiBob3RwbHVnIGFuZCBmYWlsdXJlIGluamVjdGlvbiwgcG90ZW50aWFsbHkgdGhyb3VnaCBtZWNoYW5pc21zIGxpa2UgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB3aGVyZSBgYWN0aW9uX3Jlc3VsdGAgaXMgY2FsbGVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYC4gSSBuZWVkIHRvIHJldmlldyBhbGwgdGhlIGNhbGwgcGF0aHMgdG8gYGFjdGlvbl9yZXN1bHRgIGZyb20gdGhhdCBmaWxlLCBpbmNsdWRpbmcgYW55IHRoYXQgb3JpZ2luYXRlIGZyb20gYG1hZHZpc2VfaW5qZWN0X2Vycm9yYC4gIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhvc2UgY2FsbHMgZG8gYW5kIGhvdyB0aGV5IG1pZ2h0IHJlbGF0ZSB0byBtZW1vcnkgaG90cGx1ZyBldmVudHMgYW5kIHBvdGVudGlhbCBoYXJkd2FyZSBpc3N1ZXMuIEkmIzM5O20gbG9va2luZyBmb3IgYSBjbGVhciBwYXRoIGNvbm5lY3RpbmcgdGhlc2Ugc2VlbWluZ2x5IGRpc3BhcmF0ZSBhcmVhcy4gIFRoaXMgaW52ZXN0aWdhdGlvbiBzaG91bGQgaWxsdW1pbmF0ZSBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciB1bmV4cGVjdGVkIGJlaGF2aW9ycyBkdXJpbmcgaG90cGx1ZyBvcGVyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtNQURWX0hXUE9JU09OJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbW0vaHdwb2lzb24ucnN0PTEwNj1UZXN0aW5nXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9od3BvaXNvbi5yc3QtMTA4LVxuRG9jdW1lbnRhdGlvbi9tbS9od3BvaXNvbi5yc3Q6MTA5OiogbWFkdmlzZShNQURWX0hXUE9JU09OLCAuLi4uKSAoYXMgcm9vdCkgLSBQb2lzb24gYSBwYWdlIGluIHRoZVxuRG9jdW1lbnRhdGlvbi9tbS9od3BvaXNvbi5yc3QtMTEwLSAgcHJvY2VzcyBmb3IgdGVzdGluZ1xuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h3cG9pc29uLnJzdD05Nj1QUl9NQ0VfS0lMTF9HRVRcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9od3BvaXNvbi5yc3QtMTAxLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHdwb2lzb24ucnN0OjEwMjoqIG1hZHZpc2UoTUFEVl9IV1BPSVNPTiwgLi4uLikgKGFzIHJvb3QpIC0g5Zyo5rWL6K+V6L+H56iL5LitUG9pc29u5LiA5Liq6aG16Z2iXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9od3BvaXNvbi5yc3QtMTAzLVxuLS1cbmFyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC04NS0jZGVmaW5lIE1BRFZfVU5NRVJHRUFCTEUgMTNcdFx0LyogS1NNIG1heSBub3QgbWVyZ2UgaWRlbnRpY2FsIHBhZ2VzICovXG5hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmg6ODY6I2RlZmluZSBNQURWX0hXUE9JU09OXHQgMTAwXHRcdC8qIHBvaXNvbiBhIHBhZ2UgZm9yIHRlc3RpbmcgKi9cbmFyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC04Ny1cbi0tXG5hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC03NC1cbmFyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oOjc1OiNkZWZpbmUgTUFEVl9IV1BPSVNPTiAgICAgMTAwXHRcdC8qIHBvaXNvbiBhIHBhZ2UgZm9yIHRlc3RpbmcgKi9cbmFyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTc2LSNkZWZpbmUgTUFEVl9TT0ZUX09GRkxJTkUgMTAxXHRcdC8qIHNvZnQgb2ZmbGluZSBwYWdlIGZvciB0ZXN0aW5nICovXG4tLVxuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmgtNTUtI2RlZmluZSBNQURWX0RPRk9SS1x0MTFcdFx0LyogZG8gaW5oZXJpdCBhY3Jvc3MgZm9yayAqL1xuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmg6NTY6I2RlZmluZSBNQURWX0hXUE9JU09OXHQxMDBcdFx0LyogcG9pc29uIGEgcGFnZSBmb3IgdGVzdGluZyAqL1xuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmgtNTctI2RlZmluZSBNQURWX1NPRlRfT0ZGTElORSAxMDFcdFx0Lyogc29mdCBvZmZsaW5lIHBhZ2UgZm9yIHRlc3RpbmcgKi9cbi0tXG5tbS9tYWR2aXNlLmM9MTUwND1zdGF0aWMgYm9vbCBpc19tZW1vcnlfZmFpbHVyZShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTUwNi1cdHN3aXRjaCAobWFkdl9iZWhhdmlvci1cdTAwM2ViZWhhdmlvcikge1xubW0vbWFkdmlzZS5jOjE1MDc6XHRjYXNlIE1BRFZfSFdQT0lTT046XG5tbS9tYWR2aXNlLmMtMTUwOC1cdGNhc2UgTUFEVl9TT0ZUX09GRkxJTkU6XG4tLVxubW0vbWFkdmlzZS5jPTE1MzA9bWFkdmlzZV9iZWhhdmlvcl92YWxpZChpbnQgYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTE1NjMtXHRjYXNlIE1BRFZfU09GVF9PRkZMSU5FOlxubW0vbWFkdmlzZS5jOjE1NjQ6XHRjYXNlIE1BRFZfSFdQT0lTT046XG5tbS9tYWR2aXNlLmMtMTU2NS0jZW5kaWZcbi0tXG5tbS9tYWR2aXNlLmM9MTg5OT1zdGF0aWMgaW50IG1hZHZpc2VfZG9fYmVoYXZpb3IodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbixcbi0tXG5tbS9tYWR2aXNlLmMtMTk1NS0gKiAgTUFEVl9LRUVQT05GT1JLIC0gdW5kbyB0aGUgZWZmZWN0IG9mIE1BRFZfV0lQRU9ORk9SS1xubW0vbWFkdmlzZS5jOjE5NTY6ICogIE1BRFZfSFdQT0lTT04gLSB0cmlnZ2VyIG1lbW9yeSBlcnJvciBoYW5kbGVyIGFzIGlmIHRoZSBnaXZlbiBtZW1vcnkgcmFuZ2Vcbm1tL21hZHZpc2UuYy0xOTU3LSAqXHRcdHdlcmUgY29ycnVwdGVkIGJ5IHVucmVjb3ZlcmFibGUgaGFyZHdhcmUgbWVtb3J5IGZhaWx1cmUuXG4tLVxudG9vbHMvYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC0zNy0jZGVmaW5lIFBST1RfV1JJVEVcdDB4MlxudG9vbHMvYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaDozODovKiBNQURWX0hXUE9JU09OIGlzIHVuZGVmaW5lZCBvbiBhbHBoYSwgZml4IGl0IGZvciBwZXJmICovXG50b29scy9hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oOjM5OiNkZWZpbmUgTUFEVl9IV1BPSVNPTlx0MTAwXG50b29scy9hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTQwLS8qIE1BRFZfU09GVF9PRkZMSU5FIGlzIHVuZGVmaW5lZCBvbiBhbHBoYSwgZml4IGl0IGZvciBwZXJmICovXG4tLVxudG9vbHMvYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTEwLSNkZWZpbmUgTUFEVl9IVUdFUEFHRVx0MTRcbnRvb2xzL2FyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaDoxMTojZGVmaW5lIE1BRFZfSFdQT0lTT05cdCAxMDBcbnRvb2xzL2FyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC0xMi0jZGVmaW5lIE1BRFZfTUVSR0VBQkxFXHQgMTJcbi0tXG50b29scy9hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC0zNy0jZGVmaW5lIFBST1RfV1JJVEVcdDB4MlxudG9vbHMvYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmg6Mzg6I2RlZmluZSBNQURWX0hXUE9JU09OXHQxMDBcbnRvb2xzL2FyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTM5LSNkZWZpbmUgTUFEVl9TT0ZUX09GRkxJTkUgMTAxXG4tLVxudG9vbHMvYXJjaC94dGVuc2EvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmgtMzctI2RlZmluZSBQUk9UX1dSSVRFXHQweDJcbnRvb2xzL2FyY2gveHRlbnNhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oOjM4Oi8qIE1BRFZfSFdQT0lTT04gaXMgdW5kZWZpbmVkIG9uIHh0ZW5zYSwgZml4IGl0IGZvciBwZXJmICovXG50b29scy9hcmNoL3h0ZW5zYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaDozOTojZGVmaW5lIE1BRFZfSFdQT0lTT05cdDEwMFxudG9vbHMvYXJjaC94dGVuc2EvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmgtNDAtLyogTUFEVl9TT0ZUX09GRkxJTkUgaXMgdW5kZWZpbmVkIG9uIHh0ZW5zYSwgZml4IGl0IGZvciBwZXJmICovXG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmgtNTUtI2RlZmluZSBNQURWX0RPRk9SS1x0MTFcdFx0LyogZG8gaW5oZXJpdCBhY3Jvc3MgZm9yayAqL1xudG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmg6NTY6I2RlZmluZSBNQURWX0hXUE9JU09OXHQxMDBcdFx0LyogcG9pc29uIGEgcGFnZSBmb3IgdGVzdGluZyAqL1xudG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmgtNTctI2RlZmluZSBNQURWX1NPRlRfT0ZGTElORSAxMDFcdFx0Lyogc29mdCBvZmZsaW5lIHBhZ2UgZm9yIHRlc3RpbmcgKi9cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXJlYWQtaHdwb2lzb24uYz0xNzY9dGVzdF9odWdldGxiX3JlYWRfaHdwb2lzb24oaW50IGZkLCBzaXplX3QgbGVuLCBzaXplX3Qgd3JfY2h1bmtfc2l6ZSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXJlYWQtaHdwb2lzb24uYy0yMDUtXHRod3BfYWRkciA9IGZpbGVtYXAgJiM0MzsgbGVuIC8gMiAmIzQzOyBwYWdlc2l6ZTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItcmVhZC1od3BvaXNvbi5jOjIwNjpcdGlmIChtYWR2aXNlKGh3cF9hZGRyLCBwYWdlc2l6ZSwgTUFEVl9IV1BPSVNPTikgXHUwMDNjIDApIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItcmVhZC1od3BvaXNvbi5jOjIwNzpcdFx0a3NmdF9wZXJyb3IoXCYjMzQ7TUFEVl9IV1BPSVNPTiBmYWlsZWRcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1yZWFkLWh3cG9pc29uLmMtMjA4LVx0XHRnb3RvIHVubWFwO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmM9NTg9c3RhdGljIGludCBtYWR2X2hhcmRfaW5qZWN0KEZJWFRVUkVfREFUQShtZW1vcnlfZmFpbHVyZSkgKiBzZWxmLCB2b2lkICp2YWRkcilcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmMtNTkte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuYzo2MDpcdHJldHVybiBtYWR2aXNlKHZhZGRyLCBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZSwgTUFEVl9IV1BPSVNPTik7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jLTYxLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTQ6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzNzcKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkRpdmluZyBpbnRvIGBtYWR2aXNlX2luamVjdF9lcnJvcmAqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzLiBJJiMzOTttIGdvaW5nIHRvIGhlYWQgc3RyYWlnaHQgZm9yIGBtbS9tYWR2aXNlLmNgIGFuZCBzcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgYXQgdGhlIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgZnVuY3Rpb24uIFRoaXMgb25lIGlzIGtleSwgYW5kIEkga25vdyBpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgaGFuZGxlZCwgdGhlIG1lY2hhbmljcyBvZiBob3cgd2UmIzM5O3JlIGluamVjdGluZyBlcnJvcnMgdXNpbmcgbWFkdmlzZS4gSSB3YW50IHRvIHNlZSB0aGUgZXJyb3IgaW5qZWN0aW9uIGJlaGF2aW9yIGRldGFpbHMuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQgd2hlbiBpdCBjb21lcyB0byB1bmRlcnN0YW5kaW5nIGV4YWN0bHkgaG93IHRoaXMgcGFydGljdWxhciBjb250cm9sIHBhdGggYmVoYXZlcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIGhhcyB0byBzYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE0OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hZHZpc2VfaW5qZWN0X2Vycm9yJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYz0xMzUwPXN0YXRpYyBpbnQgbWFkdmlzZV92bWFfYmVoYXZpb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTE0NTgtICovXG5tbS9tYWR2aXNlLmM6MTQ1OTpzdGF0aWMgaW50IG1hZHZpc2VfaW5qZWN0X2Vycm9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxubW0vbWFkdmlzZS5jLTE0NjAte1xuLS1cbm1tL21hZHZpc2UuYz0xNTA0PXN0YXRpYyBib29sIGlzX21lbW9yeV9mYWlsdXJlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNTE2LVxubW0vbWFkdmlzZS5jOjE1MTc6c3RhdGljIGludCBtYWR2aXNlX2luamVjdF9lcnJvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbm1tL21hZHZpc2UuYy0xNTE4LXtcbi0tXG5tbS9tYWR2aXNlLmM9MTg5OT1zdGF0aWMgaW50IG1hZHZpc2VfZG9fYmVoYXZpb3IodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbixcbi0tXG5tbS9tYWR2aXNlLmMtMTkwOC1cdFx0cmFuZ2UtXHUwMDNlZW5kID0gc3RhcnQgJiM0MzsgbGVuX2luO1xubW0vbWFkdmlzZS5jOjE5MDk6XHRcdHJldHVybiBtYWR2aXNlX2luamVjdF9lcnJvcihtYWR2X2JlaGF2aW9yKTtcbm1tL21hZHZpc2UuYy0xOTEwLVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODg5MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgbWFkdmlzZV9pbmplY3RfZXJyb3JgKioKCk9rYXksIHRpbWUgdG8gZGlzc2VjdCB0aGUgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgZnVuY3Rpb24gaXMgc3VwcG9zZWQgdG8gd29yayBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGhvdyBpdCBtaWdodCBkZXZpYXRlIGZyb20gZXhwZWN0ZWQgYmVoYXZpb3Igb3IgaW50ZXJhY3Qgd2l0aCB0aGUga2VybmVsIGluIHVuZXhwZWN0ZWQgd2F5cy4gTXkgZm9jdXMgaXMgb24gcG90ZW50aWFsIGVkZ2UgY2FzZXMsIHJhY2UgY29uZGl0aW9ucywgYW5kIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHVuaXQgdGhhdCBjb3VsZCBsZWFkIHRvIHZ1bG5lcmFiaWxpdGllcyBvciBzdWJ0bGUgYnVncy4gSSYjMzk7bSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBpbmplY3Rpb24gbG9naWMgaXRzZWxmIOKAkyB3aGF0IHRyaWdnZXJzIGl0LCBob3cgcHJlY2lzZWx5IGlzIHRoZSBlcnJvciBjb21tdW5pY2F0ZWQgb3Igc2ltdWxhdGVkLCBhbmQgYXJlIHRoZXJlIGFueSBvYnZpb3VzIChvciBub24tb2J2aW91cykgZmxhd3MgaW4gdGhlIGVycm9yIGhhbmRsaW5nPyBJIHdpbGwgbG9vayBmb3IgYW55IGFyZWFzIHRoYXQgcG90ZW50aWFsbHkgYnlwYXNzIGludGVuZGVkIG1lbW9yeSBwcm90ZWN0aW9uLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSBwYWdlIGZhdWx0IGhhbmRsaW5nIHBhdGhzLCBhbmQgY29uc2lkZXIgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB3aXRoIG90aGVyIG9wZXJhdGlvbnMgdGhhdCBtYW5pcHVsYXRlIHRoZSBzYW1lIG1lbW9yeSByZWdpb25zLiBMZXQmIzM5O3Mgc2VlLi4uIHdoZXJlIGRvZXMgdGhlIGtlcm5lbCBhY3R1YWxseSBpbmplY3QgdGhlICYjMzQ7ZXJyb3ImIzM0OyBhZnRlciBgbWFkdmlzZWA/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyByZWxhdGVkIHRvIHRoZSBlcnJvciBzdGF0ZT8gSXMgdGhlIGVycm9yIHRydWx5IGFuIGVycm9yLCBvciBhIHRyaWdnZXIgdGhhdCBleHBvc2VzIHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBhbGxvY2F0aW9uIG1lY2hhbmlzbXM/IExldCYjMzk7cyBnZXQgc3RhcnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTQ6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0NTU6XHQjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXG4xNDU2Olx0LypcbjE0NTc6XHQgKiBFcnJvciBpbmplY3Rpb24gc3VwcG9ydCBmb3IgbWVtb3J5IGVycm9yIGhhbmRsaW5nLlxuMTQ1ODpcdCAqL1xuMTQ1OTpcdHN0YXRpYyBpbnQgbWFkdmlzZV9pbmplY3RfZXJyb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4xNDYwOlx0e1xuMTQ2MTpcdFx0dW5zaWduZWQgbG9uZyBzaXplO1xuMTQ2MjpcdFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IG1hZHZfYmVoYXZpb3ItXHUwMDNlcmFuZ2Uuc3RhcnQ7XG4xNDYzOlx0XHR1bnNpZ25lZCBsb25nIGVuZCA9IG1hZHZfYmVoYXZpb3ItXHUwMDNlcmFuZ2UuZW5kO1xuMTQ2NDpcdFxuMTQ2NTpcdFx0aWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKVxuMTQ2NjpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuMTQ2NzpcdFxuMTQ2ODpcdFx0Zm9yICg7IHN0YXJ0IFx1MDAzYyBlbmQ7IHN0YXJ0ICYjNDM7PSBzaXplKSB7XG4xNDY5Olx0XHRcdHVuc2lnbmVkIGxvbmcgcGZuO1xuMTQ3MDpcdFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbjE0NzE6XHRcdFx0aW50IHJldDtcbjE0NzI6XHRcbjE0NzM6XHRcdFx0cmV0ID0gZ2V0X3VzZXJfcGFnZXNfZmFzdChzdGFydCwgMSwgMCwgXHUwMDI2cGFnZSk7XG4xNDc0Olx0XHRcdGlmIChyZXQgIT0gMSlcbjE0NzU6XHRcdFx0XHRyZXR1cm4gcmV0O1xuMTQ3NjpcdFx0XHRwZm4gPSBwYWdlX3RvX3BmbihwYWdlKTtcbjE0Nzc6XHRcbjE0Nzg6XHRcdFx0LypcbjE0Nzk6XHRcdFx0ICogV2hlbiBzb2Z0IG9mZmxpbmluZyBodWdlcGFnZXMsIGFmdGVyIG1pZ3JhdGluZyB0aGUgcGFnZVxuMTQ4MDpcdFx0XHQgKiB3ZSBkaXNzb2x2ZSBpdCwgdGhlcmVmb3JlIGluIHRoZSBzZWNvbmQgbG9vcCBcJiMzNDtwYWdlXCYjMzQ7IHdpbGxcbjE0ODE6XHRcdFx0ICogbm8gbG9uZ2VyIGJlIGEgY29tcG91bmQgcGFnZS5cbjE0ODI6XHRcdFx0ICovXG4xNDgzOlx0XHRcdHNpemUgPSBwYWdlX3NpemUoY29tcG91bmRfaGVhZChwYWdlKSk7XG4xNDg0Olx0XG4xNDg1Olx0XHRcdGlmIChtYWR2X2JlaGF2aW9yLVx1MDAzZWJlaGF2aW9yID09IE1BRFZfU09GVF9PRkZMSU5FKSB7XG4xNDg2Olx0XHRcdFx0cHJfaW5mbyhcJiMzNDtTb2Z0IG9mZmxpbmluZyBwZm4gJSNseCBhdCBwcm9jZXNzIHZpcnR1YWwgYWRkcmVzcyAlI2x4XFxuXCYjMzQ7LFxuMTQ4NzpcdFx0XHRcdFx0IHBmbiwgc3RhcnQpO1xuMTQ4ODpcdFx0XHRcdHJldCA9IHNvZnRfb2ZmbGluZV9wYWdlKHBmbiwgTUZfQ09VTlRfSU5DUkVBU0VEKTtcbjE0ODk6XHRcdFx0fSBlbHNlIHtcbjE0OTA6XHRcdFx0XHRwcl9pbmZvKFwmIzM0O0luamVjdGluZyBtZW1vcnkgZmFpbHVyZSBmb3IgcGZuICUjbHggYXQgcHJvY2VzcyB2aXJ0dWFsIGFkZHJlc3MgJSNseFxcblwmIzM0OyxcbjE0OTE6XHRcdFx0XHRcdCBwZm4sIHN0YXJ0KTtcbjE0OTI6XHRcdFx0XHRyZXQgPSBtZW1vcnlfZmFpbHVyZShwZm4sIE1GX0FDVElPTl9SRVFVSVJFRCB8IE1GX0NPVU5UX0lOQ1JFQVNFRCB8IE1GX1NXX1NJTVVMQVRFRCk7XG4xNDkzOlx0XHRcdFx0aWYgKHJldCA9PSAtRU9QTk9UU1VQUClcbjE0OTQ6XHRcdFx0XHRcdHJldCA9IDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE0OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5ODQyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IERlZXAgRGl2ZSBpbnRvIEVGSSBIYXJkd2FyZSBQb2lzb25pbmcgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHRyYWNlIHRoZSBwYXRoIG9mIGhhcmR3YXJlIHBvaXNvbmluZyBldmVudHMuIEl0IGxvb2tzIGxpa2UgYG1hZHZpc2UoYWRkciwgbGVuLCBNQURWX0hXUE9JU09OKWAgdHJpZ2dlcnMgYSBjaGFpbiBvZiBldmVudHMsIHN0YXJ0aW5nIHdpdGggYG1lbW9yeV9mYWlsdXJlKClgLCBsZWFkaW5nIHRvIGBhY3Rpb25fcmVzdWx0KClgLCBhbmQgdWx0aW1hdGVseSBjYWxsaW5nIGBlZmlfaHdwb2lzb25fcmVjb3JkX3BmbihwZm4pYC4gVGhhdCYjMzk7cyB0aGUgY29yZSBmdW5jdGlvbiBJIG5lZWQgdG8gdW5kZXJzdGFuZC4KCkkgYWxzbyBzZWUgb3RoZXIgaW5qZWN0aW9uIG1ldGhvZHMgbWVudGlvbmVkOiB0aGUgZGVidWdmcyBlbnRyeSBgL3N5cy9rZXJuZWwvZGVidWcvaHdwb2lzb24vY29ycnVwdC1wZm5gIGZvciBkaXJlY3QgaW5qZWN0aW9uLCBhbmQgdGhlIFJBUy9NQ0UgaW5qZWN0aW9uIG1lY2hhbmlzbXMgdXNpbmcgYC9kZXYvbWNlbG9nYCBhbmQgQVBFSS4gVGhlc2UgcHJvdmlkZSB3YXlzIHRvIHNpbXVsYXRlIHRoZSBoYXJkd2FyZSBlcnJvciB0aGF0IHVsdGltYXRlbHkgcmVhY2hlcyB0aGUgc2FtZSBwb2ludC4KCk5vdywgbGV0JiMzOTtzIHplcm8gaW4gb24gYGRyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jYC4gVGhlIGtleSBmdW5jdGlvbiBoZXJlIGlzIGNsZWFybHkgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKWAuICBMb29raW5nIGF0IHRoZSBjb2RlLCBpdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJdCBnZXRzIGEgcG9pbnRlciB0byBhIGBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeWAgdmlhIGBlZmlfcG9pc29uZWRfbWVtb3J5KClgLCBjb252ZXJ0cyB0aGUgcGFnZSBmcmFtZSBudW1iZXIgKGBwZm5gKSB0byBhIHBoeXNpY2FsIGFkZHJlc3MsIGFuZCB0aGVuIG1hcHMgdGhlIGFkZHJlc3MgdG8gYSBiaXQgd2l0aGluIGEgYml0bWFwLiBUaGlzIGJpdG1hcCBzZWVtcyB0byB0cmFjayB3aGljaCBtZW1vcnkgdW5pdHMgYXJlIGNvbnNpZGVyZWQgJiMzNDtwb2lzb25lZCYjMzQ7LiBBIHNpbXBsZSBjaGVjayB0byBlbnN1cmUgd2UmIzM5O3JlIHdpdGhpbiB0aGUgdmFsaWQgcG9pc29uZWQgcmVnaW9uIGlzIGFsc28gcHJlc2VudC4gSWYgdGhlIGFkZHJlc3MgaXMgdmFsaWQsIGl0IHRoZW4gc2V0cyB0aGUgcmVsZXZhbnQgYml0IGluIHRoZSBgcG0tJmd0O2JpdG1hcGAuCgpJIGFsc28gbm90aWNlZCBgcmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5YC4gIFRoaXMgY29kZSYjMzk7cyBqb2IgaXMgdG8gY2hlY2sgaWYgYSBzcGVjaWZpZWQgcGh5c2ljYWwgbWVtb3J5IHJhbmdlIGNvbnRhaW5zIGFueSBwb2lzb25lZCBtZW1vcnkuIEl0IGRvZXMgc2ltaWxhciBhZGRyZXNzIGNhbGN1bGF0aW9ucyB0byBmaW5kIHRoZSBhcHByb3ByaWF0ZSBiaXQgcmFuZ2Ugd2l0aGluIHRoZSBwb2lzb25lZCBtZW1vcnkgYml0bWFwLiBJIHNlZSBpdCBoYW5kbGVzIHRoZSBlZGdlIGNhc2VzIHdoZXJlIHRoZSBwcm92aWRlZCByYW5nZSBtaWdodCBzdGFydCBiZWZvcmUgb3IgZXh0ZW5kIGJleW9uZCB0aGUga25vd24gcG9pc29uZWQgbWVtb3J5IHJlZ2lvbi4gSXQgdXNlcyBgZmluZF9uZXh0X2JpdGAgdG8gZWZmaWNpZW50bHkgY2hlY2sgaWYgYW55IGJpdCBpcyBzZXQgd2l0aGluIHRoZSByYW5nZS4KClRoZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBgZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmNgIGNvbXBsZXRlbHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbnRleHQuIEkmIzM5O2xsIHJlYWQgdGhpcyBmaWxlIGZyb20gdG9wIHRvIGJvdHRvbSwgcGF5aW5nIGF0dGVudGlvbiB0byB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBvaXNvbmVkIG1lbW9yeSByZWdpb24gYW5kIGhvdyB0aGUgYml0bWFwIGlzIG1hbmFnZWQsIHRvIGJ1aWxkIGEgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQvKlxuICAgMzpcdCAqIFJ1bnRpbWUgc2lkZSBvZiB0aGUgTElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWSB0YWJsZTogb25lIGJpdCBwZXJcbiAgIDQ6XHQgKiBFRklfUE9JU09OX1VOSVRfU0laRSwgc2V0IGhlcmUgYXMgZnJhbWVzIGdvIGJhZCwgaG9ub3JlZCBieSB0aGUgbmV4dCBrZXJuZWwuXG4gICA1Olx0ICpcbiAgIDY6XHQgKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gICA3Olx0ICogQ29weXJpZ2h0IChjKSAyMDI2IEJyZW5vIExlaXRhbyBcdTAwM2NsZWl0YW9AZGViaWFuLm9yZ1x1MDAzZVxuICAgODpcdCAqL1xuICAgOTpcdFxuICAxMDpcdCNkZWZpbmUgcHJfZm10KGZtdCkgXCYjMzQ7ZWZpOiBcJiMzNDsgZm10XG4gIDExOlx0XG4gIDEyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvYml0bWFwLmhcdTAwM2VcbiAgMTM6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9lZmkuaFx1MDAzZVxuICAxNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvLmhcdTAwM2VcbiAgMTU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9sb2cyLmhcdTAwM2VcbiAgMTY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1ibG9jay5oXHUwMDNlXG4gIDE3Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZVxuICAxODpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L292ZXJmbG93LmhcdTAwM2VcbiAgMTk6XHRcbiAgMjA6XHRzdGF0aWMgYm9vbCBfX2luaXRcbiAgMjE6XHRlZmlfcG9pc29uX2dlb21ldHJ5X3ZhbGlkKGNvbnN0IHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSlcbiAgMjI6XHR7XG4gIDIzOlx0XHR1NjQgbmJpdHM7XG4gIDI0Olx0XG4gIDI1Olx0XHQvKiBXaG9sZSB3b3JkcywgYW5kIGEgYml0IGNvdW50IHRoYXQgY2FuIGJlIHRha2VuIHdpdGhvdXQgd3JhcHBpbmcuICovXG4gIDI2Olx0XHRpZiAoIXBtLVx1MDAzZXNpemUgfHwgIUlTX0FMSUdORUQocG0tXHUwMDNlc2l6ZSwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSB8fFxuICAyNzpcdFx0ICAgIGNoZWNrX211bF9vdmVyZmxvdyhwbS1cdTAwM2VzaXplLCAodTY0KUJJVFNfUEVSX0JZVEUsIFx1MDAyNm5iaXRzKSlcbiAgMjg6XHRcdFx0cmV0dXJuIGZhbHNlO1xuICAyOTpcdFxuICAzMDpcdFx0aWYgKHBtLVx1MDAzZXVuaXRfc2l6ZSBcdTAwM2MgUEFHRV9TSVpFIHx8ICFpc19wb3dlcl9vZl8yKHBtLVx1MDAzZXVuaXRfc2l6ZSkpXG4gIDMxOlx0XHRcdHJldHVybiBmYWxzZTtcbiAgMzI6XHRcbiAgMzM6XHRcdHJldHVybiBJU19BTElHTkVEKHBtLVx1MDAzZXBoeXNfYmFzZSwgcG0tXHUwMDNldW5pdF9zaXplKTtcbiAgMzQ6XHR9XG4gIDM1Olx0XG4gIDM2Olx0LyogVGhlIHRhYmxlIG1heSBjb21lIGZyb20gYW4gZWFybGllciBrZXJuZWwsIHNvIHZldCBpdCBiZWZvcmUgdXNpbmcgaXQuICovXG4gIDM3Olx0c3RhdGljIGJvb2wgX19pbml0XG4gIDM4Olx0ZWZpX3BvaXNvbl90YWJsZV92YWxpZChjb25zdCBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0pXG4gIDM5Olx0e1xuICA0MDpcdFx0aWYgKHBtLVx1MDAzZXZlcnNpb24gIT0gMSkge1xuICA0MTpcdFx0XHRwcl93YXJuKFwmIzM0O0lnbm9yaW5nIHBvaXNvbmVkLW1lbW9yeSB0YWJsZSB3aXRoIHZlcnNpb24gJXVcXG5cJiMzNDssXG4gIDQyOlx0XHRcdFx0cG0tXHUwMDNldmVyc2lvbik7XG4gIDQzOlx0XHRcdHJldHVybiBmYWxzZTtcbiAgNDQ6XHRcdH1cbiAgNDU6XHRcbiAgNDY6XHRcdGlmICghZWZpX3BvaXNvbl9nZW9tZXRyeV92YWxpZChwbSkpIHtcbiAgNDc6XHRcdFx0cHJfd2FybihcJiMzNDtJZ25vcmluZyBtYWxmb3JtZWQgcG9pc29uZWQtbWVtb3J5IHRhYmxlXFxuXCYjMzQ7KTtcbiAgNDg6XHRcdFx0cmV0dXJuIGZhbHNlO1xuICA0OTpcdFx0fVxuICA1MDpcdFxuICA1MTpcdFx0cmV0dXJuIHRydWU7XG4gIDUyOlx0fVxuICA1MzpcdFxuICA1NDpcdC8qXG4gIDU1Olx0ICogVmV0IHRoZSBpbmhlcml0ZWQgdGFibGUgYW5kIGhhbmQgaXRzIHBhZ2VzIHRvIG1lbWJsb2NrLCB0aGUgd2F5IHRoZVxuICA1NjpcdCAqIHVuYWNjZXB0ZWQgbWVtb3J5IHRhYmxlIGlzIGhhbmRsZWQuIEl0IGlzIEVGSSBBQ1BJIHJlY2xhaW0gbWVtb3J5LCB3aGljaFxuICA1NzpcdCAqIGJlY29tZXMgRTgyMF9UWVBFX0FDUEkgYW5kIHdvdWxkIG90aGVyd2lzZSBzdGF5IG91dCBvZiB0aGUgZGlyZWN0IG1hcCwgYW5kXG4gIDU4Olx0ICogdG91Y2hpbmcgaXQgdGhlbiBmYXVsdHMuIENhbGxlZCBmcm9tIGVmaV9jb25maWdfcGFyc2VfdGFibGVzKCksIHNvXG4gIDU5Olx0ICogZXZlcnl0aGluZyBsYXRlciBjYW4gcmVhY2ggaXQgd2l0aCBlZmlfcG9pc29uZWRfbWVtb3J5KCkuXG4gIDYwOlx0ICovXG4gIDYxOlx0dm9pZCBfX2luaXQgZWZpX3BvaXNvbmVkX21lbW9yeV9yZXNlcnZlKHZvaWQpXG4gIDYyOlx0e1xuICA2MzpcdFx0c3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtO1xuICA2NDpcdFx0cGh5c19hZGRyX3Qgc3RhcnQsIGVuZDtcbiAgNjU6XHRcbiAgNjY6XHRcdGlmIChlZmkucG9pc29uZWRfbWVtb3J5ID09IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpXG4gIDY3Olx0XHRcdHJldHVybjtcbiAgNjg6XHRcbiAgNjk6XHRcdHBtID0gZWFybHlfbWVtcmVtYXAoZWZpLnBvaXNvbmVkX21lbW9yeSwgc2l6ZW9mKCpwbSkpO1xuICA3MDpcdFx0aWYgKCFwbSkge1xuICA3MTpcdFx0XHRwcl93YXJuKFwmIzM0O0NvdWxkIG5vdCBtYXAgcG9pc29uZWQtbWVtb3J5IHRhYmxlXFxuXCYjMzQ7KTtcbiAgNzI6XHRcdFx0ZWZpLnBvaXNvbmVkX21lbW9yeSA9IEVGSV9JTlZBTElEX1RBQkxFX0FERFI7XG4gIDczOlx0XHRcdHJldHVybjtcbiAgNzQ6XHRcdH1cbiAgNzU6XHRcbiAgNzY6XHRcdGlmICghZWZpX3BvaXNvbl90YWJsZV92YWxpZChwbSkpIHtcbiAgNzc6XHRcdFx0ZWZpLnBvaXNvbmVkX21lbW9yeSA9IEVGSV9JTlZBTElEX1RBQkxFX0FERFI7XG4gIDc4Olx0XHRcdGVhcmx5X21lbXVubWFwKHBtLCBzaXplb2YoKnBtKSk7XG4gIDc5Olx0XHRcdHJldHVybjtcbiAgODA6XHRcdH1cbiAgODE6XHRcbiAgODI6XHRcdHN0YXJ0ID0gUEFHRV9BTElHTl9ET1dOKGVmaS5wb2lzb25lZF9tZW1vcnkpO1xuICA4MzpcdFx0ZW5kID0gUEFHRV9BTElHTihlZmkucG9pc29uZWRfbWVtb3J5ICYjNDM7IHNpemVvZigqcG0pICYjNDM7IHBtLVx1MDAzZXNpemUpO1xuICA4NDpcdFx0ZWFybHlfbWVtdW5tYXAocG0sIHNpemVvZigqcG0pKTtcbiAgODU6XHRcbiAgODY6XHRcdG1lbWJsb2NrX2FkZChzdGFydCwgZW5kIC0gc3RhcnQpO1xuICA4NzpcdFx0bWVtYmxvY2tfcmVzZXJ2ZShzdGFydCwgZW5kIC0gc3RhcnQpO1xuICA4ODpcdH1cbiAgODk6XHRcbiAgOTA6XHQvKiBUaGUgdGFibGUsIHZldHRlZCBhdCBwYXJzZSB0aW1lLCBvciBOVUxMIGlmIHRoaXMgYm9vdCBoYXMgbm9uZS4gKi9cbiAgOTE6XHRzdGF0aWMgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKmVmaV9wb2lzb25lZF9tZW1vcnkodm9pZClcbiAgOTI6XHR7XG4gIDkzOlx0XHRpZiAoZWZpLnBvaXNvbmVkX21lbW9yeSA9PSBFRklfSU5WQUxJRF9UQUJMRV9BRERSKVxuICA5NDpcdFx0XHRyZXR1cm4gTlVMTDtcbiAgOTU6XHRcbiAgOTY6XHRcdHJldHVybiBwaHlzX3RvX3ZpcnQoZWZpLnBvaXNvbmVkX21lbW9yeSk7XG4gIDk3Olx0fVxuICA5ODpcdFxuICA5OTpcdC8qIERvZXMgdGhlIHJhbmdlIGNvdmVyIGEgdW5pdCBhbiBlYXJsaWVyIGtlcm5lbCByZWNvcmRlZCBhcyBiYWQ/ICovXG4gMTAwOlx0Ym9vbCByYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnkocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTQ6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI0MDEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0JiMzOTtzIGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFwcHJvYWNoIHRoaXMgYGRyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jYCBmaWxlLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgUG9pc29uKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGludG8gdGhlIGhlYXJ0IG9mIHRoaXMgYHBvaXNvbi5jYCBmaWxlIHdpdGhpbiB0aGUgRUZJIGZpcm13YXJlIGRyaXZlcnMuIEdpdmVuIHRoZSBuYW1lLCAmIzM0O3BvaXNvbiYjMzQ7IGltbWVkaWF0ZWx5IGZsYWdzIGEgcG90ZW50aWFsIGFyZWEgb2YgaW50ZXJlc3QgZm9yIG1lbW9yeSBjb3JydXB0aW9uIHZ1bG5lcmFiaWxpdGllcywgZGVmZW5zaXZlIHByb2dyYW1taW5nIHRlY2huaXF1ZXMsIG9yIHBlcmhhcHMgZXZlbiBhIGRlbGliZXJhdGUsIGlmIHVudXN1YWwsIG1lbW9yeSBzYW5pdGl6YXRpb24gc3RyYXRlZ3kuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgY29kZSB0aGF0IGRlYWxzIHdpdGggZWl0aGVyIGRlbGliZXJhdGVseSBvdmVyd3JpdGluZyBtZW1vcnkgd2l0aCBrbm93biBwYXR0ZXJucywgcG90ZW50aWFsbHkgdG8gZGV0ZWN0IHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgb3Igb3RoZXIgbWVtb3J5IGVycm9ycywgb3IgY29kZSB0aGF0IGlzIGRlZmVuc2l2ZSBpbiBuYXR1cmUuCgpJJiMzOTtsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBmb3IgaG93IG1lbW9yeSByZWdpb25zIGFyZSBoYW5kbGVkLCBhbGxvY2F0ZWQsIGRlYWxsb2NhdGVkLCBhbmQgZXNwZWNpYWxseSBob3cgdGhleSBhcmUgaW5pdGlhbGl6ZWQgYW5kIHBvdGVudGlhbGx5IG92ZXJ3cml0dGVuLiBJJiMzOTtsbCBiZSB3YXRjaGluZyBmb3IgYW55IHVzZSBvZiBtYWdpYyB2YWx1ZXMsIHNlbnRpbmVsIHZhbHVlcywgb3IgZGVidWctb3JpZW50ZWQgcGF0dGVybnMgdGhhdCBzY3JlYW0gJiMzNDt0aGlzIGlzIGEgY2FuYXJ5IGluIHRoZSBjb2FsIG1pbmUuJiMzNDsgVGhlIEVGSSBjb250ZXh0IHN1Z2dlc3RzIEkgc2hvdWxkIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGludGVyYWN0aW9uIHdpdGggZmlybXdhcmUgdGFibGVzLCBydW50aW1lIHNlcnZpY2VzLCBvciBwb3RlbnRpYWxseSBldmVuIFNNUkFNLiBJdCBpcyB2aXRhbCB0byBzZWUgaG93IHRoZXNlIHBvdGVudGlhbGx5IHNlbnNpdGl2ZSByZWdpb25zIGFyZSBwcm90ZWN0ZWQuCgpNeSBmaXJzdCByZWFkLXRocm91Z2ggd2lsbCBwcm9iYWJseSBiZSBhIGJyb2FkIHNjYW4sIGJ1dCBJJiMzOTtsbCB6ZXJvIGluIG9uIGZ1bmN0aW9ucyByZWxhdGVkIHRvIG1lbW9yeSBhbGxvY2F0aW9uLCBjb3B5aW5nLCBhbmQgaW5pdGlhbGl6YXRpb24uIEkmIzM5O2xsIGJlIHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBleHBsb2l0IHZlY3RvcnMgYXMgSSBnbywgc3VjaCBhcyBidWZmZXIgb3ZlcmZsb3dzLCBvZmYtYnktb25lIGVycm9ycywgb3IgaW5jb3JyZWN0IHBvaW50ZXIgYXJpdGhtZXRpYywgcGFydGljdWxhcmx5IGluIHRoZSBjb250ZXh0IG9mIHRoZSBFRkkgZW52aXJvbm1lbnQuIEFueSBjdXN0b20gYWxsb2NhdGlvbiBvciBkZWFsbG9jYXRpb24gcm91dGluZXMgd291bGQgYmUgZXNwZWNpYWxseSBpbnRlcmVzdGluZywgYXMgdGhvc2Ugb2Z0ZW4gaGFyYm9yIHN1YnRsZSBidWdzLiBJJiMzOTttIGhvcGluZyB0byB1bmRlcnN0YW5kIGhvdyAmIzM0O3BvaXNvbiYjMzQ7IGlzIGFwcGxpZWQgYW5kIHdoYXQgdGhlIGludGVuZGVkIHB1cnBvc2Ugb2YgdGhhdCAmIzM0O3BvaXNvbiYjMzQ7IG1pZ2h0IGJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDA6XHRib29sIHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeShwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKVxuIDEwMTpcdHtcbiAxMDI6XHRcdHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSA9IGVmaV9wb2lzb25lZF9tZW1vcnkoKTtcbiAxMDM6XHRcdHU2NCBmaXJzdCwgbGFzdCwgbmJpdHM7XG4gMTA0Olx0XG4gMTA1Olx0XHRpZiAoIXBtKVxuIDEwNjpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMTA3Olx0XG4gMTA4Olx0XHRuYml0cyA9IHBtLVx1MDAzZXNpemUgKiBCSVRTX1BFUl9CWVRFO1xuIDEwOTpcdFxuIDExMDpcdFx0aWYgKHN0YXJ0ICYjNDM7IHNpemUgXHUwMDNjPSBwbS1cdTAwM2VwaHlzX2Jhc2UpXG4gMTExOlx0XHRcdHJldHVybiBmYWxzZTtcbiAxMTI6XHRcdGlmIChzdGFydCBcdTAwM2MgcG0tXHUwMDNlcGh5c19iYXNlKVxuIDExMzpcdFx0XHRzdGFydCA9IHBtLVx1MDAzZXBoeXNfYmFzZTtcbiAxMTQ6XHRcbiAxMTU6XHRcdGZpcnN0ID0gKHN0YXJ0IC0gcG0tXHUwMDNlcGh5c19iYXNlKSAvIHBtLVx1MDAzZXVuaXRfc2l6ZTtcbiAxMTY6XHRcdGlmIChmaXJzdCBcdTAwM2U9IG5iaXRzKVxuIDExNzpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMTE4Olx0XG4gMTE5Olx0XHRsYXN0ID0gKHN0YXJ0ICYjNDM7IHNpemUgLSAxIC0gcG0tXHUwMDNlcGh5c19iYXNlKSAvIHBtLVx1MDAzZXVuaXRfc2l6ZTtcbiAxMjA6XHRcdGxhc3QgPSBtaW4obGFzdCwgbmJpdHMgLSAxKTtcbiAxMjE6XHRcbiAxMjI6XHRcdHJldHVybiBmaW5kX25leHRfYml0KHBtLVx1MDAzZWJpdG1hcCwgbGFzdCAmIzQzOyAxLCBmaXJzdCkgXHUwMDNjPSBsYXN0O1xuIDEyMzpcdH1cbiAxMjQ6XHRcbiAxMjU6XHQvKlxuIDEyNjpcdCAqIEEgYml0IGlzIG5ldmVyIGNsZWFyZWQ6IGl0IHN0YW5kcyBmb3IgYSB3aG9sZSBFRklfUE9JU09OX1VOSVRfU0laRSwgc28gYW5cbiAxMjc6XHQgKiB1bnBvaXNvbiBjYW5ub3QgdGVsbCB3aGV0aGVyIHRoZSB1bml0IGFzIGEgd2hvbGUgaXMgZ29vZCBhZ2Fpbi5cbiAxMjg6XHQgKi9cbiAxMjk6XHR2b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKVxuIDEzMDpcdHtcbiAxMzE6XHRcdHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSA9IGVmaV9wb2lzb25lZF9tZW1vcnkoKTtcbiAxMzI6XHRcdHBoeXNfYWRkcl90IGFkZHIgPSBQRk5fUEhZUyhwZm4pO1xuIDEzMzpcdFx0dTY0IHVuaXQ7XG4gMTM0Olx0XG4gMTM1Olx0XHRpZiAoIXBtIHx8IGFkZHIgXHUwMDNjIHBtLVx1MDAzZXBoeXNfYmFzZSlcbiAxMzY6XHRcdFx0cmV0dXJuO1xuIDEzNzpcdFxuIDEzODpcdFx0dW5pdCA9IChhZGRyIC0gcG0tXHUwMDNlcGh5c19iYXNlKSAvIHBtLVx1MDAzZXVuaXRfc2l6ZTtcbiAxMzk6XHRcdGlmICh1bml0IFx1MDAzYyBwbS1cdTAwM2VzaXplICogQklUU19QRVJfQllURSlcbiAxNDA6XHRcdFx0c2V0X2JpdCh1bml0LCBwbS1cdTAwM2ViaXRtYXApO1xuIDE0MTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTQ6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM0NzUKCQkJCQkJCW91dHB1dDogMjAyCgkJCQkJCQl0aG91Z2h0czogMTMzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogUG9pc29uZWQgTWVtb3J5IGluIHRoZSBMaW51eCBLZXJuZWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUgYG1tL3BhZ2VfYWxsb2MuY2AgYW5kIGBtbS9tZW1vcnktZmFpbHVyZS5jYCBmaWxlcywgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgdGhlIGludGVyYWN0aW9uIG9mIG1lbW9yeSBwb2lzb25pbmcgd2l0aGluIHRoZSBwYWdlIGFsbG9jYXRpb24gYW5kIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nIHN1YnN5c3RlbXMuIFRoZSBjb2RlIHNuaXBwZXRzIGZvciBgcG9pc29uX2Jsb2NrYCBhbmQgYGh3cG9pc29uX2Jvb3RfcGFnZWAgYXJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZywgZXNwZWNpYWxseSBob3cgdGhleSBpbnRlcmFjdCB3aXRoIGByYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnlgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgcG9pc29uZWQgbWVtb3J5IGlzIGlkZW50aWZpZWQgYW5kIHRoZW4gaGFuZGxlZCBkdXJpbmcgcGFnZSBmcmVlaW5nLCBwYXJ0aWN1bGFybHkgdGhlIFRPRE8gY29tbWVudCBpbiBgX19mcmVlX3BhZ2VzX2NvcmVgLgoKTm93LCB0aGUgS2NvbmZpZyBvcHRpb25zLiBgRUZJX1BPSVNPTkVEX01FTU9SWWAgaXMgd2hhdCBmbGFncyB0aGUgZmVhdHVyZSwgYW5kIGl0IGRlcGVuZHMgb24gYEVGSV9TVFVCYCwgYE1FTU9SWV9GQUlMVVJFYCwgYW5kIGA2NEJJVGAuICBUaGlzIGltcGxpZXMgYSBVRUZJIGVudmlyb25tZW50LCBzb21ldGhpbmcgSSBjYW4gcmVhZGlseSB0ZXN0IGluIFFFTVUuICBgQ09ORklHX0VGSWAgaXMgYSBwcmVyZXF1aXNpdGUgZm9yIGBFRklfU1RVQmAuCgpOZXh0LCB0aGUgZXhlY3V0aW9uIGZsb3cuIEluIGEgUUVNVS9VRUZJIHNldHVwLCB0aGUgRUZJIHN0dWIgaW5pdGlhbGl6ZXMsIHNldHMgdXAgbWVtb3J5IHRhYmxlcywgdGhlIGtlcm5lbCBib290cywgcHJvY2Vzc2VzIHRoZXNlIHRhYmxlcyAoZS5nLiBgZWZpX2NvbmZpZ19wYXJzZV90YWJsZXNgKSwgYW5kIHRoZW4gY2FsbHMgYGVmaV9wb2lzb25lZF9tZW1vcnlfcmVzZXJ2ZSgpYC4gIFJ1bnRpbWUgaW5qZWN0aW9uICh2aWEgYG1hZHZpc2VgIG9yIHN5c2ZzL2RlYnVnZnMpIHRoZW4gdHJpZ2dlcnMgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYC4gQ3JpdGljYWxseSwgYHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeWAgYWxzbyBjb21lcyBpbnRvIHBsYXkgZHVyaW5nIGJvb3QgYW5kIGhvdHBsdWcgb3BlcmF0aW9ucy4KCklzIHRoaXMgZnV6emFibGU/IEFic29sdXRlbHkuIFRoaXMgaXMgY29yZSBNTSBhbmQgRUZJIGNoYW5nZXMuIEZ1bmN0aW9ucyBJIHdhbnQgdG8gZm9jdXMgb246IGBlZmlfaHdwb2lzb25fcmVjb3JkX3BmbmAsIGByYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnlgLCBgaHdwb2lzb25fYm9vdF9wYWdlYCwgYW5kIGBwb2lzb25fYmxvY2tgLiBBbHNvLCBzaW5jZSB0aGUgZnV6emluZyBpcyB0YXJnZXRpbmcgRUZJIGVudmlyb25tZW50cywgb3RoZXIgY2FsbHMgYXJlIHdvcnRoIHRlc3RpbmcsIGBhY3Rpb25fcmVzdWx0YCwgYW5kIGBtZW1vcnlfZmFpbHVyZWAuCgpJJiMzOTtsbCBwaW5wb2ludCB0aGUgZnVuY3Rpb25zIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgYnkgdGhpcyBwYXRjaC4gIGBkcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uY2AgaW50cm9kdWNlcyBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gLCBgcmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5YCwgYW5kIGBlZmlfcG9pc29uZWRfbWVtb3J5X3Jlc2VydmVgLiAgYG1tL21lbW9yeS1mYWlsdXJlLmNgIGdpdmVzIHVzIGBod3BvaXNvbl9ib290X3BhZ2VgLCBgYWN0aW9uX3Jlc3VsdGAsIGFuZCBgbWVtb3J5X2ZhaWx1cmVgLiAgYG1tL3BhZ2VfYWxsb2MuY2AgaGFzIGBfX2ZyZWVfcGFnZXNfY29yZWAuIEhvd2V2ZXIsIGBfX2ZyZWVfcGFnZXNfY29yZWAgaXMgb25seSBkdXJpbmcgYm9vdC9ob3RwbHVnLCB3aGljaCBtYXkgbm90IHJlcXVpcmUgZm9jdXMuIFRoZSByZWxldmFudCBmdW5jdGlvbnMgYXJlIGBlZmlfaHdwb2lzb25fcmVjb3JkX3BmbmAsIGByYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnlgLCBhbmQgYGh3cG9pc29uX2Jvb3RfcGFnZWAuCgpJJiMzOTtsbCBjaGVjayB0aGUgcGF0Y2ggZm9yIHRoZSBvdGhlciBmdW5jdGlvbnM6IGBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZWAsIGBlZmlfcG9pc29uZWRfbWVtb3J5X3Jlc2VydmVgLCBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gLCBgcmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5YCwgYW5kIGBod3BvaXNvbl9ib290X3BhZ2VgLgoKYGFjdGlvbl9yZXN1bHRgIGlzIHN0YXRpYywgYnV0IGBtZW1vcnlfZmFpbHVyZWAgYW5kIHRoZSBvdGhlcnMgYXJlIGdsb2JhbCBzeW1ib2xzLgoKRmluYWxseSwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkOiBgRUZJX1BPSVNPTkVEX01FTU9SWWAsIGBNRU1PUllfRkFJTFVSRWAsIGBFRklfU1RVQmAsIGFuZCBgRUZJYC4KClRoZXJlZm9yZSwgYmFzZWQgb24gbXkgZXhwZXJ0IGFzc2Vzc21lbnQ6CgoqICAgKipXb3J0aEZ1enppbmc6KiogVFJVRQoqICAgKipFbmFibGVDb25maWdzOioqIGBbJiMzNDtFRklfUE9JU09ORURfTUVNT1JZJiMzNDssICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OywgJiMzNDtFRklfU1RVQiYjMzQ7LCAmIzM0O0VGSSYjMzQ7XWAKKiAgICoqRm9jdXNTeW1ib2xzOioqIGBbJiMzNDtlZmlfaHdwb2lzb25fcmVjb3JkX3BmbiYjMzQ7LCAmIzM0O3JhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeSYjMzQ7LCAmIzM0O2h3cG9pc29uX2Jvb3RfcGFnZSYjMzQ7LCAmIzM0O21lbW9yeV9mYWlsdXJlJiMzNDtdYAoqICAgKipSZWFzb25pbmc6KiogVGhlIGludGVyc2VjdGlvbiBvZiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBFRkkvVUVGSSBpbnRlcmFjdGlvbnMsIGFuZCBhIGZlYXR1cmUgZGVzaWduZWQgdG8gZGV0ZWN0IGFuZCBoYW5kbGUgbWVtb3J5IGZhaWx1cmVzIHByZXNlbnRzIGEgaGlnaC12YWx1ZSBmdXp6aW5nIHRhcmdldC4gVGhlIHBvdGVudGlhbCBmb3IgYnVncyBpcyBoaWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RUZJX1BPSVNPTkVEX01FTU9SWSYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LAogICAgJiMzNDtFRklfU1RVQiYjMzQ7LAogICAgJiMzNDtFRkkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlZmlfaHdwb2lzb25fcmVjb3JkX3BmbiYjMzQ7LAogICAgJiMzNDtyYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnkmIzM0OywKICAgICYjMzQ7aHdwb2lzb25fYm9vdF9wYWdlJiMzNDssCiAgICAmIzM0O21lbW9yeV9mYWlsdXJlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdHJhY2tpbmcgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IGFjcm9zcyBrZXhlYyB2aWEgYW4gRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUgKENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZKS4gSXQgaW50cm9kdWNlcyBob29rcyBpbiBjb3JlIG1lbW9yeS1mYWlsdXJlIGhhbmRsaW5nIChlZmlfaHdwb2lzb25fcmVjb3JkX3BmbiBpbiBhY3Rpb25fcmVzdWx0KSBhbmQgbWVtb3J5IGluaXRpYWxpemF0aW9uL2hvdHBsdWcgKF9fZnJlZV9wYWdlc19jb3JlLCBod3BvaXNvbl9ib290X3BhZ2UpLiBUaGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIGF0IHJ1bnRpbWUgdmlhIG1lbW9yeSBmYWlsdXJlIG1lY2hhbmlzbXMgc3VjaCBhcyBtYWR2aXNlKE1BRFZfSFdQT0lTT04pIGFuZCBtZW1vcnkgaG90cGx1Z2dpbmcgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHdpdGggRUZJLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFRklfUE9JU09ORURfTUVNT1JZJiMzNDssCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O0VGSV9TVFVCJiMzNDssCiAgICAmIzM0O0VGSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2VmaV9od3BvaXNvbl9yZWNvcmRfcGZuJiMzNDssCiAgICAmIzM0O3JhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeSYjMzQ7LAogICAgJiMzNDtod3BvaXNvbl9ib290X3BhZ2UmIzM0OywKICAgICYjMzQ7bWVtb3J5X2ZhaWx1cmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0cmFja2luZyBoYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgYWNyb3NzIGtleGVjIHZpYSBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSAoQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUlkpLiBJdCBpbnRyb2R1Y2VzIGhvb2tzIGluIGNvcmUgbWVtb3J5LWZhaWx1cmUgaGFuZGxpbmcgKGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuIGluIGFjdGlvbl9yZXN1bHQpIGFuZCBtZW1vcnkgaW5pdGlhbGl6YXRpb24vaG90cGx1ZyAoX19mcmVlX3BhZ2VzX2NvcmUsIGh3cG9pc29uX2Jvb3RfcGFnZSkuIFRoZXNlIHBhdGhzIGFyZSByZWFjaGFibGUgYXQgcnVudGltZSB2aWEgbWVtb3J5IGZhaWx1cmUgbWVjaGFuaXNtcyBzdWNoIGFzIG1hZHZpc2UoTUFEVl9IV1BPSVNPTikgYW5kIG1lbW9yeSBob3RwbHVnZ2luZyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2l0aCBFRkkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE0OjEwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTQ6MTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBFRkkgcG9pc29uZWQgbWVtb3J5IHRyYWNraW5nIChDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWSkgdG8gcHJlc2VydmUgaGFyZHdhcmUtcG9pc29uZWQgcGFnZSBpbmZvcm1hdGlvbiBhY3Jvc3Mga2V4ZWMgcmVib290cy4gXG5cbjEuIEFsbG9jYXRpb24gXHUwMDI2IEluaXRpYWxpemF0aW9uOiBUaGUgdGFibGUgc3RydWN0dXJlIGBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeWAgYW5kIGl0cyB0cmFpbGluZyBiaXRtYXAgYXJlIGFsbG9jYXRlZCBpbiB0aGUgRUZJIHN0dWIgYW5kIGV4cGxpY2l0bHkgZnVsbHkgaW5pdGlhbGl6ZWQgKGFsbCBoZWFkZXIgZmllbGRzIGFzc2lnbmVkLCBhbmQgYG1lbXNldChwbS1cdTAwM2ViaXRtYXAsIDAsIGJpdG1hcF9zaXplKWAgY2xlYXJzIHRoZSBiaXRtYXApLlxuMi4gTWVtb3J5IEFjY2Vzc2VzOiBSdW50aW1lIG9wZXJhdGlvbnMgKGByYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnlgLCBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gLCBgcG9pc29uX2Jsb2NrYCwgYW5kIGBod3BvaXNvbl9ib290X3BhZ2VgKSBvbmx5IHJlYWQgYW5kIHVwZGF0ZSBmdWxseSBpbml0aWFsaXplZCBtZW1vcnkgc3RydWN0dXJlcyBhbmQgc3RydWN0IHBhZ2UgZmxhZ3MuXG4zLiBObyBVbmluaXRpYWxpemVkIExlYWtzIG9yIFJlYWRzOiBUaGVyZSBhcmUgbm8gZGF0YSB0cmFuc2ZlcnMgdG8gdXNlciBzcGFjZSwgbm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBubyBleHBvc2VkIHBhZGRpbmcuXG40LiBLQVNBTiB2cyBLTVNBTjogUG90ZW50aWFsIHJpc2tzIHN1Y2ggYXMgaW52YWxpZCBwb2ludGVyIG1hdGgsIG91dC1vZi1ib3VuZHMgYml0bWFwIGFjY2Vzc2VzLCBvciBtZW1vcnkgcmVzZXJ2YXRpb24gZXJyb3JzIGFyZSBwcm9wZXJseSBoYW5kbGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBLTVNBTiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhNzljYmIxMDVjNTk4MTdhZjMyYTIyYTAwMTcxZjdiYjkxNDY3NjU0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAxNDowOTowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmkuYyBiL2FyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmkuYwppbmRleCAwYzM5YWRiOTZiOTEyLi4yYjM3Yjk2YTM2ZTA5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaS5jCkBAIC05Myw2ICYjNDM7OTMsOSBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyAqIGNvbnN0IGVmaV90YWJsZXNbXSA9IHsKICNpZmRlZiBDT05GSUdfVU5BQ0NFUFRFRF9NRU1PUlkKIAkmYW1wO2VmaS51bmFjY2VwdGVkLAogI2VuZGlmCiYjNDM7I2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZCiYjNDM7CSZhbXA7ZWZpLnBvaXNvbmVkX21lbW9yeSwKJiM0MzsjZW5kaWYKIH07CiAKIHU2NCBlZmlfc2V0dXA7CQkvKiBlZmkgc2V0dXBfZGF0YSBwaHlzaWNhbCBhZGRyZXNzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZwppbmRleCAyOWUwNzI5Mjk5ZjViLi5hYWZjZDQxYmMwMDYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWcKQEAgLTI2Myw2ICYjNDM7MjYzLDE0IEBAIGNvbmZpZyBFRklfQ09DT19TRUNSRVQKIAkgIHZpcnQvY29jby9lZmlfc2VjcmV0IG1vZHVsZSB0byBhY2Nlc3MgdGhlIHNlY3JldHMsIHdoaWNoIGluIHR1cm4KIAkgIGFsbG93cyB1c2Vyc3BhY2UgcHJvZ3JhbXMgdG8gYWNjZXNzIHRoZSBpbmplY3RlZCBzZWNyZXRzLgogCiYjNDM7Y29uZmlnIEVGSV9QT0lTT05FRF9NRU1PUlkKJiM0MzsJZGVmX2Jvb2wgeQomIzQzOwlkZXBlbmRzIG9uIEVGSV9TVFVCICZhbXA7JmFtcDsgTUVNT1JZX0ZBSUxVUkUgJmFtcDsmYW1wOyA2NEJJVAomIzQzOwloZWxwCiYjNDM7CSAgUmVjb3JkIHBhZ2UgZnJhbWVzIHRoYXQgYXJlIGhhcmR3YXJlLXBvaXNvbmVkIHdoaWxlIHRoaXMga2VybmVsIHJ1bnMKJiM0MzsJICBpbnRvIGFuIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlLCBhbmQgaG9ub3IgdGhhdCB0YWJsZSBlYXJseSBvbiB0aGUKJiM0MzsJICBuZXh0IGtlcm5lbCBzbyBhIGtleGVjIGRvZXMgbm90IGhhbmQga25vd24tYmFkIFJBTSBiYWNrIG91dC4KJiM0MzsKIGNvbmZpZyBPVk1GX0RFQlVHX0xPRwogCWJvb2wgJiMzNDtFeHBvc2UgT1ZNRiBmaXJtd2FyZSBkZWJ1ZyBsb2cgdmlhIHN5c2ZzJiMzNDsKIAlkZXBlbmRzIG9uIEVGSQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGUgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9NYWtlZmlsZQppbmRleCA4ZWZiY2Y2OTllNGZmLi4wNWQwYTQ5MDkyM2U1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9NYWtlZmlsZQpAQCAtNDMsNCAmIzQzOzQzLDUgQEAgb2JqLSQoQ09ORklHX0VGSV9FQVJMWUNPTikJCSYjNDM7PSBlYXJseWNvbi5vCiBvYmotJChDT05GSUdfVUVGSV9DUEVSX0FSTSkJCSYjNDM7PSBjcGVyLWFybS5vCiBvYmotJChDT05GSUdfVUVGSV9DUEVSX1g4NikJCSYjNDM7PSBjcGVyLXg4Ni5vCiBvYmotJChDT05GSUdfVU5BQ0NFUFRFRF9NRU1PUlkpCQkmIzQzOz0gdW5hY2NlcHRlZF9tZW1vcnkubwomIzQzO29iai0kKENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZKQkmIzQzOz0gcG9pc29uLm8KIG9iai0kKENPTkZJR19URUVfU1RNTV9FRkkpCQkmIzQzOz0gc3RtbS90ZWVfc3RtbV9lZmkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYwppbmRleCA2ZDk4N2Q3Zjk3NzgxLi41NWIyZWU1M2ZjMjY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYwpAQCAtNTUsNiAmIzQzOzU1LDkgQEAgc3RydWN0IGVmaSBfX3JlYWRfbW9zdGx5IGVmaSA9IHsKICNpZmRlZiBDT05GSUdfVU5BQ0NFUFRFRF9NRU1PUlkKIAkudW5hY2NlcHRlZAkJPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSLAogI2VuZGlmCiYjNDM7I2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZCiYjNDM7CS5wb2lzb25lZF9tZW1vcnkJPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSLAomIzQzOyNlbmRpZgogfTsKIEVYUE9SVF9TWU1CT0woZWZpKTsKIApAQCAtNjc3LDYgJiM0Mzs2ODAsOSBAQCBzdGF0aWMgY29uc3QgZWZpX2NvbmZpZ190YWJsZV90eXBlX3QgY29tbW9uX3RhYmxlc1tdIF9faW5pdGNvbnN0ID0gewogI2lmZGVmIENPTkZJR19VTkFDQ0VQVEVEX01FTU9SWQogCXtMSU5VWF9FRklfVU5BQ0NFUFRFRF9NRU1fVEFCTEVfR1VJRCwJJmFtcDtlZmkudW5hY2NlcHRlZCwJJiMzNDtVbmFjY2VwdGVkJiMzNDsJfSwKICNlbmRpZgomIzQzOyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWQomIzQzOwl7TElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWV9UQUJMRV9HVUlELAkmYW1wO2VmaS5wb2lzb25lZF9tZW1vcnksCSYjMzQ7UE9JU09OJiMzNDsJfSwKJiM0MzsjZW5kaWYKICNpZmRlZiBDT05GSUdfRUZJX0dFTkVSSUNfU1RVQgogCXtMSU5VWF9FRklfUFJJTUFSWV9ESVNQTEFZX1RBQkxFX0dVSUQsCSZhbXA7cHJpbWFyeV9kaXNwbGF5X3RhYmxlCQkJfSwKICNlbmRpZgpAQCAtODc3LDYgJiM0Mzs4ODMsOCBAQCBpbnQgX19pbml0IGVmaV9jb25maWdfcGFyc2VfdGFibGVzKGNvbnN0IGVmaV9jb25maWdfdGFibGVfdCAqY29uZmlnX3RhYmxlcywKIAkJfQogCX0KIAomIzQzOwllZmlfcG9pc29uZWRfbWVtb3J5X3Jlc2VydmUoKTsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmMKaW5kZXggNDhmOTNmNzc1OGU5ZS4uNWNiZTY3NTQ5MTMzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jCkBAIC03NzQsMyAmIzQzOzc3NCwxMDMgQEAgdm9pZCBlZmlfcmVtYXBfaW1hZ2UodW5zaWduZWQgbG9uZyBpbWFnZV9iYXNlLCB1bnNpZ25lZCBhbGxvY19zaXplLAogCQkJZWZpX3dhcm4oJiMzNDtGYWlsZWQgdG8gcmVtYXAgZGF0YSByZWdpb24gbm9uLWV4ZWN1dGFibGVcbiYjMzQ7KTsKIAl9CiB9CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZCiYjNDM7LyoKJiM0MzsgKiBGaW5kIHRoZSBiYXNlIGFuZCB0b3Agb2YgdGhlIG1lbW9yeSwgc28sIHdlIGNhbiBjcmVhdGUgdGhlIGJpdG1hcCBmb3IKJiM0MzsgKiB0aGUgZnVsbCByYW5nZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgZWZpX3N0YXR1c190IGVmaV9nZXRfcmFtX3JhbmdlKHU2NCAqYmFzZSwgdTY0ICp0b3ApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZWZpX2Jvb3RfbWVtbWFwICptYXAgX19mcmVlKGVmaV9wb29sKSA9IE5VTEw7CiYjNDM7CXU2NCByYW1fYmFzZSA9IFVMTE9OR19NQVgsIHJhbV90b3AgPSAwOwomIzQzOwllZmlfc3RhdHVzX3Qgc3RhdHVzOwomIzQzOwlpbnQgaSwgbnJfZGVzYzsKJiM0MzsKJiM0MzsJc3RhdHVzID0gZWZpX2dldF9tZW1vcnlfbWFwKCZhbXA7bWFwLCBmYWxzZSk7CiYjNDM7CWlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpCiYjNDM7CQlyZXR1cm4gc3RhdHVzOwomIzQzOwomIzQzOwlucl9kZXNjID0gbWFwLSZndDttYXBfc2l6ZSAvIG1hcC0mZ3Q7ZGVzY19zaXplOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnJfZGVzYzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWVmaV9tZW1vcnlfZGVzY190ICpkOwomIzQzOwomIzQzOwkJZCA9IGVmaV9tZW1kZXNjX3B0cigodW5zaWduZWQgbG9uZyltYXAtJmd0O21hcCwgbWFwLSZndDtkZXNjX3NpemUsIGkpOwomIzQzOwkJcmFtX2Jhc2UgPSBtaW4ocmFtX2Jhc2UsIGQtJmd0O3BoeXNfYWRkcik7CiYjNDM7CQlyYW1fdG9wID0gbWF4KHJhbV90b3AsCiYjNDM7CQkJICAgICAgZC0mZ3Q7cGh5c19hZGRyICYjNDM7IGQtJmd0O251bV9wYWdlcyAqIEVGSV9QQUdFX1NJWkUpOwomIzQzOwl9CiYjNDM7CWlmICghcmFtX3RvcCB8fCByYW1fYmFzZSA9PSBVTExPTkdfTUFYKQomIzQzOwkJcmV0dXJuIEVGSV9OT1RfRk9VTkQ7CiYjNDM7CiYjNDM7CSpiYXNlID0gcm91bmRfZG93bihyYW1fYmFzZSwgRUZJX1BPSVNPTl9VTklUX1NJWkUpOwomIzQzOwkqdG9wID0gcm91bmRfdXAocmFtX3RvcCwgRUZJX1BPSVNPTl9VTklUX1NJWkUpOwomIzQzOwomIzQzOwlyZXR1cm4gRUZJX1NVQ0NFU1M7CiYjNDM7fQomIzQzOwomIzQzOy8qIFRoZSBzaXplIG9mIHRoZSBiaXRtYXAgKi8KJiM0MztzdGF0aWMgdTY0IGVmaV9wb2lzb25fYml0bWFwX3NpemUodTY0IHNwYW4pCiYjNDM7ewomIzQzOwl1NjQgYnl0ZXMgPSBESVZfUk9VTkRfVVAoRElWX1JPVU5EX1VQKHNwYW4sIEVGSV9QT0lTT05fVU5JVF9TSVpFKSwKJiM0MzsJCQkJIEJJVFNfUEVSX0JZVEUpOwomIzQzOwomIzQzOwlyZXR1cm4gcm91bmRfdXAoYnl0ZXMsIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqZWZpX3BvaXNvbl9hbGxvYyh1NjQgcGh5c19iYXNlLAomIzQzOwkJCQkJCQkgIHU2NCBiaXRtYXBfc2l6ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTsKJiM0MzsJZWZpX3N0YXR1c190IHN0YXR1czsKJiM0MzsKJiM0MzsJc3RhdHVzID0gZWZpX2JzX2NhbGwoYWxsb2NhdGVfcG9vbCwgRUZJX0FDUElfUkVDTEFJTV9NRU1PUlksCiYjNDM7CQkJICAgICBzaXplb2YoKnBtKSAmIzQzOyBiaXRtYXBfc2l6ZSwgKHZvaWQgKiopJmFtcDtwbSk7CiYjNDM7CWlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJcG0tJmd0O3ZlcnNpb24gPSAxOwomIzQzOwlwbS0mZ3Q7dW5pdF9zaXplID0gRUZJX1BPSVNPTl9VTklUX1NJWkU7CiYjNDM7CXBtLSZndDtwaHlzX2Jhc2UgPSBwaHlzX2Jhc2U7CiYjNDM7CXBtLSZndDtzaXplID0gYml0bWFwX3NpemU7CiYjNDM7CW1lbXNldChwbS0mZ3Q7Yml0bWFwLCAwLCBiaXRtYXBfc2l6ZSk7CiYjNDM7CiYjNDM7CXJldHVybiBwbTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogVGhpcyBuZWVkcyB0byBiZSBkb25lIHdoaWxlIGJvb3Qgc2VydmljZSBpcyBzdGlsbCBhY3RpdmUgKi8KJiM0Mzt2b2lkIGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKHZvaWQpCiYjNDM7ewomIzQzOwllZmlfZ3VpZF90IHBvaXNvbmVkX21lbW9yeV90YWJsZV9ndWlkID0gTElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWV9UQUJMRV9HVUlEOwomIzQzOwlzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG07CiYjNDM7CXU2NCByYW1fYmFzZSwgcmFtX3RvcCwgYml0bWFwX3NpemU7CiYjNDM7CWVmaV9zdGF0dXNfdCBzdGF0dXM7CiYjNDM7CiYjNDM7CS8qIEEgdGFibGUgaW5zdGFsbGVkIGJ5IGFuIGVhcmxpZXIgYm9vdCByaWRlcyB0aGUgc3lzdGVtIHRhYmxlIGFjcm9zcyBrZXhlYy4gKi8KJiM0MzsJcG0gPSBnZXRfZWZpX2NvbmZpZ190YWJsZShwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCk7CiYjNDM7CWlmIChwbSkgewomIzQzOwkJaWYgKHBtLSZndDt2ZXJzaW9uICE9IDEpCiYjNDM7CQkJZWZpX2VycigmIzM0O1Vua25vd24gdmVyc2lvbiBvZiBwb2lzb25lZC1tZW1vcnkgdGFibGVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZWZpX2dldF9yYW1fcmFuZ2UoJmFtcDtyYW1fYmFzZSwgJmFtcDtyYW1fdG9wKSAhPSBFRklfU1VDQ0VTUykgewomIzQzOwkJZWZpX2VycigmIzM0O0ZhaWxlZCB0byBzaXplIHRoZSBwb2lzb25lZC1tZW1vcnkgdGFibGUhXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJYml0bWFwX3NpemUgPSBlZmlfcG9pc29uX2JpdG1hcF9zaXplKHJhbV90b3AgLSByYW1fYmFzZSk7CiYjNDM7CXBtID0gZWZpX3BvaXNvbl9hbGxvYyhyYW1fYmFzZSwgYml0bWFwX3NpemUpOwomIzQzOwlpZiAoIXBtKSB7CiYjNDM7CQllZmlfZXJyKCYjMzQ7RmFpbGVkIHRvIGFsbG9jYXRlIHBvaXNvbmVkLW1lbW9yeSB0YWJsZSFcbiYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlzdGF0dXMgPSBlZmlfYnNfY2FsbChpbnN0YWxsX2NvbmZpZ3VyYXRpb25fdGFibGUsCiYjNDM7CQkJICAgICAmYW1wO3BvaXNvbmVkX21lbW9yeV90YWJsZV9ndWlkLCBwbSk7CiYjNDM7CWlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIHsKJiM0MzsJCWVmaV9ic19jYWxsKGZyZWVfcG9vbCwgcG0pOwomIzQzOwkJZWZpX2VycigmIzM0O0ZhaWxlZCB0byBpbnN0YWxsIHBvaXNvbmVkLW1lbW9yeSBjb25maWcgdGFibGUhXG4mIzM0Oyk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7I2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmMKaW5kZXggMjM1Yzk3MzhkYTJkNi4uMjJhMzE1ZTI4MTRhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuYwpAQCAtMTc5LDYgJiM0MzsxNzksNyBAQCBlZmlfc3RhdHVzX3QgZWZpX3N0dWJfY29tbW9uKGVmaV9oYW5kbGVfdCBoYW5kbGUsCiAJCQkgRUZJX1JUX1NVUFBPUlRFRF9TRVRfVklSVFVBTF9BRERSRVNTX01BUCk7CiAKIAlpbnN0YWxsX21lbXJlc2VydmVfdGFibGUoKTsKJiM0MzsJaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUoKTsKIAogCXN0YXR1cyA9IGVmaV9ib290X2tlcm5lbChoYW5kbGUsIGltYWdlLCBpbWFnZV9hZGRyLCBjbWRsaW5lX3B0cik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmgKaW5kZXggZmQ5MWZjMTVlYzgxMC4uNDQ0MzY4NjljNGVmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmgKQEAgLTExNjksNiAmIzQzOzExNjksMTIgQEAgZWZpX2VuYWJsZV9yZXNldF9hdHRhY2tfbWl0aWdhdGlvbih2b2lkKSB7IH0KIAogdm9pZCBlZmlfcmV0cmlldmVfZXZlbnRsb2codm9pZCk7CiAKJiM0MzsjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUlkKJiM0Mzt2b2lkIGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKHZvaWQpOwomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKHZvaWQpIHsgfQomIzQzOyNlbmRpZgomIzQzOwogc3RydWN0IHN5c2ZiX2Rpc3BsYXlfaW5mbyAqYWxsb2NfcHJpbWFyeV9kaXNwbGF5KHZvaWQpOwogc3RydWN0IHN5c2ZiX2Rpc3BsYXlfaW5mbyAqX19hbGxvY19wcmltYXJ5X2Rpc3BsYXkodm9pZCk7CiB2b2lkIGZyZWVfcHJpbWFyeV9kaXNwbGF5KHN0cnVjdCBzeXNmYl9kaXNwbGF5X2luZm8gKmRweSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmMKaW5kZXggMGJhZTBmMDZiNjc2My4uMzEzNjEzMmI5NjI4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuYwpAQCAtMTAyNCw2ICYjNDM7MTAyNCw4IEBAIHZvaWQgX19ub3JldHVybiBlZmlfc3R1Yl9lbnRyeShlZmlfaGFuZGxlX3QgaGFuZGxlLAogCiAJc2V0dXBfdW5hY2NlcHRlZF9tZW1vcnkoKTsKIAomIzQzOwlpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSgpOwomIzQzOwogCXN0YXR1cyA9IGV4aXRfYm9vdChib290X3BhcmFtcywgaGFuZGxlKTsKIAlpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7CiAJCWVmaV9lcnIoJiMzNDtleGl0X2Jvb3QoKSBmYWlsZWQhXG4mIzM0Oyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmUxNmQ0M2Y0NDM4ZWUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYwpAQCAtMCwwICYjNDM7MSwxNDEgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7LyoKJiM0MzsgKiBSdW50aW1lIHNpZGUgb2YgdGhlIExJTlVYX0VGSV9QT0lTT05FRF9NRU1PUlkgdGFibGU6IG9uZSBiaXQgcGVyCiYjNDM7ICogRUZJX1BPSVNPTl9VTklUX1NJWkUsIHNldCBoZXJlIGFzIGZyYW1lcyBnbyBiYWQsIGhvbm9yZWQgYnkgdGhlIG5leHQga2VybmVsLgomIzQzOyAqCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBCcmVubyBMZWl0YW8gJmx0O2xlaXRhb0BkZWJpYW4ub3JnJmd0OwomIzQzOyAqLwomIzQzOwomIzQzOyNkZWZpbmUgcHJfZm10KGZtdCkgJiMzNDtlZmk6ICYjMzQ7IGZtdAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaXRtYXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZWZpLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xvZzIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWVtYmxvY2suaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW0uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb3ZlcmZsb3cuaCZndDsKJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBfX2luaXQKJiM0MztlZmlfcG9pc29uX2dlb21ldHJ5X3ZhbGlkKGNvbnN0IHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSkKJiM0Mzt7CiYjNDM7CXU2NCBuYml0czsKJiM0MzsKJiM0MzsJLyogV2hvbGUgd29yZHMsIGFuZCBhIGJpdCBjb3VudCB0aGF0IGNhbiBiZSB0YWtlbiB3aXRob3V0IHdyYXBwaW5nLiAqLwomIzQzOwlpZiAoIXBtLSZndDtzaXplIHx8ICFJU19BTElHTkVEKHBtLSZndDtzaXplLCBzaXplb2YodW5zaWduZWQgbG9uZykpIHx8CiYjNDM7CSAgICBjaGVja19tdWxfb3ZlcmZsb3cocG0tJmd0O3NpemUsICh1NjQpQklUU19QRVJfQllURSwgJmFtcDtuYml0cykpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChwbS0mZ3Q7dW5pdF9zaXplICZsdDsgUEFHRV9TSVpFIHx8ICFpc19wb3dlcl9vZl8yKHBtLSZndDt1bml0X3NpemUpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gSVNfQUxJR05FRChwbS0mZ3Q7cGh5c19iYXNlLCBwbS0mZ3Q7dW5pdF9zaXplKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogVGhlIHRhYmxlIG1heSBjb21lIGZyb20gYW4gZWFybGllciBrZXJuZWwsIHNvIHZldCBpdCBiZWZvcmUgdXNpbmcgaXQuICovCiYjNDM7c3RhdGljIGJvb2wgX19pbml0CiYjNDM7ZWZpX3BvaXNvbl90YWJsZV92YWxpZChjb25zdCBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0pCiYjNDM7ewomIzQzOwlpZiAocG0tJmd0O3ZlcnNpb24gIT0gMSkgewomIzQzOwkJcHJfd2FybigmIzM0O0lnbm9yaW5nIHBvaXNvbmVkLW1lbW9yeSB0YWJsZSB3aXRoIHZlcnNpb24gJXVcbiYjMzQ7LAomIzQzOwkJCXBtLSZndDt2ZXJzaW9uKTsKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWVmaV9wb2lzb25fZ2VvbWV0cnlfdmFsaWQocG0pKSB7CiYjNDM7CQlwcl93YXJuKCYjMzQ7SWdub3JpbmcgbWFsZm9ybWVkIHBvaXNvbmVkLW1lbW9yeSB0YWJsZVxuJiMzNDspOwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFZldCB0aGUgaW5oZXJpdGVkIHRhYmxlIGFuZCBoYW5kIGl0cyBwYWdlcyB0byBtZW1ibG9jaywgdGhlIHdheSB0aGUKJiM0MzsgKiB1bmFjY2VwdGVkIG1lbW9yeSB0YWJsZSBpcyBoYW5kbGVkLiBJdCBpcyBFRkkgQUNQSSByZWNsYWltIG1lbW9yeSwgd2hpY2gKJiM0MzsgKiBiZWNvbWVzIEU4MjBfVFlQRV9BQ1BJIGFuZCB3b3VsZCBvdGhlcndpc2Ugc3RheSBvdXQgb2YgdGhlIGRpcmVjdCBtYXAsIGFuZAomIzQzOyAqIHRvdWNoaW5nIGl0IHRoZW4gZmF1bHRzLiBDYWxsZWQgZnJvbSBlZmlfY29uZmlnX3BhcnNlX3RhYmxlcygpLCBzbwomIzQzOyAqIGV2ZXJ5dGhpbmcgbGF0ZXIgY2FuIHJlYWNoIGl0IHdpdGggZWZpX3BvaXNvbmVkX21lbW9yeSgpLgomIzQzOyAqLwomIzQzO3ZvaWQgX19pbml0IGVmaV9wb2lzb25lZF9tZW1vcnlfcmVzZXJ2ZSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtOwomIzQzOwlwaHlzX2FkZHJfdCBzdGFydCwgZW5kOwomIzQzOwomIzQzOwlpZiAoZWZpLnBvaXNvbmVkX21lbW9yeSA9PSBFRklfSU5WQUxJRF9UQUJMRV9BRERSKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlwbSA9IGVhcmx5X21lbXJlbWFwKGVmaS5wb2lzb25lZF9tZW1vcnksIHNpemVvZigqcG0pKTsKJiM0MzsJaWYgKCFwbSkgewomIzQzOwkJcHJfd2FybigmIzM0O0NvdWxkIG5vdCBtYXAgcG9pc29uZWQtbWVtb3J5IHRhYmxlXG4mIzM0Oyk7CiYjNDM7CQllZmkucG9pc29uZWRfbWVtb3J5ID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUjsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWVmaV9wb2lzb25fdGFibGVfdmFsaWQocG0pKSB7CiYjNDM7CQllZmkucG9pc29uZWRfbWVtb3J5ID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUjsKJiM0MzsJCWVhcmx5X21lbXVubWFwKHBtLCBzaXplb2YoKnBtKSk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3RhcnQgPSBQQUdFX0FMSUdOX0RPV04oZWZpLnBvaXNvbmVkX21lbW9yeSk7CiYjNDM7CWVuZCA9IFBBR0VfQUxJR04oZWZpLnBvaXNvbmVkX21lbW9yeSAmIzQzOyBzaXplb2YoKnBtKSAmIzQzOyBwbS0mZ3Q7c2l6ZSk7CiYjNDM7CWVhcmx5X21lbXVubWFwKHBtLCBzaXplb2YoKnBtKSk7CiYjNDM7CiYjNDM7CW1lbWJsb2NrX2FkZChzdGFydCwgZW5kIC0gc3RhcnQpOwomIzQzOwltZW1ibG9ja19yZXNlcnZlKHN0YXJ0LCBlbmQgLSBzdGFydCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFRoZSB0YWJsZSwgdmV0dGVkIGF0IHBhcnNlIHRpbWUsIG9yIE5VTEwgaWYgdGhpcyBib290IGhhcyBub25lLiAqLwomIzQzO3N0YXRpYyBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqZWZpX3BvaXNvbmVkX21lbW9yeSh2b2lkKQomIzQzO3sKJiM0MzsJaWYgKGVmaS5wb2lzb25lZF9tZW1vcnkgPT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUikKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlyZXR1cm4gcGh5c190b192aXJ0KGVmaS5wb2lzb25lZF9tZW1vcnkpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBEb2VzIHRoZSByYW5nZSBjb3ZlciBhIHVuaXQgYW4gZWFybGllciBrZXJuZWwgcmVjb3JkZWQgYXMgYmFkPyAqLwomIzQzO2Jvb2wgcmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5KHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0gPSBlZmlfcG9pc29uZWRfbWVtb3J5KCk7CiYjNDM7CXU2NCBmaXJzdCwgbGFzdCwgbmJpdHM7CiYjNDM7CiYjNDM7CWlmICghcG0pCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CW5iaXRzID0gcG0tJmd0O3NpemUgKiBCSVRTX1BFUl9CWVRFOwomIzQzOwomIzQzOwlpZiAoc3RhcnQgJiM0Mzsgc2l6ZSAmbHQ7PSBwbS0mZ3Q7cGh5c19iYXNlKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwlpZiAoc3RhcnQgJmx0OyBwbS0mZ3Q7cGh5c19iYXNlKQomIzQzOwkJc3RhcnQgPSBwbS0mZ3Q7cGh5c19iYXNlOwomIzQzOwomIzQzOwlmaXJzdCA9IChzdGFydCAtIHBtLSZndDtwaHlzX2Jhc2UpIC8gcG0tJmd0O3VuaXRfc2l6ZTsKJiM0MzsJaWYgKGZpcnN0ICZndDs9IG5iaXRzKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlsYXN0ID0gKHN0YXJ0ICYjNDM7IHNpemUgLSAxIC0gcG0tJmd0O3BoeXNfYmFzZSkgLyBwbS0mZ3Q7dW5pdF9zaXplOwomIzQzOwlsYXN0ID0gbWluKGxhc3QsIG5iaXRzIC0gMSk7CiYjNDM7CiYjNDM7CXJldHVybiBmaW5kX25leHRfYml0KHBtLSZndDtiaXRtYXAsIGxhc3QgJiM0MzsgMSwgZmlyc3QpICZsdDs9IGxhc3Q7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQSBiaXQgaXMgbmV2ZXIgY2xlYXJlZDogaXQgc3RhbmRzIGZvciBhIHdob2xlIEVGSV9QT0lTT05fVU5JVF9TSVpFLCBzbyBhbgomIzQzOyAqIHVucG9pc29uIGNhbm5vdCB0ZWxsIHdoZXRoZXIgdGhlIHVuaXQgYXMgYSB3aG9sZSBpcyBnb29kIGFnYWluLgomIzQzOyAqLwomIzQzO3ZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0gPSBlZmlfcG9pc29uZWRfbWVtb3J5KCk7CiYjNDM7CXBoeXNfYWRkcl90IGFkZHIgPSBQRk5fUEhZUyhwZm4pOwomIzQzOwl1NjQgdW5pdDsKJiM0MzsKJiM0MzsJaWYgKCFwbSB8fCBhZGRyICZsdDsgcG0tJmd0O3BoeXNfYmFzZSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJdW5pdCA9IChhZGRyIC0gcG0tJmd0O3BoeXNfYmFzZSkgLyBwbS0mZ3Q7dW5pdF9zaXplOwomIzQzOwlpZiAodW5pdCAmbHQ7IHBtLSZndDtzaXplICogQklUU19QRVJfQllURSkKJiM0MzsJCXNldF9iaXQodW5pdCwgcG0tJmd0O2JpdG1hcCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lZmkuaCBiL2luY2x1ZGUvbGludXgvZWZpLmgKaW5kZXggYzM1NDQ2YTBiNjZmYS4uNTY0MDJmZGNjZDExNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9lZmkuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2VmaS5oCkBAIC0yMyw2ICYjNDM7MjMsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3BzdG9yZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JhbmdlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmVib290LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NpemVzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdXVpZC5oJmd0OwogCiAjaW5jbHVkZSAmbHQ7YXNtL3BhZ2UuaCZndDsKQEAgLTQyMiw2ICYjNDM7NDIzLDcgQEAgdm9pZCBlZmlfbmF0aXZlX3J1bnRpbWVfc2V0dXAodm9pZCk7CiAjZGVmaW5lIExJTlVYX0VGSV9DT0NPX1NFQ1JFVF9BUkVBX0dVSUQJCUVGSV9HVUlEKDB4YWRmOTU2YWQsIDB4ZTk4YywgMHg0ODRjLCAgMHhhZSwgMHgxMSwgMHhiNSwgMHgxYywgMHg3ZCwgMHgzMywgMHg2NCwgMHg0NykKICNkZWZpbmUgTElOVVhfRUZJX0JPT1RfTUVNTUFQX0dVSUQJCUVGSV9HVUlEKDB4ODAwZjY4M2YsIDB4ZDA4YiwgMHg0MjNhLCAgMHhhMiwgMHg5MywgMHg5NiwgMHg1YywgMHgzYywgMHg2ZiwgMHhlMiwgMHhiNCkKICNkZWZpbmUgTElOVVhfRUZJX1VOQUNDRVBURURfTUVNX1RBQkxFX0dVSUQJRUZJX0dVSUQoMHhkNWQxZGUzYywgMHgxMDVjLCAweDQ0ZjksICAweDllLCAweGE5LCAweGJjLCAweGVmLCAweDk4LCAweDEyLCAweDAwLCAweDMxKQomIzQzOyNkZWZpbmUgTElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWV9UQUJMRV9HVUlECUVGSV9HVUlEKDB4YWY4MjhhMTUsIDB4MGVmNCwgMHg0MzlhLCAgMHhiOCwgMHg2YSwgMHhkNiwgMHhkNiwgMHg5ZSwgMHhhZiwgMHhiYSwgMHhmYSkKIAogI2RlZmluZSBSSVNDVl9FRklfQk9PVF9QUk9UT0NPTF9HVUlECQlFRklfR1VJRCgweGNjZDE1ZmVjLCAweDZmNzMsIDB4NGVlYywgIDB4ODMsIDB4OTUsIDB4M2UsIDB4NjksIDB4ZTQsIDB4YjksIDB4NDAsIDB4YmYpCiAKQEAgLTY1MCw2ICYjNDM7NjUyLDcgQEAgZXh0ZXJuIHN0cnVjdCBlZmkgewogCXVuc2lnbmVkIGxvbmcJCQltb2t2YXJfdGFibGU7CQkvKiBNT0sgdmFyaWFibGUgY29uZmlnIHRhYmxlICovCiAJdW5zaWduZWQgbG9uZwkJCWNvY29fc2VjcmV0OwkJLyogQ29uZmlkZW50aWFsIGNvbXB1dGluZyBzZWNyZXQgdGFibGUgKi8KIAl1bnNpZ25lZCBsb25nCQkJdW5hY2NlcHRlZDsJCS8qIFVuYWNjZXB0ZWQgbWVtb3J5IHRhYmxlICovCiYjNDM7CXVuc2lnbmVkIGxvbmcJCQlwb2lzb25lZF9tZW1vcnk7CS8qIEhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSB0YWJsZSAqLwogCiAJZWZpX2dldF90aW1lX3QJCQkqZ2V0X3RpbWU7CiAJZWZpX3NldF90aW1lX3QJCQkqc2V0X3RpbWU7CkBAIC0xMjcyLDYgJiM0MzsxMjc1LDI1IEBAIHN0cnVjdCBsaW51eF9lZmlfbWVtcmVzZXJ2ZSB7CiAjZGVmaW5lIEVGSV9NRU1SRVNFUlZFX0NPVU5UKHNpemUpICgoKHNpemUpIC0gc2l6ZW9mKHN0cnVjdCBsaW51eF9lZmlfbWVtcmVzZXJ2ZSkpIFwKIAkvIHNpemVvZl9maWVsZChzdHJ1Y3QgbGludXhfZWZpX21lbXJlc2VydmUsIGVudHJ5WzBdKSkKIAomIzQzOy8qIEJpdCBOIGNvdmVycyB0aGUgdW5pdCBhdCBAcGh5c19iYXNlICYjNDM7IE4gKiBAdW5pdF9zaXplLiAqLwomIzQzO3N0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5IHsKJiM0MzsJdTMyCQl2ZXJzaW9uOwomIzQzOwl1MzIJCXVuaXRfc2l6ZTsJLyogYnl0ZXMgb2YgcGh5cyBzcGFjZSBwZXIgYml0bWFwIGJpdCAqLwomIzQzOwl1NjQJCXBoeXNfYmFzZTsJLyogYWRkcmVzcyB0aGUgZmlyc3QgYml0IGNvdmVycyAqLwomIzQzOwl1NjQJCXNpemU7CQkvKiBiaXRtYXAgc2l6ZSBpbiBieXRlcyAqLwomIzQzOwl1bnNpZ25lZCBsb25nCWJpdG1hcFtdOwomIzQzO307CiYjNDM7CiYjNDM7I2RlZmluZSBFRklfUE9JU09OX1VOSVRfU0laRQlTWl8yTQomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWQomIzQzO3ZvaWQgX19pbml0IGVmaV9wb2lzb25lZF9tZW1vcnlfcmVzZXJ2ZSh2b2lkKTsKJiM0Mzt2b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBlZmlfcG9pc29uZWRfbWVtb3J5X3Jlc2VydmUodm9pZCkgeyB9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKSB7IH0KJiM0MzsjZW5kaWYKJiM0MzsKIHZvaWQgX19pbml0IGVmaV9hcmNoX21lbV9yZXNlcnZlKHBoeXNfYWRkcl90IGFkZHIsIHU2NCBzaXplKTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCAyNzRmYTg4MDA3N2M1Li45ZDlmMmU4ZmRjMTM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC01MjI1LDYgJiM0Mzs1MjI1LDcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbWVtb3J5X2ZhaWx1cmVfYXR0cl9ncm91cDsKIGV4dGVybiB2b2lkIG1lbW9yeV9mYWlsdXJlX3F1ZXVlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpOwogdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfaW5jKHVuc2lnbmVkIGxvbmcgcGZuKTsKIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX3N1Yih1bnNpZ25lZCBsb25nIHBmbiwgbG9uZyBpKTsKJiM0Mzt2b2lkIF9fbWVtaW5pdCBod3BvaXNvbl9ib290X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpOwogcGh5c19hZGRyX3QgcmFuZ2VfZmlyc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiBwaHlzX2FkZHJfdCByYW5nZV9sYXN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpOwogI2Vsc2UKQEAgLTUyMzIsNiAmIzQzOzUyMzMsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbW9yeV9mYWlsdXJlX3F1ZXVlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpCiB7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaHdwb2lzb25fYm9vdF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQomIzQzO3sKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX2luYyh1bnNpZ25lZCBsb25nIHBmbikKIHsKIH0KQEAgLTUzODcsNiAmIzQzOzUzOTIsMjAgQEAgc3RhdGljIGlubGluZSBib29sIHBmbl9pc191bmFjY2VwdGVkX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbikKIAlyZXR1cm4gcmFuZ2VfY29udGFpbnNfdW5hY2NlcHRlZF9tZW1vcnkocGZuICZsdDsmbHQ7IFBBR0VfU0hJRlQsIFBBR0VfU0laRSk7CiB9CiAKJiM0MzsjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUlkKJiM0MzsKJiM0Mztib29sIHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeShwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKTsKJiM0MzsKJiM0MzsjZWxzZQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCByYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnkocGh5c19hZGRyX3Qgc3RhcnQsCiYjNDM7CQkJCQkJICB1bnNpZ25lZCBsb25nIHNpemUpCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzOyNlbmRpZgomIzQzOwogdm9pZCB2bWFfcGd0YWJsZV93YWxrX2JlZ2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKIHZvaWQgdm1hX3BndGFibGVfd2Fsa19lbmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwogCmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuYwppbmRleCBhMmNhOGRmNTAxY2FlLi5mNmFmZGIyYTg5YTk0IDEwMDY0NAotLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS1mYWlsdXJlLmMKQEAgLTQzLDYgJiM0Mzs0Myw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvc2lnbmFsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvdGFzay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2RheC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9lZmkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rc20uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ybWFwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXhwb3J0LmgmZ3Q7CkBAIC0xMzYsNiAmIzQzOzEzNywyMSBAQCBwaHlzX2FkZHJfdCByYW5nZV9sYXN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpCiAJcmV0dXJuIHJhbmdlX2h3cG9pc29uKHN0YXJ0LCBzaXplLCBmYWxzZSk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCB1cGRhdGVfcGVyX25vZGVfbWZfc3RhdHModW5zaWduZWQgbG9uZyBwZm4sIGVudW0gbWZfcmVzdWx0IHJlc3VsdCk7CiYjNDM7CiYjNDM7LyogTm90IG51bV9wb2lzb25lZF9wYWdlc19pbmMoKTogaXRzIHBlciBibG9jayBoYWxmIGRpdmlkZXMgYnkgemVybyB0aGlzIGVhcmx5LiAqLwomIzQzO3ZvaWQgX19tZW1pbml0IGh3cG9pc29uX2Jvb3RfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKJiM0Mzt7CiYjNDM7CWlmIChQYWdlSFdQb2lzb24ocGFnZSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CVNldFBhZ2VIV1BvaXNvbihwYWdlKTsKJiM0MzsJc2V0X3BhZ2VfY291bnQocGFnZSwgMSk7CiYjNDM7CS8qIFRoZSBwYWdlIGhhcyBiZWVuIGNvbXBsZXRlbHkgaXNvbGF0ZWQgPT0gTUZfUkVDT1ZFUkVEICovCiYjNDM7CXVwZGF0ZV9wZXJfbm9kZV9tZl9zdGF0cyhwYWdlX3RvX3BmbihwYWdlKSwgTUZfUkVDT1ZFUkVEKTsKJiM0MzsJYXRvbWljX2xvbmdfaW5jKCZhbXA7bnVtX3BvaXNvbmVkX3BhZ2VzKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIE1GX0FUVFJfUk8gLSBDcmVhdGUgc3lzZnMgZW50cnkgZm9yIGVhY2ggbWVtb3J5IGZhaWx1cmUgc3RhdGlzdGljcy4KICAqIEBfbmFtZTogbmFtZSBvZiB0aGUgZmlsZSBpbiB0aGUgcGVyIE5VTUEgc3lzZnMgZGlyZWN0b3J5LgpAQCAtMTMyNiw2ICYjNDM7MTM0Miw4IEBAIHN0YXRpYyBpbnQgYWN0aW9uX3Jlc3VsdCh1bnNpZ25lZCBsb25nIHBmbiwgZW51bSBtZl9hY3Rpb25fcGFnZV90eXBlIHR5cGUsCiAJaWYgKHR5cGUgIT0gTUZfTVNHX0FMUkVBRFlfUE9JU09ORUQgJmFtcDsmYW1wOyB0eXBlICE9IE1GX01TR19QRk5fTUFQKSB7CiAJCW51bV9wb2lzb25lZF9wYWdlc19pbmMocGZuKTsKIAkJdXBkYXRlX3Blcl9ub2RlX21mX3N0YXRzKHBmbiwgcmVzdWx0KTsKJiM0MzsJCS8qIE9ubHkgaGFyZCBvZmZsaW5lcyBhcmUgY2FycmllZCBvdmVyIHRvIHRoZSBuZXh0IGtlcm5lbC4gKi8KJiM0MzsJCWVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHBmbik7CiAJfQogCiAJcHJfZXJyKCYjMzQ7JSNseDogcmVjb3ZlcnkgYWN0aW9uIGZvciAlczogJXNcbiYjMzQ7LApkaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jCmluZGV4IDQwNDg5NmI1MzAwM2UuLjllMmNlODMzZmQ0MDkgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTE1NzksNiAmIzQzOzE1NzksMTkgQEAgc3RhdGljIHZvaWQgX19mcmVlX3BhZ2VzX29rKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsCiAJCWZyZWVfb25lX3BhZ2Uoem9uZSwgcGFnZSwgcGZuLCBvcmRlciwgZnBpX2ZsYWdzKTsKIH0KIAomIzQzOy8qIEZsYWcgdGhlIGZyYW1lcyBhbiBlYXJsaWVyIGtlcm5lbCByZWNvcmRlZCBhcyBiYWQuICovCiYjNDM7c3RhdGljIHZvaWQgX19tZW1pbml0IHBvaXNvbl9ibG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBpLCBucl9wYWdlcyA9IDFVTCAmbHQ7Jmx0OyBvcmRlcjsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3BhZ2VzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IHBhZ2UgKnAgPSBwYWdlICYjNDM7IGk7CiYjNDM7CiYjNDM7CQlpZiAocmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5KHBhZ2VfdG9fcGh5cyhwKSwgUEFHRV9TSVpFKSkKJiM0MzsJCQlod3BvaXNvbl9ib290X3BhZ2UocCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiB2b2lkIF9fbWVtaW5pdCBfX2ZyZWVfcGFnZXNfY29yZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLAogCQllbnVtIG1lbWluaXRfY29udGV4dCBjb250ZXh0KQogewpAQCAtMTYxMyw2ICYjNDM7MTYyNiwxOCBAQCB2b2lkIF9fbWVtaW5pdCBfX2ZyZWVfcGFnZXNfY29yZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLAogCQlhdG9taWNfbG9uZ19hZGQobnJfcGFnZXMsICZhbXA7cGFnZV96b25lKHBhZ2UpLSZndDttYW5hZ2VkX3BhZ2VzKTsKIAl9CiAKJiM0MzsJLyogRmlyc3Q6IGEgYmxvY2sgcGFya2VkIGJ5IF9fZnJlZV91bmFjY2VwdGVkKCkgbmV2ZXIgcmV0dXJucyBoZXJlLiAqLwomIzQzOwlpZiAocmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5KHBhZ2VfdG9fcGh5cyhwYWdlKSwKJiM0MzsJCQkJCSAgIFBBR0VfU0laRSAmbHQ7Jmx0OyBvcmRlcikpIHsKJiM0MzsJCXBvaXNvbl9ibG9jayhwYWdlLCBvcmRlcik7CiYjNDM7CQkvKgomIzQzOwkJICogVE9ETzogZnJlZSB0aGUgZnJhbWVzIGluIHRoZSBibG9jayB0aGF0IGFyZSBub3QgcG9pc29uZWQuCiYjNDM7CQkgKiBUaGV5IHN0YXkgb3V0IG9mIHRoZSBhbGxvY2F0b3IgYW5kIHN0aWxsIGNvdW50IGluCiYjNDM7CQkgKiBtYW5hZ2VkX3BhZ2VzLCBzbyBhIHVuaXQgY29zdHMgdXAgdG8gYSBibG9jay4KJiM0MzsJCSAqLwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiAJaWYgKHBhZ2VfY29udGFpbnNfdW5hY2NlcHRlZChwYWdlLCBvcmRlcikpIHsKIAkJaWYgKG9yZGVyID09IE1BWF9QQUdFX09SREVSICZhbXA7JmFtcDsgX19mcmVlX3VuYWNjZXB0ZWQocGFnZSkpCiAJCQlyZXR1cm47CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDExCgkJCQkJCQlvdXRwdXQ6IDI1OQoJCQkJCQkJdGhvdWdodHM6IDEyOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBTZXNzaW9uIEFzc2Vzc21lbnQ6IEVGSSBQb2lzb25lZCBNZW1vcnkgVGFibGUgTWFuYWdlbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lIGlmIGl0IGp1c3RpZmllcyBhIEtNU0FOIGZ1enppbmcgcnVuLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgbGVhbmluZyB0b3dhcmRzIGEgJiMzNDtubywmIzM0OyBidXQgd2UgbmVlZCB0byBiZSB0aG9yb3VnaC4KCkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggZnVuZGFtZW50YWxseSBkb2VzLiBJdCBpbnRyb2R1Y2VzIGBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWWAgYW5kLCBjcml0aWNhbGx5LCBhIG1lY2hhbmlzbSBmb3IgbWFuYWdpbmcgYSAmIzM0O3BvaXNvbmVkIG1lbW9yeSYjMzQ7IHRhYmxlIHdpdGhpbiB0aGUgRUZJIGVudmlyb25tZW50LiBUaGlzIHRhYmxlIHNlZW1zIHRvIHRyYWNrIHJlZ2lvbnMgb2YgUkFNIHRoYXQgYXJlIGNvbnNpZGVyZWQgJiMzNDtwb2lzb25lZCYjMzQ7IOKAkyBsaWtlbHkgbWFya2VkIGZvciBtZW1vcnkgZmFpbHVyZSBpbmplY3Rpb24uCgpUaGUgY29yZSBvZiB0aGUgbG9naWMgaW52b2x2ZXMgYWxsb2NhdGluZyBhIGBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeWAgc3RydWN0dXJlLiBUaGlzIGFsbG9jYXRpb24gaGFwcGVucyB2aWEgRUZJIGJvb3Qgc2VydmljZXMgKGBhbGxvY2F0ZV9wb29sYCkuIEltcG9ydGFudGx5LCB0aGUgYWxsb2NhdGVkIGJpdG1hcCBpcyBpbW1lZGlhdGVseSB6ZXJvZWQgdmlhIGBtZW1zZXRgLiBUaGlzIGlzIGtleS4gVGhlIGNvZGUgdGhlbiBpbml0aWFsaXplcyB0aGUgc3RydWN0dXJlJiMzOTtzIGZpZWxkczogYHZlcnNpb25gLCBgdW5pdF9zaXplYCwgYHBoeXNfYmFzZWAsIGBzaXplYCDigJMgYWxsIGV4cGxpY2l0bHkgYXNzaWduZWQuIFRoaXMgdGFibGUgaXMgdGhlbiBpbnN0YWxsZWQgYXMgYSBjb25maWcgdGFibGUuCgpEdXJpbmcga2VybmVsIGJvb3QsIHRoZSBjb2RlIHBhcnNlcyB0aGUgRUZJIGNvbmZpZyB0YWJsZXMgYW5kIGNhbGxzIGBlZmlfcG9pc29uZWRfbWVtb3J5X3Jlc2VydmUoKWAgdG8gdmFsaWRhdGUsIG1hcCBhbmQgcmVzZXJ2ZSB0aGUgZGVzY3JpYmVkIG1lbW9yeSB1c2luZyBgbWVtYmxvY2tfcmVzZXJ2ZSgpYC4gVGhlIGNyaXRpY2FsIGJpdCBpcyB0aGF0IGR1cmluZyBwYWdlIGZyZWVpbmcsIGBfX2ZyZWVfcGFnZXNfY29yZWAsIGlmIGEgcGFnZSBmYWxscyB3aXRoaW4gdGhlIGRlZmluZWQgJiMzNDtwb2lzb25lZCYjMzQ7IHJlZ2lvbiwgYSBgaHdwb2lzb25gIGZsYWcgaXMgc2V0IHVzaW5nIGBod3BvaXNvbl9ib290X3BhZ2UoKWAuICBMYXRlciwgaW4gdGhlIGV2ZW50IG9mIGEgbWVtb3J5IGZhaWx1cmUsIHRoZSBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4oKWAgZnVuY3Rpb24gdXBkYXRlcyB0aGUgYml0bWFwIHRvIHJlY29yZCB0aGUgcG9pc29uZWQgcGFnZS4gVGhpcyBiaXRtYXAgaXMgdGhlbiBjaGVja2VkIGxhdGVyIHVzaW5nIGByYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnkoKWAuCgpOb3csIHRoZSBtYWluIGNvbmNlcm4gZm9yIEtNU0FOIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBEb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIG5ldyBwYXRod2F5cyBmb3IgdW5pbml0aWFsaXplZCBkYXRhIHRvIGxlYWsgb3IgYmUgdXNlZD8KCjEuICAqKlVzZXItc3BhY2UgZXhwb3N1cmU/KiogTm8sIHRoZXJlIGFyZSBubyB1c2VyLXNwYWNlIGNvcGllcywgc3lzZnMgZW50cmllcywgb3IgaW9jdGxzIGludHJvZHVjZWQuCjIuICAqKkluaXRpYWxpemF0aW9uPyoqIFRoZSBjb2RlIGRvZXMgc2VlbSBtZXRpY3Vsb3VzbHkgaW5pdGlhbGl6ZWQuIGBtZW1zZXRgIG9uIHRoZSBiaXRtYXAsIGFuZCBleHBsaWNpdCBmaWVsZCBhc3NpZ25tZW50cyB3aXRoaW4gdGhlIHN0cnVjdC4gVGhlIGZ1bmN0aW9ucyBsaWtlIGBlZmlfZ2V0X3JhbV9yYW5nZWAsIGByYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnlgIGFsbCBhcHBlYXIgdG8gaGFuZGxlIHRoZWlyIGludGVybmFsIHN0YXRlIGNvcnJlY3RseS4KMy4gICoqQ29udHJvbCBmbG93IGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YT8qKiAgTm8sIHRoaXMgYXBwZWFycyB0byBiZSBqdXN0IGhhcmR3YXJlIHBvaXNvbiB0cmFja2luZyBhY3Jvc3Mga2V4ZWMgLyBFRkkgYm9vdC4gVGhlIGJpdG1hcCBhbmQgc3RhdGUgdmFyaWFibGVzIGFyZSBhbGwgaW5pdGlhbGl6ZWQuCjQuICAqKktNU0FOIFNwZWNpZmljIENvbmNlcm5zPyoqIEtNU0FO4oCZcyBwcmltYXJ5IGZvY3VzIGlzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIChzdGFjaywgaGVhcCwgcGFnZXMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgbGVha3MuICBUaGlzIHBhdGNoICpkb2VzbiYjMzk7dCogYXBwZWFyIHRvIGhhdmUgYW55LiBFdmVyeXRoaW5nIHJldm9sdmVzIGFyb3VuZCBlYXJseSBib290IG1lbW9yeSByZXNlcnZhdGlvbi90YWJsZSBjcmVhdGlvbi9iaXQgc2V0dGluZyBhbmQgY2hlY2tpbmcgaW4gdGhlIGluaXRpYWxpemVkIGJpdG1hcC4gQW55IHBvdGVudGlhbCBlcnJvcnMgaGVyZSB3b3VsZCBiZSBhZGRyZXNzIHRyYW5zbGF0aW9uIGVycm9ycywgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIG9yIGluY29ycmVjdCBtZW1vcnkgcmVzZXJ2YXRpb24uIFRoZXNlIGFyZSB0aGluZ3MgdGhhdCBhcmUgaGFuZGxlZCBieSBLQVNBTiBvciBtb3JlIHN0YW5kYXJkIHZlcmlmaWNhdGlvbiB0ZWNobmlxdWVzLgoKTGV0JiMzOTtzIGRvIGEgcXVpY2sgZG91YmxlLWNoZWNrIG9mIGFsbCBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcy4KCiogICBgZWZpX2dldF9yYW1fcmFuZ2VgOiBJbml0aWFsaXplcyBhbmQgcmV0dXJucywgdGhlIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQuCiogICBgZWZpX3BvaXNvbl9iaXRtYXBfc2l6ZWA6IEEgcHVyZSBjYWxjdWxhdGlvbi4KKiAgIGBlZmlfcG9pc29uX2FsbG9jYDogQWxsb2NhdGVzIGFuZCBjb3JyZWN0bHkgaW5pdGlhbGl6ZXMgdGhlIGJpdG1hcC4KKiAgIGBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZWA6IEluaXRpYWxpemVzIGxvY2FscyBvciBjaGVja3Mgc3RhdHVzZXMuCiogICBgZWZpX3BvaXNvbl9nZW9tZXRyeV92YWxpZGAsIGBlZmlfcG9pc29uX3RhYmxlX3ZhbGlkYDogVmFsaWRhdGlvbiBvbiB0aGUgdGFibGUgZmllbGRzLgoqICAgYGVmaV9wb2lzb25lZF9tZW1vcnlfcmVzZXJ2ZWA6IEluY2x1ZGVzIGVhcmx5IG1lbXJlbWFwLCB2YWxpZGF0aW9uLCBhbmQgbWVtYmxvY2suCiogICBgZWZpX3BvaXNvbmVkX21lbW9yeWA6IFJldHVybnMgYSBwb2ludGVyLgoqICAgYHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeWA6IEJvdW5kYXJ5IGNoZWNrcyBhbmQgYGZpbmRfbmV4dF9iaXRgIGNhbGxzLgoqICAgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYDogSW5jbHVkZXMgYm91bmRhcnkgY2hlY2tzIGFuZCBgc2V0X2JpdGAgY2FsbHMuCiogICBgaHdwb2lzb25fYm9vdF9wYWdlYDogT3BlcmF0ZXMgb24gYHN0cnVjdCBwYWdlYCwgd2l0aCBzZXRcX3BhZ2VcX2NvdW50LCBhdG9taWNcX2xvbmdcX2luYywgZXRjLgoqICAgYHBvaXNvbl9ibG9ja2A6IEl0ZXJhdGVzIG92ZXIgdGhlIHBhZ2VzIGFuZCBjYWxscyBgcmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5YCBhbmQgYGh3cG9pc29uX2Jvb3RfcGFnZWAuCgpPa2F5LCB0aGUgY29uY2x1c2lvbiByZW1haW5zOiAqKk5lZWRzS01TQU4gPSBmYWxzZS4qKgoKSGVyZeKAmXMgdGhlIGRpc3RpbGxlZCByZWFzb25pbmcsIGNsZWFybHkgY29udHJhc3RpbmcgS01TQU4gYW5kIEtBU0FOOgoKKiAgIEtNU0FOIGlzIGxvb2tpbmcgZm9yICp1bmluaXRpYWxpemVkKiBtZW1vcnkgcmVhZHMvbGVha3MuCiogICBUaGlzIHBhdGNoIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZXMgdGhlIG1lbW9yeSB0YWJsZSBhbmQgdGhlIGJpdG1hcCB3aXRoIGBtZW1zZXRgLiBFdmVyeSBzdHJ1Y3QgZmllbGQgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZC4KKiAgIFRoZSBydW50aW1lIGZ1bmN0aW9ucyBvbmx5IHJlYWQgYW5kIG1vZGlmeSBpbml0aWFsaXplZCBkYXRhLgoqICAgVGhlcmUmIzM5O3Mgbm8gaW50cm9kdWN0aW9uIG9mIG5ldyB1c2VyLXNwYWNlIGNvcGllcyBvciB1bmluaXRpYWxpemVkIGNvbmRpdGlvbmFsIGxvZ2ljLgoqICAgQW55IGJ1Z3Mgd291bGQgcmVsYXRlIHRvIGFkZHJlc3MKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBFRkkgcG9pc29uZWQgbWVtb3J5IHRyYWNraW5nIChDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWSkgdG8gcHJlc2VydmUgaGFyZHdhcmUtcG9pc29uZWQgcGFnZSBpbmZvcm1hdGlvbiBhY3Jvc3Mga2V4ZWMgcmVib290cy4gXG5cbjEuIEFsbG9jYXRpb24gXHUwMDI2IEluaXRpYWxpemF0aW9uOiBUaGUgdGFibGUgc3RydWN0dXJlIGBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeWAgYW5kIGl0cyB0cmFpbGluZyBiaXRtYXAgYXJlIGFsbG9jYXRlZCBpbiB0aGUgRUZJIHN0dWIgYW5kIGV4cGxpY2l0bHkgZnVsbHkgaW5pdGlhbGl6ZWQgKGFsbCBoZWFkZXIgZmllbGRzIGFzc2lnbmVkLCBhbmQgYG1lbXNldChwbS1cdTAwM2ViaXRtYXAsIDAsIGJpdG1hcF9zaXplKWAgY2xlYXJzIHRoZSBiaXRtYXApLlxuMi4gTWVtb3J5IEFjY2Vzc2VzOiBSdW50aW1lIG9wZXJhdGlvbnMgKGByYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnlgLCBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gLCBgcG9pc29uX2Jsb2NrYCwgYW5kIGBod3BvaXNvbl9ib290X3BhZ2VgKSBvbmx5IHJlYWQgYW5kIHVwZGF0ZSBmdWxseSBpbml0aWFsaXplZCBtZW1vcnkgc3RydWN0dXJlcyBhbmQgc3RydWN0IHBhZ2UgZmxhZ3MuXG4zLiBObyBVbmluaXRpYWxpemVkIExlYWtzIG9yIFJlYWRzOiBUaGVyZSBhcmUgbm8gZGF0YSB0cmFuc2ZlcnMgdG8gdXNlciBzcGFjZSwgbm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBubyBleHBvc2VkIHBhZGRpbmcuXG40LiBLQVNBTiB2cyBLTVNBTjogUG90ZW50aWFsIHJpc2tzIHN1Y2ggYXMgaW52YWxpZCBwb2ludGVyIG1hdGgsIG91dC1vZi1ib3VuZHMgYml0bWFwIGFjY2Vzc2VzLCBvciBtZW1vcnkgcmVzZXJ2YXRpb24gZXJyb3JzIGFyZSBwcm9wZXJseSBoYW5kbGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBLTVNBTiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBFRkkgcG9pc29uZWQgbWVtb3J5IHRyYWNraW5nIChDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWSkgdG8gcHJlc2VydmUgaGFyZHdhcmUtcG9pc29uZWQgcGFnZSBpbmZvcm1hdGlvbiBhY3Jvc3Mga2V4ZWMgcmVib290cy4gXG5cbjEuIEFsbG9jYXRpb24gXHUwMDI2IEluaXRpYWxpemF0aW9uOiBUaGUgdGFibGUgc3RydWN0dXJlIGBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeWAgYW5kIGl0cyB0cmFpbGluZyBiaXRtYXAgYXJlIGFsbG9jYXRlZCBpbiB0aGUgRUZJIHN0dWIgYW5kIGV4cGxpY2l0bHkgZnVsbHkgaW5pdGlhbGl6ZWQgKGFsbCBoZWFkZXIgZmllbGRzIGFzc2lnbmVkLCBhbmQgYG1lbXNldChwbS1cdTAwM2ViaXRtYXAsIDAsIGJpdG1hcF9zaXplKWAgY2xlYXJzIHRoZSBiaXRtYXApLlxuMi4gTWVtb3J5IEFjY2Vzc2VzOiBSdW50aW1lIG9wZXJhdGlvbnMgKGByYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnlgLCBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gLCBgcG9pc29uX2Jsb2NrYCwgYW5kIGBod3BvaXNvbl9ib290X3BhZ2VgKSBvbmx5IHJlYWQgYW5kIHVwZGF0ZSBmdWxseSBpbml0aWFsaXplZCBtZW1vcnkgc3RydWN0dXJlcyBhbmQgc3RydWN0IHBhZ2UgZmxhZ3MuXG4zLiBObyBVbmluaXRpYWxpemVkIExlYWtzIG9yIFJlYWRzOiBUaGVyZSBhcmUgbm8gZGF0YSB0cmFuc2ZlcnMgdG8gdXNlciBzcGFjZSwgbm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBubyBleHBvc2VkIHBhZGRpbmcuXG40LiBLQVNBTiB2cyBLTVNBTjogUG90ZW50aWFsIHJpc2tzIHN1Y2ggYXMgaW52YWxpZCBwb2ludGVyIG1hdGgsIG91dC1vZi1ib3VuZHMgYml0bWFwIGFjY2Vzc2VzLCBvciBtZW1vcnkgcmVzZXJ2YXRpb24gZXJyb3JzIGFyZSBwcm9wZXJseSBoYW5kbGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBLTVNBTiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE0OjA5OjA2LjE2MjgyMzQxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc0MDYxOTg1NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRUZJX1BPSVNPTkVEX01FTU9SWVwiLFxuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgICBcIkVGSV9TVFVCXCIsXG4gICAgXCJFRklcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlZmlfaHdwb2lzb25fcmVjb3JkX3BmblwiLFxuICAgIFwicmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5XCIsXG4gICAgXCJod3BvaXNvbl9ib290X3BhZ2VcIixcbiAgICBcIm1lbW9yeV9mYWlsdXJlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBFRkkgcG9pc29uZWQgbWVtb3J5IHRyYWNraW5nIChDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWSkgdG8gcHJlc2VydmUgaGFyZHdhcmUtcG9pc29uZWQgcGFnZSBpbmZvcm1hdGlvbiBhY3Jvc3Mga2V4ZWMgcmVib290cy4gXFxuXFxuMS4gQWxsb2NhdGlvbiBcXHUwMDI2IEluaXRpYWxpemF0aW9uOiBUaGUgdGFibGUgc3RydWN0dXJlIGBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeWAgYW5kIGl0cyB0cmFpbGluZyBiaXRtYXAgYXJlIGFsbG9jYXRlZCBpbiB0aGUgRUZJIHN0dWIgYW5kIGV4cGxpY2l0bHkgZnVsbHkgaW5pdGlhbGl6ZWQgKGFsbCBoZWFkZXIgZmllbGRzIGFzc2lnbmVkLCBhbmQgYG1lbXNldChwbS1cXHUwMDNlYml0bWFwLCAwLCBiaXRtYXBfc2l6ZSlgIGNsZWFycyB0aGUgYml0bWFwKS5cXG4yLiBNZW1vcnkgQWNjZXNzZXM6IFJ1bnRpbWUgb3BlcmF0aW9ucyAoYHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeWAsIGBlZmlfaHdwb2lzb25fcmVjb3JkX3BmbmAsIGBwb2lzb25fYmxvY2tgLCBhbmQgYGh3cG9pc29uX2Jvb3RfcGFnZWApIG9ubHkgcmVhZCBhbmQgdXBkYXRlIGZ1bGx5IGluaXRpYWxpemVkIG1lbW9yeSBzdHJ1Y3R1cmVzIGFuZCBzdHJ1Y3QgcGFnZSBmbGFncy5cXG4zLiBObyBVbmluaXRpYWxpemVkIExlYWtzIG9yIFJlYWRzOiBUaGVyZSBhcmUgbm8gZGF0YSB0cmFuc2ZlcnMgdG8gdXNlciBzcGFjZSwgbm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBubyBleHBvc2VkIHBhZGRpbmcuXFxuNC4gS0FTQU4gdnMgS01TQU46IFBvdGVudGlhbCByaXNrcyBzdWNoIGFzIGludmFsaWQgcG9pbnRlciBtYXRoLCBvdXQtb2YtYm91bmRzIGJpdG1hcCBhY2Nlc3Nlcywgb3IgbWVtb3J5IHJlc2VydmF0aW9uIGVycm9ycyBhcmUgcHJvcGVybHkgaGFuZGxlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdHJhY2tpbmcgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IGFjcm9zcyBrZXhlYyB2aWEgYW4gRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUgKENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZKS4gSXQgaW50cm9kdWNlcyBob29rcyBpbiBjb3JlIG1lbW9yeS1mYWlsdXJlIGhhbmRsaW5nIChlZmlfaHdwb2lzb25fcmVjb3JkX3BmbiBpbiBhY3Rpb25fcmVzdWx0KSBhbmQgbWVtb3J5IGluaXRpYWxpemF0aW9uL2hvdHBsdWcgKF9fZnJlZV9wYWdlc19jb3JlLCBod3BvaXNvbl9ib290X3BhZ2UpLiBUaGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIGF0IHJ1bnRpbWUgdmlhIG1lbW9yeSBmYWlsdXJlIG1lY2hhbmlzbXMgc3VjaCBhcyBtYWR2aXNlKE1BRFZfSFdQT0lTT04pIGFuZCBtZW1vcnkgaG90cGx1Z2dpbmcgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHdpdGggRUZJLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNDowOTowNi4xNjI4Mjg2NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgwNzc1MDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTc5Y2JiMTA1YzU5ODE3YWYzMmEyMmEwMDE3MWY3YmI5MTQ2NzY1NFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCA5IDE0OjA5OjA1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmkuYyBiL2FyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmkuY1xcbmluZGV4IDBjMzlhZGI5NmI5MTIuLjJiMzdiOTZhMzZlMDkgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaS5jXFxuKysrIGIvYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaS5jXFxuQEAgLTkzLDYgKzkzLDkgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgKiBjb25zdCBlZmlfdGFibGVzW10gPSB7XFxuICNpZmRlZiBDT05GSUdfVU5BQ0NFUFRFRF9NRU1PUllcXG4gXFx0XFx1MDAyNmVmaS51bmFjY2VwdGVkLFxcbiAjZW5kaWZcXG4rI2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXFxuK1xcdFxcdTAwMjZlZmkucG9pc29uZWRfbWVtb3J5LFxcbisjZW5kaWZcXG4gfTtcXG4gXFxuIHU2NCBlZmlfc2V0dXA7XFx0XFx0LyogZWZpIHNldHVwX2RhdGEgcGh5c2ljYWwgYWRkcmVzcyAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ1xcbmluZGV4IDI5ZTA3MjkyOTlmNWIuLmFhZmNkNDFiYzAwNjMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWdcXG5AQCAtMjYzLDYgKzI2MywxNCBAQCBjb25maWcgRUZJX0NPQ09fU0VDUkVUXFxuIFxcdCAgdmlydC9jb2NvL2VmaV9zZWNyZXQgbW9kdWxlIHRvIGFjY2VzcyB0aGUgc2VjcmV0cywgd2hpY2ggaW4gdHVyblxcbiBcXHQgIGFsbG93cyB1c2Vyc3BhY2UgcHJvZ3JhbXMgdG8gYWNjZXNzIHRoZSBpbmplY3RlZCBzZWNyZXRzLlxcbiBcXG4rY29uZmlnIEVGSV9QT0lTT05FRF9NRU1PUllcXG4rXFx0ZGVmX2Jvb2wgeVxcbitcXHRkZXBlbmRzIG9uIEVGSV9TVFVCIFxcdTAwMjZcXHUwMDI2IE1FTU9SWV9GQUlMVVJFIFxcdTAwMjZcXHUwMDI2IDY0QklUXFxuK1xcdGhlbHBcXG4rXFx0ICBSZWNvcmQgcGFnZSBmcmFtZXMgdGhhdCBhcmUgaGFyZHdhcmUtcG9pc29uZWQgd2hpbGUgdGhpcyBrZXJuZWwgcnVuc1xcbitcXHQgIGludG8gYW4gRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUsIGFuZCBob25vciB0aGF0IHRhYmxlIGVhcmx5IG9uIHRoZVxcbitcXHQgIG5leHQga2VybmVsIHNvIGEga2V4ZWMgZG9lcyBub3QgaGFuZCBrbm93bi1iYWQgUkFNIGJhY2sgb3V0LlxcbitcXG4gY29uZmlnIE9WTUZfREVCVUdfTE9HXFxuIFxcdGJvb2wgXFxcIkV4cG9zZSBPVk1GIGZpcm13YXJlIGRlYnVnIGxvZyB2aWEgc3lzZnNcXFwiXFxuIFxcdGRlcGVuZHMgb24gRUZJXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGVcXG5pbmRleCA4ZWZiY2Y2OTllNGZmLi4wNWQwYTQ5MDkyM2U1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGVcXG5AQCAtNDMsNCArNDMsNSBAQCBvYmotJChDT05GSUdfRUZJX0VBUkxZQ09OKVxcdFxcdCs9IGVhcmx5Y29uLm9cXG4gb2JqLSQoQ09ORklHX1VFRklfQ1BFUl9BUk0pXFx0XFx0Kz0gY3Blci1hcm0ub1xcbiBvYmotJChDT05GSUdfVUVGSV9DUEVSX1g4NilcXHRcXHQrPSBjcGVyLXg4Ni5vXFxuIG9iai0kKENPTkZJR19VTkFDQ0VQVEVEX01FTU9SWSlcXHRcXHQrPSB1bmFjY2VwdGVkX21lbW9yeS5vXFxuK29iai0kKENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZKVxcdCs9IHBvaXNvbi5vXFxuIG9iai0kKENPTkZJR19URUVfU1RNTV9FRkkpXFx0XFx0Kz0gc3RtbS90ZWVfc3RtbV9lZmkub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jXFxuaW5kZXggNmQ5ODdkN2Y5Nzc4MS4uNTViMmVlNTNmYzI2OCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuY1xcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jXFxuQEAgLTU1LDYgKzU1LDkgQEAgc3RydWN0IGVmaSBfX3JlYWRfbW9zdGx5IGVmaSA9IHtcXG4gI2lmZGVmIENPTkZJR19VTkFDQ0VQVEVEX01FTU9SWVxcbiBcXHQudW5hY2NlcHRlZFxcdFxcdD0gRUZJX0lOVkFMSURfVEFCTEVfQUREUixcXG4gI2VuZGlmXFxuKyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWVxcbitcXHQucG9pc29uZWRfbWVtb3J5XFx0PSBFRklfSU5WQUxJRF9UQUJMRV9BRERSLFxcbisjZW5kaWZcXG4gfTtcXG4gRVhQT1JUX1NZTUJPTChlZmkpO1xcbiBcXG5AQCAtNjc3LDYgKzY4MCw5IEBAIHN0YXRpYyBjb25zdCBlZmlfY29uZmlnX3RhYmxlX3R5cGVfdCBjb21tb25fdGFibGVzW10gX19pbml0Y29uc3QgPSB7XFxuICNpZmRlZiBDT05GSUdfVU5BQ0NFUFRFRF9NRU1PUllcXG4gXFx0e0xJTlVYX0VGSV9VTkFDQ0VQVEVEX01FTV9UQUJMRV9HVUlELFxcdFxcdTAwMjZlZmkudW5hY2NlcHRlZCxcXHRcXFwiVW5hY2NlcHRlZFxcXCJcXHR9LFxcbiAjZW5kaWZcXG4rI2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXFxuK1xcdHtMSU5VWF9FRklfUE9JU09ORURfTUVNT1JZX1RBQkxFX0dVSUQsXFx0XFx1MDAyNmVmaS5wb2lzb25lZF9tZW1vcnksXFx0XFxcIlBPSVNPTlxcXCJcXHR9LFxcbisjZW5kaWZcXG4gI2lmZGVmIENPTkZJR19FRklfR0VORVJJQ19TVFVCXFxuIFxcdHtMSU5VWF9FRklfUFJJTUFSWV9ESVNQTEFZX1RBQkxFX0dVSUQsXFx0XFx1MDAyNnByaW1hcnlfZGlzcGxheV90YWJsZVxcdFxcdFxcdH0sXFxuICNlbmRpZlxcbkBAIC04NzcsNiArODgzLDggQEAgaW50IF9faW5pdCBlZmlfY29uZmlnX3BhcnNlX3RhYmxlcyhjb25zdCBlZmlfY29uZmlnX3RhYmxlX3QgKmNvbmZpZ190YWJsZXMsXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4rXFx0ZWZpX3BvaXNvbmVkX21lbW9yeV9yZXNlcnZlKCk7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmNcXG5pbmRleCA0OGY5M2Y3NzU4ZTllLi41Y2JlNjc1NDkxMzMzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmNcXG4rKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jXFxuQEAgLTc3NCwzICs3NzQsMTAzIEBAIHZvaWQgZWZpX3JlbWFwX2ltYWdlKHVuc2lnbmVkIGxvbmcgaW1hZ2VfYmFzZSwgdW5zaWduZWQgYWxsb2Nfc2l6ZSxcXG4gXFx0XFx0XFx0ZWZpX3dhcm4oXFxcIkZhaWxlZCB0byByZW1hcCBkYXRhIHJlZ2lvbiBub24tZXhlY3V0YWJsZVxcXFxuXFxcIik7XFxuIFxcdH1cXG4gfVxcbitcXG4rI2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXFxuKy8qXFxuKyAqIEZpbmQgdGhlIGJhc2UgYW5kIHRvcCBvZiB0aGUgbWVtb3J5LCBzbywgd2UgY2FuIGNyZWF0ZSB0aGUgYml0bWFwIGZvclxcbisgKiB0aGUgZnVsbCByYW5nZS5cXG4rICovXFxuK3N0YXRpYyBlZmlfc3RhdHVzX3QgZWZpX2dldF9yYW1fcmFuZ2UodTY0ICpiYXNlLCB1NjQgKnRvcClcXG4re1xcbitcXHRzdHJ1Y3QgZWZpX2Jvb3RfbWVtbWFwICptYXAgX19mcmVlKGVmaV9wb29sKSA9IE5VTEw7XFxuK1xcdHU2NCByYW1fYmFzZSA9IFVMTE9OR19NQVgsIHJhbV90b3AgPSAwO1xcbitcXHRlZmlfc3RhdHVzX3Qgc3RhdHVzO1xcbitcXHRpbnQgaSwgbnJfZGVzYztcXG4rXFxuK1xcdHN0YXR1cyA9IGVmaV9nZXRfbWVtb3J5X21hcChcXHUwMDI2bWFwLCBmYWxzZSk7XFxuK1xcdGlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpXFxuK1xcdFxcdHJldHVybiBzdGF0dXM7XFxuK1xcbitcXHRucl9kZXNjID0gbWFwLVxcdTAwM2VtYXBfc2l6ZSAvIG1hcC1cXHUwMDNlZGVzY19zaXplO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfZGVzYzsgaSsrKSB7XFxuK1xcdFxcdGVmaV9tZW1vcnlfZGVzY190ICpkO1xcbitcXG4rXFx0XFx0ZCA9IGVmaV9tZW1kZXNjX3B0cigodW5zaWduZWQgbG9uZyltYXAtXFx1MDAzZW1hcCwgbWFwLVxcdTAwM2VkZXNjX3NpemUsIGkpO1xcbitcXHRcXHRyYW1fYmFzZSA9IG1pbihyYW1fYmFzZSwgZC1cXHUwMDNlcGh5c19hZGRyKTtcXG4rXFx0XFx0cmFtX3RvcCA9IG1heChyYW1fdG9wLFxcbitcXHRcXHRcXHQgICAgICBkLVxcdTAwM2VwaHlzX2FkZHIgKyBkLVxcdTAwM2VudW1fcGFnZXMgKiBFRklfUEFHRV9TSVpFKTtcXG4rXFx0fVxcbitcXHRpZiAoIXJhbV90b3AgfHwgcmFtX2Jhc2UgPT0gVUxMT05HX01BWClcXG4rXFx0XFx0cmV0dXJuIEVGSV9OT1RfRk9VTkQ7XFxuK1xcbitcXHQqYmFzZSA9IHJvdW5kX2Rvd24ocmFtX2Jhc2UsIEVGSV9QT0lTT05fVU5JVF9TSVpFKTtcXG4rXFx0KnRvcCA9IHJvdW5kX3VwKHJhbV90b3AsIEVGSV9QT0lTT05fVU5JVF9TSVpFKTtcXG4rXFxuK1xcdHJldHVybiBFRklfU1VDQ0VTUztcXG4rfVxcbitcXG4rLyogVGhlIHNpemUgb2YgdGhlIGJpdG1hcCAqL1xcbitzdGF0aWMgdTY0IGVmaV9wb2lzb25fYml0bWFwX3NpemUodTY0IHNwYW4pXFxuK3tcXG4rXFx0dTY0IGJ5dGVzID0gRElWX1JPVU5EX1VQKERJVl9ST1VORF9VUChzcGFuLCBFRklfUE9JU09OX1VOSVRfU0laRSksXFxuK1xcdFxcdFxcdFxcdCBCSVRTX1BFUl9CWVRFKTtcXG4rXFxuK1xcdHJldHVybiByb3VuZF91cChieXRlcywgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICplZmlfcG9pc29uX2FsbG9jKHU2NCBwaHlzX2Jhc2UsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgdTY0IGJpdG1hcF9zaXplKVxcbit7XFxuK1xcdHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTtcXG4rXFx0ZWZpX3N0YXR1c190IHN0YXR1cztcXG4rXFxuK1xcdHN0YXR1cyA9IGVmaV9ic19jYWxsKGFsbG9jYXRlX3Bvb2wsIEVGSV9BQ1BJX1JFQ0xBSU1fTUVNT1JZLFxcbitcXHRcXHRcXHQgICAgIHNpemVvZigqcG0pICsgYml0bWFwX3NpemUsICh2b2lkICoqKVxcdTAwMjZwbSk7XFxuK1xcdGlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0cG0tXFx1MDAzZXZlcnNpb24gPSAxO1xcbitcXHRwbS1cXHUwMDNldW5pdF9zaXplID0gRUZJX1BPSVNPTl9VTklUX1NJWkU7XFxuK1xcdHBtLVxcdTAwM2VwaHlzX2Jhc2UgPSBwaHlzX2Jhc2U7XFxuK1xcdHBtLVxcdTAwM2VzaXplID0gYml0bWFwX3NpemU7XFxuK1xcdG1lbXNldChwbS1cXHUwMDNlYml0bWFwLCAwLCBiaXRtYXBfc2l6ZSk7XFxuK1xcbitcXHRyZXR1cm4gcG07XFxuK31cXG4rXFxuKy8qIFRoaXMgbmVlZHMgdG8gYmUgZG9uZSB3aGlsZSBib290IHNlcnZpY2UgaXMgc3RpbGwgYWN0aXZlICovXFxuK3ZvaWQgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUodm9pZClcXG4re1xcbitcXHRlZmlfZ3VpZF90IHBvaXNvbmVkX21lbW9yeV90YWJsZV9ndWlkID0gTElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWV9UQUJMRV9HVUlEO1xcbitcXHRzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG07XFxuK1xcdHU2NCByYW1fYmFzZSwgcmFtX3RvcCwgYml0bWFwX3NpemU7XFxuK1xcdGVmaV9zdGF0dXNfdCBzdGF0dXM7XFxuK1xcbitcXHQvKiBBIHRhYmxlIGluc3RhbGxlZCBieSBhbiBlYXJsaWVyIGJvb3QgcmlkZXMgdGhlIHN5c3RlbSB0YWJsZSBhY3Jvc3Mga2V4ZWMuICovXFxuK1xcdHBtID0gZ2V0X2VmaV9jb25maWdfdGFibGUocG9pc29uZWRfbWVtb3J5X3RhYmxlX2d1aWQpO1xcbitcXHRpZiAocG0pIHtcXG4rXFx0XFx0aWYgKHBtLVxcdTAwM2V2ZXJzaW9uICE9IDEpXFxuK1xcdFxcdFxcdGVmaV9lcnIoXFxcIlVua25vd24gdmVyc2lvbiBvZiBwb2lzb25lZC1tZW1vcnkgdGFibGVcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChlZmlfZ2V0X3JhbV9yYW5nZShcXHUwMDI2cmFtX2Jhc2UsIFxcdTAwMjZyYW1fdG9wKSAhPSBFRklfU1VDQ0VTUykge1xcbitcXHRcXHRlZmlfZXJyKFxcXCJGYWlsZWQgdG8gc2l6ZSB0aGUgcG9pc29uZWQtbWVtb3J5IHRhYmxlIVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0Yml0bWFwX3NpemUgPSBlZmlfcG9pc29uX2JpdG1hcF9zaXplKHJhbV90b3AgLSByYW1fYmFzZSk7XFxuK1xcdHBtID0gZWZpX3BvaXNvbl9hbGxvYyhyYW1fYmFzZSwgYml0bWFwX3NpemUpO1xcbitcXHRpZiAoIXBtKSB7XFxuK1xcdFxcdGVmaV9lcnIoXFxcIkZhaWxlZCB0byBhbGxvY2F0ZSBwb2lzb25lZC1tZW1vcnkgdGFibGUhXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRzdGF0dXMgPSBlZmlfYnNfY2FsbChpbnN0YWxsX2NvbmZpZ3VyYXRpb25fdGFibGUsXFxuK1xcdFxcdFxcdCAgICAgXFx1MDAyNnBvaXNvbmVkX21lbW9yeV90YWJsZV9ndWlkLCBwbSk7XFxuK1xcdGlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIHtcXG4rXFx0XFx0ZWZpX2JzX2NhbGwoZnJlZV9wb29sLCBwbSk7XFxuK1xcdFxcdGVmaV9lcnIoXFxcIkZhaWxlZCB0byBpbnN0YWxsIHBvaXNvbmVkLW1lbW9yeSBjb25maWcgdGFibGUhXFxcXG5cXFwiKTtcXG4rXFx0fVxcbit9XFxuKyNlbmRpZlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmNcXG5pbmRleCAyMzVjOTczOGRhMmQ2Li4yMmEzMTVlMjgxNGExIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuY1xcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuY1xcbkBAIC0xNzksNiArMTc5LDcgQEAgZWZpX3N0YXR1c190IGVmaV9zdHViX2NvbW1vbihlZmlfaGFuZGxlX3QgaGFuZGxlLFxcbiBcXHRcXHRcXHQgRUZJX1JUX1NVUFBPUlRFRF9TRVRfVklSVFVBTF9BRERSRVNTX01BUCk7XFxuIFxcbiBcXHRpbnN0YWxsX21lbXJlc2VydmVfdGFibGUoKTtcXG4rXFx0aW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUoKTtcXG4gXFxuIFxcdHN0YXR1cyA9IGVmaV9ib290X2tlcm5lbChoYW5kbGUsIGltYWdlLCBpbWFnZV9hZGRyLCBjbWRsaW5lX3B0cik7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaCBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oXFxuaW5kZXggZmQ5MWZjMTVlYzgxMC4uNDQ0MzY4NjljNGVmZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaFxcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oXFxuQEAgLTExNjksNiArMTE2OSwxMiBAQCBlZmlfZW5hYmxlX3Jlc2V0X2F0dGFja19taXRpZ2F0aW9uKHZvaWQpIHsgfVxcbiBcXG4gdm9pZCBlZmlfcmV0cmlldmVfZXZlbnRsb2codm9pZCk7XFxuIFxcbisjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllcXG4rdm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKTtcXG4rI2Vsc2VcXG4rc3RhdGljIGlubGluZSB2b2lkIGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKHZvaWQpIHsgfVxcbisjZW5kaWZcXG4rXFxuIHN0cnVjdCBzeXNmYl9kaXNwbGF5X2luZm8gKmFsbG9jX3ByaW1hcnlfZGlzcGxheSh2b2lkKTtcXG4gc3RydWN0IHN5c2ZiX2Rpc3BsYXlfaW5mbyAqX19hbGxvY19wcmltYXJ5X2Rpc3BsYXkodm9pZCk7XFxuIHZvaWQgZnJlZV9wcmltYXJ5X2Rpc3BsYXkoc3RydWN0IHN5c2ZiX2Rpc3BsYXlfaW5mbyAqZHB5KTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jXFxuaW5kZXggMGJhZTBmMDZiNjc2My4uMzEzNjEzMmI5NjI4YSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmNcXG4rKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmNcXG5AQCAtMTAyNCw2ICsxMDI0LDggQEAgdm9pZCBfX25vcmV0dXJuIGVmaV9zdHViX2VudHJ5KGVmaV9oYW5kbGVfdCBoYW5kbGUsXFxuIFxcbiBcXHRzZXR1cF91bmFjY2VwdGVkX21lbW9yeSgpO1xcbiBcXG4rXFx0aW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUoKTtcXG4rXFxuIFxcdHN0YXR1cyA9IGV4aXRfYm9vdChib290X3BhcmFtcywgaGFuZGxlKTtcXG4gXFx0aWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUykge1xcbiBcXHRcXHRlZmlfZXJyKFxcXCJleGl0X2Jvb3QoKSBmYWlsZWQhXFxcXG5cXFwiKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZTE2ZDQzZjQ0MzhlZVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uY1xcbkBAIC0wLDAgKzEsMTQxIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rLypcXG4rICogUnVudGltZSBzaWRlIG9mIHRoZSBMSU5VWF9FRklfUE9JU09ORURfTUVNT1JZIHRhYmxlOiBvbmUgYml0IHBlclxcbisgKiBFRklfUE9JU09OX1VOSVRfU0laRSwgc2V0IGhlcmUgYXMgZnJhbWVzIGdvIGJhZCwgaG9ub3JlZCBieSB0aGUgbmV4dCBrZXJuZWwuXFxuKyAqXFxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IEJyZW5vIExlaXRhbyBcXHUwMDNjbGVpdGFvQGRlYmlhbi5vcmdcXHUwMDNlXFxuKyAqL1xcbitcXG4rI2RlZmluZSBwcl9mbXQoZm10KSBcXFwiZWZpOiBcXFwiIGZtdFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdG1hcC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZWZpLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbG9nMi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtYmxvY2suaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9vdmVyZmxvdy5oXFx1MDAzZVxcbitcXG4rc3RhdGljIGJvb2wgX19pbml0XFxuK2VmaV9wb2lzb25fZ2VvbWV0cnlfdmFsaWQoY29uc3Qgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtKVxcbit7XFxuK1xcdHU2NCBuYml0cztcXG4rXFxuK1xcdC8qIFdob2xlIHdvcmRzLCBhbmQgYSBiaXQgY291bnQgdGhhdCBjYW4gYmUgdGFrZW4gd2l0aG91dCB3cmFwcGluZy4gKi9cXG4rXFx0aWYgKCFwbS1cXHUwMDNlc2l6ZSB8fCAhSVNfQUxJR05FRChwbS1cXHUwMDNlc2l6ZSwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSB8fFxcbitcXHQgICAgY2hlY2tfbXVsX292ZXJmbG93KHBtLVxcdTAwM2VzaXplLCAodTY0KUJJVFNfUEVSX0JZVEUsIFxcdTAwMjZuYml0cykpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmIChwbS1cXHUwMDNldW5pdF9zaXplIFxcdTAwM2MgUEFHRV9TSVpFIHx8ICFpc19wb3dlcl9vZl8yKHBtLVxcdTAwM2V1bml0X3NpemUpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRyZXR1cm4gSVNfQUxJR05FRChwbS1cXHUwMDNlcGh5c19iYXNlLCBwbS1cXHUwMDNldW5pdF9zaXplKTtcXG4rfVxcbitcXG4rLyogVGhlIHRhYmxlIG1heSBjb21lIGZyb20gYW4gZWFybGllciBrZXJuZWwsIHNvIHZldCBpdCBiZWZvcmUgdXNpbmcgaXQuICovXFxuK3N0YXRpYyBib29sIF9faW5pdFxcbitlZmlfcG9pc29uX3RhYmxlX3ZhbGlkKGNvbnN0IHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSlcXG4re1xcbitcXHRpZiAocG0tXFx1MDAzZXZlcnNpb24gIT0gMSkge1xcbitcXHRcXHRwcl93YXJuKFxcXCJJZ25vcmluZyBwb2lzb25lZC1tZW1vcnkgdGFibGUgd2l0aCB2ZXJzaW9uICV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRwbS1cXHUwMDNldmVyc2lvbik7XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFlZmlfcG9pc29uX2dlb21ldHJ5X3ZhbGlkKHBtKSkge1xcbitcXHRcXHRwcl93YXJuKFxcXCJJZ25vcmluZyBtYWxmb3JtZWQgcG9pc29uZWQtbWVtb3J5IHRhYmxlXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rLypcXG4rICogVmV0IHRoZSBpbmhlcml0ZWQgdGFibGUgYW5kIGhhbmQgaXRzIHBhZ2VzIHRvIG1lbWJsb2NrLCB0aGUgd2F5IHRoZVxcbisgKiB1bmFjY2VwdGVkIG1lbW9yeSB0YWJsZSBpcyBoYW5kbGVkLiBJdCBpcyBFRkkgQUNQSSByZWNsYWltIG1lbW9yeSwgd2hpY2hcXG4rICogYmVjb21lcyBFODIwX1RZUEVfQUNQSSBhbmQgd291bGQgb3RoZXJ3aXNlIHN0YXkgb3V0IG9mIHRoZSBkaXJlY3QgbWFwLCBhbmRcXG4rICogdG91Y2hpbmcgaXQgdGhlbiBmYXVsdHMuIENhbGxlZCBmcm9tIGVmaV9jb25maWdfcGFyc2VfdGFibGVzKCksIHNvXFxuKyAqIGV2ZXJ5dGhpbmcgbGF0ZXIgY2FuIHJlYWNoIGl0IHdpdGggZWZpX3BvaXNvbmVkX21lbW9yeSgpLlxcbisgKi9cXG4rdm9pZCBfX2luaXQgZWZpX3BvaXNvbmVkX21lbW9yeV9yZXNlcnZlKHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtO1xcbitcXHRwaHlzX2FkZHJfdCBzdGFydCwgZW5kO1xcbitcXG4rXFx0aWYgKGVmaS5wb2lzb25lZF9tZW1vcnkgPT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUilcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cG0gPSBlYXJseV9tZW1yZW1hcChlZmkucG9pc29uZWRfbWVtb3J5LCBzaXplb2YoKnBtKSk7XFxuK1xcdGlmICghcG0pIHtcXG4rXFx0XFx0cHJfd2FybihcXFwiQ291bGQgbm90IG1hcCBwb2lzb25lZC1tZW1vcnkgdGFibGVcXFxcblxcXCIpO1xcbitcXHRcXHRlZmkucG9pc29uZWRfbWVtb3J5ID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUjtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIWVmaV9wb2lzb25fdGFibGVfdmFsaWQocG0pKSB7XFxuK1xcdFxcdGVmaS5wb2lzb25lZF9tZW1vcnkgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSO1xcbitcXHRcXHRlYXJseV9tZW11bm1hcChwbSwgc2l6ZW9mKCpwbSkpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdHN0YXJ0ID0gUEFHRV9BTElHTl9ET1dOKGVmaS5wb2lzb25lZF9tZW1vcnkpO1xcbitcXHRlbmQgPSBQQUdFX0FMSUdOKGVmaS5wb2lzb25lZF9tZW1vcnkgKyBzaXplb2YoKnBtKSArIHBtLVxcdTAwM2VzaXplKTtcXG4rXFx0ZWFybHlfbWVtdW5tYXAocG0sIHNpemVvZigqcG0pKTtcXG4rXFxuK1xcdG1lbWJsb2NrX2FkZChzdGFydCwgZW5kIC0gc3RhcnQpO1xcbitcXHRtZW1ibG9ja19yZXNlcnZlKHN0YXJ0LCBlbmQgLSBzdGFydCk7XFxuK31cXG4rXFxuKy8qIFRoZSB0YWJsZSwgdmV0dGVkIGF0IHBhcnNlIHRpbWUsIG9yIE5VTEwgaWYgdGhpcyBib290IGhhcyBub25lLiAqL1xcbitzdGF0aWMgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKmVmaV9wb2lzb25lZF9tZW1vcnkodm9pZClcXG4re1xcbitcXHRpZiAoZWZpLnBvaXNvbmVkX21lbW9yeSA9PSBFRklfSU5WQUxJRF9UQUJMRV9BRERSKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdHJldHVybiBwaHlzX3RvX3ZpcnQoZWZpLnBvaXNvbmVkX21lbW9yeSk7XFxuK31cXG4rXFxuKy8qIERvZXMgdGhlIHJhbmdlIGNvdmVyIGEgdW5pdCBhbiBlYXJsaWVyIGtlcm5lbCByZWNvcmRlZCBhcyBiYWQ/ICovXFxuK2Jvb2wgcmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5KHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpXFxuK3tcXG4rXFx0c3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtID0gZWZpX3BvaXNvbmVkX21lbW9yeSgpO1xcbitcXHR1NjQgZmlyc3QsIGxhc3QsIG5iaXRzO1xcbitcXG4rXFx0aWYgKCFwbSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0bmJpdHMgPSBwbS1cXHUwMDNlc2l6ZSAqIEJJVFNfUEVSX0JZVEU7XFxuK1xcbitcXHRpZiAoc3RhcnQgKyBzaXplIFxcdTAwM2M9IHBtLVxcdTAwM2VwaHlzX2Jhc2UpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0aWYgKHN0YXJ0IFxcdTAwM2MgcG0tXFx1MDAzZXBoeXNfYmFzZSlcXG4rXFx0XFx0c3RhcnQgPSBwbS1cXHUwMDNlcGh5c19iYXNlO1xcbitcXG4rXFx0Zmlyc3QgPSAoc3RhcnQgLSBwbS1cXHUwMDNlcGh5c19iYXNlKSAvIHBtLVxcdTAwM2V1bml0X3NpemU7XFxuK1xcdGlmIChmaXJzdCBcXHUwMDNlPSBuYml0cylcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0bGFzdCA9IChzdGFydCArIHNpemUgLSAxIC0gcG0tXFx1MDAzZXBoeXNfYmFzZSkgLyBwbS1cXHUwMDNldW5pdF9zaXplO1xcbitcXHRsYXN0ID0gbWluKGxhc3QsIG5iaXRzIC0gMSk7XFxuK1xcbitcXHRyZXR1cm4gZmluZF9uZXh0X2JpdChwbS1cXHUwMDNlYml0bWFwLCBsYXN0ICsgMSwgZmlyc3QpIFxcdTAwM2M9IGxhc3Q7XFxuK31cXG4rXFxuKy8qXFxuKyAqIEEgYml0IGlzIG5ldmVyIGNsZWFyZWQ6IGl0IHN0YW5kcyBmb3IgYSB3aG9sZSBFRklfUE9JU09OX1VOSVRfU0laRSwgc28gYW5cXG4rICogdW5wb2lzb24gY2Fubm90IHRlbGwgd2hldGhlciB0aGUgdW5pdCBhcyBhIHdob2xlIGlzIGdvb2QgYWdhaW4uXFxuKyAqL1xcbit2b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKVxcbit7XFxuK1xcdHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSA9IGVmaV9wb2lzb25lZF9tZW1vcnkoKTtcXG4rXFx0cGh5c19hZGRyX3QgYWRkciA9IFBGTl9QSFlTKHBmbik7XFxuK1xcdHU2NCB1bml0O1xcbitcXG4rXFx0aWYgKCFwbSB8fCBhZGRyIFxcdTAwM2MgcG0tXFx1MDAzZXBoeXNfYmFzZSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0dW5pdCA9IChhZGRyIC0gcG0tXFx1MDAzZXBoeXNfYmFzZSkgLyBwbS1cXHUwMDNldW5pdF9zaXplO1xcbitcXHRpZiAodW5pdCBcXHUwMDNjIHBtLVxcdTAwM2VzaXplICogQklUU19QRVJfQllURSlcXG4rXFx0XFx0c2V0X2JpdCh1bml0LCBwbS1cXHUwMDNlYml0bWFwKTtcXG4rfVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2VmaS5oIGIvaW5jbHVkZS9saW51eC9lZmkuaFxcbmluZGV4IGMzNTQ0NmEwYjY2ZmEuLjU2NDAyZmRjY2QxMTQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9lZmkuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZWZpLmhcXG5AQCAtMjMsNiArMjMsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHN0b3JlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yYW5nZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcmVib290LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zaXplcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdXVpZC5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9wYWdlLmhcXHUwMDNlXFxuQEAgLTQyMiw2ICs0MjMsNyBAQCB2b2lkIGVmaV9uYXRpdmVfcnVudGltZV9zZXR1cCh2b2lkKTtcXG4gI2RlZmluZSBMSU5VWF9FRklfQ09DT19TRUNSRVRfQVJFQV9HVUlEXFx0XFx0RUZJX0dVSUQoMHhhZGY5NTZhZCwgMHhlOThjLCAweDQ4NGMsICAweGFlLCAweDExLCAweGI1LCAweDFjLCAweDdkLCAweDMzLCAweDY0LCAweDQ3KVxcbiAjZGVmaW5lIExJTlVYX0VGSV9CT09UX01FTU1BUF9HVUlEXFx0XFx0RUZJX0dVSUQoMHg4MDBmNjgzZiwgMHhkMDhiLCAweDQyM2EsICAweGEyLCAweDkzLCAweDk2LCAweDVjLCAweDNjLCAweDZmLCAweGUyLCAweGI0KVxcbiAjZGVmaW5lIExJTlVYX0VGSV9VTkFDQ0VQVEVEX01FTV9UQUJMRV9HVUlEXFx0RUZJX0dVSUQoMHhkNWQxZGUzYywgMHgxMDVjLCAweDQ0ZjksICAweDllLCAweGE5LCAweGJjLCAweGVmLCAweDk4LCAweDEyLCAweDAwLCAweDMxKVxcbisjZGVmaW5lIExJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRFxcdEVGSV9HVUlEKDB4YWY4MjhhMTUsIDB4MGVmNCwgMHg0MzlhLCAgMHhiOCwgMHg2YSwgMHhkNiwgMHhkNiwgMHg5ZSwgMHhhZiwgMHhiYSwgMHhmYSlcXG4gXFxuICNkZWZpbmUgUklTQ1ZfRUZJX0JPT1RfUFJPVE9DT0xfR1VJRFxcdFxcdEVGSV9HVUlEKDB4Y2NkMTVmZWMsIDB4NmY3MywgMHg0ZWVjLCAgMHg4MywgMHg5NSwgMHgzZSwgMHg2OSwgMHhlNCwgMHhiOSwgMHg0MCwgMHhiZilcXG4gXFxuQEAgLTY1MCw2ICs2NTIsNyBAQCBleHRlcm4gc3RydWN0IGVmaSB7XFxuIFxcdHVuc2lnbmVkIGxvbmdcXHRcXHRcXHRtb2t2YXJfdGFibGU7XFx0XFx0LyogTU9LIHZhcmlhYmxlIGNvbmZpZyB0YWJsZSAqL1xcbiBcXHR1bnNpZ25lZCBsb25nXFx0XFx0XFx0Y29jb19zZWNyZXQ7XFx0XFx0LyogQ29uZmlkZW50aWFsIGNvbXB1dGluZyBzZWNyZXQgdGFibGUgKi9cXG4gXFx0dW5zaWduZWQgbG9uZ1xcdFxcdFxcdHVuYWNjZXB0ZWQ7XFx0XFx0LyogVW5hY2NlcHRlZCBtZW1vcnkgdGFibGUgKi9cXG4rXFx0dW5zaWduZWQgbG9uZ1xcdFxcdFxcdHBvaXNvbmVkX21lbW9yeTtcXHQvKiBIYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgdGFibGUgKi9cXG4gXFxuIFxcdGVmaV9nZXRfdGltZV90XFx0XFx0XFx0KmdldF90aW1lO1xcbiBcXHRlZmlfc2V0X3RpbWVfdFxcdFxcdFxcdCpzZXRfdGltZTtcXG5AQCAtMTI3Miw2ICsxMjc1LDI1IEBAIHN0cnVjdCBsaW51eF9lZmlfbWVtcmVzZXJ2ZSB7XFxuICNkZWZpbmUgRUZJX01FTVJFU0VSVkVfQ09VTlQoc2l6ZSkgKCgoc2l6ZSkgLSBzaXplb2Yoc3RydWN0IGxpbnV4X2VmaV9tZW1yZXNlcnZlKSkgXFxcXFxcbiBcXHQvIHNpemVvZl9maWVsZChzdHJ1Y3QgbGludXhfZWZpX21lbXJlc2VydmUsIGVudHJ5WzBdKSlcXG4gXFxuKy8qIEJpdCBOIGNvdmVycyB0aGUgdW5pdCBhdCBAcGh5c19iYXNlICsgTiAqIEB1bml0X3NpemUuICovXFxuK3N0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5IHtcXG4rXFx0dTMyXFx0XFx0dmVyc2lvbjtcXG4rXFx0dTMyXFx0XFx0dW5pdF9zaXplO1xcdC8qIGJ5dGVzIG9mIHBoeXMgc3BhY2UgcGVyIGJpdG1hcCBiaXQgKi9cXG4rXFx0dTY0XFx0XFx0cGh5c19iYXNlO1xcdC8qIGFkZHJlc3MgdGhlIGZpcnN0IGJpdCBjb3ZlcnMgKi9cXG4rXFx0dTY0XFx0XFx0c2l6ZTtcXHRcXHQvKiBiaXRtYXAgc2l6ZSBpbiBieXRlcyAqL1xcbitcXHR1bnNpZ25lZCBsb25nXFx0Yml0bWFwW107XFxuK307XFxuK1xcbisjZGVmaW5lIEVGSV9QT0lTT05fVU5JVF9TSVpFXFx0U1pfMk1cXG4rXFxuKyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWVxcbit2b2lkIF9faW5pdCBlZmlfcG9pc29uZWRfbWVtb3J5X3Jlc2VydmUodm9pZCk7XFxuK3ZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pO1xcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIHZvaWQgZWZpX3BvaXNvbmVkX21lbW9yeV9yZXNlcnZlKHZvaWQpIHsgfVxcbitzdGF0aWMgaW5saW5lIHZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pIHsgfVxcbisjZW5kaWZcXG4rXFxuIHZvaWQgX19pbml0IGVmaV9hcmNoX21lbV9yZXNlcnZlKHBoeXNfYWRkcl90IGFkZHIsIHU2NCBzaXplKTtcXG4gXFxuIC8qXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaFxcbmluZGV4IDI3NGZhODgwMDc3YzUuLjlkOWYyZThmZGMxMzYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tbS5oXFxuQEAgLTUyMjUsNiArNTIyNSw3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG1lbW9yeV9mYWlsdXJlX2F0dHJfZ3JvdXA7XFxuIGV4dGVybiB2b2lkIG1lbW9yeV9mYWlsdXJlX3F1ZXVlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpO1xcbiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pO1xcbiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSk7XFxuK3ZvaWQgX19tZW1pbml0IGh3cG9pc29uX2Jvb3RfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuIHBoeXNfYWRkcl90IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpO1xcbiBwaHlzX2FkZHJfdCByYW5nZV9sYXN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpO1xcbiAjZWxzZVxcbkBAIC01MjMyLDYgKzUyMzMsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbW9yeV9mYWlsdXJlX3F1ZXVlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXFxuIHtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSB2b2lkIGh3cG9pc29uX2Jvb3RfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4re1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX2luYyh1bnNpZ25lZCBsb25nIHBmbilcXG4ge1xcbiB9XFxuQEAgLTUzODcsNiArNTM5MiwyMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcGZuX2lzX3VuYWNjZXB0ZWRfbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxcbiBcXHRyZXR1cm4gcmFuZ2VfY29udGFpbnNfdW5hY2NlcHRlZF9tZW1vcnkocGZuIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQsIFBBR0VfU0laRSk7XFxuIH1cXG4gXFxuKyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWVxcbitcXG4rYm9vbCByYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnkocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7XFxuK1xcbisjZWxzZVxcbitcXG4rc3RhdGljIGlubGluZSBib29sIHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeShwaHlzX2FkZHJfdCBzdGFydCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIHNpemUpXFxuK3tcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbisjZW5kaWZcXG4rXFxuIHZvaWQgdm1hX3BndGFibGVfd2Fsa19iZWdpbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuIHZvaWQgdm1hX3BndGFibGVfd2Fsa19lbmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmNcXG5pbmRleCBhMmNhOGRmNTAxY2FlLi5mNmFmZGIyYTg5YTk0IDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmNcXG4rKysgYi9tbS9tZW1vcnktZmFpbHVyZS5jXFxuQEAgLTQzLDYgKzQzLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL3NpZ25hbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvdGFzay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGF4LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9lZmkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tzbS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcm1hcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxuQEAgLTEzNiw2ICsxMzcsMjEgQEAgcGh5c19hZGRyX3QgcmFuZ2VfbGFzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKVxcbiBcXHRyZXR1cm4gcmFuZ2VfaHdwb2lzb24oc3RhcnQsIHNpemUsIGZhbHNlKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgdXBkYXRlX3Blcl9ub2RlX21mX3N0YXRzKHVuc2lnbmVkIGxvbmcgcGZuLCBlbnVtIG1mX3Jlc3VsdCByZXN1bHQpO1xcbitcXG4rLyogTm90IG51bV9wb2lzb25lZF9wYWdlc19pbmMoKTogaXRzIHBlciBibG9jayBoYWxmIGRpdmlkZXMgYnkgemVybyB0aGlzIGVhcmx5LiAqL1xcbit2b2lkIF9fbWVtaW5pdCBod3BvaXNvbl9ib290X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuK3tcXG4rXFx0aWYgKFBhZ2VIV1BvaXNvbihwYWdlKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0U2V0UGFnZUhXUG9pc29uKHBhZ2UpO1xcbitcXHRzZXRfcGFnZV9jb3VudChwYWdlLCAxKTtcXG4rXFx0LyogVGhlIHBhZ2UgaGFzIGJlZW4gY29tcGxldGVseSBpc29sYXRlZCA9PSBNRl9SRUNPVkVSRUQgKi9cXG4rXFx0dXBkYXRlX3Blcl9ub2RlX21mX3N0YXRzKHBhZ2VfdG9fcGZuKHBhZ2UpLCBNRl9SRUNPVkVSRUQpO1xcbitcXHRhdG9taWNfbG9uZ19pbmMoXFx1MDAyNm51bV9wb2lzb25lZF9wYWdlcyk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBNRl9BVFRSX1JPIC0gQ3JlYXRlIHN5c2ZzIGVudHJ5IGZvciBlYWNoIG1lbW9yeSBmYWlsdXJlIHN0YXRpc3RpY3MuXFxuICAqIEBfbmFtZTogbmFtZSBvZiB0aGUgZmlsZSBpbiB0aGUgcGVyIE5VTUEgc3lzZnMgZGlyZWN0b3J5LlxcbkBAIC0xMzI2LDYgKzEzNDIsOCBAQCBzdGF0aWMgaW50IGFjdGlvbl9yZXN1bHQodW5zaWduZWQgbG9uZyBwZm4sIGVudW0gbWZfYWN0aW9uX3BhZ2VfdHlwZSB0eXBlLFxcbiBcXHRpZiAodHlwZSAhPSBNRl9NU0dfQUxSRUFEWV9QT0lTT05FRCBcXHUwMDI2XFx1MDAyNiB0eXBlICE9IE1GX01TR19QRk5fTUFQKSB7XFxuIFxcdFxcdG51bV9wb2lzb25lZF9wYWdlc19pbmMocGZuKTtcXG4gXFx0XFx0dXBkYXRlX3Blcl9ub2RlX21mX3N0YXRzKHBmbiwgcmVzdWx0KTtcXG4rXFx0XFx0LyogT25seSBoYXJkIG9mZmxpbmVzIGFyZSBjYXJyaWVkIG92ZXIgdG8gdGhlIG5leHQga2VybmVsLiAqL1xcbitcXHRcXHRlZmlfaHdwb2lzb25fcmVjb3JkX3BmbihwZm4pO1xcbiBcXHR9XFxuIFxcbiBcXHRwcl9lcnIoXFxcIiUjbHg6IHJlY292ZXJ5IGFjdGlvbiBmb3IgJXM6ICVzXFxcXG5cXFwiLFxcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcXG5pbmRleCA0MDQ4OTZiNTMwMDNlLi45ZTJjZTgzM2ZkNDA5IDEwMDY0NFxcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xcbisrKyBiL21tL3BhZ2VfYWxsb2MuY1xcbkBAIC0xNTc5LDYgKzE1NzksMTkgQEAgc3RhdGljIHZvaWQgX19mcmVlX3BhZ2VzX29rKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuIFxcdFxcdGZyZWVfb25lX3BhZ2Uoem9uZSwgcGFnZSwgcGZuLCBvcmRlciwgZnBpX2ZsYWdzKTtcXG4gfVxcbiBcXG4rLyogRmxhZyB0aGUgZnJhbWVzIGFuIGVhcmxpZXIga2VybmVsIHJlY29yZGVkIGFzIGJhZC4gKi9cXG4rc3RhdGljIHZvaWQgX19tZW1pbml0IHBvaXNvbl9ibG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgaSwgbnJfcGFnZXMgPSAxVUwgXFx1MDAzY1xcdTAwM2Mgb3JkZXI7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfcGFnZXM7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgcGFnZSAqcCA9IHBhZ2UgKyBpO1xcbitcXG4rXFx0XFx0aWYgKHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeShwYWdlX3RvX3BoeXMocCksIFBBR0VfU0laRSkpXFxuK1xcdFxcdFxcdGh3cG9pc29uX2Jvb3RfcGFnZShwKTtcXG4rXFx0fVxcbit9XFxuK1xcbiB2b2lkIF9fbWVtaW5pdCBfX2ZyZWVfcGFnZXNfY29yZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxcbiBcXHRcXHRlbnVtIG1lbWluaXRfY29udGV4dCBjb250ZXh0KVxcbiB7XFxuQEAgLTE2MTMsNiArMTYyNiwxOCBAQCB2b2lkIF9fbWVtaW5pdCBfX2ZyZWVfcGFnZXNfY29yZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxcbiBcXHRcXHRhdG9taWNfbG9uZ19hZGQobnJfcGFnZXMsIFxcdTAwMjZwYWdlX3pvbmUocGFnZSktXFx1MDAzZW1hbmFnZWRfcGFnZXMpO1xcbiBcXHR9XFxuIFxcbitcXHQvKiBGaXJzdDogYSBibG9jayBwYXJrZWQgYnkgX19mcmVlX3VuYWNjZXB0ZWQoKSBuZXZlciByZXR1cm5zIGhlcmUuICovXFxuK1xcdGlmIChyYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnkocGFnZV90b19waHlzKHBhZ2UpLFxcbitcXHRcXHRcXHRcXHRcXHQgICBQQUdFX1NJWkUgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpKSB7XFxuK1xcdFxcdHBvaXNvbl9ibG9jayhwYWdlLCBvcmRlcik7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRPRE86IGZyZWUgdGhlIGZyYW1lcyBpbiB0aGUgYmxvY2sgdGhhdCBhcmUgbm90IHBvaXNvbmVkLlxcbitcXHRcXHQgKiBUaGV5IHN0YXkgb3V0IG9mIHRoZSBhbGxvY2F0b3IgYW5kIHN0aWxsIGNvdW50IGluXFxuK1xcdFxcdCAqIG1hbmFnZWRfcGFnZXMsIHNvIGEgdW5pdCBjb3N0cyB1cCB0byBhIGJsb2NrLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAocGFnZV9jb250YWluc191bmFjY2VwdGVkKHBhZ2UsIG9yZGVyKSkge1xcbiBcXHRcXHRpZiAob3JkZXIgPT0gTUFYX1BBR0VfT1JERVIgXFx1MDAyNlxcdTAwMjYgX19mcmVlX3VuYWNjZXB0ZWQocGFnZSkpXFxuIFxcdFxcdFxcdHJldHVybjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTQ6MDk6MDYuNzQ0Mzk1ODExWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2MzQwMjA2MjY0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFRklfUE9JU09ORURfTUVNT1JZXCIsXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiRUZJX1NUVUJcIixcbiAgICBcIkVGSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImVmaV9od3BvaXNvbl9yZWNvcmRfcGZuXCIsXG4gICAgXCJyYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnlcIixcbiAgICBcImh3cG9pc29uX2Jvb3RfcGFnZVwiLFxuICAgIFwibWVtb3J5X2ZhaWx1cmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRyYWNraW5nIGhhcmR3YXJlLXBvaXNvbmVkIG1lbW9yeSBhY3Jvc3Mga2V4ZWMgdmlhIGFuIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlIChDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWSkuIEl0IGludHJvZHVjZXMgaG9va3MgaW4gY29yZSBtZW1vcnktZmFpbHVyZSBoYW5kbGluZyAoZWZpX2h3cG9pc29uX3JlY29yZF9wZm4gaW4gYWN0aW9uX3Jlc3VsdCkgYW5kIG1lbW9yeSBpbml0aWFsaXphdGlvbi9ob3RwbHVnIChfX2ZyZWVfcGFnZXNfY29yZSwgaHdwb2lzb25fYm9vdF9wYWdlKS4gVGhlc2UgcGF0aHMgYXJlIHJlYWNoYWJsZSBhdCBydW50aW1lIHZpYSBtZW1vcnkgZmFpbHVyZSBtZWNoYW5pc21zIHN1Y2ggYXMgbWFkdmlzZShNQURWX0hXUE9JU09OKSBhbmQgbWVtb3J5IGhvdHBsdWdnaW5nIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB3aXRoIEVGSS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhNzljYmIxMDVjNTk4MTdhZjMyYTIyYTAwMTcxZjdiYjkxNDY3NjU0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAxNDowOTowNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmkuYyBiL2FyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmkuY1xuaW5kZXggMGMzOWFkYjk2YjkxMi4uMmIzN2I5NmEzNmUwOSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmkuY1xuKysrIGIvYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaS5jXG5AQCAtOTMsNiArOTMsOSBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyAqIGNvbnN0IGVmaV90YWJsZXNbXSA9IHtcbiAjaWZkZWYgQ09ORklHX1VOQUNDRVBURURfTUVNT1JZXG4gXHRcdTAwMjZlZmkudW5hY2NlcHRlZCxcbiAjZW5kaWZcbisjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllcbitcdFx1MDAyNmVmaS5wb2lzb25lZF9tZW1vcnksXG4rI2VuZGlmXG4gfTtcbiBcbiB1NjQgZWZpX3NldHVwO1x0XHQvKiBlZmkgc2V0dXBfZGF0YSBwaHlzaWNhbCBhZGRyZXNzICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWdcbmluZGV4IDI5ZTA3MjkyOTlmNWIuLmFhZmNkNDFiYzAwNjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnXG4rKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnXG5AQCAtMjYzLDYgKzI2MywxNCBAQCBjb25maWcgRUZJX0NPQ09fU0VDUkVUXG4gXHQgIHZpcnQvY29jby9lZmlfc2VjcmV0IG1vZHVsZSB0byBhY2Nlc3MgdGhlIHNlY3JldHMsIHdoaWNoIGluIHR1cm5cbiBcdCAgYWxsb3dzIHVzZXJzcGFjZSBwcm9ncmFtcyB0byBhY2Nlc3MgdGhlIGluamVjdGVkIHNlY3JldHMuXG4gXG4rY29uZmlnIEVGSV9QT0lTT05FRF9NRU1PUllcbitcdGRlZl9ib29sIHlcbitcdGRlcGVuZHMgb24gRUZJX1NUVUIgXHUwMDI2XHUwMDI2IE1FTU9SWV9GQUlMVVJFIFx1MDAyNlx1MDAyNiA2NEJJVFxuK1x0aGVscFxuK1x0ICBSZWNvcmQgcGFnZSBmcmFtZXMgdGhhdCBhcmUgaGFyZHdhcmUtcG9pc29uZWQgd2hpbGUgdGhpcyBrZXJuZWwgcnVuc1xuK1x0ICBpbnRvIGFuIEVGSSBjb25maWd1cmF0aW9uIHRhYmxlLCBhbmQgaG9ub3IgdGhhdCB0YWJsZSBlYXJseSBvbiB0aGVcbitcdCAgbmV4dCBrZXJuZWwgc28gYSBrZXhlYyBkb2VzIG5vdCBoYW5kIGtub3duLWJhZCBSQU0gYmFjayBvdXQuXG4rXG4gY29uZmlnIE9WTUZfREVCVUdfTE9HXG4gXHRib29sIFwiRXhwb3NlIE9WTUYgZmlybXdhcmUgZGVidWcgbG9nIHZpYSBzeXNmc1wiXG4gXHRkZXBlbmRzIG9uIEVGSVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGVcbmluZGV4IDhlZmJjZjY5OWU0ZmYuLjA1ZDBhNDkwOTIzZTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9NYWtlZmlsZVxuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGVcbkBAIC00Myw0ICs0Myw1IEBAIG9iai0kKENPTkZJR19FRklfRUFSTFlDT04pXHRcdCs9IGVhcmx5Y29uLm9cbiBvYmotJChDT05GSUdfVUVGSV9DUEVSX0FSTSlcdFx0Kz0gY3Blci1hcm0ub1xuIG9iai0kKENPTkZJR19VRUZJX0NQRVJfWDg2KVx0XHQrPSBjcGVyLXg4Ni5vXG4gb2JqLSQoQ09ORklHX1VOQUNDRVBURURfTUVNT1JZKVx0XHQrPSB1bmFjY2VwdGVkX21lbW9yeS5vXG4rb2JqLSQoQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUlkpXHQrPSBwb2lzb24ub1xuIG9iai0kKENPTkZJR19URUVfU1RNTV9FRkkpXHRcdCs9IHN0bW0vdGVlX3N0bW1fZWZpLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jXG5pbmRleCA2ZDk4N2Q3Zjk3NzgxLi41NWIyZWU1M2ZjMjY4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmNcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jXG5AQCAtNTUsNiArNTUsOSBAQCBzdHJ1Y3QgZWZpIF9fcmVhZF9tb3N0bHkgZWZpID0ge1xuICNpZmRlZiBDT05GSUdfVU5BQ0NFUFRFRF9NRU1PUllcbiBcdC51bmFjY2VwdGVkXHRcdD0gRUZJX0lOVkFMSURfVEFCTEVfQUREUixcbiAjZW5kaWZcbisjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllcbitcdC5wb2lzb25lZF9tZW1vcnlcdD0gRUZJX0lOVkFMSURfVEFCTEVfQUREUixcbisjZW5kaWZcbiB9O1xuIEVYUE9SVF9TWU1CT0woZWZpKTtcbiBcbkBAIC02NzcsNiArNjgwLDkgQEAgc3RhdGljIGNvbnN0IGVmaV9jb25maWdfdGFibGVfdHlwZV90IGNvbW1vbl90YWJsZXNbXSBfX2luaXRjb25zdCA9IHtcbiAjaWZkZWYgQ09ORklHX1VOQUNDRVBURURfTUVNT1JZXG4gXHR7TElOVVhfRUZJX1VOQUNDRVBURURfTUVNX1RBQkxFX0dVSUQsXHRcdTAwMjZlZmkudW5hY2NlcHRlZCxcdFwiVW5hY2NlcHRlZFwiXHR9LFxuICNlbmRpZlxuKyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWVxuK1x0e0xJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRCxcdFx1MDAyNmVmaS5wb2lzb25lZF9tZW1vcnksXHRcIlBPSVNPTlwiXHR9LFxuKyNlbmRpZlxuICNpZmRlZiBDT05GSUdfRUZJX0dFTkVSSUNfU1RVQlxuIFx0e0xJTlVYX0VGSV9QUklNQVJZX0RJU1BMQVlfVEFCTEVfR1VJRCxcdFx1MDAyNnByaW1hcnlfZGlzcGxheV90YWJsZVx0XHRcdH0sXG4gI2VuZGlmXG5AQCAtODc3LDYgKzg4Myw4IEBAIGludCBfX2luaXQgZWZpX2NvbmZpZ19wYXJzZV90YWJsZXMoY29uc3QgZWZpX2NvbmZpZ190YWJsZV90ICpjb25maWdfdGFibGVzLFxuIFx0XHR9XG4gXHR9XG4gXG4rXHRlZmlfcG9pc29uZWRfbWVtb3J5X3Jlc2VydmUoKTtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuY1xuaW5kZXggNDhmOTNmNzc1OGU5ZS4uNWNiZTY3NTQ5MTMzMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmNcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmNcbkBAIC03NzQsMyArNzc0LDEwMyBAQCB2b2lkIGVmaV9yZW1hcF9pbWFnZSh1bnNpZ25lZCBsb25nIGltYWdlX2Jhc2UsIHVuc2lnbmVkIGFsbG9jX3NpemUsXG4gXHRcdFx0ZWZpX3dhcm4oXCJGYWlsZWQgdG8gcmVtYXAgZGF0YSByZWdpb24gbm9uLWV4ZWN1dGFibGVcXG5cIik7XG4gXHR9XG4gfVxuK1xuKyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWVxuKy8qXG4rICogRmluZCB0aGUgYmFzZSBhbmQgdG9wIG9mIHRoZSBtZW1vcnksIHNvLCB3ZSBjYW4gY3JlYXRlIHRoZSBiaXRtYXAgZm9yXG4rICogdGhlIGZ1bGwgcmFuZ2UuXG4rICovXG4rc3RhdGljIGVmaV9zdGF0dXNfdCBlZmlfZ2V0X3JhbV9yYW5nZSh1NjQgKmJhc2UsIHU2NCAqdG9wKVxuK3tcbitcdHN0cnVjdCBlZmlfYm9vdF9tZW1tYXAgKm1hcCBfX2ZyZWUoZWZpX3Bvb2wpID0gTlVMTDtcbitcdHU2NCByYW1fYmFzZSA9IFVMTE9OR19NQVgsIHJhbV90b3AgPSAwO1xuK1x0ZWZpX3N0YXR1c190IHN0YXR1cztcbitcdGludCBpLCBucl9kZXNjO1xuK1xuK1x0c3RhdHVzID0gZWZpX2dldF9tZW1vcnlfbWFwKFx1MDAyNm1hcCwgZmFsc2UpO1xuK1x0aWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUylcbitcdFx0cmV0dXJuIHN0YXR1cztcbitcbitcdG5yX2Rlc2MgPSBtYXAtXHUwMDNlbWFwX3NpemUgLyBtYXAtXHUwMDNlZGVzY19zaXplO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfZGVzYzsgaSsrKSB7XG4rXHRcdGVmaV9tZW1vcnlfZGVzY190ICpkO1xuK1xuK1x0XHRkID0gZWZpX21lbWRlc2NfcHRyKCh1bnNpZ25lZCBsb25nKW1hcC1cdTAwM2VtYXAsIG1hcC1cdTAwM2VkZXNjX3NpemUsIGkpO1xuK1x0XHRyYW1fYmFzZSA9IG1pbihyYW1fYmFzZSwgZC1cdTAwM2VwaHlzX2FkZHIpO1xuK1x0XHRyYW1fdG9wID0gbWF4KHJhbV90b3AsXG4rXHRcdFx0ICAgICAgZC1cdTAwM2VwaHlzX2FkZHIgKyBkLVx1MDAzZW51bV9wYWdlcyAqIEVGSV9QQUdFX1NJWkUpO1xuK1x0fVxuK1x0aWYgKCFyYW1fdG9wIHx8IHJhbV9iYXNlID09IFVMTE9OR19NQVgpXG4rXHRcdHJldHVybiBFRklfTk9UX0ZPVU5EO1xuK1xuK1x0KmJhc2UgPSByb3VuZF9kb3duKHJhbV9iYXNlLCBFRklfUE9JU09OX1VOSVRfU0laRSk7XG4rXHQqdG9wID0gcm91bmRfdXAocmFtX3RvcCwgRUZJX1BPSVNPTl9VTklUX1NJWkUpO1xuK1xuK1x0cmV0dXJuIEVGSV9TVUNDRVNTO1xuK31cbitcbisvKiBUaGUgc2l6ZSBvZiB0aGUgYml0bWFwICovXG4rc3RhdGljIHU2NCBlZmlfcG9pc29uX2JpdG1hcF9zaXplKHU2NCBzcGFuKVxuK3tcbitcdHU2NCBieXRlcyA9IERJVl9ST1VORF9VUChESVZfUk9VTkRfVVAoc3BhbiwgRUZJX1BPSVNPTl9VTklUX1NJWkUpLFxuK1x0XHRcdFx0IEJJVFNfUEVSX0JZVEUpO1xuK1xuK1x0cmV0dXJuIHJvdW5kX3VwKGJ5dGVzLCBzaXplb2YodW5zaWduZWQgbG9uZykpO1xuK31cbitcbitzdGF0aWMgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKmVmaV9wb2lzb25fYWxsb2ModTY0IHBoeXNfYmFzZSxcbitcdFx0XHRcdFx0XHRcdCAgdTY0IGJpdG1hcF9zaXplKVxuK3tcbitcdHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTtcbitcdGVmaV9zdGF0dXNfdCBzdGF0dXM7XG4rXG4rXHRzdGF0dXMgPSBlZmlfYnNfY2FsbChhbGxvY2F0ZV9wb29sLCBFRklfQUNQSV9SRUNMQUlNX01FTU9SWSxcbitcdFx0XHQgICAgIHNpemVvZigqcG0pICsgYml0bWFwX3NpemUsICh2b2lkICoqKVx1MDAyNnBtKTtcbitcdGlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0cG0tXHUwMDNldmVyc2lvbiA9IDE7XG4rXHRwbS1cdTAwM2V1bml0X3NpemUgPSBFRklfUE9JU09OX1VOSVRfU0laRTtcbitcdHBtLVx1MDAzZXBoeXNfYmFzZSA9IHBoeXNfYmFzZTtcbitcdHBtLVx1MDAzZXNpemUgPSBiaXRtYXBfc2l6ZTtcbitcdG1lbXNldChwbS1cdTAwM2ViaXRtYXAsIDAsIGJpdG1hcF9zaXplKTtcbitcbitcdHJldHVybiBwbTtcbit9XG4rXG4rLyogVGhpcyBuZWVkcyB0byBiZSBkb25lIHdoaWxlIGJvb3Qgc2VydmljZSBpcyBzdGlsbCBhY3RpdmUgKi9cbit2b2lkIGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKHZvaWQpXG4re1xuK1x0ZWZpX2d1aWRfdCBwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCA9IExJTlVYX0VGSV9QT0lTT05FRF9NRU1PUllfVEFCTEVfR1VJRDtcbitcdHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTtcbitcdHU2NCByYW1fYmFzZSwgcmFtX3RvcCwgYml0bWFwX3NpemU7XG4rXHRlZmlfc3RhdHVzX3Qgc3RhdHVzO1xuK1xuK1x0LyogQSB0YWJsZSBpbnN0YWxsZWQgYnkgYW4gZWFybGllciBib290IHJpZGVzIHRoZSBzeXN0ZW0gdGFibGUgYWNyb3NzIGtleGVjLiAqL1xuK1x0cG0gPSBnZXRfZWZpX2NvbmZpZ190YWJsZShwb2lzb25lZF9tZW1vcnlfdGFibGVfZ3VpZCk7XG4rXHRpZiAocG0pIHtcbitcdFx0aWYgKHBtLVx1MDAzZXZlcnNpb24gIT0gMSlcbitcdFx0XHRlZmlfZXJyKFwiVW5rbm93biB2ZXJzaW9uIG9mIHBvaXNvbmVkLW1lbW9yeSB0YWJsZVxcblwiKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0aWYgKGVmaV9nZXRfcmFtX3JhbmdlKFx1MDAyNnJhbV9iYXNlLCBcdTAwMjZyYW1fdG9wKSAhPSBFRklfU1VDQ0VTUykge1xuK1x0XHRlZmlfZXJyKFwiRmFpbGVkIHRvIHNpemUgdGhlIHBvaXNvbmVkLW1lbW9yeSB0YWJsZSFcXG5cIik7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGJpdG1hcF9zaXplID0gZWZpX3BvaXNvbl9iaXRtYXBfc2l6ZShyYW1fdG9wIC0gcmFtX2Jhc2UpO1xuK1x0cG0gPSBlZmlfcG9pc29uX2FsbG9jKHJhbV9iYXNlLCBiaXRtYXBfc2l6ZSk7XG4rXHRpZiAoIXBtKSB7XG4rXHRcdGVmaV9lcnIoXCJGYWlsZWQgdG8gYWxsb2NhdGUgcG9pc29uZWQtbWVtb3J5IHRhYmxlIVxcblwiKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0c3RhdHVzID0gZWZpX2JzX2NhbGwoaW5zdGFsbF9jb25maWd1cmF0aW9uX3RhYmxlLFxuK1x0XHRcdCAgICAgXHUwMDI2cG9pc29uZWRfbWVtb3J5X3RhYmxlX2d1aWQsIHBtKTtcbitcdGlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIHtcbitcdFx0ZWZpX2JzX2NhbGwoZnJlZV9wb29sLCBwbSk7XG4rXHRcdGVmaV9lcnIoXCJGYWlsZWQgdG8gaW5zdGFsbCBwb2lzb25lZC1tZW1vcnkgY29uZmlnIHRhYmxlIVxcblwiKTtcbitcdH1cbit9XG4rI2VuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jXG5pbmRleCAyMzVjOTczOGRhMmQ2Li4yMmEzMTVlMjgxNGExIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jXG4rKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLmNcbkBAIC0xNzksNiArMTc5LDcgQEAgZWZpX3N0YXR1c190IGVmaV9zdHViX2NvbW1vbihlZmlfaGFuZGxlX3QgaGFuZGxlLFxuIFx0XHRcdCBFRklfUlRfU1VQUE9SVEVEX1NFVF9WSVJUVUFMX0FERFJFU1NfTUFQKTtcbiBcbiBcdGluc3RhbGxfbWVtcmVzZXJ2ZV90YWJsZSgpO1xuK1x0aW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUoKTtcbiBcbiBcdHN0YXR1cyA9IGVmaV9ib290X2tlcm5lbChoYW5kbGUsIGltYWdlLCBpbWFnZV9hZGRyLCBjbWRsaW5lX3B0cik7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmggYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaFxuaW5kZXggZmQ5MWZjMTVlYzgxMC4uNDQ0MzY4NjljNGVmZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oXG4rKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaFxuQEAgLTExNjksNiArMTE2OSwxMiBAQCBlZmlfZW5hYmxlX3Jlc2V0X2F0dGFja19taXRpZ2F0aW9uKHZvaWQpIHsgfVxuIFxuIHZvaWQgZWZpX3JldHJpZXZlX2V2ZW50bG9nKHZvaWQpO1xuIFxuKyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWVxuK3ZvaWQgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUodm9pZCk7XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIHZvaWQgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGUodm9pZCkgeyB9XG4rI2VuZGlmXG4rXG4gc3RydWN0IHN5c2ZiX2Rpc3BsYXlfaW5mbyAqYWxsb2NfcHJpbWFyeV9kaXNwbGF5KHZvaWQpO1xuIHN0cnVjdCBzeXNmYl9kaXNwbGF5X2luZm8gKl9fYWxsb2NfcHJpbWFyeV9kaXNwbGF5KHZvaWQpO1xuIHZvaWQgZnJlZV9wcmltYXJ5X2Rpc3BsYXkoc3RydWN0IHN5c2ZiX2Rpc3BsYXlfaW5mbyAqZHB5KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmNcbmluZGV4IDBiYWUwZjA2YjY3NjMuLjMxMzYxMzJiOTYyOGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmNcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIveDg2LXN0dWIuY1xuQEAgLTEwMjQsNiArMTAyNCw4IEBAIHZvaWQgX19ub3JldHVybiBlZmlfc3R1Yl9lbnRyeShlZmlfaGFuZGxlX3QgaGFuZGxlLFxuIFxuIFx0c2V0dXBfdW5hY2NlcHRlZF9tZW1vcnkoKTtcbiBcbitcdGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKCk7XG4rXG4gXHRzdGF0dXMgPSBleGl0X2Jvb3QoYm9vdF9wYXJhbXMsIGhhbmRsZSk7XG4gXHRpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7XG4gXHRcdGVmaV9lcnIoXCJleGl0X2Jvb3QoKSBmYWlsZWQhXFxuXCIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5lMTZkNDNmNDQzOGVlXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uY1xuQEAgLTAsMCArMSwxNDEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rLypcbisgKiBSdW50aW1lIHNpZGUgb2YgdGhlIExJTlVYX0VGSV9QT0lTT05FRF9NRU1PUlkgdGFibGU6IG9uZSBiaXQgcGVyXG4rICogRUZJX1BPSVNPTl9VTklUX1NJWkUsIHNldCBoZXJlIGFzIGZyYW1lcyBnbyBiYWQsIGhvbm9yZWQgYnkgdGhlIG5leHQga2VybmVsLlxuKyAqXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBCcmVubyBMZWl0YW8gXHUwMDNjbGVpdGFvQGRlYmlhbi5vcmdcdTAwM2VcbisgKi9cbitcbisjZGVmaW5lIHByX2ZtdChmbXQpIFwiZWZpOiBcIiBmbXRcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRtYXAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2VmaS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xvZzIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWJsb2NrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvb3ZlcmZsb3cuaFx1MDAzZVxuK1xuK3N0YXRpYyBib29sIF9faW5pdFxuK2VmaV9wb2lzb25fZ2VvbWV0cnlfdmFsaWQoY29uc3Qgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtKVxuK3tcbitcdHU2NCBuYml0cztcbitcbitcdC8qIFdob2xlIHdvcmRzLCBhbmQgYSBiaXQgY291bnQgdGhhdCBjYW4gYmUgdGFrZW4gd2l0aG91dCB3cmFwcGluZy4gKi9cbitcdGlmICghcG0tXHUwMDNlc2l6ZSB8fCAhSVNfQUxJR05FRChwbS1cdTAwM2VzaXplLCBzaXplb2YodW5zaWduZWQgbG9uZykpIHx8XG4rXHQgICAgY2hlY2tfbXVsX292ZXJmbG93KHBtLVx1MDAzZXNpemUsICh1NjQpQklUU19QRVJfQllURSwgXHUwMDI2bmJpdHMpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAocG0tXHUwMDNldW5pdF9zaXplIFx1MDAzYyBQQUdFX1NJWkUgfHwgIWlzX3Bvd2VyX29mXzIocG0tXHUwMDNldW5pdF9zaXplKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cmV0dXJuIElTX0FMSUdORUQocG0tXHUwMDNlcGh5c19iYXNlLCBwbS1cdTAwM2V1bml0X3NpemUpO1xuK31cbitcbisvKiBUaGUgdGFibGUgbWF5IGNvbWUgZnJvbSBhbiBlYXJsaWVyIGtlcm5lbCwgc28gdmV0IGl0IGJlZm9yZSB1c2luZyBpdC4gKi9cbitzdGF0aWMgYm9vbCBfX2luaXRcbitlZmlfcG9pc29uX3RhYmxlX3ZhbGlkKGNvbnN0IHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSlcbit7XG4rXHRpZiAocG0tXHUwMDNldmVyc2lvbiAhPSAxKSB7XG4rXHRcdHByX3dhcm4oXCJJZ25vcmluZyBwb2lzb25lZC1tZW1vcnkgdGFibGUgd2l0aCB2ZXJzaW9uICV1XFxuXCIsXG4rXHRcdFx0cG0tXHUwMDNldmVyc2lvbik7XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbitcdGlmICghZWZpX3BvaXNvbl9nZW9tZXRyeV92YWxpZChwbSkpIHtcbitcdFx0cHJfd2FybihcIklnbm9yaW5nIG1hbGZvcm1lZCBwb2lzb25lZC1tZW1vcnkgdGFibGVcXG5cIik7XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbisvKlxuKyAqIFZldCB0aGUgaW5oZXJpdGVkIHRhYmxlIGFuZCBoYW5kIGl0cyBwYWdlcyB0byBtZW1ibG9jaywgdGhlIHdheSB0aGVcbisgKiB1bmFjY2VwdGVkIG1lbW9yeSB0YWJsZSBpcyBoYW5kbGVkLiBJdCBpcyBFRkkgQUNQSSByZWNsYWltIG1lbW9yeSwgd2hpY2hcbisgKiBiZWNvbWVzIEU4MjBfVFlQRV9BQ1BJIGFuZCB3b3VsZCBvdGhlcndpc2Ugc3RheSBvdXQgb2YgdGhlIGRpcmVjdCBtYXAsIGFuZFxuKyAqIHRvdWNoaW5nIGl0IHRoZW4gZmF1bHRzLiBDYWxsZWQgZnJvbSBlZmlfY29uZmlnX3BhcnNlX3RhYmxlcygpLCBzb1xuKyAqIGV2ZXJ5dGhpbmcgbGF0ZXIgY2FuIHJlYWNoIGl0IHdpdGggZWZpX3BvaXNvbmVkX21lbW9yeSgpLlxuKyAqL1xuK3ZvaWQgX19pbml0IGVmaV9wb2lzb25lZF9tZW1vcnlfcmVzZXJ2ZSh2b2lkKVxuK3tcbitcdHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTtcbitcdHBoeXNfYWRkcl90IHN0YXJ0LCBlbmQ7XG4rXG4rXHRpZiAoZWZpLnBvaXNvbmVkX21lbW9yeSA9PSBFRklfSU5WQUxJRF9UQUJMRV9BRERSKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRwbSA9IGVhcmx5X21lbXJlbWFwKGVmaS5wb2lzb25lZF9tZW1vcnksIHNpemVvZigqcG0pKTtcbitcdGlmICghcG0pIHtcbitcdFx0cHJfd2FybihcIkNvdWxkIG5vdCBtYXAgcG9pc29uZWQtbWVtb3J5IHRhYmxlXFxuXCIpO1xuK1x0XHRlZmkucG9pc29uZWRfbWVtb3J5ID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUjtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0aWYgKCFlZmlfcG9pc29uX3RhYmxlX3ZhbGlkKHBtKSkge1xuK1x0XHRlZmkucG9pc29uZWRfbWVtb3J5ID0gRUZJX0lOVkFMSURfVEFCTEVfQUREUjtcbitcdFx0ZWFybHlfbWVtdW5tYXAocG0sIHNpemVvZigqcG0pKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0c3RhcnQgPSBQQUdFX0FMSUdOX0RPV04oZWZpLnBvaXNvbmVkX21lbW9yeSk7XG4rXHRlbmQgPSBQQUdFX0FMSUdOKGVmaS5wb2lzb25lZF9tZW1vcnkgKyBzaXplb2YoKnBtKSArIHBtLVx1MDAzZXNpemUpO1xuK1x0ZWFybHlfbWVtdW5tYXAocG0sIHNpemVvZigqcG0pKTtcbitcbitcdG1lbWJsb2NrX2FkZChzdGFydCwgZW5kIC0gc3RhcnQpO1xuK1x0bWVtYmxvY2tfcmVzZXJ2ZShzdGFydCwgZW5kIC0gc3RhcnQpO1xuK31cbitcbisvKiBUaGUgdGFibGUsIHZldHRlZCBhdCBwYXJzZSB0aW1lLCBvciBOVUxMIGlmIHRoaXMgYm9vdCBoYXMgbm9uZS4gKi9cbitzdGF0aWMgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKmVmaV9wb2lzb25lZF9tZW1vcnkodm9pZClcbit7XG4rXHRpZiAoZWZpLnBvaXNvbmVkX21lbW9yeSA9PSBFRklfSU5WQUxJRF9UQUJMRV9BRERSKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdHJldHVybiBwaHlzX3RvX3ZpcnQoZWZpLnBvaXNvbmVkX21lbW9yeSk7XG4rfVxuK1xuKy8qIERvZXMgdGhlIHJhbmdlIGNvdmVyIGEgdW5pdCBhbiBlYXJsaWVyIGtlcm5lbCByZWNvcmRlZCBhcyBiYWQ/ICovXG4rYm9vbCByYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnkocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbit7XG4rXHRzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0gPSBlZmlfcG9pc29uZWRfbWVtb3J5KCk7XG4rXHR1NjQgZmlyc3QsIGxhc3QsIG5iaXRzO1xuK1xuK1x0aWYgKCFwbSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0bmJpdHMgPSBwbS1cdTAwM2VzaXplICogQklUU19QRVJfQllURTtcbitcbitcdGlmIChzdGFydCArIHNpemUgXHUwMDNjPSBwbS1cdTAwM2VwaHlzX2Jhc2UpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdGlmIChzdGFydCBcdTAwM2MgcG0tXHUwMDNlcGh5c19iYXNlKVxuK1x0XHRzdGFydCA9IHBtLVx1MDAzZXBoeXNfYmFzZTtcbitcbitcdGZpcnN0ID0gKHN0YXJ0IC0gcG0tXHUwMDNlcGh5c19iYXNlKSAvIHBtLVx1MDAzZXVuaXRfc2l6ZTtcbitcdGlmIChmaXJzdCBcdTAwM2U9IG5iaXRzKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRsYXN0ID0gKHN0YXJ0ICsgc2l6ZSAtIDEgLSBwbS1cdTAwM2VwaHlzX2Jhc2UpIC8gcG0tXHUwMDNldW5pdF9zaXplO1xuK1x0bGFzdCA9IG1pbihsYXN0LCBuYml0cyAtIDEpO1xuK1xuK1x0cmV0dXJuIGZpbmRfbmV4dF9iaXQocG0tXHUwMDNlYml0bWFwLCBsYXN0ICsgMSwgZmlyc3QpIFx1MDAzYz0gbGFzdDtcbit9XG4rXG4rLypcbisgKiBBIGJpdCBpcyBuZXZlciBjbGVhcmVkOiBpdCBzdGFuZHMgZm9yIGEgd2hvbGUgRUZJX1BPSVNPTl9VTklUX1NJWkUsIHNvIGFuXG4rICogdW5wb2lzb24gY2Fubm90IHRlbGwgd2hldGhlciB0aGUgdW5pdCBhcyBhIHdob2xlIGlzIGdvb2QgYWdhaW4uXG4rICovXG4rdm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbilcbit7XG4rXHRzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0gPSBlZmlfcG9pc29uZWRfbWVtb3J5KCk7XG4rXHRwaHlzX2FkZHJfdCBhZGRyID0gUEZOX1BIWVMocGZuKTtcbitcdHU2NCB1bml0O1xuK1xuK1x0aWYgKCFwbSB8fCBhZGRyIFx1MDAzYyBwbS1cdTAwM2VwaHlzX2Jhc2UpXG4rXHRcdHJldHVybjtcbitcbitcdHVuaXQgPSAoYWRkciAtIHBtLVx1MDAzZXBoeXNfYmFzZSkgLyBwbS1cdTAwM2V1bml0X3NpemU7XG4rXHRpZiAodW5pdCBcdTAwM2MgcG0tXHUwMDNlc2l6ZSAqIEJJVFNfUEVSX0JZVEUpXG4rXHRcdHNldF9iaXQodW5pdCwgcG0tXHUwMDNlYml0bWFwKTtcbit9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lZmkuaCBiL2luY2x1ZGUvbGludXgvZWZpLmhcbmluZGV4IGMzNTQ0NmEwYjY2ZmEuLjU2NDAyZmRjY2QxMTQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2VmaS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2VmaS5oXG5AQCAtMjMsNiArMjMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzdG9yZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmFuZ2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlYm9vdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2l6ZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3V1aWQuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS9wYWdlLmhcdTAwM2VcbkBAIC00MjIsNiArNDIzLDcgQEAgdm9pZCBlZmlfbmF0aXZlX3J1bnRpbWVfc2V0dXAodm9pZCk7XG4gI2RlZmluZSBMSU5VWF9FRklfQ09DT19TRUNSRVRfQVJFQV9HVUlEXHRcdEVGSV9HVUlEKDB4YWRmOTU2YWQsIDB4ZTk4YywgMHg0ODRjLCAgMHhhZSwgMHgxMSwgMHhiNSwgMHgxYywgMHg3ZCwgMHgzMywgMHg2NCwgMHg0NylcbiAjZGVmaW5lIExJTlVYX0VGSV9CT09UX01FTU1BUF9HVUlEXHRcdEVGSV9HVUlEKDB4ODAwZjY4M2YsIDB4ZDA4YiwgMHg0MjNhLCAgMHhhMiwgMHg5MywgMHg5NiwgMHg1YywgMHgzYywgMHg2ZiwgMHhlMiwgMHhiNClcbiAjZGVmaW5lIExJTlVYX0VGSV9VTkFDQ0VQVEVEX01FTV9UQUJMRV9HVUlEXHRFRklfR1VJRCgweGQ1ZDFkZTNjLCAweDEwNWMsIDB4NDRmOSwgIDB4OWUsIDB4YTksIDB4YmMsIDB4ZWYsIDB4OTgsIDB4MTIsIDB4MDAsIDB4MzEpXG4rI2RlZmluZSBMSU5VWF9FRklfUE9JU09ORURfTUVNT1JZX1RBQkxFX0dVSURcdEVGSV9HVUlEKDB4YWY4MjhhMTUsIDB4MGVmNCwgMHg0MzlhLCAgMHhiOCwgMHg2YSwgMHhkNiwgMHhkNiwgMHg5ZSwgMHhhZiwgMHhiYSwgMHhmYSlcbiBcbiAjZGVmaW5lIFJJU0NWX0VGSV9CT09UX1BST1RPQ09MX0dVSURcdFx0RUZJX0dVSUQoMHhjY2QxNWZlYywgMHg2ZjczLCAweDRlZWMsICAweDgzLCAweDk1LCAweDNlLCAweDY5LCAweGU0LCAweGI5LCAweDQwLCAweGJmKVxuIFxuQEAgLTY1MCw2ICs2NTIsNyBAQCBleHRlcm4gc3RydWN0IGVmaSB7XG4gXHR1bnNpZ25lZCBsb25nXHRcdFx0bW9rdmFyX3RhYmxlO1x0XHQvKiBNT0sgdmFyaWFibGUgY29uZmlnIHRhYmxlICovXG4gXHR1bnNpZ25lZCBsb25nXHRcdFx0Y29jb19zZWNyZXQ7XHRcdC8qIENvbmZpZGVudGlhbCBjb21wdXRpbmcgc2VjcmV0IHRhYmxlICovXG4gXHR1bnNpZ25lZCBsb25nXHRcdFx0dW5hY2NlcHRlZDtcdFx0LyogVW5hY2NlcHRlZCBtZW1vcnkgdGFibGUgKi9cbitcdHVuc2lnbmVkIGxvbmdcdFx0XHRwb2lzb25lZF9tZW1vcnk7XHQvKiBIYXJkd2FyZS1wb2lzb25lZCBtZW1vcnkgdGFibGUgKi9cbiBcbiBcdGVmaV9nZXRfdGltZV90XHRcdFx0KmdldF90aW1lO1xuIFx0ZWZpX3NldF90aW1lX3RcdFx0XHQqc2V0X3RpbWU7XG5AQCAtMTI3Miw2ICsxMjc1LDI1IEBAIHN0cnVjdCBsaW51eF9lZmlfbWVtcmVzZXJ2ZSB7XG4gI2RlZmluZSBFRklfTUVNUkVTRVJWRV9DT1VOVChzaXplKSAoKChzaXplKSAtIHNpemVvZihzdHJ1Y3QgbGludXhfZWZpX21lbXJlc2VydmUpKSBcXFxuIFx0LyBzaXplb2ZfZmllbGQoc3RydWN0IGxpbnV4X2VmaV9tZW1yZXNlcnZlLCBlbnRyeVswXSkpXG4gXG4rLyogQml0IE4gY292ZXJzIHRoZSB1bml0IGF0IEBwaHlzX2Jhc2UgKyBOICogQHVuaXRfc2l6ZS4gKi9cbitzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSB7XG4rXHR1MzJcdFx0dmVyc2lvbjtcbitcdHUzMlx0XHR1bml0X3NpemU7XHQvKiBieXRlcyBvZiBwaHlzIHNwYWNlIHBlciBiaXRtYXAgYml0ICovXG4rXHR1NjRcdFx0cGh5c19iYXNlO1x0LyogYWRkcmVzcyB0aGUgZmlyc3QgYml0IGNvdmVycyAqL1xuK1x0dTY0XHRcdHNpemU7XHRcdC8qIGJpdG1hcCBzaXplIGluIGJ5dGVzICovXG4rXHR1bnNpZ25lZCBsb25nXHRiaXRtYXBbXTtcbit9O1xuK1xuKyNkZWZpbmUgRUZJX1BPSVNPTl9VTklUX1NJWkVcdFNaXzJNXG4rXG4rI2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXG4rdm9pZCBfX2luaXQgZWZpX3BvaXNvbmVkX21lbW9yeV9yZXNlcnZlKHZvaWQpO1xuK3ZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pO1xuKyNlbHNlXG4rc3RhdGljIGlubGluZSB2b2lkIGVmaV9wb2lzb25lZF9tZW1vcnlfcmVzZXJ2ZSh2b2lkKSB7IH1cbitzdGF0aWMgaW5saW5lIHZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pIHsgfVxuKyNlbmRpZlxuK1xuIHZvaWQgX19pbml0IGVmaV9hcmNoX21lbV9yZXNlcnZlKHBoeXNfYWRkcl90IGFkZHIsIHU2NCBzaXplKTtcbiBcbiAvKlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaFxuaW5kZXggMjc0ZmE4ODAwNzdjNS4uOWQ5ZjJlOGZkYzEzNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW0uaFxuKysrIGIvaW5jbHVkZS9saW51eC9tbS5oXG5AQCAtNTIyNSw2ICs1MjI1LDcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbWVtb3J5X2ZhaWx1cmVfYXR0cl9ncm91cDtcbiBleHRlcm4gdm9pZCBtZW1vcnlfZmFpbHVyZV9xdWV1ZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKTtcbiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pO1xuIHZvaWQgbnVtX3BvaXNvbmVkX3BhZ2VzX3N1Yih1bnNpZ25lZCBsb25nIHBmbiwgbG9uZyBpKTtcbit2b2lkIF9fbWVtaW5pdCBod3BvaXNvbl9ib290X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpO1xuIHBoeXNfYWRkcl90IHJhbmdlX2ZpcnN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpO1xuIHBoeXNfYWRkcl90IHJhbmdlX2xhc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7XG4gI2Vsc2VcbkBAIC01MjMyLDYgKzUyMzMsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbW9yeV9mYWlsdXJlX3F1ZXVlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG4ge1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHZvaWQgaHdwb2lzb25fYm9vdF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuK3tcbit9XG4rXG4gc3RhdGljIGlubGluZSB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19pbmModW5zaWduZWQgbG9uZyBwZm4pXG4ge1xuIH1cbkBAIC01Mzg3LDYgKzUzOTIsMjAgQEAgc3RhdGljIGlubGluZSBib29sIHBmbl9pc191bmFjY2VwdGVkX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbilcbiBcdHJldHVybiByYW5nZV9jb250YWluc191bmFjY2VwdGVkX21lbW9yeShwZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsIFBBR0VfU0laRSk7XG4gfVxuIFxuKyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWVxuK1xuK2Jvb2wgcmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5KHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpO1xuK1xuKyNlbHNlXG4rXG4rc3RhdGljIGlubGluZSBib29sIHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeShwaHlzX2FkZHJfdCBzdGFydCxcbitcdFx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbit7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuKyNlbmRpZlxuK1xuIHZvaWQgdm1hX3BndGFibGVfd2Fsa19iZWdpbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4gdm9pZCB2bWFfcGd0YWJsZV93YWxrX2VuZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG4gXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmNcbmluZGV4IGEyY2E4ZGY1MDFjYWUuLmY2YWZkYjJhODlhOTQgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jXG4rKysgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5AQCAtNDMsNiArNDMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3NpZ25hbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvdGFzay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGF4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9lZmkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2tzbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcm1hcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbkBAIC0xMzYsNiArMTM3LDIxIEBAIHBoeXNfYWRkcl90IHJhbmdlX2xhc3RfaHdwb2lzb24ocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiBcdHJldHVybiByYW5nZV9od3BvaXNvbihzdGFydCwgc2l6ZSwgZmFsc2UpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB1cGRhdGVfcGVyX25vZGVfbWZfc3RhdHModW5zaWduZWQgbG9uZyBwZm4sIGVudW0gbWZfcmVzdWx0IHJlc3VsdCk7XG4rXG4rLyogTm90IG51bV9wb2lzb25lZF9wYWdlc19pbmMoKTogaXRzIHBlciBibG9jayBoYWxmIGRpdmlkZXMgYnkgemVybyB0aGlzIGVhcmx5LiAqL1xuK3ZvaWQgX19tZW1pbml0IGh3cG9pc29uX2Jvb3RfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbit7XG4rXHRpZiAoUGFnZUhXUG9pc29uKHBhZ2UpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRTZXRQYWdlSFdQb2lzb24ocGFnZSk7XG4rXHRzZXRfcGFnZV9jb3VudChwYWdlLCAxKTtcbitcdC8qIFRoZSBwYWdlIGhhcyBiZWVuIGNvbXBsZXRlbHkgaXNvbGF0ZWQgPT0gTUZfUkVDT1ZFUkVEICovXG4rXHR1cGRhdGVfcGVyX25vZGVfbWZfc3RhdHMocGFnZV90b19wZm4ocGFnZSksIE1GX1JFQ09WRVJFRCk7XG4rXHRhdG9taWNfbG9uZ19pbmMoXHUwMDI2bnVtX3BvaXNvbmVkX3BhZ2VzKTtcbit9XG4rXG4gLyoqXG4gICogTUZfQVRUUl9STyAtIENyZWF0ZSBzeXNmcyBlbnRyeSBmb3IgZWFjaCBtZW1vcnkgZmFpbHVyZSBzdGF0aXN0aWNzLlxuICAqIEBfbmFtZTogbmFtZSBvZiB0aGUgZmlsZSBpbiB0aGUgcGVyIE5VTUEgc3lzZnMgZGlyZWN0b3J5LlxuQEAgLTEzMjYsNiArMTM0Miw4IEBAIHN0YXRpYyBpbnQgYWN0aW9uX3Jlc3VsdCh1bnNpZ25lZCBsb25nIHBmbiwgZW51bSBtZl9hY3Rpb25fcGFnZV90eXBlIHR5cGUsXG4gXHRpZiAodHlwZSAhPSBNRl9NU0dfQUxSRUFEWV9QT0lTT05FRCBcdTAwMjZcdTAwMjYgdHlwZSAhPSBNRl9NU0dfUEZOX01BUCkge1xuIFx0XHRudW1fcG9pc29uZWRfcGFnZXNfaW5jKHBmbik7XG4gXHRcdHVwZGF0ZV9wZXJfbm9kZV9tZl9zdGF0cyhwZm4sIHJlc3VsdCk7XG4rXHRcdC8qIE9ubHkgaGFyZCBvZmZsaW5lcyBhcmUgY2FycmllZCBvdmVyIHRvIHRoZSBuZXh0IGtlcm5lbC4gKi9cbitcdFx0ZWZpX2h3cG9pc29uX3JlY29yZF9wZm4ocGZuKTtcbiBcdH1cbiBcbiBcdHByX2VycihcIiUjbHg6IHJlY292ZXJ5IGFjdGlvbiBmb3IgJXM6ICVzXFxuXCIsXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jXG5pbmRleCA0MDQ4OTZiNTMwMDNlLi45ZTJjZTgzM2ZkNDA5IDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9hbGxvYy5jXG4rKysgYi9tbS9wYWdlX2FsbG9jLmNcbkBAIC0xNTc5LDYgKzE1NzksMTkgQEAgc3RhdGljIHZvaWQgX19mcmVlX3BhZ2VzX29rKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4gXHRcdGZyZWVfb25lX3BhZ2Uoem9uZSwgcGFnZSwgcGZuLCBvcmRlciwgZnBpX2ZsYWdzKTtcbiB9XG4gXG4rLyogRmxhZyB0aGUgZnJhbWVzIGFuIGVhcmxpZXIga2VybmVsIHJlY29yZGVkIGFzIGJhZC4gKi9cbitzdGF0aWMgdm9pZCBfX21lbWluaXQgcG9pc29uX2Jsb2NrKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBpLCBucl9wYWdlcyA9IDFVTCBcdTAwM2NcdTAwM2Mgb3JkZXI7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9wYWdlczsgaSsrKSB7XG4rXHRcdHN0cnVjdCBwYWdlICpwID0gcGFnZSArIGk7XG4rXG4rXHRcdGlmIChyYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnkocGFnZV90b19waHlzKHApLCBQQUdFX1NJWkUpKVxuK1x0XHRcdGh3cG9pc29uX2Jvb3RfcGFnZShwKTtcbitcdH1cbit9XG4rXG4gdm9pZCBfX21lbWluaXQgX19mcmVlX3BhZ2VzX2NvcmUoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcixcbiBcdFx0ZW51bSBtZW1pbml0X2NvbnRleHQgY29udGV4dClcbiB7XG5AQCAtMTYxMyw2ICsxNjI2LDE4IEBAIHZvaWQgX19tZW1pbml0IF9fZnJlZV9wYWdlc19jb3JlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4gXHRcdGF0b21pY19sb25nX2FkZChucl9wYWdlcywgXHUwMDI2cGFnZV96b25lKHBhZ2UpLVx1MDAzZW1hbmFnZWRfcGFnZXMpO1xuIFx0fVxuIFxuK1x0LyogRmlyc3Q6IGEgYmxvY2sgcGFya2VkIGJ5IF9fZnJlZV91bmFjY2VwdGVkKCkgbmV2ZXIgcmV0dXJucyBoZXJlLiAqL1xuK1x0aWYgKHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeShwYWdlX3RvX3BoeXMocGFnZSksXG4rXHRcdFx0XHRcdCAgIFBBR0VfU0laRSBcdTAwM2NcdTAwM2Mgb3JkZXIpKSB7XG4rXHRcdHBvaXNvbl9ibG9jayhwYWdlLCBvcmRlcik7XG4rXHRcdC8qXG4rXHRcdCAqIFRPRE86IGZyZWUgdGhlIGZyYW1lcyBpbiB0aGUgYmxvY2sgdGhhdCBhcmUgbm90IHBvaXNvbmVkLlxuK1x0XHQgKiBUaGV5IHN0YXkgb3V0IG9mIHRoZSBhbGxvY2F0b3IgYW5kIHN0aWxsIGNvdW50IGluXG4rXHRcdCAqIG1hbmFnZWRfcGFnZXMsIHNvIGEgdW5pdCBjb3N0cyB1cCB0byBhIGJsb2NrLlxuK1x0XHQgKi9cbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuIFx0aWYgKHBhZ2VfY29udGFpbnNfdW5hY2NlcHRlZChwYWdlLCBvcmRlcikpIHtcbiBcdFx0aWYgKG9yZGVyID09IE1BWF9QQUdFX09SREVSIFx1MDAyNlx1MDAyNiBfX2ZyZWVfdW5hY2NlcHRlZChwYWdlKSlcbiBcdFx0XHRyZXR1cm47XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNDowOTowNi43NDQzOTY5MjFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1OTExOTM0MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggc2VyaWVzLiBNeSBpbml0aWFsIGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHRoZSB0cmlhZ2UgcHJvY2VzcywgbWFraW5nIHN1cmUgd2UgaGF2ZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0J3MgYmVpbmcgZXZhbHVhdGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBwcmluY2lwbGVzLCBhbmQgaXQgc2VlbXMgcmVhY2hhYmlsaXR5IGlzIHRoZSBwcmltYXJ5IGNvbmNlcm4g4oCTIGNhbiB0aGUgbW9kaWZpZWQgY29kZSBhY3R1YWxseSBleGVjdXRlIGluIGEgdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciBRRU1VPyBUaGF0J3MgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50LlxuXG5OZXh0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBleHRlbnQgb2YgdGhlIGNoYW5nZXMuIFRoZSBmaWxlcyBtb2RpZmllZCBhcmU6IGBhcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpLmNgLCBgZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ2AsIGBkcml2ZXJzL2Zpcm13YXJlL2VmaS9NYWtlZmlsZWAsIGBkcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuY2AsIGBkcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jYCwgYGRyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuY2AsIGBkcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaGAsIGBkcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmNgLCBgZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmNgLCBgaW5jbHVkZS9saW51eC9lZmkuaGAsIGBpbmNsdWRlL2xpbnV4L21tLmhgLCBgbW0vbWVtb3J5LWZhaWx1cmUuY2AsIGFuZCBgbW0vcGFnZV9hbGxvYy5jYC4gVGhhdCdzIGEgZmFpcmx5IGV4dGVuc2l2ZSB0b3VjaCwgbW9zdGx5IGNvbmNlbnRyYXRlZCBhcm91bmQgRUZJIGFuZCBtZW1vcnkgbWFuYWdlbWVudC5cblxuTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IHdoYXQgcGFydHMgb2YgdGhpcyBjb2RlIGFyZSBhY3RpdmUgZHVyaW5nIHJ1bnRpbWUgdmVyc3VzIGJvb3QgdGltZT8gQW5kIHdoYXQgc3lzY2FsbHMgb3IgaW50ZXJmYWNlcyBjYW4gKnJlYWNoKiB0aGlzIGNvZGU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBhdHRhY2sgc3VyZmFjZS5cblxuU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gbG9vayBhdCBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4ocGZuKWAuIEkgc2VlIGl0J3MgY2FsbGVkIGZyb20gYGFjdGlvbl9yZXN1bHQoKWAgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgLiBUaGF0IG1lYW5zIEkgaGF2ZSB0byB0cmFjZSBob3cgYG1tL21lbW9yeS1mYWlsdXJlLmNgIGdldHMgdHJpZ2dlcmVkIGF0IHJ1bnRpbWUuIEkgbmVlZCB0byB2ZXJpZnkgaG93IGBtZW1vcnlfZmFpbHVyZWAgb3IgYGFjdGlvbl9yZXN1bHRgIGFyZSBjYWxsZWQgb3IgZXhwb3NlZC4gQ2FuIGEgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIGNhbGwsIG9yIG1heWJlIHNvbWV0aGluZyB0aHJvdWdoIGRlYnVnZnMgb3Igc3lzZnMsIHRyaWdnZXIgdGhpcyBjb2RlIHBhdGg/IEdyZXAgaXMgZ29pbmcgdG8gYmUgbXkgZnJpZW5kIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTk5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTQ6MDk6MTIuNjU2MzMzMzAxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NTU3MjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFjdGlvbl9yZXN1bHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtb3J5LWZhaWx1cmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnktZmFpbHVyZS5jPTEzMjQ9c3RhdGljIGJvb2wgcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZihlbnVtIG1mX2FjdGlvbl9wYWdlX3R5cGUgdHlwZSxcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTMzNi0gKi9cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjEzMzc6c3RhdGljIGludCBhY3Rpb25fcmVzdWx0KHVuc2lnbmVkIGxvbmcgcGZuLCBlbnVtIG1mX2FjdGlvbl9wYWdlX3R5cGUgdHlwZSxcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEzMzgtXFx0XFx0XFx0IGVudW0gbWZfcmVzdWx0IHJlc3VsdClcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MTM1OD1zdGF0aWMgaW50IHBhZ2VfYWN0aW9uKHN0cnVjdCBwYWdlX3N0YXRlICpwcywgc3RydWN0IHBhZ2UgKnAsXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTEzNzAtXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxMzcxOlxcdHJldHVybiBhY3Rpb25fcmVzdWx0KHBmbiwgcHMtXFx1MDAzZXR5cGUsIHJlc3VsdCk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMzcyLX1cXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MjEzOT1zdGF0aWMgaW50IHRyeV9tZW1vcnlfZmFpbHVyZV9odWdldGxiKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIxNTYtXFx0XFx0fVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjE1NzpcXHRcXHRyZXR1cm4gYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19HRVRfSFdQT0lTT04sIE1GX0lHTk9SRUQpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjE1OC1cXHRjYXNlIE1GX0hVR0VUTEJfRk9MSU9fUFJFX1BPSVNPTkVEOlxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTYzLVxcdFxcdGlmIChyZXMgPT0gTUZfSFVHRVRMQl9QQUdFX1BSRV9QT0lTT05FRClcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIxNjQ6XFx0XFx0XFx0YWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19BTFJFQURZX1BPSVNPTkVELCBNRl9GQUlMRUQpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjE2NS1cXHRcXHRlbHNlXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMTY2OlxcdFxcdFxcdGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfSFVHRSwgTUZfRkFJTEVEKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIxNjctXFx0XFx0cmV0dXJuIHJ2O1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTk3LVxcdFxcdH1cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIxOTg6XFx0XFx0cmV0dXJuIGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfRlJFRV9IVUdFLCByZXMpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjE5OS1cXHR9XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIyMDQtXFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIyMDU6XFx0XFx0cmV0dXJuIGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfVU5NQVBfRkFJTEVELCBNRl9GQUlMRUQpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjIwNi1cXHR9XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTIyMzI9c3RhdGljIGludCBtZW1vcnlfZmFpbHVyZV9kZXZfcGFnZW1hcCh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzLFxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMjU5LVxcdGlmIChyYyAhPSAtRU9QTk9UU1VQUClcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjIyNjA6XFx0XFx0YWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19EQVgsIHJjID8gTUZfRkFJTEVEIDogTUZfUkVDT1ZFUkVEKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIyNjEtXFx0cmV0dXJuIHJjO1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMzc4PXN0YXRpYyBpbnQgbWVtb3J5X2ZhaWx1cmVfcGZuKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0MDItXFx0XFx0aWYgKCFtZl9oYW5kbGVkKVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjQwMzpcXHRcXHRcXHRyZXR1cm4gYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19QRk5fTUFQLCBNRl9JR05PUkVEKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0MDQtXFx0fVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNDE1LVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjQxNjpcXHRyZXR1cm4gYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19QRk5fTUFQLCBNRl9SRUNPVkVSRUQpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQxNy19XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTI0NDQ9aW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI1MDItXFx0XFx0XFx0cHV0X3BhZ2UocCk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNTAzOlxcdFxcdGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfQUxSRUFEWV9QT0lTT05FRCwgTUZfRkFJTEVEKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI1MDQtXFx0XFx0Z290byB1bmxvY2tfbXV0ZXg7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI1MzMtXFx0XFx0XFx0fVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjUzNDpcXHRcXHRcXHRyZXMgPSBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0JVRERZLCByZXMpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjUzNS1cXHRcXHR9IGVsc2Uge1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjUzNjpcXHRcXHRcXHRyZXMgPSBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0tFUk5FTF9ISUdIX09SREVSLCBNRl9JR05PUkVEKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI1MzctXFx0XFx0fVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNTQ3LVxcdFxcdCAqL1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjU0ODpcXHRcXHRyZXMgPSBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0tFUk5FTCwgTUZfSUdOT1JFRCk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNTQ5LVxcdFxcdGdvdG8gdW5sb2NrX211dGV4O1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNTUxLVxcdFxcdC8qIFRyYW5zaWVudCBsaWZlY3ljbGUgcmFjZSB3aXRoIHRoZSBwYWdlIGFsbG9jYXRvci4gKi9cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI1NTI6XFx0XFx0cmVzID0gYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19HRVRfSFdQT0lTT04sIE1GX0lHTk9SRUQpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjU1My1cXHRcXHRnb3RvIHVubG9ja19tdXRleDtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjU5OS1cXHRcXHRcXHRwdXRfcGFnZShwKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI2MDA6XFx0XFx0XFx0YWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19VTlNQTElUX1RIUCwgTUZfRkFJTEVEKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2MDEtXFx0XFx0XFx0Z290byB1bmxvY2tfbXV0ZXg7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2NTMtXFx0aWYgKCFod3BvaXNvbl91c2VyX21hcHBpbmdzKGZvbGlvLCBwLCBwZm4sIGZsYWdzKSkge1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjY1NDpcXHRcXHRyZXMgPSBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX1VOTUFQX0ZBSUxFRCwgTUZfRkFJTEVEKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2NTUtXFx0XFx0Z290byB1bmxvY2tfcGFnZTtcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjY2Mi1cXHQgICAgZm9saW8tXFx1MDAzZW1hcHBpbmcgPT0gTlVMTCkge1xcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjY2MzpcXHRcXHRyZXMgPSBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX1RSVU5DQVRFRF9MUlUsIE1GX0lHTk9SRUQpO1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjY2NC1cXHRcXHRnb3RvIHVubG9ja19wYWdlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNDowOToxMi43MDI4OTU1OTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjA3NTUwNTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqRGl2aW5nIGludG8gdGhlIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCBSYWJiaXQgSG9sZSoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAgYW5kIGhvdyBpdCB3b3JrcyB1bmRlciB0aGUgaG9vZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgdGhhdCBjYWxsIHNlZW1zIHRvIGxlYWQgdG8gYG1hZHZpc2VfaW5qZWN0X2Vycm9yKClgLCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIHRoYXQgZGlyZWN0bHkgY2FsbHMgYG1lbW9yeV9mYWlsdXJlKClgLlwiIEludGVyZXN0aW5nLCBzbyBgbWFkdmlzZWAgaXMgdXNpbmcgdGhlIHNhbWUgaW5mcmFzdHJ1Y3R1cmUgYXMgb3RoZXIgbWVtb3J5IGVycm9yIGluamVjdGlvbiBtZWNoYW5pc21zLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgaW5qZWN0aW9uIGlzLiBMZXQncyBzZWUgaG93IGBtYWR2aXNlYCBhY3R1YWxseSBjYWxscyB0aGlzIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgZnVuY3Rpb24uIEkgd2lsbCBuZWVkIHRvIGxvb2sgZGVlcGVyIGludG8gYG1hZHZpc2VgIHRvIHNlZSB3aGVyZSBgTUFEVl9IV1BPSVNPTmAgaXMgaGFuZGxlZCBhbmQgaG93IGl0IGRlY2lkZXMgdG8gaW5qZWN0IGFuIGVycm9yLiBBbHRlcm5hdGl2ZWx5LCBwZXJoYXBzIGl0J3MgbW9yZSBkaXJlY3QgYW5kIEkgc2hvdWxkIGxvb2sgYXQgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBhbmQgc2VlIHdoZXJlIGl0J3MgYmVpbmcgY2FsbGVkLCB3aGljaCBtaWdodCBnaXZlIG1lIG1vcmUgY29udGV4dC4gQm90aCBhcHByb2FjaGVzIGFyZSB2YWxpZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2NTYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNDowOToxNS4zMTA0NDg1NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDc4MjIxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJNQURWX0hXUE9JU09OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tYWR2aXNlLmM9MTUwND1zdGF0aWMgYm9vbCBpc19tZW1vcnlfZmFpbHVyZShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xNTA2LVxcdHN3aXRjaCAobWFkdl9iZWhhdmlvci1cXHUwMDNlYmVoYXZpb3IpIHtcXG5tbS9tYWR2aXNlLmM6MTUwNzpcXHRjYXNlIE1BRFZfSFdQT0lTT046XFxubW0vbWFkdmlzZS5jLTE1MDgtXFx0Y2FzZSBNQURWX1NPRlRfT0ZGTElORTpcXG4tLVxcbm1tL21hZHZpc2UuYz0xNTMwPW1hZHZpc2VfYmVoYXZpb3JfdmFsaWQoaW50IGJlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTE1NjMtXFx0Y2FzZSBNQURWX1NPRlRfT0ZGTElORTpcXG5tbS9tYWR2aXNlLmM6MTU2NDpcXHRjYXNlIE1BRFZfSFdQT0lTT046XFxubW0vbWFkdmlzZS5jLTE1NjUtI2VuZGlmXFxuLS1cXG5tbS9tYWR2aXNlLmM9MTg5OT1zdGF0aWMgaW50IG1hZHZpc2VfZG9fYmVoYXZpb3IodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbixcXG4tLVxcbm1tL21hZHZpc2UuYy0xOTU1LSAqICBNQURWX0tFRVBPTkZPUksgLSB1bmRvIHRoZSBlZmZlY3Qgb2YgTUFEVl9XSVBFT05GT1JLXFxubW0vbWFkdmlzZS5jOjE5NTY6ICogIE1BRFZfSFdQT0lTT04gLSB0cmlnZ2VyIG1lbW9yeSBlcnJvciBoYW5kbGVyIGFzIGlmIHRoZSBnaXZlbiBtZW1vcnkgcmFuZ2VcXG5tbS9tYWR2aXNlLmMtMTk1Ny0gKlxcdFxcdHdlcmUgY29ycnVwdGVkIGJ5IHVucmVjb3ZlcmFibGUgaGFyZHdhcmUgbWVtb3J5IGZhaWx1cmUuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE0OjA5OjE1LjM2MTIzODgyOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MDk0MzcxMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBNZW1vcnkgUG9pc29uaW5nIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgdXNhZ2Ugb2YgYHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeSgpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIHR3byBsaWtlbHkgbG9jYXRpb25zOiBgbW0vcGFnZV9hbGxvYy5jYCBhbmQgYGRyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jYC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBtb3N0IHJlbGV2YW50IHNwb3RzIGdpdmVuIHRoZSBmdW5jdGlvbidzIG5hbWUgYW5kIGdlbmVyYWwgbWVtb3J5IG1hbmFnZW1lbnQgY29uY2VwdHMuXG5cbkJ1dCwgSSBuZWVkIHRvIGtub3cgKndoZXJlKiBpdCdzIGFjdHVhbGx5IGJlaW5nIGNhbGxlZC4gTm8gc2Vuc2UgaW4ganVzdCBzdGFyaW5nIGF0IHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLiBTbywgbGV0J3MgZmlyZSB1cCBgZ3JlcHBlcmAuIFRoYXQgc2hvdWxkIHF1aWNrbHkgdW5jb3ZlciBhbGwgdGhlIGNhbGwgc2l0ZXMgYWNyb3NzIHRoZSBjb2RlYmFzZS4gV2l0aCBgZ3JlcHBlcmAsIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSBsaXN0IG9mIGV2ZXJ5IHBsYWNlIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBhbmQgdGhlbiBuYXJyb3cgaXQgZG93biBiYXNlZCBvbiB0aGUgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzMTQsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNDowOToxNy43NzA2NzkxODlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxMjMxODMyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmM9OTE9c3RhdGljIHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICplZmlfcG9pc29uZWRfbWVtb3J5KHZvaWQpXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYy05OS0vKiBEb2VzIHRoZSByYW5nZSBjb3ZlciBhIHVuaXQgYW4gZWFybGllciBrZXJuZWwgcmVjb3JkZWQgYXMgYmFkPyAqL1xcbmRyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jOjEwMDpib29sIHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeShwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKVxcbmRyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jLTEwMS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9NTM5MD1zdGF0aWMgaW5saW5lIGJvb2wgcGZuX2lzX3VuYWNjZXB0ZWRfbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTUzOTYtXFxuaW5jbHVkZS9saW51eC9tbS5oOjUzOTc6Ym9vbCByYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnkocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7XFxuaW5jbHVkZS9saW51eC9tbS5oLTUzOTgtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtNTQwMC1cXG5pbmNsdWRlL2xpbnV4L21tLmg6NTQwMTpzdGF0aWMgaW5saW5lIGJvb2wgcmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5KHBoeXNfYWRkcl90IHN0YXJ0LFxcbmluY2x1ZGUvbGludXgvbW0uaC01NDAyLVxcdFxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBzaXplKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTE1ODM9c3RhdGljIHZvaWQgX19tZW1pbml0IHBvaXNvbl9ibG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTE1ODktXFxubW0vcGFnZV9hbGxvYy5jOjE1OTA6XFx0XFx0aWYgKHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeShwYWdlX3RvX3BoeXMocCksIFBBR0VfU0laRSkpXFxubW0vcGFnZV9hbGxvYy5jLTE1OTEtXFx0XFx0XFx0aHdwb2lzb25fYm9vdF9wYWdlKHApO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTE1OTU9dm9pZCBfX21lbWluaXQgX19mcmVlX3BhZ2VzX2NvcmUoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcixcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy0xNjI5LVxcdC8qIEZpcnN0OiBhIGJsb2NrIHBhcmtlZCBieSBfX2ZyZWVfdW5hY2NlcHRlZCgpIG5ldmVyIHJldHVybnMgaGVyZS4gKi9cXG5tbS9wYWdlX2FsbG9jLmM6MTYzMDpcXHRpZiAocmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5KHBhZ2VfdG9fcGh5cyhwYWdlKSxcXG5tbS9wYWdlX2FsbG9jLmMtMTYzMS1cXHRcXHRcXHRcXHRcXHQgICBQQUdFX1NJWkUgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE0OjA5OjE5LjQ4MzAwMjYyMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExMzU1MDg0NTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEN1cnJlbnQgQW5hbHlzaXMgb2YgdGhlIEVGSSBIYXJkd2FyZSBQb2lzb25pbmcgTG9naWMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gIHdvcmtzIGFuZCB3aGVuIGl0IGdldHMgY2FsbGVkLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nLiBGaXJzdCwgSSBzZWUgaXQncyBjYWxsZWQgd2l0aGluIGBhY3Rpb25fcmVzdWx0KClgIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYCwgc3BlY2lmaWNhbGx5IHdoZW4gdGhlIG1lbW9yeSBmYWlsdXJlIHR5cGUgaXNuJ3QgYWxyZWFkeSBwb2lzb25lZCBvciBhIFBGTiBtYXAuIFRoaXMgbWFrZXMgc2Vuc2U7IGl0J3MgcmVjb3JkaW5nIHRoZSBmYWlsdXJlIGZvciBwZXJzaXN0ZW50IHRyYWNraW5nIGFjcm9zcyByZWJvb3RzIGluIHRob3NlIGNhc2VzLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB3aGF0IGBlZmlfaHdwb2lzb25fcmVjb3JkX3BmbmAgaXRzZWxmIGRvZXMuIExvb2tpbmcgYXQgYGRyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jYCwgaXQgc2VlbXMgdG8gYmUgc2V0dGluZyBhIGJpdCBpbiBhIGJpdG1hcCB3aXRoaW4gdGhlIGBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5YCBzdHJ1Y3R1cmUuIFRoaXMgc3RydWN0dXJlJ3MgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gaXMgd2hhdCBJJ20gcmVhbGx5IGN1cmlvdXMgYWJvdXQuIEl0IGFwcGVhcnMgdGhhdCBpdCdzIHVzaW5nIHRoZSBQaHlzaWNhbCBGcmFtZSBOdW1iZXIgKFBGTikgdG8gY2FsY3VsYXRlIGEgdW5pdCB3aXRoaW4gdGhhdCBiaXRtYXAgYW5kIHRoZW4gc2V0cyB0aGUgY29ycmVzcG9uZGluZyBiaXQuIFRoZSBjaGVjayBmb3IgYHBtYCBiZWluZyBOVUxMIG9yIHRoZSBhZGRyZXNzIGJlaW5nIG91dHNpZGUgdGhlIGV4cGVjdGVkIHJhbmdlIGlzIGNydWNpYWwsIHdoaWNoIGNvdWxkIGJlIGFuIGlzc3VlIGlmIHdlIGhhdmUgZGlmZmVyZW50IEVGSSBjb25maWd1cmF0aW9ucy5cblxuQSB0aG91Z2h0OiBXaGF0IGlmIEVGSSBpcyBlbmFibGVkLCBsaWtlIGluIGEgUUVNVS9PVk1GIGVudmlyb25tZW50IGFuZCBgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllgIGlzIGFsc28gZW5hYmxlZD8gT3IsIGlmIGEgdG9vbCBsaWtlIHN5emthbGxlciBvciBhIHVzZXJzcGFjZSBhcHBsaWNhdGlvbiB1c2VzIGBtYWR2aXNlKC4uLiwgTUFEVl9IV1BPSVNPTilgIG9yIGludGVudGlvbmFsbHkgaW5qZWN0cyBtZW1vcnkgZmFpbHVyZXM/IEluIHN0YW5kYXJkIHN5emthbGxlciBydW5zLCBkb2VzIFFFTVUgZXZlbiBib290IHdpdGggVUVGSS9FRkk/IEV2ZW4gd2l0aG91dCBVRUZJLCBpZiBgZWZpLnBvaXNvbmVkX21lbW9yeWAgaXMgYEVGSV9JTlZBTElEX1RBQkxFX0FERFJgLCB0aGVuIGBlZmlfcG9pc29uZWRfbWVtb3J5KClgIHJldHVybnMgTlVMTCEgQW5kIHRoYXQgc2VlbXMgdG8gYmUgdGhlIGNhc2Ugd2hlbiBsb29raW5nIGF0IGBlZmlfaHdwb2lzb25fcmVjb3JkX3BmbmAuXG5cbldhaXQsIGNhbiBgbWFkdmlzZSguLi4sIE1BRFZfSFdQT0lTT04pYCB0cmlnZ2VyIGBlZmlfaHdwb2lzb25fcmVjb3JkX3BmbmA/IFllcywgYmVjYXVzZSBgYWN0aW9uX3Jlc3VsdGAgaXMgcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgaXQsIHdoaWNoIHJlY2VpdmVzIHRoZSBQRk4gZnJvbSBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZyBsb2dpYy5cblxuTm93LCB0aGVyZSdzIGBod3BvaXNvbl9ib290X3BhZ2UoKWAgaW4gYG1lbW9yeS1mYWlsdXJlLmNgLiBCdXQgaXQncyBvbmx5IGNhbGxlZCBkdXJpbmcgZWFybHkgYm9vdCB3aXRoaW4gYF9fZnJlZV9wYWdlc19jb3JlKClgLiBIYW5nIG9uIGEgc2Vjb25kLCB0aG91Z2gsIGJlY2F1c2UgYF9fZnJlZV9wYWdlc19jb3JlYCBhbHNvIGdldHMgY2FsbGVkIGR1cmluZyBtZW1vcnkgaG90cGx1Zy4gVGhhdCBtZWFucyB0aGlzIGVudGlyZSBzZXF1ZW5jZSBvZiBldmVudHMgY291bGQgcGxheSBvdXQgZHVyaW5nIGhvdHBsdWdnaW5nIHRvbywgbWFraW5nIHRoaXMgZXZlbiBtb3JlIGNvbXBsaWNhdGVkIHRvIHZlcmlmeS4gSSBuZWVkIHRvIGNoZWNrIHdoZXJlIGVsc2UgYF9fZnJlZV9wYWdlc19jb3JlYCBpcyBjYWxsZWQuIEl0IHdvdWxkIGFwcGVhciB0aGlzIGNvdWxkIGNhdXNlIGEgcG90ZW50aWFsIHJhY2UgYW5kL29yIGFmZmVjdCB3aGF0IHdlIHdlcmUgdHJ5aW5nIHRvIGRldGVybWluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxMDQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTQ6MDk6MzAuODM4MDg5MzM2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODkwNDUxNjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fZnJlZV9wYWdlc19jb3JlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ttc2FuL2luaXQuYz0xNjg9c3RhdGljIHZvaWQgZG9fY29sbGVjdGlvbih2b2lkKVxcbi0tXFxubW0va21zYW4vaW5pdC5jLTE3Ni1cXHRcXHRrbXNhbl9zZXR1cF9tZXRhKHBhZ2UsIHNoYWRvdywgb3JpZ2luLCBjb2xsZWN0Lm9yZGVyKTtcXG5tbS9rbXNhbi9pbml0LmM6MTc3OlxcdFxcdF9fZnJlZV9wYWdlc19jb3JlKHBhZ2UsIGNvbGxlY3Qub3JkZXIsIE1FTUlOSVRfRUFSTFkpO1xcbm1tL2ttc2FuL2luaXQuYy0xNzgtXFx0fVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz02NDg9dm9pZCBnZW5lcmljX29ubGluZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxubW0vbWVtb3J5X2hvdHBsdWcuYy02NDkte1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6NjUwOlxcdF9fZnJlZV9wYWdlc19jb3JlKHBhZ2UsIG9yZGVyLCBNRU1JTklUX0hPVFBMVUcpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtNjUxLX1cXG4tLVxcbm1tL21tX2luaXQuYz0xOTU3PXN0YXRpYyB2b2lkIF9faW5pdCBkZWZlcnJlZF9mcmVlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgcGZuLFxcbi0tXFxubW0vbW1faW5pdC5jLTE5NzItXFx0aWYgKG5yX3BhZ2VzID09IE1BWF9PUkRFUl9OUl9QQUdFUyBcXHUwMDI2XFx1MDAyNiBJU19NQVhfT1JERVJfQUxJR05FRChwZm4pKSB7XFxubW0vbW1faW5pdC5jOjE5NzM6XFx0XFx0X19mcmVlX3BhZ2VzX2NvcmUocGFnZSwgTUFYX1BBR0VfT1JERVIsIE1FTUlOSVRfRUFSTFkpO1xcbm1tL21tX2luaXQuYy0xOTc0LVxcdFxcdHJldHVybjtcXG4tLVxcbm1tL21tX2luaXQuYy0xOTgwLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9wYWdlczsgaSsrKVxcbm1tL21tX2luaXQuYzoxOTgxOlxcdFxcdF9fZnJlZV9wYWdlc19jb3JlKHBhZ2UgKyBpLCAwLCBNRU1JTklUX0VBUkxZKTtcXG5tbS9tbV9pbml0LmMtMTk4Mi19XFxuLS1cXG5tbS9tbV9pbml0LmM9MjQ1Mj12b2lkIF9faW5pdCBtZW1ibG9ja19mcmVlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuLS1cXG5tbS9tbV9pbml0LmMtMjQ2OS1cXHRjbGVhcl9wYWdlX3RhZ19yZWYocGFnZSk7XFxubW0vbW1faW5pdC5jOjI0NzA6XFx0X19mcmVlX3BhZ2VzX2NvcmUocGFnZSwgb3JkZXIsIE1FTUlOSVRfRUFSTFkpO1xcbm1tL21tX2luaXQuYy0yNDcxLX1cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz0xNTgzPXN0YXRpYyB2b2lkIF9fbWVtaW5pdCBwb2lzb25fYmxvY2soc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy0xNTk0LVxcbm1tL3BhZ2VfYWxsb2MuYzoxNTk1OnZvaWQgX19tZW1pbml0IF9fZnJlZV9wYWdlc19jb3JlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxubW0vcGFnZV9hbGxvYy5jLTE1OTYtXFx0XFx0ZW51bSBtZW1pbml0X2NvbnRleHQgY29udGV4dClcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuaD0yMTQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqcGFnZWJsb2NrX3Bmbl90b19wYWdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5oLTIyMi1cXG5tbS9wYWdlX2FsbG9jLmg6MjIzOmV4dGVybiB2b2lkIF9fZnJlZV9wYWdlc19jb3JlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxubW0vcGFnZV9hbGxvYy5oLTIyNC1cXHRcXHRlbnVtIG1lbWluaXRfY29udGV4dCBjb250ZXh0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTQ6MDk6MzIuNzI4NTQ3NzM1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc1NDc2MjgxMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBIb3RwbHVnIGFuZCBQb3RlbnRpYWwgRmFpbHVyZSBJbmplY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgbWVtb3J5IGhvdHBsdWcgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBgZ2VuZXJpY19vbmxpbmVfcGFnZSgpYCBmdW5jdGlvbiBpbiBgbW0vbWVtb3J5X2hvdHBsdWcuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbWVtb3J5IGRlYWxsb2NhdGlvbiB1c2luZyBgX19mcmVlX3BhZ2VzX2NvcmUoKWAgaGFwcGVucywgZmxhZ2dlZCB3aXRoIGBNRU1JTklUX0hPVFBMVUdgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgdmFyaW91cyB0cmlnZ2VycyBmb3IgdGhpcyBwcm9jZXNzLCB3aGljaCwgYXMgSSByZWNhbGwsIGNvbWUgdGhyb3VnaCBzeXNmcyBpbnRlcmZhY2VzIGxpa2UgYC9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L21lbW9yeVgvc3RhdGVgLCBvciBwZXJoYXBzIHZpYSBgZGF4X2ttZW1gIG9yIGV2ZW4gYHZpcnRpby1tZW1gIGluIHNvbWUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LlxuXG5Ob3csIEknbSBnZXR0aW5nIGludGVyZXN0ZWQgaW4gaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggbWVtb3J5IGZhaWx1cmUgc2NlbmFyaW9zLiAgSSBzdXNwZWN0IHRoZXJlIG1pZ2h0IGJlIGEgY29ubmVjdGlvbiBiZXR3ZWVuIGhvdHBsdWcgYW5kIGZhaWx1cmUgaW5qZWN0aW9uLCBwb3RlbnRpYWxseSB0aHJvdWdoIG1lY2hhbmlzbXMgbGlrZSBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGludmVzdGlnYXRlIHdoZXJlIGBhY3Rpb25fcmVzdWx0YCBpcyBjYWxsZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgLiBJIG5lZWQgdG8gcmV2aWV3IGFsbCB0aGUgY2FsbCBwYXRocyB0byBgYWN0aW9uX3Jlc3VsdGAgZnJvbSB0aGF0IGZpbGUsIGluY2x1ZGluZyBhbnkgdGhhdCBvcmlnaW5hdGUgZnJvbSBgbWFkdmlzZV9pbmplY3RfZXJyb3JgLiAgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aG9zZSBjYWxscyBkbyBhbmQgaG93IHRoZXkgbWlnaHQgcmVsYXRlIHRvIG1lbW9yeSBob3RwbHVnIGV2ZW50cyBhbmQgcG90ZW50aWFsIGhhcmR3YXJlIGlzc3Vlcy4gSSdtIGxvb2tpbmcgZm9yIGEgY2xlYXIgcGF0aCBjb25uZWN0aW5nIHRoZXNlIHNlZW1pbmdseSBkaXNwYXJhdGUgYXJlYXMuICBUaGlzIGludmVzdGlnYXRpb24gc2hvdWxkIGlsbHVtaW5hdGUgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvcnMgZHVyaW5nIGhvdHBsdWcgb3BlcmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwNDQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTQ6MDk6NDAuMjc2MTc4MjI2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc1NDA5OTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk1BRFZfSFdQT0lTT05cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9tbS9od3BvaXNvbi5yc3Q9MTA2PVRlc3RpbmdcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaHdwb2lzb24ucnN0LTEwOC1cXG5Eb2N1bWVudGF0aW9uL21tL2h3cG9pc29uLnJzdDoxMDk6KiBtYWR2aXNlKE1BRFZfSFdQT0lTT04sIC4uLi4pIChhcyByb290KSAtIFBvaXNvbiBhIHBhZ2UgaW4gdGhlXFxuRG9jdW1lbnRhdGlvbi9tbS9od3BvaXNvbi5yc3QtMTEwLSAgcHJvY2VzcyBmb3IgdGVzdGluZ1xcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHdwb2lzb24ucnN0PTk2PVBSX01DRV9LSUxMX0dFVFxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHdwb2lzb24ucnN0LTEwMS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9od3BvaXNvbi5yc3Q6MTAyOiogbWFkdmlzZShNQURWX0hXUE9JU09OLCAuLi4uKSAoYXMgcm9vdCkgLSDlnKjmtYvor5Xov4fnqIvkuK1Qb2lzb27kuIDkuKrpobXpnaJcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9od3BvaXNvbi5yc3QtMTAzLVxcbi0tXFxuYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTg1LSNkZWZpbmUgTUFEVl9VTk1FUkdFQUJMRSAxM1xcdFxcdC8qIEtTTSBtYXkgbm90IG1lcmdlIGlkZW50aWNhbCBwYWdlcyAqL1xcbmFyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaDo4NjojZGVmaW5lIE1BRFZfSFdQT0lTT05cXHQgMTAwXFx0XFx0LyogcG9pc29uIGEgcGFnZSBmb3IgdGVzdGluZyAqL1xcbmFyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC04Ny1cXG4tLVxcbmFyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTc0LVxcbmFyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oOjc1OiNkZWZpbmUgTUFEVl9IV1BPSVNPTiAgICAgMTAwXFx0XFx0LyogcG9pc29uIGEgcGFnZSBmb3IgdGVzdGluZyAqL1xcbmFyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTc2LSNkZWZpbmUgTUFEVl9TT0ZUX09GRkxJTkUgMTAxXFx0XFx0Lyogc29mdCBvZmZsaW5lIHBhZ2UgZm9yIHRlc3RpbmcgKi9cXG4tLVxcbmluY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oLTU1LSNkZWZpbmUgTUFEVl9ET0ZPUktcXHQxMVxcdFxcdC8qIGRvIGluaGVyaXQgYWNyb3NzIGZvcmsgKi9cXG5pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaDo1NjojZGVmaW5lIE1BRFZfSFdQT0lTT05cXHQxMDBcXHRcXHQvKiBwb2lzb24gYSBwYWdlIGZvciB0ZXN0aW5nICovXFxuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmgtNTctI2RlZmluZSBNQURWX1NPRlRfT0ZGTElORSAxMDFcXHRcXHQvKiBzb2Z0IG9mZmxpbmUgcGFnZSBmb3IgdGVzdGluZyAqL1xcbi0tXFxubW0vbWFkdmlzZS5jPTE1MDQ9c3RhdGljIGJvb2wgaXNfbWVtb3J5X2ZhaWx1cmUoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTUwNi1cXHRzd2l0Y2ggKG1hZHZfYmVoYXZpb3ItXFx1MDAzZWJlaGF2aW9yKSB7XFxubW0vbWFkdmlzZS5jOjE1MDc6XFx0Y2FzZSBNQURWX0hXUE9JU09OOlxcbm1tL21hZHZpc2UuYy0xNTA4LVxcdGNhc2UgTUFEVl9TT0ZUX09GRkxJTkU6XFxuLS1cXG5tbS9tYWR2aXNlLmM9MTUzMD1tYWR2aXNlX2JlaGF2aW9yX3ZhbGlkKGludCBiZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xNTYzLVxcdGNhc2UgTUFEVl9TT0ZUX09GRkxJTkU6XFxubW0vbWFkdmlzZS5jOjE1NjQ6XFx0Y2FzZSBNQURWX0hXUE9JU09OOlxcbm1tL21hZHZpc2UuYy0xNTY1LSNlbmRpZlxcbi0tXFxubW0vbWFkdmlzZS5jPTE4OTk9c3RhdGljIGludCBtYWR2aXNlX2RvX2JlaGF2aW9yKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW5faW4sXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTk1NS0gKiAgTUFEVl9LRUVQT05GT1JLIC0gdW5kbyB0aGUgZWZmZWN0IG9mIE1BRFZfV0lQRU9ORk9SS1xcbm1tL21hZHZpc2UuYzoxOTU2OiAqICBNQURWX0hXUE9JU09OIC0gdHJpZ2dlciBtZW1vcnkgZXJyb3IgaGFuZGxlciBhcyBpZiB0aGUgZ2l2ZW4gbWVtb3J5IHJhbmdlXFxubW0vbWFkdmlzZS5jLTE5NTctICpcXHRcXHR3ZXJlIGNvcnJ1cHRlZCBieSB1bnJlY292ZXJhYmxlIGhhcmR3YXJlIG1lbW9yeSBmYWlsdXJlLlxcbi0tXFxudG9vbHMvYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC0zNy0jZGVmaW5lIFBST1RfV1JJVEVcXHQweDJcXG50b29scy9hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oOjM4Oi8qIE1BRFZfSFdQT0lTT04gaXMgdW5kZWZpbmVkIG9uIGFscGhhLCBmaXggaXQgZm9yIHBlcmYgKi9cXG50b29scy9hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oOjM5OiNkZWZpbmUgTUFEVl9IV1BPSVNPTlxcdDEwMFxcbnRvb2xzL2FyY2gvYWxwaGEvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmgtNDAtLyogTUFEVl9TT0ZUX09GRkxJTkUgaXMgdW5kZWZpbmVkIG9uIGFscGhhLCBmaXggaXQgZm9yIHBlcmYgKi9cXG4tLVxcbnRvb2xzL2FyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC0xMC0jZGVmaW5lIE1BRFZfSFVHRVBBR0VcXHQxNFxcbnRvb2xzL2FyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaDoxMTojZGVmaW5lIE1BRFZfSFdQT0lTT05cXHQgMTAwXFxudG9vbHMvYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTEyLSNkZWZpbmUgTUFEVl9NRVJHRUFCTEVcXHQgMTJcXG4tLVxcbnRvb2xzL2FyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTM3LSNkZWZpbmUgUFJPVF9XUklURVxcdDB4MlxcbnRvb2xzL2FyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oOjM4OiNkZWZpbmUgTUFEVl9IV1BPSVNPTlxcdDEwMFxcbnRvb2xzL2FyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTM5LSNkZWZpbmUgTUFEVl9TT0ZUX09GRkxJTkUgMTAxXFxuLS1cXG50b29scy9hcmNoL3h0ZW5zYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC0zNy0jZGVmaW5lIFBST1RfV1JJVEVcXHQweDJcXG50b29scy9hcmNoL3h0ZW5zYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaDozODovKiBNQURWX0hXUE9JU09OIGlzIHVuZGVmaW5lZCBvbiB4dGVuc2EsIGZpeCBpdCBmb3IgcGVyZiAqL1xcbnRvb2xzL2FyY2gveHRlbnNhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oOjM5OiNkZWZpbmUgTUFEVl9IV1BPSVNPTlxcdDEwMFxcbnRvb2xzL2FyY2gveHRlbnNhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTQwLS8qIE1BRFZfU09GVF9PRkZMSU5FIGlzIHVuZGVmaW5lZCBvbiB4dGVuc2EsIGZpeCBpdCBmb3IgcGVyZiAqL1xcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmgtNTUtI2RlZmluZSBNQURWX0RPRk9SS1xcdDExXFx0XFx0LyogZG8gaW5oZXJpdCBhY3Jvc3MgZm9yayAqL1xcbnRvb2xzL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oOjU2OiNkZWZpbmUgTUFEVl9IV1BPSVNPTlxcdDEwMFxcdFxcdC8qIHBvaXNvbiBhIHBhZ2UgZm9yIHRlc3RpbmcgKi9cXG50b29scy9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaC01Ny0jZGVmaW5lIE1BRFZfU09GVF9PRkZMSU5FIDEwMVxcdFxcdC8qIHNvZnQgb2ZmbGluZSBwYWdlIGZvciB0ZXN0aW5nICovXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXJlYWQtaHdwb2lzb24uYz0xNzY9dGVzdF9odWdldGxiX3JlYWRfaHdwb2lzb24oaW50IGZkLCBzaXplX3QgbGVuLCBzaXplX3Qgd3JfY2h1bmtfc2l6ZSxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItcmVhZC1od3BvaXNvbi5jLTIwNS1cXHRod3BfYWRkciA9IGZpbGVtYXAgKyBsZW4gLyAyICsgcGFnZXNpemU7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1yZWFkLWh3cG9pc29uLmM6MjA2OlxcdGlmIChtYWR2aXNlKGh3cF9hZGRyLCBwYWdlc2l6ZSwgTUFEVl9IV1BPSVNPTikgXFx1MDAzYyAwKSB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1yZWFkLWh3cG9pc29uLmM6MjA3OlxcdFxcdGtzZnRfcGVycm9yKFxcXCJNQURWX0hXUE9JU09OIGZhaWxlZFxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItcmVhZC1od3BvaXNvbi5jLTIwOC1cXHRcXHRnb3RvIHVubWFwO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuYz01OD1zdGF0aWMgaW50IG1hZHZfaGFyZF9pbmplY3QoRklYVFVSRV9EQVRBKG1lbW9yeV9mYWlsdXJlKSAqIHNlbGYsIHZvaWQgKnZhZGRyKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmMtNTkte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmM6NjA6XFx0cmV0dXJuIG1hZHZpc2UodmFkZHIsIHNlbGYtXFx1MDAzZXBhZ2Vfc2l6ZSwgTUFEVl9IV1BPSVNPTik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuYy02MS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE0OjA5OjQxLjk1MTYwMjMyNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODM1OTc4NTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkRpdmluZyBpbnRvIGBtYWR2aXNlX2luamVjdF9lcnJvcmAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEknbSBnb2luZyB0byBoZWFkIHN0cmFpZ2h0IGZvciBgbW0vbWFkdmlzZS5jYCBhbmQgc3BlY2lmaWNhbGx5LCBJJ2xsIGJlIGxvb2tpbmcgYXQgdGhlIGBtYWR2aXNlX2luamVjdF9lcnJvcmAgZnVuY3Rpb24uIFRoaXMgb25lIGlzIGtleSwgYW5kIEkga25vdyBpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgaGFuZGxlZCwgdGhlIG1lY2hhbmljcyBvZiBob3cgd2UncmUgaW5qZWN0aW5nIGVycm9ycyB1c2luZyBtYWR2aXNlLiBJIHdhbnQgdG8gc2VlIHRoZSBlcnJvciBpbmplY3Rpb24gYmVoYXZpb3IgZGV0YWlscy4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCB3aGVuIGl0IGNvbWVzIHRvIHVuZGVyc3RhbmRpbmcgZXhhY3RseSBob3cgdGhpcyBwYXJ0aWN1bGFyIGNvbnRyb2wgcGF0aCBiZWhhdmVzLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSBoYXMgdG8gc2F5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODM3NywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE0OjA5OjQzLjc4NzU4MzI5M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3MDU2NTc1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWR2aXNlX2luamVjdF9lcnJvclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tYWR2aXNlLmM9MTM1MD1zdGF0aWMgaW50IG1hZHZpc2Vfdm1hX2JlaGF2aW9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTE0NTgtICovXFxubW0vbWFkdmlzZS5jOjE0NTk6c3RhdGljIGludCBtYWR2aXNlX2luamVjdF9lcnJvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG5tbS9tYWR2aXNlLmMtMTQ2MC17XFxuLS1cXG5tbS9tYWR2aXNlLmM9MTUwND1zdGF0aWMgYm9vbCBpc19tZW1vcnlfZmFpbHVyZShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xNTE2LVxcbm1tL21hZHZpc2UuYzoxNTE3OnN0YXRpYyBpbnQgbWFkdmlzZV9pbmplY3RfZXJyb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxubW0vbWFkdmlzZS5jLTE1MTgte1xcbi0tXFxubW0vbWFkdmlzZS5jPTE4OTk9c3RhdGljIGludCBtYWR2aXNlX2RvX2JlaGF2aW9yKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW5faW4sXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTkwOC1cXHRcXHRyYW5nZS1cXHUwMDNlZW5kID0gc3RhcnQgKyBsZW5faW47XFxubW0vbWFkdmlzZS5jOjE5MDk6XFx0XFx0cmV0dXJuIG1hZHZpc2VfaW5qZWN0X2Vycm9yKG1hZHZfYmVoYXZpb3IpO1xcbm1tL21hZHZpc2UuYy0xOTEwLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTQ6MDk6NDUuNDU4MTU1NjA3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgwNTY1NzY5NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBgbWFkdmlzZV9pbmplY3RfZXJyb3JgKipcblxuT2theSwgdGltZSB0byBkaXNzZWN0IHRoZSBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBmdW5jdGlvbiBpcyBzdXBwb3NlZCB0byB3b3JrIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgaG93IGl0IG1pZ2h0IGRldmlhdGUgZnJvbSBleHBlY3RlZCBiZWhhdmlvciBvciBpbnRlcmFjdCB3aXRoIHRoZSBrZXJuZWwgaW4gdW5leHBlY3RlZCB3YXlzLiBNeSBmb2N1cyBpcyBvbiBwb3RlbnRpYWwgZWRnZSBjYXNlcywgcmFjZSBjb25kaXRpb25zLCBhbmQgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgdW5pdCB0aGF0IGNvdWxkIGxlYWQgdG8gdnVsbmVyYWJpbGl0aWVzIG9yIHN1YnRsZSBidWdzLiBJJ20gZ29pbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaW5qZWN0aW9uIGxvZ2ljIGl0c2VsZiDigJMgd2hhdCB0cmlnZ2VycyBpdCwgaG93IHByZWNpc2VseSBpcyB0aGUgZXJyb3IgY29tbXVuaWNhdGVkIG9yIHNpbXVsYXRlZCwgYW5kIGFyZSB0aGVyZSBhbnkgb2J2aW91cyAob3Igbm9uLW9idmlvdXMpIGZsYXdzIGluIHRoZSBlcnJvciBoYW5kbGluZz8gSSB3aWxsIGxvb2sgZm9yIGFueSBhcmVhcyB0aGF0IHBvdGVudGlhbGx5IGJ5cGFzcyBpbnRlbmRlZCBtZW1vcnkgcHJvdGVjdGlvbi4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCB0aGUgcGFnZSBmYXVsdCBoYW5kbGluZyBwYXRocywgYW5kIGNvbnNpZGVyIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgd2l0aCBvdGhlciBvcGVyYXRpb25zIHRoYXQgbWFuaXB1bGF0ZSB0aGUgc2FtZSBtZW1vcnkgcmVnaW9ucy4gTGV0J3Mgc2VlLi4uIHdoZXJlIGRvZXMgdGhlIGtlcm5lbCBhY3R1YWxseSBpbmplY3QgdGhlIFwiZXJyb3JcIiBhZnRlciBgbWFkdmlzZWA/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyByZWxhdGVkIHRvIHRoZSBlcnJvciBzdGF0ZT8gSXMgdGhlIGVycm9yIHRydWx5IGFuIGVycm9yLCBvciBhIHRyaWdnZXIgdGhhdCBleHBvc2VzIHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBhbGxvY2F0aW9uIG1lY2hhbmlzbXM/IExldCdzIGdldCBzdGFydGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODg5MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE0OjA5OjUzLjUxNDczNTI4M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTcwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWFkdmlzZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0NTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0NTU6XFx0I2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxcbjE0NTY6XFx0LypcXG4xNDU3OlxcdCAqIEVycm9yIGluamVjdGlvbiBzdXBwb3J0IGZvciBtZW1vcnkgZXJyb3IgaGFuZGxpbmcuXFxuMTQ1ODpcXHQgKi9cXG4xNDU5OlxcdHN0YXRpYyBpbnQgbWFkdmlzZV9pbmplY3RfZXJyb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuMTQ2MDpcXHR7XFxuMTQ2MTpcXHRcXHR1bnNpZ25lZCBsb25nIHNpemU7XFxuMTQ2MjpcXHRcXHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gbWFkdl9iZWhhdmlvci1cXHUwMDNlcmFuZ2Uuc3RhcnQ7XFxuMTQ2MzpcXHRcXHR1bnNpZ25lZCBsb25nIGVuZCA9IG1hZHZfYmVoYXZpb3ItXFx1MDAzZXJhbmdlLmVuZDtcXG4xNDY0OlxcdFxcbjE0NjU6XFx0XFx0aWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKVxcbjE0NjY6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4xNDY3OlxcdFxcbjE0Njg6XFx0XFx0Zm9yICg7IHN0YXJ0IFxcdTAwM2MgZW5kOyBzdGFydCArPSBzaXplKSB7XFxuMTQ2OTpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHBmbjtcXG4xNDcwOlxcdFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbjE0NzE6XFx0XFx0XFx0aW50IHJldDtcXG4xNDcyOlxcdFxcbjE0NzM6XFx0XFx0XFx0cmV0ID0gZ2V0X3VzZXJfcGFnZXNfZmFzdChzdGFydCwgMSwgMCwgXFx1MDAyNnBhZ2UpO1xcbjE0NzQ6XFx0XFx0XFx0aWYgKHJldCAhPSAxKVxcbjE0NzU6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xNDc2OlxcdFxcdFxcdHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpO1xcbjE0Nzc6XFx0XFxuMTQ3ODpcXHRcXHRcXHQvKlxcbjE0Nzk6XFx0XFx0XFx0ICogV2hlbiBzb2Z0IG9mZmxpbmluZyBodWdlcGFnZXMsIGFmdGVyIG1pZ3JhdGluZyB0aGUgcGFnZVxcbjE0ODA6XFx0XFx0XFx0ICogd2UgZGlzc29sdmUgaXQsIHRoZXJlZm9yZSBpbiB0aGUgc2Vjb25kIGxvb3AgXFxcInBhZ2VcXFwiIHdpbGxcXG4xNDgxOlxcdFxcdFxcdCAqIG5vIGxvbmdlciBiZSBhIGNvbXBvdW5kIHBhZ2UuXFxuMTQ4MjpcXHRcXHRcXHQgKi9cXG4xNDgzOlxcdFxcdFxcdHNpemUgPSBwYWdlX3NpemUoY29tcG91bmRfaGVhZChwYWdlKSk7XFxuMTQ4NDpcXHRcXG4xNDg1OlxcdFxcdFxcdGlmIChtYWR2X2JlaGF2aW9yLVxcdTAwM2ViZWhhdmlvciA9PSBNQURWX1NPRlRfT0ZGTElORSkge1xcbjE0ODY6XFx0XFx0XFx0XFx0cHJfaW5mbyhcXFwiU29mdCBvZmZsaW5pbmcgcGZuICUjbHggYXQgcHJvY2VzcyB2aXJ0dWFsIGFkZHJlc3MgJSNseFxcXFxuXFxcIixcXG4xNDg3OlxcdFxcdFxcdFxcdFxcdCBwZm4sIHN0YXJ0KTtcXG4xNDg4OlxcdFxcdFxcdFxcdHJldCA9IHNvZnRfb2ZmbGluZV9wYWdlKHBmbiwgTUZfQ09VTlRfSU5DUkVBU0VEKTtcXG4xNDg5OlxcdFxcdFxcdH0gZWxzZSB7XFxuMTQ5MDpcXHRcXHRcXHRcXHRwcl9pbmZvKFxcXCJJbmplY3RpbmcgbWVtb3J5IGZhaWx1cmUgZm9yIHBmbiAlI2x4IGF0IHByb2Nlc3MgdmlydHVhbCBhZGRyZXNzICUjbHhcXFxcblxcXCIsXFxuMTQ5MTpcXHRcXHRcXHRcXHRcXHQgcGZuLCBzdGFydCk7XFxuMTQ5MjpcXHRcXHRcXHRcXHRyZXQgPSBtZW1vcnlfZmFpbHVyZShwZm4sIE1GX0FDVElPTl9SRVFVSVJFRCB8IE1GX0NPVU5UX0lOQ1JFQVNFRCB8IE1GX1NXX1NJTVVMQVRFRCk7XFxuMTQ5MzpcXHRcXHRcXHRcXHRpZiAocmV0ID09IC1FT1BOT1RTVVBQKVxcbjE0OTQ6XFx0XFx0XFx0XFx0XFx0cmV0ID0gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTQ6MDk6NTMuNTE0OTU0MTMzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUxMDgyMzQzNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRGVlcCBEaXZlIGludG8gRUZJIEhhcmR3YXJlIFBvaXNvbmluZyBpbiB0aGUgS2VybmVsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHRyYWNlIHRoZSBwYXRoIG9mIGhhcmR3YXJlIHBvaXNvbmluZyBldmVudHMuIEl0IGxvb2tzIGxpa2UgYG1hZHZpc2UoYWRkciwgbGVuLCBNQURWX0hXUE9JU09OKWAgdHJpZ2dlcnMgYSBjaGFpbiBvZiBldmVudHMsIHN0YXJ0aW5nIHdpdGggYG1lbW9yeV9mYWlsdXJlKClgLCBsZWFkaW5nIHRvIGBhY3Rpb25fcmVzdWx0KClgLCBhbmQgdWx0aW1hdGVseSBjYWxsaW5nIGBlZmlfaHdwb2lzb25fcmVjb3JkX3BmbihwZm4pYC4gVGhhdCdzIHRoZSBjb3JlIGZ1bmN0aW9uIEkgbmVlZCB0byB1bmRlcnN0YW5kLlxuXG5JIGFsc28gc2VlIG90aGVyIGluamVjdGlvbiBtZXRob2RzIG1lbnRpb25lZDogdGhlIGRlYnVnZnMgZW50cnkgYC9zeXMva2VybmVsL2RlYnVnL2h3cG9pc29uL2NvcnJ1cHQtcGZuYCBmb3IgZGlyZWN0IGluamVjdGlvbiwgYW5kIHRoZSBSQVMvTUNFIGluamVjdGlvbiBtZWNoYW5pc21zIHVzaW5nIGAvZGV2L21jZWxvZ2AgYW5kIEFQRUkuIFRoZXNlIHByb3ZpZGUgd2F5cyB0byBzaW11bGF0ZSB0aGUgaGFyZHdhcmUgZXJyb3IgdGhhdCB1bHRpbWF0ZWx5IHJlYWNoZXMgdGhlIHNhbWUgcG9pbnQuXG5cbk5vdywgbGV0J3MgemVybyBpbiBvbiBgZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmNgLiBUaGUga2V5IGZ1bmN0aW9uIGhlcmUgaXMgY2xlYXJseSBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pYC4gIExvb2tpbmcgYXQgdGhlIGNvZGUsIGl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQgZ2V0cyBhIHBvaW50ZXIgdG8gYSBgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnlgIHZpYSBgZWZpX3BvaXNvbmVkX21lbW9yeSgpYCwgY29udmVydHMgdGhlIHBhZ2UgZnJhbWUgbnVtYmVyIChgcGZuYCkgdG8gYSBwaHlzaWNhbCBhZGRyZXNzLCBhbmQgdGhlbiBtYXBzIHRoZSBhZGRyZXNzIHRvIGEgYml0IHdpdGhpbiBhIGJpdG1hcC4gVGhpcyBiaXRtYXAgc2VlbXMgdG8gdHJhY2sgd2hpY2ggbWVtb3J5IHVuaXRzIGFyZSBjb25zaWRlcmVkIFwicG9pc29uZWRcIi4gQSBzaW1wbGUgY2hlY2sgdG8gZW5zdXJlIHdlJ3JlIHdpdGhpbiB0aGUgdmFsaWQgcG9pc29uZWQgcmVnaW9uIGlzIGFsc28gcHJlc2VudC4gSWYgdGhlIGFkZHJlc3MgaXMgdmFsaWQsIGl0IHRoZW4gc2V0cyB0aGUgcmVsZXZhbnQgYml0IGluIHRoZSBgcG0tXHUwMDNlYml0bWFwYC5cblxuSSBhbHNvIG5vdGljZWQgYHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeWAuICBUaGlzIGNvZGUncyBqb2IgaXMgdG8gY2hlY2sgaWYgYSBzcGVjaWZpZWQgcGh5c2ljYWwgbWVtb3J5IHJhbmdlIGNvbnRhaW5zIGFueSBwb2lzb25lZCBtZW1vcnkuIEl0IGRvZXMgc2ltaWxhciBhZGRyZXNzIGNhbGN1bGF0aW9ucyB0byBmaW5kIHRoZSBhcHByb3ByaWF0ZSBiaXQgcmFuZ2Ugd2l0aGluIHRoZSBwb2lzb25lZCBtZW1vcnkgYml0bWFwLiBJIHNlZSBpdCBoYW5kbGVzIHRoZSBlZGdlIGNhc2VzIHdoZXJlIHRoZSBwcm92aWRlZCByYW5nZSBtaWdodCBzdGFydCBiZWZvcmUgb3IgZXh0ZW5kIGJleW9uZCB0aGUga25vd24gcG9pc29uZWQgbWVtb3J5IHJlZ2lvbi4gSXQgdXNlcyBgZmluZF9uZXh0X2JpdGAgdG8gZWZmaWNpZW50bHkgY2hlY2sgaWYgYW55IGJpdCBpcyBzZXQgd2l0aGluIHRoZSByYW5nZS5cblxuVGhlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBkcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uY2AgY29tcGxldGVseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dC4gSSdsbCByZWFkIHRoaXMgZmlsZSBmcm9tIHRvcCB0byBib3R0b20sIHBheWluZyBhdHRlbnRpb24gdG8gdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwb2lzb25lZCBtZW1vcnkgcmVnaW9uIGFuZCBob3cgdGhlIGJpdG1hcCBpcyBtYW5hZ2VkLCB0byBidWlsZCBhIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk4NDIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNDowOTo1OC42MjMxOTExNDVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqIFJ1bnRpbWUgc2lkZSBvZiB0aGUgTElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWSB0YWJsZTogb25lIGJpdCBwZXJcXG4gICA0OlxcdCAqIEVGSV9QT0lTT05fVU5JVF9TSVpFLCBzZXQgaGVyZSBhcyBmcmFtZXMgZ28gYmFkLCBob25vcmVkIGJ5IHRoZSBuZXh0IGtlcm5lbC5cXG4gICA1OlxcdCAqXFxuICAgNjpcXHQgKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXFxuICAgNzpcXHQgKiBDb3B5cmlnaHQgKGMpIDIwMjYgQnJlbm8gTGVpdGFvIFxcdTAwM2NsZWl0YW9AZGViaWFuLm9yZ1xcdTAwM2VcXG4gICA4OlxcdCAqL1xcbiAgIDk6XFx0XFxuICAxMDpcXHQjZGVmaW5lIHByX2ZtdChmbXQpIFxcXCJlZmk6IFxcXCIgZm10XFxuICAxMTpcXHRcXG4gIDEyOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRtYXAuaFxcdTAwM2VcXG4gIDEzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9lZmkuaFxcdTAwM2VcXG4gIDE0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9pby5oXFx1MDAzZVxcbiAgMTU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xvZzIuaFxcdTAwM2VcXG4gIDE2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1ibG9jay5oXFx1MDAzZVxcbiAgMTc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tLmhcXHUwMDNlXFxuICAxODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvb3ZlcmZsb3cuaFxcdTAwM2VcXG4gIDE5OlxcdFxcbiAgMjA6XFx0c3RhdGljIGJvb2wgX19pbml0XFxuICAyMTpcXHRlZmlfcG9pc29uX2dlb21ldHJ5X3ZhbGlkKGNvbnN0IHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSlcXG4gIDIyOlxcdHtcXG4gIDIzOlxcdFxcdHU2NCBuYml0cztcXG4gIDI0OlxcdFxcbiAgMjU6XFx0XFx0LyogV2hvbGUgd29yZHMsIGFuZCBhIGJpdCBjb3VudCB0aGF0IGNhbiBiZSB0YWtlbiB3aXRob3V0IHdyYXBwaW5nLiAqL1xcbiAgMjY6XFx0XFx0aWYgKCFwbS1cXHUwMDNlc2l6ZSB8fCAhSVNfQUxJR05FRChwbS1cXHUwMDNlc2l6ZSwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSB8fFxcbiAgMjc6XFx0XFx0ICAgIGNoZWNrX211bF9vdmVyZmxvdyhwbS1cXHUwMDNlc2l6ZSwgKHU2NClCSVRTX1BFUl9CWVRFLCBcXHUwMDI2bmJpdHMpKVxcbiAgMjg6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAgMjk6XFx0XFxuICAzMDpcXHRcXHRpZiAocG0tXFx1MDAzZXVuaXRfc2l6ZSBcXHUwMDNjIFBBR0VfU0laRSB8fCAhaXNfcG93ZXJfb2ZfMihwbS1cXHUwMDNldW5pdF9zaXplKSlcXG4gIDMxOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gIDMyOlxcdFxcbiAgMzM6XFx0XFx0cmV0dXJuIElTX0FMSUdORUQocG0tXFx1MDAzZXBoeXNfYmFzZSwgcG0tXFx1MDAzZXVuaXRfc2l6ZSk7XFxuICAzNDpcXHR9XFxuICAzNTpcXHRcXG4gIDM2OlxcdC8qIFRoZSB0YWJsZSBtYXkgY29tZSBmcm9tIGFuIGVhcmxpZXIga2VybmVsLCBzbyB2ZXQgaXQgYmVmb3JlIHVzaW5nIGl0LiAqL1xcbiAgMzc6XFx0c3RhdGljIGJvb2wgX19pbml0XFxuICAzODpcXHRlZmlfcG9pc29uX3RhYmxlX3ZhbGlkKGNvbnN0IHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSlcXG4gIDM5OlxcdHtcXG4gIDQwOlxcdFxcdGlmIChwbS1cXHUwMDNldmVyc2lvbiAhPSAxKSB7XFxuICA0MTpcXHRcXHRcXHRwcl93YXJuKFxcXCJJZ25vcmluZyBwb2lzb25lZC1tZW1vcnkgdGFibGUgd2l0aCB2ZXJzaW9uICV1XFxcXG5cXFwiLFxcbiAgNDI6XFx0XFx0XFx0XFx0cG0tXFx1MDAzZXZlcnNpb24pO1xcbiAgNDM6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAgNDQ6XFx0XFx0fVxcbiAgNDU6XFx0XFxuICA0NjpcXHRcXHRpZiAoIWVmaV9wb2lzb25fZ2VvbWV0cnlfdmFsaWQocG0pKSB7XFxuICA0NzpcXHRcXHRcXHRwcl93YXJuKFxcXCJJZ25vcmluZyBtYWxmb3JtZWQgcG9pc29uZWQtbWVtb3J5IHRhYmxlXFxcXG5cXFwiKTtcXG4gIDQ4OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gIDQ5OlxcdFxcdH1cXG4gIDUwOlxcdFxcbiAgNTE6XFx0XFx0cmV0dXJuIHRydWU7XFxuICA1MjpcXHR9XFxuICA1MzpcXHRcXG4gIDU0OlxcdC8qXFxuICA1NTpcXHQgKiBWZXQgdGhlIGluaGVyaXRlZCB0YWJsZSBhbmQgaGFuZCBpdHMgcGFnZXMgdG8gbWVtYmxvY2ssIHRoZSB3YXkgdGhlXFxuICA1NjpcXHQgKiB1bmFjY2VwdGVkIG1lbW9yeSB0YWJsZSBpcyBoYW5kbGVkLiBJdCBpcyBFRkkgQUNQSSByZWNsYWltIG1lbW9yeSwgd2hpY2hcXG4gIDU3OlxcdCAqIGJlY29tZXMgRTgyMF9UWVBFX0FDUEkgYW5kIHdvdWxkIG90aGVyd2lzZSBzdGF5IG91dCBvZiB0aGUgZGlyZWN0IG1hcCwgYW5kXFxuICA1ODpcXHQgKiB0b3VjaGluZyBpdCB0aGVuIGZhdWx0cy4gQ2FsbGVkIGZyb20gZWZpX2NvbmZpZ19wYXJzZV90YWJsZXMoKSwgc29cXG4gIDU5OlxcdCAqIGV2ZXJ5dGhpbmcgbGF0ZXIgY2FuIHJlYWNoIGl0IHdpdGggZWZpX3BvaXNvbmVkX21lbW9yeSgpLlxcbiAgNjA6XFx0ICovXFxuICA2MTpcXHR2b2lkIF9faW5pdCBlZmlfcG9pc29uZWRfbWVtb3J5X3Jlc2VydmUodm9pZClcXG4gIDYyOlxcdHtcXG4gIDYzOlxcdFxcdHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbTtcXG4gIDY0OlxcdFxcdHBoeXNfYWRkcl90IHN0YXJ0LCBlbmQ7XFxuICA2NTpcXHRcXG4gIDY2OlxcdFxcdGlmIChlZmkucG9pc29uZWRfbWVtb3J5ID09IEVGSV9JTlZBTElEX1RBQkxFX0FERFIpXFxuICA2NzpcXHRcXHRcXHRyZXR1cm47XFxuICA2ODpcXHRcXG4gIDY5OlxcdFxcdHBtID0gZWFybHlfbWVtcmVtYXAoZWZpLnBvaXNvbmVkX21lbW9yeSwgc2l6ZW9mKCpwbSkpO1xcbiAgNzA6XFx0XFx0aWYgKCFwbSkge1xcbiAgNzE6XFx0XFx0XFx0cHJfd2FybihcXFwiQ291bGQgbm90IG1hcCBwb2lzb25lZC1tZW1vcnkgdGFibGVcXFxcblxcXCIpO1xcbiAgNzI6XFx0XFx0XFx0ZWZpLnBvaXNvbmVkX21lbW9yeSA9IEVGSV9JTlZBTElEX1RBQkxFX0FERFI7XFxuICA3MzpcXHRcXHRcXHRyZXR1cm47XFxuICA3NDpcXHRcXHR9XFxuICA3NTpcXHRcXG4gIDc2OlxcdFxcdGlmICghZWZpX3BvaXNvbl90YWJsZV92YWxpZChwbSkpIHtcXG4gIDc3OlxcdFxcdFxcdGVmaS5wb2lzb25lZF9tZW1vcnkgPSBFRklfSU5WQUxJRF9UQUJMRV9BRERSO1xcbiAgNzg6XFx0XFx0XFx0ZWFybHlfbWVtdW5tYXAocG0sIHNpemVvZigqcG0pKTtcXG4gIDc5OlxcdFxcdFxcdHJldHVybjtcXG4gIDgwOlxcdFxcdH1cXG4gIDgxOlxcdFxcbiAgODI6XFx0XFx0c3RhcnQgPSBQQUdFX0FMSUdOX0RPV04oZWZpLnBvaXNvbmVkX21lbW9yeSk7XFxuICA4MzpcXHRcXHRlbmQgPSBQQUdFX0FMSUdOKGVmaS5wb2lzb25lZF9tZW1vcnkgKyBzaXplb2YoKnBtKSArIHBtLVxcdTAwM2VzaXplKTtcXG4gIDg0OlxcdFxcdGVhcmx5X21lbXVubWFwKHBtLCBzaXplb2YoKnBtKSk7XFxuICA4NTpcXHRcXG4gIDg2OlxcdFxcdG1lbWJsb2NrX2FkZChzdGFydCwgZW5kIC0gc3RhcnQpO1xcbiAgODc6XFx0XFx0bWVtYmxvY2tfcmVzZXJ2ZShzdGFydCwgZW5kIC0gc3RhcnQpO1xcbiAgODg6XFx0fVxcbiAgODk6XFx0XFxuICA5MDpcXHQvKiBUaGUgdGFibGUsIHZldHRlZCBhdCBwYXJzZSB0aW1lLCBvciBOVUxMIGlmIHRoaXMgYm9vdCBoYXMgbm9uZS4gKi9cXG4gIDkxOlxcdHN0YXRpYyBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqZWZpX3BvaXNvbmVkX21lbW9yeSh2b2lkKVxcbiAgOTI6XFx0e1xcbiAgOTM6XFx0XFx0aWYgKGVmaS5wb2lzb25lZF9tZW1vcnkgPT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUilcXG4gIDk0OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAgOTU6XFx0XFxuICA5NjpcXHRcXHRyZXR1cm4gcGh5c190b192aXJ0KGVmaS5wb2lzb25lZF9tZW1vcnkpO1xcbiAgOTc6XFx0fVxcbiAgOTg6XFx0XFxuICA5OTpcXHQvKiBEb2VzIHRoZSByYW5nZSBjb3ZlciBhIHVuaXQgYW4gZWFybGllciBrZXJuZWwgcmVjb3JkZWQgYXMgYmFkPyAqL1xcbiAxMDA6XFx0Ym9vbCByYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnkocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTQ6MDk6NTguNjIzMjc3MzU1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5NTY3NTgyNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0J3MgZ29pbmcgdGhyb3VnaCBteSBtaW5kIGFzIEkgYXBwcm9hY2ggdGhpcyBgZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmNgIGZpbGUsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIFBvaXNvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGludG8gdGhlIGhlYXJ0IG9mIHRoaXMgYHBvaXNvbi5jYCBmaWxlIHdpdGhpbiB0aGUgRUZJIGZpcm13YXJlIGRyaXZlcnMuIEdpdmVuIHRoZSBuYW1lLCBcInBvaXNvblwiIGltbWVkaWF0ZWx5IGZsYWdzIGEgcG90ZW50aWFsIGFyZWEgb2YgaW50ZXJlc3QgZm9yIG1lbW9yeSBjb3JydXB0aW9uIHZ1bG5lcmFiaWxpdGllcywgZGVmZW5zaXZlIHByb2dyYW1taW5nIHRlY2huaXF1ZXMsIG9yIHBlcmhhcHMgZXZlbiBhIGRlbGliZXJhdGUsIGlmIHVudXN1YWwsIG1lbW9yeSBzYW5pdGl6YXRpb24gc3RyYXRlZ3kuIEknbSBleHBlY3RpbmcgdG8gZmluZCBjb2RlIHRoYXQgZGVhbHMgd2l0aCBlaXRoZXIgZGVsaWJlcmF0ZWx5IG92ZXJ3cml0aW5nIG1lbW9yeSB3aXRoIGtub3duIHBhdHRlcm5zLCBwb3RlbnRpYWxseSB0byBkZXRlY3QgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyBvciBvdGhlciBtZW1vcnkgZXJyb3JzLCBvciBjb2RlIHRoYXQgaXMgZGVmZW5zaXZlIGluIG5hdHVyZS5cblxuSSdsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBmb3IgaG93IG1lbW9yeSByZWdpb25zIGFyZSBoYW5kbGVkLCBhbGxvY2F0ZWQsIGRlYWxsb2NhdGVkLCBhbmQgZXNwZWNpYWxseSBob3cgdGhleSBhcmUgaW5pdGlhbGl6ZWQgYW5kIHBvdGVudGlhbGx5IG92ZXJ3cml0dGVuLiBJJ2xsIGJlIHdhdGNoaW5nIGZvciBhbnkgdXNlIG9mIG1hZ2ljIHZhbHVlcywgc2VudGluZWwgdmFsdWVzLCBvciBkZWJ1Zy1vcmllbnRlZCBwYXR0ZXJucyB0aGF0IHNjcmVhbSBcInRoaXMgaXMgYSBjYW5hcnkgaW4gdGhlIGNvYWwgbWluZS5cIiBUaGUgRUZJIGNvbnRleHQgc3VnZ2VzdHMgSSBzaG91bGQgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgaW50ZXJhY3Rpb24gd2l0aCBmaXJtd2FyZSB0YWJsZXMsIHJ1bnRpbWUgc2VydmljZXMsIG9yIHBvdGVudGlhbGx5IGV2ZW4gU01SQU0uIEl0IGlzIHZpdGFsIHRvIHNlZSBob3cgdGhlc2UgcG90ZW50aWFsbHkgc2Vuc2l0aXZlIHJlZ2lvbnMgYXJlIHByb3RlY3RlZC5cblxuTXkgZmlyc3QgcmVhZC10aHJvdWdoIHdpbGwgcHJvYmFibHkgYmUgYSBicm9hZCBzY2FuLCBidXQgSSdsbCB6ZXJvIGluIG9uIGZ1bmN0aW9ucyByZWxhdGVkIHRvIG1lbW9yeSBhbGxvY2F0aW9uLCBjb3B5aW5nLCBhbmQgaW5pdGlhbGl6YXRpb24uIEknbGwgYmUgdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIGV4cGxvaXQgdmVjdG9ycyBhcyBJIGdvLCBzdWNoIGFzIGJ1ZmZlciBvdmVyZmxvd3MsIG9mZi1ieS1vbmUgZXJyb3JzLCBvciBpbmNvcnJlY3QgcG9pbnRlciBhcml0aG1ldGljLCBwYXJ0aWN1bGFybHkgaW4gdGhlIGNvbnRleHQgb2YgdGhlIEVGSSBlbnZpcm9ubWVudC4gQW55IGN1c3RvbSBhbGxvY2F0aW9uIG9yIGRlYWxsb2NhdGlvbiByb3V0aW5lcyB3b3VsZCBiZSBlc3BlY2lhbGx5IGludGVyZXN0aW5nLCBhcyB0aG9zZSBvZnRlbiBoYXJib3Igc3VidGxlIGJ1Z3MuIEknbSBob3BpbmcgdG8gdW5kZXJzdGFuZCBob3cgXCJwb2lzb25cIiBpcyBhcHBsaWVkIGFuZCB3aGF0IHRoZSBpbnRlbmRlZCBwdXJwb3NlIG9mIHRoYXQgXCJwb2lzb25cIiBtaWdodCBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI0MDEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE0OjEwOjAxLjU4MDAzODI2NloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDA6XFx0Ym9vbCByYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnkocGh5c19hZGRyX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG4gMTAxOlxcdHtcXG4gMTAyOlxcdFxcdHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSA9IGVmaV9wb2lzb25lZF9tZW1vcnkoKTtcXG4gMTAzOlxcdFxcdHU2NCBmaXJzdCwgbGFzdCwgbmJpdHM7XFxuIDEwNDpcXHRcXG4gMTA1OlxcdFxcdGlmICghcG0pXFxuIDEwNjpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDEwNzpcXHRcXG4gMTA4OlxcdFxcdG5iaXRzID0gcG0tXFx1MDAzZXNpemUgKiBCSVRTX1BFUl9CWVRFO1xcbiAxMDk6XFx0XFxuIDExMDpcXHRcXHRpZiAoc3RhcnQgKyBzaXplIFxcdTAwM2M9IHBtLVxcdTAwM2VwaHlzX2Jhc2UpXFxuIDExMTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDExMjpcXHRcXHRpZiAoc3RhcnQgXFx1MDAzYyBwbS1cXHUwMDNlcGh5c19iYXNlKVxcbiAxMTM6XFx0XFx0XFx0c3RhcnQgPSBwbS1cXHUwMDNlcGh5c19iYXNlO1xcbiAxMTQ6XFx0XFxuIDExNTpcXHRcXHRmaXJzdCA9IChzdGFydCAtIHBtLVxcdTAwM2VwaHlzX2Jhc2UpIC8gcG0tXFx1MDAzZXVuaXRfc2l6ZTtcXG4gMTE2OlxcdFxcdGlmIChmaXJzdCBcXHUwMDNlPSBuYml0cylcXG4gMTE3OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMTE4OlxcdFxcbiAxMTk6XFx0XFx0bGFzdCA9IChzdGFydCArIHNpemUgLSAxIC0gcG0tXFx1MDAzZXBoeXNfYmFzZSkgLyBwbS1cXHUwMDNldW5pdF9zaXplO1xcbiAxMjA6XFx0XFx0bGFzdCA9IG1pbihsYXN0LCBuYml0cyAtIDEpO1xcbiAxMjE6XFx0XFxuIDEyMjpcXHRcXHRyZXR1cm4gZmluZF9uZXh0X2JpdChwbS1cXHUwMDNlYml0bWFwLCBsYXN0ICsgMSwgZmlyc3QpIFxcdTAwM2M9IGxhc3Q7XFxuIDEyMzpcXHR9XFxuIDEyNDpcXHRcXG4gMTI1OlxcdC8qXFxuIDEyNjpcXHQgKiBBIGJpdCBpcyBuZXZlciBjbGVhcmVkOiBpdCBzdGFuZHMgZm9yIGEgd2hvbGUgRUZJX1BPSVNPTl9VTklUX1NJWkUsIHNvIGFuXFxuIDEyNzpcXHQgKiB1bnBvaXNvbiBjYW5ub3QgdGVsbCB3aGV0aGVyIHRoZSB1bml0IGFzIGEgd2hvbGUgaXMgZ29vZCBhZ2Fpbi5cXG4gMTI4OlxcdCAqL1xcbiAxMjk6XFx0dm9pZCBlZmlfaHdwb2lzb25fcmVjb3JkX3Bmbih1bnNpZ25lZCBsb25nIHBmbilcXG4gMTMwOlxcdHtcXG4gMTMxOlxcdFxcdHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSA9IGVmaV9wb2lzb25lZF9tZW1vcnkoKTtcXG4gMTMyOlxcdFxcdHBoeXNfYWRkcl90IGFkZHIgPSBQRk5fUEhZUyhwZm4pO1xcbiAxMzM6XFx0XFx0dTY0IHVuaXQ7XFxuIDEzNDpcXHRcXG4gMTM1OlxcdFxcdGlmICghcG0gfHwgYWRkciBcXHUwMDNjIHBtLVxcdTAwM2VwaHlzX2Jhc2UpXFxuIDEzNjpcXHRcXHRcXHRyZXR1cm47XFxuIDEzNzpcXHRcXG4gMTM4OlxcdFxcdHVuaXQgPSAoYWRkciAtIHBtLVxcdTAwM2VwaHlzX2Jhc2UpIC8gcG0tXFx1MDAzZXVuaXRfc2l6ZTtcXG4gMTM5OlxcdFxcdGlmICh1bml0IFxcdTAwM2MgcG0tXFx1MDAzZXNpemUgKiBCSVRTX1BFUl9CWVRFKVxcbiAxNDA6XFx0XFx0XFx0c2V0X2JpdCh1bml0LCBwbS1cXHUwMDNlYml0bWFwKTtcXG4gMTQxOlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTQ6MTA6MDEuNTgwMTIwODQ2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg0Nzk4MzgwMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IFBvaXNvbmVkIE1lbW9yeSBpbiB0aGUgTGludXggS2VybmVsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBgbW0vcGFnZV9hbGxvYy5jYCBhbmQgYG1tL21lbW9yeS1mYWlsdXJlLmNgIGZpbGVzLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGUgaW50ZXJhY3Rpb24gb2YgbWVtb3J5IHBvaXNvbmluZyB3aXRoaW4gdGhlIHBhZ2UgYWxsb2NhdGlvbiBhbmQgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgc3Vic3lzdGVtcy4gVGhlIGNvZGUgc25pcHBldHMgZm9yIGBwb2lzb25fYmxvY2tgIGFuZCBgaHdwb2lzb25fYm9vdF9wYWdlYCBhcmUgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLCBlc3BlY2lhbGx5IGhvdyB0aGV5IGludGVyYWN0IHdpdGggYHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBwb2lzb25lZCBtZW1vcnkgaXMgaWRlbnRpZmllZCBhbmQgdGhlbiBoYW5kbGVkIGR1cmluZyBwYWdlIGZyZWVpbmcsIHBhcnRpY3VsYXJseSB0aGUgVE9ETyBjb21tZW50IGluIGBfX2ZyZWVfcGFnZXNfY29yZWAuXG5cbk5vdywgdGhlIEtjb25maWcgb3B0aW9ucy4gYEVGSV9QT0lTT05FRF9NRU1PUllgIGlzIHdoYXQgZmxhZ3MgdGhlIGZlYXR1cmUsIGFuZCBpdCBkZXBlbmRzIG9uIGBFRklfU1RVQmAsIGBNRU1PUllfRkFJTFVSRWAsIGFuZCBgNjRCSVRgLiAgVGhpcyBpbXBsaWVzIGEgVUVGSSBlbnZpcm9ubWVudCwgc29tZXRoaW5nIEkgY2FuIHJlYWRpbHkgdGVzdCBpbiBRRU1VLiAgYENPTkZJR19FRklgIGlzIGEgcHJlcmVxdWlzaXRlIGZvciBgRUZJX1NUVUJgLlxuXG5OZXh0LCB0aGUgZXhlY3V0aW9uIGZsb3cuIEluIGEgUUVNVS9VRUZJIHNldHVwLCB0aGUgRUZJIHN0dWIgaW5pdGlhbGl6ZXMsIHNldHMgdXAgbWVtb3J5IHRhYmxlcywgdGhlIGtlcm5lbCBib290cywgcHJvY2Vzc2VzIHRoZXNlIHRhYmxlcyAoZS5nLiBgZWZpX2NvbmZpZ19wYXJzZV90YWJsZXNgKSwgYW5kIHRoZW4gY2FsbHMgYGVmaV9wb2lzb25lZF9tZW1vcnlfcmVzZXJ2ZSgpYC4gIFJ1bnRpbWUgaW5qZWN0aW9uICh2aWEgYG1hZHZpc2VgIG9yIHN5c2ZzL2RlYnVnZnMpIHRoZW4gdHJpZ2dlcnMgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYC4gQ3JpdGljYWxseSwgYHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeWAgYWxzbyBjb21lcyBpbnRvIHBsYXkgZHVyaW5nIGJvb3QgYW5kIGhvdHBsdWcgb3BlcmF0aW9ucy5cblxuSXMgdGhpcyBmdXp6YWJsZT8gQWJzb2x1dGVseS4gVGhpcyBpcyBjb3JlIE1NIGFuZCBFRkkgY2hhbmdlcy4gRnVuY3Rpb25zIEkgd2FudCB0byBmb2N1cyBvbjogYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCwgYHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeWAsIGBod3BvaXNvbl9ib290X3BhZ2VgLCBhbmQgYHBvaXNvbl9ibG9ja2AuIEFsc28sIHNpbmNlIHRoZSBmdXp6aW5nIGlzIHRhcmdldGluZyBFRkkgZW52aXJvbm1lbnRzLCBvdGhlciBjYWxscyBhcmUgd29ydGggdGVzdGluZywgYGFjdGlvbl9yZXN1bHRgLCBhbmQgYG1lbW9yeV9mYWlsdXJlYC5cblxuSSdsbCBwaW5wb2ludCB0aGUgZnVuY3Rpb25zIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgYnkgdGhpcyBwYXRjaC4gIGBkcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uY2AgaW50cm9kdWNlcyBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gLCBgcmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5YCwgYW5kIGBlZmlfcG9pc29uZWRfbWVtb3J5X3Jlc2VydmVgLiAgYG1tL21lbW9yeS1mYWlsdXJlLmNgIGdpdmVzIHVzIGBod3BvaXNvbl9ib290X3BhZ2VgLCBgYWN0aW9uX3Jlc3VsdGAsIGFuZCBgbWVtb3J5X2ZhaWx1cmVgLiAgYG1tL3BhZ2VfYWxsb2MuY2AgaGFzIGBfX2ZyZWVfcGFnZXNfY29yZWAuIEhvd2V2ZXIsIGBfX2ZyZWVfcGFnZXNfY29yZWAgaXMgb25seSBkdXJpbmcgYm9vdC9ob3RwbHVnLCB3aGljaCBtYXkgbm90IHJlcXVpcmUgZm9jdXMuIFRoZSByZWxldmFudCBmdW5jdGlvbnMgYXJlIGBlZmlfaHdwb2lzb25fcmVjb3JkX3BmbmAsIGByYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnlgLCBhbmQgYGh3cG9pc29uX2Jvb3RfcGFnZWAuXG5cbkknbGwgY2hlY2sgdGhlIHBhdGNoIGZvciB0aGUgb3RoZXIgZnVuY3Rpb25zOiBgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGVgLCBgZWZpX3BvaXNvbmVkX21lbW9yeV9yZXNlcnZlYCwgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCwgYHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeWAsIGFuZCBgaHdwb2lzb25fYm9vdF9wYWdlYC5cblxuYGFjdGlvbl9yZXN1bHRgIGlzIHN0YXRpYywgYnV0IGBtZW1vcnlfZmFpbHVyZWAgYW5kIHRoZSBvdGhlcnMgYXJlIGdsb2JhbCBzeW1ib2xzLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQ6IGBFRklfUE9JU09ORURfTUVNT1JZYCwgYE1FTU9SWV9GQUlMVVJFYCwgYEVGSV9TVFVCYCwgYW5kIGBFRklgLlxuXG5UaGVyZWZvcmUsIGJhc2VkIG9uIG15IGV4cGVydCBhc3Nlc3NtZW50OlxuXG4qICAgKipXb3J0aEZ1enppbmc6KiogVFJVRVxuKiAgICoqRW5hYmxlQ29uZmlnczoqKiBgW1wiRUZJX1BPSVNPTkVEX01FTU9SWVwiLCBcIk1FTU9SWV9GQUlMVVJFXCIsIFwiRUZJX1NUVUJcIiwgXCJFRklcIl1gXG4qICAgKipGb2N1c1N5bWJvbHM6KiogYFtcImVmaV9od3BvaXNvbl9yZWNvcmRfcGZuXCIsIFwicmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5XCIsIFwiaHdwb2lzb25fYm9vdF9wYWdlXCIsIFwibWVtb3J5X2ZhaWx1cmVcIl1gXG4qICAgKipSZWFzb25pbmc6KiogVGhlIGludGVyc2VjdGlvbiBvZiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBFRkkvVUVGSSBpbnRlcmFjdGlvbnMsIGFuZCBhIGZlYXR1cmUgZGVzaWduZWQgdG8gZGV0ZWN0IGFuZCBoYW5kbGUgbWVtb3J5IGZhaWx1cmVzIHByZXNlbnRzIGEgaGlnaC12YWx1ZSBmdXp6aW5nIHRhcmdldC4gVGhlIHBvdGVudGlhbCBmb3IgYnVncyBpcyBoaWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzQ3NSwiT3V0cHV0VG9rZW5zIjoyMDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTQ6MTA6MTAuMDU5OTYxMDQ1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY0OTM3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVGSV9QT0lTT05FRF9NRU1PUllcIixcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCIsXG4gICAgXCJFRklfU1RVQlwiLFxuICAgIFwiRUZJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZWZpX2h3cG9pc29uX3JlY29yZF9wZm5cIixcbiAgICBcInJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeVwiLFxuICAgIFwiaHdwb2lzb25fYm9vdF9wYWdlXCIsXG4gICAgXCJtZW1vcnlfZmFpbHVyZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdHJhY2tpbmcgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IGFjcm9zcyBrZXhlYyB2aWEgYW4gRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUgKENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZKS4gSXQgaW50cm9kdWNlcyBob29rcyBpbiBjb3JlIG1lbW9yeS1mYWlsdXJlIGhhbmRsaW5nIChlZmlfaHdwb2lzb25fcmVjb3JkX3BmbiBpbiBhY3Rpb25fcmVzdWx0KSBhbmQgbWVtb3J5IGluaXRpYWxpemF0aW9uL2hvdHBsdWcgKF9fZnJlZV9wYWdlc19jb3JlLCBod3BvaXNvbl9ib290X3BhZ2UpLiBUaGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIGF0IHJ1bnRpbWUgdmlhIG1lbW9yeSBmYWlsdXJlIG1lY2hhbmlzbXMgc3VjaCBhcyBtYWR2aXNlKE1BRFZfSFdQT0lTT04pIGFuZCBtZW1vcnkgaG90cGx1Z2dpbmcgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHdpdGggRUZJLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVGSV9QT0lTT05FRF9NRU1PUllcIixcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCIsXG4gICAgXCJFRklfU1RVQlwiLFxuICAgIFwiRUZJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZWZpX2h3cG9pc29uX3JlY29yZF9wZm5cIixcbiAgICBcInJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeVwiLFxuICAgIFwiaHdwb2lzb25fYm9vdF9wYWdlXCIsXG4gICAgXCJtZW1vcnlfZmFpbHVyZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdHJhY2tpbmcgaGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IGFjcm9zcyBrZXhlYyB2aWEgYW4gRUZJIGNvbmZpZ3VyYXRpb24gdGFibGUgKENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZKS4gSXQgaW50cm9kdWNlcyBob29rcyBpbiBjb3JlIG1lbW9yeS1mYWlsdXJlIGhhbmRsaW5nIChlZmlfaHdwb2lzb25fcmVjb3JkX3BmbiBpbiBhY3Rpb25fcmVzdWx0KSBhbmQgbWVtb3J5IGluaXRpYWxpemF0aW9uL2hvdHBsdWcgKF9fZnJlZV9wYWdlc19jb3JlLCBod3BvaXNvbl9ib290X3BhZ2UpLiBUaGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIGF0IHJ1bnRpbWUgdmlhIG1lbW9yeSBmYWlsdXJlIG1lY2hhbmlzbXMgc3VjaCBhcyBtYWR2aXNlKE1BRFZfSFdQT0lTT04pIGFuZCBtZW1vcnkgaG90cGx1Z2dpbmcgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHdpdGggRUZJLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNDoxMDoxMC4xNDY0NjI3MjVaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDIyNTQ5MTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTQ6MTA6MTAuMTQ3MDUwOTk2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTM0MjE5NTY3MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIEVGSSBwb2lzb25lZCBtZW1vcnkgdHJhY2tpbmcgKENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZKSB0byBwcmVzZXJ2ZSBoYXJkd2FyZS1wb2lzb25lZCBwYWdlIGluZm9ybWF0aW9uIGFjcm9zcyBrZXhlYyByZWJvb3RzLiBcXG5cXG4xLiBBbGxvY2F0aW9uIFxcdTAwMjYgSW5pdGlhbGl6YXRpb246IFRoZSB0YWJsZSBzdHJ1Y3R1cmUgYHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5YCBhbmQgaXRzIHRyYWlsaW5nIGJpdG1hcCBhcmUgYWxsb2NhdGVkIGluIHRoZSBFRkkgc3R1YiBhbmQgZXhwbGljaXRseSBmdWxseSBpbml0aWFsaXplZCAoYWxsIGhlYWRlciBmaWVsZHMgYXNzaWduZWQsIGFuZCBgbWVtc2V0KHBtLVxcdTAwM2ViaXRtYXAsIDAsIGJpdG1hcF9zaXplKWAgY2xlYXJzIHRoZSBiaXRtYXApLlxcbjIuIE1lbW9yeSBBY2Nlc3NlczogUnVudGltZSBvcGVyYXRpb25zIChgcmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5YCwgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYCwgYHBvaXNvbl9ibG9ja2AsIGFuZCBgaHdwb2lzb25fYm9vdF9wYWdlYCkgb25seSByZWFkIGFuZCB1cGRhdGUgZnVsbHkgaW5pdGlhbGl6ZWQgbWVtb3J5IHN0cnVjdHVyZXMgYW5kIHN0cnVjdCBwYWdlIGZsYWdzLlxcbjMuIE5vIFVuaW5pdGlhbGl6ZWQgTGVha3Mgb3IgUmVhZHM6IFRoZXJlIGFyZSBubyBkYXRhIHRyYW5zZmVycyB0byB1c2VyIHNwYWNlLCBubyBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIG5vIGV4cG9zZWQgcGFkZGluZy5cXG40LiBLQVNBTiB2cyBLTVNBTjogUG90ZW50aWFsIHJpc2tzIHN1Y2ggYXMgaW52YWxpZCBwb2ludGVyIG1hdGgsIG91dC1vZi1ib3VuZHMgYml0bWFwIGFjY2Vzc2VzLCBvciBtZW1vcnkgcmVzZXJ2YXRpb24gZXJyb3JzIGFyZSBwcm9wZXJseSBoYW5kbGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBLTVNBTiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTc5Y2JiMTA1YzU5ODE3YWYzMmEyMmEwMDE3MWY3YmI5MTQ2NzY1NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTQ6MDk6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpLmMgYi9hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpLmNcbmluZGV4IDBjMzlhZGI5NmI5MTIuLjJiMzdiOTZhMzZlMDkgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpLmNcbisrKyBiL2FyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmkuY1xuQEAgLTkzLDYgKzkzLDkgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgKiBjb25zdCBlZmlfdGFibGVzW10gPSB7XG4gI2lmZGVmIENPTkZJR19VTkFDQ0VQVEVEX01FTU9SWVxuIFx0XHUwMDI2ZWZpLnVuYWNjZXB0ZWQsXG4gI2VuZGlmXG4rI2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXG4rXHRcdTAwMjZlZmkucG9pc29uZWRfbWVtb3J5LFxuKyNlbmRpZlxuIH07XG4gXG4gdTY0IGVmaV9zZXR1cDtcdFx0LyogZWZpIHNldHVwX2RhdGEgcGh5c2ljYWwgYWRkcmVzcyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWcgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnXG5pbmRleCAyOWUwNzI5Mjk5ZjViLi5hYWZjZDQxYmMwMDYzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZ1xuQEAgLTI2Myw2ICsyNjMsMTQgQEAgY29uZmlnIEVGSV9DT0NPX1NFQ1JFVFxuIFx0ICB2aXJ0L2NvY28vZWZpX3NlY3JldCBtb2R1bGUgdG8gYWNjZXNzIHRoZSBzZWNyZXRzLCB3aGljaCBpbiB0dXJuXG4gXHQgIGFsbG93cyB1c2Vyc3BhY2UgcHJvZ3JhbXMgdG8gYWNjZXNzIHRoZSBpbmplY3RlZCBzZWNyZXRzLlxuIFxuK2NvbmZpZyBFRklfUE9JU09ORURfTUVNT1JZXG4rXHRkZWZfYm9vbCB5XG4rXHRkZXBlbmRzIG9uIEVGSV9TVFVCIFx1MDAyNlx1MDAyNiBNRU1PUllfRkFJTFVSRSBcdTAwMjZcdTAwMjYgNjRCSVRcbitcdGhlbHBcbitcdCAgUmVjb3JkIHBhZ2UgZnJhbWVzIHRoYXQgYXJlIGhhcmR3YXJlLXBvaXNvbmVkIHdoaWxlIHRoaXMga2VybmVsIHJ1bnNcbitcdCAgaW50byBhbiBFRkkgY29uZmlndXJhdGlvbiB0YWJsZSwgYW5kIGhvbm9yIHRoYXQgdGFibGUgZWFybHkgb24gdGhlXG4rXHQgIG5leHQga2VybmVsIHNvIGEga2V4ZWMgZG9lcyBub3QgaGFuZCBrbm93bi1iYWQgUkFNIGJhY2sgb3V0LlxuK1xuIGNvbmZpZyBPVk1GX0RFQlVHX0xPR1xuIFx0Ym9vbCBcIkV4cG9zZSBPVk1GIGZpcm13YXJlIGRlYnVnIGxvZyB2aWEgc3lzZnNcIlxuIFx0ZGVwZW5kcyBvbiBFRklcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9NYWtlZmlsZSBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlXG5pbmRleCA4ZWZiY2Y2OTllNGZmLi4wNWQwYTQ5MDkyM2U1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL01ha2VmaWxlXG5AQCAtNDMsNCArNDMsNSBAQCBvYmotJChDT05GSUdfRUZJX0VBUkxZQ09OKVx0XHQrPSBlYXJseWNvbi5vXG4gb2JqLSQoQ09ORklHX1VFRklfQ1BFUl9BUk0pXHRcdCs9IGNwZXItYXJtLm9cbiBvYmotJChDT05GSUdfVUVGSV9DUEVSX1g4NilcdFx0Kz0gY3Blci14ODYub1xuIG9iai0kKENPTkZJR19VTkFDQ0VQVEVEX01FTU9SWSlcdFx0Kz0gdW5hY2NlcHRlZF9tZW1vcnkub1xuK29iai0kKENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZKVx0Kz0gcG9pc29uLm9cbiBvYmotJChDT05GSUdfVEVFX1NUTU1fRUZJKVx0XHQrPSBzdG1tL3RlZV9zdG1tX2VmaS5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuY1xuaW5kZXggNmQ5ODdkN2Y5Nzc4MS4uNTViMmVlNTNmYzI2OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS5jXG4rKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuY1xuQEAgLTU1LDYgKzU1LDkgQEAgc3RydWN0IGVmaSBfX3JlYWRfbW9zdGx5IGVmaSA9IHtcbiAjaWZkZWYgQ09ORklHX1VOQUNDRVBURURfTUVNT1JZXG4gXHQudW5hY2NlcHRlZFx0XHQ9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIsXG4gI2VuZGlmXG4rI2lmZGVmIENPTkZJR19FRklfUE9JU09ORURfTUVNT1JZXG4rXHQucG9pc29uZWRfbWVtb3J5XHQ9IEVGSV9JTlZBTElEX1RBQkxFX0FERFIsXG4rI2VuZGlmXG4gfTtcbiBFWFBPUlRfU1lNQk9MKGVmaSk7XG4gXG5AQCAtNjc3LDYgKzY4MCw5IEBAIHN0YXRpYyBjb25zdCBlZmlfY29uZmlnX3RhYmxlX3R5cGVfdCBjb21tb25fdGFibGVzW10gX19pbml0Y29uc3QgPSB7XG4gI2lmZGVmIENPTkZJR19VTkFDQ0VQVEVEX01FTU9SWVxuIFx0e0xJTlVYX0VGSV9VTkFDQ0VQVEVEX01FTV9UQUJMRV9HVUlELFx0XHUwMDI2ZWZpLnVuYWNjZXB0ZWQsXHRcIlVuYWNjZXB0ZWRcIlx0fSxcbiAjZW5kaWZcbisjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllcbitcdHtMSU5VWF9FRklfUE9JU09ORURfTUVNT1JZX1RBQkxFX0dVSUQsXHRcdTAwMjZlZmkucG9pc29uZWRfbWVtb3J5LFx0XCJQT0lTT05cIlx0fSxcbisjZW5kaWZcbiAjaWZkZWYgQ09ORklHX0VGSV9HRU5FUklDX1NUVUJcbiBcdHtMSU5VWF9FRklfUFJJTUFSWV9ESVNQTEFZX1RBQkxFX0dVSUQsXHRcdTAwMjZwcmltYXJ5X2Rpc3BsYXlfdGFibGVcdFx0XHR9LFxuICNlbmRpZlxuQEAgLTg3Nyw2ICs4ODMsOCBAQCBpbnQgX19pbml0IGVmaV9jb25maWdfcGFyc2VfdGFibGVzKGNvbnN0IGVmaV9jb25maWdfdGFibGVfdCAqY29uZmlnX3RhYmxlcyxcbiBcdFx0fVxuIFx0fVxuIFxuK1x0ZWZpX3BvaXNvbmVkX21lbW9yeV9yZXNlcnZlKCk7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmNcbmluZGV4IDQ4ZjkzZjc3NThlOWUuLjVjYmU2NzU0OTEzMzMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jXG4rKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jXG5AQCAtNzc0LDMgKzc3NCwxMDMgQEAgdm9pZCBlZmlfcmVtYXBfaW1hZ2UodW5zaWduZWQgbG9uZyBpbWFnZV9iYXNlLCB1bnNpZ25lZCBhbGxvY19zaXplLFxuIFx0XHRcdGVmaV93YXJuKFwiRmFpbGVkIHRvIHJlbWFwIGRhdGEgcmVnaW9uIG5vbi1leGVjdXRhYmxlXFxuXCIpO1xuIFx0fVxuIH1cbitcbisjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllcbisvKlxuKyAqIEZpbmQgdGhlIGJhc2UgYW5kIHRvcCBvZiB0aGUgbWVtb3J5LCBzbywgd2UgY2FuIGNyZWF0ZSB0aGUgYml0bWFwIGZvclxuKyAqIHRoZSBmdWxsIHJhbmdlLlxuKyAqL1xuK3N0YXRpYyBlZmlfc3RhdHVzX3QgZWZpX2dldF9yYW1fcmFuZ2UodTY0ICpiYXNlLCB1NjQgKnRvcClcbit7XG4rXHRzdHJ1Y3QgZWZpX2Jvb3RfbWVtbWFwICptYXAgX19mcmVlKGVmaV9wb29sKSA9IE5VTEw7XG4rXHR1NjQgcmFtX2Jhc2UgPSBVTExPTkdfTUFYLCByYW1fdG9wID0gMDtcbitcdGVmaV9zdGF0dXNfdCBzdGF0dXM7XG4rXHRpbnQgaSwgbnJfZGVzYztcbitcbitcdHN0YXR1cyA9IGVmaV9nZXRfbWVtb3J5X21hcChcdTAwMjZtYXAsIGZhbHNlKTtcbitcdGlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpXG4rXHRcdHJldHVybiBzdGF0dXM7XG4rXG4rXHRucl9kZXNjID0gbWFwLVx1MDAzZW1hcF9zaXplIC8gbWFwLVx1MDAzZWRlc2Nfc2l6ZTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2Rlc2M7IGkrKykge1xuK1x0XHRlZmlfbWVtb3J5X2Rlc2NfdCAqZDtcbitcbitcdFx0ZCA9IGVmaV9tZW1kZXNjX3B0cigodW5zaWduZWQgbG9uZyltYXAtXHUwMDNlbWFwLCBtYXAtXHUwMDNlZGVzY19zaXplLCBpKTtcbitcdFx0cmFtX2Jhc2UgPSBtaW4ocmFtX2Jhc2UsIGQtXHUwMDNlcGh5c19hZGRyKTtcbitcdFx0cmFtX3RvcCA9IG1heChyYW1fdG9wLFxuK1x0XHRcdCAgICAgIGQtXHUwMDNlcGh5c19hZGRyICsgZC1cdTAwM2VudW1fcGFnZXMgKiBFRklfUEFHRV9TSVpFKTtcbitcdH1cbitcdGlmICghcmFtX3RvcCB8fCByYW1fYmFzZSA9PSBVTExPTkdfTUFYKVxuK1x0XHRyZXR1cm4gRUZJX05PVF9GT1VORDtcbitcbitcdCpiYXNlID0gcm91bmRfZG93bihyYW1fYmFzZSwgRUZJX1BPSVNPTl9VTklUX1NJWkUpO1xuK1x0KnRvcCA9IHJvdW5kX3VwKHJhbV90b3AsIEVGSV9QT0lTT05fVU5JVF9TSVpFKTtcbitcbitcdHJldHVybiBFRklfU1VDQ0VTUztcbit9XG4rXG4rLyogVGhlIHNpemUgb2YgdGhlIGJpdG1hcCAqL1xuK3N0YXRpYyB1NjQgZWZpX3BvaXNvbl9iaXRtYXBfc2l6ZSh1NjQgc3Bhbilcbit7XG4rXHR1NjQgYnl0ZXMgPSBESVZfUk9VTkRfVVAoRElWX1JPVU5EX1VQKHNwYW4sIEVGSV9QT0lTT05fVU5JVF9TSVpFKSxcbitcdFx0XHRcdCBCSVRTX1BFUl9CWVRFKTtcbitcbitcdHJldHVybiByb3VuZF91cChieXRlcywgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICplZmlfcG9pc29uX2FsbG9jKHU2NCBwaHlzX2Jhc2UsXG4rXHRcdFx0XHRcdFx0XHQgIHU2NCBiaXRtYXBfc2l6ZSlcbit7XG4rXHRzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG07XG4rXHRlZmlfc3RhdHVzX3Qgc3RhdHVzO1xuK1xuK1x0c3RhdHVzID0gZWZpX2JzX2NhbGwoYWxsb2NhdGVfcG9vbCwgRUZJX0FDUElfUkVDTEFJTV9NRU1PUlksXG4rXHRcdFx0ICAgICBzaXplb2YoKnBtKSArIGJpdG1hcF9zaXplLCAodm9pZCAqKilcdTAwMjZwbSk7XG4rXHRpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdHBtLVx1MDAzZXZlcnNpb24gPSAxO1xuK1x0cG0tXHUwMDNldW5pdF9zaXplID0gRUZJX1BPSVNPTl9VTklUX1NJWkU7XG4rXHRwbS1cdTAwM2VwaHlzX2Jhc2UgPSBwaHlzX2Jhc2U7XG4rXHRwbS1cdTAwM2VzaXplID0gYml0bWFwX3NpemU7XG4rXHRtZW1zZXQocG0tXHUwMDNlYml0bWFwLCAwLCBiaXRtYXBfc2l6ZSk7XG4rXG4rXHRyZXR1cm4gcG07XG4rfVxuK1xuKy8qIFRoaXMgbmVlZHMgdG8gYmUgZG9uZSB3aGlsZSBib290IHNlcnZpY2UgaXMgc3RpbGwgYWN0aXZlICovXG4rdm9pZCBpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSh2b2lkKVxuK3tcbitcdGVmaV9ndWlkX3QgcG9pc29uZWRfbWVtb3J5X3RhYmxlX2d1aWQgPSBMSU5VWF9FRklfUE9JU09ORURfTUVNT1JZX1RBQkxFX0dVSUQ7XG4rXHRzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG07XG4rXHR1NjQgcmFtX2Jhc2UsIHJhbV90b3AsIGJpdG1hcF9zaXplO1xuK1x0ZWZpX3N0YXR1c190IHN0YXR1cztcbitcbitcdC8qIEEgdGFibGUgaW5zdGFsbGVkIGJ5IGFuIGVhcmxpZXIgYm9vdCByaWRlcyB0aGUgc3lzdGVtIHRhYmxlIGFjcm9zcyBrZXhlYy4gKi9cbitcdHBtID0gZ2V0X2VmaV9jb25maWdfdGFibGUocG9pc29uZWRfbWVtb3J5X3RhYmxlX2d1aWQpO1xuK1x0aWYgKHBtKSB7XG4rXHRcdGlmIChwbS1cdTAwM2V2ZXJzaW9uICE9IDEpXG4rXHRcdFx0ZWZpX2VycihcIlVua25vd24gdmVyc2lvbiBvZiBwb2lzb25lZC1tZW1vcnkgdGFibGVcXG5cIik7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGlmIChlZmlfZ2V0X3JhbV9yYW5nZShcdTAwMjZyYW1fYmFzZSwgXHUwMDI2cmFtX3RvcCkgIT0gRUZJX1NVQ0NFU1MpIHtcbitcdFx0ZWZpX2VycihcIkZhaWxlZCB0byBzaXplIHRoZSBwb2lzb25lZC1tZW1vcnkgdGFibGUhXFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRiaXRtYXBfc2l6ZSA9IGVmaV9wb2lzb25fYml0bWFwX3NpemUocmFtX3RvcCAtIHJhbV9iYXNlKTtcbitcdHBtID0gZWZpX3BvaXNvbl9hbGxvYyhyYW1fYmFzZSwgYml0bWFwX3NpemUpO1xuK1x0aWYgKCFwbSkge1xuK1x0XHRlZmlfZXJyKFwiRmFpbGVkIHRvIGFsbG9jYXRlIHBvaXNvbmVkLW1lbW9yeSB0YWJsZSFcXG5cIik7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHN0YXR1cyA9IGVmaV9ic19jYWxsKGluc3RhbGxfY29uZmlndXJhdGlvbl90YWJsZSxcbitcdFx0XHQgICAgIFx1MDAyNnBvaXNvbmVkX21lbW9yeV90YWJsZV9ndWlkLCBwbSk7XG4rXHRpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7XG4rXHRcdGVmaV9ic19jYWxsKGZyZWVfcG9vbCwgcG0pO1xuK1x0XHRlZmlfZXJyKFwiRmFpbGVkIHRvIGluc3RhbGwgcG9pc29uZWQtbWVtb3J5IGNvbmZpZyB0YWJsZSFcXG5cIik7XG4rXHR9XG4rfVxuKyNlbmRpZlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuY1xuaW5kZXggMjM1Yzk3MzhkYTJkNi4uMjJhMzE1ZTI4MTRhMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWIuY1xuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi5jXG5AQCAtMTc5LDYgKzE3OSw3IEBAIGVmaV9zdGF0dXNfdCBlZmlfc3R1Yl9jb21tb24oZWZpX2hhbmRsZV90IGhhbmRsZSxcbiBcdFx0XHQgRUZJX1JUX1NVUFBPUlRFRF9TRVRfVklSVFVBTF9BRERSRVNTX01BUCk7XG4gXG4gXHRpbnN0YWxsX21lbXJlc2VydmVfdGFibGUoKTtcbitcdGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKCk7XG4gXG4gXHRzdGF0dXMgPSBlZmlfYm9vdF9rZXJuZWwoaGFuZGxlLCBpbWFnZSwgaW1hZ2VfYWRkciwgY21kbGluZV9wdHIpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpc3R1Yi5oIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmhcbmluZGV4IGZkOTFmYzE1ZWM4MTAuLjQ0NDM2ODY5YzRlZmUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaFxuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmhcbkBAIC0xMTY5LDYgKzExNjksMTIgQEAgZWZpX2VuYWJsZV9yZXNldF9hdHRhY2tfbWl0aWdhdGlvbih2b2lkKSB7IH1cbiBcbiB2b2lkIGVmaV9yZXRyaWV2ZV9ldmVudGxvZyh2b2lkKTtcbiBcbisjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllcbit2b2lkIGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKHZvaWQpO1xuKyNlbHNlXG4rc3RhdGljIGlubGluZSB2b2lkIGluc3RhbGxfcG9pc29uZWRfbWVtb3J5X3RhYmxlKHZvaWQpIHsgfVxuKyNlbmRpZlxuK1xuIHN0cnVjdCBzeXNmYl9kaXNwbGF5X2luZm8gKmFsbG9jX3ByaW1hcnlfZGlzcGxheSh2b2lkKTtcbiBzdHJ1Y3Qgc3lzZmJfZGlzcGxheV9pbmZvICpfX2FsbG9jX3ByaW1hcnlfZGlzcGxheSh2b2lkKTtcbiB2b2lkIGZyZWVfcHJpbWFyeV9kaXNwbGF5KHN0cnVjdCBzeXNmYl9kaXNwbGF5X2luZm8gKmRweSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jXG5pbmRleCAwYmFlMGYwNmI2NzYzLi4zMTM2MTMyYjk2MjhhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi94ODYtc3R1Yi5jXG4rKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL3g4Ni1zdHViLmNcbkBAIC0xMDI0LDYgKzEwMjQsOCBAQCB2b2lkIF9fbm9yZXR1cm4gZWZpX3N0dWJfZW50cnkoZWZpX2hhbmRsZV90IGhhbmRsZSxcbiBcbiBcdHNldHVwX3VuYWNjZXB0ZWRfbWVtb3J5KCk7XG4gXG4rXHRpbnN0YWxsX3BvaXNvbmVkX21lbW9yeV90YWJsZSgpO1xuK1xuIFx0c3RhdHVzID0gZXhpdF9ib290KGJvb3RfcGFyYW1zLCBoYW5kbGUpO1xuIFx0aWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUykge1xuIFx0XHRlZmlfZXJyKFwiZXhpdF9ib290KCkgZmFpbGVkIVxcblwiKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9wb2lzb24uYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL3BvaXNvbi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZTE2ZDQzZjQ0MzhlZVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvcG9pc29uLmNcbkBAIC0wLDAgKzEsMTQxIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKy8qXG4rICogUnVudGltZSBzaWRlIG9mIHRoZSBMSU5VWF9FRklfUE9JU09ORURfTUVNT1JZIHRhYmxlOiBvbmUgYml0IHBlclxuKyAqIEVGSV9QT0lTT05fVU5JVF9TSVpFLCBzZXQgaGVyZSBhcyBmcmFtZXMgZ28gYmFkLCBob25vcmVkIGJ5IHRoZSBuZXh0IGtlcm5lbC5cbisgKlxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgQnJlbm8gTGVpdGFvIFx1MDAzY2xlaXRhb0BkZWJpYW4ub3JnXHUwMDNlXG4rICovXG4rXG4rI2RlZmluZSBwcl9mbXQoZm10KSBcImVmaTogXCIgZm10XG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYml0bWFwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9lZmkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9sb2cyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1ibG9jay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L292ZXJmbG93LmhcdTAwM2VcbitcbitzdGF0aWMgYm9vbCBfX2luaXRcbitlZmlfcG9pc29uX2dlb21ldHJ5X3ZhbGlkKGNvbnN0IHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICpwbSlcbit7XG4rXHR1NjQgbmJpdHM7XG4rXG4rXHQvKiBXaG9sZSB3b3JkcywgYW5kIGEgYml0IGNvdW50IHRoYXQgY2FuIGJlIHRha2VuIHdpdGhvdXQgd3JhcHBpbmcuICovXG4rXHRpZiAoIXBtLVx1MDAzZXNpemUgfHwgIUlTX0FMSUdORUQocG0tXHUwMDNlc2l6ZSwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSB8fFxuK1x0ICAgIGNoZWNrX211bF9vdmVyZmxvdyhwbS1cdTAwM2VzaXplLCAodTY0KUJJVFNfUEVSX0JZVEUsIFx1MDAyNm5iaXRzKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKHBtLVx1MDAzZXVuaXRfc2l6ZSBcdTAwM2MgUEFHRV9TSVpFIHx8ICFpc19wb3dlcl9vZl8yKHBtLVx1MDAzZXVuaXRfc2l6ZSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiBJU19BTElHTkVEKHBtLVx1MDAzZXBoeXNfYmFzZSwgcG0tXHUwMDNldW5pdF9zaXplKTtcbit9XG4rXG4rLyogVGhlIHRhYmxlIG1heSBjb21lIGZyb20gYW4gZWFybGllciBrZXJuZWwsIHNvIHZldCBpdCBiZWZvcmUgdXNpbmcgaXQuICovXG4rc3RhdGljIGJvb2wgX19pbml0XG4rZWZpX3BvaXNvbl90YWJsZV92YWxpZChjb25zdCBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG0pXG4re1xuK1x0aWYgKHBtLVx1MDAzZXZlcnNpb24gIT0gMSkge1xuK1x0XHRwcl93YXJuKFwiSWdub3JpbmcgcG9pc29uZWQtbWVtb3J5IHRhYmxlIHdpdGggdmVyc2lvbiAldVxcblwiLFxuK1x0XHRcdHBtLVx1MDAzZXZlcnNpb24pO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4rXG4rXHRpZiAoIWVmaV9wb2lzb25fZ2VvbWV0cnlfdmFsaWQocG0pKSB7XG4rXHRcdHByX3dhcm4oXCJJZ25vcmluZyBtYWxmb3JtZWQgcG9pc29uZWQtbWVtb3J5IHRhYmxlXFxuXCIpO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rLypcbisgKiBWZXQgdGhlIGluaGVyaXRlZCB0YWJsZSBhbmQgaGFuZCBpdHMgcGFnZXMgdG8gbWVtYmxvY2ssIHRoZSB3YXkgdGhlXG4rICogdW5hY2NlcHRlZCBtZW1vcnkgdGFibGUgaXMgaGFuZGxlZC4gSXQgaXMgRUZJIEFDUEkgcmVjbGFpbSBtZW1vcnksIHdoaWNoXG4rICogYmVjb21lcyBFODIwX1RZUEVfQUNQSSBhbmQgd291bGQgb3RoZXJ3aXNlIHN0YXkgb3V0IG9mIHRoZSBkaXJlY3QgbWFwLCBhbmRcbisgKiB0b3VjaGluZyBpdCB0aGVuIGZhdWx0cy4gQ2FsbGVkIGZyb20gZWZpX2NvbmZpZ19wYXJzZV90YWJsZXMoKSwgc29cbisgKiBldmVyeXRoaW5nIGxhdGVyIGNhbiByZWFjaCBpdCB3aXRoIGVmaV9wb2lzb25lZF9tZW1vcnkoKS5cbisgKi9cbit2b2lkIF9faW5pdCBlZmlfcG9pc29uZWRfbWVtb3J5X3Jlc2VydmUodm9pZClcbit7XG4rXHRzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeSAqcG07XG4rXHRwaHlzX2FkZHJfdCBzdGFydCwgZW5kO1xuK1xuK1x0aWYgKGVmaS5wb2lzb25lZF9tZW1vcnkgPT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUilcbitcdFx0cmV0dXJuO1xuK1xuK1x0cG0gPSBlYXJseV9tZW1yZW1hcChlZmkucG9pc29uZWRfbWVtb3J5LCBzaXplb2YoKnBtKSk7XG4rXHRpZiAoIXBtKSB7XG4rXHRcdHByX3dhcm4oXCJDb3VsZCBub3QgbWFwIHBvaXNvbmVkLW1lbW9yeSB0YWJsZVxcblwiKTtcbitcdFx0ZWZpLnBvaXNvbmVkX21lbW9yeSA9IEVGSV9JTlZBTElEX1RBQkxFX0FERFI7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGlmICghZWZpX3BvaXNvbl90YWJsZV92YWxpZChwbSkpIHtcbitcdFx0ZWZpLnBvaXNvbmVkX21lbW9yeSA9IEVGSV9JTlZBTElEX1RBQkxFX0FERFI7XG4rXHRcdGVhcmx5X21lbXVubWFwKHBtLCBzaXplb2YoKnBtKSk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHN0YXJ0ID0gUEFHRV9BTElHTl9ET1dOKGVmaS5wb2lzb25lZF9tZW1vcnkpO1xuK1x0ZW5kID0gUEFHRV9BTElHTihlZmkucG9pc29uZWRfbWVtb3J5ICsgc2l6ZW9mKCpwbSkgKyBwbS1cdTAwM2VzaXplKTtcbitcdGVhcmx5X21lbXVubWFwKHBtLCBzaXplb2YoKnBtKSk7XG4rXG4rXHRtZW1ibG9ja19hZGQoc3RhcnQsIGVuZCAtIHN0YXJ0KTtcbitcdG1lbWJsb2NrX3Jlc2VydmUoc3RhcnQsIGVuZCAtIHN0YXJ0KTtcbit9XG4rXG4rLyogVGhlIHRhYmxlLCB2ZXR0ZWQgYXQgcGFyc2UgdGltZSwgb3IgTlVMTCBpZiB0aGlzIGJvb3QgaGFzIG5vbmUuICovXG4rc3RhdGljIHN0cnVjdCBsaW51eF9lZmlfcG9pc29uZWRfbWVtb3J5ICplZmlfcG9pc29uZWRfbWVtb3J5KHZvaWQpXG4re1xuK1x0aWYgKGVmaS5wb2lzb25lZF9tZW1vcnkgPT0gRUZJX0lOVkFMSURfVEFCTEVfQUREUilcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRyZXR1cm4gcGh5c190b192aXJ0KGVmaS5wb2lzb25lZF9tZW1vcnkpO1xuK31cbitcbisvKiBEb2VzIHRoZSByYW5nZSBjb3ZlciBhIHVuaXQgYW4gZWFybGllciBrZXJuZWwgcmVjb3JkZWQgYXMgYmFkPyAqL1xuK2Jvb2wgcmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5KHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpXG4re1xuK1x0c3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtID0gZWZpX3BvaXNvbmVkX21lbW9yeSgpO1xuK1x0dTY0IGZpcnN0LCBsYXN0LCBuYml0cztcbitcbitcdGlmICghcG0pXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdG5iaXRzID0gcG0tXHUwMDNlc2l6ZSAqIEJJVFNfUEVSX0JZVEU7XG4rXG4rXHRpZiAoc3RhcnQgKyBzaXplIFx1MDAzYz0gcG0tXHUwMDNlcGh5c19iYXNlKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRpZiAoc3RhcnQgXHUwMDNjIHBtLVx1MDAzZXBoeXNfYmFzZSlcbitcdFx0c3RhcnQgPSBwbS1cdTAwM2VwaHlzX2Jhc2U7XG4rXG4rXHRmaXJzdCA9IChzdGFydCAtIHBtLVx1MDAzZXBoeXNfYmFzZSkgLyBwbS1cdTAwM2V1bml0X3NpemU7XG4rXHRpZiAoZmlyc3QgXHUwMDNlPSBuYml0cylcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0bGFzdCA9IChzdGFydCArIHNpemUgLSAxIC0gcG0tXHUwMDNlcGh5c19iYXNlKSAvIHBtLVx1MDAzZXVuaXRfc2l6ZTtcbitcdGxhc3QgPSBtaW4obGFzdCwgbmJpdHMgLSAxKTtcbitcbitcdHJldHVybiBmaW5kX25leHRfYml0KHBtLVx1MDAzZWJpdG1hcCwgbGFzdCArIDEsIGZpcnN0KSBcdTAwM2M9IGxhc3Q7XG4rfVxuK1xuKy8qXG4rICogQSBiaXQgaXMgbmV2ZXIgY2xlYXJlZDogaXQgc3RhbmRzIGZvciBhIHdob2xlIEVGSV9QT0lTT05fVU5JVF9TSVpFLCBzbyBhblxuKyAqIHVucG9pc29uIGNhbm5vdCB0ZWxsIHdoZXRoZXIgdGhlIHVuaXQgYXMgYSB3aG9sZSBpcyBnb29kIGFnYWluLlxuKyAqL1xuK3ZvaWQgZWZpX2h3cG9pc29uX3JlY29yZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pXG4re1xuK1x0c3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkgKnBtID0gZWZpX3BvaXNvbmVkX21lbW9yeSgpO1xuK1x0cGh5c19hZGRyX3QgYWRkciA9IFBGTl9QSFlTKHBmbik7XG4rXHR1NjQgdW5pdDtcbitcbitcdGlmICghcG0gfHwgYWRkciBcdTAwM2MgcG0tXHUwMDNlcGh5c19iYXNlKVxuK1x0XHRyZXR1cm47XG4rXG4rXHR1bml0ID0gKGFkZHIgLSBwbS1cdTAwM2VwaHlzX2Jhc2UpIC8gcG0tXHUwMDNldW5pdF9zaXplO1xuK1x0aWYgKHVuaXQgXHUwMDNjIHBtLVx1MDAzZXNpemUgKiBCSVRTX1BFUl9CWVRFKVxuK1x0XHRzZXRfYml0KHVuaXQsIHBtLVx1MDAzZWJpdG1hcCk7XG4rfVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWZpLmggYi9pbmNsdWRlL2xpbnV4L2VmaS5oXG5pbmRleCBjMzU0NDZhMGI2NmZhLi41NjQwMmZkY2NkMTE0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9lZmkuaFxuKysrIGIvaW5jbHVkZS9saW51eC9lZmkuaFxuQEAgLTIzLDYgKzIzLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wc3RvcmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JhbmdlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWJvb3QuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NpemVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91dWlkLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcGFnZS5oXHUwMDNlXG5AQCAtNDIyLDYgKzQyMyw3IEBAIHZvaWQgZWZpX25hdGl2ZV9ydW50aW1lX3NldHVwKHZvaWQpO1xuICNkZWZpbmUgTElOVVhfRUZJX0NPQ09fU0VDUkVUX0FSRUFfR1VJRFx0XHRFRklfR1VJRCgweGFkZjk1NmFkLCAweGU5OGMsIDB4NDg0YywgIDB4YWUsIDB4MTEsIDB4YjUsIDB4MWMsIDB4N2QsIDB4MzMsIDB4NjQsIDB4NDcpXG4gI2RlZmluZSBMSU5VWF9FRklfQk9PVF9NRU1NQVBfR1VJRFx0XHRFRklfR1VJRCgweDgwMGY2ODNmLCAweGQwOGIsIDB4NDIzYSwgIDB4YTIsIDB4OTMsIDB4OTYsIDB4NWMsIDB4M2MsIDB4NmYsIDB4ZTIsIDB4YjQpXG4gI2RlZmluZSBMSU5VWF9FRklfVU5BQ0NFUFRFRF9NRU1fVEFCTEVfR1VJRFx0RUZJX0dVSUQoMHhkNWQxZGUzYywgMHgxMDVjLCAweDQ0ZjksICAweDllLCAweGE5LCAweGJjLCAweGVmLCAweDk4LCAweDEyLCAweDAwLCAweDMxKVxuKyNkZWZpbmUgTElOVVhfRUZJX1BPSVNPTkVEX01FTU9SWV9UQUJMRV9HVUlEXHRFRklfR1VJRCgweGFmODI4YTE1LCAweDBlZjQsIDB4NDM5YSwgIDB4YjgsIDB4NmEsIDB4ZDYsIDB4ZDYsIDB4OWUsIDB4YWYsIDB4YmEsIDB4ZmEpXG4gXG4gI2RlZmluZSBSSVNDVl9FRklfQk9PVF9QUk9UT0NPTF9HVUlEXHRcdEVGSV9HVUlEKDB4Y2NkMTVmZWMsIDB4NmY3MywgMHg0ZWVjLCAgMHg4MywgMHg5NSwgMHgzZSwgMHg2OSwgMHhlNCwgMHhiOSwgMHg0MCwgMHhiZilcbiBcbkBAIC02NTAsNiArNjUyLDcgQEAgZXh0ZXJuIHN0cnVjdCBlZmkge1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRcdG1va3Zhcl90YWJsZTtcdFx0LyogTU9LIHZhcmlhYmxlIGNvbmZpZyB0YWJsZSAqL1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRcdGNvY29fc2VjcmV0O1x0XHQvKiBDb25maWRlbnRpYWwgY29tcHV0aW5nIHNlY3JldCB0YWJsZSAqL1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRcdHVuYWNjZXB0ZWQ7XHRcdC8qIFVuYWNjZXB0ZWQgbWVtb3J5IHRhYmxlICovXG4rXHR1bnNpZ25lZCBsb25nXHRcdFx0cG9pc29uZWRfbWVtb3J5O1x0LyogSGFyZHdhcmUtcG9pc29uZWQgbWVtb3J5IHRhYmxlICovXG4gXG4gXHRlZmlfZ2V0X3RpbWVfdFx0XHRcdCpnZXRfdGltZTtcbiBcdGVmaV9zZXRfdGltZV90XHRcdFx0KnNldF90aW1lO1xuQEAgLTEyNzIsNiArMTI3NSwyNSBAQCBzdHJ1Y3QgbGludXhfZWZpX21lbXJlc2VydmUge1xuICNkZWZpbmUgRUZJX01FTVJFU0VSVkVfQ09VTlQoc2l6ZSkgKCgoc2l6ZSkgLSBzaXplb2Yoc3RydWN0IGxpbnV4X2VmaV9tZW1yZXNlcnZlKSkgXFxcbiBcdC8gc2l6ZW9mX2ZpZWxkKHN0cnVjdCBsaW51eF9lZmlfbWVtcmVzZXJ2ZSwgZW50cnlbMF0pKVxuIFxuKy8qIEJpdCBOIGNvdmVycyB0aGUgdW5pdCBhdCBAcGh5c19iYXNlICsgTiAqIEB1bml0X3NpemUuICovXG4rc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnkge1xuK1x0dTMyXHRcdHZlcnNpb247XG4rXHR1MzJcdFx0dW5pdF9zaXplO1x0LyogYnl0ZXMgb2YgcGh5cyBzcGFjZSBwZXIgYml0bWFwIGJpdCAqL1xuK1x0dTY0XHRcdHBoeXNfYmFzZTtcdC8qIGFkZHJlc3MgdGhlIGZpcnN0IGJpdCBjb3ZlcnMgKi9cbitcdHU2NFx0XHRzaXplO1x0XHQvKiBiaXRtYXAgc2l6ZSBpbiBieXRlcyAqL1xuK1x0dW5zaWduZWQgbG9uZ1x0Yml0bWFwW107XG4rfTtcbitcbisjZGVmaW5lIEVGSV9QT0lTT05fVU5JVF9TSVpFXHRTWl8yTVxuK1xuKyNpZmRlZiBDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWVxuK3ZvaWQgX19pbml0IGVmaV9wb2lzb25lZF9tZW1vcnlfcmVzZXJ2ZSh2b2lkKTtcbit2b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKTtcbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBlZmlfcG9pc29uZWRfbWVtb3J5X3Jlc2VydmUodm9pZCkgeyB9XG4rc3RhdGljIGlubGluZSB2b2lkIGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHVuc2lnbmVkIGxvbmcgcGZuKSB7IH1cbisjZW5kaWZcbitcbiB2b2lkIF9faW5pdCBlZmlfYXJjaF9tZW1fcmVzZXJ2ZShwaHlzX2FkZHJfdCBhZGRyLCB1NjQgc2l6ZSk7XG4gXG4gLypcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcbmluZGV4IDI3NGZhODgwMDc3YzUuLjlkOWYyZThmZGMxMzYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW0uaFxuQEAgLTUyMjUsNiArNTIyNSw3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG1lbW9yeV9mYWlsdXJlX2F0dHJfZ3JvdXA7XG4gZXh0ZXJuIHZvaWQgbWVtb3J5X2ZhaWx1cmVfcXVldWUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncyk7XG4gdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfaW5jKHVuc2lnbmVkIGxvbmcgcGZuKTtcbiB2b2lkIG51bV9wb2lzb25lZF9wYWdlc19zdWIodW5zaWduZWQgbG9uZyBwZm4sIGxvbmcgaSk7XG4rdm9pZCBfX21lbWluaXQgaHdwb2lzb25fYm9vdF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTtcbiBwaHlzX2FkZHJfdCByYW5nZV9maXJzdF9od3BvaXNvbihwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKTtcbiBwaHlzX2FkZHJfdCByYW5nZV9sYXN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpO1xuICNlbHNlXG5AQCAtNTIzMiw2ICs1MjMzLDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1vcnlfZmFpbHVyZV9xdWV1ZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxuIHtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIGh3cG9pc29uX2Jvb3RfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbit7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBudW1fcG9pc29uZWRfcGFnZXNfaW5jKHVuc2lnbmVkIGxvbmcgcGZuKVxuIHtcbiB9XG5AQCAtNTM4Nyw2ICs1MzkyLDIwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwZm5faXNfdW5hY2NlcHRlZF9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4pXG4gXHRyZXR1cm4gcmFuZ2VfY29udGFpbnNfdW5hY2NlcHRlZF9tZW1vcnkocGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULCBQQUdFX1NJWkUpO1xuIH1cbiBcbisjaWZkZWYgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllcbitcbitib29sIHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeShwaHlzX2FkZHJfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKTtcbitcbisjZWxzZVxuK1xuK3N0YXRpYyBpbmxpbmUgYm9vbCByYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnkocGh5c19hZGRyX3Qgc3RhcnQsXG4rXHRcdFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIHNpemUpXG4re1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbisjZW5kaWZcbitcbiB2b2lkIHZtYV9wZ3RhYmxlX3dhbGtfYmVnaW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuIHZvaWQgdm1hX3BndGFibGVfd2Fsa19lbmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuIFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS1mYWlsdXJlLmMgYi9tbS9tZW1vcnktZmFpbHVyZS5jXG5pbmRleCBhMmNhOGRmNTAxY2FlLi5mNmFmZGIyYTg5YTk0IDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xuKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuQEAgLTQzLDYgKzQzLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3Rhc2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RheC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZWZpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rc20uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JtYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG5AQCAtMTM2LDYgKzEzNywyMSBAQCBwaHlzX2FkZHJfdCByYW5nZV9sYXN0X2h3cG9pc29uKHBoeXNfYWRkcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpXG4gXHRyZXR1cm4gcmFuZ2VfaHdwb2lzb24oc3RhcnQsIHNpemUsIGZhbHNlKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgdXBkYXRlX3Blcl9ub2RlX21mX3N0YXRzKHVuc2lnbmVkIGxvbmcgcGZuLCBlbnVtIG1mX3Jlc3VsdCByZXN1bHQpO1xuK1xuKy8qIE5vdCBudW1fcG9pc29uZWRfcGFnZXNfaW5jKCk6IGl0cyBwZXIgYmxvY2sgaGFsZiBkaXZpZGVzIGJ5IHplcm8gdGhpcyBlYXJseS4gKi9cbit2b2lkIF9fbWVtaW5pdCBod3BvaXNvbl9ib290X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4re1xuK1x0aWYgKFBhZ2VIV1BvaXNvbihwYWdlKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0U2V0UGFnZUhXUG9pc29uKHBhZ2UpO1xuK1x0c2V0X3BhZ2VfY291bnQocGFnZSwgMSk7XG4rXHQvKiBUaGUgcGFnZSBoYXMgYmVlbiBjb21wbGV0ZWx5IGlzb2xhdGVkID09IE1GX1JFQ09WRVJFRCAqL1xuK1x0dXBkYXRlX3Blcl9ub2RlX21mX3N0YXRzKHBhZ2VfdG9fcGZuKHBhZ2UpLCBNRl9SRUNPVkVSRUQpO1xuK1x0YXRvbWljX2xvbmdfaW5jKFx1MDAyNm51bV9wb2lzb25lZF9wYWdlcyk7XG4rfVxuK1xuIC8qKlxuICAqIE1GX0FUVFJfUk8gLSBDcmVhdGUgc3lzZnMgZW50cnkgZm9yIGVhY2ggbWVtb3J5IGZhaWx1cmUgc3RhdGlzdGljcy5cbiAgKiBAX25hbWU6IG5hbWUgb2YgdGhlIGZpbGUgaW4gdGhlIHBlciBOVU1BIHN5c2ZzIGRpcmVjdG9yeS5cbkBAIC0xMzI2LDYgKzEzNDIsOCBAQCBzdGF0aWMgaW50IGFjdGlvbl9yZXN1bHQodW5zaWduZWQgbG9uZyBwZm4sIGVudW0gbWZfYWN0aW9uX3BhZ2VfdHlwZSB0eXBlLFxuIFx0aWYgKHR5cGUgIT0gTUZfTVNHX0FMUkVBRFlfUE9JU09ORUQgXHUwMDI2XHUwMDI2IHR5cGUgIT0gTUZfTVNHX1BGTl9NQVApIHtcbiBcdFx0bnVtX3BvaXNvbmVkX3BhZ2VzX2luYyhwZm4pO1xuIFx0XHR1cGRhdGVfcGVyX25vZGVfbWZfc3RhdHMocGZuLCByZXN1bHQpO1xuK1x0XHQvKiBPbmx5IGhhcmQgb2ZmbGluZXMgYXJlIGNhcnJpZWQgb3ZlciB0byB0aGUgbmV4dCBrZXJuZWwuICovXG4rXHRcdGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKHBmbik7XG4gXHR9XG4gXG4gXHRwcl9lcnIoXCIlI2x4OiByZWNvdmVyeSBhY3Rpb24gZm9yICVzOiAlc1xcblwiLFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xuaW5kZXggNDA0ODk2YjUzMDAzZS4uOWUyY2U4MzNmZDQwOSAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xuKysrIGIvbW0vcGFnZV9hbGxvYy5jXG5AQCAtMTU3OSw2ICsxNTc5LDE5IEBAIHN0YXRpYyB2b2lkIF9fZnJlZV9wYWdlc19vayhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0XHRmcmVlX29uZV9wYWdlKHpvbmUsIHBhZ2UsIHBmbiwgb3JkZXIsIGZwaV9mbGFncyk7XG4gfVxuIFxuKy8qIEZsYWcgdGhlIGZyYW1lcyBhbiBlYXJsaWVyIGtlcm5lbCByZWNvcmRlZCBhcyBiYWQuICovXG4rc3RhdGljIHZvaWQgX19tZW1pbml0IHBvaXNvbl9ibG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgaSwgbnJfcGFnZXMgPSAxVUwgXHUwMDNjXHUwMDNjIG9yZGVyO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcGFnZXM7IGkrKykge1xuK1x0XHRzdHJ1Y3QgcGFnZSAqcCA9IHBhZ2UgKyBpO1xuK1xuK1x0XHRpZiAocmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5KHBhZ2VfdG9fcGh5cyhwKSwgUEFHRV9TSVpFKSlcbitcdFx0XHRod3BvaXNvbl9ib290X3BhZ2UocCk7XG4rXHR9XG4rfVxuK1xuIHZvaWQgX19tZW1pbml0IF9fZnJlZV9wYWdlc19jb3JlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4gXHRcdGVudW0gbWVtaW5pdF9jb250ZXh0IGNvbnRleHQpXG4ge1xuQEAgLTE2MTMsNiArMTYyNiwxOCBAQCB2b2lkIF9fbWVtaW5pdCBfX2ZyZWVfcGFnZXNfY29yZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0XHRhdG9taWNfbG9uZ19hZGQobnJfcGFnZXMsIFx1MDAyNnBhZ2Vfem9uZShwYWdlKS1cdTAwM2VtYW5hZ2VkX3BhZ2VzKTtcbiBcdH1cbiBcbitcdC8qIEZpcnN0OiBhIGJsb2NrIHBhcmtlZCBieSBfX2ZyZWVfdW5hY2NlcHRlZCgpIG5ldmVyIHJldHVybnMgaGVyZS4gKi9cbitcdGlmIChyYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnkocGFnZV90b19waHlzKHBhZ2UpLFxuK1x0XHRcdFx0XHQgICBQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIG9yZGVyKSkge1xuK1x0XHRwb2lzb25fYmxvY2socGFnZSwgb3JkZXIpO1xuK1x0XHQvKlxuK1x0XHQgKiBUT0RPOiBmcmVlIHRoZSBmcmFtZXMgaW4gdGhlIGJsb2NrIHRoYXQgYXJlIG5vdCBwb2lzb25lZC5cbitcdFx0ICogVGhleSBzdGF5IG91dCBvZiB0aGUgYWxsb2NhdG9yIGFuZCBzdGlsbCBjb3VudCBpblxuK1x0XHQgKiBtYW5hZ2VkX3BhZ2VzLCBzbyBhIHVuaXQgY29zdHMgdXAgdG8gYSBibG9jay5cbitcdFx0ICovXG4rXHRcdHJldHVybjtcbitcdH1cbitcbiBcdGlmIChwYWdlX2NvbnRhaW5zX3VuYWNjZXB0ZWQocGFnZSwgb3JkZXIpKSB7XG4gXHRcdGlmIChvcmRlciA9PSBNQVhfUEFHRV9PUkRFUiBcdTAwMjZcdTAwMjYgX19mcmVlX3VuYWNjZXB0ZWQocGFnZSkpXG4gXHRcdFx0cmV0dXJuO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTQ6MTA6MTAuMTQ3MDUyMDM2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEzNDIxOTMyOTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBBc3Nlc3NtZW50OiBFRkkgUG9pc29uZWQgTWVtb3J5IFRhYmxlIE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUgaWYgaXQganVzdGlmaWVzIGEgS01TQU4gZnV6emluZyBydW4uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBsZWFuaW5nIHRvd2FyZHMgYSBcIm5vLFwiIGJ1dCB3ZSBuZWVkIHRvIGJlIHRob3JvdWdoLlxuXG5GaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGZ1bmRhbWVudGFsbHkgZG9lcy4gSXQgaW50cm9kdWNlcyBgQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUllgIGFuZCwgY3JpdGljYWxseSwgYSBtZWNoYW5pc20gZm9yIG1hbmFnaW5nIGEgXCJwb2lzb25lZCBtZW1vcnlcIiB0YWJsZSB3aXRoaW4gdGhlIEVGSSBlbnZpcm9ubWVudC4gVGhpcyB0YWJsZSBzZWVtcyB0byB0cmFjayByZWdpb25zIG9mIFJBTSB0aGF0IGFyZSBjb25zaWRlcmVkIFwicG9pc29uZWRcIiDigJMgbGlrZWx5IG1hcmtlZCBmb3IgbWVtb3J5IGZhaWx1cmUgaW5qZWN0aW9uLlxuXG5UaGUgY29yZSBvZiB0aGUgbG9naWMgaW52b2x2ZXMgYWxsb2NhdGluZyBhIGBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeWAgc3RydWN0dXJlLiBUaGlzIGFsbG9jYXRpb24gaGFwcGVucyB2aWEgRUZJIGJvb3Qgc2VydmljZXMgKGBhbGxvY2F0ZV9wb29sYCkuIEltcG9ydGFudGx5LCB0aGUgYWxsb2NhdGVkIGJpdG1hcCBpcyBpbW1lZGlhdGVseSB6ZXJvZWQgdmlhIGBtZW1zZXRgLiBUaGlzIGlzIGtleS4gVGhlIGNvZGUgdGhlbiBpbml0aWFsaXplcyB0aGUgc3RydWN0dXJlJ3MgZmllbGRzOiBgdmVyc2lvbmAsIGB1bml0X3NpemVgLCBgcGh5c19iYXNlYCwgYHNpemVgIOKAkyBhbGwgZXhwbGljaXRseSBhc3NpZ25lZC4gVGhpcyB0YWJsZSBpcyB0aGVuIGluc3RhbGxlZCBhcyBhIGNvbmZpZyB0YWJsZS5cblxuRHVyaW5nIGtlcm5lbCBib290LCB0aGUgY29kZSBwYXJzZXMgdGhlIEVGSSBjb25maWcgdGFibGVzIGFuZCBjYWxscyBgZWZpX3BvaXNvbmVkX21lbW9yeV9yZXNlcnZlKClgIHRvIHZhbGlkYXRlLCBtYXAgYW5kIHJlc2VydmUgdGhlIGRlc2NyaWJlZCBtZW1vcnkgdXNpbmcgYG1lbWJsb2NrX3Jlc2VydmUoKWAuIFRoZSBjcml0aWNhbCBiaXQgaXMgdGhhdCBkdXJpbmcgcGFnZSBmcmVlaW5nLCBgX19mcmVlX3BhZ2VzX2NvcmVgLCBpZiBhIHBhZ2UgZmFsbHMgd2l0aGluIHRoZSBkZWZpbmVkIFwicG9pc29uZWRcIiByZWdpb24sIGEgYGh3cG9pc29uYCBmbGFnIGlzIHNldCB1c2luZyBgaHdwb2lzb25fYm9vdF9wYWdlKClgLiAgTGF0ZXIsIGluIHRoZSBldmVudCBvZiBhIG1lbW9yeSBmYWlsdXJlLCB0aGUgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuKClgIGZ1bmN0aW9uIHVwZGF0ZXMgdGhlIGJpdG1hcCB0byByZWNvcmQgdGhlIHBvaXNvbmVkIHBhZ2UuIFRoaXMgYml0bWFwIGlzIHRoZW4gY2hlY2tlZCBsYXRlciB1c2luZyBgcmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5KClgLlxuXG5Ob3csIHRoZSBtYWluIGNvbmNlcm4gZm9yIEtNU0FOIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBEb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIG5ldyBwYXRod2F5cyBmb3IgdW5pbml0aWFsaXplZCBkYXRhIHRvIGxlYWsgb3IgYmUgdXNlZD9cblxuMS4gICoqVXNlci1zcGFjZSBleHBvc3VyZT8qKiBObywgdGhlcmUgYXJlIG5vIHVzZXItc3BhY2UgY29waWVzLCBzeXNmcyBlbnRyaWVzLCBvciBpb2N0bHMgaW50cm9kdWNlZC5cbjIuICAqKkluaXRpYWxpemF0aW9uPyoqIFRoZSBjb2RlIGRvZXMgc2VlbSBtZXRpY3Vsb3VzbHkgaW5pdGlhbGl6ZWQuIGBtZW1zZXRgIG9uIHRoZSBiaXRtYXAsIGFuZCBleHBsaWNpdCBmaWVsZCBhc3NpZ25tZW50cyB3aXRoaW4gdGhlIHN0cnVjdC4gVGhlIGZ1bmN0aW9ucyBsaWtlIGBlZmlfZ2V0X3JhbV9yYW5nZWAsIGByYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnlgIGFsbCBhcHBlYXIgdG8gaGFuZGxlIHRoZWlyIGludGVybmFsIHN0YXRlIGNvcnJlY3RseS5cbjMuICAqKkNvbnRyb2wgZmxvdyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGE/KiogIE5vLCB0aGlzIGFwcGVhcnMgdG8gYmUganVzdCBoYXJkd2FyZSBwb2lzb24gdHJhY2tpbmcgYWNyb3NzIGtleGVjIC8gRUZJIGJvb3QuIFRoZSBiaXRtYXAgYW5kIHN0YXRlIHZhcmlhYmxlcyBhcmUgYWxsIGluaXRpYWxpemVkLlxuNC4gICoqS01TQU4gU3BlY2lmaWMgQ29uY2VybnM/KiogS01TQU7igJlzIHByaW1hcnkgZm9jdXMgaXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgKHN0YWNrLCBoZWFwLCBwYWdlcykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBsZWFrcy4gIFRoaXMgcGF0Y2ggKmRvZXNuJ3QqIGFwcGVhciB0byBoYXZlIGFueS4gRXZlcnl0aGluZyByZXZvbHZlcyBhcm91bmQgZWFybHkgYm9vdCBtZW1vcnkgcmVzZXJ2YXRpb24vdGFibGUgY3JlYXRpb24vYml0IHNldHRpbmcgYW5kIGNoZWNraW5nIGluIHRoZSBpbml0aWFsaXplZCBiaXRtYXAuIEFueSBwb3RlbnRpYWwgZXJyb3JzIGhlcmUgd291bGQgYmUgYWRkcmVzcyB0cmFuc2xhdGlvbiBlcnJvcnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvciBpbmNvcnJlY3QgbWVtb3J5IHJlc2VydmF0aW9uLiBUaGVzZSBhcmUgdGhpbmdzIHRoYXQgYXJlIGhhbmRsZWQgYnkgS0FTQU4gb3IgbW9yZSBzdGFuZGFyZCB2ZXJpZmljYXRpb24gdGVjaG5pcXVlcy5cblxuTGV0J3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2sgb2YgYWxsIGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzLlxuXG4qICAgYGVmaV9nZXRfcmFtX3JhbmdlYDogSW5pdGlhbGl6ZXMgYW5kIHJldHVybnMsIHRoZSB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkLlxuKiAgIGBlZmlfcG9pc29uX2JpdG1hcF9zaXplYDogQSBwdXJlIGNhbGN1bGF0aW9uLlxuKiAgIGBlZmlfcG9pc29uX2FsbG9jYDogQWxsb2NhdGVzIGFuZCBjb3JyZWN0bHkgaW5pdGlhbGl6ZXMgdGhlIGJpdG1hcC5cbiogICBgaW5zdGFsbF9wb2lzb25lZF9tZW1vcnlfdGFibGVgOiBJbml0aWFsaXplcyBsb2NhbHMgb3IgY2hlY2tzIHN0YXR1c2VzLlxuKiAgIGBlZmlfcG9pc29uX2dlb21ldHJ5X3ZhbGlkYCwgYGVmaV9wb2lzb25fdGFibGVfdmFsaWRgOiBWYWxpZGF0aW9uIG9uIHRoZSB0YWJsZSBmaWVsZHMuXG4qICAgYGVmaV9wb2lzb25lZF9tZW1vcnlfcmVzZXJ2ZWA6IEluY2x1ZGVzIGVhcmx5IG1lbXJlbWFwLCB2YWxpZGF0aW9uLCBhbmQgbWVtYmxvY2suXG4qICAgYGVmaV9wb2lzb25lZF9tZW1vcnlgOiBSZXR1cm5zIGEgcG9pbnRlci5cbiogICBgcmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5YDogQm91bmRhcnkgY2hlY2tzIGFuZCBgZmluZF9uZXh0X2JpdGAgY2FsbHMuXG4qICAgYGVmaV9od3BvaXNvbl9yZWNvcmRfcGZuYDogSW5jbHVkZXMgYm91bmRhcnkgY2hlY2tzIGFuZCBgc2V0X2JpdGAgY2FsbHMuXG4qICAgYGh3cG9pc29uX2Jvb3RfcGFnZWA6IE9wZXJhdGVzIG9uIGBzdHJ1Y3QgcGFnZWAsIHdpdGggc2V0XFxfcGFnZVxcX2NvdW50LCBhdG9taWNcXF9sb25nXFxfaW5jLCBldGMuXG4qICAgYHBvaXNvbl9ibG9ja2A6IEl0ZXJhdGVzIG92ZXIgdGhlIHBhZ2VzIGFuZCBjYWxscyBgcmFuZ2VfY29udGFpbnNfcG9pc29uZWRfbWVtb3J5YCBhbmQgYGh3cG9pc29uX2Jvb3RfcGFnZWAuXG5cbk9rYXksIHRoZSBjb25jbHVzaW9uIHJlbWFpbnM6ICoqTmVlZHNLTVNBTiA9IGZhbHNlLioqXG5cbkhlcmXigJlzIHRoZSBkaXN0aWxsZWQgcmVhc29uaW5nLCBjbGVhcmx5IGNvbnRyYXN0aW5nIEtNU0FOIGFuZCBLQVNBTjpcblxuKiAgIEtNU0FOIGlzIGxvb2tpbmcgZm9yICp1bmluaXRpYWxpemVkKiBtZW1vcnkgcmVhZHMvbGVha3MuXG4qICAgVGhpcyBwYXRjaCBleHBsaWNpdGx5IGluaXRpYWxpemVzIHRoZSBtZW1vcnkgdGFibGUgYW5kIHRoZSBiaXRtYXAgd2l0aCBgbWVtc2V0YC4gRXZlcnkgc3RydWN0IGZpZWxkIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuXG4qICAgVGhlIHJ1bnRpbWUgZnVuY3Rpb25zIG9ubHkgcmVhZCBhbmQgbW9kaWZ5IGluaXRpYWxpemVkIGRhdGEuXG4qICAgVGhlcmUncyBubyBpbnRyb2R1Y3Rpb24gb2YgbmV3IHVzZXItc3BhY2UgY29waWVzIG9yIHVuaW5pdGlhbGl6ZWQgY29uZGl0aW9uYWwgbG9naWMuXG4qICAgQW55IGJ1Z3Mgd291bGQgcmVsYXRlIHRvIGFkZHJlc3NcblxuIiwiSW5wdXRUb2tlbnMiOjk0MTEsIk91dHB1dFRva2VucyI6MjU5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI5NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE0OjEwOjIzLjU2ODk4ODE3MloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3OTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgRUZJIHBvaXNvbmVkIG1lbW9yeSB0cmFja2luZyAoQ09ORklHX0VGSV9QT0lTT05FRF9NRU1PUlkpIHRvIHByZXNlcnZlIGhhcmR3YXJlLXBvaXNvbmVkIHBhZ2UgaW5mb3JtYXRpb24gYWNyb3NzIGtleGVjIHJlYm9vdHMuIFxcblxcbjEuIEFsbG9jYXRpb24gXFx1MDAyNiBJbml0aWFsaXphdGlvbjogVGhlIHRhYmxlIHN0cnVjdHVyZSBgc3RydWN0IGxpbnV4X2VmaV9wb2lzb25lZF9tZW1vcnlgIGFuZCBpdHMgdHJhaWxpbmcgYml0bWFwIGFyZSBhbGxvY2F0ZWQgaW4gdGhlIEVGSSBzdHViIGFuZCBleHBsaWNpdGx5IGZ1bGx5IGluaXRpYWxpemVkIChhbGwgaGVhZGVyIGZpZWxkcyBhc3NpZ25lZCwgYW5kIGBtZW1zZXQocG0tXFx1MDAzZWJpdG1hcCwgMCwgYml0bWFwX3NpemUpYCBjbGVhcnMgdGhlIGJpdG1hcCkuXFxuMi4gTWVtb3J5IEFjY2Vzc2VzOiBSdW50aW1lIG9wZXJhdGlvbnMgKGByYW5nZV9jb250YWluc19wb2lzb25lZF9tZW1vcnlgLCBgZWZpX2h3cG9pc29uX3JlY29yZF9wZm5gLCBgcG9pc29uX2Jsb2NrYCwgYW5kIGBod3BvaXNvbl9ib290X3BhZ2VgKSBvbmx5IHJlYWQgYW5kIHVwZGF0ZSBmdWxseSBpbml0aWFsaXplZCBtZW1vcnkgc3RydWN0dXJlcyBhbmQgc3RydWN0IHBhZ2UgZmxhZ3MuXFxuMy4gTm8gVW5pbml0aWFsaXplZCBMZWFrcyBvciBSZWFkczogVGhlcmUgYXJlIG5vIGRhdGEgdHJhbnNmZXJzIHRvIHVzZXIgc3BhY2UsIG5vIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgbm8gZXhwb3NlZCBwYWRkaW5nLlxcbjQuIEtBU0FOIHZzIEtNU0FOOiBQb3RlbnRpYWwgcmlza3Mgc3VjaCBhcyBpbnZhbGlkIHBvaW50ZXIgbWF0aCwgb3V0LW9mLWJvdW5kcyBiaXRtYXAgYWNjZXNzZXMsIG9yIG1lbW9yeSByZXNlcnZhdGlvbiBlcnJvcnMgYXJlIHByb3Blcmx5IGhhbmRsZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIEtNU0FOIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBFRkkgcG9pc29uZWQgbWVtb3J5IHRyYWNraW5nIChDT05GSUdfRUZJX1BPSVNPTkVEX01FTU9SWSkgdG8gcHJlc2VydmUgaGFyZHdhcmUtcG9pc29uZWQgcGFnZSBpbmZvcm1hdGlvbiBhY3Jvc3Mga2V4ZWMgcmVib290cy4gXFxuXFxuMS4gQWxsb2NhdGlvbiBcXHUwMDI2IEluaXRpYWxpemF0aW9uOiBUaGUgdGFibGUgc3RydWN0dXJlIGBzdHJ1Y3QgbGludXhfZWZpX3BvaXNvbmVkX21lbW9yeWAgYW5kIGl0cyB0cmFpbGluZyBiaXRtYXAgYXJlIGFsbG9jYXRlZCBpbiB0aGUgRUZJIHN0dWIgYW5kIGV4cGxpY2l0bHkgZnVsbHkgaW5pdGlhbGl6ZWQgKGFsbCBoZWFkZXIgZmllbGRzIGFzc2lnbmVkLCBhbmQgYG1lbXNldChwbS1cXHUwMDNlYml0bWFwLCAwLCBiaXRtYXBfc2l6ZSlgIGNsZWFycyB0aGUgYml0bWFwKS5cXG4yLiBNZW1vcnkgQWNjZXNzZXM6IFJ1bnRpbWUgb3BlcmF0aW9ucyAoYHJhbmdlX2NvbnRhaW5zX3BvaXNvbmVkX21lbW9yeWAsIGBlZmlfaHdwb2lzb25fcmVjb3JkX3BmbmAsIGBwb2lzb25fYmxvY2tgLCBhbmQgYGh3cG9pc29uX2Jvb3RfcGFnZWApIG9ubHkgcmVhZCBhbmQgdXBkYXRlIGZ1bGx5IGluaXRpYWxpemVkIG1lbW9yeSBzdHJ1Y3R1cmVzIGFuZCBzdHJ1Y3QgcGFnZSBmbGFncy5cXG4zLiBObyBVbmluaXRpYWxpemVkIExlYWtzIG9yIFJlYWRzOiBUaGVyZSBhcmUgbm8gZGF0YSB0cmFuc2ZlcnMgdG8gdXNlciBzcGFjZSwgbm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBubyBleHBvc2VkIHBhZGRpbmcuXFxuNC4gS0FTQU4gdnMgS01TQU46IFBvdGVudGlhbCByaXNrcyBzdWNoIGFzIGludmFsaWQgcG9pbnRlciBtYXRoLCBvdXQtb2YtYm91bmRzIGJpdG1hcCBhY2Nlc3Nlcywgb3IgbWVtb3J5IHJlc2VydmF0aW9uIGVycm9ycyBhcmUgcHJvcGVybHkgaGFuZGxlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowj5cp4[1] Phase: Succeeded StartedAt: 2026-09-09 14:10:35 +0000 UTC FinishedAt: 2026-09-09 14:10:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj5cp4[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-09 14:10:35 +0000 UTC FinishedAt: 2026-09-09 14:10:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj5cp4[2] Phase: Succeeded StartedAt: 2026-09-09 14:10:35 +0000 UTC FinishedAt: 2026-09-09 17:51:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj5cp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"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":["efi_hwpoison_record_pfn","range_contains_poisoned_memory","hwpoison_boot_page","memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"series_id":"78467678-9406-49b6-8091-e91cf164230c","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-09 14:10:35 +0000 UTC FinishedAt: 2026-09-09 17:51:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"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":["efi_hwpoison_record_pfn","range_contains_poisoned_memory","hwpoison_boot_page","memory_failure"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"series_id":"78467678-9406-49b6-8091-e91cf164230c","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-workflowj5cp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"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":["efi_hwpoison_record_pfn","range_contains_poisoned_memory","hwpoison_boot_page","memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"series_id":"78467678-9406-49b6-8091-e91cf164230c","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-09 14:10:35 +0000 UTC FinishedAt: 2026-09-09 14:10:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj5cp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"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":["efi_hwpoison_record_pfn","range_contains_poisoned_memory","hwpoison_boot_page","memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"series_id":"78467678-9406-49b6-8091-e91cf164230c","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-09 14:10:35 +0000 UTC FinishedAt: 2026-09-09 14:10:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"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-workflowj5cp4/series-workflowj5cp4-convert-artifact-2667231553/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj5cp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"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":["efi_hwpoison_record_pfn","range_contains_poisoned_memory","hwpoison_boot_page","memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"series_id":"78467678-9406-49b6-8091-e91cf164230c","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-09 14:10:45 +0000 UTC FinishedAt: 2026-09-09 14:28:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj5cp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"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":["efi_hwpoison_record_pfn","range_contains_poisoned_memory","hwpoison_boot_page","memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"series_id":"78467678-9406-49b6-8091-e91cf164230c","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-09 14:10:45 +0000 UTC FinishedAt: 2026-09-09 14:28:08 +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:*cbd3f235-6398-49be-914e-3f0dc23f400a,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-workflowj5cp4/series-workflowj5cp4-convert-artifact-2667231553/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": "3299a745-ccf2-4972-8fc4-d3c03282972d", "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-workflowj5cp4/series-workflowj5cp4-build-action-1493688175/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj5cp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"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":["efi_hwpoison_record_pfn","range_contains_poisoned_memory","hwpoison_boot_page","memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"series_id":"78467678-9406-49b6-8091-e91cf164230c","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-09 14:10:45 +0000 UTC FinishedAt: 2026-09-09 14:27:58 +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:*cbd3f235-6398-49be-914e-3f0dc23f400a,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-workflowj5cp4/series-workflowj5cp4-convert-artifact-2667231553/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": "3299a745-ccf2-4972-8fc4-d3c03282972d", "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-workflowj5cp4/series-workflowj5cp4-build-action-1493688175/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj5cp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"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":["efi_hwpoison_record_pfn","range_contains_poisoned_memory","hwpoison_boot_page","memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"series_id":"78467678-9406-49b6-8091-e91cf164230c","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-09 14:28:08 +0000 UTC FinishedAt: 2026-09-09 14:28:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj5cp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"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":["efi_hwpoison_record_pfn","range_contains_poisoned_memory","hwpoison_boot_page","memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"series_id":"78467678-9406-49b6-8091-e91cf164230c","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-09 14:28:08 +0000 UTC FinishedAt: 2026-09-09 14:28:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj5cp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"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":["efi_hwpoison_record_pfn","range_contains_poisoned_memory","hwpoison_boot_page","memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"series_id":"78467678-9406-49b6-8091-e91cf164230c","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-09 14:28:08 +0000 UTC FinishedAt: 2026-09-09 14:28:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj5cp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"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":["efi_hwpoison_record_pfn","range_contains_poisoned_memory","hwpoison_boot_page","memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"series_id":"78467678-9406-49b6-8091-e91cf164230c","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-09 14:28:08 +0000 UTC FinishedAt: 2026-09-09 14:28:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"series_id":"78467678-9406-49b6-8091-e91cf164230c","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-workflowj5cp4/series-workflowj5cp4-convert-artifact-370535188/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj5cp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"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":["efi_hwpoison_record_pfn","range_contains_poisoned_memory","hwpoison_boot_page","memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"series_id":"78467678-9406-49b6-8091-e91cf164230c","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-09 14:28:18 +0000 UTC FinishedAt: 2026-09-09 14:30:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj5cp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"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":["efi_hwpoison_record_pfn","range_contains_poisoned_memory","hwpoison_boot_page","memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"series_id":"78467678-9406-49b6-8091-e91cf164230c","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-09 14:28:18 +0000 UTC FinishedAt: 2026-09-09 14:30:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3299a745-ccf2-4972-8fc4-d3c03282972d,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-workflowj5cp4/series-workflowj5cp4-build-action-1493688175/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-workflowj5cp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"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":["efi_hwpoison_record_pfn","range_contains_poisoned_memory","hwpoison_boot_page","memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"series_id":"78467678-9406-49b6-8091-e91cf164230c","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-09 14:30:27 +0000 UTC FinishedAt: 2026-09-09 14:30:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj5cp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"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":["efi_hwpoison_record_pfn","range_contains_poisoned_memory","hwpoison_boot_page","memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"series_id":"78467678-9406-49b6-8091-e91cf164230c","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-09 14:30:27 +0000 UTC FinishedAt: 2026-09-09 14:30:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj5cp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"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":["efi_hwpoison_record_pfn","range_contains_poisoned_memory","hwpoison_boot_page","memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"series_id":"78467678-9406-49b6-8091-e91cf164230c","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-09 14:30:27 +0000 UTC FinishedAt: 2026-09-09 14:47:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj5cp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"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":["efi_hwpoison_record_pfn","range_contains_poisoned_memory","hwpoison_boot_page","memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"series_id":"78467678-9406-49b6-8091-e91cf164230c","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-09 14:30:27 +0000 UTC FinishedAt: 2026-09-09 14:47:17 +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:*cbd3f235-6398-49be-914e-3f0dc23f400a,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-workflowj5cp4/series-workflowj5cp4-convert-artifact-370535188/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": "dcf6d44e-c714-4dfa-bac5-92c5b4c1d053", "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-workflowj5cp4/series-workflowj5cp4-build-action-2338214880/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj5cp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"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":["efi_hwpoison_record_pfn","range_contains_poisoned_memory","hwpoison_boot_page","memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"series_id":"78467678-9406-49b6-8091-e91cf164230c","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-09 14:30:27 +0000 UTC FinishedAt: 2026-09-09 14:47:07 +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:*cbd3f235-6398-49be-914e-3f0dc23f400a,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-workflowj5cp4/series-workflowj5cp4-convert-artifact-370535188/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": "dcf6d44e-c714-4dfa-bac5-92c5b4c1d053", "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-workflowj5cp4/series-workflowj5cp4-build-action-2338214880/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj5cp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"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":["efi_hwpoison_record_pfn","range_contains_poisoned_memory","hwpoison_boot_page","memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"series_id":"78467678-9406-49b6-8091-e91cf164230c","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-09 14:47:17 +0000 UTC FinishedAt: 2026-09-09 14:47:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj5cp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"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":["efi_hwpoison_record_pfn","range_contains_poisoned_memory","hwpoison_boot_page","memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"series_id":"78467678-9406-49b6-8091-e91cf164230c","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-09 14:47:17 +0000 UTC FinishedAt: 2026-09-09 14:47:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj5cp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"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":["efi_hwpoison_record_pfn","range_contains_poisoned_memory","hwpoison_boot_page","memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"series_id":"78467678-9406-49b6-8091-e91cf164230c","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-09 14:47:17 +0000 UTC FinishedAt: 2026-09-09 14:49:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj5cp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"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":["efi_hwpoison_record_pfn","range_contains_poisoned_memory","hwpoison_boot_page","memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"series_id":"78467678-9406-49b6-8091-e91cf164230c","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-09 14:47:17 +0000 UTC FinishedAt: 2026-09-09 14:49:20 +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:*dcf6d44e-c714-4dfa-bac5-92c5b4c1d053,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-workflowj5cp4/series-workflowj5cp4-build-action-2338214880/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-workflowj5cp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"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":["efi_hwpoison_record_pfn","range_contains_poisoned_memory","hwpoison_boot_page","memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"series_id":"78467678-9406-49b6-8091-e91cf164230c","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-09 14:49:30 +0000 UTC FinishedAt: 2026-09-09 17:51:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj5cp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"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":["efi_hwpoison_record_pfn","range_contains_poisoned_memory","hwpoison_boot_page","memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"series_id":"78467678-9406-49b6-8091-e91cf164230c","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-09 14:49:30 +0000 UTC FinishedAt: 2026-09-09 17:51:48 +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":["efi_hwpoison_record_pfn","range_contains_poisoned_memory","hwpoison_boot_page","memory_failure"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*3299a745-ccf2-4972-8fc4-d3c03282972d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*dcf6d44e-c714-4dfa-bac5-92c5b4c1d053,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-workflowj5cp4/series-workflowj5cp4-build-action-1493688175/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-workflowj5cp4/series-workflowj5cp4-build-action-2338214880/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowj5cp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"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":["efi_hwpoison_record_pfn","range_contains_poisoned_memory","hwpoison_boot_page","memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"series_id":"78467678-9406-49b6-8091-e91cf164230c","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-09 14:49:30 +0000 UTC FinishedAt: 2026-09-09 14:49:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj5cp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"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":["efi_hwpoison_record_pfn","range_contains_poisoned_memory","hwpoison_boot_page","memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"series_id":"78467678-9406-49b6-8091-e91cf164230c","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-09 14:49:30 +0000 UTC FinishedAt: 2026-09-09 14:49:35 +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":["efi_hwpoison_record_pfn","range_contains_poisoned_memory","hwpoison_boot_page","memory_failure"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowj5cp4/series-workflowj5cp4-convert-artifact-1644853053/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowj5cp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"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":["efi_hwpoison_record_pfn","range_contains_poisoned_memory","hwpoison_boot_page","memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"series_id":"78467678-9406-49b6-8091-e91cf164230c","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-09 14:49:30 +0000 UTC FinishedAt: 2026-09-09 14:49:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj5cp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"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":["efi_hwpoison_record_pfn","range_contains_poisoned_memory","hwpoison_boot_page","memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"series_id":"78467678-9406-49b6-8091-e91cf164230c","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-09 14:49:30 +0000 UTC FinishedAt: 2026-09-09 14:49:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj5cp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"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":["efi_hwpoison_record_pfn","range_contains_poisoned_memory","hwpoison_boot_page","memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"series_id":"78467678-9406-49b6-8091-e91cf164230c","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-09 14:49:30 +0000 UTC FinishedAt: 2026-09-09 14:49:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj5cp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"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":["efi_hwpoison_record_pfn","range_contains_poisoned_memory","hwpoison_boot_page","memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"series_id":"78467678-9406-49b6-8091-e91cf164230c","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-09 14:49:40 +0000 UTC FinishedAt: 2026-09-09 17:51:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowj5cp4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"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":["efi_hwpoison_record_pfn","range_contains_poisoned_memory","hwpoison_boot_page","memory_failure"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["EFI_POISONED_MEMORY","MEMORY_FAILURE","EFI_STUB","EFI"],"series_id":"78467678-9406-49b6-8091-e91cf164230c","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-09 14:49:40 +0000 UTC FinishedAt: 2026-09-09 17:51:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3299a745-ccf2-4972-8fc4-d3c03282972d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*dcf6d44e-c714-4dfa-bac5-92c5b4c1d053,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-workflowj5cp4/series-workflowj5cp4-build-action-1493688175/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-workflowj5cp4/series-workflowj5cp4-build-action-2338214880/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-workflowj5cp4/series-workflowj5cp4-convert-artifact-1644853053/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,}