Name: series-workflowzp6pw Phase: Succeeded StartedAt: 2026-07-15 23:44:26 +0000 UTC FinishedAt: 2026-07-16 04:59:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzp6pw[0] Phase: Succeeded StartedAt: 2026-07-15 23:44:26 +0000 UTC FinishedAt: 2026-07-16 00:10:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzp6pw[0].run-triage Phase: Succeeded StartedAt: 2026-07-15 23:44:26 +0000 UTC FinishedAt: 2026-07-16 00:10:58 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "8db84a07071480e0886b12f189c513b93eb65c0a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TEST_HMM", "DRM_ACCEL_AMDXDNA", "DRM_GPUSVM", "DRM_NOUVEAU_SVM", "MSHV_ROOT", "INFINIBAND_ON_DEMAND_PAGING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "8db84a07071480e0886b12f189c513b93eb65c0a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TEST_HMM", "DRM_ACCEL_AMDXDNA", "DRM_GPUSVM", "DRM_NOUVEAU_SVM", "MSHV_ROOT", "INFINIBAND_ON_DEMAND_PAGING" ], "series_id": "b9d06a23-bd20-413d-8027-e6bf653d3955" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "hmm_range_fault_unlocked_timeout", "hmm_range_fault", "hmm_do_fault", "hmm_range_fault_locked", "hmm_record_fault", "dmirror_range_fault_unlocked", "dmirror_fault_unlocked", "dmirror_read_unlocked" ], "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+CgkJCTx0ZD4yMDI2LzA3LzE2IDAwOjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RFU1RfSE1NJiMzNDssCiAgICAmIzM0O0RSTV9BQ0NFTF9BTURYRE5BJiMzNDssCiAgICAmIzM0O0RSTV9HUFVTVk0mIzM0OywKICAgICYjMzQ7RFJNX05PVVZFQVVfU1ZNJiMzNDssCiAgICAmIzM0O01TSFZfUk9PVCYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EX09OX0RFTUFORF9QQUdJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCYjMzQ7LAogICAgJiMzNDtobW1fcmFuZ2VfZmF1bHQmIzM0OywKICAgICYjMzQ7aG1tX2RvX2ZhdWx0JiMzNDssCiAgICAmIzM0O2htbV9yYW5nZV9mYXVsdF9sb2NrZWQmIzM0OywKICAgICYjMzQ7aG1tX3JlY29yZF9mYXVsdCYjMzQ7LAogICAgJiMzNDtkbWlycm9yX3JhbmdlX2ZhdWx0X3VubG9ja2VkJiMzNDssCiAgICAmIzM0O2RtaXJyb3JfZmF1bHRfdW5sb2NrZWQmIzM0OywKICAgICYjMzQ7ZG1pcnJvcl9yZWFkX3VubG9ja2VkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgdW5sb2NrZWQgdGltZW91dCB2YXJpYW50IGZvciBITU0gcmFuZ2UgZmF1bHRzIChgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgKSBhbmQgcmVmYWN0b3JzIHRoZSBleGlzdGluZyBgaG1tX3JhbmdlX2ZhdWx0YCB0byB1c2UgYSBsb2NrZWQgaGVscGVyLiBJdCBhbHNvIHVwZGF0ZXMgc2V2ZXJhbCBkcml2ZXJzIGFuZCB0aGUgSE1NIHRlc3QgbW9kdWxlIHRvIHVzZSB0aGUgbmV3IHVubG9ja2VkIHZhcmlhbnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkZXZpY2UgZHJpdmVyIGludGVyYWN0aW9uLCB3aGljaCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IHJldHJ5IGFuZCBsb2NraW5nIGxvZ2ljIGlzIHJvYnVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMDowOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGJkMDgxMjY0NjhhM2QyODhlMzk2ZmQ2ZTZmNjlhOWZjMmM3MGE2NTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAxNiAwMDowOTowOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL2htbS5yc3RcbmluZGV4IDdkNjFiN2E4YjY1Yjc5Li5lMDIxMjE4YWRhNThmZSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0XG5AQCAtMTU2LDQyICYjNDM7MTU2LDU3IEBAIER1cmluZyB0aGUgb3BzLVx1MDAzZWludmFsaWRhdGUoKSBjYWxsYmFjayB0aGUgZGV2aWNlIGRyaXZlciBtdXN0IHBlcmZvcm0gdGhlXG4gdXBkYXRlIGFjdGlvbiB0byB0aGUgcmFuZ2UgKG1hcmsgcmFuZ2UgcmVhZCBvbmx5LCBvciBmdWxseSB1bm1hcCwgZXRjLikuIFRoZVxuIGRldmljZSBtdXN0IGNvbXBsZXRlIHRoZSB1cGRhdGUgYmVmb3JlIHRoZSBkcml2ZXIgY2FsbGJhY2sgcmV0dXJucy5cbiBcbi1XaGVuIHRoZSBkZXZpY2UgZHJpdmVyIHdhbnRzIHRvIHBvcHVsYXRlIGEgcmFuZ2Ugb2YgdmlydHVhbCBhZGRyZXNzZXMsIGl0IGNhblxuLXVzZTo6XG4mIzQzO1doZW4gdGhlIGRldmljZSBkcml2ZXIgd2FudHMgdG8gcG9wdWxhdGUgYSByYW5nZSBvZiB2aXJ0dWFsIGFkZHJlc3NlcywgdGhlXG4mIzQzO25vcm1hbCBpbnRlcmZhY2UgaXM6OlxuIFxuLSAgaW50IGhtbV9yYW5nZV9mYXVsdChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSk7XG4mIzQzOyAgaW50IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpO1xuIFxuIEl0IHdpbGwgdHJpZ2dlciBhIHBhZ2UgZmF1bHQgb24gbWlzc2luZyBvciByZWFkLW9ubHkgZW50cmllcyBpZiB3cml0ZSBhY2Nlc3MgaXNcbiByZXF1ZXN0ZWQgKHNlZSBiZWxvdykuIFBhZ2UgZmF1bHRzIHVzZSB0aGUgZ2VuZXJpYyBtbSBwYWdlIGZhdWx0IGNvZGUgcGF0aCBqdXN0XG4tbGlrZSBhIENQVSBwYWdlIGZhdWx0LiBUaGUgdXNhZ2UgcGF0dGVybiBpczo6XG4mIzQzO2xpa2UgYSBDUFUgcGFnZSBmYXVsdC5cbiYjNDM7XG4mIzQzO1RoZSBjYWxsZXIgbXVzdCBub3QgaG9sZCBgYG1tYXBfcmVhZF9sb2NrYGAgYmVmb3JlIHRoZSBjYWxsLlxuJiM0MztgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KClgYCB0YWtlcyB0aGUgbW1hcCByZWFkIGxvY2sgaW50ZXJuYWxseSBhbmRcbiYjNDM7YWxsb3dzIGBgaGFuZGxlX21tX2ZhdWx0KClgYCB0byBkcm9wIGl0IGR1cmluZyBmYXVsdCBoYW5kbGluZy4gVGhpcyBpcyByZXF1aXJlZFxuJiM0Mztmb3IgVk1BcyB3aG9zZSBmYXVsdCBoYW5kbGVycyBtYXkgcmVsZWFzZSB0aGUgbW1hcCBsb2NrLCBmb3IgZXhhbXBsZSByZWdpb25zXG4mIzQzO21hbmFnZWQgYnkgYGB1c2VyZmF1bHRmZGBgLlxuJiM0MztcbiYjNDM7SWYgdGhlIG1tYXAgbG9jayBpcyBkcm9wcGVkIG9yIHRoZSByYW5nZSBpcyBpbnZhbGlkYXRlZCwgdGhlIGZ1bmN0aW9uIHJlZnJlc2hlc1xuJiM0MztgYHJhbmdlLVx1MDAzZW5vdGlmaWVyX3NlcWBgIGFuZCByZXN0YXJ0cyB0aGUgd2FsayBpbnRlcm5hbGx5LiBgYC1FSU5UUmBgIGlzIHJldHVybmVkXG4mIzQzO2lmIG1tYXAgbG9jayBhY3F1aXNpdGlvbiBpcyBpbnRlcnJ1cHRlZCBvciBhIGZhdGFsIHNpZ25hbCBpcyBwZW5kaW5nIGR1cmluZ1xuJiM0MztyZXRyeSBoYW5kbGluZy5cbiYjNDM7XG4mIzQzO1RoZSB0aW1lb3V0IGlzIHNwZWNpZmllZCBpbiBqaWZmaWVzOyBwYXNzaW5nIGBgMGBgIG1lYW5zIHJldHJ5IGluZGVmaW5pdGVseS4gVGhlXG4mIzQzO3RpbWVvdXQgZXhpc3RzIHRvIHByZXNlcnZlIGNhbGxlciBwb2xpY3kgZm9yIHJlcGVhdGVkIG1tdS1ub3RpZmllciBpbnZhbGlkYXRpb25cbiYjNDM7YW5kIGlzIGNoZWNrZWQgYmV0d2VlbiByZXRyeSBhdHRlbXB0cy4gSE1NIGRvZXMgbm90IGludGVycnVwdCBwYWdlIGZhdWx0XG4mIzQzO2hhbmRsaW5nIHdoZW4gdGhlIHRpbWVvdXQgZXhwaXJlcywgYnV0IHJldHVybnMgYGAtRUJVU1lgYCBpZiB0aGUgcmV0cnkgYnVkZ2V0IGlzXG4mIzQzO2V4aGF1c3RlZCBiZWZvcmUgYSBzdGFibGUgcmFuZ2UgaXMgb2J0YWluZWQuXG4mIzQzO1xuJiM0MztUaGUgdXNhZ2UgcGF0dGVybiBpczo6XG4gXG4gIGludCBkcml2ZXJfcG9wdWxhdGVfcmFuZ2UoLi4uKVxuICB7XG4gICAgICAgc3RydWN0IGhtbV9yYW5nZSByYW5nZTtcbiYjNDM7ICAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0O1xuICAgICAgIC4uLlxuIFxuJiM0MzsgICAgICB0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcbiAgICAgICByYW5nZS5ub3RpZmllciA9IFx1MDAyNmludGVydmFsX3N1YjtcbiAgICAgICByYW5nZS5zdGFydCA9IC4uLjtcbiAgICAgICByYW5nZS5lbmQgPSAuLi47XG4gICAgICAgcmFuZ2UuaG1tX3BmbnMgPSAuLi47XG4gXG4tICAgICAgaWYgKCFtbWdldF9ub3RfemVybyhpbnRlcnZhbF9zdWItXHUwMDNlbm90aWZpZXIubW0pKVxuJiM0MzsgICAgICBpZiAoIW1tZ2V0X25vdF96ZXJvKGludGVydmFsX3N1Yi5tbSkpXG4gICAgICAgICAgIHJldHVybiAtRUZBVUxUO1xuIFxuICBhZ2Fpbjpcbi0gICAgICByYW5nZS5ub3RpZmllcl9zZXEgPSBtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihcdTAwMjZpbnRlcnZhbF9zdWIpO1xuLSAgICAgIG1tYXBfcmVhZF9sb2NrKG1tKTtcbi0gICAgICByZXQgPSBobW1fcmFuZ2VfZmF1bHQoXHUwMDI2cmFuZ2UpO1xuLSAgICAgIGlmIChyZXQpIHtcbi0gICAgICAgICAgbW1hcF9yZWFkX3VubG9jayhtbSk7XG4tICAgICAgICAgIGlmIChyZXQgPT0gLUVCVVNZKVxuLSAgICAgICAgICAgICAgICAgZ290byBhZ2Fpbjtcbi0gICAgICAgICAgcmV0dXJuIHJldDtcbi0gICAgICB9XG4tICAgICAgbW1hcF9yZWFkX3VubG9jayhtbSk7XG4mIzQzOyAgICAgIHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNnJhbmdlLCB0aW1lb3V0KTtcbiYjNDM7ICAgICAgaWYgKHJldClcbiYjNDM7ICAgICAgICAgIGdvdG8gb3V0X3B1dDtcbiBcbiAgICAgICB0YWtlX2xvY2soZHJpdmVyLVx1MDAzZXVwZGF0ZSk7XG4tICAgICAgaWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KFx1MDAyNm5pLCByYW5nZS5ub3RpZmllcl9zZXEpIHtcbiYjNDM7ICAgICAgaWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KHJhbmdlLm5vdGlmaWVyLCByYW5nZS5ub3RpZmllcl9zZXEpKSB7XG4gICAgICAgICAgIHJlbGVhc2VfbG9jayhkcml2ZXItXHUwMDNldXBkYXRlKTtcbiAgICAgICAgICAgZ290byBhZ2FpbjtcbiAgICAgICB9XG5AQCAtMjAwLDEzICYjNDM7MjE1LDMxIEBAIGxpa2UgYSBDUFUgcGFnZSBmYXVsdC4gVGhlIHVzYWdlIHBhdHRlcm4gaXM6OlxuICAgICAgICAqIHVuZGVyIHRoZSB1cGRhdGUgbG9jayAqL1xuIFxuICAgICAgIHJlbGVhc2VfbG9jayhkcml2ZXItXHUwMDNldXBkYXRlKTtcbi0gICAgICByZXR1cm4gMDtcbiYjNDM7ICAgICAgcmV0ID0gMDtcbiYjNDM7XG4mIzQzOyBvdXRfcHV0OlxuJiM0MzsgICAgICBtbXB1dChpbnRlcnZhbF9zdWIubW0pO1xuJiM0MzsgICAgICByZXR1cm4gcmV0O1xuICB9XG4gXG4gVGhlIGRyaXZlci1cdTAwM2V1cGRhdGUgbG9jayBpcyB0aGUgc2FtZSBsb2NrIHRoYXQgdGhlIGRyaXZlciB0YWtlcyBpbnNpZGUgaXRzXG4gaW52YWxpZGF0ZSgpIGNhbGxiYWNrLiBUaGF0IGxvY2sgbXVzdCBiZSBoZWxkIGJlZm9yZSBjYWxsaW5nXG4gbW11X2ludGVydmFsX3JlYWRfcmV0cnkoKSB0byBhdm9pZCBhbnkgcmFjZSB3aXRoIGEgY29uY3VycmVudCBDUFUgcGFnZSB0YWJsZVxuLXVwZGF0ZS5cbiYjNDM7dXBkYXRlLiBUaGUgcmV0cnkgY2hlY2sgbXVzdCB1c2UgdGhlIHNhbWUgbm90aWZpZXIgYW5kIHNlcXVlbmNlIG51bWJlciBzdG9yZWRcbiYjNDM7aW4gYGByYW5nZWBgIGJ5IGBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKWBgLlxuJiM0MztcbiYjNDM7SG9sZGluZyB0aGUgbW1hcCBsb2NrIGFjcm9zcyBITU0gZmF1bHRzXG4mIzQzOz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MztcbiYjNDM7TW9zdCBjYWxsZXJzIHNob3VsZCB1c2UgYGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpYGAuIElmIGEgZHJpdmVyXG4mIzQzO3JlYWxseSBuZWVkcyB0byBob2xkIHRoZSBtbWFwIGxvY2sgYWNyb3NzIHdvcmsgb3V0c2lkZSBITU0sIGl0IGNhbiB1c2U6OlxuJiM0MztcbiYjNDM7ICBpbnQgaG1tX3JhbmdlX2ZhdWx0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKTtcbiYjNDM7XG4mIzQzO1RoZSBtbWFwIGxvY2sgbXVzdCBiZSBoZWxkIGJ5IHRoZSBjYWxsZXIgYW5kIHdpbGwgcmVtYWluIGhlbGQgb24gcmV0dXJuLiBUaGlzXG4mIzQzO2ludGVyZmFjZSBjYW5ub3Qgc3VwcG9ydCBWTUFzIHdob3NlIGZhdWx0IGhhbmRsZXJzIG5lZWQgdG8gZHJvcCB0aGUgbW1hcCBsb2NrLlxuJiM0MztOZXcgY2FsbGVycyBzaG91bGQgcHJlZmVyIGBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKWBgIHVubGVzcyB0aGV5XG4mIzQzO2hhdmUgYSBzcGVjaWZpYyByZXF1aXJlbWVudCB0byBrZWVwIHRoZSBtbWFwIGxvY2sgaGVsZCBhY3Jvc3MgdGhlIGNhbGwuXG4gXG4gTGV2ZXJhZ2UgZGVmYXVsdF9mbGFncyBhbmQgcGZuX2ZsYWdzX21hc2tcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuQEAgLTIyMSw4ICYjNDM7MjU0LDggQEAgcGVybWlzc2lvbiwgaXQgc2V0czo6XG4gICAgIHJhbmdlLVx1MDAzZWRlZmF1bHRfZmxhZ3MgPSBITU1fUEZOX1JFUV9GQVVMVDtcbiAgICAgcmFuZ2UtXHUwMDNlcGZuX2ZsYWdzX21hc2sgPSAwO1xuIFxuLWFuZCBjYWxscyBobW1fcmFuZ2VfZmF1bHQoKSBhcyBkZXNjcmliZWQgYWJvdmUuIFRoaXMgd2lsbCBmaWxsIGZhdWx0IGFsbCBwYWdlc1xuLWluIHRoZSByYW5nZSB3aXRoIGF0IGxlYXN0IHJlYWQgcGVybWlzc2lvbi5cbiYjNDM7YW5kIGNhbGxzIHRoZSBITU0gcmFuZ2UgZmF1bHQgaGVscGVyIGFzIGRlc2NyaWJlZCBhYm92ZS4gVGhpcyB3aWxsIGZhdWx0XG4mIzQzO2FsbCBwYWdlcyBpbiB0aGUgcmFuZ2Ugd2l0aCBhdCBsZWFzdCByZWFkIHBlcm1pc3Npb24uXG4gXG4gTm93IGxldCYjMzk7cyBzYXkgdGhlIGRyaXZlciB3YW50cyB0byBkbyB0aGUgc2FtZSBleGNlcHQgZm9yIG9uZSBwYWdlIGluIHRoZSByYW5nZSBmb3JcbiB3aGljaCBpdCB3YW50cyB0byBoYXZlIHdyaXRlIHBlcm1pc3Npb24uIE5vdyBkcml2ZXIgc2V0OjpcbkBAIC0yMzYsOSAmIzQzOzI2OSw5IEBAIGFkZHJlc3MgPT0gcmFuZ2UtXHUwMDNlc3RhcnQgJiM0MzsgKGluZGV4X29mX3dyaXRlIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSBpdCB3aWxsIGZhdWx0IHdpdGhcbiB3cml0ZSBwZXJtaXNzaW9uIGkuZS4sIGlmIHRoZSBDUFUgcHRlIGRvZXMgbm90IGhhdmUgd3JpdGUgcGVybWlzc2lvbiBzZXQgdGhlbiBITU1cbiB3aWxsIGNhbGwgaGFuZGxlX21tX2ZhdWx0KCkuXG4gXG4tQWZ0ZXIgaG1tX3JhbmdlX2ZhdWx0IGNvbXBsZXRlcyB0aGUgZmxhZyBiaXRzIGFyZSBzZXQgdG8gdGhlIGN1cnJlbnQgc3RhdGUgb2Zcbi10aGUgcGFnZSB0YWJsZXMsIGllIEhNTV9QRk5fVkFMSUQgfCBITU1fUEZOX1dSSVRFIHdpbGwgYmUgc2V0IGlmIHRoZSBwYWdlIGlzXG4td3JpdGFibGUuXG4mIzQzO0FmdGVyIHRoZSBITU0gcmFuZ2UgZmF1bHQgaGVscGVyIGNvbXBsZXRlcyB0aGUgZmxhZyBiaXRzIGFyZSBzZXQgdG8gdGhlXG4mIzQzO2N1cnJlbnQgc3RhdGUgb2YgdGhlIHBhZ2UgdGFibGVzLCBpZSBITU1fUEZOX1ZBTElEIHwgSE1NX1BGTl9XUklURSB3aWxsIGJlXG4mIzQzO3NldCBpZiB0aGUgcGFnZSBpcyB3cml0YWJsZS5cbiBcbiBcbiBSZXByZXNlbnQgYW5kIG1hbmFnZSBkZXZpY2UgbWVtb3J5IGZyb20gY29yZSBrZXJuZWwgcG9pbnQgb2Ygdmlld1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNjZWwvYW1keGRuYS9haWUyX2N0eC5jIGIvZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FpZTJfY3R4LmNcbmluZGV4IDU0NDg2OTYwY2JmNWU2Li5iNWI0Y2EyNjMwMDJkYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYWNjZWwvYW1keGRuYS9haWUyX2N0eC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguY1xuQEAgLTEwMzQsNyAmIzQzOzEwMzQsNyBAQCBzdGF0aWMgaW50IGFpZTJfcG9wdWxhdGVfcmFuZ2Uoc3RydWN0IGFtZHhkbmFfZ2VtX29iaiAqYWJvKVxuIFx0Ym9vbCBmb3VuZDtcbiBcdGludCByZXQ7XG4gXG4tXHR0aW1lb3V0ID0gamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xuJiM0MztcdHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xuIGFnYWluOlxuIFx0Zm91bmQgPSBmYWxzZTtcbiBcdGRvd25fd3JpdGUoXHUwMDI2eGRuYS1cdTAwM2Vub3RpZmllcl9sb2NrKTtcbkBAIC0xMDYxLDI0ICYjNDM7MTA2MSw5IEBAIHN0YXRpYyBpbnQgYWllMl9wb3B1bGF0ZV9yYW5nZShzdHJ1Y3QgYW1keGRuYV9nZW1fb2JqICphYm8pXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuIFx0fVxuIFxuLVx0bWFwcC1cdTAwM2VyYW5nZS5ub3RpZmllcl9zZXEgPSBtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihcdTAwMjZtYXBwLVx1MDAzZW5vdGlmaWVyKTtcbi1cdG1tYXBfcmVhZF9sb2NrKG1tKTtcbi1cdHJldCA9IGhtbV9yYW5nZV9mYXVsdChcdTAwMjZtYXBwLVx1MDAzZXJhbmdlKTtcbi1cdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuLVx0aWYgKHJldCkge1xuLVx0XHRpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkge1xuLVx0XHRcdHJldCA9IC1FVElNRTtcbi1cdFx0XHRnb3RvIHB1dF9tbTtcbi1cdFx0fVxuLVxuLVx0XHRpZiAocmV0ID09IC1FQlVTWSkge1xuLVx0XHRcdGFtZHhkbmFfdW1hcF9wdXQobWFwcCk7XG4tXHRcdFx0bW1wdXQobW0pO1xuLVx0XHRcdGdvdG8gYWdhaW47XG4tXHRcdH1cbi1cbiYjNDM7XHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcdTAwMjZtYXBwLVx1MDAzZXJhbmdlLCB0aW1lb3V0KTtcbiYjNDM7XHRpZiAocmV0KVxuIFx0XHRnb3RvIHB1dF9tbTtcbi1cdH1cbiBcbiBcdGRvd25fd3JpdGUoXHUwMDI2eGRuYS1cdTAwM2Vub3RpZmllcl9sb2NrKTtcbiBcdGlmIChtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeShcdTAwMjZtYXBwLVx1MDAzZW5vdGlmaWVyLCBtYXBwLVx1MDAzZXJhbmdlLm5vdGlmaWVyX3NlcSkpIHtcbkBAIC0xMDk2LDcgJiM0MzsxMDgxLDcgQEAgc3RhdGljIGludCBhaWUyX3BvcHVsYXRlX3JhbmdlKHN0cnVjdCBhbWR4ZG5hX2dlbV9vYmogKmFibylcbiBwdXRfbW06XG4gXHRhbWR4ZG5hX3VtYXBfcHV0KG1hcHApO1xuIFx0bW1wdXQobW0pO1xuLVx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXR1cm4gcmV0ID09IC1FQlVTWSA/IC1FVElNRSA6IHJldDtcbiB9XG4gXG4gaW50IGFpZTJfY21kX3N1Ym1pdChzdHJ1Y3QgYW1keGRuYV9od2N0eCAqaHdjdHgsIHN0cnVjdCBhbWR4ZG5hX3NjaGVkX2pvYiAqam9iLCB1NjQgKnNlcSlcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uY1xuaW5kZXggOTU4Y2I2MDVhZWRkNTMuLmRlNWJiZmU1OGVlOTQ1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uY1xuQEAgLTc3Myw4ICYjNDM7NzczLDcgQEAgZW51bSBkcm1fZ3B1c3ZtX3NjYW5fcmVzdWx0IGRybV9ncHVzdm1fc2Nhbl9tbShzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqcmFuZ2UsXG4gXHRcdC5lbmQgPSBlbmQsXG4gXHRcdC5kZXZfcHJpdmF0ZV9vd25lciA9IGRldl9wcml2YXRlX293bmVyLFxuIFx0fTtcbi1cdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9XG4tXHRcdGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xuIFx0ZW51bSBkcm1fZ3B1c3ZtX3NjYW5fcmVzdWx0IHN0YXRlID0gRFJNX0dQVVNWTV9TQ0FOX1VOUE9QVUxBVEVELCBuZXdfc3RhdGU7XG4gXHR1bnNpZ25lZCBsb25nICpwZm5zO1xuIFx0dW5zaWduZWQgbG9uZyBucGFnZXMgPSBucGFnZXNfaW5fcmFuZ2Uoc3RhcnQsIGVuZCk7XG5AQCAtNzg4LDIyICYjNDM7Nzg3LDcgQEAgZW51bSBkcm1fZ3B1c3ZtX3NjYW5fcmVzdWx0IGRybV9ncHVzdm1fc2Nhbl9tbShzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqcmFuZ2UsXG4gXHRobW1fcmFuZ2UuaG1tX3BmbnMgPSBwZm5zO1xuIFxuIHJldHJ5OlxuLVx0aG1tX3JhbmdlLm5vdGlmaWVyX3NlcSA9IG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKG5vdGlmaWVyKTtcbi1cdG1tYXBfcmVhZF9sb2NrKHJhbmdlLVx1MDAzZWdwdXN2bS1cdTAwM2VtbSk7XG4tXG4tXHR3aGlsZSAodHJ1ZSkge1xuLVx0XHRlcnIgPSBobW1fcmFuZ2VfZmF1bHQoXHUwMDI2aG1tX3JhbmdlKTtcbi1cdFx0aWYgKGVyciA9PSAtRUJVU1kpIHtcbi1cdFx0XHRpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSlcbi1cdFx0XHRcdGJyZWFrO1xuLVxuLVx0XHRcdGhtbV9yYW5nZS5ub3RpZmllcl9zZXEgPVxuLVx0XHRcdFx0bW11X2ludGVydmFsX3JlYWRfYmVnaW4obm90aWZpZXIpO1xuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHR9XG4tXHRcdGJyZWFrO1xuLVx0fVxuLVx0bW1hcF9yZWFkX3VubG9jayhyYW5nZS1cdTAwM2VncHVzdm0tXHUwMDNlbW0pO1xuJiM0MztcdGVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNmhtbV9yYW5nZSwgdGltZW91dCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9mcmVlO1xuIFxuQEAgLTE0MDYsOCAmIzQzOzEzOTAsNyBAQCBpbnQgZHJtX2dwdXN2bV9nZXRfcGFnZXMoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcbiBcdFx0LmRldl9wcml2YXRlX293bmVyID0gY3R4LVx1MDAzZWRldmljZV9wcml2YXRlX3BhZ2Vfb3duZXIsXG4gXHR9O1xuIFx0dm9pZCAqemRkO1xuLVx0dW5zaWduZWQgbG9uZyB0aW1lb3V0ID1cbi1cdFx0amlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7XG4gXHR1bnNpZ25lZCBsb25nIGksIGo7XG4gXHR1bnNpZ25lZCBsb25nIG5wYWdlcyA9IG5wYWdlc19pbl9yYW5nZShwYWdlc19zdGFydCwgcGFnZXNfZW5kKTtcbiBcdHVuc2lnbmVkIGxvbmcgbnVtX2RtYV9tYXBwZWQ7XG5AQCAtMTQyMiw5ICYjNDM7MTQwNSw2IEBAIGludCBkcm1fZ3B1c3ZtX2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxuIFx0c3RydWN0IGRtYV9pb3ZhX3N0YXRlICpzdGF0ZSA9IFx1MDAyNnN2bV9wYWdlcy1cdTAwM2VzdGF0ZTtcbiBcbiByZXRyeTpcbi1cdGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKVxuLVx0XHRyZXR1cm4gLUVCVVNZO1xuLVxuIFx0aG1tX3JhbmdlLm5vdGlmaWVyX3NlcSA9IG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKG5vdGlmaWVyKTtcbiBcdGlmIChkcm1fZ3B1c3ZtX3BhZ2VzX3ZhbGlkX3VubG9ja2VkKGdwdXN2bSwgc3ZtX3BhZ2VzKSlcbiBcdFx0Z290byBzZXRfc2Vxbm87XG5AQCAtMTQzOSwyMSAmIzQzOzE0MTksNyBAQCBpbnQgZHJtX2dwdXN2bV9nZXRfcGFnZXMoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcbiBcdH1cbiBcbiBcdGhtbV9yYW5nZS5obW1fcGZucyA9IHBmbnM7XG4tXHR3aGlsZSAodHJ1ZSkge1xuLVx0XHRtbWFwX3JlYWRfbG9jayhtbSk7XG4tXHRcdGVyciA9IGhtbV9yYW5nZV9mYXVsdChcdTAwMjZobW1fcmFuZ2UpO1xuLVx0XHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbi1cbi1cdFx0aWYgKGVyciA9PSAtRUJVU1kpIHtcbi1cdFx0XHRpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSlcbi1cdFx0XHRcdGJyZWFrO1xuLVxuLVx0XHRcdGhtbV9yYW5nZS5ub3RpZmllcl9zZXEgPVxuLVx0XHRcdFx0bW11X2ludGVydmFsX3JlYWRfYmVnaW4obm90aWZpZXIpO1xuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHR9XG4tXHRcdGJyZWFrO1xuLVx0fVxuJiM0MztcdGVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNmhtbV9yYW5nZSwgdGltZW91dCk7XG4gXHRtbXB1dChtbSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9mcmVlO1xuQEAgLTE3MjAsOCAmIzQzOzE2ODYsNyBAQCBpbnQgZHJtX2dwdXN2bV9yYW5nZV9ldmljdChzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxuIFx0XHQuZW5kID0gZHJtX2dwdXN2bV9yYW5nZV9lbmQocmFuZ2UpLFxuIFx0XHQuZGV2X3ByaXZhdGVfb3duZXIgPSBOVUxMLFxuIFx0fTtcbi1cdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9XG4tXHRcdGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xuIFx0dW5zaWduZWQgbG9uZyAqcGZucztcbiBcdHVuc2lnbmVkIGxvbmcgbnBhZ2VzID0gbnBhZ2VzX2luX3JhbmdlKGRybV9ncHVzdm1fcmFuZ2Vfc3RhcnQocmFuZ2UpLFxuIFx0XHRcdFx0XHQgICAgICAgZHJtX2dwdXN2bV9yYW5nZV9lbmQocmFuZ2UpKTtcbkBAIC0xNzM2LDI0ICYjNDM7MTcwMSwxMiBAQCBpbnQgZHJtX2dwdXN2bV9yYW5nZV9ldmljdChzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdGhtbV9yYW5nZS5obW1fcGZucyA9IHBmbnM7XG4tXHR3aGlsZSAoIXRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHtcbi1cdFx0aG1tX3JhbmdlLm5vdGlmaWVyX3NlcSA9IG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKG5vdGlmaWVyKTtcbi1cdFx0aWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHtcbi1cdFx0XHRlcnIgPSAtRVRJTUU7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cbi1cdFx0bW1hcF9yZWFkX2xvY2sobW0pO1xuLVx0XHRlcnIgPSBobW1fcmFuZ2VfZmF1bHQoXHUwMDI2aG1tX3JhbmdlKTtcbi1cdFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4tXHRcdGlmIChlcnIgIT0gLUVCVVNZKVxuLVx0XHRcdGJyZWFrO1xuLVx0fVxuJiM0MztcdGVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNmhtbV9yYW5nZSwgdGltZW91dCk7XG4gXG4gXHRrdmZyZWUocGZucyk7XG4gXHRtbXB1dChtbSk7XG4gXG4tXHRyZXR1cm4gZXJyO1xuJiM0MztcdHJldHVybiBlcnIgPT0gLUVCVVNZID8gLUVUSU1FIDogZXJyO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ3B1c3ZtX3JhbmdlX2V2aWN0KTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N2bS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uY1xuaW5kZXggZGNjOTIxMzE0ODhlYWIuLjU4NzM1NDQ2ZDc4MzJjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uY1xuQEAgLTY3OCwyMCAmIzQzOzY3OCwyMiBAQCBzdGF0aWMgaW50IG5vdXZlYXVfcmFuZ2VfZmF1bHQoc3RydWN0IG5vdXZlYXVfc3ZtbSAqc3ZtbSxcbiBcdHJhbmdlLmVuZCA9IG5vdGlmaWVyLVx1MDAzZW5vdGlmaWVyLmludGVydmFsX3RyZWUubGFzdCAmIzQzOyAxO1xuIFxuIFx0d2hpbGUgKHRydWUpIHtcbi1cdFx0aWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHtcbiYjNDM7XHRcdGxvbmcgcmVtYWluaW5nID0gdGltZW91dCAtIGppZmZpZXM7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFRoZSBITU0gdGltZW91dCBvbmx5IGJvdW5kcyByZXRyaWVzIHdoaWxlIEhNTSBpcyB3YWxraW5nIGFuZFxuJiM0MztcdFx0ICogZmF1bHRpbmcgdGhlIHJhbmdlLiBUaGlzIGZhdWx0IGlzIGhhbmRsZWQgYnkgYSBrZXJuZWwgd29ya2VyLFxuJiM0MztcdFx0ICogc28gZmF0YWwgc2lnbmFscyBmcm9tIHRoZSBmYXVsdGluZyBwcm9jZXNzIGNhbm5vdCBzdG9wIGFuXG4mIzQzO1x0XHQgKiBlbmRsZXNzIHN0cmVhbSBvZiBpbnZhbGlkYXRpb25zIGhlcmUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHRpbWVvdXQpKSB7XG4gXHRcdFx0cmV0ID0gLUVCVVNZO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4gXG4tXHRcdHJhbmdlLm5vdGlmaWVyX3NlcSA9IG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKHJhbmdlLm5vdGlmaWVyKTtcbi1cdFx0bW1hcF9yZWFkX2xvY2sobW0pO1xuLVx0XHRyZXQgPSBobW1fcmFuZ2VfZmF1bHQoXHUwMDI2cmFuZ2UpO1xuLVx0XHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbi1cdFx0aWYgKHJldCkge1xuLVx0XHRcdGlmIChyZXQgPT0gLUVCVVNZKVxuLVx0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcdTAwMjZyYW5nZSwgcmVtYWluaW5nKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4gXHRcdFx0Z290byBvdXQ7XG4tXHRcdH1cbiBcbiBcdFx0bXV0ZXhfbG9jayhcdTAwMjZzdm1tLVx1MDAzZW11dGV4KTtcbiBcdFx0aWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KHJhbmdlLm5vdGlmaWVyLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHYvbXNodl9yZWdpb25zLmMgYi9kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jXG5pbmRleCA2ZDY1ZTViNDIxNTI5NS4uZGRkYWFkZTMxYjVkYzMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jXG5AQCAtMzgxLDQ2ICYjNDM7MzgxLDYgQEAgaW50IG1zaHZfcmVnaW9uX2dldChzdHJ1Y3QgbXNodl9tZW1fcmVnaW9uICpyZWdpb24pXG4gXHRyZXR1cm4ga3JlZl9nZXRfdW5sZXNzX3plcm8oXHUwMDI2cmVnaW9uLVx1MDAzZW1yZWdfcmVmY291bnQpO1xuIH1cbiBcbi0vKipcbi0gKiBtc2h2X3JlZ2lvbl9obW1fZmF1bHRfYW5kX2xvY2sgLSBIYW5kbGUgSE1NIGZhdWx0cyBhbmQgbG9jayB0aGUgbWVtb3J5IHJlZ2lvblxuLSAqIEByZWdpb246IFBvaW50ZXIgdG8gdGhlIG1lbW9yeSByZWdpb24gc3RydWN0dXJlXG4tICogQHJhbmdlOiBQb2ludGVyIHRvIHRoZSBITU0gcmFuZ2Ugc3RydWN0dXJlXG4tICpcbi0gKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgc3RlcHM6XG4tICogMS4gUmVhZHMgdGhlIG5vdGlmaWVyIHNlcXVlbmNlIGZvciB0aGUgSE1NIHJhbmdlLlxuLSAqIDIuIEFjcXVpcmVzIGEgcmVhZCBsb2NrIG9uIHRoZSBtZW1vcnkgbWFwLlxuLSAqIDMuIEhhbmRsZXMgSE1NIGZhdWx0cyBmb3IgdGhlIHNwZWNpZmllZCByYW5nZS5cbi0gKiA0LiBSZWxlYXNlcyB0aGUgcmVhZCBsb2NrIG9uIHRoZSBtZW1vcnkgbWFwLlxuLSAqIDUuIElmIHN1Y2Nlc3NmdWwsIGxvY2tzIHRoZSBtZW1vcnkgcmVnaW9uIG11dGV4LlxuLSAqIDYuIFZlcmlmaWVzIGlmIHRoZSBub3RpZmllciBzZXF1ZW5jZSBoYXMgY2hhbmdlZCBkdXJpbmcgdGhlIG9wZXJhdGlvbi5cbi0gKiAgICBJZiBpdCBoYXMsIHJlbGVhc2VzIHRoZSBtdXRleCBhbmQgcmV0dXJucyAtRUJVU1kgdG8gbWF0Y2ggd2l0aFxuLSAqICAgIGhtbV9yYW5nZV9mYXVsdCgpIHJldHVybiBjb2RlIGZvciByZXBlYXRpbmcuXG4tICpcbi0gKiBSZXR1cm46IDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cbi0gKi9cbi1zdGF0aWMgaW50IG1zaHZfcmVnaW9uX2htbV9mYXVsdF9hbmRfbG9jayhzdHJ1Y3QgbXNodl9tZW1fcmVnaW9uICpyZWdpb24sXG4tXHRcdFx0XHRcdCAgc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpXG4te1xuLVx0aW50IHJldDtcbi1cbi1cdHJhbmdlLVx1MDAzZW5vdGlmaWVyX3NlcSA9IG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKHJhbmdlLVx1MDAzZW5vdGlmaWVyKTtcbi1cdG1tYXBfcmVhZF9sb2NrKHJlZ2lvbi1cdTAwM2VtcmVnX21uaS5tbSk7XG4tXHRyZXQgPSBobW1fcmFuZ2VfZmF1bHQocmFuZ2UpO1xuLVx0bW1hcF9yZWFkX3VubG9jayhyZWdpb24tXHUwMDNlbXJlZ19tbmkubW0pO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdG11dGV4X2xvY2soXHUwMDI2cmVnaW9uLVx1MDAzZW1yZWdfbXV0ZXgpO1xuLVxuLVx0aWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KHJhbmdlLVx1MDAzZW5vdGlmaWVyLCByYW5nZS1cdTAwM2Vub3RpZmllcl9zZXEpKSB7XG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZyZWdpb24tXHUwMDNlbXJlZ19tdXRleCk7XG4tXHRcdGNvbmRfcmVzY2hlZCgpO1xuLVx0XHRyZXR1cm4gLUVCVVNZO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIC8qKlxuICAqIG1zaHZfcmVnaW9uX3JhbmdlX2ZhdWx0IC0gSGFuZGxlIG1lbW9yeSByYW5nZSBmYXVsdHMgZm9yIGEgZ2l2ZW4gcmVnaW9uLlxuICAqIEByZWdpb246IFBvaW50ZXIgdG8gdGhlIG1lbW9yeSByZWdpb24gc3RydWN0dXJlLlxuQEAgLTQ1MiwxMyAmIzQzOzQxMiwxOSBAQCBzdGF0aWMgaW50IG1zaHZfcmVnaW9uX3JhbmdlX2ZhdWx0KHN0cnVjdCBtc2h2X21lbV9yZWdpb24gKnJlZ2lvbixcbiBcdHJhbmdlLnN0YXJ0ID0gcmVnaW9uLVx1MDAzZXN0YXJ0X3VhZGRyICYjNDM7IHBhZ2Vfb2Zmc2V0ICogSFZfSFlQX1BBR0VfU0laRTtcbiBcdHJhbmdlLmVuZCA9IHJhbmdlLnN0YXJ0ICYjNDM7IHBhZ2VfY291bnQgKiBIVl9IWVBfUEFHRV9TSVpFO1xuIFxuLVx0ZG8ge1xuLVx0XHRyZXQgPSBtc2h2X3JlZ2lvbl9obW1fZmF1bHRfYW5kX2xvY2socmVnaW9uLCBcdTAwMjZyYW5nZSk7XG4tXHR9IHdoaWxlIChyZXQgPT0gLUVCVVNZKTtcbi1cbiYjNDM7YWdhaW46XG4mIzQzO1x0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXHUwMDI2cmFuZ2UsIDApO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXQ7XG4gXG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZyZWdpb24tXHUwMDNlbXJlZ19tdXRleCk7XG4mIzQzO1xuJiM0MztcdGlmIChtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeShyYW5nZS5ub3RpZmllciwgcmFuZ2Uubm90aWZpZXJfc2VxKSkge1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnJlZ2lvbi1cdTAwM2VtcmVnX211dGV4KTtcbiYjNDM7XHRcdGNvbmRfcmVzY2hlZCgpO1xuJiM0MztcdFx0Z290byBhZ2FpbjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGFnZV9jb3VudDsgaSYjNDM7JiM0MzspXG4gXHRcdHJlZ2lvbi1cdTAwM2VtcmVnX3BhZ2VzW3BhZ2Vfb2Zmc2V0ICYjNDM7IGldID0gaG1tX3Bmbl90b19wYWdlKHBmbnNbaV0pO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jXG5pbmRleCA0MDRmYTFjYzMyNTQyYy4uOWNjMjFjZDc2MmQ5ODkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jXG5AQCAtMzI5LDcgJiM0MzszMjksNyBAQCBpbnQgaWJfdW1lbV9vZHBfbWFwX2RtYV9hbmRfbG9jayhzdHJ1Y3QgaWJfdW1lbV9vZHAgKnVtZW1fb2RwLCB1NjQgdXNlcl92aXJ0LFxuIFx0c3RydWN0IG1tX3N0cnVjdCAqb3duaW5nX21tID0gdW1lbV9vZHAtXHUwMDNldW1lbS5vd25pbmdfbW07XG4gXHRpbnQgcGZuX2luZGV4LCBkbWFfaW5kZXgsIHJldCA9IDAsIHN0YXJ0X2lkeDtcbiBcdHVuc2lnbmVkIGludCBwYWdlX3NoaWZ0LCBobW1fb3JkZXIsIHBmbl9zdGFydF9pZHg7XG4tXHR1bnNpZ25lZCBsb25nIG51bV9wZm5zLCBjdXJyZW50X3NlcTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG51bV9wZm5zO1xuIFx0c3RydWN0IGhtbV9yYW5nZSByYW5nZSA9IHt9O1xuIFx0dW5zaWduZWQgbG9uZyB0aW1lb3V0O1xuIFxuQEAgLTM2MywyNiAmIzQzOzM2MywxOCBAQCBpbnQgaWJfdW1lbV9vZHBfbWFwX2RtYV9hbmRfbG9jayhzdHJ1Y3QgaWJfdW1lbV9vZHAgKnVtZW1fb2RwLCB1NjQgdXNlcl92aXJ0LFxuIFx0fVxuIFxuIFx0cmFuZ2UuaG1tX3BmbnMgPSBcdTAwMjYodW1lbV9vZHAtXHUwMDNlbWFwLnBmbl9saXN0W3Bmbl9zdGFydF9pZHhdKTtcbi1cdHRpbWVvdXQgPSBqaWZmaWVzICYjNDM7IG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7XG4mIzQzO1x0dGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7XG4gXG4gcmV0cnk6XG4tXHRjdXJyZW50X3NlcSA9IHJhbmdlLm5vdGlmaWVyX3NlcSA9XG4tXHRcdG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKFx1MDAyNnVtZW1fb2RwLVx1MDAzZW5vdGlmaWVyKTtcbi1cbi1cdG1tYXBfcmVhZF9sb2NrKG93bmluZ19tbSk7XG4tXHRyZXQgPSBobW1fcmFuZ2VfZmF1bHQoXHUwMDI2cmFuZ2UpO1xuLVx0bW1hcF9yZWFkX3VubG9jayhvd25pbmdfbW0pO1xuLVx0aWYgKHVubGlrZWx5KHJldCkpIHtcbi1cdFx0aWYgKHJldCA9PSAtRUJVU1kgXHUwMDI2XHUwMDI2ICF0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKVxuLVx0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1x0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXHUwMDI2cmFuZ2UsIHRpbWVvdXQpO1xuJiM0MztcdGlmICh1bmxpa2VseShyZXQpKVxuIFx0XHRnb3RvIG91dF9wdXRfbW07XG4tXHR9XG4gXG4gXHRzdGFydF9pZHggPSAocmFuZ2Uuc3RhcnQgLSBpYl91bWVtX3N0YXJ0KHVtZW1fb2RwKSkgXHUwMDNlXHUwMDNlIHBhZ2Vfc2hpZnQ7XG4gXHRkbWFfaW5kZXggPSBzdGFydF9pZHg7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNnVtZW1fb2RwLVx1MDAzZXVtZW1fbXV0ZXgpO1xuLVx0aWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KFx1MDAyNnVtZW1fb2RwLVx1MDAzZW5vdGlmaWVyLCBjdXJyZW50X3NlcSkpIHtcbiYjNDM7XHRpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkoXHUwMDI2dW1lbV9vZHAtXHUwMDNlbm90aWZpZXIsIHJhbmdlLm5vdGlmaWVyX3NlcSkpIHtcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnVtZW1fb2RwLVx1MDAzZXVtZW1fbXV0ZXgpO1xuIFx0XHRnb3RvIHJldHJ5O1xuIFx0fVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaG1tLmggYi9pbmNsdWRlL2xpbnV4L2htbS5oXG5pbmRleCBkYjc1ZmZjOTQ5YTdhYy4uNmYwNGUzOTMyZjViMGMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2htbS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2htbS5oXG5AQCAtMTIzLDYgJiM0MzsxMjMsOCBAQCBzdHJ1Y3QgaG1tX3JhbmdlIHtcbiAgKiBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vbW0vaG1tLnJzdCBmb3IgaG93IHRvIHVzZSB0aGUgcmFuZ2UgQVBJLlxuICAqL1xuIGludCBobW1fcmFuZ2VfZmF1bHQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpO1xuJiM0MztpbnQgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsXG4mIzQzO1x0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpO1xuIFxuIC8qXG4gICogSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCAtIGRlZmF1bHQgdGltZW91dCAobXMpIHdoZW4gd2FpdGluZyBmb3IgYSByYW5nZVxuZGlmZiAtLWdpdCBhL2xpYi90ZXN0X2htbS5jIGIvbGliL3Rlc3RfaG1tLmNcbmluZGV4IDQ1YzBjYjk5MjIxODRhLi42MjA1ZmIzMTNiZDA1ZSAxMDA2NDRcbi0tLSBhL2xpYi90ZXN0X2htbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9saWIvdGVzdF9obW0uY1xuQEAgLTM4OSw2ICYjNDM7Mzg5LDY3IEBAIHN0YXRpYyBpbnQgZG1pcnJvcl9yYW5nZV9mYXVsdChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSxcbiYjNDM7XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgdGltZW91dClcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHdoaWxlICh0cnVlKSB7XG4mIzQzO1x0XHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChyYW5nZSwgdGltZW91dCk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0XHRtdXRleF9sb2NrKFx1MDAyNmRtaXJyb3ItXHUwMDNlbXV0ZXgpO1xuJiM0MztcdFx0aWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KHJhbmdlLVx1MDAzZW5vdGlmaWVyLFxuJiM0MztcdFx0XHRcdFx0ICAgIHJhbmdlLVx1MDAzZW5vdGlmaWVyX3NlcSkpIHtcbiYjNDM7XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRtaXJyb3ItXHUwMDNlbXV0ZXgpO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gZG1pcnJvcl9kb19mYXVsdChkbWlycm9yLCByYW5nZSk7XG4mIzQzO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZkbWlycm9yLVx1MDAzZW11dGV4KTtcbiYjNDM7b3V0OlxuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZG1pcnJvcl9mYXVsdF91bmxvY2tlZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcbiYjNDM7XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4mIzQzO1x0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGVuZCwgYm9vbCB3cml0ZSxcbiYjNDM7XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgdGltZW91dClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gZG1pcnJvci1cdTAwM2Vub3RpZmllci5tbTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGFkZHI7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBwZm5zWzMyXTtcbiYjNDM7XHRzdHJ1Y3QgaG1tX3JhbmdlIHJhbmdlID0ge1xuJiM0MztcdFx0Lm5vdGlmaWVyID0gXHUwMDI2ZG1pcnJvci1cdTAwM2Vub3RpZmllcixcbiYjNDM7XHRcdC5obW1fcGZucyA9IHBmbnMsXG4mIzQzO1x0XHQucGZuX2ZsYWdzX21hc2sgPSAwLFxuJiM0MztcdFx0LmRlZmF1bHRfZmxhZ3MgPVxuJiM0MztcdFx0XHRITU1fUEZOX1JFUV9GQVVMVCB8ICh3cml0ZSA/IEhNTV9QRk5fUkVRX1dSSVRFIDogMCksXG4mIzQzO1x0XHQuZGV2X3ByaXZhdGVfb3duZXIgPSBkbWlycm9yLVx1MDAzZW1kZXZpY2UsXG4mIzQzO1x0fTtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFtbWdldF9ub3RfemVybyhtbSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChhZGRyID0gc3RhcnQ7IGFkZHIgXHUwMDNjIGVuZDsgYWRkciA9IHJhbmdlLmVuZCkge1xuJiM0MztcdFx0cmFuZ2Uuc3RhcnQgPSBhZGRyO1xuJiM0MztcdFx0cmFuZ2UuZW5kID0gbWluKGFkZHIgJiM0MzsgKEFSUkFZX1NJWkUocGZucykgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpLCBlbmQpO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IGRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWQoZG1pcnJvciwgXHUwMDI2cmFuZ2UsIHRpbWVvdXQpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtbXB1dChtbSk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGRtaXJyb3JfZmF1bHQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4gXHRcdFx0IHVuc2lnbmVkIGxvbmcgZW5kLCBib29sIHdyaXRlKVxuIHtcbkBAIC00ODgsNiAmIzQzOzU0OSw0OCBAQCBzdGF0aWMgaW50IGRtaXJyb3JfcmVhZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvciwgc3RydWN0IGhtbV9kbWlycm9yX2NtZCAqY21kKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgZG1pcnJvcl9yZWFkX3VubG9ja2VkKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kICpjbWQsXG4mIzQzO1x0XHRcdFx0IHVuc2lnbmVkIGxvbmcgdGltZW91dClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkbWlycm9yX2JvdW5jZSBib3VuY2U7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzdGFydCwgZW5kO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IGNtZC1cdTAwM2VucGFnZXMgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQ7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0c3RhcnQgPSBjbWQtXHUwMDNlYWRkcjtcbiYjNDM7XHRlbmQgPSBzdGFydCAmIzQzOyBzaXplO1xuJiM0MztcdGlmIChlbmQgXHUwMDNjIHN0YXJ0KVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJldCA9IGRtaXJyb3JfYm91bmNlX2luaXQoXHUwMDI2Ym91bmNlLCBzdGFydCwgc2l6ZSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHdoaWxlICgxKSB7XG4mIzQzO1x0XHRtdXRleF9sb2NrKFx1MDAyNmRtaXJyb3ItXHUwMDNlbXV0ZXgpO1xuJiM0MztcdFx0cmV0ID0gZG1pcnJvcl9kb19yZWFkKGRtaXJyb3IsIHN0YXJ0LCBlbmQsIFx1MDAyNmJvdW5jZSk7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2ZG1pcnJvci1cdTAwM2VtdXRleCk7XG4mIzQzO1x0XHRpZiAocmV0ICE9IC1FTk9FTlQpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdHN0YXJ0ID0gY21kLVx1MDAzZWFkZHIgJiM0MzsgKGJvdW5jZS5jcGFnZXMgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpO1xuJiM0MztcdFx0cmV0ID0gZG1pcnJvcl9mYXVsdF91bmxvY2tlZChkbWlycm9yLCBzdGFydCwgZW5kLCBmYWxzZSwgdGltZW91dCk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNtZC1cdTAwM2VmYXVsdHMmIzQzOyYjNDM7O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHJldCA9PSAwKSB7XG4mIzQzO1x0XHRpZiAoY29weV90b191c2VyKHU2NF90b191c2VyX3B0cihjbWQtXHUwMDNlcHRyKSwgYm91bmNlLnB0cixcbiYjNDM7XHRcdFx0XHQgYm91bmNlLnNpemUpKVxuJiM0MztcdFx0XHRyZXQgPSAtRUZBVUxUO1xuJiM0MztcdH1cbiYjNDM7XHRjbWQtXHUwMDNlY3BhZ2VzID0gYm91bmNlLmNwYWdlcztcbiYjNDM7XHRkbWlycm9yX2JvdW5jZV9maW5pKFx1MDAyNmJvdW5jZSk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGRtaXJyb3JfZG9fd3JpdGUoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4gXHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgZG1pcnJvcl9ib3VuY2UgKmJvdW5jZSlcbiB7XG5AQCAtMTU3Miw3ICYjNDM7MTY3NSw5IEBAIHN0YXRpYyBsb25nIGRtaXJyb3JfZm9wc191bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbiBcdFx0ZG1pcnJvci1cdTAwM2VmbGFncyA9IGNtZC5ucGFnZXM7XG4gXHRcdHJldCA9IDA7XG4gXHRcdGJyZWFrO1xuLVxuJiM0MztcdGNhc2UgSE1NX0RNSVJST1JfUkVBRF9VTkxPQ0tFRDpcbiYjNDM7XHRcdHJldCA9IGRtaXJyb3JfcmVhZF91bmxvY2tlZChkbWlycm9yLCBcdTAwMjZjbWQsIDApO1xuJiM0MztcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbmRpZmYgLS1naXQgYS9saWIvdGVzdF9obW1fdWFwaS5oIGIvbGliL3Rlc3RfaG1tX3VhcGkuaFxuaW5kZXggZjk0YzZkNDU3MzM4MjguLmVhOWIwZWM0MDRmYjU1IDEwMDY0NFxuLS0tIGEvbGliL3Rlc3RfaG1tX3VhcGkuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbGliL3Rlc3RfaG1tX3VhcGkuaFxuQEAgLTM4LDYgJiM0MzszOCw3IEBAIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQge1xuICNkZWZpbmUgSE1NX0RNSVJST1JfQ0hFQ0tfRVhDTFVTSVZFXHRfSU9XUigmIzM5O0gmIzM5OywgMHgwNiwgc3RydWN0IGhtbV9kbWlycm9yX2NtZClcbiAjZGVmaW5lIEhNTV9ETUlSUk9SX1JFTEVBU0VcdFx0X0lPV1IoJiMzOTtIJiMzOTssIDB4MDcsIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQpXG4gI2RlZmluZSBITU1fRE1JUlJPUl9GTEFHU1x0XHRfSU9XUigmIzM5O0gmIzM5OywgMHgwOCwgc3RydWN0IGhtbV9kbWlycm9yX2NtZClcbiYjNDM7I2RlZmluZSBITU1fRE1JUlJPUl9SRUFEX1VOTE9DS0VEXHRfSU9XUigmIzM5O0gmIzM5OywgMHgwOSwgc3RydWN0IGhtbV9kbWlycm9yX2NtZClcbiBcbiAjZGVmaW5lIEhNTV9ETUlSUk9SX0ZMQUdfRkFJTF9BTExPQ1x0KDFVTEwgXHUwMDNjXHUwMDNjIDApXG4gXG5kaWZmIC0tZ2l0IGEvbW0vaG1tLmMgYi9tbS9obW0uY1xuaW5kZXggZTVjMWY0ZGVlZDI0NDcuLmZjMmUxY2QwY2IyMmViIDEwMDY0NFxuLS0tIGEvbW0vaG1tLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2htbS5jXG5AQCAtMzIsOSAmIzQzOzMyLDI3IEBAXG4gXG4gc3RydWN0IGhtbV92bWFfd2FsayB7XG4gXHRzdHJ1Y3QgaG1tX3JhbmdlXHQqcmFuZ2U7XG4mIzQzO1x0Ym9vbFx0XHRcdCpsb2NrZWQ7XG4gXHR1bnNpZ25lZCBsb25nXHRcdGxhc3Q7XG4mIzQzO1x0dW5zaWduZWQgbG9uZ1x0XHRlbmQ7XG4mIzQzO1x0dW5zaWduZWQgaW50XHRcdHJlcXVpcmVkX2ZhdWx0O1xuIH07XG4gXG4mIzQzOy8qXG4mIzQzOyAqIEludGVybmFsIHNlbnRpbmVsIHJldHVybmVkIGJ5IHdhbGsgY2FsbGJhY2tzIHdoZW4gdGhleSBuZWVkIGEgcGFnZSBmYXVsdC5cbiYjNDM7ICogVGhlIGNhbGxiYWNrIHN0b3JlcyBlbmQvcmVxdWlyZWRfZmF1bHQgaW4gaG1tX3ZtYV93YWxrOyB0aGUgb3V0ZXIgbG9vcFxuJiM0MzsgKiBjb25zdW1lcyB0aGUgc2VudGluZWwgYW5kIG5ldmVyIHByb3BhZ2F0ZXMgaXQgdG8gdGhlIGNhbGxlci5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgSE1NX0ZBVUxUX1BFTkRJTkdcdC1FQUdBSU5cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEludGVybmFsIHNlbnRpbmVsIHJldHVybmVkIGJ5IGhtbV9kb19mYXVsdCgpIHdoZW4gaGFuZGxlX21tX2ZhdWx0KClcbiYjNDM7ICogY29tcGxldGVzIGEgcGFnZSBmYXVsdCB3aXRoIHRoZSBtbWFwIGxvY2sgZHJvcHBlZC4gaG1tX2RvX2ZhdWx0KCkgc2V0c1xuJiM0MzsgKiAqbG9ja2VkID0gZmFsc2U7IHRoZSBvdXRlciBsb29wIGNvbnN1bWVzIHRoZSBzZW50aW5lbCBhbmQgbmV2ZXIgcHJvcGFnYXRlc1xuJiM0MzsgKiBpdCB0byB0aGUgY2FsbGVyLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBITU1fRkFVTFRfVU5MT0NLRURcdC1FTk9MQ0tcbiYjNDM7XG4gZW51bSB7XG4gXHRITU1fTkVFRF9GQVVMVCA9IDEgXHUwMDNjXHUwMDNjIDAsXG4gXHRITU1fTkVFRF9XUklURV9GQVVMVCA9IDEgXHUwMDNjXHUwMDNjIDEsXG5AQCAtNjAsMzcgJiM0Mzs3OCwyNSBAQCBzdGF0aWMgaW50IGhtbV9wZm5zX2ZpbGwodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiB9XG4gXG4gLypcbi0gKiBobW1fdm1hX2ZhdWx0KCkgLSBmYXVsdCBpbiBhIHJhbmdlIGxhY2tpbmcgdmFsaWQgcG1kIG9yIHB0ZShzKVxuLSAqIEBhZGRyOiByYW5nZSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MgKGluY2x1c2l2ZSlcbi0gKiBAZW5kOiByYW5nZSB2aXJ0dWFsIGVuZCBhZGRyZXNzIChleGNsdXNpdmUpXG4tICogQHJlcXVpcmVkX2ZhdWx0OiBITU1fTkVFRF8qIGZsYWdzXG4tICogQHdhbGs6IG1tX3dhbGsgc3RydWN0dXJlXG4tICogUmV0dXJuOiAtRUJVU1kgYWZ0ZXIgcGFnZSBmYXVsdCwgb3IgcGFnZSBmYXVsdCBlcnJvclxuJiM0MzsgKiBobW1fcmVjb3JkX2ZhdWx0KCkgLSByZWNvcmQgYSByYW5nZSB0aGF0IG5lZWRzIHRvIGJlIGZhdWx0ZWQgaW5cbiAgKlxuLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgcG1kX25vbmUoKSBvciBwdGVfbm9uZSgpIHJldHVybnMgdHJ1ZSxcbi0gKiBvciB3aGVuZXZlciB0aGVyZSBpcyBubyBwYWdlIGRpcmVjdG9yeSBjb3ZlcmluZyB0aGUgdmlydHVhbCBhZGRyZXNzIHJhbmdlLlxuJiM0MzsgKiBDYWxsZWQgYnkgdGhlIHdhbGsgY2FsbGJhY2tzIHdoZW4gdGhleSBkaXNjb3ZlciB0aGF0IHBhcnQgb2YgdGhlIHJhbmdlXG4mIzQzOyAqIG5lZWRzIGEgcGFnZSBmYXVsdC4gIFRoZSBjYWxsYmFjayByZWNvcmRzIHdoYXQgdG8gZmF1bHQgYW5kIHJldHVybnNcbiYjNDM7ICogSE1NX0ZBVUxUX1BFTkRJTkc7IHRoZSBvdXRlciBsb29wIGluIGhtbV9yYW5nZV9mYXVsdF9sb2NrZWQoKSBkcm9wc1xuJiM0MzsgKiBiYWNrIG91dCBvZiB3YWxrX3BhZ2VfcmFuZ2UoKSBhbmQgaW52b2tlcyBoYW5kbGVfbW1fZmF1bHQoKSBmcm9tIGEgY29udGV4dFxuJiM0MzsgKiB3aGVyZSBubyBwYWdlLXRhYmxlIG9yIGh1Z2V0bGJfdm1hX2xvY2sgaXMgaGVsZC5cbiAgKi9cbi1zdGF0aWMgaW50IGhtbV92bWFfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi1cdFx0XHQgdW5zaWduZWQgaW50IHJlcXVpcmVkX2ZhdWx0LCBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcbiYjNDM7c3RhdGljIGludCBobW1fcmVjb3JkX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4mIzQzO1x0XHRcdCAgICB1bnNpZ25lZCBpbnQgcmVxdWlyZWRfZmF1bHQsXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcbiB7XG4gXHRzdHJ1Y3QgaG1tX3ZtYV93YWxrICpobW1fdm1hX3dhbGsgPSB3YWxrLVx1MDAzZXByaXZhdGU7XG4tXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstXHUwMDNldm1hO1xuLVx0dW5zaWduZWQgaW50IGZhdWx0X2ZsYWdzID0gRkFVTFRfRkxBR19SRU1PVEU7XG4gXG4gXHRXQVJOX09OX09OQ0UoIXJlcXVpcmVkX2ZhdWx0KTtcbiBcdGhtbV92bWFfd2Fsay1cdTAwM2VsYXN0ID0gYWRkcjtcbi1cbi1cdGlmIChyZXF1aXJlZF9mYXVsdCBcdTAwMjYgSE1NX05FRURfV1JJVEVfRkFVTFQpIHtcbi1cdFx0aWYgKCEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9XUklURSkpXG4tXHRcdFx0cmV0dXJuIC1FUEVSTTtcbi1cdFx0ZmF1bHRfZmxhZ3MgfD0gRkFVTFRfRkxBR19XUklURTtcbi1cdH1cbi1cbi1cdGZvciAoOyBhZGRyIFx1MDAzYyBlbmQ7IGFkZHIgJiM0Mzs9IFBBR0VfU0laRSlcbi1cdFx0aWYgKGhhbmRsZV9tbV9mYXVsdCh2bWEsIGFkZHIsIGZhdWx0X2ZsYWdzLCBOVUxMKSBcdTAwMjZcbi1cdFx0ICAgIFZNX0ZBVUxUX0VSUk9SKVxuLVx0XHRcdHJldHVybiAtRUZBVUxUO1xuLVx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XHRobW1fdm1hX3dhbGstXHUwMDNlZW5kID0gZW5kO1xuJiM0MztcdGhtbV92bWFfd2Fsay1cdTAwM2VyZXF1aXJlZF9mYXVsdCA9IHJlcXVpcmVkX2ZhdWx0O1xuJiM0MztcdHJldHVybiBITU1fRkFVTFRfUEVORElORztcbiB9XG4gXG4gc3RhdGljIHVuc2lnbmVkIGludCBobW1fcHRlX25lZWRfZmF1bHQoY29uc3Qgc3RydWN0IGhtbV92bWFfd2FsayAqaG1tX3ZtYV93YWxrLFxuQEAgLTE3NCw3ICYjNDM7MTgwLDcgQEAgc3RhdGljIGludCBobW1fdm1hX3dhbGtfaG9sZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRyZXR1cm4gaG1tX3BmbnNfZmlsbChhZGRyLCBlbmQsIHJhbmdlLCBITU1fUEZOX0VSUk9SKTtcbiBcdH1cbiBcdGlmIChyZXF1aXJlZF9mYXVsdClcbi1cdFx0cmV0dXJuIGhtbV92bWFfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XG4mIzQzO1x0XHRyZXR1cm4gaG1tX3JlY29yZF9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbiBcdHJldHVybiBobW1fcGZuc19maWxsKGFkZHIsIGVuZCwgcmFuZ2UsIDApO1xuIH1cbiBcbkBAIC0yMDksNyAmIzQzOzIxNSw3IEBAIHN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRyZXF1aXJlZF9mYXVsdCA9XG4gXHRcdGhtbV9yYW5nZV9uZWVkX2ZhdWx0KGhtbV92bWFfd2FsaywgaG1tX3BmbnMsIG5wYWdlcywgY3B1X2ZsYWdzKTtcbiBcdGlmIChyZXF1aXJlZF9mYXVsdClcbi1cdFx0cmV0dXJuIGhtbV92bWFfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XG4mIzQzO1x0XHRyZXR1cm4gaG1tX3JlY29yZF9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbiBcbiBcdHBmbiA9IHBtZF9wZm4ocG1kKSAmIzQzOyAoKGFkZHIgXHUwMDI2IH5QTURfTUFTSykgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuIFx0Zm9yIChpID0gMDsgYWRkciBcdTAwM2MgZW5kOyBhZGRyICYjNDM7PSBQQUdFX1NJWkUsIGkmIzQzOyYjNDM7LCBwZm4mIzQzOyYjNDM7KSB7XG5AQCAtMzI4LDcgJiM0MzszMzQsNyBAQCBzdGF0aWMgaW50IGhtbV92bWFfaGFuZGxlX3B0ZShzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBhZGRyLFxuIGZhdWx0OlxuIFx0cHRlX3VubWFwKHB0ZXApO1xuIFx0LyogRmF1bHQgYW55IHZpcnR1YWwgYWRkcmVzcyB3ZSB3ZXJlIGFza2VkIHRvIGZhdWx0ICovXG4tXHRyZXR1cm4gaG1tX3ZtYV9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbiYjNDM7XHRyZXR1cm4gaG1tX3JlY29yZF9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19BUkNIX0hBU19QTURfU09GVExFQVZFU1xuQEAgLTM3MSw3ICYjNDM7Mzc3LDcgQEAgc3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9hYnNlbnRfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuIFx0XHRcdFx0XHQgICAgICBucGFnZXMsIDApO1xuIFx0aWYgKHJlcXVpcmVkX2ZhdWx0KSB7XG4gXHRcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXG4tXHRcdFx0cmV0dXJuIGhtbV92bWFfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XG4mIzQzO1x0XHRcdHJldHVybiBobW1fcmVjb3JkX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspO1xuIFx0XHRlbHNlXG4gXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHR9XG5AQCAtNTE3LDcgJiM0Mzs1MjMsNyBAQCBzdGF0aWMgaW50IGhtbV92bWFfd2Fsa19wdWQocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRcdFx0XHRcdCAgICAgIG5wYWdlcywgY3B1X2ZsYWdzKTtcbiBcdFx0aWYgKHJlcXVpcmVkX2ZhdWx0KSB7XG4gXHRcdFx0c3Bpbl91bmxvY2socHRsKTtcbi1cdFx0XHRyZXR1cm4gaG1tX3ZtYV9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbiYjNDM7XHRcdFx0cmV0dXJuIGhtbV9yZWNvcmRfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XG4gXHRcdH1cbiBcbiBcdFx0cGZuID0gcHVkX3BmbihwdWQpICYjNDM7ICgoYWRkciBcdTAwMjYgflBVRF9NQVNLKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG5AQCAtNTY0LDIxICYjNDM7NTcwLDggQEAgc3RhdGljIGludCBobW1fdm1hX3dhbGtfaHVnZXRsYl9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxuIFx0cmVxdWlyZWRfZmF1bHQgPVxuIFx0XHRobW1fcHRlX25lZWRfZmF1bHQoaG1tX3ZtYV93YWxrLCBwZm5fcmVxX2ZsYWdzLCBjcHVfZmxhZ3MpO1xuIFx0aWYgKHJlcXVpcmVkX2ZhdWx0KSB7XG4tXHRcdGludCByZXQ7XG4tXG4gXHRcdHNwaW5fdW5sb2NrKHB0bCk7XG4tXHRcdGh1Z2V0bGJfdm1hX3VubG9ja19yZWFkKHZtYSk7XG4tXHRcdC8qXG4tXHRcdCAqIEF2b2lkIGRlYWRsb2NrOiBkcm9wIHRoZSB2bWEgbG9jayBiZWZvcmUgY2FsbGluZ1xuLVx0XHQgKiBobW1fdm1hX2ZhdWx0KCksIHdoaWNoIHdpbGwgaXRzZWxmIHBvdGVudGlhbGx5IHRha2UgYW5kXG4tXHRcdCAqIGRyb3AgdGhlIHZtYSBsb2NrLiBUaGlzIGlzIGFsc28gY29ycmVjdCBmcm9tIGFcbi1cdFx0ICogcHJvdGVjdGlvbiBwb2ludCBvZiB2aWV3LCBiZWNhdXNlIHRoZXJlIGlzIG5vIGZ1cnRoZXJcbi1cdFx0ICogdXNlIGhlcmUgb2YgZWl0aGVyIHB0ZSBvciBwdGwgYWZ0ZXIgZHJvcHBpbmcgdGhlIHZtYVxuLVx0XHQgKiBsb2NrLlxuLVx0XHQgKi9cbi1cdFx0cmV0ID0gaG1tX3ZtYV9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbi1cdFx0aHVnZXRsYl92bWFfbG9ja19yZWFkKHZtYSk7XG4tXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRyZXR1cm4gaG1tX3JlY29yZF9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbiBcdH1cbiBcbiBcdHBmbiA9IHB0ZV9wZm4oZW50cnkpICYjNDM7ICgoc3RhcnQgXHUwMDI2IH5obWFzaykgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuQEAgLTYzNywyOSAmIzQzOzYzMCw2NyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIGhtbV93YWxrX29wcyA9IHtcbiBcdC53YWxrX2xvY2tcdD0gUEdXQUxLX1JETE9DSyxcbiB9O1xuIFxuLS8qKlxuLSAqIGhtbV9yYW5nZV9mYXVsdCAtIHRyeSB0byBmYXVsdCBzb21lIGFkZHJlc3MgaW4gYSB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2Vcbi0gKiBAcmFuZ2U6XHRhcmd1bWVudCBzdHJ1Y3R1cmVcbi0gKlxuLSAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIGVycm9yIGNvZGVzOlxuJiM0MzsvKlxuJiM0MzsgKiBobW1fZG9fZmF1bHQgLSBmYXVsdCBpbiBhIHJhbmdlIHJlY29yZGVkIGJ5IGEgd2FsayBjYWxsYmFja1xuICAqXG4tICogLUVJTlZBTDpcdEludmFsaWQgYXJndW1lbnRzIG9yIG1tIG9yIHZpcnR1YWwgYWRkcmVzcyBpcyBpbiBhbiBpbnZhbGlkIHZtYVxuLSAqXHRcdChlLmcuLCBkZXZpY2UgZmlsZSB2bWEpLlxuLSAqIC1FTk9NRU06XHRPdXQgb2YgbWVtb3J5LlxuLSAqIC1FUEVSTTpcdEludmFsaWQgcGVybWlzc2lvbiAoZS5nLiwgYXNraW5nIGZvciB3cml0ZSBhbmQgcmFuZ2UgaXMgcmVhZFxuLSAqXHRcdG9ubHkpLlxuLSAqIC1FQlVTWTpcdFRoZSByYW5nZSBoYXMgYmVlbiBpbnZhbGlkYXRlZCBhbmQgdGhlIGNhbGxlciBuZWVkcyB0byB3YWl0IGZvclxuLSAqXHRcdHRoZSBpbnZhbGlkYXRpb24gdG8gZmluaXNoLlxuLSAqIC1FRkFVTFQ6ICAgICBBIHBhZ2Ugd2FzIHJlcXVlc3RlZCB0byBiZSB2YWxpZCBhbmQgY291bGQgbm90IGJlIG1hZGUgdmFsaWRcbi0gKiAgICAgICAgICAgICAgaWUgaXQgaGFzIG5vIGJhY2tpbmcgVk1BIG9yIGl0IGlzIGlsbGVnYWwgdG8gYWNjZXNzXG4mIzQzOyAqIENhbGxlZCBmcm9tIHRoZSBvdXRlciBsb29wIGluIGhtbV9yYW5nZV9mYXVsdF9sb2NrZWQoKSBhZnRlciBhIGNhbGxiYWNrXG4mIzQzOyAqIHJldHVybmVkIEhNTV9GQVVMVF9QRU5ESU5HLiAgQXQgdGhpcyBwb2ludCB3ZSBob2xkIG9ubHkgbW1hcF9sb2NrO1xuJiM0MzsgKiB0aGUgcGFnZS10YWJsZSBzcGlubG9jayBhbmQgYW55IGh1Z2V0bGJfdm1hX2xvY2sgYWNxdWlyZWQgYnkgdGhlIHdhbGtcbiYjNDM7ICogZnJhbWV3b3JrIGhhdmUgYWxyZWFkeSBiZWVuIHJlbGVhc2VkIGJ5IHRoZSB1bndpbmQuXG4gICpcbi0gKiBUaGlzIGlzIHNpbWlsYXIgdG8gZ2V0X3VzZXJfcGFnZXMoKSwgZXhjZXB0IHRoYXQgaXQgY2FuIHJlYWQgdGhlIHBhZ2UgdGFibGVzXG4tICogd2l0aG91dCBtdXRhdGluZyB0aGVtIChpZSBjYXVzaW5nIGZhdWx0cykuXG4mIzQzOyAqIFJldHVybnMgLUVCVVNZIG9uIHN1Y2Nlc3MgKGFsbCBwYWdlcyBmYXVsdGVkLCBjYWxsZXIgc2hvdWxkIHJlLXdhbGspLlxuJiM0MzsgKiBSZXR1cm5zIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS5cbiAgKi9cbi1pbnQgaG1tX3JhbmdlX2ZhdWx0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKVxuJiM0MztzdGF0aWMgaW50IGhtbV9kb19mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiYjNDM7XHRcdFx0c3RydWN0IGhtbV92bWFfd2FsayAqaG1tX3ZtYV93YWxrKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBhZGRyID0gaG1tX3ZtYV93YWxrLVx1MDAzZWxhc3Q7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBlbmQgPSBobW1fdm1hX3dhbGstXHUwMDNlZW5kO1xuJiM0MztcdHVuc2lnbmVkIGludCByZXF1aXJlZF9mYXVsdCA9IGhtbV92bWFfd2Fsay1cdTAwM2VyZXF1aXJlZF9mYXVsdDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZmF1bHRfZmxhZ3MgPSBGQVVMVF9GTEFHX1JFTU9URTtcbiYjNDM7XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbiYjNDM7XG4mIzQzO1x0aWYgKGhtbV92bWFfd2Fsay1cdTAwM2Vsb2NrZWQpXG4mIzQzO1x0XHRmYXVsdF9mbGFncyB8PSBGQVVMVF9GTEFHX0FMTE9XX1JFVFJZIHwgRkFVTFRfRkxBR19LSUxMQUJMRTtcbiYjNDM7XG4mIzQzO1x0dm1hID0gdm1hX2xvb2t1cChtbSwgYWRkcik7XG4mIzQzO1x0aWYgKCF2bWEpXG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XG4mIzQzO1x0aWYgKHJlcXVpcmVkX2ZhdWx0IFx1MDAyNiBITU1fTkVFRF9XUklURV9GQVVMVCkge1xuJiM0MztcdFx0aWYgKCEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9XUklURSkpXG4mIzQzO1x0XHRcdHJldHVybiAtRVBFUk07XG4mIzQzO1x0XHRmYXVsdF9mbGFncyB8PSBGQVVMVF9GTEFHX1dSSVRFO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yICg7IGFkZHIgXHUwMDNjIGVuZDsgYWRkciAmIzQzOz0gUEFHRV9TSVpFKSB7XG4mIzQzO1x0XHR2bV9mYXVsdF90IHJldDtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBoYW5kbGVfbW1fZmF1bHQodm1hLCBhZGRyLCBmYXVsdF9mbGFncywgTlVMTCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwMjYgKFZNX0ZBVUxUX0NPTVBMRVRFRCB8IFZNX0ZBVUxUX1JFVFJZKSkge1xuJiM0MztcdFx0XHQqaG1tX3ZtYV93YWxrLVx1MDAzZWxvY2tlZCA9IGZhbHNlO1xuJiM0MztcdFx0XHRyZXR1cm4gSE1NX0ZBVUxUX1VOTE9DS0VEO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDI2IFZNX0ZBVUxUX0VSUk9SKSB7XG4mIzQzO1x0XHRcdGludCBlcnIgPSB2bV9mYXVsdF90b19lcnJubyhyZXQsIDApO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKFdBUk5fT04oIWVycikpXG4mIzQzO1x0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gLUVCVVNZO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGhtbV9yYW5nZV9mYXVsdF9sb2NrZWQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsIGJvb2wgKmxvY2tlZClcbiB7XG4gXHRzdHJ1Y3QgaG1tX3ZtYV93YWxrIGhtbV92bWFfd2FsayA9IHtcbiBcdFx0LnJhbmdlID0gcmFuZ2UsXG4mIzQzO1x0XHQubG9ja2VkID0gbG9ja2VkLFxuIFx0XHQubGFzdCA9IHJhbmdlLVx1MDAzZXN0YXJ0LFxuIFx0fTtcbiBcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gcmFuZ2UtXHUwMDNlbm90aWZpZXItXHUwMDNlbW07XG5AQCAtNjc0LDYgJiM0Mzs3MDUsMjIgQEAgaW50IGhtbV9yYW5nZV9mYXVsdChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSlcbiBcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIFx0XHRyZXQgPSB3YWxrX3BhZ2VfcmFuZ2UobW0sIGhtbV92bWFfd2Fsay5sYXN0LCByYW5nZS1cdTAwM2VlbmQsXG4gXHRcdFx0XHQgICAgICBcdTAwMjZobW1fd2Fsa19vcHMsIFx1MDAyNmhtbV92bWFfd2Fsayk7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogV2hlbiBITU1fRkFVTFRfUEVORElORyBpcyByZXR1cm5lZCBhIHdhbGsgY2FsbGJhY2tcbiYjNDM7XHRcdCAqIHJlY29yZGVkIGEgcmFuZ2UgdGhhdCBuZWVkcyBoYW5kbGVfbW1fZmF1bHQoKTtcbiYjNDM7XHRcdCAqIGhtbV9kb19mYXVsdCgpIHJ1bnMgdGhlIGZhdWx0IG91dHNpZGUgd2Fsa19wYWdlX3JhbmdlKClcbiYjNDM7XHRcdCAqIChzbyBubyBwYWdlLXRhYmxlIG9yIGh1Z2V0bGJfdm1hX2xvY2sgaXMgaGVsZCkgYW5kXG4mIzQzO1x0XHQgKiByZXR1cm5zIC1FQlVTWSBzbyB0aGUgbG9vcCByZS13YWxrcyBhbmQgcGlja3MgdXAgdGhlXG4mIzQzO1x0XHQgKiBub3ctcHJlc2VudCBlbnRyaWVzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAocmV0ID09IEhNTV9GQVVMVF9QRU5ESU5HKSB7XG4mIzQzO1x0XHRcdHJldCA9IGhtbV9kb19mYXVsdChtbSwgXHUwMDI2aG1tX3ZtYV93YWxrKTtcbiYjNDM7XHRcdFx0aWYgKHJldCA9PSBITU1fRkFVTFRfVU5MT0NLRUQpIHtcbiYjNDM7XHRcdFx0XHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4mIzQzO1x0XHRcdFx0XHRyZXR1cm4gLUVJTlRSO1xuJiM0MztcdFx0XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiBcdFx0LypcbiBcdFx0ICogV2hlbiAtRUJVU1kgaXMgcmV0dXJuZWQgdGhlIGxvb3AgcmVzdGFydHMgd2l0aFxuIFx0XHQgKiBobW1fdm1hX3dhbGsubGFzdCBzZXQgdG8gYW4gYWRkcmVzcyB0aGF0IGhhcyBub3QgYmVlbiBzdG9yZWRcbkBAIC02ODMsOCAmIzQzOzczMCwxMDAgQEAgaW50IGhtbV9yYW5nZV9mYXVsdChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSlcbiBcdH0gd2hpbGUgKHJldCA9PSAtRUJVU1kpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogaG1tX3JhbmdlX2ZhdWx0IC0gdHJ5IHRvIGZhdWx0IHNvbWUgYWRkcmVzcyBpbiBhIHZpcnR1YWwgYWRkcmVzcyByYW5nZVxuJiM0MzsgKiBAcmFuZ2U6XHRhcmd1bWVudCBzdHJ1Y3R1cmVcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgZXJyb3IgY29kZXM6XG4mIzQzOyAqXG4mIzQzOyAqIC1FSU5WQUw6XHRJbnZhbGlkIGFyZ3VtZW50cyBvciBtbSBvciB2aXJ0dWFsIGFkZHJlc3MgaXMgaW4gYW4gaW52YWxpZCB2bWFcbiYjNDM7ICpcdFx0KGUuZy4sIGRldmljZSBmaWxlIHZtYSkuXG4mIzQzOyAqIC1FTk9NRU06XHRPdXQgb2YgbWVtb3J5LlxuJiM0MzsgKiAtRVBFUk06XHRJbnZhbGlkIHBlcm1pc3Npb24gKGUuZy4sIGFza2luZyBmb3Igd3JpdGUgYW5kIHJhbmdlIGlzIHJlYWRcbiYjNDM7ICpcdFx0b25seSkuXG4mIzQzOyAqIC1FQlVTWTpcdFRoZSByYW5nZSBoYXMgYmVlbiBpbnZhbGlkYXRlZCBhbmQgdGhlIGNhbGxlciBuZWVkcyB0byB3YWl0IGZvclxuJiM0MzsgKlx0XHR0aGUgaW52YWxpZGF0aW9uIHRvIGZpbmlzaC5cbiYjNDM7ICogLUVGQVVMVDogICAgIEEgcGFnZSB3YXMgcmVxdWVzdGVkIHRvIGJlIHZhbGlkIGFuZCBjb3VsZCBub3QgYmUgbWFkZSB2YWxpZFxuJiM0MzsgKiAgICAgICAgICAgICAgaWUgaXQgaGFzIG5vIGJhY2tpbmcgVk1BIG9yIGl0IGlzIGlsbGVnYWwgdG8gYWNjZXNzXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgaXMgc2ltaWxhciB0byBnZXRfdXNlcl9wYWdlcygpLCBleGNlcHQgdGhhdCBpdCBjYW4gcmVhZCB0aGUgcGFnZSB0YWJsZXNcbiYjNDM7ICogd2l0aG91dCBtdXRhdGluZyB0aGVtIChpZSBjYXVzaW5nIGZhdWx0cykuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBtbWFwIGxvY2sgbXVzdCBiZSBoZWxkIGJ5IHRoZSBjYWxsZXIgYW5kIHdpbGwgcmVtYWluIGhlbGQgb24gcmV0dXJuLlxuJiM0MzsgKiBOZXcgdXNlcnMgc2hvdWxkIHByZWZlciBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpIHVubGVzcyB0aGV5XG4mIzQzOyAqIHNwZWNpZmljYWxseSBuZWVkIHRvIGtlZXAgdGhlIG1tYXAgbG9jayBoZWxkIGFjcm9zcyB0aGUgY2FsbC4gVGhpcyBoZWxwZXJcbiYjNDM7ICogY2Fubm90IHN1cHBvcnQgVk1BcyB3aG9zZSBmYXVsdCBoYW5kbGVycyBuZWVkIHRvIGRyb3AgdGhlIG1tYXAgbG9jay5cbiYjNDM7ICovXG4mIzQzO2ludCBobW1fcmFuZ2VfZmF1bHQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZChyYW5nZSwgTlVMTCk7XG4mIzQzO31cbiBFWFBPUlRfU1lNQk9MKGhtbV9yYW5nZV9mYXVsdCk7XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCAtIGZhdWx0IGluIGEgcmFuZ2Ugd2l0aCBhIHJldHJ5IHRpbWVvdXRcbiYjNDM7ICogQHJhbmdlOlx0YXJndW1lbnQgc3RydWN0dXJlXG4mIzQzOyAqIEB0aW1lb3V0Olx0dGltZW91dCBpbiBqaWZmaWVzIGZvciBpbnRlcm5hbCAtRUJVU1kgcmV0cmllcywgb3IgMCB0byByZXRyeVxuJiM0MzsgKlx0XHRpbmRlZmluaXRlbHlcbiYjNDM7ICpcbiYjNDM7ICogVGhlIGNhbGxlciBtdXN0IG5vdCBob2xkIHRoZSBtbWFwIGxvY2suIFRoZSBmdW5jdGlvbiB0YWtlcyB0aGUgbW1hcCByZWFkXG4mIzQzOyAqIGxvY2sgaW50ZXJuYWxseSBhbmQgYWxsb3dzIGhhbmRsZV9tbV9mYXVsdCgpIHRvIGRyb3AgaXQgZHVyaW5nIGZhdWx0cy4gSWZcbiYjNDM7ICogdGhlIG1tYXAgbG9jayBpcyBkcm9wcGVkIG9yIHRoZSByYW5nZSBpcyBpbnZhbGlkYXRlZCwgdGhlIGZ1bmN0aW9uIHJlZnJlc2hlc1xuJiM0MzsgKiByYW5nZS1cdTAwM2Vub3RpZmllcl9zZXEgYW5kIHJlc3RhcnRzIHRoZSB3YWxrIGludGVybmFsbHkuXG4mIzQzOyAqXG4mIzQzOyAqIFBhc3NpbmcgMCBmb3IgQHRpbWVvdXQgcmV0cmllcyBpbmRlZmluaXRlbHkuIEEgbm9uLXplcm8gQHRpbWVvdXQgaXMgYSBjYWxsZXJcbiYjNDM7ICogcG9saWN5IGxpbWl0IGZvciByZXBlYXRlZCBtbXUtbm90aWZpZXIgaW52YWxpZGF0aW9uIHJldHJpZXMuIEhNTSBkb2VzIG5vdFxuJiM0MzsgKiBpbnRlcnJ1cHQgcGFnZSBmYXVsdCBoYW5kbGluZyB3aGVuIHRoZSB0aW1lb3V0IGV4cGlyZXMsIGJ1dCByZXR1cm5zIC1FQlVTWVxuJiM0MzsgKiBpZiB0aGUgcmV0cnkgYnVkZ2V0IGlzIGV4aGF1c3RlZCBiZWZvcmUgYSBzdGFibGUgcmFuZ2UgaXMgb2J0YWluZWQuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG9uZSBvZiB0aGUgZXJyb3IgY29kZXMgZG9jdW1lbnRlZCBmb3JcbiYjNDM7ICogaG1tX3JhbmdlX2ZhdWx0KCkuIC1FSU5UUiBpcyByZXR1cm5lZCBpZiBtbWFwX2xvY2sgYWNxdWlzaXRpb24gaXNcbiYjNDM7ICogaW50ZXJydXB0ZWQgb3IgYSBmYXRhbCBzaWduYWwgaXMgcGVuZGluZyBkdXJpbmcgcmV0cnkgaGFuZGxpbmcuXG4mIzQzOyAqL1xuJiM0MztpbnQgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsXG4mIzQzO1x0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHJhbmdlLVx1MDAzZW5vdGlmaWVyLVx1MDAzZW1tO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUgPSAwO1xuJiM0MztcdGJvb2wgbG9ja2VkID0gZmFsc2U7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0aWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlRSO1xuJiM0MztcbiYjNDM7XHRcdGlmICh0aW1lb3V0KSB7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIElmIHRoZSBwcmV2aW91cyBmYXVsdCBkcm9wcGVkIG1tYXBfbG9jaywgdGhlbiB0aGUgZmF1bHRcbiYjNDM7XHRcdFx0ICogaGFuZGxlciBtYWRlIHByb2dyZXNzLiBSZXN0YXJ0IHRoZSByZXRyeSB0aW1lb3V0IGluIHRoYXRcbiYjNDM7XHRcdFx0ICogY2FzZSwgYnV0IGtlZXAgdGhlIGV4aXN0aW5nIGRlYWRsaW5lIGZvciBvcmRpbmFyeSAtRUJVU1lcbiYjNDM7XHRcdFx0ICogcmV0cmllcy5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGlmICghbG9ja2VkKVxuJiM0MztcdFx0XHRcdGRlYWRsaW5lID0gamlmZmllcyAmIzQzOyB0aW1lb3V0O1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZGVhZGxpbmUpKVxuJiM0MztcdFx0XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cmFuZ2UtXHUwMDNlbm90aWZpZXJfc2VxID1cbiYjNDM7XHRcdFx0bW11X2ludGVydmFsX3JlYWRfYmVnaW4ocmFuZ2UtXHUwMDNlbm90aWZpZXIpO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKG1tKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0bG9ja2VkID0gdHJ1ZTtcbiYjNDM7XHRcdHJldCA9IGhtbV9yYW5nZV9mYXVsdF9sb2NrZWQocmFuZ2UsIFx1MDAyNmxvY2tlZCk7XG4mIzQzO1x0XHRpZiAobG9ja2VkKVxuJiM0MztcdFx0XHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbiYjNDM7XHR9IHdoaWxlIChyZXQgPT0gLUVCVVNZKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KTtcbiYjNDM7XG4gLyoqXG4gICogaG1tX2RtYV9tYXBfYWxsb2MgLSBBbGxvY2F0ZSBITU0gbWFwIHN0cnVjdHVyZVxuICAqIEBkZXY6IGRldmljZSB0byBhbGxvY2F0ZSBzdHJ1Y3R1cmUgZm9yXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xuaW5kZXggNmZjY2JkYWIwMmVlODEuLjVhY2I3Mjg2NjZmOGMxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jXG5AQCAtMjksNiAmIzQzOzI5LDEwIEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9pb2N0bC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3RpbWUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9ldmVudGZkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdXNlcmZhdWx0ZmQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2Nwb2xsLmhcdTAwM2VcbiBcbiAvKlxuICAqIFRoaXMgaXMgYSBwcml2YXRlIFVBUEkgdG8gdGhlIGtlcm5lbCB0ZXN0IG1vZHVsZSBzbyBpdCBpc24mIzM5O3QgZXhwb3J0ZWRcbkBAIC0yOTUyLDQgJiM0MzsyOTU2LDE1MCBAQCBURVNUX0ZfVElNRU9VVChobW0sIGJlbmNobWFya190aHBfbWlncmF0aW9uLCAxMjApXG4gXHRcdFx0XHRcdFx1MDAyNnRocF9yZXN1bHRzLCBcdTAwMjZyZWd1bGFyX3Jlc3VsdHMpO1xuIFx0fVxuIH1cbiYjNDM7LypcbiYjNDM7ICogVGVzdCB0aGF0IEhNTSBjYW4gZmF1bHQgaW4gcGFnZXMgYmFja2VkIGJ5IHVzZXJmYXVsdGZkIHVzaW5nIHRoZVxuJiM0MzsgKiBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpIHBhdGggd2l0aCBubyB0aW1lb3V0LiBUaGlzIGV4ZXJjaXNlc1xuJiM0MzsgKiB0aGUgbG9jay1kcm9wIHJldHJ5IGxvZ2ljIGluIHRoZSBITU0gZnJhbWV3b3JrLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHVmZmRfdGhyZWFkX2FyZ3Mge1xuJiM0MztcdGludCB1ZmZkO1xuJiM0MztcdGludCBzdG9wX2ZkO1xuJiM0MztcdHZvaWQgKnBhZ2VfYnVmZmVyO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgcGFnZV9zaXplO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgKnVmZmRfaGFuZGxlcl90aHJlYWQodm9pZCAqYXJnKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHVmZmRfdGhyZWFkX2FyZ3MgKmFyZ3MgPSBhcmc7XG4mIzQzO1x0c3RydWN0IHVmZmRfbXNnIG1zZztcbiYjNDM7XHRzdHJ1Y3QgdWZmZGlvX2NvcHkgY29weTtcbiYjNDM7XHRzdHJ1Y3QgcG9sbGZkIHBvbGxmZFsyXTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRwb2xsZmRbMF0uZmQgPSBhcmdzLVx1MDAzZXVmZmQ7XG4mIzQzO1x0cG9sbGZkWzBdLmV2ZW50cyA9IFBPTExJTjtcbiYjNDM7XHRwb2xsZmRbMV0uZmQgPSBhcmdzLVx1MDAzZXN0b3BfZmQ7XG4mIzQzO1x0cG9sbGZkWzFdLmV2ZW50cyA9IFBPTExJTjtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKDEpIHtcbiYjNDM7XHRcdHJldCA9IHBvbGwocG9sbGZkLCAyLCAtMSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYz0gMClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRpZiAocG9sbGZkWzFdLnJldmVudHMpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0aWYgKCEocG9sbGZkWzBdLnJldmVudHMgXHUwMDI2IFBPTExJTikpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHJlYWQoYXJncy1cdTAwM2V1ZmZkLCBcdTAwMjZtc2csIHNpemVvZihtc2cpKTtcbiYjNDM7XHRcdGlmIChyZXQgIT0gc2l6ZW9mKG1zZykpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdGlmIChtc2cuZXZlbnQgIT0gVUZGRF9FVkVOVF9QQUdFRkFVTFQpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdC8qIEZpbGwgdGhlIHBhZ2Ugd2l0aCBhIGtub3duIHBhdHRlcm4gKi9cbiYjNDM7XHRcdG1lbXNldChhcmdzLVx1MDAzZXBhZ2VfYnVmZmVyLCAweEFCLCBhcmdzLVx1MDAzZXBhZ2Vfc2l6ZSk7XG4mIzQzO1xuJiM0MztcdFx0Y29weS5kc3QgPSBtc2cuYXJnLnBhZ2VmYXVsdC5hZGRyZXNzIFx1MDAyNiB+KGFyZ3MtXHUwMDNlcGFnZV9zaXplIC0gMSk7XG4mIzQzO1x0XHRjb3B5LnNyYyA9ICh1bnNpZ25lZCBsb25nKWFyZ3MtXHUwMDNlcGFnZV9idWZmZXI7XG4mIzQzO1x0XHRjb3B5LmxlbiA9IGFyZ3MtXHUwMDNlcGFnZV9zaXplO1xuJiM0MztcdFx0Y29weS5tb2RlID0gMDtcbiYjNDM7XHRcdGNvcHkuY29weSA9IDA7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gaW9jdGwoYXJncy1cdTAwM2V1ZmZkLCBVRkZESU9fQ09QWSwgXHUwMDI2Y29weSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0YoaG1tLCB1c2VyZmF1bHRmZF9yZWFkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGhtbV9idWZmZXIgKmJ1ZmZlcjtcbiYjNDM7XHRzdHJ1Y3QgdWZmZF90aHJlYWRfYXJncyB1ZmZkX2FyZ3M7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBucGFnZXM7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzaXplO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaTtcbiYjNDM7XHR1bnNpZ25lZCBjaGFyICpwdHI7XG4mIzQzO1x0cHRocmVhZF90IHRocmVhZDtcbiYjNDM7XHRpbnQgdWZmZDtcbiYjNDM7XHRpbnQgc3RvcF9mZDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdHN0cnVjdCB1ZmZkaW9fYXBpIGFwaTtcbiYjNDM7XHRzdHJ1Y3QgdWZmZGlvX3JlZ2lzdGVyIHJlZztcbiYjNDM7XHR1aW50NjRfdCBzdG9wID0gMTtcbiYjNDM7XHRzc2l6ZV90IG53cml0ZTtcbiYjNDM7XG4mIzQzO1x0bnBhZ2VzID0gNDtcbiYjNDM7XHRzaXplID0gbnBhZ2VzIFx1MDAzY1x1MDAzYyBzZWxmLVx1MDAzZXBhZ2Vfc2hpZnQ7XG4mIzQzO1xuJiM0MztcdC8qIENyZWF0ZSB1c2VyZmF1bHRmZCAqL1xuJiM0MztcdHVmZmQgPSBzeXNjYWxsKF9fTlJfdXNlcmZhdWx0ZmQsIE9fQ0xPRVhFQyB8IE9fTk9OQkxPQ0spO1xuJiM0MztcdGlmICh1ZmZkIFx1MDAzYyAwKVxuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O3VzZXJmYXVsdGZkIG5vdCBhdmFpbGFibGVcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRhcGkuYXBpID0gVUZGRF9BUEk7XG4mIzQzO1x0YXBpLmZlYXR1cmVzID0gMDtcbiYjNDM7XHRyZXQgPSBpb2N0bCh1ZmZkLCBVRkZESU9fQVBJLCBcdTAwMjZhcGkpO1xuJiM0MztcdEFTU0VSVF9FUShyZXQsIDApO1xuJiM0MztcbiYjNDM7XHRidWZmZXIgPSBtYWxsb2Moc2l6ZW9mKCpidWZmZXIpKTtcbiYjNDM7XHRBU1NFUlRfTkUoYnVmZmVyLCBOVUxMKTtcbiYjNDM7XG4mIzQzO1x0YnVmZmVyLVx1MDAzZWZkID0gLTE7XG4mIzQzO1x0YnVmZmVyLVx1MDAzZXNpemUgPSBzaXplO1xuJiM0MztcdGJ1ZmZlci1cdTAwM2VtaXJyb3IgPSBtYWxsb2Moc2l6ZSk7XG4mIzQzO1x0QVNTRVJUX05FKGJ1ZmZlci1cdTAwM2VtaXJyb3IsIE5VTEwpO1xuJiM0MztcbiYjNDM7XHQvKiBDcmVhdGUgYW5vbnltb3VzIG1hcHBpbmcgKi9cbiYjNDM7XHRidWZmZXItXHUwMDNlcHRyID0gbW1hcChOVUxMLCBzaXplLFxuJiM0MztcdFx0XHQgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuJiM0MztcdFx0XHQgICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsXG4mIzQzO1x0XHRcdCAgIC0xLCAwKTtcbiYjNDM7XHRBU1NFUlRfTkUoYnVmZmVyLVx1MDAzZXB0ciwgTUFQX0ZBSUxFRCk7XG4mIzQzO1xuJiM0MztcdC8qIFJlZ2lzdGVyIHRoZSByZWdpb24gd2l0aCB1c2VyZmF1bHRmZCAqL1xuJiM0MztcdHJlZy5yYW5nZS5zdGFydCA9ICh1bnNpZ25lZCBsb25nKWJ1ZmZlci1cdTAwM2VwdHI7XG4mIzQzO1x0cmVnLnJhbmdlLmxlbiA9IHNpemU7XG4mIzQzO1x0cmVnLm1vZGUgPSBVRkZESU9fUkVHSVNURVJfTU9ERV9NSVNTSU5HO1xuJiM0MztcdHJldCA9IGlvY3RsKHVmZmQsIFVGRkRJT19SRUdJU1RFUiwgXHUwMDI2cmVnKTtcbiYjNDM7XHRBU1NFUlRfRVEocmV0LCAwKTtcbiYjNDM7XG4mIzQzO1x0LyogU2V0IHVwIHRoZSBoYW5kbGVyIHRocmVhZCAqL1xuJiM0MztcdHVmZmRfYXJncy51ZmZkID0gdWZmZDtcbiYjNDM7XHRzdG9wX2ZkID0gZXZlbnRmZCgwLCBFRkRfQ0xPRVhFQyk7XG4mIzQzO1x0QVNTRVJUX0dFKHN0b3BfZmQsIDApO1xuJiM0MztcdHVmZmRfYXJncy5zdG9wX2ZkID0gc3RvcF9mZDtcbiYjNDM7XHR1ZmZkX2FyZ3MucGFnZV9idWZmZXIgPSBtYWxsb2Moc2VsZi1cdTAwM2VwYWdlX3NpemUpO1xuJiM0MztcdEFTU0VSVF9ORSh1ZmZkX2FyZ3MucGFnZV9idWZmZXIsIE5VTEwpO1xuJiM0MztcdHVmZmRfYXJncy5wYWdlX3NpemUgPSBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkLCBOVUxMLCB1ZmZkX2hhbmRsZXJfdGhyZWFkLCBcdTAwMjZ1ZmZkX2FyZ3MpO1xuJiM0MztcdEFTU0VSVF9FUShyZXQsIDApO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFVzZSB0aGUgdW5sb2NrZWQgcmVhZCBwYXRoIHdoaWNoIGFsbG93cyB0aGUgbW1hcCBsb2NrIHRvIGJlXG4mIzQzO1x0ICogZHJvcHBlZCBkdXJpbmcgdGhlIGZhdWx0LCBlbmFibGluZyB1c2VyZmF1bHRmZCByZXNvbHV0aW9uLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVx1MDAzZWZkLCBITU1fRE1JUlJPUl9SRUFEX1VOTE9DS0VELFxuJiM0MztcdFx0XHQgICAgICBidWZmZXIsIG5wYWdlcyk7XG4mIzQzO1x0QVNTRVJUX0VRKHJldCwgMCk7XG4mIzQzO1x0QVNTRVJUX0VRKGJ1ZmZlci1cdTAwM2VjcGFnZXMsIG5wYWdlcyk7XG4mIzQzO1xuJiM0MztcdC8qIFZlcmlmeSB0aGUgZGV2aWNlIHJlYWQgdGhlIGRhdGEgZmlsbGVkIGJ5IHRoZSB1ZmZkIGhhbmRsZXIgKi9cbiYjNDM7XHRwdHIgPSBidWZmZXItXHUwMDNlbWlycm9yO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNpemU7ICYjNDM7JiM0MztpKVxuJiM0MztcdFx0QVNTRVJUX0VRKHB0cltpXSwgKHVuc2lnbmVkIGNoYXIpMHhBQik7XG4mIzQzO1xuJiM0MztcdG53cml0ZSA9IHdyaXRlKHN0b3BfZmQsIFx1MDAyNnN0b3AsIHNpemVvZihzdG9wKSk7XG4mIzQzO1x0QVNTRVJUX0VRKG53cml0ZSwgc2l6ZW9mKHN0b3ApKTtcbiYjNDM7XHRwdGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKTtcbiYjNDM7XHRjbG9zZShzdG9wX2ZkKTtcbiYjNDM7XHRmcmVlKHVmZmRfYXJncy5wYWdlX2J1ZmZlcik7XG4mIzQzO1x0Y2xvc2UodWZmZCk7XG4mIzQzO1x0aG1tX2J1ZmZlcl9mcmVlKGJ1ZmZlcik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1xuIFRFU1RfSEFSTkVTU19NQUlOXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6MDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VEVTVF9ITU0mIzM0OywKICAgICYjMzQ7RFJNX0FDQ0VMX0FNRFhETkEmIzM0OywKICAgICYjMzQ7RFJNX0dQVVNWTSYjMzQ7LAogICAgJiMzNDtEUk1fTk9VVkVBVV9TVk0mIzM0OywKICAgICYjMzQ7TVNIVl9ST09UJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkRfT05fREVNQU5EX1BBR0lORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2htbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0JiMzNDssCiAgICAmIzM0O2htbV9yYW5nZV9mYXVsdCYjMzQ7LAogICAgJiMzNDtobW1fZG9fZmF1bHQmIzM0OywKICAgICYjMzQ7aG1tX3JhbmdlX2ZhdWx0X2xvY2tlZCYjMzQ7LAogICAgJiMzNDtobW1fcmVjb3JkX2ZhdWx0JiMzNDssCiAgICAmIzM0O2RtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWQmIzM0OywKICAgICYjMzQ7ZG1pcnJvcl9mYXVsdF91bmxvY2tlZCYjMzQ7LAogICAgJiMzNDtkbWlycm9yX3JlYWRfdW5sb2NrZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyB1bmxvY2tlZCB0aW1lb3V0IHZhcmlhbnQgZm9yIEhNTSByYW5nZSBmYXVsdHMgKGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGApIGFuZCByZWZhY3RvcnMgdGhlIGV4aXN0aW5nIGBobW1fcmFuZ2VfZmF1bHRgIHRvIHVzZSBhIGxvY2tlZCBoZWxwZXIuIEl0IGFsc28gdXBkYXRlcyBzZXZlcmFsIGRyaXZlcnMgYW5kIHRoZSBITU0gdGVzdCBtb2R1bGUgdG8gdXNlIHRoZSBuZXcgdW5sb2NrZWQgdmFyaWFudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRldmljZSBkcml2ZXIgaW50ZXJhY3Rpb24sIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgcmV0cnkgYW5kIGxvY2tpbmcgbG9naWMgaXMgcm9idXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiZDA4MTI2NDY4YTNkMjg4ZTM5NmZkNmU2ZjY5YTlmYzJjNzBhNjU5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMTYgMDA6MDk6MDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QKaW5kZXggN2Q2MWI3YThiNjViNzkuLmUwMjEyMThhZGE1OGZlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0CkBAIC0xNTYsNDIgJiM0MzsxNTYsNTcgQEAgRHVyaW5nIHRoZSBvcHMtJmd0O2ludmFsaWRhdGUoKSBjYWxsYmFjayB0aGUgZGV2aWNlIGRyaXZlciBtdXN0IHBlcmZvcm0gdGhlCiB1cGRhdGUgYWN0aW9uIHRvIHRoZSByYW5nZSAobWFyayByYW5nZSByZWFkIG9ubHksIG9yIGZ1bGx5IHVubWFwLCBldGMuKS4gVGhlCiBkZXZpY2UgbXVzdCBjb21wbGV0ZSB0aGUgdXBkYXRlIGJlZm9yZSB0aGUgZHJpdmVyIGNhbGxiYWNrIHJldHVybnMuCiAKLVdoZW4gdGhlIGRldmljZSBkcml2ZXIgd2FudHMgdG8gcG9wdWxhdGUgYSByYW5nZSBvZiB2aXJ0dWFsIGFkZHJlc3NlcywgaXQgY2FuCi11c2U6OgomIzQzO1doZW4gdGhlIGRldmljZSBkcml2ZXIgd2FudHMgdG8gcG9wdWxhdGUgYSByYW5nZSBvZiB2aXJ0dWFsIGFkZHJlc3NlcywgdGhlCiYjNDM7bm9ybWFsIGludGVyZmFjZSBpczo6CiAKLSAgaW50IGhtbV9yYW5nZV9mYXVsdChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSk7CiYjNDM7ICBpbnQgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0KTsKIAogSXQgd2lsbCB0cmlnZ2VyIGEgcGFnZSBmYXVsdCBvbiBtaXNzaW5nIG9yIHJlYWQtb25seSBlbnRyaWVzIGlmIHdyaXRlIGFjY2VzcyBpcwogcmVxdWVzdGVkIChzZWUgYmVsb3cpLiBQYWdlIGZhdWx0cyB1c2UgdGhlIGdlbmVyaWMgbW0gcGFnZSBmYXVsdCBjb2RlIHBhdGgganVzdAotbGlrZSBhIENQVSBwYWdlIGZhdWx0LiBUaGUgdXNhZ2UgcGF0dGVybiBpczo6CiYjNDM7bGlrZSBhIENQVSBwYWdlIGZhdWx0LgomIzQzOwomIzQzO1RoZSBjYWxsZXIgbXVzdCBub3QgaG9sZCBgYG1tYXBfcmVhZF9sb2NrYGAgYmVmb3JlIHRoZSBjYWxsLgomIzQzO2BgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKWBgIHRha2VzIHRoZSBtbWFwIHJlYWQgbG9jayBpbnRlcm5hbGx5IGFuZAomIzQzO2FsbG93cyBgYGhhbmRsZV9tbV9mYXVsdCgpYGAgdG8gZHJvcCBpdCBkdXJpbmcgZmF1bHQgaGFuZGxpbmcuIFRoaXMgaXMgcmVxdWlyZWQKJiM0Mztmb3IgVk1BcyB3aG9zZSBmYXVsdCBoYW5kbGVycyBtYXkgcmVsZWFzZSB0aGUgbW1hcCBsb2NrLCBmb3IgZXhhbXBsZSByZWdpb25zCiYjNDM7bWFuYWdlZCBieSBgYHVzZXJmYXVsdGZkYGAuCiYjNDM7CiYjNDM7SWYgdGhlIG1tYXAgbG9jayBpcyBkcm9wcGVkIG9yIHRoZSByYW5nZSBpcyBpbnZhbGlkYXRlZCwgdGhlIGZ1bmN0aW9uIHJlZnJlc2hlcwomIzQzO2BgcmFuZ2UtJmd0O25vdGlmaWVyX3NlcWBgIGFuZCByZXN0YXJ0cyB0aGUgd2FsayBpbnRlcm5hbGx5LiBgYC1FSU5UUmBgIGlzIHJldHVybmVkCiYjNDM7aWYgbW1hcCBsb2NrIGFjcXVpc2l0aW9uIGlzIGludGVycnVwdGVkIG9yIGEgZmF0YWwgc2lnbmFsIGlzIHBlbmRpbmcgZHVyaW5nCiYjNDM7cmV0cnkgaGFuZGxpbmcuCiYjNDM7CiYjNDM7VGhlIHRpbWVvdXQgaXMgc3BlY2lmaWVkIGluIGppZmZpZXM7IHBhc3NpbmcgYGAwYGAgbWVhbnMgcmV0cnkgaW5kZWZpbml0ZWx5LiBUaGUKJiM0Mzt0aW1lb3V0IGV4aXN0cyB0byBwcmVzZXJ2ZSBjYWxsZXIgcG9saWN5IGZvciByZXBlYXRlZCBtbXUtbm90aWZpZXIgaW52YWxpZGF0aW9uCiYjNDM7YW5kIGlzIGNoZWNrZWQgYmV0d2VlbiByZXRyeSBhdHRlbXB0cy4gSE1NIGRvZXMgbm90IGludGVycnVwdCBwYWdlIGZhdWx0CiYjNDM7aGFuZGxpbmcgd2hlbiB0aGUgdGltZW91dCBleHBpcmVzLCBidXQgcmV0dXJucyBgYC1FQlVTWWBgIGlmIHRoZSByZXRyeSBidWRnZXQgaXMKJiM0MztleGhhdXN0ZWQgYmVmb3JlIGEgc3RhYmxlIHJhbmdlIGlzIG9idGFpbmVkLgomIzQzOwomIzQzO1RoZSB1c2FnZSBwYXR0ZXJuIGlzOjoKIAogIGludCBkcml2ZXJfcG9wdWxhdGVfcmFuZ2UoLi4uKQogIHsKICAgICAgIHN0cnVjdCBobW1fcmFuZ2UgcmFuZ2U7CiYjNDM7ICAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogICAgICAgLi4uCiAKJiM0MzsgICAgICB0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTsKICAgICAgIHJhbmdlLm5vdGlmaWVyID0gJmFtcDtpbnRlcnZhbF9zdWI7CiAgICAgICByYW5nZS5zdGFydCA9IC4uLjsKICAgICAgIHJhbmdlLmVuZCA9IC4uLjsKICAgICAgIHJhbmdlLmhtbV9wZm5zID0gLi4uOwogCi0gICAgICBpZiAoIW1tZ2V0X25vdF96ZXJvKGludGVydmFsX3N1Yi0mZ3Q7bm90aWZpZXIubW0pKQomIzQzOyAgICAgIGlmICghbW1nZXRfbm90X3plcm8oaW50ZXJ2YWxfc3ViLm1tKSkKICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKIAogIGFnYWluOgotICAgICAgcmFuZ2Uubm90aWZpZXJfc2VxID0gbW11X2ludGVydmFsX3JlYWRfYmVnaW4oJmFtcDtpbnRlcnZhbF9zdWIpOwotICAgICAgbW1hcF9yZWFkX2xvY2sobW0pOwotICAgICAgcmV0ID0gaG1tX3JhbmdlX2ZhdWx0KCZhbXA7cmFuZ2UpOwotICAgICAgaWYgKHJldCkgewotICAgICAgICAgIG1tYXBfcmVhZF91bmxvY2sobW0pOwotICAgICAgICAgIGlmIChyZXQgPT0gLUVCVVNZKQotICAgICAgICAgICAgICAgICBnb3RvIGFnYWluOwotICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICB9Ci0gICAgICBtbWFwX3JlYWRfdW5sb2NrKG1tKTsKJiM0MzsgICAgICByZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgmYW1wO3JhbmdlLCB0aW1lb3V0KTsKJiM0MzsgICAgICBpZiAocmV0KQomIzQzOyAgICAgICAgICBnb3RvIG91dF9wdXQ7CiAKICAgICAgIHRha2VfbG9jayhkcml2ZXItJmd0O3VwZGF0ZSk7Ci0gICAgICBpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkoJmFtcDtuaSwgcmFuZ2Uubm90aWZpZXJfc2VxKSB7CiYjNDM7ICAgICAgaWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KHJhbmdlLm5vdGlmaWVyLCByYW5nZS5ub3RpZmllcl9zZXEpKSB7CiAgICAgICAgICAgcmVsZWFzZV9sb2NrKGRyaXZlci0mZ3Q7dXBkYXRlKTsKICAgICAgICAgICBnb3RvIGFnYWluOwogICAgICAgfQpAQCAtMjAwLDEzICYjNDM7MjE1LDMxIEBAIGxpa2UgYSBDUFUgcGFnZSBmYXVsdC4gVGhlIHVzYWdlIHBhdHRlcm4gaXM6OgogICAgICAgICogdW5kZXIgdGhlIHVwZGF0ZSBsb2NrICovCiAKICAgICAgIHJlbGVhc2VfbG9jayhkcml2ZXItJmd0O3VwZGF0ZSk7Ci0gICAgICByZXR1cm4gMDsKJiM0MzsgICAgICByZXQgPSAwOwomIzQzOwomIzQzOyBvdXRfcHV0OgomIzQzOyAgICAgIG1tcHV0KGludGVydmFsX3N1Yi5tbSk7CiYjNDM7ICAgICAgcmV0dXJuIHJldDsKICB9CiAKIFRoZSBkcml2ZXItJmd0O3VwZGF0ZSBsb2NrIGlzIHRoZSBzYW1lIGxvY2sgdGhhdCB0aGUgZHJpdmVyIHRha2VzIGluc2lkZSBpdHMKIGludmFsaWRhdGUoKSBjYWxsYmFjay4gVGhhdCBsb2NrIG11c3QgYmUgaGVsZCBiZWZvcmUgY2FsbGluZwogbW11X2ludGVydmFsX3JlYWRfcmV0cnkoKSB0byBhdm9pZCBhbnkgcmFjZSB3aXRoIGEgY29uY3VycmVudCBDUFUgcGFnZSB0YWJsZQotdXBkYXRlLgomIzQzO3VwZGF0ZS4gVGhlIHJldHJ5IGNoZWNrIG11c3QgdXNlIHRoZSBzYW1lIG5vdGlmaWVyIGFuZCBzZXF1ZW5jZSBudW1iZXIgc3RvcmVkCiYjNDM7aW4gYGByYW5nZWBgIGJ5IGBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKWBgLgomIzQzOwomIzQzO0hvbGRpbmcgdGhlIG1tYXAgbG9jayBhY3Jvc3MgSE1NIGZhdWx0cwomIzQzOz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOwomIzQzO01vc3QgY2FsbGVycyBzaG91bGQgdXNlIGBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKWBgLiBJZiBhIGRyaXZlcgomIzQzO3JlYWxseSBuZWVkcyB0byBob2xkIHRoZSBtbWFwIGxvY2sgYWNyb3NzIHdvcmsgb3V0c2lkZSBITU0sIGl0IGNhbiB1c2U6OgomIzQzOwomIzQzOyAgaW50IGhtbV9yYW5nZV9mYXVsdChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSk7CiYjNDM7CiYjNDM7VGhlIG1tYXAgbG9jayBtdXN0IGJlIGhlbGQgYnkgdGhlIGNhbGxlciBhbmQgd2lsbCByZW1haW4gaGVsZCBvbiByZXR1cm4uIFRoaXMKJiM0MztpbnRlcmZhY2UgY2Fubm90IHN1cHBvcnQgVk1BcyB3aG9zZSBmYXVsdCBoYW5kbGVycyBuZWVkIHRvIGRyb3AgdGhlIG1tYXAgbG9jay4KJiM0MztOZXcgY2FsbGVycyBzaG91bGQgcHJlZmVyIGBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKWBgIHVubGVzcyB0aGV5CiYjNDM7aGF2ZSBhIHNwZWNpZmljIHJlcXVpcmVtZW50IHRvIGtlZXAgdGhlIG1tYXAgbG9jayBoZWxkIGFjcm9zcyB0aGUgY2FsbC4KIAogTGV2ZXJhZ2UgZGVmYXVsdF9mbGFncyBhbmQgcGZuX2ZsYWdzX21hc2sKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0yMjEsOCAmIzQzOzI1NCw4IEBAIHBlcm1pc3Npb24sIGl0IHNldHM6OgogICAgIHJhbmdlLSZndDtkZWZhdWx0X2ZsYWdzID0gSE1NX1BGTl9SRVFfRkFVTFQ7CiAgICAgcmFuZ2UtJmd0O3Bmbl9mbGFnc19tYXNrID0gMDsKIAotYW5kIGNhbGxzIGhtbV9yYW5nZV9mYXVsdCgpIGFzIGRlc2NyaWJlZCBhYm92ZS4gVGhpcyB3aWxsIGZpbGwgZmF1bHQgYWxsIHBhZ2VzCi1pbiB0aGUgcmFuZ2Ugd2l0aCBhdCBsZWFzdCByZWFkIHBlcm1pc3Npb24uCiYjNDM7YW5kIGNhbGxzIHRoZSBITU0gcmFuZ2UgZmF1bHQgaGVscGVyIGFzIGRlc2NyaWJlZCBhYm92ZS4gVGhpcyB3aWxsIGZhdWx0CiYjNDM7YWxsIHBhZ2VzIGluIHRoZSByYW5nZSB3aXRoIGF0IGxlYXN0IHJlYWQgcGVybWlzc2lvbi4KIAogTm93IGxldCYjMzk7cyBzYXkgdGhlIGRyaXZlciB3YW50cyB0byBkbyB0aGUgc2FtZSBleGNlcHQgZm9yIG9uZSBwYWdlIGluIHRoZSByYW5nZSBmb3IKIHdoaWNoIGl0IHdhbnRzIHRvIGhhdmUgd3JpdGUgcGVybWlzc2lvbi4gTm93IGRyaXZlciBzZXQ6OgpAQCAtMjM2LDkgJiM0MzsyNjksOSBAQCBhZGRyZXNzID09IHJhbmdlLSZndDtzdGFydCAmIzQzOyAoaW5kZXhfb2Zfd3JpdGUgJmx0OyZsdDsgUEFHRV9TSElGVCkgaXQgd2lsbCBmYXVsdCB3aXRoCiB3cml0ZSBwZXJtaXNzaW9uIGkuZS4sIGlmIHRoZSBDUFUgcHRlIGRvZXMgbm90IGhhdmUgd3JpdGUgcGVybWlzc2lvbiBzZXQgdGhlbiBITU0KIHdpbGwgY2FsbCBoYW5kbGVfbW1fZmF1bHQoKS4KIAotQWZ0ZXIgaG1tX3JhbmdlX2ZhdWx0IGNvbXBsZXRlcyB0aGUgZmxhZyBiaXRzIGFyZSBzZXQgdG8gdGhlIGN1cnJlbnQgc3RhdGUgb2YKLXRoZSBwYWdlIHRhYmxlcywgaWUgSE1NX1BGTl9WQUxJRCB8IEhNTV9QRk5fV1JJVEUgd2lsbCBiZSBzZXQgaWYgdGhlIHBhZ2UgaXMKLXdyaXRhYmxlLgomIzQzO0FmdGVyIHRoZSBITU0gcmFuZ2UgZmF1bHQgaGVscGVyIGNvbXBsZXRlcyB0aGUgZmxhZyBiaXRzIGFyZSBzZXQgdG8gdGhlCiYjNDM7Y3VycmVudCBzdGF0ZSBvZiB0aGUgcGFnZSB0YWJsZXMsIGllIEhNTV9QRk5fVkFMSUQgfCBITU1fUEZOX1dSSVRFIHdpbGwgYmUKJiM0MztzZXQgaWYgdGhlIHBhZ2UgaXMgd3JpdGFibGUuCiAKIAogUmVwcmVzZW50IGFuZCBtYW5hZ2UgZGV2aWNlIG1lbW9yeSBmcm9tIGNvcmUga2VybmVsIHBvaW50IG9mIHZpZXcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNjZWwvYW1keGRuYS9haWUyX2N0eC5jIGIvZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FpZTJfY3R4LmMKaW5kZXggNTQ0ODY5NjBjYmY1ZTYuLmI1YjRjYTI2MzAwMmRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguYwpAQCAtMTAzNCw3ICYjNDM7MTAzNCw3IEBAIHN0YXRpYyBpbnQgYWllMl9wb3B1bGF0ZV9yYW5nZShzdHJ1Y3QgYW1keGRuYV9nZW1fb2JqICphYm8pCiAJYm9vbCBmb3VuZDsKIAlpbnQgcmV0OwogCi0JdGltZW91dCA9IGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTsKJiM0MzsJdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7CiBhZ2FpbjoKIAlmb3VuZCA9IGZhbHNlOwogCWRvd25fd3JpdGUoJmFtcDt4ZG5hLSZndDtub3RpZmllcl9sb2NrKTsKQEAgLTEwNjEsMjQgJiM0MzsxMDYxLDkgQEAgc3RhdGljIGludCBhaWUyX3BvcHVsYXRlX3JhbmdlKHN0cnVjdCBhbWR4ZG5hX2dlbV9vYmogKmFibykKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCi0JbWFwcC0mZ3Q7cmFuZ2Uubm90aWZpZXJfc2VxID0gbW11X2ludGVydmFsX3JlYWRfYmVnaW4oJmFtcDttYXBwLSZndDtub3RpZmllcik7Ci0JbW1hcF9yZWFkX2xvY2sobW0pOwotCXJldCA9IGhtbV9yYW5nZV9mYXVsdCgmYW1wO21hcHAtJmd0O3JhbmdlKTsKLQltbWFwX3JlYWRfdW5sb2NrKG1tKTsKLQlpZiAocmV0KSB7Ci0JCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7Ci0JCQlyZXQgPSAtRVRJTUU7Ci0JCQlnb3RvIHB1dF9tbTsKLQkJfQotCi0JCWlmIChyZXQgPT0gLUVCVVNZKSB7Ci0JCQlhbWR4ZG5hX3VtYXBfcHV0KG1hcHApOwotCQkJbW1wdXQobW0pOwotCQkJZ290byBhZ2FpbjsKLQkJfQotCiYjNDM7CXJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KCZhbXA7bWFwcC0mZ3Q7cmFuZ2UsIHRpbWVvdXQpOwomIzQzOwlpZiAocmV0KQogCQlnb3RvIHB1dF9tbTsKLQl9CiAKIAlkb3duX3dyaXRlKCZhbXA7eGRuYS0mZ3Q7bm90aWZpZXJfbG9jayk7CiAJaWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KCZhbXA7bWFwcC0mZ3Q7bm90aWZpZXIsIG1hcHAtJmd0O3JhbmdlLm5vdGlmaWVyX3NlcSkpIHsKQEAgLTEwOTYsNyAmIzQzOzEwODEsNyBAQCBzdGF0aWMgaW50IGFpZTJfcG9wdWxhdGVfcmFuZ2Uoc3RydWN0IGFtZHhkbmFfZ2VtX29iaiAqYWJvKQogcHV0X21tOgogCWFtZHhkbmFfdW1hcF9wdXQobWFwcCk7CiAJbW1wdXQobW0pOwotCXJldHVybiByZXQ7CiYjNDM7CXJldHVybiByZXQgPT0gLUVCVVNZID8gLUVUSU1FIDogcmV0OwogfQogCiBpbnQgYWllMl9jbWRfc3VibWl0KHN0cnVjdCBhbWR4ZG5hX2h3Y3R4ICpod2N0eCwgc3RydWN0IGFtZHhkbmFfc2NoZWRfam9iICpqb2IsIHU2NCAqc2VxKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMKaW5kZXggOTU4Y2I2MDVhZWRkNTMuLmRlNWJiZmU1OGVlOTQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMKQEAgLTc3Myw4ICYjNDM7NzczLDcgQEAgZW51bSBkcm1fZ3B1c3ZtX3NjYW5fcmVzdWx0IGRybV9ncHVzdm1fc2Nhbl9tbShzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqcmFuZ2UsCiAJCS5lbmQgPSBlbmQsCiAJCS5kZXZfcHJpdmF0ZV9vd25lciA9IGRldl9wcml2YXRlX293bmVyLAogCX07Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0KLQkJamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpOwomIzQzOwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpOwogCWVudW0gZHJtX2dwdXN2bV9zY2FuX3Jlc3VsdCBzdGF0ZSA9IERSTV9HUFVTVk1fU0NBTl9VTlBPUFVMQVRFRCwgbmV3X3N0YXRlOwogCXVuc2lnbmVkIGxvbmcgKnBmbnM7CiAJdW5zaWduZWQgbG9uZyBucGFnZXMgPSBucGFnZXNfaW5fcmFuZ2Uoc3RhcnQsIGVuZCk7CkBAIC03ODgsMjIgJiM0Mzs3ODcsNyBAQCBlbnVtIGRybV9ncHVzdm1fc2Nhbl9yZXN1bHQgZHJtX2dwdXN2bV9zY2FuX21tKHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZSwKIAlobW1fcmFuZ2UuaG1tX3BmbnMgPSBwZm5zOwogCiByZXRyeToKLQlobW1fcmFuZ2Uubm90aWZpZXJfc2VxID0gbW11X2ludGVydmFsX3JlYWRfYmVnaW4obm90aWZpZXIpOwotCW1tYXBfcmVhZF9sb2NrKHJhbmdlLSZndDtncHVzdm0tJmd0O21tKTsKLQotCXdoaWxlICh0cnVlKSB7Ci0JCWVyciA9IGhtbV9yYW5nZV9mYXVsdCgmYW1wO2htbV9yYW5nZSk7Ci0JCWlmIChlcnIgPT0gLUVCVVNZKSB7Ci0JCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkKLQkJCQlicmVhazsKLQotCQkJaG1tX3JhbmdlLm5vdGlmaWVyX3NlcSA9Ci0JCQkJbW11X2ludGVydmFsX3JlYWRfYmVnaW4obm90aWZpZXIpOwotCQkJY29udGludWU7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCW1tYXBfcmVhZF91bmxvY2socmFuZ2UtJmd0O2dwdXN2bS0mZ3Q7bW0pOwomIzQzOwllcnIgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgmYW1wO2htbV9yYW5nZSwgdGltZW91dCk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfZnJlZTsKIApAQCAtMTQwNiw4ICYjNDM7MTM5MCw3IEBAIGludCBkcm1fZ3B1c3ZtX2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLAogCQkuZGV2X3ByaXZhdGVfb3duZXIgPSBjdHgtJmd0O2RldmljZV9wcml2YXRlX3BhZ2Vfb3duZXIsCiAJfTsKIAl2b2lkICp6ZGQ7Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0KLQkJamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpOwomIzQzOwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpOwogCXVuc2lnbmVkIGxvbmcgaSwgajsKIAl1bnNpZ25lZCBsb25nIG5wYWdlcyA9IG5wYWdlc19pbl9yYW5nZShwYWdlc19zdGFydCwgcGFnZXNfZW5kKTsKIAl1bnNpZ25lZCBsb25nIG51bV9kbWFfbWFwcGVkOwpAQCAtMTQyMiw5ICYjNDM7MTQwNSw2IEBAIGludCBkcm1fZ3B1c3ZtX2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLAogCXN0cnVjdCBkbWFfaW92YV9zdGF0ZSAqc3RhdGUgPSAmYW1wO3N2bV9wYWdlcy0mZ3Q7c3RhdGU7CiAKIHJldHJ5OgotCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKQotCQlyZXR1cm4gLUVCVVNZOwotCiAJaG1tX3JhbmdlLm5vdGlmaWVyX3NlcSA9IG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKG5vdGlmaWVyKTsKIAlpZiAoZHJtX2dwdXN2bV9wYWdlc192YWxpZF91bmxvY2tlZChncHVzdm0sIHN2bV9wYWdlcykpCiAJCWdvdG8gc2V0X3NlcW5vOwpAQCAtMTQzOSwyMSAmIzQzOzE0MTksNyBAQCBpbnQgZHJtX2dwdXN2bV9nZXRfcGFnZXMoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSwKIAl9CiAKIAlobW1fcmFuZ2UuaG1tX3BmbnMgPSBwZm5zOwotCXdoaWxlICh0cnVlKSB7Ci0JCW1tYXBfcmVhZF9sb2NrKG1tKTsKLQkJZXJyID0gaG1tX3JhbmdlX2ZhdWx0KCZhbXA7aG1tX3JhbmdlKTsKLQkJbW1hcF9yZWFkX3VubG9jayhtbSk7Ci0KLQkJaWYgKGVyciA9PSAtRUJVU1kpIHsKLQkJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKQotCQkJCWJyZWFrOwotCi0JCQlobW1fcmFuZ2Uubm90aWZpZXJfc2VxID0KLQkJCQltbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihub3RpZmllcik7Ci0JCQljb250aW51ZTsKLQkJfQotCQlicmVhazsKLQl9CiYjNDM7CWVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KCZhbXA7aG1tX3JhbmdlLCB0aW1lb3V0KTsKIAltbXB1dChtbSk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfZnJlZTsKQEAgLTE3MjAsOCAmIzQzOzE2ODYsNyBAQCBpbnQgZHJtX2dwdXN2bV9yYW5nZV9ldmljdChzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLAogCQkuZW5kID0gZHJtX2dwdXN2bV9yYW5nZV9lbmQocmFuZ2UpLAogCQkuZGV2X3ByaXZhdGVfb3duZXIgPSBOVUxMLAogCX07Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0KLQkJamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpOwomIzQzOwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpOwogCXVuc2lnbmVkIGxvbmcgKnBmbnM7CiAJdW5zaWduZWQgbG9uZyBucGFnZXMgPSBucGFnZXNfaW5fcmFuZ2UoZHJtX2dwdXN2bV9yYW5nZV9zdGFydChyYW5nZSksCiAJCQkJCSAgICAgICBkcm1fZ3B1c3ZtX3JhbmdlX2VuZChyYW5nZSkpOwpAQCAtMTczNiwyNCAmIzQzOzE3MDEsMTIgQEAgaW50IGRybV9ncHVzdm1fcmFuZ2VfZXZpY3Qoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSwKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlobW1fcmFuZ2UuaG1tX3BmbnMgPSBwZm5zOwotCXdoaWxlICghdGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgewotCQlobW1fcmFuZ2Uubm90aWZpZXJfc2VxID0gbW11X2ludGVydmFsX3JlYWRfYmVnaW4obm90aWZpZXIpOwotCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgewotCQkJZXJyID0gLUVUSU1FOwotCQkJYnJlYWs7Ci0JCX0KLQotCQltbWFwX3JlYWRfbG9jayhtbSk7Ci0JCWVyciA9IGhtbV9yYW5nZV9mYXVsdCgmYW1wO2htbV9yYW5nZSk7Ci0JCW1tYXBfcmVhZF91bmxvY2sobW0pOwotCQlpZiAoZXJyICE9IC1FQlVTWSkKLQkJCWJyZWFrOwotCX0KJiM0MzsJZXJyID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoJmFtcDtobW1fcmFuZ2UsIHRpbWVvdXQpOwogCiAJa3ZmcmVlKHBmbnMpOwogCW1tcHV0KG1tKTsKIAotCXJldHVybiBlcnI7CiYjNDM7CXJldHVybiBlcnIgPT0gLUVCVVNZID8gLUVUSU1FIDogZXJyOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dwdXN2bV9yYW5nZV9ldmljdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3ZtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N2bS5jCmluZGV4IGRjYzkyMTMxNDg4ZWFiLi41ODczNTQ0NmQ3ODMyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N2bS5jCkBAIC02NzgsMjAgJiM0Mzs2NzgsMjIgQEAgc3RhdGljIGludCBub3V2ZWF1X3JhbmdlX2ZhdWx0KHN0cnVjdCBub3V2ZWF1X3N2bW0gKnN2bW0sCiAJcmFuZ2UuZW5kID0gbm90aWZpZXItJmd0O25vdGlmaWVyLmludGVydmFsX3RyZWUubGFzdCAmIzQzOyAxOwogCiAJd2hpbGUgKHRydWUpIHsKLQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKJiM0MzsJCWxvbmcgcmVtYWluaW5nID0gdGltZW91dCAtIGppZmZpZXM7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIEhNTSB0aW1lb3V0IG9ubHkgYm91bmRzIHJldHJpZXMgd2hpbGUgSE1NIGlzIHdhbGtpbmcgYW5kCiYjNDM7CQkgKiBmYXVsdGluZyB0aGUgcmFuZ2UuIFRoaXMgZmF1bHQgaXMgaGFuZGxlZCBieSBhIGtlcm5lbCB3b3JrZXIsCiYjNDM7CQkgKiBzbyBmYXRhbCBzaWduYWxzIGZyb20gdGhlIGZhdWx0aW5nIHByb2Nlc3MgY2Fubm90IHN0b3AgYW4KJiM0MzsJCSAqIGVuZGxlc3Mgc3RyZWFtIG9mIGludmFsaWRhdGlvbnMgaGVyZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgdGltZW91dCkpIHsKIAkJCXJldCA9IC1FQlVTWTsKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJcmFuZ2Uubm90aWZpZXJfc2VxID0gbW11X2ludGVydmFsX3JlYWRfYmVnaW4ocmFuZ2Uubm90aWZpZXIpOwotCQltbWFwX3JlYWRfbG9jayhtbSk7Ci0JCXJldCA9IGhtbV9yYW5nZV9mYXVsdCgmYW1wO3JhbmdlKTsKLQkJbW1hcF9yZWFkX3VubG9jayhtbSk7Ci0JCWlmIChyZXQpIHsKLQkJCWlmIChyZXQgPT0gLUVCVVNZKQotCQkJCWNvbnRpbnVlOwomIzQzOwkJcmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoJmFtcDtyYW5nZSwgcmVtYWluaW5nKTsKJiM0MzsJCWlmIChyZXQpCiAJCQlnb3RvIG91dDsKLQkJfQogCiAJCW11dGV4X2xvY2soJmFtcDtzdm1tLSZndDttdXRleCk7CiAJCWlmIChtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeShyYW5nZS5ub3RpZmllciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHYvbXNodl9yZWdpb25zLmMgYi9kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jCmluZGV4IDZkNjVlNWI0MjE1Mjk1Li5kZGRhYWRlMzFiNWRjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jCkBAIC0zODEsNDYgJiM0MzszODEsNiBAQCBpbnQgbXNodl9yZWdpb25fZ2V0KHN0cnVjdCBtc2h2X21lbV9yZWdpb24gKnJlZ2lvbikKIAlyZXR1cm4ga3JlZl9nZXRfdW5sZXNzX3plcm8oJmFtcDtyZWdpb24tJmd0O21yZWdfcmVmY291bnQpOwogfQogCi0vKioKLSAqIG1zaHZfcmVnaW9uX2htbV9mYXVsdF9hbmRfbG9jayAtIEhhbmRsZSBITU0gZmF1bHRzIGFuZCBsb2NrIHRoZSBtZW1vcnkgcmVnaW9uCi0gKiBAcmVnaW9uOiBQb2ludGVyIHRvIHRoZSBtZW1vcnkgcmVnaW9uIHN0cnVjdHVyZQotICogQHJhbmdlOiBQb2ludGVyIHRvIHRoZSBITU0gcmFuZ2Ugc3RydWN0dXJlCi0gKgotICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyB0aGUgZm9sbG93aW5nIHN0ZXBzOgotICogMS4gUmVhZHMgdGhlIG5vdGlmaWVyIHNlcXVlbmNlIGZvciB0aGUgSE1NIHJhbmdlLgotICogMi4gQWNxdWlyZXMgYSByZWFkIGxvY2sgb24gdGhlIG1lbW9yeSBtYXAuCi0gKiAzLiBIYW5kbGVzIEhNTSBmYXVsdHMgZm9yIHRoZSBzcGVjaWZpZWQgcmFuZ2UuCi0gKiA0LiBSZWxlYXNlcyB0aGUgcmVhZCBsb2NrIG9uIHRoZSBtZW1vcnkgbWFwLgotICogNS4gSWYgc3VjY2Vzc2Z1bCwgbG9ja3MgdGhlIG1lbW9yeSByZWdpb24gbXV0ZXguCi0gKiA2LiBWZXJpZmllcyBpZiB0aGUgbm90aWZpZXIgc2VxdWVuY2UgaGFzIGNoYW5nZWQgZHVyaW5nIHRoZSBvcGVyYXRpb24uCi0gKiAgICBJZiBpdCBoYXMsIHJlbGVhc2VzIHRoZSBtdXRleCBhbmQgcmV0dXJucyAtRUJVU1kgdG8gbWF0Y2ggd2l0aAotICogICAgaG1tX3JhbmdlX2ZhdWx0KCkgcmV0dXJuIGNvZGUgZm9yIHJlcGVhdGluZy4KLSAqCi0gKiBSZXR1cm46IDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4KLSAqLwotc3RhdGljIGludCBtc2h2X3JlZ2lvbl9obW1fZmF1bHRfYW5kX2xvY2soc3RydWN0IG1zaHZfbWVtX3JlZ2lvbiAqcmVnaW9uLAotCQkJCQkgIHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKQotewotCWludCByZXQ7Ci0KLQlyYW5nZS0mZ3Q7bm90aWZpZXJfc2VxID0gbW11X2ludGVydmFsX3JlYWRfYmVnaW4ocmFuZ2UtJmd0O25vdGlmaWVyKTsKLQltbWFwX3JlYWRfbG9jayhyZWdpb24tJmd0O21yZWdfbW5pLm1tKTsKLQlyZXQgPSBobW1fcmFuZ2VfZmF1bHQocmFuZ2UpOwotCW1tYXBfcmVhZF91bmxvY2socmVnaW9uLSZndDttcmVnX21uaS5tbSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCW11dGV4X2xvY2soJmFtcDtyZWdpb24tJmd0O21yZWdfbXV0ZXgpOwotCi0JaWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KHJhbmdlLSZndDtub3RpZmllciwgcmFuZ2UtJmd0O25vdGlmaWVyX3NlcSkpIHsKLQkJbXV0ZXhfdW5sb2NrKCZhbXA7cmVnaW9uLSZndDttcmVnX211dGV4KTsKLQkJY29uZF9yZXNjaGVkKCk7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIC8qKgogICogbXNodl9yZWdpb25fcmFuZ2VfZmF1bHQgLSBIYW5kbGUgbWVtb3J5IHJhbmdlIGZhdWx0cyBmb3IgYSBnaXZlbiByZWdpb24uCiAgKiBAcmVnaW9uOiBQb2ludGVyIHRvIHRoZSBtZW1vcnkgcmVnaW9uIHN0cnVjdHVyZS4KQEAgLTQ1MiwxMyAmIzQzOzQxMiwxOSBAQCBzdGF0aWMgaW50IG1zaHZfcmVnaW9uX3JhbmdlX2ZhdWx0KHN0cnVjdCBtc2h2X21lbV9yZWdpb24gKnJlZ2lvbiwKIAlyYW5nZS5zdGFydCA9IHJlZ2lvbi0mZ3Q7c3RhcnRfdWFkZHIgJiM0MzsgcGFnZV9vZmZzZXQgKiBIVl9IWVBfUEFHRV9TSVpFOwogCXJhbmdlLmVuZCA9IHJhbmdlLnN0YXJ0ICYjNDM7IHBhZ2VfY291bnQgKiBIVl9IWVBfUEFHRV9TSVpFOwogCi0JZG8gewotCQlyZXQgPSBtc2h2X3JlZ2lvbl9obW1fZmF1bHRfYW5kX2xvY2socmVnaW9uLCAmYW1wO3JhbmdlKTsKLQl9IHdoaWxlIChyZXQgPT0gLUVCVVNZKTsKLQomIzQzO2FnYWluOgomIzQzOwlyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgmYW1wO3JhbmdlLCAwKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAomIzQzOwltdXRleF9sb2NrKCZhbXA7cmVnaW9uLSZndDttcmVnX211dGV4KTsKJiM0MzsKJiM0MzsJaWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KHJhbmdlLm5vdGlmaWVyLCByYW5nZS5ub3RpZmllcl9zZXEpKSB7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtyZWdpb24tJmd0O21yZWdfbXV0ZXgpOwomIzQzOwkJY29uZF9yZXNjaGVkKCk7CiYjNDM7CQlnb3RvIGFnYWluOwomIzQzOwl9CiYjNDM7CiAJZm9yIChpID0gMDsgaSAmbHQ7IHBhZ2VfY291bnQ7IGkmIzQzOyYjNDM7KQogCQlyZWdpb24tJmd0O21yZWdfcGFnZXNbcGFnZV9vZmZzZXQgJiM0MzsgaV0gPSBobW1fcGZuX3RvX3BhZ2UocGZuc1tpXSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jCmluZGV4IDQwNGZhMWNjMzI1NDJjLi45Y2MyMWNkNzYyZDk4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9vZHAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jCkBAIC0zMjksNyAmIzQzOzMyOSw3IEBAIGludCBpYl91bWVtX29kcF9tYXBfZG1hX2FuZF9sb2NrKHN0cnVjdCBpYl91bWVtX29kcCAqdW1lbV9vZHAsIHU2NCB1c2VyX3ZpcnQsCiAJc3RydWN0IG1tX3N0cnVjdCAqb3duaW5nX21tID0gdW1lbV9vZHAtJmd0O3VtZW0ub3duaW5nX21tOwogCWludCBwZm5faW5kZXgsIGRtYV9pbmRleCwgcmV0ID0gMCwgc3RhcnRfaWR4OwogCXVuc2lnbmVkIGludCBwYWdlX3NoaWZ0LCBobW1fb3JkZXIsIHBmbl9zdGFydF9pZHg7Ci0JdW5zaWduZWQgbG9uZyBudW1fcGZucywgY3VycmVudF9zZXE7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbnVtX3BmbnM7CiAJc3RydWN0IGhtbV9yYW5nZSByYW5nZSA9IHt9OwogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKIApAQCAtMzYzLDI2ICYjNDM7MzYzLDE4IEBAIGludCBpYl91bWVtX29kcF9tYXBfZG1hX2FuZF9sb2NrKHN0cnVjdCBpYl91bWVtX29kcCAqdW1lbV9vZHAsIHU2NCB1c2VyX3ZpcnQsCiAJfQogCiAJcmFuZ2UuaG1tX3BmbnMgPSAmYW1wOyh1bWVtX29kcC0mZ3Q7bWFwLnBmbl9saXN0W3Bmbl9zdGFydF9pZHhdKTsKLQl0aW1lb3V0ID0gamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpOwomIzQzOwl0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTsKIAogcmV0cnk6Ci0JY3VycmVudF9zZXEgPSByYW5nZS5ub3RpZmllcl9zZXEgPQotCQltbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbigmYW1wO3VtZW1fb2RwLSZndDtub3RpZmllcik7Ci0KLQltbWFwX3JlYWRfbG9jayhvd25pbmdfbW0pOwotCXJldCA9IGhtbV9yYW5nZV9mYXVsdCgmYW1wO3JhbmdlKTsKLQltbWFwX3JlYWRfdW5sb2NrKG93bmluZ19tbSk7Ci0JaWYgKHVubGlrZWx5KHJldCkpIHsKLQkJaWYgKHJldCA9PSAtRUJVU1kgJmFtcDsmYW1wOyAhdGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkKLQkJCWdvdG8gcmV0cnk7CiYjNDM7CXJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KCZhbXA7cmFuZ2UsIHRpbWVvdXQpOwomIzQzOwlpZiAodW5saWtlbHkocmV0KSkKIAkJZ290byBvdXRfcHV0X21tOwotCX0KIAogCXN0YXJ0X2lkeCA9IChyYW5nZS5zdGFydCAtIGliX3VtZW1fc3RhcnQodW1lbV9vZHApKSAmZ3Q7Jmd0OyBwYWdlX3NoaWZ0OwogCWRtYV9pbmRleCA9IHN0YXJ0X2lkeDsKIAogCW11dGV4X2xvY2soJmFtcDt1bWVtX29kcC0mZ3Q7dW1lbV9tdXRleCk7Ci0JaWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KCZhbXA7dW1lbV9vZHAtJmd0O25vdGlmaWVyLCBjdXJyZW50X3NlcSkpIHsKJiM0MzsJaWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KCZhbXA7dW1lbV9vZHAtJmd0O25vdGlmaWVyLCByYW5nZS5ub3RpZmllcl9zZXEpKSB7CiAJCW11dGV4X3VubG9jaygmYW1wO3VtZW1fb2RwLSZndDt1bWVtX211dGV4KTsKIAkJZ290byByZXRyeTsKIAl9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2htbS5oIGIvaW5jbHVkZS9saW51eC9obW0uaAppbmRleCBkYjc1ZmZjOTQ5YTdhYy4uNmYwNGUzOTMyZjViMGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaG1tLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9obW0uaApAQCAtMTIzLDYgJiM0MzsxMjMsOCBAQCBzdHJ1Y3QgaG1tX3JhbmdlIHsKICAqIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0IGZvciBob3cgdG8gdXNlIHRoZSByYW5nZSBBUEkuCiAgKi8KIGludCBobW1fcmFuZ2VfZmF1bHQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpOwomIzQzO2ludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSwKJiM0MzsJCQkJICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpOwogCiAvKgogICogSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCAtIGRlZmF1bHQgdGltZW91dCAobXMpIHdoZW4gd2FpdGluZyBmb3IgYSByYW5nZQpkaWZmIC0tZ2l0IGEvbGliL3Rlc3RfaG1tLmMgYi9saWIvdGVzdF9obW0uYwppbmRleCA0NWMwY2I5OTIyMTg0YS4uNjIwNWZiMzEzYmQwNWUgMTAwNjQ0Ci0tLSBhL2xpYi90ZXN0X2htbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2xpYi90ZXN0X2htbS5jCkBAIC0zODksNiAmIzQzOzM4OSw2NyBAQCBzdGF0aWMgaW50IGRtaXJyb3JfcmFuZ2VfZmF1bHQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgZG1pcnJvcl9yYW5nZV9mYXVsdF91bmxvY2tlZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvciwKJiM0MzsJCQkJCXN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlLAomIzQzOwkJCQkJdW5zaWduZWQgbG9uZyB0aW1lb3V0KQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJd2hpbGUgKHRydWUpIHsKJiM0MzsJCXJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KHJhbmdlLCB0aW1lb3V0KTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CQltdXRleF9sb2NrKCZhbXA7ZG1pcnJvci0mZ3Q7bXV0ZXgpOwomIzQzOwkJaWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KHJhbmdlLSZndDtub3RpZmllciwKJiM0MzsJCQkJCSAgICByYW5nZS0mZ3Q7bm90aWZpZXJfc2VxKSkgewomIzQzOwkJCW11dGV4X3VubG9jaygmYW1wO2RtaXJyb3ItJmd0O211dGV4KTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IGRtaXJyb3JfZG9fZmF1bHQoZG1pcnJvciwgcmFuZ2UpOwomIzQzOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtkbWlycm9yLSZndDttdXRleCk7CiYjNDM7b3V0OgomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGRtaXJyb3JfZmF1bHRfdW5sb2NrZWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsCiYjNDM7CQkJCSAgdW5zaWduZWQgbG9uZyBzdGFydCwKJiM0MzsJCQkJICB1bnNpZ25lZCBsb25nIGVuZCwgYm9vbCB3cml0ZSwKJiM0MzsJCQkJICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGRtaXJyb3ItJmd0O25vdGlmaWVyLm1tOwomIzQzOwl1bnNpZ25lZCBsb25nIGFkZHI7CiYjNDM7CXVuc2lnbmVkIGxvbmcgcGZuc1szMl07CiYjNDM7CXN0cnVjdCBobW1fcmFuZ2UgcmFuZ2UgPSB7CiYjNDM7CQkubm90aWZpZXIgPSAmYW1wO2RtaXJyb3ItJmd0O25vdGlmaWVyLAomIzQzOwkJLmhtbV9wZm5zID0gcGZucywKJiM0MzsJCS5wZm5fZmxhZ3NfbWFzayA9IDAsCiYjNDM7CQkuZGVmYXVsdF9mbGFncyA9CiYjNDM7CQkJSE1NX1BGTl9SRVFfRkFVTFQgfCAod3JpdGUgPyBITU1fUEZOX1JFUV9XUklURSA6IDApLAomIzQzOwkJLmRldl9wcml2YXRlX293bmVyID0gZG1pcnJvci0mZ3Q7bWRldmljZSwKJiM0MzsJfTsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CWlmICghbW1nZXRfbm90X3plcm8obW0pKQomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CiYjNDM7CWZvciAoYWRkciA9IHN0YXJ0OyBhZGRyICZsdDsgZW5kOyBhZGRyID0gcmFuZ2UuZW5kKSB7CiYjNDM7CQlyYW5nZS5zdGFydCA9IGFkZHI7CiYjNDM7CQlyYW5nZS5lbmQgPSBtaW4oYWRkciAmIzQzOyAoQVJSQVlfU0laRShwZm5zKSAmbHQ7Jmx0OyBQQUdFX1NISUZUKSwgZW5kKTsKJiM0MzsKJiM0MzsJCXJldCA9IGRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWQoZG1pcnJvciwgJmFtcDtyYW5nZSwgdGltZW91dCk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWJyZWFrOwomIzQzOwl9CiYjNDM7CiYjNDM7CW1tcHV0KG1tKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGRtaXJyb3JfZmF1bHQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCiAJCQkgdW5zaWduZWQgbG9uZyBlbmQsIGJvb2wgd3JpdGUpCiB7CkBAIC00ODgsNiAmIzQzOzU0OSw0OCBAQCBzdGF0aWMgaW50IGRtaXJyb3JfcmVhZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvciwgc3RydWN0IGhtbV9kbWlycm9yX2NtZCAqY21kKQogCXJldHVybiByZXQ7CiB9CiAKJiM0MztzdGF0aWMgaW50IGRtaXJyb3JfcmVhZF91bmxvY2tlZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvciwKJiM0MzsJCQkJIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQgKmNtZCwKJiM0MzsJCQkJIHVuc2lnbmVkIGxvbmcgdGltZW91dCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkbWlycm9yX2JvdW5jZSBib3VuY2U7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDsKJiM0MzsJdW5zaWduZWQgbG9uZyBzaXplID0gY21kLSZndDtucGFnZXMgJmx0OyZsdDsgUEFHRV9TSElGVDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJc3RhcnQgPSBjbWQtJmd0O2FkZHI7CiYjNDM7CWVuZCA9IHN0YXJ0ICYjNDM7IHNpemU7CiYjNDM7CWlmIChlbmQgJmx0OyBzdGFydCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXQgPSBkbWlycm9yX2JvdW5jZV9pbml0KCZhbXA7Ym91bmNlLCBzdGFydCwgc2l6ZSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwl3aGlsZSAoMSkgewomIzQzOwkJbXV0ZXhfbG9jaygmYW1wO2RtaXJyb3ItJmd0O211dGV4KTsKJiM0MzsJCXJldCA9IGRtaXJyb3JfZG9fcmVhZChkbWlycm9yLCBzdGFydCwgZW5kLCAmYW1wO2JvdW5jZSk7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtkbWlycm9yLSZndDttdXRleCk7CiYjNDM7CQlpZiAocmV0ICE9IC1FTk9FTlQpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQlzdGFydCA9IGNtZC0mZ3Q7YWRkciAmIzQzOyAoYm91bmNlLmNwYWdlcyAmbHQ7Jmx0OyBQQUdFX1NISUZUKTsKJiM0MzsJCXJldCA9IGRtaXJyb3JfZmF1bHRfdW5sb2NrZWQoZG1pcnJvciwgc3RhcnQsIGVuZCwgZmFsc2UsIHRpbWVvdXQpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNtZC0mZ3Q7ZmF1bHRzJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocmV0ID09IDApIHsKJiM0MzsJCWlmIChjb3B5X3RvX3VzZXIodTY0X3RvX3VzZXJfcHRyKGNtZC0mZ3Q7cHRyKSwgYm91bmNlLnB0ciwKJiM0MzsJCQkJIGJvdW5jZS5zaXplKSkKJiM0MzsJCQlyZXQgPSAtRUZBVUxUOwomIzQzOwl9CiYjNDM7CWNtZC0mZ3Q7Y3BhZ2VzID0gYm91bmNlLmNwYWdlczsKJiM0MzsJZG1pcnJvcl9ib3VuY2VfZmluaSgmYW1wO2JvdW5jZSk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBkbWlycm9yX2RvX3dyaXRlKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAogCQkJICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgZG1pcnJvcl9ib3VuY2UgKmJvdW5jZSkKIHsKQEAgLTE1NzIsNyAmIzQzOzE2NzUsOSBAQCBzdGF0aWMgbG9uZyBkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsCiAJCWRtaXJyb3ItJmd0O2ZsYWdzID0gY21kLm5wYWdlczsKIAkJcmV0ID0gMDsKIAkJYnJlYWs7Ci0KJiM0MzsJY2FzZSBITU1fRE1JUlJPUl9SRUFEX1VOTE9DS0VEOgomIzQzOwkJcmV0ID0gZG1pcnJvcl9yZWFkX3VubG9ja2VkKGRtaXJyb3IsICZhbXA7Y21kLCAwKTsKJiM0MzsJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KZGlmZiAtLWdpdCBhL2xpYi90ZXN0X2htbV91YXBpLmggYi9saWIvdGVzdF9obW1fdWFwaS5oCmluZGV4IGY5NGM2ZDQ1NzMzODI4Li5lYTliMGVjNDA0ZmI1NSAxMDA2NDQKLS0tIGEvbGliL3Rlc3RfaG1tX3VhcGkuaAomIzQzOyYjNDM7JiM0MzsgYi9saWIvdGVzdF9obW1fdWFwaS5oCkBAIC0zOCw2ICYjNDM7MzgsNyBAQCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kIHsKICNkZWZpbmUgSE1NX0RNSVJST1JfQ0hFQ0tfRVhDTFVTSVZFCV9JT1dSKCYjMzk7SCYjMzk7LCAweDA2LCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kKQogI2RlZmluZSBITU1fRE1JUlJPUl9SRUxFQVNFCQlfSU9XUigmIzM5O0gmIzM5OywgMHgwNywgc3RydWN0IGhtbV9kbWlycm9yX2NtZCkKICNkZWZpbmUgSE1NX0RNSVJST1JfRkxBR1MJCV9JT1dSKCYjMzk7SCYjMzk7LCAweDA4LCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kKQomIzQzOyNkZWZpbmUgSE1NX0RNSVJST1JfUkVBRF9VTkxPQ0tFRAlfSU9XUigmIzM5O0gmIzM5OywgMHgwOSwgc3RydWN0IGhtbV9kbWlycm9yX2NtZCkKIAogI2RlZmluZSBITU1fRE1JUlJPUl9GTEFHX0ZBSUxfQUxMT0MJKDFVTEwgJmx0OyZsdDsgMCkKIApkaWZmIC0tZ2l0IGEvbW0vaG1tLmMgYi9tbS9obW0uYwppbmRleCBlNWMxZjRkZWVkMjQ0Ny4uZmMyZTFjZDBjYjIyZWIgMTAwNjQ0Ci0tLSBhL21tL2htbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2htbS5jCkBAIC0zMiw5ICYjNDM7MzIsMjcgQEAKIAogc3RydWN0IGhtbV92bWFfd2FsayB7CiAJc3RydWN0IGhtbV9yYW5nZQkqcmFuZ2U7CiYjNDM7CWJvb2wJCQkqbG9ja2VkOwogCXVuc2lnbmVkIGxvbmcJCWxhc3Q7CiYjNDM7CXVuc2lnbmVkIGxvbmcJCWVuZDsKJiM0MzsJdW5zaWduZWQgaW50CQlyZXF1aXJlZF9mYXVsdDsKIH07CiAKJiM0MzsvKgomIzQzOyAqIEludGVybmFsIHNlbnRpbmVsIHJldHVybmVkIGJ5IHdhbGsgY2FsbGJhY2tzIHdoZW4gdGhleSBuZWVkIGEgcGFnZSBmYXVsdC4KJiM0MzsgKiBUaGUgY2FsbGJhY2sgc3RvcmVzIGVuZC9yZXF1aXJlZF9mYXVsdCBpbiBobW1fdm1hX3dhbGs7IHRoZSBvdXRlciBsb29wCiYjNDM7ICogY29uc3VtZXMgdGhlIHNlbnRpbmVsIGFuZCBuZXZlciBwcm9wYWdhdGVzIGl0IHRvIHRoZSBjYWxsZXIuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBITU1fRkFVTFRfUEVORElORwktRUFHQUlOCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBJbnRlcm5hbCBzZW50aW5lbCByZXR1cm5lZCBieSBobW1fZG9fZmF1bHQoKSB3aGVuIGhhbmRsZV9tbV9mYXVsdCgpCiYjNDM7ICogY29tcGxldGVzIGEgcGFnZSBmYXVsdCB3aXRoIHRoZSBtbWFwIGxvY2sgZHJvcHBlZC4gaG1tX2RvX2ZhdWx0KCkgc2V0cwomIzQzOyAqICpsb2NrZWQgPSBmYWxzZTsgdGhlIG91dGVyIGxvb3AgY29uc3VtZXMgdGhlIHNlbnRpbmVsIGFuZCBuZXZlciBwcm9wYWdhdGVzCiYjNDM7ICogaXQgdG8gdGhlIGNhbGxlci4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIEhNTV9GQVVMVF9VTkxPQ0tFRAktRU5PTENLCiYjNDM7CiBlbnVtIHsKIAlITU1fTkVFRF9GQVVMVCA9IDEgJmx0OyZsdDsgMCwKIAlITU1fTkVFRF9XUklURV9GQVVMVCA9IDEgJmx0OyZsdDsgMSwKQEAgLTYwLDM3ICYjNDM7NzgsMjUgQEAgc3RhdGljIGludCBobW1fcGZuc19maWxsKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCiB9CiAKIC8qCi0gKiBobW1fdm1hX2ZhdWx0KCkgLSBmYXVsdCBpbiBhIHJhbmdlIGxhY2tpbmcgdmFsaWQgcG1kIG9yIHB0ZShzKQotICogQGFkZHI6IHJhbmdlIHZpcnR1YWwgc3RhcnQgYWRkcmVzcyAoaW5jbHVzaXZlKQotICogQGVuZDogcmFuZ2UgdmlydHVhbCBlbmQgYWRkcmVzcyAoZXhjbHVzaXZlKQotICogQHJlcXVpcmVkX2ZhdWx0OiBITU1fTkVFRF8qIGZsYWdzCi0gKiBAd2FsazogbW1fd2FsayBzdHJ1Y3R1cmUKLSAqIFJldHVybjogLUVCVVNZIGFmdGVyIHBhZ2UgZmF1bHQsIG9yIHBhZ2UgZmF1bHQgZXJyb3IKJiM0MzsgKiBobW1fcmVjb3JkX2ZhdWx0KCkgLSByZWNvcmQgYSByYW5nZSB0aGF0IG5lZWRzIHRvIGJlIGZhdWx0ZWQgaW4KICAqCi0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIHBtZF9ub25lKCkgb3IgcHRlX25vbmUoKSByZXR1cm5zIHRydWUsCi0gKiBvciB3aGVuZXZlciB0aGVyZSBpcyBubyBwYWdlIGRpcmVjdG9yeSBjb3ZlcmluZyB0aGUgdmlydHVhbCBhZGRyZXNzIHJhbmdlLgomIzQzOyAqIENhbGxlZCBieSB0aGUgd2FsayBjYWxsYmFja3Mgd2hlbiB0aGV5IGRpc2NvdmVyIHRoYXQgcGFydCBvZiB0aGUgcmFuZ2UKJiM0MzsgKiBuZWVkcyBhIHBhZ2UgZmF1bHQuICBUaGUgY2FsbGJhY2sgcmVjb3JkcyB3aGF0IHRvIGZhdWx0IGFuZCByZXR1cm5zCiYjNDM7ICogSE1NX0ZBVUxUX1BFTkRJTkc7IHRoZSBvdXRlciBsb29wIGluIGhtbV9yYW5nZV9mYXVsdF9sb2NrZWQoKSBkcm9wcwomIzQzOyAqIGJhY2sgb3V0IG9mIHdhbGtfcGFnZV9yYW5nZSgpIGFuZCBpbnZva2VzIGhhbmRsZV9tbV9mYXVsdCgpIGZyb20gYSBjb250ZXh0CiYjNDM7ICogd2hlcmUgbm8gcGFnZS10YWJsZSBvciBodWdldGxiX3ZtYV9sb2NrIGlzIGhlbGQuCiAgKi8KLXN0YXRpYyBpbnQgaG1tX3ZtYV9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAotCQkJIHVuc2lnbmVkIGludCByZXF1aXJlZF9mYXVsdCwgc3RydWN0IG1tX3dhbGsgKndhbGspCiYjNDM7c3RhdGljIGludCBobW1fcmVjb3JkX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCiYjNDM7CQkJICAgIHVuc2lnbmVkIGludCByZXF1aXJlZF9mYXVsdCwKJiM0MzsJCQkgICAgc3RydWN0IG1tX3dhbGsgKndhbGspCiB7CiAJc3RydWN0IGhtbV92bWFfd2FsayAqaG1tX3ZtYV93YWxrID0gd2Fsay0mZ3Q7cHJpdmF0ZTsKLQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstJmd0O3ZtYTsKLQl1bnNpZ25lZCBpbnQgZmF1bHRfZmxhZ3MgPSBGQVVMVF9GTEFHX1JFTU9URTsKIAogCVdBUk5fT05fT05DRSghcmVxdWlyZWRfZmF1bHQpOwogCWhtbV92bWFfd2Fsay0mZ3Q7bGFzdCA9IGFkZHI7Ci0KLQlpZiAocmVxdWlyZWRfZmF1bHQgJmFtcDsgSE1NX05FRURfV1JJVEVfRkFVTFQpIHsKLQkJaWYgKCEodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9XUklURSkpCi0JCQlyZXR1cm4gLUVQRVJNOwotCQlmYXVsdF9mbGFncyB8PSBGQVVMVF9GTEFHX1dSSVRFOwotCX0KLQotCWZvciAoOyBhZGRyICZsdDsgZW5kOyBhZGRyICYjNDM7PSBQQUdFX1NJWkUpCi0JCWlmIChoYW5kbGVfbW1fZmF1bHQodm1hLCBhZGRyLCBmYXVsdF9mbGFncywgTlVMTCkgJmFtcDsKLQkJICAgIFZNX0ZBVUxUX0VSUk9SKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JcmV0dXJuIC1FQlVTWTsKJiM0MzsJaG1tX3ZtYV93YWxrLSZndDtlbmQgPSBlbmQ7CiYjNDM7CWhtbV92bWFfd2Fsay0mZ3Q7cmVxdWlyZWRfZmF1bHQgPSByZXF1aXJlZF9mYXVsdDsKJiM0MzsJcmV0dXJuIEhNTV9GQVVMVF9QRU5ESU5HOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IGhtbV9wdGVfbmVlZF9mYXVsdChjb25zdCBzdHJ1Y3QgaG1tX3ZtYV93YWxrICpobW1fdm1hX3dhbGssCkBAIC0xNzQsNyAmIzQzOzE4MCw3IEBAIHN0YXRpYyBpbnQgaG1tX3ZtYV93YWxrX2hvbGUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJcmV0dXJuIGhtbV9wZm5zX2ZpbGwoYWRkciwgZW5kLCByYW5nZSwgSE1NX1BGTl9FUlJPUik7CiAJfQogCWlmIChyZXF1aXJlZF9mYXVsdCkKLQkJcmV0dXJuIGhtbV92bWFfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7CiYjNDM7CQlyZXR1cm4gaG1tX3JlY29yZF9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTsKIAlyZXR1cm4gaG1tX3BmbnNfZmlsbChhZGRyLCBlbmQsIHJhbmdlLCAwKTsKIH0KIApAQCAtMjA5LDcgJiM0MzsyMTUsNyBAQCBzdGF0aWMgaW50IGhtbV92bWFfaGFuZGxlX3BtZChzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBhZGRyLAogCXJlcXVpcmVkX2ZhdWx0ID0KIAkJaG1tX3JhbmdlX25lZWRfZmF1bHQoaG1tX3ZtYV93YWxrLCBobW1fcGZucywgbnBhZ2VzLCBjcHVfZmxhZ3MpOwogCWlmIChyZXF1aXJlZF9mYXVsdCkKLQkJcmV0dXJuIGhtbV92bWFfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7CiYjNDM7CQlyZXR1cm4gaG1tX3JlY29yZF9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTsKIAogCXBmbiA9IHBtZF9wZm4ocG1kKSAmIzQzOyAoKGFkZHIgJmFtcDsgflBNRF9NQVNLKSAmZ3Q7Jmd0OyBQQUdFX1NISUZUKTsKIAlmb3IgKGkgPSAwOyBhZGRyICZsdDsgZW5kOyBhZGRyICYjNDM7PSBQQUdFX1NJWkUsIGkmIzQzOyYjNDM7LCBwZm4mIzQzOyYjNDM7KSB7CkBAIC0zMjgsNyAmIzQzOzMzNCw3IEBAIHN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfcHRlKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIGFkZHIsCiBmYXVsdDoKIAlwdGVfdW5tYXAocHRlcCk7CiAJLyogRmF1bHQgYW55IHZpcnR1YWwgYWRkcmVzcyB3ZSB3ZXJlIGFza2VkIHRvIGZhdWx0ICovCi0JcmV0dXJuIGhtbV92bWFfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7CiYjNDM7CXJldHVybiBobW1fcmVjb3JkX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspOwogfQogCiAjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTCkBAIC0zNzEsNyAmIzQzOzM3Nyw3IEBAIHN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfYWJzZW50X3BtZChzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBzdGFydCwKIAkJCQkJICAgICAgbnBhZ2VzLCAwKTsKIAlpZiAocmVxdWlyZWRfZmF1bHQpIHsKIAkJaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkKLQkJCXJldHVybiBobW1fdm1hX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspOwomIzQzOwkJCXJldHVybiBobW1fcmVjb3JkX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspOwogCQllbHNlCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAl9CkBAIC01MTcsNyAmIzQzOzUyMyw3IEBAIHN0YXRpYyBpbnQgaG1tX3ZtYV93YWxrX3B1ZChwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCQkJCQkgICAgICBucGFnZXMsIGNwdV9mbGFncyk7CiAJCWlmIChyZXF1aXJlZF9mYXVsdCkgewogCQkJc3Bpbl91bmxvY2socHRsKTsKLQkJCXJldHVybiBobW1fdm1hX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspOwomIzQzOwkJCXJldHVybiBobW1fcmVjb3JkX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspOwogCQl9CiAKIAkJcGZuID0gcHVkX3BmbihwdWQpICYjNDM7ICgoYWRkciAmYW1wOyB+UFVEX01BU0spICZndDsmZ3Q7IFBBR0VfU0hJRlQpOwpAQCAtNTY0LDIxICYjNDM7NTcwLDggQEAgc3RhdGljIGludCBobW1fdm1hX3dhbGtfaHVnZXRsYl9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLAogCXJlcXVpcmVkX2ZhdWx0ID0KIAkJaG1tX3B0ZV9uZWVkX2ZhdWx0KGhtbV92bWFfd2FsaywgcGZuX3JlcV9mbGFncywgY3B1X2ZsYWdzKTsKIAlpZiAocmVxdWlyZWRfZmF1bHQpIHsKLQkJaW50IHJldDsKLQogCQlzcGluX3VubG9jayhwdGwpOwotCQlodWdldGxiX3ZtYV91bmxvY2tfcmVhZCh2bWEpOwotCQkvKgotCQkgKiBBdm9pZCBkZWFkbG9jazogZHJvcCB0aGUgdm1hIGxvY2sgYmVmb3JlIGNhbGxpbmcKLQkJICogaG1tX3ZtYV9mYXVsdCgpLCB3aGljaCB3aWxsIGl0c2VsZiBwb3RlbnRpYWxseSB0YWtlIGFuZAotCQkgKiBkcm9wIHRoZSB2bWEgbG9jay4gVGhpcyBpcyBhbHNvIGNvcnJlY3QgZnJvbSBhCi0JCSAqIHByb3RlY3Rpb24gcG9pbnQgb2YgdmlldywgYmVjYXVzZSB0aGVyZSBpcyBubyBmdXJ0aGVyCi0JCSAqIHVzZSBoZXJlIG9mIGVpdGhlciBwdGUgb3IgcHRsIGFmdGVyIGRyb3BwaW5nIHRoZSB2bWEKLQkJICogbG9jay4KLQkJICovCi0JCXJldCA9IGhtbV92bWFfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7Ci0JCWh1Z2V0bGJfdm1hX2xvY2tfcmVhZCh2bWEpOwotCQlyZXR1cm4gcmV0OwomIzQzOwkJcmV0dXJuIGhtbV9yZWNvcmRfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7CiAJfQogCiAJcGZuID0gcHRlX3BmbihlbnRyeSkgJiM0MzsgKChzdGFydCAmYW1wOyB+aG1hc2spICZndDsmZ3Q7IFBBR0VfU0hJRlQpOwpAQCAtNjM3LDI5ICYjNDM7NjMwLDY3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgaG1tX3dhbGtfb3BzID0gewogCS53YWxrX2xvY2sJPSBQR1dBTEtfUkRMT0NLLAogfTsKIAotLyoqCi0gKiBobW1fcmFuZ2VfZmF1bHQgLSB0cnkgdG8gZmF1bHQgc29tZSBhZGRyZXNzIGluIGEgdmlydHVhbCBhZGRyZXNzIHJhbmdlCi0gKiBAcmFuZ2U6CWFyZ3VtZW50IHN0cnVjdHVyZQotICoKLSAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIGVycm9yIGNvZGVzOgomIzQzOy8qCiYjNDM7ICogaG1tX2RvX2ZhdWx0IC0gZmF1bHQgaW4gYSByYW5nZSByZWNvcmRlZCBieSBhIHdhbGsgY2FsbGJhY2sKICAqCi0gKiAtRUlOVkFMOglJbnZhbGlkIGFyZ3VtZW50cyBvciBtbSBvciB2aXJ0dWFsIGFkZHJlc3MgaXMgaW4gYW4gaW52YWxpZCB2bWEKLSAqCQkoZS5nLiwgZGV2aWNlIGZpbGUgdm1hKS4KLSAqIC1FTk9NRU06CU91dCBvZiBtZW1vcnkuCi0gKiAtRVBFUk06CUludmFsaWQgcGVybWlzc2lvbiAoZS5nLiwgYXNraW5nIGZvciB3cml0ZSBhbmQgcmFuZ2UgaXMgcmVhZAotICoJCW9ubHkpLgotICogLUVCVVNZOglUaGUgcmFuZ2UgaGFzIGJlZW4gaW52YWxpZGF0ZWQgYW5kIHRoZSBjYWxsZXIgbmVlZHMgdG8gd2FpdCBmb3IKLSAqCQl0aGUgaW52YWxpZGF0aW9uIHRvIGZpbmlzaC4KLSAqIC1FRkFVTFQ6ICAgICBBIHBhZ2Ugd2FzIHJlcXVlc3RlZCB0byBiZSB2YWxpZCBhbmQgY291bGQgbm90IGJlIG1hZGUgdmFsaWQKLSAqICAgICAgICAgICAgICBpZSBpdCBoYXMgbm8gYmFja2luZyBWTUEgb3IgaXQgaXMgaWxsZWdhbCB0byBhY2Nlc3MKJiM0MzsgKiBDYWxsZWQgZnJvbSB0aGUgb3V0ZXIgbG9vcCBpbiBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkKCkgYWZ0ZXIgYSBjYWxsYmFjawomIzQzOyAqIHJldHVybmVkIEhNTV9GQVVMVF9QRU5ESU5HLiAgQXQgdGhpcyBwb2ludCB3ZSBob2xkIG9ubHkgbW1hcF9sb2NrOwomIzQzOyAqIHRoZSBwYWdlLXRhYmxlIHNwaW5sb2NrIGFuZCBhbnkgaHVnZXRsYl92bWFfbG9jayBhY3F1aXJlZCBieSB0aGUgd2FsawomIzQzOyAqIGZyYW1ld29yayBoYXZlIGFscmVhZHkgYmVlbiByZWxlYXNlZCBieSB0aGUgdW53aW5kLgogICoKLSAqIFRoaXMgaXMgc2ltaWxhciB0byBnZXRfdXNlcl9wYWdlcygpLCBleGNlcHQgdGhhdCBpdCBjYW4gcmVhZCB0aGUgcGFnZSB0YWJsZXMKLSAqIHdpdGhvdXQgbXV0YXRpbmcgdGhlbSAoaWUgY2F1c2luZyBmYXVsdHMpLgomIzQzOyAqIFJldHVybnMgLUVCVVNZIG9uIHN1Y2Nlc3MgKGFsbCBwYWdlcyBmYXVsdGVkLCBjYWxsZXIgc2hvdWxkIHJlLXdhbGspLgomIzQzOyAqIFJldHVybnMgYSBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLgogICovCi1pbnQgaG1tX3JhbmdlX2ZhdWx0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKQomIzQzO3N0YXRpYyBpbnQgaG1tX2RvX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAomIzQzOwkJCXN0cnVjdCBobW1fdm1hX3dhbGsgKmhtbV92bWFfd2FsaykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgYWRkciA9IGhtbV92bWFfd2Fsay0mZ3Q7bGFzdDsKJiM0MzsJdW5zaWduZWQgbG9uZyBlbmQgPSBobW1fdm1hX3dhbGstJmd0O2VuZDsKJiM0MzsJdW5zaWduZWQgaW50IHJlcXVpcmVkX2ZhdWx0ID0gaG1tX3ZtYV93YWxrLSZndDtyZXF1aXJlZF9mYXVsdDsKJiM0MzsJdW5zaWduZWQgaW50IGZhdWx0X2ZsYWdzID0gRkFVTFRfRkxBR19SRU1PVEU7CiYjNDM7CXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwomIzQzOwomIzQzOwlpZiAoaG1tX3ZtYV93YWxrLSZndDtsb2NrZWQpCiYjNDM7CQlmYXVsdF9mbGFncyB8PSBGQVVMVF9GTEFHX0FMTE9XX1JFVFJZIHwgRkFVTFRfRkxBR19LSUxMQUJMRTsKJiM0MzsKJiM0MzsJdm1hID0gdm1hX2xvb2t1cChtbSwgYWRkcik7CiYjNDM7CWlmICghdm1hKQomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CiYjNDM7CWlmIChyZXF1aXJlZF9mYXVsdCAmYW1wOyBITU1fTkVFRF9XUklURV9GQVVMVCkgewomIzQzOwkJaWYgKCEodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9XUklURSkpCiYjNDM7CQkJcmV0dXJuIC1FUEVSTTsKJiM0MzsJCWZhdWx0X2ZsYWdzIHw9IEZBVUxUX0ZMQUdfV1JJVEU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZm9yICg7IGFkZHIgJmx0OyBlbmQ7IGFkZHIgJiM0Mzs9IFBBR0VfU0laRSkgewomIzQzOwkJdm1fZmF1bHRfdCByZXQ7CiYjNDM7CiYjNDM7CQlyZXQgPSBoYW5kbGVfbW1fZmF1bHQodm1hLCBhZGRyLCBmYXVsdF9mbGFncywgTlVMTCk7CiYjNDM7CiYjNDM7CQlpZiAocmV0ICZhbXA7IChWTV9GQVVMVF9DT01QTEVURUQgfCBWTV9GQVVMVF9SRVRSWSkpIHsKJiM0MzsJCQkqaG1tX3ZtYV93YWxrLSZndDtsb2NrZWQgPSBmYWxzZTsKJiM0MzsJCQlyZXR1cm4gSE1NX0ZBVUxUX1VOTE9DS0VEOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKHJldCAmYW1wOyBWTV9GQVVMVF9FUlJPUikgewomIzQzOwkJCWludCBlcnIgPSB2bV9mYXVsdF90b19lcnJubyhyZXQsIDApOwomIzQzOwomIzQzOwkJCWlmIChXQVJOX09OKCFlcnIpKQomIzQzOwkJCQllcnIgPSAtRUlOVkFMOwomIzQzOwomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIC1FQlVTWTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkKHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlLCBib29sICpsb2NrZWQpCiB7CiAJc3RydWN0IGhtbV92bWFfd2FsayBobW1fdm1hX3dhbGsgPSB7CiAJCS5yYW5nZSA9IHJhbmdlLAomIzQzOwkJLmxvY2tlZCA9IGxvY2tlZCwKIAkJLmxhc3QgPSByYW5nZS0mZ3Q7c3RhcnQsCiAJfTsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHJhbmdlLSZndDtub3RpZmllci0mZ3Q7bW07CkBAIC02NzQsNiAmIzQzOzcwNSwyMiBAQCBpbnQgaG1tX3JhbmdlX2ZhdWx0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKQogCQkJcmV0dXJuIC1FQlVTWTsKIAkJcmV0ID0gd2Fsa19wYWdlX3JhbmdlKG1tLCBobW1fdm1hX3dhbGsubGFzdCwgcmFuZ2UtJmd0O2VuZCwKIAkJCQkgICAgICAmYW1wO2htbV93YWxrX29wcywgJmFtcDtobW1fdm1hX3dhbGspOwomIzQzOwkJLyoKJiM0MzsJCSAqIFdoZW4gSE1NX0ZBVUxUX1BFTkRJTkcgaXMgcmV0dXJuZWQgYSB3YWxrIGNhbGxiYWNrCiYjNDM7CQkgKiByZWNvcmRlZCBhIHJhbmdlIHRoYXQgbmVlZHMgaGFuZGxlX21tX2ZhdWx0KCk7CiYjNDM7CQkgKiBobW1fZG9fZmF1bHQoKSBydW5zIHRoZSBmYXVsdCBvdXRzaWRlIHdhbGtfcGFnZV9yYW5nZSgpCiYjNDM7CQkgKiAoc28gbm8gcGFnZS10YWJsZSBvciBodWdldGxiX3ZtYV9sb2NrIGlzIGhlbGQpIGFuZAomIzQzOwkJICogcmV0dXJucyAtRUJVU1kgc28gdGhlIGxvb3AgcmUtd2Fsa3MgYW5kIHBpY2tzIHVwIHRoZQomIzQzOwkJICogbm93LXByZXNlbnQgZW50cmllcy4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHJldCA9PSBITU1fRkFVTFRfUEVORElORykgewomIzQzOwkJCXJldCA9IGhtbV9kb19mYXVsdChtbSwgJmFtcDtobW1fdm1hX3dhbGspOwomIzQzOwkJCWlmIChyZXQgPT0gSE1NX0ZBVUxUX1VOTE9DS0VEKSB7CiYjNDM7CQkJCWlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkKJiM0MzsJCQkJCXJldHVybiAtRUlOVFI7CiYjNDM7CQkJCXJldHVybiAtRUJVU1k7CiYjNDM7CQkJfQomIzQzOwkJfQogCQkvKgogCQkgKiBXaGVuIC1FQlVTWSBpcyByZXR1cm5lZCB0aGUgbG9vcCByZXN0YXJ0cyB3aXRoCiAJCSAqIGhtbV92bWFfd2Fsay5sYXN0IHNldCB0byBhbiBhZGRyZXNzIHRoYXQgaGFzIG5vdCBiZWVuIHN0b3JlZApAQCAtNjgzLDggJiM0Mzs3MzAsMTAwIEBAIGludCBobW1fcmFuZ2VfZmF1bHQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpCiAJfSB3aGlsZSAocmV0ID09IC1FQlVTWSk7CiAJcmV0dXJuIHJldDsKIH0KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBobW1fcmFuZ2VfZmF1bHQgLSB0cnkgdG8gZmF1bHQgc29tZSBhZGRyZXNzIGluIGEgdmlydHVhbCBhZGRyZXNzIHJhbmdlCiYjNDM7ICogQHJhbmdlOglhcmd1bWVudCBzdHJ1Y3R1cmUKJiM0MzsgKgomIzQzOyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIGVycm9yIGNvZGVzOgomIzQzOyAqCiYjNDM7ICogLUVJTlZBTDoJSW52YWxpZCBhcmd1bWVudHMgb3IgbW0gb3IgdmlydHVhbCBhZGRyZXNzIGlzIGluIGFuIGludmFsaWQgdm1hCiYjNDM7ICoJCShlLmcuLCBkZXZpY2UgZmlsZSB2bWEpLgomIzQzOyAqIC1FTk9NRU06CU91dCBvZiBtZW1vcnkuCiYjNDM7ICogLUVQRVJNOglJbnZhbGlkIHBlcm1pc3Npb24gKGUuZy4sIGFza2luZyBmb3Igd3JpdGUgYW5kIHJhbmdlIGlzIHJlYWQKJiM0MzsgKgkJb25seSkuCiYjNDM7ICogLUVCVVNZOglUaGUgcmFuZ2UgaGFzIGJlZW4gaW52YWxpZGF0ZWQgYW5kIHRoZSBjYWxsZXIgbmVlZHMgdG8gd2FpdCBmb3IKJiM0MzsgKgkJdGhlIGludmFsaWRhdGlvbiB0byBmaW5pc2guCiYjNDM7ICogLUVGQVVMVDogICAgIEEgcGFnZSB3YXMgcmVxdWVzdGVkIHRvIGJlIHZhbGlkIGFuZCBjb3VsZCBub3QgYmUgbWFkZSB2YWxpZAomIzQzOyAqICAgICAgICAgICAgICBpZSBpdCBoYXMgbm8gYmFja2luZyBWTUEgb3IgaXQgaXMgaWxsZWdhbCB0byBhY2Nlc3MKJiM0MzsgKgomIzQzOyAqIFRoaXMgaXMgc2ltaWxhciB0byBnZXRfdXNlcl9wYWdlcygpLCBleGNlcHQgdGhhdCBpdCBjYW4gcmVhZCB0aGUgcGFnZSB0YWJsZXMKJiM0MzsgKiB3aXRob3V0IG11dGF0aW5nIHRoZW0gKGllIGNhdXNpbmcgZmF1bHRzKS4KJiM0MzsgKgomIzQzOyAqIFRoZSBtbWFwIGxvY2sgbXVzdCBiZSBoZWxkIGJ5IHRoZSBjYWxsZXIgYW5kIHdpbGwgcmVtYWluIGhlbGQgb24gcmV0dXJuLgomIzQzOyAqIE5ldyB1c2VycyBzaG91bGQgcHJlZmVyIGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KCkgdW5sZXNzIHRoZXkKJiM0MzsgKiBzcGVjaWZpY2FsbHkgbmVlZCB0byBrZWVwIHRoZSBtbWFwIGxvY2sgaGVsZCBhY3Jvc3MgdGhlIGNhbGwuIFRoaXMgaGVscGVyCiYjNDM7ICogY2Fubm90IHN1cHBvcnQgVk1BcyB3aG9zZSBmYXVsdCBoYW5kbGVycyBuZWVkIHRvIGRyb3AgdGhlIG1tYXAgbG9jay4KJiM0MzsgKi8KJiM0MztpbnQgaG1tX3JhbmdlX2ZhdWx0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKQomIzQzO3sKJiM0MzsJcmV0dXJuIGhtbV9yYW5nZV9mYXVsdF9sb2NrZWQocmFuZ2UsIE5VTEwpOwomIzQzO30KIEVYUE9SVF9TWU1CT0woaG1tX3JhbmdlX2ZhdWx0KTsKIAomIzQzOy8qKgomIzQzOyAqIGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0IC0gZmF1bHQgaW4gYSByYW5nZSB3aXRoIGEgcmV0cnkgdGltZW91dAomIzQzOyAqIEByYW5nZToJYXJndW1lbnQgc3RydWN0dXJlCiYjNDM7ICogQHRpbWVvdXQ6CXRpbWVvdXQgaW4gamlmZmllcyBmb3IgaW50ZXJuYWwgLUVCVVNZIHJldHJpZXMsIG9yIDAgdG8gcmV0cnkKJiM0MzsgKgkJaW5kZWZpbml0ZWx5CiYjNDM7ICoKJiM0MzsgKiBUaGUgY2FsbGVyIG11c3Qgbm90IGhvbGQgdGhlIG1tYXAgbG9jay4gVGhlIGZ1bmN0aW9uIHRha2VzIHRoZSBtbWFwIHJlYWQKJiM0MzsgKiBsb2NrIGludGVybmFsbHkgYW5kIGFsbG93cyBoYW5kbGVfbW1fZmF1bHQoKSB0byBkcm9wIGl0IGR1cmluZyBmYXVsdHMuIElmCiYjNDM7ICogdGhlIG1tYXAgbG9jayBpcyBkcm9wcGVkIG9yIHRoZSByYW5nZSBpcyBpbnZhbGlkYXRlZCwgdGhlIGZ1bmN0aW9uIHJlZnJlc2hlcwomIzQzOyAqIHJhbmdlLSZndDtub3RpZmllcl9zZXEgYW5kIHJlc3RhcnRzIHRoZSB3YWxrIGludGVybmFsbHkuCiYjNDM7ICoKJiM0MzsgKiBQYXNzaW5nIDAgZm9yIEB0aW1lb3V0IHJldHJpZXMgaW5kZWZpbml0ZWx5LiBBIG5vbi16ZXJvIEB0aW1lb3V0IGlzIGEgY2FsbGVyCiYjNDM7ICogcG9saWN5IGxpbWl0IGZvciByZXBlYXRlZCBtbXUtbm90aWZpZXIgaW52YWxpZGF0aW9uIHJldHJpZXMuIEhNTSBkb2VzIG5vdAomIzQzOyAqIGludGVycnVwdCBwYWdlIGZhdWx0IGhhbmRsaW5nIHdoZW4gdGhlIHRpbWVvdXQgZXhwaXJlcywgYnV0IHJldHVybnMgLUVCVVNZCiYjNDM7ICogaWYgdGhlIHJldHJ5IGJ1ZGdldCBpcyBleGhhdXN0ZWQgYmVmb3JlIGEgc3RhYmxlIHJhbmdlIGlzIG9idGFpbmVkLgomIzQzOyAqCiYjNDM7ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3Igb25lIG9mIHRoZSBlcnJvciBjb2RlcyBkb2N1bWVudGVkIGZvcgomIzQzOyAqIGhtbV9yYW5nZV9mYXVsdCgpLiAtRUlOVFIgaXMgcmV0dXJuZWQgaWYgbW1hcF9sb2NrIGFjcXVpc2l0aW9uIGlzCiYjNDM7ICogaW50ZXJydXB0ZWQgb3IgYSBmYXRhbCBzaWduYWwgaXMgcGVuZGluZyBkdXJpbmcgcmV0cnkgaGFuZGxpbmcuCiYjNDM7ICovCiYjNDM7aW50IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlLAomIzQzOwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gcmFuZ2UtJmd0O25vdGlmaWVyLSZndDttbTsKJiM0MzsJdW5zaWduZWQgbG9uZyBkZWFkbGluZSA9IDA7CiYjNDM7CWJvb2wgbG9ja2VkID0gZmFsc2U7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCWlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkKJiM0MzsJCQlyZXR1cm4gLUVJTlRSOwomIzQzOwomIzQzOwkJaWYgKHRpbWVvdXQpIHsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIElmIHRoZSBwcmV2aW91cyBmYXVsdCBkcm9wcGVkIG1tYXBfbG9jaywgdGhlbiB0aGUgZmF1bHQKJiM0MzsJCQkgKiBoYW5kbGVyIG1hZGUgcHJvZ3Jlc3MuIFJlc3RhcnQgdGhlIHJldHJ5IHRpbWVvdXQgaW4gdGhhdAomIzQzOwkJCSAqIGNhc2UsIGJ1dCBrZWVwIHRoZSBleGlzdGluZyBkZWFkbGluZSBmb3Igb3JkaW5hcnkgLUVCVVNZCiYjNDM7CQkJICogcmV0cmllcy4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAoIWxvY2tlZCkKJiM0MzsJCQkJZGVhZGxpbmUgPSBqaWZmaWVzICYjNDM7IHRpbWVvdXQ7CiYjNDM7CiYjNDM7CQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZGVhZGxpbmUpKQomIzQzOwkJCQlyZXR1cm4gLUVCVVNZOwomIzQzOwkJfQomIzQzOwomIzQzOwkJcmFuZ2UtJmd0O25vdGlmaWVyX3NlcSA9CiYjNDM7CQkJbW11X2ludGVydmFsX3JlYWRfYmVnaW4ocmFuZ2UtJmd0O25vdGlmaWVyKTsKJiM0MzsKJiM0MzsJCXJldCA9IG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKG1tKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCWxvY2tlZCA9IHRydWU7CiYjNDM7CQlyZXQgPSBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkKHJhbmdlLCAmYW1wO2xvY2tlZCk7CiYjNDM7CQlpZiAobG9ja2VkKQomIzQzOwkJCW1tYXBfcmVhZF91bmxvY2sobW0pOwomIzQzOwl9IHdoaWxlIChyZXQgPT0gLUVCVVNZKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTChobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCk7CiYjNDM7CiAvKioKICAqIGhtbV9kbWFfbWFwX2FsbG9jIC0gQWxsb2NhdGUgSE1NIG1hcCBzdHJ1Y3R1cmUKICAqIEBkZXY6IGRldmljZSB0byBhbGxvY2F0ZSBzdHJ1Y3R1cmUgZm9yCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jCmluZGV4IDZmY2NiZGFiMDJlZTgxLi41YWNiNzI4NjY2ZjhjMSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMKQEAgLTI5LDYgJiM0MzsyOSwxMCBAQAogI2luY2x1ZGUgJmx0O3N5cy9tbWFuLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3lzL2lvY3RsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3lzL3RpbWUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3N5c2NhbGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL2V2ZW50ZmQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdXNlcmZhdWx0ZmQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7cG9sbC5oJmd0OwogCiAvKgogICogVGhpcyBpcyBhIHByaXZhdGUgVUFQSSB0byB0aGUga2VybmVsIHRlc3QgbW9kdWxlIHNvIGl0IGlzbiYjMzk7dCBleHBvcnRlZApAQCAtMjk1Miw0ICYjNDM7Mjk1NiwxNTAgQEAgVEVTVF9GX1RJTUVPVVQoaG1tLCBiZW5jaG1hcmtfdGhwX21pZ3JhdGlvbiwgMTIwKQogCQkJCQkmYW1wO3RocF9yZXN1bHRzLCAmYW1wO3JlZ3VsYXJfcmVzdWx0cyk7CiAJfQogfQomIzQzOy8qCiYjNDM7ICogVGVzdCB0aGF0IEhNTSBjYW4gZmF1bHQgaW4gcGFnZXMgYmFja2VkIGJ5IHVzZXJmYXVsdGZkIHVzaW5nIHRoZQomIzQzOyAqIGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KCkgcGF0aCB3aXRoIG5vIHRpbWVvdXQuIFRoaXMgZXhlcmNpc2VzCiYjNDM7ICogdGhlIGxvY2stZHJvcCByZXRyeSBsb2dpYyBpbiB0aGUgSE1NIGZyYW1ld29yay4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgdWZmZF90aHJlYWRfYXJncyB7CiYjNDM7CWludCB1ZmZkOwomIzQzOwlpbnQgc3RvcF9mZDsKJiM0MzsJdm9pZCAqcGFnZV9idWZmZXI7CiYjNDM7CXVuc2lnbmVkIGxvbmcgcGFnZV9zaXplOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgKnVmZmRfaGFuZGxlcl90aHJlYWQodm9pZCAqYXJnKQomIzQzO3sKJiM0MzsJc3RydWN0IHVmZmRfdGhyZWFkX2FyZ3MgKmFyZ3MgPSBhcmc7CiYjNDM7CXN0cnVjdCB1ZmZkX21zZyBtc2c7CiYjNDM7CXN0cnVjdCB1ZmZkaW9fY29weSBjb3B5OwomIzQzOwlzdHJ1Y3QgcG9sbGZkIHBvbGxmZFsyXTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcG9sbGZkWzBdLmZkID0gYXJncy0mZ3Q7dWZmZDsKJiM0MzsJcG9sbGZkWzBdLmV2ZW50cyA9IFBPTExJTjsKJiM0MzsJcG9sbGZkWzFdLmZkID0gYXJncy0mZ3Q7c3RvcF9mZDsKJiM0MzsJcG9sbGZkWzFdLmV2ZW50cyA9IFBPTExJTjsKJiM0MzsKJiM0MzsJd2hpbGUgKDEpIHsKJiM0MzsJCXJldCA9IHBvbGwocG9sbGZkLCAyLCAtMSk7CiYjNDM7CQlpZiAocmV0ICZsdDs9IDApCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlpZiAocG9sbGZkWzFdLnJldmVudHMpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlpZiAoIShwb2xsZmRbMF0ucmV2ZW50cyAmYW1wOyBQT0xMSU4pKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJcmV0ID0gcmVhZChhcmdzLSZndDt1ZmZkLCAmYW1wO21zZywgc2l6ZW9mKG1zZykpOwomIzQzOwkJaWYgKHJldCAhPSBzaXplb2YobXNnKSkKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCWlmIChtc2cuZXZlbnQgIT0gVUZGRF9FVkVOVF9QQUdFRkFVTFQpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQkvKiBGaWxsIHRoZSBwYWdlIHdpdGggYSBrbm93biBwYXR0ZXJuICovCiYjNDM7CQltZW1zZXQoYXJncy0mZ3Q7cGFnZV9idWZmZXIsIDB4QUIsIGFyZ3MtJmd0O3BhZ2Vfc2l6ZSk7CiYjNDM7CiYjNDM7CQljb3B5LmRzdCA9IG1zZy5hcmcucGFnZWZhdWx0LmFkZHJlc3MgJmFtcDsgfihhcmdzLSZndDtwYWdlX3NpemUgLSAxKTsKJiM0MzsJCWNvcHkuc3JjID0gKHVuc2lnbmVkIGxvbmcpYXJncy0mZ3Q7cGFnZV9idWZmZXI7CiYjNDM7CQljb3B5LmxlbiA9IGFyZ3MtJmd0O3BhZ2Vfc2l6ZTsKJiM0MzsJCWNvcHkubW9kZSA9IDA7CiYjNDM7CQljb3B5LmNvcHkgPSAwOwomIzQzOwomIzQzOwkJcmV0ID0gaW9jdGwoYXJncy0mZ3Q7dWZmZCwgVUZGRElPX0NPUFksICZhbXA7Y29weSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKGhtbSwgdXNlcmZhdWx0ZmRfcmVhZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBobW1fYnVmZmVyICpidWZmZXI7CiYjNDM7CXN0cnVjdCB1ZmZkX3RocmVhZF9hcmdzIHVmZmRfYXJnczsKJiM0MzsJdW5zaWduZWQgbG9uZyBucGFnZXM7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc2l6ZTsKJiM0MzsJdW5zaWduZWQgbG9uZyBpOwomIzQzOwl1bnNpZ25lZCBjaGFyICpwdHI7CiYjNDM7CXB0aHJlYWRfdCB0aHJlYWQ7CiYjNDM7CWludCB1ZmZkOwomIzQzOwlpbnQgc3RvcF9mZDsKJiM0MzsJaW50IHJldDsKJiM0MzsJc3RydWN0IHVmZmRpb19hcGkgYXBpOwomIzQzOwlzdHJ1Y3QgdWZmZGlvX3JlZ2lzdGVyIHJlZzsKJiM0MzsJdWludDY0X3Qgc3RvcCA9IDE7CiYjNDM7CXNzaXplX3QgbndyaXRlOwomIzQzOwomIzQzOwlucGFnZXMgPSA0OwomIzQzOwlzaXplID0gbnBhZ2VzICZsdDsmbHQ7IHNlbGYtJmd0O3BhZ2Vfc2hpZnQ7CiYjNDM7CiYjNDM7CS8qIENyZWF0ZSB1c2VyZmF1bHRmZCAqLwomIzQzOwl1ZmZkID0gc3lzY2FsbChfX05SX3VzZXJmYXVsdGZkLCBPX0NMT0VYRUMgfCBPX05PTkJMT0NLKTsKJiM0MzsJaWYgKHVmZmQgJmx0OyAwKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7dXNlcmZhdWx0ZmQgbm90IGF2YWlsYWJsZSYjMzQ7KTsKJiM0MzsKJiM0MzsJYXBpLmFwaSA9IFVGRkRfQVBJOwomIzQzOwlhcGkuZmVhdHVyZXMgPSAwOwomIzQzOwlyZXQgPSBpb2N0bCh1ZmZkLCBVRkZESU9fQVBJLCAmYW1wO2FwaSk7CiYjNDM7CUFTU0VSVF9FUShyZXQsIDApOwomIzQzOwomIzQzOwlidWZmZXIgPSBtYWxsb2Moc2l6ZW9mKCpidWZmZXIpKTsKJiM0MzsJQVNTRVJUX05FKGJ1ZmZlciwgTlVMTCk7CiYjNDM7CiYjNDM7CWJ1ZmZlci0mZ3Q7ZmQgPSAtMTsKJiM0MzsJYnVmZmVyLSZndDtzaXplID0gc2l6ZTsKJiM0MzsJYnVmZmVyLSZndDttaXJyb3IgPSBtYWxsb2Moc2l6ZSk7CiYjNDM7CUFTU0VSVF9ORShidWZmZXItJmd0O21pcnJvciwgTlVMTCk7CiYjNDM7CiYjNDM7CS8qIENyZWF0ZSBhbm9ueW1vdXMgbWFwcGluZyAqLwomIzQzOwlidWZmZXItJmd0O3B0ciA9IG1tYXAoTlVMTCwgc2l6ZSwKJiM0MzsJCQkgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAomIzQzOwkJCSAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywKJiM0MzsJCQkgICAtMSwgMCk7CiYjNDM7CUFTU0VSVF9ORShidWZmZXItJmd0O3B0ciwgTUFQX0ZBSUxFRCk7CiYjNDM7CiYjNDM7CS8qIFJlZ2lzdGVyIHRoZSByZWdpb24gd2l0aCB1c2VyZmF1bHRmZCAqLwomIzQzOwlyZWcucmFuZ2Uuc3RhcnQgPSAodW5zaWduZWQgbG9uZylidWZmZXItJmd0O3B0cjsKJiM0MzsJcmVnLnJhbmdlLmxlbiA9IHNpemU7CiYjNDM7CXJlZy5tb2RlID0gVUZGRElPX1JFR0lTVEVSX01PREVfTUlTU0lORzsKJiM0MzsJcmV0ID0gaW9jdGwodWZmZCwgVUZGRElPX1JFR0lTVEVSLCAmYW1wO3JlZyk7CiYjNDM7CUFTU0VSVF9FUShyZXQsIDApOwomIzQzOwomIzQzOwkvKiBTZXQgdXAgdGhlIGhhbmRsZXIgdGhyZWFkICovCiYjNDM7CXVmZmRfYXJncy51ZmZkID0gdWZmZDsKJiM0MzsJc3RvcF9mZCA9IGV2ZW50ZmQoMCwgRUZEX0NMT0VYRUMpOwomIzQzOwlBU1NFUlRfR0Uoc3RvcF9mZCwgMCk7CiYjNDM7CXVmZmRfYXJncy5zdG9wX2ZkID0gc3RvcF9mZDsKJiM0MzsJdWZmZF9hcmdzLnBhZ2VfYnVmZmVyID0gbWFsbG9jKHNlbGYtJmd0O3BhZ2Vfc2l6ZSk7CiYjNDM7CUFTU0VSVF9ORSh1ZmZkX2FyZ3MucGFnZV9idWZmZXIsIE5VTEwpOwomIzQzOwl1ZmZkX2FyZ3MucGFnZV9zaXplID0gc2VsZi0mZ3Q7cGFnZV9zaXplOwomIzQzOwomIzQzOwlyZXQgPSBwdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZCwgTlVMTCwgdWZmZF9oYW5kbGVyX3RocmVhZCwgJmFtcDt1ZmZkX2FyZ3MpOwomIzQzOwlBU1NFUlRfRVEocmV0LCAwKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVXNlIHRoZSB1bmxvY2tlZCByZWFkIHBhdGggd2hpY2ggYWxsb3dzIHRoZSBtbWFwIGxvY2sgdG8gYmUKJiM0MzsJICogZHJvcHBlZCBkdXJpbmcgdGhlIGZhdWx0LCBlbmFibGluZyB1c2VyZmF1bHRmZCByZXNvbHV0aW9uLgomIzQzOwkgKi8KJiM0MzsJcmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtJmd0O2ZkLCBITU1fRE1JUlJPUl9SRUFEX1VOTE9DS0VELAomIzQzOwkJCSAgICAgIGJ1ZmZlciwgbnBhZ2VzKTsKJiM0MzsJQVNTRVJUX0VRKHJldCwgMCk7CiYjNDM7CUFTU0VSVF9FUShidWZmZXItJmd0O2NwYWdlcywgbnBhZ2VzKTsKJiM0MzsKJiM0MzsJLyogVmVyaWZ5IHRoZSBkZXZpY2UgcmVhZCB0aGUgZGF0YSBmaWxsZWQgYnkgdGhlIHVmZmQgaGFuZGxlciAqLwomIzQzOwlwdHIgPSBidWZmZXItJmd0O21pcnJvcjsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHNpemU7ICYjNDM7JiM0MztpKQomIzQzOwkJQVNTRVJUX0VRKHB0cltpXSwgKHVuc2lnbmVkIGNoYXIpMHhBQik7CiYjNDM7CiYjNDM7CW53cml0ZSA9IHdyaXRlKHN0b3BfZmQsICZhbXA7c3RvcCwgc2l6ZW9mKHN0b3ApKTsKJiM0MzsJQVNTRVJUX0VRKG53cml0ZSwgc2l6ZW9mKHN0b3ApKTsKJiM0MzsJcHRocmVhZF9qb2luKHRocmVhZCwgTlVMTCk7CiYjNDM7CWNsb3NlKHN0b3BfZmQpOwomIzQzOwlmcmVlKHVmZmRfYXJncy5wYWdlX2J1ZmZlcik7CiYjNDM7CWNsb3NlKHVmZmQpOwomIzQzOwlobW1fYnVmZmVyX2ZyZWUoYnVmZmVyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7CiBURVNUX0hBUk5FU1NfTUFJTgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY2NwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDM3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgSE1NIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMsIGFuZCBpdCYjMzk7cyBtYWtpbmcgc29tZSBwcmV0dHkgZnVuZGFtZW50YWwgY2hhbmdlcyB0byB0aGUgSG9zdCBNZW1vcnkgTWFuYWdlbWVudCAoSE1NKSBjb2RlLiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIHRocnVzdCBpcyB0byBpbnRyb2R1Y2UgdGhpcyBuZXcgZnVuY3Rpb24sIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAsIGFsb25nc2lkZSBhIGxvY2tlZCB2ZXJzaW9uIG9mIHRoZSBleGlzdGluZyBgaG1tX3JhbmdlX2ZhdWx0YC4gSSBzZWUgdGhhdCB0aGUgcGF0Y2ggdG91Y2hlcyBhIGJ1bmNoIG9mIGZpbGVzOiBgbW0vaG1tLmNgLCBgaW5jbHVkZS9saW51eC9obW0uaGAsIHRoZSBkb2N1bWVudGF0aW9uLCBhbmQgdGhlbiBhIHNsZXcgb2YgZHJpdmVyIGZpbGVzIOKAkyBBTUQsIERSTSwgTm91dmVhdSwgSHlwZXItViwgSW5maW5pYmFuZCwgYW5kIGV2ZW4gc29tZSB0ZXN0IGNvZGUuIENsZWFybHksIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZTsgaXQmIzM5O3MgZ2V0dGluZyBpdHMgaGFuZHMgZGlydHkgaW4gSE1NJiMzOTtzIGNvcmUgbG9naWMgYW5kIGRpcmVjdGx5IGltcGFjdGluZyBob3cgdGhlc2UgZHJpdmVycyBpbnRlcmFjdCB3aXRoIG1lbW9yeS4gVGhlIGFkZGl0aW9uIG9mIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAsIGluIHBhcnRpY3VsYXIsIGluZGljYXRlcyBhIHRhcmdldGVkIHVwZGF0ZSBmb3IgZHJpdmVyIHVzZS4KCk15IG5leHQgbW92ZSBpcyB0byB6ZXJvIGluIG9uIHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgZm9yIGZ1enppbmcuIEkmIzM5O20gdGhpbmtpbmcsIGJhc2VkIG9uIHRoaXMgY2hhbmdlLCBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uOiBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgLCBgaG1tX3JhbmdlX2ZhdWx0YCwgYGhtbV9kb19mYXVsdGAsIGBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkYCwgYW5kIGBobW1fcmVjb3JkX2ZhdWx0YC4gVGhlc2UgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFuZCB0aGUgcmVsYXRlZCBpbnRlcm5hbCBmdW5jdGlvbnMuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gV2hhdCBlbmFibGVzIHRoaXMgSE1NIGZ1bmN0aW9uYWxpdHk/IEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHRvIHVuZGVyc3RhbmQgd2hlbiBgaG1tX3JhbmdlX2ZhdWx0YCBpcyBldmVuIGNvbXBpbGVkLiBJJiMzOTtsbCBzZWFyY2ggZm9yIGBobW1fcmFuZ2VfZmF1bHRgIHdpdGhpbiBgbW0vaG1tLmNgIGFuZCBgbW0vS2NvbmZpZ2AsIGJ1dCBJIG5lZWQgdG8gZ28gZnVydGhlci4gSG1tLCBJIGtub3cgYG1tL2htbS5jYCBpcyBjb21waWxlZCBjb25kaXRpb25hbGx5LCBkZXBlbmRpbmcgb24gc29tZSBjb25maWcgdmFyaWFibGVzLiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgYG1tL01ha2VmaWxlYCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSBjb25maWd1cmF0aW9ucyB0aGF0IGNvbnRyb2wgaXRzIGluY2x1c2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtobW0ubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTEzOD1vYmotJChDT05GSUdfWk9ORV9ERVZJQ0UpICYjNDM7PSBtZW1yZW1hcC5vXG5tbS9NYWtlZmlsZToxMzk6b2JqLSQoQ09ORklHX0hNTV9NSVJST1IpICYjNDM7PSBobW0ub1xubW0vTWFrZWZpbGUtMTQwLW9iai0kKENPTkZJR19NRU1GRF9DUkVBVEUpICYjNDM7PSBtZW1mZC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1NTkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSG1tLCBgQ09ORklHX0hNTV9NSVJST1JgIE5lZWRlZD8qKgoKUmlnaHQsIHNvIGl0IGxvb2tzIGxpa2UgdGhlIGN1cnJlbnQgdGFzayBuZWNlc3NpdGF0ZXMgdGhlIHVzZSBvZiBgQ09ORklHX0hNTV9NSVJST1JgLiBBIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGFzIGFsd2F5cywgaXMgdG8gY2hlY2sgaG93IHRoaXMgZmVhdHVyZSBpcyBhY3R1YWxseSAqdXNlZCogaW4gdGhlIGNvZGViYXNlLiBMZXQmIzM5O3MgZGlnIGludG8gYGxpYi90ZXN0X2htbS5jYC4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSBleGFtcGxlIGNvbmZpZ3VyYXRpb25zIGFuZCB0ZXN0IHNldHVwcyByZXNpZGUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgZWl0aGVyIGEgY2xlYXIgZXhhbXBsZSBvZiBob3cgYENPTkZJR19ITU1fTUlSUk9SYCBpcyBkZWZpbmVkLCBvciBhdCB0aGUgdmVyeSBsZWFzdCwgc29tZSBpbmRpY2F0aW9ucyBvZiBkZXBlbmRlbnQgY29uZmlndXJhdGlvbnMgb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gaXRzIHByZXNlbmNlLiBUaGlzIGZpbGUgd2lsbCBwcm9iYWJseSBob2xkIHRoZSBrZXlzIHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZmVhdHVyZSBoYXMgYmVlbiB2YWxpZGF0ZWQgYW5kIHRoZSBhc3N1bXB0aW9ucyBhYm91dCBpdHMgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Rlc3RfaG1tLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL01ha2VmaWxlPTEwMj1vYmotJChDT05GSUdfVEVTVF9MT0NLVVApICYjNDM7PSB0ZXN0X2xvY2t1cC5vXG5saWIvTWFrZWZpbGU6MTAzOm9iai0kKENPTkZJR19URVNUX0hNTSkgJiM0Mzs9IHRlc3RfaG1tLm9cbmxpYi9NYWtlZmlsZS0xMDQtb2JqLSQoQ09ORklHX1RFU1RfRlJFRV9QQUdFUykgJiM0Mzs9IHRlc3RfZnJlZV9wYWdlcy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4OTIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIEhNTSBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJIHNlZSB3ZSBuZWVkIGBDT05GSUdfVEVTVF9ITU1gLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgcmVsZXZhbnQgZHJpdmVyIGNvZGUsIHNvIEkmIzM5O2xsIHF1aWNrbHkgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbnMgdXNlZCBpbiBgZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uY2AgYW5kIGBkcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jYC4gSG93ZXZlciwgSSYjMzk7bSB0aGlua2luZyB0aGUgZm9jdXMgaGVyZSBzaG91bGQgYmUgY29yZSBITU0gdGVzdGluZywgYW5kIGBURVNUX0hNTWAgc2VlbXMgbGlrZSBpdCYjMzk7cyBzcGVjaWZpY2FsbHkgdGFpbG9yZWQgZm9yIHRoYXQgcHVycG9zZS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYFRFU1RfSE1NYCBhcyB0aGUgbW9yZSBkaXJlY3QgcGF0aC4gVG8gbWFrZSBzdXJlLCB0aG91Z2gsIGxldCBtZSBkb3VibGUtY2hlY2sgYG1tL0tjb25maWdgIGZvciB0aGUgYEhNTV9NSVJST1JgIGNvbmZpZ3VyYXRpb247IGl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIHZlcmlmeSBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0ZWQgb3B0aW9ucyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSE1NX01JUlJPUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMjI4PWNvbmZpZyBaT05FX0RFVklDRVxuLS1cbm1tL0tjb25maWctMTI0OS0jXG5tbS9LY29uZmlnOjEyNTA6Y29uZmlnIEhNTV9NSVJST1Jcbm1tL0tjb25maWctMTI1MS1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzI2OAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGVjb2RpbmcgdGhlIEJvb2wqKgoKQWxyaWdodCwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYEhNTV9NSVJST1JgIGlzIGEgQm9vbGVhbiB2YXJpYWJsZSwgbGlrZWx5IGNvbnRyb2xsaW5nIHNvbWUgc29ydCBvZiBtaXJyb3Jpbmcgb3IgcmVmbGVjdGlvbiBiZWhhdmlvciB3aXRoaW4gbXkgSGlkZGVuIE1hcmtvdiBNb2RlbCAoSE1NKSBpbXBsZW1lbnRhdGlvbi4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBwcm9iYWJseSBzZWxlY3RlZCBieSBgVEVTVF9ITU1gIHN1Z2dlc3RzIHRoaXMgaXMgcmVsYXRlZCB0byBhIHRlc3RpbmcgY29uZmlndXJhdGlvbi4gSeKAmW0gZ3Vlc3NpbmcsIGJhc2VkIG9uIHByaW9yIGV4cGVyaWVuY2UsIHRoYXQgdGhpcyB0ZXN0IHN1aXRlIHByb2JhYmx5IHRvZ2dsZXMgdmFyaW91cyBtb2RlbCBwYXJhbWV0ZXJzIGFuZCBjb25maWd1cmF0aW9ucyB0byB2YWxpZGF0ZSB0aGUgZnVuY3Rpb25hbGl0eS4gVGhlcmVmb3JlLCBgSE1NX01JUlJPUmAgaXMgbGlrZWx5IGEgY29uZmlndXJhdGlvbiB0byB0ZXN0IGEgbW9kZWwgdmFyaWF0aW9uLiBUaGlzIHNldHVwIGFpbXMgdG8gZW5zdXJlIHRoYXQgdGhlIEhNTSBiZWhhdmVzIGFzIGV4cGVjdGVkIHVuZGVyIGEgcmVmbGVjdGVkIG9yIG1pcnJvcmVkIGRhdGEgc3BhY2Ugc2NlbmFyaW8uIEkmIzM5O2QgbmVlZCBtb3JlIGNvbnRleHQgb24gdGhlIEhNTSBzdHJ1Y3R1cmUgYW5kIHRlc3RpbmcgZnJhbWV3b3JrIHRvIHBpbiBkb3duIHRoZSAqZXhhY3QqIHB1cnBvc2UsIGJ1dCB0aGUgY29yZSBpZGVhIGlzIGNsZWFyOiBpdCYjMzk7cyBhIHRlc3QgZmxhZywgYW5kIG1pcnJvcmluZyBpcyB0aGUgbWVjaGFuaXNtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVEVTVF9ITU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1ZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1Zz0zMzE4PWNvbmZpZyBURVNUX01FTUlOSVRcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzI1LVxubGliL0tjb25maWcuZGVidWc6MzMyNjpjb25maWcgVEVTVF9ITU1cbmxpYi9LY29uZmlnLmRlYnVnLTMzMjctXHR0cmlzdGF0ZSBcJiMzNDtUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2MTkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIFRFU1RfSE1NIFNlbGVjdGlvbioqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byBxdWlja2x5IGdyYXNwIHdoYXQgYFRFU1RfSE1NYCBoYXMgcGlja2VkLiBUaGUgbmFtZSBpdHNlbGYgaXMgYSBjbHVlOyBpdCYjMzk7cyBsaWtlbHkgYSBzcGVjaWZpY2FsbHkgZGVzaWduZWQgaGlkZGVuIE1hcmtvdiBtb2RlbCBmb3Igc29tZSBwdXJwb3NlLiBUaGUgY3JpdGljYWwgcXVlc3Rpb24gbm93IGlzLCB3aGF0IGFyZSB0aGUgY2hhcmFjdGVyaXN0aWNzIG9mIHRoYXQgcGFydGljdWxhciBtb2RlbD8gSXMgaXQgYSBiYXNpYyBpbXBsZW1lbnRhdGlvbiwgb3IgZG9lcyBpdCBpbmNvcnBvcmF0ZSBtb3JlIGFkdmFuY2VkIHRlY2huaXF1ZXM/IFdoYXQgZmVhdHVyZXMgd2VyZSBjb25zaWRlcmVkIHdoZW4gc2VsZWN0aW5nIGBURVNUX0hNTWAgaW4gdGhpcyBzaXR1YXRpb24/IEkmIzM5O20gYWxyZWFkeSBmb3JtdWxhdGluZyBxdWVzdGlvbnMgaW4gbXkgbWluZCwgc3VjaCBhcyAmIzM0O1doYXQgZGF0YSB3YXMgdXNlZCB0byB0cmFpbiBpdD8mIzM0OywgJiMzNDtXaGF0IGFyZSB0aGUga2V5IHN0YXRlIHRyYW5zaXRpb25zPyYjMzQ7IGFuZCAmIzM0O1doYXQgb2JqZWN0aXZlIHdhcyB0aGlzIEhNTSBjaG9zZW4gdG8gZnVsZmlsbD8mIzM0OyBUaGUgZ29hbCBpcyB0byByYXBpZGx5IGRldGVybWluZSBpZiBgVEVTVF9ITU1gIG1ha2VzIHNlbnNlLCBvciBpZiBJIG5lZWQgdG8gZGlnIGRlZXBlciBmb3IgaXRzIHJhdGlvbmFsZS4gSXQmIzM5O3MgZXNzZW50aWFsbHkgYSBzYW5pdHkgY2hlY2sgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdC4qSE1NJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bGliL0tjb25maWcuZGVidWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL0tjb25maWcuZGVidWc9MzMyNj1jb25maWcgVEVTVF9ITU1cbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzI5LVx0ZGVwZW5kcyBvbiBERVZJQ0VfUFJJVkFURVxubGliL0tjb25maWcuZGVidWc6MzMzMDpcdHNlbGVjdCBITU1fTUlSUk9SXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzMxLVx0c2VsZWN0IE1NVV9OT1RJRklFUlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzk1NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIEhNTSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIGBURVNUX0hNTWAgaXMgcG9pbnRpbmcgbWUgdG93YXJkcyBgSE1NX01JUlJPUmAuIFRoYXQmIzM5O3MgdGhlIHByaW1hcnkgc2VsZWN0aW9uLCBub3RlZC4gTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGVyZSBhcmVuJiMzOTt0ICphbnkqIG90aGVyIHBvdGVudGlhbCBITU0tcmVsYXRlZCBjb25maWd1cmF0aW9ucyBpbiBwbGF5LiBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIExldCYjMzk7cyBzZWUuLi4gaXMgYENPTkZJR19EUk1fTk9VVkVBVV9TVk1gIGEgZmFjdG9yIGhlcmU/IE9yIHBlcmhhcHMgYENPTkZJR19EUk1fR1BVU1ZNYD8gVGhvc2Ugc2VlbSByZWxldmFudCB0byBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gRFJNLCBzbyBjaGVja2luZyB0aGVtIGlzIGEgbXVzdC4gQW5kIHdoYXQgYWJvdXQgYENPTkZJR19JTkZJTklCQU5EX09OX0RFTUFORF9QQUdJTkdgPyBITU0gdG91Y2hlcyBtZW1vcnksIHNvIHRoaXMgaXMgd29ydGggYSBsb29rLiBNaWdodCBgQ09ORklHX01TSFZgIG9yIGBDT05GSUdfQU1EWEROQWAgaGF2ZSBhbnkgaW5mbHVlbmNlPyBITU0gYW5kIHZpcnR1YWxpemF0aW9uLCBhbmQgdGhlbiBITU0gYW5kIEFNRCYjMzk7cyBETkEgYXJjaGl0ZWN0dXJlLgoKQWxyaWdodCwgSSBzaG91bGQgc3BlY2lmaWNhbGx5IGNoZWNrIHRoYXQgYGRyaXZlcnMvYWNjZWwvYW1keGRuYS9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gc2VlIHRoZSByZWxhdGlvbnNoaXAgaGVyZSwgaWYgdGhlcmUgaXMgb25lLiBHb3R0YSBiZSBhYnNvbHV0ZWx5IHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYSBkZXBlbmRlbmN5IG9yIGludGVyYWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBEUk1fQU1EWEROQSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYWNjZWwvYW1keGRuYS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzNTQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgQ29kZWJhc2U6IElkZW50aWZ5aW5nIHRoZSBSZWxldmFudCBDb25maWd1cmF0aW9uKioKCk9rYXksIGhvbGQgb24uIEkmIzM5O3ZlIGdvdCBhIG1vZGlmaWNhdGlvbiBzaG93aW5nIHVwIGluIGBkcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguY2AuIFRoYXQmIzM5O3MgYSBrZXkgZmlsZSBmb3IgdGhlIEFNRCBERE5BIGFjY2VsZXJhdGlvbiBjb250ZXh0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGNoYW5nZWQuIFRoZSBmaXJzdCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGFzc29jaWF0ZWQgY29uZmlndXJhdGlvbiB0aGF0IGdvdmVybnMgdGhpcyBwYXJ0IG9mIHRoZSBkcml2ZXIuIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBjb25maWd1cmF0aW9uIHRoYXQgY29udHJvbHMgaG93IHRoaXMgcG9ydGlvbiBvZiB0aGUgY29kZSBpcyBidWlsdCBhbmQgZW5hYmxlZC4gVGltZSB0byBnbyBodW50aW5nIGZvciB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLiBJIGV4cGVjdCB0aGVyZSYjMzk7cyBwcm9iYWJseSBhIGRlZmNvbmZpZyBvciBzb21lIG90aGVyIGJ1aWxkLXRpbWUgZmxhZyBpbmZsdWVuY2luZyBob3cgdGhhdCBwYXJ0aWN1bGFyIEFJRTIgY29udGV4dCBpcyBzZXQgdXAuIExldCYjMzk7cyBzZWUgaWYgdGhlIGNvbmZpZyBpcyBpbiB0aGUgcGFyZW50IGRpcmVjdG9yeSwgb3IgaW4gdGhlIGRyaXZlciYjMzk7cyBvd24gZGlyZWN0b3J5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthaWUyX2N0eC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9hY2NlbC9hbWR4ZG5hL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYWNjZWwvYW1keGRuYS9NYWtlZmlsZT0zPWFtZHhkbmEteSA6PSBcXFxuLS1cbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9NYWtlZmlsZS02LVx0YWllX3NtdS5vIFxcXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvTWFrZWZpbGU6NzpcdGFpZTJfY3R4Lm8gXFxcbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9NYWtlZmlsZS04LVx0YWllMl9lcnJvci5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAwOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NzExCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBNb2R1bGUgSWRlbnRpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHNvbWV0aGluZywgYW5kIHRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsICYjMzQ7V2hhdCYjMzk7cyB0aGUgbmFtZSBvZiB0aGlzIHBhcnRpY3VsYXIgbW9kdWxlIG9yIGNvbXBvbmVudCBJJiMzOTttIGRlYWxpbmcgd2l0aD8mIzM0OyBUaGUgY3JpdGljYWwgZmlyc3Qgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIG9yIHRyb3VibGVzaG9vdGluZyBhbnkgc3lzdGVtIGlzIHBpbnBvaW50aW5nIGl0cyBzcGVjaWZpYyBpZGVudGl0eS4gQW5kIHRoYXQgbW9kdWxlIG5hbWUsIHN0cmFpZ2h0IHVwLCBpcyBgYW1keGRuYWAuIFRoYXQmIzM5O3MgdGhlIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbiB0byBzdGFydCB3aXRoLiBXaXRoIHRoYXQgbmFtZSBJIGNhbiBsb29rIGludG8gcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiwgcmVsYXRlZCBjb2RlIGFuZCBvdGhlciBpbXBsZW1lbnRhdGlvbnMgdGhhdCBtYXkgYmUgcmVsZXZhbnQuIE5vdyBJIGtub3cgcHJlY2lzZWx5IHdoYXQgSSYjMzk7bSBkZWFsaW5nIHdpdGgsIGFuZCBJIGNhbiBtb3ZlIGZvcndhcmQgYWNjb3JkaW5nbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FtZHhkbmEteSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYWNjZWwvYW1keGRuYS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2FjY2VsL2FtZHhkbmEvTWFrZWZpbGUtMi1cbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9NYWtlZmlsZTozOmFtZHhkbmEteSA6PSBcXFxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL01ha2VmaWxlLTQtXHRhaWUubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODk2NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkh1bnRpbmcgRG93biB0aGUgQU1EIFhETkEgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O1doZXJlJiMzOTtzIHRoZSBjb25maWcgZm9yIGBhbWR4ZG5hYD8mIzM0OyBUaGlzIGlzIGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHNwZWNpZmljIGhhcmR3YXJlIGlzIGJlaW5nIGluaXRpYWxpemVkLCBtYW5hZ2VkLCBhbmQgaW50ZXJhY3RlZCB3aXRoLiBLbm93aW5nIHRoZSBjb25maWd1cmF0aW9uIGlzIGZ1bmRhbWVudGFsIHRvIGp1c3QgYWJvdXQgZXZlcnl0aGluZy4gSXQgZGljdGF0ZXMgdGhlIGF2YWlsYWJsZSByZXNvdXJjZXMsIHRoZSBjbG9jayBzZXR0aW5ncywgcG93ZXIgcHJvZmlsZXMsIGludGVycnVwdCBtYXBwaW5ncyDigJMgdGhlIHdob2xlIHNoZWJhbmcuIFdpdGhvdXQgaXQsIEkmIzM5O20gYmFzaWNhbGx5IGZseWluZyBibGluZC4gSXMgaXQgYSBkZWRpY2F0ZWQgZmlsZT8gUGFydCBvZiBhIGJyb2FkZXIgc3lzdGVtIGNvbmZpZ3VyYXRpb24/IERlZmluZWQgaW4gZmlybXdhcmU/IE1heWJlIGl0JiMzOTtzIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCBiYXNlZCBvbiBoYXJkd2FyZSBkZXRlY3Rpb24/IFRoZSBodW50IGJlZ2lucy4gVGhlIG51YW5jZXMgaGVyZSwgYXMgd2UgYm90aCBrbm93LCBhcmUgZ29pbmcgdG8gYmUga2V5IHRvIGFueSBkZWVwIGRpdmUuIFRpbWUgdG8gc3RhcnQgZGlnZ2luZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YW1keGRuYS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9hY2NlbC9hbWR4ZG5hL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYWNjZWwvYW1keGRuYS9NYWtlZmlsZT0zMz1hbWR4ZG5hLSQoQ09ORklHX0RFQlVHX0ZTKSAmIzQzOz0gYW1keGRuYV9kZWJ1Z2ZzLm9cbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9NYWtlZmlsZTozNDpvYmotJChDT05GSUdfRFJNX0FDQ0VMX0FNRFhETkEpID0gYW1keGRuYS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAwOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5Mjc5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBBTUQgWEROQSBEUk0gQWNjZWxlcmF0aW9uIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIGBDT05GSUdfRFJNX0FDQ0VMX0FNRFhETkFgLi4uIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgdGhpcy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZHJpdmVyIHN1cHBvcnQuIFRoZSBxdWljayBwYXRoIHRvIHRoYXQgaXMsIHdpdGhvdXQgYSBkb3VidCwgZGl2aW5nIGludG8gYGRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmNgLiBUaGF0IGZpbGUgaXMgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCwgdGhlcmVmb3JlLCBwb3RlbnRpYWxseSB0aGUgYWNjZWxlcmF0aW9uIGhvb2tzIGZvciBBTUQmIzM5O3MgRE5BLXJlbGF0ZWQgYWNjZWxlcmF0aW9uIHdvdWxkIGJlIGRlZmluZWQuIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWluIHRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zLCB0aGUgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhlIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgQU1EIEdQVSBWaXJ0dWFsIE1lbW9yeSAoR1VTVk0pIHN1YnN5c3RlbSBpZiB0aGVyZSBpcyBhbnkuIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIHdoYXQgYXNwZWN0cyBvZiB0aGUgaGFyZHdhcmUgdGhpcyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHVubG9ja3MgYW5kIHdoYXQgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIGFyZSBhc3NvY2lhdGVkIHdpdGggdXNpbmcgaXQuIFRoaXMgd2lsbCBoZWxwIGRldGVybWluZSB3aGF0IHRlc3RpbmcgaXMgcmVxdWlyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RybV9ncHVzdm0ubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGU9MTA5PWRybV9ncHVzdm1faGVscGVyLXkgOj0gXFxcbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZToxMTA6XHRkcm1fZ3B1c3ZtLm9cbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZS0xMTEtZHJtX2dwdXN2bV9oZWxwZXItJChDT05GSUdfWk9ORV9ERVZJQ0UpICYjNDM7PSBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTYzNwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBBY3RpdmF0aW9uIG9mIGBkcm1fZ3B1c3ZtX2hlbHBlcmAqKgoKQWxyaWdodCwgc28gdGhlIHF1ZXN0aW9uIGlzLCAqd2hhdCogYWN0dWFsbHkgZW5hYmxlcyB0aGUgYGRybV9ncHVzdm1faGVscGVyYCBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUga2VybmVsPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBrbm9icyB0aGF0IGFyZSB0aWVkIHRvIHRoaXMuIElzIGl0IGEgY29yZSBvcHRpb24gYnVyaWVkIGRlZXAgd2l0aGluIHRoZSBEUk0gc3Vic3lzdGVtLCBvciBpcyBpdCBtb3JlIGNsb3NlbHkgbGlua2VkIHRvIHNwZWNpZmljIEdQVSBkcml2ZXJzLCBwZXJoYXBzIHRocm91Z2ggdGhlaXIgYXNzb2NpYXRlZCBtZW1vcnkgbWFuYWdlbWVudCBvcHRpb25zPyBJJiMzOTtsbCBwcm9iYWJseSBuZWVkIHRvIGRlbHZlIGludG8gdGhlIGBLY29uZmlnYCBmaWxlcyBmb3IgdGhlIERSTSAoRGlyZWN0IFJlbmRlcmluZyBNYW5hZ2VyKSBhbmQgYW55IHJlbGV2YW50IEdQVSBkcml2ZXJzLiBJIGJldCBpdCBpcyBzb21lIGtpbmQgb2YgbWVtb3J5IG1hbmFnZW1lbnQgb3Igc2hhcmVkIHZpcnR1YWwgbWVtb3J5IG9wdGlvbi4KCkkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGRlcGVuZGVuY2llcywgZGVmYXVsdCB2YWx1ZXMsIGFuZCBhbnkgcmVsYXRpb25zaGlwcyB0byBvdGhlciBmZWF0dXJlcywgc3BlY2lmaWNhbGx5IGFueXRoaW5nIG1lbnRpb25pbmcgU1ZNLCBvciBldmVuIG1vcmUgYnJvYWRseSwgc2hhcmVkIG1lbW9yeSwgYW5kIGhvdyB0aGF0IGludGVyYWN0cyB3aXRoIHRoZSB1c2VyIHNwYWNlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZ3JhbnVsYXJpdHkgaGVyZS4gSXMgdGhpcyB0aWVkIHRvIHRoZSBlbmFibGluZyBvZiBJT01NVSBvciBzb21ldGhpbmc/IElzIGl0IGFsd2F5cyBvbj8gSWYgbm90LCB3aGF0IGNpcmN1bXN0YW5jZXMgcmVxdWlyZSBpdCB0byBiZSBlbmFibGVkPyBJZiB0aGVyZSBpcyBhIHdheSB0byBkaXNhYmxlIGl0LCBJIHdpbGwgYmUgbG9va2luZyB0byBzZWUgaWYgdGhlcmUgaXMgYW55IHJlYXNvbiB0byBkbyBzby4KCkkmIzM5O2xsIGJlIGN1cmlvdXMgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY29uZmlndXJhdGlvbi4gRG9lcyBpdCByZXF1aXJlIGEgc3BlY2lmaWMga2VybmVsIHZlcnNpb24sIGFuZCBkb2VzIGl0IGNvbWUgd2l0aCBhbnkgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnM/IEkgbmVlZCB0byBrbm93IGhvdyBpdCBpbXBhY3RzIHRoZSBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZSB3aGVuIGl0IGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuIFRoaXMgd2lsbCBndWlkZSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvcHRpbWFsIHVzZSBjYXNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHJtX2dwdXN2bV9oZWxwZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlPTEwNz1vYmotJChDT05GSUdfRFJNX0dQVVZNKSAmIzQzOz0gZHJtX2dwdXZtLm9cbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZS0xMDgtXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGU6MTA5OmRybV9ncHVzdm1faGVscGVyLXkgOj0gXFxcbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZS0xMTAtXHRkcm1fZ3B1c3ZtLm9cbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZToxMTE6ZHJtX2dwdXN2bV9oZWxwZXItJChDT05GSUdfWk9ORV9ERVZJQ0UpICYjNDM7PSBcXFxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlLTExMi1cdGRybV9wYWdlbWFwLm9cXFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZS0xMTQtXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGU6MTE1Om9iai0kKENPTkZJR19EUk1fR1BVU1ZNKSAmIzQzOz0gZHJtX2dwdXN2bV9oZWxwZXIub1xuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlLTExNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyMTYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gR1BVIFZpcnR1YWxpemF0aW9uKioKCkFscmlnaHQsIHRoZSBkaXNjdXNzaW9uIGhhcyBsYW5kZWQgb24gYENPTkZJR19EUk1fR1BVU1ZNYC4gUmlnaHQgYXdheSwgbXkgbWluZCBnb2VzIHRvIHRoZSBsaWtlbHkgaW1wbGVtZW50YXRpb24uIEkgaW1tZWRpYXRlbHkgdGhpbmssICp0aGF0IG1lYW5zIEkgc2hvdWxkIGNoZWNrIHRoZSBOb3V2ZWF1IGRyaXZlciwgc3BlY2lmaWNhbGx5IGBkcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N2bS5jYC4qIEkmIzM5O20gYXNzdW1pbmcgdGhhdCYjMzk7cyB0aGUgcGxhY2Ugd2hlcmUgdGhlIGNvcmUgR1BVIFN5c3RlbSBWaXJ0dWFsIE1hY2hpbmUgY29kZSwgaWYgYW55IGV4aXN0cywgd291bGQgcmVzaWRlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgdGhlIHNoYXJlZCBtZW1vcnkgYW5kIHZpcnR1YWxpemF0aW9uIGNvbXBvbmVudHMgZm9yIHRoZSBOb3V2ZWF1IGRyaXZlcnMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGV5IGFyZSBkb2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtub3V2ZWF1X3N2bS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDQ0MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIGEgTW9kaWZpZWQgRmlsZSoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHNlZSB0aGF0IGBub3V2ZWF1X3N2bS5jYCBoYXMgYmVlbiB0b3VjaGVkLiBUaGF0JiMzOTtzIGEga2V5IGZpbGUgaW4gdGhlIE5vdXZlYXUgZHJpdmVyLCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIFN5c3RlbSBWaXJ0dWFsIE1lbW9yeSAoU1ZNKSwgd2hpY2ggaXMgY3JpdGljYWwgZm9yIHRoaW5ncyBsaWtlIEdQVSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc2hhcmluZy4gTXkgaW1tZWRpYXRlIHJlYWN0aW9uIGlzIHRvIHRyYWNrIGRvd24gaXRzIGNvbmZpZ3VyYXRpb24uIENoYW5nZXMgdG8gdGhhdCBmaWxlLCBlc3BlY2lhbGx5IHJlbGF0ZWQgdG8gbWVtb3J5IGhhbmRsaW5nLCBjYW4gaGF2ZSBwcmV0dHkgZmFyLXJlYWNoaW5nIGltcGxpY2F0aW9ucy4gSXQgY291bGQgYmUgYSBzaW1wbGUgYnVnIGZpeCwgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIG9yLCBwb3RlbnRpYWxseSwgYSBjaGFuZ2UgaW4gaG93IHRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIGhhcmR3YXJlLCBtYXliZSBldmVuIGEgbmV3IGZlYXR1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgbW9kaWZpY2F0aW9uIGJlZm9yZSBJIG1ha2UgYW55IGFzc3VtcHRpb25zLiBGaXJzdCBzdGVwOiBkaXZpbmcgaW50byBpdHMgY29uZmlndXJhdGlvbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtub3V2ZWF1X3N2bSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2NzMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGlzc3VlOgoKKipEZWx2aW5nIGludG8gdGhlIE5vdXZlYXUgS2J1aWxkIFN0cnVjdHVyZSoqCgpPa2F5LCBJJiMzOTttIHRyeWluZyB0byB0cmFjayBkb3duIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBOb3V2ZWF1IGRyaXZlci4gV2hlcmUgd291bGQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zIGJlPyBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgY29yZSBkaXJlY3Rvcmllcy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L2AuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSwgYnV0IEkgd2FudCB0byBiZSBjZXJ0YWluIHRoYXQgSSYjMzk7bSBvbiB0aGUgcmlnaHQgdHJhY2suIEFuZCBpZiBJIGFtLCB3aGVyZSB3b3VsZCB0aGUgY29tcGlsYXRpb24gYW5kIGJ1aWxkIGNvbmZpZ3VyYXRpb25zIGJlIG1hbmFnZWQ/IE1heWJlIHRoZXJlJiMzOTtzIGEgYEtidWlsZGAgZmlsZSBpbiB0aGVyZT8gVGhhdCYjMzk7cyB0eXBpY2FsbHkgd2hlcmUgdGhlc2UgdGhpbmdzIGFyZSBkZWZpbmVkLCBlc3BlY2lhbGx5IGluIHRoZSBrZXJuZWwuIExldCYjMzk7cyBjaGVjayBgZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvS2J1aWxkYC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIGxvb2tpbmcgaW4gdGhlIHJpZ2h0IHNwb3QsIHNvIGxldCYjMzk7cyBzdGFydCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bm91dmVhdV9zdm0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9LYnVpbGQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvS2J1aWxkPTQwPW5vdXZlYXUteSAmIzQzOz0gbm91dmVhdV9nZW0ub1xuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvS2J1aWxkOjQxOm5vdXZlYXUtJChDT05GSUdfRFJNX05PVVZFQVVfU1ZNKSAmIzQzOz0gbm91dmVhdV9zdm0ub1xuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvS2J1aWxkLTQyLW5vdXZlYXUtJChDT05GSUdfRFJNX05PVVZFQVVfU1ZNKSAmIzQzOz0gbm91dmVhdV9kbWVtLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwMjUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIGFuZCBEcml2ZXIgRXhhbWluYXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gc2VlaW5nIGEgcmVmZXJlbmNlIHRvIGBDT05GSUdfRFJNX05PVVZFQVVfU1ZNYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hhdCYjMzk7cyB0aGUgY29udGV4dCBoZXJlPyYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZsYWcgcmVsYXRlcyB0byB0aGUgb3ZlcmFsbCBzeXN0ZW0gY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgdGhlIE5vdXZlYXUgZHJpdmVyIGFuZCBTaGFyZWQgVmlydHVhbCBNZW1vcnkuIFdoZXJlIGRvZXMgdGhpcyB2YXJpYWJsZSBmaXQgaW4/CgpNeSBuZXh0IHN0ZXAsIGFuZCB0aGlzIGlzIGFsbW9zdCBhdXRvbWF0aWMgYXQgdGhpcyBwb2ludCwgaXMgdG8gZGl2ZSBpbnRvIGBkcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jYC4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aCBTaGFyZWQgVmlydHVhbCBNZW1vcnkgKFNWTSksIGFuZCBob3cgdGhpcyBkcml2ZXIsIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgSHlwZXItViBlbnZpcm9ubWVudHMsIG1pZ2h0IGJlIGludGVyYWN0aW5nIHdpdGggb3IgYmVpbmcgYWZmZWN0ZWQgYnkgdGhlIE5vdXZlYXUgZHJpdmVyLiBUaGlzIGlzIGxpa2VseSBhbiBhcmVhIHdoZXJlIEkgbWlnaHQgc2VlIHRoZSB1c2Ugb2YgYENPTkZJR19EUk1fTk9VVkVBVV9TVk1gIGFuZCB0aGUgdXNlIG9mIHRoZSBOb3V2ZWF1IGRyaXZlci4gTG9va2luZyBmb3IgZGVwZW5kZW5jaWVzIG9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9ucyBpcyBteSBwcmltYXJ5IGdvYWwuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIHRoaXMgY29uZmlndXJhdGlvbiBzZXR0aW5nIHdpdGhpbiB0aGlzIHNwZWNpZmljIGRyaXZlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXNodl9yZWdpb25zLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2h2L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaHYvTWFrZWZpbGU9MTY9bXNodl9yb290LXkgOj0gbXNodl9yb290X21haW4ubyBtc2h2X3N5bmljLm8gbXNodl9ldmVudGZkLm8gbXNodl9pcnEubyBcXFxuZHJpdmVycy9odi9NYWtlZmlsZToxNzpcdCAgICAgICBtc2h2X3Jvb3RfaHZfY2FsbC5vIG1zaHZfcG9ydGlkX3RhYmxlLm8gbXNodl9yZWdpb25zLm9cbmRyaXZlcnMvaHYvTWFrZWZpbGUtMTgtbXNodl9yb290LSQoQ09ORklHX0RFQlVHX0ZTKSAmIzQzOz0gbXNodl9kZWJ1Z2ZzLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0NjYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW52ZXN0aWdhdGluZyB0aGUgYG1zaHZfcm9vdGAgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgcXVlc3Rpb24gaW1tZWRpYXRlbHkgdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcywgJiMzNDt3aGF0ICpzcGVjaWZpY2FsbHkqIGVuYWJsZXMgdGhlIGBtc2h2X3Jvb3RgIGZlYXR1cmU/JiMzNDsgV2Uga25vdyBpdCBleGlzdHMsIHdlJiMzOTtyZSBmYW1pbGlhciB3aXRoIGl0cyBwdXJwb3NlIGluIGdlbmVyYWwsIGJ1dCB0aGUgcHJlY2lzZSBtZWNoYW5pc20gb2YgaXRzIGFjdGl2YXRpb24gaXNuJiMzOTt0IGFsd2F5cyBpbW1lZGlhdGVseSBvYnZpb3VzLiBJcyBpdCBhIGNvbXBpbGUtdGltZSBmbGFnPyBBIGtlcm5lbCBtb2R1bGUgcGFyYW1ldGVyPyBQZXJoYXBzIGEgc3BlY2lmaWMgZW50cnkgd2l0aGluIGEgcGFydGljdWxhciBjb25maWd1cmF0aW9uIGZpbGUsIG9yIHNldCBvZiBmaWxlcywgd2l0aGluIHRoZSBzeXN0ZW0/CgpNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoaXMgaXNuJiMzOTt0IGEgc2ltcGxlIG9uL29mZiBzd2l0Y2gsIGJ1dCBwcm9iYWJseSBzb21ldGhpbmcgbW9yZSBudWFuY2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gZGlmZmVyZW50IHN5c3RlbSBjb21wb25lbnRzLiBNYXliZSBpdOKAmXMgZGVwZW5kZW50IG9uIGNlcnRhaW4gaGFyZHdhcmUgY2FwYWJpbGl0aWVzLCBvciBhbm90aGVyIHJlbGF0ZWQgZmVhdHVyZSB0aGF0IG11c3QgYmUgZW5hYmxlZC4gSSBrbm93IGl0IGlzbiYjMzk7dCBsaWtlbHkgc29tZXRoaW5nIHRoYXQganVzdCAmIzM0O2lzJiMzNDsuCgpJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byB0cmFjZSB0aGUgY29kZSBwYXRoIHJlbGF0ZWQgdG8gYG1zaHZfcm9vdGAsIG9yIGxvb2sgYXQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gdG8gZmlndXJlIG91dCB3aGVuIGFuZCBob3cgdGhlIHJvb3Qgb2YgdGhpcyBzdHJ1Y3R1cmUgaXMgY3JlYXRlZC4gV2hlcmUgd291bGQgdGhlIG1vc3QgdXNlZnVsIGRvY3VtZW50YXRpb24gYmUgbG9jYXRlZD8gUGVyaGFwcyB0aGUga2VybmVsIGRvY3VtZW50YXRpb24gaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCB0aG91Z2ggaXQgbWlnaHQgYmUgYSBiaXQgdmVyYm9zZS4KCkkmIzM5O20gYXNzdW1pbmcgdGhlIHNwZWNpZmljIGNvbnRleHQgaXMgdGhlIGtleSwgaW4gb3JkZXIgdG8gZ2V0IHRvIHRoZSByb290IG9mIHRoZSBwcm9ibGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttc2h2X3Jvb3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2h2L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaHYvTWFrZWZpbGU9ND1vYmotJChDT05GSUdfSFlQRVJWX0JBTExPT04pXHQmIzQzOz0gaHZfYmFsbG9vbi5vXG5kcml2ZXJzL2h2L01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX01TSFZfUk9PVClcdFx0JiM0Mzs9IG1zaHZfcm9vdC5vXG5kcml2ZXJzL2h2L01ha2VmaWxlLTYtb2JqLSQoQ09ORklHX01TSFZfVlRMKSAgICAgICAgICAmIzQzOz0gbXNodl92dGwub1xuLS1cbmRyaXZlcnMvaHYvTWFrZWZpbGU9MTU9aHZfdXRpbHMteSA6PSBodl91dGlsLm8gaHZfa3ZwLm8gaHZfc25hcHNob3QubyBodl91dGlsc190cmFuc3BvcnQub1xuZHJpdmVycy9odi9NYWtlZmlsZToxNjptc2h2X3Jvb3QteSA6PSBtc2h2X3Jvb3RfbWFpbi5vIG1zaHZfc3luaWMubyBtc2h2X2V2ZW50ZmQubyBtc2h2X2lycS5vIFxcXG5kcml2ZXJzL2h2L01ha2VmaWxlOjE3Olx0ICAgICAgIG1zaHZfcm9vdF9odl9jYWxsLm8gbXNodl9wb3J0aWRfdGFibGUubyBtc2h2X3JlZ2lvbnMub1xuZHJpdmVycy9odi9NYWtlZmlsZToxODptc2h2X3Jvb3QtJChDT05GSUdfREVCVUdfRlMpICYjNDM7PSBtc2h2X2RlYnVnZnMub1xuZHJpdmVycy9odi9NYWtlZmlsZToxOTptc2h2X3Jvb3QtJChDT05GSUdfVFJBQ0VQT0lOVFMpICYjNDM7PSBtc2h2X3RyYWNlLm9cbmRyaXZlcnMvaHYvTWFrZWZpbGUtMjAtbXNodl92dGwteSA6PSBtc2h2X3Z0bF9tYWluLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIxMTUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBhIEh5cGVydmlzb3ItUmVsYXRlZCBJbmZpbmliYW5kIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgdGhhdCBgQ09ORklHX01TSFZfUk9PVGAgZmxhZy4uLiBIbW0sIHRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgc3VnZ2VzdGluZyBhIE1pY3Jvc29mdCBIeXBlci1WIGVudmlyb25tZW50LCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIHJvb3QtbGV2ZWwgYWNjZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhhdCBpbXBhY3RzIEluZmluaWJhbmQgYW5kIHBvdGVudGlhbGx5IE9wZW4gRGF0YSBQYXRoIChPRFApIG9wZXJhdGlvbnMuCgpNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpZyBpbnRvIHRoZSBJbmZpbmliYW5kIGNvZGUsIGFuZCBJIGtub3cgd2hlcmUgdG8gc3RhcnQuIExldCYjMzk7cyBsb29rIGF0IGBkcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jYC4gVGhhdCBmaWxlIGlzIGEgbGlrZWx5IGNhbmRpZGF0ZSBmb3IgaGFuZGxpbmcgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIE9EUCBpbnRlcmFjdGlvbiwgd2hpY2ggd291bGQgYmUgY2VudHJhbCB0byBhIGh5cGVydmlzb3IgZW52aXJvbm1lbnQgbGlrZSBIeXBlci1WLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyBVc2VyIE1lbW9yeSAoVU1FTSkgd2l0aCB0aGUgZmxhZyBzZXQgdG8gc2VlIGhvdyByb290IGFjY2VzcyB3b3VsZCBhZmZlY3QgdGhlIGNvbmZpZ3VyYXRpb24uIEkgd2FudCB0byBzZWUgaG93IHRoYXQgZmxhZyBjaGFuZ2VzIHRoZSBoYW5kbGluZyBvZiBtZW1vcnkgYW5kIGFjY2VzcyBjb250cm9sIHdpdGhpbiB0aGUgY29udGV4dCBvZiBPcGVuIERhdGEgUGF0aCwgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byBhIEh5cGVyLVYgcm9vdCBpbnN0YW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dW1lbV9vZHAubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL01ha2VmaWxlPTIxPWliX2NvcmUtJChDT05GSUdfSU5GSU5JQkFORF9VU0VSX01FTSkgJiM0Mzs9IHVtZW0ubyB1bWVtX2RtYWJ1Zi5vXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9NYWtlZmlsZToyMjppYl9jb3JlLSQoQ09ORklHX0lORklOSUJBTkRfT05fREVNQU5EX1BBR0lORykgJiM0Mzs9IHVtZW1fb2RwLm9cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL01ha2VmaWxlLTIzLWliX2NvcmUtJChDT05GSUdfSU5GSU5JQkFORF9VU0VSX0FDQ0VTU19DT1JFKSAmIzQzOz0gaWJfY29yZV91dmVyYnMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjU1MAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGBDT05GSUdfSU5GSU5JQkFORF9PTl9ERU1BTkRfUEFHSU5HYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIHRoZSBzeXN0ZW0gaXMgcG9pbnRpbmcgbWUgdG93YXJkcyBgQ09ORklHX0lORklOSUJBTkRfT05fREVNQU5EX1BBR0lOR2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBzZXR0aW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGVyZSYjMzk7cyB0aGUgYmVzdCBwbGFjZSB0byBnZXQgYSBnb29kIGhhbmRsZSBvbiBob3cgdGhpcyBpcyB3b3JraW5nPyYjMzQ7IFRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGFuIEluZmluaUJhbmQtcmVsYXRlZCBmZWF0dXJlIGxpa2Ugb24tZGVtYW5kIHBhZ2luZyBpcyBhbHdheXMgdGhlIHJlbGV2YW50IHRlc3RpbmcgY29kZS4gU28sIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoYXQuIExldCBtZSB0YWtlIGEgbG9vayBhdCBgbGliL3Rlc3RfaG1tLmNgLiBIb3BlZnVsbHksIGl0JiMzOTtsbCBwcm92aWRlIHNvbWUgY2xlYXIgZXhhbXBsZXMgb2YgaG93IHRoaXMgb24tZGVtYW5kIHBhZ2luZyBpcyB0ZXN0ZWQgYW5kIHVzZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgSW5maW5pQmFuZCBzdGFjay4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBhbmQgaW1wbGljYXRpb25zIG9mIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Rlc3RfaG1tLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL01ha2VmaWxlPTEwMj1vYmotJChDT05GSUdfVEVTVF9MT0NLVVApICYjNDM7PSB0ZXN0X2xvY2t1cC5vXG5saWIvTWFrZWZpbGU6MTAzOm9iai0kKENPTkZJR19URVNUX0hNTSkgJiM0Mzs9IHRlc3RfaG1tLm9cbmxpYi9NYWtlZmlsZS0xMDQtb2JqLSQoQ09ORklHX1RFU1RfRlJFRV9QQUdFUykgJiM0Mzs9IHRlc3RfZnJlZV9wYWdlcy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyOTAzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gVGVzdGluZyBDb25zaWRlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYENPTkZJR19URVNUX0hNTWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFyZSB0aGUgcmVsYXRlZCBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gZW5hYmxlIGZvciBlZmZlY3RpdmUgdGVzdGluZz8gSSBuZWVkIHRvIGJ1aWxkIGEgY29tcHJlaGVuc2l2ZSBsaXN0LgoKUmlnaHQsIHNvIGJlc2lkZXMgYFRFU1RfSE1NYCBpdHNlbGYsIEkgYWxzbyBrbm93IHRoYXQgYEhNTV9NSVJST1JgIGlzIGludHJpbnNpY2FsbHkgbGlua2VkLiBFdmVuIHRob3VnaCBgSE1NX01JUlJPUmAgaXMgc2VsZWN0ZWQgYnkgYFRFU1RfSE1NYCwgaXQmIzM5O3MgY29yZSB0byB0aGUgZnVuY3Rpb25hbGl0eSwgc28gaXQgbmVlZHMgdG8gYmUgZXhwbGljaXRseSBsaXN0ZWQgYXMgYSBrZXkgZGVwZW5kZW5jeS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBpdCYjMzk7cyBjbGVhci4KClRoZW4sIEkmIzM5O20gbm90aW5nIHRoZSBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb25zIHJlcXVpcmVkOiBgRFJNX0FDQ0VMX0FNRFhETkFgLCBgRFJNX0dQVVNWTWAsIGBEUk1fTk9VVkVBVV9TVk1gLCBgTVNIVl9ST09UYCwgYW5kIGBJTkZJTklCQU5EX09OX0RFTUFORF9QQUdJTkdgLiBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgdGhlc2UgdG8gZW5zdXJlIGFsbCByZWxldmFudCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBkdXJpbmcgbXkgdGVzdGluZy4KCk5vdywgYSBrZXkgcXVlc3Rpb246IGNhbiBJIGdldCBhd2F5IHdpdGgganVzdCBlbmFibGluZyBgVEVTVF9ITU1gIHRvIHZhbGlkYXRlIHRoZSBjb3JlIGxvZ2ljPyBZZXMsIGFmdGVyIHJldmlld2luZyB0aGUgc2V0dXAsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgZW5hYmxpbmcgYFRFU1RfSE1NYCBhbG9uZSBpcyBzdWZmaWNpZW50IGZvciB0aGUgaW5pdGlhbCBjb3JlIGxvZ2ljIHRlc3RpbmcuIEkmIzM5O20gc2F0aXNmaWVkLgoKRmluYWxseSwgSSYjMzk7bSBqdXN0IHF1aWNrbHkgY29uZmlybWluZyB0aGF0IGBITU1fTUlSUk9SYCBpcyBzZWxlY3RhYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSE1NX01JUlJPUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMjI4PWNvbmZpZyBaT05FX0RFVklDRVxuLS1cbm1tL0tjb25maWctMTI0OS0jXG5tbS9LY29uZmlnOjEyNTA6Y29uZmlnIEhNTV9NSVJST1Jcbm1tL0tjb25maWctMTI1MS1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM0NTIKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA2MTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgSE1NIChIYXJkd2FyZSBNYW5hZ2VkIE1lbW9yeSkgRmF1bHQgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIEhNTSBmYXVsdCBoYW5kbGVycyBhcmUgdHJpZ2dlcmVkIGFuZCB1c2VkLiBGaXJzdCwgdGhpcyBzZWVtcyB0byBiZSBhIGJvb2xlYW4gY29uZmlnIG9wdGlvbiB3aXRob3V0IGEgZGlyZWN0IHByb21wdCwgd2hpY2ggbWVhbnMgaXQgY2FuJiMzOTt0IGJlIGVuYWJsZWQgc3RhbmRhbG9uZS4gSXQmIzM5O3MgZGVwZW5kZW50IG9uIGBURVNUX0hNTWAgb3Igb25lIG9mIHRoZSBkZXZpY2UgZHJpdmVycy4KCk15IGtleSBmb2N1cyBoZXJlIGlzIG9uIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBmYXVsdCBoYW5kbGluZyBpcyBpbml0aWF0ZWQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgc3lzdGVtLiBJJiMzOTt2ZSBnb3QgYSBsaXN0IG9mIGltcG9ydGFudCBzeW1ib2xzIHRvIHRyYWNrOiBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgLCBgaG1tX3JhbmdlX2ZhdWx0YCwgYGhtbV9kb19mYXVsdGAsIGBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkYCwgYW5kIGBobW1fcmVjb3JkX2ZhdWx0YC4gSSYjMzk7bSBzdGFydGluZyB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaG93IHRoZXNlIGZ1bmN0aW9ucyByZWxhdGUgdG8gZWFjaCBvdGhlci4gSSYjMzk7dmUgYWxyZWFkeSBjb25maXJtZWQgYGhtbV9kb19mYXVsdGAsIGBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkYCwgYW5kIGBobW1fcmVjb3JkX2ZhdWx0YCBhcmUgc3RhdGljLCB3aGljaCBpcyBnb29kIHRvIGtub3cgZm9yIHNjb3BpbmcgYW5kIHZpc2liaWxpdHkuIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAgYW5kIGBobW1fcmFuZ2VfZmF1bHRgIGFyZSBleHBvcnRlZCwgd2hpY2ggaW1wbGllcyB0aGV5IGhhdmUgZXh0ZXJuYWwgdXNlIGNhc2VzLgoKTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBmYXVsdCBoYW5kbGluZyBpbnRlcmFjdHMgd2l0aCB2YXJpb3VzIGhhcmR3YXJlIGFyY2hpdGVjdHVyZXMuIEkmIzM5O3ZlIHN0YXJ0ZWQgc2Nhbm5pbmcgdGhlIGNvZGUgYmFzZSBmb3IgcmVsZXZhbnQgZnVuY3Rpb25zLiBJJiMzOTt2ZSBpZGVudGlmaWVkIHRoZSBmb2xsb3dpbmcgaW4gYGxpYi90ZXN0X2htbS5jYDogYGRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWRgLCBgZG1pcnJvcl9mYXVsdF91bmxvY2tlZGAsIGFuZCBgZG1pcnJvcl9yZWFkX3VubG9ja2VkYCB3aGljaCBpbmRpY2F0ZXMgdGhpcyBtb2R1bGUgaGFzIHRoZSB0ZXN0IGZ1bmN0aW9ucy4gVGhlbiBJIG1vdmVkIG9uIGFuZCBsb29rZWQgYXQgZnVuY3Rpb25zIGluIGRyaXZlciBkaXJlY3Rvcmllcy4KCmBkcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguY2AgaGFzIGBhaWUyX3BvcHVsYXRlX3JhbmdlYCwgd2hpY2ggaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBmYXVsdCBoYW5kbGluZyBmb3IgdGhpcyBzcGVjaWZpYyBhcmNoaXRlY3R1cmUuIEkgYWxzbyBub3RpY2VkIHRoYXQgdGhlIGBkcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jYCBtb2R1bGUgY29udGFpbnMgdGhlIGZ1bmN0aW9ucyBgZHJtX2dwdXN2bV9zY2FuX21tYCwgYGRybV9ncHVzdm1fZ2V0X3BhZ2VzYCwgYW5kIGBkcm1fZ3B1c3ZtX3JhbmdlX2V2aWN0YCwgc28gY2xlYXJseSBHUFUgYW5kIFNWTSBoYXZlIHNvbWUgaW52b2x2ZW1lbnQuIGBkcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N2bS5jYCBhbmQgYGRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmNgIGNvbnRhaW4gYG5vdXZlYXVfcmFuZ2VfZmF1bHRgIGFuZCBgbXNodl9yZWdpb25fcmFuZ2VfZmF1bHRgIHdoaWNoIGFyZSBhZGRpdGlvbmFsIGV4YW1wbGVzLgoKRmluYWxseSwgYGRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmNgIGlzIGltcG9ydGFudCB3aXRoIHRoZSBmdW5jdGlvbiBgaWJfdW1lbV9vZHBfbWFwX2RtYV9hbmRfbG9ja2AsIHNvIGl0IGlzIGNsZWFyIHRoYXQgSW5maW5pYmFuZCBpcyBpbXBvcnRhbnQuCgpTbywganVzdCB0byByZWNhcCB0aGUgZnVuY3Rpb25zIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIEkmIzM5O20gZ29pbmcgdG8gbGlzdDoKCiogICBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgCiogICBgaG1tX3JhbmdlX2ZhdWx0YAoqICAgYGhtbV9kb19mYXVsdGAKKiAgIGBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkYAoqICAgYGhtbV9yZWNvcmRfZmF1bHRgCiogICBgZG1pcnJvcl9yYW5nZV9mYXVsdF91bmxvY2tlZGAKKiAgIGBkbWlycm9yX2ZhdWx0X3VubG9ja2VkYAoqICAgYGRtaXJyb3JfcmVhZF91bmxvY2tlZGAKClRoZXNlIGFyZSBteSBmb2N1cyBwb2ludHMuIEkmIzM5O20gYnVpbGRpbmcgYW4gdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlc2UgY29yZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCBwb3RlbnRpYWwgZmF1bHQgdHJpZ2dlcnMuCgpPa2F5LCBsZXQmIzM5O3MgdmVyaWZ5IHRoYXQgdGhlIGNvbmZpZyBvcHRpb25zIGFsaWduIHdpdGggd2hhdCBJJiMzOTttIHNlZWluZzogYFRFU1RfSE1NYCwgYERSTV9BQ0NFTF9BTURYRE5BYCwgYERSTV9HUFVTVk1gLCBgRFJNX05PVVZFQVVfU1ZNYCwgYE1TSFZfUk9PVGAsIGFuZCBgSU5GSU5JQkFORF9PTl9ERU1BTkRfUEFHSU5HYC4gSSBzaG91bGQgY2hlY2sgaWYgdGhlcmUgYXJlIG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLCBzbyBsZXQmIzM5O3MgY3Jvc3MtcmVmZXJlbmNlIGBEUk1fQUNDRUxfQU1EWEROQWAgd2l0aGluIHRoZSBhcHByb3ByaWF0ZSBgS2NvbmZpZ2AgZmlsZSBpbiB0aGUgZHJpdmVyIGRpcmVjdG9yeSB0byBlbnN1cmUgSSYjMzk7bSBjYXB0dXJpbmcgYWxsIHJlbGF0ZWQgc2V0dGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBEUk1fQUNDRUxfQU1EWEROQSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYWNjZWwvYW1keGRuYS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYWNjZWwvYW1keGRuYS9LY29uZmlnLTItXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvS2NvbmZpZzozOmNvbmZpZyBEUk1fQUNDRUxfQU1EWEROQVxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL0tjb25maWctNC1cdHRyaXN0YXRlIFwmIzM0O0FNRCBBSSBFbmdpbmVcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUwMTYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBFeHBsb3JhdGlvbioqCgpSaWdodCwgdGhhdCYjMzk7cyBzZXR0bGVkLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB2ZXJpZnkgdGhlIHN0YXR1cyBvZiBgRFJNX0dQVVNWTWAuIEkgbmVlZCB0byBlbnN1cmUgaXQmIzM5O3MgcHJvcGVybHkgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBidWlsZCBzeXN0ZW0uIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgYmUgaGVhZGluZyBvdmVyIHRvIGBkcml2ZXJzL2dwdS9kcm0vS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSByZWxldmFudCBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIG9wdGlvbnMgZm9yIERSTS1yZWxhdGVkIGZlYXR1cmVzIHJlc2lkZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgaXQmIzM5O3MgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIGJ1aWx0IGFzIGEgbW9kdWxlLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBpbXBhY3QgaXRzIGF2YWlsYWJpbGl0eS4gSSBleHBlY3QgdG8gY29uZmlybSBteSBhc3N1bXB0aW9uIHRoYXQgaXQgaXMgZW5hYmxlZCwgYnV0IEkgbmVlZCB0byBlbnN1cmUgdGhpcyBpcyBjb3JyZWN0IGJlZm9yZSBtb3ZpbmcgZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERSTV9HUFVTVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vS2NvbmZpZz0yMjE9Y29uZmlnIFJVU1RfRFJNX0dQVVZNXG4tLVxuZHJpdmVycy9ncHUvZHJtL0tjb25maWctMjI3LVxuZHJpdmVycy9ncHUvZHJtL0tjb25maWc6MjI4OmNvbmZpZyBEUk1fR1BVU1ZNXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZy0yMjktXHR0cmlzdGF0ZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTMyOQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBOb3V2ZWF1JiMzOTtzIFNWTSBDb25maWd1cmF0aW9uKioKClllcy4gT2theSwgc28gd2UmIzM5O3JlIG9uIHRoZSByaWdodCB0cmFjay4gVGltZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBEUk1fTk9VVkVBVV9TVk1gIGlzIGVuYWJsZWQgYW5kIGhvdyBpdCYjMzk7cyBkZWZpbmVkLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB0aGUgYGRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gZmluZCB0aGUgY29uZGl0aW9uYWwgbG9naWMgYW5kIGRlcGVuZGVuY2llcyBmb3IgdGhlIE5vdXZlYXUgZHJpdmVyJiMzOTtzIFN5c3RlbSBNZW1vcnkgTWFuYWdlbWVudCAoU1ZNKSBzdXBwb3J0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBpdCYjMzk7cyBldmVuIGNvbXBpbGVkIGluLCBpZiBpdCYjMzk7cyBhIG1vZHVsZSwgYW5kIHdoYXQgb3RoZXIgb3B0aW9ucyBtaWdodCBiZSByZWxldmFudCBmb3IgbXkgY3VycmVudCBpbnZlc3RpZ2F0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERSTV9OT1VWRUFVX1NWTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvS2NvbmZpZz04Nj1jb25maWcgRFJNX05PVVZFQVVfQkFDS0xJR0hUXG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvS2NvbmZpZy05My1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L0tjb25maWc6OTQ6Y29uZmlnIERSTV9OT1VWRUFVX1NWTVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvS2NvbmZpZy05NS1cdGJvb2wgXCYjMzQ7KEVYUEVSSU1FTlRBTCkgRW5hYmxlIFNWTSAoU2hhcmVkIFZpcnR1YWwgTWVtb3J5KSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NjgwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3M6CgoqKkludGVybmFsIE1lbnRhbCBDaGVja2xpc3QqKgoKWWVzLiBPa2F5LCBJJiMzOTt2ZSBnb3QgYSBoYW5kbGUgb24gdGhlIHRhc2suIE5vdywgd2hlcmUgdG8gc3RhcnQuLi4gbGV0JiMzOTtzIHBpbnBvaW50IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbG9va2luZyBhdCB0aGUgY29ycmVjdCBmaWxlLiBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyB0aGUgYE1TSFZfUk9PVGAgdmFyaWFibGUgd2l0aGluIHRoZSBgZHJpdmVycy9odi9LY29uZmlnYCBmaWxlLiBUaGF0IHNlZW1zIGxpa2UgdGhlIHJpZ2h0IHBhdGggdG8gdHJhY2sgZG93biB0aGF0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTVNIVl9ST09UJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9odi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaHYvS2NvbmZpZz02MD1jb25maWcgSFlQRVJWX1ZNQlVTXG4tLVxuZHJpdmVycy9odi9LY29uZmlnLTY3LVxuZHJpdmVycy9odi9LY29uZmlnOjY4OmNvbmZpZyBNU0hWX1JPT1RcbmRyaXZlcnMvaHYvS2NvbmZpZy02OS1cdHRyaXN0YXRlIFwmIzM0O01pY3Jvc29mdCBIeXBlci1WIHJvb3QgcGFydGl0aW9uIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU5MjAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGlubmVyIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgSW5maW5pYmFuZCBQYWdpbmcgQ29uZmlndXJhdGlvbioqCgpSaWdodC4gVGltZSB0byBkaWcgaW4uIFRoZSBpbml0aWFsIHByb21wdCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBzbyBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggdGhlIG9idmlvdXM6IGNvbmZpcm1pbmcgdGhlIHNldHRpbmcgZm9yIGBJTkZJTklCQU5EX09OX0RFTUFORF9QQUdJTkdgLiBJJiMzOTtsbCBpbW1lZGlhdGVseSBqdW1wIHRvIHdoZXJlIGl0JiMzOTtzIGRlZmluZWQ6IGBkcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZ2AuIE5vIG5lZWQgdG8gd2FzdGUgdGltZSBlbHNld2hlcmU7IHRoaXMgaXMgbGlrZWx5IHdoZXJlIGFsbCB0aGUgcmVsZXZhbnQgZGV0YWlscyBhcmUgaG91c2VkLCBhbmQgSSBjYW4gcXVpY2tseSBlc3RhYmxpc2ggdGhlIGN1cnJlbnQgc3RhdHVzIGFuZCByZWxldmFudCBkZXBlbmRlbmNpZXMuIFRoaXMgaXMgdXN1YWxseSB0aGUgZmlyc3Qgc3RvcCBmb3IgdW5kZXJzdGFuZGluZyBob3cgYSBmZWF0dXJlIGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBJbmZpbmliYW5kIHN1YnN5c3RlbS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJTkZJTklCQU5EX09OX0RFTUFORF9QQUdJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZz00ND1jb25maWcgSU5GSU5JQkFORF9VU0VSX01FTVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTUwLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NTE6Y29uZmlnIElORklOSUJBTkRfT05fREVNQU5EX1BBR0lOR1xuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNTItXHRib29sIFwmIzM0O0luZmluaUJhbmQgb24tZGVtYW5kIHBhZ2luZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MjUyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgaXQmIzM5O3MgYSBkaXJlY3Qgc3RyZWFtIG9mIG15IHRob3VnaHRzOgoKKipDaGVja2luZyBgVEVTVF9ITU1gIGluIGBsaWIvS2NvbmZpZy5kZWJ1Z2AqKgoKUmlnaHQsIGhlcmUgd2UgZ28uIExldCYjMzk7cyBtYWtlIHN1cmUgYFRFU1RfSE1NYCBpcyBjb25maWd1cmVkIGNvcnJlY3RseSwgb3IgYXQgbGVhc3QgZXhpc3RzIGFuZCBpcyBiZWhhdmluZyBhcyBleHBlY3RlZC4gVGhhdCYjMzk7cyBhIGdvb2QgZmlyc3Qgc3RlcCB0byB0cm91Ymxlc2hvb3Rpbmcgd2hhdGV2ZXImIzM5O3MgZ29pbmcgb24uIFdlIGtub3cgdGhpcyBzcGVjaWZpYyB2YXJpYWJsZSBjb250cm9scyB0aGUgSE1NIHRlc3Qgd2hpY2ggd2UgYXJlIGRlYnVnZ2luZy4gVGhpcyBzaG91bGQgYmUgc3RyYWlnaHRmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVEVTVF9ITU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1ZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1Zz0zMzE4PWNvbmZpZyBURVNUX01FTUlOSVRcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzI1LVxubGliL0tjb25maWcuZGVidWc6MzMyNjpjb25maWcgVEVTVF9ITU1cbmxpYi9LY29uZmlnLmRlYnVnLTMzMjctXHR0cmlzdGF0ZSBcJiMzNDtUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY1MDgKCQkJCQkJCW91dHB1dDogMjYxCgkJCQkJCQl0aG91Z2h0czogMjUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQcm9wb3NlZCBNZW1vcnkgTWFuYWdlbWVudCBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9uIHN5bWJvbHM6IGBURVNUX0hNTWAsIGBEUk1fQUNDRUxfQU1EWEROQWAsIGBEUk1fR1BVU1ZNYCwgYERSTV9OT1VWRUFVX1NWTWAsIGBNU0hWX1JPT1RgLCBhbmQgYElORklOSUJBTkRfT05fREVNQU5EX1BBR0lOR2AuIEJhc2VkIG9uIHRoZSBjb250ZXh0LCBJJiMzOTttIGFscmVhZHkgdGhpbmtpbmcgdGhlc2UgYXJlIHJlbGF0ZWQgdG8gc29tZSBmb3JtIG9mIG1lbW9yeSBtYW5hZ2VtZW50IG9yIGRldmljZSBkcml2ZXIgaW50ZXJhY3Rpb24sIGxpa2VseSBhcm91bmQgSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudCAoSE1NKSBnaXZlbiB0aGUgcHJlc2VuY2Ugb2YgYFRFU1RfSE1NYC4KCk5vdywgdGhlIGNvcmUgc3ltYm9scyBvZiBpbnRlcmVzdCBzZWVtIHRvIGJlIHRoZXNlICYjMzQ7ZmF1bHQmIzM0OyByZWxhdGVkIGZ1bmN0aW9uczogYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YCwgYGhtbV9yYW5nZV9mYXVsdGAsIGBobW1fZG9fZmF1bHRgLCBgaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZGAsIGBobW1fcmVjb3JkX2ZhdWx0YCwgYGRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWRgLCBgZG1pcnJvcl9mYXVsdF91bmxvY2tlZGAsIGFuZCBgZG1pcnJvcl9yZWFkX3VubG9ja2VkYC4gVGhlIG5hbWluZyBjb252ZW50aW9uIHN0cm9uZ2x5IHN1Z2dlc3RzIGEgY2hhbmdlIGluIGhvdyBtZW1vcnkgZmF1bHRzIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxvY2tpbmcgYW5kIHRpbWVvdXQgYmVoYXZpb3IsIHdoaWNoIGFsc28gdGllcyBpbiBuaWNlbHkgd2l0aCB0aGUgY29uZmlncy4gSSBhbSBub3RpbmcgdGhlIGluY2x1c2lvbiBvZiBgZG1pcnJvcmAgd2hpY2ggaGludHMgYXQgc29tZSBmb3JtIG9mIGRhdGEgbWlycm9yaW5nLgoKRnJvbSB0aGUgZGVzY3JpcHRpb24sIEkgc2VlIHRoaXMgaXMgaW50cm9kdWNpbmcgYSBuZXcgdW5sb2NrZWQgdGltZW91dCB2YXJpYW50IGZvciBITU0gcmFuZ2UgZmF1bHRzLCBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgLCBhbmQgaXQmIzM5O3MgcmVmYWN0b3JpbmcgdGhlIGV4aXN0aW5nIGBobW1fcmFuZ2VfZmF1bHRgIHRvIHVzZSBhIGxvY2tlZCBoZWxwZXIgZnVuY3Rpb24uIFRoaXMgaXMgc2lnbmlmaWNhbnQuIEl0JiMzOTtzIG5vdCBqdXN0IGEgbWlub3IgdHdlYWs7IGl0JiMzOTtzIGEgZnVuZGFtZW50YWwgc2hpZnQgaW4gaG93IGZhdWx0cyBhcmUgbWFuYWdlZCwgZXNwZWNpYWxseSBhcm91bmQgbG9ja2luZyBzZW1hbnRpY3MuIEkgY2FuIHNlZSB0aGlzIGlzIGxpa2VseSBhZmZlY3Rpbmcgc2V2ZXJhbCBkcml2ZXJzIGFuZCB0aGUgSE1NIHRlc3QgbW9kdWxlLgoKTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhlIHJvYnVzdG5lc3Mgb2YgdGhlIGNoYW5nZXMuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgdW5sb2NrZWQgdmFyaWFudHMgYWx3YXlzIGluY3JlYXNlcyB0aGUgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMgb3Igb3RoZXIgY29uY3VycmVuY3kgaXNzdWVzLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBmb2N1cyBvbiBmdXp6aW5nIHRoZXNlIG5ldyByZXRyeSBhbmQgbG9ja2luZyBsb2dpYywgYXMgd2VsbCBhcyBlbnN1cmUgdGhlIG5ldyBsb2NraW5nIG1lY2hhbmlzbXMgYXJlIHRob3JvdWdobHkgdGVzdGVkLiBUaGVzZSBjaGFuZ2VzIHdpbGwgaGF2ZSBzdWJzdGFudGlhbCBpbXBhY3Qgb24gZGV2aWNlIGRyaXZlciBiZWhhdmlvciwgYW5kIG1heSBjYXVzZSB1bmV4cGVjdGVkIGNoYW5nZXMgaW4gc3lzdGVtIHJlbGlhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VEVTVF9ITU0mIzM0OywKICAgICYjMzQ7RFJNX0FDQ0VMX0FNRFhETkEmIzM0OywKICAgICYjMzQ7RFJNX0dQVVNWTSYjMzQ7LAogICAgJiMzNDtEUk1fTk9VVkVBVV9TVk0mIzM0OywKICAgICYjMzQ7TVNIVl9ST09UJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkRfT05fREVNQU5EX1BBR0lORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2htbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0JiMzNDssCiAgICAmIzM0O2htbV9yYW5nZV9mYXVsdCYjMzQ7LAogICAgJiMzNDtobW1fZG9fZmF1bHQmIzM0OywKICAgICYjMzQ7aG1tX3JhbmdlX2ZhdWx0X2xvY2tlZCYjMzQ7LAogICAgJiMzNDtobW1fcmVjb3JkX2ZhdWx0JiMzNDssCiAgICAmIzM0O2RtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWQmIzM0OywKICAgICYjMzQ7ZG1pcnJvcl9mYXVsdF91bmxvY2tlZCYjMzQ7LAogICAgJiMzNDtkbWlycm9yX3JlYWRfdW5sb2NrZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyB1bmxvY2tlZCB0aW1lb3V0IHZhcmlhbnQgZm9yIEhNTSByYW5nZSBmYXVsdHMgKGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGApIGFuZCByZWZhY3RvcnMgdGhlIGV4aXN0aW5nIGBobW1fcmFuZ2VfZmF1bHRgIHRvIHVzZSBhIGxvY2tlZCBoZWxwZXIuIEl0IGFsc28gdXBkYXRlcyBzZXZlcmFsIGRyaXZlcnMgYW5kIHRoZSBITU0gdGVzdCBtb2R1bGUgdG8gdXNlIHRoZSBuZXcgdW5sb2NrZWQgdmFyaWFudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRldmljZSBkcml2ZXIgaW50ZXJhY3Rpb24sIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgcmV0cnkgYW5kIGxvY2tpbmcgbG9naWMgaXMgcm9idXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtURVNUX0hNTSYjMzQ7LAogICAgJiMzNDtEUk1fQUNDRUxfQU1EWEROQSYjMzQ7LAogICAgJiMzNDtEUk1fR1BVU1ZNJiMzNDssCiAgICAmIzM0O0RSTV9OT1VWRUFVX1NWTSYjMzQ7LAogICAgJiMzNDtNU0hWX1JPT1QmIzM0OywKICAgICYjMzQ7SU5GSU5JQkFORF9PTl9ERU1BTkRfUEFHSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQmIzM0OywKICAgICYjMzQ7aG1tX3JhbmdlX2ZhdWx0JiMzNDssCiAgICAmIzM0O2htbV9kb19mYXVsdCYjMzQ7LAogICAgJiMzNDtobW1fcmFuZ2VfZmF1bHRfbG9ja2VkJiMzNDssCiAgICAmIzM0O2htbV9yZWNvcmRfZmF1bHQmIzM0OywKICAgICYjMzQ7ZG1pcnJvcl9yYW5nZV9mYXVsdF91bmxvY2tlZCYjMzQ7LAogICAgJiMzNDtkbWlycm9yX2ZhdWx0X3VubG9ja2VkJiMzNDssCiAgICAmIzM0O2RtaXJyb3JfcmVhZF91bmxvY2tlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHVubG9ja2VkIHRpbWVvdXQgdmFyaWFudCBmb3IgSE1NIHJhbmdlIGZhdWx0cyAoYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YCkgYW5kIHJlZmFjdG9ycyB0aGUgZXhpc3RpbmcgYGhtbV9yYW5nZV9mYXVsdGAgdG8gdXNlIGEgbG9ja2VkIGhlbHBlci4gSXQgYWxzbyB1cGRhdGVzIHNldmVyYWwgZHJpdmVycyBhbmQgdGhlIEhNTSB0ZXN0IG1vZHVsZSB0byB1c2UgdGhlIG5ldyB1bmxvY2tlZCB2YXJpYW50LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZGV2aWNlIGRyaXZlciBpbnRlcmFjdGlvbiwgd2hpY2ggc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyByZXRyeSBhbmQgbG9ja2luZyBsb2dpYyBpcyByb2J1c3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDowOToxMC43MjYwMTY5MTdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjAxNTI1NTAzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJURVNUX0hNTVwiLFxuICAgIFwiRFJNX0FDQ0VMX0FNRFhETkFcIixcbiAgICBcIkRSTV9HUFVTVk1cIixcbiAgICBcIkRSTV9OT1VWRUFVX1NWTVwiLFxuICAgIFwiTVNIVl9ST09UXCIsXG4gICAgXCJJTkZJTklCQU5EX09OX0RFTUFORF9QQUdJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dFwiLFxuICAgIFwiaG1tX3JhbmdlX2ZhdWx0XCIsXG4gICAgXCJobW1fZG9fZmF1bHRcIixcbiAgICBcImhtbV9yYW5nZV9mYXVsdF9sb2NrZWRcIixcbiAgICBcImhtbV9yZWNvcmRfZmF1bHRcIixcbiAgICBcImRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWRcIixcbiAgICBcImRtaXJyb3JfZmF1bHRfdW5sb2NrZWRcIixcbiAgICBcImRtaXJyb3JfcmVhZF91bmxvY2tlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgdW5sb2NrZWQgdGltZW91dCB2YXJpYW50IGZvciBITU0gcmFuZ2UgZmF1bHRzIChgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgKSBhbmQgcmVmYWN0b3JzIHRoZSBleGlzdGluZyBgaG1tX3JhbmdlX2ZhdWx0YCB0byB1c2UgYSBsb2NrZWQgaGVscGVyLiBJdCBhbHNvIHVwZGF0ZXMgc2V2ZXJhbCBkcml2ZXJzIGFuZCB0aGUgSE1NIHRlc3QgbW9kdWxlIHRvIHVzZSB0aGUgbmV3IHVubG9ja2VkIHZhcmlhbnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkZXZpY2UgZHJpdmVyIGludGVyYWN0aW9uLCB3aGljaCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IHJldHJ5IGFuZCBsb2NraW5nIGxvZ2ljIGlzIHJvYnVzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDA6MDk6MTAuNzI2MDI1ODg3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDM0MTQyODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiZDA4MTI2NDY4YTNkMjg4ZTM5NmZkNmU2ZjY5YTlmYzJjNzBhNjU5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDE2IDAwOjA5OjA4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdFxcbmluZGV4IDdkNjFiN2E4YjY1Yjc5Li5lMDIxMjE4YWRhNThmZSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL2htbS5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL21tL2htbS5yc3RcXG5AQCAtMTU2LDQyICsxNTYsNTcgQEAgRHVyaW5nIHRoZSBvcHMtXFx1MDAzZWludmFsaWRhdGUoKSBjYWxsYmFjayB0aGUgZGV2aWNlIGRyaXZlciBtdXN0IHBlcmZvcm0gdGhlXFxuIHVwZGF0ZSBhY3Rpb24gdG8gdGhlIHJhbmdlIChtYXJrIHJhbmdlIHJlYWQgb25seSwgb3IgZnVsbHkgdW5tYXAsIGV0Yy4pLiBUaGVcXG4gZGV2aWNlIG11c3QgY29tcGxldGUgdGhlIHVwZGF0ZSBiZWZvcmUgdGhlIGRyaXZlciBjYWxsYmFjayByZXR1cm5zLlxcbiBcXG4tV2hlbiB0aGUgZGV2aWNlIGRyaXZlciB3YW50cyB0byBwb3B1bGF0ZSBhIHJhbmdlIG9mIHZpcnR1YWwgYWRkcmVzc2VzLCBpdCBjYW5cXG4tdXNlOjpcXG4rV2hlbiB0aGUgZGV2aWNlIGRyaXZlciB3YW50cyB0byBwb3B1bGF0ZSBhIHJhbmdlIG9mIHZpcnR1YWwgYWRkcmVzc2VzLCB0aGVcXG4rbm9ybWFsIGludGVyZmFjZSBpczo6XFxuIFxcbi0gIGludCBobW1fcmFuZ2VfZmF1bHQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpO1xcbisgIGludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0KTtcXG4gXFxuIEl0IHdpbGwgdHJpZ2dlciBhIHBhZ2UgZmF1bHQgb24gbWlzc2luZyBvciByZWFkLW9ubHkgZW50cmllcyBpZiB3cml0ZSBhY2Nlc3MgaXNcXG4gcmVxdWVzdGVkIChzZWUgYmVsb3cpLiBQYWdlIGZhdWx0cyB1c2UgdGhlIGdlbmVyaWMgbW0gcGFnZSBmYXVsdCBjb2RlIHBhdGgganVzdFxcbi1saWtlIGEgQ1BVIHBhZ2UgZmF1bHQuIFRoZSB1c2FnZSBwYXR0ZXJuIGlzOjpcXG4rbGlrZSBhIENQVSBwYWdlIGZhdWx0LlxcbitcXG4rVGhlIGNhbGxlciBtdXN0IG5vdCBob2xkIGBgbW1hcF9yZWFkX2xvY2tgYCBiZWZvcmUgdGhlIGNhbGwuXFxuK2BgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKWBgIHRha2VzIHRoZSBtbWFwIHJlYWQgbG9jayBpbnRlcm5hbGx5IGFuZFxcbithbGxvd3MgYGBoYW5kbGVfbW1fZmF1bHQoKWBgIHRvIGRyb3AgaXQgZHVyaW5nIGZhdWx0IGhhbmRsaW5nLiBUaGlzIGlzIHJlcXVpcmVkXFxuK2ZvciBWTUFzIHdob3NlIGZhdWx0IGhhbmRsZXJzIG1heSByZWxlYXNlIHRoZSBtbWFwIGxvY2ssIGZvciBleGFtcGxlIHJlZ2lvbnNcXG4rbWFuYWdlZCBieSBgYHVzZXJmYXVsdGZkYGAuXFxuK1xcbitJZiB0aGUgbW1hcCBsb2NrIGlzIGRyb3BwZWQgb3IgdGhlIHJhbmdlIGlzIGludmFsaWRhdGVkLCB0aGUgZnVuY3Rpb24gcmVmcmVzaGVzXFxuK2BgcmFuZ2UtXFx1MDAzZW5vdGlmaWVyX3NlcWBgIGFuZCByZXN0YXJ0cyB0aGUgd2FsayBpbnRlcm5hbGx5LiBgYC1FSU5UUmBgIGlzIHJldHVybmVkXFxuK2lmIG1tYXAgbG9jayBhY3F1aXNpdGlvbiBpcyBpbnRlcnJ1cHRlZCBvciBhIGZhdGFsIHNpZ25hbCBpcyBwZW5kaW5nIGR1cmluZ1xcbityZXRyeSBoYW5kbGluZy5cXG4rXFxuK1RoZSB0aW1lb3V0IGlzIHNwZWNpZmllZCBpbiBqaWZmaWVzOyBwYXNzaW5nIGBgMGBgIG1lYW5zIHJldHJ5IGluZGVmaW5pdGVseS4gVGhlXFxuK3RpbWVvdXQgZXhpc3RzIHRvIHByZXNlcnZlIGNhbGxlciBwb2xpY3kgZm9yIHJlcGVhdGVkIG1tdS1ub3RpZmllciBpbnZhbGlkYXRpb25cXG4rYW5kIGlzIGNoZWNrZWQgYmV0d2VlbiByZXRyeSBhdHRlbXB0cy4gSE1NIGRvZXMgbm90IGludGVycnVwdCBwYWdlIGZhdWx0XFxuK2hhbmRsaW5nIHdoZW4gdGhlIHRpbWVvdXQgZXhwaXJlcywgYnV0IHJldHVybnMgYGAtRUJVU1lgYCBpZiB0aGUgcmV0cnkgYnVkZ2V0IGlzXFxuK2V4aGF1c3RlZCBiZWZvcmUgYSBzdGFibGUgcmFuZ2UgaXMgb2J0YWluZWQuXFxuK1xcbitUaGUgdXNhZ2UgcGF0dGVybiBpczo6XFxuIFxcbiAgaW50IGRyaXZlcl9wb3B1bGF0ZV9yYW5nZSguLi4pXFxuICB7XFxuICAgICAgIHN0cnVjdCBobW1fcmFuZ2UgcmFuZ2U7XFxuKyAgICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dDtcXG4gICAgICAgLi4uXFxuIFxcbisgICAgICB0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcXG4gICAgICAgcmFuZ2Uubm90aWZpZXIgPSBcXHUwMDI2aW50ZXJ2YWxfc3ViO1xcbiAgICAgICByYW5nZS5zdGFydCA9IC4uLjtcXG4gICAgICAgcmFuZ2UuZW5kID0gLi4uO1xcbiAgICAgICByYW5nZS5obW1fcGZucyA9IC4uLjtcXG4gXFxuLSAgICAgIGlmICghbW1nZXRfbm90X3plcm8oaW50ZXJ2YWxfc3ViLVxcdTAwM2Vub3RpZmllci5tbSkpXFxuKyAgICAgIGlmICghbW1nZXRfbm90X3plcm8oaW50ZXJ2YWxfc3ViLm1tKSlcXG4gICAgICAgICAgIHJldHVybiAtRUZBVUxUO1xcbiBcXG4gIGFnYWluOlxcbi0gICAgICByYW5nZS5ub3RpZmllcl9zZXEgPSBtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihcXHUwMDI2aW50ZXJ2YWxfc3ViKTtcXG4tICAgICAgbW1hcF9yZWFkX2xvY2sobW0pO1xcbi0gICAgICByZXQgPSBobW1fcmFuZ2VfZmF1bHQoXFx1MDAyNnJhbmdlKTtcXG4tICAgICAgaWYgKHJldCkge1xcbi0gICAgICAgICAgbW1hcF9yZWFkX3VubG9jayhtbSk7XFxuLSAgICAgICAgICBpZiAocmV0ID09IC1FQlVTWSlcXG4tICAgICAgICAgICAgICAgICBnb3RvIGFnYWluO1xcbi0gICAgICAgICAgcmV0dXJuIHJldDtcXG4tICAgICAgfVxcbi0gICAgICBtbWFwX3JlYWRfdW5sb2NrKG1tKTtcXG4rICAgICAgcmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXFx1MDAyNnJhbmdlLCB0aW1lb3V0KTtcXG4rICAgICAgaWYgKHJldClcXG4rICAgICAgICAgIGdvdG8gb3V0X3B1dDtcXG4gXFxuICAgICAgIHRha2VfbG9jayhkcml2ZXItXFx1MDAzZXVwZGF0ZSk7XFxuLSAgICAgIGlmIChtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeShcXHUwMDI2bmksIHJhbmdlLm5vdGlmaWVyX3NlcSkge1xcbisgICAgICBpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkocmFuZ2Uubm90aWZpZXIsIHJhbmdlLm5vdGlmaWVyX3NlcSkpIHtcXG4gICAgICAgICAgIHJlbGVhc2VfbG9jayhkcml2ZXItXFx1MDAzZXVwZGF0ZSk7XFxuICAgICAgICAgICBnb3RvIGFnYWluO1xcbiAgICAgICB9XFxuQEAgLTIwMCwxMyArMjE1LDMxIEBAIGxpa2UgYSBDUFUgcGFnZSBmYXVsdC4gVGhlIHVzYWdlIHBhdHRlcm4gaXM6OlxcbiAgICAgICAgKiB1bmRlciB0aGUgdXBkYXRlIGxvY2sgKi9cXG4gXFxuICAgICAgIHJlbGVhc2VfbG9jayhkcml2ZXItXFx1MDAzZXVwZGF0ZSk7XFxuLSAgICAgIHJldHVybiAwO1xcbisgICAgICByZXQgPSAwO1xcbitcXG4rIG91dF9wdXQ6XFxuKyAgICAgIG1tcHV0KGludGVydmFsX3N1Yi5tbSk7XFxuKyAgICAgIHJldHVybiByZXQ7XFxuICB9XFxuIFxcbiBUaGUgZHJpdmVyLVxcdTAwM2V1cGRhdGUgbG9jayBpcyB0aGUgc2FtZSBsb2NrIHRoYXQgdGhlIGRyaXZlciB0YWtlcyBpbnNpZGUgaXRzXFxuIGludmFsaWRhdGUoKSBjYWxsYmFjay4gVGhhdCBsb2NrIG11c3QgYmUgaGVsZCBiZWZvcmUgY2FsbGluZ1xcbiBtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeSgpIHRvIGF2b2lkIGFueSByYWNlIHdpdGggYSBjb25jdXJyZW50IENQVSBwYWdlIHRhYmxlXFxuLXVwZGF0ZS5cXG4rdXBkYXRlLiBUaGUgcmV0cnkgY2hlY2sgbXVzdCB1c2UgdGhlIHNhbWUgbm90aWZpZXIgYW5kIHNlcXVlbmNlIG51bWJlciBzdG9yZWRcXG4raW4gYGByYW5nZWBgIGJ5IGBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKWBgLlxcbitcXG4rSG9sZGluZyB0aGUgbW1hcCBsb2NrIGFjcm9zcyBITU0gZmF1bHRzXFxuKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbitcXG4rTW9zdCBjYWxsZXJzIHNob3VsZCB1c2UgYGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpYGAuIElmIGEgZHJpdmVyXFxuK3JlYWxseSBuZWVkcyB0byBob2xkIHRoZSBtbWFwIGxvY2sgYWNyb3NzIHdvcmsgb3V0c2lkZSBITU0sIGl0IGNhbiB1c2U6OlxcbitcXG4rICBpbnQgaG1tX3JhbmdlX2ZhdWx0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKTtcXG4rXFxuK1RoZSBtbWFwIGxvY2sgbXVzdCBiZSBoZWxkIGJ5IHRoZSBjYWxsZXIgYW5kIHdpbGwgcmVtYWluIGhlbGQgb24gcmV0dXJuLiBUaGlzXFxuK2ludGVyZmFjZSBjYW5ub3Qgc3VwcG9ydCBWTUFzIHdob3NlIGZhdWx0IGhhbmRsZXJzIG5lZWQgdG8gZHJvcCB0aGUgbW1hcCBsb2NrLlxcbitOZXcgY2FsbGVycyBzaG91bGQgcHJlZmVyIGBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKWBgIHVubGVzcyB0aGV5XFxuK2hhdmUgYSBzcGVjaWZpYyByZXF1aXJlbWVudCB0byBrZWVwIHRoZSBtbWFwIGxvY2sgaGVsZCBhY3Jvc3MgdGhlIGNhbGwuXFxuIFxcbiBMZXZlcmFnZSBkZWZhdWx0X2ZsYWdzIGFuZCBwZm5fZmxhZ3NfbWFza1xcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbkBAIC0yMjEsOCArMjU0LDggQEAgcGVybWlzc2lvbiwgaXQgc2V0czo6XFxuICAgICByYW5nZS1cXHUwMDNlZGVmYXVsdF9mbGFncyA9IEhNTV9QRk5fUkVRX0ZBVUxUO1xcbiAgICAgcmFuZ2UtXFx1MDAzZXBmbl9mbGFnc19tYXNrID0gMDtcXG4gXFxuLWFuZCBjYWxscyBobW1fcmFuZ2VfZmF1bHQoKSBhcyBkZXNjcmliZWQgYWJvdmUuIFRoaXMgd2lsbCBmaWxsIGZhdWx0IGFsbCBwYWdlc1xcbi1pbiB0aGUgcmFuZ2Ugd2l0aCBhdCBsZWFzdCByZWFkIHBlcm1pc3Npb24uXFxuK2FuZCBjYWxscyB0aGUgSE1NIHJhbmdlIGZhdWx0IGhlbHBlciBhcyBkZXNjcmliZWQgYWJvdmUuIFRoaXMgd2lsbCBmYXVsdFxcbithbGwgcGFnZXMgaW4gdGhlIHJhbmdlIHdpdGggYXQgbGVhc3QgcmVhZCBwZXJtaXNzaW9uLlxcbiBcXG4gTm93IGxldCdzIHNheSB0aGUgZHJpdmVyIHdhbnRzIHRvIGRvIHRoZSBzYW1lIGV4Y2VwdCBmb3Igb25lIHBhZ2UgaW4gdGhlIHJhbmdlIGZvclxcbiB3aGljaCBpdCB3YW50cyB0byBoYXZlIHdyaXRlIHBlcm1pc3Npb24uIE5vdyBkcml2ZXIgc2V0OjpcXG5AQCAtMjM2LDkgKzI2OSw5IEBAIGFkZHJlc3MgPT0gcmFuZ2UtXFx1MDAzZXN0YXJ0ICsgKGluZGV4X29mX3dyaXRlIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpIGl0IHdpbGwgZmF1bHQgd2l0aFxcbiB3cml0ZSBwZXJtaXNzaW9uIGkuZS4sIGlmIHRoZSBDUFUgcHRlIGRvZXMgbm90IGhhdmUgd3JpdGUgcGVybWlzc2lvbiBzZXQgdGhlbiBITU1cXG4gd2lsbCBjYWxsIGhhbmRsZV9tbV9mYXVsdCgpLlxcbiBcXG4tQWZ0ZXIgaG1tX3JhbmdlX2ZhdWx0IGNvbXBsZXRlcyB0aGUgZmxhZyBiaXRzIGFyZSBzZXQgdG8gdGhlIGN1cnJlbnQgc3RhdGUgb2ZcXG4tdGhlIHBhZ2UgdGFibGVzLCBpZSBITU1fUEZOX1ZBTElEIHwgSE1NX1BGTl9XUklURSB3aWxsIGJlIHNldCBpZiB0aGUgcGFnZSBpc1xcbi13cml0YWJsZS5cXG4rQWZ0ZXIgdGhlIEhNTSByYW5nZSBmYXVsdCBoZWxwZXIgY29tcGxldGVzIHRoZSBmbGFnIGJpdHMgYXJlIHNldCB0byB0aGVcXG4rY3VycmVudCBzdGF0ZSBvZiB0aGUgcGFnZSB0YWJsZXMsIGllIEhNTV9QRk5fVkFMSUQgfCBITU1fUEZOX1dSSVRFIHdpbGwgYmVcXG4rc2V0IGlmIHRoZSBwYWdlIGlzIHdyaXRhYmxlLlxcbiBcXG4gXFxuIFJlcHJlc2VudCBhbmQgbWFuYWdlIGRldmljZSBtZW1vcnkgZnJvbSBjb3JlIGtlcm5lbCBwb2ludCBvZiB2aWV3XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNjZWwvYW1keGRuYS9haWUyX2N0eC5jIGIvZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FpZTJfY3R4LmNcXG5pbmRleCA1NDQ4Njk2MGNiZjVlNi4uYjViNGNhMjYzMDAyZGEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FpZTJfY3R4LmNcXG4rKysgYi9kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguY1xcbkBAIC0xMDM0LDcgKzEwMzQsNyBAQCBzdGF0aWMgaW50IGFpZTJfcG9wdWxhdGVfcmFuZ2Uoc3RydWN0IGFtZHhkbmFfZ2VtX29iaiAqYWJvKVxcbiBcXHRib29sIGZvdW5kO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0dGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xcbitcXHR0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcXG4gYWdhaW46XFxuIFxcdGZvdW5kID0gZmFsc2U7XFxuIFxcdGRvd25fd3JpdGUoXFx1MDAyNnhkbmEtXFx1MDAzZW5vdGlmaWVyX2xvY2spO1xcbkBAIC0xMDYxLDI0ICsxMDYxLDkgQEAgc3RhdGljIGludCBhaWUyX3BvcHVsYXRlX3JhbmdlKHN0cnVjdCBhbWR4ZG5hX2dlbV9vYmogKmFibylcXG4gXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcdH1cXG4gXFxuLVxcdG1hcHAtXFx1MDAzZXJhbmdlLm5vdGlmaWVyX3NlcSA9IG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKFxcdTAwMjZtYXBwLVxcdTAwM2Vub3RpZmllcik7XFxuLVxcdG1tYXBfcmVhZF9sb2NrKG1tKTtcXG4tXFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0KFxcdTAwMjZtYXBwLVxcdTAwM2VyYW5nZSk7XFxuLVxcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xcbi1cXHRpZiAocmV0KSB7XFxuLVxcdFxcdGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7XFxuLVxcdFxcdFxcdHJldCA9IC1FVElNRTtcXG4tXFx0XFx0XFx0Z290byBwdXRfbW07XFxuLVxcdFxcdH1cXG4tXFxuLVxcdFxcdGlmIChyZXQgPT0gLUVCVVNZKSB7XFxuLVxcdFxcdFxcdGFtZHhkbmFfdW1hcF9wdXQobWFwcCk7XFxuLVxcdFxcdFxcdG1tcHV0KG1tKTtcXG4tXFx0XFx0XFx0Z290byBhZ2FpbjtcXG4tXFx0XFx0fVxcbi1cXG4rXFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXFx1MDAyNm1hcHAtXFx1MDAzZXJhbmdlLCB0aW1lb3V0KTtcXG4rXFx0aWYgKHJldClcXG4gXFx0XFx0Z290byBwdXRfbW07XFxuLVxcdH1cXG4gXFxuIFxcdGRvd25fd3JpdGUoXFx1MDAyNnhkbmEtXFx1MDAzZW5vdGlmaWVyX2xvY2spO1xcbiBcXHRpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkoXFx1MDAyNm1hcHAtXFx1MDAzZW5vdGlmaWVyLCBtYXBwLVxcdTAwM2VyYW5nZS5ub3RpZmllcl9zZXEpKSB7XFxuQEAgLTEwOTYsNyArMTA4MSw3IEBAIHN0YXRpYyBpbnQgYWllMl9wb3B1bGF0ZV9yYW5nZShzdHJ1Y3QgYW1keGRuYV9nZW1fb2JqICphYm8pXFxuIHB1dF9tbTpcXG4gXFx0YW1keGRuYV91bWFwX3B1dChtYXBwKTtcXG4gXFx0bW1wdXQobW0pO1xcbi1cXHRyZXR1cm4gcmV0O1xcbitcXHRyZXR1cm4gcmV0ID09IC1FQlVTWSA/IC1FVElNRSA6IHJldDtcXG4gfVxcbiBcXG4gaW50IGFpZTJfY21kX3N1Ym1pdChzdHJ1Y3QgYW1keGRuYV9od2N0eCAqaHdjdHgsIHN0cnVjdCBhbWR4ZG5hX3NjaGVkX2pvYiAqam9iLCB1NjQgKnNlcSlcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmNcXG5pbmRleCA5NThjYjYwNWFlZGQ1My4uZGU1YmJmZTU4ZWU5NDUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uY1xcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmNcXG5AQCAtNzczLDggKzc3Myw3IEBAIGVudW0gZHJtX2dwdXN2bV9zY2FuX3Jlc3VsdCBkcm1fZ3B1c3ZtX3NjYW5fbW0oc3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKnJhbmdlLFxcbiBcXHRcXHQuZW5kID0gZW5kLFxcbiBcXHRcXHQuZGV2X3ByaXZhdGVfb3duZXIgPSBkZXZfcHJpdmF0ZV9vd25lcixcXG4gXFx0fTtcXG4tXFx0dW5zaWduZWQgbG9uZyB0aW1lb3V0ID1cXG4tXFx0XFx0amlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7XFxuIFxcdGVudW0gZHJtX2dwdXN2bV9zY2FuX3Jlc3VsdCBzdGF0ZSA9IERSTV9HUFVTVk1fU0NBTl9VTlBPUFVMQVRFRCwgbmV3X3N0YXRlO1xcbiBcXHR1bnNpZ25lZCBsb25nICpwZm5zO1xcbiBcXHR1bnNpZ25lZCBsb25nIG5wYWdlcyA9IG5wYWdlc19pbl9yYW5nZShzdGFydCwgZW5kKTtcXG5AQCAtNzg4LDIyICs3ODcsNyBAQCBlbnVtIGRybV9ncHVzdm1fc2Nhbl9yZXN1bHQgZHJtX2dwdXN2bV9zY2FuX21tKHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZSxcXG4gXFx0aG1tX3JhbmdlLmhtbV9wZm5zID0gcGZucztcXG4gXFxuIHJldHJ5Olxcbi1cXHRobW1fcmFuZ2Uubm90aWZpZXJfc2VxID0gbW11X2ludGVydmFsX3JlYWRfYmVnaW4obm90aWZpZXIpO1xcbi1cXHRtbWFwX3JlYWRfbG9jayhyYW5nZS1cXHUwMDNlZ3B1c3ZtLVxcdTAwM2VtbSk7XFxuLVxcbi1cXHR3aGlsZSAodHJ1ZSkge1xcbi1cXHRcXHRlcnIgPSBobW1fcmFuZ2VfZmF1bHQoXFx1MDAyNmhtbV9yYW5nZSk7XFxuLVxcdFxcdGlmIChlcnIgPT0gLUVCVVNZKSB7XFxuLVxcdFxcdFxcdGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKVxcbi1cXHRcXHRcXHRcXHRicmVhaztcXG4tXFxuLVxcdFxcdFxcdGhtbV9yYW5nZS5ub3RpZmllcl9zZXEgPVxcbi1cXHRcXHRcXHRcXHRtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihub3RpZmllcik7XFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHR9XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHR9XFxuLVxcdG1tYXBfcmVhZF91bmxvY2socmFuZ2UtXFx1MDAzZWdwdXN2bS1cXHUwMDNlbW0pO1xcbitcXHRlcnIgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcXHUwMDI2aG1tX3JhbmdlLCB0aW1lb3V0KTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBlcnJfZnJlZTtcXG4gXFxuQEAgLTE0MDYsOCArMTM5MCw3IEBAIGludCBkcm1fZ3B1c3ZtX2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxcbiBcXHRcXHQuZGV2X3ByaXZhdGVfb3duZXIgPSBjdHgtXFx1MDAzZWRldmljZV9wcml2YXRlX3BhZ2Vfb3duZXIsXFxuIFxcdH07XFxuIFxcdHZvaWQgKnpkZDtcXG4tXFx0dW5zaWduZWQgbG9uZyB0aW1lb3V0ID1cXG4tXFx0XFx0amlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgaSwgajtcXG4gXFx0dW5zaWduZWQgbG9uZyBucGFnZXMgPSBucGFnZXNfaW5fcmFuZ2UocGFnZXNfc3RhcnQsIHBhZ2VzX2VuZCk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbnVtX2RtYV9tYXBwZWQ7XFxuQEAgLTE0MjIsOSArMTQwNSw2IEBAIGludCBkcm1fZ3B1c3ZtX2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxcbiBcXHRzdHJ1Y3QgZG1hX2lvdmFfc3RhdGUgKnN0YXRlID0gXFx1MDAyNnN2bV9wYWdlcy1cXHUwMDNlc3RhdGU7XFxuIFxcbiByZXRyeTpcXG4tXFx0aWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpXFxuLVxcdFxcdHJldHVybiAtRUJVU1k7XFxuLVxcbiBcXHRobW1fcmFuZ2Uubm90aWZpZXJfc2VxID0gbW11X2ludGVydmFsX3JlYWRfYmVnaW4obm90aWZpZXIpO1xcbiBcXHRpZiAoZHJtX2dwdXN2bV9wYWdlc192YWxpZF91bmxvY2tlZChncHVzdm0sIHN2bV9wYWdlcykpXFxuIFxcdFxcdGdvdG8gc2V0X3NlcW5vO1xcbkBAIC0xNDM5LDIxICsxNDE5LDcgQEAgaW50IGRybV9ncHVzdm1fZ2V0X3BhZ2VzKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXFxuIFxcdH1cXG4gXFxuIFxcdGhtbV9yYW5nZS5obW1fcGZucyA9IHBmbnM7XFxuLVxcdHdoaWxlICh0cnVlKSB7XFxuLVxcdFxcdG1tYXBfcmVhZF9sb2NrKG1tKTtcXG4tXFx0XFx0ZXJyID0gaG1tX3JhbmdlX2ZhdWx0KFxcdTAwMjZobW1fcmFuZ2UpO1xcbi1cXHRcXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcXG4tXFxuLVxcdFxcdGlmIChlcnIgPT0gLUVCVVNZKSB7XFxuLVxcdFxcdFxcdGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKVxcbi1cXHRcXHRcXHRcXHRicmVhaztcXG4tXFxuLVxcdFxcdFxcdGhtbV9yYW5nZS5ub3RpZmllcl9zZXEgPVxcbi1cXHRcXHRcXHRcXHRtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihub3RpZmllcik7XFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHR9XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHR9XFxuK1xcdGVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFxcdTAwMjZobW1fcmFuZ2UsIHRpbWVvdXQpO1xcbiBcXHRtbXB1dChtbSk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuQEAgLTE3MjAsOCArMTY4Niw3IEBAIGludCBkcm1fZ3B1c3ZtX3JhbmdlX2V2aWN0KHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXFxuIFxcdFxcdC5lbmQgPSBkcm1fZ3B1c3ZtX3JhbmdlX2VuZChyYW5nZSksXFxuIFxcdFxcdC5kZXZfcHJpdmF0ZV9vd25lciA9IE5VTEwsXFxuIFxcdH07XFxuLVxcdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9XFxuLVxcdFxcdGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xcbitcXHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xcbiBcXHR1bnNpZ25lZCBsb25nICpwZm5zO1xcbiBcXHR1bnNpZ25lZCBsb25nIG5wYWdlcyA9IG5wYWdlc19pbl9yYW5nZShkcm1fZ3B1c3ZtX3JhbmdlX3N0YXJ0KHJhbmdlKSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgIGRybV9ncHVzdm1fcmFuZ2VfZW5kKHJhbmdlKSk7XFxuQEAgLTE3MzYsMjQgKzE3MDEsMTIgQEAgaW50IGRybV9ncHVzdm1fcmFuZ2VfZXZpY3Qoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbiBcXHRobW1fcmFuZ2UuaG1tX3BmbnMgPSBwZm5zO1xcbi1cXHR3aGlsZSAoIXRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHtcXG4tXFx0XFx0aG1tX3JhbmdlLm5vdGlmaWVyX3NlcSA9IG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKG5vdGlmaWVyKTtcXG4tXFx0XFx0aWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHtcXG4tXFx0XFx0XFx0ZXJyID0gLUVUSU1FO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbi1cXG4tXFx0XFx0bW1hcF9yZWFkX2xvY2sobW0pO1xcbi1cXHRcXHRlcnIgPSBobW1fcmFuZ2VfZmF1bHQoXFx1MDAyNmhtbV9yYW5nZSk7XFxuLVxcdFxcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xcbi1cXHRcXHRpZiAoZXJyICE9IC1FQlVTWSlcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdH1cXG4rXFx0ZXJyID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXFx1MDAyNmhtbV9yYW5nZSwgdGltZW91dCk7XFxuIFxcbiBcXHRrdmZyZWUocGZucyk7XFxuIFxcdG1tcHV0KG1tKTtcXG4gXFxuLVxcdHJldHVybiBlcnI7XFxuK1xcdHJldHVybiBlcnIgPT0gLUVCVVNZID8gLUVUSU1FIDogZXJyO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGRybV9ncHVzdm1fcmFuZ2VfZXZpY3QpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3ZtLmNcXG5pbmRleCBkY2M5MjEzMTQ4OGVhYi4uNTg3MzU0NDZkNzgzMmMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uY1xcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3ZtLmNcXG5AQCAtNjc4LDIwICs2NzgsMjIgQEAgc3RhdGljIGludCBub3V2ZWF1X3JhbmdlX2ZhdWx0KHN0cnVjdCBub3V2ZWF1X3N2bW0gKnN2bW0sXFxuIFxcdHJhbmdlLmVuZCA9IG5vdGlmaWVyLVxcdTAwM2Vub3RpZmllci5pbnRlcnZhbF90cmVlLmxhc3QgKyAxO1xcbiBcXG4gXFx0d2hpbGUgKHRydWUpIHtcXG4tXFx0XFx0aWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHtcXG4rXFx0XFx0bG9uZyByZW1haW5pbmcgPSB0aW1lb3V0IC0gamlmZmllcztcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZSBITU0gdGltZW91dCBvbmx5IGJvdW5kcyByZXRyaWVzIHdoaWxlIEhNTSBpcyB3YWxraW5nIGFuZFxcbitcXHRcXHQgKiBmYXVsdGluZyB0aGUgcmFuZ2UuIFRoaXMgZmF1bHQgaXMgaGFuZGxlZCBieSBhIGtlcm5lbCB3b3JrZXIsXFxuK1xcdFxcdCAqIHNvIGZhdGFsIHNpZ25hbHMgZnJvbSB0aGUgZmF1bHRpbmcgcHJvY2VzcyBjYW5ub3Qgc3RvcCBhblxcbitcXHRcXHQgKiBlbmRsZXNzIHN0cmVhbSBvZiBpbnZhbGlkYXRpb25zIGhlcmUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCB0aW1lb3V0KSkge1xcbiBcXHRcXHRcXHRyZXQgPSAtRUJVU1k7XFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRyYW5nZS5ub3RpZmllcl9zZXEgPSBtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihyYW5nZS5ub3RpZmllcik7XFxuLVxcdFxcdG1tYXBfcmVhZF9sb2NrKG1tKTtcXG4tXFx0XFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0KFxcdTAwMjZyYW5nZSk7XFxuLVxcdFxcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xcbi1cXHRcXHRpZiAocmV0KSB7XFxuLVxcdFxcdFxcdGlmIChyZXQgPT0gLUVCVVNZKVxcbi1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXFx1MDAyNnJhbmdlLCByZW1haW5pbmcpO1xcbitcXHRcXHRpZiAocmV0KVxcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4tXFx0XFx0fVxcbiBcXG4gXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2c3ZtbS1cXHUwMDNlbXV0ZXgpO1xcbiBcXHRcXHRpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkocmFuZ2Uubm90aWZpZXIsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHYvbXNodl9yZWdpb25zLmMgYi9kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jXFxuaW5kZXggNmQ2NWU1YjQyMTUyOTUuLmRkZGFhZGUzMWI1ZGMzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvaHYvbXNodl9yZWdpb25zLmNcXG4rKysgYi9kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jXFxuQEAgLTM4MSw0NiArMzgxLDYgQEAgaW50IG1zaHZfcmVnaW9uX2dldChzdHJ1Y3QgbXNodl9tZW1fcmVnaW9uICpyZWdpb24pXFxuIFxcdHJldHVybiBrcmVmX2dldF91bmxlc3NfemVybyhcXHUwMDI2cmVnaW9uLVxcdTAwM2VtcmVnX3JlZmNvdW50KTtcXG4gfVxcbiBcXG4tLyoqXFxuLSAqIG1zaHZfcmVnaW9uX2htbV9mYXVsdF9hbmRfbG9jayAtIEhhbmRsZSBITU0gZmF1bHRzIGFuZCBsb2NrIHRoZSBtZW1vcnkgcmVnaW9uXFxuLSAqIEByZWdpb246IFBvaW50ZXIgdG8gdGhlIG1lbW9yeSByZWdpb24gc3RydWN0dXJlXFxuLSAqIEByYW5nZTogUG9pbnRlciB0byB0aGUgSE1NIHJhbmdlIHN0cnVjdHVyZVxcbi0gKlxcbi0gKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgc3RlcHM6XFxuLSAqIDEuIFJlYWRzIHRoZSBub3RpZmllciBzZXF1ZW5jZSBmb3IgdGhlIEhNTSByYW5nZS5cXG4tICogMi4gQWNxdWlyZXMgYSByZWFkIGxvY2sgb24gdGhlIG1lbW9yeSBtYXAuXFxuLSAqIDMuIEhhbmRsZXMgSE1NIGZhdWx0cyBmb3IgdGhlIHNwZWNpZmllZCByYW5nZS5cXG4tICogNC4gUmVsZWFzZXMgdGhlIHJlYWQgbG9jayBvbiB0aGUgbWVtb3J5IG1hcC5cXG4tICogNS4gSWYgc3VjY2Vzc2Z1bCwgbG9ja3MgdGhlIG1lbW9yeSByZWdpb24gbXV0ZXguXFxuLSAqIDYuIFZlcmlmaWVzIGlmIHRoZSBub3RpZmllciBzZXF1ZW5jZSBoYXMgY2hhbmdlZCBkdXJpbmcgdGhlIG9wZXJhdGlvbi5cXG4tICogICAgSWYgaXQgaGFzLCByZWxlYXNlcyB0aGUgbXV0ZXggYW5kIHJldHVybnMgLUVCVVNZIHRvIG1hdGNoIHdpdGhcXG4tICogICAgaG1tX3JhbmdlX2ZhdWx0KCkgcmV0dXJuIGNvZGUgZm9yIHJlcGVhdGluZy5cXG4tICpcXG4tICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuXFxuLSAqL1xcbi1zdGF0aWMgaW50IG1zaHZfcmVnaW9uX2htbV9mYXVsdF9hbmRfbG9jayhzdHJ1Y3QgbXNodl9tZW1fcmVnaW9uICpyZWdpb24sXFxuLVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpXFxuLXtcXG4tXFx0aW50IHJldDtcXG4tXFxuLVxcdHJhbmdlLVxcdTAwM2Vub3RpZmllcl9zZXEgPSBtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihyYW5nZS1cXHUwMDNlbm90aWZpZXIpO1xcbi1cXHRtbWFwX3JlYWRfbG9jayhyZWdpb24tXFx1MDAzZW1yZWdfbW5pLm1tKTtcXG4tXFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0KHJhbmdlKTtcXG4tXFx0bW1hcF9yZWFkX3VubG9jayhyZWdpb24tXFx1MDAzZW1yZWdfbW5pLm1tKTtcXG4tXFx0aWYgKHJldClcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4tXFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNnJlZ2lvbi1cXHUwMDNlbXJlZ19tdXRleCk7XFxuLVxcbi1cXHRpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkocmFuZ2UtXFx1MDAzZW5vdGlmaWVyLCByYW5nZS1cXHUwMDNlbm90aWZpZXJfc2VxKSkge1xcbi1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnJlZ2lvbi1cXHUwMDNlbXJlZ19tdXRleCk7XFxuLVxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbi1cXHRcXHRyZXR1cm4gLUVCVVNZO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4gLyoqXFxuICAqIG1zaHZfcmVnaW9uX3JhbmdlX2ZhdWx0IC0gSGFuZGxlIG1lbW9yeSByYW5nZSBmYXVsdHMgZm9yIGEgZ2l2ZW4gcmVnaW9uLlxcbiAgKiBAcmVnaW9uOiBQb2ludGVyIHRvIHRoZSBtZW1vcnkgcmVnaW9uIHN0cnVjdHVyZS5cXG5AQCAtNDUyLDEzICs0MTIsMTkgQEAgc3RhdGljIGludCBtc2h2X3JlZ2lvbl9yYW5nZV9mYXVsdChzdHJ1Y3QgbXNodl9tZW1fcmVnaW9uICpyZWdpb24sXFxuIFxcdHJhbmdlLnN0YXJ0ID0gcmVnaW9uLVxcdTAwM2VzdGFydF91YWRkciArIHBhZ2Vfb2Zmc2V0ICogSFZfSFlQX1BBR0VfU0laRTtcXG4gXFx0cmFuZ2UuZW5kID0gcmFuZ2Uuc3RhcnQgKyBwYWdlX2NvdW50ICogSFZfSFlQX1BBR0VfU0laRTtcXG4gXFxuLVxcdGRvIHtcXG4tXFx0XFx0cmV0ID0gbXNodl9yZWdpb25faG1tX2ZhdWx0X2FuZF9sb2NrKHJlZ2lvbiwgXFx1MDAyNnJhbmdlKTtcXG4tXFx0fSB3aGlsZSAocmV0ID09IC1FQlVTWSk7XFxuLVxcbithZ2FpbjpcXG4rXFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXFx1MDAyNnJhbmdlLCAwKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZyZWdpb24tXFx1MDAzZW1yZWdfbXV0ZXgpO1xcbitcXG4rXFx0aWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KHJhbmdlLm5vdGlmaWVyLCByYW5nZS5ub3RpZmllcl9zZXEpKSB7XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2cmVnaW9uLVxcdTAwM2VtcmVnX211dGV4KTtcXG4rXFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuK1xcdFxcdGdvdG8gYWdhaW47XFxuK1xcdH1cXG4rXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwYWdlX2NvdW50OyBpKyspXFxuIFxcdFxcdHJlZ2lvbi1cXHUwMDNlbXJlZ19wYWdlc1twYWdlX29mZnNldCArIGldID0gaG1tX3Bmbl90b19wYWdlKHBmbnNbaV0pO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9vZHAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmNcXG5pbmRleCA0MDRmYTFjYzMyNTQyYy4uOWNjMjFjZDc2MmQ5ODkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9vZHAuY1xcbisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmNcXG5AQCAtMzI5LDcgKzMyOSw3IEBAIGludCBpYl91bWVtX29kcF9tYXBfZG1hX2FuZF9sb2NrKHN0cnVjdCBpYl91bWVtX29kcCAqdW1lbV9vZHAsIHU2NCB1c2VyX3ZpcnQsXFxuIFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm93bmluZ19tbSA9IHVtZW1fb2RwLVxcdTAwM2V1bWVtLm93bmluZ19tbTtcXG4gXFx0aW50IHBmbl9pbmRleCwgZG1hX2luZGV4LCByZXQgPSAwLCBzdGFydF9pZHg7XFxuIFxcdHVuc2lnbmVkIGludCBwYWdlX3NoaWZ0LCBobW1fb3JkZXIsIHBmbl9zdGFydF9pZHg7XFxuLVxcdHVuc2lnbmVkIGxvbmcgbnVtX3BmbnMsIGN1cnJlbnRfc2VxO1xcbitcXHR1bnNpZ25lZCBsb25nIG51bV9wZm5zO1xcbiBcXHRzdHJ1Y3QgaG1tX3JhbmdlIHJhbmdlID0ge307XFxuIFxcdHVuc2lnbmVkIGxvbmcgdGltZW91dDtcXG4gXFxuQEAgLTM2MywyNiArMzYzLDE4IEBAIGludCBpYl91bWVtX29kcF9tYXBfZG1hX2FuZF9sb2NrKHN0cnVjdCBpYl91bWVtX29kcCAqdW1lbV9vZHAsIHU2NCB1c2VyX3ZpcnQsXFxuIFxcdH1cXG4gXFxuIFxcdHJhbmdlLmhtbV9wZm5zID0gXFx1MDAyNih1bWVtX29kcC1cXHUwMDNlbWFwLnBmbl9saXN0W3Bmbl9zdGFydF9pZHhdKTtcXG4tXFx0dGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xcbitcXHR0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcXG4gXFxuIHJldHJ5Olxcbi1cXHRjdXJyZW50X3NlcSA9IHJhbmdlLm5vdGlmaWVyX3NlcSA9XFxuLVxcdFxcdG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKFxcdTAwMjZ1bWVtX29kcC1cXHUwMDNlbm90aWZpZXIpO1xcbi1cXG4tXFx0bW1hcF9yZWFkX2xvY2sob3duaW5nX21tKTtcXG4tXFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0KFxcdTAwMjZyYW5nZSk7XFxuLVxcdG1tYXBfcmVhZF91bmxvY2sob3duaW5nX21tKTtcXG4tXFx0aWYgKHVubGlrZWx5KHJldCkpIHtcXG4tXFx0XFx0aWYgKHJldCA9PSAtRUJVU1kgXFx1MDAyNlxcdTAwMjYgIXRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpXFxuLVxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFxcdTAwMjZyYW5nZSwgdGltZW91dCk7XFxuK1xcdGlmICh1bmxpa2VseShyZXQpKVxcbiBcXHRcXHRnb3RvIG91dF9wdXRfbW07XFxuLVxcdH1cXG4gXFxuIFxcdHN0YXJ0X2lkeCA9IChyYW5nZS5zdGFydCAtIGliX3VtZW1fc3RhcnQodW1lbV9vZHApKSBcXHUwMDNlXFx1MDAzZSBwYWdlX3NoaWZ0O1xcbiBcXHRkbWFfaW5kZXggPSBzdGFydF9pZHg7XFxuIFxcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZ1bWVtX29kcC1cXHUwMDNldW1lbV9tdXRleCk7XFxuLVxcdGlmIChtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeShcXHUwMDI2dW1lbV9vZHAtXFx1MDAzZW5vdGlmaWVyLCBjdXJyZW50X3NlcSkpIHtcXG4rXFx0aWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KFxcdTAwMjZ1bWVtX29kcC1cXHUwMDNlbm90aWZpZXIsIHJhbmdlLm5vdGlmaWVyX3NlcSkpIHtcXG4gXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ1bWVtX29kcC1cXHUwMDNldW1lbV9tdXRleCk7XFxuIFxcdFxcdGdvdG8gcmV0cnk7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9obW0uaCBiL2luY2x1ZGUvbGludXgvaG1tLmhcXG5pbmRleCBkYjc1ZmZjOTQ5YTdhYy4uNmYwNGUzOTMyZjViMGMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9obW0uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvaG1tLmhcXG5AQCAtMTIzLDYgKzEyMyw4IEBAIHN0cnVjdCBobW1fcmFuZ2Uge1xcbiAgKiBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vbW0vaG1tLnJzdCBmb3IgaG93IHRvIHVzZSB0aGUgcmFuZ2UgQVBJLlxcbiAgKi9cXG4gaW50IGhtbV9yYW5nZV9mYXVsdChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSk7XFxuK2ludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSxcXG4rXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpO1xcbiBcXG4gLypcXG4gICogSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCAtIGRlZmF1bHQgdGltZW91dCAobXMpIHdoZW4gd2FpdGluZyBmb3IgYSByYW5nZVxcbmRpZmYgLS1naXQgYS9saWIvdGVzdF9obW0uYyBiL2xpYi90ZXN0X2htbS5jXFxuaW5kZXggNDVjMGNiOTkyMjE4NGEuLjYyMDVmYjMxM2JkMDVlIDEwMDY0NFxcbi0tLSBhL2xpYi90ZXN0X2htbS5jXFxuKysrIGIvbGliL3Rlc3RfaG1tLmNcXG5AQCAtMzg5LDYgKzM4OSw2NyBAQCBzdGF0aWMgaW50IGRtaXJyb3JfcmFuZ2VfZmF1bHQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgZG1pcnJvcl9yYW5nZV9mYXVsdF91bmxvY2tlZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsXFxuK1xcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgdGltZW91dClcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0d2hpbGUgKHRydWUpIHtcXG4rXFx0XFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQocmFuZ2UsIHRpbWVvdXQpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdFxcdG11dGV4X2xvY2soXFx1MDAyNmRtaXJyb3ItXFx1MDAzZW11dGV4KTtcXG4rXFx0XFx0aWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KHJhbmdlLVxcdTAwM2Vub3RpZmllcixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHJhbmdlLVxcdTAwM2Vub3RpZmllcl9zZXEpKSB7XFxuK1xcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZG1pcnJvci1cXHUwMDNlbXV0ZXgpO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gZG1pcnJvcl9kb19mYXVsdChkbWlycm9yLCByYW5nZSk7XFxuK1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmRtaXJyb3ItXFx1MDAzZW11dGV4KTtcXG4rb3V0OlxcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGRtaXJyb3JfZmF1bHRfdW5sb2NrZWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsXFxuK1xcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4rXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGVuZCwgYm9vbCB3cml0ZSxcXG4rXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpXFxuK3tcXG4rXFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBkbWlycm9yLVxcdTAwM2Vub3RpZmllci5tbTtcXG4rXFx0dW5zaWduZWQgbG9uZyBhZGRyO1xcbitcXHR1bnNpZ25lZCBsb25nIHBmbnNbMzJdO1xcbitcXHRzdHJ1Y3QgaG1tX3JhbmdlIHJhbmdlID0ge1xcbitcXHRcXHQubm90aWZpZXIgPSBcXHUwMDI2ZG1pcnJvci1cXHUwMDNlbm90aWZpZXIsXFxuK1xcdFxcdC5obW1fcGZucyA9IHBmbnMsXFxuK1xcdFxcdC5wZm5fZmxhZ3NfbWFzayA9IDAsXFxuK1xcdFxcdC5kZWZhdWx0X2ZsYWdzID1cXG4rXFx0XFx0XFx0SE1NX1BGTl9SRVFfRkFVTFQgfCAod3JpdGUgPyBITU1fUEZOX1JFUV9XUklURSA6IDApLFxcbitcXHRcXHQuZGV2X3ByaXZhdGVfb3duZXIgPSBkbWlycm9yLVxcdTAwM2VtZGV2aWNlLFxcbitcXHR9O1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdGlmICghbW1nZXRfbm90X3plcm8obW0pKVxcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFxuK1xcdGZvciAoYWRkciA9IHN0YXJ0OyBhZGRyIFxcdTAwM2MgZW5kOyBhZGRyID0gcmFuZ2UuZW5kKSB7XFxuK1xcdFxcdHJhbmdlLnN0YXJ0ID0gYWRkcjtcXG4rXFx0XFx0cmFuZ2UuZW5kID0gbWluKGFkZHIgKyAoQVJSQVlfU0laRShwZm5zKSBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKSwgZW5kKTtcXG4rXFxuK1xcdFxcdHJldCA9IGRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWQoZG1pcnJvciwgXFx1MDAyNnJhbmdlLCB0aW1lb3V0KTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdG1tcHV0KG1tKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBkbWlycm9yX2ZhdWx0KHN0cnVjdCBkbWlycm9yICpkbWlycm9yLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbiBcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBlbmQsIGJvb2wgd3JpdGUpXFxuIHtcXG5AQCAtNDg4LDYgKzU0OSw0OCBAQCBzdGF0aWMgaW50IGRtaXJyb3JfcmVhZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvciwgc3RydWN0IGhtbV9kbWlycm9yX2NtZCAqY21kKVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGRtaXJyb3JfcmVhZF91bmxvY2tlZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBobW1fZG1pcnJvcl9jbWQgKmNtZCxcXG4rXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgdGltZW91dClcXG4re1xcbitcXHRzdHJ1Y3QgZG1pcnJvcl9ib3VuY2UgYm91bmNlO1xcbitcXHR1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IGNtZC1cXHUwMDNlbnBhZ2VzIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQ7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRzdGFydCA9IGNtZC1cXHUwMDNlYWRkcjtcXG4rXFx0ZW5kID0gc3RhcnQgKyBzaXplO1xcbitcXHRpZiAoZW5kIFxcdTAwM2Mgc3RhcnQpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cmV0ID0gZG1pcnJvcl9ib3VuY2VfaW5pdChcXHUwMDI2Ym91bmNlLCBzdGFydCwgc2l6ZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHR3aGlsZSAoMSkge1xcbitcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZkbWlycm9yLVxcdTAwM2VtdXRleCk7XFxuK1xcdFxcdHJldCA9IGRtaXJyb3JfZG9fcmVhZChkbWlycm9yLCBzdGFydCwgZW5kLCBcXHUwMDI2Ym91bmNlKTtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkbWlycm9yLVxcdTAwM2VtdXRleCk7XFxuK1xcdFxcdGlmIChyZXQgIT0gLUVOT0VOVClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRzdGFydCA9IGNtZC1cXHUwMDNlYWRkciArIChib3VuY2UuY3BhZ2VzIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpO1xcbitcXHRcXHRyZXQgPSBkbWlycm9yX2ZhdWx0X3VubG9ja2VkKGRtaXJyb3IsIHN0YXJ0LCBlbmQsIGZhbHNlLCB0aW1lb3V0KTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNtZC1cXHUwMDNlZmF1bHRzKys7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChyZXQgPT0gMCkge1xcbitcXHRcXHRpZiAoY29weV90b191c2VyKHU2NF90b191c2VyX3B0cihjbWQtXFx1MDAzZXB0ciksIGJvdW5jZS5wdHIsXFxuK1xcdFxcdFxcdFxcdCBib3VuY2Uuc2l6ZSkpXFxuK1xcdFxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuK1xcdH1cXG4rXFx0Y21kLVxcdTAwM2VjcGFnZXMgPSBib3VuY2UuY3BhZ2VzO1xcbitcXHRkbWlycm9yX2JvdW5jZV9maW5pKFxcdTAwMjZib3VuY2UpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGRtaXJyb3JfZG9fd3JpdGUoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuIFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IGRtaXJyb3JfYm91bmNlICpib3VuY2UpXFxuIHtcXG5AQCAtMTU3Miw3ICsxNjc1LDkgQEAgc3RhdGljIGxvbmcgZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbiBcXHRcXHRkbWlycm9yLVxcdTAwM2VmbGFncyA9IGNtZC5ucGFnZXM7XFxuIFxcdFxcdHJldCA9IDA7XFxuIFxcdFxcdGJyZWFrO1xcbi1cXG4rXFx0Y2FzZSBITU1fRE1JUlJPUl9SRUFEX1VOTE9DS0VEOlxcbitcXHRcXHRyZXQgPSBkbWlycm9yX3JlYWRfdW5sb2NrZWQoZG1pcnJvciwgXFx1MDAyNmNtZCwgMCk7XFxuK1xcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9saWIvdGVzdF9obW1fdWFwaS5oIGIvbGliL3Rlc3RfaG1tX3VhcGkuaFxcbmluZGV4IGY5NGM2ZDQ1NzMzODI4Li5lYTliMGVjNDA0ZmI1NSAxMDA2NDRcXG4tLS0gYS9saWIvdGVzdF9obW1fdWFwaS5oXFxuKysrIGIvbGliL3Rlc3RfaG1tX3VhcGkuaFxcbkBAIC0zOCw2ICszOCw3IEBAIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQge1xcbiAjZGVmaW5lIEhNTV9ETUlSUk9SX0NIRUNLX0VYQ0xVU0lWRVxcdF9JT1dSKCdIJywgMHgwNiwgc3RydWN0IGhtbV9kbWlycm9yX2NtZClcXG4gI2RlZmluZSBITU1fRE1JUlJPUl9SRUxFQVNFXFx0XFx0X0lPV1IoJ0gnLCAweDA3LCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kKVxcbiAjZGVmaW5lIEhNTV9ETUlSUk9SX0ZMQUdTXFx0XFx0X0lPV1IoJ0gnLCAweDA4LCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kKVxcbisjZGVmaW5lIEhNTV9ETUlSUk9SX1JFQURfVU5MT0NLRURcXHRfSU9XUignSCcsIDB4MDksIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQpXFxuIFxcbiAjZGVmaW5lIEhNTV9ETUlSUk9SX0ZMQUdfRkFJTF9BTExPQ1xcdCgxVUxMIFxcdTAwM2NcXHUwMDNjIDApXFxuIFxcbmRpZmYgLS1naXQgYS9tbS9obW0uYyBiL21tL2htbS5jXFxuaW5kZXggZTVjMWY0ZGVlZDI0NDcuLmZjMmUxY2QwY2IyMmViIDEwMDY0NFxcbi0tLSBhL21tL2htbS5jXFxuKysrIGIvbW0vaG1tLmNcXG5AQCAtMzIsOSArMzIsMjcgQEBcXG4gXFxuIHN0cnVjdCBobW1fdm1hX3dhbGsge1xcbiBcXHRzdHJ1Y3QgaG1tX3JhbmdlXFx0KnJhbmdlO1xcbitcXHRib29sXFx0XFx0XFx0KmxvY2tlZDtcXG4gXFx0dW5zaWduZWQgbG9uZ1xcdFxcdGxhc3Q7XFxuK1xcdHVuc2lnbmVkIGxvbmdcXHRcXHRlbmQ7XFxuK1xcdHVuc2lnbmVkIGludFxcdFxcdHJlcXVpcmVkX2ZhdWx0O1xcbiB9O1xcbiBcXG4rLypcXG4rICogSW50ZXJuYWwgc2VudGluZWwgcmV0dXJuZWQgYnkgd2FsayBjYWxsYmFja3Mgd2hlbiB0aGV5IG5lZWQgYSBwYWdlIGZhdWx0LlxcbisgKiBUaGUgY2FsbGJhY2sgc3RvcmVzIGVuZC9yZXF1aXJlZF9mYXVsdCBpbiBobW1fdm1hX3dhbGs7IHRoZSBvdXRlciBsb29wXFxuKyAqIGNvbnN1bWVzIHRoZSBzZW50aW5lbCBhbmQgbmV2ZXIgcHJvcGFnYXRlcyBpdCB0byB0aGUgY2FsbGVyLlxcbisgKi9cXG4rI2RlZmluZSBITU1fRkFVTFRfUEVORElOR1xcdC1FQUdBSU5cXG4rXFxuKy8qXFxuKyAqIEludGVybmFsIHNlbnRpbmVsIHJldHVybmVkIGJ5IGhtbV9kb19mYXVsdCgpIHdoZW4gaGFuZGxlX21tX2ZhdWx0KClcXG4rICogY29tcGxldGVzIGEgcGFnZSBmYXVsdCB3aXRoIHRoZSBtbWFwIGxvY2sgZHJvcHBlZC4gaG1tX2RvX2ZhdWx0KCkgc2V0c1xcbisgKiAqbG9ja2VkID0gZmFsc2U7IHRoZSBvdXRlciBsb29wIGNvbnN1bWVzIHRoZSBzZW50aW5lbCBhbmQgbmV2ZXIgcHJvcGFnYXRlc1xcbisgKiBpdCB0byB0aGUgY2FsbGVyLlxcbisgKi9cXG4rI2RlZmluZSBITU1fRkFVTFRfVU5MT0NLRURcXHQtRU5PTENLXFxuK1xcbiBlbnVtIHtcXG4gXFx0SE1NX05FRURfRkFVTFQgPSAxIFxcdTAwM2NcXHUwMDNjIDAsXFxuIFxcdEhNTV9ORUVEX1dSSVRFX0ZBVUxUID0gMSBcXHUwMDNjXFx1MDAzYyAxLFxcbkBAIC02MCwzNyArNzgsMjUgQEAgc3RhdGljIGludCBobW1fcGZuc19maWxsKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIH1cXG4gXFxuIC8qXFxuLSAqIGhtbV92bWFfZmF1bHQoKSAtIGZhdWx0IGluIGEgcmFuZ2UgbGFja2luZyB2YWxpZCBwbWQgb3IgcHRlKHMpXFxuLSAqIEBhZGRyOiByYW5nZSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MgKGluY2x1c2l2ZSlcXG4tICogQGVuZDogcmFuZ2UgdmlydHVhbCBlbmQgYWRkcmVzcyAoZXhjbHVzaXZlKVxcbi0gKiBAcmVxdWlyZWRfZmF1bHQ6IEhNTV9ORUVEXyogZmxhZ3NcXG4tICogQHdhbGs6IG1tX3dhbGsgc3RydWN0dXJlXFxuLSAqIFJldHVybjogLUVCVVNZIGFmdGVyIHBhZ2UgZmF1bHQsIG9yIHBhZ2UgZmF1bHQgZXJyb3JcXG4rICogaG1tX3JlY29yZF9mYXVsdCgpIC0gcmVjb3JkIGEgcmFuZ2UgdGhhdCBuZWVkcyB0byBiZSBmYXVsdGVkIGluXFxuICAqXFxuLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgcG1kX25vbmUoKSBvciBwdGVfbm9uZSgpIHJldHVybnMgdHJ1ZSxcXG4tICogb3Igd2hlbmV2ZXIgdGhlcmUgaXMgbm8gcGFnZSBkaXJlY3RvcnkgY292ZXJpbmcgdGhlIHZpcnR1YWwgYWRkcmVzcyByYW5nZS5cXG4rICogQ2FsbGVkIGJ5IHRoZSB3YWxrIGNhbGxiYWNrcyB3aGVuIHRoZXkgZGlzY292ZXIgdGhhdCBwYXJ0IG9mIHRoZSByYW5nZVxcbisgKiBuZWVkcyBhIHBhZ2UgZmF1bHQuICBUaGUgY2FsbGJhY2sgcmVjb3JkcyB3aGF0IHRvIGZhdWx0IGFuZCByZXR1cm5zXFxuKyAqIEhNTV9GQVVMVF9QRU5ESU5HOyB0aGUgb3V0ZXIgbG9vcCBpbiBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkKCkgZHJvcHNcXG4rICogYmFjayBvdXQgb2Ygd2Fsa19wYWdlX3JhbmdlKCkgYW5kIGludm9rZXMgaGFuZGxlX21tX2ZhdWx0KCkgZnJvbSBhIGNvbnRleHRcXG4rICogd2hlcmUgbm8gcGFnZS10YWJsZSBvciBodWdldGxiX3ZtYV9sb2NrIGlzIGhlbGQuXFxuICAqL1xcbi1zdGF0aWMgaW50IGhtbV92bWFfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tXFx0XFx0XFx0IHVuc2lnbmVkIGludCByZXF1aXJlZF9mYXVsdCwgc3RydWN0IG1tX3dhbGsgKndhbGspXFxuK3N0YXRpYyBpbnQgaG1tX3JlY29yZF9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbitcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IHJlcXVpcmVkX2ZhdWx0LFxcbitcXHRcXHRcXHQgICAgc3RydWN0IG1tX3dhbGsgKndhbGspXFxuIHtcXG4gXFx0c3RydWN0IGhtbV92bWFfd2FsayAqaG1tX3ZtYV93YWxrID0gd2Fsay1cXHUwMDNlcHJpdmF0ZTtcXG4tXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB3YWxrLVxcdTAwM2V2bWE7XFxuLVxcdHVuc2lnbmVkIGludCBmYXVsdF9mbGFncyA9IEZBVUxUX0ZMQUdfUkVNT1RFO1xcbiBcXG4gXFx0V0FSTl9PTl9PTkNFKCFyZXF1aXJlZF9mYXVsdCk7XFxuIFxcdGhtbV92bWFfd2Fsay1cXHUwMDNlbGFzdCA9IGFkZHI7XFxuLVxcbi1cXHRpZiAocmVxdWlyZWRfZmF1bHQgXFx1MDAyNiBITU1fTkVFRF9XUklURV9GQVVMVCkge1xcbi1cXHRcXHRpZiAoISh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fV1JJVEUpKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbi1cXHRcXHRmYXVsdF9mbGFncyB8PSBGQVVMVF9GTEFHX1dSSVRFO1xcbi1cXHR9XFxuLVxcbi1cXHRmb3IgKDsgYWRkciBcXHUwMDNjIGVuZDsgYWRkciArPSBQQUdFX1NJWkUpXFxuLVxcdFxcdGlmIChoYW5kbGVfbW1fZmF1bHQodm1hLCBhZGRyLCBmYXVsdF9mbGFncywgTlVMTCkgXFx1MDAyNlxcbi1cXHRcXHQgICAgVk1fRkFVTFRfRVJST1IpXFxuLVxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi1cXHRyZXR1cm4gLUVCVVNZO1xcbitcXHRobW1fdm1hX3dhbGstXFx1MDAzZWVuZCA9IGVuZDtcXG4rXFx0aG1tX3ZtYV93YWxrLVxcdTAwM2VyZXF1aXJlZF9mYXVsdCA9IHJlcXVpcmVkX2ZhdWx0O1xcbitcXHRyZXR1cm4gSE1NX0ZBVUxUX1BFTkRJTkc7XFxuIH1cXG4gXFxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgaG1tX3B0ZV9uZWVkX2ZhdWx0KGNvbnN0IHN0cnVjdCBobW1fdm1hX3dhbGsgKmhtbV92bWFfd2FsayxcXG5AQCAtMTc0LDcgKzE4MCw3IEBAIHN0YXRpYyBpbnQgaG1tX3ZtYV93YWxrX2hvbGUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0XFx0cmV0dXJuIGhtbV9wZm5zX2ZpbGwoYWRkciwgZW5kLCByYW5nZSwgSE1NX1BGTl9FUlJPUik7XFxuIFxcdH1cXG4gXFx0aWYgKHJlcXVpcmVkX2ZhdWx0KVxcbi1cXHRcXHRyZXR1cm4gaG1tX3ZtYV9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcXG4rXFx0XFx0cmV0dXJuIGhtbV9yZWNvcmRfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XFxuIFxcdHJldHVybiBobW1fcGZuc19maWxsKGFkZHIsIGVuZCwgcmFuZ2UsIDApO1xcbiB9XFxuIFxcbkBAIC0yMDksNyArMjE1LDcgQEAgc3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9wbWQoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0cmVxdWlyZWRfZmF1bHQgPVxcbiBcXHRcXHRobW1fcmFuZ2VfbmVlZF9mYXVsdChobW1fdm1hX3dhbGssIGhtbV9wZm5zLCBucGFnZXMsIGNwdV9mbGFncyk7XFxuIFxcdGlmIChyZXF1aXJlZF9mYXVsdClcXG4tXFx0XFx0cmV0dXJuIGhtbV92bWFfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XFxuK1xcdFxcdHJldHVybiBobW1fcmVjb3JkX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspO1xcbiBcXG4gXFx0cGZuID0gcG1kX3BmbihwbWQpICsgKChhZGRyIFxcdTAwMjYgflBNRF9NQVNLKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG4gXFx0Zm9yIChpID0gMDsgYWRkciBcXHUwMDNjIGVuZDsgYWRkciArPSBQQUdFX1NJWkUsIGkrKywgcGZuKyspIHtcXG5AQCAtMzI4LDcgKzMzNCw3IEBAIHN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfcHRlKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIGZhdWx0OlxcbiBcXHRwdGVfdW5tYXAocHRlcCk7XFxuIFxcdC8qIEZhdWx0IGFueSB2aXJ0dWFsIGFkZHJlc3Mgd2Ugd2VyZSBhc2tlZCB0byBmYXVsdCAqL1xcbi1cXHRyZXR1cm4gaG1tX3ZtYV9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcXG4rXFx0cmV0dXJuIGhtbV9yZWNvcmRfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XFxuIH1cXG4gXFxuICNpZmRlZiBDT05GSUdfQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVNcXG5AQCAtMzcxLDcgKzM3Nyw3IEBAIHN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfYWJzZW50X3BtZChzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgbnBhZ2VzLCAwKTtcXG4gXFx0aWYgKHJlcXVpcmVkX2ZhdWx0KSB7XFxuIFxcdFxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXFxuLVxcdFxcdFxcdHJldHVybiBobW1fdm1hX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspO1xcbitcXHRcXHRcXHRyZXR1cm4gaG1tX3JlY29yZF9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gXFx0fVxcbkBAIC01MTcsNyArNTIzLDcgQEAgc3RhdGljIGludCBobW1fdm1hX3dhbGtfcHVkKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgbnBhZ2VzLCBjcHVfZmxhZ3MpO1xcbiBcXHRcXHRpZiAocmVxdWlyZWRfZmF1bHQpIHtcXG4gXFx0XFx0XFx0c3Bpbl91bmxvY2socHRsKTtcXG4tXFx0XFx0XFx0cmV0dXJuIGhtbV92bWFfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XFxuK1xcdFxcdFxcdHJldHVybiBobW1fcmVjb3JkX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspO1xcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRwZm4gPSBwdWRfcGZuKHB1ZCkgKyAoKGFkZHIgXFx1MDAyNiB+UFVEX01BU0spIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbkBAIC01NjQsMjEgKzU3MCw4IEBAIHN0YXRpYyBpbnQgaG1tX3ZtYV93YWxrX2h1Z2V0bGJfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcXG4gXFx0cmVxdWlyZWRfZmF1bHQgPVxcbiBcXHRcXHRobW1fcHRlX25lZWRfZmF1bHQoaG1tX3ZtYV93YWxrLCBwZm5fcmVxX2ZsYWdzLCBjcHVfZmxhZ3MpO1xcbiBcXHRpZiAocmVxdWlyZWRfZmF1bHQpIHtcXG4tXFx0XFx0aW50IHJldDtcXG4tXFxuIFxcdFxcdHNwaW5fdW5sb2NrKHB0bCk7XFxuLVxcdFxcdGh1Z2V0bGJfdm1hX3VubG9ja19yZWFkKHZtYSk7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIEF2b2lkIGRlYWRsb2NrOiBkcm9wIHRoZSB2bWEgbG9jayBiZWZvcmUgY2FsbGluZ1xcbi1cXHRcXHQgKiBobW1fdm1hX2ZhdWx0KCksIHdoaWNoIHdpbGwgaXRzZWxmIHBvdGVudGlhbGx5IHRha2UgYW5kXFxuLVxcdFxcdCAqIGRyb3AgdGhlIHZtYSBsb2NrLiBUaGlzIGlzIGFsc28gY29ycmVjdCBmcm9tIGFcXG4tXFx0XFx0ICogcHJvdGVjdGlvbiBwb2ludCBvZiB2aWV3LCBiZWNhdXNlIHRoZXJlIGlzIG5vIGZ1cnRoZXJcXG4tXFx0XFx0ICogdXNlIGhlcmUgb2YgZWl0aGVyIHB0ZSBvciBwdGwgYWZ0ZXIgZHJvcHBpbmcgdGhlIHZtYVxcbi1cXHRcXHQgKiBsb2NrLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0cmV0ID0gaG1tX3ZtYV9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcXG4tXFx0XFx0aHVnZXRsYl92bWFfbG9ja19yZWFkKHZtYSk7XFxuLVxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdHJldHVybiBobW1fcmVjb3JkX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspO1xcbiBcXHR9XFxuIFxcbiBcXHRwZm4gPSBwdGVfcGZuKGVudHJ5KSArICgoc3RhcnQgXFx1MDAyNiB+aG1hc2spIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbkBAIC02MzcsMjkgKzYzMCw2NyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIGhtbV93YWxrX29wcyA9IHtcXG4gXFx0LndhbGtfbG9ja1xcdD0gUEdXQUxLX1JETE9DSyxcXG4gfTtcXG4gXFxuLS8qKlxcbi0gKiBobW1fcmFuZ2VfZmF1bHQgLSB0cnkgdG8gZmF1bHQgc29tZSBhZGRyZXNzIGluIGEgdmlydHVhbCBhZGRyZXNzIHJhbmdlXFxuLSAqIEByYW5nZTpcXHRhcmd1bWVudCBzdHJ1Y3R1cmVcXG4tICpcXG4tICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgZXJyb3IgY29kZXM6XFxuKy8qXFxuKyAqIGhtbV9kb19mYXVsdCAtIGZhdWx0IGluIGEgcmFuZ2UgcmVjb3JkZWQgYnkgYSB3YWxrIGNhbGxiYWNrXFxuICAqXFxuLSAqIC1FSU5WQUw6XFx0SW52YWxpZCBhcmd1bWVudHMgb3IgbW0gb3IgdmlydHVhbCBhZGRyZXNzIGlzIGluIGFuIGludmFsaWQgdm1hXFxuLSAqXFx0XFx0KGUuZy4sIGRldmljZSBmaWxlIHZtYSkuXFxuLSAqIC1FTk9NRU06XFx0T3V0IG9mIG1lbW9yeS5cXG4tICogLUVQRVJNOlxcdEludmFsaWQgcGVybWlzc2lvbiAoZS5nLiwgYXNraW5nIGZvciB3cml0ZSBhbmQgcmFuZ2UgaXMgcmVhZFxcbi0gKlxcdFxcdG9ubHkpLlxcbi0gKiAtRUJVU1k6XFx0VGhlIHJhbmdlIGhhcyBiZWVuIGludmFsaWRhdGVkIGFuZCB0aGUgY2FsbGVyIG5lZWRzIHRvIHdhaXQgZm9yXFxuLSAqXFx0XFx0dGhlIGludmFsaWRhdGlvbiB0byBmaW5pc2guXFxuLSAqIC1FRkFVTFQ6ICAgICBBIHBhZ2Ugd2FzIHJlcXVlc3RlZCB0byBiZSB2YWxpZCBhbmQgY291bGQgbm90IGJlIG1hZGUgdmFsaWRcXG4tICogICAgICAgICAgICAgIGllIGl0IGhhcyBubyBiYWNraW5nIFZNQSBvciBpdCBpcyBpbGxlZ2FsIHRvIGFjY2Vzc1xcbisgKiBDYWxsZWQgZnJvbSB0aGUgb3V0ZXIgbG9vcCBpbiBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkKCkgYWZ0ZXIgYSBjYWxsYmFja1xcbisgKiByZXR1cm5lZCBITU1fRkFVTFRfUEVORElORy4gIEF0IHRoaXMgcG9pbnQgd2UgaG9sZCBvbmx5IG1tYXBfbG9jaztcXG4rICogdGhlIHBhZ2UtdGFibGUgc3BpbmxvY2sgYW5kIGFueSBodWdldGxiX3ZtYV9sb2NrIGFjcXVpcmVkIGJ5IHRoZSB3YWxrXFxuKyAqIGZyYW1ld29yayBoYXZlIGFscmVhZHkgYmVlbiByZWxlYXNlZCBieSB0aGUgdW53aW5kLlxcbiAgKlxcbi0gKiBUaGlzIGlzIHNpbWlsYXIgdG8gZ2V0X3VzZXJfcGFnZXMoKSwgZXhjZXB0IHRoYXQgaXQgY2FuIHJlYWQgdGhlIHBhZ2UgdGFibGVzXFxuLSAqIHdpdGhvdXQgbXV0YXRpbmcgdGhlbSAoaWUgY2F1c2luZyBmYXVsdHMpLlxcbisgKiBSZXR1cm5zIC1FQlVTWSBvbiBzdWNjZXNzIChhbGwgcGFnZXMgZmF1bHRlZCwgY2FsbGVyIHNob3VsZCByZS13YWxrKS5cXG4rICogUmV0dXJucyBhIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuXFxuICAqL1xcbi1pbnQgaG1tX3JhbmdlX2ZhdWx0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKVxcbitzdGF0aWMgaW50IGhtbV9kb19mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4rXFx0XFx0XFx0c3RydWN0IGhtbV92bWFfd2FsayAqaG1tX3ZtYV93YWxrKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgYWRkciA9IGhtbV92bWFfd2Fsay1cXHUwMDNlbGFzdDtcXG4rXFx0dW5zaWduZWQgbG9uZyBlbmQgPSBobW1fdm1hX3dhbGstXFx1MDAzZWVuZDtcXG4rXFx0dW5zaWduZWQgaW50IHJlcXVpcmVkX2ZhdWx0ID0gaG1tX3ZtYV93YWxrLVxcdTAwM2VyZXF1aXJlZF9mYXVsdDtcXG4rXFx0dW5zaWduZWQgaW50IGZhdWx0X2ZsYWdzID0gRkFVTFRfRkxBR19SRU1PVEU7XFxuK1xcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xcbitcXG4rXFx0aWYgKGhtbV92bWFfd2Fsay1cXHUwMDNlbG9ja2VkKVxcbitcXHRcXHRmYXVsdF9mbGFncyB8PSBGQVVMVF9GTEFHX0FMTE9XX1JFVFJZIHwgRkFVTFRfRkxBR19LSUxMQUJMRTtcXG4rXFxuK1xcdHZtYSA9IHZtYV9sb29rdXAobW0sIGFkZHIpO1xcbitcXHRpZiAoIXZtYSlcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcbitcXHRpZiAocmVxdWlyZWRfZmF1bHQgXFx1MDAyNiBITU1fTkVFRF9XUklURV9GQVVMVCkge1xcbitcXHRcXHRpZiAoISh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fV1JJVEUpKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbitcXHRcXHRmYXVsdF9mbGFncyB8PSBGQVVMVF9GTEFHX1dSSVRFO1xcbitcXHR9XFxuK1xcbitcXHRmb3IgKDsgYWRkciBcXHUwMDNjIGVuZDsgYWRkciArPSBQQUdFX1NJWkUpIHtcXG4rXFx0XFx0dm1fZmF1bHRfdCByZXQ7XFxuK1xcbitcXHRcXHRyZXQgPSBoYW5kbGVfbW1fZmF1bHQodm1hLCBhZGRyLCBmYXVsdF9mbGFncywgTlVMTCk7XFxuK1xcbitcXHRcXHRpZiAocmV0IFxcdTAwMjYgKFZNX0ZBVUxUX0NPTVBMRVRFRCB8IFZNX0ZBVUxUX1JFVFJZKSkge1xcbitcXHRcXHRcXHQqaG1tX3ZtYV93YWxrLVxcdTAwM2Vsb2NrZWQgPSBmYWxzZTtcXG4rXFx0XFx0XFx0cmV0dXJuIEhNTV9GQVVMVF9VTkxPQ0tFRDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDI2IFZNX0ZBVUxUX0VSUk9SKSB7XFxuK1xcdFxcdFxcdGludCBlcnIgPSB2bV9mYXVsdF90b19lcnJubyhyZXQsIDApO1xcbitcXG4rXFx0XFx0XFx0aWYgKFdBUk5fT04oIWVycikpXFxuK1xcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuK1xcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAtRUJVU1k7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSwgYm9vbCAqbG9ja2VkKVxcbiB7XFxuIFxcdHN0cnVjdCBobW1fdm1hX3dhbGsgaG1tX3ZtYV93YWxrID0ge1xcbiBcXHRcXHQucmFuZ2UgPSByYW5nZSxcXG4rXFx0XFx0LmxvY2tlZCA9IGxvY2tlZCxcXG4gXFx0XFx0Lmxhc3QgPSByYW5nZS1cXHUwMDNlc3RhcnQsXFxuIFxcdH07XFxuIFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gcmFuZ2UtXFx1MDAzZW5vdGlmaWVyLVxcdTAwM2VtbTtcXG5AQCAtNjc0LDYgKzcwNSwyMiBAQCBpbnQgaG1tX3JhbmdlX2ZhdWx0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiBcXHRcXHRyZXQgPSB3YWxrX3BhZ2VfcmFuZ2UobW0sIGhtbV92bWFfd2Fsay5sYXN0LCByYW5nZS1cXHUwMDNlZW5kLFxcbiBcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2aG1tX3dhbGtfb3BzLCBcXHUwMDI2aG1tX3ZtYV93YWxrKTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogV2hlbiBITU1fRkFVTFRfUEVORElORyBpcyByZXR1cm5lZCBhIHdhbGsgY2FsbGJhY2tcXG4rXFx0XFx0ICogcmVjb3JkZWQgYSByYW5nZSB0aGF0IG5lZWRzIGhhbmRsZV9tbV9mYXVsdCgpO1xcbitcXHRcXHQgKiBobW1fZG9fZmF1bHQoKSBydW5zIHRoZSBmYXVsdCBvdXRzaWRlIHdhbGtfcGFnZV9yYW5nZSgpXFxuK1xcdFxcdCAqIChzbyBubyBwYWdlLXRhYmxlIG9yIGh1Z2V0bGJfdm1hX2xvY2sgaXMgaGVsZCkgYW5kXFxuK1xcdFxcdCAqIHJldHVybnMgLUVCVVNZIHNvIHRoZSBsb29wIHJlLXdhbGtzIGFuZCBwaWNrcyB1cCB0aGVcXG4rXFx0XFx0ICogbm93LXByZXNlbnQgZW50cmllcy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChyZXQgPT0gSE1NX0ZBVUxUX1BFTkRJTkcpIHtcXG4rXFx0XFx0XFx0cmV0ID0gaG1tX2RvX2ZhdWx0KG1tLCBcXHUwMDI2aG1tX3ZtYV93YWxrKTtcXG4rXFx0XFx0XFx0aWYgKHJldCA9PSBITU1fRkFVTFRfVU5MT0NLRUQpIHtcXG4rXFx0XFx0XFx0XFx0aWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxcbitcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlRSO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogV2hlbiAtRUJVU1kgaXMgcmV0dXJuZWQgdGhlIGxvb3AgcmVzdGFydHMgd2l0aFxcbiBcXHRcXHQgKiBobW1fdm1hX3dhbGsubGFzdCBzZXQgdG8gYW4gYWRkcmVzcyB0aGF0IGhhcyBub3QgYmVlbiBzdG9yZWRcXG5AQCAtNjgzLDggKzczMCwxMDAgQEAgaW50IGhtbV9yYW5nZV9mYXVsdChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSlcXG4gXFx0fSB3aGlsZSAocmV0ID09IC1FQlVTWSk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4rXFxuKy8qKlxcbisgKiBobW1fcmFuZ2VfZmF1bHQgLSB0cnkgdG8gZmF1bHQgc29tZSBhZGRyZXNzIGluIGEgdmlydHVhbCBhZGRyZXNzIHJhbmdlXFxuKyAqIEByYW5nZTpcXHRhcmd1bWVudCBzdHJ1Y3R1cmVcXG4rICpcXG4rICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgZXJyb3IgY29kZXM6XFxuKyAqXFxuKyAqIC1FSU5WQUw6XFx0SW52YWxpZCBhcmd1bWVudHMgb3IgbW0gb3IgdmlydHVhbCBhZGRyZXNzIGlzIGluIGFuIGludmFsaWQgdm1hXFxuKyAqXFx0XFx0KGUuZy4sIGRldmljZSBmaWxlIHZtYSkuXFxuKyAqIC1FTk9NRU06XFx0T3V0IG9mIG1lbW9yeS5cXG4rICogLUVQRVJNOlxcdEludmFsaWQgcGVybWlzc2lvbiAoZS5nLiwgYXNraW5nIGZvciB3cml0ZSBhbmQgcmFuZ2UgaXMgcmVhZFxcbisgKlxcdFxcdG9ubHkpLlxcbisgKiAtRUJVU1k6XFx0VGhlIHJhbmdlIGhhcyBiZWVuIGludmFsaWRhdGVkIGFuZCB0aGUgY2FsbGVyIG5lZWRzIHRvIHdhaXQgZm9yXFxuKyAqXFx0XFx0dGhlIGludmFsaWRhdGlvbiB0byBmaW5pc2guXFxuKyAqIC1FRkFVTFQ6ICAgICBBIHBhZ2Ugd2FzIHJlcXVlc3RlZCB0byBiZSB2YWxpZCBhbmQgY291bGQgbm90IGJlIG1hZGUgdmFsaWRcXG4rICogICAgICAgICAgICAgIGllIGl0IGhhcyBubyBiYWNraW5nIFZNQSBvciBpdCBpcyBpbGxlZ2FsIHRvIGFjY2Vzc1xcbisgKlxcbisgKiBUaGlzIGlzIHNpbWlsYXIgdG8gZ2V0X3VzZXJfcGFnZXMoKSwgZXhjZXB0IHRoYXQgaXQgY2FuIHJlYWQgdGhlIHBhZ2UgdGFibGVzXFxuKyAqIHdpdGhvdXQgbXV0YXRpbmcgdGhlbSAoaWUgY2F1c2luZyBmYXVsdHMpLlxcbisgKlxcbisgKiBUaGUgbW1hcCBsb2NrIG11c3QgYmUgaGVsZCBieSB0aGUgY2FsbGVyIGFuZCB3aWxsIHJlbWFpbiBoZWxkIG9uIHJldHVybi5cXG4rICogTmV3IHVzZXJzIHNob3VsZCBwcmVmZXIgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKSB1bmxlc3MgdGhleVxcbisgKiBzcGVjaWZpY2FsbHkgbmVlZCB0byBrZWVwIHRoZSBtbWFwIGxvY2sgaGVsZCBhY3Jvc3MgdGhlIGNhbGwuIFRoaXMgaGVscGVyXFxuKyAqIGNhbm5vdCBzdXBwb3J0IFZNQXMgd2hvc2UgZmF1bHQgaGFuZGxlcnMgbmVlZCB0byBkcm9wIHRoZSBtbWFwIGxvY2suXFxuKyAqL1xcbitpbnQgaG1tX3JhbmdlX2ZhdWx0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKVxcbit7XFxuK1xcdHJldHVybiBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkKHJhbmdlLCBOVUxMKTtcXG4rfVxcbiBFWFBPUlRfU1lNQk9MKGhtbV9yYW5nZV9mYXVsdCk7XFxuIFxcbisvKipcXG4rICogaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQgLSBmYXVsdCBpbiBhIHJhbmdlIHdpdGggYSByZXRyeSB0aW1lb3V0XFxuKyAqIEByYW5nZTpcXHRhcmd1bWVudCBzdHJ1Y3R1cmVcXG4rICogQHRpbWVvdXQ6XFx0dGltZW91dCBpbiBqaWZmaWVzIGZvciBpbnRlcm5hbCAtRUJVU1kgcmV0cmllcywgb3IgMCB0byByZXRyeVxcbisgKlxcdFxcdGluZGVmaW5pdGVseVxcbisgKlxcbisgKiBUaGUgY2FsbGVyIG11c3Qgbm90IGhvbGQgdGhlIG1tYXAgbG9jay4gVGhlIGZ1bmN0aW9uIHRha2VzIHRoZSBtbWFwIHJlYWRcXG4rICogbG9jayBpbnRlcm5hbGx5IGFuZCBhbGxvd3MgaGFuZGxlX21tX2ZhdWx0KCkgdG8gZHJvcCBpdCBkdXJpbmcgZmF1bHRzLiBJZlxcbisgKiB0aGUgbW1hcCBsb2NrIGlzIGRyb3BwZWQgb3IgdGhlIHJhbmdlIGlzIGludmFsaWRhdGVkLCB0aGUgZnVuY3Rpb24gcmVmcmVzaGVzXFxuKyAqIHJhbmdlLVxcdTAwM2Vub3RpZmllcl9zZXEgYW5kIHJlc3RhcnRzIHRoZSB3YWxrIGludGVybmFsbHkuXFxuKyAqXFxuKyAqIFBhc3NpbmcgMCBmb3IgQHRpbWVvdXQgcmV0cmllcyBpbmRlZmluaXRlbHkuIEEgbm9uLXplcm8gQHRpbWVvdXQgaXMgYSBjYWxsZXJcXG4rICogcG9saWN5IGxpbWl0IGZvciByZXBlYXRlZCBtbXUtbm90aWZpZXIgaW52YWxpZGF0aW9uIHJldHJpZXMuIEhNTSBkb2VzIG5vdFxcbisgKiBpbnRlcnJ1cHQgcGFnZSBmYXVsdCBoYW5kbGluZyB3aGVuIHRoZSB0aW1lb3V0IGV4cGlyZXMsIGJ1dCByZXR1cm5zIC1FQlVTWVxcbisgKiBpZiB0aGUgcmV0cnkgYnVkZ2V0IGlzIGV4aGF1c3RlZCBiZWZvcmUgYSBzdGFibGUgcmFuZ2UgaXMgb2J0YWluZWQuXFxuKyAqXFxuKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG9uZSBvZiB0aGUgZXJyb3IgY29kZXMgZG9jdW1lbnRlZCBmb3JcXG4rICogaG1tX3JhbmdlX2ZhdWx0KCkuIC1FSU5UUiBpcyByZXR1cm5lZCBpZiBtbWFwX2xvY2sgYWNxdWlzaXRpb24gaXNcXG4rICogaW50ZXJydXB0ZWQgb3IgYSBmYXRhbCBzaWduYWwgaXMgcGVuZGluZyBkdXJpbmcgcmV0cnkgaGFuZGxpbmcuXFxuKyAqL1xcbitpbnQgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsXFxuK1xcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0KVxcbit7XFxuK1xcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gcmFuZ2UtXFx1MDAzZW5vdGlmaWVyLVxcdTAwM2VtbTtcXG4rXFx0dW5zaWduZWQgbG9uZyBkZWFkbGluZSA9IDA7XFxuK1xcdGJvb2wgbG9ja2VkID0gZmFsc2U7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRkbyB7XFxuK1xcdFxcdGlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5UUjtcXG4rXFxuK1xcdFxcdGlmICh0aW1lb3V0KSB7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIElmIHRoZSBwcmV2aW91cyBmYXVsdCBkcm9wcGVkIG1tYXBfbG9jaywgdGhlbiB0aGUgZmF1bHRcXG4rXFx0XFx0XFx0ICogaGFuZGxlciBtYWRlIHByb2dyZXNzLiBSZXN0YXJ0IHRoZSByZXRyeSB0aW1lb3V0IGluIHRoYXRcXG4rXFx0XFx0XFx0ICogY2FzZSwgYnV0IGtlZXAgdGhlIGV4aXN0aW5nIGRlYWRsaW5lIGZvciBvcmRpbmFyeSAtRUJVU1lcXG4rXFx0XFx0XFx0ICogcmV0cmllcy5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGlmICghbG9ja2VkKVxcbitcXHRcXHRcXHRcXHRkZWFkbGluZSA9IGppZmZpZXMgKyB0aW1lb3V0O1xcbitcXG4rXFx0XFx0XFx0aWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZGVhZGxpbmUpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRyYW5nZS1cXHUwMDNlbm90aWZpZXJfc2VxID1cXG4rXFx0XFx0XFx0bW11X2ludGVydmFsX3JlYWRfYmVnaW4ocmFuZ2UtXFx1MDAzZW5vdGlmaWVyKTtcXG4rXFxuK1xcdFxcdHJldCA9IG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKG1tKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdGxvY2tlZCA9IHRydWU7XFxuK1xcdFxcdHJldCA9IGhtbV9yYW5nZV9mYXVsdF9sb2NrZWQocmFuZ2UsIFxcdTAwMjZsb2NrZWQpO1xcbitcXHRcXHRpZiAobG9ja2VkKVxcbitcXHRcXHRcXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcXG4rXFx0fSB3aGlsZSAocmV0ID09IC1FQlVTWSk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK0VYUE9SVF9TWU1CT0woaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQpO1xcbitcXG4gLyoqXFxuICAqIGhtbV9kbWFfbWFwX2FsbG9jIC0gQWxsb2NhdGUgSE1NIG1hcCBzdHJ1Y3R1cmVcXG4gICogQGRldjogZGV2aWNlIHRvIGFsbG9jYXRlIHN0cnVjdHVyZSBmb3JcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xcbmluZGV4IDZmY2NiZGFiMDJlZTgxLi41YWNiNzI4NjY2ZjhjMSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jXFxuQEAgLTI5LDYgKzI5LDEwIEBAXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvbW1hbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL2lvY3RsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvdGltZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3N5c2NhbGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9ldmVudGZkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC91c2VyZmF1bHRmZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjcG9sbC5oXFx1MDAzZVxcbiBcXG4gLypcXG4gICogVGhpcyBpcyBhIHByaXZhdGUgVUFQSSB0byB0aGUga2VybmVsIHRlc3QgbW9kdWxlIHNvIGl0IGlzbid0IGV4cG9ydGVkXFxuQEAgLTI5NTIsNCArMjk1NiwxNTAgQEAgVEVTVF9GX1RJTUVPVVQoaG1tLCBiZW5jaG1hcmtfdGhwX21pZ3JhdGlvbiwgMTIwKVxcbiBcXHRcXHRcXHRcXHRcXHRcXHUwMDI2dGhwX3Jlc3VsdHMsIFxcdTAwMjZyZWd1bGFyX3Jlc3VsdHMpO1xcbiBcXHR9XFxuIH1cXG4rLypcXG4rICogVGVzdCB0aGF0IEhNTSBjYW4gZmF1bHQgaW4gcGFnZXMgYmFja2VkIGJ5IHVzZXJmYXVsdGZkIHVzaW5nIHRoZVxcbisgKiBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpIHBhdGggd2l0aCBubyB0aW1lb3V0LiBUaGlzIGV4ZXJjaXNlc1xcbisgKiB0aGUgbG9jay1kcm9wIHJldHJ5IGxvZ2ljIGluIHRoZSBITU0gZnJhbWV3b3JrLlxcbisgKi9cXG4rc3RydWN0IHVmZmRfdGhyZWFkX2FyZ3Mge1xcbitcXHRpbnQgdWZmZDtcXG4rXFx0aW50IHN0b3BfZmQ7XFxuK1xcdHZvaWQgKnBhZ2VfYnVmZmVyO1xcbitcXHR1bnNpZ25lZCBsb25nIHBhZ2Vfc2l6ZTtcXG4rfTtcXG4rXFxuK3N0YXRpYyB2b2lkICp1ZmZkX2hhbmRsZXJfdGhyZWFkKHZvaWQgKmFyZylcXG4re1xcbitcXHRzdHJ1Y3QgdWZmZF90aHJlYWRfYXJncyAqYXJncyA9IGFyZztcXG4rXFx0c3RydWN0IHVmZmRfbXNnIG1zZztcXG4rXFx0c3RydWN0IHVmZmRpb19jb3B5IGNvcHk7XFxuK1xcdHN0cnVjdCBwb2xsZmQgcG9sbGZkWzJdO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cG9sbGZkWzBdLmZkID0gYXJncy1cXHUwMDNldWZmZDtcXG4rXFx0cG9sbGZkWzBdLmV2ZW50cyA9IFBPTExJTjtcXG4rXFx0cG9sbGZkWzFdLmZkID0gYXJncy1cXHUwMDNlc3RvcF9mZDtcXG4rXFx0cG9sbGZkWzFdLmV2ZW50cyA9IFBPTExJTjtcXG4rXFxuK1xcdHdoaWxlICgxKSB7XFxuK1xcdFxcdHJldCA9IHBvbGwocG9sbGZkLCAyLCAtMSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYz0gMClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGlmIChwb2xsZmRbMV0ucmV2ZW50cylcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGlmICghKHBvbGxmZFswXS5yZXZlbnRzIFxcdTAwMjYgUE9MTElOKSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRyZXQgPSByZWFkKGFyZ3MtXFx1MDAzZXVmZmQsIFxcdTAwMjZtc2csIHNpemVvZihtc2cpKTtcXG4rXFx0XFx0aWYgKHJldCAhPSBzaXplb2YobXNnKSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRpZiAobXNnLmV2ZW50ICE9IFVGRkRfRVZFTlRfUEFHRUZBVUxUKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdC8qIEZpbGwgdGhlIHBhZ2Ugd2l0aCBhIGtub3duIHBhdHRlcm4gKi9cXG4rXFx0XFx0bWVtc2V0KGFyZ3MtXFx1MDAzZXBhZ2VfYnVmZmVyLCAweEFCLCBhcmdzLVxcdTAwM2VwYWdlX3NpemUpO1xcbitcXG4rXFx0XFx0Y29weS5kc3QgPSBtc2cuYXJnLnBhZ2VmYXVsdC5hZGRyZXNzIFxcdTAwMjYgfihhcmdzLVxcdTAwM2VwYWdlX3NpemUgLSAxKTtcXG4rXFx0XFx0Y29weS5zcmMgPSAodW5zaWduZWQgbG9uZylhcmdzLVxcdTAwM2VwYWdlX2J1ZmZlcjtcXG4rXFx0XFx0Y29weS5sZW4gPSBhcmdzLVxcdTAwM2VwYWdlX3NpemU7XFxuK1xcdFxcdGNvcHkubW9kZSA9IDA7XFxuK1xcdFxcdGNvcHkuY29weSA9IDA7XFxuK1xcbitcXHRcXHRyZXQgPSBpb2N0bChhcmdzLVxcdTAwM2V1ZmZkLCBVRkZESU9fQ09QWSwgXFx1MDAyNmNvcHkpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbitURVNUX0YoaG1tLCB1c2VyZmF1bHRmZF9yZWFkKVxcbit7XFxuK1xcdHN0cnVjdCBobW1fYnVmZmVyICpidWZmZXI7XFxuK1xcdHN0cnVjdCB1ZmZkX3RocmVhZF9hcmdzIHVmZmRfYXJncztcXG4rXFx0dW5zaWduZWQgbG9uZyBucGFnZXM7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcXG4rXFx0dW5zaWduZWQgbG9uZyBpO1xcbitcXHR1bnNpZ25lZCBjaGFyICpwdHI7XFxuK1xcdHB0aHJlYWRfdCB0aHJlYWQ7XFxuK1xcdGludCB1ZmZkO1xcbitcXHRpbnQgc3RvcF9mZDtcXG4rXFx0aW50IHJldDtcXG4rXFx0c3RydWN0IHVmZmRpb19hcGkgYXBpO1xcbitcXHRzdHJ1Y3QgdWZmZGlvX3JlZ2lzdGVyIHJlZztcXG4rXFx0dWludDY0X3Qgc3RvcCA9IDE7XFxuK1xcdHNzaXplX3QgbndyaXRlO1xcbitcXG4rXFx0bnBhZ2VzID0gNDtcXG4rXFx0c2l6ZSA9IG5wYWdlcyBcXHUwMDNjXFx1MDAzYyBzZWxmLVxcdTAwM2VwYWdlX3NoaWZ0O1xcbitcXG4rXFx0LyogQ3JlYXRlIHVzZXJmYXVsdGZkICovXFxuK1xcdHVmZmQgPSBzeXNjYWxsKF9fTlJfdXNlcmZhdWx0ZmQsIE9fQ0xPRVhFQyB8IE9fTk9OQkxPQ0spO1xcbitcXHRpZiAodWZmZCBcXHUwMDNjIDApXFxuK1xcdFxcdFNLSVAocmV0dXJuLCBcXFwidXNlcmZhdWx0ZmQgbm90IGF2YWlsYWJsZVxcXCIpO1xcbitcXG4rXFx0YXBpLmFwaSA9IFVGRkRfQVBJO1xcbitcXHRhcGkuZmVhdHVyZXMgPSAwO1xcbitcXHRyZXQgPSBpb2N0bCh1ZmZkLCBVRkZESU9fQVBJLCBcXHUwMDI2YXBpKTtcXG4rXFx0QVNTRVJUX0VRKHJldCwgMCk7XFxuK1xcbitcXHRidWZmZXIgPSBtYWxsb2Moc2l6ZW9mKCpidWZmZXIpKTtcXG4rXFx0QVNTRVJUX05FKGJ1ZmZlciwgTlVMTCk7XFxuK1xcbitcXHRidWZmZXItXFx1MDAzZWZkID0gLTE7XFxuK1xcdGJ1ZmZlci1cXHUwMDNlc2l6ZSA9IHNpemU7XFxuK1xcdGJ1ZmZlci1cXHUwMDNlbWlycm9yID0gbWFsbG9jKHNpemUpO1xcbitcXHRBU1NFUlRfTkUoYnVmZmVyLVxcdTAwM2VtaXJyb3IsIE5VTEwpO1xcbitcXG4rXFx0LyogQ3JlYXRlIGFub255bW91cyBtYXBwaW5nICovXFxuK1xcdGJ1ZmZlci1cXHUwMDNlcHRyID0gbW1hcChOVUxMLCBzaXplLFxcbitcXHRcXHRcXHQgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxcbitcXHRcXHRcXHQgICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsXFxuK1xcdFxcdFxcdCAgIC0xLCAwKTtcXG4rXFx0QVNTRVJUX05FKGJ1ZmZlci1cXHUwMDNlcHRyLCBNQVBfRkFJTEVEKTtcXG4rXFxuK1xcdC8qIFJlZ2lzdGVyIHRoZSByZWdpb24gd2l0aCB1c2VyZmF1bHRmZCAqL1xcbitcXHRyZWcucmFuZ2Uuc3RhcnQgPSAodW5zaWduZWQgbG9uZylidWZmZXItXFx1MDAzZXB0cjtcXG4rXFx0cmVnLnJhbmdlLmxlbiA9IHNpemU7XFxuK1xcdHJlZy5tb2RlID0gVUZGRElPX1JFR0lTVEVSX01PREVfTUlTU0lORztcXG4rXFx0cmV0ID0gaW9jdGwodWZmZCwgVUZGRElPX1JFR0lTVEVSLCBcXHUwMDI2cmVnKTtcXG4rXFx0QVNTRVJUX0VRKHJldCwgMCk7XFxuK1xcbitcXHQvKiBTZXQgdXAgdGhlIGhhbmRsZXIgdGhyZWFkICovXFxuK1xcdHVmZmRfYXJncy51ZmZkID0gdWZmZDtcXG4rXFx0c3RvcF9mZCA9IGV2ZW50ZmQoMCwgRUZEX0NMT0VYRUMpO1xcbitcXHRBU1NFUlRfR0Uoc3RvcF9mZCwgMCk7XFxuK1xcdHVmZmRfYXJncy5zdG9wX2ZkID0gc3RvcF9mZDtcXG4rXFx0dWZmZF9hcmdzLnBhZ2VfYnVmZmVyID0gbWFsbG9jKHNlbGYtXFx1MDAzZXBhZ2Vfc2l6ZSk7XFxuK1xcdEFTU0VSVF9ORSh1ZmZkX2FyZ3MucGFnZV9idWZmZXIsIE5VTEwpO1xcbitcXHR1ZmZkX2FyZ3MucGFnZV9zaXplID0gc2VsZi1cXHUwMDNlcGFnZV9zaXplO1xcbitcXG4rXFx0cmV0ID0gcHRocmVhZF9jcmVhdGUoXFx1MDAyNnRocmVhZCwgTlVMTCwgdWZmZF9oYW5kbGVyX3RocmVhZCwgXFx1MDAyNnVmZmRfYXJncyk7XFxuK1xcdEFTU0VSVF9FUShyZXQsIDApO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVXNlIHRoZSB1bmxvY2tlZCByZWFkIHBhdGggd2hpY2ggYWxsb3dzIHRoZSBtbWFwIGxvY2sgdG8gYmVcXG4rXFx0ICogZHJvcHBlZCBkdXJpbmcgdGhlIGZhdWx0LCBlbmFibGluZyB1c2VyZmF1bHRmZCByZXNvbHV0aW9uLlxcbitcXHQgKi9cXG4rXFx0cmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtXFx1MDAzZWZkLCBITU1fRE1JUlJPUl9SRUFEX1VOTE9DS0VELFxcbitcXHRcXHRcXHQgICAgICBidWZmZXIsIG5wYWdlcyk7XFxuK1xcdEFTU0VSVF9FUShyZXQsIDApO1xcbitcXHRBU1NFUlRfRVEoYnVmZmVyLVxcdTAwM2VjcGFnZXMsIG5wYWdlcyk7XFxuK1xcbitcXHQvKiBWZXJpZnkgdGhlIGRldmljZSByZWFkIHRoZSBkYXRhIGZpbGxlZCBieSB0aGUgdWZmZCBoYW5kbGVyICovXFxuK1xcdHB0ciA9IGJ1ZmZlci1cXHUwMDNlbWlycm9yO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc2l6ZTsgKytpKVxcbitcXHRcXHRBU1NFUlRfRVEocHRyW2ldLCAodW5zaWduZWQgY2hhcikweEFCKTtcXG4rXFxuK1xcdG53cml0ZSA9IHdyaXRlKHN0b3BfZmQsIFxcdTAwMjZzdG9wLCBzaXplb2Yoc3RvcCkpO1xcbitcXHRBU1NFUlRfRVEobndyaXRlLCBzaXplb2Yoc3RvcCkpO1xcbitcXHRwdGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKTtcXG4rXFx0Y2xvc2Uoc3RvcF9mZCk7XFxuK1xcdGZyZWUodWZmZF9hcmdzLnBhZ2VfYnVmZmVyKTtcXG4rXFx0Y2xvc2UodWZmZCk7XFxuK1xcdGhtbV9idWZmZXJfZnJlZShidWZmZXIpO1xcbit9XFxuK1xcbitcXG4gVEVTVF9IQVJORVNTX01BSU5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDA6MDk6MTEuMzMwMzMxMTU1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NTQxMDkxOTMyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJURVNUX0hNTVwiLFxuICAgIFwiRFJNX0FDQ0VMX0FNRFhETkFcIixcbiAgICBcIkRSTV9HUFVTVk1cIixcbiAgICBcIkRSTV9OT1VWRUFVX1NWTVwiLFxuICAgIFwiTVNIVl9ST09UXCIsXG4gICAgXCJJTkZJTklCQU5EX09OX0RFTUFORF9QQUdJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dFwiLFxuICAgIFwiaG1tX3JhbmdlX2ZhdWx0XCIsXG4gICAgXCJobW1fZG9fZmF1bHRcIixcbiAgICBcImhtbV9yYW5nZV9mYXVsdF9sb2NrZWRcIixcbiAgICBcImhtbV9yZWNvcmRfZmF1bHRcIixcbiAgICBcImRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWRcIixcbiAgICBcImRtaXJyb3JfZmF1bHRfdW5sb2NrZWRcIixcbiAgICBcImRtaXJyb3JfcmVhZF91bmxvY2tlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgdW5sb2NrZWQgdGltZW91dCB2YXJpYW50IGZvciBITU0gcmFuZ2UgZmF1bHRzIChgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgKSBhbmQgcmVmYWN0b3JzIHRoZSBleGlzdGluZyBgaG1tX3JhbmdlX2ZhdWx0YCB0byB1c2UgYSBsb2NrZWQgaGVscGVyLiBJdCBhbHNvIHVwZGF0ZXMgc2V2ZXJhbCBkcml2ZXJzIGFuZCB0aGUgSE1NIHRlc3QgbW9kdWxlIHRvIHVzZSB0aGUgbmV3IHVubG9ja2VkIHZhcmlhbnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkZXZpY2UgZHJpdmVyIGludGVyYWN0aW9uLCB3aGljaCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IHJldHJ5IGFuZCBsb2NraW5nIGxvZ2ljIGlzIHJvYnVzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZDA4MTI2NDY4YTNkMjg4ZTM5NmZkNmU2ZjY5YTlmYzJjNzBhNjU5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMTYgMDA6MDk6MDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL2htbS5yc3RcbmluZGV4IDdkNjFiN2E4YjY1Yjc5Li5lMDIxMjE4YWRhNThmZSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0XG5AQCAtMTU2LDQyICsxNTYsNTcgQEAgRHVyaW5nIHRoZSBvcHMtXHUwMDNlaW52YWxpZGF0ZSgpIGNhbGxiYWNrIHRoZSBkZXZpY2UgZHJpdmVyIG11c3QgcGVyZm9ybSB0aGVcbiB1cGRhdGUgYWN0aW9uIHRvIHRoZSByYW5nZSAobWFyayByYW5nZSByZWFkIG9ubHksIG9yIGZ1bGx5IHVubWFwLCBldGMuKS4gVGhlXG4gZGV2aWNlIG11c3QgY29tcGxldGUgdGhlIHVwZGF0ZSBiZWZvcmUgdGhlIGRyaXZlciBjYWxsYmFjayByZXR1cm5zLlxuIFxuLVdoZW4gdGhlIGRldmljZSBkcml2ZXIgd2FudHMgdG8gcG9wdWxhdGUgYSByYW5nZSBvZiB2aXJ0dWFsIGFkZHJlc3NlcywgaXQgY2FuXG4tdXNlOjpcbitXaGVuIHRoZSBkZXZpY2UgZHJpdmVyIHdhbnRzIHRvIHBvcHVsYXRlIGEgcmFuZ2Ugb2YgdmlydHVhbCBhZGRyZXNzZXMsIHRoZVxuK25vcm1hbCBpbnRlcmZhY2UgaXM6OlxuIFxuLSAgaW50IGhtbV9yYW5nZV9mYXVsdChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSk7XG4rICBpbnQgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0KTtcbiBcbiBJdCB3aWxsIHRyaWdnZXIgYSBwYWdlIGZhdWx0IG9uIG1pc3Npbmcgb3IgcmVhZC1vbmx5IGVudHJpZXMgaWYgd3JpdGUgYWNjZXNzIGlzXG4gcmVxdWVzdGVkIChzZWUgYmVsb3cpLiBQYWdlIGZhdWx0cyB1c2UgdGhlIGdlbmVyaWMgbW0gcGFnZSBmYXVsdCBjb2RlIHBhdGgganVzdFxuLWxpa2UgYSBDUFUgcGFnZSBmYXVsdC4gVGhlIHVzYWdlIHBhdHRlcm4gaXM6OlxuK2xpa2UgYSBDUFUgcGFnZSBmYXVsdC5cbitcbitUaGUgY2FsbGVyIG11c3Qgbm90IGhvbGQgYGBtbWFwX3JlYWRfbG9ja2BgIGJlZm9yZSB0aGUgY2FsbC5cbitgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KClgYCB0YWtlcyB0aGUgbW1hcCByZWFkIGxvY2sgaW50ZXJuYWxseSBhbmRcbithbGxvd3MgYGBoYW5kbGVfbW1fZmF1bHQoKWBgIHRvIGRyb3AgaXQgZHVyaW5nIGZhdWx0IGhhbmRsaW5nLiBUaGlzIGlzIHJlcXVpcmVkXG4rZm9yIFZNQXMgd2hvc2UgZmF1bHQgaGFuZGxlcnMgbWF5IHJlbGVhc2UgdGhlIG1tYXAgbG9jaywgZm9yIGV4YW1wbGUgcmVnaW9uc1xuK21hbmFnZWQgYnkgYGB1c2VyZmF1bHRmZGBgLlxuK1xuK0lmIHRoZSBtbWFwIGxvY2sgaXMgZHJvcHBlZCBvciB0aGUgcmFuZ2UgaXMgaW52YWxpZGF0ZWQsIHRoZSBmdW5jdGlvbiByZWZyZXNoZXNcbitgYHJhbmdlLVx1MDAzZW5vdGlmaWVyX3NlcWBgIGFuZCByZXN0YXJ0cyB0aGUgd2FsayBpbnRlcm5hbGx5LiBgYC1FSU5UUmBgIGlzIHJldHVybmVkXG4raWYgbW1hcCBsb2NrIGFjcXVpc2l0aW9uIGlzIGludGVycnVwdGVkIG9yIGEgZmF0YWwgc2lnbmFsIGlzIHBlbmRpbmcgZHVyaW5nXG4rcmV0cnkgaGFuZGxpbmcuXG4rXG4rVGhlIHRpbWVvdXQgaXMgc3BlY2lmaWVkIGluIGppZmZpZXM7IHBhc3NpbmcgYGAwYGAgbWVhbnMgcmV0cnkgaW5kZWZpbml0ZWx5LiBUaGVcbit0aW1lb3V0IGV4aXN0cyB0byBwcmVzZXJ2ZSBjYWxsZXIgcG9saWN5IGZvciByZXBlYXRlZCBtbXUtbm90aWZpZXIgaW52YWxpZGF0aW9uXG4rYW5kIGlzIGNoZWNrZWQgYmV0d2VlbiByZXRyeSBhdHRlbXB0cy4gSE1NIGRvZXMgbm90IGludGVycnVwdCBwYWdlIGZhdWx0XG4raGFuZGxpbmcgd2hlbiB0aGUgdGltZW91dCBleHBpcmVzLCBidXQgcmV0dXJucyBgYC1FQlVTWWBgIGlmIHRoZSByZXRyeSBidWRnZXQgaXNcbitleGhhdXN0ZWQgYmVmb3JlIGEgc3RhYmxlIHJhbmdlIGlzIG9idGFpbmVkLlxuK1xuK1RoZSB1c2FnZSBwYXR0ZXJuIGlzOjpcbiBcbiAgaW50IGRyaXZlcl9wb3B1bGF0ZV9yYW5nZSguLi4pXG4gIHtcbiAgICAgICBzdHJ1Y3QgaG1tX3JhbmdlIHJhbmdlO1xuKyAgICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dDtcbiAgICAgICAuLi5cbiBcbisgICAgICB0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcbiAgICAgICByYW5nZS5ub3RpZmllciA9IFx1MDAyNmludGVydmFsX3N1YjtcbiAgICAgICByYW5nZS5zdGFydCA9IC4uLjtcbiAgICAgICByYW5nZS5lbmQgPSAuLi47XG4gICAgICAgcmFuZ2UuaG1tX3BmbnMgPSAuLi47XG4gXG4tICAgICAgaWYgKCFtbWdldF9ub3RfemVybyhpbnRlcnZhbF9zdWItXHUwMDNlbm90aWZpZXIubW0pKVxuKyAgICAgIGlmICghbW1nZXRfbm90X3plcm8oaW50ZXJ2YWxfc3ViLm1tKSlcbiAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7XG4gXG4gIGFnYWluOlxuLSAgICAgIHJhbmdlLm5vdGlmaWVyX3NlcSA9IG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKFx1MDAyNmludGVydmFsX3N1Yik7XG4tICAgICAgbW1hcF9yZWFkX2xvY2sobW0pO1xuLSAgICAgIHJldCA9IGhtbV9yYW5nZV9mYXVsdChcdTAwMjZyYW5nZSk7XG4tICAgICAgaWYgKHJldCkge1xuLSAgICAgICAgICBtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbi0gICAgICAgICAgaWYgKHJldCA9PSAtRUJVU1kpXG4tICAgICAgICAgICAgICAgICBnb3RvIGFnYWluO1xuLSAgICAgICAgICByZXR1cm4gcmV0O1xuLSAgICAgIH1cbi0gICAgICBtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbisgICAgICByZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcdTAwMjZyYW5nZSwgdGltZW91dCk7XG4rICAgICAgaWYgKHJldClcbisgICAgICAgICAgZ290byBvdXRfcHV0O1xuIFxuICAgICAgIHRha2VfbG9jayhkcml2ZXItXHUwMDNldXBkYXRlKTtcbi0gICAgICBpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkoXHUwMDI2bmksIHJhbmdlLm5vdGlmaWVyX3NlcSkge1xuKyAgICAgIGlmIChtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeShyYW5nZS5ub3RpZmllciwgcmFuZ2Uubm90aWZpZXJfc2VxKSkge1xuICAgICAgICAgICByZWxlYXNlX2xvY2soZHJpdmVyLVx1MDAzZXVwZGF0ZSk7XG4gICAgICAgICAgIGdvdG8gYWdhaW47XG4gICAgICAgfVxuQEAgLTIwMCwxMyArMjE1LDMxIEBAIGxpa2UgYSBDUFUgcGFnZSBmYXVsdC4gVGhlIHVzYWdlIHBhdHRlcm4gaXM6OlxuICAgICAgICAqIHVuZGVyIHRoZSB1cGRhdGUgbG9jayAqL1xuIFxuICAgICAgIHJlbGVhc2VfbG9jayhkcml2ZXItXHUwMDNldXBkYXRlKTtcbi0gICAgICByZXR1cm4gMDtcbisgICAgICByZXQgPSAwO1xuK1xuKyBvdXRfcHV0OlxuKyAgICAgIG1tcHV0KGludGVydmFsX3N1Yi5tbSk7XG4rICAgICAgcmV0dXJuIHJldDtcbiAgfVxuIFxuIFRoZSBkcml2ZXItXHUwMDNldXBkYXRlIGxvY2sgaXMgdGhlIHNhbWUgbG9jayB0aGF0IHRoZSBkcml2ZXIgdGFrZXMgaW5zaWRlIGl0c1xuIGludmFsaWRhdGUoKSBjYWxsYmFjay4gVGhhdCBsb2NrIG11c3QgYmUgaGVsZCBiZWZvcmUgY2FsbGluZ1xuIG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KCkgdG8gYXZvaWQgYW55IHJhY2Ugd2l0aCBhIGNvbmN1cnJlbnQgQ1BVIHBhZ2UgdGFibGVcbi11cGRhdGUuXG4rdXBkYXRlLiBUaGUgcmV0cnkgY2hlY2sgbXVzdCB1c2UgdGhlIHNhbWUgbm90aWZpZXIgYW5kIHNlcXVlbmNlIG51bWJlciBzdG9yZWRcbitpbiBgYHJhbmdlYGAgYnkgYGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpYGAuXG4rXG4rSG9sZGluZyB0aGUgbW1hcCBsb2NrIGFjcm9zcyBITU0gZmF1bHRzXG4rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rXG4rTW9zdCBjYWxsZXJzIHNob3VsZCB1c2UgYGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpYGAuIElmIGEgZHJpdmVyXG4rcmVhbGx5IG5lZWRzIHRvIGhvbGQgdGhlIG1tYXAgbG9jayBhY3Jvc3Mgd29yayBvdXRzaWRlIEhNTSwgaXQgY2FuIHVzZTo6XG4rXG4rICBpbnQgaG1tX3JhbmdlX2ZhdWx0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKTtcbitcbitUaGUgbW1hcCBsb2NrIG11c3QgYmUgaGVsZCBieSB0aGUgY2FsbGVyIGFuZCB3aWxsIHJlbWFpbiBoZWxkIG9uIHJldHVybi4gVGhpc1xuK2ludGVyZmFjZSBjYW5ub3Qgc3VwcG9ydCBWTUFzIHdob3NlIGZhdWx0IGhhbmRsZXJzIG5lZWQgdG8gZHJvcCB0aGUgbW1hcCBsb2NrLlxuK05ldyBjYWxsZXJzIHNob3VsZCBwcmVmZXIgYGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpYGAgdW5sZXNzIHRoZXlcbitoYXZlIGEgc3BlY2lmaWMgcmVxdWlyZW1lbnQgdG8ga2VlcCB0aGUgbW1hcCBsb2NrIGhlbGQgYWNyb3NzIHRoZSBjYWxsLlxuIFxuIExldmVyYWdlIGRlZmF1bHRfZmxhZ3MgYW5kIHBmbl9mbGFnc19tYXNrXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbkBAIC0yMjEsOCArMjU0LDggQEAgcGVybWlzc2lvbiwgaXQgc2V0czo6XG4gICAgIHJhbmdlLVx1MDAzZWRlZmF1bHRfZmxhZ3MgPSBITU1fUEZOX1JFUV9GQVVMVDtcbiAgICAgcmFuZ2UtXHUwMDNlcGZuX2ZsYWdzX21hc2sgPSAwO1xuIFxuLWFuZCBjYWxscyBobW1fcmFuZ2VfZmF1bHQoKSBhcyBkZXNjcmliZWQgYWJvdmUuIFRoaXMgd2lsbCBmaWxsIGZhdWx0IGFsbCBwYWdlc1xuLWluIHRoZSByYW5nZSB3aXRoIGF0IGxlYXN0IHJlYWQgcGVybWlzc2lvbi5cbithbmQgY2FsbHMgdGhlIEhNTSByYW5nZSBmYXVsdCBoZWxwZXIgYXMgZGVzY3JpYmVkIGFib3ZlLiBUaGlzIHdpbGwgZmF1bHRcbithbGwgcGFnZXMgaW4gdGhlIHJhbmdlIHdpdGggYXQgbGVhc3QgcmVhZCBwZXJtaXNzaW9uLlxuIFxuIE5vdyBsZXQncyBzYXkgdGhlIGRyaXZlciB3YW50cyB0byBkbyB0aGUgc2FtZSBleGNlcHQgZm9yIG9uZSBwYWdlIGluIHRoZSByYW5nZSBmb3JcbiB3aGljaCBpdCB3YW50cyB0byBoYXZlIHdyaXRlIHBlcm1pc3Npb24uIE5vdyBkcml2ZXIgc2V0OjpcbkBAIC0yMzYsOSArMjY5LDkgQEAgYWRkcmVzcyA9PSByYW5nZS1cdTAwM2VzdGFydCArIChpbmRleF9vZl93cml0ZSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkgaXQgd2lsbCBmYXVsdCB3aXRoXG4gd3JpdGUgcGVybWlzc2lvbiBpLmUuLCBpZiB0aGUgQ1BVIHB0ZSBkb2VzIG5vdCBoYXZlIHdyaXRlIHBlcm1pc3Npb24gc2V0IHRoZW4gSE1NXG4gd2lsbCBjYWxsIGhhbmRsZV9tbV9mYXVsdCgpLlxuIFxuLUFmdGVyIGhtbV9yYW5nZV9mYXVsdCBjb21wbGV0ZXMgdGhlIGZsYWcgYml0cyBhcmUgc2V0IHRvIHRoZSBjdXJyZW50IHN0YXRlIG9mXG4tdGhlIHBhZ2UgdGFibGVzLCBpZSBITU1fUEZOX1ZBTElEIHwgSE1NX1BGTl9XUklURSB3aWxsIGJlIHNldCBpZiB0aGUgcGFnZSBpc1xuLXdyaXRhYmxlLlxuK0FmdGVyIHRoZSBITU0gcmFuZ2UgZmF1bHQgaGVscGVyIGNvbXBsZXRlcyB0aGUgZmxhZyBiaXRzIGFyZSBzZXQgdG8gdGhlXG4rY3VycmVudCBzdGF0ZSBvZiB0aGUgcGFnZSB0YWJsZXMsIGllIEhNTV9QRk5fVkFMSUQgfCBITU1fUEZOX1dSSVRFIHdpbGwgYmVcbitzZXQgaWYgdGhlIHBhZ2UgaXMgd3JpdGFibGUuXG4gXG4gXG4gUmVwcmVzZW50IGFuZCBtYW5hZ2UgZGV2aWNlIG1lbW9yeSBmcm9tIGNvcmUga2VybmVsIHBvaW50IG9mIHZpZXdcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguYyBiL2RyaXZlcnMvYWNjZWwvYW1keGRuYS9haWUyX2N0eC5jXG5pbmRleCA1NDQ4Njk2MGNiZjVlNi4uYjViNGNhMjYzMDAyZGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguY1xuKysrIGIvZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FpZTJfY3R4LmNcbkBAIC0xMDM0LDcgKzEwMzQsNyBAQCBzdGF0aWMgaW50IGFpZTJfcG9wdWxhdGVfcmFuZ2Uoc3RydWN0IGFtZHhkbmFfZ2VtX29iaiAqYWJvKVxuIFx0Ym9vbCBmb3VuZDtcbiBcdGludCByZXQ7XG4gXG4tXHR0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7XG4rXHR0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcbiBhZ2FpbjpcbiBcdGZvdW5kID0gZmFsc2U7XG4gXHRkb3duX3dyaXRlKFx1MDAyNnhkbmEtXHUwMDNlbm90aWZpZXJfbG9jayk7XG5AQCAtMTA2MSwyNCArMTA2MSw5IEBAIHN0YXRpYyBpbnQgYWllMl9wb3B1bGF0ZV9yYW5nZShzdHJ1Y3QgYW1keGRuYV9nZW1fb2JqICphYm8pXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuIFx0fVxuIFxuLVx0bWFwcC1cdTAwM2VyYW5nZS5ub3RpZmllcl9zZXEgPSBtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihcdTAwMjZtYXBwLVx1MDAzZW5vdGlmaWVyKTtcbi1cdG1tYXBfcmVhZF9sb2NrKG1tKTtcbi1cdHJldCA9IGhtbV9yYW5nZV9mYXVsdChcdTAwMjZtYXBwLVx1MDAzZXJhbmdlKTtcbi1cdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuLVx0aWYgKHJldCkge1xuLVx0XHRpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkge1xuLVx0XHRcdHJldCA9IC1FVElNRTtcbi1cdFx0XHRnb3RvIHB1dF9tbTtcbi1cdFx0fVxuLVxuLVx0XHRpZiAocmV0ID09IC1FQlVTWSkge1xuLVx0XHRcdGFtZHhkbmFfdW1hcF9wdXQobWFwcCk7XG4tXHRcdFx0bW1wdXQobW0pO1xuLVx0XHRcdGdvdG8gYWdhaW47XG4tXHRcdH1cbi1cbitcdHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNm1hcHAtXHUwMDNlcmFuZ2UsIHRpbWVvdXQpO1xuK1x0aWYgKHJldClcbiBcdFx0Z290byBwdXRfbW07XG4tXHR9XG4gXG4gXHRkb3duX3dyaXRlKFx1MDAyNnhkbmEtXHUwMDNlbm90aWZpZXJfbG9jayk7XG4gXHRpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkoXHUwMDI2bWFwcC1cdTAwM2Vub3RpZmllciwgbWFwcC1cdTAwM2VyYW5nZS5ub3RpZmllcl9zZXEpKSB7XG5AQCAtMTA5Niw3ICsxMDgxLDcgQEAgc3RhdGljIGludCBhaWUyX3BvcHVsYXRlX3JhbmdlKHN0cnVjdCBhbWR4ZG5hX2dlbV9vYmogKmFibylcbiBwdXRfbW06XG4gXHRhbWR4ZG5hX3VtYXBfcHV0KG1hcHApO1xuIFx0bW1wdXQobW0pO1xuLVx0cmV0dXJuIHJldDtcbitcdHJldHVybiByZXQgPT0gLUVCVVNZID8gLUVUSU1FIDogcmV0O1xuIH1cbiBcbiBpbnQgYWllMl9jbWRfc3VibWl0KHN0cnVjdCBhbWR4ZG5hX2h3Y3R4ICpod2N0eCwgc3RydWN0IGFtZHhkbmFfc2NoZWRfam9iICpqb2IsIHU2NCAqc2VxKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jXG5pbmRleCA5NThjYjYwNWFlZGQ1My4uZGU1YmJmZTU4ZWU5NDUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jXG5AQCAtNzczLDggKzc3Myw3IEBAIGVudW0gZHJtX2dwdXN2bV9zY2FuX3Jlc3VsdCBkcm1fZ3B1c3ZtX3NjYW5fbW0oc3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKnJhbmdlLFxuIFx0XHQuZW5kID0gZW5kLFxuIFx0XHQuZGV2X3ByaXZhdGVfb3duZXIgPSBkZXZfcHJpdmF0ZV9vd25lcixcbiBcdH07XG4tXHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPVxuLVx0XHRqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcbitcdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7XG4gXHRlbnVtIGRybV9ncHVzdm1fc2Nhbl9yZXN1bHQgc3RhdGUgPSBEUk1fR1BVU1ZNX1NDQU5fVU5QT1BVTEFURUQsIG5ld19zdGF0ZTtcbiBcdHVuc2lnbmVkIGxvbmcgKnBmbnM7XG4gXHR1bnNpZ25lZCBsb25nIG5wYWdlcyA9IG5wYWdlc19pbl9yYW5nZShzdGFydCwgZW5kKTtcbkBAIC03ODgsMjIgKzc4Nyw3IEBAIGVudW0gZHJtX2dwdXN2bV9zY2FuX3Jlc3VsdCBkcm1fZ3B1c3ZtX3NjYW5fbW0oc3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKnJhbmdlLFxuIFx0aG1tX3JhbmdlLmhtbV9wZm5zID0gcGZucztcbiBcbiByZXRyeTpcbi1cdGhtbV9yYW5nZS5ub3RpZmllcl9zZXEgPSBtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihub3RpZmllcik7XG4tXHRtbWFwX3JlYWRfbG9jayhyYW5nZS1cdTAwM2VncHVzdm0tXHUwMDNlbW0pO1xuLVxuLVx0d2hpbGUgKHRydWUpIHtcbi1cdFx0ZXJyID0gaG1tX3JhbmdlX2ZhdWx0KFx1MDAyNmhtbV9yYW5nZSk7XG4tXHRcdGlmIChlcnIgPT0gLUVCVVNZKSB7XG4tXHRcdFx0aWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpXG4tXHRcdFx0XHRicmVhaztcbi1cbi1cdFx0XHRobW1fcmFuZ2Uubm90aWZpZXJfc2VxID1cbi1cdFx0XHRcdG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKG5vdGlmaWVyKTtcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuLVx0XHRicmVhaztcbi1cdH1cbi1cdG1tYXBfcmVhZF91bmxvY2socmFuZ2UtXHUwMDNlZ3B1c3ZtLVx1MDAzZW1tKTtcbitcdGVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNmhtbV9yYW5nZSwgdGltZW91dCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9mcmVlO1xuIFxuQEAgLTE0MDYsOCArMTM5MCw3IEBAIGludCBkcm1fZ3B1c3ZtX2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxuIFx0XHQuZGV2X3ByaXZhdGVfb3duZXIgPSBjdHgtXHUwMDNlZGV2aWNlX3ByaXZhdGVfcGFnZV9vd25lcixcbiBcdH07XG4gXHR2b2lkICp6ZGQ7XG4tXHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPVxuLVx0XHRqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcbitcdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7XG4gXHR1bnNpZ25lZCBsb25nIGksIGo7XG4gXHR1bnNpZ25lZCBsb25nIG5wYWdlcyA9IG5wYWdlc19pbl9yYW5nZShwYWdlc19zdGFydCwgcGFnZXNfZW5kKTtcbiBcdHVuc2lnbmVkIGxvbmcgbnVtX2RtYV9tYXBwZWQ7XG5AQCAtMTQyMiw5ICsxNDA1LDYgQEAgaW50IGRybV9ncHVzdm1fZ2V0X3BhZ2VzKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXG4gXHRzdHJ1Y3QgZG1hX2lvdmFfc3RhdGUgKnN0YXRlID0gXHUwMDI2c3ZtX3BhZ2VzLVx1MDAzZXN0YXRlO1xuIFxuIHJldHJ5OlxuLVx0aWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpXG4tXHRcdHJldHVybiAtRUJVU1k7XG4tXG4gXHRobW1fcmFuZ2Uubm90aWZpZXJfc2VxID0gbW11X2ludGVydmFsX3JlYWRfYmVnaW4obm90aWZpZXIpO1xuIFx0aWYgKGRybV9ncHVzdm1fcGFnZXNfdmFsaWRfdW5sb2NrZWQoZ3B1c3ZtLCBzdm1fcGFnZXMpKVxuIFx0XHRnb3RvIHNldF9zZXFubztcbkBAIC0xNDM5LDIxICsxNDE5LDcgQEAgaW50IGRybV9ncHVzdm1fZ2V0X3BhZ2VzKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXG4gXHR9XG4gXG4gXHRobW1fcmFuZ2UuaG1tX3BmbnMgPSBwZm5zO1xuLVx0d2hpbGUgKHRydWUpIHtcbi1cdFx0bW1hcF9yZWFkX2xvY2sobW0pO1xuLVx0XHRlcnIgPSBobW1fcmFuZ2VfZmF1bHQoXHUwMDI2aG1tX3JhbmdlKTtcbi1cdFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4tXG4tXHRcdGlmIChlcnIgPT0gLUVCVVNZKSB7XG4tXHRcdFx0aWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpXG4tXHRcdFx0XHRicmVhaztcbi1cbi1cdFx0XHRobW1fcmFuZ2Uubm90aWZpZXJfc2VxID1cbi1cdFx0XHRcdG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKG5vdGlmaWVyKTtcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuLVx0XHRicmVhaztcbi1cdH1cbitcdGVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNmhtbV9yYW5nZSwgdGltZW91dCk7XG4gXHRtbXB1dChtbSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9mcmVlO1xuQEAgLTE3MjAsOCArMTY4Niw3IEBAIGludCBkcm1fZ3B1c3ZtX3JhbmdlX2V2aWN0KHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXG4gXHRcdC5lbmQgPSBkcm1fZ3B1c3ZtX3JhbmdlX2VuZChyYW5nZSksXG4gXHRcdC5kZXZfcHJpdmF0ZV9vd25lciA9IE5VTEwsXG4gXHR9O1xuLVx0dW5zaWduZWQgbG9uZyB0aW1lb3V0ID1cbi1cdFx0amlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7XG4rXHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xuIFx0dW5zaWduZWQgbG9uZyAqcGZucztcbiBcdHVuc2lnbmVkIGxvbmcgbnBhZ2VzID0gbnBhZ2VzX2luX3JhbmdlKGRybV9ncHVzdm1fcmFuZ2Vfc3RhcnQocmFuZ2UpLFxuIFx0XHRcdFx0XHQgICAgICAgZHJtX2dwdXN2bV9yYW5nZV9lbmQocmFuZ2UpKTtcbkBAIC0xNzM2LDI0ICsxNzAxLDEyIEBAIGludCBkcm1fZ3B1c3ZtX3JhbmdlX2V2aWN0KHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0aG1tX3JhbmdlLmhtbV9wZm5zID0gcGZucztcbi1cdHdoaWxlICghdGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkge1xuLVx0XHRobW1fcmFuZ2Uubm90aWZpZXJfc2VxID0gbW11X2ludGVydmFsX3JlYWRfYmVnaW4obm90aWZpZXIpO1xuLVx0XHRpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkge1xuLVx0XHRcdGVyciA9IC1FVElNRTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVxuLVx0XHRtbWFwX3JlYWRfbG9jayhtbSk7XG4tXHRcdGVyciA9IGhtbV9yYW5nZV9mYXVsdChcdTAwMjZobW1fcmFuZ2UpO1xuLVx0XHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbi1cdFx0aWYgKGVyciAhPSAtRUJVU1kpXG4tXHRcdFx0YnJlYWs7XG4tXHR9XG4rXHRlcnIgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcdTAwMjZobW1fcmFuZ2UsIHRpbWVvdXQpO1xuIFxuIFx0a3ZmcmVlKHBmbnMpO1xuIFx0bW1wdXQobW0pO1xuIFxuLVx0cmV0dXJuIGVycjtcbitcdHJldHVybiBlcnIgPT0gLUVCVVNZID8gLUVUSU1FIDogZXJyO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ3B1c3ZtX3JhbmdlX2V2aWN0KTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N2bS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uY1xuaW5kZXggZGNjOTIxMzE0ODhlYWIuLjU4NzM1NDQ2ZDc4MzJjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uY1xuKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uY1xuQEAgLTY3OCwyMCArNjc4LDIyIEBAIHN0YXRpYyBpbnQgbm91dmVhdV9yYW5nZV9mYXVsdChzdHJ1Y3Qgbm91dmVhdV9zdm1tICpzdm1tLFxuIFx0cmFuZ2UuZW5kID0gbm90aWZpZXItXHUwMDNlbm90aWZpZXIuaW50ZXJ2YWxfdHJlZS5sYXN0ICsgMTtcbiBcbiBcdHdoaWxlICh0cnVlKSB7XG4tXHRcdGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7XG4rXHRcdGxvbmcgcmVtYWluaW5nID0gdGltZW91dCAtIGppZmZpZXM7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIFRoZSBITU0gdGltZW91dCBvbmx5IGJvdW5kcyByZXRyaWVzIHdoaWxlIEhNTSBpcyB3YWxraW5nIGFuZFxuK1x0XHQgKiBmYXVsdGluZyB0aGUgcmFuZ2UuIFRoaXMgZmF1bHQgaXMgaGFuZGxlZCBieSBhIGtlcm5lbCB3b3JrZXIsXG4rXHRcdCAqIHNvIGZhdGFsIHNpZ25hbHMgZnJvbSB0aGUgZmF1bHRpbmcgcHJvY2VzcyBjYW5ub3Qgc3RvcCBhblxuK1x0XHQgKiBlbmRsZXNzIHN0cmVhbSBvZiBpbnZhbGlkYXRpb25zIGhlcmUuXG4rXHRcdCAqL1xuK1x0XHRpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCB0aW1lb3V0KSkge1xuIFx0XHRcdHJldCA9IC1FQlVTWTtcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFxuLVx0XHRyYW5nZS5ub3RpZmllcl9zZXEgPSBtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihyYW5nZS5ub3RpZmllcik7XG4tXHRcdG1tYXBfcmVhZF9sb2NrKG1tKTtcbi1cdFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0KFx1MDAyNnJhbmdlKTtcbi1cdFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4tXHRcdGlmIChyZXQpIHtcbi1cdFx0XHRpZiAocmV0ID09IC1FQlVTWSlcbi1cdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcdTAwMjZyYW5nZSwgcmVtYWluaW5nKTtcbitcdFx0aWYgKHJldClcbiBcdFx0XHRnb3RvIG91dDtcbi1cdFx0fVxuIFxuIFx0XHRtdXRleF9sb2NrKFx1MDAyNnN2bW0tXHUwMDNlbXV0ZXgpO1xuIFx0XHRpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkocmFuZ2Uubm90aWZpZXIsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuYyBiL2RyaXZlcnMvaHYvbXNodl9yZWdpb25zLmNcbmluZGV4IDZkNjVlNWI0MjE1Mjk1Li5kZGRhYWRlMzFiNWRjMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaHYvbXNodl9yZWdpb25zLmNcbisrKyBiL2RyaXZlcnMvaHYvbXNodl9yZWdpb25zLmNcbkBAIC0zODEsNDYgKzM4MSw2IEBAIGludCBtc2h2X3JlZ2lvbl9nZXQoc3RydWN0IG1zaHZfbWVtX3JlZ2lvbiAqcmVnaW9uKVxuIFx0cmV0dXJuIGtyZWZfZ2V0X3VubGVzc196ZXJvKFx1MDAyNnJlZ2lvbi1cdTAwM2VtcmVnX3JlZmNvdW50KTtcbiB9XG4gXG4tLyoqXG4tICogbXNodl9yZWdpb25faG1tX2ZhdWx0X2FuZF9sb2NrIC0gSGFuZGxlIEhNTSBmYXVsdHMgYW5kIGxvY2sgdGhlIG1lbW9yeSByZWdpb25cbi0gKiBAcmVnaW9uOiBQb2ludGVyIHRvIHRoZSBtZW1vcnkgcmVnaW9uIHN0cnVjdHVyZVxuLSAqIEByYW5nZTogUG9pbnRlciB0byB0aGUgSE1NIHJhbmdlIHN0cnVjdHVyZVxuLSAqXG4tICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyB0aGUgZm9sbG93aW5nIHN0ZXBzOlxuLSAqIDEuIFJlYWRzIHRoZSBub3RpZmllciBzZXF1ZW5jZSBmb3IgdGhlIEhNTSByYW5nZS5cbi0gKiAyLiBBY3F1aXJlcyBhIHJlYWQgbG9jayBvbiB0aGUgbWVtb3J5IG1hcC5cbi0gKiAzLiBIYW5kbGVzIEhNTSBmYXVsdHMgZm9yIHRoZSBzcGVjaWZpZWQgcmFuZ2UuXG4tICogNC4gUmVsZWFzZXMgdGhlIHJlYWQgbG9jayBvbiB0aGUgbWVtb3J5IG1hcC5cbi0gKiA1LiBJZiBzdWNjZXNzZnVsLCBsb2NrcyB0aGUgbWVtb3J5IHJlZ2lvbiBtdXRleC5cbi0gKiA2LiBWZXJpZmllcyBpZiB0aGUgbm90aWZpZXIgc2VxdWVuY2UgaGFzIGNoYW5nZWQgZHVyaW5nIHRoZSBvcGVyYXRpb24uXG4tICogICAgSWYgaXQgaGFzLCByZWxlYXNlcyB0aGUgbXV0ZXggYW5kIHJldHVybnMgLUVCVVNZIHRvIG1hdGNoIHdpdGhcbi0gKiAgICBobW1fcmFuZ2VfZmF1bHQoKSByZXR1cm4gY29kZSBmb3IgcmVwZWF0aW5nLlxuLSAqXG4tICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuXG4tICovXG4tc3RhdGljIGludCBtc2h2X3JlZ2lvbl9obW1fZmF1bHRfYW5kX2xvY2soc3RydWN0IG1zaHZfbWVtX3JlZ2lvbiAqcmVnaW9uLFxuLVx0XHRcdFx0XHQgIHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKVxuLXtcbi1cdGludCByZXQ7XG4tXG4tXHRyYW5nZS1cdTAwM2Vub3RpZmllcl9zZXEgPSBtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihyYW5nZS1cdTAwM2Vub3RpZmllcik7XG4tXHRtbWFwX3JlYWRfbG9jayhyZWdpb24tXHUwMDNlbXJlZ19tbmkubW0pO1xuLVx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0KHJhbmdlKTtcbi1cdG1tYXBfcmVhZF91bmxvY2socmVnaW9uLVx1MDAzZW1yZWdfbW5pLm1tKTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4tXG4tXHRtdXRleF9sb2NrKFx1MDAyNnJlZ2lvbi1cdTAwM2VtcmVnX211dGV4KTtcbi1cbi1cdGlmIChtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeShyYW5nZS1cdTAwM2Vub3RpZmllciwgcmFuZ2UtXHUwMDNlbm90aWZpZXJfc2VxKSkge1xuLVx0XHRtdXRleF91bmxvY2soXHUwMDI2cmVnaW9uLVx1MDAzZW1yZWdfbXV0ZXgpO1xuLVx0XHRjb25kX3Jlc2NoZWQoKTtcbi1cdFx0cmV0dXJuIC1FQlVTWTtcbi1cdH1cbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbiAvKipcbiAgKiBtc2h2X3JlZ2lvbl9yYW5nZV9mYXVsdCAtIEhhbmRsZSBtZW1vcnkgcmFuZ2UgZmF1bHRzIGZvciBhIGdpdmVuIHJlZ2lvbi5cbiAgKiBAcmVnaW9uOiBQb2ludGVyIHRvIHRoZSBtZW1vcnkgcmVnaW9uIHN0cnVjdHVyZS5cbkBAIC00NTIsMTMgKzQxMiwxOSBAQCBzdGF0aWMgaW50IG1zaHZfcmVnaW9uX3JhbmdlX2ZhdWx0KHN0cnVjdCBtc2h2X21lbV9yZWdpb24gKnJlZ2lvbixcbiBcdHJhbmdlLnN0YXJ0ID0gcmVnaW9uLVx1MDAzZXN0YXJ0X3VhZGRyICsgcGFnZV9vZmZzZXQgKiBIVl9IWVBfUEFHRV9TSVpFO1xuIFx0cmFuZ2UuZW5kID0gcmFuZ2Uuc3RhcnQgKyBwYWdlX2NvdW50ICogSFZfSFlQX1BBR0VfU0laRTtcbiBcbi1cdGRvIHtcbi1cdFx0cmV0ID0gbXNodl9yZWdpb25faG1tX2ZhdWx0X2FuZF9sb2NrKHJlZ2lvbiwgXHUwMDI2cmFuZ2UpO1xuLVx0fSB3aGlsZSAocmV0ID09IC1FQlVTWSk7XG4tXG4rYWdhaW46XG4rXHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcdTAwMjZyYW5nZSwgMCk7XG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIG91dDtcbiBcbitcdG11dGV4X2xvY2soXHUwMDI2cmVnaW9uLVx1MDAzZW1yZWdfbXV0ZXgpO1xuK1xuK1x0aWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KHJhbmdlLm5vdGlmaWVyLCByYW5nZS5ub3RpZmllcl9zZXEpKSB7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZyZWdpb24tXHUwMDNlbXJlZ19tdXRleCk7XG4rXHRcdGNvbmRfcmVzY2hlZCgpO1xuK1x0XHRnb3RvIGFnYWluO1xuK1x0fVxuK1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGFnZV9jb3VudDsgaSsrKVxuIFx0XHRyZWdpb24tXHUwMDNlbXJlZ19wYWdlc1twYWdlX29mZnNldCArIGldID0gaG1tX3Bmbl90b19wYWdlKHBmbnNbaV0pO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jXG5pbmRleCA0MDRmYTFjYzMyNTQyYy4uOWNjMjFjZDc2MmQ5ODkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jXG4rKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jXG5AQCAtMzI5LDcgKzMyOSw3IEBAIGludCBpYl91bWVtX29kcF9tYXBfZG1hX2FuZF9sb2NrKHN0cnVjdCBpYl91bWVtX29kcCAqdW1lbV9vZHAsIHU2NCB1c2VyX3ZpcnQsXG4gXHRzdHJ1Y3QgbW1fc3RydWN0ICpvd25pbmdfbW0gPSB1bWVtX29kcC1cdTAwM2V1bWVtLm93bmluZ19tbTtcbiBcdGludCBwZm5faW5kZXgsIGRtYV9pbmRleCwgcmV0ID0gMCwgc3RhcnRfaWR4O1xuIFx0dW5zaWduZWQgaW50IHBhZ2Vfc2hpZnQsIGhtbV9vcmRlciwgcGZuX3N0YXJ0X2lkeDtcbi1cdHVuc2lnbmVkIGxvbmcgbnVtX3BmbnMsIGN1cnJlbnRfc2VxO1xuK1x0dW5zaWduZWQgbG9uZyBudW1fcGZucztcbiBcdHN0cnVjdCBobW1fcmFuZ2UgcmFuZ2UgPSB7fTtcbiBcdHVuc2lnbmVkIGxvbmcgdGltZW91dDtcbiBcbkBAIC0zNjMsMjYgKzM2MywxOCBAQCBpbnQgaWJfdW1lbV9vZHBfbWFwX2RtYV9hbmRfbG9jayhzdHJ1Y3QgaWJfdW1lbV9vZHAgKnVtZW1fb2RwLCB1NjQgdXNlcl92aXJ0LFxuIFx0fVxuIFxuIFx0cmFuZ2UuaG1tX3BmbnMgPSBcdTAwMjYodW1lbV9vZHAtXHUwMDNlbWFwLnBmbl9saXN0W3Bmbl9zdGFydF9pZHhdKTtcbi1cdHRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcbitcdHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xuIFxuIHJldHJ5OlxuLVx0Y3VycmVudF9zZXEgPSByYW5nZS5ub3RpZmllcl9zZXEgPVxuLVx0XHRtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihcdTAwMjZ1bWVtX29kcC1cdTAwM2Vub3RpZmllcik7XG4tXG4tXHRtbWFwX3JlYWRfbG9jayhvd25pbmdfbW0pO1xuLVx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0KFx1MDAyNnJhbmdlKTtcbi1cdG1tYXBfcmVhZF91bmxvY2sob3duaW5nX21tKTtcbi1cdGlmICh1bmxpa2VseShyZXQpKSB7XG4tXHRcdGlmIChyZXQgPT0gLUVCVVNZIFx1MDAyNlx1MDAyNiAhdGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSlcbi1cdFx0XHRnb3RvIHJldHJ5O1xuK1x0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXHUwMDI2cmFuZ2UsIHRpbWVvdXQpO1xuK1x0aWYgKHVubGlrZWx5KHJldCkpXG4gXHRcdGdvdG8gb3V0X3B1dF9tbTtcbi1cdH1cbiBcbiBcdHN0YXJ0X2lkeCA9IChyYW5nZS5zdGFydCAtIGliX3VtZW1fc3RhcnQodW1lbV9vZHApKSBcdTAwM2VcdTAwM2UgcGFnZV9zaGlmdDtcbiBcdGRtYV9pbmRleCA9IHN0YXJ0X2lkeDtcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2dW1lbV9vZHAtXHUwMDNldW1lbV9tdXRleCk7XG4tXHRpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkoXHUwMDI2dW1lbV9vZHAtXHUwMDNlbm90aWZpZXIsIGN1cnJlbnRfc2VxKSkge1xuK1x0aWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KFx1MDAyNnVtZW1fb2RwLVx1MDAzZW5vdGlmaWVyLCByYW5nZS5ub3RpZmllcl9zZXEpKSB7XG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZ1bWVtX29kcC1cdTAwM2V1bWVtX211dGV4KTtcbiBcdFx0Z290byByZXRyeTtcbiBcdH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2htbS5oIGIvaW5jbHVkZS9saW51eC9obW0uaFxuaW5kZXggZGI3NWZmYzk0OWE3YWMuLjZmMDRlMzkzMmY1YjBjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9obW0uaFxuKysrIGIvaW5jbHVkZS9saW51eC9obW0uaFxuQEAgLTEyMyw2ICsxMjMsOCBAQCBzdHJ1Y3QgaG1tX3JhbmdlIHtcbiAgKiBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vbW0vaG1tLnJzdCBmb3IgaG93IHRvIHVzZSB0aGUgcmFuZ2UgQVBJLlxuICAqL1xuIGludCBobW1fcmFuZ2VfZmF1bHQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpO1xuK2ludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSxcbitcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0KTtcbiBcbiAvKlxuICAqIEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQgLSBkZWZhdWx0IHRpbWVvdXQgKG1zKSB3aGVuIHdhaXRpbmcgZm9yIGEgcmFuZ2VcbmRpZmYgLS1naXQgYS9saWIvdGVzdF9obW0uYyBiL2xpYi90ZXN0X2htbS5jXG5pbmRleCA0NWMwY2I5OTIyMTg0YS4uNjIwNWZiMzEzYmQwNWUgMTAwNjQ0XG4tLS0gYS9saWIvdGVzdF9obW0uY1xuKysrIGIvbGliL3Rlc3RfaG1tLmNcbkBAIC0zODksNiArMzg5LDY3IEBAIHN0YXRpYyBpbnQgZG1pcnJvcl9yYW5nZV9mYXVsdChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBpbnQgZG1pcnJvcl9yYW5nZV9mYXVsdF91bmxvY2tlZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcbitcdFx0XHRcdFx0c3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsXG4rXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgdGltZW91dClcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0d2hpbGUgKHRydWUpIHtcbitcdFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQocmFuZ2UsIHRpbWVvdXQpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gb3V0O1xuK1xuK1x0XHRtdXRleF9sb2NrKFx1MDAyNmRtaXJyb3ItXHUwMDNlbXV0ZXgpO1xuK1x0XHRpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkocmFuZ2UtXHUwMDNlbm90aWZpZXIsXG4rXHRcdFx0XHRcdCAgICByYW5nZS1cdTAwM2Vub3RpZmllcl9zZXEpKSB7XG4rXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRtaXJyb3ItXHUwMDNlbXV0ZXgpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0cmV0ID0gZG1pcnJvcl9kb19mYXVsdChkbWlycm9yLCByYW5nZSk7XG4rXG4rXHRtdXRleF91bmxvY2soXHUwMDI2ZG1pcnJvci1cdTAwM2VtdXRleCk7XG4rb3V0OlxuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBkbWlycm9yX2ZhdWx0X3VubG9ja2VkKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxuK1x0XHRcdFx0ICB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuK1x0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGVuZCwgYm9vbCB3cml0ZSxcbitcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyB0aW1lb3V0KVxuK3tcbitcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gZG1pcnJvci1cdTAwM2Vub3RpZmllci5tbTtcbitcdHVuc2lnbmVkIGxvbmcgYWRkcjtcbitcdHVuc2lnbmVkIGxvbmcgcGZuc1szMl07XG4rXHRzdHJ1Y3QgaG1tX3JhbmdlIHJhbmdlID0ge1xuK1x0XHQubm90aWZpZXIgPSBcdTAwMjZkbWlycm9yLVx1MDAzZW5vdGlmaWVyLFxuK1x0XHQuaG1tX3BmbnMgPSBwZm5zLFxuK1x0XHQucGZuX2ZsYWdzX21hc2sgPSAwLFxuK1x0XHQuZGVmYXVsdF9mbGFncyA9XG4rXHRcdFx0SE1NX1BGTl9SRVFfRkFVTFQgfCAod3JpdGUgPyBITU1fUEZOX1JFUV9XUklURSA6IDApLFxuK1x0XHQuZGV2X3ByaXZhdGVfb3duZXIgPSBkbWlycm9yLVx1MDAzZW1kZXZpY2UsXG4rXHR9O1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRpZiAoIW1tZ2V0X25vdF96ZXJvKG1tKSlcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXG4rXHRmb3IgKGFkZHIgPSBzdGFydDsgYWRkciBcdTAwM2MgZW5kOyBhZGRyID0gcmFuZ2UuZW5kKSB7XG4rXHRcdHJhbmdlLnN0YXJ0ID0gYWRkcjtcbitcdFx0cmFuZ2UuZW5kID0gbWluKGFkZHIgKyAoQVJSQVlfU0laRShwZm5zKSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCksIGVuZCk7XG4rXG4rXHRcdHJldCA9IGRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWQoZG1pcnJvciwgXHUwMDI2cmFuZ2UsIHRpbWVvdXQpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0bW1wdXQobW0pO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gc3RhdGljIGludCBkbWlycm9yX2ZhdWx0KHN0cnVjdCBkbWlycm9yICpkbWlycm9yLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuIFx0XHRcdCB1bnNpZ25lZCBsb25nIGVuZCwgYm9vbCB3cml0ZSlcbiB7XG5AQCAtNDg4LDYgKzU0OSw0OCBAQCBzdGF0aWMgaW50IGRtaXJyb3JfcmVhZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvciwgc3RydWN0IGhtbV9kbWlycm9yX2NtZCAqY21kKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rc3RhdGljIGludCBkbWlycm9yX3JlYWRfdW5sb2NrZWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsXG4rXHRcdFx0XHQgc3RydWN0IGhtbV9kbWlycm9yX2NtZCAqY21kLFxuK1x0XHRcdFx0IHVuc2lnbmVkIGxvbmcgdGltZW91dClcbit7XG4rXHRzdHJ1Y3QgZG1pcnJvcl9ib3VuY2UgYm91bmNlO1xuK1x0dW5zaWduZWQgbG9uZyBzdGFydCwgZW5kO1xuK1x0dW5zaWduZWQgbG9uZyBzaXplID0gY21kLVx1MDAzZW5wYWdlcyBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbitcdGludCByZXQ7XG4rXG4rXHRzdGFydCA9IGNtZC1cdTAwM2VhZGRyO1xuK1x0ZW5kID0gc3RhcnQgKyBzaXplO1xuK1x0aWYgKGVuZCBcdTAwM2Mgc3RhcnQpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmV0ID0gZG1pcnJvcl9ib3VuY2VfaW5pdChcdTAwMjZib3VuY2UsIHN0YXJ0LCBzaXplKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHR3aGlsZSAoMSkge1xuK1x0XHRtdXRleF9sb2NrKFx1MDAyNmRtaXJyb3ItXHUwMDNlbXV0ZXgpO1xuK1x0XHRyZXQgPSBkbWlycm9yX2RvX3JlYWQoZG1pcnJvciwgc3RhcnQsIGVuZCwgXHUwMDI2Ym91bmNlKTtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRtaXJyb3ItXHUwMDNlbXV0ZXgpO1xuK1x0XHRpZiAocmV0ICE9IC1FTk9FTlQpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdHN0YXJ0ID0gY21kLVx1MDAzZWFkZHIgKyAoYm91bmNlLmNwYWdlcyBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG4rXHRcdHJldCA9IGRtaXJyb3JfZmF1bHRfdW5sb2NrZWQoZG1pcnJvciwgc3RhcnQsIGVuZCwgZmFsc2UsIHRpbWVvdXQpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGJyZWFrO1xuK1x0XHRjbWQtXHUwMDNlZmF1bHRzKys7XG4rXHR9XG4rXG4rXHRpZiAocmV0ID09IDApIHtcbitcdFx0aWYgKGNvcHlfdG9fdXNlcih1NjRfdG9fdXNlcl9wdHIoY21kLVx1MDAzZXB0ciksIGJvdW5jZS5wdHIsXG4rXHRcdFx0XHQgYm91bmNlLnNpemUpKVxuK1x0XHRcdHJldCA9IC1FRkFVTFQ7XG4rXHR9XG4rXHRjbWQtXHUwMDNlY3BhZ2VzID0gYm91bmNlLmNwYWdlcztcbitcdGRtaXJyb3JfYm91bmNlX2ZpbmkoXHUwMDI2Ym91bmNlKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIHN0YXRpYyBpbnQgZG1pcnJvcl9kb193cml0ZShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvciwgdW5zaWduZWQgbG9uZyBzdGFydCxcbiBcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBkbWlycm9yX2JvdW5jZSAqYm91bmNlKVxuIHtcbkBAIC0xNTcyLDcgKzE2NzUsOSBAQCBzdGF0aWMgbG9uZyBkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4gXHRcdGRtaXJyb3ItXHUwMDNlZmxhZ3MgPSBjbWQubnBhZ2VzO1xuIFx0XHRyZXQgPSAwO1xuIFx0XHRicmVhaztcbi1cbitcdGNhc2UgSE1NX0RNSVJST1JfUkVBRF9VTkxPQ0tFRDpcbitcdFx0cmV0ID0gZG1pcnJvcl9yZWFkX3VubG9ja2VkKGRtaXJyb3IsIFx1MDAyNmNtZCwgMCk7XG4rXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbGliL3Rlc3RfaG1tX3VhcGkuaCBiL2xpYi90ZXN0X2htbV91YXBpLmhcbmluZGV4IGY5NGM2ZDQ1NzMzODI4Li5lYTliMGVjNDA0ZmI1NSAxMDA2NDRcbi0tLSBhL2xpYi90ZXN0X2htbV91YXBpLmhcbisrKyBiL2xpYi90ZXN0X2htbV91YXBpLmhcbkBAIC0zOCw2ICszOCw3IEBAIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQge1xuICNkZWZpbmUgSE1NX0RNSVJST1JfQ0hFQ0tfRVhDTFVTSVZFXHRfSU9XUignSCcsIDB4MDYsIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQpXG4gI2RlZmluZSBITU1fRE1JUlJPUl9SRUxFQVNFXHRcdF9JT1dSKCdIJywgMHgwNywgc3RydWN0IGhtbV9kbWlycm9yX2NtZClcbiAjZGVmaW5lIEhNTV9ETUlSUk9SX0ZMQUdTXHRcdF9JT1dSKCdIJywgMHgwOCwgc3RydWN0IGhtbV9kbWlycm9yX2NtZClcbisjZGVmaW5lIEhNTV9ETUlSUk9SX1JFQURfVU5MT0NLRURcdF9JT1dSKCdIJywgMHgwOSwgc3RydWN0IGhtbV9kbWlycm9yX2NtZClcbiBcbiAjZGVmaW5lIEhNTV9ETUlSUk9SX0ZMQUdfRkFJTF9BTExPQ1x0KDFVTEwgXHUwMDNjXHUwMDNjIDApXG4gXG5kaWZmIC0tZ2l0IGEvbW0vaG1tLmMgYi9tbS9obW0uY1xuaW5kZXggZTVjMWY0ZGVlZDI0NDcuLmZjMmUxY2QwY2IyMmViIDEwMDY0NFxuLS0tIGEvbW0vaG1tLmNcbisrKyBiL21tL2htbS5jXG5AQCAtMzIsOSArMzIsMjcgQEBcbiBcbiBzdHJ1Y3QgaG1tX3ZtYV93YWxrIHtcbiBcdHN0cnVjdCBobW1fcmFuZ2VcdCpyYW5nZTtcbitcdGJvb2xcdFx0XHQqbG9ja2VkO1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRsYXN0O1xuK1x0dW5zaWduZWQgbG9uZ1x0XHRlbmQ7XG4rXHR1bnNpZ25lZCBpbnRcdFx0cmVxdWlyZWRfZmF1bHQ7XG4gfTtcbiBcbisvKlxuKyAqIEludGVybmFsIHNlbnRpbmVsIHJldHVybmVkIGJ5IHdhbGsgY2FsbGJhY2tzIHdoZW4gdGhleSBuZWVkIGEgcGFnZSBmYXVsdC5cbisgKiBUaGUgY2FsbGJhY2sgc3RvcmVzIGVuZC9yZXF1aXJlZF9mYXVsdCBpbiBobW1fdm1hX3dhbGs7IHRoZSBvdXRlciBsb29wXG4rICogY29uc3VtZXMgdGhlIHNlbnRpbmVsIGFuZCBuZXZlciBwcm9wYWdhdGVzIGl0IHRvIHRoZSBjYWxsZXIuXG4rICovXG4rI2RlZmluZSBITU1fRkFVTFRfUEVORElOR1x0LUVBR0FJTlxuK1xuKy8qXG4rICogSW50ZXJuYWwgc2VudGluZWwgcmV0dXJuZWQgYnkgaG1tX2RvX2ZhdWx0KCkgd2hlbiBoYW5kbGVfbW1fZmF1bHQoKVxuKyAqIGNvbXBsZXRlcyBhIHBhZ2UgZmF1bHQgd2l0aCB0aGUgbW1hcCBsb2NrIGRyb3BwZWQuIGhtbV9kb19mYXVsdCgpIHNldHNcbisgKiAqbG9ja2VkID0gZmFsc2U7IHRoZSBvdXRlciBsb29wIGNvbnN1bWVzIHRoZSBzZW50aW5lbCBhbmQgbmV2ZXIgcHJvcGFnYXRlc1xuKyAqIGl0IHRvIHRoZSBjYWxsZXIuXG4rICovXG4rI2RlZmluZSBITU1fRkFVTFRfVU5MT0NLRURcdC1FTk9MQ0tcbitcbiBlbnVtIHtcbiBcdEhNTV9ORUVEX0ZBVUxUID0gMSBcdTAwM2NcdTAwM2MgMCxcbiBcdEhNTV9ORUVEX1dSSVRFX0ZBVUxUID0gMSBcdTAwM2NcdTAwM2MgMSxcbkBAIC02MCwzNyArNzgsMjUgQEAgc3RhdGljIGludCBobW1fcGZuc19maWxsKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gfVxuIFxuIC8qXG4tICogaG1tX3ZtYV9mYXVsdCgpIC0gZmF1bHQgaW4gYSByYW5nZSBsYWNraW5nIHZhbGlkIHBtZCBvciBwdGUocylcbi0gKiBAYWRkcjogcmFuZ2UgdmlydHVhbCBzdGFydCBhZGRyZXNzIChpbmNsdXNpdmUpXG4tICogQGVuZDogcmFuZ2UgdmlydHVhbCBlbmQgYWRkcmVzcyAoZXhjbHVzaXZlKVxuLSAqIEByZXF1aXJlZF9mYXVsdDogSE1NX05FRURfKiBmbGFnc1xuLSAqIEB3YWxrOiBtbV93YWxrIHN0cnVjdHVyZVxuLSAqIFJldHVybjogLUVCVVNZIGFmdGVyIHBhZ2UgZmF1bHQsIG9yIHBhZ2UgZmF1bHQgZXJyb3JcbisgKiBobW1fcmVjb3JkX2ZhdWx0KCkgLSByZWNvcmQgYSByYW5nZSB0aGF0IG5lZWRzIHRvIGJlIGZhdWx0ZWQgaW5cbiAgKlxuLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgcG1kX25vbmUoKSBvciBwdGVfbm9uZSgpIHJldHVybnMgdHJ1ZSxcbi0gKiBvciB3aGVuZXZlciB0aGVyZSBpcyBubyBwYWdlIGRpcmVjdG9yeSBjb3ZlcmluZyB0aGUgdmlydHVhbCBhZGRyZXNzIHJhbmdlLlxuKyAqIENhbGxlZCBieSB0aGUgd2FsayBjYWxsYmFja3Mgd2hlbiB0aGV5IGRpc2NvdmVyIHRoYXQgcGFydCBvZiB0aGUgcmFuZ2VcbisgKiBuZWVkcyBhIHBhZ2UgZmF1bHQuICBUaGUgY2FsbGJhY2sgcmVjb3JkcyB3aGF0IHRvIGZhdWx0IGFuZCByZXR1cm5zXG4rICogSE1NX0ZBVUxUX1BFTkRJTkc7IHRoZSBvdXRlciBsb29wIGluIGhtbV9yYW5nZV9mYXVsdF9sb2NrZWQoKSBkcm9wc1xuKyAqIGJhY2sgb3V0IG9mIHdhbGtfcGFnZV9yYW5nZSgpIGFuZCBpbnZva2VzIGhhbmRsZV9tbV9mYXVsdCgpIGZyb20gYSBjb250ZXh0XG4rICogd2hlcmUgbm8gcGFnZS10YWJsZSBvciBodWdldGxiX3ZtYV9sb2NrIGlzIGhlbGQuXG4gICovXG4tc3RhdGljIGludCBobW1fdm1hX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tXHRcdFx0IHVuc2lnbmVkIGludCByZXF1aXJlZF9mYXVsdCwgc3RydWN0IG1tX3dhbGsgKndhbGspXG4rc3RhdGljIGludCBobW1fcmVjb3JkX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4rXHRcdFx0ICAgIHVuc2lnbmVkIGludCByZXF1aXJlZF9mYXVsdCxcbitcdFx0XHQgICAgc3RydWN0IG1tX3dhbGsgKndhbGspXG4ge1xuIFx0c3RydWN0IGhtbV92bWFfd2FsayAqaG1tX3ZtYV93YWxrID0gd2Fsay1cdTAwM2Vwcml2YXRlO1xuLVx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB3YWxrLVx1MDAzZXZtYTtcbi1cdHVuc2lnbmVkIGludCBmYXVsdF9mbGFncyA9IEZBVUxUX0ZMQUdfUkVNT1RFO1xuIFxuIFx0V0FSTl9PTl9PTkNFKCFyZXF1aXJlZF9mYXVsdCk7XG4gXHRobW1fdm1hX3dhbGstXHUwMDNlbGFzdCA9IGFkZHI7XG4tXG4tXHRpZiAocmVxdWlyZWRfZmF1bHQgXHUwMDI2IEhNTV9ORUVEX1dSSVRFX0ZBVUxUKSB7XG4tXHRcdGlmICghKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fV1JJVEUpKVxuLVx0XHRcdHJldHVybiAtRVBFUk07XG4tXHRcdGZhdWx0X2ZsYWdzIHw9IEZBVUxUX0ZMQUdfV1JJVEU7XG4tXHR9XG4tXG4tXHRmb3IgKDsgYWRkciBcdTAwM2MgZW5kOyBhZGRyICs9IFBBR0VfU0laRSlcbi1cdFx0aWYgKGhhbmRsZV9tbV9mYXVsdCh2bWEsIGFkZHIsIGZhdWx0X2ZsYWdzLCBOVUxMKSBcdTAwMjZcbi1cdFx0ICAgIFZNX0ZBVUxUX0VSUk9SKVxuLVx0XHRcdHJldHVybiAtRUZBVUxUO1xuLVx0cmV0dXJuIC1FQlVTWTtcbitcdGhtbV92bWFfd2Fsay1cdTAwM2VlbmQgPSBlbmQ7XG4rXHRobW1fdm1hX3dhbGstXHUwMDNlcmVxdWlyZWRfZmF1bHQgPSByZXF1aXJlZF9mYXVsdDtcbitcdHJldHVybiBITU1fRkFVTFRfUEVORElORztcbiB9XG4gXG4gc3RhdGljIHVuc2lnbmVkIGludCBobW1fcHRlX25lZWRfZmF1bHQoY29uc3Qgc3RydWN0IGhtbV92bWFfd2FsayAqaG1tX3ZtYV93YWxrLFxuQEAgLTE3NCw3ICsxODAsNyBAQCBzdGF0aWMgaW50IGhtbV92bWFfd2Fsa19ob2xlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdHJldHVybiBobW1fcGZuc19maWxsKGFkZHIsIGVuZCwgcmFuZ2UsIEhNTV9QRk5fRVJST1IpO1xuIFx0fVxuIFx0aWYgKHJlcXVpcmVkX2ZhdWx0KVxuLVx0XHRyZXR1cm4gaG1tX3ZtYV9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbitcdFx0cmV0dXJuIGhtbV9yZWNvcmRfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XG4gXHRyZXR1cm4gaG1tX3BmbnNfZmlsbChhZGRyLCBlbmQsIHJhbmdlLCAwKTtcbiB9XG4gXG5AQCAtMjA5LDcgKzIxNSw3IEBAIHN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRyZXF1aXJlZF9mYXVsdCA9XG4gXHRcdGhtbV9yYW5nZV9uZWVkX2ZhdWx0KGhtbV92bWFfd2FsaywgaG1tX3BmbnMsIG5wYWdlcywgY3B1X2ZsYWdzKTtcbiBcdGlmIChyZXF1aXJlZF9mYXVsdClcbi1cdFx0cmV0dXJuIGhtbV92bWFfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XG4rXHRcdHJldHVybiBobW1fcmVjb3JkX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspO1xuIFxuIFx0cGZuID0gcG1kX3BmbihwbWQpICsgKChhZGRyIFx1MDAyNiB+UE1EX01BU0spIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbiBcdGZvciAoaSA9IDA7IGFkZHIgXHUwMDNjIGVuZDsgYWRkciArPSBQQUdFX1NJWkUsIGkrKywgcGZuKyspIHtcbkBAIC0zMjgsNyArMzM0LDcgQEAgc3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9wdGUoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBmYXVsdDpcbiBcdHB0ZV91bm1hcChwdGVwKTtcbiBcdC8qIEZhdWx0IGFueSB2aXJ0dWFsIGFkZHJlc3Mgd2Ugd2VyZSBhc2tlZCB0byBmYXVsdCAqL1xuLVx0cmV0dXJuIGhtbV92bWFfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XG4rXHRyZXR1cm4gaG1tX3JlY29yZF9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19BUkNIX0hBU19QTURfU09GVExFQVZFU1xuQEAgLTM3MSw3ICszNzcsNyBAQCBzdGF0aWMgaW50IGhtbV92bWFfaGFuZGxlX2Fic2VudF9wbWQoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4gXHRcdFx0XHRcdCAgICAgIG5wYWdlcywgMCk7XG4gXHRpZiAocmVxdWlyZWRfZmF1bHQpIHtcbiBcdFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSlcbi1cdFx0XHRyZXR1cm4gaG1tX3ZtYV9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbitcdFx0XHRyZXR1cm4gaG1tX3JlY29yZF9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdHJldHVybiAtRUZBVUxUO1xuIFx0fVxuQEAgLTUxNyw3ICs1MjMsNyBAQCBzdGF0aWMgaW50IGhtbV92bWFfd2Fsa19wdWQocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRcdFx0XHRcdCAgICAgIG5wYWdlcywgY3B1X2ZsYWdzKTtcbiBcdFx0aWYgKHJlcXVpcmVkX2ZhdWx0KSB7XG4gXHRcdFx0c3Bpbl91bmxvY2socHRsKTtcbi1cdFx0XHRyZXR1cm4gaG1tX3ZtYV9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbitcdFx0XHRyZXR1cm4gaG1tX3JlY29yZF9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbiBcdFx0fVxuIFxuIFx0XHRwZm4gPSBwdWRfcGZuKHB1ZCkgKyAoKGFkZHIgXHUwMDI2IH5QVURfTUFTSykgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuQEAgLTU2NCwyMSArNTcwLDggQEAgc3RhdGljIGludCBobW1fdm1hX3dhbGtfaHVnZXRsYl9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxuIFx0cmVxdWlyZWRfZmF1bHQgPVxuIFx0XHRobW1fcHRlX25lZWRfZmF1bHQoaG1tX3ZtYV93YWxrLCBwZm5fcmVxX2ZsYWdzLCBjcHVfZmxhZ3MpO1xuIFx0aWYgKHJlcXVpcmVkX2ZhdWx0KSB7XG4tXHRcdGludCByZXQ7XG4tXG4gXHRcdHNwaW5fdW5sb2NrKHB0bCk7XG4tXHRcdGh1Z2V0bGJfdm1hX3VubG9ja19yZWFkKHZtYSk7XG4tXHRcdC8qXG4tXHRcdCAqIEF2b2lkIGRlYWRsb2NrOiBkcm9wIHRoZSB2bWEgbG9jayBiZWZvcmUgY2FsbGluZ1xuLVx0XHQgKiBobW1fdm1hX2ZhdWx0KCksIHdoaWNoIHdpbGwgaXRzZWxmIHBvdGVudGlhbGx5IHRha2UgYW5kXG4tXHRcdCAqIGRyb3AgdGhlIHZtYSBsb2NrLiBUaGlzIGlzIGFsc28gY29ycmVjdCBmcm9tIGFcbi1cdFx0ICogcHJvdGVjdGlvbiBwb2ludCBvZiB2aWV3LCBiZWNhdXNlIHRoZXJlIGlzIG5vIGZ1cnRoZXJcbi1cdFx0ICogdXNlIGhlcmUgb2YgZWl0aGVyIHB0ZSBvciBwdGwgYWZ0ZXIgZHJvcHBpbmcgdGhlIHZtYVxuLVx0XHQgKiBsb2NrLlxuLVx0XHQgKi9cbi1cdFx0cmV0ID0gaG1tX3ZtYV9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbi1cdFx0aHVnZXRsYl92bWFfbG9ja19yZWFkKHZtYSk7XG4tXHRcdHJldHVybiByZXQ7XG4rXHRcdHJldHVybiBobW1fcmVjb3JkX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspO1xuIFx0fVxuIFxuIFx0cGZuID0gcHRlX3BmbihlbnRyeSkgKyAoKHN0YXJ0IFx1MDAyNiB+aG1hc2spIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbkBAIC02MzcsMjkgKzYzMCw2NyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIGhtbV93YWxrX29wcyA9IHtcbiBcdC53YWxrX2xvY2tcdD0gUEdXQUxLX1JETE9DSyxcbiB9O1xuIFxuLS8qKlxuLSAqIGhtbV9yYW5nZV9mYXVsdCAtIHRyeSB0byBmYXVsdCBzb21lIGFkZHJlc3MgaW4gYSB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2Vcbi0gKiBAcmFuZ2U6XHRhcmd1bWVudCBzdHJ1Y3R1cmVcbi0gKlxuLSAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIGVycm9yIGNvZGVzOlxuKy8qXG4rICogaG1tX2RvX2ZhdWx0IC0gZmF1bHQgaW4gYSByYW5nZSByZWNvcmRlZCBieSBhIHdhbGsgY2FsbGJhY2tcbiAgKlxuLSAqIC1FSU5WQUw6XHRJbnZhbGlkIGFyZ3VtZW50cyBvciBtbSBvciB2aXJ0dWFsIGFkZHJlc3MgaXMgaW4gYW4gaW52YWxpZCB2bWFcbi0gKlx0XHQoZS5nLiwgZGV2aWNlIGZpbGUgdm1hKS5cbi0gKiAtRU5PTUVNOlx0T3V0IG9mIG1lbW9yeS5cbi0gKiAtRVBFUk06XHRJbnZhbGlkIHBlcm1pc3Npb24gKGUuZy4sIGFza2luZyBmb3Igd3JpdGUgYW5kIHJhbmdlIGlzIHJlYWRcbi0gKlx0XHRvbmx5KS5cbi0gKiAtRUJVU1k6XHRUaGUgcmFuZ2UgaGFzIGJlZW4gaW52YWxpZGF0ZWQgYW5kIHRoZSBjYWxsZXIgbmVlZHMgdG8gd2FpdCBmb3Jcbi0gKlx0XHR0aGUgaW52YWxpZGF0aW9uIHRvIGZpbmlzaC5cbi0gKiAtRUZBVUxUOiAgICAgQSBwYWdlIHdhcyByZXF1ZXN0ZWQgdG8gYmUgdmFsaWQgYW5kIGNvdWxkIG5vdCBiZSBtYWRlIHZhbGlkXG4tICogICAgICAgICAgICAgIGllIGl0IGhhcyBubyBiYWNraW5nIFZNQSBvciBpdCBpcyBpbGxlZ2FsIHRvIGFjY2Vzc1xuKyAqIENhbGxlZCBmcm9tIHRoZSBvdXRlciBsb29wIGluIGhtbV9yYW5nZV9mYXVsdF9sb2NrZWQoKSBhZnRlciBhIGNhbGxiYWNrXG4rICogcmV0dXJuZWQgSE1NX0ZBVUxUX1BFTkRJTkcuICBBdCB0aGlzIHBvaW50IHdlIGhvbGQgb25seSBtbWFwX2xvY2s7XG4rICogdGhlIHBhZ2UtdGFibGUgc3BpbmxvY2sgYW5kIGFueSBodWdldGxiX3ZtYV9sb2NrIGFjcXVpcmVkIGJ5IHRoZSB3YWxrXG4rICogZnJhbWV3b3JrIGhhdmUgYWxyZWFkeSBiZWVuIHJlbGVhc2VkIGJ5IHRoZSB1bndpbmQuXG4gICpcbi0gKiBUaGlzIGlzIHNpbWlsYXIgdG8gZ2V0X3VzZXJfcGFnZXMoKSwgZXhjZXB0IHRoYXQgaXQgY2FuIHJlYWQgdGhlIHBhZ2UgdGFibGVzXG4tICogd2l0aG91dCBtdXRhdGluZyB0aGVtIChpZSBjYXVzaW5nIGZhdWx0cykuXG4rICogUmV0dXJucyAtRUJVU1kgb24gc3VjY2VzcyAoYWxsIHBhZ2VzIGZhdWx0ZWQsIGNhbGxlciBzaG91bGQgcmUtd2FsaykuXG4rICogUmV0dXJucyBhIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuXG4gICovXG4taW50IGhtbV9yYW5nZV9mYXVsdChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSlcbitzdGF0aWMgaW50IGhtbV9kb19mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbitcdFx0XHRzdHJ1Y3QgaG1tX3ZtYV93YWxrICpobW1fdm1hX3dhbGspXG4re1xuK1x0dW5zaWduZWQgbG9uZyBhZGRyID0gaG1tX3ZtYV93YWxrLVx1MDAzZWxhc3Q7XG4rXHR1bnNpZ25lZCBsb25nIGVuZCA9IGhtbV92bWFfd2Fsay1cdTAwM2VlbmQ7XG4rXHR1bnNpZ25lZCBpbnQgcmVxdWlyZWRfZmF1bHQgPSBobW1fdm1hX3dhbGstXHUwMDNlcmVxdWlyZWRfZmF1bHQ7XG4rXHR1bnNpZ25lZCBpbnQgZmF1bHRfZmxhZ3MgPSBGQVVMVF9GTEFHX1JFTU9URTtcbitcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuK1xuK1x0aWYgKGhtbV92bWFfd2Fsay1cdTAwM2Vsb2NrZWQpXG4rXHRcdGZhdWx0X2ZsYWdzIHw9IEZBVUxUX0ZMQUdfQUxMT1dfUkVUUlkgfCBGQVVMVF9GTEFHX0tJTExBQkxFO1xuK1xuK1x0dm1hID0gdm1hX2xvb2t1cChtbSwgYWRkcik7XG4rXHRpZiAoIXZtYSlcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXG4rXHRpZiAocmVxdWlyZWRfZmF1bHQgXHUwMDI2IEhNTV9ORUVEX1dSSVRFX0ZBVUxUKSB7XG4rXHRcdGlmICghKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fV1JJVEUpKVxuK1x0XHRcdHJldHVybiAtRVBFUk07XG4rXHRcdGZhdWx0X2ZsYWdzIHw9IEZBVUxUX0ZMQUdfV1JJVEU7XG4rXHR9XG4rXG4rXHRmb3IgKDsgYWRkciBcdTAwM2MgZW5kOyBhZGRyICs9IFBBR0VfU0laRSkge1xuK1x0XHR2bV9mYXVsdF90IHJldDtcbitcbitcdFx0cmV0ID0gaGFuZGxlX21tX2ZhdWx0KHZtYSwgYWRkciwgZmF1bHRfZmxhZ3MsIE5VTEwpO1xuK1xuK1x0XHRpZiAocmV0IFx1MDAyNiAoVk1fRkFVTFRfQ09NUExFVEVEIHwgVk1fRkFVTFRfUkVUUlkpKSB7XG4rXHRcdFx0KmhtbV92bWFfd2Fsay1cdTAwM2Vsb2NrZWQgPSBmYWxzZTtcbitcdFx0XHRyZXR1cm4gSE1NX0ZBVUxUX1VOTE9DS0VEO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChyZXQgXHUwMDI2IFZNX0ZBVUxUX0VSUk9SKSB7XG4rXHRcdFx0aW50IGVyciA9IHZtX2ZhdWx0X3RvX2Vycm5vKHJldCwgMCk7XG4rXG4rXHRcdFx0aWYgKFdBUk5fT04oIWVycikpXG4rXHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuK1xuK1x0XHRcdHJldHVybiBlcnI7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiAtRUJVU1k7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSwgYm9vbCAqbG9ja2VkKVxuIHtcbiBcdHN0cnVjdCBobW1fdm1hX3dhbGsgaG1tX3ZtYV93YWxrID0ge1xuIFx0XHQucmFuZ2UgPSByYW5nZSxcbitcdFx0LmxvY2tlZCA9IGxvY2tlZCxcbiBcdFx0Lmxhc3QgPSByYW5nZS1cdTAwM2VzdGFydCxcbiBcdH07XG4gXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHJhbmdlLVx1MDAzZW5vdGlmaWVyLVx1MDAzZW1tO1xuQEAgLTY3NCw2ICs3MDUsMjIgQEAgaW50IGhtbV9yYW5nZV9mYXVsdChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSlcbiBcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIFx0XHRyZXQgPSB3YWxrX3BhZ2VfcmFuZ2UobW0sIGhtbV92bWFfd2Fsay5sYXN0LCByYW5nZS1cdTAwM2VlbmQsXG4gXHRcdFx0XHQgICAgICBcdTAwMjZobW1fd2Fsa19vcHMsIFx1MDAyNmhtbV92bWFfd2Fsayk7XG4rXHRcdC8qXG4rXHRcdCAqIFdoZW4gSE1NX0ZBVUxUX1BFTkRJTkcgaXMgcmV0dXJuZWQgYSB3YWxrIGNhbGxiYWNrXG4rXHRcdCAqIHJlY29yZGVkIGEgcmFuZ2UgdGhhdCBuZWVkcyBoYW5kbGVfbW1fZmF1bHQoKTtcbitcdFx0ICogaG1tX2RvX2ZhdWx0KCkgcnVucyB0aGUgZmF1bHQgb3V0c2lkZSB3YWxrX3BhZ2VfcmFuZ2UoKVxuK1x0XHQgKiAoc28gbm8gcGFnZS10YWJsZSBvciBodWdldGxiX3ZtYV9sb2NrIGlzIGhlbGQpIGFuZFxuK1x0XHQgKiByZXR1cm5zIC1FQlVTWSBzbyB0aGUgbG9vcCByZS13YWxrcyBhbmQgcGlja3MgdXAgdGhlXG4rXHRcdCAqIG5vdy1wcmVzZW50IGVudHJpZXMuXG4rXHRcdCAqL1xuK1x0XHRpZiAocmV0ID09IEhNTV9GQVVMVF9QRU5ESU5HKSB7XG4rXHRcdFx0cmV0ID0gaG1tX2RvX2ZhdWx0KG1tLCBcdTAwMjZobW1fdm1hX3dhbGspO1xuK1x0XHRcdGlmIChyZXQgPT0gSE1NX0ZBVUxUX1VOTE9DS0VEKSB7XG4rXHRcdFx0XHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4rXHRcdFx0XHRcdHJldHVybiAtRUlOVFI7XG4rXHRcdFx0XHRyZXR1cm4gLUVCVVNZO1xuK1x0XHRcdH1cbitcdFx0fVxuIFx0XHQvKlxuIFx0XHQgKiBXaGVuIC1FQlVTWSBpcyByZXR1cm5lZCB0aGUgbG9vcCByZXN0YXJ0cyB3aXRoXG4gXHRcdCAqIGhtbV92bWFfd2Fsay5sYXN0IHNldCB0byBhbiBhZGRyZXNzIHRoYXQgaGFzIG5vdCBiZWVuIHN0b3JlZFxuQEAgLTY4Myw4ICs3MzAsMTAwIEBAIGludCBobW1fcmFuZ2VfZmF1bHQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpXG4gXHR9IHdoaWxlIChyZXQgPT0gLUVCVVNZKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuK1xuKy8qKlxuKyAqIGhtbV9yYW5nZV9mYXVsdCAtIHRyeSB0byBmYXVsdCBzb21lIGFkZHJlc3MgaW4gYSB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2VcbisgKiBAcmFuZ2U6XHRhcmd1bWVudCBzdHJ1Y3R1cmVcbisgKlxuKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIGVycm9yIGNvZGVzOlxuKyAqXG4rICogLUVJTlZBTDpcdEludmFsaWQgYXJndW1lbnRzIG9yIG1tIG9yIHZpcnR1YWwgYWRkcmVzcyBpcyBpbiBhbiBpbnZhbGlkIHZtYVxuKyAqXHRcdChlLmcuLCBkZXZpY2UgZmlsZSB2bWEpLlxuKyAqIC1FTk9NRU06XHRPdXQgb2YgbWVtb3J5LlxuKyAqIC1FUEVSTTpcdEludmFsaWQgcGVybWlzc2lvbiAoZS5nLiwgYXNraW5nIGZvciB3cml0ZSBhbmQgcmFuZ2UgaXMgcmVhZFxuKyAqXHRcdG9ubHkpLlxuKyAqIC1FQlVTWTpcdFRoZSByYW5nZSBoYXMgYmVlbiBpbnZhbGlkYXRlZCBhbmQgdGhlIGNhbGxlciBuZWVkcyB0byB3YWl0IGZvclxuKyAqXHRcdHRoZSBpbnZhbGlkYXRpb24gdG8gZmluaXNoLlxuKyAqIC1FRkFVTFQ6ICAgICBBIHBhZ2Ugd2FzIHJlcXVlc3RlZCB0byBiZSB2YWxpZCBhbmQgY291bGQgbm90IGJlIG1hZGUgdmFsaWRcbisgKiAgICAgICAgICAgICAgaWUgaXQgaGFzIG5vIGJhY2tpbmcgVk1BIG9yIGl0IGlzIGlsbGVnYWwgdG8gYWNjZXNzXG4rICpcbisgKiBUaGlzIGlzIHNpbWlsYXIgdG8gZ2V0X3VzZXJfcGFnZXMoKSwgZXhjZXB0IHRoYXQgaXQgY2FuIHJlYWQgdGhlIHBhZ2UgdGFibGVzXG4rICogd2l0aG91dCBtdXRhdGluZyB0aGVtIChpZSBjYXVzaW5nIGZhdWx0cykuXG4rICpcbisgKiBUaGUgbW1hcCBsb2NrIG11c3QgYmUgaGVsZCBieSB0aGUgY2FsbGVyIGFuZCB3aWxsIHJlbWFpbiBoZWxkIG9uIHJldHVybi5cbisgKiBOZXcgdXNlcnMgc2hvdWxkIHByZWZlciBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpIHVubGVzcyB0aGV5XG4rICogc3BlY2lmaWNhbGx5IG5lZWQgdG8ga2VlcCB0aGUgbW1hcCBsb2NrIGhlbGQgYWNyb3NzIHRoZSBjYWxsLiBUaGlzIGhlbHBlclxuKyAqIGNhbm5vdCBzdXBwb3J0IFZNQXMgd2hvc2UgZmF1bHQgaGFuZGxlcnMgbmVlZCB0byBkcm9wIHRoZSBtbWFwIGxvY2suXG4rICovXG4raW50IGhtbV9yYW5nZV9mYXVsdChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSlcbit7XG4rXHRyZXR1cm4gaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZChyYW5nZSwgTlVMTCk7XG4rfVxuIEVYUE9SVF9TWU1CT0woaG1tX3JhbmdlX2ZhdWx0KTtcbiBcbisvKipcbisgKiBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCAtIGZhdWx0IGluIGEgcmFuZ2Ugd2l0aCBhIHJldHJ5IHRpbWVvdXRcbisgKiBAcmFuZ2U6XHRhcmd1bWVudCBzdHJ1Y3R1cmVcbisgKiBAdGltZW91dDpcdHRpbWVvdXQgaW4gamlmZmllcyBmb3IgaW50ZXJuYWwgLUVCVVNZIHJldHJpZXMsIG9yIDAgdG8gcmV0cnlcbisgKlx0XHRpbmRlZmluaXRlbHlcbisgKlxuKyAqIFRoZSBjYWxsZXIgbXVzdCBub3QgaG9sZCB0aGUgbW1hcCBsb2NrLiBUaGUgZnVuY3Rpb24gdGFrZXMgdGhlIG1tYXAgcmVhZFxuKyAqIGxvY2sgaW50ZXJuYWxseSBhbmQgYWxsb3dzIGhhbmRsZV9tbV9mYXVsdCgpIHRvIGRyb3AgaXQgZHVyaW5nIGZhdWx0cy4gSWZcbisgKiB0aGUgbW1hcCBsb2NrIGlzIGRyb3BwZWQgb3IgdGhlIHJhbmdlIGlzIGludmFsaWRhdGVkLCB0aGUgZnVuY3Rpb24gcmVmcmVzaGVzXG4rICogcmFuZ2UtXHUwMDNlbm90aWZpZXJfc2VxIGFuZCByZXN0YXJ0cyB0aGUgd2FsayBpbnRlcm5hbGx5LlxuKyAqXG4rICogUGFzc2luZyAwIGZvciBAdGltZW91dCByZXRyaWVzIGluZGVmaW5pdGVseS4gQSBub24temVybyBAdGltZW91dCBpcyBhIGNhbGxlclxuKyAqIHBvbGljeSBsaW1pdCBmb3IgcmVwZWF0ZWQgbW11LW5vdGlmaWVyIGludmFsaWRhdGlvbiByZXRyaWVzLiBITU0gZG9lcyBub3RcbisgKiBpbnRlcnJ1cHQgcGFnZSBmYXVsdCBoYW5kbGluZyB3aGVuIHRoZSB0aW1lb3V0IGV4cGlyZXMsIGJ1dCByZXR1cm5zIC1FQlVTWVxuKyAqIGlmIHRoZSByZXRyeSBidWRnZXQgaXMgZXhoYXVzdGVkIGJlZm9yZSBhIHN0YWJsZSByYW5nZSBpcyBvYnRhaW5lZC5cbisgKlxuKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG9uZSBvZiB0aGUgZXJyb3IgY29kZXMgZG9jdW1lbnRlZCBmb3JcbisgKiBobW1fcmFuZ2VfZmF1bHQoKS4gLUVJTlRSIGlzIHJldHVybmVkIGlmIG1tYXBfbG9jayBhY3F1aXNpdGlvbiBpc1xuKyAqIGludGVycnVwdGVkIG9yIGEgZmF0YWwgc2lnbmFsIGlzIHBlbmRpbmcgZHVyaW5nIHJldHJ5IGhhbmRsaW5nLlxuKyAqL1xuK2ludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSxcbitcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0KVxuK3tcbitcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gcmFuZ2UtXHUwMDNlbm90aWZpZXItXHUwMDNlbW07XG4rXHR1bnNpZ25lZCBsb25nIGRlYWRsaW5lID0gMDtcbitcdGJvb2wgbG9ja2VkID0gZmFsc2U7XG4rXHRpbnQgcmV0O1xuK1xuK1x0ZG8ge1xuK1x0XHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4rXHRcdFx0cmV0dXJuIC1FSU5UUjtcbitcbitcdFx0aWYgKHRpbWVvdXQpIHtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIElmIHRoZSBwcmV2aW91cyBmYXVsdCBkcm9wcGVkIG1tYXBfbG9jaywgdGhlbiB0aGUgZmF1bHRcbitcdFx0XHQgKiBoYW5kbGVyIG1hZGUgcHJvZ3Jlc3MuIFJlc3RhcnQgdGhlIHJldHJ5IHRpbWVvdXQgaW4gdGhhdFxuK1x0XHRcdCAqIGNhc2UsIGJ1dCBrZWVwIHRoZSBleGlzdGluZyBkZWFkbGluZSBmb3Igb3JkaW5hcnkgLUVCVVNZXG4rXHRcdFx0ICogcmV0cmllcy5cbitcdFx0XHQgKi9cbitcdFx0XHRpZiAoIWxvY2tlZClcbitcdFx0XHRcdGRlYWRsaW5lID0gamlmZmllcyArIHRpbWVvdXQ7XG4rXG4rXHRcdFx0aWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZGVhZGxpbmUpKVxuK1x0XHRcdFx0cmV0dXJuIC1FQlVTWTtcbitcdFx0fVxuK1xuK1x0XHRyYW5nZS1cdTAwM2Vub3RpZmllcl9zZXEgPVxuK1x0XHRcdG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKHJhbmdlLVx1MDAzZW5vdGlmaWVyKTtcbitcbitcdFx0cmV0ID0gbW1hcF9yZWFkX2xvY2tfa2lsbGFibGUobW0pO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdGxvY2tlZCA9IHRydWU7XG4rXHRcdHJldCA9IGhtbV9yYW5nZV9mYXVsdF9sb2NrZWQocmFuZ2UsIFx1MDAyNmxvY2tlZCk7XG4rXHRcdGlmIChsb2NrZWQpXG4rXHRcdFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4rXHR9IHdoaWxlIChyZXQgPT0gLUVCVVNZKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK0VYUE9SVF9TWU1CT0woaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQpO1xuK1xuIC8qKlxuICAqIGhtbV9kbWFfbWFwX2FsbG9jIC0gQWxsb2NhdGUgSE1NIG1hcCBzdHJ1Y3R1cmVcbiAgKiBAZGV2OiBkZXZpY2UgdG8gYWxsb2NhdGUgc3RydWN0dXJlIGZvclxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmNcbmluZGV4IDZmY2NiZGFiMDJlZTgxLi41YWNiNzI4NjY2ZjhjMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xuQEAgLTI5LDYgKzI5LDEwIEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9pb2N0bC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3RpbWUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9zeXNjYWxsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvZXZlbnRmZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdXNlcmZhdWx0ZmQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3BvbGwuaFx1MDAzZVxuIFxuIC8qXG4gICogVGhpcyBpcyBhIHByaXZhdGUgVUFQSSB0byB0aGUga2VybmVsIHRlc3QgbW9kdWxlIHNvIGl0IGlzbid0IGV4cG9ydGVkXG5AQCAtMjk1Miw0ICsyOTU2LDE1MCBAQCBURVNUX0ZfVElNRU9VVChobW0sIGJlbmNobWFya190aHBfbWlncmF0aW9uLCAxMjApXG4gXHRcdFx0XHRcdFx1MDAyNnRocF9yZXN1bHRzLCBcdTAwMjZyZWd1bGFyX3Jlc3VsdHMpO1xuIFx0fVxuIH1cbisvKlxuKyAqIFRlc3QgdGhhdCBITU0gY2FuIGZhdWx0IGluIHBhZ2VzIGJhY2tlZCBieSB1c2VyZmF1bHRmZCB1c2luZyB0aGVcbisgKiBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpIHBhdGggd2l0aCBubyB0aW1lb3V0LiBUaGlzIGV4ZXJjaXNlc1xuKyAqIHRoZSBsb2NrLWRyb3AgcmV0cnkgbG9naWMgaW4gdGhlIEhNTSBmcmFtZXdvcmsuXG4rICovXG4rc3RydWN0IHVmZmRfdGhyZWFkX2FyZ3Mge1xuK1x0aW50IHVmZmQ7XG4rXHRpbnQgc3RvcF9mZDtcbitcdHZvaWQgKnBhZ2VfYnVmZmVyO1xuK1x0dW5zaWduZWQgbG9uZyBwYWdlX3NpemU7XG4rfTtcbitcbitzdGF0aWMgdm9pZCAqdWZmZF9oYW5kbGVyX3RocmVhZCh2b2lkICphcmcpXG4re1xuK1x0c3RydWN0IHVmZmRfdGhyZWFkX2FyZ3MgKmFyZ3MgPSBhcmc7XG4rXHRzdHJ1Y3QgdWZmZF9tc2cgbXNnO1xuK1x0c3RydWN0IHVmZmRpb19jb3B5IGNvcHk7XG4rXHRzdHJ1Y3QgcG9sbGZkIHBvbGxmZFsyXTtcbitcdGludCByZXQ7XG4rXG4rXHRwb2xsZmRbMF0uZmQgPSBhcmdzLVx1MDAzZXVmZmQ7XG4rXHRwb2xsZmRbMF0uZXZlbnRzID0gUE9MTElOO1xuK1x0cG9sbGZkWzFdLmZkID0gYXJncy1cdTAwM2VzdG9wX2ZkO1xuK1x0cG9sbGZkWzFdLmV2ZW50cyA9IFBPTExJTjtcbitcbitcdHdoaWxlICgxKSB7XG4rXHRcdHJldCA9IHBvbGwocG9sbGZkLCAyLCAtMSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjPSAwKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHRpZiAocG9sbGZkWzFdLnJldmVudHMpXG4rXHRcdFx0YnJlYWs7XG4rXHRcdGlmICghKHBvbGxmZFswXS5yZXZlbnRzIFx1MDAyNiBQT0xMSU4pKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRyZXQgPSByZWFkKGFyZ3MtXHUwMDNldWZmZCwgXHUwMDI2bXNnLCBzaXplb2YobXNnKSk7XG4rXHRcdGlmIChyZXQgIT0gc2l6ZW9mKG1zZykpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdGlmIChtc2cuZXZlbnQgIT0gVUZGRF9FVkVOVF9QQUdFRkFVTFQpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdC8qIEZpbGwgdGhlIHBhZ2Ugd2l0aCBhIGtub3duIHBhdHRlcm4gKi9cbitcdFx0bWVtc2V0KGFyZ3MtXHUwMDNlcGFnZV9idWZmZXIsIDB4QUIsIGFyZ3MtXHUwMDNlcGFnZV9zaXplKTtcbitcbitcdFx0Y29weS5kc3QgPSBtc2cuYXJnLnBhZ2VmYXVsdC5hZGRyZXNzIFx1MDAyNiB+KGFyZ3MtXHUwMDNlcGFnZV9zaXplIC0gMSk7XG4rXHRcdGNvcHkuc3JjID0gKHVuc2lnbmVkIGxvbmcpYXJncy1cdTAwM2VwYWdlX2J1ZmZlcjtcbitcdFx0Y29weS5sZW4gPSBhcmdzLVx1MDAzZXBhZ2Vfc2l6ZTtcbitcdFx0Y29weS5tb2RlID0gMDtcbitcdFx0Y29weS5jb3B5ID0gMDtcbitcbitcdFx0cmV0ID0gaW9jdGwoYXJncy1cdTAwM2V1ZmZkLCBVRkZESU9fQ09QWSwgXHUwMDI2Y29weSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0YnJlYWs7XG4rXHR9XG4rXG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rVEVTVF9GKGhtbSwgdXNlcmZhdWx0ZmRfcmVhZClcbit7XG4rXHRzdHJ1Y3QgaG1tX2J1ZmZlciAqYnVmZmVyO1xuK1x0c3RydWN0IHVmZmRfdGhyZWFkX2FyZ3MgdWZmZF9hcmdzO1xuK1x0dW5zaWduZWQgbG9uZyBucGFnZXM7XG4rXHR1bnNpZ25lZCBsb25nIHNpemU7XG4rXHR1bnNpZ25lZCBsb25nIGk7XG4rXHR1bnNpZ25lZCBjaGFyICpwdHI7XG4rXHRwdGhyZWFkX3QgdGhyZWFkO1xuK1x0aW50IHVmZmQ7XG4rXHRpbnQgc3RvcF9mZDtcbitcdGludCByZXQ7XG4rXHRzdHJ1Y3QgdWZmZGlvX2FwaSBhcGk7XG4rXHRzdHJ1Y3QgdWZmZGlvX3JlZ2lzdGVyIHJlZztcbitcdHVpbnQ2NF90IHN0b3AgPSAxO1xuK1x0c3NpemVfdCBud3JpdGU7XG4rXG4rXHRucGFnZXMgPSA0O1xuK1x0c2l6ZSA9IG5wYWdlcyBcdTAwM2NcdTAwM2Mgc2VsZi1cdTAwM2VwYWdlX3NoaWZ0O1xuK1xuK1x0LyogQ3JlYXRlIHVzZXJmYXVsdGZkICovXG4rXHR1ZmZkID0gc3lzY2FsbChfX05SX3VzZXJmYXVsdGZkLCBPX0NMT0VYRUMgfCBPX05PTkJMT0NLKTtcbitcdGlmICh1ZmZkIFx1MDAzYyAwKVxuK1x0XHRTS0lQKHJldHVybiwgXCJ1c2VyZmF1bHRmZCBub3QgYXZhaWxhYmxlXCIpO1xuK1xuK1x0YXBpLmFwaSA9IFVGRkRfQVBJO1xuK1x0YXBpLmZlYXR1cmVzID0gMDtcbitcdHJldCA9IGlvY3RsKHVmZmQsIFVGRkRJT19BUEksIFx1MDAyNmFwaSk7XG4rXHRBU1NFUlRfRVEocmV0LCAwKTtcbitcbitcdGJ1ZmZlciA9IG1hbGxvYyhzaXplb2YoKmJ1ZmZlcikpO1xuK1x0QVNTRVJUX05FKGJ1ZmZlciwgTlVMTCk7XG4rXG4rXHRidWZmZXItXHUwMDNlZmQgPSAtMTtcbitcdGJ1ZmZlci1cdTAwM2VzaXplID0gc2l6ZTtcbitcdGJ1ZmZlci1cdTAwM2VtaXJyb3IgPSBtYWxsb2Moc2l6ZSk7XG4rXHRBU1NFUlRfTkUoYnVmZmVyLVx1MDAzZW1pcnJvciwgTlVMTCk7XG4rXG4rXHQvKiBDcmVhdGUgYW5vbnltb3VzIG1hcHBpbmcgKi9cbitcdGJ1ZmZlci1cdTAwM2VwdHIgPSBtbWFwKE5VTEwsIHNpemUsXG4rXHRcdFx0ICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbitcdFx0XHQgICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsXG4rXHRcdFx0ICAgLTEsIDApO1xuK1x0QVNTRVJUX05FKGJ1ZmZlci1cdTAwM2VwdHIsIE1BUF9GQUlMRUQpO1xuK1xuK1x0LyogUmVnaXN0ZXIgdGhlIHJlZ2lvbiB3aXRoIHVzZXJmYXVsdGZkICovXG4rXHRyZWcucmFuZ2Uuc3RhcnQgPSAodW5zaWduZWQgbG9uZylidWZmZXItXHUwMDNlcHRyO1xuK1x0cmVnLnJhbmdlLmxlbiA9IHNpemU7XG4rXHRyZWcubW9kZSA9IFVGRkRJT19SRUdJU1RFUl9NT0RFX01JU1NJTkc7XG4rXHRyZXQgPSBpb2N0bCh1ZmZkLCBVRkZESU9fUkVHSVNURVIsIFx1MDAyNnJlZyk7XG4rXHRBU1NFUlRfRVEocmV0LCAwKTtcbitcbitcdC8qIFNldCB1cCB0aGUgaGFuZGxlciB0aHJlYWQgKi9cbitcdHVmZmRfYXJncy51ZmZkID0gdWZmZDtcbitcdHN0b3BfZmQgPSBldmVudGZkKDAsIEVGRF9DTE9FWEVDKTtcbitcdEFTU0VSVF9HRShzdG9wX2ZkLCAwKTtcbitcdHVmZmRfYXJncy5zdG9wX2ZkID0gc3RvcF9mZDtcbitcdHVmZmRfYXJncy5wYWdlX2J1ZmZlciA9IG1hbGxvYyhzZWxmLVx1MDAzZXBhZ2Vfc2l6ZSk7XG4rXHRBU1NFUlRfTkUodWZmZF9hcmdzLnBhZ2VfYnVmZmVyLCBOVUxMKTtcbitcdHVmZmRfYXJncy5wYWdlX3NpemUgPSBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZTtcbitcbitcdHJldCA9IHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZCwgTlVMTCwgdWZmZF9oYW5kbGVyX3RocmVhZCwgXHUwMDI2dWZmZF9hcmdzKTtcbitcdEFTU0VSVF9FUShyZXQsIDApO1xuK1xuK1x0LypcbitcdCAqIFVzZSB0aGUgdW5sb2NrZWQgcmVhZCBwYXRoIHdoaWNoIGFsbG93cyB0aGUgbW1hcCBsb2NrIHRvIGJlXG4rXHQgKiBkcm9wcGVkIGR1cmluZyB0aGUgZmF1bHQsIGVuYWJsaW5nIHVzZXJmYXVsdGZkIHJlc29sdXRpb24uXG4rXHQgKi9cbitcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVx1MDAzZWZkLCBITU1fRE1JUlJPUl9SRUFEX1VOTE9DS0VELFxuK1x0XHRcdCAgICAgIGJ1ZmZlciwgbnBhZ2VzKTtcbitcdEFTU0VSVF9FUShyZXQsIDApO1xuK1x0QVNTRVJUX0VRKGJ1ZmZlci1cdTAwM2VjcGFnZXMsIG5wYWdlcyk7XG4rXG4rXHQvKiBWZXJpZnkgdGhlIGRldmljZSByZWFkIHRoZSBkYXRhIGZpbGxlZCBieSB0aGUgdWZmZCBoYW5kbGVyICovXG4rXHRwdHIgPSBidWZmZXItXHUwMDNlbWlycm9yO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2l6ZTsgKytpKVxuK1x0XHRBU1NFUlRfRVEocHRyW2ldLCAodW5zaWduZWQgY2hhcikweEFCKTtcbitcbitcdG53cml0ZSA9IHdyaXRlKHN0b3BfZmQsIFx1MDAyNnN0b3AsIHNpemVvZihzdG9wKSk7XG4rXHRBU1NFUlRfRVEobndyaXRlLCBzaXplb2Yoc3RvcCkpO1xuK1x0cHRocmVhZF9qb2luKHRocmVhZCwgTlVMTCk7XG4rXHRjbG9zZShzdG9wX2ZkKTtcbitcdGZyZWUodWZmZF9hcmdzLnBhZ2VfYnVmZmVyKTtcbitcdGNsb3NlKHVmZmQpO1xuK1x0aG1tX2J1ZmZlcl9mcmVlKGJ1ZmZlcik7XG4rfVxuK1xuK1xuIFRFU1RfSEFSTkVTU19NQUlOXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDowOToxMS4zMzAzMzM0NjVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjQyNDk3Nzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBITU0gUGF0Y2ggU2VyaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMsIGFuZCBpdCdzIG1ha2luZyBzb21lIHByZXR0eSBmdW5kYW1lbnRhbCBjaGFuZ2VzIHRvIHRoZSBIb3N0IE1lbW9yeSBNYW5hZ2VtZW50IChITU0pIGNvZGUuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gdGhydXN0IGlzIHRvIGludHJvZHVjZSB0aGlzIG5ldyBmdW5jdGlvbiwgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YCwgYWxvbmdzaWRlIGEgbG9ja2VkIHZlcnNpb24gb2YgdGhlIGV4aXN0aW5nIGBobW1fcmFuZ2VfZmF1bHRgLiBJIHNlZSB0aGF0IHRoZSBwYXRjaCB0b3VjaGVzIGEgYnVuY2ggb2YgZmlsZXM6IGBtbS9obW0uY2AsIGBpbmNsdWRlL2xpbnV4L2htbS5oYCwgdGhlIGRvY3VtZW50YXRpb24sIGFuZCB0aGVuIGEgc2xldyBvZiBkcml2ZXIgZmlsZXMg4oCTIEFNRCwgRFJNLCBOb3V2ZWF1LCBIeXBlci1WLCBJbmZpbmliYW5kLCBhbmQgZXZlbiBzb21lIHRlc3QgY29kZS4gQ2xlYXJseSwgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlOyBpdCdzIGdldHRpbmcgaXRzIGhhbmRzIGRpcnR5IGluIEhNTSdzIGNvcmUgbG9naWMgYW5kIGRpcmVjdGx5IGltcGFjdGluZyBob3cgdGhlc2UgZHJpdmVycyBpbnRlcmFjdCB3aXRoIG1lbW9yeS4gVGhlIGFkZGl0aW9uIG9mIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAsIGluIHBhcnRpY3VsYXIsIGluZGljYXRlcyBhIHRhcmdldGVkIHVwZGF0ZSBmb3IgZHJpdmVyIHVzZS5cblxuTXkgbmV4dCBtb3ZlIGlzIHRvIHplcm8gaW4gb24gc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBmb3IgZnV6emluZy4gSSdtIHRoaW5raW5nLCBiYXNlZCBvbiB0aGlzIGNoYW5nZSwgSSdsbCBuZWVkIHRvIGZvY3VzIG9uOiBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgLCBgaG1tX3JhbmdlX2ZhdWx0YCwgYGhtbV9kb19mYXVsdGAsIGBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkYCwgYW5kIGBobW1fcmVjb3JkX2ZhdWx0YC4gVGhlc2UgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFuZCB0aGUgcmVsYXRlZCBpbnRlcm5hbCBmdW5jdGlvbnMuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlLiBXaGF0IGVuYWJsZXMgdGhpcyBITU0gZnVuY3Rpb25hbGl0eT8gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiB0byB1bmRlcnN0YW5kIHdoZW4gYGhtbV9yYW5nZV9mYXVsdGAgaXMgZXZlbiBjb21waWxlZC4gSSdsbCBzZWFyY2ggZm9yIGBobW1fcmFuZ2VfZmF1bHRgIHdpdGhpbiBgbW0vaG1tLmNgIGFuZCBgbW0vS2NvbmZpZ2AsIGJ1dCBJIG5lZWQgdG8gZ28gZnVydGhlci4gSG1tLCBJIGtub3cgYG1tL2htbS5jYCBpcyBjb21waWxlZCBjb25kaXRpb25hbGx5LCBkZXBlbmRpbmcgb24gc29tZSBjb25maWcgdmFyaWFibGVzLiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgYG1tL01ha2VmaWxlYCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSBjb25maWd1cmF0aW9ucyB0aGF0IGNvbnRyb2wgaXRzIGluY2x1c2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2NjcsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDowOToxNy41NzI4MzQyMDhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA0NTgyODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaG1tLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9MTM4PW9iai0kKENPTkZJR19aT05FX0RFVklDRSkgKz0gbWVtcmVtYXAub1xcbm1tL01ha2VmaWxlOjEzOTpvYmotJChDT05GSUdfSE1NX01JUlJPUikgKz0gaG1tLm9cXG5tbS9NYWtlZmlsZS0xNDAtb2JqLSQoQ09ORklHX01FTUZEX0NSRUFURSkgKz0gbWVtZmQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDowOToxNy42NjMyOTgxNzFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODg2OTQzNTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipIbW0sIGBDT05GSUdfSE1NX01JUlJPUmAgTmVlZGVkPyoqXG5cblJpZ2h0LCBzbyBpdCBsb29rcyBsaWtlIHRoZSBjdXJyZW50IHRhc2sgbmVjZXNzaXRhdGVzIHRoZSB1c2Ugb2YgYENPTkZJR19ITU1fTUlSUk9SYC4gQSBnb29kIHN0YXJ0aW5nIHBvaW50LCBhcyBhbHdheXMsIGlzIHRvIGNoZWNrIGhvdyB0aGlzIGZlYXR1cmUgaXMgYWN0dWFsbHkgKnVzZWQqIGluIHRoZSBjb2RlYmFzZS4gTGV0J3MgZGlnIGludG8gYGxpYi90ZXN0X2htbS5jYC4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlIGV4YW1wbGUgY29uZmlndXJhdGlvbnMgYW5kIHRlc3Qgc2V0dXBzIHJlc2lkZS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciBhIGNsZWFyIGV4YW1wbGUgb2YgaG93IGBDT05GSUdfSE1NX01JUlJPUmAgaXMgZGVmaW5lZCwgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIHNvbWUgaW5kaWNhdGlvbnMgb2YgZGVwZW5kZW50IGNvbmZpZ3VyYXRpb25zIG9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIGl0cyBwcmVzZW5jZS4gVGhpcyBmaWxlIHdpbGwgcHJvYmFibHkgaG9sZCB0aGUga2V5cyB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGZlYXR1cmUgaGFzIGJlZW4gdmFsaWRhdGVkIGFuZCB0aGUgYXNzdW1wdGlvbnMgYWJvdXQgaXRzIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1NTksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDowOToyMC41NTAyNDU4NzNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2MzUwOTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRlc3RfaG1tLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibGliL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9NYWtlZmlsZT0xMDI9b2JqLSQoQ09ORklHX1RFU1RfTE9DS1VQKSArPSB0ZXN0X2xvY2t1cC5vXFxubGliL01ha2VmaWxlOjEwMzpvYmotJChDT05GSUdfVEVTVF9ITU0pICs9IHRlc3RfaG1tLm9cXG5saWIvTWFrZWZpbGUtMTA0LW9iai0kKENPTkZJR19URVNUX0ZSRUVfUEFHRVMpICs9IHRlc3RfZnJlZV9wYWdlcy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAwOjA5OjIwLjY4NjYwMjU2MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMzM3MjAwNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBITU0gQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJIHNlZSB3ZSBuZWVkIGBDT05GSUdfVEVTVF9ITU1gLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgcmVsZXZhbnQgZHJpdmVyIGNvZGUsIHNvIEknbGwgcXVpY2tseSBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9ucyB1c2VkIGluIGBkcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N2bS5jYCBhbmQgYGRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmNgLiBIb3dldmVyLCBJJ20gdGhpbmtpbmcgdGhlIGZvY3VzIGhlcmUgc2hvdWxkIGJlIGNvcmUgSE1NIHRlc3RpbmcsIGFuZCBgVEVTVF9ITU1gIHNlZW1zIGxpa2UgaXQncyBzcGVjaWZpY2FsbHkgdGFpbG9yZWQgZm9yIHRoYXQgcHVycG9zZS4gTGV0J3Mgc3RhcnQgd2l0aCBgVEVTVF9ITU1gIGFzIHRoZSBtb3JlIGRpcmVjdCBwYXRoLiBUbyBtYWtlIHN1cmUsIHRob3VnaCwgbGV0IG1lIGRvdWJsZS1jaGVjayBgbW0vS2NvbmZpZ2AgZm9yIHRoZSBgSE1NX01JUlJPUmAgY29uZmlndXJhdGlvbjsgaXQncyBhbHdheXMgZ29vZCB0byB2ZXJpZnkgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGVkIG9wdGlvbnMgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODkyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDA6MDk6MjQuMDIwMzI0Njc1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTQzNzU2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSE1NX01JUlJPUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTIyOD1jb25maWcgWk9ORV9ERVZJQ0VcXG4tLVxcbm1tL0tjb25maWctMTI0OS0jXFxubW0vS2NvbmZpZzoxMjUwOmNvbmZpZyBITU1fTUlSUk9SXFxubW0vS2NvbmZpZy0xMjUxLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDA6MDk6MjQuMTQxNzY3MTE0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAzMjA3MjMxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEZWNvZGluZyB0aGUgQm9vbCoqXG5cbkFscmlnaHQsIGxldCBtZSBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBITU1fTUlSUk9SYCBpcyBhIEJvb2xlYW4gdmFyaWFibGUsIGxpa2VseSBjb250cm9sbGluZyBzb21lIHNvcnQgb2YgbWlycm9yaW5nIG9yIHJlZmxlY3Rpb24gYmVoYXZpb3Igd2l0aGluIG15IEhpZGRlbiBNYXJrb3YgTW9kZWwgKEhNTSkgaW1wbGVtZW50YXRpb24uIFRoZSBmYWN0IHRoYXQgaXQncyBwcm9iYWJseSBzZWxlY3RlZCBieSBgVEVTVF9ITU1gIHN1Z2dlc3RzIHRoaXMgaXMgcmVsYXRlZCB0byBhIHRlc3RpbmcgY29uZmlndXJhdGlvbi4gSeKAmW0gZ3Vlc3NpbmcsIGJhc2VkIG9uIHByaW9yIGV4cGVyaWVuY2UsIHRoYXQgdGhpcyB0ZXN0IHN1aXRlIHByb2JhYmx5IHRvZ2dsZXMgdmFyaW91cyBtb2RlbCBwYXJhbWV0ZXJzIGFuZCBjb25maWd1cmF0aW9ucyB0byB2YWxpZGF0ZSB0aGUgZnVuY3Rpb25hbGl0eS4gVGhlcmVmb3JlLCBgSE1NX01JUlJPUmAgaXMgbGlrZWx5IGEgY29uZmlndXJhdGlvbiB0byB0ZXN0IGEgbW9kZWwgdmFyaWF0aW9uLiBUaGlzIHNldHVwIGFpbXMgdG8gZW5zdXJlIHRoYXQgdGhlIEhNTSBiZWhhdmVzIGFzIGV4cGVjdGVkIHVuZGVyIGEgcmVmbGVjdGVkIG9yIG1pcnJvcmVkIGRhdGEgc3BhY2Ugc2NlbmFyaW8uIEknZCBuZWVkIG1vcmUgY29udGV4dCBvbiB0aGUgSE1NIHN0cnVjdHVyZSBhbmQgdGVzdGluZyBmcmFtZXdvcmsgdG8gcGluIGRvd24gdGhlICpleGFjdCogcHVycG9zZSwgYnV0IHRoZSBjb3JlIGlkZWEgaXMgY2xlYXI6IGl0J3MgYSB0ZXN0IGZsYWcsIGFuZCBtaXJyb3JpbmcgaXMgdGhlIG1lY2hhbmlzbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyNjgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDowOToyNy4xNzM4NDE2OTRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0Nzk2OTA5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVEVTVF9ITU1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibGliL0tjb25maWcuZGVidWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL0tjb25maWcuZGVidWc9MzMxOD1jb25maWcgVEVTVF9NRU1JTklUXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzI1LVxcbmxpYi9LY29uZmlnLmRlYnVnOjMzMjY6Y29uZmlnIFRFU1RfSE1NXFxubGliL0tjb25maWcuZGVidWctMzMyNy1cXHR0cmlzdGF0ZSBcXFwiVGVzdCBITU0gKEhldGVyb2dlbmVvdXMgTWVtb3J5IE1hbmFnZW1lbnQpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDowOToyNy40MjE4MjExNjJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc5MDI2NjcxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBURVNUX0hNTSBTZWxlY3Rpb24qKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHF1aWNrbHkgZ3Jhc3Agd2hhdCBgVEVTVF9ITU1gIGhhcyBwaWNrZWQuIFRoZSBuYW1lIGl0c2VsZiBpcyBhIGNsdWU7IGl0J3MgbGlrZWx5IGEgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGhpZGRlbiBNYXJrb3YgbW9kZWwgZm9yIHNvbWUgcHVycG9zZS4gVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIG5vdyBpcywgd2hhdCBhcmUgdGhlIGNoYXJhY3RlcmlzdGljcyBvZiB0aGF0IHBhcnRpY3VsYXIgbW9kZWw/IElzIGl0IGEgYmFzaWMgaW1wbGVtZW50YXRpb24sIG9yIGRvZXMgaXQgaW5jb3Jwb3JhdGUgbW9yZSBhZHZhbmNlZCB0ZWNobmlxdWVzPyBXaGF0IGZlYXR1cmVzIHdlcmUgY29uc2lkZXJlZCB3aGVuIHNlbGVjdGluZyBgVEVTVF9ITU1gIGluIHRoaXMgc2l0dWF0aW9uPyBJJ20gYWxyZWFkeSBmb3JtdWxhdGluZyBxdWVzdGlvbnMgaW4gbXkgbWluZCwgc3VjaCBhcyBcIldoYXQgZGF0YSB3YXMgdXNlZCB0byB0cmFpbiBpdD9cIiwgXCJXaGF0IGFyZSB0aGUga2V5IHN0YXRlIHRyYW5zaXRpb25zP1wiIGFuZCBcIldoYXQgb2JqZWN0aXZlIHdhcyB0aGlzIEhNTSBjaG9zZW4gdG8gZnVsZmlsbD9cIiBUaGUgZ29hbCBpcyB0byByYXBpZGx5IGRldGVybWluZSBpZiBgVEVTVF9ITU1gIG1ha2VzIHNlbnNlLCBvciBpZiBJIG5lZWQgdG8gZGlnIGRlZXBlciBmb3IgaXRzIHJhdGlvbmFsZS4gSXQncyBlc3NlbnRpYWxseSBhIHNhbml0eSBjaGVjayBiZWZvcmUgSSBnbyBhbnkgZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2MTksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDowOTozMC4yMTIwOTA0MDJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDAyODU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QuKkhNTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Z1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Zz0zMzI2PWNvbmZpZyBURVNUX0hNTVxcbi0tXFxubGliL0tjb25maWcuZGVidWctMzMyOS1cXHRkZXBlbmRzIG9uIERFVklDRV9QUklWQVRFXFxubGliL0tjb25maWcuZGVidWc6MzMzMDpcXHRzZWxlY3QgSE1NX01JUlJPUlxcbmxpYi9LY29uZmlnLmRlYnVnLTMzMzEtXFx0c2VsZWN0IE1NVV9OT1RJRklFUlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDowOTozMC4zMjYxMjY1ODNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc2MDk3NTkxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIEhNTSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gYFRFU1RfSE1NYCBpcyBwb2ludGluZyBtZSB0b3dhcmRzIGBITU1fTUlSUk9SYC4gVGhhdCdzIHRoZSBwcmltYXJ5IHNlbGVjdGlvbiwgbm90ZWQuIE5vdywgbGV0J3MganVzdCBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGVyZSBhcmVuJ3QgKmFueSogb3RoZXIgcG90ZW50aWFsIEhNTS1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGluIHBsYXkuIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gTGV0J3Mgc2VlLi4uIGlzIGBDT05GSUdfRFJNX05PVVZFQVVfU1ZNYCBhIGZhY3RvciBoZXJlPyBPciBwZXJoYXBzIGBDT05GSUdfRFJNX0dQVVNWTWA/IFRob3NlIHNlZW0gcmVsZXZhbnQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIERSTSwgc28gY2hlY2tpbmcgdGhlbSBpcyBhIG11c3QuIEFuZCB3aGF0IGFib3V0IGBDT05GSUdfSU5GSU5JQkFORF9PTl9ERU1BTkRfUEFHSU5HYD8gSE1NIHRvdWNoZXMgbWVtb3J5LCBzbyB0aGlzIGlzIHdvcnRoIGEgbG9vay4gTWlnaHQgYENPTkZJR19NU0hWYCBvciBgQ09ORklHX0FNRFhETkFgIGhhdmUgYW55IGluZmx1ZW5jZT8gSE1NIGFuZCB2aXJ0dWFsaXphdGlvbiwgYW5kIHRoZW4gSE1NIGFuZCBBTUQncyBETkEgYXJjaGl0ZWN0dXJlLlxuXG5BbHJpZ2h0LCBJIHNob3VsZCBzcGVjaWZpY2FsbHkgY2hlY2sgdGhhdCBgZHJpdmVycy9hY2NlbC9hbWR4ZG5hL0tjb25maWdgIGZpbGUuIEknbSBnb2luZyB0byB3YW50IHRvIHNlZSB0aGUgcmVsYXRpb25zaGlwIGhlcmUsIGlmIHRoZXJlIGlzIG9uZS4gR290dGEgYmUgYWJzb2x1dGVseSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYSBkZXBlbmRlbmN5IG9yIGludGVyYWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzk1NCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDowOTozNC4wODcxMDYyOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyODEzMjAzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRFJNX0FNRFhETkFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9hY2NlbC9hbWR4ZG5hL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAwOjA5OjM0LjI3OTkyODAyM1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTAwNzY1MzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgQ29kZWJhc2U6IElkZW50aWZ5aW5nIHRoZSBSZWxldmFudCBDb25maWd1cmF0aW9uKipcblxuT2theSwgaG9sZCBvbi4gSSd2ZSBnb3QgYSBtb2RpZmljYXRpb24gc2hvd2luZyB1cCBpbiBgZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FpZTJfY3R4LmNgLiBUaGF0J3MgYSBrZXkgZmlsZSBmb3IgdGhlIEFNRCBERE5BIGFjY2VsZXJhdGlvbiBjb250ZXh0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgY2hhbmdlZC4gVGhlIGZpcnN0IHN0ZXAsIGFzIGFsd2F5cywgaXMgdG8gZmlndXJlIG91dCB0aGUgYXNzb2NpYXRlZCBjb25maWd1cmF0aW9uIHRoYXQgZ292ZXJucyB0aGlzIHBhcnQgb2YgdGhlIGRyaXZlci4gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gdGhhdCBjb250cm9scyBob3cgdGhpcyBwb3J0aW9uIG9mIHRoZSBjb2RlIGlzIGJ1aWx0IGFuZCBlbmFibGVkLiBUaW1lIHRvIGdvIGh1bnRpbmcgZm9yIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMuIEkgZXhwZWN0IHRoZXJlJ3MgcHJvYmFibHkgYSBkZWZjb25maWcgb3Igc29tZSBvdGhlciBidWlsZC10aW1lIGZsYWcgaW5mbHVlbmNpbmcgaG93IHRoYXQgcGFydGljdWxhciBBSUUyIGNvbnRleHQgaXMgc2V0IHVwLiBMZXQncyBzZWUgaWYgdGhlIGNvbmZpZyBpcyBpbiB0aGUgcGFyZW50IGRpcmVjdG9yeSwgb3IgaW4gdGhlIGRyaXZlcidzIG93biBkaXJlY3RvcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MzU0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDA6MDk6MzcuMzgwNjk2MTg3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDY3NTIzNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWllMl9jdHgub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2FjY2VsL2FtZHhkbmEvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9hY2NlbC9hbWR4ZG5hL01ha2VmaWxlPTM9YW1keGRuYS15IDo9IFxcXFxcXG4tLVxcbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9NYWtlZmlsZS02LVxcdGFpZV9zbXUubyBcXFxcXFxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL01ha2VmaWxlOjc6XFx0YWllMl9jdHgubyBcXFxcXFxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL01ha2VmaWxlLTgtXFx0YWllMl9lcnJvci5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDA6MDk6MzcuNDg3NDU2NTI4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3MDcwMjg5MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogTW9kdWxlIElkZW50aWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgc29tZXRoaW5nLCBhbmQgdGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgXCJXaGF0J3MgdGhlIG5hbWUgb2YgdGhpcyBwYXJ0aWN1bGFyIG1vZHVsZSBvciBjb21wb25lbnQgSSdtIGRlYWxpbmcgd2l0aD9cIiBUaGUgY3JpdGljYWwgZmlyc3Qgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIG9yIHRyb3VibGVzaG9vdGluZyBhbnkgc3lzdGVtIGlzIHBpbnBvaW50aW5nIGl0cyBzcGVjaWZpYyBpZGVudGl0eS4gQW5kIHRoYXQgbW9kdWxlIG5hbWUsIHN0cmFpZ2h0IHVwLCBpcyBgYW1keGRuYWAuIFRoYXQncyB0aGUga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uIHRvIHN0YXJ0IHdpdGguIFdpdGggdGhhdCBuYW1lIEkgY2FuIGxvb2sgaW50byByZWxldmFudCBkb2N1bWVudGF0aW9uLCByZWxhdGVkIGNvZGUgYW5kIG90aGVyIGltcGxlbWVudGF0aW9ucyB0aGF0IG1heSBiZSByZWxldmFudC4gTm93IEkga25vdyBwcmVjaXNlbHkgd2hhdCBJJ20gZGVhbGluZyB3aXRoLCBhbmQgSSBjYW4gbW92ZSBmb3J3YXJkIGFjY29yZGluZ2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODcxMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAwOjA5OjQwLjE5NDQ4NzgzNVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExODA3ODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFtZHhkbmEteVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2FjY2VsL2FtZHhkbmEvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9hY2NlbC9hbWR4ZG5hL01ha2VmaWxlLTItXFxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL01ha2VmaWxlOjM6YW1keGRuYS15IDo9IFxcXFxcXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvTWFrZWZpbGUtNC1cXHRhaWUubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAwOjA5OjQwLjMwNjMwMTE4NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzU0NzU1NDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipIdW50aW5nIERvd24gdGhlIEFNRCBYRE5BIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSB0aGlua2luZywgXCJXaGVyZSdzIHRoZSBjb25maWcgZm9yIGBhbWR4ZG5hYD9cIiBUaGlzIGlzIGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHNwZWNpZmljIGhhcmR3YXJlIGlzIGJlaW5nIGluaXRpYWxpemVkLCBtYW5hZ2VkLCBhbmQgaW50ZXJhY3RlZCB3aXRoLiBLbm93aW5nIHRoZSBjb25maWd1cmF0aW9uIGlzIGZ1bmRhbWVudGFsIHRvIGp1c3QgYWJvdXQgZXZlcnl0aGluZy4gSXQgZGljdGF0ZXMgdGhlIGF2YWlsYWJsZSByZXNvdXJjZXMsIHRoZSBjbG9jayBzZXR0aW5ncywgcG93ZXIgcHJvZmlsZXMsIGludGVycnVwdCBtYXBwaW5ncyDigJMgdGhlIHdob2xlIHNoZWJhbmcuIFdpdGhvdXQgaXQsIEknbSBiYXNpY2FsbHkgZmx5aW5nIGJsaW5kLiBJcyBpdCBhIGRlZGljYXRlZCBmaWxlPyBQYXJ0IG9mIGEgYnJvYWRlciBzeXN0ZW0gY29uZmlndXJhdGlvbj8gRGVmaW5lZCBpbiBmaXJtd2FyZT8gTWF5YmUgaXQncyBkeW5hbWljYWxseSBnZW5lcmF0ZWQgYmFzZWQgb24gaGFyZHdhcmUgZGV0ZWN0aW9uPyBUaGUgaHVudCBiZWdpbnMuIFRoZSBudWFuY2VzIGhlcmUsIGFzIHdlIGJvdGgga25vdywgYXJlIGdvaW5nIHRvIGJlIGtleSB0byBhbnkgZGVlcCBkaXZlLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTY2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDA6MDk6NDMuMDYxMDU5MTc5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjkwNzkwNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYW1keGRuYS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYWNjZWwvYW1keGRuYS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2FjY2VsL2FtZHhkbmEvTWFrZWZpbGU9MzM9YW1keGRuYS0kKENPTkZJR19ERUJVR19GUykgKz0gYW1keGRuYV9kZWJ1Z2ZzLm9cXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvTWFrZWZpbGU6MzQ6b2JqLSQoQ09ORklHX0RSTV9BQ0NFTF9BTURYRE5BKSA9IGFtZHhkbmEub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDowOTo0My4xOTAxNDMzMzhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE0ODY2MDQyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBBTUQgWEROQSBEUk0gQWNjZWxlcmF0aW9uIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gYENPTkZJR19EUk1fQUNDRUxfQU1EWEROQWAuLi4gbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyB0aGlzLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBkcml2ZXIgc3VwcG9ydC4gVGhlIHF1aWNrIHBhdGggdG8gdGhhdCBpcywgd2l0aG91dCBhIGRvdWJ0LCBkaXZpbmcgaW50byBgZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uY2AuIFRoYXQgZmlsZSBpcyBsaWtlbHkgd2hlcmUgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kLCB0aGVyZWZvcmUsIHBvdGVudGlhbGx5IHRoZSBhY2NlbGVyYXRpb24gaG9va3MgZm9yIEFNRCdzIEROQS1yZWxhdGVkIGFjY2VsZXJhdGlvbiB3b3VsZCBiZSBkZWZpbmVkLiBJdCdzIGFsbW9zdCBjZXJ0YWluIHRoaXMgaXMgd2hlcmUgSSdsbCBmaW5kIHRoZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMsIHRoZSBkYXRhIHN0cnVjdHVyZXMsIGFuZCB0aGUgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIHRoZSBBTUQgR1BVIFZpcnR1YWwgTWVtb3J5IChHVVNWTSkgc3Vic3lzdGVtIGlmIHRoZXJlIGlzIGFueS4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgd2hhdCBhc3BlY3RzIG9mIHRoZSBoYXJkd2FyZSB0aGlzIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdW5sb2NrcyBhbmQgd2hhdCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgYXJlIGFzc29jaWF0ZWQgd2l0aCB1c2luZyBpdC4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIHdoYXQgdGVzdGluZyBpcyByZXF1aXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkyNzksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDowOTo0Ni4zMzg4MDY0MDdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDM2NDc0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcm1fZ3B1c3ZtLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZT0xMDk9ZHJtX2dwdXN2bV9oZWxwZXIteSA6PSBcXFxcXFxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlOjExMDpcXHRkcm1fZ3B1c3ZtLm9cXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUtMTExLWRybV9ncHVzdm1faGVscGVyLSQoQ09ORklHX1pPTkVfREVWSUNFKSArPSBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAwOjA5OjQ2LjQ2MzE3Njc1NloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzQzMTk1NzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBBY3RpdmF0aW9uIG9mIGBkcm1fZ3B1c3ZtX2hlbHBlcmAqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgcXVlc3Rpb24gaXMsICp3aGF0KiBhY3R1YWxseSBlbmFibGVzIHRoZSBgZHJtX2dwdXN2bV9oZWxwZXJgIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoZSBrZXJuZWw/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGtub2JzIHRoYXQgYXJlIHRpZWQgdG8gdGhpcy4gSXMgaXQgYSBjb3JlIG9wdGlvbiBidXJpZWQgZGVlcCB3aXRoaW4gdGhlIERSTSBzdWJzeXN0ZW0sIG9yIGlzIGl0IG1vcmUgY2xvc2VseSBsaW5rZWQgdG8gc3BlY2lmaWMgR1BVIGRyaXZlcnMsIHBlcmhhcHMgdGhyb3VnaCB0aGVpciBhc3NvY2lhdGVkIG1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnM/IEknbGwgcHJvYmFibHkgbmVlZCB0byBkZWx2ZSBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZXMgZm9yIHRoZSBEUk0gKERpcmVjdCBSZW5kZXJpbmcgTWFuYWdlcikgYW5kIGFueSByZWxldmFudCBHUFUgZHJpdmVycy4gSSBiZXQgaXQgaXMgc29tZSBraW5kIG9mIG1lbW9yeSBtYW5hZ2VtZW50IG9yIHNoYXJlZCB2aXJ0dWFsIG1lbW9yeSBvcHRpb24uXG5cbkknbGwgYmUgbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgYW5kIGFueSByZWxhdGlvbnNoaXBzIHRvIG90aGVyIGZlYXR1cmVzLCBzcGVjaWZpY2FsbHkgYW55dGhpbmcgbWVudGlvbmluZyBTVk0sIG9yIGV2ZW4gbW9yZSBicm9hZGx5LCBzaGFyZWQgbWVtb3J5LCBhbmQgaG93IHRoYXQgaW50ZXJhY3RzIHdpdGggdGhlIHVzZXIgc3BhY2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBncmFudWxhcml0eSBoZXJlLiBJcyB0aGlzIHRpZWQgdG8gdGhlIGVuYWJsaW5nIG9mIElPTU1VIG9yIHNvbWV0aGluZz8gSXMgaXQgYWx3YXlzIG9uPyBJZiBub3QsIHdoYXQgY2lyY3Vtc3RhbmNlcyByZXF1aXJlIGl0IHRvIGJlIGVuYWJsZWQ/IElmIHRoZXJlIGlzIGEgd2F5IHRvIGRpc2FibGUgaXQsIEkgd2lsbCBiZSBsb29raW5nIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgcmVhc29uIHRvIGRvIHNvLlxuXG5JJ2xsIGJlIGN1cmlvdXMgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY29uZmlndXJhdGlvbi4gRG9lcyBpdCByZXF1aXJlIGEgc3BlY2lmaWMga2VybmVsIHZlcnNpb24sIGFuZCBkb2VzIGl0IGNvbWUgd2l0aCBhbnkgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnM/IEkgbmVlZCB0byBrbm93IGhvdyBpdCBpbXBhY3RzIHRoZSBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZSB3aGVuIGl0IGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuIFRoaXMgd2lsbCBndWlkZSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvcHRpbWFsIHVzZSBjYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk2MzcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDowOTo0OS44MDYzNzU2MDlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTc1MTU2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcm1fZ3B1c3ZtX2hlbHBlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlPTEwNz1vYmotJChDT05GSUdfRFJNX0dQVVZNKSArPSBkcm1fZ3B1dm0ub1xcbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZS0xMDgtXFxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlOjEwOTpkcm1fZ3B1c3ZtX2hlbHBlci15IDo9IFxcXFxcXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUtMTEwLVxcdGRybV9ncHVzdm0ub1xcbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZToxMTE6ZHJtX2dwdXN2bV9oZWxwZXItJChDT05GSUdfWk9ORV9ERVZJQ0UpICs9IFxcXFxcXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUtMTEyLVxcdGRybV9wYWdlbWFwLm9cXFxcXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUtMTE0LVxcbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZToxMTU6b2JqLSQoQ09ORklHX0RSTV9HUFVTVk0pICs9IGRybV9ncHVzdm1faGVscGVyLm9cXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUtMTE2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDowOTo0OS45NjgxMzI0NDVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU3Nzc3MzEzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIEdQVSBWaXJ0dWFsaXphdGlvbioqXG5cbkFscmlnaHQsIHRoZSBkaXNjdXNzaW9uIGhhcyBsYW5kZWQgb24gYENPTkZJR19EUk1fR1BVU1ZNYC4gUmlnaHQgYXdheSwgbXkgbWluZCBnb2VzIHRvIHRoZSBsaWtlbHkgaW1wbGVtZW50YXRpb24uIEkgaW1tZWRpYXRlbHkgdGhpbmssICp0aGF0IG1lYW5zIEkgc2hvdWxkIGNoZWNrIHRoZSBOb3V2ZWF1IGRyaXZlciwgc3BlY2lmaWNhbGx5IGBkcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N2bS5jYC4qIEknbSBhc3N1bWluZyB0aGF0J3MgdGhlIHBsYWNlIHdoZXJlIHRoZSBjb3JlIEdQVSBTeXN0ZW0gVmlydHVhbCBNYWNoaW5lIGNvZGUsIGlmIGFueSBleGlzdHMsIHdvdWxkIHJlc2lkZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkncmUgaGFuZGxpbmcgdGhlIHNoYXJlZCBtZW1vcnkgYW5kIHZpcnR1YWxpemF0aW9uIGNvbXBvbmVudHMgZm9yIHRoZSBOb3V2ZWF1IGRyaXZlcnMuIExldCdzIHNlZSB3aGF0IHRoZXkgYXJlIGRvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDIxNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAwOjA5OjUyLjU0NTkwOTYyM1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3MzAzNjIyLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJub3V2ZWF1X3N2bS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDowOTo1Mi43NjMyMjE0NTVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgwMjAwMzg1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgYSBNb2RpZmllZCBGaWxlKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSBzZWUgdGhhdCBgbm91dmVhdV9zdm0uY2AgaGFzIGJlZW4gdG91Y2hlZC4gVGhhdCdzIGEga2V5IGZpbGUgaW4gdGhlIE5vdXZlYXUgZHJpdmVyLCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIFN5c3RlbSBWaXJ0dWFsIE1lbW9yeSAoU1ZNKSwgd2hpY2ggaXMgY3JpdGljYWwgZm9yIHRoaW5ncyBsaWtlIEdQVSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc2hhcmluZy4gTXkgaW1tZWRpYXRlIHJlYWN0aW9uIGlzIHRvIHRyYWNrIGRvd24gaXRzIGNvbmZpZ3VyYXRpb24uIENoYW5nZXMgdG8gdGhhdCBmaWxlLCBlc3BlY2lhbGx5IHJlbGF0ZWQgdG8gbWVtb3J5IGhhbmRsaW5nLCBjYW4gaGF2ZSBwcmV0dHkgZmFyLXJlYWNoaW5nIGltcGxpY2F0aW9ucy4gSXQgY291bGQgYmUgYSBzaW1wbGUgYnVnIGZpeCwgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIG9yLCBwb3RlbnRpYWxseSwgYSBjaGFuZ2UgaW4gaG93IHRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIGhhcmR3YXJlLCBtYXliZSBldmVuIGEgbmV3IGZlYXR1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgbW9kaWZpY2F0aW9uIGJlZm9yZSBJIG1ha2UgYW55IGFzc3VtcHRpb25zLiBGaXJzdCBzdGVwOiBkaXZpbmcgaW50byBpdHMgY29uZmlndXJhdGlvbiFcblxuXG4iLCJJbnB1dFRva2VucyI6MjA0NDEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDowOTo1NS41NjUyMjgwMjRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDExNzkwOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibm91dmVhdV9zdm1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAwOjA5OjU1LjY5OTM1Mzk4M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzM0Mzk5OTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBpc3N1ZTpcblxuKipEZWx2aW5nIGludG8gdGhlIE5vdXZlYXUgS2J1aWxkIFN0cnVjdHVyZSoqXG5cbk9rYXksIEknbSB0cnlpbmcgdG8gdHJhY2sgZG93biBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgTm91dmVhdSBkcml2ZXIuIFdoZXJlIHdvdWxkIHRoZSBidWlsZCBjb25maWd1cmF0aW9ucyBiZT8gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIGNvcmUgZGlyZWN0b3JpZXMuIExldCdzIHN0YXJ0IHdpdGggYGRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L2AuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSwgYnV0IEkgd2FudCB0byBiZSBjZXJ0YWluIHRoYXQgSSdtIG9uIHRoZSByaWdodCB0cmFjay4gQW5kIGlmIEkgYW0sIHdoZXJlIHdvdWxkIHRoZSBjb21waWxhdGlvbiBhbmQgYnVpbGQgY29uZmlndXJhdGlvbnMgYmUgbWFuYWdlZD8gTWF5YmUgdGhlcmUncyBhIGBLYnVpbGRgIGZpbGUgaW4gdGhlcmU/IFRoYXQncyB0eXBpY2FsbHkgd2hlcmUgdGhlc2UgdGhpbmdzIGFyZSBkZWZpbmVkLCBlc3BlY2lhbGx5IGluIHRoZSBrZXJuZWwuIExldCdzIGNoZWNrIGBkcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9LYnVpbGRgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBsb29raW5nIGluIHRoZSByaWdodCBzcG90LCBzbyBsZXQncyBzdGFydCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2NzMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDowOTo1OC40MzM3NTYyOTdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4NjgxNzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5vdXZlYXVfc3ZtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L0tidWlsZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9LYnVpbGQ9NDA9bm91dmVhdS15ICs9IG5vdXZlYXVfZ2VtLm9cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9LYnVpbGQ6NDE6bm91dmVhdS0kKENPTkZJR19EUk1fTk9VVkVBVV9TVk0pICs9IG5vdXZlYXVfc3ZtLm9cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9LYnVpbGQtNDItbm91dmVhdS0kKENPTkZJR19EUk1fTk9VVkVBVV9TVk0pICs9IG5vdXZlYXVfZG1lbS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAwOjA5OjU4LjUzMjQ4MjQ1OVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTM2NjgzMTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIGFuZCBEcml2ZXIgRXhhbWluYXRpb24qKlxuXG5SaWdodCwgc28gSSdtIHNlZWluZyBhIHJlZmVyZW5jZSB0byBgQ09ORklHX0RSTV9OT1VWRUFVX1NWTWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoYXQncyB0aGUgY29udGV4dCBoZXJlP1wiIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZsYWcgcmVsYXRlcyB0byB0aGUgb3ZlcmFsbCBzeXN0ZW0gY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgdGhlIE5vdXZlYXUgZHJpdmVyIGFuZCBTaGFyZWQgVmlydHVhbCBNZW1vcnkuIFdoZXJlIGRvZXMgdGhpcyB2YXJpYWJsZSBmaXQgaW4/XG5cbk15IG5leHQgc3RlcCwgYW5kIHRoaXMgaXMgYWxtb3N0IGF1dG9tYXRpYyBhdCB0aGlzIHBvaW50LCBpcyB0byBkaXZlIGludG8gYGRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmNgLiBJJ20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aCBTaGFyZWQgVmlydHVhbCBNZW1vcnkgKFNWTSksIGFuZCBob3cgdGhpcyBkcml2ZXIsIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgSHlwZXItViBlbnZpcm9ubWVudHMsIG1pZ2h0IGJlIGludGVyYWN0aW5nIHdpdGggb3IgYmVpbmcgYWZmZWN0ZWQgYnkgdGhlIE5vdXZlYXUgZHJpdmVyLiBUaGlzIGlzIGxpa2VseSBhbiBhcmVhIHdoZXJlIEkgbWlnaHQgc2VlIHRoZSB1c2Ugb2YgYENPTkZJR19EUk1fTk9VVkVBVV9TVk1gIGFuZCB0aGUgdXNlIG9mIHRoZSBOb3V2ZWF1IGRyaXZlci4gTG9va2luZyBmb3IgZGVwZW5kZW5jaWVzIG9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9ucyBpcyBteSBwcmltYXJ5IGdvYWwuIEl0J3MgdGltZSB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjb25maWd1cmF0aW9uIHNldHRpbmcgd2l0aGluIHRoaXMgc3BlY2lmaWMgZHJpdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTAyNSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAwOjEwOjAxLjY2OTE2ODAyOVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzNjcxNzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1zaHZfcmVnaW9ucy5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaHYvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9odi9NYWtlZmlsZT0xNj1tc2h2X3Jvb3QteSA6PSBtc2h2X3Jvb3RfbWFpbi5vIG1zaHZfc3luaWMubyBtc2h2X2V2ZW50ZmQubyBtc2h2X2lycS5vIFxcXFxcXG5kcml2ZXJzL2h2L01ha2VmaWxlOjE3OlxcdCAgICAgICBtc2h2X3Jvb3RfaHZfY2FsbC5vIG1zaHZfcG9ydGlkX3RhYmxlLm8gbXNodl9yZWdpb25zLm9cXG5kcml2ZXJzL2h2L01ha2VmaWxlLTE4LW1zaHZfcm9vdC0kKENPTkZJR19ERUJVR19GUykgKz0gbXNodl9kZWJ1Z2ZzLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDA6MTA6MDEuNzcyODQ2MzFaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ4NzA0MjY4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBtc2h2X3Jvb3RgIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgcXVlc3Rpb24gaW1tZWRpYXRlbHkgdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcywgXCJ3aGF0ICpzcGVjaWZpY2FsbHkqIGVuYWJsZXMgdGhlIGBtc2h2X3Jvb3RgIGZlYXR1cmU/XCIgV2Uga25vdyBpdCBleGlzdHMsIHdlJ3JlIGZhbWlsaWFyIHdpdGggaXRzIHB1cnBvc2UgaW4gZ2VuZXJhbCwgYnV0IHRoZSBwcmVjaXNlIG1lY2hhbmlzbSBvZiBpdHMgYWN0aXZhdGlvbiBpc24ndCBhbHdheXMgaW1tZWRpYXRlbHkgb2J2aW91cy4gSXMgaXQgYSBjb21waWxlLXRpbWUgZmxhZz8gQSBrZXJuZWwgbW9kdWxlIHBhcmFtZXRlcj8gUGVyaGFwcyBhIHNwZWNpZmljIGVudHJ5IHdpdGhpbiBhIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBmaWxlLCBvciBzZXQgb2YgZmlsZXMsIHdpdGhpbiB0aGUgc3lzdGVtP1xuXG5NeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoaXMgaXNuJ3QgYSBzaW1wbGUgb24vb2ZmIHN3aXRjaCwgYnV0IHByb2JhYmx5IHNvbWV0aGluZyBtb3JlIG51YW5jZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBkaWZmZXJlbnQgc3lzdGVtIGNvbXBvbmVudHMuIE1heWJlIGl04oCZcyBkZXBlbmRlbnQgb24gY2VydGFpbiBoYXJkd2FyZSBjYXBhYmlsaXRpZXMsIG9yIGFub3RoZXIgcmVsYXRlZCBmZWF0dXJlIHRoYXQgbXVzdCBiZSBlbmFibGVkLiBJIGtub3cgaXQgaXNuJ3QgbGlrZWx5IHNvbWV0aGluZyB0aGF0IGp1c3QgXCJpc1wiLlxuXG5JJ20gdGhpbmtpbmcgSSBuZWVkIHRvIHRyYWNlIHRoZSBjb2RlIHBhdGggcmVsYXRlZCB0byBgbXNodl9yb290YCwgb3IgbG9vayBhdCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiB0byBmaWd1cmUgb3V0IHdoZW4gYW5kIGhvdyB0aGUgcm9vdCBvZiB0aGlzIHN0cnVjdHVyZSBpcyBjcmVhdGVkLiBXaGVyZSB3b3VsZCB0aGUgbW9zdCB1c2VmdWwgZG9jdW1lbnRhdGlvbiBiZSBsb2NhdGVkPyBQZXJoYXBzIHRoZSBrZXJuZWwgZG9jdW1lbnRhdGlvbiBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIHRob3VnaCBpdCBtaWdodCBiZSBhIGJpdCB2ZXJib3NlLlxuXG5JJ20gYXNzdW1pbmcgdGhlIHNwZWNpZmljIGNvbnRleHQgaXMgdGhlIGtleSwgaW4gb3JkZXIgdG8gZ2V0IHRvIHRoZSByb290IG9mIHRoZSBwcm9ibGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQ2NiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAwOjEwOjA1LjI1OTg5MTg4MVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5MjM1NjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1zaHZfcm9vdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2h2L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaHYvTWFrZWZpbGU9ND1vYmotJChDT05GSUdfSFlQRVJWX0JBTExPT04pXFx0Kz0gaHZfYmFsbG9vbi5vXFxuZHJpdmVycy9odi9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19NU0hWX1JPT1QpXFx0XFx0Kz0gbXNodl9yb290Lm9cXG5kcml2ZXJzL2h2L01ha2VmaWxlLTYtb2JqLSQoQ09ORklHX01TSFZfVlRMKSAgICAgICAgICArPSBtc2h2X3Z0bC5vXFxuLS1cXG5kcml2ZXJzL2h2L01ha2VmaWxlPTE1PWh2X3V0aWxzLXkgOj0gaHZfdXRpbC5vIGh2X2t2cC5vIGh2X3NuYXBzaG90Lm8gaHZfdXRpbHNfdHJhbnNwb3J0Lm9cXG5kcml2ZXJzL2h2L01ha2VmaWxlOjE2Om1zaHZfcm9vdC15IDo9IG1zaHZfcm9vdF9tYWluLm8gbXNodl9zeW5pYy5vIG1zaHZfZXZlbnRmZC5vIG1zaHZfaXJxLm8gXFxcXFxcbmRyaXZlcnMvaHYvTWFrZWZpbGU6MTc6XFx0ICAgICAgIG1zaHZfcm9vdF9odl9jYWxsLm8gbXNodl9wb3J0aWRfdGFibGUubyBtc2h2X3JlZ2lvbnMub1xcbmRyaXZlcnMvaHYvTWFrZWZpbGU6MTg6bXNodl9yb290LSQoQ09ORklHX0RFQlVHX0ZTKSArPSBtc2h2X2RlYnVnZnMub1xcbmRyaXZlcnMvaHYvTWFrZWZpbGU6MTk6bXNodl9yb290LSQoQ09ORklHX1RSQUNFUE9JTlRTKSArPSBtc2h2X3RyYWNlLm9cXG5kcml2ZXJzL2h2L01ha2VmaWxlLTIwLW1zaHZfdnRsLXkgOj0gbXNodl92dGxfbWFpbi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAwOjEwOjA1LjM4OTEzNTIzWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMjAzNTI0NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYSBIeXBlcnZpc29yLVJlbGF0ZWQgSW5maW5pYmFuZCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgdGhhdCBgQ09ORklHX01TSFZfUk9PVGAgZmxhZy4uLiBIbW0sIHRoYXQncyBpbW1lZGlhdGVseSBzdWdnZXN0aW5nIGEgTWljcm9zb2Z0IEh5cGVyLVYgZW52aXJvbm1lbnQsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggcm9vdC1sZXZlbCBhY2Nlc3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGF0IGltcGFjdHMgSW5maW5pYmFuZCBhbmQgcG90ZW50aWFsbHkgT3BlbiBEYXRhIFBhdGggKE9EUCkgb3BlcmF0aW9ucy5cblxuTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaWcgaW50byB0aGUgSW5maW5pYmFuZCBjb2RlLCBhbmQgSSBrbm93IHdoZXJlIHRvIHN0YXJ0LiBMZXQncyBsb29rIGF0IGBkcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jYC4gVGhhdCBmaWxlIGlzIGEgbGlrZWx5IGNhbmRpZGF0ZSBmb3IgaGFuZGxpbmcgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIE9EUCBpbnRlcmFjdGlvbiwgd2hpY2ggd291bGQgYmUgY2VudHJhbCB0byBhIGh5cGVydmlzb3IgZW52aXJvbm1lbnQgbGlrZSBIeXBlci1WLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGV5J3JlIGhhbmRsaW5nIFVzZXIgTWVtb3J5IChVTUVNKSB3aXRoIHRoZSBmbGFnIHNldCB0byBzZWUgaG93IHJvb3QgYWNjZXNzIHdvdWxkIGFmZmVjdCB0aGUgY29uZmlndXJhdGlvbi4gSSB3YW50IHRvIHNlZSBob3cgdGhhdCBmbGFnIGNoYW5nZXMgdGhlIGhhbmRsaW5nIG9mIG1lbW9yeSBhbmQgYWNjZXNzIGNvbnRyb2wgd2l0aGluIHRoZSBjb250ZXh0IG9mIE9wZW4gRGF0YSBQYXRoLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIGEgSHlwZXItViByb290IGluc3RhbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjExNSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAwOjEwOjA4LjYwOTQ5MDM0M1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwODAxODQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVtZW1fb2RwLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvTWFrZWZpbGU9MjE9aWJfY29yZS0kKENPTkZJR19JTkZJTklCQU5EX1VTRVJfTUVNKSArPSB1bWVtLm8gdW1lbV9kbWFidWYub1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL01ha2VmaWxlOjIyOmliX2NvcmUtJChDT05GSUdfSU5GSU5JQkFORF9PTl9ERU1BTkRfUEFHSU5HKSArPSB1bWVtX29kcC5vXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvTWFrZWZpbGUtMjMtaWJfY29yZS0kKENPTkZJR19JTkZJTklCQU5EX1VTRVJfQUNDRVNTX0NPUkUpICs9IGliX2NvcmVfdXZlcmJzLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDA6MTA6MDguNzMwMjk5ODEyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2NzQ2MjM0OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYENPTkZJR19JTkZJTklCQU5EX09OX0RFTUFORF9QQUdJTkdgKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uIHRoZSBzeXN0ZW0gaXMgcG9pbnRpbmcgbWUgdG93YXJkcyBgQ09ORklHX0lORklOSUJBTkRfT05fREVNQU5EX1BBR0lOR2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBzZXR0aW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGVyZSdzIHRoZSBiZXN0IHBsYWNlIHRvIGdldCBhIGdvb2QgaGFuZGxlIG9uIGhvdyB0aGlzIGlzIHdvcmtpbmc/XCIgVGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgYW4gSW5maW5pQmFuZC1yZWxhdGVkIGZlYXR1cmUgbGlrZSBvbi1kZW1hbmQgcGFnaW5nIGlzIGFsd2F5cyB0aGUgcmVsZXZhbnQgdGVzdGluZyBjb2RlLiBTbywgbGV0J3MgemVybyBpbiBvbiB0aGF0LiBMZXQgbWUgdGFrZSBhIGxvb2sgYXQgYGxpYi90ZXN0X2htbS5jYC4gSG9wZWZ1bGx5LCBpdCdsbCBwcm92aWRlIHNvbWUgY2xlYXIgZXhhbXBsZXMgb2YgaG93IHRoaXMgb24tZGVtYW5kIHBhZ2luZyBpcyB0ZXN0ZWQgYW5kIHVzZWQgd2l0aGluIHRoZSBrZXJuZWwncyBJbmZpbmlCYW5kIHN0YWNrLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZCB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGFuZCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI1NTAsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDoxMDoxMS40MDQ5Mjc1MjJaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDIwNzc0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0ZXN0X2htbS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImxpYi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvTWFrZWZpbGU9MTAyPW9iai0kKENPTkZJR19URVNUX0xPQ0tVUCkgKz0gdGVzdF9sb2NrdXAub1xcbmxpYi9NYWtlZmlsZToxMDM6b2JqLSQoQ09ORklHX1RFU1RfSE1NKSArPSB0ZXN0X2htbS5vXFxubGliL01ha2VmaWxlLTEwNC1vYmotJChDT05GSUdfVEVTVF9GUkVFX1BBR0VTKSArPSB0ZXN0X2ZyZWVfcGFnZXMub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDoxMDoxMS44ODkxNDAxOTFaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM4Mjk3ODUxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIFRlc3RpbmcgQ29uc2lkZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgQ09ORklHX1RFU1RfSE1NYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQgYXJlIHRoZSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBlbmFibGUgZm9yIGVmZmVjdGl2ZSB0ZXN0aW5nPyBJIG5lZWQgdG8gYnVpbGQgYSBjb21wcmVoZW5zaXZlIGxpc3QuXG5cblJpZ2h0LCBzbyBiZXNpZGVzIGBURVNUX0hNTWAgaXRzZWxmLCBJIGFsc28ga25vdyB0aGF0IGBITU1fTUlSUk9SYCBpcyBpbnRyaW5zaWNhbGx5IGxpbmtlZC4gRXZlbiB0aG91Z2ggYEhNTV9NSVJST1JgIGlzIHNlbGVjdGVkIGJ5IGBURVNUX0hNTWAsIGl0J3MgY29yZSB0byB0aGUgZnVuY3Rpb25hbGl0eSwgc28gaXQgbmVlZHMgdG8gYmUgZXhwbGljaXRseSBsaXN0ZWQgYXMgYSBrZXkgZGVwZW5kZW5jeS4gTGV0J3MgbWFrZSBzdXJlIGl0J3MgY2xlYXIuXG5cblRoZW4sIEknbSBub3RpbmcgdGhlIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbnMgcmVxdWlyZWQ6IGBEUk1fQUNDRUxfQU1EWEROQWAsIGBEUk1fR1BVU1ZNYCwgYERSTV9OT1VWRUFVX1NWTWAsIGBNU0hWX1JPT1RgLCBhbmQgYElORklOSUJBTkRfT05fREVNQU5EX1BBR0lOR2AuIEknbGwgbmVlZCB0byBrZWVwIHRyYWNrIG9mIHRoZXNlIHRvIGVuc3VyZSBhbGwgcmVsZXZhbnQgZmVhdHVyZXMgYXJlIGVuYWJsZWQgZHVyaW5nIG15IHRlc3RpbmcuXG5cbk5vdywgYSBrZXkgcXVlc3Rpb246IGNhbiBJIGdldCBhd2F5IHdpdGgganVzdCBlbmFibGluZyBgVEVTVF9ITU1gIHRvIHZhbGlkYXRlIHRoZSBjb3JlIGxvZ2ljPyBZZXMsIGFmdGVyIHJldmlld2luZyB0aGUgc2V0dXAsIEknbSBjb25maWRlbnQgdGhhdCBlbmFibGluZyBgVEVTVF9ITU1gIGFsb25lIGlzIHN1ZmZpY2llbnQgZm9yIHRoZSBpbml0aWFsIGNvcmUgbG9naWMgdGVzdGluZy4gSSdtIHNhdGlzZmllZC5cblxuRmluYWxseSwgSSdtIGp1c3QgcXVpY2tseSBjb25maXJtaW5nIHRoYXQgYEhNTV9NSVJST1JgIGlzIHNlbGVjdGFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyOTAzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAwOjEwOjE2LjI3MjEyMDgyNFoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzOTg1MDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBITU1fTUlSUk9SXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMjI4PWNvbmZpZyBaT05FX0RFVklDRVxcbi0tXFxubW0vS2NvbmZpZy0xMjQ5LSNcXG5tbS9LY29uZmlnOjEyNTA6Y29uZmlnIEhNTV9NSVJST1JcXG5tbS9LY29uZmlnLTEyNTEtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDoxMDoxNi40MjYxMTM5NzFaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODA3NDA3MzU1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBITU0gKEhhcmR3YXJlIE1hbmFnZWQgTWVtb3J5KSBGYXVsdCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIEhNTSBmYXVsdCBoYW5kbGVycyBhcmUgdHJpZ2dlcmVkIGFuZCB1c2VkLiBGaXJzdCwgdGhpcyBzZWVtcyB0byBiZSBhIGJvb2xlYW4gY29uZmlnIG9wdGlvbiB3aXRob3V0IGEgZGlyZWN0IHByb21wdCwgd2hpY2ggbWVhbnMgaXQgY2FuJ3QgYmUgZW5hYmxlZCBzdGFuZGFsb25lLiBJdCdzIGRlcGVuZGVudCBvbiBgVEVTVF9ITU1gIG9yIG9uZSBvZiB0aGUgZGV2aWNlIGRyaXZlcnMuXG5cbk15IGtleSBmb2N1cyBoZXJlIGlzIG9uIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBmYXVsdCBoYW5kbGluZyBpcyBpbml0aWF0ZWQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgc3lzdGVtLiBJJ3ZlIGdvdCBhIGxpc3Qgb2YgaW1wb3J0YW50IHN5bWJvbHMgdG8gdHJhY2s6IGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAsIGBobW1fcmFuZ2VfZmF1bHRgLCBgaG1tX2RvX2ZhdWx0YCwgYGhtbV9yYW5nZV9mYXVsdF9sb2NrZWRgLCBhbmQgYGhtbV9yZWNvcmRfZmF1bHRgLiBJJ20gc3RhcnRpbmcgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgcmVsYXRlIHRvIGVhY2ggb3RoZXIuIEkndmUgYWxyZWFkeSBjb25maXJtZWQgYGhtbV9kb19mYXVsdGAsIGBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkYCwgYW5kIGBobW1fcmVjb3JkX2ZhdWx0YCBhcmUgc3RhdGljLCB3aGljaCBpcyBnb29kIHRvIGtub3cgZm9yIHNjb3BpbmcgYW5kIHZpc2liaWxpdHkuIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAgYW5kIGBobW1fcmFuZ2VfZmF1bHRgIGFyZSBleHBvcnRlZCwgd2hpY2ggaW1wbGllcyB0aGV5IGhhdmUgZXh0ZXJuYWwgdXNlIGNhc2VzLlxuXG5OZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGZhdWx0IGhhbmRsaW5nIGludGVyYWN0cyB3aXRoIHZhcmlvdXMgaGFyZHdhcmUgYXJjaGl0ZWN0dXJlcy4gSSd2ZSBzdGFydGVkIHNjYW5uaW5nIHRoZSBjb2RlIGJhc2UgZm9yIHJlbGV2YW50IGZ1bmN0aW9ucy4gSSd2ZSBpZGVudGlmaWVkIHRoZSBmb2xsb3dpbmcgaW4gYGxpYi90ZXN0X2htbS5jYDogYGRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWRgLCBgZG1pcnJvcl9mYXVsdF91bmxvY2tlZGAsIGFuZCBgZG1pcnJvcl9yZWFkX3VubG9ja2VkYCB3aGljaCBpbmRpY2F0ZXMgdGhpcyBtb2R1bGUgaGFzIHRoZSB0ZXN0IGZ1bmN0aW9ucy4gVGhlbiBJIG1vdmVkIG9uIGFuZCBsb29rZWQgYXQgZnVuY3Rpb25zIGluIGRyaXZlciBkaXJlY3Rvcmllcy5cblxuYGRyaXZlcnMvYWNjZWwvYW1keGRuYS9haWUyX2N0eC5jYCBoYXMgYGFpZTJfcG9wdWxhdGVfcmFuZ2VgLCB3aGljaCBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIGZhdWx0IGhhbmRsaW5nIGZvciB0aGlzIHNwZWNpZmljIGFyY2hpdGVjdHVyZS4gSSBhbHNvIG5vdGljZWQgdGhhdCB0aGUgYGRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmNgIG1vZHVsZSBjb250YWlucyB0aGUgZnVuY3Rpb25zIGBkcm1fZ3B1c3ZtX3NjYW5fbW1gLCBgZHJtX2dwdXN2bV9nZXRfcGFnZXNgLCBhbmQgYGRybV9ncHVzdm1fcmFuZ2VfZXZpY3RgLCBzbyBjbGVhcmx5IEdQVSBhbmQgU1ZNIGhhdmUgc29tZSBpbnZvbHZlbWVudC4gYGRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3ZtLmNgIGFuZCBgZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuY2AgY29udGFpbiBgbm91dmVhdV9yYW5nZV9mYXVsdGAgYW5kIGBtc2h2X3JlZ2lvbl9yYW5nZV9mYXVsdGAgd2hpY2ggYXJlIGFkZGl0aW9uYWwgZXhhbXBsZXMuXG5cbkZpbmFsbHksIGBkcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jYCBpcyBpbXBvcnRhbnQgd2l0aCB0aGUgZnVuY3Rpb24gYGliX3VtZW1fb2RwX21hcF9kbWFfYW5kX2xvY2tgLCBzbyBpdCBpcyBjbGVhciB0aGF0IEluZmluaWJhbmQgaXMgaW1wb3J0YW50LlxuXG5TbywganVzdCB0byByZWNhcCB0aGUgZnVuY3Rpb25zIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIEknbSBnb2luZyB0byBsaXN0OlxuXG4qICAgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YFxuKiAgIGBobW1fcmFuZ2VfZmF1bHRgXG4qICAgYGhtbV9kb19mYXVsdGBcbiogICBgaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZGBcbiogICBgaG1tX3JlY29yZF9mYXVsdGBcbiogICBgZG1pcnJvcl9yYW5nZV9mYXVsdF91bmxvY2tlZGBcbiogICBgZG1pcnJvcl9mYXVsdF91bmxvY2tlZGBcbiogICBgZG1pcnJvcl9yZWFkX3VubG9ja2VkYFxuXG5UaGVzZSBhcmUgbXkgZm9jdXMgcG9pbnRzLiBJJ20gYnVpbGRpbmcgYW4gdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlc2UgY29yZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCBwb3RlbnRpYWwgZmF1bHQgdHJpZ2dlcnMuXG5cbk9rYXksIGxldCdzIHZlcmlmeSB0aGF0IHRoZSBjb25maWcgb3B0aW9ucyBhbGlnbiB3aXRoIHdoYXQgSSdtIHNlZWluZzogYFRFU1RfSE1NYCwgYERSTV9BQ0NFTF9BTURYRE5BYCwgYERSTV9HUFVTVk1gLCBgRFJNX05PVVZFQVVfU1ZNYCwgYE1TSFZfUk9PVGAsIGFuZCBgSU5GSU5JQkFORF9PTl9ERU1BTkRfUEFHSU5HYC4gSSBzaG91bGQgY2hlY2sgaWYgdGhlcmUgYXJlIG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLCBzbyBsZXQncyBjcm9zcy1yZWZlcmVuY2UgYERSTV9BQ0NFTF9BTURYRE5BYCB3aXRoaW4gdGhlIGFwcHJvcHJpYXRlIGBLY29uZmlnYCBmaWxlIGluIHRoZSBkcml2ZXIgZGlyZWN0b3J5IHRvIGVuc3VyZSBJJ20gY2FwdHVyaW5nIGFsbCByZWxhdGVkIHNldHRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzQ1MiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDoxMDoyNC41MDAxODk2OTdaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMTAwNTU1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRFJNX0FDQ0VMX0FNRFhETkFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9hY2NlbC9hbWR4ZG5hL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9hY2NlbC9hbWR4ZG5hL0tjb25maWctMi1cXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvS2NvbmZpZzozOmNvbmZpZyBEUk1fQUNDRUxfQU1EWEROQVxcbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9LY29uZmlnLTQtXFx0dHJpc3RhdGUgXFxcIkFNRCBBSSBFbmdpbmVcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAwOjEwOjI0LjcwMTIwMDkxOVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODM1NTA3OTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBFeHBsb3JhdGlvbioqXG5cblJpZ2h0LCB0aGF0J3Mgc2V0dGxlZC4gVGltZSB0byBkaWcgaW50byB0aGUgZGV0YWlscy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdmVyaWZ5IHRoZSBzdGF0dXMgb2YgYERSTV9HUFVTVk1gLiBJIG5lZWQgdG8gZW5zdXJlIGl0J3MgcHJvcGVybHkgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbCdzIGJ1aWxkIHN5c3RlbS4gU3BlY2lmaWNhbGx5LCBJJ2xsIGJlIGhlYWRpbmcgb3ZlciB0byBgZHJpdmVycy9ncHUvZHJtL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSByZWxldmFudCBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIG9wdGlvbnMgZm9yIERSTS1yZWxhdGVkIGZlYXR1cmVzIHJlc2lkZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgaXQncyBlbmFibGVkLCBkaXNhYmxlZCwgb3IgYnVpbHQgYXMgYSBtb2R1bGUsIGFuZCBpZiB0aGVyZSBhcmUgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGltcGFjdCBpdHMgYXZhaWxhYmlsaXR5LiBJIGV4cGVjdCB0byBjb25maXJtIG15IGFzc3VtcHRpb24gdGhhdCBpdCBpcyBlbmFibGVkLCBidXQgSSBuZWVkIHRvIGVuc3VyZSB0aGlzIGlzIGNvcnJlY3QgYmVmb3JlIG1vdmluZyBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTAxNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAwOjEwOjI3LjUzNjcxMTI2NloiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2NzA1MTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEUk1fR1BVU1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZ3B1L2RybS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZ3B1L2RybS9LY29uZmlnPTIyMT1jb25maWcgUlVTVF9EUk1fR1BVVk1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9LY29uZmlnLTIyNy1cXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZzoyMjg6Y29uZmlnIERSTV9HUFVTVk1cXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZy0yMjktXFx0dHJpc3RhdGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDA6MTA6MjcuNzIzNDIyNDlaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY1NjM4ODU4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgTm91dmVhdSdzIFNWTSBDb25maWd1cmF0aW9uKipcblxuWWVzLiBPa2F5LCBzbyB3ZSdyZSBvbiB0aGUgcmlnaHQgdHJhY2suIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgRFJNX05PVVZFQVVfU1ZNYCBpcyBlbmFibGVkIGFuZCBob3cgaXQncyBkZWZpbmVkLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBsb29rIGF0IHRoZSBgZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGZpbmQgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGFuZCBkZXBlbmRlbmNpZXMgZm9yIHRoZSBOb3V2ZWF1IGRyaXZlcidzIFN5c3RlbSBNZW1vcnkgTWFuYWdlbWVudCAoU1ZNKSBzdXBwb3J0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBpdCdzIGV2ZW4gY29tcGlsZWQgaW4sIGlmIGl0J3MgYSBtb2R1bGUsIGFuZCB3aGF0IG90aGVyIG9wdGlvbnMgbWlnaHQgYmUgcmVsZXZhbnQgZm9yIG15IGN1cnJlbnQgaW52ZXN0aWdhdGlvbi4gTGV0J3Mgc2VlIHdoYXQgd2UgZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUzMjksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDoxMDozMS4zNzk4MTUxOTZaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzMwMTQ5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRFJNX05PVVZFQVVfU1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvS2NvbmZpZz04Nj1jb25maWcgRFJNX05PVVZFQVVfQkFDS0xJR0hUXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9LY29uZmlnLTkzLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L0tjb25maWc6OTQ6Y29uZmlnIERSTV9OT1VWRUFVX1NWTVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L0tjb25maWctOTUtXFx0Ym9vbCBcXFwiKEVYUEVSSU1FTlRBTCkgRW5hYmxlIFNWTSAoU2hhcmVkIFZpcnR1YWwgTWVtb3J5KSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDoxMDozMS41NzMxMjI0NjlaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU4MzI4NzkzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkludGVybmFsIE1lbnRhbCBDaGVja2xpc3QqKlxuXG5ZZXMuIE9rYXksIEkndmUgZ290IGEgaGFuZGxlIG9uIHRoZSB0YXNrLiBOb3csIHdoZXJlIHRvIHN0YXJ0Li4uIGxldCdzIHBpbnBvaW50IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBsb29raW5nIGF0IHRoZSBjb3JyZWN0IGZpbGUuIFRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgTVNIVl9ST09UYCB2YXJpYWJsZSB3aXRoaW4gdGhlIGBkcml2ZXJzL2h2L0tjb25maWdgIGZpbGUuIFRoYXQgc2VlbXMgbGlrZSB0aGUgcmlnaHQgcGF0aCB0byB0cmFjayBkb3duIHRoYXQgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NjgwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDA6MTA6MzQuMTU2NDEzNTI3WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjIwNjYyMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1TSFZfUk9PVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2h2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9odi9LY29uZmlnPTYwPWNvbmZpZyBIWVBFUlZfVk1CVVNcXG4tLVxcbmRyaXZlcnMvaHYvS2NvbmZpZy02Ny1cXG5kcml2ZXJzL2h2L0tjb25maWc6Njg6Y29uZmlnIE1TSFZfUk9PVFxcbmRyaXZlcnMvaHYvS2NvbmZpZy02OS1cXHR0cmlzdGF0ZSBcXFwiTWljcm9zb2Z0IEh5cGVyLVYgcm9vdCBwYXJ0aXRpb24gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDA6MTA6MzQuMzc4NDk5ODk4WiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MDQ2NjUzNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW5uZXIgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIEluZmluaWJhbmQgUGFnaW5nIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodC4gVGltZSB0byBkaWcgaW4uIFRoZSBpbml0aWFsIHByb21wdCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBzbyBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCB0aGUgb2J2aW91czogY29uZmlybWluZyB0aGUgc2V0dGluZyBmb3IgYElORklOSUJBTkRfT05fREVNQU5EX1BBR0lOR2AuIEknbGwgaW1tZWRpYXRlbHkganVtcCB0byB3aGVyZSBpdCdzIGRlZmluZWQ6IGBkcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZ2AuIE5vIG5lZWQgdG8gd2FzdGUgdGltZSBlbHNld2hlcmU7IHRoaXMgaXMgbGlrZWx5IHdoZXJlIGFsbCB0aGUgcmVsZXZhbnQgZGV0YWlscyBhcmUgaG91c2VkLCBhbmQgSSBjYW4gcXVpY2tseSBlc3RhYmxpc2ggdGhlIGN1cnJlbnQgc3RhdHVzIGFuZCByZWxldmFudCBkZXBlbmRlbmNpZXMuIFRoaXMgaXMgdXN1YWxseSB0aGUgZmlyc3Qgc3RvcCBmb3IgdW5kZXJzdGFuZGluZyBob3cgYSBmZWF0dXJlIGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBJbmZpbmliYW5kIHN1YnN5c3RlbS4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTkyMCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAwOjEwOjM3LjI4MzE2OTAwOFoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4MDAzMjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJTkZJTklCQU5EX09OX0RFTUFORF9QQUdJTkdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc9NDQ9Y29uZmlnIElORklOSUJBTkRfVVNFUl9NRU1cXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTUwLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjUxOmNvbmZpZyBJTkZJTklCQU5EX09OX0RFTUFORF9QQUdJTkdcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy01Mi1cXHRib29sIFxcXCJJbmZpbmlCYW5kIG9uLWRlbWFuZCBwYWdpbmcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDA6MTA6MzcuNDMxMTc3NTU1WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2NzMzNjU1ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiBpdCdzIGEgZGlyZWN0IHN0cmVhbSBvZiBteSB0aG91Z2h0czpcblxuKipDaGVja2luZyBgVEVTVF9ITU1gIGluIGBsaWIvS2NvbmZpZy5kZWJ1Z2AqKlxuXG5SaWdodCwgaGVyZSB3ZSBnby4gTGV0J3MgbWFrZSBzdXJlIGBURVNUX0hNTWAgaXMgY29uZmlndXJlZCBjb3JyZWN0bHksIG9yIGF0IGxlYXN0IGV4aXN0cyBhbmQgaXMgYmVoYXZpbmcgYXMgZXhwZWN0ZWQuIFRoYXQncyBhIGdvb2QgZmlyc3Qgc3RlcCB0byB0cm91Ymxlc2hvb3Rpbmcgd2hhdGV2ZXIncyBnb2luZyBvbi4gV2Uga25vdyB0aGlzIHNwZWNpZmljIHZhcmlhYmxlIGNvbnRyb2xzIHRoZSBITU0gdGVzdCB3aGljaCB3ZSBhcmUgZGVidWdnaW5nLiBUaGlzIHNob3VsZCBiZSBzdHJhaWdodGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MjUyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDA6MTA6NDAuMTA0NTQ2MTU1WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDkwODU5MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRFU1RfSE1NXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImxpYi9LY29uZmlnLmRlYnVnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9LY29uZmlnLmRlYnVnPTMzMTg9Y29uZmlnIFRFU1RfTUVNSU5JVFxcbi0tXFxubGliL0tjb25maWcuZGVidWctMzMyNS1cXG5saWIvS2NvbmZpZy5kZWJ1ZzozMzI2OmNvbmZpZyBURVNUX0hNTVxcbmxpYi9LY29uZmlnLmRlYnVnLTMzMjctXFx0dHJpc3RhdGUgXFxcIlRlc3QgSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDA6MTA6NDAuMjEzNjM3Njg2WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNDMxMzczMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFByb3Bvc2VkIE1lbW9yeSBNYW5hZ2VtZW50IENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9uIHN5bWJvbHM6IGBURVNUX0hNTWAsIGBEUk1fQUNDRUxfQU1EWEROQWAsIGBEUk1fR1BVU1ZNYCwgYERSTV9OT1VWRUFVX1NWTWAsIGBNU0hWX1JPT1RgLCBhbmQgYElORklOSUJBTkRfT05fREVNQU5EX1BBR0lOR2AuIEJhc2VkIG9uIHRoZSBjb250ZXh0LCBJJ20gYWxyZWFkeSB0aGlua2luZyB0aGVzZSBhcmUgcmVsYXRlZCB0byBzb21lIGZvcm0gb2YgbWVtb3J5IG1hbmFnZW1lbnQgb3IgZGV2aWNlIGRyaXZlciBpbnRlcmFjdGlvbiwgbGlrZWx5IGFyb3VuZCBIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50IChITU0pIGdpdmVuIHRoZSBwcmVzZW5jZSBvZiBgVEVTVF9ITU1gLlxuXG5Ob3csIHRoZSBjb3JlIHN5bWJvbHMgb2YgaW50ZXJlc3Qgc2VlbSB0byBiZSB0aGVzZSBcImZhdWx0XCIgcmVsYXRlZCBmdW5jdGlvbnM6IGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAsIGBobW1fcmFuZ2VfZmF1bHRgLCBgaG1tX2RvX2ZhdWx0YCwgYGhtbV9yYW5nZV9mYXVsdF9sb2NrZWRgLCBgaG1tX3JlY29yZF9mYXVsdGAsIGBkbWlycm9yX3JhbmdlX2ZhdWx0X3VubG9ja2VkYCwgYGRtaXJyb3JfZmF1bHRfdW5sb2NrZWRgLCBhbmQgYGRtaXJyb3JfcmVhZF91bmxvY2tlZGAuIFRoZSBuYW1pbmcgY29udmVudGlvbiBzdHJvbmdseSBzdWdnZXN0cyBhIGNoYW5nZSBpbiBob3cgbWVtb3J5IGZhdWx0cyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsb2NraW5nIGFuZCB0aW1lb3V0IGJlaGF2aW9yLCB3aGljaCBhbHNvIHRpZXMgaW4gbmljZWx5IHdpdGggdGhlIGNvbmZpZ3MuIEkgYW0gbm90aW5nIHRoZSBpbmNsdXNpb24gb2YgYGRtaXJyb3JgIHdoaWNoIGhpbnRzIGF0IHNvbWUgZm9ybSBvZiBkYXRhIG1pcnJvcmluZy5cblxuRnJvbSB0aGUgZGVzY3JpcHRpb24sIEkgc2VlIHRoaXMgaXMgaW50cm9kdWNpbmcgYSBuZXcgdW5sb2NrZWQgdGltZW91dCB2YXJpYW50IGZvciBITU0gcmFuZ2UgZmF1bHRzLCBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgLCBhbmQgaXQncyByZWZhY3RvcmluZyB0aGUgZXhpc3RpbmcgYGhtbV9yYW5nZV9mYXVsdGAgdG8gdXNlIGEgbG9ja2VkIGhlbHBlciBmdW5jdGlvbi4gVGhpcyBpcyBzaWduaWZpY2FudC4gSXQncyBub3QganVzdCBhIG1pbm9yIHR3ZWFrOyBpdCdzIGEgZnVuZGFtZW50YWwgc2hpZnQgaW4gaG93IGZhdWx0cyBhcmUgbWFuYWdlZCwgZXNwZWNpYWxseSBhcm91bmQgbG9ja2luZyBzZW1hbnRpY3MuIEkgY2FuIHNlZSB0aGlzIGlzIGxpa2VseSBhZmZlY3Rpbmcgc2V2ZXJhbCBkcml2ZXJzIGFuZCB0aGUgSE1NIHRlc3QgbW9kdWxlLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgcm9idXN0bmVzcyBvZiB0aGUgY2hhbmdlcy4gVGhlIGludHJvZHVjdGlvbiBvZiB1bmxvY2tlZCB2YXJpYW50cyBhbHdheXMgaW5jcmVhc2VzIHRoZSBwb3RlbnRpYWwgZm9yIHJhY2UgY29uZGl0aW9ucyBvciBvdGhlciBjb25jdXJyZW5jeSBpc3N1ZXMuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGZvY3VzIG9uIGZ1enppbmcgdGhlc2UgbmV3IHJldHJ5IGFuZCBsb2NraW5nIGxvZ2ljLCBhcyB3ZWxsIGFzIGVuc3VyZSB0aGUgbmV3IGxvY2tpbmcgbWVjaGFuaXNtcyBhcmUgdGhvcm91Z2hseSB0ZXN0ZWQuIFRoZXNlIGNoYW5nZXMgd2lsbCBoYXZlIHN1YnN0YW50aWFsIGltcGFjdCBvbiBkZXZpY2UgZHJpdmVyIGJlaGF2aW9yLCBhbmQgbWF5IGNhdXNlIHVuZXhwZWN0ZWQgY2hhbmdlcyBpbiBzeXN0ZW0gcmVsaWFiaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NTA4LCJPdXRwdXRUb2tlbnMiOjI2MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDoxMDo0Ni41NTY3Nzc5NDFaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODQ0Njc1MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRFU1RfSE1NXCIsXG4gICAgXCJEUk1fQUNDRUxfQU1EWEROQVwiLFxuICAgIFwiRFJNX0dQVVNWTVwiLFxuICAgIFwiRFJNX05PVVZFQVVfU1ZNXCIsXG4gICAgXCJNU0hWX1JPT1RcIixcbiAgICBcIklORklOSUJBTkRfT05fREVNQU5EX1BBR0lOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0XCIsXG4gICAgXCJobW1fcmFuZ2VfZmF1bHRcIixcbiAgICBcImhtbV9kb19mYXVsdFwiLFxuICAgIFwiaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZFwiLFxuICAgIFwiaG1tX3JlY29yZF9mYXVsdFwiLFxuICAgIFwiZG1pcnJvcl9yYW5nZV9mYXVsdF91bmxvY2tlZFwiLFxuICAgIFwiZG1pcnJvcl9mYXVsdF91bmxvY2tlZFwiLFxuICAgIFwiZG1pcnJvcl9yZWFkX3VubG9ja2VkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyB1bmxvY2tlZCB0aW1lb3V0IHZhcmlhbnQgZm9yIEhNTSByYW5nZSBmYXVsdHMgKGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGApIGFuZCByZWZhY3RvcnMgdGhlIGV4aXN0aW5nIGBobW1fcmFuZ2VfZmF1bHRgIHRvIHVzZSBhIGxvY2tlZCBoZWxwZXIuIEl0IGFsc28gdXBkYXRlcyBzZXZlcmFsIGRyaXZlcnMgYW5kIHRoZSBITU0gdGVzdCBtb2R1bGUgdG8gdXNlIHRoZSBuZXcgdW5sb2NrZWQgdmFyaWFudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRldmljZSBkcml2ZXIgaW50ZXJhY3Rpb24sIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgcmV0cnkgYW5kIGxvY2tpbmcgbG9naWMgaXMgcm9idXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRFU1RfSE1NXCIsXG4gICAgXCJEUk1fQUNDRUxfQU1EWEROQVwiLFxuICAgIFwiRFJNX0dQVVNWTVwiLFxuICAgIFwiRFJNX05PVVZFQVVfU1ZNXCIsXG4gICAgXCJNU0hWX1JPT1RcIixcbiAgICBcIklORklOSUJBTkRfT05fREVNQU5EX1BBR0lOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0XCIsXG4gICAgXCJobW1fcmFuZ2VfZmF1bHRcIixcbiAgICBcImhtbV9kb19mYXVsdFwiLFxuICAgIFwiaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZFwiLFxuICAgIFwiaG1tX3JlY29yZF9mYXVsdFwiLFxuICAgIFwiZG1pcnJvcl9yYW5nZV9mYXVsdF91bmxvY2tlZFwiLFxuICAgIFwiZG1pcnJvcl9mYXVsdF91bmxvY2tlZFwiLFxuICAgIFwiZG1pcnJvcl9yZWFkX3VubG9ja2VkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyB1bmxvY2tlZCB0aW1lb3V0IHZhcmlhbnQgZm9yIEhNTSByYW5nZSBmYXVsdHMgKGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGApIGFuZCByZWZhY3RvcnMgdGhlIGV4aXN0aW5nIGBobW1fcmFuZ2VfZmF1bHRgIHRvIHVzZSBhIGxvY2tlZCBoZWxwZXIuIEl0IGFsc28gdXBkYXRlcyBzZXZlcmFsIGRyaXZlcnMgYW5kIHRoZSBITU0gdGVzdCBtb2R1bGUgdG8gdXNlIHRoZSBuZXcgdW5sb2NrZWQgdmFyaWFudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRldmljZSBkcml2ZXIgaW50ZXJhY3Rpb24sIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgcmV0cnkgYW5kIGxvY2tpbmcgbG9naWMgaXMgcm9idXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzp6pw[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-15 23:44:27 +0000 UTC FinishedAt: 2026-07-16 00:10:48 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "8db84a07071480e0886b12f189c513b93eb65c0a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TEST_HMM", "DRM_ACCEL_AMDXDNA", "DRM_GPUSVM", "DRM_NOUVEAU_SVM", "MSHV_ROOT", "INFINIBAND_ON_DEMAND_PAGING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "8db84a07071480e0886b12f189c513b93eb65c0a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TEST_HMM", "DRM_ACCEL_AMDXDNA", "DRM_GPUSVM", "DRM_NOUVEAU_SVM", "MSHV_ROOT", "INFINIBAND_ON_DEMAND_PAGING" ], "series_id": "b9d06a23-bd20-413d-8027-e6bf653d3955" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "hmm_range_fault_unlocked_timeout", "hmm_range_fault", "hmm_do_fault", "hmm_range_fault_locked", "hmm_record_fault", "dmirror_range_fault_unlocked", "dmirror_fault_unlocked", "dmirror_read_unlocked" ], "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+CgkJCTx0ZD4yMDI2LzA3LzE2IDAwOjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RFU1RfSE1NJiMzNDssCiAgICAmIzM0O0RSTV9BQ0NFTF9BTURYRE5BJiMzNDssCiAgICAmIzM0O0RSTV9HUFVTVk0mIzM0OywKICAgICYjMzQ7RFJNX05PVVZFQVVfU1ZNJiMzNDssCiAgICAmIzM0O01TSFZfUk9PVCYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EX09OX0RFTUFORF9QQUdJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCYjMzQ7LAogICAgJiMzNDtobW1fcmFuZ2VfZmF1bHQmIzM0OywKICAgICYjMzQ7aG1tX2RvX2ZhdWx0JiMzNDssCiAgICAmIzM0O2htbV9yYW5nZV9mYXVsdF9sb2NrZWQmIzM0OywKICAgICYjMzQ7aG1tX3JlY29yZF9mYXVsdCYjMzQ7LAogICAgJiMzNDtkbWlycm9yX3JhbmdlX2ZhdWx0X3VubG9ja2VkJiMzNDssCiAgICAmIzM0O2RtaXJyb3JfZmF1bHRfdW5sb2NrZWQmIzM0OywKICAgICYjMzQ7ZG1pcnJvcl9yZWFkX3VubG9ja2VkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgdW5sb2NrZWQgdGltZW91dCB2YXJpYW50IGZvciBITU0gcmFuZ2UgZmF1bHRzIChgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgKSBhbmQgcmVmYWN0b3JzIHRoZSBleGlzdGluZyBgaG1tX3JhbmdlX2ZhdWx0YCB0byB1c2UgYSBsb2NrZWQgaGVscGVyLiBJdCBhbHNvIHVwZGF0ZXMgc2V2ZXJhbCBkcml2ZXJzIGFuZCB0aGUgSE1NIHRlc3QgbW9kdWxlIHRvIHVzZSB0aGUgbmV3IHVubG9ja2VkIHZhcmlhbnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkZXZpY2UgZHJpdmVyIGludGVyYWN0aW9uLCB3aGljaCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IHJldHJ5IGFuZCBsb2NraW5nIGxvZ2ljIGlzIHJvYnVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMDowOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGJkMDgxMjY0NjhhM2QyODhlMzk2ZmQ2ZTZmNjlhOWZjMmM3MGE2NTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAxNiAwMDowOTowOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL2htbS5yc3RcbmluZGV4IDdkNjFiN2E4YjY1Yjc5Li5lMDIxMjE4YWRhNThmZSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0XG5AQCAtMTU2LDQyICYjNDM7MTU2LDU3IEBAIER1cmluZyB0aGUgb3BzLVx1MDAzZWludmFsaWRhdGUoKSBjYWxsYmFjayB0aGUgZGV2aWNlIGRyaXZlciBtdXN0IHBlcmZvcm0gdGhlXG4gdXBkYXRlIGFjdGlvbiB0byB0aGUgcmFuZ2UgKG1hcmsgcmFuZ2UgcmVhZCBvbmx5LCBvciBmdWxseSB1bm1hcCwgZXRjLikuIFRoZVxuIGRldmljZSBtdXN0IGNvbXBsZXRlIHRoZSB1cGRhdGUgYmVmb3JlIHRoZSBkcml2ZXIgY2FsbGJhY2sgcmV0dXJucy5cbiBcbi1XaGVuIHRoZSBkZXZpY2UgZHJpdmVyIHdhbnRzIHRvIHBvcHVsYXRlIGEgcmFuZ2Ugb2YgdmlydHVhbCBhZGRyZXNzZXMsIGl0IGNhblxuLXVzZTo6XG4mIzQzO1doZW4gdGhlIGRldmljZSBkcml2ZXIgd2FudHMgdG8gcG9wdWxhdGUgYSByYW5nZSBvZiB2aXJ0dWFsIGFkZHJlc3NlcywgdGhlXG4mIzQzO25vcm1hbCBpbnRlcmZhY2UgaXM6OlxuIFxuLSAgaW50IGhtbV9yYW5nZV9mYXVsdChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSk7XG4mIzQzOyAgaW50IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpO1xuIFxuIEl0IHdpbGwgdHJpZ2dlciBhIHBhZ2UgZmF1bHQgb24gbWlzc2luZyBvciByZWFkLW9ubHkgZW50cmllcyBpZiB3cml0ZSBhY2Nlc3MgaXNcbiByZXF1ZXN0ZWQgKHNlZSBiZWxvdykuIFBhZ2UgZmF1bHRzIHVzZSB0aGUgZ2VuZXJpYyBtbSBwYWdlIGZhdWx0IGNvZGUgcGF0aCBqdXN0XG4tbGlrZSBhIENQVSBwYWdlIGZhdWx0LiBUaGUgdXNhZ2UgcGF0dGVybiBpczo6XG4mIzQzO2xpa2UgYSBDUFUgcGFnZSBmYXVsdC5cbiYjNDM7XG4mIzQzO1RoZSBjYWxsZXIgbXVzdCBub3QgaG9sZCBgYG1tYXBfcmVhZF9sb2NrYGAgYmVmb3JlIHRoZSBjYWxsLlxuJiM0MztgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KClgYCB0YWtlcyB0aGUgbW1hcCByZWFkIGxvY2sgaW50ZXJuYWxseSBhbmRcbiYjNDM7YWxsb3dzIGBgaGFuZGxlX21tX2ZhdWx0KClgYCB0byBkcm9wIGl0IGR1cmluZyBmYXVsdCBoYW5kbGluZy4gVGhpcyBpcyByZXF1aXJlZFxuJiM0Mztmb3IgVk1BcyB3aG9zZSBmYXVsdCBoYW5kbGVycyBtYXkgcmVsZWFzZSB0aGUgbW1hcCBsb2NrLCBmb3IgZXhhbXBsZSByZWdpb25zXG4mIzQzO21hbmFnZWQgYnkgYGB1c2VyZmF1bHRmZGBgLlxuJiM0MztcbiYjNDM7SWYgdGhlIG1tYXAgbG9jayBpcyBkcm9wcGVkIG9yIHRoZSByYW5nZSBpcyBpbnZhbGlkYXRlZCwgdGhlIGZ1bmN0aW9uIHJlZnJlc2hlc1xuJiM0MztgYHJhbmdlLVx1MDAzZW5vdGlmaWVyX3NlcWBgIGFuZCByZXN0YXJ0cyB0aGUgd2FsayBpbnRlcm5hbGx5LiBgYC1FSU5UUmBgIGlzIHJldHVybmVkXG4mIzQzO2lmIG1tYXAgbG9jayBhY3F1aXNpdGlvbiBpcyBpbnRlcnJ1cHRlZCBvciBhIGZhdGFsIHNpZ25hbCBpcyBwZW5kaW5nIGR1cmluZ1xuJiM0MztyZXRyeSBoYW5kbGluZy5cbiYjNDM7XG4mIzQzO1RoZSB0aW1lb3V0IGlzIHNwZWNpZmllZCBpbiBqaWZmaWVzOyBwYXNzaW5nIGBgMGBgIG1lYW5zIHJldHJ5IGluZGVmaW5pdGVseS4gVGhlXG4mIzQzO3RpbWVvdXQgZXhpc3RzIHRvIHByZXNlcnZlIGNhbGxlciBwb2xpY3kgZm9yIHJlcGVhdGVkIG1tdS1ub3RpZmllciBpbnZhbGlkYXRpb25cbiYjNDM7YW5kIGlzIGNoZWNrZWQgYmV0d2VlbiByZXRyeSBhdHRlbXB0cy4gSE1NIGRvZXMgbm90IGludGVycnVwdCBwYWdlIGZhdWx0XG4mIzQzO2hhbmRsaW5nIHdoZW4gdGhlIHRpbWVvdXQgZXhwaXJlcywgYnV0IHJldHVybnMgYGAtRUJVU1lgYCBpZiB0aGUgcmV0cnkgYnVkZ2V0IGlzXG4mIzQzO2V4aGF1c3RlZCBiZWZvcmUgYSBzdGFibGUgcmFuZ2UgaXMgb2J0YWluZWQuXG4mIzQzO1xuJiM0MztUaGUgdXNhZ2UgcGF0dGVybiBpczo6XG4gXG4gIGludCBkcml2ZXJfcG9wdWxhdGVfcmFuZ2UoLi4uKVxuICB7XG4gICAgICAgc3RydWN0IGhtbV9yYW5nZSByYW5nZTtcbiYjNDM7ICAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0O1xuICAgICAgIC4uLlxuIFxuJiM0MzsgICAgICB0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcbiAgICAgICByYW5nZS5ub3RpZmllciA9IFx1MDAyNmludGVydmFsX3N1YjtcbiAgICAgICByYW5nZS5zdGFydCA9IC4uLjtcbiAgICAgICByYW5nZS5lbmQgPSAuLi47XG4gICAgICAgcmFuZ2UuaG1tX3BmbnMgPSAuLi47XG4gXG4tICAgICAgaWYgKCFtbWdldF9ub3RfemVybyhpbnRlcnZhbF9zdWItXHUwMDNlbm90aWZpZXIubW0pKVxuJiM0MzsgICAgICBpZiAoIW1tZ2V0X25vdF96ZXJvKGludGVydmFsX3N1Yi5tbSkpXG4gICAgICAgICAgIHJldHVybiAtRUZBVUxUO1xuIFxuICBhZ2Fpbjpcbi0gICAgICByYW5nZS5ub3RpZmllcl9zZXEgPSBtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihcdTAwMjZpbnRlcnZhbF9zdWIpO1xuLSAgICAgIG1tYXBfcmVhZF9sb2NrKG1tKTtcbi0gICAgICByZXQgPSBobW1fcmFuZ2VfZmF1bHQoXHUwMDI2cmFuZ2UpO1xuLSAgICAgIGlmIChyZXQpIHtcbi0gICAgICAgICAgbW1hcF9yZWFkX3VubG9jayhtbSk7XG4tICAgICAgICAgIGlmIChyZXQgPT0gLUVCVVNZKVxuLSAgICAgICAgICAgICAgICAgZ290byBhZ2Fpbjtcbi0gICAgICAgICAgcmV0dXJuIHJldDtcbi0gICAgICB9XG4tICAgICAgbW1hcF9yZWFkX3VubG9jayhtbSk7XG4mIzQzOyAgICAgIHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNnJhbmdlLCB0aW1lb3V0KTtcbiYjNDM7ICAgICAgaWYgKHJldClcbiYjNDM7ICAgICAgICAgIGdvdG8gb3V0X3B1dDtcbiBcbiAgICAgICB0YWtlX2xvY2soZHJpdmVyLVx1MDAzZXVwZGF0ZSk7XG4tICAgICAgaWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KFx1MDAyNm5pLCByYW5nZS5ub3RpZmllcl9zZXEpIHtcbiYjNDM7ICAgICAgaWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KHJhbmdlLm5vdGlmaWVyLCByYW5nZS5ub3RpZmllcl9zZXEpKSB7XG4gICAgICAgICAgIHJlbGVhc2VfbG9jayhkcml2ZXItXHUwMDNldXBkYXRlKTtcbiAgICAgICAgICAgZ290byBhZ2FpbjtcbiAgICAgICB9XG5AQCAtMjAwLDEzICYjNDM7MjE1LDMxIEBAIGxpa2UgYSBDUFUgcGFnZSBmYXVsdC4gVGhlIHVzYWdlIHBhdHRlcm4gaXM6OlxuICAgICAgICAqIHVuZGVyIHRoZSB1cGRhdGUgbG9jayAqL1xuIFxuICAgICAgIHJlbGVhc2VfbG9jayhkcml2ZXItXHUwMDNldXBkYXRlKTtcbi0gICAgICByZXR1cm4gMDtcbiYjNDM7ICAgICAgcmV0ID0gMDtcbiYjNDM7XG4mIzQzOyBvdXRfcHV0OlxuJiM0MzsgICAgICBtbXB1dChpbnRlcnZhbF9zdWIubW0pO1xuJiM0MzsgICAgICByZXR1cm4gcmV0O1xuICB9XG4gXG4gVGhlIGRyaXZlci1cdTAwM2V1cGRhdGUgbG9jayBpcyB0aGUgc2FtZSBsb2NrIHRoYXQgdGhlIGRyaXZlciB0YWtlcyBpbnNpZGUgaXRzXG4gaW52YWxpZGF0ZSgpIGNhbGxiYWNrLiBUaGF0IGxvY2sgbXVzdCBiZSBoZWxkIGJlZm9yZSBjYWxsaW5nXG4gbW11X2ludGVydmFsX3JlYWRfcmV0cnkoKSB0byBhdm9pZCBhbnkgcmFjZSB3aXRoIGEgY29uY3VycmVudCBDUFUgcGFnZSB0YWJsZVxuLXVwZGF0ZS5cbiYjNDM7dXBkYXRlLiBUaGUgcmV0cnkgY2hlY2sgbXVzdCB1c2UgdGhlIHNhbWUgbm90aWZpZXIgYW5kIHNlcXVlbmNlIG51bWJlciBzdG9yZWRcbiYjNDM7aW4gYGByYW5nZWBgIGJ5IGBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKWBgLlxuJiM0MztcbiYjNDM7SG9sZGluZyB0aGUgbW1hcCBsb2NrIGFjcm9zcyBITU0gZmF1bHRzXG4mIzQzOz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MztcbiYjNDM7TW9zdCBjYWxsZXJzIHNob3VsZCB1c2UgYGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpYGAuIElmIGEgZHJpdmVyXG4mIzQzO3JlYWxseSBuZWVkcyB0byBob2xkIHRoZSBtbWFwIGxvY2sgYWNyb3NzIHdvcmsgb3V0c2lkZSBITU0sIGl0IGNhbiB1c2U6OlxuJiM0MztcbiYjNDM7ICBpbnQgaG1tX3JhbmdlX2ZhdWx0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKTtcbiYjNDM7XG4mIzQzO1RoZSBtbWFwIGxvY2sgbXVzdCBiZSBoZWxkIGJ5IHRoZSBjYWxsZXIgYW5kIHdpbGwgcmVtYWluIGhlbGQgb24gcmV0dXJuLiBUaGlzXG4mIzQzO2ludGVyZmFjZSBjYW5ub3Qgc3VwcG9ydCBWTUFzIHdob3NlIGZhdWx0IGhhbmRsZXJzIG5lZWQgdG8gZHJvcCB0aGUgbW1hcCBsb2NrLlxuJiM0MztOZXcgY2FsbGVycyBzaG91bGQgcHJlZmVyIGBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKWBgIHVubGVzcyB0aGV5XG4mIzQzO2hhdmUgYSBzcGVjaWZpYyByZXF1aXJlbWVudCB0byBrZWVwIHRoZSBtbWFwIGxvY2sgaGVsZCBhY3Jvc3MgdGhlIGNhbGwuXG4gXG4gTGV2ZXJhZ2UgZGVmYXVsdF9mbGFncyBhbmQgcGZuX2ZsYWdzX21hc2tcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuQEAgLTIyMSw4ICYjNDM7MjU0LDggQEAgcGVybWlzc2lvbiwgaXQgc2V0czo6XG4gICAgIHJhbmdlLVx1MDAzZWRlZmF1bHRfZmxhZ3MgPSBITU1fUEZOX1JFUV9GQVVMVDtcbiAgICAgcmFuZ2UtXHUwMDNlcGZuX2ZsYWdzX21hc2sgPSAwO1xuIFxuLWFuZCBjYWxscyBobW1fcmFuZ2VfZmF1bHQoKSBhcyBkZXNjcmliZWQgYWJvdmUuIFRoaXMgd2lsbCBmaWxsIGZhdWx0IGFsbCBwYWdlc1xuLWluIHRoZSByYW5nZSB3aXRoIGF0IGxlYXN0IHJlYWQgcGVybWlzc2lvbi5cbiYjNDM7YW5kIGNhbGxzIHRoZSBITU0gcmFuZ2UgZmF1bHQgaGVscGVyIGFzIGRlc2NyaWJlZCBhYm92ZS4gVGhpcyB3aWxsIGZhdWx0XG4mIzQzO2FsbCBwYWdlcyBpbiB0aGUgcmFuZ2Ugd2l0aCBhdCBsZWFzdCByZWFkIHBlcm1pc3Npb24uXG4gXG4gTm93IGxldCYjMzk7cyBzYXkgdGhlIGRyaXZlciB3YW50cyB0byBkbyB0aGUgc2FtZSBleGNlcHQgZm9yIG9uZSBwYWdlIGluIHRoZSByYW5nZSBmb3JcbiB3aGljaCBpdCB3YW50cyB0byBoYXZlIHdyaXRlIHBlcm1pc3Npb24uIE5vdyBkcml2ZXIgc2V0OjpcbkBAIC0yMzYsOSAmIzQzOzI2OSw5IEBAIGFkZHJlc3MgPT0gcmFuZ2UtXHUwMDNlc3RhcnQgJiM0MzsgKGluZGV4X29mX3dyaXRlIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSBpdCB3aWxsIGZhdWx0IHdpdGhcbiB3cml0ZSBwZXJtaXNzaW9uIGkuZS4sIGlmIHRoZSBDUFUgcHRlIGRvZXMgbm90IGhhdmUgd3JpdGUgcGVybWlzc2lvbiBzZXQgdGhlbiBITU1cbiB3aWxsIGNhbGwgaGFuZGxlX21tX2ZhdWx0KCkuXG4gXG4tQWZ0ZXIgaG1tX3JhbmdlX2ZhdWx0IGNvbXBsZXRlcyB0aGUgZmxhZyBiaXRzIGFyZSBzZXQgdG8gdGhlIGN1cnJlbnQgc3RhdGUgb2Zcbi10aGUgcGFnZSB0YWJsZXMsIGllIEhNTV9QRk5fVkFMSUQgfCBITU1fUEZOX1dSSVRFIHdpbGwgYmUgc2V0IGlmIHRoZSBwYWdlIGlzXG4td3JpdGFibGUuXG4mIzQzO0FmdGVyIHRoZSBITU0gcmFuZ2UgZmF1bHQgaGVscGVyIGNvbXBsZXRlcyB0aGUgZmxhZyBiaXRzIGFyZSBzZXQgdG8gdGhlXG4mIzQzO2N1cnJlbnQgc3RhdGUgb2YgdGhlIHBhZ2UgdGFibGVzLCBpZSBITU1fUEZOX1ZBTElEIHwgSE1NX1BGTl9XUklURSB3aWxsIGJlXG4mIzQzO3NldCBpZiB0aGUgcGFnZSBpcyB3cml0YWJsZS5cbiBcbiBcbiBSZXByZXNlbnQgYW5kIG1hbmFnZSBkZXZpY2UgbWVtb3J5IGZyb20gY29yZSBrZXJuZWwgcG9pbnQgb2Ygdmlld1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNjZWwvYW1keGRuYS9haWUyX2N0eC5jIGIvZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FpZTJfY3R4LmNcbmluZGV4IDU0NDg2OTYwY2JmNWU2Li5iNWI0Y2EyNjMwMDJkYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYWNjZWwvYW1keGRuYS9haWUyX2N0eC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguY1xuQEAgLTEwMzQsNyAmIzQzOzEwMzQsNyBAQCBzdGF0aWMgaW50IGFpZTJfcG9wdWxhdGVfcmFuZ2Uoc3RydWN0IGFtZHhkbmFfZ2VtX29iaiAqYWJvKVxuIFx0Ym9vbCBmb3VuZDtcbiBcdGludCByZXQ7XG4gXG4tXHR0aW1lb3V0ID0gamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xuJiM0MztcdHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xuIGFnYWluOlxuIFx0Zm91bmQgPSBmYWxzZTtcbiBcdGRvd25fd3JpdGUoXHUwMDI2eGRuYS1cdTAwM2Vub3RpZmllcl9sb2NrKTtcbkBAIC0xMDYxLDI0ICYjNDM7MTA2MSw5IEBAIHN0YXRpYyBpbnQgYWllMl9wb3B1bGF0ZV9yYW5nZShzdHJ1Y3QgYW1keGRuYV9nZW1fb2JqICphYm8pXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuIFx0fVxuIFxuLVx0bWFwcC1cdTAwM2VyYW5nZS5ub3RpZmllcl9zZXEgPSBtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihcdTAwMjZtYXBwLVx1MDAzZW5vdGlmaWVyKTtcbi1cdG1tYXBfcmVhZF9sb2NrKG1tKTtcbi1cdHJldCA9IGhtbV9yYW5nZV9mYXVsdChcdTAwMjZtYXBwLVx1MDAzZXJhbmdlKTtcbi1cdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuLVx0aWYgKHJldCkge1xuLVx0XHRpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkge1xuLVx0XHRcdHJldCA9IC1FVElNRTtcbi1cdFx0XHRnb3RvIHB1dF9tbTtcbi1cdFx0fVxuLVxuLVx0XHRpZiAocmV0ID09IC1FQlVTWSkge1xuLVx0XHRcdGFtZHhkbmFfdW1hcF9wdXQobWFwcCk7XG4tXHRcdFx0bW1wdXQobW0pO1xuLVx0XHRcdGdvdG8gYWdhaW47XG4tXHRcdH1cbi1cbiYjNDM7XHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcdTAwMjZtYXBwLVx1MDAzZXJhbmdlLCB0aW1lb3V0KTtcbiYjNDM7XHRpZiAocmV0KVxuIFx0XHRnb3RvIHB1dF9tbTtcbi1cdH1cbiBcbiBcdGRvd25fd3JpdGUoXHUwMDI2eGRuYS1cdTAwM2Vub3RpZmllcl9sb2NrKTtcbiBcdGlmIChtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeShcdTAwMjZtYXBwLVx1MDAzZW5vdGlmaWVyLCBtYXBwLVx1MDAzZXJhbmdlLm5vdGlmaWVyX3NlcSkpIHtcbkBAIC0xMDk2LDcgJiM0MzsxMDgxLDcgQEAgc3RhdGljIGludCBhaWUyX3BvcHVsYXRlX3JhbmdlKHN0cnVjdCBhbWR4ZG5hX2dlbV9vYmogKmFibylcbiBwdXRfbW06XG4gXHRhbWR4ZG5hX3VtYXBfcHV0KG1hcHApO1xuIFx0bW1wdXQobW0pO1xuLVx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXR1cm4gcmV0ID09IC1FQlVTWSA/IC1FVElNRSA6IHJldDtcbiB9XG4gXG4gaW50IGFpZTJfY21kX3N1Ym1pdChzdHJ1Y3QgYW1keGRuYV9od2N0eCAqaHdjdHgsIHN0cnVjdCBhbWR4ZG5hX3NjaGVkX2pvYiAqam9iLCB1NjQgKnNlcSlcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uY1xuaW5kZXggOTU4Y2I2MDVhZWRkNTMuLmRlNWJiZmU1OGVlOTQ1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uY1xuQEAgLTc3Myw4ICYjNDM7NzczLDcgQEAgZW51bSBkcm1fZ3B1c3ZtX3NjYW5fcmVzdWx0IGRybV9ncHVzdm1fc2Nhbl9tbShzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqcmFuZ2UsXG4gXHRcdC5lbmQgPSBlbmQsXG4gXHRcdC5kZXZfcHJpdmF0ZV9vd25lciA9IGRldl9wcml2YXRlX293bmVyLFxuIFx0fTtcbi1cdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9XG4tXHRcdGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xuIFx0ZW51bSBkcm1fZ3B1c3ZtX3NjYW5fcmVzdWx0IHN0YXRlID0gRFJNX0dQVVNWTV9TQ0FOX1VOUE9QVUxBVEVELCBuZXdfc3RhdGU7XG4gXHR1bnNpZ25lZCBsb25nICpwZm5zO1xuIFx0dW5zaWduZWQgbG9uZyBucGFnZXMgPSBucGFnZXNfaW5fcmFuZ2Uoc3RhcnQsIGVuZCk7XG5AQCAtNzg4LDIyICYjNDM7Nzg3LDcgQEAgZW51bSBkcm1fZ3B1c3ZtX3NjYW5fcmVzdWx0IGRybV9ncHVzdm1fc2Nhbl9tbShzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqcmFuZ2UsXG4gXHRobW1fcmFuZ2UuaG1tX3BmbnMgPSBwZm5zO1xuIFxuIHJldHJ5OlxuLVx0aG1tX3JhbmdlLm5vdGlmaWVyX3NlcSA9IG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKG5vdGlmaWVyKTtcbi1cdG1tYXBfcmVhZF9sb2NrKHJhbmdlLVx1MDAzZWdwdXN2bS1cdTAwM2VtbSk7XG4tXG4tXHR3aGlsZSAodHJ1ZSkge1xuLVx0XHRlcnIgPSBobW1fcmFuZ2VfZmF1bHQoXHUwMDI2aG1tX3JhbmdlKTtcbi1cdFx0aWYgKGVyciA9PSAtRUJVU1kpIHtcbi1cdFx0XHRpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSlcbi1cdFx0XHRcdGJyZWFrO1xuLVxuLVx0XHRcdGhtbV9yYW5nZS5ub3RpZmllcl9zZXEgPVxuLVx0XHRcdFx0bW11X2ludGVydmFsX3JlYWRfYmVnaW4obm90aWZpZXIpO1xuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHR9XG4tXHRcdGJyZWFrO1xuLVx0fVxuLVx0bW1hcF9yZWFkX3VubG9jayhyYW5nZS1cdTAwM2VncHVzdm0tXHUwMDNlbW0pO1xuJiM0MztcdGVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNmhtbV9yYW5nZSwgdGltZW91dCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9mcmVlO1xuIFxuQEAgLTE0MDYsOCAmIzQzOzEzOTAsNyBAQCBpbnQgZHJtX2dwdXN2bV9nZXRfcGFnZXMoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcbiBcdFx0LmRldl9wcml2YXRlX293bmVyID0gY3R4LVx1MDAzZWRldmljZV9wcml2YXRlX3BhZ2Vfb3duZXIsXG4gXHR9O1xuIFx0dm9pZCAqemRkO1xuLVx0dW5zaWduZWQgbG9uZyB0aW1lb3V0ID1cbi1cdFx0amlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7XG4gXHR1bnNpZ25lZCBsb25nIGksIGo7XG4gXHR1bnNpZ25lZCBsb25nIG5wYWdlcyA9IG5wYWdlc19pbl9yYW5nZShwYWdlc19zdGFydCwgcGFnZXNfZW5kKTtcbiBcdHVuc2lnbmVkIGxvbmcgbnVtX2RtYV9tYXBwZWQ7XG5AQCAtMTQyMiw5ICYjNDM7MTQwNSw2IEBAIGludCBkcm1fZ3B1c3ZtX2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxuIFx0c3RydWN0IGRtYV9pb3ZhX3N0YXRlICpzdGF0ZSA9IFx1MDAyNnN2bV9wYWdlcy1cdTAwM2VzdGF0ZTtcbiBcbiByZXRyeTpcbi1cdGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKVxuLVx0XHRyZXR1cm4gLUVCVVNZO1xuLVxuIFx0aG1tX3JhbmdlLm5vdGlmaWVyX3NlcSA9IG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKG5vdGlmaWVyKTtcbiBcdGlmIChkcm1fZ3B1c3ZtX3BhZ2VzX3ZhbGlkX3VubG9ja2VkKGdwdXN2bSwgc3ZtX3BhZ2VzKSlcbiBcdFx0Z290byBzZXRfc2Vxbm87XG5AQCAtMTQzOSwyMSAmIzQzOzE0MTksNyBAQCBpbnQgZHJtX2dwdXN2bV9nZXRfcGFnZXMoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcbiBcdH1cbiBcbiBcdGhtbV9yYW5nZS5obW1fcGZucyA9IHBmbnM7XG4tXHR3aGlsZSAodHJ1ZSkge1xuLVx0XHRtbWFwX3JlYWRfbG9jayhtbSk7XG4tXHRcdGVyciA9IGhtbV9yYW5nZV9mYXVsdChcdTAwMjZobW1fcmFuZ2UpO1xuLVx0XHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbi1cbi1cdFx0aWYgKGVyciA9PSAtRUJVU1kpIHtcbi1cdFx0XHRpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSlcbi1cdFx0XHRcdGJyZWFrO1xuLVxuLVx0XHRcdGhtbV9yYW5nZS5ub3RpZmllcl9zZXEgPVxuLVx0XHRcdFx0bW11X2ludGVydmFsX3JlYWRfYmVnaW4obm90aWZpZXIpO1xuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHR9XG4tXHRcdGJyZWFrO1xuLVx0fVxuJiM0MztcdGVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNmhtbV9yYW5nZSwgdGltZW91dCk7XG4gXHRtbXB1dChtbSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9mcmVlO1xuQEAgLTE3MjAsOCAmIzQzOzE2ODYsNyBAQCBpbnQgZHJtX2dwdXN2bV9yYW5nZV9ldmljdChzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxuIFx0XHQuZW5kID0gZHJtX2dwdXN2bV9yYW5nZV9lbmQocmFuZ2UpLFxuIFx0XHQuZGV2X3ByaXZhdGVfb3duZXIgPSBOVUxMLFxuIFx0fTtcbi1cdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9XG4tXHRcdGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xuIFx0dW5zaWduZWQgbG9uZyAqcGZucztcbiBcdHVuc2lnbmVkIGxvbmcgbnBhZ2VzID0gbnBhZ2VzX2luX3JhbmdlKGRybV9ncHVzdm1fcmFuZ2Vfc3RhcnQocmFuZ2UpLFxuIFx0XHRcdFx0XHQgICAgICAgZHJtX2dwdXN2bV9yYW5nZV9lbmQocmFuZ2UpKTtcbkBAIC0xNzM2LDI0ICYjNDM7MTcwMSwxMiBAQCBpbnQgZHJtX2dwdXN2bV9yYW5nZV9ldmljdChzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdGhtbV9yYW5nZS5obW1fcGZucyA9IHBmbnM7XG4tXHR3aGlsZSAoIXRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHtcbi1cdFx0aG1tX3JhbmdlLm5vdGlmaWVyX3NlcSA9IG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKG5vdGlmaWVyKTtcbi1cdFx0aWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHtcbi1cdFx0XHRlcnIgPSAtRVRJTUU7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cbi1cdFx0bW1hcF9yZWFkX2xvY2sobW0pO1xuLVx0XHRlcnIgPSBobW1fcmFuZ2VfZmF1bHQoXHUwMDI2aG1tX3JhbmdlKTtcbi1cdFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4tXHRcdGlmIChlcnIgIT0gLUVCVVNZKVxuLVx0XHRcdGJyZWFrO1xuLVx0fVxuJiM0MztcdGVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNmhtbV9yYW5nZSwgdGltZW91dCk7XG4gXG4gXHRrdmZyZWUocGZucyk7XG4gXHRtbXB1dChtbSk7XG4gXG4tXHRyZXR1cm4gZXJyO1xuJiM0MztcdHJldHVybiBlcnIgPT0gLUVCVVNZID8gLUVUSU1FIDogZXJyO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ3B1c3ZtX3JhbmdlX2V2aWN0KTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N2bS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uY1xuaW5kZXggZGNjOTIxMzE0ODhlYWIuLjU4NzM1NDQ2ZDc4MzJjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uY1xuQEAgLTY3OCwyMCAmIzQzOzY3OCwyMiBAQCBzdGF0aWMgaW50IG5vdXZlYXVfcmFuZ2VfZmF1bHQoc3RydWN0IG5vdXZlYXVfc3ZtbSAqc3ZtbSxcbiBcdHJhbmdlLmVuZCA9IG5vdGlmaWVyLVx1MDAzZW5vdGlmaWVyLmludGVydmFsX3RyZWUubGFzdCAmIzQzOyAxO1xuIFxuIFx0d2hpbGUgKHRydWUpIHtcbi1cdFx0aWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHtcbiYjNDM7XHRcdGxvbmcgcmVtYWluaW5nID0gdGltZW91dCAtIGppZmZpZXM7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFRoZSBITU0gdGltZW91dCBvbmx5IGJvdW5kcyByZXRyaWVzIHdoaWxlIEhNTSBpcyB3YWxraW5nIGFuZFxuJiM0MztcdFx0ICogZmF1bHRpbmcgdGhlIHJhbmdlLiBUaGlzIGZhdWx0IGlzIGhhbmRsZWQgYnkgYSBrZXJuZWwgd29ya2VyLFxuJiM0MztcdFx0ICogc28gZmF0YWwgc2lnbmFscyBmcm9tIHRoZSBmYXVsdGluZyBwcm9jZXNzIGNhbm5vdCBzdG9wIGFuXG4mIzQzO1x0XHQgKiBlbmRsZXNzIHN0cmVhbSBvZiBpbnZhbGlkYXRpb25zIGhlcmUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHRpbWVvdXQpKSB7XG4gXHRcdFx0cmV0ID0gLUVCVVNZO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4gXG4tXHRcdHJhbmdlLm5vdGlmaWVyX3NlcSA9IG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKHJhbmdlLm5vdGlmaWVyKTtcbi1cdFx0bW1hcF9yZWFkX2xvY2sobW0pO1xuLVx0XHRyZXQgPSBobW1fcmFuZ2VfZmF1bHQoXHUwMDI2cmFuZ2UpO1xuLVx0XHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbi1cdFx0aWYgKHJldCkge1xuLVx0XHRcdGlmIChyZXQgPT0gLUVCVVNZKVxuLVx0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcdTAwMjZyYW5nZSwgcmVtYWluaW5nKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4gXHRcdFx0Z290byBvdXQ7XG4tXHRcdH1cbiBcbiBcdFx0bXV0ZXhfbG9jayhcdTAwMjZzdm1tLVx1MDAzZW11dGV4KTtcbiBcdFx0aWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KHJhbmdlLm5vdGlmaWVyLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHYvbXNodl9yZWdpb25zLmMgYi9kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jXG5pbmRleCA2ZDY1ZTViNDIxNTI5NS4uZGRkYWFkZTMxYjVkYzMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jXG5AQCAtMzgxLDQ2ICYjNDM7MzgxLDYgQEAgaW50IG1zaHZfcmVnaW9uX2dldChzdHJ1Y3QgbXNodl9tZW1fcmVnaW9uICpyZWdpb24pXG4gXHRyZXR1cm4ga3JlZl9nZXRfdW5sZXNzX3plcm8oXHUwMDI2cmVnaW9uLVx1MDAzZW1yZWdfcmVmY291bnQpO1xuIH1cbiBcbi0vKipcbi0gKiBtc2h2X3JlZ2lvbl9obW1fZmF1bHRfYW5kX2xvY2sgLSBIYW5kbGUgSE1NIGZhdWx0cyBhbmQgbG9jayB0aGUgbWVtb3J5IHJlZ2lvblxuLSAqIEByZWdpb246IFBvaW50ZXIgdG8gdGhlIG1lbW9yeSByZWdpb24gc3RydWN0dXJlXG4tICogQHJhbmdlOiBQb2ludGVyIHRvIHRoZSBITU0gcmFuZ2Ugc3RydWN0dXJlXG4tICpcbi0gKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgc3RlcHM6XG4tICogMS4gUmVhZHMgdGhlIG5vdGlmaWVyIHNlcXVlbmNlIGZvciB0aGUgSE1NIHJhbmdlLlxuLSAqIDIuIEFjcXVpcmVzIGEgcmVhZCBsb2NrIG9uIHRoZSBtZW1vcnkgbWFwLlxuLSAqIDMuIEhhbmRsZXMgSE1NIGZhdWx0cyBmb3IgdGhlIHNwZWNpZmllZCByYW5nZS5cbi0gKiA0LiBSZWxlYXNlcyB0aGUgcmVhZCBsb2NrIG9uIHRoZSBtZW1vcnkgbWFwLlxuLSAqIDUuIElmIHN1Y2Nlc3NmdWwsIGxvY2tzIHRoZSBtZW1vcnkgcmVnaW9uIG11dGV4LlxuLSAqIDYuIFZlcmlmaWVzIGlmIHRoZSBub3RpZmllciBzZXF1ZW5jZSBoYXMgY2hhbmdlZCBkdXJpbmcgdGhlIG9wZXJhdGlvbi5cbi0gKiAgICBJZiBpdCBoYXMsIHJlbGVhc2VzIHRoZSBtdXRleCBhbmQgcmV0dXJucyAtRUJVU1kgdG8gbWF0Y2ggd2l0aFxuLSAqICAgIGhtbV9yYW5nZV9mYXVsdCgpIHJldHVybiBjb2RlIGZvciByZXBlYXRpbmcuXG4tICpcbi0gKiBSZXR1cm46IDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cbi0gKi9cbi1zdGF0aWMgaW50IG1zaHZfcmVnaW9uX2htbV9mYXVsdF9hbmRfbG9jayhzdHJ1Y3QgbXNodl9tZW1fcmVnaW9uICpyZWdpb24sXG4tXHRcdFx0XHRcdCAgc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpXG4te1xuLVx0aW50IHJldDtcbi1cbi1cdHJhbmdlLVx1MDAzZW5vdGlmaWVyX3NlcSA9IG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKHJhbmdlLVx1MDAzZW5vdGlmaWVyKTtcbi1cdG1tYXBfcmVhZF9sb2NrKHJlZ2lvbi1cdTAwM2VtcmVnX21uaS5tbSk7XG4tXHRyZXQgPSBobW1fcmFuZ2VfZmF1bHQocmFuZ2UpO1xuLVx0bW1hcF9yZWFkX3VubG9jayhyZWdpb24tXHUwMDNlbXJlZ19tbmkubW0pO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbi1cdG11dGV4X2xvY2soXHUwMDI2cmVnaW9uLVx1MDAzZW1yZWdfbXV0ZXgpO1xuLVxuLVx0aWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KHJhbmdlLVx1MDAzZW5vdGlmaWVyLCByYW5nZS1cdTAwM2Vub3RpZmllcl9zZXEpKSB7XG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZyZWdpb24tXHUwMDNlbXJlZ19tdXRleCk7XG4tXHRcdGNvbmRfcmVzY2hlZCgpO1xuLVx0XHRyZXR1cm4gLUVCVVNZO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIC8qKlxuICAqIG1zaHZfcmVnaW9uX3JhbmdlX2ZhdWx0IC0gSGFuZGxlIG1lbW9yeSByYW5nZSBmYXVsdHMgZm9yIGEgZ2l2ZW4gcmVnaW9uLlxuICAqIEByZWdpb246IFBvaW50ZXIgdG8gdGhlIG1lbW9yeSByZWdpb24gc3RydWN0dXJlLlxuQEAgLTQ1MiwxMyAmIzQzOzQxMiwxOSBAQCBzdGF0aWMgaW50IG1zaHZfcmVnaW9uX3JhbmdlX2ZhdWx0KHN0cnVjdCBtc2h2X21lbV9yZWdpb24gKnJlZ2lvbixcbiBcdHJhbmdlLnN0YXJ0ID0gcmVnaW9uLVx1MDAzZXN0YXJ0X3VhZGRyICYjNDM7IHBhZ2Vfb2Zmc2V0ICogSFZfSFlQX1BBR0VfU0laRTtcbiBcdHJhbmdlLmVuZCA9IHJhbmdlLnN0YXJ0ICYjNDM7IHBhZ2VfY291bnQgKiBIVl9IWVBfUEFHRV9TSVpFO1xuIFxuLVx0ZG8ge1xuLVx0XHRyZXQgPSBtc2h2X3JlZ2lvbl9obW1fZmF1bHRfYW5kX2xvY2socmVnaW9uLCBcdTAwMjZyYW5nZSk7XG4tXHR9IHdoaWxlIChyZXQgPT0gLUVCVVNZKTtcbi1cbiYjNDM7YWdhaW46XG4mIzQzO1x0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXHUwMDI2cmFuZ2UsIDApO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXQ7XG4gXG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZyZWdpb24tXHUwMDNlbXJlZ19tdXRleCk7XG4mIzQzO1xuJiM0MztcdGlmIChtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeShyYW5nZS5ub3RpZmllciwgcmFuZ2Uubm90aWZpZXJfc2VxKSkge1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnJlZ2lvbi1cdTAwM2VtcmVnX211dGV4KTtcbiYjNDM7XHRcdGNvbmRfcmVzY2hlZCgpO1xuJiM0MztcdFx0Z290byBhZ2FpbjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGFnZV9jb3VudDsgaSYjNDM7JiM0MzspXG4gXHRcdHJlZ2lvbi1cdTAwM2VtcmVnX3BhZ2VzW3BhZ2Vfb2Zmc2V0ICYjNDM7IGldID0gaG1tX3Bmbl90b19wYWdlKHBmbnNbaV0pO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jXG5pbmRleCA0MDRmYTFjYzMyNTQyYy4uOWNjMjFjZDc2MmQ5ODkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jXG5AQCAtMzI5LDcgJiM0MzszMjksNyBAQCBpbnQgaWJfdW1lbV9vZHBfbWFwX2RtYV9hbmRfbG9jayhzdHJ1Y3QgaWJfdW1lbV9vZHAgKnVtZW1fb2RwLCB1NjQgdXNlcl92aXJ0LFxuIFx0c3RydWN0IG1tX3N0cnVjdCAqb3duaW5nX21tID0gdW1lbV9vZHAtXHUwMDNldW1lbS5vd25pbmdfbW07XG4gXHRpbnQgcGZuX2luZGV4LCBkbWFfaW5kZXgsIHJldCA9IDAsIHN0YXJ0X2lkeDtcbiBcdHVuc2lnbmVkIGludCBwYWdlX3NoaWZ0LCBobW1fb3JkZXIsIHBmbl9zdGFydF9pZHg7XG4tXHR1bnNpZ25lZCBsb25nIG51bV9wZm5zLCBjdXJyZW50X3NlcTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG51bV9wZm5zO1xuIFx0c3RydWN0IGhtbV9yYW5nZSByYW5nZSA9IHt9O1xuIFx0dW5zaWduZWQgbG9uZyB0aW1lb3V0O1xuIFxuQEAgLTM2MywyNiAmIzQzOzM2MywxOCBAQCBpbnQgaWJfdW1lbV9vZHBfbWFwX2RtYV9hbmRfbG9jayhzdHJ1Y3QgaWJfdW1lbV9vZHAgKnVtZW1fb2RwLCB1NjQgdXNlcl92aXJ0LFxuIFx0fVxuIFxuIFx0cmFuZ2UuaG1tX3BmbnMgPSBcdTAwMjYodW1lbV9vZHAtXHUwMDNlbWFwLnBmbl9saXN0W3Bmbl9zdGFydF9pZHhdKTtcbi1cdHRpbWVvdXQgPSBqaWZmaWVzICYjNDM7IG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7XG4mIzQzO1x0dGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7XG4gXG4gcmV0cnk6XG4tXHRjdXJyZW50X3NlcSA9IHJhbmdlLm5vdGlmaWVyX3NlcSA9XG4tXHRcdG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKFx1MDAyNnVtZW1fb2RwLVx1MDAzZW5vdGlmaWVyKTtcbi1cbi1cdG1tYXBfcmVhZF9sb2NrKG93bmluZ19tbSk7XG4tXHRyZXQgPSBobW1fcmFuZ2VfZmF1bHQoXHUwMDI2cmFuZ2UpO1xuLVx0bW1hcF9yZWFkX3VubG9jayhvd25pbmdfbW0pO1xuLVx0aWYgKHVubGlrZWx5KHJldCkpIHtcbi1cdFx0aWYgKHJldCA9PSAtRUJVU1kgXHUwMDI2XHUwMDI2ICF0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKVxuLVx0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1x0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXHUwMDI2cmFuZ2UsIHRpbWVvdXQpO1xuJiM0MztcdGlmICh1bmxpa2VseShyZXQpKVxuIFx0XHRnb3RvIG91dF9wdXRfbW07XG4tXHR9XG4gXG4gXHRzdGFydF9pZHggPSAocmFuZ2Uuc3RhcnQgLSBpYl91bWVtX3N0YXJ0KHVtZW1fb2RwKSkgXHUwMDNlXHUwMDNlIHBhZ2Vfc2hpZnQ7XG4gXHRkbWFfaW5kZXggPSBzdGFydF9pZHg7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNnVtZW1fb2RwLVx1MDAzZXVtZW1fbXV0ZXgpO1xuLVx0aWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KFx1MDAyNnVtZW1fb2RwLVx1MDAzZW5vdGlmaWVyLCBjdXJyZW50X3NlcSkpIHtcbiYjNDM7XHRpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkoXHUwMDI2dW1lbV9vZHAtXHUwMDNlbm90aWZpZXIsIHJhbmdlLm5vdGlmaWVyX3NlcSkpIHtcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnVtZW1fb2RwLVx1MDAzZXVtZW1fbXV0ZXgpO1xuIFx0XHRnb3RvIHJldHJ5O1xuIFx0fVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaG1tLmggYi9pbmNsdWRlL2xpbnV4L2htbS5oXG5pbmRleCBkYjc1ZmZjOTQ5YTdhYy4uNmYwNGUzOTMyZjViMGMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2htbS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2htbS5oXG5AQCAtMTIzLDYgJiM0MzsxMjMsOCBAQCBzdHJ1Y3QgaG1tX3JhbmdlIHtcbiAgKiBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vbW0vaG1tLnJzdCBmb3IgaG93IHRvIHVzZSB0aGUgcmFuZ2UgQVBJLlxuICAqL1xuIGludCBobW1fcmFuZ2VfZmF1bHQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpO1xuJiM0MztpbnQgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsXG4mIzQzO1x0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpO1xuIFxuIC8qXG4gICogSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCAtIGRlZmF1bHQgdGltZW91dCAobXMpIHdoZW4gd2FpdGluZyBmb3IgYSByYW5nZVxuZGlmZiAtLWdpdCBhL2xpYi90ZXN0X2htbS5jIGIvbGliL3Rlc3RfaG1tLmNcbmluZGV4IDQ1YzBjYjk5MjIxODRhLi42MjA1ZmIzMTNiZDA1ZSAxMDA2NDRcbi0tLSBhL2xpYi90ZXN0X2htbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9saWIvdGVzdF9obW0uY1xuQEAgLTM4OSw2ICYjNDM7Mzg5LDY3IEBAIHN0YXRpYyBpbnQgZG1pcnJvcl9yYW5nZV9mYXVsdChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSxcbiYjNDM7XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgdGltZW91dClcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHdoaWxlICh0cnVlKSB7XG4mIzQzO1x0XHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChyYW5nZSwgdGltZW91dCk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0XHRtdXRleF9sb2NrKFx1MDAyNmRtaXJyb3ItXHUwMDNlbXV0ZXgpO1xuJiM0MztcdFx0aWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KHJhbmdlLVx1MDAzZW5vdGlmaWVyLFxuJiM0MztcdFx0XHRcdFx0ICAgIHJhbmdlLVx1MDAzZW5vdGlmaWVyX3NlcSkpIHtcbiYjNDM7XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRtaXJyb3ItXHUwMDNlbXV0ZXgpO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gZG1pcnJvcl9kb19mYXVsdChkbWlycm9yLCByYW5nZSk7XG4mIzQzO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZkbWlycm9yLVx1MDAzZW11dGV4KTtcbiYjNDM7b3V0OlxuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZG1pcnJvcl9mYXVsdF91bmxvY2tlZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcbiYjNDM7XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4mIzQzO1x0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGVuZCwgYm9vbCB3cml0ZSxcbiYjNDM7XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgdGltZW91dClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gZG1pcnJvci1cdTAwM2Vub3RpZmllci5tbTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGFkZHI7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBwZm5zWzMyXTtcbiYjNDM7XHRzdHJ1Y3QgaG1tX3JhbmdlIHJhbmdlID0ge1xuJiM0MztcdFx0Lm5vdGlmaWVyID0gXHUwMDI2ZG1pcnJvci1cdTAwM2Vub3RpZmllcixcbiYjNDM7XHRcdC5obW1fcGZucyA9IHBmbnMsXG4mIzQzO1x0XHQucGZuX2ZsYWdzX21hc2sgPSAwLFxuJiM0MztcdFx0LmRlZmF1bHRfZmxhZ3MgPVxuJiM0MztcdFx0XHRITU1fUEZOX1JFUV9GQVVMVCB8ICh3cml0ZSA/IEhNTV9QRk5fUkVRX1dSSVRFIDogMCksXG4mIzQzO1x0XHQuZGV2X3ByaXZhdGVfb3duZXIgPSBkbWlycm9yLVx1MDAzZW1kZXZpY2UsXG4mIzQzO1x0fTtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFtbWdldF9ub3RfemVybyhtbSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChhZGRyID0gc3RhcnQ7IGFkZHIgXHUwMDNjIGVuZDsgYWRkciA9IHJhbmdlLmVuZCkge1xuJiM0MztcdFx0cmFuZ2Uuc3RhcnQgPSBhZGRyO1xuJiM0MztcdFx0cmFuZ2UuZW5kID0gbWluKGFkZHIgJiM0MzsgKEFSUkFZX1NJWkUocGZucykgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpLCBlbmQpO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IGRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWQoZG1pcnJvciwgXHUwMDI2cmFuZ2UsIHRpbWVvdXQpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtbXB1dChtbSk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGRtaXJyb3JfZmF1bHQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4gXHRcdFx0IHVuc2lnbmVkIGxvbmcgZW5kLCBib29sIHdyaXRlKVxuIHtcbkBAIC00ODgsNiAmIzQzOzU0OSw0OCBAQCBzdGF0aWMgaW50IGRtaXJyb3JfcmVhZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvciwgc3RydWN0IGhtbV9kbWlycm9yX2NtZCAqY21kKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgZG1pcnJvcl9yZWFkX3VubG9ja2VkKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kICpjbWQsXG4mIzQzO1x0XHRcdFx0IHVuc2lnbmVkIGxvbmcgdGltZW91dClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkbWlycm9yX2JvdW5jZSBib3VuY2U7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzdGFydCwgZW5kO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IGNtZC1cdTAwM2VucGFnZXMgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQ7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0c3RhcnQgPSBjbWQtXHUwMDNlYWRkcjtcbiYjNDM7XHRlbmQgPSBzdGFydCAmIzQzOyBzaXplO1xuJiM0MztcdGlmIChlbmQgXHUwMDNjIHN0YXJ0KVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJldCA9IGRtaXJyb3JfYm91bmNlX2luaXQoXHUwMDI2Ym91bmNlLCBzdGFydCwgc2l6ZSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHdoaWxlICgxKSB7XG4mIzQzO1x0XHRtdXRleF9sb2NrKFx1MDAyNmRtaXJyb3ItXHUwMDNlbXV0ZXgpO1xuJiM0MztcdFx0cmV0ID0gZG1pcnJvcl9kb19yZWFkKGRtaXJyb3IsIHN0YXJ0LCBlbmQsIFx1MDAyNmJvdW5jZSk7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2ZG1pcnJvci1cdTAwM2VtdXRleCk7XG4mIzQzO1x0XHRpZiAocmV0ICE9IC1FTk9FTlQpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdHN0YXJ0ID0gY21kLVx1MDAzZWFkZHIgJiM0MzsgKGJvdW5jZS5jcGFnZXMgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpO1xuJiM0MztcdFx0cmV0ID0gZG1pcnJvcl9mYXVsdF91bmxvY2tlZChkbWlycm9yLCBzdGFydCwgZW5kLCBmYWxzZSwgdGltZW91dCk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNtZC1cdTAwM2VmYXVsdHMmIzQzOyYjNDM7O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHJldCA9PSAwKSB7XG4mIzQzO1x0XHRpZiAoY29weV90b191c2VyKHU2NF90b191c2VyX3B0cihjbWQtXHUwMDNlcHRyKSwgYm91bmNlLnB0cixcbiYjNDM7XHRcdFx0XHQgYm91bmNlLnNpemUpKVxuJiM0MztcdFx0XHRyZXQgPSAtRUZBVUxUO1xuJiM0MztcdH1cbiYjNDM7XHRjbWQtXHUwMDNlY3BhZ2VzID0gYm91bmNlLmNwYWdlcztcbiYjNDM7XHRkbWlycm9yX2JvdW5jZV9maW5pKFx1MDAyNmJvdW5jZSk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGRtaXJyb3JfZG9fd3JpdGUoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4gXHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgZG1pcnJvcl9ib3VuY2UgKmJvdW5jZSlcbiB7XG5AQCAtMTU3Miw3ICYjNDM7MTY3NSw5IEBAIHN0YXRpYyBsb25nIGRtaXJyb3JfZm9wc191bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbiBcdFx0ZG1pcnJvci1cdTAwM2VmbGFncyA9IGNtZC5ucGFnZXM7XG4gXHRcdHJldCA9IDA7XG4gXHRcdGJyZWFrO1xuLVxuJiM0MztcdGNhc2UgSE1NX0RNSVJST1JfUkVBRF9VTkxPQ0tFRDpcbiYjNDM7XHRcdHJldCA9IGRtaXJyb3JfcmVhZF91bmxvY2tlZChkbWlycm9yLCBcdTAwMjZjbWQsIDApO1xuJiM0MztcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbmRpZmYgLS1naXQgYS9saWIvdGVzdF9obW1fdWFwaS5oIGIvbGliL3Rlc3RfaG1tX3VhcGkuaFxuaW5kZXggZjk0YzZkNDU3MzM4MjguLmVhOWIwZWM0MDRmYjU1IDEwMDY0NFxuLS0tIGEvbGliL3Rlc3RfaG1tX3VhcGkuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbGliL3Rlc3RfaG1tX3VhcGkuaFxuQEAgLTM4LDYgJiM0MzszOCw3IEBAIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQge1xuICNkZWZpbmUgSE1NX0RNSVJST1JfQ0hFQ0tfRVhDTFVTSVZFXHRfSU9XUigmIzM5O0gmIzM5OywgMHgwNiwgc3RydWN0IGhtbV9kbWlycm9yX2NtZClcbiAjZGVmaW5lIEhNTV9ETUlSUk9SX1JFTEVBU0VcdFx0X0lPV1IoJiMzOTtIJiMzOTssIDB4MDcsIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQpXG4gI2RlZmluZSBITU1fRE1JUlJPUl9GTEFHU1x0XHRfSU9XUigmIzM5O0gmIzM5OywgMHgwOCwgc3RydWN0IGhtbV9kbWlycm9yX2NtZClcbiYjNDM7I2RlZmluZSBITU1fRE1JUlJPUl9SRUFEX1VOTE9DS0VEXHRfSU9XUigmIzM5O0gmIzM5OywgMHgwOSwgc3RydWN0IGhtbV9kbWlycm9yX2NtZClcbiBcbiAjZGVmaW5lIEhNTV9ETUlSUk9SX0ZMQUdfRkFJTF9BTExPQ1x0KDFVTEwgXHUwMDNjXHUwMDNjIDApXG4gXG5kaWZmIC0tZ2l0IGEvbW0vaG1tLmMgYi9tbS9obW0uY1xuaW5kZXggZTVjMWY0ZGVlZDI0NDcuLmZjMmUxY2QwY2IyMmViIDEwMDY0NFxuLS0tIGEvbW0vaG1tLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2htbS5jXG5AQCAtMzIsOSAmIzQzOzMyLDI3IEBAXG4gXG4gc3RydWN0IGhtbV92bWFfd2FsayB7XG4gXHRzdHJ1Y3QgaG1tX3JhbmdlXHQqcmFuZ2U7XG4mIzQzO1x0Ym9vbFx0XHRcdCpsb2NrZWQ7XG4gXHR1bnNpZ25lZCBsb25nXHRcdGxhc3Q7XG4mIzQzO1x0dW5zaWduZWQgbG9uZ1x0XHRlbmQ7XG4mIzQzO1x0dW5zaWduZWQgaW50XHRcdHJlcXVpcmVkX2ZhdWx0O1xuIH07XG4gXG4mIzQzOy8qXG4mIzQzOyAqIEludGVybmFsIHNlbnRpbmVsIHJldHVybmVkIGJ5IHdhbGsgY2FsbGJhY2tzIHdoZW4gdGhleSBuZWVkIGEgcGFnZSBmYXVsdC5cbiYjNDM7ICogVGhlIGNhbGxiYWNrIHN0b3JlcyBlbmQvcmVxdWlyZWRfZmF1bHQgaW4gaG1tX3ZtYV93YWxrOyB0aGUgb3V0ZXIgbG9vcFxuJiM0MzsgKiBjb25zdW1lcyB0aGUgc2VudGluZWwgYW5kIG5ldmVyIHByb3BhZ2F0ZXMgaXQgdG8gdGhlIGNhbGxlci5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgSE1NX0ZBVUxUX1BFTkRJTkdcdC1FQUdBSU5cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEludGVybmFsIHNlbnRpbmVsIHJldHVybmVkIGJ5IGhtbV9kb19mYXVsdCgpIHdoZW4gaGFuZGxlX21tX2ZhdWx0KClcbiYjNDM7ICogY29tcGxldGVzIGEgcGFnZSBmYXVsdCB3aXRoIHRoZSBtbWFwIGxvY2sgZHJvcHBlZC4gaG1tX2RvX2ZhdWx0KCkgc2V0c1xuJiM0MzsgKiAqbG9ja2VkID0gZmFsc2U7IHRoZSBvdXRlciBsb29wIGNvbnN1bWVzIHRoZSBzZW50aW5lbCBhbmQgbmV2ZXIgcHJvcGFnYXRlc1xuJiM0MzsgKiBpdCB0byB0aGUgY2FsbGVyLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBITU1fRkFVTFRfVU5MT0NLRURcdC1FTk9MQ0tcbiYjNDM7XG4gZW51bSB7XG4gXHRITU1fTkVFRF9GQVVMVCA9IDEgXHUwMDNjXHUwMDNjIDAsXG4gXHRITU1fTkVFRF9XUklURV9GQVVMVCA9IDEgXHUwMDNjXHUwMDNjIDEsXG5AQCAtNjAsMzcgJiM0Mzs3OCwyNSBAQCBzdGF0aWMgaW50IGhtbV9wZm5zX2ZpbGwodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiB9XG4gXG4gLypcbi0gKiBobW1fdm1hX2ZhdWx0KCkgLSBmYXVsdCBpbiBhIHJhbmdlIGxhY2tpbmcgdmFsaWQgcG1kIG9yIHB0ZShzKVxuLSAqIEBhZGRyOiByYW5nZSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MgKGluY2x1c2l2ZSlcbi0gKiBAZW5kOiByYW5nZSB2aXJ0dWFsIGVuZCBhZGRyZXNzIChleGNsdXNpdmUpXG4tICogQHJlcXVpcmVkX2ZhdWx0OiBITU1fTkVFRF8qIGZsYWdzXG4tICogQHdhbGs6IG1tX3dhbGsgc3RydWN0dXJlXG4tICogUmV0dXJuOiAtRUJVU1kgYWZ0ZXIgcGFnZSBmYXVsdCwgb3IgcGFnZSBmYXVsdCBlcnJvclxuJiM0MzsgKiBobW1fcmVjb3JkX2ZhdWx0KCkgLSByZWNvcmQgYSByYW5nZSB0aGF0IG5lZWRzIHRvIGJlIGZhdWx0ZWQgaW5cbiAgKlxuLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgcG1kX25vbmUoKSBvciBwdGVfbm9uZSgpIHJldHVybnMgdHJ1ZSxcbi0gKiBvciB3aGVuZXZlciB0aGVyZSBpcyBubyBwYWdlIGRpcmVjdG9yeSBjb3ZlcmluZyB0aGUgdmlydHVhbCBhZGRyZXNzIHJhbmdlLlxuJiM0MzsgKiBDYWxsZWQgYnkgdGhlIHdhbGsgY2FsbGJhY2tzIHdoZW4gdGhleSBkaXNjb3ZlciB0aGF0IHBhcnQgb2YgdGhlIHJhbmdlXG4mIzQzOyAqIG5lZWRzIGEgcGFnZSBmYXVsdC4gIFRoZSBjYWxsYmFjayByZWNvcmRzIHdoYXQgdG8gZmF1bHQgYW5kIHJldHVybnNcbiYjNDM7ICogSE1NX0ZBVUxUX1BFTkRJTkc7IHRoZSBvdXRlciBsb29wIGluIGhtbV9yYW5nZV9mYXVsdF9sb2NrZWQoKSBkcm9wc1xuJiM0MzsgKiBiYWNrIG91dCBvZiB3YWxrX3BhZ2VfcmFuZ2UoKSBhbmQgaW52b2tlcyBoYW5kbGVfbW1fZmF1bHQoKSBmcm9tIGEgY29udGV4dFxuJiM0MzsgKiB3aGVyZSBubyBwYWdlLXRhYmxlIG9yIGh1Z2V0bGJfdm1hX2xvY2sgaXMgaGVsZC5cbiAgKi9cbi1zdGF0aWMgaW50IGhtbV92bWFfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi1cdFx0XHQgdW5zaWduZWQgaW50IHJlcXVpcmVkX2ZhdWx0LCBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcbiYjNDM7c3RhdGljIGludCBobW1fcmVjb3JkX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4mIzQzO1x0XHRcdCAgICB1bnNpZ25lZCBpbnQgcmVxdWlyZWRfZmF1bHQsXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcbiB7XG4gXHRzdHJ1Y3QgaG1tX3ZtYV93YWxrICpobW1fdm1hX3dhbGsgPSB3YWxrLVx1MDAzZXByaXZhdGU7XG4tXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstXHUwMDNldm1hO1xuLVx0dW5zaWduZWQgaW50IGZhdWx0X2ZsYWdzID0gRkFVTFRfRkxBR19SRU1PVEU7XG4gXG4gXHRXQVJOX09OX09OQ0UoIXJlcXVpcmVkX2ZhdWx0KTtcbiBcdGhtbV92bWFfd2Fsay1cdTAwM2VsYXN0ID0gYWRkcjtcbi1cbi1cdGlmIChyZXF1aXJlZF9mYXVsdCBcdTAwMjYgSE1NX05FRURfV1JJVEVfRkFVTFQpIHtcbi1cdFx0aWYgKCEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9XUklURSkpXG4tXHRcdFx0cmV0dXJuIC1FUEVSTTtcbi1cdFx0ZmF1bHRfZmxhZ3MgfD0gRkFVTFRfRkxBR19XUklURTtcbi1cdH1cbi1cbi1cdGZvciAoOyBhZGRyIFx1MDAzYyBlbmQ7IGFkZHIgJiM0Mzs9IFBBR0VfU0laRSlcbi1cdFx0aWYgKGhhbmRsZV9tbV9mYXVsdCh2bWEsIGFkZHIsIGZhdWx0X2ZsYWdzLCBOVUxMKSBcdTAwMjZcbi1cdFx0ICAgIFZNX0ZBVUxUX0VSUk9SKVxuLVx0XHRcdHJldHVybiAtRUZBVUxUO1xuLVx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XHRobW1fdm1hX3dhbGstXHUwMDNlZW5kID0gZW5kO1xuJiM0MztcdGhtbV92bWFfd2Fsay1cdTAwM2VyZXF1aXJlZF9mYXVsdCA9IHJlcXVpcmVkX2ZhdWx0O1xuJiM0MztcdHJldHVybiBITU1fRkFVTFRfUEVORElORztcbiB9XG4gXG4gc3RhdGljIHVuc2lnbmVkIGludCBobW1fcHRlX25lZWRfZmF1bHQoY29uc3Qgc3RydWN0IGhtbV92bWFfd2FsayAqaG1tX3ZtYV93YWxrLFxuQEAgLTE3NCw3ICYjNDM7MTgwLDcgQEAgc3RhdGljIGludCBobW1fdm1hX3dhbGtfaG9sZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRyZXR1cm4gaG1tX3BmbnNfZmlsbChhZGRyLCBlbmQsIHJhbmdlLCBITU1fUEZOX0VSUk9SKTtcbiBcdH1cbiBcdGlmIChyZXF1aXJlZF9mYXVsdClcbi1cdFx0cmV0dXJuIGhtbV92bWFfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XG4mIzQzO1x0XHRyZXR1cm4gaG1tX3JlY29yZF9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbiBcdHJldHVybiBobW1fcGZuc19maWxsKGFkZHIsIGVuZCwgcmFuZ2UsIDApO1xuIH1cbiBcbkBAIC0yMDksNyAmIzQzOzIxNSw3IEBAIHN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRyZXF1aXJlZF9mYXVsdCA9XG4gXHRcdGhtbV9yYW5nZV9uZWVkX2ZhdWx0KGhtbV92bWFfd2FsaywgaG1tX3BmbnMsIG5wYWdlcywgY3B1X2ZsYWdzKTtcbiBcdGlmIChyZXF1aXJlZF9mYXVsdClcbi1cdFx0cmV0dXJuIGhtbV92bWFfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XG4mIzQzO1x0XHRyZXR1cm4gaG1tX3JlY29yZF9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbiBcbiBcdHBmbiA9IHBtZF9wZm4ocG1kKSAmIzQzOyAoKGFkZHIgXHUwMDI2IH5QTURfTUFTSykgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuIFx0Zm9yIChpID0gMDsgYWRkciBcdTAwM2MgZW5kOyBhZGRyICYjNDM7PSBQQUdFX1NJWkUsIGkmIzQzOyYjNDM7LCBwZm4mIzQzOyYjNDM7KSB7XG5AQCAtMzI4LDcgJiM0MzszMzQsNyBAQCBzdGF0aWMgaW50IGhtbV92bWFfaGFuZGxlX3B0ZShzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBhZGRyLFxuIGZhdWx0OlxuIFx0cHRlX3VubWFwKHB0ZXApO1xuIFx0LyogRmF1bHQgYW55IHZpcnR1YWwgYWRkcmVzcyB3ZSB3ZXJlIGFza2VkIHRvIGZhdWx0ICovXG4tXHRyZXR1cm4gaG1tX3ZtYV9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbiYjNDM7XHRyZXR1cm4gaG1tX3JlY29yZF9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19BUkNIX0hBU19QTURfU09GVExFQVZFU1xuQEAgLTM3MSw3ICYjNDM7Mzc3LDcgQEAgc3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9hYnNlbnRfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuIFx0XHRcdFx0XHQgICAgICBucGFnZXMsIDApO1xuIFx0aWYgKHJlcXVpcmVkX2ZhdWx0KSB7XG4gXHRcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXG4tXHRcdFx0cmV0dXJuIGhtbV92bWFfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XG4mIzQzO1x0XHRcdHJldHVybiBobW1fcmVjb3JkX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspO1xuIFx0XHRlbHNlXG4gXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHR9XG5AQCAtNTE3LDcgJiM0Mzs1MjMsNyBAQCBzdGF0aWMgaW50IGhtbV92bWFfd2Fsa19wdWQocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRcdFx0XHRcdCAgICAgIG5wYWdlcywgY3B1X2ZsYWdzKTtcbiBcdFx0aWYgKHJlcXVpcmVkX2ZhdWx0KSB7XG4gXHRcdFx0c3Bpbl91bmxvY2socHRsKTtcbi1cdFx0XHRyZXR1cm4gaG1tX3ZtYV9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbiYjNDM7XHRcdFx0cmV0dXJuIGhtbV9yZWNvcmRfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XG4gXHRcdH1cbiBcbiBcdFx0cGZuID0gcHVkX3BmbihwdWQpICYjNDM7ICgoYWRkciBcdTAwMjYgflBVRF9NQVNLKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG5AQCAtNTY0LDIxICYjNDM7NTcwLDggQEAgc3RhdGljIGludCBobW1fdm1hX3dhbGtfaHVnZXRsYl9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxuIFx0cmVxdWlyZWRfZmF1bHQgPVxuIFx0XHRobW1fcHRlX25lZWRfZmF1bHQoaG1tX3ZtYV93YWxrLCBwZm5fcmVxX2ZsYWdzLCBjcHVfZmxhZ3MpO1xuIFx0aWYgKHJlcXVpcmVkX2ZhdWx0KSB7XG4tXHRcdGludCByZXQ7XG4tXG4gXHRcdHNwaW5fdW5sb2NrKHB0bCk7XG4tXHRcdGh1Z2V0bGJfdm1hX3VubG9ja19yZWFkKHZtYSk7XG4tXHRcdC8qXG4tXHRcdCAqIEF2b2lkIGRlYWRsb2NrOiBkcm9wIHRoZSB2bWEgbG9jayBiZWZvcmUgY2FsbGluZ1xuLVx0XHQgKiBobW1fdm1hX2ZhdWx0KCksIHdoaWNoIHdpbGwgaXRzZWxmIHBvdGVudGlhbGx5IHRha2UgYW5kXG4tXHRcdCAqIGRyb3AgdGhlIHZtYSBsb2NrLiBUaGlzIGlzIGFsc28gY29ycmVjdCBmcm9tIGFcbi1cdFx0ICogcHJvdGVjdGlvbiBwb2ludCBvZiB2aWV3LCBiZWNhdXNlIHRoZXJlIGlzIG5vIGZ1cnRoZXJcbi1cdFx0ICogdXNlIGhlcmUgb2YgZWl0aGVyIHB0ZSBvciBwdGwgYWZ0ZXIgZHJvcHBpbmcgdGhlIHZtYVxuLVx0XHQgKiBsb2NrLlxuLVx0XHQgKi9cbi1cdFx0cmV0ID0gaG1tX3ZtYV9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbi1cdFx0aHVnZXRsYl92bWFfbG9ja19yZWFkKHZtYSk7XG4tXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRyZXR1cm4gaG1tX3JlY29yZF9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbiBcdH1cbiBcbiBcdHBmbiA9IHB0ZV9wZm4oZW50cnkpICYjNDM7ICgoc3RhcnQgXHUwMDI2IH5obWFzaykgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuQEAgLTYzNywyOSAmIzQzOzYzMCw2NyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIGhtbV93YWxrX29wcyA9IHtcbiBcdC53YWxrX2xvY2tcdD0gUEdXQUxLX1JETE9DSyxcbiB9O1xuIFxuLS8qKlxuLSAqIGhtbV9yYW5nZV9mYXVsdCAtIHRyeSB0byBmYXVsdCBzb21lIGFkZHJlc3MgaW4gYSB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2Vcbi0gKiBAcmFuZ2U6XHRhcmd1bWVudCBzdHJ1Y3R1cmVcbi0gKlxuLSAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIGVycm9yIGNvZGVzOlxuJiM0MzsvKlxuJiM0MzsgKiBobW1fZG9fZmF1bHQgLSBmYXVsdCBpbiBhIHJhbmdlIHJlY29yZGVkIGJ5IGEgd2FsayBjYWxsYmFja1xuICAqXG4tICogLUVJTlZBTDpcdEludmFsaWQgYXJndW1lbnRzIG9yIG1tIG9yIHZpcnR1YWwgYWRkcmVzcyBpcyBpbiBhbiBpbnZhbGlkIHZtYVxuLSAqXHRcdChlLmcuLCBkZXZpY2UgZmlsZSB2bWEpLlxuLSAqIC1FTk9NRU06XHRPdXQgb2YgbWVtb3J5LlxuLSAqIC1FUEVSTTpcdEludmFsaWQgcGVybWlzc2lvbiAoZS5nLiwgYXNraW5nIGZvciB3cml0ZSBhbmQgcmFuZ2UgaXMgcmVhZFxuLSAqXHRcdG9ubHkpLlxuLSAqIC1FQlVTWTpcdFRoZSByYW5nZSBoYXMgYmVlbiBpbnZhbGlkYXRlZCBhbmQgdGhlIGNhbGxlciBuZWVkcyB0byB3YWl0IGZvclxuLSAqXHRcdHRoZSBpbnZhbGlkYXRpb24gdG8gZmluaXNoLlxuLSAqIC1FRkFVTFQ6ICAgICBBIHBhZ2Ugd2FzIHJlcXVlc3RlZCB0byBiZSB2YWxpZCBhbmQgY291bGQgbm90IGJlIG1hZGUgdmFsaWRcbi0gKiAgICAgICAgICAgICAgaWUgaXQgaGFzIG5vIGJhY2tpbmcgVk1BIG9yIGl0IGlzIGlsbGVnYWwgdG8gYWNjZXNzXG4mIzQzOyAqIENhbGxlZCBmcm9tIHRoZSBvdXRlciBsb29wIGluIGhtbV9yYW5nZV9mYXVsdF9sb2NrZWQoKSBhZnRlciBhIGNhbGxiYWNrXG4mIzQzOyAqIHJldHVybmVkIEhNTV9GQVVMVF9QRU5ESU5HLiAgQXQgdGhpcyBwb2ludCB3ZSBob2xkIG9ubHkgbW1hcF9sb2NrO1xuJiM0MzsgKiB0aGUgcGFnZS10YWJsZSBzcGlubG9jayBhbmQgYW55IGh1Z2V0bGJfdm1hX2xvY2sgYWNxdWlyZWQgYnkgdGhlIHdhbGtcbiYjNDM7ICogZnJhbWV3b3JrIGhhdmUgYWxyZWFkeSBiZWVuIHJlbGVhc2VkIGJ5IHRoZSB1bndpbmQuXG4gICpcbi0gKiBUaGlzIGlzIHNpbWlsYXIgdG8gZ2V0X3VzZXJfcGFnZXMoKSwgZXhjZXB0IHRoYXQgaXQgY2FuIHJlYWQgdGhlIHBhZ2UgdGFibGVzXG4tICogd2l0aG91dCBtdXRhdGluZyB0aGVtIChpZSBjYXVzaW5nIGZhdWx0cykuXG4mIzQzOyAqIFJldHVybnMgLUVCVVNZIG9uIHN1Y2Nlc3MgKGFsbCBwYWdlcyBmYXVsdGVkLCBjYWxsZXIgc2hvdWxkIHJlLXdhbGspLlxuJiM0MzsgKiBSZXR1cm5zIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS5cbiAgKi9cbi1pbnQgaG1tX3JhbmdlX2ZhdWx0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKVxuJiM0MztzdGF0aWMgaW50IGhtbV9kb19mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiYjNDM7XHRcdFx0c3RydWN0IGhtbV92bWFfd2FsayAqaG1tX3ZtYV93YWxrKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBhZGRyID0gaG1tX3ZtYV93YWxrLVx1MDAzZWxhc3Q7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBlbmQgPSBobW1fdm1hX3dhbGstXHUwMDNlZW5kO1xuJiM0MztcdHVuc2lnbmVkIGludCByZXF1aXJlZF9mYXVsdCA9IGhtbV92bWFfd2Fsay1cdTAwM2VyZXF1aXJlZF9mYXVsdDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZmF1bHRfZmxhZ3MgPSBGQVVMVF9GTEFHX1JFTU9URTtcbiYjNDM7XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbiYjNDM7XG4mIzQzO1x0aWYgKGhtbV92bWFfd2Fsay1cdTAwM2Vsb2NrZWQpXG4mIzQzO1x0XHRmYXVsdF9mbGFncyB8PSBGQVVMVF9GTEFHX0FMTE9XX1JFVFJZIHwgRkFVTFRfRkxBR19LSUxMQUJMRTtcbiYjNDM7XG4mIzQzO1x0dm1hID0gdm1hX2xvb2t1cChtbSwgYWRkcik7XG4mIzQzO1x0aWYgKCF2bWEpXG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XG4mIzQzO1x0aWYgKHJlcXVpcmVkX2ZhdWx0IFx1MDAyNiBITU1fTkVFRF9XUklURV9GQVVMVCkge1xuJiM0MztcdFx0aWYgKCEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9XUklURSkpXG4mIzQzO1x0XHRcdHJldHVybiAtRVBFUk07XG4mIzQzO1x0XHRmYXVsdF9mbGFncyB8PSBGQVVMVF9GTEFHX1dSSVRFO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yICg7IGFkZHIgXHUwMDNjIGVuZDsgYWRkciAmIzQzOz0gUEFHRV9TSVpFKSB7XG4mIzQzO1x0XHR2bV9mYXVsdF90IHJldDtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBoYW5kbGVfbW1fZmF1bHQodm1hLCBhZGRyLCBmYXVsdF9mbGFncywgTlVMTCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwMjYgKFZNX0ZBVUxUX0NPTVBMRVRFRCB8IFZNX0ZBVUxUX1JFVFJZKSkge1xuJiM0MztcdFx0XHQqaG1tX3ZtYV93YWxrLVx1MDAzZWxvY2tlZCA9IGZhbHNlO1xuJiM0MztcdFx0XHRyZXR1cm4gSE1NX0ZBVUxUX1VOTE9DS0VEO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDI2IFZNX0ZBVUxUX0VSUk9SKSB7XG4mIzQzO1x0XHRcdGludCBlcnIgPSB2bV9mYXVsdF90b19lcnJubyhyZXQsIDApO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKFdBUk5fT04oIWVycikpXG4mIzQzO1x0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gLUVCVVNZO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGhtbV9yYW5nZV9mYXVsdF9sb2NrZWQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsIGJvb2wgKmxvY2tlZClcbiB7XG4gXHRzdHJ1Y3QgaG1tX3ZtYV93YWxrIGhtbV92bWFfd2FsayA9IHtcbiBcdFx0LnJhbmdlID0gcmFuZ2UsXG4mIzQzO1x0XHQubG9ja2VkID0gbG9ja2VkLFxuIFx0XHQubGFzdCA9IHJhbmdlLVx1MDAzZXN0YXJ0LFxuIFx0fTtcbiBcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gcmFuZ2UtXHUwMDNlbm90aWZpZXItXHUwMDNlbW07XG5AQCAtNjc0LDYgJiM0Mzs3MDUsMjIgQEAgaW50IGhtbV9yYW5nZV9mYXVsdChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSlcbiBcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIFx0XHRyZXQgPSB3YWxrX3BhZ2VfcmFuZ2UobW0sIGhtbV92bWFfd2Fsay5sYXN0LCByYW5nZS1cdTAwM2VlbmQsXG4gXHRcdFx0XHQgICAgICBcdTAwMjZobW1fd2Fsa19vcHMsIFx1MDAyNmhtbV92bWFfd2Fsayk7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogV2hlbiBITU1fRkFVTFRfUEVORElORyBpcyByZXR1cm5lZCBhIHdhbGsgY2FsbGJhY2tcbiYjNDM7XHRcdCAqIHJlY29yZGVkIGEgcmFuZ2UgdGhhdCBuZWVkcyBoYW5kbGVfbW1fZmF1bHQoKTtcbiYjNDM7XHRcdCAqIGhtbV9kb19mYXVsdCgpIHJ1bnMgdGhlIGZhdWx0IG91dHNpZGUgd2Fsa19wYWdlX3JhbmdlKClcbiYjNDM7XHRcdCAqIChzbyBubyBwYWdlLXRhYmxlIG9yIGh1Z2V0bGJfdm1hX2xvY2sgaXMgaGVsZCkgYW5kXG4mIzQzO1x0XHQgKiByZXR1cm5zIC1FQlVTWSBzbyB0aGUgbG9vcCByZS13YWxrcyBhbmQgcGlja3MgdXAgdGhlXG4mIzQzO1x0XHQgKiBub3ctcHJlc2VudCBlbnRyaWVzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAocmV0ID09IEhNTV9GQVVMVF9QRU5ESU5HKSB7XG4mIzQzO1x0XHRcdHJldCA9IGhtbV9kb19mYXVsdChtbSwgXHUwMDI2aG1tX3ZtYV93YWxrKTtcbiYjNDM7XHRcdFx0aWYgKHJldCA9PSBITU1fRkFVTFRfVU5MT0NLRUQpIHtcbiYjNDM7XHRcdFx0XHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4mIzQzO1x0XHRcdFx0XHRyZXR1cm4gLUVJTlRSO1xuJiM0MztcdFx0XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiBcdFx0LypcbiBcdFx0ICogV2hlbiAtRUJVU1kgaXMgcmV0dXJuZWQgdGhlIGxvb3AgcmVzdGFydHMgd2l0aFxuIFx0XHQgKiBobW1fdm1hX3dhbGsubGFzdCBzZXQgdG8gYW4gYWRkcmVzcyB0aGF0IGhhcyBub3QgYmVlbiBzdG9yZWRcbkBAIC02ODMsOCAmIzQzOzczMCwxMDAgQEAgaW50IGhtbV9yYW5nZV9mYXVsdChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSlcbiBcdH0gd2hpbGUgKHJldCA9PSAtRUJVU1kpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogaG1tX3JhbmdlX2ZhdWx0IC0gdHJ5IHRvIGZhdWx0IHNvbWUgYWRkcmVzcyBpbiBhIHZpcnR1YWwgYWRkcmVzcyByYW5nZVxuJiM0MzsgKiBAcmFuZ2U6XHRhcmd1bWVudCBzdHJ1Y3R1cmVcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgZXJyb3IgY29kZXM6XG4mIzQzOyAqXG4mIzQzOyAqIC1FSU5WQUw6XHRJbnZhbGlkIGFyZ3VtZW50cyBvciBtbSBvciB2aXJ0dWFsIGFkZHJlc3MgaXMgaW4gYW4gaW52YWxpZCB2bWFcbiYjNDM7ICpcdFx0KGUuZy4sIGRldmljZSBmaWxlIHZtYSkuXG4mIzQzOyAqIC1FTk9NRU06XHRPdXQgb2YgbWVtb3J5LlxuJiM0MzsgKiAtRVBFUk06XHRJbnZhbGlkIHBlcm1pc3Npb24gKGUuZy4sIGFza2luZyBmb3Igd3JpdGUgYW5kIHJhbmdlIGlzIHJlYWRcbiYjNDM7ICpcdFx0b25seSkuXG4mIzQzOyAqIC1FQlVTWTpcdFRoZSByYW5nZSBoYXMgYmVlbiBpbnZhbGlkYXRlZCBhbmQgdGhlIGNhbGxlciBuZWVkcyB0byB3YWl0IGZvclxuJiM0MzsgKlx0XHR0aGUgaW52YWxpZGF0aW9uIHRvIGZpbmlzaC5cbiYjNDM7ICogLUVGQVVMVDogICAgIEEgcGFnZSB3YXMgcmVxdWVzdGVkIHRvIGJlIHZhbGlkIGFuZCBjb3VsZCBub3QgYmUgbWFkZSB2YWxpZFxuJiM0MzsgKiAgICAgICAgICAgICAgaWUgaXQgaGFzIG5vIGJhY2tpbmcgVk1BIG9yIGl0IGlzIGlsbGVnYWwgdG8gYWNjZXNzXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgaXMgc2ltaWxhciB0byBnZXRfdXNlcl9wYWdlcygpLCBleGNlcHQgdGhhdCBpdCBjYW4gcmVhZCB0aGUgcGFnZSB0YWJsZXNcbiYjNDM7ICogd2l0aG91dCBtdXRhdGluZyB0aGVtIChpZSBjYXVzaW5nIGZhdWx0cykuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBtbWFwIGxvY2sgbXVzdCBiZSBoZWxkIGJ5IHRoZSBjYWxsZXIgYW5kIHdpbGwgcmVtYWluIGhlbGQgb24gcmV0dXJuLlxuJiM0MzsgKiBOZXcgdXNlcnMgc2hvdWxkIHByZWZlciBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpIHVubGVzcyB0aGV5XG4mIzQzOyAqIHNwZWNpZmljYWxseSBuZWVkIHRvIGtlZXAgdGhlIG1tYXAgbG9jayBoZWxkIGFjcm9zcyB0aGUgY2FsbC4gVGhpcyBoZWxwZXJcbiYjNDM7ICogY2Fubm90IHN1cHBvcnQgVk1BcyB3aG9zZSBmYXVsdCBoYW5kbGVycyBuZWVkIHRvIGRyb3AgdGhlIG1tYXAgbG9jay5cbiYjNDM7ICovXG4mIzQzO2ludCBobW1fcmFuZ2VfZmF1bHQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZChyYW5nZSwgTlVMTCk7XG4mIzQzO31cbiBFWFBPUlRfU1lNQk9MKGhtbV9yYW5nZV9mYXVsdCk7XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCAtIGZhdWx0IGluIGEgcmFuZ2Ugd2l0aCBhIHJldHJ5IHRpbWVvdXRcbiYjNDM7ICogQHJhbmdlOlx0YXJndW1lbnQgc3RydWN0dXJlXG4mIzQzOyAqIEB0aW1lb3V0Olx0dGltZW91dCBpbiBqaWZmaWVzIGZvciBpbnRlcm5hbCAtRUJVU1kgcmV0cmllcywgb3IgMCB0byByZXRyeVxuJiM0MzsgKlx0XHRpbmRlZmluaXRlbHlcbiYjNDM7ICpcbiYjNDM7ICogVGhlIGNhbGxlciBtdXN0IG5vdCBob2xkIHRoZSBtbWFwIGxvY2suIFRoZSBmdW5jdGlvbiB0YWtlcyB0aGUgbW1hcCByZWFkXG4mIzQzOyAqIGxvY2sgaW50ZXJuYWxseSBhbmQgYWxsb3dzIGhhbmRsZV9tbV9mYXVsdCgpIHRvIGRyb3AgaXQgZHVyaW5nIGZhdWx0cy4gSWZcbiYjNDM7ICogdGhlIG1tYXAgbG9jayBpcyBkcm9wcGVkIG9yIHRoZSByYW5nZSBpcyBpbnZhbGlkYXRlZCwgdGhlIGZ1bmN0aW9uIHJlZnJlc2hlc1xuJiM0MzsgKiByYW5nZS1cdTAwM2Vub3RpZmllcl9zZXEgYW5kIHJlc3RhcnRzIHRoZSB3YWxrIGludGVybmFsbHkuXG4mIzQzOyAqXG4mIzQzOyAqIFBhc3NpbmcgMCBmb3IgQHRpbWVvdXQgcmV0cmllcyBpbmRlZmluaXRlbHkuIEEgbm9uLXplcm8gQHRpbWVvdXQgaXMgYSBjYWxsZXJcbiYjNDM7ICogcG9saWN5IGxpbWl0IGZvciByZXBlYXRlZCBtbXUtbm90aWZpZXIgaW52YWxpZGF0aW9uIHJldHJpZXMuIEhNTSBkb2VzIG5vdFxuJiM0MzsgKiBpbnRlcnJ1cHQgcGFnZSBmYXVsdCBoYW5kbGluZyB3aGVuIHRoZSB0aW1lb3V0IGV4cGlyZXMsIGJ1dCByZXR1cm5zIC1FQlVTWVxuJiM0MzsgKiBpZiB0aGUgcmV0cnkgYnVkZ2V0IGlzIGV4aGF1c3RlZCBiZWZvcmUgYSBzdGFibGUgcmFuZ2UgaXMgb2J0YWluZWQuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG9uZSBvZiB0aGUgZXJyb3IgY29kZXMgZG9jdW1lbnRlZCBmb3JcbiYjNDM7ICogaG1tX3JhbmdlX2ZhdWx0KCkuIC1FSU5UUiBpcyByZXR1cm5lZCBpZiBtbWFwX2xvY2sgYWNxdWlzaXRpb24gaXNcbiYjNDM7ICogaW50ZXJydXB0ZWQgb3IgYSBmYXRhbCBzaWduYWwgaXMgcGVuZGluZyBkdXJpbmcgcmV0cnkgaGFuZGxpbmcuXG4mIzQzOyAqL1xuJiM0MztpbnQgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsXG4mIzQzO1x0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHJhbmdlLVx1MDAzZW5vdGlmaWVyLVx1MDAzZW1tO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUgPSAwO1xuJiM0MztcdGJvb2wgbG9ja2VkID0gZmFsc2U7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0aWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlRSO1xuJiM0MztcbiYjNDM7XHRcdGlmICh0aW1lb3V0KSB7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIElmIHRoZSBwcmV2aW91cyBmYXVsdCBkcm9wcGVkIG1tYXBfbG9jaywgdGhlbiB0aGUgZmF1bHRcbiYjNDM7XHRcdFx0ICogaGFuZGxlciBtYWRlIHByb2dyZXNzLiBSZXN0YXJ0IHRoZSByZXRyeSB0aW1lb3V0IGluIHRoYXRcbiYjNDM7XHRcdFx0ICogY2FzZSwgYnV0IGtlZXAgdGhlIGV4aXN0aW5nIGRlYWRsaW5lIGZvciBvcmRpbmFyeSAtRUJVU1lcbiYjNDM7XHRcdFx0ICogcmV0cmllcy5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGlmICghbG9ja2VkKVxuJiM0MztcdFx0XHRcdGRlYWRsaW5lID0gamlmZmllcyAmIzQzOyB0aW1lb3V0O1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZGVhZGxpbmUpKVxuJiM0MztcdFx0XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cmFuZ2UtXHUwMDNlbm90aWZpZXJfc2VxID1cbiYjNDM7XHRcdFx0bW11X2ludGVydmFsX3JlYWRfYmVnaW4ocmFuZ2UtXHUwMDNlbm90aWZpZXIpO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKG1tKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0bG9ja2VkID0gdHJ1ZTtcbiYjNDM7XHRcdHJldCA9IGhtbV9yYW5nZV9mYXVsdF9sb2NrZWQocmFuZ2UsIFx1MDAyNmxvY2tlZCk7XG4mIzQzO1x0XHRpZiAobG9ja2VkKVxuJiM0MztcdFx0XHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbiYjNDM7XHR9IHdoaWxlIChyZXQgPT0gLUVCVVNZKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KTtcbiYjNDM7XG4gLyoqXG4gICogaG1tX2RtYV9tYXBfYWxsb2MgLSBBbGxvY2F0ZSBITU0gbWFwIHN0cnVjdHVyZVxuICAqIEBkZXY6IGRldmljZSB0byBhbGxvY2F0ZSBzdHJ1Y3R1cmUgZm9yXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xuaW5kZXggNmZjY2JkYWIwMmVlODEuLjVhY2I3Mjg2NjZmOGMxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jXG5AQCAtMjksNiAmIzQzOzI5LDEwIEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9pb2N0bC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3RpbWUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy9ldmVudGZkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdXNlcmZhdWx0ZmQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2Nwb2xsLmhcdTAwM2VcbiBcbiAvKlxuICAqIFRoaXMgaXMgYSBwcml2YXRlIFVBUEkgdG8gdGhlIGtlcm5lbCB0ZXN0IG1vZHVsZSBzbyBpdCBpc24mIzM5O3QgZXhwb3J0ZWRcbkBAIC0yOTUyLDQgJiM0MzsyOTU2LDE1MCBAQCBURVNUX0ZfVElNRU9VVChobW0sIGJlbmNobWFya190aHBfbWlncmF0aW9uLCAxMjApXG4gXHRcdFx0XHRcdFx1MDAyNnRocF9yZXN1bHRzLCBcdTAwMjZyZWd1bGFyX3Jlc3VsdHMpO1xuIFx0fVxuIH1cbiYjNDM7LypcbiYjNDM7ICogVGVzdCB0aGF0IEhNTSBjYW4gZmF1bHQgaW4gcGFnZXMgYmFja2VkIGJ5IHVzZXJmYXVsdGZkIHVzaW5nIHRoZVxuJiM0MzsgKiBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpIHBhdGggd2l0aCBubyB0aW1lb3V0LiBUaGlzIGV4ZXJjaXNlc1xuJiM0MzsgKiB0aGUgbG9jay1kcm9wIHJldHJ5IGxvZ2ljIGluIHRoZSBITU0gZnJhbWV3b3JrLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHVmZmRfdGhyZWFkX2FyZ3Mge1xuJiM0MztcdGludCB1ZmZkO1xuJiM0MztcdGludCBzdG9wX2ZkO1xuJiM0MztcdHZvaWQgKnBhZ2VfYnVmZmVyO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgcGFnZV9zaXplO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgKnVmZmRfaGFuZGxlcl90aHJlYWQodm9pZCAqYXJnKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHVmZmRfdGhyZWFkX2FyZ3MgKmFyZ3MgPSBhcmc7XG4mIzQzO1x0c3RydWN0IHVmZmRfbXNnIG1zZztcbiYjNDM7XHRzdHJ1Y3QgdWZmZGlvX2NvcHkgY29weTtcbiYjNDM7XHRzdHJ1Y3QgcG9sbGZkIHBvbGxmZFsyXTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRwb2xsZmRbMF0uZmQgPSBhcmdzLVx1MDAzZXVmZmQ7XG4mIzQzO1x0cG9sbGZkWzBdLmV2ZW50cyA9IFBPTExJTjtcbiYjNDM7XHRwb2xsZmRbMV0uZmQgPSBhcmdzLVx1MDAzZXN0b3BfZmQ7XG4mIzQzO1x0cG9sbGZkWzFdLmV2ZW50cyA9IFBPTExJTjtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKDEpIHtcbiYjNDM7XHRcdHJldCA9IHBvbGwocG9sbGZkLCAyLCAtMSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYz0gMClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRpZiAocG9sbGZkWzFdLnJldmVudHMpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0aWYgKCEocG9sbGZkWzBdLnJldmVudHMgXHUwMDI2IFBPTExJTikpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHJlYWQoYXJncy1cdTAwM2V1ZmZkLCBcdTAwMjZtc2csIHNpemVvZihtc2cpKTtcbiYjNDM7XHRcdGlmIChyZXQgIT0gc2l6ZW9mKG1zZykpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdGlmIChtc2cuZXZlbnQgIT0gVUZGRF9FVkVOVF9QQUdFRkFVTFQpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdC8qIEZpbGwgdGhlIHBhZ2Ugd2l0aCBhIGtub3duIHBhdHRlcm4gKi9cbiYjNDM7XHRcdG1lbXNldChhcmdzLVx1MDAzZXBhZ2VfYnVmZmVyLCAweEFCLCBhcmdzLVx1MDAzZXBhZ2Vfc2l6ZSk7XG4mIzQzO1xuJiM0MztcdFx0Y29weS5kc3QgPSBtc2cuYXJnLnBhZ2VmYXVsdC5hZGRyZXNzIFx1MDAyNiB+KGFyZ3MtXHUwMDNlcGFnZV9zaXplIC0gMSk7XG4mIzQzO1x0XHRjb3B5LnNyYyA9ICh1bnNpZ25lZCBsb25nKWFyZ3MtXHUwMDNlcGFnZV9idWZmZXI7XG4mIzQzO1x0XHRjb3B5LmxlbiA9IGFyZ3MtXHUwMDNlcGFnZV9zaXplO1xuJiM0MztcdFx0Y29weS5tb2RlID0gMDtcbiYjNDM7XHRcdGNvcHkuY29weSA9IDA7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gaW9jdGwoYXJncy1cdTAwM2V1ZmZkLCBVRkZESU9fQ09QWSwgXHUwMDI2Y29weSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0YoaG1tLCB1c2VyZmF1bHRmZF9yZWFkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGhtbV9idWZmZXIgKmJ1ZmZlcjtcbiYjNDM7XHRzdHJ1Y3QgdWZmZF90aHJlYWRfYXJncyB1ZmZkX2FyZ3M7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBucGFnZXM7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzaXplO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaTtcbiYjNDM7XHR1bnNpZ25lZCBjaGFyICpwdHI7XG4mIzQzO1x0cHRocmVhZF90IHRocmVhZDtcbiYjNDM7XHRpbnQgdWZmZDtcbiYjNDM7XHRpbnQgc3RvcF9mZDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdHN0cnVjdCB1ZmZkaW9fYXBpIGFwaTtcbiYjNDM7XHRzdHJ1Y3QgdWZmZGlvX3JlZ2lzdGVyIHJlZztcbiYjNDM7XHR1aW50NjRfdCBzdG9wID0gMTtcbiYjNDM7XHRzc2l6ZV90IG53cml0ZTtcbiYjNDM7XG4mIzQzO1x0bnBhZ2VzID0gNDtcbiYjNDM7XHRzaXplID0gbnBhZ2VzIFx1MDAzY1x1MDAzYyBzZWxmLVx1MDAzZXBhZ2Vfc2hpZnQ7XG4mIzQzO1xuJiM0MztcdC8qIENyZWF0ZSB1c2VyZmF1bHRmZCAqL1xuJiM0MztcdHVmZmQgPSBzeXNjYWxsKF9fTlJfdXNlcmZhdWx0ZmQsIE9fQ0xPRVhFQyB8IE9fTk9OQkxPQ0spO1xuJiM0MztcdGlmICh1ZmZkIFx1MDAzYyAwKVxuJiM0MztcdFx0U0tJUChyZXR1cm4sIFwmIzM0O3VzZXJmYXVsdGZkIG5vdCBhdmFpbGFibGVcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRhcGkuYXBpID0gVUZGRF9BUEk7XG4mIzQzO1x0YXBpLmZlYXR1cmVzID0gMDtcbiYjNDM7XHRyZXQgPSBpb2N0bCh1ZmZkLCBVRkZESU9fQVBJLCBcdTAwMjZhcGkpO1xuJiM0MztcdEFTU0VSVF9FUShyZXQsIDApO1xuJiM0MztcbiYjNDM7XHRidWZmZXIgPSBtYWxsb2Moc2l6ZW9mKCpidWZmZXIpKTtcbiYjNDM7XHRBU1NFUlRfTkUoYnVmZmVyLCBOVUxMKTtcbiYjNDM7XG4mIzQzO1x0YnVmZmVyLVx1MDAzZWZkID0gLTE7XG4mIzQzO1x0YnVmZmVyLVx1MDAzZXNpemUgPSBzaXplO1xuJiM0MztcdGJ1ZmZlci1cdTAwM2VtaXJyb3IgPSBtYWxsb2Moc2l6ZSk7XG4mIzQzO1x0QVNTRVJUX05FKGJ1ZmZlci1cdTAwM2VtaXJyb3IsIE5VTEwpO1xuJiM0MztcbiYjNDM7XHQvKiBDcmVhdGUgYW5vbnltb3VzIG1hcHBpbmcgKi9cbiYjNDM7XHRidWZmZXItXHUwMDNlcHRyID0gbW1hcChOVUxMLCBzaXplLFxuJiM0MztcdFx0XHQgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuJiM0MztcdFx0XHQgICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsXG4mIzQzO1x0XHRcdCAgIC0xLCAwKTtcbiYjNDM7XHRBU1NFUlRfTkUoYnVmZmVyLVx1MDAzZXB0ciwgTUFQX0ZBSUxFRCk7XG4mIzQzO1xuJiM0MztcdC8qIFJlZ2lzdGVyIHRoZSByZWdpb24gd2l0aCB1c2VyZmF1bHRmZCAqL1xuJiM0MztcdHJlZy5yYW5nZS5zdGFydCA9ICh1bnNpZ25lZCBsb25nKWJ1ZmZlci1cdTAwM2VwdHI7XG4mIzQzO1x0cmVnLnJhbmdlLmxlbiA9IHNpemU7XG4mIzQzO1x0cmVnLm1vZGUgPSBVRkZESU9fUkVHSVNURVJfTU9ERV9NSVNTSU5HO1xuJiM0MztcdHJldCA9IGlvY3RsKHVmZmQsIFVGRkRJT19SRUdJU1RFUiwgXHUwMDI2cmVnKTtcbiYjNDM7XHRBU1NFUlRfRVEocmV0LCAwKTtcbiYjNDM7XG4mIzQzO1x0LyogU2V0IHVwIHRoZSBoYW5kbGVyIHRocmVhZCAqL1xuJiM0MztcdHVmZmRfYXJncy51ZmZkID0gdWZmZDtcbiYjNDM7XHRzdG9wX2ZkID0gZXZlbnRmZCgwLCBFRkRfQ0xPRVhFQyk7XG4mIzQzO1x0QVNTRVJUX0dFKHN0b3BfZmQsIDApO1xuJiM0MztcdHVmZmRfYXJncy5zdG9wX2ZkID0gc3RvcF9mZDtcbiYjNDM7XHR1ZmZkX2FyZ3MucGFnZV9idWZmZXIgPSBtYWxsb2Moc2VsZi1cdTAwM2VwYWdlX3NpemUpO1xuJiM0MztcdEFTU0VSVF9ORSh1ZmZkX2FyZ3MucGFnZV9idWZmZXIsIE5VTEwpO1xuJiM0MztcdHVmZmRfYXJncy5wYWdlX3NpemUgPSBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkLCBOVUxMLCB1ZmZkX2hhbmRsZXJfdGhyZWFkLCBcdTAwMjZ1ZmZkX2FyZ3MpO1xuJiM0MztcdEFTU0VSVF9FUShyZXQsIDApO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFVzZSB0aGUgdW5sb2NrZWQgcmVhZCBwYXRoIHdoaWNoIGFsbG93cyB0aGUgbW1hcCBsb2NrIHRvIGJlXG4mIzQzO1x0ICogZHJvcHBlZCBkdXJpbmcgdGhlIGZhdWx0LCBlbmFibGluZyB1c2VyZmF1bHRmZCByZXNvbHV0aW9uLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVx1MDAzZWZkLCBITU1fRE1JUlJPUl9SRUFEX1VOTE9DS0VELFxuJiM0MztcdFx0XHQgICAgICBidWZmZXIsIG5wYWdlcyk7XG4mIzQzO1x0QVNTRVJUX0VRKHJldCwgMCk7XG4mIzQzO1x0QVNTRVJUX0VRKGJ1ZmZlci1cdTAwM2VjcGFnZXMsIG5wYWdlcyk7XG4mIzQzO1xuJiM0MztcdC8qIFZlcmlmeSB0aGUgZGV2aWNlIHJlYWQgdGhlIGRhdGEgZmlsbGVkIGJ5IHRoZSB1ZmZkIGhhbmRsZXIgKi9cbiYjNDM7XHRwdHIgPSBidWZmZXItXHUwMDNlbWlycm9yO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNpemU7ICYjNDM7JiM0MztpKVxuJiM0MztcdFx0QVNTRVJUX0VRKHB0cltpXSwgKHVuc2lnbmVkIGNoYXIpMHhBQik7XG4mIzQzO1xuJiM0MztcdG53cml0ZSA9IHdyaXRlKHN0b3BfZmQsIFx1MDAyNnN0b3AsIHNpemVvZihzdG9wKSk7XG4mIzQzO1x0QVNTRVJUX0VRKG53cml0ZSwgc2l6ZW9mKHN0b3ApKTtcbiYjNDM7XHRwdGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKTtcbiYjNDM7XHRjbG9zZShzdG9wX2ZkKTtcbiYjNDM7XHRmcmVlKHVmZmRfYXJncy5wYWdlX2J1ZmZlcik7XG4mIzQzO1x0Y2xvc2UodWZmZCk7XG4mIzQzO1x0aG1tX2J1ZmZlcl9mcmVlKGJ1ZmZlcik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1xuIFRFU1RfSEFSTkVTU19NQUlOXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6MDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VEVTVF9ITU0mIzM0OywKICAgICYjMzQ7RFJNX0FDQ0VMX0FNRFhETkEmIzM0OywKICAgICYjMzQ7RFJNX0dQVVNWTSYjMzQ7LAogICAgJiMzNDtEUk1fTk9VVkVBVV9TVk0mIzM0OywKICAgICYjMzQ7TVNIVl9ST09UJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkRfT05fREVNQU5EX1BBR0lORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2htbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0JiMzNDssCiAgICAmIzM0O2htbV9yYW5nZV9mYXVsdCYjMzQ7LAogICAgJiMzNDtobW1fZG9fZmF1bHQmIzM0OywKICAgICYjMzQ7aG1tX3JhbmdlX2ZhdWx0X2xvY2tlZCYjMzQ7LAogICAgJiMzNDtobW1fcmVjb3JkX2ZhdWx0JiMzNDssCiAgICAmIzM0O2RtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWQmIzM0OywKICAgICYjMzQ7ZG1pcnJvcl9mYXVsdF91bmxvY2tlZCYjMzQ7LAogICAgJiMzNDtkbWlycm9yX3JlYWRfdW5sb2NrZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyB1bmxvY2tlZCB0aW1lb3V0IHZhcmlhbnQgZm9yIEhNTSByYW5nZSBmYXVsdHMgKGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGApIGFuZCByZWZhY3RvcnMgdGhlIGV4aXN0aW5nIGBobW1fcmFuZ2VfZmF1bHRgIHRvIHVzZSBhIGxvY2tlZCBoZWxwZXIuIEl0IGFsc28gdXBkYXRlcyBzZXZlcmFsIGRyaXZlcnMgYW5kIHRoZSBITU0gdGVzdCBtb2R1bGUgdG8gdXNlIHRoZSBuZXcgdW5sb2NrZWQgdmFyaWFudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRldmljZSBkcml2ZXIgaW50ZXJhY3Rpb24sIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgcmV0cnkgYW5kIGxvY2tpbmcgbG9naWMgaXMgcm9idXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiZDA4MTI2NDY4YTNkMjg4ZTM5NmZkNmU2ZjY5YTlmYzJjNzBhNjU5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMTYgMDA6MDk6MDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QKaW5kZXggN2Q2MWI3YThiNjViNzkuLmUwMjEyMThhZGE1OGZlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0CkBAIC0xNTYsNDIgJiM0MzsxNTYsNTcgQEAgRHVyaW5nIHRoZSBvcHMtJmd0O2ludmFsaWRhdGUoKSBjYWxsYmFjayB0aGUgZGV2aWNlIGRyaXZlciBtdXN0IHBlcmZvcm0gdGhlCiB1cGRhdGUgYWN0aW9uIHRvIHRoZSByYW5nZSAobWFyayByYW5nZSByZWFkIG9ubHksIG9yIGZ1bGx5IHVubWFwLCBldGMuKS4gVGhlCiBkZXZpY2UgbXVzdCBjb21wbGV0ZSB0aGUgdXBkYXRlIGJlZm9yZSB0aGUgZHJpdmVyIGNhbGxiYWNrIHJldHVybnMuCiAKLVdoZW4gdGhlIGRldmljZSBkcml2ZXIgd2FudHMgdG8gcG9wdWxhdGUgYSByYW5nZSBvZiB2aXJ0dWFsIGFkZHJlc3NlcywgaXQgY2FuCi11c2U6OgomIzQzO1doZW4gdGhlIGRldmljZSBkcml2ZXIgd2FudHMgdG8gcG9wdWxhdGUgYSByYW5nZSBvZiB2aXJ0dWFsIGFkZHJlc3NlcywgdGhlCiYjNDM7bm9ybWFsIGludGVyZmFjZSBpczo6CiAKLSAgaW50IGhtbV9yYW5nZV9mYXVsdChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSk7CiYjNDM7ICBpbnQgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0KTsKIAogSXQgd2lsbCB0cmlnZ2VyIGEgcGFnZSBmYXVsdCBvbiBtaXNzaW5nIG9yIHJlYWQtb25seSBlbnRyaWVzIGlmIHdyaXRlIGFjY2VzcyBpcwogcmVxdWVzdGVkIChzZWUgYmVsb3cpLiBQYWdlIGZhdWx0cyB1c2UgdGhlIGdlbmVyaWMgbW0gcGFnZSBmYXVsdCBjb2RlIHBhdGgganVzdAotbGlrZSBhIENQVSBwYWdlIGZhdWx0LiBUaGUgdXNhZ2UgcGF0dGVybiBpczo6CiYjNDM7bGlrZSBhIENQVSBwYWdlIGZhdWx0LgomIzQzOwomIzQzO1RoZSBjYWxsZXIgbXVzdCBub3QgaG9sZCBgYG1tYXBfcmVhZF9sb2NrYGAgYmVmb3JlIHRoZSBjYWxsLgomIzQzO2BgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKWBgIHRha2VzIHRoZSBtbWFwIHJlYWQgbG9jayBpbnRlcm5hbGx5IGFuZAomIzQzO2FsbG93cyBgYGhhbmRsZV9tbV9mYXVsdCgpYGAgdG8gZHJvcCBpdCBkdXJpbmcgZmF1bHQgaGFuZGxpbmcuIFRoaXMgaXMgcmVxdWlyZWQKJiM0Mztmb3IgVk1BcyB3aG9zZSBmYXVsdCBoYW5kbGVycyBtYXkgcmVsZWFzZSB0aGUgbW1hcCBsb2NrLCBmb3IgZXhhbXBsZSByZWdpb25zCiYjNDM7bWFuYWdlZCBieSBgYHVzZXJmYXVsdGZkYGAuCiYjNDM7CiYjNDM7SWYgdGhlIG1tYXAgbG9jayBpcyBkcm9wcGVkIG9yIHRoZSByYW5nZSBpcyBpbnZhbGlkYXRlZCwgdGhlIGZ1bmN0aW9uIHJlZnJlc2hlcwomIzQzO2BgcmFuZ2UtJmd0O25vdGlmaWVyX3NlcWBgIGFuZCByZXN0YXJ0cyB0aGUgd2FsayBpbnRlcm5hbGx5LiBgYC1FSU5UUmBgIGlzIHJldHVybmVkCiYjNDM7aWYgbW1hcCBsb2NrIGFjcXVpc2l0aW9uIGlzIGludGVycnVwdGVkIG9yIGEgZmF0YWwgc2lnbmFsIGlzIHBlbmRpbmcgZHVyaW5nCiYjNDM7cmV0cnkgaGFuZGxpbmcuCiYjNDM7CiYjNDM7VGhlIHRpbWVvdXQgaXMgc3BlY2lmaWVkIGluIGppZmZpZXM7IHBhc3NpbmcgYGAwYGAgbWVhbnMgcmV0cnkgaW5kZWZpbml0ZWx5LiBUaGUKJiM0Mzt0aW1lb3V0IGV4aXN0cyB0byBwcmVzZXJ2ZSBjYWxsZXIgcG9saWN5IGZvciByZXBlYXRlZCBtbXUtbm90aWZpZXIgaW52YWxpZGF0aW9uCiYjNDM7YW5kIGlzIGNoZWNrZWQgYmV0d2VlbiByZXRyeSBhdHRlbXB0cy4gSE1NIGRvZXMgbm90IGludGVycnVwdCBwYWdlIGZhdWx0CiYjNDM7aGFuZGxpbmcgd2hlbiB0aGUgdGltZW91dCBleHBpcmVzLCBidXQgcmV0dXJucyBgYC1FQlVTWWBgIGlmIHRoZSByZXRyeSBidWRnZXQgaXMKJiM0MztleGhhdXN0ZWQgYmVmb3JlIGEgc3RhYmxlIHJhbmdlIGlzIG9idGFpbmVkLgomIzQzOwomIzQzO1RoZSB1c2FnZSBwYXR0ZXJuIGlzOjoKIAogIGludCBkcml2ZXJfcG9wdWxhdGVfcmFuZ2UoLi4uKQogIHsKICAgICAgIHN0cnVjdCBobW1fcmFuZ2UgcmFuZ2U7CiYjNDM7ICAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogICAgICAgLi4uCiAKJiM0MzsgICAgICB0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTsKICAgICAgIHJhbmdlLm5vdGlmaWVyID0gJmFtcDtpbnRlcnZhbF9zdWI7CiAgICAgICByYW5nZS5zdGFydCA9IC4uLjsKICAgICAgIHJhbmdlLmVuZCA9IC4uLjsKICAgICAgIHJhbmdlLmhtbV9wZm5zID0gLi4uOwogCi0gICAgICBpZiAoIW1tZ2V0X25vdF96ZXJvKGludGVydmFsX3N1Yi0mZ3Q7bm90aWZpZXIubW0pKQomIzQzOyAgICAgIGlmICghbW1nZXRfbm90X3plcm8oaW50ZXJ2YWxfc3ViLm1tKSkKICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKIAogIGFnYWluOgotICAgICAgcmFuZ2Uubm90aWZpZXJfc2VxID0gbW11X2ludGVydmFsX3JlYWRfYmVnaW4oJmFtcDtpbnRlcnZhbF9zdWIpOwotICAgICAgbW1hcF9yZWFkX2xvY2sobW0pOwotICAgICAgcmV0ID0gaG1tX3JhbmdlX2ZhdWx0KCZhbXA7cmFuZ2UpOwotICAgICAgaWYgKHJldCkgewotICAgICAgICAgIG1tYXBfcmVhZF91bmxvY2sobW0pOwotICAgICAgICAgIGlmIChyZXQgPT0gLUVCVVNZKQotICAgICAgICAgICAgICAgICBnb3RvIGFnYWluOwotICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICB9Ci0gICAgICBtbWFwX3JlYWRfdW5sb2NrKG1tKTsKJiM0MzsgICAgICByZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgmYW1wO3JhbmdlLCB0aW1lb3V0KTsKJiM0MzsgICAgICBpZiAocmV0KQomIzQzOyAgICAgICAgICBnb3RvIG91dF9wdXQ7CiAKICAgICAgIHRha2VfbG9jayhkcml2ZXItJmd0O3VwZGF0ZSk7Ci0gICAgICBpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkoJmFtcDtuaSwgcmFuZ2Uubm90aWZpZXJfc2VxKSB7CiYjNDM7ICAgICAgaWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KHJhbmdlLm5vdGlmaWVyLCByYW5nZS5ub3RpZmllcl9zZXEpKSB7CiAgICAgICAgICAgcmVsZWFzZV9sb2NrKGRyaXZlci0mZ3Q7dXBkYXRlKTsKICAgICAgICAgICBnb3RvIGFnYWluOwogICAgICAgfQpAQCAtMjAwLDEzICYjNDM7MjE1LDMxIEBAIGxpa2UgYSBDUFUgcGFnZSBmYXVsdC4gVGhlIHVzYWdlIHBhdHRlcm4gaXM6OgogICAgICAgICogdW5kZXIgdGhlIHVwZGF0ZSBsb2NrICovCiAKICAgICAgIHJlbGVhc2VfbG9jayhkcml2ZXItJmd0O3VwZGF0ZSk7Ci0gICAgICByZXR1cm4gMDsKJiM0MzsgICAgICByZXQgPSAwOwomIzQzOwomIzQzOyBvdXRfcHV0OgomIzQzOyAgICAgIG1tcHV0KGludGVydmFsX3N1Yi5tbSk7CiYjNDM7ICAgICAgcmV0dXJuIHJldDsKICB9CiAKIFRoZSBkcml2ZXItJmd0O3VwZGF0ZSBsb2NrIGlzIHRoZSBzYW1lIGxvY2sgdGhhdCB0aGUgZHJpdmVyIHRha2VzIGluc2lkZSBpdHMKIGludmFsaWRhdGUoKSBjYWxsYmFjay4gVGhhdCBsb2NrIG11c3QgYmUgaGVsZCBiZWZvcmUgY2FsbGluZwogbW11X2ludGVydmFsX3JlYWRfcmV0cnkoKSB0byBhdm9pZCBhbnkgcmFjZSB3aXRoIGEgY29uY3VycmVudCBDUFUgcGFnZSB0YWJsZQotdXBkYXRlLgomIzQzO3VwZGF0ZS4gVGhlIHJldHJ5IGNoZWNrIG11c3QgdXNlIHRoZSBzYW1lIG5vdGlmaWVyIGFuZCBzZXF1ZW5jZSBudW1iZXIgc3RvcmVkCiYjNDM7aW4gYGByYW5nZWBgIGJ5IGBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKWBgLgomIzQzOwomIzQzO0hvbGRpbmcgdGhlIG1tYXAgbG9jayBhY3Jvc3MgSE1NIGZhdWx0cwomIzQzOz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOwomIzQzO01vc3QgY2FsbGVycyBzaG91bGQgdXNlIGBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKWBgLiBJZiBhIGRyaXZlcgomIzQzO3JlYWxseSBuZWVkcyB0byBob2xkIHRoZSBtbWFwIGxvY2sgYWNyb3NzIHdvcmsgb3V0c2lkZSBITU0sIGl0IGNhbiB1c2U6OgomIzQzOwomIzQzOyAgaW50IGhtbV9yYW5nZV9mYXVsdChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSk7CiYjNDM7CiYjNDM7VGhlIG1tYXAgbG9jayBtdXN0IGJlIGhlbGQgYnkgdGhlIGNhbGxlciBhbmQgd2lsbCByZW1haW4gaGVsZCBvbiByZXR1cm4uIFRoaXMKJiM0MztpbnRlcmZhY2UgY2Fubm90IHN1cHBvcnQgVk1BcyB3aG9zZSBmYXVsdCBoYW5kbGVycyBuZWVkIHRvIGRyb3AgdGhlIG1tYXAgbG9jay4KJiM0MztOZXcgY2FsbGVycyBzaG91bGQgcHJlZmVyIGBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKWBgIHVubGVzcyB0aGV5CiYjNDM7aGF2ZSBhIHNwZWNpZmljIHJlcXVpcmVtZW50IHRvIGtlZXAgdGhlIG1tYXAgbG9jayBoZWxkIGFjcm9zcyB0aGUgY2FsbC4KIAogTGV2ZXJhZ2UgZGVmYXVsdF9mbGFncyBhbmQgcGZuX2ZsYWdzX21hc2sKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0yMjEsOCAmIzQzOzI1NCw4IEBAIHBlcm1pc3Npb24sIGl0IHNldHM6OgogICAgIHJhbmdlLSZndDtkZWZhdWx0X2ZsYWdzID0gSE1NX1BGTl9SRVFfRkFVTFQ7CiAgICAgcmFuZ2UtJmd0O3Bmbl9mbGFnc19tYXNrID0gMDsKIAotYW5kIGNhbGxzIGhtbV9yYW5nZV9mYXVsdCgpIGFzIGRlc2NyaWJlZCBhYm92ZS4gVGhpcyB3aWxsIGZpbGwgZmF1bHQgYWxsIHBhZ2VzCi1pbiB0aGUgcmFuZ2Ugd2l0aCBhdCBsZWFzdCByZWFkIHBlcm1pc3Npb24uCiYjNDM7YW5kIGNhbGxzIHRoZSBITU0gcmFuZ2UgZmF1bHQgaGVscGVyIGFzIGRlc2NyaWJlZCBhYm92ZS4gVGhpcyB3aWxsIGZhdWx0CiYjNDM7YWxsIHBhZ2VzIGluIHRoZSByYW5nZSB3aXRoIGF0IGxlYXN0IHJlYWQgcGVybWlzc2lvbi4KIAogTm93IGxldCYjMzk7cyBzYXkgdGhlIGRyaXZlciB3YW50cyB0byBkbyB0aGUgc2FtZSBleGNlcHQgZm9yIG9uZSBwYWdlIGluIHRoZSByYW5nZSBmb3IKIHdoaWNoIGl0IHdhbnRzIHRvIGhhdmUgd3JpdGUgcGVybWlzc2lvbi4gTm93IGRyaXZlciBzZXQ6OgpAQCAtMjM2LDkgJiM0MzsyNjksOSBAQCBhZGRyZXNzID09IHJhbmdlLSZndDtzdGFydCAmIzQzOyAoaW5kZXhfb2Zfd3JpdGUgJmx0OyZsdDsgUEFHRV9TSElGVCkgaXQgd2lsbCBmYXVsdCB3aXRoCiB3cml0ZSBwZXJtaXNzaW9uIGkuZS4sIGlmIHRoZSBDUFUgcHRlIGRvZXMgbm90IGhhdmUgd3JpdGUgcGVybWlzc2lvbiBzZXQgdGhlbiBITU0KIHdpbGwgY2FsbCBoYW5kbGVfbW1fZmF1bHQoKS4KIAotQWZ0ZXIgaG1tX3JhbmdlX2ZhdWx0IGNvbXBsZXRlcyB0aGUgZmxhZyBiaXRzIGFyZSBzZXQgdG8gdGhlIGN1cnJlbnQgc3RhdGUgb2YKLXRoZSBwYWdlIHRhYmxlcywgaWUgSE1NX1BGTl9WQUxJRCB8IEhNTV9QRk5fV1JJVEUgd2lsbCBiZSBzZXQgaWYgdGhlIHBhZ2UgaXMKLXdyaXRhYmxlLgomIzQzO0FmdGVyIHRoZSBITU0gcmFuZ2UgZmF1bHQgaGVscGVyIGNvbXBsZXRlcyB0aGUgZmxhZyBiaXRzIGFyZSBzZXQgdG8gdGhlCiYjNDM7Y3VycmVudCBzdGF0ZSBvZiB0aGUgcGFnZSB0YWJsZXMsIGllIEhNTV9QRk5fVkFMSUQgfCBITU1fUEZOX1dSSVRFIHdpbGwgYmUKJiM0MztzZXQgaWYgdGhlIHBhZ2UgaXMgd3JpdGFibGUuCiAKIAogUmVwcmVzZW50IGFuZCBtYW5hZ2UgZGV2aWNlIG1lbW9yeSBmcm9tIGNvcmUga2VybmVsIHBvaW50IG9mIHZpZXcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNjZWwvYW1keGRuYS9haWUyX2N0eC5jIGIvZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FpZTJfY3R4LmMKaW5kZXggNTQ0ODY5NjBjYmY1ZTYuLmI1YjRjYTI2MzAwMmRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguYwpAQCAtMTAzNCw3ICYjNDM7MTAzNCw3IEBAIHN0YXRpYyBpbnQgYWllMl9wb3B1bGF0ZV9yYW5nZShzdHJ1Y3QgYW1keGRuYV9nZW1fb2JqICphYm8pCiAJYm9vbCBmb3VuZDsKIAlpbnQgcmV0OwogCi0JdGltZW91dCA9IGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTsKJiM0MzsJdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7CiBhZ2FpbjoKIAlmb3VuZCA9IGZhbHNlOwogCWRvd25fd3JpdGUoJmFtcDt4ZG5hLSZndDtub3RpZmllcl9sb2NrKTsKQEAgLTEwNjEsMjQgJiM0MzsxMDYxLDkgQEAgc3RhdGljIGludCBhaWUyX3BvcHVsYXRlX3JhbmdlKHN0cnVjdCBhbWR4ZG5hX2dlbV9vYmogKmFibykKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCi0JbWFwcC0mZ3Q7cmFuZ2Uubm90aWZpZXJfc2VxID0gbW11X2ludGVydmFsX3JlYWRfYmVnaW4oJmFtcDttYXBwLSZndDtub3RpZmllcik7Ci0JbW1hcF9yZWFkX2xvY2sobW0pOwotCXJldCA9IGhtbV9yYW5nZV9mYXVsdCgmYW1wO21hcHAtJmd0O3JhbmdlKTsKLQltbWFwX3JlYWRfdW5sb2NrKG1tKTsKLQlpZiAocmV0KSB7Ci0JCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7Ci0JCQlyZXQgPSAtRVRJTUU7Ci0JCQlnb3RvIHB1dF9tbTsKLQkJfQotCi0JCWlmIChyZXQgPT0gLUVCVVNZKSB7Ci0JCQlhbWR4ZG5hX3VtYXBfcHV0KG1hcHApOwotCQkJbW1wdXQobW0pOwotCQkJZ290byBhZ2FpbjsKLQkJfQotCiYjNDM7CXJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KCZhbXA7bWFwcC0mZ3Q7cmFuZ2UsIHRpbWVvdXQpOwomIzQzOwlpZiAocmV0KQogCQlnb3RvIHB1dF9tbTsKLQl9CiAKIAlkb3duX3dyaXRlKCZhbXA7eGRuYS0mZ3Q7bm90aWZpZXJfbG9jayk7CiAJaWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KCZhbXA7bWFwcC0mZ3Q7bm90aWZpZXIsIG1hcHAtJmd0O3JhbmdlLm5vdGlmaWVyX3NlcSkpIHsKQEAgLTEwOTYsNyAmIzQzOzEwODEsNyBAQCBzdGF0aWMgaW50IGFpZTJfcG9wdWxhdGVfcmFuZ2Uoc3RydWN0IGFtZHhkbmFfZ2VtX29iaiAqYWJvKQogcHV0X21tOgogCWFtZHhkbmFfdW1hcF9wdXQobWFwcCk7CiAJbW1wdXQobW0pOwotCXJldHVybiByZXQ7CiYjNDM7CXJldHVybiByZXQgPT0gLUVCVVNZID8gLUVUSU1FIDogcmV0OwogfQogCiBpbnQgYWllMl9jbWRfc3VibWl0KHN0cnVjdCBhbWR4ZG5hX2h3Y3R4ICpod2N0eCwgc3RydWN0IGFtZHhkbmFfc2NoZWRfam9iICpqb2IsIHU2NCAqc2VxKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMKaW5kZXggOTU4Y2I2MDVhZWRkNTMuLmRlNWJiZmU1OGVlOTQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMKQEAgLTc3Myw4ICYjNDM7NzczLDcgQEAgZW51bSBkcm1fZ3B1c3ZtX3NjYW5fcmVzdWx0IGRybV9ncHVzdm1fc2Nhbl9tbShzdHJ1Y3QgZHJtX2dwdXN2bV9yYW5nZSAqcmFuZ2UsCiAJCS5lbmQgPSBlbmQsCiAJCS5kZXZfcHJpdmF0ZV9vd25lciA9IGRldl9wcml2YXRlX293bmVyLAogCX07Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0KLQkJamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpOwomIzQzOwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpOwogCWVudW0gZHJtX2dwdXN2bV9zY2FuX3Jlc3VsdCBzdGF0ZSA9IERSTV9HUFVTVk1fU0NBTl9VTlBPUFVMQVRFRCwgbmV3X3N0YXRlOwogCXVuc2lnbmVkIGxvbmcgKnBmbnM7CiAJdW5zaWduZWQgbG9uZyBucGFnZXMgPSBucGFnZXNfaW5fcmFuZ2Uoc3RhcnQsIGVuZCk7CkBAIC03ODgsMjIgJiM0Mzs3ODcsNyBAQCBlbnVtIGRybV9ncHVzdm1fc2Nhbl9yZXN1bHQgZHJtX2dwdXN2bV9zY2FuX21tKHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZSwKIAlobW1fcmFuZ2UuaG1tX3BmbnMgPSBwZm5zOwogCiByZXRyeToKLQlobW1fcmFuZ2Uubm90aWZpZXJfc2VxID0gbW11X2ludGVydmFsX3JlYWRfYmVnaW4obm90aWZpZXIpOwotCW1tYXBfcmVhZF9sb2NrKHJhbmdlLSZndDtncHVzdm0tJmd0O21tKTsKLQotCXdoaWxlICh0cnVlKSB7Ci0JCWVyciA9IGhtbV9yYW5nZV9mYXVsdCgmYW1wO2htbV9yYW5nZSk7Ci0JCWlmIChlcnIgPT0gLUVCVVNZKSB7Ci0JCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkKLQkJCQlicmVhazsKLQotCQkJaG1tX3JhbmdlLm5vdGlmaWVyX3NlcSA9Ci0JCQkJbW11X2ludGVydmFsX3JlYWRfYmVnaW4obm90aWZpZXIpOwotCQkJY29udGludWU7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCW1tYXBfcmVhZF91bmxvY2socmFuZ2UtJmd0O2dwdXN2bS0mZ3Q7bW0pOwomIzQzOwllcnIgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgmYW1wO2htbV9yYW5nZSwgdGltZW91dCk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfZnJlZTsKIApAQCAtMTQwNiw4ICYjNDM7MTM5MCw3IEBAIGludCBkcm1fZ3B1c3ZtX2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLAogCQkuZGV2X3ByaXZhdGVfb3duZXIgPSBjdHgtJmd0O2RldmljZV9wcml2YXRlX3BhZ2Vfb3duZXIsCiAJfTsKIAl2b2lkICp6ZGQ7Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0KLQkJamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpOwomIzQzOwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpOwogCXVuc2lnbmVkIGxvbmcgaSwgajsKIAl1bnNpZ25lZCBsb25nIG5wYWdlcyA9IG5wYWdlc19pbl9yYW5nZShwYWdlc19zdGFydCwgcGFnZXNfZW5kKTsKIAl1bnNpZ25lZCBsb25nIG51bV9kbWFfbWFwcGVkOwpAQCAtMTQyMiw5ICYjNDM7MTQwNSw2IEBAIGludCBkcm1fZ3B1c3ZtX2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLAogCXN0cnVjdCBkbWFfaW92YV9zdGF0ZSAqc3RhdGUgPSAmYW1wO3N2bV9wYWdlcy0mZ3Q7c3RhdGU7CiAKIHJldHJ5OgotCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKQotCQlyZXR1cm4gLUVCVVNZOwotCiAJaG1tX3JhbmdlLm5vdGlmaWVyX3NlcSA9IG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKG5vdGlmaWVyKTsKIAlpZiAoZHJtX2dwdXN2bV9wYWdlc192YWxpZF91bmxvY2tlZChncHVzdm0sIHN2bV9wYWdlcykpCiAJCWdvdG8gc2V0X3NlcW5vOwpAQCAtMTQzOSwyMSAmIzQzOzE0MTksNyBAQCBpbnQgZHJtX2dwdXN2bV9nZXRfcGFnZXMoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSwKIAl9CiAKIAlobW1fcmFuZ2UuaG1tX3BmbnMgPSBwZm5zOwotCXdoaWxlICh0cnVlKSB7Ci0JCW1tYXBfcmVhZF9sb2NrKG1tKTsKLQkJZXJyID0gaG1tX3JhbmdlX2ZhdWx0KCZhbXA7aG1tX3JhbmdlKTsKLQkJbW1hcF9yZWFkX3VubG9jayhtbSk7Ci0KLQkJaWYgKGVyciA9PSAtRUJVU1kpIHsKLQkJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKQotCQkJCWJyZWFrOwotCi0JCQlobW1fcmFuZ2Uubm90aWZpZXJfc2VxID0KLQkJCQltbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihub3RpZmllcik7Ci0JCQljb250aW51ZTsKLQkJfQotCQlicmVhazsKLQl9CiYjNDM7CWVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KCZhbXA7aG1tX3JhbmdlLCB0aW1lb3V0KTsKIAltbXB1dChtbSk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfZnJlZTsKQEAgLTE3MjAsOCAmIzQzOzE2ODYsNyBAQCBpbnQgZHJtX2dwdXN2bV9yYW5nZV9ldmljdChzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLAogCQkuZW5kID0gZHJtX2dwdXN2bV9yYW5nZV9lbmQocmFuZ2UpLAogCQkuZGV2X3ByaXZhdGVfb3duZXIgPSBOVUxMLAogCX07Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0KLQkJamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpOwomIzQzOwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpOwogCXVuc2lnbmVkIGxvbmcgKnBmbnM7CiAJdW5zaWduZWQgbG9uZyBucGFnZXMgPSBucGFnZXNfaW5fcmFuZ2UoZHJtX2dwdXN2bV9yYW5nZV9zdGFydChyYW5nZSksCiAJCQkJCSAgICAgICBkcm1fZ3B1c3ZtX3JhbmdlX2VuZChyYW5nZSkpOwpAQCAtMTczNiwyNCAmIzQzOzE3MDEsMTIgQEAgaW50IGRybV9ncHVzdm1fcmFuZ2VfZXZpY3Qoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSwKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlobW1fcmFuZ2UuaG1tX3BmbnMgPSBwZm5zOwotCXdoaWxlICghdGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgewotCQlobW1fcmFuZ2Uubm90aWZpZXJfc2VxID0gbW11X2ludGVydmFsX3JlYWRfYmVnaW4obm90aWZpZXIpOwotCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgewotCQkJZXJyID0gLUVUSU1FOwotCQkJYnJlYWs7Ci0JCX0KLQotCQltbWFwX3JlYWRfbG9jayhtbSk7Ci0JCWVyciA9IGhtbV9yYW5nZV9mYXVsdCgmYW1wO2htbV9yYW5nZSk7Ci0JCW1tYXBfcmVhZF91bmxvY2sobW0pOwotCQlpZiAoZXJyICE9IC1FQlVTWSkKLQkJCWJyZWFrOwotCX0KJiM0MzsJZXJyID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoJmFtcDtobW1fcmFuZ2UsIHRpbWVvdXQpOwogCiAJa3ZmcmVlKHBmbnMpOwogCW1tcHV0KG1tKTsKIAotCXJldHVybiBlcnI7CiYjNDM7CXJldHVybiBlcnIgPT0gLUVCVVNZID8gLUVUSU1FIDogZXJyOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dwdXN2bV9yYW5nZV9ldmljdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3ZtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N2bS5jCmluZGV4IGRjYzkyMTMxNDg4ZWFiLi41ODczNTQ0NmQ3ODMyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N2bS5jCkBAIC02NzgsMjAgJiM0Mzs2NzgsMjIgQEAgc3RhdGljIGludCBub3V2ZWF1X3JhbmdlX2ZhdWx0KHN0cnVjdCBub3V2ZWF1X3N2bW0gKnN2bW0sCiAJcmFuZ2UuZW5kID0gbm90aWZpZXItJmd0O25vdGlmaWVyLmludGVydmFsX3RyZWUubGFzdCAmIzQzOyAxOwogCiAJd2hpbGUgKHRydWUpIHsKLQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKJiM0MzsJCWxvbmcgcmVtYWluaW5nID0gdGltZW91dCAtIGppZmZpZXM7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIEhNTSB0aW1lb3V0IG9ubHkgYm91bmRzIHJldHJpZXMgd2hpbGUgSE1NIGlzIHdhbGtpbmcgYW5kCiYjNDM7CQkgKiBmYXVsdGluZyB0aGUgcmFuZ2UuIFRoaXMgZmF1bHQgaXMgaGFuZGxlZCBieSBhIGtlcm5lbCB3b3JrZXIsCiYjNDM7CQkgKiBzbyBmYXRhbCBzaWduYWxzIGZyb20gdGhlIGZhdWx0aW5nIHByb2Nlc3MgY2Fubm90IHN0b3AgYW4KJiM0MzsJCSAqIGVuZGxlc3Mgc3RyZWFtIG9mIGludmFsaWRhdGlvbnMgaGVyZS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgdGltZW91dCkpIHsKIAkJCXJldCA9IC1FQlVTWTsKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJcmFuZ2Uubm90aWZpZXJfc2VxID0gbW11X2ludGVydmFsX3JlYWRfYmVnaW4ocmFuZ2Uubm90aWZpZXIpOwotCQltbWFwX3JlYWRfbG9jayhtbSk7Ci0JCXJldCA9IGhtbV9yYW5nZV9mYXVsdCgmYW1wO3JhbmdlKTsKLQkJbW1hcF9yZWFkX3VubG9jayhtbSk7Ci0JCWlmIChyZXQpIHsKLQkJCWlmIChyZXQgPT0gLUVCVVNZKQotCQkJCWNvbnRpbnVlOwomIzQzOwkJcmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoJmFtcDtyYW5nZSwgcmVtYWluaW5nKTsKJiM0MzsJCWlmIChyZXQpCiAJCQlnb3RvIG91dDsKLQkJfQogCiAJCW11dGV4X2xvY2soJmFtcDtzdm1tLSZndDttdXRleCk7CiAJCWlmIChtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeShyYW5nZS5ub3RpZmllciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHYvbXNodl9yZWdpb25zLmMgYi9kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jCmluZGV4IDZkNjVlNWI0MjE1Mjk1Li5kZGRhYWRlMzFiNWRjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jCkBAIC0zODEsNDYgJiM0MzszODEsNiBAQCBpbnQgbXNodl9yZWdpb25fZ2V0KHN0cnVjdCBtc2h2X21lbV9yZWdpb24gKnJlZ2lvbikKIAlyZXR1cm4ga3JlZl9nZXRfdW5sZXNzX3plcm8oJmFtcDtyZWdpb24tJmd0O21yZWdfcmVmY291bnQpOwogfQogCi0vKioKLSAqIG1zaHZfcmVnaW9uX2htbV9mYXVsdF9hbmRfbG9jayAtIEhhbmRsZSBITU0gZmF1bHRzIGFuZCBsb2NrIHRoZSBtZW1vcnkgcmVnaW9uCi0gKiBAcmVnaW9uOiBQb2ludGVyIHRvIHRoZSBtZW1vcnkgcmVnaW9uIHN0cnVjdHVyZQotICogQHJhbmdlOiBQb2ludGVyIHRvIHRoZSBITU0gcmFuZ2Ugc3RydWN0dXJlCi0gKgotICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyB0aGUgZm9sbG93aW5nIHN0ZXBzOgotICogMS4gUmVhZHMgdGhlIG5vdGlmaWVyIHNlcXVlbmNlIGZvciB0aGUgSE1NIHJhbmdlLgotICogMi4gQWNxdWlyZXMgYSByZWFkIGxvY2sgb24gdGhlIG1lbW9yeSBtYXAuCi0gKiAzLiBIYW5kbGVzIEhNTSBmYXVsdHMgZm9yIHRoZSBzcGVjaWZpZWQgcmFuZ2UuCi0gKiA0LiBSZWxlYXNlcyB0aGUgcmVhZCBsb2NrIG9uIHRoZSBtZW1vcnkgbWFwLgotICogNS4gSWYgc3VjY2Vzc2Z1bCwgbG9ja3MgdGhlIG1lbW9yeSByZWdpb24gbXV0ZXguCi0gKiA2LiBWZXJpZmllcyBpZiB0aGUgbm90aWZpZXIgc2VxdWVuY2UgaGFzIGNoYW5nZWQgZHVyaW5nIHRoZSBvcGVyYXRpb24uCi0gKiAgICBJZiBpdCBoYXMsIHJlbGVhc2VzIHRoZSBtdXRleCBhbmQgcmV0dXJucyAtRUJVU1kgdG8gbWF0Y2ggd2l0aAotICogICAgaG1tX3JhbmdlX2ZhdWx0KCkgcmV0dXJuIGNvZGUgZm9yIHJlcGVhdGluZy4KLSAqCi0gKiBSZXR1cm46IDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4KLSAqLwotc3RhdGljIGludCBtc2h2X3JlZ2lvbl9obW1fZmF1bHRfYW5kX2xvY2soc3RydWN0IG1zaHZfbWVtX3JlZ2lvbiAqcmVnaW9uLAotCQkJCQkgIHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKQotewotCWludCByZXQ7Ci0KLQlyYW5nZS0mZ3Q7bm90aWZpZXJfc2VxID0gbW11X2ludGVydmFsX3JlYWRfYmVnaW4ocmFuZ2UtJmd0O25vdGlmaWVyKTsKLQltbWFwX3JlYWRfbG9jayhyZWdpb24tJmd0O21yZWdfbW5pLm1tKTsKLQlyZXQgPSBobW1fcmFuZ2VfZmF1bHQocmFuZ2UpOwotCW1tYXBfcmVhZF91bmxvY2socmVnaW9uLSZndDttcmVnX21uaS5tbSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCW11dGV4X2xvY2soJmFtcDtyZWdpb24tJmd0O21yZWdfbXV0ZXgpOwotCi0JaWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KHJhbmdlLSZndDtub3RpZmllciwgcmFuZ2UtJmd0O25vdGlmaWVyX3NlcSkpIHsKLQkJbXV0ZXhfdW5sb2NrKCZhbXA7cmVnaW9uLSZndDttcmVnX211dGV4KTsKLQkJY29uZF9yZXNjaGVkKCk7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIC8qKgogICogbXNodl9yZWdpb25fcmFuZ2VfZmF1bHQgLSBIYW5kbGUgbWVtb3J5IHJhbmdlIGZhdWx0cyBmb3IgYSBnaXZlbiByZWdpb24uCiAgKiBAcmVnaW9uOiBQb2ludGVyIHRvIHRoZSBtZW1vcnkgcmVnaW9uIHN0cnVjdHVyZS4KQEAgLTQ1MiwxMyAmIzQzOzQxMiwxOSBAQCBzdGF0aWMgaW50IG1zaHZfcmVnaW9uX3JhbmdlX2ZhdWx0KHN0cnVjdCBtc2h2X21lbV9yZWdpb24gKnJlZ2lvbiwKIAlyYW5nZS5zdGFydCA9IHJlZ2lvbi0mZ3Q7c3RhcnRfdWFkZHIgJiM0MzsgcGFnZV9vZmZzZXQgKiBIVl9IWVBfUEFHRV9TSVpFOwogCXJhbmdlLmVuZCA9IHJhbmdlLnN0YXJ0ICYjNDM7IHBhZ2VfY291bnQgKiBIVl9IWVBfUEFHRV9TSVpFOwogCi0JZG8gewotCQlyZXQgPSBtc2h2X3JlZ2lvbl9obW1fZmF1bHRfYW5kX2xvY2socmVnaW9uLCAmYW1wO3JhbmdlKTsKLQl9IHdoaWxlIChyZXQgPT0gLUVCVVNZKTsKLQomIzQzO2FnYWluOgomIzQzOwlyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgmYW1wO3JhbmdlLCAwKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAomIzQzOwltdXRleF9sb2NrKCZhbXA7cmVnaW9uLSZndDttcmVnX211dGV4KTsKJiM0MzsKJiM0MzsJaWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KHJhbmdlLm5vdGlmaWVyLCByYW5nZS5ub3RpZmllcl9zZXEpKSB7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtyZWdpb24tJmd0O21yZWdfbXV0ZXgpOwomIzQzOwkJY29uZF9yZXNjaGVkKCk7CiYjNDM7CQlnb3RvIGFnYWluOwomIzQzOwl9CiYjNDM7CiAJZm9yIChpID0gMDsgaSAmbHQ7IHBhZ2VfY291bnQ7IGkmIzQzOyYjNDM7KQogCQlyZWdpb24tJmd0O21yZWdfcGFnZXNbcGFnZV9vZmZzZXQgJiM0MzsgaV0gPSBobW1fcGZuX3RvX3BhZ2UocGZuc1tpXSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jCmluZGV4IDQwNGZhMWNjMzI1NDJjLi45Y2MyMWNkNzYyZDk4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9vZHAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jCkBAIC0zMjksNyAmIzQzOzMyOSw3IEBAIGludCBpYl91bWVtX29kcF9tYXBfZG1hX2FuZF9sb2NrKHN0cnVjdCBpYl91bWVtX29kcCAqdW1lbV9vZHAsIHU2NCB1c2VyX3ZpcnQsCiAJc3RydWN0IG1tX3N0cnVjdCAqb3duaW5nX21tID0gdW1lbV9vZHAtJmd0O3VtZW0ub3duaW5nX21tOwogCWludCBwZm5faW5kZXgsIGRtYV9pbmRleCwgcmV0ID0gMCwgc3RhcnRfaWR4OwogCXVuc2lnbmVkIGludCBwYWdlX3NoaWZ0LCBobW1fb3JkZXIsIHBmbl9zdGFydF9pZHg7Ci0JdW5zaWduZWQgbG9uZyBudW1fcGZucywgY3VycmVudF9zZXE7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbnVtX3BmbnM7CiAJc3RydWN0IGhtbV9yYW5nZSByYW5nZSA9IHt9OwogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKIApAQCAtMzYzLDI2ICYjNDM7MzYzLDE4IEBAIGludCBpYl91bWVtX29kcF9tYXBfZG1hX2FuZF9sb2NrKHN0cnVjdCBpYl91bWVtX29kcCAqdW1lbV9vZHAsIHU2NCB1c2VyX3ZpcnQsCiAJfQogCiAJcmFuZ2UuaG1tX3BmbnMgPSAmYW1wOyh1bWVtX29kcC0mZ3Q7bWFwLnBmbl9saXN0W3Bmbl9zdGFydF9pZHhdKTsKLQl0aW1lb3V0ID0gamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpOwomIzQzOwl0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTsKIAogcmV0cnk6Ci0JY3VycmVudF9zZXEgPSByYW5nZS5ub3RpZmllcl9zZXEgPQotCQltbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbigmYW1wO3VtZW1fb2RwLSZndDtub3RpZmllcik7Ci0KLQltbWFwX3JlYWRfbG9jayhvd25pbmdfbW0pOwotCXJldCA9IGhtbV9yYW5nZV9mYXVsdCgmYW1wO3JhbmdlKTsKLQltbWFwX3JlYWRfdW5sb2NrKG93bmluZ19tbSk7Ci0JaWYgKHVubGlrZWx5KHJldCkpIHsKLQkJaWYgKHJldCA9PSAtRUJVU1kgJmFtcDsmYW1wOyAhdGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkKLQkJCWdvdG8gcmV0cnk7CiYjNDM7CXJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KCZhbXA7cmFuZ2UsIHRpbWVvdXQpOwomIzQzOwlpZiAodW5saWtlbHkocmV0KSkKIAkJZ290byBvdXRfcHV0X21tOwotCX0KIAogCXN0YXJ0X2lkeCA9IChyYW5nZS5zdGFydCAtIGliX3VtZW1fc3RhcnQodW1lbV9vZHApKSAmZ3Q7Jmd0OyBwYWdlX3NoaWZ0OwogCWRtYV9pbmRleCA9IHN0YXJ0X2lkeDsKIAogCW11dGV4X2xvY2soJmFtcDt1bWVtX29kcC0mZ3Q7dW1lbV9tdXRleCk7Ci0JaWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KCZhbXA7dW1lbV9vZHAtJmd0O25vdGlmaWVyLCBjdXJyZW50X3NlcSkpIHsKJiM0MzsJaWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KCZhbXA7dW1lbV9vZHAtJmd0O25vdGlmaWVyLCByYW5nZS5ub3RpZmllcl9zZXEpKSB7CiAJCW11dGV4X3VubG9jaygmYW1wO3VtZW1fb2RwLSZndDt1bWVtX211dGV4KTsKIAkJZ290byByZXRyeTsKIAl9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2htbS5oIGIvaW5jbHVkZS9saW51eC9obW0uaAppbmRleCBkYjc1ZmZjOTQ5YTdhYy4uNmYwNGUzOTMyZjViMGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaG1tLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9obW0uaApAQCAtMTIzLDYgJiM0MzsxMjMsOCBAQCBzdHJ1Y3QgaG1tX3JhbmdlIHsKICAqIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0IGZvciBob3cgdG8gdXNlIHRoZSByYW5nZSBBUEkuCiAgKi8KIGludCBobW1fcmFuZ2VfZmF1bHQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpOwomIzQzO2ludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSwKJiM0MzsJCQkJICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpOwogCiAvKgogICogSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCAtIGRlZmF1bHQgdGltZW91dCAobXMpIHdoZW4gd2FpdGluZyBmb3IgYSByYW5nZQpkaWZmIC0tZ2l0IGEvbGliL3Rlc3RfaG1tLmMgYi9saWIvdGVzdF9obW0uYwppbmRleCA0NWMwY2I5OTIyMTg0YS4uNjIwNWZiMzEzYmQwNWUgMTAwNjQ0Ci0tLSBhL2xpYi90ZXN0X2htbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2xpYi90ZXN0X2htbS5jCkBAIC0zODksNiAmIzQzOzM4OSw2NyBAQCBzdGF0aWMgaW50IGRtaXJyb3JfcmFuZ2VfZmF1bHQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgZG1pcnJvcl9yYW5nZV9mYXVsdF91bmxvY2tlZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvciwKJiM0MzsJCQkJCXN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlLAomIzQzOwkJCQkJdW5zaWduZWQgbG9uZyB0aW1lb3V0KQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJd2hpbGUgKHRydWUpIHsKJiM0MzsJCXJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KHJhbmdlLCB0aW1lb3V0KTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CQltdXRleF9sb2NrKCZhbXA7ZG1pcnJvci0mZ3Q7bXV0ZXgpOwomIzQzOwkJaWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KHJhbmdlLSZndDtub3RpZmllciwKJiM0MzsJCQkJCSAgICByYW5nZS0mZ3Q7bm90aWZpZXJfc2VxKSkgewomIzQzOwkJCW11dGV4X3VubG9jaygmYW1wO2RtaXJyb3ItJmd0O211dGV4KTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IGRtaXJyb3JfZG9fZmF1bHQoZG1pcnJvciwgcmFuZ2UpOwomIzQzOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtkbWlycm9yLSZndDttdXRleCk7CiYjNDM7b3V0OgomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGRtaXJyb3JfZmF1bHRfdW5sb2NrZWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsCiYjNDM7CQkJCSAgdW5zaWduZWQgbG9uZyBzdGFydCwKJiM0MzsJCQkJICB1bnNpZ25lZCBsb25nIGVuZCwgYm9vbCB3cml0ZSwKJiM0MzsJCQkJICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGRtaXJyb3ItJmd0O25vdGlmaWVyLm1tOwomIzQzOwl1bnNpZ25lZCBsb25nIGFkZHI7CiYjNDM7CXVuc2lnbmVkIGxvbmcgcGZuc1szMl07CiYjNDM7CXN0cnVjdCBobW1fcmFuZ2UgcmFuZ2UgPSB7CiYjNDM7CQkubm90aWZpZXIgPSAmYW1wO2RtaXJyb3ItJmd0O25vdGlmaWVyLAomIzQzOwkJLmhtbV9wZm5zID0gcGZucywKJiM0MzsJCS5wZm5fZmxhZ3NfbWFzayA9IDAsCiYjNDM7CQkuZGVmYXVsdF9mbGFncyA9CiYjNDM7CQkJSE1NX1BGTl9SRVFfRkFVTFQgfCAod3JpdGUgPyBITU1fUEZOX1JFUV9XUklURSA6IDApLAomIzQzOwkJLmRldl9wcml2YXRlX293bmVyID0gZG1pcnJvci0mZ3Q7bWRldmljZSwKJiM0MzsJfTsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CWlmICghbW1nZXRfbm90X3plcm8obW0pKQomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CiYjNDM7CWZvciAoYWRkciA9IHN0YXJ0OyBhZGRyICZsdDsgZW5kOyBhZGRyID0gcmFuZ2UuZW5kKSB7CiYjNDM7CQlyYW5nZS5zdGFydCA9IGFkZHI7CiYjNDM7CQlyYW5nZS5lbmQgPSBtaW4oYWRkciAmIzQzOyAoQVJSQVlfU0laRShwZm5zKSAmbHQ7Jmx0OyBQQUdFX1NISUZUKSwgZW5kKTsKJiM0MzsKJiM0MzsJCXJldCA9IGRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWQoZG1pcnJvciwgJmFtcDtyYW5nZSwgdGltZW91dCk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWJyZWFrOwomIzQzOwl9CiYjNDM7CiYjNDM7CW1tcHV0KG1tKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGRtaXJyb3JfZmF1bHQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCiAJCQkgdW5zaWduZWQgbG9uZyBlbmQsIGJvb2wgd3JpdGUpCiB7CkBAIC00ODgsNiAmIzQzOzU0OSw0OCBAQCBzdGF0aWMgaW50IGRtaXJyb3JfcmVhZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvciwgc3RydWN0IGhtbV9kbWlycm9yX2NtZCAqY21kKQogCXJldHVybiByZXQ7CiB9CiAKJiM0MztzdGF0aWMgaW50IGRtaXJyb3JfcmVhZF91bmxvY2tlZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvciwKJiM0MzsJCQkJIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQgKmNtZCwKJiM0MzsJCQkJIHVuc2lnbmVkIGxvbmcgdGltZW91dCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkbWlycm9yX2JvdW5jZSBib3VuY2U7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDsKJiM0MzsJdW5zaWduZWQgbG9uZyBzaXplID0gY21kLSZndDtucGFnZXMgJmx0OyZsdDsgUEFHRV9TSElGVDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJc3RhcnQgPSBjbWQtJmd0O2FkZHI7CiYjNDM7CWVuZCA9IHN0YXJ0ICYjNDM7IHNpemU7CiYjNDM7CWlmIChlbmQgJmx0OyBzdGFydCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXQgPSBkbWlycm9yX2JvdW5jZV9pbml0KCZhbXA7Ym91bmNlLCBzdGFydCwgc2l6ZSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwl3aGlsZSAoMSkgewomIzQzOwkJbXV0ZXhfbG9jaygmYW1wO2RtaXJyb3ItJmd0O211dGV4KTsKJiM0MzsJCXJldCA9IGRtaXJyb3JfZG9fcmVhZChkbWlycm9yLCBzdGFydCwgZW5kLCAmYW1wO2JvdW5jZSk7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtkbWlycm9yLSZndDttdXRleCk7CiYjNDM7CQlpZiAocmV0ICE9IC1FTk9FTlQpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQlzdGFydCA9IGNtZC0mZ3Q7YWRkciAmIzQzOyAoYm91bmNlLmNwYWdlcyAmbHQ7Jmx0OyBQQUdFX1NISUZUKTsKJiM0MzsJCXJldCA9IGRtaXJyb3JfZmF1bHRfdW5sb2NrZWQoZG1pcnJvciwgc3RhcnQsIGVuZCwgZmFsc2UsIHRpbWVvdXQpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNtZC0mZ3Q7ZmF1bHRzJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocmV0ID09IDApIHsKJiM0MzsJCWlmIChjb3B5X3RvX3VzZXIodTY0X3RvX3VzZXJfcHRyKGNtZC0mZ3Q7cHRyKSwgYm91bmNlLnB0ciwKJiM0MzsJCQkJIGJvdW5jZS5zaXplKSkKJiM0MzsJCQlyZXQgPSAtRUZBVUxUOwomIzQzOwl9CiYjNDM7CWNtZC0mZ3Q7Y3BhZ2VzID0gYm91bmNlLmNwYWdlczsKJiM0MzsJZG1pcnJvcl9ib3VuY2VfZmluaSgmYW1wO2JvdW5jZSk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBkbWlycm9yX2RvX3dyaXRlKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAogCQkJICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgZG1pcnJvcl9ib3VuY2UgKmJvdW5jZSkKIHsKQEAgLTE1NzIsNyAmIzQzOzE2NzUsOSBAQCBzdGF0aWMgbG9uZyBkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsCiAJCWRtaXJyb3ItJmd0O2ZsYWdzID0gY21kLm5wYWdlczsKIAkJcmV0ID0gMDsKIAkJYnJlYWs7Ci0KJiM0MzsJY2FzZSBITU1fRE1JUlJPUl9SRUFEX1VOTE9DS0VEOgomIzQzOwkJcmV0ID0gZG1pcnJvcl9yZWFkX3VubG9ja2VkKGRtaXJyb3IsICZhbXA7Y21kLCAwKTsKJiM0MzsJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KZGlmZiAtLWdpdCBhL2xpYi90ZXN0X2htbV91YXBpLmggYi9saWIvdGVzdF9obW1fdWFwaS5oCmluZGV4IGY5NGM2ZDQ1NzMzODI4Li5lYTliMGVjNDA0ZmI1NSAxMDA2NDQKLS0tIGEvbGliL3Rlc3RfaG1tX3VhcGkuaAomIzQzOyYjNDM7JiM0MzsgYi9saWIvdGVzdF9obW1fdWFwaS5oCkBAIC0zOCw2ICYjNDM7MzgsNyBAQCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kIHsKICNkZWZpbmUgSE1NX0RNSVJST1JfQ0hFQ0tfRVhDTFVTSVZFCV9JT1dSKCYjMzk7SCYjMzk7LCAweDA2LCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kKQogI2RlZmluZSBITU1fRE1JUlJPUl9SRUxFQVNFCQlfSU9XUigmIzM5O0gmIzM5OywgMHgwNywgc3RydWN0IGhtbV9kbWlycm9yX2NtZCkKICNkZWZpbmUgSE1NX0RNSVJST1JfRkxBR1MJCV9JT1dSKCYjMzk7SCYjMzk7LCAweDA4LCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kKQomIzQzOyNkZWZpbmUgSE1NX0RNSVJST1JfUkVBRF9VTkxPQ0tFRAlfSU9XUigmIzM5O0gmIzM5OywgMHgwOSwgc3RydWN0IGhtbV9kbWlycm9yX2NtZCkKIAogI2RlZmluZSBITU1fRE1JUlJPUl9GTEFHX0ZBSUxfQUxMT0MJKDFVTEwgJmx0OyZsdDsgMCkKIApkaWZmIC0tZ2l0IGEvbW0vaG1tLmMgYi9tbS9obW0uYwppbmRleCBlNWMxZjRkZWVkMjQ0Ny4uZmMyZTFjZDBjYjIyZWIgMTAwNjQ0Ci0tLSBhL21tL2htbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2htbS5jCkBAIC0zMiw5ICYjNDM7MzIsMjcgQEAKIAogc3RydWN0IGhtbV92bWFfd2FsayB7CiAJc3RydWN0IGhtbV9yYW5nZQkqcmFuZ2U7CiYjNDM7CWJvb2wJCQkqbG9ja2VkOwogCXVuc2lnbmVkIGxvbmcJCWxhc3Q7CiYjNDM7CXVuc2lnbmVkIGxvbmcJCWVuZDsKJiM0MzsJdW5zaWduZWQgaW50CQlyZXF1aXJlZF9mYXVsdDsKIH07CiAKJiM0MzsvKgomIzQzOyAqIEludGVybmFsIHNlbnRpbmVsIHJldHVybmVkIGJ5IHdhbGsgY2FsbGJhY2tzIHdoZW4gdGhleSBuZWVkIGEgcGFnZSBmYXVsdC4KJiM0MzsgKiBUaGUgY2FsbGJhY2sgc3RvcmVzIGVuZC9yZXF1aXJlZF9mYXVsdCBpbiBobW1fdm1hX3dhbGs7IHRoZSBvdXRlciBsb29wCiYjNDM7ICogY29uc3VtZXMgdGhlIHNlbnRpbmVsIGFuZCBuZXZlciBwcm9wYWdhdGVzIGl0IHRvIHRoZSBjYWxsZXIuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBITU1fRkFVTFRfUEVORElORwktRUFHQUlOCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBJbnRlcm5hbCBzZW50aW5lbCByZXR1cm5lZCBieSBobW1fZG9fZmF1bHQoKSB3aGVuIGhhbmRsZV9tbV9mYXVsdCgpCiYjNDM7ICogY29tcGxldGVzIGEgcGFnZSBmYXVsdCB3aXRoIHRoZSBtbWFwIGxvY2sgZHJvcHBlZC4gaG1tX2RvX2ZhdWx0KCkgc2V0cwomIzQzOyAqICpsb2NrZWQgPSBmYWxzZTsgdGhlIG91dGVyIGxvb3AgY29uc3VtZXMgdGhlIHNlbnRpbmVsIGFuZCBuZXZlciBwcm9wYWdhdGVzCiYjNDM7ICogaXQgdG8gdGhlIGNhbGxlci4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIEhNTV9GQVVMVF9VTkxPQ0tFRAktRU5PTENLCiYjNDM7CiBlbnVtIHsKIAlITU1fTkVFRF9GQVVMVCA9IDEgJmx0OyZsdDsgMCwKIAlITU1fTkVFRF9XUklURV9GQVVMVCA9IDEgJmx0OyZsdDsgMSwKQEAgLTYwLDM3ICYjNDM7NzgsMjUgQEAgc3RhdGljIGludCBobW1fcGZuc19maWxsKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCiB9CiAKIC8qCi0gKiBobW1fdm1hX2ZhdWx0KCkgLSBmYXVsdCBpbiBhIHJhbmdlIGxhY2tpbmcgdmFsaWQgcG1kIG9yIHB0ZShzKQotICogQGFkZHI6IHJhbmdlIHZpcnR1YWwgc3RhcnQgYWRkcmVzcyAoaW5jbHVzaXZlKQotICogQGVuZDogcmFuZ2UgdmlydHVhbCBlbmQgYWRkcmVzcyAoZXhjbHVzaXZlKQotICogQHJlcXVpcmVkX2ZhdWx0OiBITU1fTkVFRF8qIGZsYWdzCi0gKiBAd2FsazogbW1fd2FsayBzdHJ1Y3R1cmUKLSAqIFJldHVybjogLUVCVVNZIGFmdGVyIHBhZ2UgZmF1bHQsIG9yIHBhZ2UgZmF1bHQgZXJyb3IKJiM0MzsgKiBobW1fcmVjb3JkX2ZhdWx0KCkgLSByZWNvcmQgYSByYW5nZSB0aGF0IG5lZWRzIHRvIGJlIGZhdWx0ZWQgaW4KICAqCi0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIHBtZF9ub25lKCkgb3IgcHRlX25vbmUoKSByZXR1cm5zIHRydWUsCi0gKiBvciB3aGVuZXZlciB0aGVyZSBpcyBubyBwYWdlIGRpcmVjdG9yeSBjb3ZlcmluZyB0aGUgdmlydHVhbCBhZGRyZXNzIHJhbmdlLgomIzQzOyAqIENhbGxlZCBieSB0aGUgd2FsayBjYWxsYmFja3Mgd2hlbiB0aGV5IGRpc2NvdmVyIHRoYXQgcGFydCBvZiB0aGUgcmFuZ2UKJiM0MzsgKiBuZWVkcyBhIHBhZ2UgZmF1bHQuICBUaGUgY2FsbGJhY2sgcmVjb3JkcyB3aGF0IHRvIGZhdWx0IGFuZCByZXR1cm5zCiYjNDM7ICogSE1NX0ZBVUxUX1BFTkRJTkc7IHRoZSBvdXRlciBsb29wIGluIGhtbV9yYW5nZV9mYXVsdF9sb2NrZWQoKSBkcm9wcwomIzQzOyAqIGJhY2sgb3V0IG9mIHdhbGtfcGFnZV9yYW5nZSgpIGFuZCBpbnZva2VzIGhhbmRsZV9tbV9mYXVsdCgpIGZyb20gYSBjb250ZXh0CiYjNDM7ICogd2hlcmUgbm8gcGFnZS10YWJsZSBvciBodWdldGxiX3ZtYV9sb2NrIGlzIGhlbGQuCiAgKi8KLXN0YXRpYyBpbnQgaG1tX3ZtYV9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAotCQkJIHVuc2lnbmVkIGludCByZXF1aXJlZF9mYXVsdCwgc3RydWN0IG1tX3dhbGsgKndhbGspCiYjNDM7c3RhdGljIGludCBobW1fcmVjb3JkX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCiYjNDM7CQkJICAgIHVuc2lnbmVkIGludCByZXF1aXJlZF9mYXVsdCwKJiM0MzsJCQkgICAgc3RydWN0IG1tX3dhbGsgKndhbGspCiB7CiAJc3RydWN0IGhtbV92bWFfd2FsayAqaG1tX3ZtYV93YWxrID0gd2Fsay0mZ3Q7cHJpdmF0ZTsKLQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstJmd0O3ZtYTsKLQl1bnNpZ25lZCBpbnQgZmF1bHRfZmxhZ3MgPSBGQVVMVF9GTEFHX1JFTU9URTsKIAogCVdBUk5fT05fT05DRSghcmVxdWlyZWRfZmF1bHQpOwogCWhtbV92bWFfd2Fsay0mZ3Q7bGFzdCA9IGFkZHI7Ci0KLQlpZiAocmVxdWlyZWRfZmF1bHQgJmFtcDsgSE1NX05FRURfV1JJVEVfRkFVTFQpIHsKLQkJaWYgKCEodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9XUklURSkpCi0JCQlyZXR1cm4gLUVQRVJNOwotCQlmYXVsdF9mbGFncyB8PSBGQVVMVF9GTEFHX1dSSVRFOwotCX0KLQotCWZvciAoOyBhZGRyICZsdDsgZW5kOyBhZGRyICYjNDM7PSBQQUdFX1NJWkUpCi0JCWlmIChoYW5kbGVfbW1fZmF1bHQodm1hLCBhZGRyLCBmYXVsdF9mbGFncywgTlVMTCkgJmFtcDsKLQkJICAgIFZNX0ZBVUxUX0VSUk9SKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JcmV0dXJuIC1FQlVTWTsKJiM0MzsJaG1tX3ZtYV93YWxrLSZndDtlbmQgPSBlbmQ7CiYjNDM7CWhtbV92bWFfd2Fsay0mZ3Q7cmVxdWlyZWRfZmF1bHQgPSByZXF1aXJlZF9mYXVsdDsKJiM0MzsJcmV0dXJuIEhNTV9GQVVMVF9QRU5ESU5HOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IGhtbV9wdGVfbmVlZF9mYXVsdChjb25zdCBzdHJ1Y3QgaG1tX3ZtYV93YWxrICpobW1fdm1hX3dhbGssCkBAIC0xNzQsNyAmIzQzOzE4MCw3IEBAIHN0YXRpYyBpbnQgaG1tX3ZtYV93YWxrX2hvbGUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJcmV0dXJuIGhtbV9wZm5zX2ZpbGwoYWRkciwgZW5kLCByYW5nZSwgSE1NX1BGTl9FUlJPUik7CiAJfQogCWlmIChyZXF1aXJlZF9mYXVsdCkKLQkJcmV0dXJuIGhtbV92bWFfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7CiYjNDM7CQlyZXR1cm4gaG1tX3JlY29yZF9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTsKIAlyZXR1cm4gaG1tX3BmbnNfZmlsbChhZGRyLCBlbmQsIHJhbmdlLCAwKTsKIH0KIApAQCAtMjA5LDcgJiM0MzsyMTUsNyBAQCBzdGF0aWMgaW50IGhtbV92bWFfaGFuZGxlX3BtZChzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBhZGRyLAogCXJlcXVpcmVkX2ZhdWx0ID0KIAkJaG1tX3JhbmdlX25lZWRfZmF1bHQoaG1tX3ZtYV93YWxrLCBobW1fcGZucywgbnBhZ2VzLCBjcHVfZmxhZ3MpOwogCWlmIChyZXF1aXJlZF9mYXVsdCkKLQkJcmV0dXJuIGhtbV92bWFfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7CiYjNDM7CQlyZXR1cm4gaG1tX3JlY29yZF9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTsKIAogCXBmbiA9IHBtZF9wZm4ocG1kKSAmIzQzOyAoKGFkZHIgJmFtcDsgflBNRF9NQVNLKSAmZ3Q7Jmd0OyBQQUdFX1NISUZUKTsKIAlmb3IgKGkgPSAwOyBhZGRyICZsdDsgZW5kOyBhZGRyICYjNDM7PSBQQUdFX1NJWkUsIGkmIzQzOyYjNDM7LCBwZm4mIzQzOyYjNDM7KSB7CkBAIC0zMjgsNyAmIzQzOzMzNCw3IEBAIHN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfcHRlKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIGFkZHIsCiBmYXVsdDoKIAlwdGVfdW5tYXAocHRlcCk7CiAJLyogRmF1bHQgYW55IHZpcnR1YWwgYWRkcmVzcyB3ZSB3ZXJlIGFza2VkIHRvIGZhdWx0ICovCi0JcmV0dXJuIGhtbV92bWFfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7CiYjNDM7CXJldHVybiBobW1fcmVjb3JkX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspOwogfQogCiAjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTCkBAIC0zNzEsNyAmIzQzOzM3Nyw3IEBAIHN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfYWJzZW50X3BtZChzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBzdGFydCwKIAkJCQkJICAgICAgbnBhZ2VzLCAwKTsKIAlpZiAocmVxdWlyZWRfZmF1bHQpIHsKIAkJaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkKLQkJCXJldHVybiBobW1fdm1hX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspOwomIzQzOwkJCXJldHVybiBobW1fcmVjb3JkX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspOwogCQllbHNlCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAl9CkBAIC01MTcsNyAmIzQzOzUyMyw3IEBAIHN0YXRpYyBpbnQgaG1tX3ZtYV93YWxrX3B1ZChwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCQkJCQkgICAgICBucGFnZXMsIGNwdV9mbGFncyk7CiAJCWlmIChyZXF1aXJlZF9mYXVsdCkgewogCQkJc3Bpbl91bmxvY2socHRsKTsKLQkJCXJldHVybiBobW1fdm1hX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspOwomIzQzOwkJCXJldHVybiBobW1fcmVjb3JkX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspOwogCQl9CiAKIAkJcGZuID0gcHVkX3BmbihwdWQpICYjNDM7ICgoYWRkciAmYW1wOyB+UFVEX01BU0spICZndDsmZ3Q7IFBBR0VfU0hJRlQpOwpAQCAtNTY0LDIxICYjNDM7NTcwLDggQEAgc3RhdGljIGludCBobW1fdm1hX3dhbGtfaHVnZXRsYl9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLAogCXJlcXVpcmVkX2ZhdWx0ID0KIAkJaG1tX3B0ZV9uZWVkX2ZhdWx0KGhtbV92bWFfd2FsaywgcGZuX3JlcV9mbGFncywgY3B1X2ZsYWdzKTsKIAlpZiAocmVxdWlyZWRfZmF1bHQpIHsKLQkJaW50IHJldDsKLQogCQlzcGluX3VubG9jayhwdGwpOwotCQlodWdldGxiX3ZtYV91bmxvY2tfcmVhZCh2bWEpOwotCQkvKgotCQkgKiBBdm9pZCBkZWFkbG9jazogZHJvcCB0aGUgdm1hIGxvY2sgYmVmb3JlIGNhbGxpbmcKLQkJICogaG1tX3ZtYV9mYXVsdCgpLCB3aGljaCB3aWxsIGl0c2VsZiBwb3RlbnRpYWxseSB0YWtlIGFuZAotCQkgKiBkcm9wIHRoZSB2bWEgbG9jay4gVGhpcyBpcyBhbHNvIGNvcnJlY3QgZnJvbSBhCi0JCSAqIHByb3RlY3Rpb24gcG9pbnQgb2YgdmlldywgYmVjYXVzZSB0aGVyZSBpcyBubyBmdXJ0aGVyCi0JCSAqIHVzZSBoZXJlIG9mIGVpdGhlciBwdGUgb3IgcHRsIGFmdGVyIGRyb3BwaW5nIHRoZSB2bWEKLQkJICogbG9jay4KLQkJICovCi0JCXJldCA9IGhtbV92bWFfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7Ci0JCWh1Z2V0bGJfdm1hX2xvY2tfcmVhZCh2bWEpOwotCQlyZXR1cm4gcmV0OwomIzQzOwkJcmV0dXJuIGhtbV9yZWNvcmRfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7CiAJfQogCiAJcGZuID0gcHRlX3BmbihlbnRyeSkgJiM0MzsgKChzdGFydCAmYW1wOyB+aG1hc2spICZndDsmZ3Q7IFBBR0VfU0hJRlQpOwpAQCAtNjM3LDI5ICYjNDM7NjMwLDY3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgaG1tX3dhbGtfb3BzID0gewogCS53YWxrX2xvY2sJPSBQR1dBTEtfUkRMT0NLLAogfTsKIAotLyoqCi0gKiBobW1fcmFuZ2VfZmF1bHQgLSB0cnkgdG8gZmF1bHQgc29tZSBhZGRyZXNzIGluIGEgdmlydHVhbCBhZGRyZXNzIHJhbmdlCi0gKiBAcmFuZ2U6CWFyZ3VtZW50IHN0cnVjdHVyZQotICoKLSAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIGVycm9yIGNvZGVzOgomIzQzOy8qCiYjNDM7ICogaG1tX2RvX2ZhdWx0IC0gZmF1bHQgaW4gYSByYW5nZSByZWNvcmRlZCBieSBhIHdhbGsgY2FsbGJhY2sKICAqCi0gKiAtRUlOVkFMOglJbnZhbGlkIGFyZ3VtZW50cyBvciBtbSBvciB2aXJ0dWFsIGFkZHJlc3MgaXMgaW4gYW4gaW52YWxpZCB2bWEKLSAqCQkoZS5nLiwgZGV2aWNlIGZpbGUgdm1hKS4KLSAqIC1FTk9NRU06CU91dCBvZiBtZW1vcnkuCi0gKiAtRVBFUk06CUludmFsaWQgcGVybWlzc2lvbiAoZS5nLiwgYXNraW5nIGZvciB3cml0ZSBhbmQgcmFuZ2UgaXMgcmVhZAotICoJCW9ubHkpLgotICogLUVCVVNZOglUaGUgcmFuZ2UgaGFzIGJlZW4gaW52YWxpZGF0ZWQgYW5kIHRoZSBjYWxsZXIgbmVlZHMgdG8gd2FpdCBmb3IKLSAqCQl0aGUgaW52YWxpZGF0aW9uIHRvIGZpbmlzaC4KLSAqIC1FRkFVTFQ6ICAgICBBIHBhZ2Ugd2FzIHJlcXVlc3RlZCB0byBiZSB2YWxpZCBhbmQgY291bGQgbm90IGJlIG1hZGUgdmFsaWQKLSAqICAgICAgICAgICAgICBpZSBpdCBoYXMgbm8gYmFja2luZyBWTUEgb3IgaXQgaXMgaWxsZWdhbCB0byBhY2Nlc3MKJiM0MzsgKiBDYWxsZWQgZnJvbSB0aGUgb3V0ZXIgbG9vcCBpbiBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkKCkgYWZ0ZXIgYSBjYWxsYmFjawomIzQzOyAqIHJldHVybmVkIEhNTV9GQVVMVF9QRU5ESU5HLiAgQXQgdGhpcyBwb2ludCB3ZSBob2xkIG9ubHkgbW1hcF9sb2NrOwomIzQzOyAqIHRoZSBwYWdlLXRhYmxlIHNwaW5sb2NrIGFuZCBhbnkgaHVnZXRsYl92bWFfbG9jayBhY3F1aXJlZCBieSB0aGUgd2FsawomIzQzOyAqIGZyYW1ld29yayBoYXZlIGFscmVhZHkgYmVlbiByZWxlYXNlZCBieSB0aGUgdW53aW5kLgogICoKLSAqIFRoaXMgaXMgc2ltaWxhciB0byBnZXRfdXNlcl9wYWdlcygpLCBleGNlcHQgdGhhdCBpdCBjYW4gcmVhZCB0aGUgcGFnZSB0YWJsZXMKLSAqIHdpdGhvdXQgbXV0YXRpbmcgdGhlbSAoaWUgY2F1c2luZyBmYXVsdHMpLgomIzQzOyAqIFJldHVybnMgLUVCVVNZIG9uIHN1Y2Nlc3MgKGFsbCBwYWdlcyBmYXVsdGVkLCBjYWxsZXIgc2hvdWxkIHJlLXdhbGspLgomIzQzOyAqIFJldHVybnMgYSBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLgogICovCi1pbnQgaG1tX3JhbmdlX2ZhdWx0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKQomIzQzO3N0YXRpYyBpbnQgaG1tX2RvX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAomIzQzOwkJCXN0cnVjdCBobW1fdm1hX3dhbGsgKmhtbV92bWFfd2FsaykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgYWRkciA9IGhtbV92bWFfd2Fsay0mZ3Q7bGFzdDsKJiM0MzsJdW5zaWduZWQgbG9uZyBlbmQgPSBobW1fdm1hX3dhbGstJmd0O2VuZDsKJiM0MzsJdW5zaWduZWQgaW50IHJlcXVpcmVkX2ZhdWx0ID0gaG1tX3ZtYV93YWxrLSZndDtyZXF1aXJlZF9mYXVsdDsKJiM0MzsJdW5zaWduZWQgaW50IGZhdWx0X2ZsYWdzID0gRkFVTFRfRkxBR19SRU1PVEU7CiYjNDM7CXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwomIzQzOwomIzQzOwlpZiAoaG1tX3ZtYV93YWxrLSZndDtsb2NrZWQpCiYjNDM7CQlmYXVsdF9mbGFncyB8PSBGQVVMVF9GTEFHX0FMTE9XX1JFVFJZIHwgRkFVTFRfRkxBR19LSUxMQUJMRTsKJiM0MzsKJiM0MzsJdm1hID0gdm1hX2xvb2t1cChtbSwgYWRkcik7CiYjNDM7CWlmICghdm1hKQomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CiYjNDM7CWlmIChyZXF1aXJlZF9mYXVsdCAmYW1wOyBITU1fTkVFRF9XUklURV9GQVVMVCkgewomIzQzOwkJaWYgKCEodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9XUklURSkpCiYjNDM7CQkJcmV0dXJuIC1FUEVSTTsKJiM0MzsJCWZhdWx0X2ZsYWdzIHw9IEZBVUxUX0ZMQUdfV1JJVEU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZm9yICg7IGFkZHIgJmx0OyBlbmQ7IGFkZHIgJiM0Mzs9IFBBR0VfU0laRSkgewomIzQzOwkJdm1fZmF1bHRfdCByZXQ7CiYjNDM7CiYjNDM7CQlyZXQgPSBoYW5kbGVfbW1fZmF1bHQodm1hLCBhZGRyLCBmYXVsdF9mbGFncywgTlVMTCk7CiYjNDM7CiYjNDM7CQlpZiAocmV0ICZhbXA7IChWTV9GQVVMVF9DT01QTEVURUQgfCBWTV9GQVVMVF9SRVRSWSkpIHsKJiM0MzsJCQkqaG1tX3ZtYV93YWxrLSZndDtsb2NrZWQgPSBmYWxzZTsKJiM0MzsJCQlyZXR1cm4gSE1NX0ZBVUxUX1VOTE9DS0VEOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKHJldCAmYW1wOyBWTV9GQVVMVF9FUlJPUikgewomIzQzOwkJCWludCBlcnIgPSB2bV9mYXVsdF90b19lcnJubyhyZXQsIDApOwomIzQzOwomIzQzOwkJCWlmIChXQVJOX09OKCFlcnIpKQomIzQzOwkJCQllcnIgPSAtRUlOVkFMOwomIzQzOwomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIC1FQlVTWTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkKHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlLCBib29sICpsb2NrZWQpCiB7CiAJc3RydWN0IGhtbV92bWFfd2FsayBobW1fdm1hX3dhbGsgPSB7CiAJCS5yYW5nZSA9IHJhbmdlLAomIzQzOwkJLmxvY2tlZCA9IGxvY2tlZCwKIAkJLmxhc3QgPSByYW5nZS0mZ3Q7c3RhcnQsCiAJfTsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHJhbmdlLSZndDtub3RpZmllci0mZ3Q7bW07CkBAIC02NzQsNiAmIzQzOzcwNSwyMiBAQCBpbnQgaG1tX3JhbmdlX2ZhdWx0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKQogCQkJcmV0dXJuIC1FQlVTWTsKIAkJcmV0ID0gd2Fsa19wYWdlX3JhbmdlKG1tLCBobW1fdm1hX3dhbGsubGFzdCwgcmFuZ2UtJmd0O2VuZCwKIAkJCQkgICAgICAmYW1wO2htbV93YWxrX29wcywgJmFtcDtobW1fdm1hX3dhbGspOwomIzQzOwkJLyoKJiM0MzsJCSAqIFdoZW4gSE1NX0ZBVUxUX1BFTkRJTkcgaXMgcmV0dXJuZWQgYSB3YWxrIGNhbGxiYWNrCiYjNDM7CQkgKiByZWNvcmRlZCBhIHJhbmdlIHRoYXQgbmVlZHMgaGFuZGxlX21tX2ZhdWx0KCk7CiYjNDM7CQkgKiBobW1fZG9fZmF1bHQoKSBydW5zIHRoZSBmYXVsdCBvdXRzaWRlIHdhbGtfcGFnZV9yYW5nZSgpCiYjNDM7CQkgKiAoc28gbm8gcGFnZS10YWJsZSBvciBodWdldGxiX3ZtYV9sb2NrIGlzIGhlbGQpIGFuZAomIzQzOwkJICogcmV0dXJucyAtRUJVU1kgc28gdGhlIGxvb3AgcmUtd2Fsa3MgYW5kIHBpY2tzIHVwIHRoZQomIzQzOwkJICogbm93LXByZXNlbnQgZW50cmllcy4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHJldCA9PSBITU1fRkFVTFRfUEVORElORykgewomIzQzOwkJCXJldCA9IGhtbV9kb19mYXVsdChtbSwgJmFtcDtobW1fdm1hX3dhbGspOwomIzQzOwkJCWlmIChyZXQgPT0gSE1NX0ZBVUxUX1VOTE9DS0VEKSB7CiYjNDM7CQkJCWlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkKJiM0MzsJCQkJCXJldHVybiAtRUlOVFI7CiYjNDM7CQkJCXJldHVybiAtRUJVU1k7CiYjNDM7CQkJfQomIzQzOwkJfQogCQkvKgogCQkgKiBXaGVuIC1FQlVTWSBpcyByZXR1cm5lZCB0aGUgbG9vcCByZXN0YXJ0cyB3aXRoCiAJCSAqIGhtbV92bWFfd2Fsay5sYXN0IHNldCB0byBhbiBhZGRyZXNzIHRoYXQgaGFzIG5vdCBiZWVuIHN0b3JlZApAQCAtNjgzLDggJiM0Mzs3MzAsMTAwIEBAIGludCBobW1fcmFuZ2VfZmF1bHQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpCiAJfSB3aGlsZSAocmV0ID09IC1FQlVTWSk7CiAJcmV0dXJuIHJldDsKIH0KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBobW1fcmFuZ2VfZmF1bHQgLSB0cnkgdG8gZmF1bHQgc29tZSBhZGRyZXNzIGluIGEgdmlydHVhbCBhZGRyZXNzIHJhbmdlCiYjNDM7ICogQHJhbmdlOglhcmd1bWVudCBzdHJ1Y3R1cmUKJiM0MzsgKgomIzQzOyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIGVycm9yIGNvZGVzOgomIzQzOyAqCiYjNDM7ICogLUVJTlZBTDoJSW52YWxpZCBhcmd1bWVudHMgb3IgbW0gb3IgdmlydHVhbCBhZGRyZXNzIGlzIGluIGFuIGludmFsaWQgdm1hCiYjNDM7ICoJCShlLmcuLCBkZXZpY2UgZmlsZSB2bWEpLgomIzQzOyAqIC1FTk9NRU06CU91dCBvZiBtZW1vcnkuCiYjNDM7ICogLUVQRVJNOglJbnZhbGlkIHBlcm1pc3Npb24gKGUuZy4sIGFza2luZyBmb3Igd3JpdGUgYW5kIHJhbmdlIGlzIHJlYWQKJiM0MzsgKgkJb25seSkuCiYjNDM7ICogLUVCVVNZOglUaGUgcmFuZ2UgaGFzIGJlZW4gaW52YWxpZGF0ZWQgYW5kIHRoZSBjYWxsZXIgbmVlZHMgdG8gd2FpdCBmb3IKJiM0MzsgKgkJdGhlIGludmFsaWRhdGlvbiB0byBmaW5pc2guCiYjNDM7ICogLUVGQVVMVDogICAgIEEgcGFnZSB3YXMgcmVxdWVzdGVkIHRvIGJlIHZhbGlkIGFuZCBjb3VsZCBub3QgYmUgbWFkZSB2YWxpZAomIzQzOyAqICAgICAgICAgICAgICBpZSBpdCBoYXMgbm8gYmFja2luZyBWTUEgb3IgaXQgaXMgaWxsZWdhbCB0byBhY2Nlc3MKJiM0MzsgKgomIzQzOyAqIFRoaXMgaXMgc2ltaWxhciB0byBnZXRfdXNlcl9wYWdlcygpLCBleGNlcHQgdGhhdCBpdCBjYW4gcmVhZCB0aGUgcGFnZSB0YWJsZXMKJiM0MzsgKiB3aXRob3V0IG11dGF0aW5nIHRoZW0gKGllIGNhdXNpbmcgZmF1bHRzKS4KJiM0MzsgKgomIzQzOyAqIFRoZSBtbWFwIGxvY2sgbXVzdCBiZSBoZWxkIGJ5IHRoZSBjYWxsZXIgYW5kIHdpbGwgcmVtYWluIGhlbGQgb24gcmV0dXJuLgomIzQzOyAqIE5ldyB1c2VycyBzaG91bGQgcHJlZmVyIGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KCkgdW5sZXNzIHRoZXkKJiM0MzsgKiBzcGVjaWZpY2FsbHkgbmVlZCB0byBrZWVwIHRoZSBtbWFwIGxvY2sgaGVsZCBhY3Jvc3MgdGhlIGNhbGwuIFRoaXMgaGVscGVyCiYjNDM7ICogY2Fubm90IHN1cHBvcnQgVk1BcyB3aG9zZSBmYXVsdCBoYW5kbGVycyBuZWVkIHRvIGRyb3AgdGhlIG1tYXAgbG9jay4KJiM0MzsgKi8KJiM0MztpbnQgaG1tX3JhbmdlX2ZhdWx0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKQomIzQzO3sKJiM0MzsJcmV0dXJuIGhtbV9yYW5nZV9mYXVsdF9sb2NrZWQocmFuZ2UsIE5VTEwpOwomIzQzO30KIEVYUE9SVF9TWU1CT0woaG1tX3JhbmdlX2ZhdWx0KTsKIAomIzQzOy8qKgomIzQzOyAqIGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0IC0gZmF1bHQgaW4gYSByYW5nZSB3aXRoIGEgcmV0cnkgdGltZW91dAomIzQzOyAqIEByYW5nZToJYXJndW1lbnQgc3RydWN0dXJlCiYjNDM7ICogQHRpbWVvdXQ6CXRpbWVvdXQgaW4gamlmZmllcyBmb3IgaW50ZXJuYWwgLUVCVVNZIHJldHJpZXMsIG9yIDAgdG8gcmV0cnkKJiM0MzsgKgkJaW5kZWZpbml0ZWx5CiYjNDM7ICoKJiM0MzsgKiBUaGUgY2FsbGVyIG11c3Qgbm90IGhvbGQgdGhlIG1tYXAgbG9jay4gVGhlIGZ1bmN0aW9uIHRha2VzIHRoZSBtbWFwIHJlYWQKJiM0MzsgKiBsb2NrIGludGVybmFsbHkgYW5kIGFsbG93cyBoYW5kbGVfbW1fZmF1bHQoKSB0byBkcm9wIGl0IGR1cmluZyBmYXVsdHMuIElmCiYjNDM7ICogdGhlIG1tYXAgbG9jayBpcyBkcm9wcGVkIG9yIHRoZSByYW5nZSBpcyBpbnZhbGlkYXRlZCwgdGhlIGZ1bmN0aW9uIHJlZnJlc2hlcwomIzQzOyAqIHJhbmdlLSZndDtub3RpZmllcl9zZXEgYW5kIHJlc3RhcnRzIHRoZSB3YWxrIGludGVybmFsbHkuCiYjNDM7ICoKJiM0MzsgKiBQYXNzaW5nIDAgZm9yIEB0aW1lb3V0IHJldHJpZXMgaW5kZWZpbml0ZWx5LiBBIG5vbi16ZXJvIEB0aW1lb3V0IGlzIGEgY2FsbGVyCiYjNDM7ICogcG9saWN5IGxpbWl0IGZvciByZXBlYXRlZCBtbXUtbm90aWZpZXIgaW52YWxpZGF0aW9uIHJldHJpZXMuIEhNTSBkb2VzIG5vdAomIzQzOyAqIGludGVycnVwdCBwYWdlIGZhdWx0IGhhbmRsaW5nIHdoZW4gdGhlIHRpbWVvdXQgZXhwaXJlcywgYnV0IHJldHVybnMgLUVCVVNZCiYjNDM7ICogaWYgdGhlIHJldHJ5IGJ1ZGdldCBpcyBleGhhdXN0ZWQgYmVmb3JlIGEgc3RhYmxlIHJhbmdlIGlzIG9idGFpbmVkLgomIzQzOyAqCiYjNDM7ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3Igb25lIG9mIHRoZSBlcnJvciBjb2RlcyBkb2N1bWVudGVkIGZvcgomIzQzOyAqIGhtbV9yYW5nZV9mYXVsdCgpLiAtRUlOVFIgaXMgcmV0dXJuZWQgaWYgbW1hcF9sb2NrIGFjcXVpc2l0aW9uIGlzCiYjNDM7ICogaW50ZXJydXB0ZWQgb3IgYSBmYXRhbCBzaWduYWwgaXMgcGVuZGluZyBkdXJpbmcgcmV0cnkgaGFuZGxpbmcuCiYjNDM7ICovCiYjNDM7aW50IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlLAomIzQzOwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gcmFuZ2UtJmd0O25vdGlmaWVyLSZndDttbTsKJiM0MzsJdW5zaWduZWQgbG9uZyBkZWFkbGluZSA9IDA7CiYjNDM7CWJvb2wgbG9ja2VkID0gZmFsc2U7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCWlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkKJiM0MzsJCQlyZXR1cm4gLUVJTlRSOwomIzQzOwomIzQzOwkJaWYgKHRpbWVvdXQpIHsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIElmIHRoZSBwcmV2aW91cyBmYXVsdCBkcm9wcGVkIG1tYXBfbG9jaywgdGhlbiB0aGUgZmF1bHQKJiM0MzsJCQkgKiBoYW5kbGVyIG1hZGUgcHJvZ3Jlc3MuIFJlc3RhcnQgdGhlIHJldHJ5IHRpbWVvdXQgaW4gdGhhdAomIzQzOwkJCSAqIGNhc2UsIGJ1dCBrZWVwIHRoZSBleGlzdGluZyBkZWFkbGluZSBmb3Igb3JkaW5hcnkgLUVCVVNZCiYjNDM7CQkJICogcmV0cmllcy4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAoIWxvY2tlZCkKJiM0MzsJCQkJZGVhZGxpbmUgPSBqaWZmaWVzICYjNDM7IHRpbWVvdXQ7CiYjNDM7CiYjNDM7CQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZGVhZGxpbmUpKQomIzQzOwkJCQlyZXR1cm4gLUVCVVNZOwomIzQzOwkJfQomIzQzOwomIzQzOwkJcmFuZ2UtJmd0O25vdGlmaWVyX3NlcSA9CiYjNDM7CQkJbW11X2ludGVydmFsX3JlYWRfYmVnaW4ocmFuZ2UtJmd0O25vdGlmaWVyKTsKJiM0MzsKJiM0MzsJCXJldCA9IG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKG1tKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCWxvY2tlZCA9IHRydWU7CiYjNDM7CQlyZXQgPSBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkKHJhbmdlLCAmYW1wO2xvY2tlZCk7CiYjNDM7CQlpZiAobG9ja2VkKQomIzQzOwkJCW1tYXBfcmVhZF91bmxvY2sobW0pOwomIzQzOwl9IHdoaWxlIChyZXQgPT0gLUVCVVNZKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTChobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCk7CiYjNDM7CiAvKioKICAqIGhtbV9kbWFfbWFwX2FsbG9jIC0gQWxsb2NhdGUgSE1NIG1hcCBzdHJ1Y3R1cmUKICAqIEBkZXY6IGRldmljZSB0byBhbGxvY2F0ZSBzdHJ1Y3R1cmUgZm9yCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jCmluZGV4IDZmY2NiZGFiMDJlZTgxLi41YWNiNzI4NjY2ZjhjMSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMKQEAgLTI5LDYgJiM0MzsyOSwxMCBAQAogI2luY2x1ZGUgJmx0O3N5cy9tbWFuLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3lzL2lvY3RsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3lzL3RpbWUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3N5c2NhbGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL2V2ZW50ZmQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdXNlcmZhdWx0ZmQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7cG9sbC5oJmd0OwogCiAvKgogICogVGhpcyBpcyBhIHByaXZhdGUgVUFQSSB0byB0aGUga2VybmVsIHRlc3QgbW9kdWxlIHNvIGl0IGlzbiYjMzk7dCBleHBvcnRlZApAQCAtMjk1Miw0ICYjNDM7Mjk1NiwxNTAgQEAgVEVTVF9GX1RJTUVPVVQoaG1tLCBiZW5jaG1hcmtfdGhwX21pZ3JhdGlvbiwgMTIwKQogCQkJCQkmYW1wO3RocF9yZXN1bHRzLCAmYW1wO3JlZ3VsYXJfcmVzdWx0cyk7CiAJfQogfQomIzQzOy8qCiYjNDM7ICogVGVzdCB0aGF0IEhNTSBjYW4gZmF1bHQgaW4gcGFnZXMgYmFja2VkIGJ5IHVzZXJmYXVsdGZkIHVzaW5nIHRoZQomIzQzOyAqIGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KCkgcGF0aCB3aXRoIG5vIHRpbWVvdXQuIFRoaXMgZXhlcmNpc2VzCiYjNDM7ICogdGhlIGxvY2stZHJvcCByZXRyeSBsb2dpYyBpbiB0aGUgSE1NIGZyYW1ld29yay4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgdWZmZF90aHJlYWRfYXJncyB7CiYjNDM7CWludCB1ZmZkOwomIzQzOwlpbnQgc3RvcF9mZDsKJiM0MzsJdm9pZCAqcGFnZV9idWZmZXI7CiYjNDM7CXVuc2lnbmVkIGxvbmcgcGFnZV9zaXplOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgKnVmZmRfaGFuZGxlcl90aHJlYWQodm9pZCAqYXJnKQomIzQzO3sKJiM0MzsJc3RydWN0IHVmZmRfdGhyZWFkX2FyZ3MgKmFyZ3MgPSBhcmc7CiYjNDM7CXN0cnVjdCB1ZmZkX21zZyBtc2c7CiYjNDM7CXN0cnVjdCB1ZmZkaW9fY29weSBjb3B5OwomIzQzOwlzdHJ1Y3QgcG9sbGZkIHBvbGxmZFsyXTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcG9sbGZkWzBdLmZkID0gYXJncy0mZ3Q7dWZmZDsKJiM0MzsJcG9sbGZkWzBdLmV2ZW50cyA9IFBPTExJTjsKJiM0MzsJcG9sbGZkWzFdLmZkID0gYXJncy0mZ3Q7c3RvcF9mZDsKJiM0MzsJcG9sbGZkWzFdLmV2ZW50cyA9IFBPTExJTjsKJiM0MzsKJiM0MzsJd2hpbGUgKDEpIHsKJiM0MzsJCXJldCA9IHBvbGwocG9sbGZkLCAyLCAtMSk7CiYjNDM7CQlpZiAocmV0ICZsdDs9IDApCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlpZiAocG9sbGZkWzFdLnJldmVudHMpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlpZiAoIShwb2xsZmRbMF0ucmV2ZW50cyAmYW1wOyBQT0xMSU4pKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJcmV0ID0gcmVhZChhcmdzLSZndDt1ZmZkLCAmYW1wO21zZywgc2l6ZW9mKG1zZykpOwomIzQzOwkJaWYgKHJldCAhPSBzaXplb2YobXNnKSkKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCWlmIChtc2cuZXZlbnQgIT0gVUZGRF9FVkVOVF9QQUdFRkFVTFQpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQkvKiBGaWxsIHRoZSBwYWdlIHdpdGggYSBrbm93biBwYXR0ZXJuICovCiYjNDM7CQltZW1zZXQoYXJncy0mZ3Q7cGFnZV9idWZmZXIsIDB4QUIsIGFyZ3MtJmd0O3BhZ2Vfc2l6ZSk7CiYjNDM7CiYjNDM7CQljb3B5LmRzdCA9IG1zZy5hcmcucGFnZWZhdWx0LmFkZHJlc3MgJmFtcDsgfihhcmdzLSZndDtwYWdlX3NpemUgLSAxKTsKJiM0MzsJCWNvcHkuc3JjID0gKHVuc2lnbmVkIGxvbmcpYXJncy0mZ3Q7cGFnZV9idWZmZXI7CiYjNDM7CQljb3B5LmxlbiA9IGFyZ3MtJmd0O3BhZ2Vfc2l6ZTsKJiM0MzsJCWNvcHkubW9kZSA9IDA7CiYjNDM7CQljb3B5LmNvcHkgPSAwOwomIzQzOwomIzQzOwkJcmV0ID0gaW9jdGwoYXJncy0mZ3Q7dWZmZCwgVUZGRElPX0NPUFksICZhbXA7Y29weSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9GKGhtbSwgdXNlcmZhdWx0ZmRfcmVhZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBobW1fYnVmZmVyICpidWZmZXI7CiYjNDM7CXN0cnVjdCB1ZmZkX3RocmVhZF9hcmdzIHVmZmRfYXJnczsKJiM0MzsJdW5zaWduZWQgbG9uZyBucGFnZXM7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc2l6ZTsKJiM0MzsJdW5zaWduZWQgbG9uZyBpOwomIzQzOwl1bnNpZ25lZCBjaGFyICpwdHI7CiYjNDM7CXB0aHJlYWRfdCB0aHJlYWQ7CiYjNDM7CWludCB1ZmZkOwomIzQzOwlpbnQgc3RvcF9mZDsKJiM0MzsJaW50IHJldDsKJiM0MzsJc3RydWN0IHVmZmRpb19hcGkgYXBpOwomIzQzOwlzdHJ1Y3QgdWZmZGlvX3JlZ2lzdGVyIHJlZzsKJiM0MzsJdWludDY0X3Qgc3RvcCA9IDE7CiYjNDM7CXNzaXplX3QgbndyaXRlOwomIzQzOwomIzQzOwlucGFnZXMgPSA0OwomIzQzOwlzaXplID0gbnBhZ2VzICZsdDsmbHQ7IHNlbGYtJmd0O3BhZ2Vfc2hpZnQ7CiYjNDM7CiYjNDM7CS8qIENyZWF0ZSB1c2VyZmF1bHRmZCAqLwomIzQzOwl1ZmZkID0gc3lzY2FsbChfX05SX3VzZXJmYXVsdGZkLCBPX0NMT0VYRUMgfCBPX05PTkJMT0NLKTsKJiM0MzsJaWYgKHVmZmQgJmx0OyAwKQomIzQzOwkJU0tJUChyZXR1cm4sICYjMzQ7dXNlcmZhdWx0ZmQgbm90IGF2YWlsYWJsZSYjMzQ7KTsKJiM0MzsKJiM0MzsJYXBpLmFwaSA9IFVGRkRfQVBJOwomIzQzOwlhcGkuZmVhdHVyZXMgPSAwOwomIzQzOwlyZXQgPSBpb2N0bCh1ZmZkLCBVRkZESU9fQVBJLCAmYW1wO2FwaSk7CiYjNDM7CUFTU0VSVF9FUShyZXQsIDApOwomIzQzOwomIzQzOwlidWZmZXIgPSBtYWxsb2Moc2l6ZW9mKCpidWZmZXIpKTsKJiM0MzsJQVNTRVJUX05FKGJ1ZmZlciwgTlVMTCk7CiYjNDM7CiYjNDM7CWJ1ZmZlci0mZ3Q7ZmQgPSAtMTsKJiM0MzsJYnVmZmVyLSZndDtzaXplID0gc2l6ZTsKJiM0MzsJYnVmZmVyLSZndDttaXJyb3IgPSBtYWxsb2Moc2l6ZSk7CiYjNDM7CUFTU0VSVF9ORShidWZmZXItJmd0O21pcnJvciwgTlVMTCk7CiYjNDM7CiYjNDM7CS8qIENyZWF0ZSBhbm9ueW1vdXMgbWFwcGluZyAqLwomIzQzOwlidWZmZXItJmd0O3B0ciA9IG1tYXAoTlVMTCwgc2l6ZSwKJiM0MzsJCQkgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAomIzQzOwkJCSAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywKJiM0MzsJCQkgICAtMSwgMCk7CiYjNDM7CUFTU0VSVF9ORShidWZmZXItJmd0O3B0ciwgTUFQX0ZBSUxFRCk7CiYjNDM7CiYjNDM7CS8qIFJlZ2lzdGVyIHRoZSByZWdpb24gd2l0aCB1c2VyZmF1bHRmZCAqLwomIzQzOwlyZWcucmFuZ2Uuc3RhcnQgPSAodW5zaWduZWQgbG9uZylidWZmZXItJmd0O3B0cjsKJiM0MzsJcmVnLnJhbmdlLmxlbiA9IHNpemU7CiYjNDM7CXJlZy5tb2RlID0gVUZGRElPX1JFR0lTVEVSX01PREVfTUlTU0lORzsKJiM0MzsJcmV0ID0gaW9jdGwodWZmZCwgVUZGRElPX1JFR0lTVEVSLCAmYW1wO3JlZyk7CiYjNDM7CUFTU0VSVF9FUShyZXQsIDApOwomIzQzOwomIzQzOwkvKiBTZXQgdXAgdGhlIGhhbmRsZXIgdGhyZWFkICovCiYjNDM7CXVmZmRfYXJncy51ZmZkID0gdWZmZDsKJiM0MzsJc3RvcF9mZCA9IGV2ZW50ZmQoMCwgRUZEX0NMT0VYRUMpOwomIzQzOwlBU1NFUlRfR0Uoc3RvcF9mZCwgMCk7CiYjNDM7CXVmZmRfYXJncy5zdG9wX2ZkID0gc3RvcF9mZDsKJiM0MzsJdWZmZF9hcmdzLnBhZ2VfYnVmZmVyID0gbWFsbG9jKHNlbGYtJmd0O3BhZ2Vfc2l6ZSk7CiYjNDM7CUFTU0VSVF9ORSh1ZmZkX2FyZ3MucGFnZV9idWZmZXIsIE5VTEwpOwomIzQzOwl1ZmZkX2FyZ3MucGFnZV9zaXplID0gc2VsZi0mZ3Q7cGFnZV9zaXplOwomIzQzOwomIzQzOwlyZXQgPSBwdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZCwgTlVMTCwgdWZmZF9oYW5kbGVyX3RocmVhZCwgJmFtcDt1ZmZkX2FyZ3MpOwomIzQzOwlBU1NFUlRfRVEocmV0LCAwKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVXNlIHRoZSB1bmxvY2tlZCByZWFkIHBhdGggd2hpY2ggYWxsb3dzIHRoZSBtbWFwIGxvY2sgdG8gYmUKJiM0MzsJICogZHJvcHBlZCBkdXJpbmcgdGhlIGZhdWx0LCBlbmFibGluZyB1c2VyZmF1bHRmZCByZXNvbHV0aW9uLgomIzQzOwkgKi8KJiM0MzsJcmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtJmd0O2ZkLCBITU1fRE1JUlJPUl9SRUFEX1VOTE9DS0VELAomIzQzOwkJCSAgICAgIGJ1ZmZlciwgbnBhZ2VzKTsKJiM0MzsJQVNTRVJUX0VRKHJldCwgMCk7CiYjNDM7CUFTU0VSVF9FUShidWZmZXItJmd0O2NwYWdlcywgbnBhZ2VzKTsKJiM0MzsKJiM0MzsJLyogVmVyaWZ5IHRoZSBkZXZpY2UgcmVhZCB0aGUgZGF0YSBmaWxsZWQgYnkgdGhlIHVmZmQgaGFuZGxlciAqLwomIzQzOwlwdHIgPSBidWZmZXItJmd0O21pcnJvcjsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHNpemU7ICYjNDM7JiM0MztpKQomIzQzOwkJQVNTRVJUX0VRKHB0cltpXSwgKHVuc2lnbmVkIGNoYXIpMHhBQik7CiYjNDM7CiYjNDM7CW53cml0ZSA9IHdyaXRlKHN0b3BfZmQsICZhbXA7c3RvcCwgc2l6ZW9mKHN0b3ApKTsKJiM0MzsJQVNTRVJUX0VRKG53cml0ZSwgc2l6ZW9mKHN0b3ApKTsKJiM0MzsJcHRocmVhZF9qb2luKHRocmVhZCwgTlVMTCk7CiYjNDM7CWNsb3NlKHN0b3BfZmQpOwomIzQzOwlmcmVlKHVmZmRfYXJncy5wYWdlX2J1ZmZlcik7CiYjNDM7CWNsb3NlKHVmZmQpOwomIzQzOwlobW1fYnVmZmVyX2ZyZWUoYnVmZmVyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7CiBURVNUX0hBUk5FU1NfTUFJTgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY2NwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDM3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgSE1NIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMsIGFuZCBpdCYjMzk7cyBtYWtpbmcgc29tZSBwcmV0dHkgZnVuZGFtZW50YWwgY2hhbmdlcyB0byB0aGUgSG9zdCBNZW1vcnkgTWFuYWdlbWVudCAoSE1NKSBjb2RlLiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIHRocnVzdCBpcyB0byBpbnRyb2R1Y2UgdGhpcyBuZXcgZnVuY3Rpb24sIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAsIGFsb25nc2lkZSBhIGxvY2tlZCB2ZXJzaW9uIG9mIHRoZSBleGlzdGluZyBgaG1tX3JhbmdlX2ZhdWx0YC4gSSBzZWUgdGhhdCB0aGUgcGF0Y2ggdG91Y2hlcyBhIGJ1bmNoIG9mIGZpbGVzOiBgbW0vaG1tLmNgLCBgaW5jbHVkZS9saW51eC9obW0uaGAsIHRoZSBkb2N1bWVudGF0aW9uLCBhbmQgdGhlbiBhIHNsZXcgb2YgZHJpdmVyIGZpbGVzIOKAkyBBTUQsIERSTSwgTm91dmVhdSwgSHlwZXItViwgSW5maW5pYmFuZCwgYW5kIGV2ZW4gc29tZSB0ZXN0IGNvZGUuIENsZWFybHksIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZTsgaXQmIzM5O3MgZ2V0dGluZyBpdHMgaGFuZHMgZGlydHkgaW4gSE1NJiMzOTtzIGNvcmUgbG9naWMgYW5kIGRpcmVjdGx5IGltcGFjdGluZyBob3cgdGhlc2UgZHJpdmVycyBpbnRlcmFjdCB3aXRoIG1lbW9yeS4gVGhlIGFkZGl0aW9uIG9mIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAsIGluIHBhcnRpY3VsYXIsIGluZGljYXRlcyBhIHRhcmdldGVkIHVwZGF0ZSBmb3IgZHJpdmVyIHVzZS4KCk15IG5leHQgbW92ZSBpcyB0byB6ZXJvIGluIG9uIHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgZm9yIGZ1enppbmcuIEkmIzM5O20gdGhpbmtpbmcsIGJhc2VkIG9uIHRoaXMgY2hhbmdlLCBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uOiBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgLCBgaG1tX3JhbmdlX2ZhdWx0YCwgYGhtbV9kb19mYXVsdGAsIGBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkYCwgYW5kIGBobW1fcmVjb3JkX2ZhdWx0YC4gVGhlc2UgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFuZCB0aGUgcmVsYXRlZCBpbnRlcm5hbCBmdW5jdGlvbnMuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gV2hhdCBlbmFibGVzIHRoaXMgSE1NIGZ1bmN0aW9uYWxpdHk/IEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHRvIHVuZGVyc3RhbmQgd2hlbiBgaG1tX3JhbmdlX2ZhdWx0YCBpcyBldmVuIGNvbXBpbGVkLiBJJiMzOTtsbCBzZWFyY2ggZm9yIGBobW1fcmFuZ2VfZmF1bHRgIHdpdGhpbiBgbW0vaG1tLmNgIGFuZCBgbW0vS2NvbmZpZ2AsIGJ1dCBJIG5lZWQgdG8gZ28gZnVydGhlci4gSG1tLCBJIGtub3cgYG1tL2htbS5jYCBpcyBjb21waWxlZCBjb25kaXRpb25hbGx5LCBkZXBlbmRpbmcgb24gc29tZSBjb25maWcgdmFyaWFibGVzLiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgYG1tL01ha2VmaWxlYCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSBjb25maWd1cmF0aW9ucyB0aGF0IGNvbnRyb2wgaXRzIGluY2x1c2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtobW0ubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTEzOD1vYmotJChDT05GSUdfWk9ORV9ERVZJQ0UpICYjNDM7PSBtZW1yZW1hcC5vXG5tbS9NYWtlZmlsZToxMzk6b2JqLSQoQ09ORklHX0hNTV9NSVJST1IpICYjNDM7PSBobW0ub1xubW0vTWFrZWZpbGUtMTQwLW9iai0kKENPTkZJR19NRU1GRF9DUkVBVEUpICYjNDM7PSBtZW1mZC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1NTkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSG1tLCBgQ09ORklHX0hNTV9NSVJST1JgIE5lZWRlZD8qKgoKUmlnaHQsIHNvIGl0IGxvb2tzIGxpa2UgdGhlIGN1cnJlbnQgdGFzayBuZWNlc3NpdGF0ZXMgdGhlIHVzZSBvZiBgQ09ORklHX0hNTV9NSVJST1JgLiBBIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGFzIGFsd2F5cywgaXMgdG8gY2hlY2sgaG93IHRoaXMgZmVhdHVyZSBpcyBhY3R1YWxseSAqdXNlZCogaW4gdGhlIGNvZGViYXNlLiBMZXQmIzM5O3MgZGlnIGludG8gYGxpYi90ZXN0X2htbS5jYC4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSBleGFtcGxlIGNvbmZpZ3VyYXRpb25zIGFuZCB0ZXN0IHNldHVwcyByZXNpZGUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgZWl0aGVyIGEgY2xlYXIgZXhhbXBsZSBvZiBob3cgYENPTkZJR19ITU1fTUlSUk9SYCBpcyBkZWZpbmVkLCBvciBhdCB0aGUgdmVyeSBsZWFzdCwgc29tZSBpbmRpY2F0aW9ucyBvZiBkZXBlbmRlbnQgY29uZmlndXJhdGlvbnMgb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gaXRzIHByZXNlbmNlLiBUaGlzIGZpbGUgd2lsbCBwcm9iYWJseSBob2xkIHRoZSBrZXlzIHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZmVhdHVyZSBoYXMgYmVlbiB2YWxpZGF0ZWQgYW5kIHRoZSBhc3N1bXB0aW9ucyBhYm91dCBpdHMgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Rlc3RfaG1tLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL01ha2VmaWxlPTEwMj1vYmotJChDT05GSUdfVEVTVF9MT0NLVVApICYjNDM7PSB0ZXN0X2xvY2t1cC5vXG5saWIvTWFrZWZpbGU6MTAzOm9iai0kKENPTkZJR19URVNUX0hNTSkgJiM0Mzs9IHRlc3RfaG1tLm9cbmxpYi9NYWtlZmlsZS0xMDQtb2JqLSQoQ09ORklHX1RFU1RfRlJFRV9QQUdFUykgJiM0Mzs9IHRlc3RfZnJlZV9wYWdlcy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4OTIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIEhNTSBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJIHNlZSB3ZSBuZWVkIGBDT05GSUdfVEVTVF9ITU1gLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgcmVsZXZhbnQgZHJpdmVyIGNvZGUsIHNvIEkmIzM5O2xsIHF1aWNrbHkgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbnMgdXNlZCBpbiBgZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uY2AgYW5kIGBkcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jYC4gSG93ZXZlciwgSSYjMzk7bSB0aGlua2luZyB0aGUgZm9jdXMgaGVyZSBzaG91bGQgYmUgY29yZSBITU0gdGVzdGluZywgYW5kIGBURVNUX0hNTWAgc2VlbXMgbGlrZSBpdCYjMzk7cyBzcGVjaWZpY2FsbHkgdGFpbG9yZWQgZm9yIHRoYXQgcHVycG9zZS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYFRFU1RfSE1NYCBhcyB0aGUgbW9yZSBkaXJlY3QgcGF0aC4gVG8gbWFrZSBzdXJlLCB0aG91Z2gsIGxldCBtZSBkb3VibGUtY2hlY2sgYG1tL0tjb25maWdgIGZvciB0aGUgYEhNTV9NSVJST1JgIGNvbmZpZ3VyYXRpb247IGl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIHZlcmlmeSBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0ZWQgb3B0aW9ucyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSE1NX01JUlJPUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMjI4PWNvbmZpZyBaT05FX0RFVklDRVxuLS1cbm1tL0tjb25maWctMTI0OS0jXG5tbS9LY29uZmlnOjEyNTA6Y29uZmlnIEhNTV9NSVJST1Jcbm1tL0tjb25maWctMTI1MS1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzI2OAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGVjb2RpbmcgdGhlIEJvb2wqKgoKQWxyaWdodCwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYEhNTV9NSVJST1JgIGlzIGEgQm9vbGVhbiB2YXJpYWJsZSwgbGlrZWx5IGNvbnRyb2xsaW5nIHNvbWUgc29ydCBvZiBtaXJyb3Jpbmcgb3IgcmVmbGVjdGlvbiBiZWhhdmlvciB3aXRoaW4gbXkgSGlkZGVuIE1hcmtvdiBNb2RlbCAoSE1NKSBpbXBsZW1lbnRhdGlvbi4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBwcm9iYWJseSBzZWxlY3RlZCBieSBgVEVTVF9ITU1gIHN1Z2dlc3RzIHRoaXMgaXMgcmVsYXRlZCB0byBhIHRlc3RpbmcgY29uZmlndXJhdGlvbi4gSeKAmW0gZ3Vlc3NpbmcsIGJhc2VkIG9uIHByaW9yIGV4cGVyaWVuY2UsIHRoYXQgdGhpcyB0ZXN0IHN1aXRlIHByb2JhYmx5IHRvZ2dsZXMgdmFyaW91cyBtb2RlbCBwYXJhbWV0ZXJzIGFuZCBjb25maWd1cmF0aW9ucyB0byB2YWxpZGF0ZSB0aGUgZnVuY3Rpb25hbGl0eS4gVGhlcmVmb3JlLCBgSE1NX01JUlJPUmAgaXMgbGlrZWx5IGEgY29uZmlndXJhdGlvbiB0byB0ZXN0IGEgbW9kZWwgdmFyaWF0aW9uLiBUaGlzIHNldHVwIGFpbXMgdG8gZW5zdXJlIHRoYXQgdGhlIEhNTSBiZWhhdmVzIGFzIGV4cGVjdGVkIHVuZGVyIGEgcmVmbGVjdGVkIG9yIG1pcnJvcmVkIGRhdGEgc3BhY2Ugc2NlbmFyaW8uIEkmIzM5O2QgbmVlZCBtb3JlIGNvbnRleHQgb24gdGhlIEhNTSBzdHJ1Y3R1cmUgYW5kIHRlc3RpbmcgZnJhbWV3b3JrIHRvIHBpbiBkb3duIHRoZSAqZXhhY3QqIHB1cnBvc2UsIGJ1dCB0aGUgY29yZSBpZGVhIGlzIGNsZWFyOiBpdCYjMzk7cyBhIHRlc3QgZmxhZywgYW5kIG1pcnJvcmluZyBpcyB0aGUgbWVjaGFuaXNtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVEVTVF9ITU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1ZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1Zz0zMzE4PWNvbmZpZyBURVNUX01FTUlOSVRcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzI1LVxubGliL0tjb25maWcuZGVidWc6MzMyNjpjb25maWcgVEVTVF9ITU1cbmxpYi9LY29uZmlnLmRlYnVnLTMzMjctXHR0cmlzdGF0ZSBcJiMzNDtUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2MTkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIFRFU1RfSE1NIFNlbGVjdGlvbioqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byBxdWlja2x5IGdyYXNwIHdoYXQgYFRFU1RfSE1NYCBoYXMgcGlja2VkLiBUaGUgbmFtZSBpdHNlbGYgaXMgYSBjbHVlOyBpdCYjMzk7cyBsaWtlbHkgYSBzcGVjaWZpY2FsbHkgZGVzaWduZWQgaGlkZGVuIE1hcmtvdiBtb2RlbCBmb3Igc29tZSBwdXJwb3NlLiBUaGUgY3JpdGljYWwgcXVlc3Rpb24gbm93IGlzLCB3aGF0IGFyZSB0aGUgY2hhcmFjdGVyaXN0aWNzIG9mIHRoYXQgcGFydGljdWxhciBtb2RlbD8gSXMgaXQgYSBiYXNpYyBpbXBsZW1lbnRhdGlvbiwgb3IgZG9lcyBpdCBpbmNvcnBvcmF0ZSBtb3JlIGFkdmFuY2VkIHRlY2huaXF1ZXM/IFdoYXQgZmVhdHVyZXMgd2VyZSBjb25zaWRlcmVkIHdoZW4gc2VsZWN0aW5nIGBURVNUX0hNTWAgaW4gdGhpcyBzaXR1YXRpb24/IEkmIzM5O20gYWxyZWFkeSBmb3JtdWxhdGluZyBxdWVzdGlvbnMgaW4gbXkgbWluZCwgc3VjaCBhcyAmIzM0O1doYXQgZGF0YSB3YXMgdXNlZCB0byB0cmFpbiBpdD8mIzM0OywgJiMzNDtXaGF0IGFyZSB0aGUga2V5IHN0YXRlIHRyYW5zaXRpb25zPyYjMzQ7IGFuZCAmIzM0O1doYXQgb2JqZWN0aXZlIHdhcyB0aGlzIEhNTSBjaG9zZW4gdG8gZnVsZmlsbD8mIzM0OyBUaGUgZ29hbCBpcyB0byByYXBpZGx5IGRldGVybWluZSBpZiBgVEVTVF9ITU1gIG1ha2VzIHNlbnNlLCBvciBpZiBJIG5lZWQgdG8gZGlnIGRlZXBlciBmb3IgaXRzIHJhdGlvbmFsZS4gSXQmIzM5O3MgZXNzZW50aWFsbHkgYSBzYW5pdHkgY2hlY2sgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdC4qSE1NJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bGliL0tjb25maWcuZGVidWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL0tjb25maWcuZGVidWc9MzMyNj1jb25maWcgVEVTVF9ITU1cbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzI5LVx0ZGVwZW5kcyBvbiBERVZJQ0VfUFJJVkFURVxubGliL0tjb25maWcuZGVidWc6MzMzMDpcdHNlbGVjdCBITU1fTUlSUk9SXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzMxLVx0c2VsZWN0IE1NVV9OT1RJRklFUlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzk1NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIEhNTSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIGBURVNUX0hNTWAgaXMgcG9pbnRpbmcgbWUgdG93YXJkcyBgSE1NX01JUlJPUmAuIFRoYXQmIzM5O3MgdGhlIHByaW1hcnkgc2VsZWN0aW9uLCBub3RlZC4gTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGVyZSBhcmVuJiMzOTt0ICphbnkqIG90aGVyIHBvdGVudGlhbCBITU0tcmVsYXRlZCBjb25maWd1cmF0aW9ucyBpbiBwbGF5LiBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIExldCYjMzk7cyBzZWUuLi4gaXMgYENPTkZJR19EUk1fTk9VVkVBVV9TVk1gIGEgZmFjdG9yIGhlcmU/IE9yIHBlcmhhcHMgYENPTkZJR19EUk1fR1BVU1ZNYD8gVGhvc2Ugc2VlbSByZWxldmFudCB0byBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gRFJNLCBzbyBjaGVja2luZyB0aGVtIGlzIGEgbXVzdC4gQW5kIHdoYXQgYWJvdXQgYENPTkZJR19JTkZJTklCQU5EX09OX0RFTUFORF9QQUdJTkdgPyBITU0gdG91Y2hlcyBtZW1vcnksIHNvIHRoaXMgaXMgd29ydGggYSBsb29rLiBNaWdodCBgQ09ORklHX01TSFZgIG9yIGBDT05GSUdfQU1EWEROQWAgaGF2ZSBhbnkgaW5mbHVlbmNlPyBITU0gYW5kIHZpcnR1YWxpemF0aW9uLCBhbmQgdGhlbiBITU0gYW5kIEFNRCYjMzk7cyBETkEgYXJjaGl0ZWN0dXJlLgoKQWxyaWdodCwgSSBzaG91bGQgc3BlY2lmaWNhbGx5IGNoZWNrIHRoYXQgYGRyaXZlcnMvYWNjZWwvYW1keGRuYS9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gc2VlIHRoZSByZWxhdGlvbnNoaXAgaGVyZSwgaWYgdGhlcmUgaXMgb25lLiBHb3R0YSBiZSBhYnNvbHV0ZWx5IHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYSBkZXBlbmRlbmN5IG9yIGludGVyYWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBEUk1fQU1EWEROQSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYWNjZWwvYW1keGRuYS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzNTQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgQ29kZWJhc2U6IElkZW50aWZ5aW5nIHRoZSBSZWxldmFudCBDb25maWd1cmF0aW9uKioKCk9rYXksIGhvbGQgb24uIEkmIzM5O3ZlIGdvdCBhIG1vZGlmaWNhdGlvbiBzaG93aW5nIHVwIGluIGBkcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguY2AuIFRoYXQmIzM5O3MgYSBrZXkgZmlsZSBmb3IgdGhlIEFNRCBERE5BIGFjY2VsZXJhdGlvbiBjb250ZXh0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGNoYW5nZWQuIFRoZSBmaXJzdCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGFzc29jaWF0ZWQgY29uZmlndXJhdGlvbiB0aGF0IGdvdmVybnMgdGhpcyBwYXJ0IG9mIHRoZSBkcml2ZXIuIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBjb25maWd1cmF0aW9uIHRoYXQgY29udHJvbHMgaG93IHRoaXMgcG9ydGlvbiBvZiB0aGUgY29kZSBpcyBidWlsdCBhbmQgZW5hYmxlZC4gVGltZSB0byBnbyBodW50aW5nIGZvciB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLiBJIGV4cGVjdCB0aGVyZSYjMzk7cyBwcm9iYWJseSBhIGRlZmNvbmZpZyBvciBzb21lIG90aGVyIGJ1aWxkLXRpbWUgZmxhZyBpbmZsdWVuY2luZyBob3cgdGhhdCBwYXJ0aWN1bGFyIEFJRTIgY29udGV4dCBpcyBzZXQgdXAuIExldCYjMzk7cyBzZWUgaWYgdGhlIGNvbmZpZyBpcyBpbiB0aGUgcGFyZW50IGRpcmVjdG9yeSwgb3IgaW4gdGhlIGRyaXZlciYjMzk7cyBvd24gZGlyZWN0b3J5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthaWUyX2N0eC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9hY2NlbC9hbWR4ZG5hL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYWNjZWwvYW1keGRuYS9NYWtlZmlsZT0zPWFtZHhkbmEteSA6PSBcXFxuLS1cbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9NYWtlZmlsZS02LVx0YWllX3NtdS5vIFxcXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvTWFrZWZpbGU6NzpcdGFpZTJfY3R4Lm8gXFxcbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9NYWtlZmlsZS04LVx0YWllMl9lcnJvci5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAwOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NzExCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBNb2R1bGUgSWRlbnRpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHNvbWV0aGluZywgYW5kIHRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsICYjMzQ7V2hhdCYjMzk7cyB0aGUgbmFtZSBvZiB0aGlzIHBhcnRpY3VsYXIgbW9kdWxlIG9yIGNvbXBvbmVudCBJJiMzOTttIGRlYWxpbmcgd2l0aD8mIzM0OyBUaGUgY3JpdGljYWwgZmlyc3Qgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIG9yIHRyb3VibGVzaG9vdGluZyBhbnkgc3lzdGVtIGlzIHBpbnBvaW50aW5nIGl0cyBzcGVjaWZpYyBpZGVudGl0eS4gQW5kIHRoYXQgbW9kdWxlIG5hbWUsIHN0cmFpZ2h0IHVwLCBpcyBgYW1keGRuYWAuIFRoYXQmIzM5O3MgdGhlIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbiB0byBzdGFydCB3aXRoLiBXaXRoIHRoYXQgbmFtZSBJIGNhbiBsb29rIGludG8gcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiwgcmVsYXRlZCBjb2RlIGFuZCBvdGhlciBpbXBsZW1lbnRhdGlvbnMgdGhhdCBtYXkgYmUgcmVsZXZhbnQuIE5vdyBJIGtub3cgcHJlY2lzZWx5IHdoYXQgSSYjMzk7bSBkZWFsaW5nIHdpdGgsIGFuZCBJIGNhbiBtb3ZlIGZvcndhcmQgYWNjb3JkaW5nbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FtZHhkbmEteSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYWNjZWwvYW1keGRuYS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2FjY2VsL2FtZHhkbmEvTWFrZWZpbGUtMi1cbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9NYWtlZmlsZTozOmFtZHhkbmEteSA6PSBcXFxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL01ha2VmaWxlLTQtXHRhaWUubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODk2NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkh1bnRpbmcgRG93biB0aGUgQU1EIFhETkEgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O1doZXJlJiMzOTtzIHRoZSBjb25maWcgZm9yIGBhbWR4ZG5hYD8mIzM0OyBUaGlzIGlzIGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHNwZWNpZmljIGhhcmR3YXJlIGlzIGJlaW5nIGluaXRpYWxpemVkLCBtYW5hZ2VkLCBhbmQgaW50ZXJhY3RlZCB3aXRoLiBLbm93aW5nIHRoZSBjb25maWd1cmF0aW9uIGlzIGZ1bmRhbWVudGFsIHRvIGp1c3QgYWJvdXQgZXZlcnl0aGluZy4gSXQgZGljdGF0ZXMgdGhlIGF2YWlsYWJsZSByZXNvdXJjZXMsIHRoZSBjbG9jayBzZXR0aW5ncywgcG93ZXIgcHJvZmlsZXMsIGludGVycnVwdCBtYXBwaW5ncyDigJMgdGhlIHdob2xlIHNoZWJhbmcuIFdpdGhvdXQgaXQsIEkmIzM5O20gYmFzaWNhbGx5IGZseWluZyBibGluZC4gSXMgaXQgYSBkZWRpY2F0ZWQgZmlsZT8gUGFydCBvZiBhIGJyb2FkZXIgc3lzdGVtIGNvbmZpZ3VyYXRpb24/IERlZmluZWQgaW4gZmlybXdhcmU/IE1heWJlIGl0JiMzOTtzIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCBiYXNlZCBvbiBoYXJkd2FyZSBkZXRlY3Rpb24/IFRoZSBodW50IGJlZ2lucy4gVGhlIG51YW5jZXMgaGVyZSwgYXMgd2UgYm90aCBrbm93LCBhcmUgZ29pbmcgdG8gYmUga2V5IHRvIGFueSBkZWVwIGRpdmUuIFRpbWUgdG8gc3RhcnQgZGlnZ2luZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YW1keGRuYS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9hY2NlbC9hbWR4ZG5hL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYWNjZWwvYW1keGRuYS9NYWtlZmlsZT0zMz1hbWR4ZG5hLSQoQ09ORklHX0RFQlVHX0ZTKSAmIzQzOz0gYW1keGRuYV9kZWJ1Z2ZzLm9cbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9NYWtlZmlsZTozNDpvYmotJChDT05GSUdfRFJNX0FDQ0VMX0FNRFhETkEpID0gYW1keGRuYS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAwOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5Mjc5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBBTUQgWEROQSBEUk0gQWNjZWxlcmF0aW9uIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIGBDT05GSUdfRFJNX0FDQ0VMX0FNRFhETkFgLi4uIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgdGhpcy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZHJpdmVyIHN1cHBvcnQuIFRoZSBxdWljayBwYXRoIHRvIHRoYXQgaXMsIHdpdGhvdXQgYSBkb3VidCwgZGl2aW5nIGludG8gYGRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmNgLiBUaGF0IGZpbGUgaXMgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCwgdGhlcmVmb3JlLCBwb3RlbnRpYWxseSB0aGUgYWNjZWxlcmF0aW9uIGhvb2tzIGZvciBBTUQmIzM5O3MgRE5BLXJlbGF0ZWQgYWNjZWxlcmF0aW9uIHdvdWxkIGJlIGRlZmluZWQuIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWluIHRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zLCB0aGUgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhlIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgQU1EIEdQVSBWaXJ0dWFsIE1lbW9yeSAoR1VTVk0pIHN1YnN5c3RlbSBpZiB0aGVyZSBpcyBhbnkuIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIHdoYXQgYXNwZWN0cyBvZiB0aGUgaGFyZHdhcmUgdGhpcyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHVubG9ja3MgYW5kIHdoYXQgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIGFyZSBhc3NvY2lhdGVkIHdpdGggdXNpbmcgaXQuIFRoaXMgd2lsbCBoZWxwIGRldGVybWluZSB3aGF0IHRlc3RpbmcgaXMgcmVxdWlyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RybV9ncHVzdm0ubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGU9MTA5PWRybV9ncHVzdm1faGVscGVyLXkgOj0gXFxcbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZToxMTA6XHRkcm1fZ3B1c3ZtLm9cbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZS0xMTEtZHJtX2dwdXN2bV9oZWxwZXItJChDT05GSUdfWk9ORV9ERVZJQ0UpICYjNDM7PSBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTYzNwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBBY3RpdmF0aW9uIG9mIGBkcm1fZ3B1c3ZtX2hlbHBlcmAqKgoKQWxyaWdodCwgc28gdGhlIHF1ZXN0aW9uIGlzLCAqd2hhdCogYWN0dWFsbHkgZW5hYmxlcyB0aGUgYGRybV9ncHVzdm1faGVscGVyYCBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUga2VybmVsPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBrbm9icyB0aGF0IGFyZSB0aWVkIHRvIHRoaXMuIElzIGl0IGEgY29yZSBvcHRpb24gYnVyaWVkIGRlZXAgd2l0aGluIHRoZSBEUk0gc3Vic3lzdGVtLCBvciBpcyBpdCBtb3JlIGNsb3NlbHkgbGlua2VkIHRvIHNwZWNpZmljIEdQVSBkcml2ZXJzLCBwZXJoYXBzIHRocm91Z2ggdGhlaXIgYXNzb2NpYXRlZCBtZW1vcnkgbWFuYWdlbWVudCBvcHRpb25zPyBJJiMzOTtsbCBwcm9iYWJseSBuZWVkIHRvIGRlbHZlIGludG8gdGhlIGBLY29uZmlnYCBmaWxlcyBmb3IgdGhlIERSTSAoRGlyZWN0IFJlbmRlcmluZyBNYW5hZ2VyKSBhbmQgYW55IHJlbGV2YW50IEdQVSBkcml2ZXJzLiBJIGJldCBpdCBpcyBzb21lIGtpbmQgb2YgbWVtb3J5IG1hbmFnZW1lbnQgb3Igc2hhcmVkIHZpcnR1YWwgbWVtb3J5IG9wdGlvbi4KCkkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGRlcGVuZGVuY2llcywgZGVmYXVsdCB2YWx1ZXMsIGFuZCBhbnkgcmVsYXRpb25zaGlwcyB0byBvdGhlciBmZWF0dXJlcywgc3BlY2lmaWNhbGx5IGFueXRoaW5nIG1lbnRpb25pbmcgU1ZNLCBvciBldmVuIG1vcmUgYnJvYWRseSwgc2hhcmVkIG1lbW9yeSwgYW5kIGhvdyB0aGF0IGludGVyYWN0cyB3aXRoIHRoZSB1c2VyIHNwYWNlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZ3JhbnVsYXJpdHkgaGVyZS4gSXMgdGhpcyB0aWVkIHRvIHRoZSBlbmFibGluZyBvZiBJT01NVSBvciBzb21ldGhpbmc/IElzIGl0IGFsd2F5cyBvbj8gSWYgbm90LCB3aGF0IGNpcmN1bXN0YW5jZXMgcmVxdWlyZSBpdCB0byBiZSBlbmFibGVkPyBJZiB0aGVyZSBpcyBhIHdheSB0byBkaXNhYmxlIGl0LCBJIHdpbGwgYmUgbG9va2luZyB0byBzZWUgaWYgdGhlcmUgaXMgYW55IHJlYXNvbiB0byBkbyBzby4KCkkmIzM5O2xsIGJlIGN1cmlvdXMgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY29uZmlndXJhdGlvbi4gRG9lcyBpdCByZXF1aXJlIGEgc3BlY2lmaWMga2VybmVsIHZlcnNpb24sIGFuZCBkb2VzIGl0IGNvbWUgd2l0aCBhbnkgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnM/IEkgbmVlZCB0byBrbm93IGhvdyBpdCBpbXBhY3RzIHRoZSBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZSB3aGVuIGl0IGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuIFRoaXMgd2lsbCBndWlkZSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvcHRpbWFsIHVzZSBjYXNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHJtX2dwdXN2bV9oZWxwZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlPTEwNz1vYmotJChDT05GSUdfRFJNX0dQVVZNKSAmIzQzOz0gZHJtX2dwdXZtLm9cbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZS0xMDgtXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGU6MTA5OmRybV9ncHVzdm1faGVscGVyLXkgOj0gXFxcbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZS0xMTAtXHRkcm1fZ3B1c3ZtLm9cbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZToxMTE6ZHJtX2dwdXN2bV9oZWxwZXItJChDT05GSUdfWk9ORV9ERVZJQ0UpICYjNDM7PSBcXFxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlLTExMi1cdGRybV9wYWdlbWFwLm9cXFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZS0xMTQtXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGU6MTE1Om9iai0kKENPTkZJR19EUk1fR1BVU1ZNKSAmIzQzOz0gZHJtX2dwdXN2bV9oZWxwZXIub1xuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlLTExNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyMTYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gR1BVIFZpcnR1YWxpemF0aW9uKioKCkFscmlnaHQsIHRoZSBkaXNjdXNzaW9uIGhhcyBsYW5kZWQgb24gYENPTkZJR19EUk1fR1BVU1ZNYC4gUmlnaHQgYXdheSwgbXkgbWluZCBnb2VzIHRvIHRoZSBsaWtlbHkgaW1wbGVtZW50YXRpb24uIEkgaW1tZWRpYXRlbHkgdGhpbmssICp0aGF0IG1lYW5zIEkgc2hvdWxkIGNoZWNrIHRoZSBOb3V2ZWF1IGRyaXZlciwgc3BlY2lmaWNhbGx5IGBkcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N2bS5jYC4qIEkmIzM5O20gYXNzdW1pbmcgdGhhdCYjMzk7cyB0aGUgcGxhY2Ugd2hlcmUgdGhlIGNvcmUgR1BVIFN5c3RlbSBWaXJ0dWFsIE1hY2hpbmUgY29kZSwgaWYgYW55IGV4aXN0cywgd291bGQgcmVzaWRlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgdGhlIHNoYXJlZCBtZW1vcnkgYW5kIHZpcnR1YWxpemF0aW9uIGNvbXBvbmVudHMgZm9yIHRoZSBOb3V2ZWF1IGRyaXZlcnMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGV5IGFyZSBkb2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtub3V2ZWF1X3N2bS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDQ0MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIGEgTW9kaWZpZWQgRmlsZSoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHNlZSB0aGF0IGBub3V2ZWF1X3N2bS5jYCBoYXMgYmVlbiB0b3VjaGVkLiBUaGF0JiMzOTtzIGEga2V5IGZpbGUgaW4gdGhlIE5vdXZlYXUgZHJpdmVyLCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIFN5c3RlbSBWaXJ0dWFsIE1lbW9yeSAoU1ZNKSwgd2hpY2ggaXMgY3JpdGljYWwgZm9yIHRoaW5ncyBsaWtlIEdQVSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc2hhcmluZy4gTXkgaW1tZWRpYXRlIHJlYWN0aW9uIGlzIHRvIHRyYWNrIGRvd24gaXRzIGNvbmZpZ3VyYXRpb24uIENoYW5nZXMgdG8gdGhhdCBmaWxlLCBlc3BlY2lhbGx5IHJlbGF0ZWQgdG8gbWVtb3J5IGhhbmRsaW5nLCBjYW4gaGF2ZSBwcmV0dHkgZmFyLXJlYWNoaW5nIGltcGxpY2F0aW9ucy4gSXQgY291bGQgYmUgYSBzaW1wbGUgYnVnIGZpeCwgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIG9yLCBwb3RlbnRpYWxseSwgYSBjaGFuZ2UgaW4gaG93IHRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIGhhcmR3YXJlLCBtYXliZSBldmVuIGEgbmV3IGZlYXR1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgbW9kaWZpY2F0aW9uIGJlZm9yZSBJIG1ha2UgYW55IGFzc3VtcHRpb25zLiBGaXJzdCBzdGVwOiBkaXZpbmcgaW50byBpdHMgY29uZmlndXJhdGlvbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtub3V2ZWF1X3N2bSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2NzMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGlzc3VlOgoKKipEZWx2aW5nIGludG8gdGhlIE5vdXZlYXUgS2J1aWxkIFN0cnVjdHVyZSoqCgpPa2F5LCBJJiMzOTttIHRyeWluZyB0byB0cmFjayBkb3duIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBOb3V2ZWF1IGRyaXZlci4gV2hlcmUgd291bGQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zIGJlPyBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgY29yZSBkaXJlY3Rvcmllcy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L2AuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSwgYnV0IEkgd2FudCB0byBiZSBjZXJ0YWluIHRoYXQgSSYjMzk7bSBvbiB0aGUgcmlnaHQgdHJhY2suIEFuZCBpZiBJIGFtLCB3aGVyZSB3b3VsZCB0aGUgY29tcGlsYXRpb24gYW5kIGJ1aWxkIGNvbmZpZ3VyYXRpb25zIGJlIG1hbmFnZWQ/IE1heWJlIHRoZXJlJiMzOTtzIGEgYEtidWlsZGAgZmlsZSBpbiB0aGVyZT8gVGhhdCYjMzk7cyB0eXBpY2FsbHkgd2hlcmUgdGhlc2UgdGhpbmdzIGFyZSBkZWZpbmVkLCBlc3BlY2lhbGx5IGluIHRoZSBrZXJuZWwuIExldCYjMzk7cyBjaGVjayBgZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvS2J1aWxkYC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIGxvb2tpbmcgaW4gdGhlIHJpZ2h0IHNwb3QsIHNvIGxldCYjMzk7cyBzdGFydCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bm91dmVhdV9zdm0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9LYnVpbGQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvS2J1aWxkPTQwPW5vdXZlYXUteSAmIzQzOz0gbm91dmVhdV9nZW0ub1xuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvS2J1aWxkOjQxOm5vdXZlYXUtJChDT05GSUdfRFJNX05PVVZFQVVfU1ZNKSAmIzQzOz0gbm91dmVhdV9zdm0ub1xuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvS2J1aWxkLTQyLW5vdXZlYXUtJChDT05GSUdfRFJNX05PVVZFQVVfU1ZNKSAmIzQzOz0gbm91dmVhdV9kbWVtLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwMjUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIGFuZCBEcml2ZXIgRXhhbWluYXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gc2VlaW5nIGEgcmVmZXJlbmNlIHRvIGBDT05GSUdfRFJNX05PVVZFQVVfU1ZNYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hhdCYjMzk7cyB0aGUgY29udGV4dCBoZXJlPyYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZsYWcgcmVsYXRlcyB0byB0aGUgb3ZlcmFsbCBzeXN0ZW0gY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgdGhlIE5vdXZlYXUgZHJpdmVyIGFuZCBTaGFyZWQgVmlydHVhbCBNZW1vcnkuIFdoZXJlIGRvZXMgdGhpcyB2YXJpYWJsZSBmaXQgaW4/CgpNeSBuZXh0IHN0ZXAsIGFuZCB0aGlzIGlzIGFsbW9zdCBhdXRvbWF0aWMgYXQgdGhpcyBwb2ludCwgaXMgdG8gZGl2ZSBpbnRvIGBkcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jYC4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aCBTaGFyZWQgVmlydHVhbCBNZW1vcnkgKFNWTSksIGFuZCBob3cgdGhpcyBkcml2ZXIsIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgSHlwZXItViBlbnZpcm9ubWVudHMsIG1pZ2h0IGJlIGludGVyYWN0aW5nIHdpdGggb3IgYmVpbmcgYWZmZWN0ZWQgYnkgdGhlIE5vdXZlYXUgZHJpdmVyLiBUaGlzIGlzIGxpa2VseSBhbiBhcmVhIHdoZXJlIEkgbWlnaHQgc2VlIHRoZSB1c2Ugb2YgYENPTkZJR19EUk1fTk9VVkVBVV9TVk1gIGFuZCB0aGUgdXNlIG9mIHRoZSBOb3V2ZWF1IGRyaXZlci4gTG9va2luZyBmb3IgZGVwZW5kZW5jaWVzIG9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9ucyBpcyBteSBwcmltYXJ5IGdvYWwuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIHRoaXMgY29uZmlndXJhdGlvbiBzZXR0aW5nIHdpdGhpbiB0aGlzIHNwZWNpZmljIGRyaXZlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXNodl9yZWdpb25zLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2h2L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaHYvTWFrZWZpbGU9MTY9bXNodl9yb290LXkgOj0gbXNodl9yb290X21haW4ubyBtc2h2X3N5bmljLm8gbXNodl9ldmVudGZkLm8gbXNodl9pcnEubyBcXFxuZHJpdmVycy9odi9NYWtlZmlsZToxNzpcdCAgICAgICBtc2h2X3Jvb3RfaHZfY2FsbC5vIG1zaHZfcG9ydGlkX3RhYmxlLm8gbXNodl9yZWdpb25zLm9cbmRyaXZlcnMvaHYvTWFrZWZpbGUtMTgtbXNodl9yb290LSQoQ09ORklHX0RFQlVHX0ZTKSAmIzQzOz0gbXNodl9kZWJ1Z2ZzLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0NjYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW52ZXN0aWdhdGluZyB0aGUgYG1zaHZfcm9vdGAgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgcXVlc3Rpb24gaW1tZWRpYXRlbHkgdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcywgJiMzNDt3aGF0ICpzcGVjaWZpY2FsbHkqIGVuYWJsZXMgdGhlIGBtc2h2X3Jvb3RgIGZlYXR1cmU/JiMzNDsgV2Uga25vdyBpdCBleGlzdHMsIHdlJiMzOTtyZSBmYW1pbGlhciB3aXRoIGl0cyBwdXJwb3NlIGluIGdlbmVyYWwsIGJ1dCB0aGUgcHJlY2lzZSBtZWNoYW5pc20gb2YgaXRzIGFjdGl2YXRpb24gaXNuJiMzOTt0IGFsd2F5cyBpbW1lZGlhdGVseSBvYnZpb3VzLiBJcyBpdCBhIGNvbXBpbGUtdGltZSBmbGFnPyBBIGtlcm5lbCBtb2R1bGUgcGFyYW1ldGVyPyBQZXJoYXBzIGEgc3BlY2lmaWMgZW50cnkgd2l0aGluIGEgcGFydGljdWxhciBjb25maWd1cmF0aW9uIGZpbGUsIG9yIHNldCBvZiBmaWxlcywgd2l0aGluIHRoZSBzeXN0ZW0/CgpNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoaXMgaXNuJiMzOTt0IGEgc2ltcGxlIG9uL29mZiBzd2l0Y2gsIGJ1dCBwcm9iYWJseSBzb21ldGhpbmcgbW9yZSBudWFuY2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gZGlmZmVyZW50IHN5c3RlbSBjb21wb25lbnRzLiBNYXliZSBpdOKAmXMgZGVwZW5kZW50IG9uIGNlcnRhaW4gaGFyZHdhcmUgY2FwYWJpbGl0aWVzLCBvciBhbm90aGVyIHJlbGF0ZWQgZmVhdHVyZSB0aGF0IG11c3QgYmUgZW5hYmxlZC4gSSBrbm93IGl0IGlzbiYjMzk7dCBsaWtlbHkgc29tZXRoaW5nIHRoYXQganVzdCAmIzM0O2lzJiMzNDsuCgpJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byB0cmFjZSB0aGUgY29kZSBwYXRoIHJlbGF0ZWQgdG8gYG1zaHZfcm9vdGAsIG9yIGxvb2sgYXQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gdG8gZmlndXJlIG91dCB3aGVuIGFuZCBob3cgdGhlIHJvb3Qgb2YgdGhpcyBzdHJ1Y3R1cmUgaXMgY3JlYXRlZC4gV2hlcmUgd291bGQgdGhlIG1vc3QgdXNlZnVsIGRvY3VtZW50YXRpb24gYmUgbG9jYXRlZD8gUGVyaGFwcyB0aGUga2VybmVsIGRvY3VtZW50YXRpb24gaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCB0aG91Z2ggaXQgbWlnaHQgYmUgYSBiaXQgdmVyYm9zZS4KCkkmIzM5O20gYXNzdW1pbmcgdGhlIHNwZWNpZmljIGNvbnRleHQgaXMgdGhlIGtleSwgaW4gb3JkZXIgdG8gZ2V0IHRvIHRoZSByb290IG9mIHRoZSBwcm9ibGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttc2h2X3Jvb3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2h2L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaHYvTWFrZWZpbGU9ND1vYmotJChDT05GSUdfSFlQRVJWX0JBTExPT04pXHQmIzQzOz0gaHZfYmFsbG9vbi5vXG5kcml2ZXJzL2h2L01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX01TSFZfUk9PVClcdFx0JiM0Mzs9IG1zaHZfcm9vdC5vXG5kcml2ZXJzL2h2L01ha2VmaWxlLTYtb2JqLSQoQ09ORklHX01TSFZfVlRMKSAgICAgICAgICAmIzQzOz0gbXNodl92dGwub1xuLS1cbmRyaXZlcnMvaHYvTWFrZWZpbGU9MTU9aHZfdXRpbHMteSA6PSBodl91dGlsLm8gaHZfa3ZwLm8gaHZfc25hcHNob3QubyBodl91dGlsc190cmFuc3BvcnQub1xuZHJpdmVycy9odi9NYWtlZmlsZToxNjptc2h2X3Jvb3QteSA6PSBtc2h2X3Jvb3RfbWFpbi5vIG1zaHZfc3luaWMubyBtc2h2X2V2ZW50ZmQubyBtc2h2X2lycS5vIFxcXG5kcml2ZXJzL2h2L01ha2VmaWxlOjE3Olx0ICAgICAgIG1zaHZfcm9vdF9odl9jYWxsLm8gbXNodl9wb3J0aWRfdGFibGUubyBtc2h2X3JlZ2lvbnMub1xuZHJpdmVycy9odi9NYWtlZmlsZToxODptc2h2X3Jvb3QtJChDT05GSUdfREVCVUdfRlMpICYjNDM7PSBtc2h2X2RlYnVnZnMub1xuZHJpdmVycy9odi9NYWtlZmlsZToxOTptc2h2X3Jvb3QtJChDT05GSUdfVFJBQ0VQT0lOVFMpICYjNDM7PSBtc2h2X3RyYWNlLm9cbmRyaXZlcnMvaHYvTWFrZWZpbGUtMjAtbXNodl92dGwteSA6PSBtc2h2X3Z0bF9tYWluLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIxMTUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBhIEh5cGVydmlzb3ItUmVsYXRlZCBJbmZpbmliYW5kIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgdGhhdCBgQ09ORklHX01TSFZfUk9PVGAgZmxhZy4uLiBIbW0sIHRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgc3VnZ2VzdGluZyBhIE1pY3Jvc29mdCBIeXBlci1WIGVudmlyb25tZW50LCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIHJvb3QtbGV2ZWwgYWNjZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhhdCBpbXBhY3RzIEluZmluaWJhbmQgYW5kIHBvdGVudGlhbGx5IE9wZW4gRGF0YSBQYXRoIChPRFApIG9wZXJhdGlvbnMuCgpNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpZyBpbnRvIHRoZSBJbmZpbmliYW5kIGNvZGUsIGFuZCBJIGtub3cgd2hlcmUgdG8gc3RhcnQuIExldCYjMzk7cyBsb29rIGF0IGBkcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jYC4gVGhhdCBmaWxlIGlzIGEgbGlrZWx5IGNhbmRpZGF0ZSBmb3IgaGFuZGxpbmcgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIE9EUCBpbnRlcmFjdGlvbiwgd2hpY2ggd291bGQgYmUgY2VudHJhbCB0byBhIGh5cGVydmlzb3IgZW52aXJvbm1lbnQgbGlrZSBIeXBlci1WLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyBVc2VyIE1lbW9yeSAoVU1FTSkgd2l0aCB0aGUgZmxhZyBzZXQgdG8gc2VlIGhvdyByb290IGFjY2VzcyB3b3VsZCBhZmZlY3QgdGhlIGNvbmZpZ3VyYXRpb24uIEkgd2FudCB0byBzZWUgaG93IHRoYXQgZmxhZyBjaGFuZ2VzIHRoZSBoYW5kbGluZyBvZiBtZW1vcnkgYW5kIGFjY2VzcyBjb250cm9sIHdpdGhpbiB0aGUgY29udGV4dCBvZiBPcGVuIERhdGEgUGF0aCwgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byBhIEh5cGVyLVYgcm9vdCBpbnN0YW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dW1lbV9vZHAubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL01ha2VmaWxlPTIxPWliX2NvcmUtJChDT05GSUdfSU5GSU5JQkFORF9VU0VSX01FTSkgJiM0Mzs9IHVtZW0ubyB1bWVtX2RtYWJ1Zi5vXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS9NYWtlZmlsZToyMjppYl9jb3JlLSQoQ09ORklHX0lORklOSUJBTkRfT05fREVNQU5EX1BBR0lORykgJiM0Mzs9IHVtZW1fb2RwLm9cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL01ha2VmaWxlLTIzLWliX2NvcmUtJChDT05GSUdfSU5GSU5JQkFORF9VU0VSX0FDQ0VTU19DT1JFKSAmIzQzOz0gaWJfY29yZV91dmVyYnMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjU1MAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGBDT05GSUdfSU5GSU5JQkFORF9PTl9ERU1BTkRfUEFHSU5HYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIHRoZSBzeXN0ZW0gaXMgcG9pbnRpbmcgbWUgdG93YXJkcyBgQ09ORklHX0lORklOSUJBTkRfT05fREVNQU5EX1BBR0lOR2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBzZXR0aW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGVyZSYjMzk7cyB0aGUgYmVzdCBwbGFjZSB0byBnZXQgYSBnb29kIGhhbmRsZSBvbiBob3cgdGhpcyBpcyB3b3JraW5nPyYjMzQ7IFRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGFuIEluZmluaUJhbmQtcmVsYXRlZCBmZWF0dXJlIGxpa2Ugb24tZGVtYW5kIHBhZ2luZyBpcyBhbHdheXMgdGhlIHJlbGV2YW50IHRlc3RpbmcgY29kZS4gU28sIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoYXQuIExldCBtZSB0YWtlIGEgbG9vayBhdCBgbGliL3Rlc3RfaG1tLmNgLiBIb3BlZnVsbHksIGl0JiMzOTtsbCBwcm92aWRlIHNvbWUgY2xlYXIgZXhhbXBsZXMgb2YgaG93IHRoaXMgb24tZGVtYW5kIHBhZ2luZyBpcyB0ZXN0ZWQgYW5kIHVzZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgSW5maW5pQmFuZCBzdGFjay4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBhbmQgaW1wbGljYXRpb25zIG9mIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Rlc3RfaG1tLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL01ha2VmaWxlPTEwMj1vYmotJChDT05GSUdfVEVTVF9MT0NLVVApICYjNDM7PSB0ZXN0X2xvY2t1cC5vXG5saWIvTWFrZWZpbGU6MTAzOm9iai0kKENPTkZJR19URVNUX0hNTSkgJiM0Mzs9IHRlc3RfaG1tLm9cbmxpYi9NYWtlZmlsZS0xMDQtb2JqLSQoQ09ORklHX1RFU1RfRlJFRV9QQUdFUykgJiM0Mzs9IHRlc3RfZnJlZV9wYWdlcy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyOTAzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gVGVzdGluZyBDb25zaWRlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYENPTkZJR19URVNUX0hNTWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFyZSB0aGUgcmVsYXRlZCBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gZW5hYmxlIGZvciBlZmZlY3RpdmUgdGVzdGluZz8gSSBuZWVkIHRvIGJ1aWxkIGEgY29tcHJlaGVuc2l2ZSBsaXN0LgoKUmlnaHQsIHNvIGJlc2lkZXMgYFRFU1RfSE1NYCBpdHNlbGYsIEkgYWxzbyBrbm93IHRoYXQgYEhNTV9NSVJST1JgIGlzIGludHJpbnNpY2FsbHkgbGlua2VkLiBFdmVuIHRob3VnaCBgSE1NX01JUlJPUmAgaXMgc2VsZWN0ZWQgYnkgYFRFU1RfSE1NYCwgaXQmIzM5O3MgY29yZSB0byB0aGUgZnVuY3Rpb25hbGl0eSwgc28gaXQgbmVlZHMgdG8gYmUgZXhwbGljaXRseSBsaXN0ZWQgYXMgYSBrZXkgZGVwZW5kZW5jeS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBpdCYjMzk7cyBjbGVhci4KClRoZW4sIEkmIzM5O20gbm90aW5nIHRoZSBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb25zIHJlcXVpcmVkOiBgRFJNX0FDQ0VMX0FNRFhETkFgLCBgRFJNX0dQVVNWTWAsIGBEUk1fTk9VVkVBVV9TVk1gLCBgTVNIVl9ST09UYCwgYW5kIGBJTkZJTklCQU5EX09OX0RFTUFORF9QQUdJTkdgLiBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgdGhlc2UgdG8gZW5zdXJlIGFsbCByZWxldmFudCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBkdXJpbmcgbXkgdGVzdGluZy4KCk5vdywgYSBrZXkgcXVlc3Rpb246IGNhbiBJIGdldCBhd2F5IHdpdGgganVzdCBlbmFibGluZyBgVEVTVF9ITU1gIHRvIHZhbGlkYXRlIHRoZSBjb3JlIGxvZ2ljPyBZZXMsIGFmdGVyIHJldmlld2luZyB0aGUgc2V0dXAsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgZW5hYmxpbmcgYFRFU1RfSE1NYCBhbG9uZSBpcyBzdWZmaWNpZW50IGZvciB0aGUgaW5pdGlhbCBjb3JlIGxvZ2ljIHRlc3RpbmcuIEkmIzM5O20gc2F0aXNmaWVkLgoKRmluYWxseSwgSSYjMzk7bSBqdXN0IHF1aWNrbHkgY29uZmlybWluZyB0aGF0IGBITU1fTUlSUk9SYCBpcyBzZWxlY3RhYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSE1NX01JUlJPUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMjI4PWNvbmZpZyBaT05FX0RFVklDRVxuLS1cbm1tL0tjb25maWctMTI0OS0jXG5tbS9LY29uZmlnOjEyNTA6Y29uZmlnIEhNTV9NSVJST1Jcbm1tL0tjb25maWctMTI1MS1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM0NTIKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA2MTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgSE1NIChIYXJkd2FyZSBNYW5hZ2VkIE1lbW9yeSkgRmF1bHQgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIEhNTSBmYXVsdCBoYW5kbGVycyBhcmUgdHJpZ2dlcmVkIGFuZCB1c2VkLiBGaXJzdCwgdGhpcyBzZWVtcyB0byBiZSBhIGJvb2xlYW4gY29uZmlnIG9wdGlvbiB3aXRob3V0IGEgZGlyZWN0IHByb21wdCwgd2hpY2ggbWVhbnMgaXQgY2FuJiMzOTt0IGJlIGVuYWJsZWQgc3RhbmRhbG9uZS4gSXQmIzM5O3MgZGVwZW5kZW50IG9uIGBURVNUX0hNTWAgb3Igb25lIG9mIHRoZSBkZXZpY2UgZHJpdmVycy4KCk15IGtleSBmb2N1cyBoZXJlIGlzIG9uIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBmYXVsdCBoYW5kbGluZyBpcyBpbml0aWF0ZWQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgc3lzdGVtLiBJJiMzOTt2ZSBnb3QgYSBsaXN0IG9mIGltcG9ydGFudCBzeW1ib2xzIHRvIHRyYWNrOiBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgLCBgaG1tX3JhbmdlX2ZhdWx0YCwgYGhtbV9kb19mYXVsdGAsIGBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkYCwgYW5kIGBobW1fcmVjb3JkX2ZhdWx0YC4gSSYjMzk7bSBzdGFydGluZyB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaG93IHRoZXNlIGZ1bmN0aW9ucyByZWxhdGUgdG8gZWFjaCBvdGhlci4gSSYjMzk7dmUgYWxyZWFkeSBjb25maXJtZWQgYGhtbV9kb19mYXVsdGAsIGBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkYCwgYW5kIGBobW1fcmVjb3JkX2ZhdWx0YCBhcmUgc3RhdGljLCB3aGljaCBpcyBnb29kIHRvIGtub3cgZm9yIHNjb3BpbmcgYW5kIHZpc2liaWxpdHkuIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAgYW5kIGBobW1fcmFuZ2VfZmF1bHRgIGFyZSBleHBvcnRlZCwgd2hpY2ggaW1wbGllcyB0aGV5IGhhdmUgZXh0ZXJuYWwgdXNlIGNhc2VzLgoKTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBmYXVsdCBoYW5kbGluZyBpbnRlcmFjdHMgd2l0aCB2YXJpb3VzIGhhcmR3YXJlIGFyY2hpdGVjdHVyZXMuIEkmIzM5O3ZlIHN0YXJ0ZWQgc2Nhbm5pbmcgdGhlIGNvZGUgYmFzZSBmb3IgcmVsZXZhbnQgZnVuY3Rpb25zLiBJJiMzOTt2ZSBpZGVudGlmaWVkIHRoZSBmb2xsb3dpbmcgaW4gYGxpYi90ZXN0X2htbS5jYDogYGRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWRgLCBgZG1pcnJvcl9mYXVsdF91bmxvY2tlZGAsIGFuZCBgZG1pcnJvcl9yZWFkX3VubG9ja2VkYCB3aGljaCBpbmRpY2F0ZXMgdGhpcyBtb2R1bGUgaGFzIHRoZSB0ZXN0IGZ1bmN0aW9ucy4gVGhlbiBJIG1vdmVkIG9uIGFuZCBsb29rZWQgYXQgZnVuY3Rpb25zIGluIGRyaXZlciBkaXJlY3Rvcmllcy4KCmBkcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguY2AgaGFzIGBhaWUyX3BvcHVsYXRlX3JhbmdlYCwgd2hpY2ggaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBmYXVsdCBoYW5kbGluZyBmb3IgdGhpcyBzcGVjaWZpYyBhcmNoaXRlY3R1cmUuIEkgYWxzbyBub3RpY2VkIHRoYXQgdGhlIGBkcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jYCBtb2R1bGUgY29udGFpbnMgdGhlIGZ1bmN0aW9ucyBgZHJtX2dwdXN2bV9zY2FuX21tYCwgYGRybV9ncHVzdm1fZ2V0X3BhZ2VzYCwgYW5kIGBkcm1fZ3B1c3ZtX3JhbmdlX2V2aWN0YCwgc28gY2xlYXJseSBHUFUgYW5kIFNWTSBoYXZlIHNvbWUgaW52b2x2ZW1lbnQuIGBkcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N2bS5jYCBhbmQgYGRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmNgIGNvbnRhaW4gYG5vdXZlYXVfcmFuZ2VfZmF1bHRgIGFuZCBgbXNodl9yZWdpb25fcmFuZ2VfZmF1bHRgIHdoaWNoIGFyZSBhZGRpdGlvbmFsIGV4YW1wbGVzLgoKRmluYWxseSwgYGRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmNgIGlzIGltcG9ydGFudCB3aXRoIHRoZSBmdW5jdGlvbiBgaWJfdW1lbV9vZHBfbWFwX2RtYV9hbmRfbG9ja2AsIHNvIGl0IGlzIGNsZWFyIHRoYXQgSW5maW5pYmFuZCBpcyBpbXBvcnRhbnQuCgpTbywganVzdCB0byByZWNhcCB0aGUgZnVuY3Rpb25zIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIEkmIzM5O20gZ29pbmcgdG8gbGlzdDoKCiogICBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgCiogICBgaG1tX3JhbmdlX2ZhdWx0YAoqICAgYGhtbV9kb19mYXVsdGAKKiAgIGBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkYAoqICAgYGhtbV9yZWNvcmRfZmF1bHRgCiogICBgZG1pcnJvcl9yYW5nZV9mYXVsdF91bmxvY2tlZGAKKiAgIGBkbWlycm9yX2ZhdWx0X3VubG9ja2VkYAoqICAgYGRtaXJyb3JfcmVhZF91bmxvY2tlZGAKClRoZXNlIGFyZSBteSBmb2N1cyBwb2ludHMuIEkmIzM5O20gYnVpbGRpbmcgYW4gdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlc2UgY29yZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCBwb3RlbnRpYWwgZmF1bHQgdHJpZ2dlcnMuCgpPa2F5LCBsZXQmIzM5O3MgdmVyaWZ5IHRoYXQgdGhlIGNvbmZpZyBvcHRpb25zIGFsaWduIHdpdGggd2hhdCBJJiMzOTttIHNlZWluZzogYFRFU1RfSE1NYCwgYERSTV9BQ0NFTF9BTURYRE5BYCwgYERSTV9HUFVTVk1gLCBgRFJNX05PVVZFQVVfU1ZNYCwgYE1TSFZfUk9PVGAsIGFuZCBgSU5GSU5JQkFORF9PTl9ERU1BTkRfUEFHSU5HYC4gSSBzaG91bGQgY2hlY2sgaWYgdGhlcmUgYXJlIG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLCBzbyBsZXQmIzM5O3MgY3Jvc3MtcmVmZXJlbmNlIGBEUk1fQUNDRUxfQU1EWEROQWAgd2l0aGluIHRoZSBhcHByb3ByaWF0ZSBgS2NvbmZpZ2AgZmlsZSBpbiB0aGUgZHJpdmVyIGRpcmVjdG9yeSB0byBlbnN1cmUgSSYjMzk7bSBjYXB0dXJpbmcgYWxsIHJlbGF0ZWQgc2V0dGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBEUk1fQUNDRUxfQU1EWEROQSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYWNjZWwvYW1keGRuYS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYWNjZWwvYW1keGRuYS9LY29uZmlnLTItXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvS2NvbmZpZzozOmNvbmZpZyBEUk1fQUNDRUxfQU1EWEROQVxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL0tjb25maWctNC1cdHRyaXN0YXRlIFwmIzM0O0FNRCBBSSBFbmdpbmVcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUwMTYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBFeHBsb3JhdGlvbioqCgpSaWdodCwgdGhhdCYjMzk7cyBzZXR0bGVkLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB2ZXJpZnkgdGhlIHN0YXR1cyBvZiBgRFJNX0dQVVNWTWAuIEkgbmVlZCB0byBlbnN1cmUgaXQmIzM5O3MgcHJvcGVybHkgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBidWlsZCBzeXN0ZW0uIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgYmUgaGVhZGluZyBvdmVyIHRvIGBkcml2ZXJzL2dwdS9kcm0vS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSByZWxldmFudCBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIG9wdGlvbnMgZm9yIERSTS1yZWxhdGVkIGZlYXR1cmVzIHJlc2lkZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgaXQmIzM5O3MgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIGJ1aWx0IGFzIGEgbW9kdWxlLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBpbXBhY3QgaXRzIGF2YWlsYWJpbGl0eS4gSSBleHBlY3QgdG8gY29uZmlybSBteSBhc3N1bXB0aW9uIHRoYXQgaXQgaXMgZW5hYmxlZCwgYnV0IEkgbmVlZCB0byBlbnN1cmUgdGhpcyBpcyBjb3JyZWN0IGJlZm9yZSBtb3ZpbmcgZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERSTV9HUFVTVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2dwdS9kcm0vS2NvbmZpZz0yMjE9Y29uZmlnIFJVU1RfRFJNX0dQVVZNXG4tLVxuZHJpdmVycy9ncHUvZHJtL0tjb25maWctMjI3LVxuZHJpdmVycy9ncHUvZHJtL0tjb25maWc6MjI4OmNvbmZpZyBEUk1fR1BVU1ZNXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZy0yMjktXHR0cmlzdGF0ZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTMyOQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBOb3V2ZWF1JiMzOTtzIFNWTSBDb25maWd1cmF0aW9uKioKClllcy4gT2theSwgc28gd2UmIzM5O3JlIG9uIHRoZSByaWdodCB0cmFjay4gVGltZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBEUk1fTk9VVkVBVV9TVk1gIGlzIGVuYWJsZWQgYW5kIGhvdyBpdCYjMzk7cyBkZWZpbmVkLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB0aGUgYGRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gZmluZCB0aGUgY29uZGl0aW9uYWwgbG9naWMgYW5kIGRlcGVuZGVuY2llcyBmb3IgdGhlIE5vdXZlYXUgZHJpdmVyJiMzOTtzIFN5c3RlbSBNZW1vcnkgTWFuYWdlbWVudCAoU1ZNKSBzdXBwb3J0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBpdCYjMzk7cyBldmVuIGNvbXBpbGVkIGluLCBpZiBpdCYjMzk7cyBhIG1vZHVsZSwgYW5kIHdoYXQgb3RoZXIgb3B0aW9ucyBtaWdodCBiZSByZWxldmFudCBmb3IgbXkgY3VycmVudCBpbnZlc3RpZ2F0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERSTV9OT1VWRUFVX1NWTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvS2NvbmZpZz04Nj1jb25maWcgRFJNX05PVVZFQVVfQkFDS0xJR0hUXG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvS2NvbmZpZy05My1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L0tjb25maWc6OTQ6Y29uZmlnIERSTV9OT1VWRUFVX1NWTVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvS2NvbmZpZy05NS1cdGJvb2wgXCYjMzQ7KEVYUEVSSU1FTlRBTCkgRW5hYmxlIFNWTSAoU2hhcmVkIFZpcnR1YWwgTWVtb3J5KSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NjgwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3M6CgoqKkludGVybmFsIE1lbnRhbCBDaGVja2xpc3QqKgoKWWVzLiBPa2F5LCBJJiMzOTt2ZSBnb3QgYSBoYW5kbGUgb24gdGhlIHRhc2suIE5vdywgd2hlcmUgdG8gc3RhcnQuLi4gbGV0JiMzOTtzIHBpbnBvaW50IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbG9va2luZyBhdCB0aGUgY29ycmVjdCBmaWxlLiBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyB0aGUgYE1TSFZfUk9PVGAgdmFyaWFibGUgd2l0aGluIHRoZSBgZHJpdmVycy9odi9LY29uZmlnYCBmaWxlLiBUaGF0IHNlZW1zIGxpa2UgdGhlIHJpZ2h0IHBhdGggdG8gdHJhY2sgZG93biB0aGF0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTVNIVl9ST09UJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9odi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaHYvS2NvbmZpZz02MD1jb25maWcgSFlQRVJWX1ZNQlVTXG4tLVxuZHJpdmVycy9odi9LY29uZmlnLTY3LVxuZHJpdmVycy9odi9LY29uZmlnOjY4OmNvbmZpZyBNU0hWX1JPT1RcbmRyaXZlcnMvaHYvS2NvbmZpZy02OS1cdHRyaXN0YXRlIFwmIzM0O01pY3Jvc29mdCBIeXBlci1WIHJvb3QgcGFydGl0aW9uIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU5MjAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGlubmVyIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgSW5maW5pYmFuZCBQYWdpbmcgQ29uZmlndXJhdGlvbioqCgpSaWdodC4gVGltZSB0byBkaWcgaW4uIFRoZSBpbml0aWFsIHByb21wdCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBzbyBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggdGhlIG9idmlvdXM6IGNvbmZpcm1pbmcgdGhlIHNldHRpbmcgZm9yIGBJTkZJTklCQU5EX09OX0RFTUFORF9QQUdJTkdgLiBJJiMzOTtsbCBpbW1lZGlhdGVseSBqdW1wIHRvIHdoZXJlIGl0JiMzOTtzIGRlZmluZWQ6IGBkcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZ2AuIE5vIG5lZWQgdG8gd2FzdGUgdGltZSBlbHNld2hlcmU7IHRoaXMgaXMgbGlrZWx5IHdoZXJlIGFsbCB0aGUgcmVsZXZhbnQgZGV0YWlscyBhcmUgaG91c2VkLCBhbmQgSSBjYW4gcXVpY2tseSBlc3RhYmxpc2ggdGhlIGN1cnJlbnQgc3RhdHVzIGFuZCByZWxldmFudCBkZXBlbmRlbmNpZXMuIFRoaXMgaXMgdXN1YWxseSB0aGUgZmlyc3Qgc3RvcCBmb3IgdW5kZXJzdGFuZGluZyBob3cgYSBmZWF0dXJlIGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBJbmZpbmliYW5kIHN1YnN5c3RlbS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJTkZJTklCQU5EX09OX0RFTUFORF9QQUdJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZz00ND1jb25maWcgSU5GSU5JQkFORF9VU0VSX01FTVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTUwLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NTE6Y29uZmlnIElORklOSUJBTkRfT05fREVNQU5EX1BBR0lOR1xuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNTItXHRib29sIFwmIzM0O0luZmluaUJhbmQgb24tZGVtYW5kIHBhZ2luZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDAwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MjUyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgaXQmIzM5O3MgYSBkaXJlY3Qgc3RyZWFtIG9mIG15IHRob3VnaHRzOgoKKipDaGVja2luZyBgVEVTVF9ITU1gIGluIGBsaWIvS2NvbmZpZy5kZWJ1Z2AqKgoKUmlnaHQsIGhlcmUgd2UgZ28uIExldCYjMzk7cyBtYWtlIHN1cmUgYFRFU1RfSE1NYCBpcyBjb25maWd1cmVkIGNvcnJlY3RseSwgb3IgYXQgbGVhc3QgZXhpc3RzIGFuZCBpcyBiZWhhdmluZyBhcyBleHBlY3RlZC4gVGhhdCYjMzk7cyBhIGdvb2QgZmlyc3Qgc3RlcCB0byB0cm91Ymxlc2hvb3Rpbmcgd2hhdGV2ZXImIzM5O3MgZ29pbmcgb24uIFdlIGtub3cgdGhpcyBzcGVjaWZpYyB2YXJpYWJsZSBjb250cm9scyB0aGUgSE1NIHRlc3Qgd2hpY2ggd2UgYXJlIGRlYnVnZ2luZy4gVGhpcyBzaG91bGQgYmUgc3RyYWlnaHRmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVEVTVF9ITU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1ZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1Zz0zMzE4PWNvbmZpZyBURVNUX01FTUlOSVRcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzI1LVxubGliL0tjb25maWcuZGVidWc6MzMyNjpjb25maWcgVEVTVF9ITU1cbmxpYi9LY29uZmlnLmRlYnVnLTMzMjctXHR0cmlzdGF0ZSBcJiMzNDtUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY1MDgKCQkJCQkJCW91dHB1dDogMjYxCgkJCQkJCQl0aG91Z2h0czogMjUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQcm9wb3NlZCBNZW1vcnkgTWFuYWdlbWVudCBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9uIHN5bWJvbHM6IGBURVNUX0hNTWAsIGBEUk1fQUNDRUxfQU1EWEROQWAsIGBEUk1fR1BVU1ZNYCwgYERSTV9OT1VWRUFVX1NWTWAsIGBNU0hWX1JPT1RgLCBhbmQgYElORklOSUJBTkRfT05fREVNQU5EX1BBR0lOR2AuIEJhc2VkIG9uIHRoZSBjb250ZXh0LCBJJiMzOTttIGFscmVhZHkgdGhpbmtpbmcgdGhlc2UgYXJlIHJlbGF0ZWQgdG8gc29tZSBmb3JtIG9mIG1lbW9yeSBtYW5hZ2VtZW50IG9yIGRldmljZSBkcml2ZXIgaW50ZXJhY3Rpb24sIGxpa2VseSBhcm91bmQgSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudCAoSE1NKSBnaXZlbiB0aGUgcHJlc2VuY2Ugb2YgYFRFU1RfSE1NYC4KCk5vdywgdGhlIGNvcmUgc3ltYm9scyBvZiBpbnRlcmVzdCBzZWVtIHRvIGJlIHRoZXNlICYjMzQ7ZmF1bHQmIzM0OyByZWxhdGVkIGZ1bmN0aW9uczogYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YCwgYGhtbV9yYW5nZV9mYXVsdGAsIGBobW1fZG9fZmF1bHRgLCBgaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZGAsIGBobW1fcmVjb3JkX2ZhdWx0YCwgYGRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWRgLCBgZG1pcnJvcl9mYXVsdF91bmxvY2tlZGAsIGFuZCBgZG1pcnJvcl9yZWFkX3VubG9ja2VkYC4gVGhlIG5hbWluZyBjb252ZW50aW9uIHN0cm9uZ2x5IHN1Z2dlc3RzIGEgY2hhbmdlIGluIGhvdyBtZW1vcnkgZmF1bHRzIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxvY2tpbmcgYW5kIHRpbWVvdXQgYmVoYXZpb3IsIHdoaWNoIGFsc28gdGllcyBpbiBuaWNlbHkgd2l0aCB0aGUgY29uZmlncy4gSSBhbSBub3RpbmcgdGhlIGluY2x1c2lvbiBvZiBgZG1pcnJvcmAgd2hpY2ggaGludHMgYXQgc29tZSBmb3JtIG9mIGRhdGEgbWlycm9yaW5nLgoKRnJvbSB0aGUgZGVzY3JpcHRpb24sIEkgc2VlIHRoaXMgaXMgaW50cm9kdWNpbmcgYSBuZXcgdW5sb2NrZWQgdGltZW91dCB2YXJpYW50IGZvciBITU0gcmFuZ2UgZmF1bHRzLCBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgLCBhbmQgaXQmIzM5O3MgcmVmYWN0b3JpbmcgdGhlIGV4aXN0aW5nIGBobW1fcmFuZ2VfZmF1bHRgIHRvIHVzZSBhIGxvY2tlZCBoZWxwZXIgZnVuY3Rpb24uIFRoaXMgaXMgc2lnbmlmaWNhbnQuIEl0JiMzOTtzIG5vdCBqdXN0IGEgbWlub3IgdHdlYWs7IGl0JiMzOTtzIGEgZnVuZGFtZW50YWwgc2hpZnQgaW4gaG93IGZhdWx0cyBhcmUgbWFuYWdlZCwgZXNwZWNpYWxseSBhcm91bmQgbG9ja2luZyBzZW1hbnRpY3MuIEkgY2FuIHNlZSB0aGlzIGlzIGxpa2VseSBhZmZlY3Rpbmcgc2V2ZXJhbCBkcml2ZXJzIGFuZCB0aGUgSE1NIHRlc3QgbW9kdWxlLgoKTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhlIHJvYnVzdG5lc3Mgb2YgdGhlIGNoYW5nZXMuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgdW5sb2NrZWQgdmFyaWFudHMgYWx3YXlzIGluY3JlYXNlcyB0aGUgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMgb3Igb3RoZXIgY29uY3VycmVuY3kgaXNzdWVzLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBmb2N1cyBvbiBmdXp6aW5nIHRoZXNlIG5ldyByZXRyeSBhbmQgbG9ja2luZyBsb2dpYywgYXMgd2VsbCBhcyBlbnN1cmUgdGhlIG5ldyBsb2NraW5nIG1lY2hhbmlzbXMgYXJlIHRob3JvdWdobHkgdGVzdGVkLiBUaGVzZSBjaGFuZ2VzIHdpbGwgaGF2ZSBzdWJzdGFudGlhbCBpbXBhY3Qgb24gZGV2aWNlIGRyaXZlciBiZWhhdmlvciwgYW5kIG1heSBjYXVzZSB1bmV4cGVjdGVkIGNoYW5nZXMgaW4gc3lzdGVtIHJlbGlhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VEVTVF9ITU0mIzM0OywKICAgICYjMzQ7RFJNX0FDQ0VMX0FNRFhETkEmIzM0OywKICAgICYjMzQ7RFJNX0dQVVNWTSYjMzQ7LAogICAgJiMzNDtEUk1fTk9VVkVBVV9TVk0mIzM0OywKICAgICYjMzQ7TVNIVl9ST09UJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkRfT05fREVNQU5EX1BBR0lORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2htbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0JiMzNDssCiAgICAmIzM0O2htbV9yYW5nZV9mYXVsdCYjMzQ7LAogICAgJiMzNDtobW1fZG9fZmF1bHQmIzM0OywKICAgICYjMzQ7aG1tX3JhbmdlX2ZhdWx0X2xvY2tlZCYjMzQ7LAogICAgJiMzNDtobW1fcmVjb3JkX2ZhdWx0JiMzNDssCiAgICAmIzM0O2RtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWQmIzM0OywKICAgICYjMzQ7ZG1pcnJvcl9mYXVsdF91bmxvY2tlZCYjMzQ7LAogICAgJiMzNDtkbWlycm9yX3JlYWRfdW5sb2NrZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyB1bmxvY2tlZCB0aW1lb3V0IHZhcmlhbnQgZm9yIEhNTSByYW5nZSBmYXVsdHMgKGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGApIGFuZCByZWZhY3RvcnMgdGhlIGV4aXN0aW5nIGBobW1fcmFuZ2VfZmF1bHRgIHRvIHVzZSBhIGxvY2tlZCBoZWxwZXIuIEl0IGFsc28gdXBkYXRlcyBzZXZlcmFsIGRyaXZlcnMgYW5kIHRoZSBITU0gdGVzdCBtb2R1bGUgdG8gdXNlIHRoZSBuZXcgdW5sb2NrZWQgdmFyaWFudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRldmljZSBkcml2ZXIgaW50ZXJhY3Rpb24sIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgcmV0cnkgYW5kIGxvY2tpbmcgbG9naWMgaXMgcm9idXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtURVNUX0hNTSYjMzQ7LAogICAgJiMzNDtEUk1fQUNDRUxfQU1EWEROQSYjMzQ7LAogICAgJiMzNDtEUk1fR1BVU1ZNJiMzNDssCiAgICAmIzM0O0RSTV9OT1VWRUFVX1NWTSYjMzQ7LAogICAgJiMzNDtNU0hWX1JPT1QmIzM0OywKICAgICYjMzQ7SU5GSU5JQkFORF9PTl9ERU1BTkRfUEFHSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQmIzM0OywKICAgICYjMzQ7aG1tX3JhbmdlX2ZhdWx0JiMzNDssCiAgICAmIzM0O2htbV9kb19mYXVsdCYjMzQ7LAogICAgJiMzNDtobW1fcmFuZ2VfZmF1bHRfbG9ja2VkJiMzNDssCiAgICAmIzM0O2htbV9yZWNvcmRfZmF1bHQmIzM0OywKICAgICYjMzQ7ZG1pcnJvcl9yYW5nZV9mYXVsdF91bmxvY2tlZCYjMzQ7LAogICAgJiMzNDtkbWlycm9yX2ZhdWx0X3VubG9ja2VkJiMzNDssCiAgICAmIzM0O2RtaXJyb3JfcmVhZF91bmxvY2tlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHVubG9ja2VkIHRpbWVvdXQgdmFyaWFudCBmb3IgSE1NIHJhbmdlIGZhdWx0cyAoYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YCkgYW5kIHJlZmFjdG9ycyB0aGUgZXhpc3RpbmcgYGhtbV9yYW5nZV9mYXVsdGAgdG8gdXNlIGEgbG9ja2VkIGhlbHBlci4gSXQgYWxzbyB1cGRhdGVzIHNldmVyYWwgZHJpdmVycyBhbmQgdGhlIEhNTSB0ZXN0IG1vZHVsZSB0byB1c2UgdGhlIG5ldyB1bmxvY2tlZCB2YXJpYW50LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZGV2aWNlIGRyaXZlciBpbnRlcmFjdGlvbiwgd2hpY2ggc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyByZXRyeSBhbmQgbG9ja2luZyBsb2dpYyBpcyByb2J1c3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDowOToxMC43MjYwMTY5MTdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjAxNTI1NTAzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJURVNUX0hNTVwiLFxuICAgIFwiRFJNX0FDQ0VMX0FNRFhETkFcIixcbiAgICBcIkRSTV9HUFVTVk1cIixcbiAgICBcIkRSTV9OT1VWRUFVX1NWTVwiLFxuICAgIFwiTVNIVl9ST09UXCIsXG4gICAgXCJJTkZJTklCQU5EX09OX0RFTUFORF9QQUdJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dFwiLFxuICAgIFwiaG1tX3JhbmdlX2ZhdWx0XCIsXG4gICAgXCJobW1fZG9fZmF1bHRcIixcbiAgICBcImhtbV9yYW5nZV9mYXVsdF9sb2NrZWRcIixcbiAgICBcImhtbV9yZWNvcmRfZmF1bHRcIixcbiAgICBcImRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWRcIixcbiAgICBcImRtaXJyb3JfZmF1bHRfdW5sb2NrZWRcIixcbiAgICBcImRtaXJyb3JfcmVhZF91bmxvY2tlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgdW5sb2NrZWQgdGltZW91dCB2YXJpYW50IGZvciBITU0gcmFuZ2UgZmF1bHRzIChgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgKSBhbmQgcmVmYWN0b3JzIHRoZSBleGlzdGluZyBgaG1tX3JhbmdlX2ZhdWx0YCB0byB1c2UgYSBsb2NrZWQgaGVscGVyLiBJdCBhbHNvIHVwZGF0ZXMgc2V2ZXJhbCBkcml2ZXJzIGFuZCB0aGUgSE1NIHRlc3QgbW9kdWxlIHRvIHVzZSB0aGUgbmV3IHVubG9ja2VkIHZhcmlhbnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkZXZpY2UgZHJpdmVyIGludGVyYWN0aW9uLCB3aGljaCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IHJldHJ5IGFuZCBsb2NraW5nIGxvZ2ljIGlzIHJvYnVzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDA6MDk6MTAuNzI2MDI1ODg3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDM0MTQyODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiZDA4MTI2NDY4YTNkMjg4ZTM5NmZkNmU2ZjY5YTlmYzJjNzBhNjU5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDE2IDAwOjA5OjA4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdFxcbmluZGV4IDdkNjFiN2E4YjY1Yjc5Li5lMDIxMjE4YWRhNThmZSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL2htbS5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL21tL2htbS5yc3RcXG5AQCAtMTU2LDQyICsxNTYsNTcgQEAgRHVyaW5nIHRoZSBvcHMtXFx1MDAzZWludmFsaWRhdGUoKSBjYWxsYmFjayB0aGUgZGV2aWNlIGRyaXZlciBtdXN0IHBlcmZvcm0gdGhlXFxuIHVwZGF0ZSBhY3Rpb24gdG8gdGhlIHJhbmdlIChtYXJrIHJhbmdlIHJlYWQgb25seSwgb3IgZnVsbHkgdW5tYXAsIGV0Yy4pLiBUaGVcXG4gZGV2aWNlIG11c3QgY29tcGxldGUgdGhlIHVwZGF0ZSBiZWZvcmUgdGhlIGRyaXZlciBjYWxsYmFjayByZXR1cm5zLlxcbiBcXG4tV2hlbiB0aGUgZGV2aWNlIGRyaXZlciB3YW50cyB0byBwb3B1bGF0ZSBhIHJhbmdlIG9mIHZpcnR1YWwgYWRkcmVzc2VzLCBpdCBjYW5cXG4tdXNlOjpcXG4rV2hlbiB0aGUgZGV2aWNlIGRyaXZlciB3YW50cyB0byBwb3B1bGF0ZSBhIHJhbmdlIG9mIHZpcnR1YWwgYWRkcmVzc2VzLCB0aGVcXG4rbm9ybWFsIGludGVyZmFjZSBpczo6XFxuIFxcbi0gIGludCBobW1fcmFuZ2VfZmF1bHQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpO1xcbisgIGludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0KTtcXG4gXFxuIEl0IHdpbGwgdHJpZ2dlciBhIHBhZ2UgZmF1bHQgb24gbWlzc2luZyBvciByZWFkLW9ubHkgZW50cmllcyBpZiB3cml0ZSBhY2Nlc3MgaXNcXG4gcmVxdWVzdGVkIChzZWUgYmVsb3cpLiBQYWdlIGZhdWx0cyB1c2UgdGhlIGdlbmVyaWMgbW0gcGFnZSBmYXVsdCBjb2RlIHBhdGgganVzdFxcbi1saWtlIGEgQ1BVIHBhZ2UgZmF1bHQuIFRoZSB1c2FnZSBwYXR0ZXJuIGlzOjpcXG4rbGlrZSBhIENQVSBwYWdlIGZhdWx0LlxcbitcXG4rVGhlIGNhbGxlciBtdXN0IG5vdCBob2xkIGBgbW1hcF9yZWFkX2xvY2tgYCBiZWZvcmUgdGhlIGNhbGwuXFxuK2BgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKWBgIHRha2VzIHRoZSBtbWFwIHJlYWQgbG9jayBpbnRlcm5hbGx5IGFuZFxcbithbGxvd3MgYGBoYW5kbGVfbW1fZmF1bHQoKWBgIHRvIGRyb3AgaXQgZHVyaW5nIGZhdWx0IGhhbmRsaW5nLiBUaGlzIGlzIHJlcXVpcmVkXFxuK2ZvciBWTUFzIHdob3NlIGZhdWx0IGhhbmRsZXJzIG1heSByZWxlYXNlIHRoZSBtbWFwIGxvY2ssIGZvciBleGFtcGxlIHJlZ2lvbnNcXG4rbWFuYWdlZCBieSBgYHVzZXJmYXVsdGZkYGAuXFxuK1xcbitJZiB0aGUgbW1hcCBsb2NrIGlzIGRyb3BwZWQgb3IgdGhlIHJhbmdlIGlzIGludmFsaWRhdGVkLCB0aGUgZnVuY3Rpb24gcmVmcmVzaGVzXFxuK2BgcmFuZ2UtXFx1MDAzZW5vdGlmaWVyX3NlcWBgIGFuZCByZXN0YXJ0cyB0aGUgd2FsayBpbnRlcm5hbGx5LiBgYC1FSU5UUmBgIGlzIHJldHVybmVkXFxuK2lmIG1tYXAgbG9jayBhY3F1aXNpdGlvbiBpcyBpbnRlcnJ1cHRlZCBvciBhIGZhdGFsIHNpZ25hbCBpcyBwZW5kaW5nIGR1cmluZ1xcbityZXRyeSBoYW5kbGluZy5cXG4rXFxuK1RoZSB0aW1lb3V0IGlzIHNwZWNpZmllZCBpbiBqaWZmaWVzOyBwYXNzaW5nIGBgMGBgIG1lYW5zIHJldHJ5IGluZGVmaW5pdGVseS4gVGhlXFxuK3RpbWVvdXQgZXhpc3RzIHRvIHByZXNlcnZlIGNhbGxlciBwb2xpY3kgZm9yIHJlcGVhdGVkIG1tdS1ub3RpZmllciBpbnZhbGlkYXRpb25cXG4rYW5kIGlzIGNoZWNrZWQgYmV0d2VlbiByZXRyeSBhdHRlbXB0cy4gSE1NIGRvZXMgbm90IGludGVycnVwdCBwYWdlIGZhdWx0XFxuK2hhbmRsaW5nIHdoZW4gdGhlIHRpbWVvdXQgZXhwaXJlcywgYnV0IHJldHVybnMgYGAtRUJVU1lgYCBpZiB0aGUgcmV0cnkgYnVkZ2V0IGlzXFxuK2V4aGF1c3RlZCBiZWZvcmUgYSBzdGFibGUgcmFuZ2UgaXMgb2J0YWluZWQuXFxuK1xcbitUaGUgdXNhZ2UgcGF0dGVybiBpczo6XFxuIFxcbiAgaW50IGRyaXZlcl9wb3B1bGF0ZV9yYW5nZSguLi4pXFxuICB7XFxuICAgICAgIHN0cnVjdCBobW1fcmFuZ2UgcmFuZ2U7XFxuKyAgICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dDtcXG4gICAgICAgLi4uXFxuIFxcbisgICAgICB0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcXG4gICAgICAgcmFuZ2Uubm90aWZpZXIgPSBcXHUwMDI2aW50ZXJ2YWxfc3ViO1xcbiAgICAgICByYW5nZS5zdGFydCA9IC4uLjtcXG4gICAgICAgcmFuZ2UuZW5kID0gLi4uO1xcbiAgICAgICByYW5nZS5obW1fcGZucyA9IC4uLjtcXG4gXFxuLSAgICAgIGlmICghbW1nZXRfbm90X3plcm8oaW50ZXJ2YWxfc3ViLVxcdTAwM2Vub3RpZmllci5tbSkpXFxuKyAgICAgIGlmICghbW1nZXRfbm90X3plcm8oaW50ZXJ2YWxfc3ViLm1tKSlcXG4gICAgICAgICAgIHJldHVybiAtRUZBVUxUO1xcbiBcXG4gIGFnYWluOlxcbi0gICAgICByYW5nZS5ub3RpZmllcl9zZXEgPSBtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihcXHUwMDI2aW50ZXJ2YWxfc3ViKTtcXG4tICAgICAgbW1hcF9yZWFkX2xvY2sobW0pO1xcbi0gICAgICByZXQgPSBobW1fcmFuZ2VfZmF1bHQoXFx1MDAyNnJhbmdlKTtcXG4tICAgICAgaWYgKHJldCkge1xcbi0gICAgICAgICAgbW1hcF9yZWFkX3VubG9jayhtbSk7XFxuLSAgICAgICAgICBpZiAocmV0ID09IC1FQlVTWSlcXG4tICAgICAgICAgICAgICAgICBnb3RvIGFnYWluO1xcbi0gICAgICAgICAgcmV0dXJuIHJldDtcXG4tICAgICAgfVxcbi0gICAgICBtbWFwX3JlYWRfdW5sb2NrKG1tKTtcXG4rICAgICAgcmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXFx1MDAyNnJhbmdlLCB0aW1lb3V0KTtcXG4rICAgICAgaWYgKHJldClcXG4rICAgICAgICAgIGdvdG8gb3V0X3B1dDtcXG4gXFxuICAgICAgIHRha2VfbG9jayhkcml2ZXItXFx1MDAzZXVwZGF0ZSk7XFxuLSAgICAgIGlmIChtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeShcXHUwMDI2bmksIHJhbmdlLm5vdGlmaWVyX3NlcSkge1xcbisgICAgICBpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkocmFuZ2Uubm90aWZpZXIsIHJhbmdlLm5vdGlmaWVyX3NlcSkpIHtcXG4gICAgICAgICAgIHJlbGVhc2VfbG9jayhkcml2ZXItXFx1MDAzZXVwZGF0ZSk7XFxuICAgICAgICAgICBnb3RvIGFnYWluO1xcbiAgICAgICB9XFxuQEAgLTIwMCwxMyArMjE1LDMxIEBAIGxpa2UgYSBDUFUgcGFnZSBmYXVsdC4gVGhlIHVzYWdlIHBhdHRlcm4gaXM6OlxcbiAgICAgICAgKiB1bmRlciB0aGUgdXBkYXRlIGxvY2sgKi9cXG4gXFxuICAgICAgIHJlbGVhc2VfbG9jayhkcml2ZXItXFx1MDAzZXVwZGF0ZSk7XFxuLSAgICAgIHJldHVybiAwO1xcbisgICAgICByZXQgPSAwO1xcbitcXG4rIG91dF9wdXQ6XFxuKyAgICAgIG1tcHV0KGludGVydmFsX3N1Yi5tbSk7XFxuKyAgICAgIHJldHVybiByZXQ7XFxuICB9XFxuIFxcbiBUaGUgZHJpdmVyLVxcdTAwM2V1cGRhdGUgbG9jayBpcyB0aGUgc2FtZSBsb2NrIHRoYXQgdGhlIGRyaXZlciB0YWtlcyBpbnNpZGUgaXRzXFxuIGludmFsaWRhdGUoKSBjYWxsYmFjay4gVGhhdCBsb2NrIG11c3QgYmUgaGVsZCBiZWZvcmUgY2FsbGluZ1xcbiBtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeSgpIHRvIGF2b2lkIGFueSByYWNlIHdpdGggYSBjb25jdXJyZW50IENQVSBwYWdlIHRhYmxlXFxuLXVwZGF0ZS5cXG4rdXBkYXRlLiBUaGUgcmV0cnkgY2hlY2sgbXVzdCB1c2UgdGhlIHNhbWUgbm90aWZpZXIgYW5kIHNlcXVlbmNlIG51bWJlciBzdG9yZWRcXG4raW4gYGByYW5nZWBgIGJ5IGBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKWBgLlxcbitcXG4rSG9sZGluZyB0aGUgbW1hcCBsb2NrIGFjcm9zcyBITU0gZmF1bHRzXFxuKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbitcXG4rTW9zdCBjYWxsZXJzIHNob3VsZCB1c2UgYGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpYGAuIElmIGEgZHJpdmVyXFxuK3JlYWxseSBuZWVkcyB0byBob2xkIHRoZSBtbWFwIGxvY2sgYWNyb3NzIHdvcmsgb3V0c2lkZSBITU0sIGl0IGNhbiB1c2U6OlxcbitcXG4rICBpbnQgaG1tX3JhbmdlX2ZhdWx0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKTtcXG4rXFxuK1RoZSBtbWFwIGxvY2sgbXVzdCBiZSBoZWxkIGJ5IHRoZSBjYWxsZXIgYW5kIHdpbGwgcmVtYWluIGhlbGQgb24gcmV0dXJuLiBUaGlzXFxuK2ludGVyZmFjZSBjYW5ub3Qgc3VwcG9ydCBWTUFzIHdob3NlIGZhdWx0IGhhbmRsZXJzIG5lZWQgdG8gZHJvcCB0aGUgbW1hcCBsb2NrLlxcbitOZXcgY2FsbGVycyBzaG91bGQgcHJlZmVyIGBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKWBgIHVubGVzcyB0aGV5XFxuK2hhdmUgYSBzcGVjaWZpYyByZXF1aXJlbWVudCB0byBrZWVwIHRoZSBtbWFwIGxvY2sgaGVsZCBhY3Jvc3MgdGhlIGNhbGwuXFxuIFxcbiBMZXZlcmFnZSBkZWZhdWx0X2ZsYWdzIGFuZCBwZm5fZmxhZ3NfbWFza1xcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbkBAIC0yMjEsOCArMjU0LDggQEAgcGVybWlzc2lvbiwgaXQgc2V0czo6XFxuICAgICByYW5nZS1cXHUwMDNlZGVmYXVsdF9mbGFncyA9IEhNTV9QRk5fUkVRX0ZBVUxUO1xcbiAgICAgcmFuZ2UtXFx1MDAzZXBmbl9mbGFnc19tYXNrID0gMDtcXG4gXFxuLWFuZCBjYWxscyBobW1fcmFuZ2VfZmF1bHQoKSBhcyBkZXNjcmliZWQgYWJvdmUuIFRoaXMgd2lsbCBmaWxsIGZhdWx0IGFsbCBwYWdlc1xcbi1pbiB0aGUgcmFuZ2Ugd2l0aCBhdCBsZWFzdCByZWFkIHBlcm1pc3Npb24uXFxuK2FuZCBjYWxscyB0aGUgSE1NIHJhbmdlIGZhdWx0IGhlbHBlciBhcyBkZXNjcmliZWQgYWJvdmUuIFRoaXMgd2lsbCBmYXVsdFxcbithbGwgcGFnZXMgaW4gdGhlIHJhbmdlIHdpdGggYXQgbGVhc3QgcmVhZCBwZXJtaXNzaW9uLlxcbiBcXG4gTm93IGxldCdzIHNheSB0aGUgZHJpdmVyIHdhbnRzIHRvIGRvIHRoZSBzYW1lIGV4Y2VwdCBmb3Igb25lIHBhZ2UgaW4gdGhlIHJhbmdlIGZvclxcbiB3aGljaCBpdCB3YW50cyB0byBoYXZlIHdyaXRlIHBlcm1pc3Npb24uIE5vdyBkcml2ZXIgc2V0OjpcXG5AQCAtMjM2LDkgKzI2OSw5IEBAIGFkZHJlc3MgPT0gcmFuZ2UtXFx1MDAzZXN0YXJ0ICsgKGluZGV4X29mX3dyaXRlIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpIGl0IHdpbGwgZmF1bHQgd2l0aFxcbiB3cml0ZSBwZXJtaXNzaW9uIGkuZS4sIGlmIHRoZSBDUFUgcHRlIGRvZXMgbm90IGhhdmUgd3JpdGUgcGVybWlzc2lvbiBzZXQgdGhlbiBITU1cXG4gd2lsbCBjYWxsIGhhbmRsZV9tbV9mYXVsdCgpLlxcbiBcXG4tQWZ0ZXIgaG1tX3JhbmdlX2ZhdWx0IGNvbXBsZXRlcyB0aGUgZmxhZyBiaXRzIGFyZSBzZXQgdG8gdGhlIGN1cnJlbnQgc3RhdGUgb2ZcXG4tdGhlIHBhZ2UgdGFibGVzLCBpZSBITU1fUEZOX1ZBTElEIHwgSE1NX1BGTl9XUklURSB3aWxsIGJlIHNldCBpZiB0aGUgcGFnZSBpc1xcbi13cml0YWJsZS5cXG4rQWZ0ZXIgdGhlIEhNTSByYW5nZSBmYXVsdCBoZWxwZXIgY29tcGxldGVzIHRoZSBmbGFnIGJpdHMgYXJlIHNldCB0byB0aGVcXG4rY3VycmVudCBzdGF0ZSBvZiB0aGUgcGFnZSB0YWJsZXMsIGllIEhNTV9QRk5fVkFMSUQgfCBITU1fUEZOX1dSSVRFIHdpbGwgYmVcXG4rc2V0IGlmIHRoZSBwYWdlIGlzIHdyaXRhYmxlLlxcbiBcXG4gXFxuIFJlcHJlc2VudCBhbmQgbWFuYWdlIGRldmljZSBtZW1vcnkgZnJvbSBjb3JlIGtlcm5lbCBwb2ludCBvZiB2aWV3XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNjZWwvYW1keGRuYS9haWUyX2N0eC5jIGIvZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FpZTJfY3R4LmNcXG5pbmRleCA1NDQ4Njk2MGNiZjVlNi4uYjViNGNhMjYzMDAyZGEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FpZTJfY3R4LmNcXG4rKysgYi9kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguY1xcbkBAIC0xMDM0LDcgKzEwMzQsNyBAQCBzdGF0aWMgaW50IGFpZTJfcG9wdWxhdGVfcmFuZ2Uoc3RydWN0IGFtZHhkbmFfZ2VtX29iaiAqYWJvKVxcbiBcXHRib29sIGZvdW5kO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0dGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xcbitcXHR0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcXG4gYWdhaW46XFxuIFxcdGZvdW5kID0gZmFsc2U7XFxuIFxcdGRvd25fd3JpdGUoXFx1MDAyNnhkbmEtXFx1MDAzZW5vdGlmaWVyX2xvY2spO1xcbkBAIC0xMDYxLDI0ICsxMDYxLDkgQEAgc3RhdGljIGludCBhaWUyX3BvcHVsYXRlX3JhbmdlKHN0cnVjdCBhbWR4ZG5hX2dlbV9vYmogKmFibylcXG4gXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcdH1cXG4gXFxuLVxcdG1hcHAtXFx1MDAzZXJhbmdlLm5vdGlmaWVyX3NlcSA9IG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKFxcdTAwMjZtYXBwLVxcdTAwM2Vub3RpZmllcik7XFxuLVxcdG1tYXBfcmVhZF9sb2NrKG1tKTtcXG4tXFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0KFxcdTAwMjZtYXBwLVxcdTAwM2VyYW5nZSk7XFxuLVxcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xcbi1cXHRpZiAocmV0KSB7XFxuLVxcdFxcdGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7XFxuLVxcdFxcdFxcdHJldCA9IC1FVElNRTtcXG4tXFx0XFx0XFx0Z290byBwdXRfbW07XFxuLVxcdFxcdH1cXG4tXFxuLVxcdFxcdGlmIChyZXQgPT0gLUVCVVNZKSB7XFxuLVxcdFxcdFxcdGFtZHhkbmFfdW1hcF9wdXQobWFwcCk7XFxuLVxcdFxcdFxcdG1tcHV0KG1tKTtcXG4tXFx0XFx0XFx0Z290byBhZ2FpbjtcXG4tXFx0XFx0fVxcbi1cXG4rXFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXFx1MDAyNm1hcHAtXFx1MDAzZXJhbmdlLCB0aW1lb3V0KTtcXG4rXFx0aWYgKHJldClcXG4gXFx0XFx0Z290byBwdXRfbW07XFxuLVxcdH1cXG4gXFxuIFxcdGRvd25fd3JpdGUoXFx1MDAyNnhkbmEtXFx1MDAzZW5vdGlmaWVyX2xvY2spO1xcbiBcXHRpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkoXFx1MDAyNm1hcHAtXFx1MDAzZW5vdGlmaWVyLCBtYXBwLVxcdTAwM2VyYW5nZS5ub3RpZmllcl9zZXEpKSB7XFxuQEAgLTEwOTYsNyArMTA4MSw3IEBAIHN0YXRpYyBpbnQgYWllMl9wb3B1bGF0ZV9yYW5nZShzdHJ1Y3QgYW1keGRuYV9nZW1fb2JqICphYm8pXFxuIHB1dF9tbTpcXG4gXFx0YW1keGRuYV91bWFwX3B1dChtYXBwKTtcXG4gXFx0bW1wdXQobW0pO1xcbi1cXHRyZXR1cm4gcmV0O1xcbitcXHRyZXR1cm4gcmV0ID09IC1FQlVTWSA/IC1FVElNRSA6IHJldDtcXG4gfVxcbiBcXG4gaW50IGFpZTJfY21kX3N1Ym1pdChzdHJ1Y3QgYW1keGRuYV9od2N0eCAqaHdjdHgsIHN0cnVjdCBhbWR4ZG5hX3NjaGVkX2pvYiAqam9iLCB1NjQgKnNlcSlcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmNcXG5pbmRleCA5NThjYjYwNWFlZGQ1My4uZGU1YmJmZTU4ZWU5NDUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uY1xcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmNcXG5AQCAtNzczLDggKzc3Myw3IEBAIGVudW0gZHJtX2dwdXN2bV9zY2FuX3Jlc3VsdCBkcm1fZ3B1c3ZtX3NjYW5fbW0oc3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKnJhbmdlLFxcbiBcXHRcXHQuZW5kID0gZW5kLFxcbiBcXHRcXHQuZGV2X3ByaXZhdGVfb3duZXIgPSBkZXZfcHJpdmF0ZV9vd25lcixcXG4gXFx0fTtcXG4tXFx0dW5zaWduZWQgbG9uZyB0aW1lb3V0ID1cXG4tXFx0XFx0amlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7XFxuIFxcdGVudW0gZHJtX2dwdXN2bV9zY2FuX3Jlc3VsdCBzdGF0ZSA9IERSTV9HUFVTVk1fU0NBTl9VTlBPUFVMQVRFRCwgbmV3X3N0YXRlO1xcbiBcXHR1bnNpZ25lZCBsb25nICpwZm5zO1xcbiBcXHR1bnNpZ25lZCBsb25nIG5wYWdlcyA9IG5wYWdlc19pbl9yYW5nZShzdGFydCwgZW5kKTtcXG5AQCAtNzg4LDIyICs3ODcsNyBAQCBlbnVtIGRybV9ncHVzdm1fc2Nhbl9yZXN1bHQgZHJtX2dwdXN2bV9zY2FuX21tKHN0cnVjdCBkcm1fZ3B1c3ZtX3JhbmdlICpyYW5nZSxcXG4gXFx0aG1tX3JhbmdlLmhtbV9wZm5zID0gcGZucztcXG4gXFxuIHJldHJ5Olxcbi1cXHRobW1fcmFuZ2Uubm90aWZpZXJfc2VxID0gbW11X2ludGVydmFsX3JlYWRfYmVnaW4obm90aWZpZXIpO1xcbi1cXHRtbWFwX3JlYWRfbG9jayhyYW5nZS1cXHUwMDNlZ3B1c3ZtLVxcdTAwM2VtbSk7XFxuLVxcbi1cXHR3aGlsZSAodHJ1ZSkge1xcbi1cXHRcXHRlcnIgPSBobW1fcmFuZ2VfZmF1bHQoXFx1MDAyNmhtbV9yYW5nZSk7XFxuLVxcdFxcdGlmIChlcnIgPT0gLUVCVVNZKSB7XFxuLVxcdFxcdFxcdGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKVxcbi1cXHRcXHRcXHRcXHRicmVhaztcXG4tXFxuLVxcdFxcdFxcdGhtbV9yYW5nZS5ub3RpZmllcl9zZXEgPVxcbi1cXHRcXHRcXHRcXHRtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihub3RpZmllcik7XFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHR9XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHR9XFxuLVxcdG1tYXBfcmVhZF91bmxvY2socmFuZ2UtXFx1MDAzZWdwdXN2bS1cXHUwMDNlbW0pO1xcbitcXHRlcnIgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcXHUwMDI2aG1tX3JhbmdlLCB0aW1lb3V0KTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBlcnJfZnJlZTtcXG4gXFxuQEAgLTE0MDYsOCArMTM5MCw3IEBAIGludCBkcm1fZ3B1c3ZtX2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxcbiBcXHRcXHQuZGV2X3ByaXZhdGVfb3duZXIgPSBjdHgtXFx1MDAzZWRldmljZV9wcml2YXRlX3BhZ2Vfb3duZXIsXFxuIFxcdH07XFxuIFxcdHZvaWQgKnpkZDtcXG4tXFx0dW5zaWduZWQgbG9uZyB0aW1lb3V0ID1cXG4tXFx0XFx0amlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgaSwgajtcXG4gXFx0dW5zaWduZWQgbG9uZyBucGFnZXMgPSBucGFnZXNfaW5fcmFuZ2UocGFnZXNfc3RhcnQsIHBhZ2VzX2VuZCk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbnVtX2RtYV9tYXBwZWQ7XFxuQEAgLTE0MjIsOSArMTQwNSw2IEBAIGludCBkcm1fZ3B1c3ZtX2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxcbiBcXHRzdHJ1Y3QgZG1hX2lvdmFfc3RhdGUgKnN0YXRlID0gXFx1MDAyNnN2bV9wYWdlcy1cXHUwMDNlc3RhdGU7XFxuIFxcbiByZXRyeTpcXG4tXFx0aWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpXFxuLVxcdFxcdHJldHVybiAtRUJVU1k7XFxuLVxcbiBcXHRobW1fcmFuZ2Uubm90aWZpZXJfc2VxID0gbW11X2ludGVydmFsX3JlYWRfYmVnaW4obm90aWZpZXIpO1xcbiBcXHRpZiAoZHJtX2dwdXN2bV9wYWdlc192YWxpZF91bmxvY2tlZChncHVzdm0sIHN2bV9wYWdlcykpXFxuIFxcdFxcdGdvdG8gc2V0X3NlcW5vO1xcbkBAIC0xNDM5LDIxICsxNDE5LDcgQEAgaW50IGRybV9ncHVzdm1fZ2V0X3BhZ2VzKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXFxuIFxcdH1cXG4gXFxuIFxcdGhtbV9yYW5nZS5obW1fcGZucyA9IHBmbnM7XFxuLVxcdHdoaWxlICh0cnVlKSB7XFxuLVxcdFxcdG1tYXBfcmVhZF9sb2NrKG1tKTtcXG4tXFx0XFx0ZXJyID0gaG1tX3JhbmdlX2ZhdWx0KFxcdTAwMjZobW1fcmFuZ2UpO1xcbi1cXHRcXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcXG4tXFxuLVxcdFxcdGlmIChlcnIgPT0gLUVCVVNZKSB7XFxuLVxcdFxcdFxcdGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKVxcbi1cXHRcXHRcXHRcXHRicmVhaztcXG4tXFxuLVxcdFxcdFxcdGhtbV9yYW5nZS5ub3RpZmllcl9zZXEgPVxcbi1cXHRcXHRcXHRcXHRtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihub3RpZmllcik7XFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHR9XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHR9XFxuK1xcdGVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFxcdTAwMjZobW1fcmFuZ2UsIHRpbWVvdXQpO1xcbiBcXHRtbXB1dChtbSk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuQEAgLTE3MjAsOCArMTY4Niw3IEBAIGludCBkcm1fZ3B1c3ZtX3JhbmdlX2V2aWN0KHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXFxuIFxcdFxcdC5lbmQgPSBkcm1fZ3B1c3ZtX3JhbmdlX2VuZChyYW5nZSksXFxuIFxcdFxcdC5kZXZfcHJpdmF0ZV9vd25lciA9IE5VTEwsXFxuIFxcdH07XFxuLVxcdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9XFxuLVxcdFxcdGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xcbitcXHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xcbiBcXHR1bnNpZ25lZCBsb25nICpwZm5zO1xcbiBcXHR1bnNpZ25lZCBsb25nIG5wYWdlcyA9IG5wYWdlc19pbl9yYW5nZShkcm1fZ3B1c3ZtX3JhbmdlX3N0YXJ0KHJhbmdlKSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgIGRybV9ncHVzdm1fcmFuZ2VfZW5kKHJhbmdlKSk7XFxuQEAgLTE3MzYsMjQgKzE3MDEsMTIgQEAgaW50IGRybV9ncHVzdm1fcmFuZ2VfZXZpY3Qoc3RydWN0IGRybV9ncHVzdm0gKmdwdXN2bSxcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbiBcXHRobW1fcmFuZ2UuaG1tX3BmbnMgPSBwZm5zO1xcbi1cXHR3aGlsZSAoIXRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHtcXG4tXFx0XFx0aG1tX3JhbmdlLm5vdGlmaWVyX3NlcSA9IG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKG5vdGlmaWVyKTtcXG4tXFx0XFx0aWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHtcXG4tXFx0XFx0XFx0ZXJyID0gLUVUSU1FO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbi1cXG4tXFx0XFx0bW1hcF9yZWFkX2xvY2sobW0pO1xcbi1cXHRcXHRlcnIgPSBobW1fcmFuZ2VfZmF1bHQoXFx1MDAyNmhtbV9yYW5nZSk7XFxuLVxcdFxcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xcbi1cXHRcXHRpZiAoZXJyICE9IC1FQlVTWSlcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdH1cXG4rXFx0ZXJyID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXFx1MDAyNmhtbV9yYW5nZSwgdGltZW91dCk7XFxuIFxcbiBcXHRrdmZyZWUocGZucyk7XFxuIFxcdG1tcHV0KG1tKTtcXG4gXFxuLVxcdHJldHVybiBlcnI7XFxuK1xcdHJldHVybiBlcnIgPT0gLUVCVVNZID8gLUVUSU1FIDogZXJyO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGRybV9ncHVzdm1fcmFuZ2VfZXZpY3QpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3ZtLmNcXG5pbmRleCBkY2M5MjEzMTQ4OGVhYi4uNTg3MzU0NDZkNzgzMmMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uY1xcbisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3ZtLmNcXG5AQCAtNjc4LDIwICs2NzgsMjIgQEAgc3RhdGljIGludCBub3V2ZWF1X3JhbmdlX2ZhdWx0KHN0cnVjdCBub3V2ZWF1X3N2bW0gKnN2bW0sXFxuIFxcdHJhbmdlLmVuZCA9IG5vdGlmaWVyLVxcdTAwM2Vub3RpZmllci5pbnRlcnZhbF90cmVlLmxhc3QgKyAxO1xcbiBcXG4gXFx0d2hpbGUgKHRydWUpIHtcXG4tXFx0XFx0aWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHtcXG4rXFx0XFx0bG9uZyByZW1haW5pbmcgPSB0aW1lb3V0IC0gamlmZmllcztcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRoZSBITU0gdGltZW91dCBvbmx5IGJvdW5kcyByZXRyaWVzIHdoaWxlIEhNTSBpcyB3YWxraW5nIGFuZFxcbitcXHRcXHQgKiBmYXVsdGluZyB0aGUgcmFuZ2UuIFRoaXMgZmF1bHQgaXMgaGFuZGxlZCBieSBhIGtlcm5lbCB3b3JrZXIsXFxuK1xcdFxcdCAqIHNvIGZhdGFsIHNpZ25hbHMgZnJvbSB0aGUgZmF1bHRpbmcgcHJvY2VzcyBjYW5ub3Qgc3RvcCBhblxcbitcXHRcXHQgKiBlbmRsZXNzIHN0cmVhbSBvZiBpbnZhbGlkYXRpb25zIGhlcmUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCB0aW1lb3V0KSkge1xcbiBcXHRcXHRcXHRyZXQgPSAtRUJVU1k7XFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRyYW5nZS5ub3RpZmllcl9zZXEgPSBtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihyYW5nZS5ub3RpZmllcik7XFxuLVxcdFxcdG1tYXBfcmVhZF9sb2NrKG1tKTtcXG4tXFx0XFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0KFxcdTAwMjZyYW5nZSk7XFxuLVxcdFxcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xcbi1cXHRcXHRpZiAocmV0KSB7XFxuLVxcdFxcdFxcdGlmIChyZXQgPT0gLUVCVVNZKVxcbi1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXFx1MDAyNnJhbmdlLCByZW1haW5pbmcpO1xcbitcXHRcXHRpZiAocmV0KVxcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4tXFx0XFx0fVxcbiBcXG4gXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2c3ZtbS1cXHUwMDNlbXV0ZXgpO1xcbiBcXHRcXHRpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkocmFuZ2Uubm90aWZpZXIsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHYvbXNodl9yZWdpb25zLmMgYi9kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jXFxuaW5kZXggNmQ2NWU1YjQyMTUyOTUuLmRkZGFhZGUzMWI1ZGMzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvaHYvbXNodl9yZWdpb25zLmNcXG4rKysgYi9kcml2ZXJzL2h2L21zaHZfcmVnaW9ucy5jXFxuQEAgLTM4MSw0NiArMzgxLDYgQEAgaW50IG1zaHZfcmVnaW9uX2dldChzdHJ1Y3QgbXNodl9tZW1fcmVnaW9uICpyZWdpb24pXFxuIFxcdHJldHVybiBrcmVmX2dldF91bmxlc3NfemVybyhcXHUwMDI2cmVnaW9uLVxcdTAwM2VtcmVnX3JlZmNvdW50KTtcXG4gfVxcbiBcXG4tLyoqXFxuLSAqIG1zaHZfcmVnaW9uX2htbV9mYXVsdF9hbmRfbG9jayAtIEhhbmRsZSBITU0gZmF1bHRzIGFuZCBsb2NrIHRoZSBtZW1vcnkgcmVnaW9uXFxuLSAqIEByZWdpb246IFBvaW50ZXIgdG8gdGhlIG1lbW9yeSByZWdpb24gc3RydWN0dXJlXFxuLSAqIEByYW5nZTogUG9pbnRlciB0byB0aGUgSE1NIHJhbmdlIHN0cnVjdHVyZVxcbi0gKlxcbi0gKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgc3RlcHM6XFxuLSAqIDEuIFJlYWRzIHRoZSBub3RpZmllciBzZXF1ZW5jZSBmb3IgdGhlIEhNTSByYW5nZS5cXG4tICogMi4gQWNxdWlyZXMgYSByZWFkIGxvY2sgb24gdGhlIG1lbW9yeSBtYXAuXFxuLSAqIDMuIEhhbmRsZXMgSE1NIGZhdWx0cyBmb3IgdGhlIHNwZWNpZmllZCByYW5nZS5cXG4tICogNC4gUmVsZWFzZXMgdGhlIHJlYWQgbG9jayBvbiB0aGUgbWVtb3J5IG1hcC5cXG4tICogNS4gSWYgc3VjY2Vzc2Z1bCwgbG9ja3MgdGhlIG1lbW9yeSByZWdpb24gbXV0ZXguXFxuLSAqIDYuIFZlcmlmaWVzIGlmIHRoZSBub3RpZmllciBzZXF1ZW5jZSBoYXMgY2hhbmdlZCBkdXJpbmcgdGhlIG9wZXJhdGlvbi5cXG4tICogICAgSWYgaXQgaGFzLCByZWxlYXNlcyB0aGUgbXV0ZXggYW5kIHJldHVybnMgLUVCVVNZIHRvIG1hdGNoIHdpdGhcXG4tICogICAgaG1tX3JhbmdlX2ZhdWx0KCkgcmV0dXJuIGNvZGUgZm9yIHJlcGVhdGluZy5cXG4tICpcXG4tICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuXFxuLSAqL1xcbi1zdGF0aWMgaW50IG1zaHZfcmVnaW9uX2htbV9mYXVsdF9hbmRfbG9jayhzdHJ1Y3QgbXNodl9tZW1fcmVnaW9uICpyZWdpb24sXFxuLVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpXFxuLXtcXG4tXFx0aW50IHJldDtcXG4tXFxuLVxcdHJhbmdlLVxcdTAwM2Vub3RpZmllcl9zZXEgPSBtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihyYW5nZS1cXHUwMDNlbm90aWZpZXIpO1xcbi1cXHRtbWFwX3JlYWRfbG9jayhyZWdpb24tXFx1MDAzZW1yZWdfbW5pLm1tKTtcXG4tXFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0KHJhbmdlKTtcXG4tXFx0bW1hcF9yZWFkX3VubG9jayhyZWdpb24tXFx1MDAzZW1yZWdfbW5pLm1tKTtcXG4tXFx0aWYgKHJldClcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4tXFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNnJlZ2lvbi1cXHUwMDNlbXJlZ19tdXRleCk7XFxuLVxcbi1cXHRpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkocmFuZ2UtXFx1MDAzZW5vdGlmaWVyLCByYW5nZS1cXHUwMDNlbm90aWZpZXJfc2VxKSkge1xcbi1cXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnJlZ2lvbi1cXHUwMDNlbXJlZ19tdXRleCk7XFxuLVxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbi1cXHRcXHRyZXR1cm4gLUVCVVNZO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4gLyoqXFxuICAqIG1zaHZfcmVnaW9uX3JhbmdlX2ZhdWx0IC0gSGFuZGxlIG1lbW9yeSByYW5nZSBmYXVsdHMgZm9yIGEgZ2l2ZW4gcmVnaW9uLlxcbiAgKiBAcmVnaW9uOiBQb2ludGVyIHRvIHRoZSBtZW1vcnkgcmVnaW9uIHN0cnVjdHVyZS5cXG5AQCAtNDUyLDEzICs0MTIsMTkgQEAgc3RhdGljIGludCBtc2h2X3JlZ2lvbl9yYW5nZV9mYXVsdChzdHJ1Y3QgbXNodl9tZW1fcmVnaW9uICpyZWdpb24sXFxuIFxcdHJhbmdlLnN0YXJ0ID0gcmVnaW9uLVxcdTAwM2VzdGFydF91YWRkciArIHBhZ2Vfb2Zmc2V0ICogSFZfSFlQX1BBR0VfU0laRTtcXG4gXFx0cmFuZ2UuZW5kID0gcmFuZ2Uuc3RhcnQgKyBwYWdlX2NvdW50ICogSFZfSFlQX1BBR0VfU0laRTtcXG4gXFxuLVxcdGRvIHtcXG4tXFx0XFx0cmV0ID0gbXNodl9yZWdpb25faG1tX2ZhdWx0X2FuZF9sb2NrKHJlZ2lvbiwgXFx1MDAyNnJhbmdlKTtcXG4tXFx0fSB3aGlsZSAocmV0ID09IC1FQlVTWSk7XFxuLVxcbithZ2FpbjpcXG4rXFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXFx1MDAyNnJhbmdlLCAwKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZyZWdpb24tXFx1MDAzZW1yZWdfbXV0ZXgpO1xcbitcXG4rXFx0aWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KHJhbmdlLm5vdGlmaWVyLCByYW5nZS5ub3RpZmllcl9zZXEpKSB7XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2cmVnaW9uLVxcdTAwM2VtcmVnX211dGV4KTtcXG4rXFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuK1xcdFxcdGdvdG8gYWdhaW47XFxuK1xcdH1cXG4rXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwYWdlX2NvdW50OyBpKyspXFxuIFxcdFxcdHJlZ2lvbi1cXHUwMDNlbXJlZ19wYWdlc1twYWdlX29mZnNldCArIGldID0gaG1tX3Bmbl90b19wYWdlKHBmbnNbaV0pO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9vZHAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmNcXG5pbmRleCA0MDRmYTFjYzMyNTQyYy4uOWNjMjFjZDc2MmQ5ODkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9vZHAuY1xcbisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmNcXG5AQCAtMzI5LDcgKzMyOSw3IEBAIGludCBpYl91bWVtX29kcF9tYXBfZG1hX2FuZF9sb2NrKHN0cnVjdCBpYl91bWVtX29kcCAqdW1lbV9vZHAsIHU2NCB1c2VyX3ZpcnQsXFxuIFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm93bmluZ19tbSA9IHVtZW1fb2RwLVxcdTAwM2V1bWVtLm93bmluZ19tbTtcXG4gXFx0aW50IHBmbl9pbmRleCwgZG1hX2luZGV4LCByZXQgPSAwLCBzdGFydF9pZHg7XFxuIFxcdHVuc2lnbmVkIGludCBwYWdlX3NoaWZ0LCBobW1fb3JkZXIsIHBmbl9zdGFydF9pZHg7XFxuLVxcdHVuc2lnbmVkIGxvbmcgbnVtX3BmbnMsIGN1cnJlbnRfc2VxO1xcbitcXHR1bnNpZ25lZCBsb25nIG51bV9wZm5zO1xcbiBcXHRzdHJ1Y3QgaG1tX3JhbmdlIHJhbmdlID0ge307XFxuIFxcdHVuc2lnbmVkIGxvbmcgdGltZW91dDtcXG4gXFxuQEAgLTM2MywyNiArMzYzLDE4IEBAIGludCBpYl91bWVtX29kcF9tYXBfZG1hX2FuZF9sb2NrKHN0cnVjdCBpYl91bWVtX29kcCAqdW1lbV9vZHAsIHU2NCB1c2VyX3ZpcnQsXFxuIFxcdH1cXG4gXFxuIFxcdHJhbmdlLmhtbV9wZm5zID0gXFx1MDAyNih1bWVtX29kcC1cXHUwMDNlbWFwLnBmbl9saXN0W3Bmbl9zdGFydF9pZHhdKTtcXG4tXFx0dGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xcbitcXHR0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcXG4gXFxuIHJldHJ5Olxcbi1cXHRjdXJyZW50X3NlcSA9IHJhbmdlLm5vdGlmaWVyX3NlcSA9XFxuLVxcdFxcdG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKFxcdTAwMjZ1bWVtX29kcC1cXHUwMDNlbm90aWZpZXIpO1xcbi1cXG4tXFx0bW1hcF9yZWFkX2xvY2sob3duaW5nX21tKTtcXG4tXFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0KFxcdTAwMjZyYW5nZSk7XFxuLVxcdG1tYXBfcmVhZF91bmxvY2sob3duaW5nX21tKTtcXG4tXFx0aWYgKHVubGlrZWx5KHJldCkpIHtcXG4tXFx0XFx0aWYgKHJldCA9PSAtRUJVU1kgXFx1MDAyNlxcdTAwMjYgIXRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpXFxuLVxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFxcdTAwMjZyYW5nZSwgdGltZW91dCk7XFxuK1xcdGlmICh1bmxpa2VseShyZXQpKVxcbiBcXHRcXHRnb3RvIG91dF9wdXRfbW07XFxuLVxcdH1cXG4gXFxuIFxcdHN0YXJ0X2lkeCA9IChyYW5nZS5zdGFydCAtIGliX3VtZW1fc3RhcnQodW1lbV9vZHApKSBcXHUwMDNlXFx1MDAzZSBwYWdlX3NoaWZ0O1xcbiBcXHRkbWFfaW5kZXggPSBzdGFydF9pZHg7XFxuIFxcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZ1bWVtX29kcC1cXHUwMDNldW1lbV9tdXRleCk7XFxuLVxcdGlmIChtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeShcXHUwMDI2dW1lbV9vZHAtXFx1MDAzZW5vdGlmaWVyLCBjdXJyZW50X3NlcSkpIHtcXG4rXFx0aWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KFxcdTAwMjZ1bWVtX29kcC1cXHUwMDNlbm90aWZpZXIsIHJhbmdlLm5vdGlmaWVyX3NlcSkpIHtcXG4gXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ1bWVtX29kcC1cXHUwMDNldW1lbV9tdXRleCk7XFxuIFxcdFxcdGdvdG8gcmV0cnk7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9obW0uaCBiL2luY2x1ZGUvbGludXgvaG1tLmhcXG5pbmRleCBkYjc1ZmZjOTQ5YTdhYy4uNmYwNGUzOTMyZjViMGMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9obW0uaFxcbisrKyBiL2luY2x1ZGUvbGludXgvaG1tLmhcXG5AQCAtMTIzLDYgKzEyMyw4IEBAIHN0cnVjdCBobW1fcmFuZ2Uge1xcbiAgKiBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vbW0vaG1tLnJzdCBmb3IgaG93IHRvIHVzZSB0aGUgcmFuZ2UgQVBJLlxcbiAgKi9cXG4gaW50IGhtbV9yYW5nZV9mYXVsdChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSk7XFxuK2ludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSxcXG4rXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpO1xcbiBcXG4gLypcXG4gICogSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCAtIGRlZmF1bHQgdGltZW91dCAobXMpIHdoZW4gd2FpdGluZyBmb3IgYSByYW5nZVxcbmRpZmYgLS1naXQgYS9saWIvdGVzdF9obW0uYyBiL2xpYi90ZXN0X2htbS5jXFxuaW5kZXggNDVjMGNiOTkyMjE4NGEuLjYyMDVmYjMxM2JkMDVlIDEwMDY0NFxcbi0tLSBhL2xpYi90ZXN0X2htbS5jXFxuKysrIGIvbGliL3Rlc3RfaG1tLmNcXG5AQCAtMzg5LDYgKzM4OSw2NyBAQCBzdGF0aWMgaW50IGRtaXJyb3JfcmFuZ2VfZmF1bHQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgZG1pcnJvcl9yYW5nZV9mYXVsdF91bmxvY2tlZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsXFxuK1xcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgdGltZW91dClcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0d2hpbGUgKHRydWUpIHtcXG4rXFx0XFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQocmFuZ2UsIHRpbWVvdXQpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdFxcdG11dGV4X2xvY2soXFx1MDAyNmRtaXJyb3ItXFx1MDAzZW11dGV4KTtcXG4rXFx0XFx0aWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KHJhbmdlLVxcdTAwM2Vub3RpZmllcixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHJhbmdlLVxcdTAwM2Vub3RpZmllcl9zZXEpKSB7XFxuK1xcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZG1pcnJvci1cXHUwMDNlbXV0ZXgpO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gZG1pcnJvcl9kb19mYXVsdChkbWlycm9yLCByYW5nZSk7XFxuK1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmRtaXJyb3ItXFx1MDAzZW11dGV4KTtcXG4rb3V0OlxcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGRtaXJyb3JfZmF1bHRfdW5sb2NrZWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsXFxuK1xcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4rXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGVuZCwgYm9vbCB3cml0ZSxcXG4rXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpXFxuK3tcXG4rXFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBkbWlycm9yLVxcdTAwM2Vub3RpZmllci5tbTtcXG4rXFx0dW5zaWduZWQgbG9uZyBhZGRyO1xcbitcXHR1bnNpZ25lZCBsb25nIHBmbnNbMzJdO1xcbitcXHRzdHJ1Y3QgaG1tX3JhbmdlIHJhbmdlID0ge1xcbitcXHRcXHQubm90aWZpZXIgPSBcXHUwMDI2ZG1pcnJvci1cXHUwMDNlbm90aWZpZXIsXFxuK1xcdFxcdC5obW1fcGZucyA9IHBmbnMsXFxuK1xcdFxcdC5wZm5fZmxhZ3NfbWFzayA9IDAsXFxuK1xcdFxcdC5kZWZhdWx0X2ZsYWdzID1cXG4rXFx0XFx0XFx0SE1NX1BGTl9SRVFfRkFVTFQgfCAod3JpdGUgPyBITU1fUEZOX1JFUV9XUklURSA6IDApLFxcbitcXHRcXHQuZGV2X3ByaXZhdGVfb3duZXIgPSBkbWlycm9yLVxcdTAwM2VtZGV2aWNlLFxcbitcXHR9O1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdGlmICghbW1nZXRfbm90X3plcm8obW0pKVxcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFxuK1xcdGZvciAoYWRkciA9IHN0YXJ0OyBhZGRyIFxcdTAwM2MgZW5kOyBhZGRyID0gcmFuZ2UuZW5kKSB7XFxuK1xcdFxcdHJhbmdlLnN0YXJ0ID0gYWRkcjtcXG4rXFx0XFx0cmFuZ2UuZW5kID0gbWluKGFkZHIgKyAoQVJSQVlfU0laRShwZm5zKSBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKSwgZW5kKTtcXG4rXFxuK1xcdFxcdHJldCA9IGRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWQoZG1pcnJvciwgXFx1MDAyNnJhbmdlLCB0aW1lb3V0KTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdG1tcHV0KG1tKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBkbWlycm9yX2ZhdWx0KHN0cnVjdCBkbWlycm9yICpkbWlycm9yLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbiBcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBlbmQsIGJvb2wgd3JpdGUpXFxuIHtcXG5AQCAtNDg4LDYgKzU0OSw0OCBAQCBzdGF0aWMgaW50IGRtaXJyb3JfcmVhZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvciwgc3RydWN0IGhtbV9kbWlycm9yX2NtZCAqY21kKVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGRtaXJyb3JfcmVhZF91bmxvY2tlZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBobW1fZG1pcnJvcl9jbWQgKmNtZCxcXG4rXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgdGltZW91dClcXG4re1xcbitcXHRzdHJ1Y3QgZG1pcnJvcl9ib3VuY2UgYm91bmNlO1xcbitcXHR1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IGNtZC1cXHUwMDNlbnBhZ2VzIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQ7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRzdGFydCA9IGNtZC1cXHUwMDNlYWRkcjtcXG4rXFx0ZW5kID0gc3RhcnQgKyBzaXplO1xcbitcXHRpZiAoZW5kIFxcdTAwM2Mgc3RhcnQpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cmV0ID0gZG1pcnJvcl9ib3VuY2VfaW5pdChcXHUwMDI2Ym91bmNlLCBzdGFydCwgc2l6ZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHR3aGlsZSAoMSkge1xcbitcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZkbWlycm9yLVxcdTAwM2VtdXRleCk7XFxuK1xcdFxcdHJldCA9IGRtaXJyb3JfZG9fcmVhZChkbWlycm9yLCBzdGFydCwgZW5kLCBcXHUwMDI2Ym91bmNlKTtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkbWlycm9yLVxcdTAwM2VtdXRleCk7XFxuK1xcdFxcdGlmIChyZXQgIT0gLUVOT0VOVClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRzdGFydCA9IGNtZC1cXHUwMDNlYWRkciArIChib3VuY2UuY3BhZ2VzIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpO1xcbitcXHRcXHRyZXQgPSBkbWlycm9yX2ZhdWx0X3VubG9ja2VkKGRtaXJyb3IsIHN0YXJ0LCBlbmQsIGZhbHNlLCB0aW1lb3V0KTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNtZC1cXHUwMDNlZmF1bHRzKys7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChyZXQgPT0gMCkge1xcbitcXHRcXHRpZiAoY29weV90b191c2VyKHU2NF90b191c2VyX3B0cihjbWQtXFx1MDAzZXB0ciksIGJvdW5jZS5wdHIsXFxuK1xcdFxcdFxcdFxcdCBib3VuY2Uuc2l6ZSkpXFxuK1xcdFxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuK1xcdH1cXG4rXFx0Y21kLVxcdTAwM2VjcGFnZXMgPSBib3VuY2UuY3BhZ2VzO1xcbitcXHRkbWlycm9yX2JvdW5jZV9maW5pKFxcdTAwMjZib3VuY2UpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGRtaXJyb3JfZG9fd3JpdGUoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuIFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IGRtaXJyb3JfYm91bmNlICpib3VuY2UpXFxuIHtcXG5AQCAtMTU3Miw3ICsxNjc1LDkgQEAgc3RhdGljIGxvbmcgZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbiBcXHRcXHRkbWlycm9yLVxcdTAwM2VmbGFncyA9IGNtZC5ucGFnZXM7XFxuIFxcdFxcdHJldCA9IDA7XFxuIFxcdFxcdGJyZWFrO1xcbi1cXG4rXFx0Y2FzZSBITU1fRE1JUlJPUl9SRUFEX1VOTE9DS0VEOlxcbitcXHRcXHRyZXQgPSBkbWlycm9yX3JlYWRfdW5sb2NrZWQoZG1pcnJvciwgXFx1MDAyNmNtZCwgMCk7XFxuK1xcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9saWIvdGVzdF9obW1fdWFwaS5oIGIvbGliL3Rlc3RfaG1tX3VhcGkuaFxcbmluZGV4IGY5NGM2ZDQ1NzMzODI4Li5lYTliMGVjNDA0ZmI1NSAxMDA2NDRcXG4tLS0gYS9saWIvdGVzdF9obW1fdWFwaS5oXFxuKysrIGIvbGliL3Rlc3RfaG1tX3VhcGkuaFxcbkBAIC0zOCw2ICszOCw3IEBAIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQge1xcbiAjZGVmaW5lIEhNTV9ETUlSUk9SX0NIRUNLX0VYQ0xVU0lWRVxcdF9JT1dSKCdIJywgMHgwNiwgc3RydWN0IGhtbV9kbWlycm9yX2NtZClcXG4gI2RlZmluZSBITU1fRE1JUlJPUl9SRUxFQVNFXFx0XFx0X0lPV1IoJ0gnLCAweDA3LCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kKVxcbiAjZGVmaW5lIEhNTV9ETUlSUk9SX0ZMQUdTXFx0XFx0X0lPV1IoJ0gnLCAweDA4LCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kKVxcbisjZGVmaW5lIEhNTV9ETUlSUk9SX1JFQURfVU5MT0NLRURcXHRfSU9XUignSCcsIDB4MDksIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQpXFxuIFxcbiAjZGVmaW5lIEhNTV9ETUlSUk9SX0ZMQUdfRkFJTF9BTExPQ1xcdCgxVUxMIFxcdTAwM2NcXHUwMDNjIDApXFxuIFxcbmRpZmYgLS1naXQgYS9tbS9obW0uYyBiL21tL2htbS5jXFxuaW5kZXggZTVjMWY0ZGVlZDI0NDcuLmZjMmUxY2QwY2IyMmViIDEwMDY0NFxcbi0tLSBhL21tL2htbS5jXFxuKysrIGIvbW0vaG1tLmNcXG5AQCAtMzIsOSArMzIsMjcgQEBcXG4gXFxuIHN0cnVjdCBobW1fdm1hX3dhbGsge1xcbiBcXHRzdHJ1Y3QgaG1tX3JhbmdlXFx0KnJhbmdlO1xcbitcXHRib29sXFx0XFx0XFx0KmxvY2tlZDtcXG4gXFx0dW5zaWduZWQgbG9uZ1xcdFxcdGxhc3Q7XFxuK1xcdHVuc2lnbmVkIGxvbmdcXHRcXHRlbmQ7XFxuK1xcdHVuc2lnbmVkIGludFxcdFxcdHJlcXVpcmVkX2ZhdWx0O1xcbiB9O1xcbiBcXG4rLypcXG4rICogSW50ZXJuYWwgc2VudGluZWwgcmV0dXJuZWQgYnkgd2FsayBjYWxsYmFja3Mgd2hlbiB0aGV5IG5lZWQgYSBwYWdlIGZhdWx0LlxcbisgKiBUaGUgY2FsbGJhY2sgc3RvcmVzIGVuZC9yZXF1aXJlZF9mYXVsdCBpbiBobW1fdm1hX3dhbGs7IHRoZSBvdXRlciBsb29wXFxuKyAqIGNvbnN1bWVzIHRoZSBzZW50aW5lbCBhbmQgbmV2ZXIgcHJvcGFnYXRlcyBpdCB0byB0aGUgY2FsbGVyLlxcbisgKi9cXG4rI2RlZmluZSBITU1fRkFVTFRfUEVORElOR1xcdC1FQUdBSU5cXG4rXFxuKy8qXFxuKyAqIEludGVybmFsIHNlbnRpbmVsIHJldHVybmVkIGJ5IGhtbV9kb19mYXVsdCgpIHdoZW4gaGFuZGxlX21tX2ZhdWx0KClcXG4rICogY29tcGxldGVzIGEgcGFnZSBmYXVsdCB3aXRoIHRoZSBtbWFwIGxvY2sgZHJvcHBlZC4gaG1tX2RvX2ZhdWx0KCkgc2V0c1xcbisgKiAqbG9ja2VkID0gZmFsc2U7IHRoZSBvdXRlciBsb29wIGNvbnN1bWVzIHRoZSBzZW50aW5lbCBhbmQgbmV2ZXIgcHJvcGFnYXRlc1xcbisgKiBpdCB0byB0aGUgY2FsbGVyLlxcbisgKi9cXG4rI2RlZmluZSBITU1fRkFVTFRfVU5MT0NLRURcXHQtRU5PTENLXFxuK1xcbiBlbnVtIHtcXG4gXFx0SE1NX05FRURfRkFVTFQgPSAxIFxcdTAwM2NcXHUwMDNjIDAsXFxuIFxcdEhNTV9ORUVEX1dSSVRFX0ZBVUxUID0gMSBcXHUwMDNjXFx1MDAzYyAxLFxcbkBAIC02MCwzNyArNzgsMjUgQEAgc3RhdGljIGludCBobW1fcGZuc19maWxsKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIH1cXG4gXFxuIC8qXFxuLSAqIGhtbV92bWFfZmF1bHQoKSAtIGZhdWx0IGluIGEgcmFuZ2UgbGFja2luZyB2YWxpZCBwbWQgb3IgcHRlKHMpXFxuLSAqIEBhZGRyOiByYW5nZSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MgKGluY2x1c2l2ZSlcXG4tICogQGVuZDogcmFuZ2UgdmlydHVhbCBlbmQgYWRkcmVzcyAoZXhjbHVzaXZlKVxcbi0gKiBAcmVxdWlyZWRfZmF1bHQ6IEhNTV9ORUVEXyogZmxhZ3NcXG4tICogQHdhbGs6IG1tX3dhbGsgc3RydWN0dXJlXFxuLSAqIFJldHVybjogLUVCVVNZIGFmdGVyIHBhZ2UgZmF1bHQsIG9yIHBhZ2UgZmF1bHQgZXJyb3JcXG4rICogaG1tX3JlY29yZF9mYXVsdCgpIC0gcmVjb3JkIGEgcmFuZ2UgdGhhdCBuZWVkcyB0byBiZSBmYXVsdGVkIGluXFxuICAqXFxuLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgcG1kX25vbmUoKSBvciBwdGVfbm9uZSgpIHJldHVybnMgdHJ1ZSxcXG4tICogb3Igd2hlbmV2ZXIgdGhlcmUgaXMgbm8gcGFnZSBkaXJlY3RvcnkgY292ZXJpbmcgdGhlIHZpcnR1YWwgYWRkcmVzcyByYW5nZS5cXG4rICogQ2FsbGVkIGJ5IHRoZSB3YWxrIGNhbGxiYWNrcyB3aGVuIHRoZXkgZGlzY292ZXIgdGhhdCBwYXJ0IG9mIHRoZSByYW5nZVxcbisgKiBuZWVkcyBhIHBhZ2UgZmF1bHQuICBUaGUgY2FsbGJhY2sgcmVjb3JkcyB3aGF0IHRvIGZhdWx0IGFuZCByZXR1cm5zXFxuKyAqIEhNTV9GQVVMVF9QRU5ESU5HOyB0aGUgb3V0ZXIgbG9vcCBpbiBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkKCkgZHJvcHNcXG4rICogYmFjayBvdXQgb2Ygd2Fsa19wYWdlX3JhbmdlKCkgYW5kIGludm9rZXMgaGFuZGxlX21tX2ZhdWx0KCkgZnJvbSBhIGNvbnRleHRcXG4rICogd2hlcmUgbm8gcGFnZS10YWJsZSBvciBodWdldGxiX3ZtYV9sb2NrIGlzIGhlbGQuXFxuICAqL1xcbi1zdGF0aWMgaW50IGhtbV92bWFfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tXFx0XFx0XFx0IHVuc2lnbmVkIGludCByZXF1aXJlZF9mYXVsdCwgc3RydWN0IG1tX3dhbGsgKndhbGspXFxuK3N0YXRpYyBpbnQgaG1tX3JlY29yZF9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbitcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IHJlcXVpcmVkX2ZhdWx0LFxcbitcXHRcXHRcXHQgICAgc3RydWN0IG1tX3dhbGsgKndhbGspXFxuIHtcXG4gXFx0c3RydWN0IGhtbV92bWFfd2FsayAqaG1tX3ZtYV93YWxrID0gd2Fsay1cXHUwMDNlcHJpdmF0ZTtcXG4tXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB3YWxrLVxcdTAwM2V2bWE7XFxuLVxcdHVuc2lnbmVkIGludCBmYXVsdF9mbGFncyA9IEZBVUxUX0ZMQUdfUkVNT1RFO1xcbiBcXG4gXFx0V0FSTl9PTl9PTkNFKCFyZXF1aXJlZF9mYXVsdCk7XFxuIFxcdGhtbV92bWFfd2Fsay1cXHUwMDNlbGFzdCA9IGFkZHI7XFxuLVxcbi1cXHRpZiAocmVxdWlyZWRfZmF1bHQgXFx1MDAyNiBITU1fTkVFRF9XUklURV9GQVVMVCkge1xcbi1cXHRcXHRpZiAoISh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fV1JJVEUpKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbi1cXHRcXHRmYXVsdF9mbGFncyB8PSBGQVVMVF9GTEFHX1dSSVRFO1xcbi1cXHR9XFxuLVxcbi1cXHRmb3IgKDsgYWRkciBcXHUwMDNjIGVuZDsgYWRkciArPSBQQUdFX1NJWkUpXFxuLVxcdFxcdGlmIChoYW5kbGVfbW1fZmF1bHQodm1hLCBhZGRyLCBmYXVsdF9mbGFncywgTlVMTCkgXFx1MDAyNlxcbi1cXHRcXHQgICAgVk1fRkFVTFRfRVJST1IpXFxuLVxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi1cXHRyZXR1cm4gLUVCVVNZO1xcbitcXHRobW1fdm1hX3dhbGstXFx1MDAzZWVuZCA9IGVuZDtcXG4rXFx0aG1tX3ZtYV93YWxrLVxcdTAwM2VyZXF1aXJlZF9mYXVsdCA9IHJlcXVpcmVkX2ZhdWx0O1xcbitcXHRyZXR1cm4gSE1NX0ZBVUxUX1BFTkRJTkc7XFxuIH1cXG4gXFxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgaG1tX3B0ZV9uZWVkX2ZhdWx0KGNvbnN0IHN0cnVjdCBobW1fdm1hX3dhbGsgKmhtbV92bWFfd2FsayxcXG5AQCAtMTc0LDcgKzE4MCw3IEBAIHN0YXRpYyBpbnQgaG1tX3ZtYV93YWxrX2hvbGUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0XFx0cmV0dXJuIGhtbV9wZm5zX2ZpbGwoYWRkciwgZW5kLCByYW5nZSwgSE1NX1BGTl9FUlJPUik7XFxuIFxcdH1cXG4gXFx0aWYgKHJlcXVpcmVkX2ZhdWx0KVxcbi1cXHRcXHRyZXR1cm4gaG1tX3ZtYV9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcXG4rXFx0XFx0cmV0dXJuIGhtbV9yZWNvcmRfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XFxuIFxcdHJldHVybiBobW1fcGZuc19maWxsKGFkZHIsIGVuZCwgcmFuZ2UsIDApO1xcbiB9XFxuIFxcbkBAIC0yMDksNyArMjE1LDcgQEAgc3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9wbWQoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0cmVxdWlyZWRfZmF1bHQgPVxcbiBcXHRcXHRobW1fcmFuZ2VfbmVlZF9mYXVsdChobW1fdm1hX3dhbGssIGhtbV9wZm5zLCBucGFnZXMsIGNwdV9mbGFncyk7XFxuIFxcdGlmIChyZXF1aXJlZF9mYXVsdClcXG4tXFx0XFx0cmV0dXJuIGhtbV92bWFfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XFxuK1xcdFxcdHJldHVybiBobW1fcmVjb3JkX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspO1xcbiBcXG4gXFx0cGZuID0gcG1kX3BmbihwbWQpICsgKChhZGRyIFxcdTAwMjYgflBNRF9NQVNLKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG4gXFx0Zm9yIChpID0gMDsgYWRkciBcXHUwMDNjIGVuZDsgYWRkciArPSBQQUdFX1NJWkUsIGkrKywgcGZuKyspIHtcXG5AQCAtMzI4LDcgKzMzNCw3IEBAIHN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfcHRlKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIGZhdWx0OlxcbiBcXHRwdGVfdW5tYXAocHRlcCk7XFxuIFxcdC8qIEZhdWx0IGFueSB2aXJ0dWFsIGFkZHJlc3Mgd2Ugd2VyZSBhc2tlZCB0byBmYXVsdCAqL1xcbi1cXHRyZXR1cm4gaG1tX3ZtYV9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcXG4rXFx0cmV0dXJuIGhtbV9yZWNvcmRfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XFxuIH1cXG4gXFxuICNpZmRlZiBDT05GSUdfQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVNcXG5AQCAtMzcxLDcgKzM3Nyw3IEBAIHN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfYWJzZW50X3BtZChzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgbnBhZ2VzLCAwKTtcXG4gXFx0aWYgKHJlcXVpcmVkX2ZhdWx0KSB7XFxuIFxcdFxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXFxuLVxcdFxcdFxcdHJldHVybiBobW1fdm1hX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspO1xcbitcXHRcXHRcXHRyZXR1cm4gaG1tX3JlY29yZF9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gXFx0fVxcbkBAIC01MTcsNyArNTIzLDcgQEAgc3RhdGljIGludCBobW1fdm1hX3dhbGtfcHVkKHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgbnBhZ2VzLCBjcHVfZmxhZ3MpO1xcbiBcXHRcXHRpZiAocmVxdWlyZWRfZmF1bHQpIHtcXG4gXFx0XFx0XFx0c3Bpbl91bmxvY2socHRsKTtcXG4tXFx0XFx0XFx0cmV0dXJuIGhtbV92bWFfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XFxuK1xcdFxcdFxcdHJldHVybiBobW1fcmVjb3JkX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspO1xcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRwZm4gPSBwdWRfcGZuKHB1ZCkgKyAoKGFkZHIgXFx1MDAyNiB+UFVEX01BU0spIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbkBAIC01NjQsMjEgKzU3MCw4IEBAIHN0YXRpYyBpbnQgaG1tX3ZtYV93YWxrX2h1Z2V0bGJfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzayxcXG4gXFx0cmVxdWlyZWRfZmF1bHQgPVxcbiBcXHRcXHRobW1fcHRlX25lZWRfZmF1bHQoaG1tX3ZtYV93YWxrLCBwZm5fcmVxX2ZsYWdzLCBjcHVfZmxhZ3MpO1xcbiBcXHRpZiAocmVxdWlyZWRfZmF1bHQpIHtcXG4tXFx0XFx0aW50IHJldDtcXG4tXFxuIFxcdFxcdHNwaW5fdW5sb2NrKHB0bCk7XFxuLVxcdFxcdGh1Z2V0bGJfdm1hX3VubG9ja19yZWFkKHZtYSk7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIEF2b2lkIGRlYWRsb2NrOiBkcm9wIHRoZSB2bWEgbG9jayBiZWZvcmUgY2FsbGluZ1xcbi1cXHRcXHQgKiBobW1fdm1hX2ZhdWx0KCksIHdoaWNoIHdpbGwgaXRzZWxmIHBvdGVudGlhbGx5IHRha2UgYW5kXFxuLVxcdFxcdCAqIGRyb3AgdGhlIHZtYSBsb2NrLiBUaGlzIGlzIGFsc28gY29ycmVjdCBmcm9tIGFcXG4tXFx0XFx0ICogcHJvdGVjdGlvbiBwb2ludCBvZiB2aWV3LCBiZWNhdXNlIHRoZXJlIGlzIG5vIGZ1cnRoZXJcXG4tXFx0XFx0ICogdXNlIGhlcmUgb2YgZWl0aGVyIHB0ZSBvciBwdGwgYWZ0ZXIgZHJvcHBpbmcgdGhlIHZtYVxcbi1cXHRcXHQgKiBsb2NrLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0cmV0ID0gaG1tX3ZtYV9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcXG4tXFx0XFx0aHVnZXRsYl92bWFfbG9ja19yZWFkKHZtYSk7XFxuLVxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdHJldHVybiBobW1fcmVjb3JkX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspO1xcbiBcXHR9XFxuIFxcbiBcXHRwZm4gPSBwdGVfcGZuKGVudHJ5KSArICgoc3RhcnQgXFx1MDAyNiB+aG1hc2spIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbkBAIC02MzcsMjkgKzYzMCw2NyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIGhtbV93YWxrX29wcyA9IHtcXG4gXFx0LndhbGtfbG9ja1xcdD0gUEdXQUxLX1JETE9DSyxcXG4gfTtcXG4gXFxuLS8qKlxcbi0gKiBobW1fcmFuZ2VfZmF1bHQgLSB0cnkgdG8gZmF1bHQgc29tZSBhZGRyZXNzIGluIGEgdmlydHVhbCBhZGRyZXNzIHJhbmdlXFxuLSAqIEByYW5nZTpcXHRhcmd1bWVudCBzdHJ1Y3R1cmVcXG4tICpcXG4tICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgZXJyb3IgY29kZXM6XFxuKy8qXFxuKyAqIGhtbV9kb19mYXVsdCAtIGZhdWx0IGluIGEgcmFuZ2UgcmVjb3JkZWQgYnkgYSB3YWxrIGNhbGxiYWNrXFxuICAqXFxuLSAqIC1FSU5WQUw6XFx0SW52YWxpZCBhcmd1bWVudHMgb3IgbW0gb3IgdmlydHVhbCBhZGRyZXNzIGlzIGluIGFuIGludmFsaWQgdm1hXFxuLSAqXFx0XFx0KGUuZy4sIGRldmljZSBmaWxlIHZtYSkuXFxuLSAqIC1FTk9NRU06XFx0T3V0IG9mIG1lbW9yeS5cXG4tICogLUVQRVJNOlxcdEludmFsaWQgcGVybWlzc2lvbiAoZS5nLiwgYXNraW5nIGZvciB3cml0ZSBhbmQgcmFuZ2UgaXMgcmVhZFxcbi0gKlxcdFxcdG9ubHkpLlxcbi0gKiAtRUJVU1k6XFx0VGhlIHJhbmdlIGhhcyBiZWVuIGludmFsaWRhdGVkIGFuZCB0aGUgY2FsbGVyIG5lZWRzIHRvIHdhaXQgZm9yXFxuLSAqXFx0XFx0dGhlIGludmFsaWRhdGlvbiB0byBmaW5pc2guXFxuLSAqIC1FRkFVTFQ6ICAgICBBIHBhZ2Ugd2FzIHJlcXVlc3RlZCB0byBiZSB2YWxpZCBhbmQgY291bGQgbm90IGJlIG1hZGUgdmFsaWRcXG4tICogICAgICAgICAgICAgIGllIGl0IGhhcyBubyBiYWNraW5nIFZNQSBvciBpdCBpcyBpbGxlZ2FsIHRvIGFjY2Vzc1xcbisgKiBDYWxsZWQgZnJvbSB0aGUgb3V0ZXIgbG9vcCBpbiBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkKCkgYWZ0ZXIgYSBjYWxsYmFja1xcbisgKiByZXR1cm5lZCBITU1fRkFVTFRfUEVORElORy4gIEF0IHRoaXMgcG9pbnQgd2UgaG9sZCBvbmx5IG1tYXBfbG9jaztcXG4rICogdGhlIHBhZ2UtdGFibGUgc3BpbmxvY2sgYW5kIGFueSBodWdldGxiX3ZtYV9sb2NrIGFjcXVpcmVkIGJ5IHRoZSB3YWxrXFxuKyAqIGZyYW1ld29yayBoYXZlIGFscmVhZHkgYmVlbiByZWxlYXNlZCBieSB0aGUgdW53aW5kLlxcbiAgKlxcbi0gKiBUaGlzIGlzIHNpbWlsYXIgdG8gZ2V0X3VzZXJfcGFnZXMoKSwgZXhjZXB0IHRoYXQgaXQgY2FuIHJlYWQgdGhlIHBhZ2UgdGFibGVzXFxuLSAqIHdpdGhvdXQgbXV0YXRpbmcgdGhlbSAoaWUgY2F1c2luZyBmYXVsdHMpLlxcbisgKiBSZXR1cm5zIC1FQlVTWSBvbiBzdWNjZXNzIChhbGwgcGFnZXMgZmF1bHRlZCwgY2FsbGVyIHNob3VsZCByZS13YWxrKS5cXG4rICogUmV0dXJucyBhIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuXFxuICAqL1xcbi1pbnQgaG1tX3JhbmdlX2ZhdWx0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKVxcbitzdGF0aWMgaW50IGhtbV9kb19mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4rXFx0XFx0XFx0c3RydWN0IGhtbV92bWFfd2FsayAqaG1tX3ZtYV93YWxrKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgYWRkciA9IGhtbV92bWFfd2Fsay1cXHUwMDNlbGFzdDtcXG4rXFx0dW5zaWduZWQgbG9uZyBlbmQgPSBobW1fdm1hX3dhbGstXFx1MDAzZWVuZDtcXG4rXFx0dW5zaWduZWQgaW50IHJlcXVpcmVkX2ZhdWx0ID0gaG1tX3ZtYV93YWxrLVxcdTAwM2VyZXF1aXJlZF9mYXVsdDtcXG4rXFx0dW5zaWduZWQgaW50IGZhdWx0X2ZsYWdzID0gRkFVTFRfRkxBR19SRU1PVEU7XFxuK1xcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xcbitcXG4rXFx0aWYgKGhtbV92bWFfd2Fsay1cXHUwMDNlbG9ja2VkKVxcbitcXHRcXHRmYXVsdF9mbGFncyB8PSBGQVVMVF9GTEFHX0FMTE9XX1JFVFJZIHwgRkFVTFRfRkxBR19LSUxMQUJMRTtcXG4rXFxuK1xcdHZtYSA9IHZtYV9sb29rdXAobW0sIGFkZHIpO1xcbitcXHRpZiAoIXZtYSlcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcbitcXHRpZiAocmVxdWlyZWRfZmF1bHQgXFx1MDAyNiBITU1fTkVFRF9XUklURV9GQVVMVCkge1xcbitcXHRcXHRpZiAoISh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fV1JJVEUpKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbitcXHRcXHRmYXVsdF9mbGFncyB8PSBGQVVMVF9GTEFHX1dSSVRFO1xcbitcXHR9XFxuK1xcbitcXHRmb3IgKDsgYWRkciBcXHUwMDNjIGVuZDsgYWRkciArPSBQQUdFX1NJWkUpIHtcXG4rXFx0XFx0dm1fZmF1bHRfdCByZXQ7XFxuK1xcbitcXHRcXHRyZXQgPSBoYW5kbGVfbW1fZmF1bHQodm1hLCBhZGRyLCBmYXVsdF9mbGFncywgTlVMTCk7XFxuK1xcbitcXHRcXHRpZiAocmV0IFxcdTAwMjYgKFZNX0ZBVUxUX0NPTVBMRVRFRCB8IFZNX0ZBVUxUX1JFVFJZKSkge1xcbitcXHRcXHRcXHQqaG1tX3ZtYV93YWxrLVxcdTAwM2Vsb2NrZWQgPSBmYWxzZTtcXG4rXFx0XFx0XFx0cmV0dXJuIEhNTV9GQVVMVF9VTkxPQ0tFRDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDI2IFZNX0ZBVUxUX0VSUk9SKSB7XFxuK1xcdFxcdFxcdGludCBlcnIgPSB2bV9mYXVsdF90b19lcnJubyhyZXQsIDApO1xcbitcXG4rXFx0XFx0XFx0aWYgKFdBUk5fT04oIWVycikpXFxuK1xcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuK1xcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAtRUJVU1k7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSwgYm9vbCAqbG9ja2VkKVxcbiB7XFxuIFxcdHN0cnVjdCBobW1fdm1hX3dhbGsgaG1tX3ZtYV93YWxrID0ge1xcbiBcXHRcXHQucmFuZ2UgPSByYW5nZSxcXG4rXFx0XFx0LmxvY2tlZCA9IGxvY2tlZCxcXG4gXFx0XFx0Lmxhc3QgPSByYW5nZS1cXHUwMDNlc3RhcnQsXFxuIFxcdH07XFxuIFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gcmFuZ2UtXFx1MDAzZW5vdGlmaWVyLVxcdTAwM2VtbTtcXG5AQCAtNjc0LDYgKzcwNSwyMiBAQCBpbnQgaG1tX3JhbmdlX2ZhdWx0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiBcXHRcXHRyZXQgPSB3YWxrX3BhZ2VfcmFuZ2UobW0sIGhtbV92bWFfd2Fsay5sYXN0LCByYW5nZS1cXHUwMDNlZW5kLFxcbiBcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2aG1tX3dhbGtfb3BzLCBcXHUwMDI2aG1tX3ZtYV93YWxrKTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogV2hlbiBITU1fRkFVTFRfUEVORElORyBpcyByZXR1cm5lZCBhIHdhbGsgY2FsbGJhY2tcXG4rXFx0XFx0ICogcmVjb3JkZWQgYSByYW5nZSB0aGF0IG5lZWRzIGhhbmRsZV9tbV9mYXVsdCgpO1xcbitcXHRcXHQgKiBobW1fZG9fZmF1bHQoKSBydW5zIHRoZSBmYXVsdCBvdXRzaWRlIHdhbGtfcGFnZV9yYW5nZSgpXFxuK1xcdFxcdCAqIChzbyBubyBwYWdlLXRhYmxlIG9yIGh1Z2V0bGJfdm1hX2xvY2sgaXMgaGVsZCkgYW5kXFxuK1xcdFxcdCAqIHJldHVybnMgLUVCVVNZIHNvIHRoZSBsb29wIHJlLXdhbGtzIGFuZCBwaWNrcyB1cCB0aGVcXG4rXFx0XFx0ICogbm93LXByZXNlbnQgZW50cmllcy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChyZXQgPT0gSE1NX0ZBVUxUX1BFTkRJTkcpIHtcXG4rXFx0XFx0XFx0cmV0ID0gaG1tX2RvX2ZhdWx0KG1tLCBcXHUwMDI2aG1tX3ZtYV93YWxrKTtcXG4rXFx0XFx0XFx0aWYgKHJldCA9PSBITU1fRkFVTFRfVU5MT0NLRUQpIHtcXG4rXFx0XFx0XFx0XFx0aWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxcbitcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlRSO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogV2hlbiAtRUJVU1kgaXMgcmV0dXJuZWQgdGhlIGxvb3AgcmVzdGFydHMgd2l0aFxcbiBcXHRcXHQgKiBobW1fdm1hX3dhbGsubGFzdCBzZXQgdG8gYW4gYWRkcmVzcyB0aGF0IGhhcyBub3QgYmVlbiBzdG9yZWRcXG5AQCAtNjgzLDggKzczMCwxMDAgQEAgaW50IGhtbV9yYW5nZV9mYXVsdChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSlcXG4gXFx0fSB3aGlsZSAocmV0ID09IC1FQlVTWSk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4rXFxuKy8qKlxcbisgKiBobW1fcmFuZ2VfZmF1bHQgLSB0cnkgdG8gZmF1bHQgc29tZSBhZGRyZXNzIGluIGEgdmlydHVhbCBhZGRyZXNzIHJhbmdlXFxuKyAqIEByYW5nZTpcXHRhcmd1bWVudCBzdHJ1Y3R1cmVcXG4rICpcXG4rICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgZXJyb3IgY29kZXM6XFxuKyAqXFxuKyAqIC1FSU5WQUw6XFx0SW52YWxpZCBhcmd1bWVudHMgb3IgbW0gb3IgdmlydHVhbCBhZGRyZXNzIGlzIGluIGFuIGludmFsaWQgdm1hXFxuKyAqXFx0XFx0KGUuZy4sIGRldmljZSBmaWxlIHZtYSkuXFxuKyAqIC1FTk9NRU06XFx0T3V0IG9mIG1lbW9yeS5cXG4rICogLUVQRVJNOlxcdEludmFsaWQgcGVybWlzc2lvbiAoZS5nLiwgYXNraW5nIGZvciB3cml0ZSBhbmQgcmFuZ2UgaXMgcmVhZFxcbisgKlxcdFxcdG9ubHkpLlxcbisgKiAtRUJVU1k6XFx0VGhlIHJhbmdlIGhhcyBiZWVuIGludmFsaWRhdGVkIGFuZCB0aGUgY2FsbGVyIG5lZWRzIHRvIHdhaXQgZm9yXFxuKyAqXFx0XFx0dGhlIGludmFsaWRhdGlvbiB0byBmaW5pc2guXFxuKyAqIC1FRkFVTFQ6ICAgICBBIHBhZ2Ugd2FzIHJlcXVlc3RlZCB0byBiZSB2YWxpZCBhbmQgY291bGQgbm90IGJlIG1hZGUgdmFsaWRcXG4rICogICAgICAgICAgICAgIGllIGl0IGhhcyBubyBiYWNraW5nIFZNQSBvciBpdCBpcyBpbGxlZ2FsIHRvIGFjY2Vzc1xcbisgKlxcbisgKiBUaGlzIGlzIHNpbWlsYXIgdG8gZ2V0X3VzZXJfcGFnZXMoKSwgZXhjZXB0IHRoYXQgaXQgY2FuIHJlYWQgdGhlIHBhZ2UgdGFibGVzXFxuKyAqIHdpdGhvdXQgbXV0YXRpbmcgdGhlbSAoaWUgY2F1c2luZyBmYXVsdHMpLlxcbisgKlxcbisgKiBUaGUgbW1hcCBsb2NrIG11c3QgYmUgaGVsZCBieSB0aGUgY2FsbGVyIGFuZCB3aWxsIHJlbWFpbiBoZWxkIG9uIHJldHVybi5cXG4rICogTmV3IHVzZXJzIHNob3VsZCBwcmVmZXIgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoKSB1bmxlc3MgdGhleVxcbisgKiBzcGVjaWZpY2FsbHkgbmVlZCB0byBrZWVwIHRoZSBtbWFwIGxvY2sgaGVsZCBhY3Jvc3MgdGhlIGNhbGwuIFRoaXMgaGVscGVyXFxuKyAqIGNhbm5vdCBzdXBwb3J0IFZNQXMgd2hvc2UgZmF1bHQgaGFuZGxlcnMgbmVlZCB0byBkcm9wIHRoZSBtbWFwIGxvY2suXFxuKyAqL1xcbitpbnQgaG1tX3JhbmdlX2ZhdWx0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKVxcbit7XFxuK1xcdHJldHVybiBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkKHJhbmdlLCBOVUxMKTtcXG4rfVxcbiBFWFBPUlRfU1lNQk9MKGhtbV9yYW5nZV9mYXVsdCk7XFxuIFxcbisvKipcXG4rICogaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQgLSBmYXVsdCBpbiBhIHJhbmdlIHdpdGggYSByZXRyeSB0aW1lb3V0XFxuKyAqIEByYW5nZTpcXHRhcmd1bWVudCBzdHJ1Y3R1cmVcXG4rICogQHRpbWVvdXQ6XFx0dGltZW91dCBpbiBqaWZmaWVzIGZvciBpbnRlcm5hbCAtRUJVU1kgcmV0cmllcywgb3IgMCB0byByZXRyeVxcbisgKlxcdFxcdGluZGVmaW5pdGVseVxcbisgKlxcbisgKiBUaGUgY2FsbGVyIG11c3Qgbm90IGhvbGQgdGhlIG1tYXAgbG9jay4gVGhlIGZ1bmN0aW9uIHRha2VzIHRoZSBtbWFwIHJlYWRcXG4rICogbG9jayBpbnRlcm5hbGx5IGFuZCBhbGxvd3MgaGFuZGxlX21tX2ZhdWx0KCkgdG8gZHJvcCBpdCBkdXJpbmcgZmF1bHRzLiBJZlxcbisgKiB0aGUgbW1hcCBsb2NrIGlzIGRyb3BwZWQgb3IgdGhlIHJhbmdlIGlzIGludmFsaWRhdGVkLCB0aGUgZnVuY3Rpb24gcmVmcmVzaGVzXFxuKyAqIHJhbmdlLVxcdTAwM2Vub3RpZmllcl9zZXEgYW5kIHJlc3RhcnRzIHRoZSB3YWxrIGludGVybmFsbHkuXFxuKyAqXFxuKyAqIFBhc3NpbmcgMCBmb3IgQHRpbWVvdXQgcmV0cmllcyBpbmRlZmluaXRlbHkuIEEgbm9uLXplcm8gQHRpbWVvdXQgaXMgYSBjYWxsZXJcXG4rICogcG9saWN5IGxpbWl0IGZvciByZXBlYXRlZCBtbXUtbm90aWZpZXIgaW52YWxpZGF0aW9uIHJldHJpZXMuIEhNTSBkb2VzIG5vdFxcbisgKiBpbnRlcnJ1cHQgcGFnZSBmYXVsdCBoYW5kbGluZyB3aGVuIHRoZSB0aW1lb3V0IGV4cGlyZXMsIGJ1dCByZXR1cm5zIC1FQlVTWVxcbisgKiBpZiB0aGUgcmV0cnkgYnVkZ2V0IGlzIGV4aGF1c3RlZCBiZWZvcmUgYSBzdGFibGUgcmFuZ2UgaXMgb2J0YWluZWQuXFxuKyAqXFxuKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG9uZSBvZiB0aGUgZXJyb3IgY29kZXMgZG9jdW1lbnRlZCBmb3JcXG4rICogaG1tX3JhbmdlX2ZhdWx0KCkuIC1FSU5UUiBpcyByZXR1cm5lZCBpZiBtbWFwX2xvY2sgYWNxdWlzaXRpb24gaXNcXG4rICogaW50ZXJydXB0ZWQgb3IgYSBmYXRhbCBzaWduYWwgaXMgcGVuZGluZyBkdXJpbmcgcmV0cnkgaGFuZGxpbmcuXFxuKyAqL1xcbitpbnQgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsXFxuK1xcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0KVxcbit7XFxuK1xcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gcmFuZ2UtXFx1MDAzZW5vdGlmaWVyLVxcdTAwM2VtbTtcXG4rXFx0dW5zaWduZWQgbG9uZyBkZWFkbGluZSA9IDA7XFxuK1xcdGJvb2wgbG9ja2VkID0gZmFsc2U7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRkbyB7XFxuK1xcdFxcdGlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5UUjtcXG4rXFxuK1xcdFxcdGlmICh0aW1lb3V0KSB7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIElmIHRoZSBwcmV2aW91cyBmYXVsdCBkcm9wcGVkIG1tYXBfbG9jaywgdGhlbiB0aGUgZmF1bHRcXG4rXFx0XFx0XFx0ICogaGFuZGxlciBtYWRlIHByb2dyZXNzLiBSZXN0YXJ0IHRoZSByZXRyeSB0aW1lb3V0IGluIHRoYXRcXG4rXFx0XFx0XFx0ICogY2FzZSwgYnV0IGtlZXAgdGhlIGV4aXN0aW5nIGRlYWRsaW5lIGZvciBvcmRpbmFyeSAtRUJVU1lcXG4rXFx0XFx0XFx0ICogcmV0cmllcy5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGlmICghbG9ja2VkKVxcbitcXHRcXHRcXHRcXHRkZWFkbGluZSA9IGppZmZpZXMgKyB0aW1lb3V0O1xcbitcXG4rXFx0XFx0XFx0aWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZGVhZGxpbmUpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRyYW5nZS1cXHUwMDNlbm90aWZpZXJfc2VxID1cXG4rXFx0XFx0XFx0bW11X2ludGVydmFsX3JlYWRfYmVnaW4ocmFuZ2UtXFx1MDAzZW5vdGlmaWVyKTtcXG4rXFxuK1xcdFxcdHJldCA9IG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKG1tKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdGxvY2tlZCA9IHRydWU7XFxuK1xcdFxcdHJldCA9IGhtbV9yYW5nZV9mYXVsdF9sb2NrZWQocmFuZ2UsIFxcdTAwMjZsb2NrZWQpO1xcbitcXHRcXHRpZiAobG9ja2VkKVxcbitcXHRcXHRcXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcXG4rXFx0fSB3aGlsZSAocmV0ID09IC1FQlVTWSk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK0VYUE9SVF9TWU1CT0woaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQpO1xcbitcXG4gLyoqXFxuICAqIGhtbV9kbWFfbWFwX2FsbG9jIC0gQWxsb2NhdGUgSE1NIG1hcCBzdHJ1Y3R1cmVcXG4gICogQGRldjogZGV2aWNlIHRvIGFsbG9jYXRlIHN0cnVjdHVyZSBmb3JcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xcbmluZGV4IDZmY2NiZGFiMDJlZTgxLi41YWNiNzI4NjY2ZjhjMSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jXFxuQEAgLTI5LDYgKzI5LDEwIEBAXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvbW1hbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL2lvY3RsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvdGltZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL3N5c2NhbGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9ldmVudGZkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC91c2VyZmF1bHRmZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjcG9sbC5oXFx1MDAzZVxcbiBcXG4gLypcXG4gICogVGhpcyBpcyBhIHByaXZhdGUgVUFQSSB0byB0aGUga2VybmVsIHRlc3QgbW9kdWxlIHNvIGl0IGlzbid0IGV4cG9ydGVkXFxuQEAgLTI5NTIsNCArMjk1NiwxNTAgQEAgVEVTVF9GX1RJTUVPVVQoaG1tLCBiZW5jaG1hcmtfdGhwX21pZ3JhdGlvbiwgMTIwKVxcbiBcXHRcXHRcXHRcXHRcXHRcXHUwMDI2dGhwX3Jlc3VsdHMsIFxcdTAwMjZyZWd1bGFyX3Jlc3VsdHMpO1xcbiBcXHR9XFxuIH1cXG4rLypcXG4rICogVGVzdCB0aGF0IEhNTSBjYW4gZmF1bHQgaW4gcGFnZXMgYmFja2VkIGJ5IHVzZXJmYXVsdGZkIHVzaW5nIHRoZVxcbisgKiBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpIHBhdGggd2l0aCBubyB0aW1lb3V0LiBUaGlzIGV4ZXJjaXNlc1xcbisgKiB0aGUgbG9jay1kcm9wIHJldHJ5IGxvZ2ljIGluIHRoZSBITU0gZnJhbWV3b3JrLlxcbisgKi9cXG4rc3RydWN0IHVmZmRfdGhyZWFkX2FyZ3Mge1xcbitcXHRpbnQgdWZmZDtcXG4rXFx0aW50IHN0b3BfZmQ7XFxuK1xcdHZvaWQgKnBhZ2VfYnVmZmVyO1xcbitcXHR1bnNpZ25lZCBsb25nIHBhZ2Vfc2l6ZTtcXG4rfTtcXG4rXFxuK3N0YXRpYyB2b2lkICp1ZmZkX2hhbmRsZXJfdGhyZWFkKHZvaWQgKmFyZylcXG4re1xcbitcXHRzdHJ1Y3QgdWZmZF90aHJlYWRfYXJncyAqYXJncyA9IGFyZztcXG4rXFx0c3RydWN0IHVmZmRfbXNnIG1zZztcXG4rXFx0c3RydWN0IHVmZmRpb19jb3B5IGNvcHk7XFxuK1xcdHN0cnVjdCBwb2xsZmQgcG9sbGZkWzJdO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cG9sbGZkWzBdLmZkID0gYXJncy1cXHUwMDNldWZmZDtcXG4rXFx0cG9sbGZkWzBdLmV2ZW50cyA9IFBPTExJTjtcXG4rXFx0cG9sbGZkWzFdLmZkID0gYXJncy1cXHUwMDNlc3RvcF9mZDtcXG4rXFx0cG9sbGZkWzFdLmV2ZW50cyA9IFBPTExJTjtcXG4rXFxuK1xcdHdoaWxlICgxKSB7XFxuK1xcdFxcdHJldCA9IHBvbGwocG9sbGZkLCAyLCAtMSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYz0gMClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGlmIChwb2xsZmRbMV0ucmV2ZW50cylcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGlmICghKHBvbGxmZFswXS5yZXZlbnRzIFxcdTAwMjYgUE9MTElOKSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRyZXQgPSByZWFkKGFyZ3MtXFx1MDAzZXVmZmQsIFxcdTAwMjZtc2csIHNpemVvZihtc2cpKTtcXG4rXFx0XFx0aWYgKHJldCAhPSBzaXplb2YobXNnKSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRpZiAobXNnLmV2ZW50ICE9IFVGRkRfRVZFTlRfUEFHRUZBVUxUKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdC8qIEZpbGwgdGhlIHBhZ2Ugd2l0aCBhIGtub3duIHBhdHRlcm4gKi9cXG4rXFx0XFx0bWVtc2V0KGFyZ3MtXFx1MDAzZXBhZ2VfYnVmZmVyLCAweEFCLCBhcmdzLVxcdTAwM2VwYWdlX3NpemUpO1xcbitcXG4rXFx0XFx0Y29weS5kc3QgPSBtc2cuYXJnLnBhZ2VmYXVsdC5hZGRyZXNzIFxcdTAwMjYgfihhcmdzLVxcdTAwM2VwYWdlX3NpemUgLSAxKTtcXG4rXFx0XFx0Y29weS5zcmMgPSAodW5zaWduZWQgbG9uZylhcmdzLVxcdTAwM2VwYWdlX2J1ZmZlcjtcXG4rXFx0XFx0Y29weS5sZW4gPSBhcmdzLVxcdTAwM2VwYWdlX3NpemU7XFxuK1xcdFxcdGNvcHkubW9kZSA9IDA7XFxuK1xcdFxcdGNvcHkuY29weSA9IDA7XFxuK1xcbitcXHRcXHRyZXQgPSBpb2N0bChhcmdzLVxcdTAwM2V1ZmZkLCBVRkZESU9fQ09QWSwgXFx1MDAyNmNvcHkpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbitURVNUX0YoaG1tLCB1c2VyZmF1bHRmZF9yZWFkKVxcbit7XFxuK1xcdHN0cnVjdCBobW1fYnVmZmVyICpidWZmZXI7XFxuK1xcdHN0cnVjdCB1ZmZkX3RocmVhZF9hcmdzIHVmZmRfYXJncztcXG4rXFx0dW5zaWduZWQgbG9uZyBucGFnZXM7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc2l6ZTtcXG4rXFx0dW5zaWduZWQgbG9uZyBpO1xcbitcXHR1bnNpZ25lZCBjaGFyICpwdHI7XFxuK1xcdHB0aHJlYWRfdCB0aHJlYWQ7XFxuK1xcdGludCB1ZmZkO1xcbitcXHRpbnQgc3RvcF9mZDtcXG4rXFx0aW50IHJldDtcXG4rXFx0c3RydWN0IHVmZmRpb19hcGkgYXBpO1xcbitcXHRzdHJ1Y3QgdWZmZGlvX3JlZ2lzdGVyIHJlZztcXG4rXFx0dWludDY0X3Qgc3RvcCA9IDE7XFxuK1xcdHNzaXplX3QgbndyaXRlO1xcbitcXG4rXFx0bnBhZ2VzID0gNDtcXG4rXFx0c2l6ZSA9IG5wYWdlcyBcXHUwMDNjXFx1MDAzYyBzZWxmLVxcdTAwM2VwYWdlX3NoaWZ0O1xcbitcXG4rXFx0LyogQ3JlYXRlIHVzZXJmYXVsdGZkICovXFxuK1xcdHVmZmQgPSBzeXNjYWxsKF9fTlJfdXNlcmZhdWx0ZmQsIE9fQ0xPRVhFQyB8IE9fTk9OQkxPQ0spO1xcbitcXHRpZiAodWZmZCBcXHUwMDNjIDApXFxuK1xcdFxcdFNLSVAocmV0dXJuLCBcXFwidXNlcmZhdWx0ZmQgbm90IGF2YWlsYWJsZVxcXCIpO1xcbitcXG4rXFx0YXBpLmFwaSA9IFVGRkRfQVBJO1xcbitcXHRhcGkuZmVhdHVyZXMgPSAwO1xcbitcXHRyZXQgPSBpb2N0bCh1ZmZkLCBVRkZESU9fQVBJLCBcXHUwMDI2YXBpKTtcXG4rXFx0QVNTRVJUX0VRKHJldCwgMCk7XFxuK1xcbitcXHRidWZmZXIgPSBtYWxsb2Moc2l6ZW9mKCpidWZmZXIpKTtcXG4rXFx0QVNTRVJUX05FKGJ1ZmZlciwgTlVMTCk7XFxuK1xcbitcXHRidWZmZXItXFx1MDAzZWZkID0gLTE7XFxuK1xcdGJ1ZmZlci1cXHUwMDNlc2l6ZSA9IHNpemU7XFxuK1xcdGJ1ZmZlci1cXHUwMDNlbWlycm9yID0gbWFsbG9jKHNpemUpO1xcbitcXHRBU1NFUlRfTkUoYnVmZmVyLVxcdTAwM2VtaXJyb3IsIE5VTEwpO1xcbitcXG4rXFx0LyogQ3JlYXRlIGFub255bW91cyBtYXBwaW5nICovXFxuK1xcdGJ1ZmZlci1cXHUwMDNlcHRyID0gbW1hcChOVUxMLCBzaXplLFxcbitcXHRcXHRcXHQgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxcbitcXHRcXHRcXHQgICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsXFxuK1xcdFxcdFxcdCAgIC0xLCAwKTtcXG4rXFx0QVNTRVJUX05FKGJ1ZmZlci1cXHUwMDNlcHRyLCBNQVBfRkFJTEVEKTtcXG4rXFxuK1xcdC8qIFJlZ2lzdGVyIHRoZSByZWdpb24gd2l0aCB1c2VyZmF1bHRmZCAqL1xcbitcXHRyZWcucmFuZ2Uuc3RhcnQgPSAodW5zaWduZWQgbG9uZylidWZmZXItXFx1MDAzZXB0cjtcXG4rXFx0cmVnLnJhbmdlLmxlbiA9IHNpemU7XFxuK1xcdHJlZy5tb2RlID0gVUZGRElPX1JFR0lTVEVSX01PREVfTUlTU0lORztcXG4rXFx0cmV0ID0gaW9jdGwodWZmZCwgVUZGRElPX1JFR0lTVEVSLCBcXHUwMDI2cmVnKTtcXG4rXFx0QVNTRVJUX0VRKHJldCwgMCk7XFxuK1xcbitcXHQvKiBTZXQgdXAgdGhlIGhhbmRsZXIgdGhyZWFkICovXFxuK1xcdHVmZmRfYXJncy51ZmZkID0gdWZmZDtcXG4rXFx0c3RvcF9mZCA9IGV2ZW50ZmQoMCwgRUZEX0NMT0VYRUMpO1xcbitcXHRBU1NFUlRfR0Uoc3RvcF9mZCwgMCk7XFxuK1xcdHVmZmRfYXJncy5zdG9wX2ZkID0gc3RvcF9mZDtcXG4rXFx0dWZmZF9hcmdzLnBhZ2VfYnVmZmVyID0gbWFsbG9jKHNlbGYtXFx1MDAzZXBhZ2Vfc2l6ZSk7XFxuK1xcdEFTU0VSVF9ORSh1ZmZkX2FyZ3MucGFnZV9idWZmZXIsIE5VTEwpO1xcbitcXHR1ZmZkX2FyZ3MucGFnZV9zaXplID0gc2VsZi1cXHUwMDNlcGFnZV9zaXplO1xcbitcXG4rXFx0cmV0ID0gcHRocmVhZF9jcmVhdGUoXFx1MDAyNnRocmVhZCwgTlVMTCwgdWZmZF9oYW5kbGVyX3RocmVhZCwgXFx1MDAyNnVmZmRfYXJncyk7XFxuK1xcdEFTU0VSVF9FUShyZXQsIDApO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVXNlIHRoZSB1bmxvY2tlZCByZWFkIHBhdGggd2hpY2ggYWxsb3dzIHRoZSBtbWFwIGxvY2sgdG8gYmVcXG4rXFx0ICogZHJvcHBlZCBkdXJpbmcgdGhlIGZhdWx0LCBlbmFibGluZyB1c2VyZmF1bHRmZCByZXNvbHV0aW9uLlxcbitcXHQgKi9cXG4rXFx0cmV0ID0gaG1tX2RtaXJyb3JfY21kKHNlbGYtXFx1MDAzZWZkLCBITU1fRE1JUlJPUl9SRUFEX1VOTE9DS0VELFxcbitcXHRcXHRcXHQgICAgICBidWZmZXIsIG5wYWdlcyk7XFxuK1xcdEFTU0VSVF9FUShyZXQsIDApO1xcbitcXHRBU1NFUlRfRVEoYnVmZmVyLVxcdTAwM2VjcGFnZXMsIG5wYWdlcyk7XFxuK1xcbitcXHQvKiBWZXJpZnkgdGhlIGRldmljZSByZWFkIHRoZSBkYXRhIGZpbGxlZCBieSB0aGUgdWZmZCBoYW5kbGVyICovXFxuK1xcdHB0ciA9IGJ1ZmZlci1cXHUwMDNlbWlycm9yO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc2l6ZTsgKytpKVxcbitcXHRcXHRBU1NFUlRfRVEocHRyW2ldLCAodW5zaWduZWQgY2hhcikweEFCKTtcXG4rXFxuK1xcdG53cml0ZSA9IHdyaXRlKHN0b3BfZmQsIFxcdTAwMjZzdG9wLCBzaXplb2Yoc3RvcCkpO1xcbitcXHRBU1NFUlRfRVEobndyaXRlLCBzaXplb2Yoc3RvcCkpO1xcbitcXHRwdGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKTtcXG4rXFx0Y2xvc2Uoc3RvcF9mZCk7XFxuK1xcdGZyZWUodWZmZF9hcmdzLnBhZ2VfYnVmZmVyKTtcXG4rXFx0Y2xvc2UodWZmZCk7XFxuK1xcdGhtbV9idWZmZXJfZnJlZShidWZmZXIpO1xcbit9XFxuK1xcbitcXG4gVEVTVF9IQVJORVNTX01BSU5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDA6MDk6MTEuMzMwMzMxMTU1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NTQxMDkxOTMyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJURVNUX0hNTVwiLFxuICAgIFwiRFJNX0FDQ0VMX0FNRFhETkFcIixcbiAgICBcIkRSTV9HUFVTVk1cIixcbiAgICBcIkRSTV9OT1VWRUFVX1NWTVwiLFxuICAgIFwiTVNIVl9ST09UXCIsXG4gICAgXCJJTkZJTklCQU5EX09OX0RFTUFORF9QQUdJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dFwiLFxuICAgIFwiaG1tX3JhbmdlX2ZhdWx0XCIsXG4gICAgXCJobW1fZG9fZmF1bHRcIixcbiAgICBcImhtbV9yYW5nZV9mYXVsdF9sb2NrZWRcIixcbiAgICBcImhtbV9yZWNvcmRfZmF1bHRcIixcbiAgICBcImRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWRcIixcbiAgICBcImRtaXJyb3JfZmF1bHRfdW5sb2NrZWRcIixcbiAgICBcImRtaXJyb3JfcmVhZF91bmxvY2tlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgdW5sb2NrZWQgdGltZW91dCB2YXJpYW50IGZvciBITU0gcmFuZ2UgZmF1bHRzIChgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgKSBhbmQgcmVmYWN0b3JzIHRoZSBleGlzdGluZyBgaG1tX3JhbmdlX2ZhdWx0YCB0byB1c2UgYSBsb2NrZWQgaGVscGVyLiBJdCBhbHNvIHVwZGF0ZXMgc2V2ZXJhbCBkcml2ZXJzIGFuZCB0aGUgSE1NIHRlc3QgbW9kdWxlIHRvIHVzZSB0aGUgbmV3IHVubG9ja2VkIHZhcmlhbnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkZXZpY2UgZHJpdmVyIGludGVyYWN0aW9uLCB3aGljaCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IHJldHJ5IGFuZCBsb2NraW5nIGxvZ2ljIGlzIHJvYnVzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZDA4MTI2NDY4YTNkMjg4ZTM5NmZkNmU2ZjY5YTlmYzJjNzBhNjU5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMTYgMDA6MDk6MDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL2htbS5yc3RcbmluZGV4IDdkNjFiN2E4YjY1Yjc5Li5lMDIxMjE4YWRhNThmZSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0XG5AQCAtMTU2LDQyICsxNTYsNTcgQEAgRHVyaW5nIHRoZSBvcHMtXHUwMDNlaW52YWxpZGF0ZSgpIGNhbGxiYWNrIHRoZSBkZXZpY2UgZHJpdmVyIG11c3QgcGVyZm9ybSB0aGVcbiB1cGRhdGUgYWN0aW9uIHRvIHRoZSByYW5nZSAobWFyayByYW5nZSByZWFkIG9ubHksIG9yIGZ1bGx5IHVubWFwLCBldGMuKS4gVGhlXG4gZGV2aWNlIG11c3QgY29tcGxldGUgdGhlIHVwZGF0ZSBiZWZvcmUgdGhlIGRyaXZlciBjYWxsYmFjayByZXR1cm5zLlxuIFxuLVdoZW4gdGhlIGRldmljZSBkcml2ZXIgd2FudHMgdG8gcG9wdWxhdGUgYSByYW5nZSBvZiB2aXJ0dWFsIGFkZHJlc3NlcywgaXQgY2FuXG4tdXNlOjpcbitXaGVuIHRoZSBkZXZpY2UgZHJpdmVyIHdhbnRzIHRvIHBvcHVsYXRlIGEgcmFuZ2Ugb2YgdmlydHVhbCBhZGRyZXNzZXMsIHRoZVxuK25vcm1hbCBpbnRlcmZhY2UgaXM6OlxuIFxuLSAgaW50IGhtbV9yYW5nZV9mYXVsdChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSk7XG4rICBpbnQgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0KTtcbiBcbiBJdCB3aWxsIHRyaWdnZXIgYSBwYWdlIGZhdWx0IG9uIG1pc3Npbmcgb3IgcmVhZC1vbmx5IGVudHJpZXMgaWYgd3JpdGUgYWNjZXNzIGlzXG4gcmVxdWVzdGVkIChzZWUgYmVsb3cpLiBQYWdlIGZhdWx0cyB1c2UgdGhlIGdlbmVyaWMgbW0gcGFnZSBmYXVsdCBjb2RlIHBhdGgganVzdFxuLWxpa2UgYSBDUFUgcGFnZSBmYXVsdC4gVGhlIHVzYWdlIHBhdHRlcm4gaXM6OlxuK2xpa2UgYSBDUFUgcGFnZSBmYXVsdC5cbitcbitUaGUgY2FsbGVyIG11c3Qgbm90IGhvbGQgYGBtbWFwX3JlYWRfbG9ja2BgIGJlZm9yZSB0aGUgY2FsbC5cbitgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KClgYCB0YWtlcyB0aGUgbW1hcCByZWFkIGxvY2sgaW50ZXJuYWxseSBhbmRcbithbGxvd3MgYGBoYW5kbGVfbW1fZmF1bHQoKWBgIHRvIGRyb3AgaXQgZHVyaW5nIGZhdWx0IGhhbmRsaW5nLiBUaGlzIGlzIHJlcXVpcmVkXG4rZm9yIFZNQXMgd2hvc2UgZmF1bHQgaGFuZGxlcnMgbWF5IHJlbGVhc2UgdGhlIG1tYXAgbG9jaywgZm9yIGV4YW1wbGUgcmVnaW9uc1xuK21hbmFnZWQgYnkgYGB1c2VyZmF1bHRmZGBgLlxuK1xuK0lmIHRoZSBtbWFwIGxvY2sgaXMgZHJvcHBlZCBvciB0aGUgcmFuZ2UgaXMgaW52YWxpZGF0ZWQsIHRoZSBmdW5jdGlvbiByZWZyZXNoZXNcbitgYHJhbmdlLVx1MDAzZW5vdGlmaWVyX3NlcWBgIGFuZCByZXN0YXJ0cyB0aGUgd2FsayBpbnRlcm5hbGx5LiBgYC1FSU5UUmBgIGlzIHJldHVybmVkXG4raWYgbW1hcCBsb2NrIGFjcXVpc2l0aW9uIGlzIGludGVycnVwdGVkIG9yIGEgZmF0YWwgc2lnbmFsIGlzIHBlbmRpbmcgZHVyaW5nXG4rcmV0cnkgaGFuZGxpbmcuXG4rXG4rVGhlIHRpbWVvdXQgaXMgc3BlY2lmaWVkIGluIGppZmZpZXM7IHBhc3NpbmcgYGAwYGAgbWVhbnMgcmV0cnkgaW5kZWZpbml0ZWx5LiBUaGVcbit0aW1lb3V0IGV4aXN0cyB0byBwcmVzZXJ2ZSBjYWxsZXIgcG9saWN5IGZvciByZXBlYXRlZCBtbXUtbm90aWZpZXIgaW52YWxpZGF0aW9uXG4rYW5kIGlzIGNoZWNrZWQgYmV0d2VlbiByZXRyeSBhdHRlbXB0cy4gSE1NIGRvZXMgbm90IGludGVycnVwdCBwYWdlIGZhdWx0XG4raGFuZGxpbmcgd2hlbiB0aGUgdGltZW91dCBleHBpcmVzLCBidXQgcmV0dXJucyBgYC1FQlVTWWBgIGlmIHRoZSByZXRyeSBidWRnZXQgaXNcbitleGhhdXN0ZWQgYmVmb3JlIGEgc3RhYmxlIHJhbmdlIGlzIG9idGFpbmVkLlxuK1xuK1RoZSB1c2FnZSBwYXR0ZXJuIGlzOjpcbiBcbiAgaW50IGRyaXZlcl9wb3B1bGF0ZV9yYW5nZSguLi4pXG4gIHtcbiAgICAgICBzdHJ1Y3QgaG1tX3JhbmdlIHJhbmdlO1xuKyAgICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dDtcbiAgICAgICAuLi5cbiBcbisgICAgICB0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcbiAgICAgICByYW5nZS5ub3RpZmllciA9IFx1MDAyNmludGVydmFsX3N1YjtcbiAgICAgICByYW5nZS5zdGFydCA9IC4uLjtcbiAgICAgICByYW5nZS5lbmQgPSAuLi47XG4gICAgICAgcmFuZ2UuaG1tX3BmbnMgPSAuLi47XG4gXG4tICAgICAgaWYgKCFtbWdldF9ub3RfemVybyhpbnRlcnZhbF9zdWItXHUwMDNlbm90aWZpZXIubW0pKVxuKyAgICAgIGlmICghbW1nZXRfbm90X3plcm8oaW50ZXJ2YWxfc3ViLm1tKSlcbiAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7XG4gXG4gIGFnYWluOlxuLSAgICAgIHJhbmdlLm5vdGlmaWVyX3NlcSA9IG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKFx1MDAyNmludGVydmFsX3N1Yik7XG4tICAgICAgbW1hcF9yZWFkX2xvY2sobW0pO1xuLSAgICAgIHJldCA9IGhtbV9yYW5nZV9mYXVsdChcdTAwMjZyYW5nZSk7XG4tICAgICAgaWYgKHJldCkge1xuLSAgICAgICAgICBtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbi0gICAgICAgICAgaWYgKHJldCA9PSAtRUJVU1kpXG4tICAgICAgICAgICAgICAgICBnb3RvIGFnYWluO1xuLSAgICAgICAgICByZXR1cm4gcmV0O1xuLSAgICAgIH1cbi0gICAgICBtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbisgICAgICByZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcdTAwMjZyYW5nZSwgdGltZW91dCk7XG4rICAgICAgaWYgKHJldClcbisgICAgICAgICAgZ290byBvdXRfcHV0O1xuIFxuICAgICAgIHRha2VfbG9jayhkcml2ZXItXHUwMDNldXBkYXRlKTtcbi0gICAgICBpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkoXHUwMDI2bmksIHJhbmdlLm5vdGlmaWVyX3NlcSkge1xuKyAgICAgIGlmIChtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeShyYW5nZS5ub3RpZmllciwgcmFuZ2Uubm90aWZpZXJfc2VxKSkge1xuICAgICAgICAgICByZWxlYXNlX2xvY2soZHJpdmVyLVx1MDAzZXVwZGF0ZSk7XG4gICAgICAgICAgIGdvdG8gYWdhaW47XG4gICAgICAgfVxuQEAgLTIwMCwxMyArMjE1LDMxIEBAIGxpa2UgYSBDUFUgcGFnZSBmYXVsdC4gVGhlIHVzYWdlIHBhdHRlcm4gaXM6OlxuICAgICAgICAqIHVuZGVyIHRoZSB1cGRhdGUgbG9jayAqL1xuIFxuICAgICAgIHJlbGVhc2VfbG9jayhkcml2ZXItXHUwMDNldXBkYXRlKTtcbi0gICAgICByZXR1cm4gMDtcbisgICAgICByZXQgPSAwO1xuK1xuKyBvdXRfcHV0OlxuKyAgICAgIG1tcHV0KGludGVydmFsX3N1Yi5tbSk7XG4rICAgICAgcmV0dXJuIHJldDtcbiAgfVxuIFxuIFRoZSBkcml2ZXItXHUwMDNldXBkYXRlIGxvY2sgaXMgdGhlIHNhbWUgbG9jayB0aGF0IHRoZSBkcml2ZXIgdGFrZXMgaW5zaWRlIGl0c1xuIGludmFsaWRhdGUoKSBjYWxsYmFjay4gVGhhdCBsb2NrIG11c3QgYmUgaGVsZCBiZWZvcmUgY2FsbGluZ1xuIG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KCkgdG8gYXZvaWQgYW55IHJhY2Ugd2l0aCBhIGNvbmN1cnJlbnQgQ1BVIHBhZ2UgdGFibGVcbi11cGRhdGUuXG4rdXBkYXRlLiBUaGUgcmV0cnkgY2hlY2sgbXVzdCB1c2UgdGhlIHNhbWUgbm90aWZpZXIgYW5kIHNlcXVlbmNlIG51bWJlciBzdG9yZWRcbitpbiBgYHJhbmdlYGAgYnkgYGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpYGAuXG4rXG4rSG9sZGluZyB0aGUgbW1hcCBsb2NrIGFjcm9zcyBITU0gZmF1bHRzXG4rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rXG4rTW9zdCBjYWxsZXJzIHNob3VsZCB1c2UgYGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpYGAuIElmIGEgZHJpdmVyXG4rcmVhbGx5IG5lZWRzIHRvIGhvbGQgdGhlIG1tYXAgbG9jayBhY3Jvc3Mgd29yayBvdXRzaWRlIEhNTSwgaXQgY2FuIHVzZTo6XG4rXG4rICBpbnQgaG1tX3JhbmdlX2ZhdWx0KHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKTtcbitcbitUaGUgbW1hcCBsb2NrIG11c3QgYmUgaGVsZCBieSB0aGUgY2FsbGVyIGFuZCB3aWxsIHJlbWFpbiBoZWxkIG9uIHJldHVybi4gVGhpc1xuK2ludGVyZmFjZSBjYW5ub3Qgc3VwcG9ydCBWTUFzIHdob3NlIGZhdWx0IGhhbmRsZXJzIG5lZWQgdG8gZHJvcCB0aGUgbW1hcCBsb2NrLlxuK05ldyBjYWxsZXJzIHNob3VsZCBwcmVmZXIgYGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpYGAgdW5sZXNzIHRoZXlcbitoYXZlIGEgc3BlY2lmaWMgcmVxdWlyZW1lbnQgdG8ga2VlcCB0aGUgbW1hcCBsb2NrIGhlbGQgYWNyb3NzIHRoZSBjYWxsLlxuIFxuIExldmVyYWdlIGRlZmF1bHRfZmxhZ3MgYW5kIHBmbl9mbGFnc19tYXNrXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbkBAIC0yMjEsOCArMjU0LDggQEAgcGVybWlzc2lvbiwgaXQgc2V0czo6XG4gICAgIHJhbmdlLVx1MDAzZWRlZmF1bHRfZmxhZ3MgPSBITU1fUEZOX1JFUV9GQVVMVDtcbiAgICAgcmFuZ2UtXHUwMDNlcGZuX2ZsYWdzX21hc2sgPSAwO1xuIFxuLWFuZCBjYWxscyBobW1fcmFuZ2VfZmF1bHQoKSBhcyBkZXNjcmliZWQgYWJvdmUuIFRoaXMgd2lsbCBmaWxsIGZhdWx0IGFsbCBwYWdlc1xuLWluIHRoZSByYW5nZSB3aXRoIGF0IGxlYXN0IHJlYWQgcGVybWlzc2lvbi5cbithbmQgY2FsbHMgdGhlIEhNTSByYW5nZSBmYXVsdCBoZWxwZXIgYXMgZGVzY3JpYmVkIGFib3ZlLiBUaGlzIHdpbGwgZmF1bHRcbithbGwgcGFnZXMgaW4gdGhlIHJhbmdlIHdpdGggYXQgbGVhc3QgcmVhZCBwZXJtaXNzaW9uLlxuIFxuIE5vdyBsZXQncyBzYXkgdGhlIGRyaXZlciB3YW50cyB0byBkbyB0aGUgc2FtZSBleGNlcHQgZm9yIG9uZSBwYWdlIGluIHRoZSByYW5nZSBmb3JcbiB3aGljaCBpdCB3YW50cyB0byBoYXZlIHdyaXRlIHBlcm1pc3Npb24uIE5vdyBkcml2ZXIgc2V0OjpcbkBAIC0yMzYsOSArMjY5LDkgQEAgYWRkcmVzcyA9PSByYW5nZS1cdTAwM2VzdGFydCArIChpbmRleF9vZl93cml0ZSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkgaXQgd2lsbCBmYXVsdCB3aXRoXG4gd3JpdGUgcGVybWlzc2lvbiBpLmUuLCBpZiB0aGUgQ1BVIHB0ZSBkb2VzIG5vdCBoYXZlIHdyaXRlIHBlcm1pc3Npb24gc2V0IHRoZW4gSE1NXG4gd2lsbCBjYWxsIGhhbmRsZV9tbV9mYXVsdCgpLlxuIFxuLUFmdGVyIGhtbV9yYW5nZV9mYXVsdCBjb21wbGV0ZXMgdGhlIGZsYWcgYml0cyBhcmUgc2V0IHRvIHRoZSBjdXJyZW50IHN0YXRlIG9mXG4tdGhlIHBhZ2UgdGFibGVzLCBpZSBITU1fUEZOX1ZBTElEIHwgSE1NX1BGTl9XUklURSB3aWxsIGJlIHNldCBpZiB0aGUgcGFnZSBpc1xuLXdyaXRhYmxlLlxuK0FmdGVyIHRoZSBITU0gcmFuZ2UgZmF1bHQgaGVscGVyIGNvbXBsZXRlcyB0aGUgZmxhZyBiaXRzIGFyZSBzZXQgdG8gdGhlXG4rY3VycmVudCBzdGF0ZSBvZiB0aGUgcGFnZSB0YWJsZXMsIGllIEhNTV9QRk5fVkFMSUQgfCBITU1fUEZOX1dSSVRFIHdpbGwgYmVcbitzZXQgaWYgdGhlIHBhZ2UgaXMgd3JpdGFibGUuXG4gXG4gXG4gUmVwcmVzZW50IGFuZCBtYW5hZ2UgZGV2aWNlIG1lbW9yeSBmcm9tIGNvcmUga2VybmVsIHBvaW50IG9mIHZpZXdcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguYyBiL2RyaXZlcnMvYWNjZWwvYW1keGRuYS9haWUyX2N0eC5jXG5pbmRleCA1NDQ4Njk2MGNiZjVlNi4uYjViNGNhMjYzMDAyZGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYWllMl9jdHguY1xuKysrIGIvZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FpZTJfY3R4LmNcbkBAIC0xMDM0LDcgKzEwMzQsNyBAQCBzdGF0aWMgaW50IGFpZTJfcG9wdWxhdGVfcmFuZ2Uoc3RydWN0IGFtZHhkbmFfZ2VtX29iaiAqYWJvKVxuIFx0Ym9vbCBmb3VuZDtcbiBcdGludCByZXQ7XG4gXG4tXHR0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7XG4rXHR0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcbiBhZ2FpbjpcbiBcdGZvdW5kID0gZmFsc2U7XG4gXHRkb3duX3dyaXRlKFx1MDAyNnhkbmEtXHUwMDNlbm90aWZpZXJfbG9jayk7XG5AQCAtMTA2MSwyNCArMTA2MSw5IEBAIHN0YXRpYyBpbnQgYWllMl9wb3B1bGF0ZV9yYW5nZShzdHJ1Y3QgYW1keGRuYV9nZW1fb2JqICphYm8pXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuIFx0fVxuIFxuLVx0bWFwcC1cdTAwM2VyYW5nZS5ub3RpZmllcl9zZXEgPSBtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihcdTAwMjZtYXBwLVx1MDAzZW5vdGlmaWVyKTtcbi1cdG1tYXBfcmVhZF9sb2NrKG1tKTtcbi1cdHJldCA9IGhtbV9yYW5nZV9mYXVsdChcdTAwMjZtYXBwLVx1MDAzZXJhbmdlKTtcbi1cdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuLVx0aWYgKHJldCkge1xuLVx0XHRpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkge1xuLVx0XHRcdHJldCA9IC1FVElNRTtcbi1cdFx0XHRnb3RvIHB1dF9tbTtcbi1cdFx0fVxuLVxuLVx0XHRpZiAocmV0ID09IC1FQlVTWSkge1xuLVx0XHRcdGFtZHhkbmFfdW1hcF9wdXQobWFwcCk7XG4tXHRcdFx0bW1wdXQobW0pO1xuLVx0XHRcdGdvdG8gYWdhaW47XG4tXHRcdH1cbi1cbitcdHJldCA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNm1hcHAtXHUwMDNlcmFuZ2UsIHRpbWVvdXQpO1xuK1x0aWYgKHJldClcbiBcdFx0Z290byBwdXRfbW07XG4tXHR9XG4gXG4gXHRkb3duX3dyaXRlKFx1MDAyNnhkbmEtXHUwMDNlbm90aWZpZXJfbG9jayk7XG4gXHRpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkoXHUwMDI2bWFwcC1cdTAwM2Vub3RpZmllciwgbWFwcC1cdTAwM2VyYW5nZS5ub3RpZmllcl9zZXEpKSB7XG5AQCAtMTA5Niw3ICsxMDgxLDcgQEAgc3RhdGljIGludCBhaWUyX3BvcHVsYXRlX3JhbmdlKHN0cnVjdCBhbWR4ZG5hX2dlbV9vYmogKmFibylcbiBwdXRfbW06XG4gXHRhbWR4ZG5hX3VtYXBfcHV0KG1hcHApO1xuIFx0bW1wdXQobW0pO1xuLVx0cmV0dXJuIHJldDtcbitcdHJldHVybiByZXQgPT0gLUVCVVNZID8gLUVUSU1FIDogcmV0O1xuIH1cbiBcbiBpbnQgYWllMl9jbWRfc3VibWl0KHN0cnVjdCBhbWR4ZG5hX2h3Y3R4ICpod2N0eCwgc3RydWN0IGFtZHhkbmFfc2NoZWRfam9iICpqb2IsIHU2NCAqc2VxKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jXG5pbmRleCA5NThjYjYwNWFlZGQ1My4uZGU1YmJmZTU4ZWU5NDUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jXG4rKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dwdXN2bS5jXG5AQCAtNzczLDggKzc3Myw3IEBAIGVudW0gZHJtX2dwdXN2bV9zY2FuX3Jlc3VsdCBkcm1fZ3B1c3ZtX3NjYW5fbW0oc3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKnJhbmdlLFxuIFx0XHQuZW5kID0gZW5kLFxuIFx0XHQuZGV2X3ByaXZhdGVfb3duZXIgPSBkZXZfcHJpdmF0ZV9vd25lcixcbiBcdH07XG4tXHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPVxuLVx0XHRqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcbitcdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7XG4gXHRlbnVtIGRybV9ncHVzdm1fc2Nhbl9yZXN1bHQgc3RhdGUgPSBEUk1fR1BVU1ZNX1NDQU5fVU5QT1BVTEFURUQsIG5ld19zdGF0ZTtcbiBcdHVuc2lnbmVkIGxvbmcgKnBmbnM7XG4gXHR1bnNpZ25lZCBsb25nIG5wYWdlcyA9IG5wYWdlc19pbl9yYW5nZShzdGFydCwgZW5kKTtcbkBAIC03ODgsMjIgKzc4Nyw3IEBAIGVudW0gZHJtX2dwdXN2bV9zY2FuX3Jlc3VsdCBkcm1fZ3B1c3ZtX3NjYW5fbW0oc3RydWN0IGRybV9ncHVzdm1fcmFuZ2UgKnJhbmdlLFxuIFx0aG1tX3JhbmdlLmhtbV9wZm5zID0gcGZucztcbiBcbiByZXRyeTpcbi1cdGhtbV9yYW5nZS5ub3RpZmllcl9zZXEgPSBtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihub3RpZmllcik7XG4tXHRtbWFwX3JlYWRfbG9jayhyYW5nZS1cdTAwM2VncHVzdm0tXHUwMDNlbW0pO1xuLVxuLVx0d2hpbGUgKHRydWUpIHtcbi1cdFx0ZXJyID0gaG1tX3JhbmdlX2ZhdWx0KFx1MDAyNmhtbV9yYW5nZSk7XG4tXHRcdGlmIChlcnIgPT0gLUVCVVNZKSB7XG4tXHRcdFx0aWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpXG4tXHRcdFx0XHRicmVhaztcbi1cbi1cdFx0XHRobW1fcmFuZ2Uubm90aWZpZXJfc2VxID1cbi1cdFx0XHRcdG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKG5vdGlmaWVyKTtcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuLVx0XHRicmVhaztcbi1cdH1cbi1cdG1tYXBfcmVhZF91bmxvY2socmFuZ2UtXHUwMDNlZ3B1c3ZtLVx1MDAzZW1tKTtcbitcdGVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNmhtbV9yYW5nZSwgdGltZW91dCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9mcmVlO1xuIFxuQEAgLTE0MDYsOCArMTM5MCw3IEBAIGludCBkcm1fZ3B1c3ZtX2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2dwdXN2bSAqZ3B1c3ZtLFxuIFx0XHQuZGV2X3ByaXZhdGVfb3duZXIgPSBjdHgtXHUwMDNlZGV2aWNlX3ByaXZhdGVfcGFnZV9vd25lcixcbiBcdH07XG4gXHR2b2lkICp6ZGQ7XG4tXHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPVxuLVx0XHRqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcbitcdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7XG4gXHR1bnNpZ25lZCBsb25nIGksIGo7XG4gXHR1bnNpZ25lZCBsb25nIG5wYWdlcyA9IG5wYWdlc19pbl9yYW5nZShwYWdlc19zdGFydCwgcGFnZXNfZW5kKTtcbiBcdHVuc2lnbmVkIGxvbmcgbnVtX2RtYV9tYXBwZWQ7XG5AQCAtMTQyMiw5ICsxNDA1LDYgQEAgaW50IGRybV9ncHVzdm1fZ2V0X3BhZ2VzKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXG4gXHRzdHJ1Y3QgZG1hX2lvdmFfc3RhdGUgKnN0YXRlID0gXHUwMDI2c3ZtX3BhZ2VzLVx1MDAzZXN0YXRlO1xuIFxuIHJldHJ5OlxuLVx0aWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpXG4tXHRcdHJldHVybiAtRUJVU1k7XG4tXG4gXHRobW1fcmFuZ2Uubm90aWZpZXJfc2VxID0gbW11X2ludGVydmFsX3JlYWRfYmVnaW4obm90aWZpZXIpO1xuIFx0aWYgKGRybV9ncHVzdm1fcGFnZXNfdmFsaWRfdW5sb2NrZWQoZ3B1c3ZtLCBzdm1fcGFnZXMpKVxuIFx0XHRnb3RvIHNldF9zZXFubztcbkBAIC0xNDM5LDIxICsxNDE5LDcgQEAgaW50IGRybV9ncHVzdm1fZ2V0X3BhZ2VzKHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXG4gXHR9XG4gXG4gXHRobW1fcmFuZ2UuaG1tX3BmbnMgPSBwZm5zO1xuLVx0d2hpbGUgKHRydWUpIHtcbi1cdFx0bW1hcF9yZWFkX2xvY2sobW0pO1xuLVx0XHRlcnIgPSBobW1fcmFuZ2VfZmF1bHQoXHUwMDI2aG1tX3JhbmdlKTtcbi1cdFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4tXG4tXHRcdGlmIChlcnIgPT0gLUVCVVNZKSB7XG4tXHRcdFx0aWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpXG4tXHRcdFx0XHRicmVhaztcbi1cbi1cdFx0XHRobW1fcmFuZ2Uubm90aWZpZXJfc2VxID1cbi1cdFx0XHRcdG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKG5vdGlmaWVyKTtcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuLVx0XHRicmVhaztcbi1cdH1cbitcdGVyciA9IGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0KFx1MDAyNmhtbV9yYW5nZSwgdGltZW91dCk7XG4gXHRtbXB1dChtbSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9mcmVlO1xuQEAgLTE3MjAsOCArMTY4Niw3IEBAIGludCBkcm1fZ3B1c3ZtX3JhbmdlX2V2aWN0KHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXG4gXHRcdC5lbmQgPSBkcm1fZ3B1c3ZtX3JhbmdlX2VuZChyYW5nZSksXG4gXHRcdC5kZXZfcHJpdmF0ZV9vd25lciA9IE5VTEwsXG4gXHR9O1xuLVx0dW5zaWduZWQgbG9uZyB0aW1lb3V0ID1cbi1cdFx0amlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoSE1NX1JBTkdFX0RFRkFVTFRfVElNRU9VVCk7XG4rXHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xuIFx0dW5zaWduZWQgbG9uZyAqcGZucztcbiBcdHVuc2lnbmVkIGxvbmcgbnBhZ2VzID0gbnBhZ2VzX2luX3JhbmdlKGRybV9ncHVzdm1fcmFuZ2Vfc3RhcnQocmFuZ2UpLFxuIFx0XHRcdFx0XHQgICAgICAgZHJtX2dwdXN2bV9yYW5nZV9lbmQocmFuZ2UpKTtcbkBAIC0xNzM2LDI0ICsxNzAxLDEyIEBAIGludCBkcm1fZ3B1c3ZtX3JhbmdlX2V2aWN0KHN0cnVjdCBkcm1fZ3B1c3ZtICpncHVzdm0sXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0aG1tX3JhbmdlLmhtbV9wZm5zID0gcGZucztcbi1cdHdoaWxlICghdGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkge1xuLVx0XHRobW1fcmFuZ2Uubm90aWZpZXJfc2VxID0gbW11X2ludGVydmFsX3JlYWRfYmVnaW4obm90aWZpZXIpO1xuLVx0XHRpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkge1xuLVx0XHRcdGVyciA9IC1FVElNRTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVxuLVx0XHRtbWFwX3JlYWRfbG9jayhtbSk7XG4tXHRcdGVyciA9IGhtbV9yYW5nZV9mYXVsdChcdTAwMjZobW1fcmFuZ2UpO1xuLVx0XHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbi1cdFx0aWYgKGVyciAhPSAtRUJVU1kpXG4tXHRcdFx0YnJlYWs7XG4tXHR9XG4rXHRlcnIgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcdTAwMjZobW1fcmFuZ2UsIHRpbWVvdXQpO1xuIFxuIFx0a3ZmcmVlKHBmbnMpO1xuIFx0bW1wdXQobW0pO1xuIFxuLVx0cmV0dXJuIGVycjtcbitcdHJldHVybiBlcnIgPT0gLUVCVVNZID8gLUVUSU1FIDogZXJyO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ3B1c3ZtX3JhbmdlX2V2aWN0KTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N2bS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uY1xuaW5kZXggZGNjOTIxMzE0ODhlYWIuLjU4NzM1NDQ2ZDc4MzJjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uY1xuKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdm0uY1xuQEAgLTY3OCwyMCArNjc4LDIyIEBAIHN0YXRpYyBpbnQgbm91dmVhdV9yYW5nZV9mYXVsdChzdHJ1Y3Qgbm91dmVhdV9zdm1tICpzdm1tLFxuIFx0cmFuZ2UuZW5kID0gbm90aWZpZXItXHUwMDNlbm90aWZpZXIuaW50ZXJ2YWxfdHJlZS5sYXN0ICsgMTtcbiBcbiBcdHdoaWxlICh0cnVlKSB7XG4tXHRcdGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7XG4rXHRcdGxvbmcgcmVtYWluaW5nID0gdGltZW91dCAtIGppZmZpZXM7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIFRoZSBITU0gdGltZW91dCBvbmx5IGJvdW5kcyByZXRyaWVzIHdoaWxlIEhNTSBpcyB3YWxraW5nIGFuZFxuK1x0XHQgKiBmYXVsdGluZyB0aGUgcmFuZ2UuIFRoaXMgZmF1bHQgaXMgaGFuZGxlZCBieSBhIGtlcm5lbCB3b3JrZXIsXG4rXHRcdCAqIHNvIGZhdGFsIHNpZ25hbHMgZnJvbSB0aGUgZmF1bHRpbmcgcHJvY2VzcyBjYW5ub3Qgc3RvcCBhblxuK1x0XHQgKiBlbmRsZXNzIHN0cmVhbSBvZiBpbnZhbGlkYXRpb25zIGhlcmUuXG4rXHRcdCAqL1xuK1x0XHRpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCB0aW1lb3V0KSkge1xuIFx0XHRcdHJldCA9IC1FQlVTWTtcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFxuLVx0XHRyYW5nZS5ub3RpZmllcl9zZXEgPSBtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihyYW5nZS5ub3RpZmllcik7XG4tXHRcdG1tYXBfcmVhZF9sb2NrKG1tKTtcbi1cdFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0KFx1MDAyNnJhbmdlKTtcbi1cdFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4tXHRcdGlmIChyZXQpIHtcbi1cdFx0XHRpZiAocmV0ID09IC1FQlVTWSlcbi1cdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcdTAwMjZyYW5nZSwgcmVtYWluaW5nKTtcbitcdFx0aWYgKHJldClcbiBcdFx0XHRnb3RvIG91dDtcbi1cdFx0fVxuIFxuIFx0XHRtdXRleF9sb2NrKFx1MDAyNnN2bW0tXHUwMDNlbXV0ZXgpO1xuIFx0XHRpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkocmFuZ2Uubm90aWZpZXIsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuYyBiL2RyaXZlcnMvaHYvbXNodl9yZWdpb25zLmNcbmluZGV4IDZkNjVlNWI0MjE1Mjk1Li5kZGRhYWRlMzFiNWRjMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaHYvbXNodl9yZWdpb25zLmNcbisrKyBiL2RyaXZlcnMvaHYvbXNodl9yZWdpb25zLmNcbkBAIC0zODEsNDYgKzM4MSw2IEBAIGludCBtc2h2X3JlZ2lvbl9nZXQoc3RydWN0IG1zaHZfbWVtX3JlZ2lvbiAqcmVnaW9uKVxuIFx0cmV0dXJuIGtyZWZfZ2V0X3VubGVzc196ZXJvKFx1MDAyNnJlZ2lvbi1cdTAwM2VtcmVnX3JlZmNvdW50KTtcbiB9XG4gXG4tLyoqXG4tICogbXNodl9yZWdpb25faG1tX2ZhdWx0X2FuZF9sb2NrIC0gSGFuZGxlIEhNTSBmYXVsdHMgYW5kIGxvY2sgdGhlIG1lbW9yeSByZWdpb25cbi0gKiBAcmVnaW9uOiBQb2ludGVyIHRvIHRoZSBtZW1vcnkgcmVnaW9uIHN0cnVjdHVyZVxuLSAqIEByYW5nZTogUG9pbnRlciB0byB0aGUgSE1NIHJhbmdlIHN0cnVjdHVyZVxuLSAqXG4tICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyB0aGUgZm9sbG93aW5nIHN0ZXBzOlxuLSAqIDEuIFJlYWRzIHRoZSBub3RpZmllciBzZXF1ZW5jZSBmb3IgdGhlIEhNTSByYW5nZS5cbi0gKiAyLiBBY3F1aXJlcyBhIHJlYWQgbG9jayBvbiB0aGUgbWVtb3J5IG1hcC5cbi0gKiAzLiBIYW5kbGVzIEhNTSBmYXVsdHMgZm9yIHRoZSBzcGVjaWZpZWQgcmFuZ2UuXG4tICogNC4gUmVsZWFzZXMgdGhlIHJlYWQgbG9jayBvbiB0aGUgbWVtb3J5IG1hcC5cbi0gKiA1LiBJZiBzdWNjZXNzZnVsLCBsb2NrcyB0aGUgbWVtb3J5IHJlZ2lvbiBtdXRleC5cbi0gKiA2LiBWZXJpZmllcyBpZiB0aGUgbm90aWZpZXIgc2VxdWVuY2UgaGFzIGNoYW5nZWQgZHVyaW5nIHRoZSBvcGVyYXRpb24uXG4tICogICAgSWYgaXQgaGFzLCByZWxlYXNlcyB0aGUgbXV0ZXggYW5kIHJldHVybnMgLUVCVVNZIHRvIG1hdGNoIHdpdGhcbi0gKiAgICBobW1fcmFuZ2VfZmF1bHQoKSByZXR1cm4gY29kZSBmb3IgcmVwZWF0aW5nLlxuLSAqXG4tICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuXG4tICovXG4tc3RhdGljIGludCBtc2h2X3JlZ2lvbl9obW1fZmF1bHRfYW5kX2xvY2soc3RydWN0IG1zaHZfbWVtX3JlZ2lvbiAqcmVnaW9uLFxuLVx0XHRcdFx0XHQgIHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKVxuLXtcbi1cdGludCByZXQ7XG4tXG4tXHRyYW5nZS1cdTAwM2Vub3RpZmllcl9zZXEgPSBtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihyYW5nZS1cdTAwM2Vub3RpZmllcik7XG4tXHRtbWFwX3JlYWRfbG9jayhyZWdpb24tXHUwMDNlbXJlZ19tbmkubW0pO1xuLVx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0KHJhbmdlKTtcbi1cdG1tYXBfcmVhZF91bmxvY2socmVnaW9uLVx1MDAzZW1yZWdfbW5pLm1tKTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4tXG4tXHRtdXRleF9sb2NrKFx1MDAyNnJlZ2lvbi1cdTAwM2VtcmVnX211dGV4KTtcbi1cbi1cdGlmIChtbXVfaW50ZXJ2YWxfcmVhZF9yZXRyeShyYW5nZS1cdTAwM2Vub3RpZmllciwgcmFuZ2UtXHUwMDNlbm90aWZpZXJfc2VxKSkge1xuLVx0XHRtdXRleF91bmxvY2soXHUwMDI2cmVnaW9uLVx1MDAzZW1yZWdfbXV0ZXgpO1xuLVx0XHRjb25kX3Jlc2NoZWQoKTtcbi1cdFx0cmV0dXJuIC1FQlVTWTtcbi1cdH1cbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbiAvKipcbiAgKiBtc2h2X3JlZ2lvbl9yYW5nZV9mYXVsdCAtIEhhbmRsZSBtZW1vcnkgcmFuZ2UgZmF1bHRzIGZvciBhIGdpdmVuIHJlZ2lvbi5cbiAgKiBAcmVnaW9uOiBQb2ludGVyIHRvIHRoZSBtZW1vcnkgcmVnaW9uIHN0cnVjdHVyZS5cbkBAIC00NTIsMTMgKzQxMiwxOSBAQCBzdGF0aWMgaW50IG1zaHZfcmVnaW9uX3JhbmdlX2ZhdWx0KHN0cnVjdCBtc2h2X21lbV9yZWdpb24gKnJlZ2lvbixcbiBcdHJhbmdlLnN0YXJ0ID0gcmVnaW9uLVx1MDAzZXN0YXJ0X3VhZGRyICsgcGFnZV9vZmZzZXQgKiBIVl9IWVBfUEFHRV9TSVpFO1xuIFx0cmFuZ2UuZW5kID0gcmFuZ2Uuc3RhcnQgKyBwYWdlX2NvdW50ICogSFZfSFlQX1BBR0VfU0laRTtcbiBcbi1cdGRvIHtcbi1cdFx0cmV0ID0gbXNodl9yZWdpb25faG1tX2ZhdWx0X2FuZF9sb2NrKHJlZ2lvbiwgXHUwMDI2cmFuZ2UpO1xuLVx0fSB3aGlsZSAocmV0ID09IC1FQlVTWSk7XG4tXG4rYWdhaW46XG4rXHRyZXQgPSBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChcdTAwMjZyYW5nZSwgMCk7XG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIG91dDtcbiBcbitcdG11dGV4X2xvY2soXHUwMDI2cmVnaW9uLVx1MDAzZW1yZWdfbXV0ZXgpO1xuK1xuK1x0aWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KHJhbmdlLm5vdGlmaWVyLCByYW5nZS5ub3RpZmllcl9zZXEpKSB7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZyZWdpb24tXHUwMDNlbXJlZ19tdXRleCk7XG4rXHRcdGNvbmRfcmVzY2hlZCgpO1xuK1x0XHRnb3RvIGFnYWluO1xuK1x0fVxuK1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGFnZV9jb3VudDsgaSsrKVxuIFx0XHRyZWdpb24tXHUwMDNlbXJlZ19wYWdlc1twYWdlX29mZnNldCArIGldID0gaG1tX3Bmbl90b19wYWdlKHBmbnNbaV0pO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jXG5pbmRleCA0MDRmYTFjYzMyNTQyYy4uOWNjMjFjZDc2MmQ5ODkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jXG4rKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jXG5AQCAtMzI5LDcgKzMyOSw3IEBAIGludCBpYl91bWVtX29kcF9tYXBfZG1hX2FuZF9sb2NrKHN0cnVjdCBpYl91bWVtX29kcCAqdW1lbV9vZHAsIHU2NCB1c2VyX3ZpcnQsXG4gXHRzdHJ1Y3QgbW1fc3RydWN0ICpvd25pbmdfbW0gPSB1bWVtX29kcC1cdTAwM2V1bWVtLm93bmluZ19tbTtcbiBcdGludCBwZm5faW5kZXgsIGRtYV9pbmRleCwgcmV0ID0gMCwgc3RhcnRfaWR4O1xuIFx0dW5zaWduZWQgaW50IHBhZ2Vfc2hpZnQsIGhtbV9vcmRlciwgcGZuX3N0YXJ0X2lkeDtcbi1cdHVuc2lnbmVkIGxvbmcgbnVtX3BmbnMsIGN1cnJlbnRfc2VxO1xuK1x0dW5zaWduZWQgbG9uZyBudW1fcGZucztcbiBcdHN0cnVjdCBobW1fcmFuZ2UgcmFuZ2UgPSB7fTtcbiBcdHVuc2lnbmVkIGxvbmcgdGltZW91dDtcbiBcbkBAIC0zNjMsMjYgKzM2MywxOCBAQCBpbnQgaWJfdW1lbV9vZHBfbWFwX2RtYV9hbmRfbG9jayhzdHJ1Y3QgaWJfdW1lbV9vZHAgKnVtZW1fb2RwLCB1NjQgdXNlcl92aXJ0LFxuIFx0fVxuIFxuIFx0cmFuZ2UuaG1tX3BmbnMgPSBcdTAwMjYodW1lbV9vZHAtXHUwMDNlbWFwLnBmbl9saXN0W3Bmbl9zdGFydF9pZHhdKTtcbi1cdHRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhITU1fUkFOR0VfREVGQVVMVF9USU1FT1VUKTtcbitcdHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQpO1xuIFxuIHJldHJ5OlxuLVx0Y3VycmVudF9zZXEgPSByYW5nZS5ub3RpZmllcl9zZXEgPVxuLVx0XHRtbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihcdTAwMjZ1bWVtX29kcC1cdTAwM2Vub3RpZmllcik7XG4tXG4tXHRtbWFwX3JlYWRfbG9jayhvd25pbmdfbW0pO1xuLVx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0KFx1MDAyNnJhbmdlKTtcbi1cdG1tYXBfcmVhZF91bmxvY2sob3duaW5nX21tKTtcbi1cdGlmICh1bmxpa2VseShyZXQpKSB7XG4tXHRcdGlmIChyZXQgPT0gLUVCVVNZIFx1MDAyNlx1MDAyNiAhdGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSlcbi1cdFx0XHRnb3RvIHJldHJ5O1xuK1x0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQoXHUwMDI2cmFuZ2UsIHRpbWVvdXQpO1xuK1x0aWYgKHVubGlrZWx5KHJldCkpXG4gXHRcdGdvdG8gb3V0X3B1dF9tbTtcbi1cdH1cbiBcbiBcdHN0YXJ0X2lkeCA9IChyYW5nZS5zdGFydCAtIGliX3VtZW1fc3RhcnQodW1lbV9vZHApKSBcdTAwM2VcdTAwM2UgcGFnZV9zaGlmdDtcbiBcdGRtYV9pbmRleCA9IHN0YXJ0X2lkeDtcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2dW1lbV9vZHAtXHUwMDNldW1lbV9tdXRleCk7XG4tXHRpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkoXHUwMDI2dW1lbV9vZHAtXHUwMDNlbm90aWZpZXIsIGN1cnJlbnRfc2VxKSkge1xuK1x0aWYgKG1tdV9pbnRlcnZhbF9yZWFkX3JldHJ5KFx1MDAyNnVtZW1fb2RwLVx1MDAzZW5vdGlmaWVyLCByYW5nZS5ub3RpZmllcl9zZXEpKSB7XG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZ1bWVtX29kcC1cdTAwM2V1bWVtX211dGV4KTtcbiBcdFx0Z290byByZXRyeTtcbiBcdH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2htbS5oIGIvaW5jbHVkZS9saW51eC9obW0uaFxuaW5kZXggZGI3NWZmYzk0OWE3YWMuLjZmMDRlMzkzMmY1YjBjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9obW0uaFxuKysrIGIvaW5jbHVkZS9saW51eC9obW0uaFxuQEAgLTEyMyw2ICsxMjMsOCBAQCBzdHJ1Y3QgaG1tX3JhbmdlIHtcbiAgKiBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vbW0vaG1tLnJzdCBmb3IgaG93IHRvIHVzZSB0aGUgcmFuZ2UgQVBJLlxuICAqL1xuIGludCBobW1fcmFuZ2VfZmF1bHQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpO1xuK2ludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSxcbitcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0KTtcbiBcbiAvKlxuICAqIEhNTV9SQU5HRV9ERUZBVUxUX1RJTUVPVVQgLSBkZWZhdWx0IHRpbWVvdXQgKG1zKSB3aGVuIHdhaXRpbmcgZm9yIGEgcmFuZ2VcbmRpZmYgLS1naXQgYS9saWIvdGVzdF9obW0uYyBiL2xpYi90ZXN0X2htbS5jXG5pbmRleCA0NWMwY2I5OTIyMTg0YS4uNjIwNWZiMzEzYmQwNWUgMTAwNjQ0XG4tLS0gYS9saWIvdGVzdF9obW0uY1xuKysrIGIvbGliL3Rlc3RfaG1tLmNcbkBAIC0zODksNiArMzg5LDY3IEBAIHN0YXRpYyBpbnQgZG1pcnJvcl9yYW5nZV9mYXVsdChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBpbnQgZG1pcnJvcl9yYW5nZV9mYXVsdF91bmxvY2tlZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcbitcdFx0XHRcdFx0c3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UsXG4rXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgdGltZW91dClcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0d2hpbGUgKHRydWUpIHtcbitcdFx0cmV0ID0gaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQocmFuZ2UsIHRpbWVvdXQpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gb3V0O1xuK1xuK1x0XHRtdXRleF9sb2NrKFx1MDAyNmRtaXJyb3ItXHUwMDNlbXV0ZXgpO1xuK1x0XHRpZiAobW11X2ludGVydmFsX3JlYWRfcmV0cnkocmFuZ2UtXHUwMDNlbm90aWZpZXIsXG4rXHRcdFx0XHRcdCAgICByYW5nZS1cdTAwM2Vub3RpZmllcl9zZXEpKSB7XG4rXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRtaXJyb3ItXHUwMDNlbXV0ZXgpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0cmV0ID0gZG1pcnJvcl9kb19mYXVsdChkbWlycm9yLCByYW5nZSk7XG4rXG4rXHRtdXRleF91bmxvY2soXHUwMDI2ZG1pcnJvci1cdTAwM2VtdXRleCk7XG4rb3V0OlxuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBkbWlycm9yX2ZhdWx0X3VubG9ja2VkKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxuK1x0XHRcdFx0ICB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuK1x0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGVuZCwgYm9vbCB3cml0ZSxcbitcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyB0aW1lb3V0KVxuK3tcbitcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gZG1pcnJvci1cdTAwM2Vub3RpZmllci5tbTtcbitcdHVuc2lnbmVkIGxvbmcgYWRkcjtcbitcdHVuc2lnbmVkIGxvbmcgcGZuc1szMl07XG4rXHRzdHJ1Y3QgaG1tX3JhbmdlIHJhbmdlID0ge1xuK1x0XHQubm90aWZpZXIgPSBcdTAwMjZkbWlycm9yLVx1MDAzZW5vdGlmaWVyLFxuK1x0XHQuaG1tX3BmbnMgPSBwZm5zLFxuK1x0XHQucGZuX2ZsYWdzX21hc2sgPSAwLFxuK1x0XHQuZGVmYXVsdF9mbGFncyA9XG4rXHRcdFx0SE1NX1BGTl9SRVFfRkFVTFQgfCAod3JpdGUgPyBITU1fUEZOX1JFUV9XUklURSA6IDApLFxuK1x0XHQuZGV2X3ByaXZhdGVfb3duZXIgPSBkbWlycm9yLVx1MDAzZW1kZXZpY2UsXG4rXHR9O1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRpZiAoIW1tZ2V0X25vdF96ZXJvKG1tKSlcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXG4rXHRmb3IgKGFkZHIgPSBzdGFydDsgYWRkciBcdTAwM2MgZW5kOyBhZGRyID0gcmFuZ2UuZW5kKSB7XG4rXHRcdHJhbmdlLnN0YXJ0ID0gYWRkcjtcbitcdFx0cmFuZ2UuZW5kID0gbWluKGFkZHIgKyAoQVJSQVlfU0laRShwZm5zKSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCksIGVuZCk7XG4rXG4rXHRcdHJldCA9IGRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWQoZG1pcnJvciwgXHUwMDI2cmFuZ2UsIHRpbWVvdXQpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0bW1wdXQobW0pO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gc3RhdGljIGludCBkbWlycm9yX2ZhdWx0KHN0cnVjdCBkbWlycm9yICpkbWlycm9yLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuIFx0XHRcdCB1bnNpZ25lZCBsb25nIGVuZCwgYm9vbCB3cml0ZSlcbiB7XG5AQCAtNDg4LDYgKzU0OSw0OCBAQCBzdGF0aWMgaW50IGRtaXJyb3JfcmVhZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvciwgc3RydWN0IGhtbV9kbWlycm9yX2NtZCAqY21kKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rc3RhdGljIGludCBkbWlycm9yX3JlYWRfdW5sb2NrZWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsXG4rXHRcdFx0XHQgc3RydWN0IGhtbV9kbWlycm9yX2NtZCAqY21kLFxuK1x0XHRcdFx0IHVuc2lnbmVkIGxvbmcgdGltZW91dClcbit7XG4rXHRzdHJ1Y3QgZG1pcnJvcl9ib3VuY2UgYm91bmNlO1xuK1x0dW5zaWduZWQgbG9uZyBzdGFydCwgZW5kO1xuK1x0dW5zaWduZWQgbG9uZyBzaXplID0gY21kLVx1MDAzZW5wYWdlcyBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbitcdGludCByZXQ7XG4rXG4rXHRzdGFydCA9IGNtZC1cdTAwM2VhZGRyO1xuK1x0ZW5kID0gc3RhcnQgKyBzaXplO1xuK1x0aWYgKGVuZCBcdTAwM2Mgc3RhcnQpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmV0ID0gZG1pcnJvcl9ib3VuY2VfaW5pdChcdTAwMjZib3VuY2UsIHN0YXJ0LCBzaXplKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHR3aGlsZSAoMSkge1xuK1x0XHRtdXRleF9sb2NrKFx1MDAyNmRtaXJyb3ItXHUwMDNlbXV0ZXgpO1xuK1x0XHRyZXQgPSBkbWlycm9yX2RvX3JlYWQoZG1pcnJvciwgc3RhcnQsIGVuZCwgXHUwMDI2Ym91bmNlKTtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRtaXJyb3ItXHUwMDNlbXV0ZXgpO1xuK1x0XHRpZiAocmV0ICE9IC1FTk9FTlQpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdHN0YXJ0ID0gY21kLVx1MDAzZWFkZHIgKyAoYm91bmNlLmNwYWdlcyBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG4rXHRcdHJldCA9IGRtaXJyb3JfZmF1bHRfdW5sb2NrZWQoZG1pcnJvciwgc3RhcnQsIGVuZCwgZmFsc2UsIHRpbWVvdXQpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGJyZWFrO1xuK1x0XHRjbWQtXHUwMDNlZmF1bHRzKys7XG4rXHR9XG4rXG4rXHRpZiAocmV0ID09IDApIHtcbitcdFx0aWYgKGNvcHlfdG9fdXNlcih1NjRfdG9fdXNlcl9wdHIoY21kLVx1MDAzZXB0ciksIGJvdW5jZS5wdHIsXG4rXHRcdFx0XHQgYm91bmNlLnNpemUpKVxuK1x0XHRcdHJldCA9IC1FRkFVTFQ7XG4rXHR9XG4rXHRjbWQtXHUwMDNlY3BhZ2VzID0gYm91bmNlLmNwYWdlcztcbitcdGRtaXJyb3JfYm91bmNlX2ZpbmkoXHUwMDI2Ym91bmNlKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIHN0YXRpYyBpbnQgZG1pcnJvcl9kb193cml0ZShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvciwgdW5zaWduZWQgbG9uZyBzdGFydCxcbiBcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBkbWlycm9yX2JvdW5jZSAqYm91bmNlKVxuIHtcbkBAIC0xNTcyLDcgKzE2NzUsOSBAQCBzdGF0aWMgbG9uZyBkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4gXHRcdGRtaXJyb3ItXHUwMDNlZmxhZ3MgPSBjbWQubnBhZ2VzO1xuIFx0XHRyZXQgPSAwO1xuIFx0XHRicmVhaztcbi1cbitcdGNhc2UgSE1NX0RNSVJST1JfUkVBRF9VTkxPQ0tFRDpcbitcdFx0cmV0ID0gZG1pcnJvcl9yZWFkX3VubG9ja2VkKGRtaXJyb3IsIFx1MDAyNmNtZCwgMCk7XG4rXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbGliL3Rlc3RfaG1tX3VhcGkuaCBiL2xpYi90ZXN0X2htbV91YXBpLmhcbmluZGV4IGY5NGM2ZDQ1NzMzODI4Li5lYTliMGVjNDA0ZmI1NSAxMDA2NDRcbi0tLSBhL2xpYi90ZXN0X2htbV91YXBpLmhcbisrKyBiL2xpYi90ZXN0X2htbV91YXBpLmhcbkBAIC0zOCw2ICszOCw3IEBAIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQge1xuICNkZWZpbmUgSE1NX0RNSVJST1JfQ0hFQ0tfRVhDTFVTSVZFXHRfSU9XUignSCcsIDB4MDYsIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQpXG4gI2RlZmluZSBITU1fRE1JUlJPUl9SRUxFQVNFXHRcdF9JT1dSKCdIJywgMHgwNywgc3RydWN0IGhtbV9kbWlycm9yX2NtZClcbiAjZGVmaW5lIEhNTV9ETUlSUk9SX0ZMQUdTXHRcdF9JT1dSKCdIJywgMHgwOCwgc3RydWN0IGhtbV9kbWlycm9yX2NtZClcbisjZGVmaW5lIEhNTV9ETUlSUk9SX1JFQURfVU5MT0NLRURcdF9JT1dSKCdIJywgMHgwOSwgc3RydWN0IGhtbV9kbWlycm9yX2NtZClcbiBcbiAjZGVmaW5lIEhNTV9ETUlSUk9SX0ZMQUdfRkFJTF9BTExPQ1x0KDFVTEwgXHUwMDNjXHUwMDNjIDApXG4gXG5kaWZmIC0tZ2l0IGEvbW0vaG1tLmMgYi9tbS9obW0uY1xuaW5kZXggZTVjMWY0ZGVlZDI0NDcuLmZjMmUxY2QwY2IyMmViIDEwMDY0NFxuLS0tIGEvbW0vaG1tLmNcbisrKyBiL21tL2htbS5jXG5AQCAtMzIsOSArMzIsMjcgQEBcbiBcbiBzdHJ1Y3QgaG1tX3ZtYV93YWxrIHtcbiBcdHN0cnVjdCBobW1fcmFuZ2VcdCpyYW5nZTtcbitcdGJvb2xcdFx0XHQqbG9ja2VkO1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRsYXN0O1xuK1x0dW5zaWduZWQgbG9uZ1x0XHRlbmQ7XG4rXHR1bnNpZ25lZCBpbnRcdFx0cmVxdWlyZWRfZmF1bHQ7XG4gfTtcbiBcbisvKlxuKyAqIEludGVybmFsIHNlbnRpbmVsIHJldHVybmVkIGJ5IHdhbGsgY2FsbGJhY2tzIHdoZW4gdGhleSBuZWVkIGEgcGFnZSBmYXVsdC5cbisgKiBUaGUgY2FsbGJhY2sgc3RvcmVzIGVuZC9yZXF1aXJlZF9mYXVsdCBpbiBobW1fdm1hX3dhbGs7IHRoZSBvdXRlciBsb29wXG4rICogY29uc3VtZXMgdGhlIHNlbnRpbmVsIGFuZCBuZXZlciBwcm9wYWdhdGVzIGl0IHRvIHRoZSBjYWxsZXIuXG4rICovXG4rI2RlZmluZSBITU1fRkFVTFRfUEVORElOR1x0LUVBR0FJTlxuK1xuKy8qXG4rICogSW50ZXJuYWwgc2VudGluZWwgcmV0dXJuZWQgYnkgaG1tX2RvX2ZhdWx0KCkgd2hlbiBoYW5kbGVfbW1fZmF1bHQoKVxuKyAqIGNvbXBsZXRlcyBhIHBhZ2UgZmF1bHQgd2l0aCB0aGUgbW1hcCBsb2NrIGRyb3BwZWQuIGhtbV9kb19mYXVsdCgpIHNldHNcbisgKiAqbG9ja2VkID0gZmFsc2U7IHRoZSBvdXRlciBsb29wIGNvbnN1bWVzIHRoZSBzZW50aW5lbCBhbmQgbmV2ZXIgcHJvcGFnYXRlc1xuKyAqIGl0IHRvIHRoZSBjYWxsZXIuXG4rICovXG4rI2RlZmluZSBITU1fRkFVTFRfVU5MT0NLRURcdC1FTk9MQ0tcbitcbiBlbnVtIHtcbiBcdEhNTV9ORUVEX0ZBVUxUID0gMSBcdTAwM2NcdTAwM2MgMCxcbiBcdEhNTV9ORUVEX1dSSVRFX0ZBVUxUID0gMSBcdTAwM2NcdTAwM2MgMSxcbkBAIC02MCwzNyArNzgsMjUgQEAgc3RhdGljIGludCBobW1fcGZuc19maWxsKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gfVxuIFxuIC8qXG4tICogaG1tX3ZtYV9mYXVsdCgpIC0gZmF1bHQgaW4gYSByYW5nZSBsYWNraW5nIHZhbGlkIHBtZCBvciBwdGUocylcbi0gKiBAYWRkcjogcmFuZ2UgdmlydHVhbCBzdGFydCBhZGRyZXNzIChpbmNsdXNpdmUpXG4tICogQGVuZDogcmFuZ2UgdmlydHVhbCBlbmQgYWRkcmVzcyAoZXhjbHVzaXZlKVxuLSAqIEByZXF1aXJlZF9mYXVsdDogSE1NX05FRURfKiBmbGFnc1xuLSAqIEB3YWxrOiBtbV93YWxrIHN0cnVjdHVyZVxuLSAqIFJldHVybjogLUVCVVNZIGFmdGVyIHBhZ2UgZmF1bHQsIG9yIHBhZ2UgZmF1bHQgZXJyb3JcbisgKiBobW1fcmVjb3JkX2ZhdWx0KCkgLSByZWNvcmQgYSByYW5nZSB0aGF0IG5lZWRzIHRvIGJlIGZhdWx0ZWQgaW5cbiAgKlxuLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgcG1kX25vbmUoKSBvciBwdGVfbm9uZSgpIHJldHVybnMgdHJ1ZSxcbi0gKiBvciB3aGVuZXZlciB0aGVyZSBpcyBubyBwYWdlIGRpcmVjdG9yeSBjb3ZlcmluZyB0aGUgdmlydHVhbCBhZGRyZXNzIHJhbmdlLlxuKyAqIENhbGxlZCBieSB0aGUgd2FsayBjYWxsYmFja3Mgd2hlbiB0aGV5IGRpc2NvdmVyIHRoYXQgcGFydCBvZiB0aGUgcmFuZ2VcbisgKiBuZWVkcyBhIHBhZ2UgZmF1bHQuICBUaGUgY2FsbGJhY2sgcmVjb3JkcyB3aGF0IHRvIGZhdWx0IGFuZCByZXR1cm5zXG4rICogSE1NX0ZBVUxUX1BFTkRJTkc7IHRoZSBvdXRlciBsb29wIGluIGhtbV9yYW5nZV9mYXVsdF9sb2NrZWQoKSBkcm9wc1xuKyAqIGJhY2sgb3V0IG9mIHdhbGtfcGFnZV9yYW5nZSgpIGFuZCBpbnZva2VzIGhhbmRsZV9tbV9mYXVsdCgpIGZyb20gYSBjb250ZXh0XG4rICogd2hlcmUgbm8gcGFnZS10YWJsZSBvciBodWdldGxiX3ZtYV9sb2NrIGlzIGhlbGQuXG4gICovXG4tc3RhdGljIGludCBobW1fdm1hX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tXHRcdFx0IHVuc2lnbmVkIGludCByZXF1aXJlZF9mYXVsdCwgc3RydWN0IG1tX3dhbGsgKndhbGspXG4rc3RhdGljIGludCBobW1fcmVjb3JkX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4rXHRcdFx0ICAgIHVuc2lnbmVkIGludCByZXF1aXJlZF9mYXVsdCxcbitcdFx0XHQgICAgc3RydWN0IG1tX3dhbGsgKndhbGspXG4ge1xuIFx0c3RydWN0IGhtbV92bWFfd2FsayAqaG1tX3ZtYV93YWxrID0gd2Fsay1cdTAwM2Vwcml2YXRlO1xuLVx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB3YWxrLVx1MDAzZXZtYTtcbi1cdHVuc2lnbmVkIGludCBmYXVsdF9mbGFncyA9IEZBVUxUX0ZMQUdfUkVNT1RFO1xuIFxuIFx0V0FSTl9PTl9PTkNFKCFyZXF1aXJlZF9mYXVsdCk7XG4gXHRobW1fdm1hX3dhbGstXHUwMDNlbGFzdCA9IGFkZHI7XG4tXG4tXHRpZiAocmVxdWlyZWRfZmF1bHQgXHUwMDI2IEhNTV9ORUVEX1dSSVRFX0ZBVUxUKSB7XG4tXHRcdGlmICghKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fV1JJVEUpKVxuLVx0XHRcdHJldHVybiAtRVBFUk07XG4tXHRcdGZhdWx0X2ZsYWdzIHw9IEZBVUxUX0ZMQUdfV1JJVEU7XG4tXHR9XG4tXG4tXHRmb3IgKDsgYWRkciBcdTAwM2MgZW5kOyBhZGRyICs9IFBBR0VfU0laRSlcbi1cdFx0aWYgKGhhbmRsZV9tbV9mYXVsdCh2bWEsIGFkZHIsIGZhdWx0X2ZsYWdzLCBOVUxMKSBcdTAwMjZcbi1cdFx0ICAgIFZNX0ZBVUxUX0VSUk9SKVxuLVx0XHRcdHJldHVybiAtRUZBVUxUO1xuLVx0cmV0dXJuIC1FQlVTWTtcbitcdGhtbV92bWFfd2Fsay1cdTAwM2VlbmQgPSBlbmQ7XG4rXHRobW1fdm1hX3dhbGstXHUwMDNlcmVxdWlyZWRfZmF1bHQgPSByZXF1aXJlZF9mYXVsdDtcbitcdHJldHVybiBITU1fRkFVTFRfUEVORElORztcbiB9XG4gXG4gc3RhdGljIHVuc2lnbmVkIGludCBobW1fcHRlX25lZWRfZmF1bHQoY29uc3Qgc3RydWN0IGhtbV92bWFfd2FsayAqaG1tX3ZtYV93YWxrLFxuQEAgLTE3NCw3ICsxODAsNyBAQCBzdGF0aWMgaW50IGhtbV92bWFfd2Fsa19ob2xlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdHJldHVybiBobW1fcGZuc19maWxsKGFkZHIsIGVuZCwgcmFuZ2UsIEhNTV9QRk5fRVJST1IpO1xuIFx0fVxuIFx0aWYgKHJlcXVpcmVkX2ZhdWx0KVxuLVx0XHRyZXR1cm4gaG1tX3ZtYV9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbitcdFx0cmV0dXJuIGhtbV9yZWNvcmRfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XG4gXHRyZXR1cm4gaG1tX3BmbnNfZmlsbChhZGRyLCBlbmQsIHJhbmdlLCAwKTtcbiB9XG4gXG5AQCAtMjA5LDcgKzIxNSw3IEBAIHN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRyZXF1aXJlZF9mYXVsdCA9XG4gXHRcdGhtbV9yYW5nZV9uZWVkX2ZhdWx0KGhtbV92bWFfd2FsaywgaG1tX3BmbnMsIG5wYWdlcywgY3B1X2ZsYWdzKTtcbiBcdGlmIChyZXF1aXJlZF9mYXVsdClcbi1cdFx0cmV0dXJuIGhtbV92bWFfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XG4rXHRcdHJldHVybiBobW1fcmVjb3JkX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspO1xuIFxuIFx0cGZuID0gcG1kX3BmbihwbWQpICsgKChhZGRyIFx1MDAyNiB+UE1EX01BU0spIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbiBcdGZvciAoaSA9IDA7IGFkZHIgXHUwMDNjIGVuZDsgYWRkciArPSBQQUdFX1NJWkUsIGkrKywgcGZuKyspIHtcbkBAIC0zMjgsNyArMzM0LDcgQEAgc3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9wdGUoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBmYXVsdDpcbiBcdHB0ZV91bm1hcChwdGVwKTtcbiBcdC8qIEZhdWx0IGFueSB2aXJ0dWFsIGFkZHJlc3Mgd2Ugd2VyZSBhc2tlZCB0byBmYXVsdCAqL1xuLVx0cmV0dXJuIGhtbV92bWFfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XG4rXHRyZXR1cm4gaG1tX3JlY29yZF9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19BUkNIX0hBU19QTURfU09GVExFQVZFU1xuQEAgLTM3MSw3ICszNzcsNyBAQCBzdGF0aWMgaW50IGhtbV92bWFfaGFuZGxlX2Fic2VudF9wbWQoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4gXHRcdFx0XHRcdCAgICAgIG5wYWdlcywgMCk7XG4gXHRpZiAocmVxdWlyZWRfZmF1bHQpIHtcbiBcdFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSlcbi1cdFx0XHRyZXR1cm4gaG1tX3ZtYV9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbitcdFx0XHRyZXR1cm4gaG1tX3JlY29yZF9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdHJldHVybiAtRUZBVUxUO1xuIFx0fVxuQEAgLTUxNyw3ICs1MjMsNyBAQCBzdGF0aWMgaW50IGhtbV92bWFfd2Fsa19wdWQocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRcdFx0XHRcdCAgICAgIG5wYWdlcywgY3B1X2ZsYWdzKTtcbiBcdFx0aWYgKHJlcXVpcmVkX2ZhdWx0KSB7XG4gXHRcdFx0c3Bpbl91bmxvY2socHRsKTtcbi1cdFx0XHRyZXR1cm4gaG1tX3ZtYV9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbitcdFx0XHRyZXR1cm4gaG1tX3JlY29yZF9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbiBcdFx0fVxuIFxuIFx0XHRwZm4gPSBwdWRfcGZuKHB1ZCkgKyAoKGFkZHIgXHUwMDI2IH5QVURfTUFTSykgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuQEAgLTU2NCwyMSArNTcwLDggQEAgc3RhdGljIGludCBobW1fdm1hX3dhbGtfaHVnZXRsYl9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLFxuIFx0cmVxdWlyZWRfZmF1bHQgPVxuIFx0XHRobW1fcHRlX25lZWRfZmF1bHQoaG1tX3ZtYV93YWxrLCBwZm5fcmVxX2ZsYWdzLCBjcHVfZmxhZ3MpO1xuIFx0aWYgKHJlcXVpcmVkX2ZhdWx0KSB7XG4tXHRcdGludCByZXQ7XG4tXG4gXHRcdHNwaW5fdW5sb2NrKHB0bCk7XG4tXHRcdGh1Z2V0bGJfdm1hX3VubG9ja19yZWFkKHZtYSk7XG4tXHRcdC8qXG4tXHRcdCAqIEF2b2lkIGRlYWRsb2NrOiBkcm9wIHRoZSB2bWEgbG9jayBiZWZvcmUgY2FsbGluZ1xuLVx0XHQgKiBobW1fdm1hX2ZhdWx0KCksIHdoaWNoIHdpbGwgaXRzZWxmIHBvdGVudGlhbGx5IHRha2UgYW5kXG4tXHRcdCAqIGRyb3AgdGhlIHZtYSBsb2NrLiBUaGlzIGlzIGFsc28gY29ycmVjdCBmcm9tIGFcbi1cdFx0ICogcHJvdGVjdGlvbiBwb2ludCBvZiB2aWV3LCBiZWNhdXNlIHRoZXJlIGlzIG5vIGZ1cnRoZXJcbi1cdFx0ICogdXNlIGhlcmUgb2YgZWl0aGVyIHB0ZSBvciBwdGwgYWZ0ZXIgZHJvcHBpbmcgdGhlIHZtYVxuLVx0XHQgKiBsb2NrLlxuLVx0XHQgKi9cbi1cdFx0cmV0ID0gaG1tX3ZtYV9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbi1cdFx0aHVnZXRsYl92bWFfbG9ja19yZWFkKHZtYSk7XG4tXHRcdHJldHVybiByZXQ7XG4rXHRcdHJldHVybiBobW1fcmVjb3JkX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspO1xuIFx0fVxuIFxuIFx0cGZuID0gcHRlX3BmbihlbnRyeSkgKyAoKHN0YXJ0IFx1MDAyNiB+aG1hc2spIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbkBAIC02MzcsMjkgKzYzMCw2NyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIGhtbV93YWxrX29wcyA9IHtcbiBcdC53YWxrX2xvY2tcdD0gUEdXQUxLX1JETE9DSyxcbiB9O1xuIFxuLS8qKlxuLSAqIGhtbV9yYW5nZV9mYXVsdCAtIHRyeSB0byBmYXVsdCBzb21lIGFkZHJlc3MgaW4gYSB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2Vcbi0gKiBAcmFuZ2U6XHRhcmd1bWVudCBzdHJ1Y3R1cmVcbi0gKlxuLSAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIGVycm9yIGNvZGVzOlxuKy8qXG4rICogaG1tX2RvX2ZhdWx0IC0gZmF1bHQgaW4gYSByYW5nZSByZWNvcmRlZCBieSBhIHdhbGsgY2FsbGJhY2tcbiAgKlxuLSAqIC1FSU5WQUw6XHRJbnZhbGlkIGFyZ3VtZW50cyBvciBtbSBvciB2aXJ0dWFsIGFkZHJlc3MgaXMgaW4gYW4gaW52YWxpZCB2bWFcbi0gKlx0XHQoZS5nLiwgZGV2aWNlIGZpbGUgdm1hKS5cbi0gKiAtRU5PTUVNOlx0T3V0IG9mIG1lbW9yeS5cbi0gKiAtRVBFUk06XHRJbnZhbGlkIHBlcm1pc3Npb24gKGUuZy4sIGFza2luZyBmb3Igd3JpdGUgYW5kIHJhbmdlIGlzIHJlYWRcbi0gKlx0XHRvbmx5KS5cbi0gKiAtRUJVU1k6XHRUaGUgcmFuZ2UgaGFzIGJlZW4gaW52YWxpZGF0ZWQgYW5kIHRoZSBjYWxsZXIgbmVlZHMgdG8gd2FpdCBmb3Jcbi0gKlx0XHR0aGUgaW52YWxpZGF0aW9uIHRvIGZpbmlzaC5cbi0gKiAtRUZBVUxUOiAgICAgQSBwYWdlIHdhcyByZXF1ZXN0ZWQgdG8gYmUgdmFsaWQgYW5kIGNvdWxkIG5vdCBiZSBtYWRlIHZhbGlkXG4tICogICAgICAgICAgICAgIGllIGl0IGhhcyBubyBiYWNraW5nIFZNQSBvciBpdCBpcyBpbGxlZ2FsIHRvIGFjY2Vzc1xuKyAqIENhbGxlZCBmcm9tIHRoZSBvdXRlciBsb29wIGluIGhtbV9yYW5nZV9mYXVsdF9sb2NrZWQoKSBhZnRlciBhIGNhbGxiYWNrXG4rICogcmV0dXJuZWQgSE1NX0ZBVUxUX1BFTkRJTkcuICBBdCB0aGlzIHBvaW50IHdlIGhvbGQgb25seSBtbWFwX2xvY2s7XG4rICogdGhlIHBhZ2UtdGFibGUgc3BpbmxvY2sgYW5kIGFueSBodWdldGxiX3ZtYV9sb2NrIGFjcXVpcmVkIGJ5IHRoZSB3YWxrXG4rICogZnJhbWV3b3JrIGhhdmUgYWxyZWFkeSBiZWVuIHJlbGVhc2VkIGJ5IHRoZSB1bndpbmQuXG4gICpcbi0gKiBUaGlzIGlzIHNpbWlsYXIgdG8gZ2V0X3VzZXJfcGFnZXMoKSwgZXhjZXB0IHRoYXQgaXQgY2FuIHJlYWQgdGhlIHBhZ2UgdGFibGVzXG4tICogd2l0aG91dCBtdXRhdGluZyB0aGVtIChpZSBjYXVzaW5nIGZhdWx0cykuXG4rICogUmV0dXJucyAtRUJVU1kgb24gc3VjY2VzcyAoYWxsIHBhZ2VzIGZhdWx0ZWQsIGNhbGxlciBzaG91bGQgcmUtd2FsaykuXG4rICogUmV0dXJucyBhIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuXG4gICovXG4taW50IGhtbV9yYW5nZV9mYXVsdChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSlcbitzdGF0aWMgaW50IGhtbV9kb19mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbitcdFx0XHRzdHJ1Y3QgaG1tX3ZtYV93YWxrICpobW1fdm1hX3dhbGspXG4re1xuK1x0dW5zaWduZWQgbG9uZyBhZGRyID0gaG1tX3ZtYV93YWxrLVx1MDAzZWxhc3Q7XG4rXHR1bnNpZ25lZCBsb25nIGVuZCA9IGhtbV92bWFfd2Fsay1cdTAwM2VlbmQ7XG4rXHR1bnNpZ25lZCBpbnQgcmVxdWlyZWRfZmF1bHQgPSBobW1fdm1hX3dhbGstXHUwMDNlcmVxdWlyZWRfZmF1bHQ7XG4rXHR1bnNpZ25lZCBpbnQgZmF1bHRfZmxhZ3MgPSBGQVVMVF9GTEFHX1JFTU9URTtcbitcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuK1xuK1x0aWYgKGhtbV92bWFfd2Fsay1cdTAwM2Vsb2NrZWQpXG4rXHRcdGZhdWx0X2ZsYWdzIHw9IEZBVUxUX0ZMQUdfQUxMT1dfUkVUUlkgfCBGQVVMVF9GTEFHX0tJTExBQkxFO1xuK1xuK1x0dm1hID0gdm1hX2xvb2t1cChtbSwgYWRkcik7XG4rXHRpZiAoIXZtYSlcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXG4rXHRpZiAocmVxdWlyZWRfZmF1bHQgXHUwMDI2IEhNTV9ORUVEX1dSSVRFX0ZBVUxUKSB7XG4rXHRcdGlmICghKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fV1JJVEUpKVxuK1x0XHRcdHJldHVybiAtRVBFUk07XG4rXHRcdGZhdWx0X2ZsYWdzIHw9IEZBVUxUX0ZMQUdfV1JJVEU7XG4rXHR9XG4rXG4rXHRmb3IgKDsgYWRkciBcdTAwM2MgZW5kOyBhZGRyICs9IFBBR0VfU0laRSkge1xuK1x0XHR2bV9mYXVsdF90IHJldDtcbitcbitcdFx0cmV0ID0gaGFuZGxlX21tX2ZhdWx0KHZtYSwgYWRkciwgZmF1bHRfZmxhZ3MsIE5VTEwpO1xuK1xuK1x0XHRpZiAocmV0IFx1MDAyNiAoVk1fRkFVTFRfQ09NUExFVEVEIHwgVk1fRkFVTFRfUkVUUlkpKSB7XG4rXHRcdFx0KmhtbV92bWFfd2Fsay1cdTAwM2Vsb2NrZWQgPSBmYWxzZTtcbitcdFx0XHRyZXR1cm4gSE1NX0ZBVUxUX1VOTE9DS0VEO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChyZXQgXHUwMDI2IFZNX0ZBVUxUX0VSUk9SKSB7XG4rXHRcdFx0aW50IGVyciA9IHZtX2ZhdWx0X3RvX2Vycm5vKHJldCwgMCk7XG4rXG4rXHRcdFx0aWYgKFdBUk5fT04oIWVycikpXG4rXHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuK1xuK1x0XHRcdHJldHVybiBlcnI7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiAtRUJVU1k7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSwgYm9vbCAqbG9ja2VkKVxuIHtcbiBcdHN0cnVjdCBobW1fdm1hX3dhbGsgaG1tX3ZtYV93YWxrID0ge1xuIFx0XHQucmFuZ2UgPSByYW5nZSxcbitcdFx0LmxvY2tlZCA9IGxvY2tlZCxcbiBcdFx0Lmxhc3QgPSByYW5nZS1cdTAwM2VzdGFydCxcbiBcdH07XG4gXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHJhbmdlLVx1MDAzZW5vdGlmaWVyLVx1MDAzZW1tO1xuQEAgLTY3NCw2ICs3MDUsMjIgQEAgaW50IGhtbV9yYW5nZV9mYXVsdChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSlcbiBcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIFx0XHRyZXQgPSB3YWxrX3BhZ2VfcmFuZ2UobW0sIGhtbV92bWFfd2Fsay5sYXN0LCByYW5nZS1cdTAwM2VlbmQsXG4gXHRcdFx0XHQgICAgICBcdTAwMjZobW1fd2Fsa19vcHMsIFx1MDAyNmhtbV92bWFfd2Fsayk7XG4rXHRcdC8qXG4rXHRcdCAqIFdoZW4gSE1NX0ZBVUxUX1BFTkRJTkcgaXMgcmV0dXJuZWQgYSB3YWxrIGNhbGxiYWNrXG4rXHRcdCAqIHJlY29yZGVkIGEgcmFuZ2UgdGhhdCBuZWVkcyBoYW5kbGVfbW1fZmF1bHQoKTtcbitcdFx0ICogaG1tX2RvX2ZhdWx0KCkgcnVucyB0aGUgZmF1bHQgb3V0c2lkZSB3YWxrX3BhZ2VfcmFuZ2UoKVxuK1x0XHQgKiAoc28gbm8gcGFnZS10YWJsZSBvciBodWdldGxiX3ZtYV9sb2NrIGlzIGhlbGQpIGFuZFxuK1x0XHQgKiByZXR1cm5zIC1FQlVTWSBzbyB0aGUgbG9vcCByZS13YWxrcyBhbmQgcGlja3MgdXAgdGhlXG4rXHRcdCAqIG5vdy1wcmVzZW50IGVudHJpZXMuXG4rXHRcdCAqL1xuK1x0XHRpZiAocmV0ID09IEhNTV9GQVVMVF9QRU5ESU5HKSB7XG4rXHRcdFx0cmV0ID0gaG1tX2RvX2ZhdWx0KG1tLCBcdTAwMjZobW1fdm1hX3dhbGspO1xuK1x0XHRcdGlmIChyZXQgPT0gSE1NX0ZBVUxUX1VOTE9DS0VEKSB7XG4rXHRcdFx0XHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4rXHRcdFx0XHRcdHJldHVybiAtRUlOVFI7XG4rXHRcdFx0XHRyZXR1cm4gLUVCVVNZO1xuK1x0XHRcdH1cbitcdFx0fVxuIFx0XHQvKlxuIFx0XHQgKiBXaGVuIC1FQlVTWSBpcyByZXR1cm5lZCB0aGUgbG9vcCByZXN0YXJ0cyB3aXRoXG4gXHRcdCAqIGhtbV92bWFfd2Fsay5sYXN0IHNldCB0byBhbiBhZGRyZXNzIHRoYXQgaGFzIG5vdCBiZWVuIHN0b3JlZFxuQEAgLTY4Myw4ICs3MzAsMTAwIEBAIGludCBobW1fcmFuZ2VfZmF1bHQoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpXG4gXHR9IHdoaWxlIChyZXQgPT0gLUVCVVNZKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuK1xuKy8qKlxuKyAqIGhtbV9yYW5nZV9mYXVsdCAtIHRyeSB0byBmYXVsdCBzb21lIGFkZHJlc3MgaW4gYSB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2VcbisgKiBAcmFuZ2U6XHRhcmd1bWVudCBzdHJ1Y3R1cmVcbisgKlxuKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIGVycm9yIGNvZGVzOlxuKyAqXG4rICogLUVJTlZBTDpcdEludmFsaWQgYXJndW1lbnRzIG9yIG1tIG9yIHZpcnR1YWwgYWRkcmVzcyBpcyBpbiBhbiBpbnZhbGlkIHZtYVxuKyAqXHRcdChlLmcuLCBkZXZpY2UgZmlsZSB2bWEpLlxuKyAqIC1FTk9NRU06XHRPdXQgb2YgbWVtb3J5LlxuKyAqIC1FUEVSTTpcdEludmFsaWQgcGVybWlzc2lvbiAoZS5nLiwgYXNraW5nIGZvciB3cml0ZSBhbmQgcmFuZ2UgaXMgcmVhZFxuKyAqXHRcdG9ubHkpLlxuKyAqIC1FQlVTWTpcdFRoZSByYW5nZSBoYXMgYmVlbiBpbnZhbGlkYXRlZCBhbmQgdGhlIGNhbGxlciBuZWVkcyB0byB3YWl0IGZvclxuKyAqXHRcdHRoZSBpbnZhbGlkYXRpb24gdG8gZmluaXNoLlxuKyAqIC1FRkFVTFQ6ICAgICBBIHBhZ2Ugd2FzIHJlcXVlc3RlZCB0byBiZSB2YWxpZCBhbmQgY291bGQgbm90IGJlIG1hZGUgdmFsaWRcbisgKiAgICAgICAgICAgICAgaWUgaXQgaGFzIG5vIGJhY2tpbmcgVk1BIG9yIGl0IGlzIGlsbGVnYWwgdG8gYWNjZXNzXG4rICpcbisgKiBUaGlzIGlzIHNpbWlsYXIgdG8gZ2V0X3VzZXJfcGFnZXMoKSwgZXhjZXB0IHRoYXQgaXQgY2FuIHJlYWQgdGhlIHBhZ2UgdGFibGVzXG4rICogd2l0aG91dCBtdXRhdGluZyB0aGVtIChpZSBjYXVzaW5nIGZhdWx0cykuXG4rICpcbisgKiBUaGUgbW1hcCBsb2NrIG11c3QgYmUgaGVsZCBieSB0aGUgY2FsbGVyIGFuZCB3aWxsIHJlbWFpbiBoZWxkIG9uIHJldHVybi5cbisgKiBOZXcgdXNlcnMgc2hvdWxkIHByZWZlciBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpIHVubGVzcyB0aGV5XG4rICogc3BlY2lmaWNhbGx5IG5lZWQgdG8ga2VlcCB0aGUgbW1hcCBsb2NrIGhlbGQgYWNyb3NzIHRoZSBjYWxsLiBUaGlzIGhlbHBlclxuKyAqIGNhbm5vdCBzdXBwb3J0IFZNQXMgd2hvc2UgZmF1bHQgaGFuZGxlcnMgbmVlZCB0byBkcm9wIHRoZSBtbWFwIGxvY2suXG4rICovXG4raW50IGhtbV9yYW5nZV9mYXVsdChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSlcbit7XG4rXHRyZXR1cm4gaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZChyYW5nZSwgTlVMTCk7XG4rfVxuIEVYUE9SVF9TWU1CT0woaG1tX3JhbmdlX2ZhdWx0KTtcbiBcbisvKipcbisgKiBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCAtIGZhdWx0IGluIGEgcmFuZ2Ugd2l0aCBhIHJldHJ5IHRpbWVvdXRcbisgKiBAcmFuZ2U6XHRhcmd1bWVudCBzdHJ1Y3R1cmVcbisgKiBAdGltZW91dDpcdHRpbWVvdXQgaW4gamlmZmllcyBmb3IgaW50ZXJuYWwgLUVCVVNZIHJldHJpZXMsIG9yIDAgdG8gcmV0cnlcbisgKlx0XHRpbmRlZmluaXRlbHlcbisgKlxuKyAqIFRoZSBjYWxsZXIgbXVzdCBub3QgaG9sZCB0aGUgbW1hcCBsb2NrLiBUaGUgZnVuY3Rpb24gdGFrZXMgdGhlIG1tYXAgcmVhZFxuKyAqIGxvY2sgaW50ZXJuYWxseSBhbmQgYWxsb3dzIGhhbmRsZV9tbV9mYXVsdCgpIHRvIGRyb3AgaXQgZHVyaW5nIGZhdWx0cy4gSWZcbisgKiB0aGUgbW1hcCBsb2NrIGlzIGRyb3BwZWQgb3IgdGhlIHJhbmdlIGlzIGludmFsaWRhdGVkLCB0aGUgZnVuY3Rpb24gcmVmcmVzaGVzXG4rICogcmFuZ2UtXHUwMDNlbm90aWZpZXJfc2VxIGFuZCByZXN0YXJ0cyB0aGUgd2FsayBpbnRlcm5hbGx5LlxuKyAqXG4rICogUGFzc2luZyAwIGZvciBAdGltZW91dCByZXRyaWVzIGluZGVmaW5pdGVseS4gQSBub24temVybyBAdGltZW91dCBpcyBhIGNhbGxlclxuKyAqIHBvbGljeSBsaW1pdCBmb3IgcmVwZWF0ZWQgbW11LW5vdGlmaWVyIGludmFsaWRhdGlvbiByZXRyaWVzLiBITU0gZG9lcyBub3RcbisgKiBpbnRlcnJ1cHQgcGFnZSBmYXVsdCBoYW5kbGluZyB3aGVuIHRoZSB0aW1lb3V0IGV4cGlyZXMsIGJ1dCByZXR1cm5zIC1FQlVTWVxuKyAqIGlmIHRoZSByZXRyeSBidWRnZXQgaXMgZXhoYXVzdGVkIGJlZm9yZSBhIHN0YWJsZSByYW5nZSBpcyBvYnRhaW5lZC5cbisgKlxuKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG9uZSBvZiB0aGUgZXJyb3IgY29kZXMgZG9jdW1lbnRlZCBmb3JcbisgKiBobW1fcmFuZ2VfZmF1bHQoKS4gLUVJTlRSIGlzIHJldHVybmVkIGlmIG1tYXBfbG9jayBhY3F1aXNpdGlvbiBpc1xuKyAqIGludGVycnVwdGVkIG9yIGEgZmF0YWwgc2lnbmFsIGlzIHBlbmRpbmcgZHVyaW5nIHJldHJ5IGhhbmRsaW5nLlxuKyAqL1xuK2ludCBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dChzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSxcbitcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0KVxuK3tcbitcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gcmFuZ2UtXHUwMDNlbm90aWZpZXItXHUwMDNlbW07XG4rXHR1bnNpZ25lZCBsb25nIGRlYWRsaW5lID0gMDtcbitcdGJvb2wgbG9ja2VkID0gZmFsc2U7XG4rXHRpbnQgcmV0O1xuK1xuK1x0ZG8ge1xuK1x0XHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4rXHRcdFx0cmV0dXJuIC1FSU5UUjtcbitcbitcdFx0aWYgKHRpbWVvdXQpIHtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIElmIHRoZSBwcmV2aW91cyBmYXVsdCBkcm9wcGVkIG1tYXBfbG9jaywgdGhlbiB0aGUgZmF1bHRcbitcdFx0XHQgKiBoYW5kbGVyIG1hZGUgcHJvZ3Jlc3MuIFJlc3RhcnQgdGhlIHJldHJ5IHRpbWVvdXQgaW4gdGhhdFxuK1x0XHRcdCAqIGNhc2UsIGJ1dCBrZWVwIHRoZSBleGlzdGluZyBkZWFkbGluZSBmb3Igb3JkaW5hcnkgLUVCVVNZXG4rXHRcdFx0ICogcmV0cmllcy5cbitcdFx0XHQgKi9cbitcdFx0XHRpZiAoIWxvY2tlZClcbitcdFx0XHRcdGRlYWRsaW5lID0gamlmZmllcyArIHRpbWVvdXQ7XG4rXG4rXHRcdFx0aWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZGVhZGxpbmUpKVxuK1x0XHRcdFx0cmV0dXJuIC1FQlVTWTtcbitcdFx0fVxuK1xuK1x0XHRyYW5nZS1cdTAwM2Vub3RpZmllcl9zZXEgPVxuK1x0XHRcdG1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKHJhbmdlLVx1MDAzZW5vdGlmaWVyKTtcbitcbitcdFx0cmV0ID0gbW1hcF9yZWFkX2xvY2tfa2lsbGFibGUobW0pO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdGxvY2tlZCA9IHRydWU7XG4rXHRcdHJldCA9IGhtbV9yYW5nZV9mYXVsdF9sb2NrZWQocmFuZ2UsIFx1MDAyNmxvY2tlZCk7XG4rXHRcdGlmIChsb2NrZWQpXG4rXHRcdFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4rXHR9IHdoaWxlIChyZXQgPT0gLUVCVVNZKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK0VYUE9SVF9TWU1CT0woaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXQpO1xuK1xuIC8qKlxuICAqIGhtbV9kbWFfbWFwX2FsbG9jIC0gQWxsb2NhdGUgSE1NIG1hcCBzdHJ1Y3R1cmVcbiAgKiBAZGV2OiBkZXZpY2UgdG8gYWxsb2NhdGUgc3RydWN0dXJlIGZvclxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmNcbmluZGV4IDZmY2NiZGFiMDJlZTgxLi41YWNiNzI4NjY2ZjhjMSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuY1xuQEAgLTI5LDYgKzI5LDEwIEBAXG4gI2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9pb2N0bC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3lzL3RpbWUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9zeXNjYWxsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvZXZlbnRmZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdXNlcmZhdWx0ZmQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3BvbGwuaFx1MDAzZVxuIFxuIC8qXG4gICogVGhpcyBpcyBhIHByaXZhdGUgVUFQSSB0byB0aGUga2VybmVsIHRlc3QgbW9kdWxlIHNvIGl0IGlzbid0IGV4cG9ydGVkXG5AQCAtMjk1Miw0ICsyOTU2LDE1MCBAQCBURVNUX0ZfVElNRU9VVChobW0sIGJlbmNobWFya190aHBfbWlncmF0aW9uLCAxMjApXG4gXHRcdFx0XHRcdFx1MDAyNnRocF9yZXN1bHRzLCBcdTAwMjZyZWd1bGFyX3Jlc3VsdHMpO1xuIFx0fVxuIH1cbisvKlxuKyAqIFRlc3QgdGhhdCBITU0gY2FuIGZhdWx0IGluIHBhZ2VzIGJhY2tlZCBieSB1c2VyZmF1bHRmZCB1c2luZyB0aGVcbisgKiBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dCgpIHBhdGggd2l0aCBubyB0aW1lb3V0LiBUaGlzIGV4ZXJjaXNlc1xuKyAqIHRoZSBsb2NrLWRyb3AgcmV0cnkgbG9naWMgaW4gdGhlIEhNTSBmcmFtZXdvcmsuXG4rICovXG4rc3RydWN0IHVmZmRfdGhyZWFkX2FyZ3Mge1xuK1x0aW50IHVmZmQ7XG4rXHRpbnQgc3RvcF9mZDtcbitcdHZvaWQgKnBhZ2VfYnVmZmVyO1xuK1x0dW5zaWduZWQgbG9uZyBwYWdlX3NpemU7XG4rfTtcbitcbitzdGF0aWMgdm9pZCAqdWZmZF9oYW5kbGVyX3RocmVhZCh2b2lkICphcmcpXG4re1xuK1x0c3RydWN0IHVmZmRfdGhyZWFkX2FyZ3MgKmFyZ3MgPSBhcmc7XG4rXHRzdHJ1Y3QgdWZmZF9tc2cgbXNnO1xuK1x0c3RydWN0IHVmZmRpb19jb3B5IGNvcHk7XG4rXHRzdHJ1Y3QgcG9sbGZkIHBvbGxmZFsyXTtcbitcdGludCByZXQ7XG4rXG4rXHRwb2xsZmRbMF0uZmQgPSBhcmdzLVx1MDAzZXVmZmQ7XG4rXHRwb2xsZmRbMF0uZXZlbnRzID0gUE9MTElOO1xuK1x0cG9sbGZkWzFdLmZkID0gYXJncy1cdTAwM2VzdG9wX2ZkO1xuK1x0cG9sbGZkWzFdLmV2ZW50cyA9IFBPTExJTjtcbitcbitcdHdoaWxlICgxKSB7XG4rXHRcdHJldCA9IHBvbGwocG9sbGZkLCAyLCAtMSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjPSAwKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHRpZiAocG9sbGZkWzFdLnJldmVudHMpXG4rXHRcdFx0YnJlYWs7XG4rXHRcdGlmICghKHBvbGxmZFswXS5yZXZlbnRzIFx1MDAyNiBQT0xMSU4pKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRyZXQgPSByZWFkKGFyZ3MtXHUwMDNldWZmZCwgXHUwMDI2bXNnLCBzaXplb2YobXNnKSk7XG4rXHRcdGlmIChyZXQgIT0gc2l6ZW9mKG1zZykpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdGlmIChtc2cuZXZlbnQgIT0gVUZGRF9FVkVOVF9QQUdFRkFVTFQpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdC8qIEZpbGwgdGhlIHBhZ2Ugd2l0aCBhIGtub3duIHBhdHRlcm4gKi9cbitcdFx0bWVtc2V0KGFyZ3MtXHUwMDNlcGFnZV9idWZmZXIsIDB4QUIsIGFyZ3MtXHUwMDNlcGFnZV9zaXplKTtcbitcbitcdFx0Y29weS5kc3QgPSBtc2cuYXJnLnBhZ2VmYXVsdC5hZGRyZXNzIFx1MDAyNiB+KGFyZ3MtXHUwMDNlcGFnZV9zaXplIC0gMSk7XG4rXHRcdGNvcHkuc3JjID0gKHVuc2lnbmVkIGxvbmcpYXJncy1cdTAwM2VwYWdlX2J1ZmZlcjtcbitcdFx0Y29weS5sZW4gPSBhcmdzLVx1MDAzZXBhZ2Vfc2l6ZTtcbitcdFx0Y29weS5tb2RlID0gMDtcbitcdFx0Y29weS5jb3B5ID0gMDtcbitcbitcdFx0cmV0ID0gaW9jdGwoYXJncy1cdTAwM2V1ZmZkLCBVRkZESU9fQ09QWSwgXHUwMDI2Y29weSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0YnJlYWs7XG4rXHR9XG4rXG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rVEVTVF9GKGhtbSwgdXNlcmZhdWx0ZmRfcmVhZClcbit7XG4rXHRzdHJ1Y3QgaG1tX2J1ZmZlciAqYnVmZmVyO1xuK1x0c3RydWN0IHVmZmRfdGhyZWFkX2FyZ3MgdWZmZF9hcmdzO1xuK1x0dW5zaWduZWQgbG9uZyBucGFnZXM7XG4rXHR1bnNpZ25lZCBsb25nIHNpemU7XG4rXHR1bnNpZ25lZCBsb25nIGk7XG4rXHR1bnNpZ25lZCBjaGFyICpwdHI7XG4rXHRwdGhyZWFkX3QgdGhyZWFkO1xuK1x0aW50IHVmZmQ7XG4rXHRpbnQgc3RvcF9mZDtcbitcdGludCByZXQ7XG4rXHRzdHJ1Y3QgdWZmZGlvX2FwaSBhcGk7XG4rXHRzdHJ1Y3QgdWZmZGlvX3JlZ2lzdGVyIHJlZztcbitcdHVpbnQ2NF90IHN0b3AgPSAxO1xuK1x0c3NpemVfdCBud3JpdGU7XG4rXG4rXHRucGFnZXMgPSA0O1xuK1x0c2l6ZSA9IG5wYWdlcyBcdTAwM2NcdTAwM2Mgc2VsZi1cdTAwM2VwYWdlX3NoaWZ0O1xuK1xuK1x0LyogQ3JlYXRlIHVzZXJmYXVsdGZkICovXG4rXHR1ZmZkID0gc3lzY2FsbChfX05SX3VzZXJmYXVsdGZkLCBPX0NMT0VYRUMgfCBPX05PTkJMT0NLKTtcbitcdGlmICh1ZmZkIFx1MDAzYyAwKVxuK1x0XHRTS0lQKHJldHVybiwgXCJ1c2VyZmF1bHRmZCBub3QgYXZhaWxhYmxlXCIpO1xuK1xuK1x0YXBpLmFwaSA9IFVGRkRfQVBJO1xuK1x0YXBpLmZlYXR1cmVzID0gMDtcbitcdHJldCA9IGlvY3RsKHVmZmQsIFVGRkRJT19BUEksIFx1MDAyNmFwaSk7XG4rXHRBU1NFUlRfRVEocmV0LCAwKTtcbitcbitcdGJ1ZmZlciA9IG1hbGxvYyhzaXplb2YoKmJ1ZmZlcikpO1xuK1x0QVNTRVJUX05FKGJ1ZmZlciwgTlVMTCk7XG4rXG4rXHRidWZmZXItXHUwMDNlZmQgPSAtMTtcbitcdGJ1ZmZlci1cdTAwM2VzaXplID0gc2l6ZTtcbitcdGJ1ZmZlci1cdTAwM2VtaXJyb3IgPSBtYWxsb2Moc2l6ZSk7XG4rXHRBU1NFUlRfTkUoYnVmZmVyLVx1MDAzZW1pcnJvciwgTlVMTCk7XG4rXG4rXHQvKiBDcmVhdGUgYW5vbnltb3VzIG1hcHBpbmcgKi9cbitcdGJ1ZmZlci1cdTAwM2VwdHIgPSBtbWFwKE5VTEwsIHNpemUsXG4rXHRcdFx0ICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbitcdFx0XHQgICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsXG4rXHRcdFx0ICAgLTEsIDApO1xuK1x0QVNTRVJUX05FKGJ1ZmZlci1cdTAwM2VwdHIsIE1BUF9GQUlMRUQpO1xuK1xuK1x0LyogUmVnaXN0ZXIgdGhlIHJlZ2lvbiB3aXRoIHVzZXJmYXVsdGZkICovXG4rXHRyZWcucmFuZ2Uuc3RhcnQgPSAodW5zaWduZWQgbG9uZylidWZmZXItXHUwMDNlcHRyO1xuK1x0cmVnLnJhbmdlLmxlbiA9IHNpemU7XG4rXHRyZWcubW9kZSA9IFVGRkRJT19SRUdJU1RFUl9NT0RFX01JU1NJTkc7XG4rXHRyZXQgPSBpb2N0bCh1ZmZkLCBVRkZESU9fUkVHSVNURVIsIFx1MDAyNnJlZyk7XG4rXHRBU1NFUlRfRVEocmV0LCAwKTtcbitcbitcdC8qIFNldCB1cCB0aGUgaGFuZGxlciB0aHJlYWQgKi9cbitcdHVmZmRfYXJncy51ZmZkID0gdWZmZDtcbitcdHN0b3BfZmQgPSBldmVudGZkKDAsIEVGRF9DTE9FWEVDKTtcbitcdEFTU0VSVF9HRShzdG9wX2ZkLCAwKTtcbitcdHVmZmRfYXJncy5zdG9wX2ZkID0gc3RvcF9mZDtcbitcdHVmZmRfYXJncy5wYWdlX2J1ZmZlciA9IG1hbGxvYyhzZWxmLVx1MDAzZXBhZ2Vfc2l6ZSk7XG4rXHRBU1NFUlRfTkUodWZmZF9hcmdzLnBhZ2VfYnVmZmVyLCBOVUxMKTtcbitcdHVmZmRfYXJncy5wYWdlX3NpemUgPSBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZTtcbitcbitcdHJldCA9IHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZCwgTlVMTCwgdWZmZF9oYW5kbGVyX3RocmVhZCwgXHUwMDI2dWZmZF9hcmdzKTtcbitcdEFTU0VSVF9FUShyZXQsIDApO1xuK1xuK1x0LypcbitcdCAqIFVzZSB0aGUgdW5sb2NrZWQgcmVhZCBwYXRoIHdoaWNoIGFsbG93cyB0aGUgbW1hcCBsb2NrIHRvIGJlXG4rXHQgKiBkcm9wcGVkIGR1cmluZyB0aGUgZmF1bHQsIGVuYWJsaW5nIHVzZXJmYXVsdGZkIHJlc29sdXRpb24uXG4rXHQgKi9cbitcdHJldCA9IGhtbV9kbWlycm9yX2NtZChzZWxmLVx1MDAzZWZkLCBITU1fRE1JUlJPUl9SRUFEX1VOTE9DS0VELFxuK1x0XHRcdCAgICAgIGJ1ZmZlciwgbnBhZ2VzKTtcbitcdEFTU0VSVF9FUShyZXQsIDApO1xuK1x0QVNTRVJUX0VRKGJ1ZmZlci1cdTAwM2VjcGFnZXMsIG5wYWdlcyk7XG4rXG4rXHQvKiBWZXJpZnkgdGhlIGRldmljZSByZWFkIHRoZSBkYXRhIGZpbGxlZCBieSB0aGUgdWZmZCBoYW5kbGVyICovXG4rXHRwdHIgPSBidWZmZXItXHUwMDNlbWlycm9yO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2l6ZTsgKytpKVxuK1x0XHRBU1NFUlRfRVEocHRyW2ldLCAodW5zaWduZWQgY2hhcikweEFCKTtcbitcbitcdG53cml0ZSA9IHdyaXRlKHN0b3BfZmQsIFx1MDAyNnN0b3AsIHNpemVvZihzdG9wKSk7XG4rXHRBU1NFUlRfRVEobndyaXRlLCBzaXplb2Yoc3RvcCkpO1xuK1x0cHRocmVhZF9qb2luKHRocmVhZCwgTlVMTCk7XG4rXHRjbG9zZShzdG9wX2ZkKTtcbitcdGZyZWUodWZmZF9hcmdzLnBhZ2VfYnVmZmVyKTtcbitcdGNsb3NlKHVmZmQpO1xuK1x0aG1tX2J1ZmZlcl9mcmVlKGJ1ZmZlcik7XG4rfVxuK1xuK1xuIFRFU1RfSEFSTkVTU19NQUlOXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDowOToxMS4zMzAzMzM0NjVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjQyNDk3Nzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBITU0gUGF0Y2ggU2VyaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMsIGFuZCBpdCdzIG1ha2luZyBzb21lIHByZXR0eSBmdW5kYW1lbnRhbCBjaGFuZ2VzIHRvIHRoZSBIb3N0IE1lbW9yeSBNYW5hZ2VtZW50IChITU0pIGNvZGUuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gdGhydXN0IGlzIHRvIGludHJvZHVjZSB0aGlzIG5ldyBmdW5jdGlvbiwgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YCwgYWxvbmdzaWRlIGEgbG9ja2VkIHZlcnNpb24gb2YgdGhlIGV4aXN0aW5nIGBobW1fcmFuZ2VfZmF1bHRgLiBJIHNlZSB0aGF0IHRoZSBwYXRjaCB0b3VjaGVzIGEgYnVuY2ggb2YgZmlsZXM6IGBtbS9obW0uY2AsIGBpbmNsdWRlL2xpbnV4L2htbS5oYCwgdGhlIGRvY3VtZW50YXRpb24sIGFuZCB0aGVuIGEgc2xldyBvZiBkcml2ZXIgZmlsZXMg4oCTIEFNRCwgRFJNLCBOb3V2ZWF1LCBIeXBlci1WLCBJbmZpbmliYW5kLCBhbmQgZXZlbiBzb21lIHRlc3QgY29kZS4gQ2xlYXJseSwgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlOyBpdCdzIGdldHRpbmcgaXRzIGhhbmRzIGRpcnR5IGluIEhNTSdzIGNvcmUgbG9naWMgYW5kIGRpcmVjdGx5IGltcGFjdGluZyBob3cgdGhlc2UgZHJpdmVycyBpbnRlcmFjdCB3aXRoIG1lbW9yeS4gVGhlIGFkZGl0aW9uIG9mIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAsIGluIHBhcnRpY3VsYXIsIGluZGljYXRlcyBhIHRhcmdldGVkIHVwZGF0ZSBmb3IgZHJpdmVyIHVzZS5cblxuTXkgbmV4dCBtb3ZlIGlzIHRvIHplcm8gaW4gb24gc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBmb3IgZnV6emluZy4gSSdtIHRoaW5raW5nLCBiYXNlZCBvbiB0aGlzIGNoYW5nZSwgSSdsbCBuZWVkIHRvIGZvY3VzIG9uOiBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgLCBgaG1tX3JhbmdlX2ZhdWx0YCwgYGhtbV9kb19mYXVsdGAsIGBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkYCwgYW5kIGBobW1fcmVjb3JkX2ZhdWx0YC4gVGhlc2UgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFuZCB0aGUgcmVsYXRlZCBpbnRlcm5hbCBmdW5jdGlvbnMuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlLiBXaGF0IGVuYWJsZXMgdGhpcyBITU0gZnVuY3Rpb25hbGl0eT8gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiB0byB1bmRlcnN0YW5kIHdoZW4gYGhtbV9yYW5nZV9mYXVsdGAgaXMgZXZlbiBjb21waWxlZC4gSSdsbCBzZWFyY2ggZm9yIGBobW1fcmFuZ2VfZmF1bHRgIHdpdGhpbiBgbW0vaG1tLmNgIGFuZCBgbW0vS2NvbmZpZ2AsIGJ1dCBJIG5lZWQgdG8gZ28gZnVydGhlci4gSG1tLCBJIGtub3cgYG1tL2htbS5jYCBpcyBjb21waWxlZCBjb25kaXRpb25hbGx5LCBkZXBlbmRpbmcgb24gc29tZSBjb25maWcgdmFyaWFibGVzLiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgYG1tL01ha2VmaWxlYCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHRoZSBjb25maWd1cmF0aW9ucyB0aGF0IGNvbnRyb2wgaXRzIGluY2x1c2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2NjcsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDowOToxNy41NzI4MzQyMDhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA0NTgyODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaG1tLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9MTM4PW9iai0kKENPTkZJR19aT05FX0RFVklDRSkgKz0gbWVtcmVtYXAub1xcbm1tL01ha2VmaWxlOjEzOTpvYmotJChDT05GSUdfSE1NX01JUlJPUikgKz0gaG1tLm9cXG5tbS9NYWtlZmlsZS0xNDAtb2JqLSQoQ09ORklHX01FTUZEX0NSRUFURSkgKz0gbWVtZmQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDowOToxNy42NjMyOTgxNzFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODg2OTQzNTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipIbW0sIGBDT05GSUdfSE1NX01JUlJPUmAgTmVlZGVkPyoqXG5cblJpZ2h0LCBzbyBpdCBsb29rcyBsaWtlIHRoZSBjdXJyZW50IHRhc2sgbmVjZXNzaXRhdGVzIHRoZSB1c2Ugb2YgYENPTkZJR19ITU1fTUlSUk9SYC4gQSBnb29kIHN0YXJ0aW5nIHBvaW50LCBhcyBhbHdheXMsIGlzIHRvIGNoZWNrIGhvdyB0aGlzIGZlYXR1cmUgaXMgYWN0dWFsbHkgKnVzZWQqIGluIHRoZSBjb2RlYmFzZS4gTGV0J3MgZGlnIGludG8gYGxpYi90ZXN0X2htbS5jYC4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlIGV4YW1wbGUgY29uZmlndXJhdGlvbnMgYW5kIHRlc3Qgc2V0dXBzIHJlc2lkZS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciBhIGNsZWFyIGV4YW1wbGUgb2YgaG93IGBDT05GSUdfSE1NX01JUlJPUmAgaXMgZGVmaW5lZCwgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIHNvbWUgaW5kaWNhdGlvbnMgb2YgZGVwZW5kZW50IGNvbmZpZ3VyYXRpb25zIG9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIGl0cyBwcmVzZW5jZS4gVGhpcyBmaWxlIHdpbGwgcHJvYmFibHkgaG9sZCB0aGUga2V5cyB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGZlYXR1cmUgaGFzIGJlZW4gdmFsaWRhdGVkIGFuZCB0aGUgYXNzdW1wdGlvbnMgYWJvdXQgaXRzIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1NTksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDowOToyMC41NTAyNDU4NzNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2MzUwOTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRlc3RfaG1tLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibGliL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9NYWtlZmlsZT0xMDI9b2JqLSQoQ09ORklHX1RFU1RfTE9DS1VQKSArPSB0ZXN0X2xvY2t1cC5vXFxubGliL01ha2VmaWxlOjEwMzpvYmotJChDT05GSUdfVEVTVF9ITU0pICs9IHRlc3RfaG1tLm9cXG5saWIvTWFrZWZpbGUtMTA0LW9iai0kKENPTkZJR19URVNUX0ZSRUVfUEFHRVMpICs9IHRlc3RfZnJlZV9wYWdlcy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAwOjA5OjIwLjY4NjYwMjU2MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMzM3MjAwNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBITU0gQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJIHNlZSB3ZSBuZWVkIGBDT05GSUdfVEVTVF9ITU1gLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgcmVsZXZhbnQgZHJpdmVyIGNvZGUsIHNvIEknbGwgcXVpY2tseSBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9ucyB1c2VkIGluIGBkcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N2bS5jYCBhbmQgYGRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmNgLiBIb3dldmVyLCBJJ20gdGhpbmtpbmcgdGhlIGZvY3VzIGhlcmUgc2hvdWxkIGJlIGNvcmUgSE1NIHRlc3RpbmcsIGFuZCBgVEVTVF9ITU1gIHNlZW1zIGxpa2UgaXQncyBzcGVjaWZpY2FsbHkgdGFpbG9yZWQgZm9yIHRoYXQgcHVycG9zZS4gTGV0J3Mgc3RhcnQgd2l0aCBgVEVTVF9ITU1gIGFzIHRoZSBtb3JlIGRpcmVjdCBwYXRoLiBUbyBtYWtlIHN1cmUsIHRob3VnaCwgbGV0IG1lIGRvdWJsZS1jaGVjayBgbW0vS2NvbmZpZ2AgZm9yIHRoZSBgSE1NX01JUlJPUmAgY29uZmlndXJhdGlvbjsgaXQncyBhbHdheXMgZ29vZCB0byB2ZXJpZnkgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGVkIG9wdGlvbnMgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODkyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDA6MDk6MjQuMDIwMzI0Njc1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTQzNzU2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSE1NX01JUlJPUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTIyOD1jb25maWcgWk9ORV9ERVZJQ0VcXG4tLVxcbm1tL0tjb25maWctMTI0OS0jXFxubW0vS2NvbmZpZzoxMjUwOmNvbmZpZyBITU1fTUlSUk9SXFxubW0vS2NvbmZpZy0xMjUxLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDA6MDk6MjQuMTQxNzY3MTE0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAzMjA3MjMxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEZWNvZGluZyB0aGUgQm9vbCoqXG5cbkFscmlnaHQsIGxldCBtZSBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBITU1fTUlSUk9SYCBpcyBhIEJvb2xlYW4gdmFyaWFibGUsIGxpa2VseSBjb250cm9sbGluZyBzb21lIHNvcnQgb2YgbWlycm9yaW5nIG9yIHJlZmxlY3Rpb24gYmVoYXZpb3Igd2l0aGluIG15IEhpZGRlbiBNYXJrb3YgTW9kZWwgKEhNTSkgaW1wbGVtZW50YXRpb24uIFRoZSBmYWN0IHRoYXQgaXQncyBwcm9iYWJseSBzZWxlY3RlZCBieSBgVEVTVF9ITU1gIHN1Z2dlc3RzIHRoaXMgaXMgcmVsYXRlZCB0byBhIHRlc3RpbmcgY29uZmlndXJhdGlvbi4gSeKAmW0gZ3Vlc3NpbmcsIGJhc2VkIG9uIHByaW9yIGV4cGVyaWVuY2UsIHRoYXQgdGhpcyB0ZXN0IHN1aXRlIHByb2JhYmx5IHRvZ2dsZXMgdmFyaW91cyBtb2RlbCBwYXJhbWV0ZXJzIGFuZCBjb25maWd1cmF0aW9ucyB0byB2YWxpZGF0ZSB0aGUgZnVuY3Rpb25hbGl0eS4gVGhlcmVmb3JlLCBgSE1NX01JUlJPUmAgaXMgbGlrZWx5IGEgY29uZmlndXJhdGlvbiB0byB0ZXN0IGEgbW9kZWwgdmFyaWF0aW9uLiBUaGlzIHNldHVwIGFpbXMgdG8gZW5zdXJlIHRoYXQgdGhlIEhNTSBiZWhhdmVzIGFzIGV4cGVjdGVkIHVuZGVyIGEgcmVmbGVjdGVkIG9yIG1pcnJvcmVkIGRhdGEgc3BhY2Ugc2NlbmFyaW8uIEknZCBuZWVkIG1vcmUgY29udGV4dCBvbiB0aGUgSE1NIHN0cnVjdHVyZSBhbmQgdGVzdGluZyBmcmFtZXdvcmsgdG8gcGluIGRvd24gdGhlICpleGFjdCogcHVycG9zZSwgYnV0IHRoZSBjb3JlIGlkZWEgaXMgY2xlYXI6IGl0J3MgYSB0ZXN0IGZsYWcsIGFuZCBtaXJyb3JpbmcgaXMgdGhlIG1lY2hhbmlzbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyNjgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDowOToyNy4xNzM4NDE2OTRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0Nzk2OTA5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVEVTVF9ITU1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibGliL0tjb25maWcuZGVidWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL0tjb25maWcuZGVidWc9MzMxOD1jb25maWcgVEVTVF9NRU1JTklUXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzI1LVxcbmxpYi9LY29uZmlnLmRlYnVnOjMzMjY6Y29uZmlnIFRFU1RfSE1NXFxubGliL0tjb25maWcuZGVidWctMzMyNy1cXHR0cmlzdGF0ZSBcXFwiVGVzdCBITU0gKEhldGVyb2dlbmVvdXMgTWVtb3J5IE1hbmFnZW1lbnQpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDowOToyNy40MjE4MjExNjJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc5MDI2NjcxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBURVNUX0hNTSBTZWxlY3Rpb24qKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHF1aWNrbHkgZ3Jhc3Agd2hhdCBgVEVTVF9ITU1gIGhhcyBwaWNrZWQuIFRoZSBuYW1lIGl0c2VsZiBpcyBhIGNsdWU7IGl0J3MgbGlrZWx5IGEgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGhpZGRlbiBNYXJrb3YgbW9kZWwgZm9yIHNvbWUgcHVycG9zZS4gVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIG5vdyBpcywgd2hhdCBhcmUgdGhlIGNoYXJhY3RlcmlzdGljcyBvZiB0aGF0IHBhcnRpY3VsYXIgbW9kZWw/IElzIGl0IGEgYmFzaWMgaW1wbGVtZW50YXRpb24sIG9yIGRvZXMgaXQgaW5jb3Jwb3JhdGUgbW9yZSBhZHZhbmNlZCB0ZWNobmlxdWVzPyBXaGF0IGZlYXR1cmVzIHdlcmUgY29uc2lkZXJlZCB3aGVuIHNlbGVjdGluZyBgVEVTVF9ITU1gIGluIHRoaXMgc2l0dWF0aW9uPyBJJ20gYWxyZWFkeSBmb3JtdWxhdGluZyBxdWVzdGlvbnMgaW4gbXkgbWluZCwgc3VjaCBhcyBcIldoYXQgZGF0YSB3YXMgdXNlZCB0byB0cmFpbiBpdD9cIiwgXCJXaGF0IGFyZSB0aGUga2V5IHN0YXRlIHRyYW5zaXRpb25zP1wiIGFuZCBcIldoYXQgb2JqZWN0aXZlIHdhcyB0aGlzIEhNTSBjaG9zZW4gdG8gZnVsZmlsbD9cIiBUaGUgZ29hbCBpcyB0byByYXBpZGx5IGRldGVybWluZSBpZiBgVEVTVF9ITU1gIG1ha2VzIHNlbnNlLCBvciBpZiBJIG5lZWQgdG8gZGlnIGRlZXBlciBmb3IgaXRzIHJhdGlvbmFsZS4gSXQncyBlc3NlbnRpYWxseSBhIHNhbml0eSBjaGVjayBiZWZvcmUgSSBnbyBhbnkgZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2MTksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDowOTozMC4yMTIwOTA0MDJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDAyODU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QuKkhNTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Z1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Zz0zMzI2PWNvbmZpZyBURVNUX0hNTVxcbi0tXFxubGliL0tjb25maWcuZGVidWctMzMyOS1cXHRkZXBlbmRzIG9uIERFVklDRV9QUklWQVRFXFxubGliL0tjb25maWcuZGVidWc6MzMzMDpcXHRzZWxlY3QgSE1NX01JUlJPUlxcbmxpYi9LY29uZmlnLmRlYnVnLTMzMzEtXFx0c2VsZWN0IE1NVV9OT1RJRklFUlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDowOTozMC4zMjYxMjY1ODNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc2MDk3NTkxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIEhNTSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gYFRFU1RfSE1NYCBpcyBwb2ludGluZyBtZSB0b3dhcmRzIGBITU1fTUlSUk9SYC4gVGhhdCdzIHRoZSBwcmltYXJ5IHNlbGVjdGlvbiwgbm90ZWQuIE5vdywgbGV0J3MganVzdCBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGVyZSBhcmVuJ3QgKmFueSogb3RoZXIgcG90ZW50aWFsIEhNTS1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGluIHBsYXkuIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gTGV0J3Mgc2VlLi4uIGlzIGBDT05GSUdfRFJNX05PVVZFQVVfU1ZNYCBhIGZhY3RvciBoZXJlPyBPciBwZXJoYXBzIGBDT05GSUdfRFJNX0dQVVNWTWA/IFRob3NlIHNlZW0gcmVsZXZhbnQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIERSTSwgc28gY2hlY2tpbmcgdGhlbSBpcyBhIG11c3QuIEFuZCB3aGF0IGFib3V0IGBDT05GSUdfSU5GSU5JQkFORF9PTl9ERU1BTkRfUEFHSU5HYD8gSE1NIHRvdWNoZXMgbWVtb3J5LCBzbyB0aGlzIGlzIHdvcnRoIGEgbG9vay4gTWlnaHQgYENPTkZJR19NU0hWYCBvciBgQ09ORklHX0FNRFhETkFgIGhhdmUgYW55IGluZmx1ZW5jZT8gSE1NIGFuZCB2aXJ0dWFsaXphdGlvbiwgYW5kIHRoZW4gSE1NIGFuZCBBTUQncyBETkEgYXJjaGl0ZWN0dXJlLlxuXG5BbHJpZ2h0LCBJIHNob3VsZCBzcGVjaWZpY2FsbHkgY2hlY2sgdGhhdCBgZHJpdmVycy9hY2NlbC9hbWR4ZG5hL0tjb25maWdgIGZpbGUuIEknbSBnb2luZyB0byB3YW50IHRvIHNlZSB0aGUgcmVsYXRpb25zaGlwIGhlcmUsIGlmIHRoZXJlIGlzIG9uZS4gR290dGEgYmUgYWJzb2x1dGVseSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYSBkZXBlbmRlbmN5IG9yIGludGVyYWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzk1NCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDowOTozNC4wODcxMDYyOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyODEzMjAzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRFJNX0FNRFhETkFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9hY2NlbC9hbWR4ZG5hL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAwOjA5OjM0LjI3OTkyODAyM1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTAwNzY1MzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgQ29kZWJhc2U6IElkZW50aWZ5aW5nIHRoZSBSZWxldmFudCBDb25maWd1cmF0aW9uKipcblxuT2theSwgaG9sZCBvbi4gSSd2ZSBnb3QgYSBtb2RpZmljYXRpb24gc2hvd2luZyB1cCBpbiBgZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FpZTJfY3R4LmNgLiBUaGF0J3MgYSBrZXkgZmlsZSBmb3IgdGhlIEFNRCBERE5BIGFjY2VsZXJhdGlvbiBjb250ZXh0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgY2hhbmdlZC4gVGhlIGZpcnN0IHN0ZXAsIGFzIGFsd2F5cywgaXMgdG8gZmlndXJlIG91dCB0aGUgYXNzb2NpYXRlZCBjb25maWd1cmF0aW9uIHRoYXQgZ292ZXJucyB0aGlzIHBhcnQgb2YgdGhlIGRyaXZlci4gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gdGhhdCBjb250cm9scyBob3cgdGhpcyBwb3J0aW9uIG9mIHRoZSBjb2RlIGlzIGJ1aWx0IGFuZCBlbmFibGVkLiBUaW1lIHRvIGdvIGh1bnRpbmcgZm9yIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMuIEkgZXhwZWN0IHRoZXJlJ3MgcHJvYmFibHkgYSBkZWZjb25maWcgb3Igc29tZSBvdGhlciBidWlsZC10aW1lIGZsYWcgaW5mbHVlbmNpbmcgaG93IHRoYXQgcGFydGljdWxhciBBSUUyIGNvbnRleHQgaXMgc2V0IHVwLiBMZXQncyBzZWUgaWYgdGhlIGNvbmZpZyBpcyBpbiB0aGUgcGFyZW50IGRpcmVjdG9yeSwgb3IgaW4gdGhlIGRyaXZlcidzIG93biBkaXJlY3RvcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MzU0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDA6MDk6MzcuMzgwNjk2MTg3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDY3NTIzNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWllMl9jdHgub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2FjY2VsL2FtZHhkbmEvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9hY2NlbC9hbWR4ZG5hL01ha2VmaWxlPTM9YW1keGRuYS15IDo9IFxcXFxcXG4tLVxcbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9NYWtlZmlsZS02LVxcdGFpZV9zbXUubyBcXFxcXFxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL01ha2VmaWxlOjc6XFx0YWllMl9jdHgubyBcXFxcXFxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL01ha2VmaWxlLTgtXFx0YWllMl9lcnJvci5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDA6MDk6MzcuNDg3NDU2NTI4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3MDcwMjg5MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogTW9kdWxlIElkZW50aWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgc29tZXRoaW5nLCBhbmQgdGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgXCJXaGF0J3MgdGhlIG5hbWUgb2YgdGhpcyBwYXJ0aWN1bGFyIG1vZHVsZSBvciBjb21wb25lbnQgSSdtIGRlYWxpbmcgd2l0aD9cIiBUaGUgY3JpdGljYWwgZmlyc3Qgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIG9yIHRyb3VibGVzaG9vdGluZyBhbnkgc3lzdGVtIGlzIHBpbnBvaW50aW5nIGl0cyBzcGVjaWZpYyBpZGVudGl0eS4gQW5kIHRoYXQgbW9kdWxlIG5hbWUsIHN0cmFpZ2h0IHVwLCBpcyBgYW1keGRuYWAuIFRoYXQncyB0aGUga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uIHRvIHN0YXJ0IHdpdGguIFdpdGggdGhhdCBuYW1lIEkgY2FuIGxvb2sgaW50byByZWxldmFudCBkb2N1bWVudGF0aW9uLCByZWxhdGVkIGNvZGUgYW5kIG90aGVyIGltcGxlbWVudGF0aW9ucyB0aGF0IG1heSBiZSByZWxldmFudC4gTm93IEkga25vdyBwcmVjaXNlbHkgd2hhdCBJJ20gZGVhbGluZyB3aXRoLCBhbmQgSSBjYW4gbW92ZSBmb3J3YXJkIGFjY29yZGluZ2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODcxMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAwOjA5OjQwLjE5NDQ4NzgzNVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExODA3ODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFtZHhkbmEteVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2FjY2VsL2FtZHhkbmEvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9hY2NlbC9hbWR4ZG5hL01ha2VmaWxlLTItXFxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL01ha2VmaWxlOjM6YW1keGRuYS15IDo9IFxcXFxcXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvTWFrZWZpbGUtNC1cXHRhaWUubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAwOjA5OjQwLjMwNjMwMTE4NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzU0NzU1NDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipIdW50aW5nIERvd24gdGhlIEFNRCBYRE5BIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSB0aGlua2luZywgXCJXaGVyZSdzIHRoZSBjb25maWcgZm9yIGBhbWR4ZG5hYD9cIiBUaGlzIGlzIGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHNwZWNpZmljIGhhcmR3YXJlIGlzIGJlaW5nIGluaXRpYWxpemVkLCBtYW5hZ2VkLCBhbmQgaW50ZXJhY3RlZCB3aXRoLiBLbm93aW5nIHRoZSBjb25maWd1cmF0aW9uIGlzIGZ1bmRhbWVudGFsIHRvIGp1c3QgYWJvdXQgZXZlcnl0aGluZy4gSXQgZGljdGF0ZXMgdGhlIGF2YWlsYWJsZSByZXNvdXJjZXMsIHRoZSBjbG9jayBzZXR0aW5ncywgcG93ZXIgcHJvZmlsZXMsIGludGVycnVwdCBtYXBwaW5ncyDigJMgdGhlIHdob2xlIHNoZWJhbmcuIFdpdGhvdXQgaXQsIEknbSBiYXNpY2FsbHkgZmx5aW5nIGJsaW5kLiBJcyBpdCBhIGRlZGljYXRlZCBmaWxlPyBQYXJ0IG9mIGEgYnJvYWRlciBzeXN0ZW0gY29uZmlndXJhdGlvbj8gRGVmaW5lZCBpbiBmaXJtd2FyZT8gTWF5YmUgaXQncyBkeW5hbWljYWxseSBnZW5lcmF0ZWQgYmFzZWQgb24gaGFyZHdhcmUgZGV0ZWN0aW9uPyBUaGUgaHVudCBiZWdpbnMuIFRoZSBudWFuY2VzIGhlcmUsIGFzIHdlIGJvdGgga25vdywgYXJlIGdvaW5nIHRvIGJlIGtleSB0byBhbnkgZGVlcCBkaXZlLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTY2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDA6MDk6NDMuMDYxMDU5MTc5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjkwNzkwNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYW1keGRuYS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYWNjZWwvYW1keGRuYS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2FjY2VsL2FtZHhkbmEvTWFrZWZpbGU9MzM9YW1keGRuYS0kKENPTkZJR19ERUJVR19GUykgKz0gYW1keGRuYV9kZWJ1Z2ZzLm9cXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvTWFrZWZpbGU6MzQ6b2JqLSQoQ09ORklHX0RSTV9BQ0NFTF9BTURYRE5BKSA9IGFtZHhkbmEub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDowOTo0My4xOTAxNDMzMzhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE0ODY2MDQyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBBTUQgWEROQSBEUk0gQWNjZWxlcmF0aW9uIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gYENPTkZJR19EUk1fQUNDRUxfQU1EWEROQWAuLi4gbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyB0aGlzLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBkcml2ZXIgc3VwcG9ydC4gVGhlIHF1aWNrIHBhdGggdG8gdGhhdCBpcywgd2l0aG91dCBhIGRvdWJ0LCBkaXZpbmcgaW50byBgZHJpdmVycy9ncHUvZHJtL2RybV9ncHVzdm0uY2AuIFRoYXQgZmlsZSBpcyBsaWtlbHkgd2hlcmUgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kLCB0aGVyZWZvcmUsIHBvdGVudGlhbGx5IHRoZSBhY2NlbGVyYXRpb24gaG9va3MgZm9yIEFNRCdzIEROQS1yZWxhdGVkIGFjY2VsZXJhdGlvbiB3b3VsZCBiZSBkZWZpbmVkLiBJdCdzIGFsbW9zdCBjZXJ0YWluIHRoaXMgaXMgd2hlcmUgSSdsbCBmaW5kIHRoZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMsIHRoZSBkYXRhIHN0cnVjdHVyZXMsIGFuZCB0aGUgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIHRoZSBBTUQgR1BVIFZpcnR1YWwgTWVtb3J5IChHVVNWTSkgc3Vic3lzdGVtIGlmIHRoZXJlIGlzIGFueS4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgd2hhdCBhc3BlY3RzIG9mIHRoZSBoYXJkd2FyZSB0aGlzIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdW5sb2NrcyBhbmQgd2hhdCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgYXJlIGFzc29jaWF0ZWQgd2l0aCB1c2luZyBpdC4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIHdoYXQgdGVzdGluZyBpcyByZXF1aXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkyNzksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDowOTo0Ni4zMzg4MDY0MDdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDM2NDc0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcm1fZ3B1c3ZtLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZT0xMDk9ZHJtX2dwdXN2bV9oZWxwZXIteSA6PSBcXFxcXFxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlOjExMDpcXHRkcm1fZ3B1c3ZtLm9cXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUtMTExLWRybV9ncHVzdm1faGVscGVyLSQoQ09ORklHX1pPTkVfREVWSUNFKSArPSBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAwOjA5OjQ2LjQ2MzE3Njc1NloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzQzMTk1NzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBBY3RpdmF0aW9uIG9mIGBkcm1fZ3B1c3ZtX2hlbHBlcmAqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgcXVlc3Rpb24gaXMsICp3aGF0KiBhY3R1YWxseSBlbmFibGVzIHRoZSBgZHJtX2dwdXN2bV9oZWxwZXJgIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoZSBrZXJuZWw/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGtub2JzIHRoYXQgYXJlIHRpZWQgdG8gdGhpcy4gSXMgaXQgYSBjb3JlIG9wdGlvbiBidXJpZWQgZGVlcCB3aXRoaW4gdGhlIERSTSBzdWJzeXN0ZW0sIG9yIGlzIGl0IG1vcmUgY2xvc2VseSBsaW5rZWQgdG8gc3BlY2lmaWMgR1BVIGRyaXZlcnMsIHBlcmhhcHMgdGhyb3VnaCB0aGVpciBhc3NvY2lhdGVkIG1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnM/IEknbGwgcHJvYmFibHkgbmVlZCB0byBkZWx2ZSBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZXMgZm9yIHRoZSBEUk0gKERpcmVjdCBSZW5kZXJpbmcgTWFuYWdlcikgYW5kIGFueSByZWxldmFudCBHUFUgZHJpdmVycy4gSSBiZXQgaXQgaXMgc29tZSBraW5kIG9mIG1lbW9yeSBtYW5hZ2VtZW50IG9yIHNoYXJlZCB2aXJ0dWFsIG1lbW9yeSBvcHRpb24uXG5cbkknbGwgYmUgbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgYW5kIGFueSByZWxhdGlvbnNoaXBzIHRvIG90aGVyIGZlYXR1cmVzLCBzcGVjaWZpY2FsbHkgYW55dGhpbmcgbWVudGlvbmluZyBTVk0sIG9yIGV2ZW4gbW9yZSBicm9hZGx5LCBzaGFyZWQgbWVtb3J5LCBhbmQgaG93IHRoYXQgaW50ZXJhY3RzIHdpdGggdGhlIHVzZXIgc3BhY2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBncmFudWxhcml0eSBoZXJlLiBJcyB0aGlzIHRpZWQgdG8gdGhlIGVuYWJsaW5nIG9mIElPTU1VIG9yIHNvbWV0aGluZz8gSXMgaXQgYWx3YXlzIG9uPyBJZiBub3QsIHdoYXQgY2lyY3Vtc3RhbmNlcyByZXF1aXJlIGl0IHRvIGJlIGVuYWJsZWQ/IElmIHRoZXJlIGlzIGEgd2F5IHRvIGRpc2FibGUgaXQsIEkgd2lsbCBiZSBsb29raW5nIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgcmVhc29uIHRvIGRvIHNvLlxuXG5JJ2xsIGJlIGN1cmlvdXMgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY29uZmlndXJhdGlvbi4gRG9lcyBpdCByZXF1aXJlIGEgc3BlY2lmaWMga2VybmVsIHZlcnNpb24sIGFuZCBkb2VzIGl0IGNvbWUgd2l0aCBhbnkgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnM/IEkgbmVlZCB0byBrbm93IGhvdyBpdCBpbXBhY3RzIHRoZSBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZSB3aGVuIGl0IGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuIFRoaXMgd2lsbCBndWlkZSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvcHRpbWFsIHVzZSBjYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk2MzcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDowOTo0OS44MDYzNzU2MDlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTc1MTU2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcm1fZ3B1c3ZtX2hlbHBlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlPTEwNz1vYmotJChDT05GSUdfRFJNX0dQVVZNKSArPSBkcm1fZ3B1dm0ub1xcbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZS0xMDgtXFxuZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlOjEwOTpkcm1fZ3B1c3ZtX2hlbHBlci15IDo9IFxcXFxcXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUtMTEwLVxcdGRybV9ncHVzdm0ub1xcbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZToxMTE6ZHJtX2dwdXN2bV9oZWxwZXItJChDT05GSUdfWk9ORV9ERVZJQ0UpICs9IFxcXFxcXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUtMTEyLVxcdGRybV9wYWdlbWFwLm9cXFxcXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUtMTE0LVxcbmRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZToxMTU6b2JqLSQoQ09ORklHX0RSTV9HUFVTVk0pICs9IGRybV9ncHVzdm1faGVscGVyLm9cXG5kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUtMTE2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDowOTo0OS45NjgxMzI0NDVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU3Nzc3MzEzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIEdQVSBWaXJ0dWFsaXphdGlvbioqXG5cbkFscmlnaHQsIHRoZSBkaXNjdXNzaW9uIGhhcyBsYW5kZWQgb24gYENPTkZJR19EUk1fR1BVU1ZNYC4gUmlnaHQgYXdheSwgbXkgbWluZCBnb2VzIHRvIHRoZSBsaWtlbHkgaW1wbGVtZW50YXRpb24uIEkgaW1tZWRpYXRlbHkgdGhpbmssICp0aGF0IG1lYW5zIEkgc2hvdWxkIGNoZWNrIHRoZSBOb3V2ZWF1IGRyaXZlciwgc3BlY2lmaWNhbGx5IGBkcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N2bS5jYC4qIEknbSBhc3N1bWluZyB0aGF0J3MgdGhlIHBsYWNlIHdoZXJlIHRoZSBjb3JlIEdQVSBTeXN0ZW0gVmlydHVhbCBNYWNoaW5lIGNvZGUsIGlmIGFueSBleGlzdHMsIHdvdWxkIHJlc2lkZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkncmUgaGFuZGxpbmcgdGhlIHNoYXJlZCBtZW1vcnkgYW5kIHZpcnR1YWxpemF0aW9uIGNvbXBvbmVudHMgZm9yIHRoZSBOb3V2ZWF1IGRyaXZlcnMuIExldCdzIHNlZSB3aGF0IHRoZXkgYXJlIGRvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDIxNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAwOjA5OjUyLjU0NTkwOTYyM1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3MzAzNjIyLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJub3V2ZWF1X3N2bS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDowOTo1Mi43NjMyMjE0NTVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgwMjAwMzg1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgYSBNb2RpZmllZCBGaWxlKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSBzZWUgdGhhdCBgbm91dmVhdV9zdm0uY2AgaGFzIGJlZW4gdG91Y2hlZC4gVGhhdCdzIGEga2V5IGZpbGUgaW4gdGhlIE5vdXZlYXUgZHJpdmVyLCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIFN5c3RlbSBWaXJ0dWFsIE1lbW9yeSAoU1ZNKSwgd2hpY2ggaXMgY3JpdGljYWwgZm9yIHRoaW5ncyBsaWtlIEdQVSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc2hhcmluZy4gTXkgaW1tZWRpYXRlIHJlYWN0aW9uIGlzIHRvIHRyYWNrIGRvd24gaXRzIGNvbmZpZ3VyYXRpb24uIENoYW5nZXMgdG8gdGhhdCBmaWxlLCBlc3BlY2lhbGx5IHJlbGF0ZWQgdG8gbWVtb3J5IGhhbmRsaW5nLCBjYW4gaGF2ZSBwcmV0dHkgZmFyLXJlYWNoaW5nIGltcGxpY2F0aW9ucy4gSXQgY291bGQgYmUgYSBzaW1wbGUgYnVnIGZpeCwgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIG9yLCBwb3RlbnRpYWxseSwgYSBjaGFuZ2UgaW4gaG93IHRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIGhhcmR3YXJlLCBtYXliZSBldmVuIGEgbmV3IGZlYXR1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgbW9kaWZpY2F0aW9uIGJlZm9yZSBJIG1ha2UgYW55IGFzc3VtcHRpb25zLiBGaXJzdCBzdGVwOiBkaXZpbmcgaW50byBpdHMgY29uZmlndXJhdGlvbiFcblxuXG4iLCJJbnB1dFRva2VucyI6MjA0NDEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDowOTo1NS41NjUyMjgwMjRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDExNzkwOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibm91dmVhdV9zdm1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAwOjA5OjU1LjY5OTM1Mzk4M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzM0Mzk5OTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBpc3N1ZTpcblxuKipEZWx2aW5nIGludG8gdGhlIE5vdXZlYXUgS2J1aWxkIFN0cnVjdHVyZSoqXG5cbk9rYXksIEknbSB0cnlpbmcgdG8gdHJhY2sgZG93biBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgTm91dmVhdSBkcml2ZXIuIFdoZXJlIHdvdWxkIHRoZSBidWlsZCBjb25maWd1cmF0aW9ucyBiZT8gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIGNvcmUgZGlyZWN0b3JpZXMuIExldCdzIHN0YXJ0IHdpdGggYGRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L2AuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSwgYnV0IEkgd2FudCB0byBiZSBjZXJ0YWluIHRoYXQgSSdtIG9uIHRoZSByaWdodCB0cmFjay4gQW5kIGlmIEkgYW0sIHdoZXJlIHdvdWxkIHRoZSBjb21waWxhdGlvbiBhbmQgYnVpbGQgY29uZmlndXJhdGlvbnMgYmUgbWFuYWdlZD8gTWF5YmUgdGhlcmUncyBhIGBLYnVpbGRgIGZpbGUgaW4gdGhlcmU/IFRoYXQncyB0eXBpY2FsbHkgd2hlcmUgdGhlc2UgdGhpbmdzIGFyZSBkZWZpbmVkLCBlc3BlY2lhbGx5IGluIHRoZSBrZXJuZWwuIExldCdzIGNoZWNrIGBkcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9LYnVpbGRgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBsb29raW5nIGluIHRoZSByaWdodCBzcG90LCBzbyBsZXQncyBzdGFydCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2NzMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDowOTo1OC40MzM3NTYyOTdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4NjgxNzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5vdXZlYXVfc3ZtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L0tidWlsZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9LYnVpbGQ9NDA9bm91dmVhdS15ICs9IG5vdXZlYXVfZ2VtLm9cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9LYnVpbGQ6NDE6bm91dmVhdS0kKENPTkZJR19EUk1fTk9VVkVBVV9TVk0pICs9IG5vdXZlYXVfc3ZtLm9cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9LYnVpbGQtNDItbm91dmVhdS0kKENPTkZJR19EUk1fTk9VVkVBVV9TVk0pICs9IG5vdXZlYXVfZG1lbS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAwOjA5OjU4LjUzMjQ4MjQ1OVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTM2NjgzMTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIGFuZCBEcml2ZXIgRXhhbWluYXRpb24qKlxuXG5SaWdodCwgc28gSSdtIHNlZWluZyBhIHJlZmVyZW5jZSB0byBgQ09ORklHX0RSTV9OT1VWRUFVX1NWTWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoYXQncyB0aGUgY29udGV4dCBoZXJlP1wiIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZsYWcgcmVsYXRlcyB0byB0aGUgb3ZlcmFsbCBzeXN0ZW0gY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgdGhlIE5vdXZlYXUgZHJpdmVyIGFuZCBTaGFyZWQgVmlydHVhbCBNZW1vcnkuIFdoZXJlIGRvZXMgdGhpcyB2YXJpYWJsZSBmaXQgaW4/XG5cbk15IG5leHQgc3RlcCwgYW5kIHRoaXMgaXMgYWxtb3N0IGF1dG9tYXRpYyBhdCB0aGlzIHBvaW50LCBpcyB0byBkaXZlIGludG8gYGRyaXZlcnMvaHYvbXNodl9yZWdpb25zLmNgLiBJJ20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aCBTaGFyZWQgVmlydHVhbCBNZW1vcnkgKFNWTSksIGFuZCBob3cgdGhpcyBkcml2ZXIsIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgSHlwZXItViBlbnZpcm9ubWVudHMsIG1pZ2h0IGJlIGludGVyYWN0aW5nIHdpdGggb3IgYmVpbmcgYWZmZWN0ZWQgYnkgdGhlIE5vdXZlYXUgZHJpdmVyLiBUaGlzIGlzIGxpa2VseSBhbiBhcmVhIHdoZXJlIEkgbWlnaHQgc2VlIHRoZSB1c2Ugb2YgYENPTkZJR19EUk1fTk9VVkVBVV9TVk1gIGFuZCB0aGUgdXNlIG9mIHRoZSBOb3V2ZWF1IGRyaXZlci4gTG9va2luZyBmb3IgZGVwZW5kZW5jaWVzIG9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9ucyBpcyBteSBwcmltYXJ5IGdvYWwuIEl0J3MgdGltZSB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjb25maWd1cmF0aW9uIHNldHRpbmcgd2l0aGluIHRoaXMgc3BlY2lmaWMgZHJpdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTAyNSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAwOjEwOjAxLjY2OTE2ODAyOVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzNjcxNzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1zaHZfcmVnaW9ucy5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaHYvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9odi9NYWtlZmlsZT0xNj1tc2h2X3Jvb3QteSA6PSBtc2h2X3Jvb3RfbWFpbi5vIG1zaHZfc3luaWMubyBtc2h2X2V2ZW50ZmQubyBtc2h2X2lycS5vIFxcXFxcXG5kcml2ZXJzL2h2L01ha2VmaWxlOjE3OlxcdCAgICAgICBtc2h2X3Jvb3RfaHZfY2FsbC5vIG1zaHZfcG9ydGlkX3RhYmxlLm8gbXNodl9yZWdpb25zLm9cXG5kcml2ZXJzL2h2L01ha2VmaWxlLTE4LW1zaHZfcm9vdC0kKENPTkZJR19ERUJVR19GUykgKz0gbXNodl9kZWJ1Z2ZzLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDA6MTA6MDEuNzcyODQ2MzFaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ4NzA0MjY4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBtc2h2X3Jvb3RgIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgcXVlc3Rpb24gaW1tZWRpYXRlbHkgdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcywgXCJ3aGF0ICpzcGVjaWZpY2FsbHkqIGVuYWJsZXMgdGhlIGBtc2h2X3Jvb3RgIGZlYXR1cmU/XCIgV2Uga25vdyBpdCBleGlzdHMsIHdlJ3JlIGZhbWlsaWFyIHdpdGggaXRzIHB1cnBvc2UgaW4gZ2VuZXJhbCwgYnV0IHRoZSBwcmVjaXNlIG1lY2hhbmlzbSBvZiBpdHMgYWN0aXZhdGlvbiBpc24ndCBhbHdheXMgaW1tZWRpYXRlbHkgb2J2aW91cy4gSXMgaXQgYSBjb21waWxlLXRpbWUgZmxhZz8gQSBrZXJuZWwgbW9kdWxlIHBhcmFtZXRlcj8gUGVyaGFwcyBhIHNwZWNpZmljIGVudHJ5IHdpdGhpbiBhIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBmaWxlLCBvciBzZXQgb2YgZmlsZXMsIHdpdGhpbiB0aGUgc3lzdGVtP1xuXG5NeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoaXMgaXNuJ3QgYSBzaW1wbGUgb24vb2ZmIHN3aXRjaCwgYnV0IHByb2JhYmx5IHNvbWV0aGluZyBtb3JlIG51YW5jZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBkaWZmZXJlbnQgc3lzdGVtIGNvbXBvbmVudHMuIE1heWJlIGl04oCZcyBkZXBlbmRlbnQgb24gY2VydGFpbiBoYXJkd2FyZSBjYXBhYmlsaXRpZXMsIG9yIGFub3RoZXIgcmVsYXRlZCBmZWF0dXJlIHRoYXQgbXVzdCBiZSBlbmFibGVkLiBJIGtub3cgaXQgaXNuJ3QgbGlrZWx5IHNvbWV0aGluZyB0aGF0IGp1c3QgXCJpc1wiLlxuXG5JJ20gdGhpbmtpbmcgSSBuZWVkIHRvIHRyYWNlIHRoZSBjb2RlIHBhdGggcmVsYXRlZCB0byBgbXNodl9yb290YCwgb3IgbG9vayBhdCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiB0byBmaWd1cmUgb3V0IHdoZW4gYW5kIGhvdyB0aGUgcm9vdCBvZiB0aGlzIHN0cnVjdHVyZSBpcyBjcmVhdGVkLiBXaGVyZSB3b3VsZCB0aGUgbW9zdCB1c2VmdWwgZG9jdW1lbnRhdGlvbiBiZSBsb2NhdGVkPyBQZXJoYXBzIHRoZSBrZXJuZWwgZG9jdW1lbnRhdGlvbiBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIHRob3VnaCBpdCBtaWdodCBiZSBhIGJpdCB2ZXJib3NlLlxuXG5JJ20gYXNzdW1pbmcgdGhlIHNwZWNpZmljIGNvbnRleHQgaXMgdGhlIGtleSwgaW4gb3JkZXIgdG8gZ2V0IHRvIHRoZSByb290IG9mIHRoZSBwcm9ibGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQ2NiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAwOjEwOjA1LjI1OTg5MTg4MVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5MjM1NjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1zaHZfcm9vdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2h2L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaHYvTWFrZWZpbGU9ND1vYmotJChDT05GSUdfSFlQRVJWX0JBTExPT04pXFx0Kz0gaHZfYmFsbG9vbi5vXFxuZHJpdmVycy9odi9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19NU0hWX1JPT1QpXFx0XFx0Kz0gbXNodl9yb290Lm9cXG5kcml2ZXJzL2h2L01ha2VmaWxlLTYtb2JqLSQoQ09ORklHX01TSFZfVlRMKSAgICAgICAgICArPSBtc2h2X3Z0bC5vXFxuLS1cXG5kcml2ZXJzL2h2L01ha2VmaWxlPTE1PWh2X3V0aWxzLXkgOj0gaHZfdXRpbC5vIGh2X2t2cC5vIGh2X3NuYXBzaG90Lm8gaHZfdXRpbHNfdHJhbnNwb3J0Lm9cXG5kcml2ZXJzL2h2L01ha2VmaWxlOjE2Om1zaHZfcm9vdC15IDo9IG1zaHZfcm9vdF9tYWluLm8gbXNodl9zeW5pYy5vIG1zaHZfZXZlbnRmZC5vIG1zaHZfaXJxLm8gXFxcXFxcbmRyaXZlcnMvaHYvTWFrZWZpbGU6MTc6XFx0ICAgICAgIG1zaHZfcm9vdF9odl9jYWxsLm8gbXNodl9wb3J0aWRfdGFibGUubyBtc2h2X3JlZ2lvbnMub1xcbmRyaXZlcnMvaHYvTWFrZWZpbGU6MTg6bXNodl9yb290LSQoQ09ORklHX0RFQlVHX0ZTKSArPSBtc2h2X2RlYnVnZnMub1xcbmRyaXZlcnMvaHYvTWFrZWZpbGU6MTk6bXNodl9yb290LSQoQ09ORklHX1RSQUNFUE9JTlRTKSArPSBtc2h2X3RyYWNlLm9cXG5kcml2ZXJzL2h2L01ha2VmaWxlLTIwLW1zaHZfdnRsLXkgOj0gbXNodl92dGxfbWFpbi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAwOjEwOjA1LjM4OTEzNTIzWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMjAzNTI0NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYSBIeXBlcnZpc29yLVJlbGF0ZWQgSW5maW5pYmFuZCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgdGhhdCBgQ09ORklHX01TSFZfUk9PVGAgZmxhZy4uLiBIbW0sIHRoYXQncyBpbW1lZGlhdGVseSBzdWdnZXN0aW5nIGEgTWljcm9zb2Z0IEh5cGVyLVYgZW52aXJvbm1lbnQsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggcm9vdC1sZXZlbCBhY2Nlc3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGF0IGltcGFjdHMgSW5maW5pYmFuZCBhbmQgcG90ZW50aWFsbHkgT3BlbiBEYXRhIFBhdGggKE9EUCkgb3BlcmF0aW9ucy5cblxuTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaWcgaW50byB0aGUgSW5maW5pYmFuZCBjb2RlLCBhbmQgSSBrbm93IHdoZXJlIHRvIHN0YXJ0LiBMZXQncyBsb29rIGF0IGBkcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jYC4gVGhhdCBmaWxlIGlzIGEgbGlrZWx5IGNhbmRpZGF0ZSBmb3IgaGFuZGxpbmcgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIE9EUCBpbnRlcmFjdGlvbiwgd2hpY2ggd291bGQgYmUgY2VudHJhbCB0byBhIGh5cGVydmlzb3IgZW52aXJvbm1lbnQgbGlrZSBIeXBlci1WLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGV5J3JlIGhhbmRsaW5nIFVzZXIgTWVtb3J5IChVTUVNKSB3aXRoIHRoZSBmbGFnIHNldCB0byBzZWUgaG93IHJvb3QgYWNjZXNzIHdvdWxkIGFmZmVjdCB0aGUgY29uZmlndXJhdGlvbi4gSSB3YW50IHRvIHNlZSBob3cgdGhhdCBmbGFnIGNoYW5nZXMgdGhlIGhhbmRsaW5nIG9mIG1lbW9yeSBhbmQgYWNjZXNzIGNvbnRyb2wgd2l0aGluIHRoZSBjb250ZXh0IG9mIE9wZW4gRGF0YSBQYXRoLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIGEgSHlwZXItViByb290IGluc3RhbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjExNSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAwOjEwOjA4LjYwOTQ5MDM0M1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwODAxODQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVtZW1fb2RwLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvTWFrZWZpbGU9MjE9aWJfY29yZS0kKENPTkZJR19JTkZJTklCQU5EX1VTRVJfTUVNKSArPSB1bWVtLm8gdW1lbV9kbWFidWYub1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL01ha2VmaWxlOjIyOmliX2NvcmUtJChDT05GSUdfSU5GSU5JQkFORF9PTl9ERU1BTkRfUEFHSU5HKSArPSB1bWVtX29kcC5vXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvTWFrZWZpbGUtMjMtaWJfY29yZS0kKENPTkZJR19JTkZJTklCQU5EX1VTRVJfQUNDRVNTX0NPUkUpICs9IGliX2NvcmVfdXZlcmJzLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDA6MTA6MDguNzMwMjk5ODEyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2NzQ2MjM0OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYENPTkZJR19JTkZJTklCQU5EX09OX0RFTUFORF9QQUdJTkdgKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uIHRoZSBzeXN0ZW0gaXMgcG9pbnRpbmcgbWUgdG93YXJkcyBgQ09ORklHX0lORklOSUJBTkRfT05fREVNQU5EX1BBR0lOR2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBzZXR0aW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGVyZSdzIHRoZSBiZXN0IHBsYWNlIHRvIGdldCBhIGdvb2QgaGFuZGxlIG9uIGhvdyB0aGlzIGlzIHdvcmtpbmc/XCIgVGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgYW4gSW5maW5pQmFuZC1yZWxhdGVkIGZlYXR1cmUgbGlrZSBvbi1kZW1hbmQgcGFnaW5nIGlzIGFsd2F5cyB0aGUgcmVsZXZhbnQgdGVzdGluZyBjb2RlLiBTbywgbGV0J3MgemVybyBpbiBvbiB0aGF0LiBMZXQgbWUgdGFrZSBhIGxvb2sgYXQgYGxpYi90ZXN0X2htbS5jYC4gSG9wZWZ1bGx5LCBpdCdsbCBwcm92aWRlIHNvbWUgY2xlYXIgZXhhbXBsZXMgb2YgaG93IHRoaXMgb24tZGVtYW5kIHBhZ2luZyBpcyB0ZXN0ZWQgYW5kIHVzZWQgd2l0aGluIHRoZSBrZXJuZWwncyBJbmZpbmlCYW5kIHN0YWNrLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZCB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGFuZCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI1NTAsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDoxMDoxMS40MDQ5Mjc1MjJaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDIwNzc0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0ZXN0X2htbS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImxpYi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvTWFrZWZpbGU9MTAyPW9iai0kKENPTkZJR19URVNUX0xPQ0tVUCkgKz0gdGVzdF9sb2NrdXAub1xcbmxpYi9NYWtlZmlsZToxMDM6b2JqLSQoQ09ORklHX1RFU1RfSE1NKSArPSB0ZXN0X2htbS5vXFxubGliL01ha2VmaWxlLTEwNC1vYmotJChDT05GSUdfVEVTVF9GUkVFX1BBR0VTKSArPSB0ZXN0X2ZyZWVfcGFnZXMub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDoxMDoxMS44ODkxNDAxOTFaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM4Mjk3ODUxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIFRlc3RpbmcgQ29uc2lkZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgQ09ORklHX1RFU1RfSE1NYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQgYXJlIHRoZSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBlbmFibGUgZm9yIGVmZmVjdGl2ZSB0ZXN0aW5nPyBJIG5lZWQgdG8gYnVpbGQgYSBjb21wcmVoZW5zaXZlIGxpc3QuXG5cblJpZ2h0LCBzbyBiZXNpZGVzIGBURVNUX0hNTWAgaXRzZWxmLCBJIGFsc28ga25vdyB0aGF0IGBITU1fTUlSUk9SYCBpcyBpbnRyaW5zaWNhbGx5IGxpbmtlZC4gRXZlbiB0aG91Z2ggYEhNTV9NSVJST1JgIGlzIHNlbGVjdGVkIGJ5IGBURVNUX0hNTWAsIGl0J3MgY29yZSB0byB0aGUgZnVuY3Rpb25hbGl0eSwgc28gaXQgbmVlZHMgdG8gYmUgZXhwbGljaXRseSBsaXN0ZWQgYXMgYSBrZXkgZGVwZW5kZW5jeS4gTGV0J3MgbWFrZSBzdXJlIGl0J3MgY2xlYXIuXG5cblRoZW4sIEknbSBub3RpbmcgdGhlIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbnMgcmVxdWlyZWQ6IGBEUk1fQUNDRUxfQU1EWEROQWAsIGBEUk1fR1BVU1ZNYCwgYERSTV9OT1VWRUFVX1NWTWAsIGBNU0hWX1JPT1RgLCBhbmQgYElORklOSUJBTkRfT05fREVNQU5EX1BBR0lOR2AuIEknbGwgbmVlZCB0byBrZWVwIHRyYWNrIG9mIHRoZXNlIHRvIGVuc3VyZSBhbGwgcmVsZXZhbnQgZmVhdHVyZXMgYXJlIGVuYWJsZWQgZHVyaW5nIG15IHRlc3RpbmcuXG5cbk5vdywgYSBrZXkgcXVlc3Rpb246IGNhbiBJIGdldCBhd2F5IHdpdGgganVzdCBlbmFibGluZyBgVEVTVF9ITU1gIHRvIHZhbGlkYXRlIHRoZSBjb3JlIGxvZ2ljPyBZZXMsIGFmdGVyIHJldmlld2luZyB0aGUgc2V0dXAsIEknbSBjb25maWRlbnQgdGhhdCBlbmFibGluZyBgVEVTVF9ITU1gIGFsb25lIGlzIHN1ZmZpY2llbnQgZm9yIHRoZSBpbml0aWFsIGNvcmUgbG9naWMgdGVzdGluZy4gSSdtIHNhdGlzZmllZC5cblxuRmluYWxseSwgSSdtIGp1c3QgcXVpY2tseSBjb25maXJtaW5nIHRoYXQgYEhNTV9NSVJST1JgIGlzIHNlbGVjdGFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyOTAzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAwOjEwOjE2LjI3MjEyMDgyNFoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzOTg1MDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBITU1fTUlSUk9SXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMjI4PWNvbmZpZyBaT05FX0RFVklDRVxcbi0tXFxubW0vS2NvbmZpZy0xMjQ5LSNcXG5tbS9LY29uZmlnOjEyNTA6Y29uZmlnIEhNTV9NSVJST1JcXG5tbS9LY29uZmlnLTEyNTEtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDoxMDoxNi40MjYxMTM5NzFaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODA3NDA3MzU1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBITU0gKEhhcmR3YXJlIE1hbmFnZWQgTWVtb3J5KSBGYXVsdCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIEhNTSBmYXVsdCBoYW5kbGVycyBhcmUgdHJpZ2dlcmVkIGFuZCB1c2VkLiBGaXJzdCwgdGhpcyBzZWVtcyB0byBiZSBhIGJvb2xlYW4gY29uZmlnIG9wdGlvbiB3aXRob3V0IGEgZGlyZWN0IHByb21wdCwgd2hpY2ggbWVhbnMgaXQgY2FuJ3QgYmUgZW5hYmxlZCBzdGFuZGFsb25lLiBJdCdzIGRlcGVuZGVudCBvbiBgVEVTVF9ITU1gIG9yIG9uZSBvZiB0aGUgZGV2aWNlIGRyaXZlcnMuXG5cbk15IGtleSBmb2N1cyBoZXJlIGlzIG9uIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBmYXVsdCBoYW5kbGluZyBpcyBpbml0aWF0ZWQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgc3lzdGVtLiBJJ3ZlIGdvdCBhIGxpc3Qgb2YgaW1wb3J0YW50IHN5bWJvbHMgdG8gdHJhY2s6IGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAsIGBobW1fcmFuZ2VfZmF1bHRgLCBgaG1tX2RvX2ZhdWx0YCwgYGhtbV9yYW5nZV9mYXVsdF9sb2NrZWRgLCBhbmQgYGhtbV9yZWNvcmRfZmF1bHRgLiBJJ20gc3RhcnRpbmcgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgcmVsYXRlIHRvIGVhY2ggb3RoZXIuIEkndmUgYWxyZWFkeSBjb25maXJtZWQgYGhtbV9kb19mYXVsdGAsIGBobW1fcmFuZ2VfZmF1bHRfbG9ja2VkYCwgYW5kIGBobW1fcmVjb3JkX2ZhdWx0YCBhcmUgc3RhdGljLCB3aGljaCBpcyBnb29kIHRvIGtub3cgZm9yIHNjb3BpbmcgYW5kIHZpc2liaWxpdHkuIGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAgYW5kIGBobW1fcmFuZ2VfZmF1bHRgIGFyZSBleHBvcnRlZCwgd2hpY2ggaW1wbGllcyB0aGV5IGhhdmUgZXh0ZXJuYWwgdXNlIGNhc2VzLlxuXG5OZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGZhdWx0IGhhbmRsaW5nIGludGVyYWN0cyB3aXRoIHZhcmlvdXMgaGFyZHdhcmUgYXJjaGl0ZWN0dXJlcy4gSSd2ZSBzdGFydGVkIHNjYW5uaW5nIHRoZSBjb2RlIGJhc2UgZm9yIHJlbGV2YW50IGZ1bmN0aW9ucy4gSSd2ZSBpZGVudGlmaWVkIHRoZSBmb2xsb3dpbmcgaW4gYGxpYi90ZXN0X2htbS5jYDogYGRtaXJyb3JfcmFuZ2VfZmF1bHRfdW5sb2NrZWRgLCBgZG1pcnJvcl9mYXVsdF91bmxvY2tlZGAsIGFuZCBgZG1pcnJvcl9yZWFkX3VubG9ja2VkYCB3aGljaCBpbmRpY2F0ZXMgdGhpcyBtb2R1bGUgaGFzIHRoZSB0ZXN0IGZ1bmN0aW9ucy4gVGhlbiBJIG1vdmVkIG9uIGFuZCBsb29rZWQgYXQgZnVuY3Rpb25zIGluIGRyaXZlciBkaXJlY3Rvcmllcy5cblxuYGRyaXZlcnMvYWNjZWwvYW1keGRuYS9haWUyX2N0eC5jYCBoYXMgYGFpZTJfcG9wdWxhdGVfcmFuZ2VgLCB3aGljaCBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIGZhdWx0IGhhbmRsaW5nIGZvciB0aGlzIHNwZWNpZmljIGFyY2hpdGVjdHVyZS4gSSBhbHNvIG5vdGljZWQgdGhhdCB0aGUgYGRyaXZlcnMvZ3B1L2RybS9kcm1fZ3B1c3ZtLmNgIG1vZHVsZSBjb250YWlucyB0aGUgZnVuY3Rpb25zIGBkcm1fZ3B1c3ZtX3NjYW5fbW1gLCBgZHJtX2dwdXN2bV9nZXRfcGFnZXNgLCBhbmQgYGRybV9ncHVzdm1fcmFuZ2VfZXZpY3RgLCBzbyBjbGVhcmx5IEdQVSBhbmQgU1ZNIGhhdmUgc29tZSBpbnZvbHZlbWVudC4gYGRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3ZtLmNgIGFuZCBgZHJpdmVycy9odi9tc2h2X3JlZ2lvbnMuY2AgY29udGFpbiBgbm91dmVhdV9yYW5nZV9mYXVsdGAgYW5kIGBtc2h2X3JlZ2lvbl9yYW5nZV9mYXVsdGAgd2hpY2ggYXJlIGFkZGl0aW9uYWwgZXhhbXBsZXMuXG5cbkZpbmFsbHksIGBkcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jYCBpcyBpbXBvcnRhbnQgd2l0aCB0aGUgZnVuY3Rpb24gYGliX3VtZW1fb2RwX21hcF9kbWFfYW5kX2xvY2tgLCBzbyBpdCBpcyBjbGVhciB0aGF0IEluZmluaWJhbmQgaXMgaW1wb3J0YW50LlxuXG5TbywganVzdCB0byByZWNhcCB0aGUgZnVuY3Rpb25zIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIEknbSBnb2luZyB0byBsaXN0OlxuXG4qICAgYGhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0YFxuKiAgIGBobW1fcmFuZ2VfZmF1bHRgXG4qICAgYGhtbV9kb19mYXVsdGBcbiogICBgaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZGBcbiogICBgaG1tX3JlY29yZF9mYXVsdGBcbiogICBgZG1pcnJvcl9yYW5nZV9mYXVsdF91bmxvY2tlZGBcbiogICBgZG1pcnJvcl9mYXVsdF91bmxvY2tlZGBcbiogICBgZG1pcnJvcl9yZWFkX3VubG9ja2VkYFxuXG5UaGVzZSBhcmUgbXkgZm9jdXMgcG9pbnRzLiBJJ20gYnVpbGRpbmcgYW4gdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlc2UgY29yZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCBwb3RlbnRpYWwgZmF1bHQgdHJpZ2dlcnMuXG5cbk9rYXksIGxldCdzIHZlcmlmeSB0aGF0IHRoZSBjb25maWcgb3B0aW9ucyBhbGlnbiB3aXRoIHdoYXQgSSdtIHNlZWluZzogYFRFU1RfSE1NYCwgYERSTV9BQ0NFTF9BTURYRE5BYCwgYERSTV9HUFVTVk1gLCBgRFJNX05PVVZFQVVfU1ZNYCwgYE1TSFZfUk9PVGAsIGFuZCBgSU5GSU5JQkFORF9PTl9ERU1BTkRfUEFHSU5HYC4gSSBzaG91bGQgY2hlY2sgaWYgdGhlcmUgYXJlIG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLCBzbyBsZXQncyBjcm9zcy1yZWZlcmVuY2UgYERSTV9BQ0NFTF9BTURYRE5BYCB3aXRoaW4gdGhlIGFwcHJvcHJpYXRlIGBLY29uZmlnYCBmaWxlIGluIHRoZSBkcml2ZXIgZGlyZWN0b3J5IHRvIGVuc3VyZSBJJ20gY2FwdHVyaW5nIGFsbCByZWxhdGVkIHNldHRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzQ1MiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDoxMDoyNC41MDAxODk2OTdaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMTAwNTU1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRFJNX0FDQ0VMX0FNRFhETkFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9hY2NlbC9hbWR4ZG5hL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9hY2NlbC9hbWR4ZG5hL0tjb25maWctMi1cXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvS2NvbmZpZzozOmNvbmZpZyBEUk1fQUNDRUxfQU1EWEROQVxcbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9LY29uZmlnLTQtXFx0dHJpc3RhdGUgXFxcIkFNRCBBSSBFbmdpbmVcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAwOjEwOjI0LjcwMTIwMDkxOVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODM1NTA3OTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBFeHBsb3JhdGlvbioqXG5cblJpZ2h0LCB0aGF0J3Mgc2V0dGxlZC4gVGltZSB0byBkaWcgaW50byB0aGUgZGV0YWlscy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdmVyaWZ5IHRoZSBzdGF0dXMgb2YgYERSTV9HUFVTVk1gLiBJIG5lZWQgdG8gZW5zdXJlIGl0J3MgcHJvcGVybHkgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbCdzIGJ1aWxkIHN5c3RlbS4gU3BlY2lmaWNhbGx5LCBJJ2xsIGJlIGhlYWRpbmcgb3ZlciB0byBgZHJpdmVycy9ncHUvZHJtL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSByZWxldmFudCBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIG9wdGlvbnMgZm9yIERSTS1yZWxhdGVkIGZlYXR1cmVzIHJlc2lkZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgaXQncyBlbmFibGVkLCBkaXNhYmxlZCwgb3IgYnVpbHQgYXMgYSBtb2R1bGUsIGFuZCBpZiB0aGVyZSBhcmUgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGltcGFjdCBpdHMgYXZhaWxhYmlsaXR5LiBJIGV4cGVjdCB0byBjb25maXJtIG15IGFzc3VtcHRpb24gdGhhdCBpdCBpcyBlbmFibGVkLCBidXQgSSBuZWVkIHRvIGVuc3VyZSB0aGlzIGlzIGNvcnJlY3QgYmVmb3JlIG1vdmluZyBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTAxNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAwOjEwOjI3LjUzNjcxMTI2NloiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2NzA1MTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEUk1fR1BVU1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZ3B1L2RybS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZ3B1L2RybS9LY29uZmlnPTIyMT1jb25maWcgUlVTVF9EUk1fR1BVVk1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9LY29uZmlnLTIyNy1cXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZzoyMjg6Y29uZmlnIERSTV9HUFVTVk1cXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZy0yMjktXFx0dHJpc3RhdGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDA6MTA6MjcuNzIzNDIyNDlaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY1NjM4ODU4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgTm91dmVhdSdzIFNWTSBDb25maWd1cmF0aW9uKipcblxuWWVzLiBPa2F5LCBzbyB3ZSdyZSBvbiB0aGUgcmlnaHQgdHJhY2suIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgRFJNX05PVVZFQVVfU1ZNYCBpcyBlbmFibGVkIGFuZCBob3cgaXQncyBkZWZpbmVkLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBsb29rIGF0IHRoZSBgZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGZpbmQgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGFuZCBkZXBlbmRlbmNpZXMgZm9yIHRoZSBOb3V2ZWF1IGRyaXZlcidzIFN5c3RlbSBNZW1vcnkgTWFuYWdlbWVudCAoU1ZNKSBzdXBwb3J0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBpdCdzIGV2ZW4gY29tcGlsZWQgaW4sIGlmIGl0J3MgYSBtb2R1bGUsIGFuZCB3aGF0IG90aGVyIG9wdGlvbnMgbWlnaHQgYmUgcmVsZXZhbnQgZm9yIG15IGN1cnJlbnQgaW52ZXN0aWdhdGlvbi4gTGV0J3Mgc2VlIHdoYXQgd2UgZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUzMjksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDoxMDozMS4zNzk4MTUxOTZaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzMwMTQ5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRFJNX05PVVZFQVVfU1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvS2NvbmZpZz04Nj1jb25maWcgRFJNX05PVVZFQVVfQkFDS0xJR0hUXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9LY29uZmlnLTkzLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L0tjb25maWc6OTQ6Y29uZmlnIERSTV9OT1VWRUFVX1NWTVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L0tjb25maWctOTUtXFx0Ym9vbCBcXFwiKEVYUEVSSU1FTlRBTCkgRW5hYmxlIFNWTSAoU2hhcmVkIFZpcnR1YWwgTWVtb3J5KSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDoxMDozMS41NzMxMjI0NjlaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU4MzI4NzkzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkludGVybmFsIE1lbnRhbCBDaGVja2xpc3QqKlxuXG5ZZXMuIE9rYXksIEkndmUgZ290IGEgaGFuZGxlIG9uIHRoZSB0YXNrLiBOb3csIHdoZXJlIHRvIHN0YXJ0Li4uIGxldCdzIHBpbnBvaW50IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBsb29raW5nIGF0IHRoZSBjb3JyZWN0IGZpbGUuIFRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgTVNIVl9ST09UYCB2YXJpYWJsZSB3aXRoaW4gdGhlIGBkcml2ZXJzL2h2L0tjb25maWdgIGZpbGUuIFRoYXQgc2VlbXMgbGlrZSB0aGUgcmlnaHQgcGF0aCB0byB0cmFjayBkb3duIHRoYXQgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NjgwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDA6MTA6MzQuMTU2NDEzNTI3WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjIwNjYyMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1TSFZfUk9PVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2h2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9odi9LY29uZmlnPTYwPWNvbmZpZyBIWVBFUlZfVk1CVVNcXG4tLVxcbmRyaXZlcnMvaHYvS2NvbmZpZy02Ny1cXG5kcml2ZXJzL2h2L0tjb25maWc6Njg6Y29uZmlnIE1TSFZfUk9PVFxcbmRyaXZlcnMvaHYvS2NvbmZpZy02OS1cXHR0cmlzdGF0ZSBcXFwiTWljcm9zb2Z0IEh5cGVyLVYgcm9vdCBwYXJ0aXRpb24gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDA6MTA6MzQuMzc4NDk5ODk4WiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MDQ2NjUzNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW5uZXIgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIEluZmluaWJhbmQgUGFnaW5nIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodC4gVGltZSB0byBkaWcgaW4uIFRoZSBpbml0aWFsIHByb21wdCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBzbyBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCB0aGUgb2J2aW91czogY29uZmlybWluZyB0aGUgc2V0dGluZyBmb3IgYElORklOSUJBTkRfT05fREVNQU5EX1BBR0lOR2AuIEknbGwgaW1tZWRpYXRlbHkganVtcCB0byB3aGVyZSBpdCdzIGRlZmluZWQ6IGBkcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZ2AuIE5vIG5lZWQgdG8gd2FzdGUgdGltZSBlbHNld2hlcmU7IHRoaXMgaXMgbGlrZWx5IHdoZXJlIGFsbCB0aGUgcmVsZXZhbnQgZGV0YWlscyBhcmUgaG91c2VkLCBhbmQgSSBjYW4gcXVpY2tseSBlc3RhYmxpc2ggdGhlIGN1cnJlbnQgc3RhdHVzIGFuZCByZWxldmFudCBkZXBlbmRlbmNpZXMuIFRoaXMgaXMgdXN1YWxseSB0aGUgZmlyc3Qgc3RvcCBmb3IgdW5kZXJzdGFuZGluZyBob3cgYSBmZWF0dXJlIGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBJbmZpbmliYW5kIHN1YnN5c3RlbS4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTkyMCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDAwOjEwOjM3LjI4MzE2OTAwOFoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4MDAzMjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJTkZJTklCQU5EX09OX0RFTUFORF9QQUdJTkdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc9NDQ9Y29uZmlnIElORklOSUJBTkRfVVNFUl9NRU1cXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTUwLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjUxOmNvbmZpZyBJTkZJTklCQU5EX09OX0RFTUFORF9QQUdJTkdcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy01Mi1cXHRib29sIFxcXCJJbmZpbmlCYW5kIG9uLWRlbWFuZCBwYWdpbmcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDA6MTA6MzcuNDMxMTc3NTU1WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2NzMzNjU1ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiBpdCdzIGEgZGlyZWN0IHN0cmVhbSBvZiBteSB0aG91Z2h0czpcblxuKipDaGVja2luZyBgVEVTVF9ITU1gIGluIGBsaWIvS2NvbmZpZy5kZWJ1Z2AqKlxuXG5SaWdodCwgaGVyZSB3ZSBnby4gTGV0J3MgbWFrZSBzdXJlIGBURVNUX0hNTWAgaXMgY29uZmlndXJlZCBjb3JyZWN0bHksIG9yIGF0IGxlYXN0IGV4aXN0cyBhbmQgaXMgYmVoYXZpbmcgYXMgZXhwZWN0ZWQuIFRoYXQncyBhIGdvb2QgZmlyc3Qgc3RlcCB0byB0cm91Ymxlc2hvb3Rpbmcgd2hhdGV2ZXIncyBnb2luZyBvbi4gV2Uga25vdyB0aGlzIHNwZWNpZmljIHZhcmlhYmxlIGNvbnRyb2xzIHRoZSBITU0gdGVzdCB3aGljaCB3ZSBhcmUgZGVidWdnaW5nLiBUaGlzIHNob3VsZCBiZSBzdHJhaWdodGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MjUyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDA6MTA6NDAuMTA0NTQ2MTU1WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDkwODU5MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRFU1RfSE1NXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImxpYi9LY29uZmlnLmRlYnVnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9LY29uZmlnLmRlYnVnPTMzMTg9Y29uZmlnIFRFU1RfTUVNSU5JVFxcbi0tXFxubGliL0tjb25maWcuZGVidWctMzMyNS1cXG5saWIvS2NvbmZpZy5kZWJ1ZzozMzI2OmNvbmZpZyBURVNUX0hNTVxcbmxpYi9LY29uZmlnLmRlYnVnLTMzMjctXFx0dHJpc3RhdGUgXFxcIlRlc3QgSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDA6MTA6NDAuMjEzNjM3Njg2WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNDMxMzczMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFByb3Bvc2VkIE1lbW9yeSBNYW5hZ2VtZW50IENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9uIHN5bWJvbHM6IGBURVNUX0hNTWAsIGBEUk1fQUNDRUxfQU1EWEROQWAsIGBEUk1fR1BVU1ZNYCwgYERSTV9OT1VWRUFVX1NWTWAsIGBNU0hWX1JPT1RgLCBhbmQgYElORklOSUJBTkRfT05fREVNQU5EX1BBR0lOR2AuIEJhc2VkIG9uIHRoZSBjb250ZXh0LCBJJ20gYWxyZWFkeSB0aGlua2luZyB0aGVzZSBhcmUgcmVsYXRlZCB0byBzb21lIGZvcm0gb2YgbWVtb3J5IG1hbmFnZW1lbnQgb3IgZGV2aWNlIGRyaXZlciBpbnRlcmFjdGlvbiwgbGlrZWx5IGFyb3VuZCBIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50IChITU0pIGdpdmVuIHRoZSBwcmVzZW5jZSBvZiBgVEVTVF9ITU1gLlxuXG5Ob3csIHRoZSBjb3JlIHN5bWJvbHMgb2YgaW50ZXJlc3Qgc2VlbSB0byBiZSB0aGVzZSBcImZhdWx0XCIgcmVsYXRlZCBmdW5jdGlvbnM6IGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGAsIGBobW1fcmFuZ2VfZmF1bHRgLCBgaG1tX2RvX2ZhdWx0YCwgYGhtbV9yYW5nZV9mYXVsdF9sb2NrZWRgLCBgaG1tX3JlY29yZF9mYXVsdGAsIGBkbWlycm9yX3JhbmdlX2ZhdWx0X3VubG9ja2VkYCwgYGRtaXJyb3JfZmF1bHRfdW5sb2NrZWRgLCBhbmQgYGRtaXJyb3JfcmVhZF91bmxvY2tlZGAuIFRoZSBuYW1pbmcgY29udmVudGlvbiBzdHJvbmdseSBzdWdnZXN0cyBhIGNoYW5nZSBpbiBob3cgbWVtb3J5IGZhdWx0cyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsb2NraW5nIGFuZCB0aW1lb3V0IGJlaGF2aW9yLCB3aGljaCBhbHNvIHRpZXMgaW4gbmljZWx5IHdpdGggdGhlIGNvbmZpZ3MuIEkgYW0gbm90aW5nIHRoZSBpbmNsdXNpb24gb2YgYGRtaXJyb3JgIHdoaWNoIGhpbnRzIGF0IHNvbWUgZm9ybSBvZiBkYXRhIG1pcnJvcmluZy5cblxuRnJvbSB0aGUgZGVzY3JpcHRpb24sIEkgc2VlIHRoaXMgaXMgaW50cm9kdWNpbmcgYSBuZXcgdW5sb2NrZWQgdGltZW91dCB2YXJpYW50IGZvciBITU0gcmFuZ2UgZmF1bHRzLCBgaG1tX3JhbmdlX2ZhdWx0X3VubG9ja2VkX3RpbWVvdXRgLCBhbmQgaXQncyByZWZhY3RvcmluZyB0aGUgZXhpc3RpbmcgYGhtbV9yYW5nZV9mYXVsdGAgdG8gdXNlIGEgbG9ja2VkIGhlbHBlciBmdW5jdGlvbi4gVGhpcyBpcyBzaWduaWZpY2FudC4gSXQncyBub3QganVzdCBhIG1pbm9yIHR3ZWFrOyBpdCdzIGEgZnVuZGFtZW50YWwgc2hpZnQgaW4gaG93IGZhdWx0cyBhcmUgbWFuYWdlZCwgZXNwZWNpYWxseSBhcm91bmQgbG9ja2luZyBzZW1hbnRpY3MuIEkgY2FuIHNlZSB0aGlzIGlzIGxpa2VseSBhZmZlY3Rpbmcgc2V2ZXJhbCBkcml2ZXJzIGFuZCB0aGUgSE1NIHRlc3QgbW9kdWxlLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgcm9idXN0bmVzcyBvZiB0aGUgY2hhbmdlcy4gVGhlIGludHJvZHVjdGlvbiBvZiB1bmxvY2tlZCB2YXJpYW50cyBhbHdheXMgaW5jcmVhc2VzIHRoZSBwb3RlbnRpYWwgZm9yIHJhY2UgY29uZGl0aW9ucyBvciBvdGhlciBjb25jdXJyZW5jeSBpc3N1ZXMuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGZvY3VzIG9uIGZ1enppbmcgdGhlc2UgbmV3IHJldHJ5IGFuZCBsb2NraW5nIGxvZ2ljLCBhcyB3ZWxsIGFzIGVuc3VyZSB0aGUgbmV3IGxvY2tpbmcgbWVjaGFuaXNtcyBhcmUgdGhvcm91Z2hseSB0ZXN0ZWQuIFRoZXNlIGNoYW5nZXMgd2lsbCBoYXZlIHN1YnN0YW50aWFsIGltcGFjdCBvbiBkZXZpY2UgZHJpdmVyIGJlaGF2aW9yLCBhbmQgbWF5IGNhdXNlIHVuZXhwZWN0ZWQgY2hhbmdlcyBpbiBzeXN0ZW0gcmVsaWFiaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NTA4LCJPdXRwdXRUb2tlbnMiOjI2MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwMDoxMDo0Ni41NTY3Nzc5NDFaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODQ0Njc1MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRFU1RfSE1NXCIsXG4gICAgXCJEUk1fQUNDRUxfQU1EWEROQVwiLFxuICAgIFwiRFJNX0dQVVNWTVwiLFxuICAgIFwiRFJNX05PVVZFQVVfU1ZNXCIsXG4gICAgXCJNU0hWX1JPT1RcIixcbiAgICBcIklORklOSUJBTkRfT05fREVNQU5EX1BBR0lOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0XCIsXG4gICAgXCJobW1fcmFuZ2VfZmF1bHRcIixcbiAgICBcImhtbV9kb19mYXVsdFwiLFxuICAgIFwiaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZFwiLFxuICAgIFwiaG1tX3JlY29yZF9mYXVsdFwiLFxuICAgIFwiZG1pcnJvcl9yYW5nZV9mYXVsdF91bmxvY2tlZFwiLFxuICAgIFwiZG1pcnJvcl9mYXVsdF91bmxvY2tlZFwiLFxuICAgIFwiZG1pcnJvcl9yZWFkX3VubG9ja2VkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyB1bmxvY2tlZCB0aW1lb3V0IHZhcmlhbnQgZm9yIEhNTSByYW5nZSBmYXVsdHMgKGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGApIGFuZCByZWZhY3RvcnMgdGhlIGV4aXN0aW5nIGBobW1fcmFuZ2VfZmF1bHRgIHRvIHVzZSBhIGxvY2tlZCBoZWxwZXIuIEl0IGFsc28gdXBkYXRlcyBzZXZlcmFsIGRyaXZlcnMgYW5kIHRoZSBITU0gdGVzdCBtb2R1bGUgdG8gdXNlIHRoZSBuZXcgdW5sb2NrZWQgdmFyaWFudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRldmljZSBkcml2ZXIgaW50ZXJhY3Rpb24sIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgcmV0cnkgYW5kIGxvY2tpbmcgbG9naWMgaXMgcm9idXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRFU1RfSE1NXCIsXG4gICAgXCJEUk1fQUNDRUxfQU1EWEROQVwiLFxuICAgIFwiRFJNX0dQVVNWTVwiLFxuICAgIFwiRFJNX05PVVZFQVVfU1ZNXCIsXG4gICAgXCJNU0hWX1JPT1RcIixcbiAgICBcIklORklOSUJBTkRfT05fREVNQU5EX1BBR0lOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhtbV9yYW5nZV9mYXVsdF91bmxvY2tlZF90aW1lb3V0XCIsXG4gICAgXCJobW1fcmFuZ2VfZmF1bHRcIixcbiAgICBcImhtbV9kb19mYXVsdFwiLFxuICAgIFwiaG1tX3JhbmdlX2ZhdWx0X2xvY2tlZFwiLFxuICAgIFwiaG1tX3JlY29yZF9mYXVsdFwiLFxuICAgIFwiZG1pcnJvcl9yYW5nZV9mYXVsdF91bmxvY2tlZFwiLFxuICAgIFwiZG1pcnJvcl9mYXVsdF91bmxvY2tlZFwiLFxuICAgIFwiZG1pcnJvcl9yZWFkX3VubG9ja2VkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyB1bmxvY2tlZCB0aW1lb3V0IHZhcmlhbnQgZm9yIEhNTSByYW5nZSBmYXVsdHMgKGBobW1fcmFuZ2VfZmF1bHRfdW5sb2NrZWRfdGltZW91dGApIGFuZCByZWZhY3RvcnMgdGhlIGV4aXN0aW5nIGBobW1fcmFuZ2VfZmF1bHRgIHRvIHVzZSBhIGxvY2tlZCBoZWxwZXIuIEl0IGFsc28gdXBkYXRlcyBzZXZlcmFsIGRyaXZlcnMgYW5kIHRoZSBITU0gdGVzdCBtb2R1bGUgdG8gdXNlIHRoZSBuZXcgdW5sb2NrZWQgdmFyaWFudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRldmljZSBkcml2ZXIgaW50ZXJhY3Rpb24sIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgcmV0cnkgYW5kIGxvY2tpbmcgbG9naWMgaXMgcm9idXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzp6pw[1] Phase: Succeeded StartedAt: 2026-07-16 00:10:58 +0000 UTC FinishedAt: 2026-07-16 00:10:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzp6pw[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-16 00:10:58 +0000 UTC FinishedAt: 2026-07-16 00:10:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzp6pw[2] Phase: Succeeded StartedAt: 2026-07-16 00:10:58 +0000 UTC FinishedAt: 2026-07-16 04:59:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzp6pw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hmm_range_fault_unlocked_timeout","hmm_range_fault","hmm_do_fault","hmm_range_fault_locked","hmm_record_fault","dmirror_range_fault_unlocked","dmirror_fault_unlocked","dmirror_read_unlocked"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"b9d06a23-bd20-413d-8027-e6bf653d3955","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-16 00:10:58 +0000 UTC FinishedAt: 2026-07-16 04:59:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hmm_range_fault_unlocked_timeout","hmm_range_fault","hmm_do_fault","hmm_range_fault_locked","hmm_record_fault","dmirror_range_fault_unlocked","dmirror_fault_unlocked","dmirror_read_unlocked"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"b9d06a23-bd20-413d-8027-e6bf653d3955","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowzp6pw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hmm_range_fault_unlocked_timeout","hmm_range_fault","hmm_do_fault","hmm_range_fault_locked","hmm_record_fault","dmirror_range_fault_unlocked","dmirror_fault_unlocked","dmirror_read_unlocked"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"b9d06a23-bd20-413d-8027-e6bf653d3955","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-16 00:10:58 +0000 UTC FinishedAt: 2026-07-16 00:11:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzp6pw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hmm_range_fault_unlocked_timeout","hmm_range_fault","hmm_do_fault","hmm_range_fault_locked","hmm_record_fault","dmirror_range_fault_unlocked","dmirror_fault_unlocked","dmirror_read_unlocked"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"b9d06a23-bd20-413d-8027-e6bf653d3955","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-16 00:10:58 +0000 UTC FinishedAt: 2026-07-16 00:11:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzp6pw/series-workflowzp6pw-convert-artifact-2942179549/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzp6pw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hmm_range_fault_unlocked_timeout","hmm_range_fault","hmm_do_fault","hmm_range_fault_locked","hmm_record_fault","dmirror_range_fault_unlocked","dmirror_fault_unlocked","dmirror_read_unlocked"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"b9d06a23-bd20-413d-8027-e6bf653d3955","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-16 00:11:30 +0000 UTC FinishedAt: 2026-07-16 01:12:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzp6pw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hmm_range_fault_unlocked_timeout","hmm_range_fault","hmm_do_fault","hmm_range_fault_locked","hmm_record_fault","dmirror_range_fault_unlocked","dmirror_fault_unlocked","dmirror_read_unlocked"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"b9d06a23-bd20-413d-8027-e6bf653d3955","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-16 00:11:30 +0000 UTC FinishedAt: 2026-07-16 01:12:03 +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:*e45072d5-306e-4965-889c-03b024d7ef7d,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-workflowzp6pw/series-workflowzp6pw-convert-artifact-2942179549/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": "c0440b13-8cf1-4e53-b8df-b69fcf3f7372", "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-workflowzp6pw/series-workflowzp6pw-build-action-3152079891/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzp6pw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hmm_range_fault_unlocked_timeout","hmm_range_fault","hmm_do_fault","hmm_range_fault_locked","hmm_record_fault","dmirror_range_fault_unlocked","dmirror_fault_unlocked","dmirror_read_unlocked"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"b9d06a23-bd20-413d-8027-e6bf653d3955","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-16 00:11:30 +0000 UTC FinishedAt: 2026-07-16 01:11:53 +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:*e45072d5-306e-4965-889c-03b024d7ef7d,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-workflowzp6pw/series-workflowzp6pw-convert-artifact-2942179549/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": "c0440b13-8cf1-4e53-b8df-b69fcf3f7372", "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-workflowzp6pw/series-workflowzp6pw-build-action-3152079891/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzp6pw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hmm_range_fault_unlocked_timeout","hmm_range_fault","hmm_do_fault","hmm_range_fault_locked","hmm_record_fault","dmirror_range_fault_unlocked","dmirror_fault_unlocked","dmirror_read_unlocked"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"b9d06a23-bd20-413d-8027-e6bf653d3955","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-16 01:12:03 +0000 UTC FinishedAt: 2026-07-16 01:12:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzp6pw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hmm_range_fault_unlocked_timeout","hmm_range_fault","hmm_do_fault","hmm_range_fault_locked","hmm_record_fault","dmirror_range_fault_unlocked","dmirror_fault_unlocked","dmirror_read_unlocked"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"b9d06a23-bd20-413d-8027-e6bf653d3955","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-16 01:12:03 +0000 UTC FinishedAt: 2026-07-16 01:12:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzp6pw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hmm_range_fault_unlocked_timeout","hmm_range_fault","hmm_do_fault","hmm_range_fault_locked","hmm_record_fault","dmirror_range_fault_unlocked","dmirror_fault_unlocked","dmirror_read_unlocked"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"b9d06a23-bd20-413d-8027-e6bf653d3955","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-16 01:12:03 +0000 UTC FinishedAt: 2026-07-16 01:12:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzp6pw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hmm_range_fault_unlocked_timeout","hmm_range_fault","hmm_do_fault","hmm_range_fault_locked","hmm_record_fault","dmirror_range_fault_unlocked","dmirror_fault_unlocked","dmirror_read_unlocked"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"b9d06a23-bd20-413d-8027-e6bf653d3955","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-16 01:12:03 +0000 UTC FinishedAt: 2026-07-16 01:12:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"b9d06a23-bd20-413d-8027-e6bf653d3955","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzp6pw/series-workflowzp6pw-convert-artifact-3425899192/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzp6pw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hmm_range_fault_unlocked_timeout","hmm_range_fault","hmm_do_fault","hmm_range_fault_locked","hmm_record_fault","dmirror_range_fault_unlocked","dmirror_fault_unlocked","dmirror_read_unlocked"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"b9d06a23-bd20-413d-8027-e6bf653d3955","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-16 01:12:24 +0000 UTC FinishedAt: 2026-07-16 01:14:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzp6pw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hmm_range_fault_unlocked_timeout","hmm_range_fault","hmm_do_fault","hmm_range_fault_locked","hmm_record_fault","dmirror_range_fault_unlocked","dmirror_fault_unlocked","dmirror_read_unlocked"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"b9d06a23-bd20-413d-8027-e6bf653d3955","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-16 01:12:24 +0000 UTC FinishedAt: 2026-07-16 01:14:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c0440b13-8cf1-4e53-b8df-b69fcf3f7372,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-workflowzp6pw/series-workflowzp6pw-build-action-3152079891/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-workflowzp6pw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hmm_range_fault_unlocked_timeout","hmm_range_fault","hmm_do_fault","hmm_range_fault_locked","hmm_record_fault","dmirror_range_fault_unlocked","dmirror_fault_unlocked","dmirror_read_unlocked"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"b9d06a23-bd20-413d-8027-e6bf653d3955","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-16 01:14:57 +0000 UTC FinishedAt: 2026-07-16 01:14:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzp6pw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hmm_range_fault_unlocked_timeout","hmm_range_fault","hmm_do_fault","hmm_range_fault_locked","hmm_record_fault","dmirror_range_fault_unlocked","dmirror_fault_unlocked","dmirror_read_unlocked"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"b9d06a23-bd20-413d-8027-e6bf653d3955","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-16 01:14:57 +0000 UTC FinishedAt: 2026-07-16 01:14:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzp6pw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hmm_range_fault_unlocked_timeout","hmm_range_fault","hmm_do_fault","hmm_range_fault_locked","hmm_record_fault","dmirror_range_fault_unlocked","dmirror_fault_unlocked","dmirror_read_unlocked"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"b9d06a23-bd20-413d-8027-e6bf653d3955","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-16 01:14:57 +0000 UTC FinishedAt: 2026-07-16 01:53:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzp6pw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hmm_range_fault_unlocked_timeout","hmm_range_fault","hmm_do_fault","hmm_range_fault_locked","hmm_record_fault","dmirror_range_fault_unlocked","dmirror_fault_unlocked","dmirror_read_unlocked"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"b9d06a23-bd20-413d-8027-e6bf653d3955","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-16 01:14:57 +0000 UTC FinishedAt: 2026-07-16 01:53:13 +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:*e45072d5-306e-4965-889c-03b024d7ef7d,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-workflowzp6pw/series-workflowzp6pw-convert-artifact-3425899192/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": "4f0f5842-33bc-4c84-a4f9-4247c2d5eda2", "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-workflowzp6pw/series-workflowzp6pw-build-action-2051484580/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzp6pw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hmm_range_fault_unlocked_timeout","hmm_range_fault","hmm_do_fault","hmm_range_fault_locked","hmm_record_fault","dmirror_range_fault_unlocked","dmirror_fault_unlocked","dmirror_read_unlocked"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"b9d06a23-bd20-413d-8027-e6bf653d3955","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-16 01:14:57 +0000 UTC FinishedAt: 2026-07-16 01:53:03 +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:*e45072d5-306e-4965-889c-03b024d7ef7d,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-workflowzp6pw/series-workflowzp6pw-convert-artifact-3425899192/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": "4f0f5842-33bc-4c84-a4f9-4247c2d5eda2", "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-workflowzp6pw/series-workflowzp6pw-build-action-2051484580/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzp6pw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hmm_range_fault_unlocked_timeout","hmm_range_fault","hmm_do_fault","hmm_range_fault_locked","hmm_record_fault","dmirror_range_fault_unlocked","dmirror_fault_unlocked","dmirror_read_unlocked"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"b9d06a23-bd20-413d-8027-e6bf653d3955","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-16 01:53:13 +0000 UTC FinishedAt: 2026-07-16 01:53:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzp6pw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hmm_range_fault_unlocked_timeout","hmm_range_fault","hmm_do_fault","hmm_range_fault_locked","hmm_record_fault","dmirror_range_fault_unlocked","dmirror_fault_unlocked","dmirror_read_unlocked"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"b9d06a23-bd20-413d-8027-e6bf653d3955","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-16 01:53:13 +0000 UTC FinishedAt: 2026-07-16 01:53:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzp6pw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hmm_range_fault_unlocked_timeout","hmm_range_fault","hmm_do_fault","hmm_range_fault_locked","hmm_record_fault","dmirror_range_fault_unlocked","dmirror_fault_unlocked","dmirror_read_unlocked"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"b9d06a23-bd20-413d-8027-e6bf653d3955","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-16 01:53:13 +0000 UTC FinishedAt: 2026-07-16 01:55:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzp6pw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hmm_range_fault_unlocked_timeout","hmm_range_fault","hmm_do_fault","hmm_range_fault_locked","hmm_record_fault","dmirror_range_fault_unlocked","dmirror_fault_unlocked","dmirror_read_unlocked"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"b9d06a23-bd20-413d-8027-e6bf653d3955","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-16 01:53:13 +0000 UTC FinishedAt: 2026-07-16 01:55:07 +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:*4f0f5842-33bc-4c84-a4f9-4247c2d5eda2,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-workflowzp6pw/series-workflowzp6pw-build-action-2051484580/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-workflowzp6pw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hmm_range_fault_unlocked_timeout","hmm_range_fault","hmm_do_fault","hmm_range_fault_locked","hmm_record_fault","dmirror_range_fault_unlocked","dmirror_fault_unlocked","dmirror_read_unlocked"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"b9d06a23-bd20-413d-8027-e6bf653d3955","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-16 01:55:16 +0000 UTC FinishedAt: 2026-07-16 04:59:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzp6pw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hmm_range_fault_unlocked_timeout","hmm_range_fault","hmm_do_fault","hmm_range_fault_locked","hmm_record_fault","dmirror_range_fault_unlocked","dmirror_fault_unlocked","dmirror_read_unlocked"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"b9d06a23-bd20-413d-8027-e6bf653d3955","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-16 01:55:16 +0000 UTC FinishedAt: 2026-07-16 04:59:20 +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":["hmm_range_fault_unlocked_timeout","hmm_range_fault","hmm_do_fault","hmm_range_fault_locked","hmm_record_fault","dmirror_range_fault_unlocked","dmirror_fault_unlocked","dmirror_read_unlocked"],"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:*c0440b13-8cf1-4e53-b8df-b69fcf3f7372,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4f0f5842-33bc-4c84-a4f9-4247c2d5eda2,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-workflowzp6pw/series-workflowzp6pw-build-action-3152079891/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-workflowzp6pw/series-workflowzp6pw-build-action-2051484580/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzp6pw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hmm_range_fault_unlocked_timeout","hmm_range_fault","hmm_do_fault","hmm_range_fault_locked","hmm_record_fault","dmirror_range_fault_unlocked","dmirror_fault_unlocked","dmirror_read_unlocked"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"b9d06a23-bd20-413d-8027-e6bf653d3955","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-16 01:55:16 +0000 UTC FinishedAt: 2026-07-16 01:55:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzp6pw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hmm_range_fault_unlocked_timeout","hmm_range_fault","hmm_do_fault","hmm_range_fault_locked","hmm_record_fault","dmirror_range_fault_unlocked","dmirror_fault_unlocked","dmirror_read_unlocked"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"b9d06a23-bd20-413d-8027-e6bf653d3955","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-16 01:55:16 +0000 UTC FinishedAt: 2026-07-16 01:55:21 +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":["hmm_range_fault_unlocked_timeout","hmm_range_fault","hmm_do_fault","hmm_range_fault_locked","hmm_record_fault","dmirror_range_fault_unlocked","dmirror_fault_unlocked","dmirror_read_unlocked"],"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-workflowzp6pw/series-workflowzp6pw-convert-artifact-3953469457/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzp6pw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hmm_range_fault_unlocked_timeout","hmm_range_fault","hmm_do_fault","hmm_range_fault_locked","hmm_record_fault","dmirror_range_fault_unlocked","dmirror_fault_unlocked","dmirror_read_unlocked"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"b9d06a23-bd20-413d-8027-e6bf653d3955","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-16 01:55:16 +0000 UTC FinishedAt: 2026-07-16 01:55:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzp6pw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hmm_range_fault_unlocked_timeout","hmm_range_fault","hmm_do_fault","hmm_range_fault_locked","hmm_record_fault","dmirror_range_fault_unlocked","dmirror_fault_unlocked","dmirror_read_unlocked"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"b9d06a23-bd20-413d-8027-e6bf653d3955","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-16 01:55:16 +0000 UTC FinishedAt: 2026-07-16 01:55:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzp6pw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hmm_range_fault_unlocked_timeout","hmm_range_fault","hmm_do_fault","hmm_range_fault_locked","hmm_record_fault","dmirror_range_fault_unlocked","dmirror_fault_unlocked","dmirror_read_unlocked"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"b9d06a23-bd20-413d-8027-e6bf653d3955","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-16 01:55:16 +0000 UTC FinishedAt: 2026-07-16 01:55:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzp6pw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hmm_range_fault_unlocked_timeout","hmm_range_fault","hmm_do_fault","hmm_range_fault_locked","hmm_record_fault","dmirror_range_fault_unlocked","dmirror_fault_unlocked","dmirror_read_unlocked"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"b9d06a23-bd20-413d-8027-e6bf653d3955","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-16 01:55:26 +0000 UTC FinishedAt: 2026-07-16 04:59:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzp6pw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hmm_range_fault_unlocked_timeout","hmm_range_fault","hmm_do_fault","hmm_range_fault_locked","hmm_record_fault","dmirror_range_fault_unlocked","dmirror_fault_unlocked","dmirror_read_unlocked"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8db84a07071480e0886b12f189c513b93eb65c0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DRM_ACCEL_AMDXDNA","DRM_GPUSVM","DRM_NOUVEAU_SVM","MSHV_ROOT","INFINIBAND_ON_DEMAND_PAGING"],"series_id":"b9d06a23-bd20-413d-8027-e6bf653d3955","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-16 01:55:26 +0000 UTC FinishedAt: 2026-07-16 04:59:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c0440b13-8cf1-4e53-b8df-b69fcf3f7372,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4f0f5842-33bc-4c84-a4f9-4247c2d5eda2,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-workflowzp6pw/series-workflowzp6pw-build-action-3152079891/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-workflowzp6pw/series-workflowzp6pw-build-action-2051484580/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-workflowzp6pw/series-workflowzp6pw-convert-artifact-3953469457/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,}