Name: series-workflow5c2q5 Phase: Succeeded StartedAt: 2026-08-04 23:52:38 +0000 UTC FinishedAt: 2026-08-05 04:28:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5c2q5[0] Phase: Succeeded StartedAt: 2026-08-04 23:52:38 +0000 UTC FinishedAt: 2026-08-05 00:39:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5c2q5[0].run-triage Phase: Succeeded StartedAt: 2026-08-04 23:52:38 +0000 UTC FinishedAt: 2026-08-05 00:39:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-x86", "tree_url": "https://github.com/kvm-x86/linux.git", "commit_hash": "2dfab80a305700a45bd947350dae253ba4e30c41", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-x86", "tree_url": "https://github.com/kvm-x86/linux.git", "commit_hash": "2dfab80a305700a45bd947350dae253ba4e30c41", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD" ], "series_id": "6c89dfdc-3f3c-4a5e-bcfd-9ea6b3d59495" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_synchronize_tsc", "kvm_guest_time_update", "kvm_get_wall_clock_epoch", "kvm_compute_l1_tsc_offset", "kvm_arch_vcpu_postcreate" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAwOjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9zeW5jaHJvbml6ZV90c2MmIzM0OywKICAgICYjMzQ7a3ZtX2d1ZXN0X3RpbWVfdXBkYXRlJiMzNDssCiAgICAmIzM0O2t2bV9nZXRfd2FsbF9jbG9ja19lcG9jaCYjMzQ7LAogICAgJiMzNDtrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0JiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBLVk0geDg2IFRTQyAoVGltZSBTdGFtcCBDb3VudGVyKSBoYW5kbGluZywgaW5jbHVkaW5nIFRTQyBzY2FsaW5nLCBtYXN0ZXIgY2xvY2sgdXBkYXRlcywgYW5kIHdhbGwgY2xvY2sgZXBvY2ggY2FsY3VsYXRpb25zLiBUaGlzIGlzIGNvcmUgaHlwZXJ2aXNvciBsb2dpYyByZWFjaGFibGUgZnJvbSBndWVzdCBWTXMgdmlhIE1TUiB3cml0ZXMsIENQVUlELCBhbmQgS1ZNIGlvY3Rscy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBoYW5kbGluZyBUU0Mgc3luY2hyb25pemF0aW9uIGFuZCBndWVzdCB0aW1lIHVwZGF0ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDA6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyNjI0NDQ0YzUyMGI4NDczM2U5MmY2NWVkZTI2ZDBmZmI1YjUyZjg4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgNSAwMDozOTowMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggMjgzODQ3NjE5ZmY4OC4uMjg3OGE1MTgxY2Q5YiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC04NjQsNyAmIzQzOzg2NCw3IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcbiBcdGdwYV90IHRpbWU7XG4gXHRzOCAgcHZjbG9ja190c2Nfc2hpZnQ7XG4gXHR1MzIgcHZjbG9ja190c2NfbXVsO1xuLVx0dW5zaWduZWQgaW50IGh3X3RzY19raHo7XG4mIzQzO1x0dTY0IGh3X3RzY19oejtcbiBcdHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlIHB2X3RpbWU7XG4gXHQvKiBzZXQgZ3Vlc3Qgc3RvcHBlZCBmbGFnIGluIHB2Y2xvY2sgZmxhZ3MgZmllbGQgKi9cbiBcdGJvb2wgcHZjbG9ja19zZXRfZ3Vlc3Rfc3RvcHBlZF9yZXF1ZXN0O1xuQEAgLTEyMzYsNiAmIzQzOzEyMzYsNyBAQCBzdHJ1Y3Qga3ZtX2FyY2gge1xuIFx0dTY0IGxhc3RfdHNjX3dyaXRlO1xuIFx0dTMyIGxhc3RfdHNjX2toejtcbiBcdHU2NCBsYXN0X3RzY19vZmZzZXQ7XG4mIzQzO1x0dTY0IGxhc3RfdHNjX3NjYWxpbmdfcmF0aW87XG4gXHR1NjQgY3VyX3RzY19uc2VjO1xuIFx0dTY0IGN1cl90c2Nfd3JpdGU7XG4gXHR1NjQgY3VyX3RzY19vZmZzZXQ7XG5AQCAtMTI1MSw2ICYjNDM7MTI1Miw5IEBAIHN0cnVjdCBrdm1fYXJjaCB7XG4gXHR1NjQgbWFzdGVyX2tlcm5lbF9ucztcbiBcdHU2NCBtYXN0ZXJfY3ljbGVfbm93O1xuIFx0c3RydWN0IHJhdGVsaW1pdF9zdGF0ZSBrdm1jbG9ja191cGRhdGVfcnM7XG4mIzQzO1x0dTY0IG1hc3Rlcl90c2Nfc2NhbGluZ19yYXRpbztcbiYjNDM7XHRzOCAgbWFzdGVyX3RzY19zaGlmdDtcbiYjNDM7XHR1MzIgbWFzdGVyX3RzY19tdWw7XG4gXG4gI2lmZGVmIENPTkZJR19LVk1fSFlQRVJWXG4gXHRzdHJ1Y3Qga3ZtX2h2IGh5cGVydjtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vY3B1aWQuYyBiL2FyY2gveDg2L2t2bS9jcHVpZC5jXG5pbmRleCA5ZTljZjY1MzhhOTZlLi43MDQ5ZjVhNTU5N2I0IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL2NwdWlkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9jcHVpZC5jXG5AQCAtMTYsNiAmIzQzOzE2LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC92bWFsbG9jLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91YWNjZXNzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9zdGF0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdW5pdHMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS9wcm9jZXNzb3IuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS91c2VyLmhcdTAwM2VcbkBAIC0yMTQ2LDcgJiM0MzsyMTQ3LDcgQEAgYm9vbCBrdm1fY3B1aWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgKmVheCwgdTMyICplYngsXG4gXHRcdFx0XHQqZWN4ID0gdmNwdS1cdTAwM2VhcmNoLnB2Y2xvY2tfdHNjX211bDtcbiBcdFx0XHRcdCplZHggPSB2Y3B1LVx1MDAzZWFyY2gucHZjbG9ja190c2Nfc2hpZnQ7XG4gXHRcdFx0fSBlbHNlIGlmIChpbmRleCA9PSAyKSB7XG4tXHRcdFx0XHQqZWF4ID0gdmNwdS1cdTAwM2VhcmNoLmh3X3RzY19raHo7XG4mIzQzO1x0XHRcdFx0KmVheCA9IGRpdl91NjQodmNwdS1cdTAwM2VhcmNoLmh3X3RzY19oeiwgSFpfUEVSX0tIWik7XG4gXHRcdFx0fVxuIFx0XHR9XG4gXHR9IGVsc2Uge1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tc3JzLmMgYi9hcmNoL3g4Ni9rdm0vbXNycy5jXG5pbmRleCA2NmZhNzE0MGQ2NWQ5Li4yMmNlYjM5ZDQxZjY2IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL21zcnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL21zcnMuY1xuQEAgLTE2MzEsNyAmIzQzOzE2MzEsOCBAQCBpbnQga3ZtX3NldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcbiBcdFx0aWYgKG1zcl9pbmZvLVx1MDAzZWhvc3RfaW5pdGlhdGVkKSB7XG4gXHRcdFx0a3ZtX3N5bmNocm9uaXplX3RzYyh2Y3B1LCBcdTAwMjZkYXRhKTtcbiBcdFx0fSBlbHNlIGlmICghdmNwdS1cdTAwM2VhcmNoLmd1ZXN0X3RzY19wcm90ZWN0ZWQpIHtcbi1cdFx0XHR1NjQgYWRqID0ga3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldCh2Y3B1LCBkYXRhKSAtIHZjcHUtXHUwMDNlYXJjaC5sMV90c2Nfb2Zmc2V0O1xuJiM0MztcdFx0XHR1NjQgYWRqID0ga3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldCh2Y3B1LCByZHRzYygpLCBkYXRhKSAtXG4mIzQzO1x0XHRcdFx0ICB2Y3B1LVx1MDAzZWFyY2gubDFfdHNjX29mZnNldDtcbiBcdFx0XHRhZGp1c3RfdHNjX29mZnNldF9ndWVzdCh2Y3B1LCBhZGopO1xuIFx0XHRcdHZjcHUtXHUwMDNlYXJjaC5pYTMyX3RzY19hZGp1c3RfbXNyICYjNDM7PSBhZGo7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuaW5kZXggOWQ2MDdiOThiZDA2Ny4uMzA1N2NhNzA1MWRiMSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbkBAIC01NjAyLDcgJiM0Mzs1NjAyLDggQEAgc3RhdGljIF9faW5pdCBpbnQgc3ZtX2hhcmR3YXJlX3NldHVwKHZvaWQpXG4gXHRcdFx0XHQgICAgIFhGRUFUVVJFX01BU0tfQk5EQ1NSKTtcbiBcbiBcdGlmICh0c2Nfc2NhbGluZykge1xuLVx0XHRpZiAoIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9UU0NSQVRFTVNSKSkge1xuJiM0MztcdFx0aWYgKCFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfVFNDUkFURU1TUikgfHxcbiYjNDM7XHRcdCAgICAhYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQykpIHtcbiBcdFx0XHR0c2Nfc2NhbGluZyA9IGZhbHNlO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdHByX2luZm8oXCYjMzQ7VFNDIHNjYWxpbmcgc3VwcG9ydGVkXFxuXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jIGIvYXJjaC94ODYva3ZtL3ZteC92bXguY1xuaW5kZXggZTNiZmU2YWNhMWEwZS4uOWFiZDJlZDNhZWFlMiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbkBAIC0yODQxLDYgJiM0MzsyODQxLDE2IEBAIHN0YXRpYyBpbnQgc2V0dXBfdm1jc19jb25maWcoc3RydWN0IHZtY3NfY29uZmlnICp2bWNzX2NvbmYsXG4gXHRpZiAoIWNwdV9oYXNfc2d4KCkpXG4gXHRcdF9jcHVfYmFzZWRfMm5kX2V4ZWNfY29udHJvbCBcdTAwMjY9IH5TRUNPTkRBUllfRVhFQ19FTkNMU19FWElUSU5HO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogS1ZNIGRvZXNuJiMzOTt0IHJlLWRlcml2ZSB0aGUgVFNDIHNjYWxpbmcgcmF0aW8gd2hlbiB0aGUgaG9zdCBUU0NcbiYjNDM7XHQgKiBmcmVxdWVuY3kgY2hhbmdlcywgc28gVFNDIHNjYWxpbmcgaXMgb25seSB1c2FibGUgd2l0aCBhIGNvbnN0YW50XG4mIzQzO1x0ICogVFNDLiAgQ2xlYXIgdGhlIGNvbnRyb2wgaGVyZSByYXRoZXIgdGhhbiBpbiB2bXhfaGFyZHdhcmVfc2V0dXAoKSBzb1xuJiM0MztcdCAqIHRoYXQgdGhlIHBlci1DUFUgY29uZmlncyByZWNvbXB1dGVkIGJ5IHZteF9jaGVja19wcm9jZXNzb3JfY29tcGF0KClcbiYjNDM7XHQgKiBzdGF5IGNvbnNpc3RlbnQgd2l0aCB0aGUgZ29sZGVuIHZtY3NfY29uZmlnLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQykpXG4mIzQzO1x0XHRfY3B1X2Jhc2VkXzJuZF9leGVjX2NvbnRyb2wgXHUwMDI2PSB+U0VDT05EQVJZX0VYRUNfVFNDX1NDQUxJTkc7XG4mIzQzO1xuIFx0aWYgKF9jcHVfYmFzZWRfZXhlY19jb250cm9sIFx1MDAyNiBDUFVfQkFTRURfQUNUSVZBVEVfVEVSVElBUllfQ09OVFJPTFMpXG4gXHRcdF9jcHVfYmFzZWRfM3JkX2V4ZWNfY29udHJvbCA9XG4gXHRcdFx0YWRqdXN0X3ZteF9jb250cm9sczY0KEtWTV9PUFRJT05BTF9WTVhfVEVSVElBUllfVk1fRVhFQ19DT05UUk9MLFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggZDk0YjU5MTQwYzQ1Mi4uY2JlNGZkMzQ1N2I0NCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5AQCAtNjEsNiAmIzQzOzYxLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1fZW5jcnlwdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3VzcGVuZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc21wLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdW5pdHMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9pcGkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9rdm0uaFx1MDAzZVxuQEAgLTg3Myw3ICYjNDM7ODc0LDYgQEAgc3RhdGljIGlubGluZSBib29sIGt2bV92Y3B1X2V4aXRfcmVxdWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHQgICAgICAga3ZtX3JlcXVlc3RfcGVuZGluZyh2Y3B1KSB8fCB4ZmVyX3RvX2d1ZXN0X21vZGVfd29ya19wZW5kaW5nKCk7XG4gfVxuIFxuLSNpZmRlZiBDT05GSUdfWDg2XzY0XG4gc3RydWN0IHB2Y2xvY2tfY2xvY2sge1xuIFx0aW50IHZjbG9ja19tb2RlO1xuIFx0dTY0IGN5Y2xlX2xhc3Q7XG5AQCAtOTMxLDEzICYjNDM7OTMxLDYgQEAgc3RhdGljIHM2NCBnZXRfa3ZtY2xvY2tfYmFzZV9ucyh2b2lkKVxuIFx0LyogQ291bnQgdXAgZnJvbSBib290IHRpbWUsIGJ1dCB3aXRoIHRoZSBmcmVxdWVuY3kgb2YgdGhlIHJhdyBjbG9jay4gICovXG4gXHRyZXR1cm4ga3RpbWVfdG9fbnMoa3RpbWVfYWRkKGt0aW1lX2dldF9yYXcoKSwgcHZjbG9ja19ndG9kX2RhdGEub2Zmc19ib290KSk7XG4gfVxuLSNlbHNlXG4tc3RhdGljIHM2NCBnZXRfa3ZtY2xvY2tfYmFzZV9ucyh2b2lkKVxuLXtcbi1cdC8qIE1hc3RlciBjbG9jayBub3QgdXNlZCwgc28gd2UgY2FuIGp1c3QgdXNlIENMT0NLX0JPT1RUSU1FLiAgKi9cbi1cdHJldHVybiBrdGltZV9nZXRfYm9vdHRpbWVfbnMoKTtcbi19XG4tI2VuZGlmXG4gXG4gc3RhdGljIHVpbnQzMl90IGRpdl9mcmFjKHVpbnQzMl90IGRpdmlkZW5kLCB1aW50MzJfdCBkaXZpc29yKVxuIHtcbkBAIC05NDUsMzIgJiM0Mzs5MzgsNTcgQEAgc3RhdGljIHVpbnQzMl90IGRpdl9mcmFjKHVpbnQzMl90IGRpdmlkZW5kLCB1aW50MzJfdCBkaXZpc29yKVxuIFx0cmV0dXJuIGRpdmlkZW5kO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBrdm1fZ2V0X3RpbWVfc2NhbGUodWludDY0X3Qgc2NhbGVkX2h6LCB1aW50NjRfdCBiYXNlX2h6LFxuJiM0MztzdGF0aWMgdm9pZCBrdm1fZ2V0X3RpbWVfc2NhbGUodTY0IHNjYWxlZF9oeiwgdTY0IGJhc2VfaHosXG4gXHRcdFx0ICAgICAgIHM4ICpwc2hpZnQsIHUzMiAqcG11bHRpcGxpZXIpXG4ge1xuLVx0dWludDY0X3Qgc2NhbGVkNjQ7XG4tXHRpbnQzMl90ICBzaGlmdCA9IDA7XG4tXHR1aW50NjRfdCB0cHM2NDtcbi1cdHVpbnQzMl90IHRwczMyO1xuJiM0MztcdHU2NCBzY2FsZWRfaHpfdTY0ID0gc2NhbGVkX2h6O1xuJiM0MztcdHMzMiBzaGlmdCA9IDA7XG4mIzQzO1x0dTY0IGJhc2VfaHpfdTY0O1xuJiM0MztcdHUzMiBiYXNlMzI7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIGEgZml4ZWQtcG9pbnQgbXVsdGlwbGllciBhbmQgc2hpZnQgc3VjaFxuJiM0MztcdCAqIHRoYXQ6XG4mIzQzO1x0ICogICB0aW1lX25zID0gKHRzY19jeWNsZXMgXHUwMDNjXHUwMDNjIHNoaWZ0KSAqIG11bHRpcGxpZXIgXHUwMDNlXHUwMDNlIDMyXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBXaGVyZSB0c2NfY3ljbGVzIHRpY2sgYXQgYmFzZV9oeiwgYW5kIHRpbWVfbnMgc2hvdWxkIGNvdW50IGF0XG4mIzQzO1x0ICogc2NhbGVkX2h6ICh0eXBpY2FsbHkgTlNFQ19QRVJfU0VDIGZvciBhIFRTQ+KGkm5hbm9zZWNvbmRzIGNvbnZlcnNpb24pLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogVGhlIG11bHRpcGxpZXIgaXM6IChzY2FsZWRfaHogXHUwMDNjXHUwMDNjIDMyKSAvIGJhc2VfaHosIGFkanVzdGVkIGJ5IHNoaWZ0XG4mIzQzO1x0ICogdG8ga2VlcCBldmVyeXRoaW5nIGluIHJhbmdlLlxuJiM0MztcdCAqL1xuIFxuLVx0dHBzNjQgPSBiYXNlX2h6O1xuLVx0c2NhbGVkNjQgPSBzY2FsZWRfaHo7XG4tXHR3aGlsZSAodHBzNjQgXHUwMDNlIHNjYWxlZDY0KjIgfHwgdHBzNjQgXHUwMDI2IDB4ZmZmZmZmZmYwMDAwMDAwMFVMTCkge1xuLVx0XHR0cHM2NCBcdTAwM2VcdTAwM2U9IDE7XG4mIzQzO1x0YmFzZV9oel91NjQgPSBiYXNlX2h6O1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFN0YXJ0IGJ5IHNoaWZ0aW5nIGJhc2VfaHogcmlnaHQgdW50aWwgaXQgZml0cyBpbiAzMiBiaXRzLCBhbmRcbiYjNDM7XHQgKiBpcyBsb3dlciB0aGFuIGRvdWJsZSB0aGUgdGFyZ2V0IHJhdGUuIFRoaXMgaW50cm9kdWNlcyBhIG5lZ2F0aXZlXG4mIzQzO1x0ICogc2hpZnQgdmFsdWUgd2hpY2ggd291bGQgcmVzdWx0IGluIHB2Y2xvY2tfc2NhbGVfZGVsdGEoKSBzaGlmdGluZ1xuJiM0MztcdCAqIHRoZSBhY3R1YWwgdGljayBjb3VudCByaWdodCBiZWZvcmUgcGVyZm9ybWluZyB0aGUgbXVsdGlwbGljYXRpb24uXG4mIzQzO1x0ICovXG4mIzQzO1x0d2hpbGUgKGJhc2VfaHpfdTY0IFx1MDAzZSBzY2FsZWRfaHpfdTY0ICogMiB8fCBiYXNlX2h6X3U2NCBcdTAwM2VcdTAwM2UgMzIpIHtcbiYjNDM7XHRcdGJhc2VfaHpfdTY0IFx1MDAzZVx1MDAzZT0gMTtcbiBcdFx0c2hpZnQtLTtcbiBcdH1cbiBcbi1cdHRwczMyID0gKHVpbnQzMl90KXRwczY0O1xuLVx0d2hpbGUgKHRwczMyIFx1MDAzYz0gc2NhbGVkNjQgfHwgc2NhbGVkNjQgXHUwMDI2IDB4ZmZmZmZmZmYwMDAwMDAwMFVMTCkge1xuLVx0XHRpZiAoc2NhbGVkNjQgXHUwMDI2IDB4ZmZmZmZmZmYwMDAwMDAwMFVMTCB8fCB0cHMzMiBcdTAwMjYgMHg4MDAwMDAwMClcbi1cdFx0XHRzY2FsZWQ2NCBcdTAwM2VcdTAwM2U9IDE7XG4mIzQzO1x0LyogTm93IHRoZSBzaGlmdGVkIGJhc2VfaHogZml0cyBpbiAzMiBiaXRzLiAqL1xuJiM0MztcdGJhc2UzMiA9ICh1MzIpYmFzZV9oel91NjQ7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTmV4dCwgc2hpZnQgc2NhbGVkX2h6IHJpZ2h0IHVudGlsIGl0IGZpdHMgaW4gMzIgYml0cywgYW5kIGVuc3VyZVxuJiM0MztcdCAqIHRoYXQgdGhlIHNoaWZ0ZWQgYmFzZV9oeiBpcyBzdHJpY3RseSBsYXJnZXIgKHNvIHRoYXQgdGhlIHJlc3VsdCBvZiB0aGVcbiYjNDM7XHQgKiBmaW5hbCBkaXZpc2lvbiBhbHNvIGZpdHMgaW4gMzIgYml0cykuXG4mIzQzO1x0ICovXG4mIzQzO1x0d2hpbGUgKGJhc2UzMiBcdTAwM2M9IHNjYWxlZF9oel91NjQgfHwgc2NhbGVkX2h6X3U2NCBcdTAwM2VcdTAwM2UgMzIpIHtcbiYjNDM7XHRcdGlmIChzY2FsZWRfaHpfdTY0IFx1MDAzZVx1MDAzZSAzMiB8fCBiYXNlMzIgXHUwMDI2IEJJVCgzMSkpXG4mIzQzO1x0XHRcdHNjYWxlZF9oel91NjQgXHUwMDNlXHUwMDNlPSAxO1xuIFx0XHRlbHNlXG4tXHRcdFx0dHBzMzIgXHUwMDNjXHUwMDNjPSAxO1xuJiM0MztcdFx0XHRiYXNlMzIgXHUwMDNjXHUwMDNjPSAxO1xuIFx0XHRzaGlmdCYjNDM7JiM0Mzs7XG4gXHR9XG4gXG4gXHQqcHNoaWZ0ID0gc2hpZnQ7XG4tXHQqcG11bHRpcGxpZXIgPSBkaXZfZnJhYyhzY2FsZWQ2NCwgdHBzMzIpO1xuJiM0MztcdCpwbXVsdGlwbGllciA9IGRpdl9mcmFjKHNjYWxlZF9oel91NjQsIGJhc2UzMik7XG4gfVxuIFxuICNpZmRlZiBDT05GSUdfWDg2XzY0XG5AQCAtMTA2MSwxMSAmIzQzOzEwNzksMTUgQEAgc3RhdGljIGludCBrdm1fc2V0X3RzY19raHooc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdXNlcl90c2Nfa2h6KVxuIFxuIHN0YXRpYyB1NjQgY29tcHV0ZV9ndWVzdF90c2Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzNjQga2VybmVsX25zKVxuIHtcbi1cdHU2NCB0c2MgPSBwdmNsb2NrX3NjYWxlX2RlbHRhKGtlcm5lbF9ucy12Y3B1LVx1MDAzZWFyY2gudGhpc190c2NfbnNlYyxcbi1cdFx0XHRcdCAgICAgIHZjcHUtXHUwMDNlYXJjaC52aXJ0dWFsX3RzY19tdWx0LFxuLVx0XHRcdFx0ICAgICAgdmNwdS1cdTAwM2VhcmNoLnZpcnR1YWxfdHNjX3NoaWZ0KTtcbi1cdHRzYyAmIzQzOz0gdmNwdS1cdTAwM2VhcmNoLnRoaXNfdHNjX3dyaXRlO1xuLVx0cmV0dXJuIHRzYztcbiYjNDM7XHRzNjQgZGVsdGFfbnMgPSBrZXJuZWxfbnMgLSB2Y3B1LVx1MDAzZWFyY2gudGhpc190c2NfbnNlYztcbiYjNDM7XHR1NjQgdHNjO1xuJiM0MztcbiYjNDM7XHQvKiBIYW5kbGUgbmVnYXRpdmUgZGVsdGFzIGdyYWNlZnVsbHkgKG1hc3RlciBjbG9jayByZWYgbWF5IGJlIGVhcmxpZXIpICovXG4mIzQzO1x0dHNjID0gcHZjbG9ja19zY2FsZV9kZWx0YShhYnMoZGVsdGFfbnMpLFxuJiM0MztcdFx0XHRcdCAgdmNwdS1cdTAwM2VhcmNoLnZpcnR1YWxfdHNjX211bHQsXG4mIzQzO1x0XHRcdFx0ICB2Y3B1LVx1MDAzZWFyY2gudmlydHVhbF90c2Nfc2hpZnQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdmNwdS1cdTAwM2VhcmNoLnRoaXNfdHNjX3dyaXRlICYjNDM7IChkZWx0YV9ucyBcdTAwM2U9IDAgPyB0c2MgOiAtdHNjKTtcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19YODZfNjRcbkBAIC0xMTMxLDExICYjNDM7MTE1MywxMiBAQCB1NjQga3ZtX3NjYWxlX3RzYyh1NjQgdHNjLCB1NjQgcmF0aW8pXG4gXHRyZXR1cm4gX3RzYztcbiB9XG4gXG4tdTY0IGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdGFyZ2V0X3RzYylcbiYjNDM7dTY0IGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgaG9zdF90c2MsXG4mIzQzO1x0XHRcdCAgICAgIHU2NCB0YXJnZXRfdHNjKVxuIHtcbiBcdHU2NCB0c2M7XG4gXG4tXHR0c2MgPSBrdm1fc2NhbGVfdHNjKHJkdHNjKCksIHZjcHUtXHUwMDNlYXJjaC5sMV90c2Nfc2NhbGluZ19yYXRpbyk7XG4mIzQzO1x0dHNjID0ga3ZtX3NjYWxlX3RzYyhob3N0X3RzYywgdmNwdS1cdTAwM2VhcmNoLmwxX3RzY19zY2FsaW5nX3JhdGlvKTtcbiBcbiBcdHJldHVybiB0YXJnZXRfdHNjIC0gdHNjO1xuIH1cbkBAIC0xMjU0LDYgJiM0MzsxMjc3LDcgQEAgc3RhdGljIHZvaWQgX19rdm1fc3luY2hyb25pemVfdHNjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG9mZnNldCwgdTY0IHRzYyxcbiBcdGt2bS1cdTAwM2VhcmNoLmxhc3RfdHNjX3dyaXRlID0gdHNjO1xuIFx0a3ZtLVx1MDAzZWFyY2gubGFzdF90c2Nfa2h6ID0gdmNwdS1cdTAwM2VhcmNoLnZpcnR1YWxfdHNjX2toejtcbiBcdGt2bS1cdTAwM2VhcmNoLmxhc3RfdHNjX29mZnNldCA9IG9mZnNldDtcbiYjNDM7XHRrdm0tXHUwMDNlYXJjaC5sYXN0X3RzY19zY2FsaW5nX3JhdGlvID0gdmNwdS1cdTAwM2VhcmNoLmwxX3RzY19zY2FsaW5nX3JhdGlvO1xuIFxuIFx0dmNwdS1cdTAwM2VhcmNoLmxhc3RfZ3Vlc3RfdHNjID0gdHNjO1xuIFxuQEAgLTEyOTYsNyAmIzQzOzEzMjAsNyBAQCB2b2lkIGt2bV9zeW5jaHJvbml6ZV90c2Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKnVzZXJfdmFsdWUpXG4gXHRib29sIHN5bmNocm9uaXppbmcgPSBmYWxzZTtcbiBcbiBcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZrdm0tXHUwMDNlYXJjaC50c2Nfd3JpdGVfbG9jaywgZmxhZ3MpO1xuLVx0b2Zmc2V0ID0ga3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldCh2Y3B1LCBkYXRhKTtcbiYjNDM7XHRvZmZzZXQgPSBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0KHZjcHUsIHJkdHNjKCksIGRhdGEpO1xuIFx0bnMgPSBnZXRfa3ZtY2xvY2tfYmFzZV9ucygpO1xuIFx0ZWxhcHNlZCA9IG5zIC0ga3ZtLVx1MDAzZWFyY2gubGFzdF90c2NfbnNlYztcbiBcbkBAIC0xMzQ1LDcgJiM0MzsxMzY5LDcgQEAgdm9pZCBrdm1fc3luY2hyb25pemVfdHNjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0ICp1c2VyX3ZhbHVlKVxuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdHU2NCBkZWx0YSA9IG5zZWNfdG9fY3ljbGVzKHZjcHUsIGVsYXBzZWQpO1xuIFx0XHRcdGRhdGEgJiM0Mzs9IGRlbHRhO1xuLVx0XHRcdG9mZnNldCA9IGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXQodmNwdSwgZGF0YSk7XG4mIzQzO1x0XHRcdG9mZnNldCA9IGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXQodmNwdSwgcmR0c2MoKSwgZGF0YSk7XG4gXHRcdH1cbiBcdFx0bWF0Y2hlZCA9IHRydWU7XG4gXHR9XG5AQCAtMTU2Niw2ICYjNDM7MTU5MCw4IEBAIHN0YXRpYyBib29sIGt2bV9nZXRfd2FsbHRpbWVfYW5kX2Nsb2NrcmVhZChzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXG4gICpcbiAgKi9cbiBcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X2NwdV90c2Nfa2h6KHZvaWQpO1xuJiM0MztcbiBzdGF0aWMgdm9pZCBwdmNsb2NrX3VwZGF0ZV92bV9ndG9kX2NvcHkoc3RydWN0IGt2bSAqa3ZtKVxuIHtcbiAjaWZkZWYgQ09ORklHX1g4Nl82NFxuQEAgLTE1ODksOSAmIzQzOzE2MTUsMzAgQEAgc3RhdGljIHZvaWQgcHZjbG9ja191cGRhdGVfdm1fZ3RvZF9jb3B5KHN0cnVjdCBrdm0gKmt2bSlcbiBcdFx0XHRcdFx1MDAyNlx1MDAyNiAha2EtXHUwMDNlYmFja3dhcmRzX3RzY19vYnNlcnZlZFxuIFx0XHRcdFx0XHUwMDI2XHUwMDI2ICFrYS1cdTAwM2Vib290X3ZjcHVfcnVuc19vbGRfa3ZtY2xvY2s7XG4gXG4tXHRpZiAoa2EtXHUwMDNldXNlX21hc3Rlcl9jbG9jaylcbiYjNDM7XHRpZiAoa2EtXHUwMDNldXNlX21hc3Rlcl9jbG9jaykge1xuJiM0MztcdFx0dTY0IHRzY19oejtcbiYjNDM7XG4gXHRcdGF0b21pY19zZXQoXHUwMDI2a3ZtX2d1ZXN0X2hhc19tYXN0ZXJfY2xvY2ssIDEpO1xuIFxuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIENvcHkgdGhlIHNjYWxpbmcgcmF0aW8gYW5kIHByZWNvbXB1dGUgdGhlIG11bC9zaGlmdCBmb3JcbiYjNDM7XHRcdCAqIGNvbnZlcnRpbmcgZ3Vlc3QgVFNDIHRvIG5hbm9zZWNvbmRzLiBUaGVzZSBhcmUgdXNlZCBieVxuJiM0MztcdFx0ICogZ2V0X2t2bWNsb2NrKCkgdG8gY29tcHV0ZSBrdm1jbG9jayBmcm9tIHRoZSBob3N0IFRTQ1xuJiM0MztcdFx0ICogd2l0aG91dCBuZWVkaW5nIGEgdkNQVSByZWZlcmVuY2UuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGthLVx1MDAzZW1hc3Rlcl90c2Nfc2NhbGluZ19yYXRpbyA9IGthLVx1MDAzZWxhc3RfdHNjX3NjYWxpbmdfcmF0aW87XG4mIzQzO1x0XHR0c2NfaHogPSAodTY0KWdldF9jcHVfdHNjX2toeigpICogSFpfUEVSX0tIWjtcbiYjNDM7XHRcdGlmICh0c2NfaHogXHUwMDI2XHUwMDI2IGt2bV9jYXBzLmhhc190c2NfY29udHJvbClcbiYjNDM7XHRcdFx0dHNjX2h6ID0ga3ZtX3NjYWxlX3RzYyh0c2NfaHosXG4mIzQzO1x0XHRcdFx0XHQgICAgICAga2EtXHUwMDNlbWFzdGVyX3RzY19zY2FsaW5nX3JhdGlvKTtcbiYjNDM7XHRcdGlmICh0c2NfaHopXG4mIzQzO1x0XHRcdGt2bV9nZXRfdGltZV9zY2FsZShOU0VDX1BFUl9TRUMsIHRzY19oeixcbiYjNDM7XHRcdFx0XHRcdCAgIFx1MDAyNmthLVx1MDAzZW1hc3Rlcl90c2Nfc2hpZnQsXG4mIzQzO1x0XHRcdFx0XHQgICBcdTAwMjZrYS1cdTAwM2VtYXN0ZXJfdHNjX211bCk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdGthLVx1MDAzZXVzZV9tYXN0ZXJfY2xvY2sgPSBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0dmNsb2NrX21vZGUgPSBwdmNsb2NrX2d0b2RfZGF0YS5jbG9jay52Y2xvY2tfbW9kZTtcbiBcdHRyYWNlX2t2bV91cGRhdGVfbWFzdGVyX2Nsb2NrKGthLVx1MDAzZXVzZV9tYXN0ZXJfY2xvY2ssIHZjbG9ja19tb2RlLFxuIFx0XHRcdFx0XHR2Y3B1c19tYXRjaGVkKTtcbkBAIC0xNjU4LDM5ICYjNDM7MTcwNSw0OSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfY3B1X3RzY19raHoodm9pZClcbiB9XG4gXG4gLyogQ2FsbGVkIHdpdGhpbiByZWFkX3NlcWNvdW50X2JlZ2luL3JldHJ5IGZvciBrdm0tXHUwMDNlcHZjbG9ja19zYy4gICovXG4tc3RhdGljIHZvaWQgX19nZXRfa3ZtY2xvY2soc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2Nsb2NrX2RhdGEgKmRhdGEpXG4mIzQzO3N0YXRpYyBib29sIF9fZ2V0X2t2bWNsb2NrX21hc3Rlcl9jbG9jayhzdHJ1Y3Qga3ZtICprdm0sXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3Qga3ZtX2Nsb2NrX2RhdGEgKmRhdGEpXG4ge1xuJiM0MzsjaWZkZWYgQ09ORklHX1g4Nl82NFxuIFx0c3RydWN0IGt2bV9hcmNoICprYSA9IFx1MDAyNmt2bS1cdTAwM2VhcmNoO1xuIFx0c3RydWN0IHB2Y2xvY2tfdmNwdV90aW1lX2luZm8gaHZfY2xvY2s7XG4mIzQzO1x0c3RydWN0IHRpbWVzcGVjNjQgdHM7XG4gXG4tXHQvKiBib3RoIF9fdGhpc19jcHVfcmVhZCgpIGFuZCByZHRzYygpIHNob3VsZCBiZSBvbiB0aGUgc2FtZSBjcHUgKi9cbi1cdGdldF9jcHUoKTtcbiYjNDM7XHRpZiAoIWthLVx1MDAzZXVzZV9tYXN0ZXJfY2xvY2spXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRkYXRhLVx1MDAzZWZsYWdzID0gMDtcbi1cdGlmIChrYS1cdTAwM2V1c2VfbWFzdGVyX2Nsb2NrIFx1MDAyNlx1MDAyNlxuLVx0ICAgIChzdGF0aWNfY3B1X2hhcyhYODZfRkVBVFVSRV9DT05TVEFOVF9UU0MpIHx8IF9fdGhpc19jcHVfcmVhZChjcHVfdHNjX2toeikpKSB7XG4tI2lmZGVmIENPTkZJR19YODZfNjRcbi1cdFx0c3RydWN0IHRpbWVzcGVjNjQgdHM7XG4mIzQzO1x0aWYgKCFrdm1fZ2V0X3dhbGx0aW1lX2FuZF9jbG9ja3JlYWQoXHUwMDI2dHMsIFx1MDAyNmRhdGEtXHUwMDNlaG9zdF90c2MpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0XHRpZiAoa3ZtX2dldF93YWxsdGltZV9hbmRfY2xvY2tyZWFkKFx1MDAyNnRzLCBcdTAwMjZkYXRhLVx1MDAzZWhvc3RfdHNjKSkge1xuLVx0XHRcdGRhdGEtXHUwMDNlcmVhbHRpbWUgPSB0cy50dl9uc2VjICYjNDM7IE5TRUNfUEVSX1NFQyAqIHRzLnR2X3NlYztcbi1cdFx0XHRkYXRhLVx1MDAzZWZsYWdzIHw9IEtWTV9DTE9DS19SRUFMVElNRSB8IEtWTV9DTE9DS19IT1NUX1RTQztcbi1cdFx0fSBlbHNlXG4tI2VuZGlmXG4tXHRcdGRhdGEtXHUwMDNlaG9zdF90c2MgPSByZHRzYygpO1xuLVxuLVx0XHRkYXRhLVx1MDAzZWZsYWdzIHw9IEtWTV9DTE9DS19UU0NfU1RBQkxFO1xuLVx0XHRodl9jbG9jay50c2NfdGltZXN0YW1wID0ga2EtXHUwMDNlbWFzdGVyX2N5Y2xlX25vdztcbi1cdFx0aHZfY2xvY2suc3lzdGVtX3RpbWUgPSBrYS1cdTAwM2VtYXN0ZXJfa2VybmVsX25zICYjNDM7IGthLVx1MDAzZWt2bWNsb2NrX29mZnNldDtcbi1cdFx0a3ZtX2dldF90aW1lX3NjYWxlKE5TRUNfUEVSX1NFQywgZ2V0X2NwdV90c2Nfa2h6KCkgKiAxMDAwTEwsXG4tXHRcdFx0XHQgICBcdTAwMjZodl9jbG9jay50c2Nfc2hpZnQsXG4tXHRcdFx0XHQgICBcdTAwMjZodl9jbG9jay50c2NfdG9fc3lzdGVtX211bCk7XG4tXHRcdGRhdGEtXHUwMDNlY2xvY2sgPSBfX3B2Y2xvY2tfcmVhZF9jeWNsZXMoXHUwMDI2aHZfY2xvY2ssIGRhdGEtXHUwMDNlaG9zdF90c2MpO1xuJiM0MztcdGRhdGEtXHUwMDNlcmVhbHRpbWUgPSB0cy50dl9uc2VjICYjNDM7IE5TRUNfUEVSX1NFQyAqIHRzLnR2X3NlYztcbiYjNDM7XHRkYXRhLVx1MDAzZWZsYWdzIHw9IEtWTV9DTE9DS19SRUFMVElNRSB8IEtWTV9DTE9DS19IT1NUX1RTQyB8XG4mIzQzO1x0XHQgICAgICAgS1ZNX0NMT0NLX1RTQ19TVEFCTEU7XG4mIzQzO1xuJiM0MztcdGh2X2Nsb2NrLnRzY190aW1lc3RhbXAgPSBrYS1cdTAwM2VtYXN0ZXJfY3ljbGVfbm93O1xuJiM0MztcdGh2X2Nsb2NrLnN5c3RlbV90aW1lID0ga2EtXHUwMDNlbWFzdGVyX2tlcm5lbF9ucyAmIzQzOyBrYS1cdTAwM2Vrdm1jbG9ja19vZmZzZXQ7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVXNlIHRoZSBwcmVjb21wdXRlZCBndWVzdC1UU0MtYmFzZWQgbXVsL3NoaWZ0IHNvIHRoYXQgdGhlIGt2bWNsb2NrXG4mIzQzO1x0ICogdmFsdWUgbWF0Y2hlcyB3aGF0IHRoZSBndWVzdCBjb21wdXRlcyBmcm9tIGl0cyBvd24gVFNDLlxuJiM0MztcdCAqL1xuJiM0MztcdGh2X2Nsb2NrLnRzY19zaGlmdCA9IGthLVx1MDAzZW1hc3Rlcl90c2Nfc2hpZnQ7XG4mIzQzO1x0aHZfY2xvY2sudHNjX3RvX3N5c3RlbV9tdWwgPSBrYS1cdTAwM2VtYXN0ZXJfdHNjX211bDtcbiYjNDM7XG4mIzQzO1x0aWYgKGt2bV9jYXBzLmhhc190c2NfY29udHJvbCkge1xuJiM0MztcdFx0dTY0IHRzY19kZWx0YSA9IGRhdGEtXHUwMDNlaG9zdF90c2MgLSBrYS1cdTAwM2VtYXN0ZXJfY3ljbGVfbm93O1xuJiM0MztcbiYjNDM7XHRcdHRzY19kZWx0YSA9IGt2bV9zY2FsZV90c2ModHNjX2RlbHRhLCBrYS1cdTAwM2VtYXN0ZXJfdHNjX3NjYWxpbmdfcmF0aW8pO1xuJiM0MztcdFx0ZGF0YS1cdTAwM2VjbG9jayA9IGh2X2Nsb2NrLnN5c3RlbV90aW1lICYjNDM7XG4mIzQzO1x0XHRcdCAgICAgIHB2Y2xvY2tfc2NhbGVfZGVsdGEodHNjX2RlbHRhLFxuJiM0MztcdFx0XHRcdFx0XHQgIGh2X2Nsb2NrLnRzY190b19zeXN0ZW1fbXVsLFxuJiM0MztcdFx0XHRcdFx0XHQgIGh2X2Nsb2NrLnRzY19zaGlmdCk7XG4gXHR9IGVsc2Uge1xuLVx0XHRkYXRhLVx1MDAzZWNsb2NrID0gZ2V0X2t2bWNsb2NrX2Jhc2VfbnMoKSAmIzQzOyBrYS1cdTAwM2Vrdm1jbG9ja19vZmZzZXQ7XG4mIzQzO1x0XHRkYXRhLVx1MDAzZWNsb2NrID0gX19wdmNsb2NrX3JlYWRfY3ljbGVzKFx1MDAyNmh2X2Nsb2NrLCBkYXRhLVx1MDAzZWhvc3RfdHNjKTtcbiBcdH1cbi1cbi1cdHB1dF9jcHUoKTtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7I2Vsc2VcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzOyNlbmRpZlxuIH1cbiBcbiBzdGF0aWMgdm9pZCBnZXRfa3ZtY2xvY2soc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2Nsb2NrX2RhdGEgKmRhdGEpXG5AQCAtMTY5OSw4ICYjNDM7MTc1NiwxMSBAQCBzdGF0aWMgdm9pZCBnZXRfa3ZtY2xvY2soc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2Nsb2NrX2RhdGEgKmRhdGEpXG4gXHR1bnNpZ25lZCBzZXE7XG4gXG4gXHRkbyB7XG4mIzQzO1x0XHRkYXRhLVx1MDAzZWZsYWdzID0gMDtcbiYjNDM7XG4gXHRcdHNlcSA9IHJlYWRfc2VxY291bnRfYmVnaW4oXHUwMDI2a2EtXHUwMDNlcHZjbG9ja19zYyk7XG4tXHRcdF9fZ2V0X2t2bWNsb2NrKGt2bSwgZGF0YSk7XG4mIzQzO1x0XHRpZiAoIV9fZ2V0X2t2bWNsb2NrX21hc3Rlcl9jbG9jayhrdm0sIGRhdGEpKVxuJiM0MztcdFx0XHRkYXRhLVx1MDAzZWNsb2NrID0gZ2V0X2t2bWNsb2NrX2Jhc2VfbnMoKSAmIzQzOyBrYS1cdTAwM2Vrdm1jbG9ja19vZmZzZXQ7XG4gXHR9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KFx1MDAyNmthLVx1MDAzZXB2Y2xvY2tfc2MsIHNlcSkpO1xuIH1cbiBcbkBAIC0xNzYyLDM2ICYjNDM7MTgyMiw0NSBAQCBzdGF0aWMgdm9pZCBrdm1fc2V0dXBfZ3Vlc3RfcHZjbG9jayhzdHJ1Y3QgcHZjbG9ja192Y3B1X3RpbWVfaW5mbyAqcmVmX2h2X2Nsb2NrLFxuIFxuIGludCBrdm1fZ3Vlc3RfdGltZV91cGRhdGUoc3RydWN0IGt2bV92Y3B1ICp2KVxuIHtcbiYjNDM7XHR1NjQgdGd0X3RzY19oeiwgdHNjX3RpbWVzdGFtcCwgaG9zdF90c2MsIG1hc3Rlcl90c2MsIG1hc3Rlcl9ucztcbiYjNDM7XHRzdHJ1Y3Qga3ZtX2FyY2ggKmthIF9fbWF5YmVfdW51c2VkID0gXHUwMDI2di1cdTAwM2Vrdm0tXHUwMDNlYXJjaDtcbiBcdHN0cnVjdCBwdmNsb2NrX3ZjcHVfdGltZV9pbmZvIGh2X2Nsb2NrID0ge307XG4tXHR1bnNpZ25lZCBsb25nIGZsYWdzLCB0Z3RfdHNjX2toejtcbi1cdHVuc2lnbmVkIHNlcTtcbiBcdHN0cnVjdCBrdm1fdmNwdV9hcmNoICp2Y3B1ID0gXHUwMDI2di1cdTAwM2VhcmNoO1xuLVx0c3RydWN0IGt2bV9hcmNoICprYSA9IFx1MDAyNnYtXHUwMDNla3ZtLVx1MDAzZWFyY2g7XG4gXHRzNjQga2VybmVsX25zO1xuLVx0dTY0IHRzY190aW1lc3RhbXAsIGhvc3RfdHNjO1xuLVx0Ym9vbCB1c2VfbWFzdGVyX2Nsb2NrO1xuLVxuLVx0a2VybmVsX25zID0gMDtcbi1cdGhvc3RfdHNjID0gMDtcbiBcbiBcdC8qXG4gXHQgKiBJZiB0aGUgaG9zdCB1c2VzIFRTQyBjbG9jaywgdGhlbiBwYXNzdGhyb3VnaCBUU0MgYXMgc3RhYmxlXG4gXHQgKiB0byB0aGUgZ3Vlc3QuXG4gXHQgKi9cbiYjNDM7I2lmZGVmIENPTkZJR19YODZfNjRcbiYjNDM7XHRib29sIHVzZV9tYXN0ZXJfY2xvY2s7XG4mIzQzO1x0dW5zaWduZWQgaW50IHNlcTtcbiYjNDM7XG4gXHRkbyB7XG4gXHRcdHNlcSA9IHJlYWRfc2VxY291bnRfYmVnaW4oXHUwMDI2a2EtXHUwMDNlcHZjbG9ja19zYyk7XG4gXHRcdHVzZV9tYXN0ZXJfY2xvY2sgPSBrYS1cdTAwM2V1c2VfbWFzdGVyX2Nsb2NrO1xuLVx0XHRpZiAodXNlX21hc3Rlcl9jbG9jaykge1xuLVx0XHRcdGhvc3RfdHNjID0ga2EtXHUwMDNlbWFzdGVyX2N5Y2xlX25vdztcbi1cdFx0XHRrZXJuZWxfbnMgPSBrYS1cdTAwM2VtYXN0ZXJfa2VybmVsX25zO1xuJiM0MztcdFx0aWYgKCF1c2VfbWFzdGVyX2Nsb2NrKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWt2bV9nZXRfdGltZV9hbmRfY2xvY2tyZWFkKFx1MDAyNmtlcm5lbF9ucywgXHUwMDI2aG9zdF90c2MpKSB7XG4mIzQzO1x0XHRcdHVzZV9tYXN0ZXJfY2xvY2sgPSBmYWxzZTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4gXHRcdH1cbi1cdH0gd2hpbGUgKHJlYWRfc2VxY291bnRfcmV0cnkoXHUwMDI2a2EtXHUwMDNlcHZjbG9ja19zYywgc2VxKSk7XG4gXG4tXHQvKiBLZWVwIGlycSBkaXNhYmxlZCB0byBwcmV2ZW50IGNoYW5nZXMgdG8gdGhlIGNsb2NrICovXG4tXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4tXHR0Z3RfdHNjX2toeiA9IGdldF9jcHVfdHNjX2toeigpO1xuLVx0aWYgKHVubGlrZWx5KHRndF90c2Nfa2h6ID09IDApKSB7XG4tXHRcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbiYjNDM7XHRcdG1hc3Rlcl90c2MgPSBrYS1cdTAwM2VtYXN0ZXJfY3ljbGVfbm93O1xuJiM0MztcdFx0bWFzdGVyX25zID0ga2EtXHUwMDNlbWFzdGVyX2tlcm5lbF9ucztcbiYjNDM7XHR9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KFx1MDAyNmthLVx1MDAzZXB2Y2xvY2tfc2MsIHNlcSkpO1xuJiM0MzsjZWxzZVxuJiM0MztcdGNvbnN0IGJvb2wgdXNlX21hc3Rlcl9jbG9jayA9IGZhbHNlO1xuJiM0MzsjZW5kaWZcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEVuc3VyZSByZWFkaW5nIHRoZSBUU0MmIzQzO2ZyZXF1ZW5jeSBwYWlyIGlzIGRvbmUgb24gdGhlIHNhbWUgQ1BVLiAgV2hlblxuJiM0MztcdCAqIE5PVCB1c2luZyB0aGUgbWFzdGVyIGNsb2NrLCB0aGUgVFNDIGZyZXF1ZW5jeSBtYXkgdmFyeSBiZXR3ZWVuIENQVXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0cHJlZW1wdF9kaXNhYmxlKCk7XG4mIzQzO1x0dGd0X3RzY19oeiA9ICh1NjQpZ2V0X2NwdV90c2Nfa2h6KCkgKiBIWl9QRVJfS0haO1xuJiM0MztcdGlmICh1bmxpa2VseSh0Z3RfdHNjX2h6ID09IDApKSB7XG4mIzQzO1x0XHRwcmVlbXB0X2VuYWJsZSgpO1xuIFx0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfQ0xPQ0tfVVBEQVRFLCB2KTtcbiBcdFx0cmV0dXJuIDE7XG4gXHR9XG5AQCAtMTgyMCwyOCAmIzQzOzE4ODksNDMgQEAgaW50IGt2bV9ndWVzdF90aW1lX3VwZGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnYpXG4gXHRcdH1cbiBcdH1cbiBcbi1cdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJlZnJlc2ggTDEmIzM5O3MgbGFzdCBcJiMzNDtvYnNlcnZlZFwmIzM0OyBUU0MgdG8gbWF0Y2ggdGhlIFBWIGNsb2NrJiMzOTtzIHRpbWVzdGFtcCxcbiYjNDM7XHQgKiBlLmcuIHNvIHRoYXQgdGhlIGd1ZXN0IGNhbiYjMzk7dCBzZWUgYSBUU0MgdGhhdCYjMzk7cyBiZWhpbmQgdGhlIHJlZmVyZW5jZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHR2Y3B1LVx1MDAzZWxhc3RfZ3Vlc3RfdHNjID0gdHNjX3RpbWVzdGFtcDtcbiYjNDM7XG4mIzQzO1x0cHJlZW1wdF9lbmFibGUoKTtcbiBcbiBcdC8qIFdpdGggYWxsIHRoZSBpbmZvIHdlIGdvdCwgZmlsbCBpbiB0aGUgdmFsdWVzICovXG4gXG4gXHRpZiAoa3ZtX2NhcHMuaGFzX3RzY19jb250cm9sKSB7XG4tXHRcdHRndF90c2Nfa2h6ID0ga3ZtX3NjYWxlX3RzYyh0Z3RfdHNjX2toeixcbiYjNDM7XHRcdHRndF90c2NfaHogPSBrdm1fc2NhbGVfdHNjKHRndF90c2NfaHosXG4gXHRcdFx0XHRcdCAgICB2LVx1MDAzZWFyY2gubDFfdHNjX3NjYWxpbmdfcmF0aW8pO1xuLVx0XHR0Z3RfdHNjX2toeiA9IHRndF90c2Nfa2h6ID8gOiAxO1xuJiM0MztcdFx0dGd0X3RzY19oeiA9IHRndF90c2NfaHogPyA6IDE7XG4gXHR9XG4gXG4tXHRpZiAodW5saWtlbHkodmNwdS1cdTAwM2Vod190c2Nfa2h6ICE9IHRndF90c2Nfa2h6KSkge1xuLVx0XHRrdm1fZ2V0X3RpbWVfc2NhbGUoTlNFQ19QRVJfU0VDLCB0Z3RfdHNjX2toeiAqIDEwMDBMTCxcbiYjNDM7XHRpZiAodW5saWtlbHkodmNwdS1cdTAwM2Vod190c2NfaHogIT0gdGd0X3RzY19oeikpIHtcbiYjNDM7XHRcdGt2bV9nZXRfdGltZV9zY2FsZShOU0VDX1BFUl9TRUMsIHRndF90c2NfaHosXG4gXHRcdFx0XHQgICBcdTAwMjZ2Y3B1LVx1MDAzZXB2Y2xvY2tfdHNjX3NoaWZ0LFxuIFx0XHRcdFx0ICAgXHUwMDI2dmNwdS1cdTAwM2VwdmNsb2NrX3RzY19tdWwpO1xuLVx0XHR2Y3B1LVx1MDAzZWh3X3RzY19raHogPSB0Z3RfdHNjX2toejtcbiYjNDM7XHRcdHZjcHUtXHUwMDNlaHdfdHNjX2h6ID0gdGd0X3RzY19oejtcbiBcdH1cbiBcbiBcdGh2X2Nsb2NrLnRzY19zaGlmdCA9IHZjcHUtXHUwMDNlcHZjbG9ja190c2Nfc2hpZnQ7XG4gXHRodl9jbG9jay50c2NfdG9fc3lzdGVtX211bCA9IHZjcHUtXHUwMDNlcHZjbG9ja190c2NfbXVsO1xuLVx0aHZfY2xvY2sudHNjX3RpbWVzdGFtcCA9IHRzY190aW1lc3RhbXA7XG4tXHRodl9jbG9jay5zeXN0ZW1fdGltZSA9IGtlcm5lbF9ucyAmIzQzOyB2LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmt2bWNsb2NrX29mZnNldDtcbi1cdHZjcHUtXHUwMDNlbGFzdF9ndWVzdF90c2MgPSB0c2NfdGltZXN0YW1wO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSWYgdGhlIG1hc3RlciBjbG9jayBpcyBOT1QgaW4gdXNlLCB0aGUgcmVmZXJlbmNlIHRpbWUgcGxhY2VkIGluIHRoZVxuJiM0MztcdCAqIGh2X2Nsb2NrIGlzIFwmIzM0O25vd1wmIzM0Oy4gIElmIG1hc3RlciBjbG9jayBpcyBpbiB1c2UsIHRoZSByZWZlcmVuY2UgdGltZSBpc1xuJiM0MztcdCAqIHRoZSBtYXN0ZXIgY2xvY2smIzM5O3Mgc25hcHNob3QgZnJvbSBzb21lIHRpbWUgaW4gdGhlIHBhc3QsIG5vdCBcJiMzNDtub3dcJiMzNDsuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHVzZV9tYXN0ZXJfY2xvY2spIHtcbiYjNDM7XHRcdGh2X2Nsb2NrLnRzY190aW1lc3RhbXAgPSBrdm1fcmVhZF9sMV90c2ModiwgbWFzdGVyX3RzYyk7XG4mIzQzO1x0XHRodl9jbG9jay5zeXN0ZW1fdGltZSA9IG1hc3Rlcl9ucyAmIzQzOyB2LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmt2bWNsb2NrX29mZnNldDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0aHZfY2xvY2sudHNjX3RpbWVzdGFtcCA9IHRzY190aW1lc3RhbXA7XG4mIzQzO1x0XHRodl9jbG9jay5zeXN0ZW1fdGltZSA9IGtlcm5lbF9ucyAmIzQzOyB2LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmt2bWNsb2NrX29mZnNldDtcbiYjNDM7XHR9XG4gXG4gXHQvKiBJZiB0aGUgaG9zdCB1c2VzIFRTQyBjbG9ja3NvdXJjZSwgdGhlbiBpdCBpcyBzdGFibGUgKi9cbiBcdGh2X2Nsb2NrLmZsYWdzID0gMDtcbkBAIC0xOTAzLDYzICYjNDM7MTk4NywyMiBAQCBpbnQga3ZtX2d1ZXN0X3RpbWVfdXBkYXRlKHN0cnVjdCBrdm1fdmNwdSAqdilcbiAgKiB3YWxsY2xvY2sgYW5kIGt2bWNsb2NrIHRpbWVzLCBhbmQgc3VidHJhY3Rpbmcgb25lIGZyb20gdGhlIG90aGVyLlxuICAqXG4gICogRmFsbCBiYWNrIHRvIHVzaW5nIHRoZWlyIHZhbHVlcyBhdCBzbGlnaHRseSBkaWZmZXJlbnQgbW9tZW50cyBieVxuLSAqIGNhbGxpbmcga3RpbWVfZ2V0X3JlYWxfbnMoKSBhbmQgZ2V0X2t2bWNsb2NrX25zKCkgc2VwYXJhdGVseS5cbiYjNDM7ICogY2FsbGluZyBrdGltZV9nZXRfcmVhbF9ucygpIGFuZCBnZXRfa3ZtY2xvY2soKSBzZXBhcmF0ZWx5LlxuICAqL1xuIHVpbnQ2NF90IGt2bV9nZXRfd2FsbF9jbG9ja19lcG9jaChzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuLSNpZmRlZiBDT05GSUdfWDg2XzY0XG4tXHRzdHJ1Y3QgcHZjbG9ja192Y3B1X3RpbWVfaW5mbyBodl9jbG9jaztcbi1cdHN0cnVjdCBrdm1fYXJjaCAqa2EgPSBcdTAwMjZrdm0tXHUwMDNlYXJjaDtcbi1cdHVuc2lnbmVkIGxvbmcgc2VxLCBsb2NhbF90c2Nfa2h6O1xuLVx0c3RydWN0IHRpbWVzcGVjNjQgdHM7XG4tXHR1aW50NjRfdCBob3N0X3RzYztcbi1cbi1cdGRvIHtcbi1cdFx0c2VxID0gcmVhZF9zZXFjb3VudF9iZWdpbihcdTAwMjZrYS1cdTAwM2VwdmNsb2NrX3NjKTtcbi1cbi1cdFx0bG9jYWxfdHNjX2toeiA9IDA7XG4tXHRcdGlmICgha2EtXHUwMDNldXNlX21hc3Rlcl9jbG9jaylcbi1cdFx0XHRicmVhaztcbi1cbi1cdFx0Lypcbi1cdFx0ICogVGhlIFRTQyByZWFkIGFuZCB0aGUgY2FsbCB0byBnZXRfY3B1X3RzY19raHooKSBtdXN0IGhhcHBlblxuLVx0XHQgKiBvbiB0aGUgc2FtZSBDUFUuXG4tXHRcdCAqL1xuLVx0XHRnZXRfY3B1KCk7XG4tXG4tXHRcdGxvY2FsX3RzY19raHogPSBnZXRfY3B1X3RzY19raHooKTtcbi1cbi1cdFx0aWYgKGxvY2FsX3RzY19raHogXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAha3ZtX2dldF93YWxsdGltZV9hbmRfY2xvY2tyZWFkKFx1MDAyNnRzLCBcdTAwMjZob3N0X3RzYykpXG4tXHRcdFx0bG9jYWxfdHNjX2toeiA9IDA7IC8qIEZhbGwgYmFjayB0byBvbGQgbWV0aG9kICovXG4tXG4tXHRcdHB1dF9jcHUoKTtcbi1cbi1cdFx0Lypcbi1cdFx0ICogVGhlc2UgdmFsdWVzIG11c3QgYmUgc25hcHNob3R0ZWQgd2l0aGluIHRoZSBzZXFjb3VudCBsb29wLlxuLVx0XHQgKiBBZnRlciB0aGF0LCBpdCYjMzk7cyBqdXN0IG1hdGhlbWF0aWNzIHdoaWNoIGNhbiBoYXBwZW4gb24gYW55XG4tXHRcdCAqIENQVSBhdCBhbnkgdGltZS5cbi1cdFx0ICovXG4tXHRcdGh2X2Nsb2NrLnRzY190aW1lc3RhbXAgPSBrYS1cdTAwM2VtYXN0ZXJfY3ljbGVfbm93O1xuLVx0XHRodl9jbG9jay5zeXN0ZW1fdGltZSA9IGthLVx1MDAzZW1hc3Rlcl9rZXJuZWxfbnMgJiM0Mzsga2EtXHUwMDNla3ZtY2xvY2tfb2Zmc2V0O1xuJiM0MztcdHN0cnVjdCBrdm1fY2xvY2tfZGF0YSBkYXRhO1xuIFxuLVx0fSB3aGlsZSAocmVhZF9zZXFjb3VudF9yZXRyeShcdTAwMjZrYS1cdTAwM2VwdmNsb2NrX3NjLCBzZXEpKTtcbiYjNDM7XHRnZXRfa3ZtY2xvY2soa3ZtLCBcdTAwMjZkYXRhKTtcbiBcbiBcdC8qXG4tXHQgKiBJZiB0aGUgY29uZGl0aW9ucyB3ZXJlIHJpZ2h0LCBhbmQgb2J0YWluaW5nIHRoZSB3YWxsY2xvY2smIzQzO1RTQyB3YXNcbi1cdCAqIHN1Y2Nlc3NmdWwsIGNhbGN1bGF0ZSB0aGUgS1ZNIGNsb2NrIGF0IHRoZSBjb3JyZXNwb25kaW5nIHRpbWUgYW5kXG4tXHQgKiBzdWJ0cmFjdCBvbmUgZnJvbSB0aGUgb3RoZXIgdG8gZ2V0IHRoZSBndWVzdCYjMzk7cyBlcG9jaCBpbiBuYW5vc2Vjb25kc1xuLVx0ICogc2luY2UgMTk3MC0wMS0wMS5cbiYjNDM7XHQgKiBJZiBnZXRfa3ZtY2xvY2soKSBjYXB0dXJlZCBib3RoIHdhbGxjbG9jayBhbmQga3ZtY2xvY2sgZnJvbSB0aGVcbiYjNDM7XHQgKiBzYW1lIFRTQyByZWFkaW5nLCB1c2UgdGhlbSBmb3IgYSBwcmVjaXNlIGVwb2NoIGNhbGN1bGF0aW9uLlxuIFx0ICovXG4tXHRpZiAobG9jYWxfdHNjX2toeikge1xuLVx0XHRrdm1fZ2V0X3RpbWVfc2NhbGUoTlNFQ19QRVJfU0VDLCBsb2NhbF90c2Nfa2h6ICogTlNFQ19QRVJfVVNFQyxcbi1cdFx0XHRcdCAgIFx1MDAyNmh2X2Nsb2NrLnRzY19zaGlmdCxcbi1cdFx0XHRcdCAgIFx1MDAyNmh2X2Nsb2NrLnRzY190b19zeXN0ZW1fbXVsKTtcbi1cdFx0cmV0dXJuIHRzLnR2X25zZWMgJiM0MzsgTlNFQ19QRVJfU0VDICogdHMudHZfc2VjIC1cbi1cdFx0XHRfX3B2Y2xvY2tfcmVhZF9jeWNsZXMoXHUwMDI2aHZfY2xvY2ssIGhvc3RfdHNjKTtcbi1cdH1cbi0jZW5kaWZcbi1cdHJldHVybiBrdGltZV9nZXRfcmVhbF9ucygpIC0gZ2V0X2t2bWNsb2NrX25zKGt2bSk7XG4mIzQzO1x0aWYgKGRhdGEuZmxhZ3MgXHUwMDI2IEtWTV9DTE9DS19SRUFMVElNRSlcbiYjNDM7XHRcdHJldHVybiBkYXRhLnJlYWx0aW1lIC0gZGF0YS5jbG9jaztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGt0aW1lX2dldF9yZWFsX25zKCkgLSBkYXRhLmNsb2NrO1xuIH1cbiBcbiAvKlxuQEAgLTI1ODMsNyAmIzQzOzI2MjYsNyBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4gXHRcdFx0bWFya190c2NfdW5zdGFibGUoXCYjMzQ7S1ZNIGRpc2NvdmVyZWQgYmFja3dhcmRzIFRTQ1wmIzM0Oyk7XG4gXG4gXHRcdGlmIChrdm1fY2hlY2tfdHNjX3Vuc3RhYmxlKCkpIHtcbi1cdFx0XHR1NjQgb2Zmc2V0ID0ga3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldCh2Y3B1LFxuJiM0MztcdFx0XHR1NjQgb2Zmc2V0ID0ga3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldCh2Y3B1LCByZHRzYygpLFxuIFx0XHRcdFx0XHRcdHZjcHUtXHUwMDNlYXJjaC5sYXN0X2d1ZXN0X3RzYyk7XG4gXHRcdFx0a3ZtX3ZjcHVfd3JpdGVfdHNjX29mZnNldCh2Y3B1LCBvZmZzZXQpO1xuIFx0XHRcdGlmICghdmNwdS1cdTAwM2VhcmNoLmd1ZXN0X3RzY19wcm90ZWN0ZWQpXG5AQCAtNjg2Niw2ICYjNDM7NjkwOSw3IEBAIHN0YXRpYyB2b2lkIHB2Y2xvY2tfaXJxX3dvcmtfZm4oc3RydWN0IGlycV93b3JrICp3KVxuIH1cbiBcbiBzdGF0aWMgREVGSU5FX0lSUV9XT1JLKHB2Y2xvY2tfaXJxX3dvcmssIHB2Y2xvY2tfaXJxX3dvcmtfZm4pO1xuJiM0MzsjZW5kaWZcbiBcbiAvKlxuICAqIE5vdGlmaWNhdGlvbiBhYm91dCBwdmNsb2NrIGd0b2QgZGF0YSB1cGRhdGUuXG5AQCAtNjg3MywyNiAmIzQzOzY5MTcsMjYgQEAgc3RhdGljIERFRklORV9JUlFfV09SSyhwdmNsb2NrX2lycV93b3JrLCBwdmNsb2NrX2lycV93b3JrX2ZuKTtcbiBzdGF0aWMgaW50IHB2Y2xvY2tfZ3RvZF9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyB1bnVzZWQsXG4gXHRcdFx0ICAgICAgIHZvaWQgKnByaXYpXG4ge1xuLVx0c3RydWN0IHB2Y2xvY2tfZ3RvZF9kYXRhICpndG9kID0gXHUwMDI2cHZjbG9ja19ndG9kX2RhdGE7XG4gXHRzdHJ1Y3QgdGltZWtlZXBlciAqdGsgPSBwcml2O1xuIFxuIFx0dXBkYXRlX3B2Y2xvY2tfZ3RvZCh0ayk7XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfWDg2XzY0XG4gXHQvKlxuIFx0ICogRGlzYWJsZSBtYXN0ZXIgY2xvY2sgaWYgaG9zdCBkb2VzIG5vdCB0cnVzdCwgb3IgZG9lcyBub3QgdXNlLFxuIFx0ICogVFNDIGJhc2VkIGNsb2Nrc291cmNlLiBEZWxlZ2F0ZSBxdWV1ZV93b3JrKCkgdG8gaXJxX3dvcmsgYXNcbiBcdCAqIHRoaXMgaXMgaW52b2tlZCB3aXRoIHRrX2NvcmUuc2VxIHdyaXRlIGhlbGQuXG4gXHQgKi9cbi1cdGlmICghZ3RvZF9pc19iYXNlZF9vbl90c2MoZ3RvZC1cdTAwM2VjbG9jay52Y2xvY2tfbW9kZSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0aWYgKCFndG9kX2lzX2Jhc2VkX29uX3RzYyhwdmNsb2NrX2d0b2RfZGF0YS5jbG9jay52Y2xvY2tfbW9kZSkgXHUwMDI2XHUwMDI2XG4gXHQgICAgYXRvbWljX3JlYWQoXHUwMDI2a3ZtX2d1ZXN0X2hhc19tYXN0ZXJfY2xvY2spICE9IDApXG4gXHRcdGlycV93b3JrX3F1ZXVlKFx1MDAyNnB2Y2xvY2tfaXJxX3dvcmspO1xuJiM0MzsjZW5kaWZcbiBcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHB2Y2xvY2tfZ3RvZF9ub3RpZmllciA9IHtcbiBcdC5ub3RpZmllcl9jYWxsID0gcHZjbG9ja19ndG9kX25vdGlmeSxcbiB9O1xuLSNlbmRpZlxuIFxuIHZvaWQga3ZtX3NldHVwX3hzc19jYXBzKHZvaWQpXG4ge1xuQEAgLTcxMTEsOSAmIzQzOzcxNTUsOSBAQCBpbnQga3ZtX3g4Nl92ZW5kb3JfaW5pdChzdHJ1Y3Qga3ZtX3g4Nl9pbml0X29wcyAqb3BzKVxuIFxuIFx0aWYgKHBpX2luamVjdF90aW1lciA9PSAtMSlcbiBcdFx0cGlfaW5qZWN0X3RpbWVyID0gaG91c2VrZWVwaW5nX2VuYWJsZWQoSEtfVFlQRV9USU1FUik7XG4tI2lmZGVmIENPTkZJR19YODZfNjRcbiBcdHB2Y2xvY2tfZ3RvZF9yZWdpc3Rlcl9ub3RpZmllcihcdTAwMjZwdmNsb2NrX2d0b2Rfbm90aWZpZXIpO1xuIFxuJiM0MzsjaWZkZWYgQ09ORklHX1g4Nl82NFxuIFx0aWYgKGh5cGVydmlzb3JfaXNfdHlwZShYODZfSFlQRVJfTVNfSFlQRVJWKSlcbiBcdFx0c2V0X2h2X3RzY2NoYW5nZV9jYihrdm1faHlwZXJ2X3RzY19ub3RpZmllcik7XG4gI2VuZGlmXG5AQCAtNzE3MCw4ICYjNDM7NzIxNCw4IEBAIHZvaWQga3ZtX3g4Nl92ZW5kb3JfZXhpdCh2b2lkKVxuIFx0XHRcdFx0XHQgICAgQ1BVRlJFUV9UUkFOU0lUSU9OX05PVElGSUVSKTtcbiBcdFx0Y3B1aHBfcmVtb3ZlX3N0YXRlX25vY2FsbHMoQ1BVSFBfQVBfWDg2X0tWTV9DTEtfT05MSU5FKTtcbiBcdH1cbi0jaWZkZWYgQ09ORklHX1g4Nl82NFxuIFx0cHZjbG9ja19ndG9kX3VucmVnaXN0ZXJfbm90aWZpZXIoXHUwMDI2cHZjbG9ja19ndG9kX25vdGlmaWVyKTtcbiYjNDM7I2lmZGVmIENPTkZJR19YODZfNjRcbiBcdGlycV93b3JrX3N5bmMoXHUwMDI2cHZjbG9ja19pcnFfd29yayk7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnB2Y2xvY2tfZ3RvZF93b3JrKTtcbiAjZW5kaWZcbkBAIC05NDQwLDYgJiM0Mzs5NDg0LDggQEAgdm9pZCBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRyZXR1cm47XG4gXHR2Y3B1X2xvYWQodmNwdSk7XG4gXHRrdm1fc3luY2hyb25pemVfdHNjKHZjcHUsIE5VTEwpO1xuJiM0MztcdGlmICghdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC51c2VfbWFzdGVyX2Nsb2NrKVxuJiM0MztcdFx0a3ZtX3VwZGF0ZV9tYXN0ZXJjbG9jayh2Y3B1LVx1MDAzZWt2bSk7XG4gXHR2Y3B1X3B1dCh2Y3B1KTtcbiBcbiBcdC8qIHBvbGwgY29udHJvbCBlbmFibGVkIGJ5IGRlZmF1bHQgKi9cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmggYi9hcmNoL3g4Ni9rdm0veDg2LmhcbmluZGV4IDBmNTkxOWIwOTJlNDcuLjFkOWE2NjA0OGIwMWUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ODYuaFxuQEAgLTMzNSw3ICYjNDM7MzM1LDggQEAgdTY0IGt2bV9zY2FsZV90c2ModTY0IHRzYywgdTY0IHJhdGlvKTtcbiB1NjQga3ZtX3JlYWRfbDFfdHNjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGhvc3RfdHNjKTtcbiB1NjQga3ZtX2NhbGNfbmVzdGVkX3RzY19vZmZzZXQodTY0IGwxX29mZnNldCwgdTY0IGwyX29mZnNldCwgdTY0IGwyX211bHRpcGxpZXIpO1xuIHU2NCBrdm1fY2FsY19uZXN0ZWRfdHNjX211bHRpcGxpZXIodTY0IGwxX211bHRpcGxpZXIsIHU2NCBsMl9tdWx0aXBsaWVyKTtcbi11NjQga3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB0YXJnZXRfdHNjKTtcbiYjNDM7dTY0IGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgaG9zdF90c2MsXG4mIzQzO1x0XHRcdCAgICAgIHU2NCB0YXJnZXRfdHNjKTtcbiB2b2lkIGt2bV92Y3B1X3dyaXRlX3RzY19vZmZzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgbDFfb2Zmc2V0KTtcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgYWRqdXN0X3RzY19vZmZzZXRfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAwOjM5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fc3luY2hyb25pemVfdHNjJiMzNDssCiAgICAmIzM0O2t2bV9ndWVzdF90aW1lX3VwZGF0ZSYjMzQ7LAogICAgJiMzNDtrdm1fZ2V0X3dhbGxfY2xvY2tfZXBvY2gmIzM0OywKICAgICYjMzQ7a3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldCYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIHg4NiBUU0MgKFRpbWUgU3RhbXAgQ291bnRlcikgaGFuZGxpbmcsIGluY2x1ZGluZyBUU0Mgc2NhbGluZywgbWFzdGVyIGNsb2NrIHVwZGF0ZXMsIGFuZCB3YWxsIGNsb2NrIGVwb2NoIGNhbGN1bGF0aW9ucy4gVGhpcyBpcyBjb3JlIGh5cGVydmlzb3IgbG9naWMgcmVhY2hhYmxlIGZyb20gZ3Vlc3QgVk1zIHZpYSBNU1Igd3JpdGVzLCBDUFVJRCwgYW5kIEtWTSBpb2N0bHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgaGFuZGxpbmcgVFNDIHN5bmNocm9uaXphdGlvbiBhbmQgZ3Vlc3QgdGltZSB1cGRhdGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjYyNDQ0NGM1MjBiODQ3MzNlOTJmNjVlZGUyNmQwZmZiNWI1MmY4OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDUgMDA6Mzk6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCAyODM4NDc2MTlmZjg4Li4yODc4YTUxODFjZDliIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTg2NCw3ICYjNDM7ODY0LDcgQEAgc3RydWN0IGt2bV92Y3B1X2FyY2ggewogCWdwYV90IHRpbWU7CiAJczggIHB2Y2xvY2tfdHNjX3NoaWZ0OwogCXUzMiBwdmNsb2NrX3RzY19tdWw7Ci0JdW5zaWduZWQgaW50IGh3X3RzY19raHo7CiYjNDM7CXU2NCBod190c2NfaHo7CiAJc3RydWN0IGdmbl90b19wZm5fY2FjaGUgcHZfdGltZTsKIAkvKiBzZXQgZ3Vlc3Qgc3RvcHBlZCBmbGFnIGluIHB2Y2xvY2sgZmxhZ3MgZmllbGQgKi8KIAlib29sIHB2Y2xvY2tfc2V0X2d1ZXN0X3N0b3BwZWRfcmVxdWVzdDsKQEAgLTEyMzYsNiAmIzQzOzEyMzYsNyBAQCBzdHJ1Y3Qga3ZtX2FyY2ggewogCXU2NCBsYXN0X3RzY193cml0ZTsKIAl1MzIgbGFzdF90c2Nfa2h6OwogCXU2NCBsYXN0X3RzY19vZmZzZXQ7CiYjNDM7CXU2NCBsYXN0X3RzY19zY2FsaW5nX3JhdGlvOwogCXU2NCBjdXJfdHNjX25zZWM7CiAJdTY0IGN1cl90c2Nfd3JpdGU7CiAJdTY0IGN1cl90c2Nfb2Zmc2V0OwpAQCAtMTI1MSw2ICYjNDM7MTI1Miw5IEBAIHN0cnVjdCBrdm1fYXJjaCB7CiAJdTY0IG1hc3Rlcl9rZXJuZWxfbnM7CiAJdTY0IG1hc3Rlcl9jeWNsZV9ub3c7CiAJc3RydWN0IHJhdGVsaW1pdF9zdGF0ZSBrdm1jbG9ja191cGRhdGVfcnM7CiYjNDM7CXU2NCBtYXN0ZXJfdHNjX3NjYWxpbmdfcmF0aW87CiYjNDM7CXM4ICBtYXN0ZXJfdHNjX3NoaWZ0OwomIzQzOwl1MzIgbWFzdGVyX3RzY19tdWw7CiAKICNpZmRlZiBDT05GSUdfS1ZNX0hZUEVSVgogCXN0cnVjdCBrdm1faHYgaHlwZXJ2OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2NwdWlkLmMgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuYwppbmRleCA5ZTljZjY1MzhhOTZlLi43MDQ5ZjVhNTU5N2I0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vY3B1aWQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuYwpAQCAtMTYsNiAmIzQzOzE2LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC92bWFsbG9jLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdWFjY2Vzcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL3N0YXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdW5pdHMuaCZndDsKIAogI2luY2x1ZGUgJmx0O2FzbS9wcm9jZXNzb3IuaCZndDsKICNpbmNsdWRlICZsdDthc20vdXNlci5oJmd0OwpAQCAtMjE0Niw3ICYjNDM7MjE0Nyw3IEBAIGJvb2wga3ZtX2NwdWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyICplYXgsIHUzMiAqZWJ4LAogCQkJCSplY3ggPSB2Y3B1LSZndDthcmNoLnB2Y2xvY2tfdHNjX211bDsKIAkJCQkqZWR4ID0gdmNwdS0mZ3Q7YXJjaC5wdmNsb2NrX3RzY19zaGlmdDsKIAkJCX0gZWxzZSBpZiAoaW5kZXggPT0gMikgewotCQkJCSplYXggPSB2Y3B1LSZndDthcmNoLmh3X3RzY19raHo7CiYjNDM7CQkJCSplYXggPSBkaXZfdTY0KHZjcHUtJmd0O2FyY2guaHdfdHNjX2h6LCBIWl9QRVJfS0haKTsKIAkJCX0KIAkJfQogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbXNycy5jIGIvYXJjaC94ODYva3ZtL21zcnMuYwppbmRleCA2NmZhNzE0MGQ2NWQ5Li4yMmNlYjM5ZDQxZjY2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbXNycy5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tc3JzLmMKQEAgLTE2MzEsNyAmIzQzOzE2MzEsOCBAQCBpbnQga3ZtX3NldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbykKIAkJaWYgKG1zcl9pbmZvLSZndDtob3N0X2luaXRpYXRlZCkgewogCQkJa3ZtX3N5bmNocm9uaXplX3RzYyh2Y3B1LCAmYW1wO2RhdGEpOwogCQl9IGVsc2UgaWYgKCF2Y3B1LSZndDthcmNoLmd1ZXN0X3RzY19wcm90ZWN0ZWQpIHsKLQkJCXU2NCBhZGogPSBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0KHZjcHUsIGRhdGEpIC0gdmNwdS0mZ3Q7YXJjaC5sMV90c2Nfb2Zmc2V0OwomIzQzOwkJCXU2NCBhZGogPSBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0KHZjcHUsIHJkdHNjKCksIGRhdGEpIC0KJiM0MzsJCQkJICB2Y3B1LSZndDthcmNoLmwxX3RzY19vZmZzZXQ7CiAJCQlhZGp1c3RfdHNjX29mZnNldF9ndWVzdCh2Y3B1LCBhZGopOwogCQkJdmNwdS0mZ3Q7YXJjaC5pYTMyX3RzY19hZGp1c3RfbXNyICYjNDM7PSBhZGo7CiAJCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jCmluZGV4IDlkNjA3Yjk4YmQwNjcuLjMwNTdjYTcwNTFkYjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uYwpAQCAtNTYwMiw3ICYjNDM7NTYwMiw4IEBAIHN0YXRpYyBfX2luaXQgaW50IHN2bV9oYXJkd2FyZV9zZXR1cCh2b2lkKQogCQkJCSAgICAgWEZFQVRVUkVfTUFTS19CTkRDU1IpOwogCiAJaWYgKHRzY19zY2FsaW5nKSB7Ci0JCWlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1RTQ1JBVEVNU1IpKSB7CiYjNDM7CQlpZiAoIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9UU0NSQVRFTVNSKSB8fAomIzQzOwkJICAgICFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQ09OU1RBTlRfVFNDKSkgewogCQkJdHNjX3NjYWxpbmcgPSBmYWxzZTsKIAkJfSBlbHNlIHsKIAkJCXByX2luZm8oJiMzNDtUU0Mgc2NhbGluZyBzdXBwb3J0ZWRcbiYjMzQ7KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jCmluZGV4IGUzYmZlNmFjYTFhMGUuLjlhYmQyZWQzYWVhZTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC92bXguYwpAQCAtMjg0MSw2ICYjNDM7Mjg0MSwxNiBAQCBzdGF0aWMgaW50IHNldHVwX3ZtY3NfY29uZmlnKHN0cnVjdCB2bWNzX2NvbmZpZyAqdm1jc19jb25mLAogCWlmICghY3B1X2hhc19zZ3goKSkKIAkJX2NwdV9iYXNlZF8ybmRfZXhlY19jb250cm9sICZhbXA7PSB+U0VDT05EQVJZX0VYRUNfRU5DTFNfRVhJVElORzsKIAomIzQzOwkvKgomIzQzOwkgKiBLVk0gZG9lc24mIzM5O3QgcmUtZGVyaXZlIHRoZSBUU0Mgc2NhbGluZyByYXRpbyB3aGVuIHRoZSBob3N0IFRTQwomIzQzOwkgKiBmcmVxdWVuY3kgY2hhbmdlcywgc28gVFNDIHNjYWxpbmcgaXMgb25seSB1c2FibGUgd2l0aCBhIGNvbnN0YW50CiYjNDM7CSAqIFRTQy4gIENsZWFyIHRoZSBjb250cm9sIGhlcmUgcmF0aGVyIHRoYW4gaW4gdm14X2hhcmR3YXJlX3NldHVwKCkgc28KJiM0MzsJICogdGhhdCB0aGUgcGVyLUNQVSBjb25maWdzIHJlY29tcHV0ZWQgYnkgdm14X2NoZWNrX3Byb2Nlc3Nvcl9jb21wYXQoKQomIzQzOwkgKiBzdGF5IGNvbnNpc3RlbnQgd2l0aCB0aGUgZ29sZGVuIHZtY3NfY29uZmlnLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQ09OU1RBTlRfVFNDKSkKJiM0MzsJCV9jcHVfYmFzZWRfMm5kX2V4ZWNfY29udHJvbCAmYW1wOz0gflNFQ09OREFSWV9FWEVDX1RTQ19TQ0FMSU5HOwomIzQzOwogCWlmIChfY3B1X2Jhc2VkX2V4ZWNfY29udHJvbCAmYW1wOyBDUFVfQkFTRURfQUNUSVZBVEVfVEVSVElBUllfQ09OVFJPTFMpCiAJCV9jcHVfYmFzZWRfM3JkX2V4ZWNfY29udHJvbCA9CiAJCQlhZGp1c3Rfdm14X2NvbnRyb2xzNjQoS1ZNX09QVElPTkFMX1ZNWF9URVJUSUFSWV9WTV9FWEVDX0NPTlRST0wsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmMKaW5kZXggZDk0YjU5MTQwYzQ1Mi4uY2JlNGZkMzQ1N2I0NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ODYuYwpAQCAtNjEsNiAmIzQzOzYxLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9tZW1fZW5jcnlwdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3N1c3BlbmQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zbXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdW5pdHMuaCZndDsKIAogI2luY2x1ZGUgJmx0O3RyYWNlL2V2ZW50cy9pcGkuaCZndDsKICNpbmNsdWRlICZsdDt0cmFjZS9ldmVudHMva3ZtLmgmZ3Q7CkBAIC04NzMsNyAmIzQzOzg3NCw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fdmNwdV9leGl0X3JlcXVlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCSAgICAgICBrdm1fcmVxdWVzdF9wZW5kaW5nKHZjcHUpIHx8IHhmZXJfdG9fZ3Vlc3RfbW9kZV93b3JrX3BlbmRpbmcoKTsKIH0KIAotI2lmZGVmIENPTkZJR19YODZfNjQKIHN0cnVjdCBwdmNsb2NrX2Nsb2NrIHsKIAlpbnQgdmNsb2NrX21vZGU7CiAJdTY0IGN5Y2xlX2xhc3Q7CkBAIC05MzEsMTMgJiM0Mzs5MzEsNiBAQCBzdGF0aWMgczY0IGdldF9rdm1jbG9ja19iYXNlX25zKHZvaWQpCiAJLyogQ291bnQgdXAgZnJvbSBib290IHRpbWUsIGJ1dCB3aXRoIHRoZSBmcmVxdWVuY3kgb2YgdGhlIHJhdyBjbG9jay4gICovCiAJcmV0dXJuIGt0aW1lX3RvX25zKGt0aW1lX2FkZChrdGltZV9nZXRfcmF3KCksIHB2Y2xvY2tfZ3RvZF9kYXRhLm9mZnNfYm9vdCkpOwogfQotI2Vsc2UKLXN0YXRpYyBzNjQgZ2V0X2t2bWNsb2NrX2Jhc2VfbnModm9pZCkKLXsKLQkvKiBNYXN0ZXIgY2xvY2sgbm90IHVzZWQsIHNvIHdlIGNhbiBqdXN0IHVzZSBDTE9DS19CT09UVElNRS4gICovCi0JcmV0dXJuIGt0aW1lX2dldF9ib290dGltZV9ucygpOwotfQotI2VuZGlmCiAKIHN0YXRpYyB1aW50MzJfdCBkaXZfZnJhYyh1aW50MzJfdCBkaXZpZGVuZCwgdWludDMyX3QgZGl2aXNvcikKIHsKQEAgLTk0NSwzMiAmIzQzOzkzOCw1NyBAQCBzdGF0aWMgdWludDMyX3QgZGl2X2ZyYWModWludDMyX3QgZGl2aWRlbmQsIHVpbnQzMl90IGRpdmlzb3IpCiAJcmV0dXJuIGRpdmlkZW5kOwogfQogCi1zdGF0aWMgdm9pZCBrdm1fZ2V0X3RpbWVfc2NhbGUodWludDY0X3Qgc2NhbGVkX2h6LCB1aW50NjRfdCBiYXNlX2h6LAomIzQzO3N0YXRpYyB2b2lkIGt2bV9nZXRfdGltZV9zY2FsZSh1NjQgc2NhbGVkX2h6LCB1NjQgYmFzZV9oeiwKIAkJCSAgICAgICBzOCAqcHNoaWZ0LCB1MzIgKnBtdWx0aXBsaWVyKQogewotCXVpbnQ2NF90IHNjYWxlZDY0OwotCWludDMyX3QgIHNoaWZ0ID0gMDsKLQl1aW50NjRfdCB0cHM2NDsKLQl1aW50MzJfdCB0cHMzMjsKJiM0MzsJdTY0IHNjYWxlZF9oel91NjQgPSBzY2FsZWRfaHo7CiYjNDM7CXMzMiBzaGlmdCA9IDA7CiYjNDM7CXU2NCBiYXNlX2h6X3U2NDsKJiM0MzsJdTMyIGJhc2UzMjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIGEgZml4ZWQtcG9pbnQgbXVsdGlwbGllciBhbmQgc2hpZnQgc3VjaAomIzQzOwkgKiB0aGF0OgomIzQzOwkgKiAgIHRpbWVfbnMgPSAodHNjX2N5Y2xlcyAmbHQ7Jmx0OyBzaGlmdCkgKiBtdWx0aXBsaWVyICZndDsmZ3Q7IDMyCiYjNDM7CSAqCiYjNDM7CSAqIFdoZXJlIHRzY19jeWNsZXMgdGljayBhdCBiYXNlX2h6LCBhbmQgdGltZV9ucyBzaG91bGQgY291bnQgYXQKJiM0MzsJICogc2NhbGVkX2h6ICh0eXBpY2FsbHkgTlNFQ19QRVJfU0VDIGZvciBhIFRTQ+KGkm5hbm9zZWNvbmRzIGNvbnZlcnNpb24pLgomIzQzOwkgKgomIzQzOwkgKiBUaGUgbXVsdGlwbGllciBpczogKHNjYWxlZF9oeiAmbHQ7Jmx0OyAzMikgLyBiYXNlX2h6LCBhZGp1c3RlZCBieSBzaGlmdAomIzQzOwkgKiB0byBrZWVwIGV2ZXJ5dGhpbmcgaW4gcmFuZ2UuCiYjNDM7CSAqLwogCi0JdHBzNjQgPSBiYXNlX2h6OwotCXNjYWxlZDY0ID0gc2NhbGVkX2h6OwotCXdoaWxlICh0cHM2NCAmZ3Q7IHNjYWxlZDY0KjIgfHwgdHBzNjQgJmFtcDsgMHhmZmZmZmZmZjAwMDAwMDAwVUxMKSB7Ci0JCXRwczY0ICZndDsmZ3Q7PSAxOwomIzQzOwliYXNlX2h6X3U2NCA9IGJhc2VfaHo7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFN0YXJ0IGJ5IHNoaWZ0aW5nIGJhc2VfaHogcmlnaHQgdW50aWwgaXQgZml0cyBpbiAzMiBiaXRzLCBhbmQKJiM0MzsJICogaXMgbG93ZXIgdGhhbiBkb3VibGUgdGhlIHRhcmdldCByYXRlLiBUaGlzIGludHJvZHVjZXMgYSBuZWdhdGl2ZQomIzQzOwkgKiBzaGlmdCB2YWx1ZSB3aGljaCB3b3VsZCByZXN1bHQgaW4gcHZjbG9ja19zY2FsZV9kZWx0YSgpIHNoaWZ0aW5nCiYjNDM7CSAqIHRoZSBhY3R1YWwgdGljayBjb3VudCByaWdodCBiZWZvcmUgcGVyZm9ybWluZyB0aGUgbXVsdGlwbGljYXRpb24uCiYjNDM7CSAqLwomIzQzOwl3aGlsZSAoYmFzZV9oel91NjQgJmd0OyBzY2FsZWRfaHpfdTY0ICogMiB8fCBiYXNlX2h6X3U2NCAmZ3Q7Jmd0OyAzMikgewomIzQzOwkJYmFzZV9oel91NjQgJmd0OyZndDs9IDE7CiAJCXNoaWZ0LS07CiAJfQogCi0JdHBzMzIgPSAodWludDMyX3QpdHBzNjQ7Ci0Jd2hpbGUgKHRwczMyICZsdDs9IHNjYWxlZDY0IHx8IHNjYWxlZDY0ICZhbXA7IDB4ZmZmZmZmZmYwMDAwMDAwMFVMTCkgewotCQlpZiAoc2NhbGVkNjQgJmFtcDsgMHhmZmZmZmZmZjAwMDAwMDAwVUxMIHx8IHRwczMyICZhbXA7IDB4ODAwMDAwMDApCi0JCQlzY2FsZWQ2NCAmZ3Q7Jmd0Oz0gMTsKJiM0MzsJLyogTm93IHRoZSBzaGlmdGVkIGJhc2VfaHogZml0cyBpbiAzMiBiaXRzLiAqLwomIzQzOwliYXNlMzIgPSAodTMyKWJhc2VfaHpfdTY0OwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBOZXh0LCBzaGlmdCBzY2FsZWRfaHogcmlnaHQgdW50aWwgaXQgZml0cyBpbiAzMiBiaXRzLCBhbmQgZW5zdXJlCiYjNDM7CSAqIHRoYXQgdGhlIHNoaWZ0ZWQgYmFzZV9oeiBpcyBzdHJpY3RseSBsYXJnZXIgKHNvIHRoYXQgdGhlIHJlc3VsdCBvZiB0aGUKJiM0MzsJICogZmluYWwgZGl2aXNpb24gYWxzbyBmaXRzIGluIDMyIGJpdHMpLgomIzQzOwkgKi8KJiM0MzsJd2hpbGUgKGJhc2UzMiAmbHQ7PSBzY2FsZWRfaHpfdTY0IHx8IHNjYWxlZF9oel91NjQgJmd0OyZndDsgMzIpIHsKJiM0MzsJCWlmIChzY2FsZWRfaHpfdTY0ICZndDsmZ3Q7IDMyIHx8IGJhc2UzMiAmYW1wOyBCSVQoMzEpKQomIzQzOwkJCXNjYWxlZF9oel91NjQgJmd0OyZndDs9IDE7CiAJCWVsc2UKLQkJCXRwczMyICZsdDsmbHQ7PSAxOwomIzQzOwkJCWJhc2UzMiAmbHQ7Jmx0Oz0gMTsKIAkJc2hpZnQmIzQzOyYjNDM7OwogCX0KIAogCSpwc2hpZnQgPSBzaGlmdDsKLQkqcG11bHRpcGxpZXIgPSBkaXZfZnJhYyhzY2FsZWQ2NCwgdHBzMzIpOwomIzQzOwkqcG11bHRpcGxpZXIgPSBkaXZfZnJhYyhzY2FsZWRfaHpfdTY0LCBiYXNlMzIpOwogfQogCiAjaWZkZWYgQ09ORklHX1g4Nl82NApAQCAtMTA2MSwxMSAmIzQzOzEwNzksMTUgQEAgc3RhdGljIGludCBrdm1fc2V0X3RzY19raHooc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdXNlcl90c2Nfa2h6KQogCiBzdGF0aWMgdTY0IGNvbXB1dGVfZ3Vlc3RfdHNjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgczY0IGtlcm5lbF9ucykKIHsKLQl1NjQgdHNjID0gcHZjbG9ja19zY2FsZV9kZWx0YShrZXJuZWxfbnMtdmNwdS0mZ3Q7YXJjaC50aGlzX3RzY19uc2VjLAotCQkJCSAgICAgIHZjcHUtJmd0O2FyY2gudmlydHVhbF90c2NfbXVsdCwKLQkJCQkgICAgICB2Y3B1LSZndDthcmNoLnZpcnR1YWxfdHNjX3NoaWZ0KTsKLQl0c2MgJiM0Mzs9IHZjcHUtJmd0O2FyY2gudGhpc190c2Nfd3JpdGU7Ci0JcmV0dXJuIHRzYzsKJiM0MzsJczY0IGRlbHRhX25zID0ga2VybmVsX25zIC0gdmNwdS0mZ3Q7YXJjaC50aGlzX3RzY19uc2VjOwomIzQzOwl1NjQgdHNjOwomIzQzOwomIzQzOwkvKiBIYW5kbGUgbmVnYXRpdmUgZGVsdGFzIGdyYWNlZnVsbHkgKG1hc3RlciBjbG9jayByZWYgbWF5IGJlIGVhcmxpZXIpICovCiYjNDM7CXRzYyA9IHB2Y2xvY2tfc2NhbGVfZGVsdGEoYWJzKGRlbHRhX25zKSwKJiM0MzsJCQkJICB2Y3B1LSZndDthcmNoLnZpcnR1YWxfdHNjX211bHQsCiYjNDM7CQkJCSAgdmNwdS0mZ3Q7YXJjaC52aXJ0dWFsX3RzY19zaGlmdCk7CiYjNDM7CiYjNDM7CXJldHVybiB2Y3B1LSZndDthcmNoLnRoaXNfdHNjX3dyaXRlICYjNDM7IChkZWx0YV9ucyAmZ3Q7PSAwID8gdHNjIDogLXRzYyk7CiB9CiAKICNpZmRlZiBDT05GSUdfWDg2XzY0CkBAIC0xMTMxLDExICYjNDM7MTE1MywxMiBAQCB1NjQga3ZtX3NjYWxlX3RzYyh1NjQgdHNjLCB1NjQgcmF0aW8pCiAJcmV0dXJuIF90c2M7CiB9CiAKLXU2NCBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHRhcmdldF90c2MpCiYjNDM7dTY0IGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgaG9zdF90c2MsCiYjNDM7CQkJICAgICAgdTY0IHRhcmdldF90c2MpCiB7CiAJdTY0IHRzYzsKIAotCXRzYyA9IGt2bV9zY2FsZV90c2MocmR0c2MoKSwgdmNwdS0mZ3Q7YXJjaC5sMV90c2Nfc2NhbGluZ19yYXRpbyk7CiYjNDM7CXRzYyA9IGt2bV9zY2FsZV90c2MoaG9zdF90c2MsIHZjcHUtJmd0O2FyY2gubDFfdHNjX3NjYWxpbmdfcmF0aW8pOwogCiAJcmV0dXJuIHRhcmdldF90c2MgLSB0c2M7CiB9CkBAIC0xMjU0LDYgJiM0MzsxMjc3LDcgQEAgc3RhdGljIHZvaWQgX19rdm1fc3luY2hyb25pemVfdHNjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG9mZnNldCwgdTY0IHRzYywKIAlrdm0tJmd0O2FyY2gubGFzdF90c2Nfd3JpdGUgPSB0c2M7CiAJa3ZtLSZndDthcmNoLmxhc3RfdHNjX2toeiA9IHZjcHUtJmd0O2FyY2gudmlydHVhbF90c2Nfa2h6OwogCWt2bS0mZ3Q7YXJjaC5sYXN0X3RzY19vZmZzZXQgPSBvZmZzZXQ7CiYjNDM7CWt2bS0mZ3Q7YXJjaC5sYXN0X3RzY19zY2FsaW5nX3JhdGlvID0gdmNwdS0mZ3Q7YXJjaC5sMV90c2Nfc2NhbGluZ19yYXRpbzsKIAogCXZjcHUtJmd0O2FyY2gubGFzdF9ndWVzdF90c2MgPSB0c2M7CiAKQEAgLTEyOTYsNyAmIzQzOzEzMjAsNyBAQCB2b2lkIGt2bV9zeW5jaHJvbml6ZV90c2Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKnVzZXJfdmFsdWUpCiAJYm9vbCBzeW5jaHJvbml6aW5nID0gZmFsc2U7CiAKIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtrdm0tJmd0O2FyY2gudHNjX3dyaXRlX2xvY2ssIGZsYWdzKTsKLQlvZmZzZXQgPSBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0KHZjcHUsIGRhdGEpOwomIzQzOwlvZmZzZXQgPSBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0KHZjcHUsIHJkdHNjKCksIGRhdGEpOwogCW5zID0gZ2V0X2t2bWNsb2NrX2Jhc2VfbnMoKTsKIAllbGFwc2VkID0gbnMgLSBrdm0tJmd0O2FyY2gubGFzdF90c2NfbnNlYzsKIApAQCAtMTM0NSw3ICYjNDM7MTM2OSw3IEBAIHZvaWQga3ZtX3N5bmNocm9uaXplX3RzYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqdXNlcl92YWx1ZSkKIAkJfSBlbHNlIHsKIAkJCXU2NCBkZWx0YSA9IG5zZWNfdG9fY3ljbGVzKHZjcHUsIGVsYXBzZWQpOwogCQkJZGF0YSAmIzQzOz0gZGVsdGE7Ci0JCQlvZmZzZXQgPSBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0KHZjcHUsIGRhdGEpOwomIzQzOwkJCW9mZnNldCA9IGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXQodmNwdSwgcmR0c2MoKSwgZGF0YSk7CiAJCX0KIAkJbWF0Y2hlZCA9IHRydWU7CiAJfQpAQCAtMTU2Niw2ICYjNDM7MTU5MCw4IEBAIHN0YXRpYyBib29sIGt2bV9nZXRfd2FsbHRpbWVfYW5kX2Nsb2NrcmVhZChzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsCiAgKgogICovCiAKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfY3B1X3RzY19raHoodm9pZCk7CiYjNDM7CiBzdGF0aWMgdm9pZCBwdmNsb2NrX3VwZGF0ZV92bV9ndG9kX2NvcHkoc3RydWN0IGt2bSAqa3ZtKQogewogI2lmZGVmIENPTkZJR19YODZfNjQKQEAgLTE1ODksOSAmIzQzOzE2MTUsMzAgQEAgc3RhdGljIHZvaWQgcHZjbG9ja191cGRhdGVfdm1fZ3RvZF9jb3B5KHN0cnVjdCBrdm0gKmt2bSkKIAkJCQkmYW1wOyZhbXA7ICFrYS0mZ3Q7YmFja3dhcmRzX3RzY19vYnNlcnZlZAogCQkJCSZhbXA7JmFtcDsgIWthLSZndDtib290X3ZjcHVfcnVuc19vbGRfa3ZtY2xvY2s7CiAKLQlpZiAoa2EtJmd0O3VzZV9tYXN0ZXJfY2xvY2spCiYjNDM7CWlmIChrYS0mZ3Q7dXNlX21hc3Rlcl9jbG9jaykgewomIzQzOwkJdTY0IHRzY19oejsKJiM0MzsKIAkJYXRvbWljX3NldCgmYW1wO2t2bV9ndWVzdF9oYXNfbWFzdGVyX2Nsb2NrLCAxKTsKIAomIzQzOwkJLyoKJiM0MzsJCSAqIENvcHkgdGhlIHNjYWxpbmcgcmF0aW8gYW5kIHByZWNvbXB1dGUgdGhlIG11bC9zaGlmdCBmb3IKJiM0MzsJCSAqIGNvbnZlcnRpbmcgZ3Vlc3QgVFNDIHRvIG5hbm9zZWNvbmRzLiBUaGVzZSBhcmUgdXNlZCBieQomIzQzOwkJICogZ2V0X2t2bWNsb2NrKCkgdG8gY29tcHV0ZSBrdm1jbG9jayBmcm9tIHRoZSBob3N0IFRTQwomIzQzOwkJICogd2l0aG91dCBuZWVkaW5nIGEgdkNQVSByZWZlcmVuY2UuCiYjNDM7CQkgKi8KJiM0MzsJCWthLSZndDttYXN0ZXJfdHNjX3NjYWxpbmdfcmF0aW8gPSBrYS0mZ3Q7bGFzdF90c2Nfc2NhbGluZ19yYXRpbzsKJiM0MzsJCXRzY19oeiA9ICh1NjQpZ2V0X2NwdV90c2Nfa2h6KCkgKiBIWl9QRVJfS0haOwomIzQzOwkJaWYgKHRzY19oeiAmYW1wOyZhbXA7IGt2bV9jYXBzLmhhc190c2NfY29udHJvbCkKJiM0MzsJCQl0c2NfaHogPSBrdm1fc2NhbGVfdHNjKHRzY19oeiwKJiM0MzsJCQkJCSAgICAgICBrYS0mZ3Q7bWFzdGVyX3RzY19zY2FsaW5nX3JhdGlvKTsKJiM0MzsJCWlmICh0c2NfaHopCiYjNDM7CQkJa3ZtX2dldF90aW1lX3NjYWxlKE5TRUNfUEVSX1NFQywgdHNjX2h6LAomIzQzOwkJCQkJICAgJmFtcDtrYS0mZ3Q7bWFzdGVyX3RzY19zaGlmdCwKJiM0MzsJCQkJCSAgICZhbXA7a2EtJmd0O21hc3Rlcl90c2NfbXVsKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlrYS0mZ3Q7dXNlX21hc3Rlcl9jbG9jayA9IGZhbHNlOwomIzQzOwl9CiYjNDM7CiAJdmNsb2NrX21vZGUgPSBwdmNsb2NrX2d0b2RfZGF0YS5jbG9jay52Y2xvY2tfbW9kZTsKIAl0cmFjZV9rdm1fdXBkYXRlX21hc3Rlcl9jbG9jayhrYS0mZ3Q7dXNlX21hc3Rlcl9jbG9jaywgdmNsb2NrX21vZGUsCiAJCQkJCXZjcHVzX21hdGNoZWQpOwpAQCAtMTY1OCwzOSAmIzQzOzE3MDUsNDkgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X2NwdV90c2Nfa2h6KHZvaWQpCiB9CiAKIC8qIENhbGxlZCB3aXRoaW4gcmVhZF9zZXFjb3VudF9iZWdpbi9yZXRyeSBmb3Iga3ZtLSZndDtwdmNsb2NrX3NjLiAgKi8KLXN0YXRpYyB2b2lkIF9fZ2V0X2t2bWNsb2NrKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9jbG9ja19kYXRhICpkYXRhKQomIzQzO3N0YXRpYyBib29sIF9fZ2V0X2t2bWNsb2NrX21hc3Rlcl9jbG9jayhzdHJ1Y3Qga3ZtICprdm0sCiYjNDM7CQkJCQlzdHJ1Y3Qga3ZtX2Nsb2NrX2RhdGEgKmRhdGEpCiB7CiYjNDM7I2lmZGVmIENPTkZJR19YODZfNjQKIAlzdHJ1Y3Qga3ZtX2FyY2ggKmthID0gJmFtcDtrdm0tJmd0O2FyY2g7CiAJc3RydWN0IHB2Y2xvY2tfdmNwdV90aW1lX2luZm8gaHZfY2xvY2s7CiYjNDM7CXN0cnVjdCB0aW1lc3BlYzY0IHRzOwogCi0JLyogYm90aCBfX3RoaXNfY3B1X3JlYWQoKSBhbmQgcmR0c2MoKSBzaG91bGQgYmUgb24gdGhlIHNhbWUgY3B1ICovCi0JZ2V0X2NwdSgpOwomIzQzOwlpZiAoIWthLSZndDt1c2VfbWFzdGVyX2Nsb2NrKQomIzQzOwkJcmV0dXJuIGZhbHNlOwogCi0JZGF0YS0mZ3Q7ZmxhZ3MgPSAwOwotCWlmIChrYS0mZ3Q7dXNlX21hc3Rlcl9jbG9jayAmYW1wOyZhbXA7Ci0JICAgIChzdGF0aWNfY3B1X2hhcyhYODZfRkVBVFVSRV9DT05TVEFOVF9UU0MpIHx8IF9fdGhpc19jcHVfcmVhZChjcHVfdHNjX2toeikpKSB7Ci0jaWZkZWYgQ09ORklHX1g4Nl82NAotCQlzdHJ1Y3QgdGltZXNwZWM2NCB0czsKJiM0MzsJaWYgKCFrdm1fZ2V0X3dhbGx0aW1lX2FuZF9jbG9ja3JlYWQoJmFtcDt0cywgJmFtcDtkYXRhLSZndDtob3N0X3RzYykpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiAKLQkJaWYgKGt2bV9nZXRfd2FsbHRpbWVfYW5kX2Nsb2NrcmVhZCgmYW1wO3RzLCAmYW1wO2RhdGEtJmd0O2hvc3RfdHNjKSkgewotCQkJZGF0YS0mZ3Q7cmVhbHRpbWUgPSB0cy50dl9uc2VjICYjNDM7IE5TRUNfUEVSX1NFQyAqIHRzLnR2X3NlYzsKLQkJCWRhdGEtJmd0O2ZsYWdzIHw9IEtWTV9DTE9DS19SRUFMVElNRSB8IEtWTV9DTE9DS19IT1NUX1RTQzsKLQkJfSBlbHNlCi0jZW5kaWYKLQkJZGF0YS0mZ3Q7aG9zdF90c2MgPSByZHRzYygpOwotCi0JCWRhdGEtJmd0O2ZsYWdzIHw9IEtWTV9DTE9DS19UU0NfU1RBQkxFOwotCQlodl9jbG9jay50c2NfdGltZXN0YW1wID0ga2EtJmd0O21hc3Rlcl9jeWNsZV9ub3c7Ci0JCWh2X2Nsb2NrLnN5c3RlbV90aW1lID0ga2EtJmd0O21hc3Rlcl9rZXJuZWxfbnMgJiM0Mzsga2EtJmd0O2t2bWNsb2NrX29mZnNldDsKLQkJa3ZtX2dldF90aW1lX3NjYWxlKE5TRUNfUEVSX1NFQywgZ2V0X2NwdV90c2Nfa2h6KCkgKiAxMDAwTEwsCi0JCQkJICAgJmFtcDtodl9jbG9jay50c2Nfc2hpZnQsCi0JCQkJICAgJmFtcDtodl9jbG9jay50c2NfdG9fc3lzdGVtX211bCk7Ci0JCWRhdGEtJmd0O2Nsb2NrID0gX19wdmNsb2NrX3JlYWRfY3ljbGVzKCZhbXA7aHZfY2xvY2ssIGRhdGEtJmd0O2hvc3RfdHNjKTsKJiM0MzsJZGF0YS0mZ3Q7cmVhbHRpbWUgPSB0cy50dl9uc2VjICYjNDM7IE5TRUNfUEVSX1NFQyAqIHRzLnR2X3NlYzsKJiM0MzsJZGF0YS0mZ3Q7ZmxhZ3MgfD0gS1ZNX0NMT0NLX1JFQUxUSU1FIHwgS1ZNX0NMT0NLX0hPU1RfVFNDIHwKJiM0MzsJCSAgICAgICBLVk1fQ0xPQ0tfVFNDX1NUQUJMRTsKJiM0MzsKJiM0MzsJaHZfY2xvY2sudHNjX3RpbWVzdGFtcCA9IGthLSZndDttYXN0ZXJfY3ljbGVfbm93OwomIzQzOwlodl9jbG9jay5zeXN0ZW1fdGltZSA9IGthLSZndDttYXN0ZXJfa2VybmVsX25zICYjNDM7IGthLSZndDtrdm1jbG9ja19vZmZzZXQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFVzZSB0aGUgcHJlY29tcHV0ZWQgZ3Vlc3QtVFNDLWJhc2VkIG11bC9zaGlmdCBzbyB0aGF0IHRoZSBrdm1jbG9jawomIzQzOwkgKiB2YWx1ZSBtYXRjaGVzIHdoYXQgdGhlIGd1ZXN0IGNvbXB1dGVzIGZyb20gaXRzIG93biBUU0MuCiYjNDM7CSAqLwomIzQzOwlodl9jbG9jay50c2Nfc2hpZnQgPSBrYS0mZ3Q7bWFzdGVyX3RzY19zaGlmdDsKJiM0MzsJaHZfY2xvY2sudHNjX3RvX3N5c3RlbV9tdWwgPSBrYS0mZ3Q7bWFzdGVyX3RzY19tdWw7CiYjNDM7CiYjNDM7CWlmIChrdm1fY2Fwcy5oYXNfdHNjX2NvbnRyb2wpIHsKJiM0MzsJCXU2NCB0c2NfZGVsdGEgPSBkYXRhLSZndDtob3N0X3RzYyAtIGthLSZndDttYXN0ZXJfY3ljbGVfbm93OwomIzQzOwomIzQzOwkJdHNjX2RlbHRhID0ga3ZtX3NjYWxlX3RzYyh0c2NfZGVsdGEsIGthLSZndDttYXN0ZXJfdHNjX3NjYWxpbmdfcmF0aW8pOwomIzQzOwkJZGF0YS0mZ3Q7Y2xvY2sgPSBodl9jbG9jay5zeXN0ZW1fdGltZSAmIzQzOwomIzQzOwkJCSAgICAgIHB2Y2xvY2tfc2NhbGVfZGVsdGEodHNjX2RlbHRhLAomIzQzOwkJCQkJCSAgaHZfY2xvY2sudHNjX3RvX3N5c3RlbV9tdWwsCiYjNDM7CQkJCQkJICBodl9jbG9jay50c2Nfc2hpZnQpOwogCX0gZWxzZSB7Ci0JCWRhdGEtJmd0O2Nsb2NrID0gZ2V0X2t2bWNsb2NrX2Jhc2VfbnMoKSAmIzQzOyBrYS0mZ3Q7a3ZtY2xvY2tfb2Zmc2V0OwomIzQzOwkJZGF0YS0mZ3Q7Y2xvY2sgPSBfX3B2Y2xvY2tfcmVhZF9jeWNsZXMoJmFtcDtodl9jbG9jaywgZGF0YS0mZ3Q7aG9zdF90c2MpOwogCX0KLQotCXB1dF9jcHUoKTsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7I2Vsc2UKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzOyNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCBnZXRfa3ZtY2xvY2soc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2Nsb2NrX2RhdGEgKmRhdGEpCkBAIC0xNjk5LDggJiM0MzsxNzU2LDExIEBAIHN0YXRpYyB2b2lkIGdldF9rdm1jbG9jayhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fY2xvY2tfZGF0YSAqZGF0YSkKIAl1bnNpZ25lZCBzZXE7CiAKIAlkbyB7CiYjNDM7CQlkYXRhLSZndDtmbGFncyA9IDA7CiYjNDM7CiAJCXNlcSA9IHJlYWRfc2VxY291bnRfYmVnaW4oJmFtcDtrYS0mZ3Q7cHZjbG9ja19zYyk7Ci0JCV9fZ2V0X2t2bWNsb2NrKGt2bSwgZGF0YSk7CiYjNDM7CQlpZiAoIV9fZ2V0X2t2bWNsb2NrX21hc3Rlcl9jbG9jayhrdm0sIGRhdGEpKQomIzQzOwkJCWRhdGEtJmd0O2Nsb2NrID0gZ2V0X2t2bWNsb2NrX2Jhc2VfbnMoKSAmIzQzOyBrYS0mZ3Q7a3ZtY2xvY2tfb2Zmc2V0OwogCX0gd2hpbGUgKHJlYWRfc2VxY291bnRfcmV0cnkoJmFtcDtrYS0mZ3Q7cHZjbG9ja19zYywgc2VxKSk7CiB9CiAKQEAgLTE3NjIsMzYgJiM0MzsxODIyLDQ1IEBAIHN0YXRpYyB2b2lkIGt2bV9zZXR1cF9ndWVzdF9wdmNsb2NrKHN0cnVjdCBwdmNsb2NrX3ZjcHVfdGltZV9pbmZvICpyZWZfaHZfY2xvY2ssCiAKIGludCBrdm1fZ3Vlc3RfdGltZV91cGRhdGUoc3RydWN0IGt2bV92Y3B1ICp2KQogewomIzQzOwl1NjQgdGd0X3RzY19oeiwgdHNjX3RpbWVzdGFtcCwgaG9zdF90c2MsIG1hc3Rlcl90c2MsIG1hc3Rlcl9uczsKJiM0MzsJc3RydWN0IGt2bV9hcmNoICprYSBfX21heWJlX3VudXNlZCA9ICZhbXA7di0mZ3Q7a3ZtLSZndDthcmNoOwogCXN0cnVjdCBwdmNsb2NrX3ZjcHVfdGltZV9pbmZvIGh2X2Nsb2NrID0ge307Ci0JdW5zaWduZWQgbG9uZyBmbGFncywgdGd0X3RzY19raHo7Ci0JdW5zaWduZWQgc2VxOwogCXN0cnVjdCBrdm1fdmNwdV9hcmNoICp2Y3B1ID0gJmFtcDt2LSZndDthcmNoOwotCXN0cnVjdCBrdm1fYXJjaCAqa2EgPSAmYW1wO3YtJmd0O2t2bS0mZ3Q7YXJjaDsKIAlzNjQga2VybmVsX25zOwotCXU2NCB0c2NfdGltZXN0YW1wLCBob3N0X3RzYzsKLQlib29sIHVzZV9tYXN0ZXJfY2xvY2s7Ci0KLQlrZXJuZWxfbnMgPSAwOwotCWhvc3RfdHNjID0gMDsKIAogCS8qCiAJICogSWYgdGhlIGhvc3QgdXNlcyBUU0MgY2xvY2ssIHRoZW4gcGFzc3Rocm91Z2ggVFNDIGFzIHN0YWJsZQogCSAqIHRvIHRoZSBndWVzdC4KIAkgKi8KJiM0MzsjaWZkZWYgQ09ORklHX1g4Nl82NAomIzQzOwlib29sIHVzZV9tYXN0ZXJfY2xvY2s7CiYjNDM7CXVuc2lnbmVkIGludCBzZXE7CiYjNDM7CiAJZG8gewogCQlzZXEgPSByZWFkX3NlcWNvdW50X2JlZ2luKCZhbXA7a2EtJmd0O3B2Y2xvY2tfc2MpOwogCQl1c2VfbWFzdGVyX2Nsb2NrID0ga2EtJmd0O3VzZV9tYXN0ZXJfY2xvY2s7Ci0JCWlmICh1c2VfbWFzdGVyX2Nsb2NrKSB7Ci0JCQlob3N0X3RzYyA9IGthLSZndDttYXN0ZXJfY3ljbGVfbm93OwotCQkJa2VybmVsX25zID0ga2EtJmd0O21hc3Rlcl9rZXJuZWxfbnM7CiYjNDM7CQlpZiAoIXVzZV9tYXN0ZXJfY2xvY2spCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlpZiAoIWt2bV9nZXRfdGltZV9hbmRfY2xvY2tyZWFkKCZhbXA7a2VybmVsX25zLCAmYW1wO2hvc3RfdHNjKSkgewomIzQzOwkJCXVzZV9tYXN0ZXJfY2xvY2sgPSBmYWxzZTsKJiM0MzsJCQljb250aW51ZTsKIAkJfQotCX0gd2hpbGUgKHJlYWRfc2VxY291bnRfcmV0cnkoJmFtcDtrYS0mZ3Q7cHZjbG9ja19zYywgc2VxKSk7CiAKLQkvKiBLZWVwIGlycSBkaXNhYmxlZCB0byBwcmV2ZW50IGNoYW5nZXMgdG8gdGhlIGNsb2NrICovCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCXRndF90c2Nfa2h6ID0gZ2V0X2NwdV90c2Nfa2h6KCk7Ci0JaWYgKHVubGlrZWx5KHRndF90c2Nfa2h6ID09IDApKSB7Ci0JCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKJiM0MzsJCW1hc3Rlcl90c2MgPSBrYS0mZ3Q7bWFzdGVyX2N5Y2xlX25vdzsKJiM0MzsJCW1hc3Rlcl9ucyA9IGthLSZndDttYXN0ZXJfa2VybmVsX25zOwomIzQzOwl9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KCZhbXA7a2EtJmd0O3B2Y2xvY2tfc2MsIHNlcSkpOwomIzQzOyNlbHNlCiYjNDM7CWNvbnN0IGJvb2wgdXNlX21hc3Rlcl9jbG9jayA9IGZhbHNlOwomIzQzOyNlbmRpZgomIzQzOwkvKgomIzQzOwkgKiBFbnN1cmUgcmVhZGluZyB0aGUgVFNDJiM0MztmcmVxdWVuY3kgcGFpciBpcyBkb25lIG9uIHRoZSBzYW1lIENQVS4gIFdoZW4KJiM0MzsJICogTk9UIHVzaW5nIHRoZSBtYXN0ZXIgY2xvY2ssIHRoZSBUU0MgZnJlcXVlbmN5IG1heSB2YXJ5IGJldHdlZW4gQ1BVcy4KJiM0MzsJICovCiYjNDM7CXByZWVtcHRfZGlzYWJsZSgpOwomIzQzOwl0Z3RfdHNjX2h6ID0gKHU2NClnZXRfY3B1X3RzY19raHooKSAqIEhaX1BFUl9LSFo7CiYjNDM7CWlmICh1bmxpa2VseSh0Z3RfdHNjX2h6ID09IDApKSB7CiYjNDM7CQlwcmVlbXB0X2VuYWJsZSgpOwogCQlrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfQ0xPQ0tfVVBEQVRFLCB2KTsKIAkJcmV0dXJuIDE7CiAJfQpAQCAtMTgyMCwyOCAmIzQzOzE4ODksNDMgQEAgaW50IGt2bV9ndWVzdF90aW1lX3VwZGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnYpCiAJCX0KIAl9CiAKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiYjNDM7CS8qCiYjNDM7CSAqIFJlZnJlc2ggTDEmIzM5O3MgbGFzdCAmIzM0O29ic2VydmVkJiMzNDsgVFNDIHRvIG1hdGNoIHRoZSBQViBjbG9jayYjMzk7cyB0aW1lc3RhbXAsCiYjNDM7CSAqIGUuZy4gc28gdGhhdCB0aGUgZ3Vlc3QgY2FuJiMzOTt0IHNlZSBhIFRTQyB0aGF0JiMzOTtzIGJlaGluZCB0aGUgcmVmZXJlbmNlLgomIzQzOwkgKi8KJiM0MzsJdmNwdS0mZ3Q7bGFzdF9ndWVzdF90c2MgPSB0c2NfdGltZXN0YW1wOwomIzQzOwomIzQzOwlwcmVlbXB0X2VuYWJsZSgpOwogCiAJLyogV2l0aCBhbGwgdGhlIGluZm8gd2UgZ290LCBmaWxsIGluIHRoZSB2YWx1ZXMgKi8KIAogCWlmIChrdm1fY2Fwcy5oYXNfdHNjX2NvbnRyb2wpIHsKLQkJdGd0X3RzY19raHogPSBrdm1fc2NhbGVfdHNjKHRndF90c2Nfa2h6LAomIzQzOwkJdGd0X3RzY19oeiA9IGt2bV9zY2FsZV90c2ModGd0X3RzY19oeiwKIAkJCQkJICAgIHYtJmd0O2FyY2gubDFfdHNjX3NjYWxpbmdfcmF0aW8pOwotCQl0Z3RfdHNjX2toeiA9IHRndF90c2Nfa2h6ID8gOiAxOwomIzQzOwkJdGd0X3RzY19oeiA9IHRndF90c2NfaHogPyA6IDE7CiAJfQogCi0JaWYgKHVubGlrZWx5KHZjcHUtJmd0O2h3X3RzY19raHogIT0gdGd0X3RzY19raHopKSB7Ci0JCWt2bV9nZXRfdGltZV9zY2FsZShOU0VDX1BFUl9TRUMsIHRndF90c2Nfa2h6ICogMTAwMExMLAomIzQzOwlpZiAodW5saWtlbHkodmNwdS0mZ3Q7aHdfdHNjX2h6ICE9IHRndF90c2NfaHopKSB7CiYjNDM7CQlrdm1fZ2V0X3RpbWVfc2NhbGUoTlNFQ19QRVJfU0VDLCB0Z3RfdHNjX2h6LAogCQkJCSAgICZhbXA7dmNwdS0mZ3Q7cHZjbG9ja190c2Nfc2hpZnQsCiAJCQkJICAgJmFtcDt2Y3B1LSZndDtwdmNsb2NrX3RzY19tdWwpOwotCQl2Y3B1LSZndDtod190c2Nfa2h6ID0gdGd0X3RzY19raHo7CiYjNDM7CQl2Y3B1LSZndDtod190c2NfaHogPSB0Z3RfdHNjX2h6OwogCX0KIAogCWh2X2Nsb2NrLnRzY19zaGlmdCA9IHZjcHUtJmd0O3B2Y2xvY2tfdHNjX3NoaWZ0OwogCWh2X2Nsb2NrLnRzY190b19zeXN0ZW1fbXVsID0gdmNwdS0mZ3Q7cHZjbG9ja190c2NfbXVsOwotCWh2X2Nsb2NrLnRzY190aW1lc3RhbXAgPSB0c2NfdGltZXN0YW1wOwotCWh2X2Nsb2NrLnN5c3RlbV90aW1lID0ga2VybmVsX25zICYjNDM7IHYtJmd0O2t2bS0mZ3Q7YXJjaC5rdm1jbG9ja19vZmZzZXQ7Ci0JdmNwdS0mZ3Q7bGFzdF9ndWVzdF90c2MgPSB0c2NfdGltZXN0YW1wOwomIzQzOwkvKgomIzQzOwkgKiBJZiB0aGUgbWFzdGVyIGNsb2NrIGlzIE5PVCBpbiB1c2UsIHRoZSByZWZlcmVuY2UgdGltZSBwbGFjZWQgaW4gdGhlCiYjNDM7CSAqIGh2X2Nsb2NrIGlzICYjMzQ7bm93JiMzNDsuICBJZiBtYXN0ZXIgY2xvY2sgaXMgaW4gdXNlLCB0aGUgcmVmZXJlbmNlIHRpbWUgaXMKJiM0MzsJICogdGhlIG1hc3RlciBjbG9jayYjMzk7cyBzbmFwc2hvdCBmcm9tIHNvbWUgdGltZSBpbiB0aGUgcGFzdCwgbm90ICYjMzQ7bm93JiMzNDsuCiYjNDM7CSAqLwomIzQzOwlpZiAodXNlX21hc3Rlcl9jbG9jaykgewomIzQzOwkJaHZfY2xvY2sudHNjX3RpbWVzdGFtcCA9IGt2bV9yZWFkX2wxX3RzYyh2LCBtYXN0ZXJfdHNjKTsKJiM0MzsJCWh2X2Nsb2NrLnN5c3RlbV90aW1lID0gbWFzdGVyX25zICYjNDM7IHYtJmd0O2t2bS0mZ3Q7YXJjaC5rdm1jbG9ja19vZmZzZXQ7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlodl9jbG9jay50c2NfdGltZXN0YW1wID0gdHNjX3RpbWVzdGFtcDsKJiM0MzsJCWh2X2Nsb2NrLnN5c3RlbV90aW1lID0ga2VybmVsX25zICYjNDM7IHYtJmd0O2t2bS0mZ3Q7YXJjaC5rdm1jbG9ja19vZmZzZXQ7CiYjNDM7CX0KIAogCS8qIElmIHRoZSBob3N0IHVzZXMgVFNDIGNsb2Nrc291cmNlLCB0aGVuIGl0IGlzIHN0YWJsZSAqLwogCWh2X2Nsb2NrLmZsYWdzID0gMDsKQEAgLTE5MDMsNjMgJiM0MzsxOTg3LDIyIEBAIGludCBrdm1fZ3Vlc3RfdGltZV91cGRhdGUoc3RydWN0IGt2bV92Y3B1ICp2KQogICogd2FsbGNsb2NrIGFuZCBrdm1jbG9jayB0aW1lcywgYW5kIHN1YnRyYWN0aW5nIG9uZSBmcm9tIHRoZSBvdGhlci4KICAqCiAgKiBGYWxsIGJhY2sgdG8gdXNpbmcgdGhlaXIgdmFsdWVzIGF0IHNsaWdodGx5IGRpZmZlcmVudCBtb21lbnRzIGJ5Ci0gKiBjYWxsaW5nIGt0aW1lX2dldF9yZWFsX25zKCkgYW5kIGdldF9rdm1jbG9ja19ucygpIHNlcGFyYXRlbHkuCiYjNDM7ICogY2FsbGluZyBrdGltZV9nZXRfcmVhbF9ucygpIGFuZCBnZXRfa3ZtY2xvY2soKSBzZXBhcmF0ZWx5LgogICovCiB1aW50NjRfdCBrdm1fZ2V0X3dhbGxfY2xvY2tfZXBvY2goc3RydWN0IGt2bSAqa3ZtKQogewotI2lmZGVmIENPTkZJR19YODZfNjQKLQlzdHJ1Y3QgcHZjbG9ja192Y3B1X3RpbWVfaW5mbyBodl9jbG9jazsKLQlzdHJ1Y3Qga3ZtX2FyY2ggKmthID0gJmFtcDtrdm0tJmd0O2FyY2g7Ci0JdW5zaWduZWQgbG9uZyBzZXEsIGxvY2FsX3RzY19raHo7Ci0Jc3RydWN0IHRpbWVzcGVjNjQgdHM7Ci0JdWludDY0X3QgaG9zdF90c2M7Ci0KLQlkbyB7Ci0JCXNlcSA9IHJlYWRfc2VxY291bnRfYmVnaW4oJmFtcDtrYS0mZ3Q7cHZjbG9ja19zYyk7Ci0KLQkJbG9jYWxfdHNjX2toeiA9IDA7Ci0JCWlmICgha2EtJmd0O3VzZV9tYXN0ZXJfY2xvY2spCi0JCQlicmVhazsKLQotCQkvKgotCQkgKiBUaGUgVFNDIHJlYWQgYW5kIHRoZSBjYWxsIHRvIGdldF9jcHVfdHNjX2toeigpIG11c3QgaGFwcGVuCi0JCSAqIG9uIHRoZSBzYW1lIENQVS4KLQkJICovCi0JCWdldF9jcHUoKTsKLQotCQlsb2NhbF90c2Nfa2h6ID0gZ2V0X2NwdV90c2Nfa2h6KCk7Ci0KLQkJaWYgKGxvY2FsX3RzY19raHogJmFtcDsmYW1wOwotCQkgICAgIWt2bV9nZXRfd2FsbHRpbWVfYW5kX2Nsb2NrcmVhZCgmYW1wO3RzLCAmYW1wO2hvc3RfdHNjKSkKLQkJCWxvY2FsX3RzY19raHogPSAwOyAvKiBGYWxsIGJhY2sgdG8gb2xkIG1ldGhvZCAqLwotCi0JCXB1dF9jcHUoKTsKLQotCQkvKgotCQkgKiBUaGVzZSB2YWx1ZXMgbXVzdCBiZSBzbmFwc2hvdHRlZCB3aXRoaW4gdGhlIHNlcWNvdW50IGxvb3AuCi0JCSAqIEFmdGVyIHRoYXQsIGl0JiMzOTtzIGp1c3QgbWF0aGVtYXRpY3Mgd2hpY2ggY2FuIGhhcHBlbiBvbiBhbnkKLQkJICogQ1BVIGF0IGFueSB0aW1lLgotCQkgKi8KLQkJaHZfY2xvY2sudHNjX3RpbWVzdGFtcCA9IGthLSZndDttYXN0ZXJfY3ljbGVfbm93OwotCQlodl9jbG9jay5zeXN0ZW1fdGltZSA9IGthLSZndDttYXN0ZXJfa2VybmVsX25zICYjNDM7IGthLSZndDtrdm1jbG9ja19vZmZzZXQ7CiYjNDM7CXN0cnVjdCBrdm1fY2xvY2tfZGF0YSBkYXRhOwogCi0JfSB3aGlsZSAocmVhZF9zZXFjb3VudF9yZXRyeSgmYW1wO2thLSZndDtwdmNsb2NrX3NjLCBzZXEpKTsKJiM0MzsJZ2V0X2t2bWNsb2NrKGt2bSwgJmFtcDtkYXRhKTsKIAogCS8qCi0JICogSWYgdGhlIGNvbmRpdGlvbnMgd2VyZSByaWdodCwgYW5kIG9idGFpbmluZyB0aGUgd2FsbGNsb2NrJiM0MztUU0Mgd2FzCi0JICogc3VjY2Vzc2Z1bCwgY2FsY3VsYXRlIHRoZSBLVk0gY2xvY2sgYXQgdGhlIGNvcnJlc3BvbmRpbmcgdGltZSBhbmQKLQkgKiBzdWJ0cmFjdCBvbmUgZnJvbSB0aGUgb3RoZXIgdG8gZ2V0IHRoZSBndWVzdCYjMzk7cyBlcG9jaCBpbiBuYW5vc2Vjb25kcwotCSAqIHNpbmNlIDE5NzAtMDEtMDEuCiYjNDM7CSAqIElmIGdldF9rdm1jbG9jaygpIGNhcHR1cmVkIGJvdGggd2FsbGNsb2NrIGFuZCBrdm1jbG9jayBmcm9tIHRoZQomIzQzOwkgKiBzYW1lIFRTQyByZWFkaW5nLCB1c2UgdGhlbSBmb3IgYSBwcmVjaXNlIGVwb2NoIGNhbGN1bGF0aW9uLgogCSAqLwotCWlmIChsb2NhbF90c2Nfa2h6KSB7Ci0JCWt2bV9nZXRfdGltZV9zY2FsZShOU0VDX1BFUl9TRUMsIGxvY2FsX3RzY19raHogKiBOU0VDX1BFUl9VU0VDLAotCQkJCSAgICZhbXA7aHZfY2xvY2sudHNjX3NoaWZ0LAotCQkJCSAgICZhbXA7aHZfY2xvY2sudHNjX3RvX3N5c3RlbV9tdWwpOwotCQlyZXR1cm4gdHMudHZfbnNlYyAmIzQzOyBOU0VDX1BFUl9TRUMgKiB0cy50dl9zZWMgLQotCQkJX19wdmNsb2NrX3JlYWRfY3ljbGVzKCZhbXA7aHZfY2xvY2ssIGhvc3RfdHNjKTsKLQl9Ci0jZW5kaWYKLQlyZXR1cm4ga3RpbWVfZ2V0X3JlYWxfbnMoKSAtIGdldF9rdm1jbG9ja19ucyhrdm0pOwomIzQzOwlpZiAoZGF0YS5mbGFncyAmYW1wOyBLVk1fQ0xPQ0tfUkVBTFRJTUUpCiYjNDM7CQlyZXR1cm4gZGF0YS5yZWFsdGltZSAtIGRhdGEuY2xvY2s7CiYjNDM7CiYjNDM7CXJldHVybiBrdGltZV9nZXRfcmVhbF9ucygpIC0gZGF0YS5jbG9jazsKIH0KIAogLyoKQEAgLTI1ODMsNyAmIzQzOzI2MjYsNyBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpCiAJCQltYXJrX3RzY191bnN0YWJsZSgmIzM0O0tWTSBkaXNjb3ZlcmVkIGJhY2t3YXJkcyBUU0MmIzM0Oyk7CiAKIAkJaWYgKGt2bV9jaGVja190c2NfdW5zdGFibGUoKSkgewotCQkJdTY0IG9mZnNldCA9IGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXQodmNwdSwKJiM0MzsJCQl1NjQgb2Zmc2V0ID0ga3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldCh2Y3B1LCByZHRzYygpLAogCQkJCQkJdmNwdS0mZ3Q7YXJjaC5sYXN0X2d1ZXN0X3RzYyk7CiAJCQlrdm1fdmNwdV93cml0ZV90c2Nfb2Zmc2V0KHZjcHUsIG9mZnNldCk7CiAJCQlpZiAoIXZjcHUtJmd0O2FyY2guZ3Vlc3RfdHNjX3Byb3RlY3RlZCkKQEAgLTY4NjYsNiAmIzQzOzY5MDksNyBAQCBzdGF0aWMgdm9pZCBwdmNsb2NrX2lycV93b3JrX2ZuKHN0cnVjdCBpcnFfd29yayAqdykKIH0KIAogc3RhdGljIERFRklORV9JUlFfV09SSyhwdmNsb2NrX2lycV93b3JrLCBwdmNsb2NrX2lycV93b3JrX2ZuKTsKJiM0MzsjZW5kaWYKIAogLyoKICAqIE5vdGlmaWNhdGlvbiBhYm91dCBwdmNsb2NrIGd0b2QgZGF0YSB1cGRhdGUuCkBAIC02ODczLDI2ICYjNDM7NjkxNywyNiBAQCBzdGF0aWMgREVGSU5FX0lSUV9XT1JLKHB2Y2xvY2tfaXJxX3dvcmssIHB2Y2xvY2tfaXJxX3dvcmtfZm4pOwogc3RhdGljIGludCBwdmNsb2NrX2d0b2Rfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgdW51c2VkLAogCQkJICAgICAgIHZvaWQgKnByaXYpCiB7Ci0Jc3RydWN0IHB2Y2xvY2tfZ3RvZF9kYXRhICpndG9kID0gJmFtcDtwdmNsb2NrX2d0b2RfZGF0YTsKIAlzdHJ1Y3QgdGltZWtlZXBlciAqdGsgPSBwcml2OwogCiAJdXBkYXRlX3B2Y2xvY2tfZ3RvZCh0ayk7CiAKJiM0MzsjaWZkZWYgQ09ORklHX1g4Nl82NAogCS8qCiAJICogRGlzYWJsZSBtYXN0ZXIgY2xvY2sgaWYgaG9zdCBkb2VzIG5vdCB0cnVzdCwgb3IgZG9lcyBub3QgdXNlLAogCSAqIFRTQyBiYXNlZCBjbG9ja3NvdXJjZS4gRGVsZWdhdGUgcXVldWVfd29yaygpIHRvIGlycV93b3JrIGFzCiAJICogdGhpcyBpcyBpbnZva2VkIHdpdGggdGtfY29yZS5zZXEgd3JpdGUgaGVsZC4KIAkgKi8KLQlpZiAoIWd0b2RfaXNfYmFzZWRfb25fdHNjKGd0b2QtJmd0O2Nsb2NrLnZjbG9ja19tb2RlKSAmYW1wOyZhbXA7CiYjNDM7CWlmICghZ3RvZF9pc19iYXNlZF9vbl90c2MocHZjbG9ja19ndG9kX2RhdGEuY2xvY2sudmNsb2NrX21vZGUpICZhbXA7JmFtcDsKIAkgICAgYXRvbWljX3JlYWQoJmFtcDtrdm1fZ3Vlc3RfaGFzX21hc3Rlcl9jbG9jaykgIT0gMCkKIAkJaXJxX3dvcmtfcXVldWUoJmFtcDtwdmNsb2NrX2lycV93b3JrKTsKJiM0MzsjZW5kaWYKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBwdmNsb2NrX2d0b2Rfbm90aWZpZXIgPSB7CiAJLm5vdGlmaWVyX2NhbGwgPSBwdmNsb2NrX2d0b2Rfbm90aWZ5LAogfTsKLSNlbmRpZgogCiB2b2lkIGt2bV9zZXR1cF94c3NfY2Fwcyh2b2lkKQogewpAQCAtNzExMSw5ICYjNDM7NzE1NSw5IEBAIGludCBrdm1feDg2X3ZlbmRvcl9pbml0KHN0cnVjdCBrdm1feDg2X2luaXRfb3BzICpvcHMpCiAKIAlpZiAocGlfaW5qZWN0X3RpbWVyID09IC0xKQogCQlwaV9pbmplY3RfdGltZXIgPSBob3VzZWtlZXBpbmdfZW5hYmxlZChIS19UWVBFX1RJTUVSKTsKLSNpZmRlZiBDT05GSUdfWDg2XzY0CiAJcHZjbG9ja19ndG9kX3JlZ2lzdGVyX25vdGlmaWVyKCZhbXA7cHZjbG9ja19ndG9kX25vdGlmaWVyKTsKIAomIzQzOyNpZmRlZiBDT05GSUdfWDg2XzY0CiAJaWYgKGh5cGVydmlzb3JfaXNfdHlwZShYODZfSFlQRVJfTVNfSFlQRVJWKSkKIAkJc2V0X2h2X3RzY2NoYW5nZV9jYihrdm1faHlwZXJ2X3RzY19ub3RpZmllcik7CiAjZW5kaWYKQEAgLTcxNzAsOCAmIzQzOzcyMTQsOCBAQCB2b2lkIGt2bV94ODZfdmVuZG9yX2V4aXQodm9pZCkKIAkJCQkJICAgIENQVUZSRVFfVFJBTlNJVElPTl9OT1RJRklFUik7CiAJCWNwdWhwX3JlbW92ZV9zdGF0ZV9ub2NhbGxzKENQVUhQX0FQX1g4Nl9LVk1fQ0xLX09OTElORSk7CiAJfQotI2lmZGVmIENPTkZJR19YODZfNjQKIAlwdmNsb2NrX2d0b2RfdW5yZWdpc3Rlcl9ub3RpZmllcigmYW1wO3B2Y2xvY2tfZ3RvZF9ub3RpZmllcik7CiYjNDM7I2lmZGVmIENPTkZJR19YODZfNjQKIAlpcnFfd29ya19zeW5jKCZhbXA7cHZjbG9ja19pcnFfd29yayk7CiAJY2FuY2VsX3dvcmtfc3luYygmYW1wO3B2Y2xvY2tfZ3RvZF93b3JrKTsKICNlbmRpZgpAQCAtOTQ0MCw2ICYjNDM7OTQ4NCw4IEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJcmV0dXJuOwogCXZjcHVfbG9hZCh2Y3B1KTsKIAlrdm1fc3luY2hyb25pemVfdHNjKHZjcHUsIE5VTEwpOwomIzQzOwlpZiAoIXZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC51c2VfbWFzdGVyX2Nsb2NrKQomIzQzOwkJa3ZtX3VwZGF0ZV9tYXN0ZXJjbG9jayh2Y3B1LSZndDtrdm0pOwogCXZjcHVfcHV0KHZjcHUpOwogCiAJLyogcG9sbCBjb250cm9sIGVuYWJsZWQgYnkgZGVmYXVsdCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5oIGIvYXJjaC94ODYva3ZtL3g4Ni5oCmluZGV4IDBmNTkxOWIwOTJlNDcuLjFkOWE2NjA0OGIwMWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS94ODYuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmgKQEAgLTMzNSw3ICYjNDM7MzM1LDggQEAgdTY0IGt2bV9zY2FsZV90c2ModTY0IHRzYywgdTY0IHJhdGlvKTsKIHU2NCBrdm1fcmVhZF9sMV90c2Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgaG9zdF90c2MpOwogdTY0IGt2bV9jYWxjX25lc3RlZF90c2Nfb2Zmc2V0KHU2NCBsMV9vZmZzZXQsIHU2NCBsMl9vZmZzZXQsIHU2NCBsMl9tdWx0aXBsaWVyKTsKIHU2NCBrdm1fY2FsY19uZXN0ZWRfdHNjX211bHRpcGxpZXIodTY0IGwxX211bHRpcGxpZXIsIHU2NCBsMl9tdWx0aXBsaWVyKTsKLXU2NCBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHRhcmdldF90c2MpOwomIzQzO3U2NCBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGhvc3RfdHNjLAomIzQzOwkJCSAgICAgIHU2NCB0YXJnZXRfdHNjKTsKIHZvaWQga3ZtX3ZjcHVfd3JpdGVfdHNjX29mZnNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBsMV9vZmZzZXQpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgYWRqdXN0X3RzY19vZmZzZXRfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg3OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEyNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtWTSB4ODYgVFNDIEhhbmRsaW5nIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIHRoYXQmIzM5O3MgdHdlYWtpbmcgS1ZNJiMzOTtzIHg4NiBUU0MgaW1wbGVtZW50YXRpb24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgYSBmYWlybHkgZGVlcCBkaXZlIGludG8gaG93IEtWTSBoYW5kbGVzIHRpbWUtcmVsYXRlZCBhc3BlY3RzIHdpdGhpbiB0aGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoZSBjaGFuZ2VzIHRvdWNoIGEgbG90IG9mIGNvcmUgS1ZNIGNvZGUsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBUaW1lIFN0YW1wIENvdW50ZXIgKFRTQykuCgpNeSBmaXJzdCB0aG91Z2h0IGlzIHRoZSBhcmNoaXRlY3R1cmFsIGltcGFjdC4gVGhleSYjMzk7dmUgdXBkYXRlZCBkYXRhIHN0cnVjdHVyZXMgbGlrZSBga3ZtX3ZjcHVfYXJjaGAgYW5kIGBrdm1fYXJjaGAgdG8gYWNjb21tb2RhdGUgdGhlIFRTQyBjaGFuZ2VzLCByZW5hbWluZyBgaHdfdHNjX2toemAgdG8gYGh3X3RzY19oemAsIGFuZCBpbnRyb2R1Y2luZyBuZXcgdmFyaWFibGVzIHJlbGF0ZWQgdG8gc2NhbGluZyByYXRpb3MgYW5kIHNoaWZ0cy4gVGhpcyBpbW1lZGlhdGVseSBzdWdnZXN0cyBhIHNoaWZ0IGluIGhvdyBUU0MgZnJlcXVlbmN5IGlzIG1hbmFnZWQgYW5kIGNhbGN1bGF0ZWQuIEkgYWxzbyBub3RpY2UgdGhleSYjMzk7cmUgbm93IHBhc3NpbmcgdGhlIGhvc3QgVFNDIHZhbHVlIHRvIGBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0YCwgd2hpY2ggaGludHMgYXQgaW1wcm92ZW1lbnRzIGluIHN5bmNocm9uaXphdGlvbiBhbmQgb2Zmc2V0IGNhbGN1bGF0aW9uIGJldHdlZW4gaG9zdCBhbmQgZ3Vlc3QuIFRoZSBjaGFuZ2VzIHRvIGBrdm1fY3B1aWRgIGFuZCBga3ZtX3NldF9tc3JfY29tbW9uYCBjb25maXJtIHRoaXMgZm9jdXMgb24gcmVmaW5lZCBUU0MgaW5mb3JtYXRpb24gZXhjaGFuZ2UuCgpUaGUgZGVwZW5kZW5jZSBvbiBgWDg2X0ZFQVRVUkVfQ09OU1RBTlRfVFNDYCBpbiBgc3ZtX2hhcmR3YXJlX3NldHVwYCBhbmQgYHNldHVwX3ZtY3NfY29uZmlnYCBpcyBpbXBvcnRhbnQg4oCTIGl0IGluZGljYXRlcyB0aGF0IHRoZXNlIHVwZGF0ZXMgYXJlIG9wdGltaXplZCBmb3Igc3lzdGVtcyB3aGVyZSB0aGUgVFNDIGlzIGtub3duIHRvIGJlIHN0YWJsZSwgc28gaXQmIzM5O3MgZ29vZCB0aGF0IHRoZXkmIzM5O3JlIGV4cGxpY2l0bHkgY2hlY2tpbmcgZm9yIHRoYXQuIEl0IGFsc28gZmVlbHMgbGlrZSB0aGVzZSBjaGFuZ2VzIGFyZSBnZWFyZWQgdG93YXJkcyBtb3JlIHByZWNpc2UgZ3Vlc3QgdGltZSBrZWVwaW5nLiBUaGV5JiMzOTtyZSByZWZpbmluZyBob3cgdGhlIGd1ZXN0IFRTQyBpcyBjb21wdXRlZCwgbWFraW5nIGl0IGhhbmRsZSBuZWdhdGl2ZSBkZWx0YXMgZ3JhY2VmdWxseS4gUmVmYWN0b3Jpbmcgb2YgdGhlIGBrdm1jbG9ja2AgZnVuY3Rpb25zIGFuZCB0aGUgdXNlIG9mIGB0Z3RfdHNjX2h6YCBpbnN0ZWFkIG9mIGB0Z3RfdHNjX2toemAgaW4gYGt2bV9ndWVzdF90aW1lX3VwZGF0ZWAgZnVydGhlciBlbXBoYXNpemUgdGhlIGZvY3VzIG9uIGluY3JlYXNlZCBhY2N1cmFjeSBhbmQgY29uc2lzdGVuY3kuCgpOb3csIGFzIGEgS1ZNIGV4cGVydCwgSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBicm9hZGVyIGltcGxpY2F0aW9ucy4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgY29yZSBmdW5jdGlvbnMsIGluY2x1ZGluZyBga3ZtX3N5bmNocm9uaXplX3RzY2AsIGBrdm1fZ3Vlc3RfdGltZV91cGRhdGVgLCBga3ZtX2dldF93YWxsX2Nsb2NrX2Vwb2NoYCwgYGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXRgLCBhbmQgYGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZWAuIEdpdmVuIG15IGtub3dsZWRnZSBvZiB0aGUgY29kZWJhc2UsIEkga25vdyB0aGVzZSBhcmUgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgaW9jdGxzIG9yIE1TUiB3cml0ZXMuIFRoaXMgbWVhbnMgdGhleSBhcmUgcmVhY2hhYmxlIGZyb20gYSBmdXp6ZXIgKHN5emthbGxlciwgaW4gbXkgY2FzZSkuCgpFc3NlbnRpYWxseSwgdGhlc2UgVFNDIGNoYW5nZXMgYXJlIGFuIGludGVncmFsIHBhcnQgb2YgS1ZNLCBtYWtpbmcgdGhlbSBhIHZlcnkgdmlhYmxlIHRhcmdldCBmb3IgZnV6emluZy4gV2l0aCB0aGlzIGluIG1pbmQsIHRoZSByZWZhY3RvcmluZyBhbmQgYXJndW1lbnQgYWRkaXRpb25zIGFyZSByZWFsbHkgaW1wb3J0YW50LiBBbnkgY2hhbmdlcyB0byBzeW5jaHJvbml6YXRpb24gb3Igb2Zmc2V0IGNhbGN1bGF0aW9ucyB3aWxsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyB0YXJnZXRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAwOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVx0Ym9vbCBcJiMzNDtDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTcyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTczOmNvbmZpZyBLVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzQtXHRib29sIFwmIzM0O0kvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgzOmNvbmZpZyBLVk1fU01NXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODQtXHRib29sIFwmIzM0O1N5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTkzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTk0OmNvbmZpZyBLVk1fSFlQRVJWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTUtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNy1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwODpjb25maWcgS1ZNX1hFTlxuYXJjaC94ODYva3ZtL0tjb25maWctMjA5LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNzpjb25maWcgS1ZNX1BST1ZFX01NVVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE4LVx0Ym9vbCBcJiMzNDtQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjI5LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMwOmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cdGJvb2xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMzpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xuYXJjaC94ODYva3ZtL0tjb25maWctMjM0LVx0aW50IFwmIzM0O01heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDk1MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtWTSB4ODYgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBLVk0geDg2IHBhdGNoLiBGaXJzdCwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoaXMgaXMgS1ZNLXNwZWNpZmljLCB3aGljaCBpcyBhIGdpdmVuLCBhbmQgd2UmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IEtWTSBpcyBpbmRlZWQgZW5hYmxlZC4gRGlnZ2luZyBkZWVwZXIsIGl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgYXJjaC94ODYva3ZtL3g4Ni5jYCwgYGFyY2gveDg2L2t2bS9zdm0vc3ZtLmNgLCBhbmQgYGFyY2gveDg2L2t2bS92bXgvdm14LmNgLiBHaXZlbiB0aG9zZSBmaWxlcywgd2UmIzM5O3JlIGxpa2VseSBsb29raW5nIGF0IGNoYW5nZXMgcmVsYXRlZCB0byBlaXRoZXIgSW50ZWwgb3IgQU1EIHZpcnR1YWxpemF0aW9uIGV4dGVuc2lvbnMsIHNvIGp1c3QgZW5hYmxpbmcgYEtWTWAgc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIHRoZSBidWlsZCByZXF1aXJlbWVudHMuCgpOb3csIGxldCYjMzk7cyBnZXQgaW50byB0aGUgZnVuY3Rpb25zIHRoZSBwYXRjaCBpcyB0YXJnZXRpbmcuIEkgc2VlOgoKKiAgIGBrdm1fc3luY2hyb25pemVfdHNjYAoqICAgYGt2bV9ndWVzdF90aW1lX3VwZGF0ZWAKKiAgIGBrdm1fZ2V0X3dhbGxfY2xvY2tfZXBvY2hgCiogICBga3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldGAKKiAgIGBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGVgCgpPa2F5LCBhbmQgbm93IHdlIG5lZWQgdG8gY29uc2lkZXIgaWYgdGhlc2UgYXJlIGhvdCBwYXRoIGZ1bmN0aW9ucy4gSXQgbG9va3MgbGlrZSBga3ZtX2d1ZXN0X3RpbWVfdXBkYXRlYCB3aWxsIGdldCBjYWxsZWQgcGVyaW9kaWNhbGx5LCBvciB3aGVuIGV4aXRzIG9jY3VyLCBwcm9iYWJseSBhIHByZXR0eSBjb21tb24gb3BlcmF0aW9uLiBga3ZtX3N5bmNocm9uaXplX3RzY2AgaXMgdHJpZ2dlcmVkIGJ5IE1TUiB3cml0ZXMsIHNvIGFueXRoaW5nIHdyaXRpbmcgdGhlIFRTQyB3aWxsIGJlIGNhbGxpbmcgdGhhdC4gYGt2bV9nZXRfd2FsbF9jbG9ja19lcG9jaGAgaGFwcGVucyBvbiBgS1ZNX0dFVF9DTE9DS2AgaW9jdGxzIGFuZCBga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlYCBpcyB0aWVkIHRvIHZDUFUgY3JlYXRpb24sIHdoaWNoIGlzIGFsc28gYSBmcmVxdWVudCBvcGVyYXRpb24uCgpGaW5hbGx5LCBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGV4cG9ydGVkIGZ1bmN0aW9ucyBvciBzdGF0aWNzLiBJdCBhcHBlYXJzIG5vbmUgb2YgdGhlc2UgYXJlIHN0YXRpYywgd2hpY2ggaW1wbGllcyB0aGF0IHRoZXkmIzM5O3JlIGJlaW5nIHVzZWQgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhlaXIgb3JpZ2luYWwgc291cmNlIGZpbGVzLCB3aGljaCBtZWFucyB3ZSBtaWdodCBiZSBkZWFsaW5nIHdpdGggYW4gQVBJIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fc3luY2hyb25pemVfdHNjJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbXNycy5jPTE0NDI9aW50IGt2bV9zZXRfbXNyX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXG4tLVxuYXJjaC94ODYva3ZtL21zcnMuYy0xNjMxLVx0XHRpZiAobXNyX2luZm8tXHUwMDNlaG9zdF9pbml0aWF0ZWQpIHtcbmFyY2gveDg2L2t2bS9tc3JzLmM6MTYzMjpcdFx0XHRrdm1fc3luY2hyb25pemVfdHNjKHZjcHUsIFx1MDAyNmRhdGEpO1xuYXJjaC94ODYva3ZtL21zcnMuYy0xNjMzLVx0XHR9IGVsc2UgaWYgKCF2Y3B1LVx1MDAzZWFyY2guZ3Vlc3RfdHNjX3Byb3RlY3RlZCkge1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz0xMjQxPXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fY2hlY2tfdHNjX3Vuc3RhYmxlKHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTEyNTgtICovXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTI1OTpzdGF0aWMgdm9pZCBfX2t2bV9zeW5jaHJvbml6ZV90c2Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgb2Zmc2V0LCB1NjQgdHNjLFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEyNjAtXHRcdFx0XHQgIHU2NCBucywgYm9vbCBtYXRjaGVkLCBib29sIHVzZXJfc2V0X3RzYylcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTMxMi1cbmFyY2gveDg2L2t2bS94ODYuYzoxMzEzOnZvaWQga3ZtX3N5bmNocm9uaXplX3RzYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqdXNlcl92YWx1ZSlcbmFyY2gveDg2L2t2bS94ODYuYy0xMzE0LXtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTM3Ni1cbmFyY2gveDg2L2t2bS94ODYuYzoxMzc3Olx0X19rdm1fc3luY2hyb25pemVfdHNjKHZjcHUsIG9mZnNldCwgZGF0YSwgbnMsIG1hdGNoZWQsICEhdXNlcl92YWx1ZSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtMTM3OC1cdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnRzY193cml0ZV9sb2NrLCBmbGFncyk7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTMzMzg9c3RhdGljIGludCBrdm1fYXJjaF90c2Nfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0zMzYzLVxuYXJjaC94ODYva3ZtL3g4Ni5jOjMzNjQ6XHRcdF9fa3ZtX3N5bmNocm9uaXplX3RzYyh2Y3B1LCBvZmZzZXQsIHRzYywgbnMsIG1hdGNoZWQsIHRydWUpO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTMzNjUtXHRcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnRzY193cml0ZV9sb2NrLCBmbGFncyk7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTk0ODE9dm9pZCBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy05NDg1LVx0dmNwdV9sb2FkKHZjcHUpO1xuYXJjaC94ODYva3ZtL3g4Ni5jOjk0ODY6XHRrdm1fc3luY2hyb25pemVfdHNjKHZjcHUsIE5VTEwpO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTk0ODctXHRpZiAoIXZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gudXNlX21hc3Rlcl9jbG9jaylcbi0tXG5hcmNoL3g4Ni9rdm0veDg2Lmg9MzMxPWludCBrdm1fZ3Vlc3RfdGltZV91cGRhdGUoc3RydWN0IGt2bV92Y3B1ICp2KTtcbmFyY2gveDg2L2t2bS94ODYuaC0zMzItXG5hcmNoL3g4Ni9rdm0veDg2Lmg6MzMzOnZvaWQga3ZtX3N5bmNocm9uaXplX3RzYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqdXNlcl92YWx1ZSk7XG5hcmNoL3g4Ni9rdm0veDg2LmgtMzM0LXU2NCBrdm1fc2NhbGVfdHNjKHU2NCB0c2MsIHU2NCByYXRpbyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDA6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3OTAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggbG9va3MgbGlrZSBpdCYjMzk7cyBkaWdnaW5nIGludG8gdGhlIGhlYXJ0IG9mIEtWTSYjMzk7cyBUU0Mgc2NhbGluZyBhbmQgbWFzdGVyIGNsb2NrIG1lY2hhbmlzbXMuIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBhcmVhLCBhbmQgdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgbWVhbnMgaXQmIzM5O3MgZGVmaW5pdGVseSBmdXp6YWJsZS4gVGltZSB0byBkaWcgaW4uCgpNeSBmb2N1cyBzaG91bGQgYmUgb24gdGhlc2Uga2V5IHN5bWJvbHM6IGBrdm1fc3luY2hyb25pemVfdHNjYCwgYGt2bV9ndWVzdF90aW1lX3VwZGF0ZWAsIGBrdm1fZ2V0X3dhbGxfY2xvY2tfZXBvY2hgLCBga3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldGAsIGFuZCBga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlYC4gVGhleSBzZWVtIGNlbnRyYWwgdG8gdGhlIGNoYW5nZXMuCgpOb3csIGNvbmZpZ3VyYXRpb24uICBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBmdXp6aW5nIHNldHVwIGNhbiBhY3R1YWxseSBoaXQgdGhpcyBjb2RlLiBJIG5lZWQgdG8gZW5hYmxlIHNvbWUgS1ZNIGNvbmZpZ3MuIFJpZ2h0LCBsZXQmIzM5O3Mgc3RhcnQgd2l0aCBgS1ZNYCwgYnV0IEkgYmV0IGZvciBhY3R1YWwgZXhlY3V0aW9uLCBJJiMzOTtsbCBhbHNvIG5lZWQgZWl0aGVyIGBLVk1fSU5URUxgIG9yIGBLVk1fQU1EYC4gVGhlIGluc3RydWN0aW9ucyBzYXkgdG8gb25seSBhZGQgYEtWTWAsIGBLVk1fSU5URUxgLCBhbmQgYEtWTV9BTURgIHRvIGBFbmFibGVDb25maWdzYCwgd2l0aG91dCB0aGUgYENPTkZJR19gIHByZWZpeC4KCkJlZm9yZSBJIG1vdmUgb24sIGxldCBtZSBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGt2bV9nZXRfd2FsbF9jbG9ja19lcG9jaGAuIFRoYXQgb25lIHNlZW1zIGludGVyZXN0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAwOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9nZXRfd2FsbF9jbG9ja19lcG9jaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21zcnMuYz0xMjI0PXN0YXRpYyB2b2lkIGt2bV93cml0ZV93YWxsX2Nsb2NrKHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3Qgd2FsbF9jbG9jaywgaW50IHNlY19oaV9vZnMpXG4tLVxuYXJjaC94ODYva3ZtL21zcnMuYy0xMjQ2LVxuYXJjaC94ODYva3ZtL21zcnMuYzoxMjQ3Olx0d2FsbF9uc2VjID0ga3ZtX2dldF93YWxsX2Nsb2NrX2Vwb2NoKGt2bSk7XG5hcmNoL3g4Ni9rdm0vbXNycy5jLTEyNDgtXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTE4MjM9aW50IGt2bV9ndWVzdF90aW1lX3VwZGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnYpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTE5OTEtICovXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTk5Mjp1aW50NjRfdCBrdm1fZ2V0X3dhbGxfY2xvY2tfZXBvY2goc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC94ODYva3ZtL3g4Ni5jLTE5OTMte1xuLS1cbmFyY2gveDg2L2t2bS94ODYuaD0zMjg9dTY0IGdldF9rdm1jbG9ja19ucyhzdHJ1Y3Qga3ZtICprdm0pO1xuYXJjaC94ODYva3ZtL3g4Ni5oOjMyOTp1aW50NjRfdCBrdm1fZ2V0X3dhbGxfY2xvY2tfZXBvY2goc3RydWN0IGt2bSAqa3ZtKTtcbmFyY2gveDg2L2t2bS94ODYuaC0zMzAtYm9vbCBrdm1fZ2V0X21vbm90b25pY19hbmRfY2xvY2tyZWFkKHM2NCAqa2VybmVsX25zLCB1NjQgKnRzY190aW1lc3RhbXApO1xuLS1cbmFyY2gveDg2L2t2bS94ZW4uYz0zOT1zdGF0aWMgaW50IGt2bV94ZW5fc2hhcmVkX2luZm9faW5pdChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTYzLVx0ICovXG5hcmNoL3g4Ni9rdm0veGVuLmM6NjQ6XHR3YWxsX25zZWMgPSBrdm1fZ2V0X3dhbGxfY2xvY2tfZXBvY2goa3ZtKTtcbmFyY2gveDg2L2t2bS94ZW4uYy02NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzg1NwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLiBUaGlzIGBrdm1fZ2V0X3dhbGxfY2xvY2tfZXBvY2hgIGZ1bmN0aW9uLi4uIHJpZ2h0LCBpdCYjMzk7cyB1c2VkIGJ5IFhlbiBhbmQgaW50ZXJhY3RzIHdpdGggTW9kZWwtU3BlY2lmaWMgUmVnaXN0ZXJzIChNU1JzKS4gU28sIGl0JiMzOTtzIHByZXR0eSBsb3ctbGV2ZWwsIGxpa2VseSBkZWFsaW5nIHdpdGggdGltZWtlZXBpbmcgc3luY2hyb25pemF0aW9uIGJldHdlZW4gdGhlIGh5cGVydmlzb3IgYW5kIHRoZSBndWVzdC4KCioqRGlnZ2luZyBpbnRvIFRpbWVrZWVwaW5nOiBVbmRlcnN0YW5kaW5nIGBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0YCoqCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgKmhvdyogaXQmIzM5O3Mgb3BlcmF0aW5nLiBNeSBuZXh0IHN0ZXAgaXMgZGVmaW5pdGVseSBnb2luZyB0byBiZSBkaXZpbmcgaW50byBga3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldGAuIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWluIHRoaXMgZnVuY3Rpb24gZmlndXJlcyBvdXQgdGhlIFRpbWUgU3RhbXAgQ291bnRlciAoVFNDKSBvZmZzZXQgYXQgdGhlIExldmVsIDEgKEwxKSBzdGFnZS4gVGhlIFRTQyBpcyB0aGUgY3JpdGljYWwgaGFyZHdhcmUgcmVnaXN0ZXIgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgaGVyZS4gS25vd2luZyBob3cgdGhlIGd1ZXN0JiMzOTtzIFRTQyByZWxhdGVzIHRvIHRoZSBob3N0JiMzOTtzLCBlc3BlY2lhbGx5IHdpdGggdmlydHVhbGl6YXRpb24sIGlzIGFic29sdXRlbHkga2V5IGZvciBjb3JyZWN0IHRpbWUgbWFuYWdlbWVudC4gSSYjMzk7bSBndWVzc2luZyB0aGlzIGZ1bmN0aW9uIGlzIGNlbnRyYWwgdG8gZXN0YWJsaXNoaW5nIGEgcmVsaWFibGUgdGltZSBiYXNlIGZvciB0aGUgZ3Vlc3QsIGRlc3BpdGUgYW55IGh5cGVydmlzb3Igb3ZlcmhlYWQgb3IgaW50ZXJydXB0aW9ucy4gSSBzdXNwZWN0IGl0JiMzOTtzIGxvb2tpbmcgYXQgdGhlIGd1ZXN0IFRTQyBhbmQgY29tcGFyaW5nIGl0IHRvIGEga25vd24gaG9zdCBUU0Mgb3IgYSByZWZlcmVuY2UgdGltZSwgbWF5YmUgdXNpbmcgc29tZSBjYWxpYnJhdGlvbi4gVGhlIG9mZnNldCBjYWxjdWxhdGlvbiBpcyBjcnVjaWFsIHRvIG1haW50YWluaW5nIGEgY29uc2lzdGVudCB0aW1lIHZpZXcgd2l0aGluIHRoZSB2aXJ0dWFsIG1hY2hpbmUuIFRoaXMgaGFzIGltcGxpY2F0aW9ucyBmb3IgYSB3aG9sZSBsb2FkIG9mIHBlcmZvcm1hbmNlIG1ldHJpY3MsIGFuZCBpdCYjMzk7cyBzb21ldGhpbmcgSSBuZWVkIHRvIGZ1bGx5IGdyYXNwLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgY2FyZWZ1bGx5IGF0IHRoZSBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgbG9naWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAwOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9jb21wdXRlX2wxX3RzY19vZmZzZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tc3JzLmM9MTQ0Mj1pbnQga3ZtX3NldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcbi0tXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTE2MzMtXHRcdH0gZWxzZSBpZiAoIXZjcHUtXHUwMDNlYXJjaC5ndWVzdF90c2NfcHJvdGVjdGVkKSB7XG5hcmNoL3g4Ni9rdm0vbXNycy5jOjE2MzQ6XHRcdFx0dTY0IGFkaiA9IGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXQodmNwdSwgcmR0c2MoKSwgZGF0YSkgLVxuYXJjaC94ODYva3ZtL21zcnMuYy0xNjM1LVx0XHRcdFx0ICB2Y3B1LVx1MDAzZWFyY2gubDFfdHNjX29mZnNldDtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTE0Nj11NjQga3ZtX3NjYWxlX3RzYyh1NjQgdHNjLCB1NjQgcmF0aW8pXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTExNTUtXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTE1Njp1NjQga3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBob3N0X3RzYyxcbmFyY2gveDg2L2t2bS94ODYuYy0xMTU3LVx0XHRcdCAgICAgIHU2NCB0YXJnZXRfdHNjKVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz0xMzEzPXZvaWQga3ZtX3N5bmNocm9uaXplX3RzYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqdXNlcl92YWx1ZSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTMyMi1cdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZrdm0tXHUwMDNlYXJjaC50c2Nfd3JpdGVfbG9jaywgZmxhZ3MpO1xuYXJjaC94ODYva3ZtL3g4Ni5jOjEzMjM6XHRvZmZzZXQgPSBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0KHZjcHUsIHJkdHNjKCksIGRhdGEpO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTEzMjQtXHRucyA9IGdldF9rdm1jbG9ja19iYXNlX25zKCk7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTEzNzEtXHRcdFx0ZGF0YSAmIzQzOz0gZGVsdGE7XG5hcmNoL3g4Ni9rdm0veDg2LmM6MTM3MjpcdFx0XHRvZmZzZXQgPSBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0KHZjcHUsIHJkdHNjKCksIGRhdGEpO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTEzNzMtXHRcdH1cbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MjU3OD12b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTI2MjgtXHRcdGlmIChrdm1fY2hlY2tfdHNjX3Vuc3RhYmxlKCkpIHtcbmFyY2gveDg2L2t2bS94ODYuYzoyNjI5Olx0XHRcdHU2NCBvZmZzZXQgPSBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0KHZjcHUsIHJkdHNjKCksXG5hcmNoL3g4Ni9rdm0veDg2LmMtMjYzMC1cdFx0XHRcdFx0XHR2Y3B1LVx1MDAzZWFyY2gubGFzdF9ndWVzdF90c2MpO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuaD0zMzc9dTY0IGt2bV9jYWxjX25lc3RlZF90c2NfbXVsdGlwbGllcih1NjQgbDFfbXVsdGlwbGllciwgdTY0IGwyX211bHRpcGxpZXIpO1xuYXJjaC94ODYva3ZtL3g4Ni5oOjMzODp1NjQga3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBob3N0X3RzYyxcbmFyY2gveDg2L2t2bS94ODYuaC0zMzktXHRcdFx0ICAgICAgdTY0IHRhcmdldF90c2MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTE0NgoJCQkJCQkJb3V0cHV0OiAxODIKCQkJCQkJCXRob3VnaHRzOiAxODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBTdHJhdGVneSBmb3IgVGhpcyBLVk0gUGF0Y2gqKgoKT2theSwgYWZ0ZXIgYSBxdWljayByZXZpZXcsIHRoaXMgcGF0Y2ggbG9va3MgbGlrZSBpdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIHRoZSBlZmZvcnQgdG8gZnV6ei4gVGhlIG1vZGlmaWNhdGlvbnMgaXQgbWFrZXMgdG8gdGhlIEtWTSB4ODYgVFNDIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgdGhlIFRTQyBzY2FsaW5nLCBtYXN0ZXIgY2xvY2sgdXBkYXRlcywgYW5kIHdhbGwgY2xvY2sgZXBvY2ggY2FsY3VsYXRpb25zLCBhcmUgYWxsIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcuIFRoaXMgaXMgY29yZSBoeXBlcnZpc29yIGxvZ2ljLCBhbmQgd2Uga25vdyB0aGF0IGl0JiMzOTtzIGRpcmVjdGx5IGFjY2Vzc2libGUgZnJvbSBndWVzdCBWTXMgdGhyb3VnaCB2YXJpb3VzIGludGVyZmFjZXMgbGlrZSBNU1Igd3JpdGVzLCBDUFVJRCBpbnN0cnVjdGlvbnMsIGFuZCBLVk0gaW9jdGxzLiBUaGF0IGtpbmQgb2YgZXhwb3N1cmUgc2NyZWFtcyB2dWxuZXJhYmlsaXR5IHBvdGVudGlhbC4KClRoZXJlZm9yZSwgSSYjMzk7bSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgLgoKTXkgaW1tZWRpYXRlIGZvY3VzIHdpbGwgYmUgb24gdGhlIGZ1bmN0aW9ucyB0aGF0IGRpcmVjdGx5IGhhbmRsZSB0aGUgVFNDIHN5bmNocm9uaXphdGlvbiBhbmQgZ3Vlc3QgdGltZSB1cGRhdGVzLiBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gYWRkIHRoZXNlIGZvY3VzIHN5bWJvbHMgdG8gdGhlIGZ1enppbmcgY29uZmlndXJhdGlvbjogYGt2bV9zeW5jaHJvbml6ZV90c2NgLCBga3ZtX2d1ZXN0X3RpbWVfdXBkYXRlYCwgYGt2bV9nZXRfd2FsbF9jbG9ja19lcG9jaGAsIGBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0YCwgYW5kIGBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGVgLiBUaGVzZSBhcmUgdGhlIGtleSBhcmVhcyB3aGVyZSB0aGUgcGF0Y2ggaW50cm9kdWNlcyBjaGFuZ2VzIGFuZCwgY29uc2VxdWVudGx5LCB3aGVyZSBJIGFudGljaXBhdGUgdGhlIG1vc3QgaW50ZXJlc3RpbmcgZnV6emluZyByZXN1bHRzLgoKRmluYWxseSwgSSYjMzk7bGwgZW5hYmxlIHRoZSBgS1ZNYCwgYEtWTV9JTlRFTGAsIGFuZCBgS1ZNX0FNRGAgY29uZmlndXJhdGlvbnMuIEdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZXMsIHRoZXNlIGFyZSBlc3NlbnRpYWwgdG8gZW5zdXJlIHRoZSBmdXp6ZXIgY2FuIGNvcnJlY3RseSBleGVyY2lzZSB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bmRlciBkaWZmZXJlbnQgaGFyZHdhcmUgY29uZmlndXJhdGlvbnMuIFRoaXMgc2hvdWxkIGdpdmUgdXMgYSBnb29kIHN0YXJ0IHRvd2FyZHMgaWRlbnRpZnlpbmcgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aGluIHRoaXMgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAwOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fc3luY2hyb25pemVfdHNjJiMzNDssCiAgICAmIzM0O2t2bV9ndWVzdF90aW1lX3VwZGF0ZSYjMzQ7LAogICAgJiMzNDtrdm1fZ2V0X3dhbGxfY2xvY2tfZXBvY2gmIzM0OywKICAgICYjMzQ7a3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldCYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIHg4NiBUU0MgKFRpbWUgU3RhbXAgQ291bnRlcikgaGFuZGxpbmcsIGluY2x1ZGluZyBUU0Mgc2NhbGluZywgbWFzdGVyIGNsb2NrIHVwZGF0ZXMsIGFuZCB3YWxsIGNsb2NrIGVwb2NoIGNhbGN1bGF0aW9ucy4gVGhpcyBpcyBjb3JlIGh5cGVydmlzb3IgbG9naWMgcmVhY2hhYmxlIGZyb20gZ3Vlc3QgVk1zIHZpYSBNU1Igd3JpdGVzLCBDUFVJRCwgYW5kIEtWTSBpb2N0bHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgaGFuZGxpbmcgVFNDIHN5bmNocm9uaXphdGlvbiBhbmQgZ3Vlc3QgdGltZSB1cGRhdGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fc3luY2hyb25pemVfdHNjJiMzNDssCiAgICAmIzM0O2t2bV9ndWVzdF90aW1lX3VwZGF0ZSYjMzQ7LAogICAgJiMzNDtrdm1fZ2V0X3dhbGxfY2xvY2tfZXBvY2gmIzM0OywKICAgICYjMzQ7a3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldCYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIHg4NiBUU0MgKFRpbWUgU3RhbXAgQ291bnRlcikgaGFuZGxpbmcsIGluY2x1ZGluZyBUU0Mgc2NhbGluZywgbWFzdGVyIGNsb2NrIHVwZGF0ZXMsIGFuZCB3YWxsIGNsb2NrIGVwb2NoIGNhbGN1bGF0aW9ucy4gVGhpcyBpcyBjb3JlIGh5cGVydmlzb3IgbG9naWMgcmVhY2hhYmxlIGZyb20gZ3Vlc3QgVk1zIHZpYSBNU1Igd3JpdGVzLCBDUFVJRCwgYW5kIEtWTSBpb2N0bHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgaGFuZGxpbmcgVFNDIHN5bmNocm9uaXphdGlvbiBhbmQgZ3Vlc3QgdGltZSB1cGRhdGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDA6Mzk6MDIuOTg1NzI0MzI5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzIzNTM3NjIzNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIktWTV9BTURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fc3luY2hyb25pemVfdHNjXCIsXG4gICAgXCJrdm1fZ3Vlc3RfdGltZV91cGRhdGVcIixcbiAgICBcImt2bV9nZXRfd2FsbF9jbG9ja19lcG9jaFwiLFxuICAgIFwia3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldFwiLFxuICAgIFwia3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIHg4NiBUU0MgKFRpbWUgU3RhbXAgQ291bnRlcikgaGFuZGxpbmcsIGluY2x1ZGluZyBUU0Mgc2NhbGluZywgbWFzdGVyIGNsb2NrIHVwZGF0ZXMsIGFuZCB3YWxsIGNsb2NrIGVwb2NoIGNhbGN1bGF0aW9ucy4gVGhpcyBpcyBjb3JlIGh5cGVydmlzb3IgbG9naWMgcmVhY2hhYmxlIGZyb20gZ3Vlc3QgVk1zIHZpYSBNU1Igd3JpdGVzLCBDUFVJRCwgYW5kIEtWTSBpb2N0bHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgaGFuZGxpbmcgVFNDIHN5bmNocm9uaXphdGlvbiBhbmQgZ3Vlc3QgdGltZSB1cGRhdGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMDozOTowMi45ODU3Mjg2NzlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzY3OTc5ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyNjI0NDQ0YzUyMGI4NDczM2U5MmY2NWVkZTI2ZDBmZmI1YjUyZjg4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDUgMDA6Mzk6MDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG5pbmRleCAyODM4NDc2MTlmZjg4Li4yODc4YTUxODFjZDliIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuQEAgLTg2NCw3ICs4NjQsNyBAQCBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7XFxuIFxcdGdwYV90IHRpbWU7XFxuIFxcdHM4ICBwdmNsb2NrX3RzY19zaGlmdDtcXG4gXFx0dTMyIHB2Y2xvY2tfdHNjX211bDtcXG4tXFx0dW5zaWduZWQgaW50IGh3X3RzY19raHo7XFxuK1xcdHU2NCBod190c2NfaHo7XFxuIFxcdHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlIHB2X3RpbWU7XFxuIFxcdC8qIHNldCBndWVzdCBzdG9wcGVkIGZsYWcgaW4gcHZjbG9jayBmbGFncyBmaWVsZCAqL1xcbiBcXHRib29sIHB2Y2xvY2tfc2V0X2d1ZXN0X3N0b3BwZWRfcmVxdWVzdDtcXG5AQCAtMTIzNiw2ICsxMjM2LDcgQEAgc3RydWN0IGt2bV9hcmNoIHtcXG4gXFx0dTY0IGxhc3RfdHNjX3dyaXRlO1xcbiBcXHR1MzIgbGFzdF90c2Nfa2h6O1xcbiBcXHR1NjQgbGFzdF90c2Nfb2Zmc2V0O1xcbitcXHR1NjQgbGFzdF90c2Nfc2NhbGluZ19yYXRpbztcXG4gXFx0dTY0IGN1cl90c2NfbnNlYztcXG4gXFx0dTY0IGN1cl90c2Nfd3JpdGU7XFxuIFxcdHU2NCBjdXJfdHNjX29mZnNldDtcXG5AQCAtMTI1MSw2ICsxMjUyLDkgQEAgc3RydWN0IGt2bV9hcmNoIHtcXG4gXFx0dTY0IG1hc3Rlcl9rZXJuZWxfbnM7XFxuIFxcdHU2NCBtYXN0ZXJfY3ljbGVfbm93O1xcbiBcXHRzdHJ1Y3QgcmF0ZWxpbWl0X3N0YXRlIGt2bWNsb2NrX3VwZGF0ZV9ycztcXG4rXFx0dTY0IG1hc3Rlcl90c2Nfc2NhbGluZ19yYXRpbztcXG4rXFx0czggIG1hc3Rlcl90c2Nfc2hpZnQ7XFxuK1xcdHUzMiBtYXN0ZXJfdHNjX211bDtcXG4gXFxuICNpZmRlZiBDT05GSUdfS1ZNX0hZUEVSVlxcbiBcXHRzdHJ1Y3Qga3ZtX2h2IGh5cGVydjtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2NwdWlkLmMgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuY1xcbmluZGV4IDllOWNmNjUzOGE5NmUuLjcwNDlmNWE1NTk3YjQgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL2NwdWlkLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuY1xcbkBAIC0xNiw2ICsxNiw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC92bWFsbG9jLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC91YWNjZXNzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9zdGF0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC91bml0cy5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9wcm9jZXNzb3IuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS91c2VyLmhcXHUwMDNlXFxuQEAgLTIxNDYsNyArMjE0Nyw3IEBAIGJvb2wga3ZtX2NwdWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyICplYXgsIHUzMiAqZWJ4LFxcbiBcXHRcXHRcXHRcXHQqZWN4ID0gdmNwdS1cXHUwMDNlYXJjaC5wdmNsb2NrX3RzY19tdWw7XFxuIFxcdFxcdFxcdFxcdCplZHggPSB2Y3B1LVxcdTAwM2VhcmNoLnB2Y2xvY2tfdHNjX3NoaWZ0O1xcbiBcXHRcXHRcXHR9IGVsc2UgaWYgKGluZGV4ID09IDIpIHtcXG4tXFx0XFx0XFx0XFx0KmVheCA9IHZjcHUtXFx1MDAzZWFyY2guaHdfdHNjX2toejtcXG4rXFx0XFx0XFx0XFx0KmVheCA9IGRpdl91NjQodmNwdS1cXHUwMDNlYXJjaC5od190c2NfaHosIEhaX1BFUl9LSFopO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFx0fSBlbHNlIHtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21zcnMuYyBiL2FyY2gveDg2L2t2bS9tc3JzLmNcXG5pbmRleCA2NmZhNzE0MGQ2NWQ5Li4yMmNlYjM5ZDQxZjY2IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9tc3JzLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vbXNycy5jXFxuQEAgLTE2MzEsNyArMTYzMSw4IEBAIGludCBrdm1fc2V0X21zcl9jb21tb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKVxcbiBcXHRcXHRpZiAobXNyX2luZm8tXFx1MDAzZWhvc3RfaW5pdGlhdGVkKSB7XFxuIFxcdFxcdFxcdGt2bV9zeW5jaHJvbml6ZV90c2ModmNwdSwgXFx1MDAyNmRhdGEpO1xcbiBcXHRcXHR9IGVsc2UgaWYgKCF2Y3B1LVxcdTAwM2VhcmNoLmd1ZXN0X3RzY19wcm90ZWN0ZWQpIHtcXG4tXFx0XFx0XFx0dTY0IGFkaiA9IGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXQodmNwdSwgZGF0YSkgLSB2Y3B1LVxcdTAwM2VhcmNoLmwxX3RzY19vZmZzZXQ7XFxuK1xcdFxcdFxcdHU2NCBhZGogPSBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0KHZjcHUsIHJkdHNjKCksIGRhdGEpIC1cXG4rXFx0XFx0XFx0XFx0ICB2Y3B1LVxcdTAwM2VhcmNoLmwxX3RzY19vZmZzZXQ7XFxuIFxcdFxcdFxcdGFkanVzdF90c2Nfb2Zmc2V0X2d1ZXN0KHZjcHUsIGFkaik7XFxuIFxcdFxcdFxcdHZjcHUtXFx1MDAzZWFyY2guaWEzMl90c2NfYWRqdXN0X21zciArPSBhZGo7XFxuIFxcdFxcdH1cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uYyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcXG5pbmRleCA5ZDYwN2I5OGJkMDY3Li4zMDU3Y2E3MDUxZGIxIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXFxuQEAgLTU2MDIsNyArNTYwMiw4IEBAIHN0YXRpYyBfX2luaXQgaW50IHN2bV9oYXJkd2FyZV9zZXR1cCh2b2lkKVxcbiBcXHRcXHRcXHRcXHQgICAgIFhGRUFUVVJFX01BU0tfQk5EQ1NSKTtcXG4gXFxuIFxcdGlmICh0c2Nfc2NhbGluZykge1xcbi1cXHRcXHRpZiAoIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9UU0NSQVRFTVNSKSkge1xcbitcXHRcXHRpZiAoIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9UU0NSQVRFTVNSKSB8fFxcbitcXHRcXHQgICAgIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9DT05TVEFOVF9UU0MpKSB7XFxuIFxcdFxcdFxcdHRzY19zY2FsaW5nID0gZmFsc2U7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdHByX2luZm8oXFxcIlRTQyBzY2FsaW5nIHN1cHBvcnRlZFxcXFxuXFxcIik7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXFxuaW5kZXggZTNiZmU2YWNhMWEwZS4uOWFiZDJlZDNhZWFlMiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC92bXguY1xcbkBAIC0yODQxLDYgKzI4NDEsMTYgQEAgc3RhdGljIGludCBzZXR1cF92bWNzX2NvbmZpZyhzdHJ1Y3Qgdm1jc19jb25maWcgKnZtY3NfY29uZixcXG4gXFx0aWYgKCFjcHVfaGFzX3NneCgpKVxcbiBcXHRcXHRfY3B1X2Jhc2VkXzJuZF9leGVjX2NvbnRyb2wgXFx1MDAyNj0gflNFQ09OREFSWV9FWEVDX0VOQ0xTX0VYSVRJTkc7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBLVk0gZG9lc24ndCByZS1kZXJpdmUgdGhlIFRTQyBzY2FsaW5nIHJhdGlvIHdoZW4gdGhlIGhvc3QgVFNDXFxuK1xcdCAqIGZyZXF1ZW5jeSBjaGFuZ2VzLCBzbyBUU0Mgc2NhbGluZyBpcyBvbmx5IHVzYWJsZSB3aXRoIGEgY29uc3RhbnRcXG4rXFx0ICogVFNDLiAgQ2xlYXIgdGhlIGNvbnRyb2wgaGVyZSByYXRoZXIgdGhhbiBpbiB2bXhfaGFyZHdhcmVfc2V0dXAoKSBzb1xcbitcXHQgKiB0aGF0IHRoZSBwZXItQ1BVIGNvbmZpZ3MgcmVjb21wdXRlZCBieSB2bXhfY2hlY2tfcHJvY2Vzc29yX2NvbXBhdCgpXFxuK1xcdCAqIHN0YXkgY29uc2lzdGVudCB3aXRoIHRoZSBnb2xkZW4gdm1jc19jb25maWcuXFxuK1xcdCAqL1xcbitcXHRpZiAoIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9DT05TVEFOVF9UU0MpKVxcbitcXHRcXHRfY3B1X2Jhc2VkXzJuZF9leGVjX2NvbnRyb2wgXFx1MDAyNj0gflNFQ09OREFSWV9FWEVDX1RTQ19TQ0FMSU5HO1xcbitcXG4gXFx0aWYgKF9jcHVfYmFzZWRfZXhlY19jb250cm9sIFxcdTAwMjYgQ1BVX0JBU0VEX0FDVElWQVRFX1RFUlRJQVJZX0NPTlRST0xTKVxcbiBcXHRcXHRfY3B1X2Jhc2VkXzNyZF9leGVjX2NvbnRyb2wgPVxcbiBcXHRcXHRcXHRhZGp1c3Rfdm14X2NvbnRyb2xzNjQoS1ZNX09QVElPTkFMX1ZNWF9URVJUSUFSWV9WTV9FWEVDX0NPTlRST0wsXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xcbmluZGV4IGQ5NGI1OTE0MGM0NTIuLmNiZTRmZDM0NTdiNDQgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5jXFxuQEAgLTYxLDYgKzYxLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbV9lbmNyeXB0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdXNwZW5kLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbXAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VuaXRzLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjdHJhY2UvZXZlbnRzL2lwaS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdHJhY2UvZXZlbnRzL2t2bS5oXFx1MDAzZVxcbkBAIC04NzMsNyArODc0LDYgQEAgc3RhdGljIGlubGluZSBib29sIGt2bV92Y3B1X2V4aXRfcmVxdWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdCAgICAgICBrdm1fcmVxdWVzdF9wZW5kaW5nKHZjcHUpIHx8IHhmZXJfdG9fZ3Vlc3RfbW9kZV93b3JrX3BlbmRpbmcoKTtcXG4gfVxcbiBcXG4tI2lmZGVmIENPTkZJR19YODZfNjRcXG4gc3RydWN0IHB2Y2xvY2tfY2xvY2sge1xcbiBcXHRpbnQgdmNsb2NrX21vZGU7XFxuIFxcdHU2NCBjeWNsZV9sYXN0O1xcbkBAIC05MzEsMTMgKzkzMSw2IEBAIHN0YXRpYyBzNjQgZ2V0X2t2bWNsb2NrX2Jhc2VfbnModm9pZClcXG4gXFx0LyogQ291bnQgdXAgZnJvbSBib290IHRpbWUsIGJ1dCB3aXRoIHRoZSBmcmVxdWVuY3kgb2YgdGhlIHJhdyBjbG9jay4gICovXFxuIFxcdHJldHVybiBrdGltZV90b19ucyhrdGltZV9hZGQoa3RpbWVfZ2V0X3JhdygpLCBwdmNsb2NrX2d0b2RfZGF0YS5vZmZzX2Jvb3QpKTtcXG4gfVxcbi0jZWxzZVxcbi1zdGF0aWMgczY0IGdldF9rdm1jbG9ja19iYXNlX25zKHZvaWQpXFxuLXtcXG4tXFx0LyogTWFzdGVyIGNsb2NrIG5vdCB1c2VkLCBzbyB3ZSBjYW4ganVzdCB1c2UgQ0xPQ0tfQk9PVFRJTUUuICAqL1xcbi1cXHRyZXR1cm4ga3RpbWVfZ2V0X2Jvb3R0aW1lX25zKCk7XFxuLX1cXG4tI2VuZGlmXFxuIFxcbiBzdGF0aWMgdWludDMyX3QgZGl2X2ZyYWModWludDMyX3QgZGl2aWRlbmQsIHVpbnQzMl90IGRpdmlzb3IpXFxuIHtcXG5AQCAtOTQ1LDMyICs5MzgsNTcgQEAgc3RhdGljIHVpbnQzMl90IGRpdl9mcmFjKHVpbnQzMl90IGRpdmlkZW5kLCB1aW50MzJfdCBkaXZpc29yKVxcbiBcXHRyZXR1cm4gZGl2aWRlbmQ7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGt2bV9nZXRfdGltZV9zY2FsZSh1aW50NjRfdCBzY2FsZWRfaHosIHVpbnQ2NF90IGJhc2VfaHosXFxuK3N0YXRpYyB2b2lkIGt2bV9nZXRfdGltZV9zY2FsZSh1NjQgc2NhbGVkX2h6LCB1NjQgYmFzZV9oeixcXG4gXFx0XFx0XFx0ICAgICAgIHM4ICpwc2hpZnQsIHUzMiAqcG11bHRpcGxpZXIpXFxuIHtcXG4tXFx0dWludDY0X3Qgc2NhbGVkNjQ7XFxuLVxcdGludDMyX3QgIHNoaWZ0ID0gMDtcXG4tXFx0dWludDY0X3QgdHBzNjQ7XFxuLVxcdHVpbnQzMl90IHRwczMyO1xcbitcXHR1NjQgc2NhbGVkX2h6X3U2NCA9IHNjYWxlZF9oejtcXG4rXFx0czMyIHNoaWZ0ID0gMDtcXG4rXFx0dTY0IGJhc2VfaHpfdTY0O1xcbitcXHR1MzIgYmFzZTMyO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIGEgZml4ZWQtcG9pbnQgbXVsdGlwbGllciBhbmQgc2hpZnQgc3VjaFxcbitcXHQgKiB0aGF0OlxcbitcXHQgKiAgIHRpbWVfbnMgPSAodHNjX2N5Y2xlcyBcXHUwMDNjXFx1MDAzYyBzaGlmdCkgKiBtdWx0aXBsaWVyIFxcdTAwM2VcXHUwMDNlIDMyXFxuK1xcdCAqXFxuK1xcdCAqIFdoZXJlIHRzY19jeWNsZXMgdGljayBhdCBiYXNlX2h6LCBhbmQgdGltZV9ucyBzaG91bGQgY291bnQgYXRcXG4rXFx0ICogc2NhbGVkX2h6ICh0eXBpY2FsbHkgTlNFQ19QRVJfU0VDIGZvciBhIFRTQ+KGkm5hbm9zZWNvbmRzIGNvbnZlcnNpb24pLlxcbitcXHQgKlxcbitcXHQgKiBUaGUgbXVsdGlwbGllciBpczogKHNjYWxlZF9oeiBcXHUwMDNjXFx1MDAzYyAzMikgLyBiYXNlX2h6LCBhZGp1c3RlZCBieSBzaGlmdFxcbitcXHQgKiB0byBrZWVwIGV2ZXJ5dGhpbmcgaW4gcmFuZ2UuXFxuK1xcdCAqL1xcbiBcXG4tXFx0dHBzNjQgPSBiYXNlX2h6O1xcbi1cXHRzY2FsZWQ2NCA9IHNjYWxlZF9oejtcXG4tXFx0d2hpbGUgKHRwczY0IFxcdTAwM2Ugc2NhbGVkNjQqMiB8fCB0cHM2NCBcXHUwMDI2IDB4ZmZmZmZmZmYwMDAwMDAwMFVMTCkge1xcbi1cXHRcXHR0cHM2NCBcXHUwMDNlXFx1MDAzZT0gMTtcXG4rXFx0YmFzZV9oel91NjQgPSBiYXNlX2h6O1xcbitcXG4rXFx0LypcXG4rXFx0ICogU3RhcnQgYnkgc2hpZnRpbmcgYmFzZV9oeiByaWdodCB1bnRpbCBpdCBmaXRzIGluIDMyIGJpdHMsIGFuZFxcbitcXHQgKiBpcyBsb3dlciB0aGFuIGRvdWJsZSB0aGUgdGFyZ2V0IHJhdGUuIFRoaXMgaW50cm9kdWNlcyBhIG5lZ2F0aXZlXFxuK1xcdCAqIHNoaWZ0IHZhbHVlIHdoaWNoIHdvdWxkIHJlc3VsdCBpbiBwdmNsb2NrX3NjYWxlX2RlbHRhKCkgc2hpZnRpbmdcXG4rXFx0ICogdGhlIGFjdHVhbCB0aWNrIGNvdW50IHJpZ2h0IGJlZm9yZSBwZXJmb3JtaW5nIHRoZSBtdWx0aXBsaWNhdGlvbi5cXG4rXFx0ICovXFxuK1xcdHdoaWxlIChiYXNlX2h6X3U2NCBcXHUwMDNlIHNjYWxlZF9oel91NjQgKiAyIHx8IGJhc2VfaHpfdTY0IFxcdTAwM2VcXHUwMDNlIDMyKSB7XFxuK1xcdFxcdGJhc2VfaHpfdTY0IFxcdTAwM2VcXHUwMDNlPSAxO1xcbiBcXHRcXHRzaGlmdC0tO1xcbiBcXHR9XFxuIFxcbi1cXHR0cHMzMiA9ICh1aW50MzJfdCl0cHM2NDtcXG4tXFx0d2hpbGUgKHRwczMyIFxcdTAwM2M9IHNjYWxlZDY0IHx8IHNjYWxlZDY0IFxcdTAwMjYgMHhmZmZmZmZmZjAwMDAwMDAwVUxMKSB7XFxuLVxcdFxcdGlmIChzY2FsZWQ2NCBcXHUwMDI2IDB4ZmZmZmZmZmYwMDAwMDAwMFVMTCB8fCB0cHMzMiBcXHUwMDI2IDB4ODAwMDAwMDApXFxuLVxcdFxcdFxcdHNjYWxlZDY0IFxcdTAwM2VcXHUwMDNlPSAxO1xcbitcXHQvKiBOb3cgdGhlIHNoaWZ0ZWQgYmFzZV9oeiBmaXRzIGluIDMyIGJpdHMuICovXFxuK1xcdGJhc2UzMiA9ICh1MzIpYmFzZV9oel91NjQ7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBOZXh0LCBzaGlmdCBzY2FsZWRfaHogcmlnaHQgdW50aWwgaXQgZml0cyBpbiAzMiBiaXRzLCBhbmQgZW5zdXJlXFxuK1xcdCAqIHRoYXQgdGhlIHNoaWZ0ZWQgYmFzZV9oeiBpcyBzdHJpY3RseSBsYXJnZXIgKHNvIHRoYXQgdGhlIHJlc3VsdCBvZiB0aGVcXG4rXFx0ICogZmluYWwgZGl2aXNpb24gYWxzbyBmaXRzIGluIDMyIGJpdHMpLlxcbitcXHQgKi9cXG4rXFx0d2hpbGUgKGJhc2UzMiBcXHUwMDNjPSBzY2FsZWRfaHpfdTY0IHx8IHNjYWxlZF9oel91NjQgXFx1MDAzZVxcdTAwM2UgMzIpIHtcXG4rXFx0XFx0aWYgKHNjYWxlZF9oel91NjQgXFx1MDAzZVxcdTAwM2UgMzIgfHwgYmFzZTMyIFxcdTAwMjYgQklUKDMxKSlcXG4rXFx0XFx0XFx0c2NhbGVkX2h6X3U2NCBcXHUwMDNlXFx1MDAzZT0gMTtcXG4gXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHR0cHMzMiBcXHUwMDNjXFx1MDAzYz0gMTtcXG4rXFx0XFx0XFx0YmFzZTMyIFxcdTAwM2NcXHUwMDNjPSAxO1xcbiBcXHRcXHRzaGlmdCsrO1xcbiBcXHR9XFxuIFxcbiBcXHQqcHNoaWZ0ID0gc2hpZnQ7XFxuLVxcdCpwbXVsdGlwbGllciA9IGRpdl9mcmFjKHNjYWxlZDY0LCB0cHMzMik7XFxuK1xcdCpwbXVsdGlwbGllciA9IGRpdl9mcmFjKHNjYWxlZF9oel91NjQsIGJhc2UzMik7XFxuIH1cXG4gXFxuICNpZmRlZiBDT05GSUdfWDg2XzY0XFxuQEAgLTEwNjEsMTEgKzEwNzksMTUgQEAgc3RhdGljIGludCBrdm1fc2V0X3RzY19raHooc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdXNlcl90c2Nfa2h6KVxcbiBcXG4gc3RhdGljIHU2NCBjb21wdXRlX2d1ZXN0X3RzYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHM2NCBrZXJuZWxfbnMpXFxuIHtcXG4tXFx0dTY0IHRzYyA9IHB2Y2xvY2tfc2NhbGVfZGVsdGEoa2VybmVsX25zLXZjcHUtXFx1MDAzZWFyY2gudGhpc190c2NfbnNlYyxcXG4tXFx0XFx0XFx0XFx0ICAgICAgdmNwdS1cXHUwMDNlYXJjaC52aXJ0dWFsX3RzY19tdWx0LFxcbi1cXHRcXHRcXHRcXHQgICAgICB2Y3B1LVxcdTAwM2VhcmNoLnZpcnR1YWxfdHNjX3NoaWZ0KTtcXG4tXFx0dHNjICs9IHZjcHUtXFx1MDAzZWFyY2gudGhpc190c2Nfd3JpdGU7XFxuLVxcdHJldHVybiB0c2M7XFxuK1xcdHM2NCBkZWx0YV9ucyA9IGtlcm5lbF9ucyAtIHZjcHUtXFx1MDAzZWFyY2gudGhpc190c2NfbnNlYztcXG4rXFx0dTY0IHRzYztcXG4rXFxuK1xcdC8qIEhhbmRsZSBuZWdhdGl2ZSBkZWx0YXMgZ3JhY2VmdWxseSAobWFzdGVyIGNsb2NrIHJlZiBtYXkgYmUgZWFybGllcikgKi9cXG4rXFx0dHNjID0gcHZjbG9ja19zY2FsZV9kZWx0YShhYnMoZGVsdGFfbnMpLFxcbitcXHRcXHRcXHRcXHQgIHZjcHUtXFx1MDAzZWFyY2gudmlydHVhbF90c2NfbXVsdCxcXG4rXFx0XFx0XFx0XFx0ICB2Y3B1LVxcdTAwM2VhcmNoLnZpcnR1YWxfdHNjX3NoaWZ0KTtcXG4rXFxuK1xcdHJldHVybiB2Y3B1LVxcdTAwM2VhcmNoLnRoaXNfdHNjX3dyaXRlICsgKGRlbHRhX25zIFxcdTAwM2U9IDAgPyB0c2MgOiAtdHNjKTtcXG4gfVxcbiBcXG4gI2lmZGVmIENPTkZJR19YODZfNjRcXG5AQCAtMTEzMSwxMSArMTE1MywxMiBAQCB1NjQga3ZtX3NjYWxlX3RzYyh1NjQgdHNjLCB1NjQgcmF0aW8pXFxuIFxcdHJldHVybiBfdHNjO1xcbiB9XFxuIFxcbi11NjQga3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB0YXJnZXRfdHNjKVxcbit1NjQga3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBob3N0X3RzYyxcXG4rXFx0XFx0XFx0ICAgICAgdTY0IHRhcmdldF90c2MpXFxuIHtcXG4gXFx0dTY0IHRzYztcXG4gXFxuLVxcdHRzYyA9IGt2bV9zY2FsZV90c2MocmR0c2MoKSwgdmNwdS1cXHUwMDNlYXJjaC5sMV90c2Nfc2NhbGluZ19yYXRpbyk7XFxuK1xcdHRzYyA9IGt2bV9zY2FsZV90c2MoaG9zdF90c2MsIHZjcHUtXFx1MDAzZWFyY2gubDFfdHNjX3NjYWxpbmdfcmF0aW8pO1xcbiBcXG4gXFx0cmV0dXJuIHRhcmdldF90c2MgLSB0c2M7XFxuIH1cXG5AQCAtMTI1NCw2ICsxMjc3LDcgQEAgc3RhdGljIHZvaWQgX19rdm1fc3luY2hyb25pemVfdHNjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG9mZnNldCwgdTY0IHRzYyxcXG4gXFx0a3ZtLVxcdTAwM2VhcmNoLmxhc3RfdHNjX3dyaXRlID0gdHNjO1xcbiBcXHRrdm0tXFx1MDAzZWFyY2gubGFzdF90c2Nfa2h6ID0gdmNwdS1cXHUwMDNlYXJjaC52aXJ0dWFsX3RzY19raHo7XFxuIFxcdGt2bS1cXHUwMDNlYXJjaC5sYXN0X3RzY19vZmZzZXQgPSBvZmZzZXQ7XFxuK1xcdGt2bS1cXHUwMDNlYXJjaC5sYXN0X3RzY19zY2FsaW5nX3JhdGlvID0gdmNwdS1cXHUwMDNlYXJjaC5sMV90c2Nfc2NhbGluZ19yYXRpbztcXG4gXFxuIFxcdHZjcHUtXFx1MDAzZWFyY2gubGFzdF9ndWVzdF90c2MgPSB0c2M7XFxuIFxcbkBAIC0xMjk2LDcgKzEzMjAsNyBAQCB2b2lkIGt2bV9zeW5jaHJvbml6ZV90c2Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKnVzZXJfdmFsdWUpXFxuIFxcdGJvb2wgc3luY2hyb25pemluZyA9IGZhbHNlO1xcbiBcXG4gXFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gudHNjX3dyaXRlX2xvY2ssIGZsYWdzKTtcXG4tXFx0b2Zmc2V0ID0ga3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldCh2Y3B1LCBkYXRhKTtcXG4rXFx0b2Zmc2V0ID0ga3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldCh2Y3B1LCByZHRzYygpLCBkYXRhKTtcXG4gXFx0bnMgPSBnZXRfa3ZtY2xvY2tfYmFzZV9ucygpO1xcbiBcXHRlbGFwc2VkID0gbnMgLSBrdm0tXFx1MDAzZWFyY2gubGFzdF90c2NfbnNlYztcXG4gXFxuQEAgLTEzNDUsNyArMTM2OSw3IEBAIHZvaWQga3ZtX3N5bmNocm9uaXplX3RzYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqdXNlcl92YWx1ZSlcXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0dTY0IGRlbHRhID0gbnNlY190b19jeWNsZXModmNwdSwgZWxhcHNlZCk7XFxuIFxcdFxcdFxcdGRhdGEgKz0gZGVsdGE7XFxuLVxcdFxcdFxcdG9mZnNldCA9IGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXQodmNwdSwgZGF0YSk7XFxuK1xcdFxcdFxcdG9mZnNldCA9IGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXQodmNwdSwgcmR0c2MoKSwgZGF0YSk7XFxuIFxcdFxcdH1cXG4gXFx0XFx0bWF0Y2hlZCA9IHRydWU7XFxuIFxcdH1cXG5AQCAtMTU2Niw2ICsxNTkwLDggQEAgc3RhdGljIGJvb2wga3ZtX2dldF93YWxsdGltZV9hbmRfY2xvY2tyZWFkKHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcXG4gICpcXG4gICovXFxuIFxcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfY3B1X3RzY19raHoodm9pZCk7XFxuK1xcbiBzdGF0aWMgdm9pZCBwdmNsb2NrX3VwZGF0ZV92bV9ndG9kX2NvcHkoc3RydWN0IGt2bSAqa3ZtKVxcbiB7XFxuICNpZmRlZiBDT05GSUdfWDg2XzY0XFxuQEAgLTE1ODksOSArMTYxNSwzMCBAQCBzdGF0aWMgdm9pZCBwdmNsb2NrX3VwZGF0ZV92bV9ndG9kX2NvcHkoc3RydWN0IGt2bSAqa3ZtKVxcbiBcXHRcXHRcXHRcXHRcXHUwMDI2XFx1MDAyNiAha2EtXFx1MDAzZWJhY2t3YXJkc190c2Nfb2JzZXJ2ZWRcXG4gXFx0XFx0XFx0XFx0XFx1MDAyNlxcdTAwMjYgIWthLVxcdTAwM2Vib290X3ZjcHVfcnVuc19vbGRfa3ZtY2xvY2s7XFxuIFxcbi1cXHRpZiAoa2EtXFx1MDAzZXVzZV9tYXN0ZXJfY2xvY2spXFxuK1xcdGlmIChrYS1cXHUwMDNldXNlX21hc3Rlcl9jbG9jaykge1xcbitcXHRcXHR1NjQgdHNjX2h6O1xcbitcXG4gXFx0XFx0YXRvbWljX3NldChcXHUwMDI2a3ZtX2d1ZXN0X2hhc19tYXN0ZXJfY2xvY2ssIDEpO1xcbiBcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQ29weSB0aGUgc2NhbGluZyByYXRpbyBhbmQgcHJlY29tcHV0ZSB0aGUgbXVsL3NoaWZ0IGZvclxcbitcXHRcXHQgKiBjb252ZXJ0aW5nIGd1ZXN0IFRTQyB0byBuYW5vc2Vjb25kcy4gVGhlc2UgYXJlIHVzZWQgYnlcXG4rXFx0XFx0ICogZ2V0X2t2bWNsb2NrKCkgdG8gY29tcHV0ZSBrdm1jbG9jayBmcm9tIHRoZSBob3N0IFRTQ1xcbitcXHRcXHQgKiB3aXRob3V0IG5lZWRpbmcgYSB2Q1BVIHJlZmVyZW5jZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGthLVxcdTAwM2VtYXN0ZXJfdHNjX3NjYWxpbmdfcmF0aW8gPSBrYS1cXHUwMDNlbGFzdF90c2Nfc2NhbGluZ19yYXRpbztcXG4rXFx0XFx0dHNjX2h6ID0gKHU2NClnZXRfY3B1X3RzY19raHooKSAqIEhaX1BFUl9LSFo7XFxuK1xcdFxcdGlmICh0c2NfaHogXFx1MDAyNlxcdTAwMjYga3ZtX2NhcHMuaGFzX3RzY19jb250cm9sKVxcbitcXHRcXHRcXHR0c2NfaHogPSBrdm1fc2NhbGVfdHNjKHRzY19oeixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIGthLVxcdTAwM2VtYXN0ZXJfdHNjX3NjYWxpbmdfcmF0aW8pO1xcbitcXHRcXHRpZiAodHNjX2h6KVxcbitcXHRcXHRcXHRrdm1fZ2V0X3RpbWVfc2NhbGUoTlNFQ19QRVJfU0VDLCB0c2NfaHosXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZrYS1cXHUwMDNlbWFzdGVyX3RzY19zaGlmdCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNmthLVxcdTAwM2VtYXN0ZXJfdHNjX211bCk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0a2EtXFx1MDAzZXVzZV9tYXN0ZXJfY2xvY2sgPSBmYWxzZTtcXG4rXFx0fVxcbitcXG4gXFx0dmNsb2NrX21vZGUgPSBwdmNsb2NrX2d0b2RfZGF0YS5jbG9jay52Y2xvY2tfbW9kZTtcXG4gXFx0dHJhY2Vfa3ZtX3VwZGF0ZV9tYXN0ZXJfY2xvY2soa2EtXFx1MDAzZXVzZV9tYXN0ZXJfY2xvY2ssIHZjbG9ja19tb2RlLFxcbiBcXHRcXHRcXHRcXHRcXHR2Y3B1c19tYXRjaGVkKTtcXG5AQCAtMTY1OCwzOSArMTcwNSw0OSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfY3B1X3RzY19raHoodm9pZClcXG4gfVxcbiBcXG4gLyogQ2FsbGVkIHdpdGhpbiByZWFkX3NlcWNvdW50X2JlZ2luL3JldHJ5IGZvciBrdm0tXFx1MDAzZXB2Y2xvY2tfc2MuICAqL1xcbi1zdGF0aWMgdm9pZCBfX2dldF9rdm1jbG9jayhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fY2xvY2tfZGF0YSAqZGF0YSlcXG4rc3RhdGljIGJvb2wgX19nZXRfa3ZtY2xvY2tfbWFzdGVyX2Nsb2NrKHN0cnVjdCBrdm0gKmt2bSxcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IGt2bV9jbG9ja19kYXRhICpkYXRhKVxcbiB7XFxuKyNpZmRlZiBDT05GSUdfWDg2XzY0XFxuIFxcdHN0cnVjdCBrdm1fYXJjaCAqa2EgPSBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoO1xcbiBcXHRzdHJ1Y3QgcHZjbG9ja192Y3B1X3RpbWVfaW5mbyBodl9jbG9jaztcXG4rXFx0c3RydWN0IHRpbWVzcGVjNjQgdHM7XFxuIFxcbi1cXHQvKiBib3RoIF9fdGhpc19jcHVfcmVhZCgpIGFuZCByZHRzYygpIHNob3VsZCBiZSBvbiB0aGUgc2FtZSBjcHUgKi9cXG4tXFx0Z2V0X2NwdSgpO1xcbitcXHRpZiAoIWthLVxcdTAwM2V1c2VfbWFzdGVyX2Nsb2NrKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRkYXRhLVxcdTAwM2VmbGFncyA9IDA7XFxuLVxcdGlmIChrYS1cXHUwMDNldXNlX21hc3Rlcl9jbG9jayBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgKHN0YXRpY19jcHVfaGFzKFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQykgfHwgX190aGlzX2NwdV9yZWFkKGNwdV90c2Nfa2h6KSkpIHtcXG4tI2lmZGVmIENPTkZJR19YODZfNjRcXG4tXFx0XFx0c3RydWN0IHRpbWVzcGVjNjQgdHM7XFxuK1xcdGlmICgha3ZtX2dldF93YWxsdGltZV9hbmRfY2xvY2tyZWFkKFxcdTAwMjZ0cywgXFx1MDAyNmRhdGEtXFx1MDAzZWhvc3RfdHNjKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4tXFx0XFx0aWYgKGt2bV9nZXRfd2FsbHRpbWVfYW5kX2Nsb2NrcmVhZChcXHUwMDI2dHMsIFxcdTAwMjZkYXRhLVxcdTAwM2Vob3N0X3RzYykpIHtcXG4tXFx0XFx0XFx0ZGF0YS1cXHUwMDNlcmVhbHRpbWUgPSB0cy50dl9uc2VjICsgTlNFQ19QRVJfU0VDICogdHMudHZfc2VjO1xcbi1cXHRcXHRcXHRkYXRhLVxcdTAwM2VmbGFncyB8PSBLVk1fQ0xPQ0tfUkVBTFRJTUUgfCBLVk1fQ0xPQ0tfSE9TVF9UU0M7XFxuLVxcdFxcdH0gZWxzZVxcbi0jZW5kaWZcXG4tXFx0XFx0ZGF0YS1cXHUwMDNlaG9zdF90c2MgPSByZHRzYygpO1xcbi1cXG4tXFx0XFx0ZGF0YS1cXHUwMDNlZmxhZ3MgfD0gS1ZNX0NMT0NLX1RTQ19TVEFCTEU7XFxuLVxcdFxcdGh2X2Nsb2NrLnRzY190aW1lc3RhbXAgPSBrYS1cXHUwMDNlbWFzdGVyX2N5Y2xlX25vdztcXG4tXFx0XFx0aHZfY2xvY2suc3lzdGVtX3RpbWUgPSBrYS1cXHUwMDNlbWFzdGVyX2tlcm5lbF9ucyArIGthLVxcdTAwM2Vrdm1jbG9ja19vZmZzZXQ7XFxuLVxcdFxcdGt2bV9nZXRfdGltZV9zY2FsZShOU0VDX1BFUl9TRUMsIGdldF9jcHVfdHNjX2toeigpICogMTAwMExMLFxcbi1cXHRcXHRcXHRcXHQgICBcXHUwMDI2aHZfY2xvY2sudHNjX3NoaWZ0LFxcbi1cXHRcXHRcXHRcXHQgICBcXHUwMDI2aHZfY2xvY2sudHNjX3RvX3N5c3RlbV9tdWwpO1xcbi1cXHRcXHRkYXRhLVxcdTAwM2VjbG9jayA9IF9fcHZjbG9ja19yZWFkX2N5Y2xlcyhcXHUwMDI2aHZfY2xvY2ssIGRhdGEtXFx1MDAzZWhvc3RfdHNjKTtcXG4rXFx0ZGF0YS1cXHUwMDNlcmVhbHRpbWUgPSB0cy50dl9uc2VjICsgTlNFQ19QRVJfU0VDICogdHMudHZfc2VjO1xcbitcXHRkYXRhLVxcdTAwM2VmbGFncyB8PSBLVk1fQ0xPQ0tfUkVBTFRJTUUgfCBLVk1fQ0xPQ0tfSE9TVF9UU0MgfFxcbitcXHRcXHQgICAgICAgS1ZNX0NMT0NLX1RTQ19TVEFCTEU7XFxuK1xcbitcXHRodl9jbG9jay50c2NfdGltZXN0YW1wID0ga2EtXFx1MDAzZW1hc3Rlcl9jeWNsZV9ub3c7XFxuK1xcdGh2X2Nsb2NrLnN5c3RlbV90aW1lID0ga2EtXFx1MDAzZW1hc3Rlcl9rZXJuZWxfbnMgKyBrYS1cXHUwMDNla3ZtY2xvY2tfb2Zmc2V0O1xcbitcXG4rXFx0LypcXG4rXFx0ICogVXNlIHRoZSBwcmVjb21wdXRlZCBndWVzdC1UU0MtYmFzZWQgbXVsL3NoaWZ0IHNvIHRoYXQgdGhlIGt2bWNsb2NrXFxuK1xcdCAqIHZhbHVlIG1hdGNoZXMgd2hhdCB0aGUgZ3Vlc3QgY29tcHV0ZXMgZnJvbSBpdHMgb3duIFRTQy5cXG4rXFx0ICovXFxuK1xcdGh2X2Nsb2NrLnRzY19zaGlmdCA9IGthLVxcdTAwM2VtYXN0ZXJfdHNjX3NoaWZ0O1xcbitcXHRodl9jbG9jay50c2NfdG9fc3lzdGVtX211bCA9IGthLVxcdTAwM2VtYXN0ZXJfdHNjX211bDtcXG4rXFxuK1xcdGlmIChrdm1fY2Fwcy5oYXNfdHNjX2NvbnRyb2wpIHtcXG4rXFx0XFx0dTY0IHRzY19kZWx0YSA9IGRhdGEtXFx1MDAzZWhvc3RfdHNjIC0ga2EtXFx1MDAzZW1hc3Rlcl9jeWNsZV9ub3c7XFxuK1xcbitcXHRcXHR0c2NfZGVsdGEgPSBrdm1fc2NhbGVfdHNjKHRzY19kZWx0YSwga2EtXFx1MDAzZW1hc3Rlcl90c2Nfc2NhbGluZ19yYXRpbyk7XFxuK1xcdFxcdGRhdGEtXFx1MDAzZWNsb2NrID0gaHZfY2xvY2suc3lzdGVtX3RpbWUgK1xcbitcXHRcXHRcXHQgICAgICBwdmNsb2NrX3NjYWxlX2RlbHRhKHRzY19kZWx0YSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBodl9jbG9jay50c2NfdG9fc3lzdGVtX211bCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBodl9jbG9jay50c2Nfc2hpZnQpO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRkYXRhLVxcdTAwM2VjbG9jayA9IGdldF9rdm1jbG9ja19iYXNlX25zKCkgKyBrYS1cXHUwMDNla3ZtY2xvY2tfb2Zmc2V0O1xcbitcXHRcXHRkYXRhLVxcdTAwM2VjbG9jayA9IF9fcHZjbG9ja19yZWFkX2N5Y2xlcyhcXHUwMDI2aHZfY2xvY2ssIGRhdGEtXFx1MDAzZWhvc3RfdHNjKTtcXG4gXFx0fVxcbi1cXG4tXFx0cHV0X2NwdSgpO1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rI2Vsc2VcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbisjZW5kaWZcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgZ2V0X2t2bWNsb2NrKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9jbG9ja19kYXRhICpkYXRhKVxcbkBAIC0xNjk5LDggKzE3NTYsMTEgQEAgc3RhdGljIHZvaWQgZ2V0X2t2bWNsb2NrKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9jbG9ja19kYXRhICpkYXRhKVxcbiBcXHR1bnNpZ25lZCBzZXE7XFxuIFxcbiBcXHRkbyB7XFxuK1xcdFxcdGRhdGEtXFx1MDAzZWZsYWdzID0gMDtcXG4rXFxuIFxcdFxcdHNlcSA9IHJlYWRfc2VxY291bnRfYmVnaW4oXFx1MDAyNmthLVxcdTAwM2VwdmNsb2NrX3NjKTtcXG4tXFx0XFx0X19nZXRfa3ZtY2xvY2soa3ZtLCBkYXRhKTtcXG4rXFx0XFx0aWYgKCFfX2dldF9rdm1jbG9ja19tYXN0ZXJfY2xvY2soa3ZtLCBkYXRhKSlcXG4rXFx0XFx0XFx0ZGF0YS1cXHUwMDNlY2xvY2sgPSBnZXRfa3ZtY2xvY2tfYmFzZV9ucygpICsga2EtXFx1MDAzZWt2bWNsb2NrX29mZnNldDtcXG4gXFx0fSB3aGlsZSAocmVhZF9zZXFjb3VudF9yZXRyeShcXHUwMDI2a2EtXFx1MDAzZXB2Y2xvY2tfc2MsIHNlcSkpO1xcbiB9XFxuIFxcbkBAIC0xNzYyLDM2ICsxODIyLDQ1IEBAIHN0YXRpYyB2b2lkIGt2bV9zZXR1cF9ndWVzdF9wdmNsb2NrKHN0cnVjdCBwdmNsb2NrX3ZjcHVfdGltZV9pbmZvICpyZWZfaHZfY2xvY2ssXFxuIFxcbiBpbnQga3ZtX2d1ZXN0X3RpbWVfdXBkYXRlKHN0cnVjdCBrdm1fdmNwdSAqdilcXG4ge1xcbitcXHR1NjQgdGd0X3RzY19oeiwgdHNjX3RpbWVzdGFtcCwgaG9zdF90c2MsIG1hc3Rlcl90c2MsIG1hc3Rlcl9ucztcXG4rXFx0c3RydWN0IGt2bV9hcmNoICprYSBfX21heWJlX3VudXNlZCA9IFxcdTAwMjZ2LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2g7XFxuIFxcdHN0cnVjdCBwdmNsb2NrX3ZjcHVfdGltZV9pbmZvIGh2X2Nsb2NrID0ge307XFxuLVxcdHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHRndF90c2Nfa2h6O1xcbi1cXHR1bnNpZ25lZCBzZXE7XFxuIFxcdHN0cnVjdCBrdm1fdmNwdV9hcmNoICp2Y3B1ID0gXFx1MDAyNnYtXFx1MDAzZWFyY2g7XFxuLVxcdHN0cnVjdCBrdm1fYXJjaCAqa2EgPSBcXHUwMDI2di1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoO1xcbiBcXHRzNjQga2VybmVsX25zO1xcbi1cXHR1NjQgdHNjX3RpbWVzdGFtcCwgaG9zdF90c2M7XFxuLVxcdGJvb2wgdXNlX21hc3Rlcl9jbG9jaztcXG4tXFxuLVxcdGtlcm5lbF9ucyA9IDA7XFxuLVxcdGhvc3RfdHNjID0gMDtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIElmIHRoZSBob3N0IHVzZXMgVFNDIGNsb2NrLCB0aGVuIHBhc3N0aHJvdWdoIFRTQyBhcyBzdGFibGVcXG4gXFx0ICogdG8gdGhlIGd1ZXN0LlxcbiBcXHQgKi9cXG4rI2lmZGVmIENPTkZJR19YODZfNjRcXG4rXFx0Ym9vbCB1c2VfbWFzdGVyX2Nsb2NrO1xcbitcXHR1bnNpZ25lZCBpbnQgc2VxO1xcbitcXG4gXFx0ZG8ge1xcbiBcXHRcXHRzZXEgPSByZWFkX3NlcWNvdW50X2JlZ2luKFxcdTAwMjZrYS1cXHUwMDNlcHZjbG9ja19zYyk7XFxuIFxcdFxcdHVzZV9tYXN0ZXJfY2xvY2sgPSBrYS1cXHUwMDNldXNlX21hc3Rlcl9jbG9jaztcXG4tXFx0XFx0aWYgKHVzZV9tYXN0ZXJfY2xvY2spIHtcXG4tXFx0XFx0XFx0aG9zdF90c2MgPSBrYS1cXHUwMDNlbWFzdGVyX2N5Y2xlX25vdztcXG4tXFx0XFx0XFx0a2VybmVsX25zID0ga2EtXFx1MDAzZW1hc3Rlcl9rZXJuZWxfbnM7XFxuK1xcdFxcdGlmICghdXNlX21hc3Rlcl9jbG9jaylcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRpZiAoIWt2bV9nZXRfdGltZV9hbmRfY2xvY2tyZWFkKFxcdTAwMjZrZXJuZWxfbnMsIFxcdTAwMjZob3N0X3RzYykpIHtcXG4rXFx0XFx0XFx0dXNlX21hc3Rlcl9jbG9jayA9IGZhbHNlO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbi1cXHR9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KFxcdTAwMjZrYS1cXHUwMDNlcHZjbG9ja19zYywgc2VxKSk7XFxuIFxcbi1cXHQvKiBLZWVwIGlycSBkaXNhYmxlZCB0byBwcmV2ZW50IGNoYW5nZXMgdG8gdGhlIGNsb2NrICovXFxuLVxcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcXG4tXFx0dGd0X3RzY19raHogPSBnZXRfY3B1X3RzY19raHooKTtcXG4tXFx0aWYgKHVubGlrZWx5KHRndF90c2Nfa2h6ID09IDApKSB7XFxuLVxcdFxcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcXG4rXFx0XFx0bWFzdGVyX3RzYyA9IGthLVxcdTAwM2VtYXN0ZXJfY3ljbGVfbm93O1xcbitcXHRcXHRtYXN0ZXJfbnMgPSBrYS1cXHUwMDNlbWFzdGVyX2tlcm5lbF9ucztcXG4rXFx0fSB3aGlsZSAocmVhZF9zZXFjb3VudF9yZXRyeShcXHUwMDI2a2EtXFx1MDAzZXB2Y2xvY2tfc2MsIHNlcSkpO1xcbisjZWxzZVxcbitcXHRjb25zdCBib29sIHVzZV9tYXN0ZXJfY2xvY2sgPSBmYWxzZTtcXG4rI2VuZGlmXFxuK1xcdC8qXFxuK1xcdCAqIEVuc3VyZSByZWFkaW5nIHRoZSBUU0MrZnJlcXVlbmN5IHBhaXIgaXMgZG9uZSBvbiB0aGUgc2FtZSBDUFUuICBXaGVuXFxuK1xcdCAqIE5PVCB1c2luZyB0aGUgbWFzdGVyIGNsb2NrLCB0aGUgVFNDIGZyZXF1ZW5jeSBtYXkgdmFyeSBiZXR3ZWVuIENQVXMuXFxuK1xcdCAqL1xcbitcXHRwcmVlbXB0X2Rpc2FibGUoKTtcXG4rXFx0dGd0X3RzY19oeiA9ICh1NjQpZ2V0X2NwdV90c2Nfa2h6KCkgKiBIWl9QRVJfS0haO1xcbitcXHRpZiAodW5saWtlbHkodGd0X3RzY19oeiA9PSAwKSkge1xcbitcXHRcXHRwcmVlbXB0X2VuYWJsZSgpO1xcbiBcXHRcXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfQ0xPQ0tfVVBEQVRFLCB2KTtcXG4gXFx0XFx0cmV0dXJuIDE7XFxuIFxcdH1cXG5AQCAtMTgyMCwyOCArMTg4OSw0MyBAQCBpbnQga3ZtX2d1ZXN0X3RpbWVfdXBkYXRlKHN0cnVjdCBrdm1fdmNwdSAqdilcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XFxuK1xcdC8qXFxuK1xcdCAqIFJlZnJlc2ggTDEncyBsYXN0IFxcXCJvYnNlcnZlZFxcXCIgVFNDIHRvIG1hdGNoIHRoZSBQViBjbG9jaydzIHRpbWVzdGFtcCxcXG4rXFx0ICogZS5nLiBzbyB0aGF0IHRoZSBndWVzdCBjYW4ndCBzZWUgYSBUU0MgdGhhdCdzIGJlaGluZCB0aGUgcmVmZXJlbmNlLlxcbitcXHQgKi9cXG4rXFx0dmNwdS1cXHUwMDNlbGFzdF9ndWVzdF90c2MgPSB0c2NfdGltZXN0YW1wO1xcbitcXG4rXFx0cHJlZW1wdF9lbmFibGUoKTtcXG4gXFxuIFxcdC8qIFdpdGggYWxsIHRoZSBpbmZvIHdlIGdvdCwgZmlsbCBpbiB0aGUgdmFsdWVzICovXFxuIFxcbiBcXHRpZiAoa3ZtX2NhcHMuaGFzX3RzY19jb250cm9sKSB7XFxuLVxcdFxcdHRndF90c2Nfa2h6ID0ga3ZtX3NjYWxlX3RzYyh0Z3RfdHNjX2toeixcXG4rXFx0XFx0dGd0X3RzY19oeiA9IGt2bV9zY2FsZV90c2ModGd0X3RzY19oeixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIHYtXFx1MDAzZWFyY2gubDFfdHNjX3NjYWxpbmdfcmF0aW8pO1xcbi1cXHRcXHR0Z3RfdHNjX2toeiA9IHRndF90c2Nfa2h6ID8gOiAxO1xcbitcXHRcXHR0Z3RfdHNjX2h6ID0gdGd0X3RzY19oeiA/IDogMTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKHVubGlrZWx5KHZjcHUtXFx1MDAzZWh3X3RzY19raHogIT0gdGd0X3RzY19raHopKSB7XFxuLVxcdFxcdGt2bV9nZXRfdGltZV9zY2FsZShOU0VDX1BFUl9TRUMsIHRndF90c2Nfa2h6ICogMTAwMExMLFxcbitcXHRpZiAodW5saWtlbHkodmNwdS1cXHUwMDNlaHdfdHNjX2h6ICE9IHRndF90c2NfaHopKSB7XFxuK1xcdFxcdGt2bV9nZXRfdGltZV9zY2FsZShOU0VDX1BFUl9TRUMsIHRndF90c2NfaHosXFxuIFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZ2Y3B1LVxcdTAwM2VwdmNsb2NrX3RzY19zaGlmdCxcXG4gXFx0XFx0XFx0XFx0ICAgXFx1MDAyNnZjcHUtXFx1MDAzZXB2Y2xvY2tfdHNjX211bCk7XFxuLVxcdFxcdHZjcHUtXFx1MDAzZWh3X3RzY19raHogPSB0Z3RfdHNjX2toejtcXG4rXFx0XFx0dmNwdS1cXHUwMDNlaHdfdHNjX2h6ID0gdGd0X3RzY19oejtcXG4gXFx0fVxcbiBcXG4gXFx0aHZfY2xvY2sudHNjX3NoaWZ0ID0gdmNwdS1cXHUwMDNlcHZjbG9ja190c2Nfc2hpZnQ7XFxuIFxcdGh2X2Nsb2NrLnRzY190b19zeXN0ZW1fbXVsID0gdmNwdS1cXHUwMDNlcHZjbG9ja190c2NfbXVsO1xcbi1cXHRodl9jbG9jay50c2NfdGltZXN0YW1wID0gdHNjX3RpbWVzdGFtcDtcXG4tXFx0aHZfY2xvY2suc3lzdGVtX3RpbWUgPSBrZXJuZWxfbnMgKyB2LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gua3ZtY2xvY2tfb2Zmc2V0O1xcbi1cXHR2Y3B1LVxcdTAwM2VsYXN0X2d1ZXN0X3RzYyA9IHRzY190aW1lc3RhbXA7XFxuK1xcdC8qXFxuK1xcdCAqIElmIHRoZSBtYXN0ZXIgY2xvY2sgaXMgTk9UIGluIHVzZSwgdGhlIHJlZmVyZW5jZSB0aW1lIHBsYWNlZCBpbiB0aGVcXG4rXFx0ICogaHZfY2xvY2sgaXMgXFxcIm5vd1xcXCIuICBJZiBtYXN0ZXIgY2xvY2sgaXMgaW4gdXNlLCB0aGUgcmVmZXJlbmNlIHRpbWUgaXNcXG4rXFx0ICogdGhlIG1hc3RlciBjbG9jaydzIHNuYXBzaG90IGZyb20gc29tZSB0aW1lIGluIHRoZSBwYXN0LCBub3QgXFxcIm5vd1xcXCIuXFxuK1xcdCAqL1xcbitcXHRpZiAodXNlX21hc3Rlcl9jbG9jaykge1xcbitcXHRcXHRodl9jbG9jay50c2NfdGltZXN0YW1wID0ga3ZtX3JlYWRfbDFfdHNjKHYsIG1hc3Rlcl90c2MpO1xcbitcXHRcXHRodl9jbG9jay5zeXN0ZW1fdGltZSA9IG1hc3Rlcl9ucyArIHYtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5rdm1jbG9ja19vZmZzZXQ7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGh2X2Nsb2NrLnRzY190aW1lc3RhbXAgPSB0c2NfdGltZXN0YW1wO1xcbitcXHRcXHRodl9jbG9jay5zeXN0ZW1fdGltZSA9IGtlcm5lbF9ucyArIHYtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5rdm1jbG9ja19vZmZzZXQ7XFxuK1xcdH1cXG4gXFxuIFxcdC8qIElmIHRoZSBob3N0IHVzZXMgVFNDIGNsb2Nrc291cmNlLCB0aGVuIGl0IGlzIHN0YWJsZSAqL1xcbiBcXHRodl9jbG9jay5mbGFncyA9IDA7XFxuQEAgLTE5MDMsNjMgKzE5ODcsMjIgQEAgaW50IGt2bV9ndWVzdF90aW1lX3VwZGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnYpXFxuICAqIHdhbGxjbG9jayBhbmQga3ZtY2xvY2sgdGltZXMsIGFuZCBzdWJ0cmFjdGluZyBvbmUgZnJvbSB0aGUgb3RoZXIuXFxuICAqXFxuICAqIEZhbGwgYmFjayB0byB1c2luZyB0aGVpciB2YWx1ZXMgYXQgc2xpZ2h0bHkgZGlmZmVyZW50IG1vbWVudHMgYnlcXG4tICogY2FsbGluZyBrdGltZV9nZXRfcmVhbF9ucygpIGFuZCBnZXRfa3ZtY2xvY2tfbnMoKSBzZXBhcmF0ZWx5LlxcbisgKiBjYWxsaW5nIGt0aW1lX2dldF9yZWFsX25zKCkgYW5kIGdldF9rdm1jbG9jaygpIHNlcGFyYXRlbHkuXFxuICAqL1xcbiB1aW50NjRfdCBrdm1fZ2V0X3dhbGxfY2xvY2tfZXBvY2goc3RydWN0IGt2bSAqa3ZtKVxcbiB7XFxuLSNpZmRlZiBDT05GSUdfWDg2XzY0XFxuLVxcdHN0cnVjdCBwdmNsb2NrX3ZjcHVfdGltZV9pbmZvIGh2X2Nsb2NrO1xcbi1cXHRzdHJ1Y3Qga3ZtX2FyY2ggKmthID0gXFx1MDAyNmt2bS1cXHUwMDNlYXJjaDtcXG4tXFx0dW5zaWduZWQgbG9uZyBzZXEsIGxvY2FsX3RzY19raHo7XFxuLVxcdHN0cnVjdCB0aW1lc3BlYzY0IHRzO1xcbi1cXHR1aW50NjRfdCBob3N0X3RzYztcXG4tXFxuLVxcdGRvIHtcXG4tXFx0XFx0c2VxID0gcmVhZF9zZXFjb3VudF9iZWdpbihcXHUwMDI2a2EtXFx1MDAzZXB2Y2xvY2tfc2MpO1xcbi1cXG4tXFx0XFx0bG9jYWxfdHNjX2toeiA9IDA7XFxuLVxcdFxcdGlmICgha2EtXFx1MDAzZXVzZV9tYXN0ZXJfY2xvY2spXFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogVGhlIFRTQyByZWFkIGFuZCB0aGUgY2FsbCB0byBnZXRfY3B1X3RzY19raHooKSBtdXN0IGhhcHBlblxcbi1cXHRcXHQgKiBvbiB0aGUgc2FtZSBDUFUuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRnZXRfY3B1KCk7XFxuLVxcbi1cXHRcXHRsb2NhbF90c2Nfa2h6ID0gZ2V0X2NwdV90c2Nfa2h6KCk7XFxuLVxcbi1cXHRcXHRpZiAobG9jYWxfdHNjX2toeiBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgIWt2bV9nZXRfd2FsbHRpbWVfYW5kX2Nsb2NrcmVhZChcXHUwMDI2dHMsIFxcdTAwMjZob3N0X3RzYykpXFxuLVxcdFxcdFxcdGxvY2FsX3RzY19raHogPSAwOyAvKiBGYWxsIGJhY2sgdG8gb2xkIG1ldGhvZCAqL1xcbi1cXG4tXFx0XFx0cHV0X2NwdSgpO1xcbi1cXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogVGhlc2UgdmFsdWVzIG11c3QgYmUgc25hcHNob3R0ZWQgd2l0aGluIHRoZSBzZXFjb3VudCBsb29wLlxcbi1cXHRcXHQgKiBBZnRlciB0aGF0LCBpdCdzIGp1c3QgbWF0aGVtYXRpY3Mgd2hpY2ggY2FuIGhhcHBlbiBvbiBhbnlcXG4tXFx0XFx0ICogQ1BVIGF0IGFueSB0aW1lLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0aHZfY2xvY2sudHNjX3RpbWVzdGFtcCA9IGthLVxcdTAwM2VtYXN0ZXJfY3ljbGVfbm93O1xcbi1cXHRcXHRodl9jbG9jay5zeXN0ZW1fdGltZSA9IGthLVxcdTAwM2VtYXN0ZXJfa2VybmVsX25zICsga2EtXFx1MDAzZWt2bWNsb2NrX29mZnNldDtcXG4rXFx0c3RydWN0IGt2bV9jbG9ja19kYXRhIGRhdGE7XFxuIFxcbi1cXHR9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KFxcdTAwMjZrYS1cXHUwMDNlcHZjbG9ja19zYywgc2VxKSk7XFxuK1xcdGdldF9rdm1jbG9jayhrdm0sIFxcdTAwMjZkYXRhKTtcXG4gXFxuIFxcdC8qXFxuLVxcdCAqIElmIHRoZSBjb25kaXRpb25zIHdlcmUgcmlnaHQsIGFuZCBvYnRhaW5pbmcgdGhlIHdhbGxjbG9jaytUU0Mgd2FzXFxuLVxcdCAqIHN1Y2Nlc3NmdWwsIGNhbGN1bGF0ZSB0aGUgS1ZNIGNsb2NrIGF0IHRoZSBjb3JyZXNwb25kaW5nIHRpbWUgYW5kXFxuLVxcdCAqIHN1YnRyYWN0IG9uZSBmcm9tIHRoZSBvdGhlciB0byBnZXQgdGhlIGd1ZXN0J3MgZXBvY2ggaW4gbmFub3NlY29uZHNcXG4tXFx0ICogc2luY2UgMTk3MC0wMS0wMS5cXG4rXFx0ICogSWYgZ2V0X2t2bWNsb2NrKCkgY2FwdHVyZWQgYm90aCB3YWxsY2xvY2sgYW5kIGt2bWNsb2NrIGZyb20gdGhlXFxuK1xcdCAqIHNhbWUgVFNDIHJlYWRpbmcsIHVzZSB0aGVtIGZvciBhIHByZWNpc2UgZXBvY2ggY2FsY3VsYXRpb24uXFxuIFxcdCAqL1xcbi1cXHRpZiAobG9jYWxfdHNjX2toeikge1xcbi1cXHRcXHRrdm1fZ2V0X3RpbWVfc2NhbGUoTlNFQ19QRVJfU0VDLCBsb2NhbF90c2Nfa2h6ICogTlNFQ19QRVJfVVNFQyxcXG4tXFx0XFx0XFx0XFx0ICAgXFx1MDAyNmh2X2Nsb2NrLnRzY19zaGlmdCxcXG4tXFx0XFx0XFx0XFx0ICAgXFx1MDAyNmh2X2Nsb2NrLnRzY190b19zeXN0ZW1fbXVsKTtcXG4tXFx0XFx0cmV0dXJuIHRzLnR2X25zZWMgKyBOU0VDX1BFUl9TRUMgKiB0cy50dl9zZWMgLVxcbi1cXHRcXHRcXHRfX3B2Y2xvY2tfcmVhZF9jeWNsZXMoXFx1MDAyNmh2X2Nsb2NrLCBob3N0X3RzYyk7XFxuLVxcdH1cXG4tI2VuZGlmXFxuLVxcdHJldHVybiBrdGltZV9nZXRfcmVhbF9ucygpIC0gZ2V0X2t2bWNsb2NrX25zKGt2bSk7XFxuK1xcdGlmIChkYXRhLmZsYWdzIFxcdTAwMjYgS1ZNX0NMT0NLX1JFQUxUSU1FKVxcbitcXHRcXHRyZXR1cm4gZGF0YS5yZWFsdGltZSAtIGRhdGEuY2xvY2s7XFxuK1xcbitcXHRyZXR1cm4ga3RpbWVfZ2V0X3JlYWxfbnMoKSAtIGRhdGEuY2xvY2s7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTI1ODMsNyArMjYyNiw3IEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcXG4gXFx0XFx0XFx0bWFya190c2NfdW5zdGFibGUoXFxcIktWTSBkaXNjb3ZlcmVkIGJhY2t3YXJkcyBUU0NcXFwiKTtcXG4gXFxuIFxcdFxcdGlmIChrdm1fY2hlY2tfdHNjX3Vuc3RhYmxlKCkpIHtcXG4tXFx0XFx0XFx0dTY0IG9mZnNldCA9IGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXQodmNwdSxcXG4rXFx0XFx0XFx0dTY0IG9mZnNldCA9IGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXQodmNwdSwgcmR0c2MoKSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5sYXN0X2d1ZXN0X3RzYyk7XFxuIFxcdFxcdFxcdGt2bV92Y3B1X3dyaXRlX3RzY19vZmZzZXQodmNwdSwgb2Zmc2V0KTtcXG4gXFx0XFx0XFx0aWYgKCF2Y3B1LVxcdTAwM2VhcmNoLmd1ZXN0X3RzY19wcm90ZWN0ZWQpXFxuQEAgLTY4NjYsNiArNjkwOSw3IEBAIHN0YXRpYyB2b2lkIHB2Y2xvY2tfaXJxX3dvcmtfZm4oc3RydWN0IGlycV93b3JrICp3KVxcbiB9XFxuIFxcbiBzdGF0aWMgREVGSU5FX0lSUV9XT1JLKHB2Y2xvY2tfaXJxX3dvcmssIHB2Y2xvY2tfaXJxX3dvcmtfZm4pO1xcbisjZW5kaWZcXG4gXFxuIC8qXFxuICAqIE5vdGlmaWNhdGlvbiBhYm91dCBwdmNsb2NrIGd0b2QgZGF0YSB1cGRhdGUuXFxuQEAgLTY4NzMsMjYgKzY5MTcsMjYgQEAgc3RhdGljIERFRklORV9JUlFfV09SSyhwdmNsb2NrX2lycV93b3JrLCBwdmNsb2NrX2lycV93b3JrX2ZuKTtcXG4gc3RhdGljIGludCBwdmNsb2NrX2d0b2Rfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgdW51c2VkLFxcbiBcXHRcXHRcXHQgICAgICAgdm9pZCAqcHJpdilcXG4ge1xcbi1cXHRzdHJ1Y3QgcHZjbG9ja19ndG9kX2RhdGEgKmd0b2QgPSBcXHUwMDI2cHZjbG9ja19ndG9kX2RhdGE7XFxuIFxcdHN0cnVjdCB0aW1la2VlcGVyICp0ayA9IHByaXY7XFxuIFxcbiBcXHR1cGRhdGVfcHZjbG9ja19ndG9kKHRrKTtcXG4gXFxuKyNpZmRlZiBDT05GSUdfWDg2XzY0XFxuIFxcdC8qXFxuIFxcdCAqIERpc2FibGUgbWFzdGVyIGNsb2NrIGlmIGhvc3QgZG9lcyBub3QgdHJ1c3QsIG9yIGRvZXMgbm90IHVzZSxcXG4gXFx0ICogVFNDIGJhc2VkIGNsb2Nrc291cmNlLiBEZWxlZ2F0ZSBxdWV1ZV93b3JrKCkgdG8gaXJxX3dvcmsgYXNcXG4gXFx0ICogdGhpcyBpcyBpbnZva2VkIHdpdGggdGtfY29yZS5zZXEgd3JpdGUgaGVsZC5cXG4gXFx0ICovXFxuLVxcdGlmICghZ3RvZF9pc19iYXNlZF9vbl90c2MoZ3RvZC1cXHUwMDNlY2xvY2sudmNsb2NrX21vZGUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdGlmICghZ3RvZF9pc19iYXNlZF9vbl90c2MocHZjbG9ja19ndG9kX2RhdGEuY2xvY2sudmNsb2NrX21vZGUpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBhdG9taWNfcmVhZChcXHUwMDI2a3ZtX2d1ZXN0X2hhc19tYXN0ZXJfY2xvY2spICE9IDApXFxuIFxcdFxcdGlycV93b3JrX3F1ZXVlKFxcdTAwMjZwdmNsb2NrX2lycV93b3JrKTtcXG4rI2VuZGlmXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHB2Y2xvY2tfZ3RvZF9ub3RpZmllciA9IHtcXG4gXFx0Lm5vdGlmaWVyX2NhbGwgPSBwdmNsb2NrX2d0b2Rfbm90aWZ5LFxcbiB9O1xcbi0jZW5kaWZcXG4gXFxuIHZvaWQga3ZtX3NldHVwX3hzc19jYXBzKHZvaWQpXFxuIHtcXG5AQCAtNzExMSw5ICs3MTU1LDkgQEAgaW50IGt2bV94ODZfdmVuZG9yX2luaXQoc3RydWN0IGt2bV94ODZfaW5pdF9vcHMgKm9wcylcXG4gXFxuIFxcdGlmIChwaV9pbmplY3RfdGltZXIgPT0gLTEpXFxuIFxcdFxcdHBpX2luamVjdF90aW1lciA9IGhvdXNla2VlcGluZ19lbmFibGVkKEhLX1RZUEVfVElNRVIpO1xcbi0jaWZkZWYgQ09ORklHX1g4Nl82NFxcbiBcXHRwdmNsb2NrX2d0b2RfcmVnaXN0ZXJfbm90aWZpZXIoXFx1MDAyNnB2Y2xvY2tfZ3RvZF9ub3RpZmllcik7XFxuIFxcbisjaWZkZWYgQ09ORklHX1g4Nl82NFxcbiBcXHRpZiAoaHlwZXJ2aXNvcl9pc190eXBlKFg4Nl9IWVBFUl9NU19IWVBFUlYpKVxcbiBcXHRcXHRzZXRfaHZfdHNjY2hhbmdlX2NiKGt2bV9oeXBlcnZfdHNjX25vdGlmaWVyKTtcXG4gI2VuZGlmXFxuQEAgLTcxNzAsOCArNzIxNCw4IEBAIHZvaWQga3ZtX3g4Nl92ZW5kb3JfZXhpdCh2b2lkKVxcbiBcXHRcXHRcXHRcXHRcXHQgICAgQ1BVRlJFUV9UUkFOU0lUSU9OX05PVElGSUVSKTtcXG4gXFx0XFx0Y3B1aHBfcmVtb3ZlX3N0YXRlX25vY2FsbHMoQ1BVSFBfQVBfWDg2X0tWTV9DTEtfT05MSU5FKTtcXG4gXFx0fVxcbi0jaWZkZWYgQ09ORklHX1g4Nl82NFxcbiBcXHRwdmNsb2NrX2d0b2RfdW5yZWdpc3Rlcl9ub3RpZmllcihcXHUwMDI2cHZjbG9ja19ndG9kX25vdGlmaWVyKTtcXG4rI2lmZGVmIENPTkZJR19YODZfNjRcXG4gXFx0aXJxX3dvcmtfc3luYyhcXHUwMDI2cHZjbG9ja19pcnFfd29yayk7XFxuIFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnB2Y2xvY2tfZ3RvZF93b3JrKTtcXG4gI2VuZGlmXFxuQEAgLTk0NDAsNiArOTQ4NCw4IEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR2Y3B1X2xvYWQodmNwdSk7XFxuIFxcdGt2bV9zeW5jaHJvbml6ZV90c2ModmNwdSwgTlVMTCk7XFxuK1xcdGlmICghdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLnVzZV9tYXN0ZXJfY2xvY2spXFxuK1xcdFxcdGt2bV91cGRhdGVfbWFzdGVyY2xvY2sodmNwdS1cXHUwMDNla3ZtKTtcXG4gXFx0dmNwdV9wdXQodmNwdSk7XFxuIFxcbiBcXHQvKiBwb2xsIGNvbnRyb2wgZW5hYmxlZCBieSBkZWZhdWx0ICovXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuaCBiL2FyY2gveDg2L2t2bS94ODYuaFxcbmluZGV4IDBmNTkxOWIwOTJlNDcuLjFkOWE2NjA0OGIwMWUgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5oXFxuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5oXFxuQEAgLTMzNSw3ICszMzUsOCBAQCB1NjQga3ZtX3NjYWxlX3RzYyh1NjQgdHNjLCB1NjQgcmF0aW8pO1xcbiB1NjQga3ZtX3JlYWRfbDFfdHNjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGhvc3RfdHNjKTtcXG4gdTY0IGt2bV9jYWxjX25lc3RlZF90c2Nfb2Zmc2V0KHU2NCBsMV9vZmZzZXQsIHU2NCBsMl9vZmZzZXQsIHU2NCBsMl9tdWx0aXBsaWVyKTtcXG4gdTY0IGt2bV9jYWxjX25lc3RlZF90c2NfbXVsdGlwbGllcih1NjQgbDFfbXVsdGlwbGllciwgdTY0IGwyX211bHRpcGxpZXIpO1xcbi11NjQga3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB0YXJnZXRfdHNjKTtcXG4rdTY0IGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgaG9zdF90c2MsXFxuK1xcdFxcdFxcdCAgICAgIHU2NCB0YXJnZXRfdHNjKTtcXG4gdm9pZCBrdm1fdmNwdV93cml0ZV90c2Nfb2Zmc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGwxX29mZnNldCk7XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgYWRqdXN0X3RzY19vZmZzZXRfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMDozOTowNC4yMjMzNzk1OTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozMTExNjA5ODYxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0FNRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9zeW5jaHJvbml6ZV90c2NcIixcbiAgICBcImt2bV9ndWVzdF90aW1lX3VwZGF0ZVwiLFxuICAgIFwia3ZtX2dldF93YWxsX2Nsb2NrX2Vwb2NoXCIsXG4gICAgXCJrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0XCIsXG4gICAgXCJrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0geDg2IFRTQyAoVGltZSBTdGFtcCBDb3VudGVyKSBoYW5kbGluZywgaW5jbHVkaW5nIFRTQyBzY2FsaW5nLCBtYXN0ZXIgY2xvY2sgdXBkYXRlcywgYW5kIHdhbGwgY2xvY2sgZXBvY2ggY2FsY3VsYXRpb25zLiBUaGlzIGlzIGNvcmUgaHlwZXJ2aXNvciBsb2dpYyByZWFjaGFibGUgZnJvbSBndWVzdCBWTXMgdmlhIE1TUiB3cml0ZXMsIENQVUlELCBhbmQgS1ZNIGlvY3Rscy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBoYW5kbGluZyBUU0Mgc3luY2hyb25pemF0aW9uIGFuZCBndWVzdCB0aW1lIHVwZGF0ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI2MjQ0NDRjNTIwYjg0NzMzZTkyZjY1ZWRlMjZkMGZmYjViNTJmODhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyA1IDAwOjM5OjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IDI4Mzg0NzYxOWZmODguLjI4NzhhNTE4MWNkOWIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtODY0LDcgKzg2NCw3IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcbiBcdGdwYV90IHRpbWU7XG4gXHRzOCAgcHZjbG9ja190c2Nfc2hpZnQ7XG4gXHR1MzIgcHZjbG9ja190c2NfbXVsO1xuLVx0dW5zaWduZWQgaW50IGh3X3RzY19raHo7XG4rXHR1NjQgaHdfdHNjX2h6O1xuIFx0c3RydWN0IGdmbl90b19wZm5fY2FjaGUgcHZfdGltZTtcbiBcdC8qIHNldCBndWVzdCBzdG9wcGVkIGZsYWcgaW4gcHZjbG9jayBmbGFncyBmaWVsZCAqL1xuIFx0Ym9vbCBwdmNsb2NrX3NldF9ndWVzdF9zdG9wcGVkX3JlcXVlc3Q7XG5AQCAtMTIzNiw2ICsxMjM2LDcgQEAgc3RydWN0IGt2bV9hcmNoIHtcbiBcdHU2NCBsYXN0X3RzY193cml0ZTtcbiBcdHUzMiBsYXN0X3RzY19raHo7XG4gXHR1NjQgbGFzdF90c2Nfb2Zmc2V0O1xuK1x0dTY0IGxhc3RfdHNjX3NjYWxpbmdfcmF0aW87XG4gXHR1NjQgY3VyX3RzY19uc2VjO1xuIFx0dTY0IGN1cl90c2Nfd3JpdGU7XG4gXHR1NjQgY3VyX3RzY19vZmZzZXQ7XG5AQCAtMTI1MSw2ICsxMjUyLDkgQEAgc3RydWN0IGt2bV9hcmNoIHtcbiBcdHU2NCBtYXN0ZXJfa2VybmVsX25zO1xuIFx0dTY0IG1hc3Rlcl9jeWNsZV9ub3c7XG4gXHRzdHJ1Y3QgcmF0ZWxpbWl0X3N0YXRlIGt2bWNsb2NrX3VwZGF0ZV9ycztcbitcdHU2NCBtYXN0ZXJfdHNjX3NjYWxpbmdfcmF0aW87XG4rXHRzOCAgbWFzdGVyX3RzY19zaGlmdDtcbitcdHUzMiBtYXN0ZXJfdHNjX211bDtcbiBcbiAjaWZkZWYgQ09ORklHX0tWTV9IWVBFUlZcbiBcdHN0cnVjdCBrdm1faHYgaHlwZXJ2O1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9jcHVpZC5jIGIvYXJjaC94ODYva3ZtL2NwdWlkLmNcbmluZGV4IDllOWNmNjUzOGE5NmUuLjcwNDlmNWE1NTk3YjQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vY3B1aWQuY1xuKysrIGIvYXJjaC94ODYva3ZtL2NwdWlkLmNcbkBAIC0xNiw2ICsxNiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdm1hbGxvYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWFjY2Vzcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvc3RhdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdW5pdHMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS9wcm9jZXNzb3IuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS91c2VyLmhcdTAwM2VcbkBAIC0yMTQ2LDcgKzIxNDcsNyBAQCBib29sIGt2bV9jcHVpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiAqZWF4LCB1MzIgKmVieCxcbiBcdFx0XHRcdCplY3ggPSB2Y3B1LVx1MDAzZWFyY2gucHZjbG9ja190c2NfbXVsO1xuIFx0XHRcdFx0KmVkeCA9IHZjcHUtXHUwMDNlYXJjaC5wdmNsb2NrX3RzY19zaGlmdDtcbiBcdFx0XHR9IGVsc2UgaWYgKGluZGV4ID09IDIpIHtcbi1cdFx0XHRcdCplYXggPSB2Y3B1LVx1MDAzZWFyY2guaHdfdHNjX2toejtcbitcdFx0XHRcdCplYXggPSBkaXZfdTY0KHZjcHUtXHUwMDNlYXJjaC5od190c2NfaHosIEhaX1BFUl9LSFopO1xuIFx0XHRcdH1cbiBcdFx0fVxuIFx0fSBlbHNlIHtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbXNycy5jIGIvYXJjaC94ODYva3ZtL21zcnMuY1xuaW5kZXggNjZmYTcxNDBkNjVkOS4uMjJjZWIzOWQ0MWY2NiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tc3JzLmNcbisrKyBiL2FyY2gveDg2L2t2bS9tc3JzLmNcbkBAIC0xNjMxLDcgKzE2MzEsOCBAQCBpbnQga3ZtX3NldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcbiBcdFx0aWYgKG1zcl9pbmZvLVx1MDAzZWhvc3RfaW5pdGlhdGVkKSB7XG4gXHRcdFx0a3ZtX3N5bmNocm9uaXplX3RzYyh2Y3B1LCBcdTAwMjZkYXRhKTtcbiBcdFx0fSBlbHNlIGlmICghdmNwdS1cdTAwM2VhcmNoLmd1ZXN0X3RzY19wcm90ZWN0ZWQpIHtcbi1cdFx0XHR1NjQgYWRqID0ga3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldCh2Y3B1LCBkYXRhKSAtIHZjcHUtXHUwMDNlYXJjaC5sMV90c2Nfb2Zmc2V0O1xuK1x0XHRcdHU2NCBhZGogPSBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0KHZjcHUsIHJkdHNjKCksIGRhdGEpIC1cbitcdFx0XHRcdCAgdmNwdS1cdTAwM2VhcmNoLmwxX3RzY19vZmZzZXQ7XG4gXHRcdFx0YWRqdXN0X3RzY19vZmZzZXRfZ3Vlc3QodmNwdSwgYWRqKTtcbiBcdFx0XHR2Y3B1LVx1MDAzZWFyY2guaWEzMl90c2NfYWRqdXN0X21zciArPSBhZGo7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuaW5kZXggOWQ2MDdiOThiZDA2Ny4uMzA1N2NhNzA1MWRiMSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbkBAIC01NjAyLDcgKzU2MDIsOCBAQCBzdGF0aWMgX19pbml0IGludCBzdm1faGFyZHdhcmVfc2V0dXAodm9pZClcbiBcdFx0XHRcdCAgICAgWEZFQVRVUkVfTUFTS19CTkRDU1IpO1xuIFxuIFx0aWYgKHRzY19zY2FsaW5nKSB7XG4tXHRcdGlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1RTQ1JBVEVNU1IpKSB7XG4rXHRcdGlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1RTQ1JBVEVNU1IpIHx8XG4rXHRcdCAgICAhYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQykpIHtcbiBcdFx0XHR0c2Nfc2NhbGluZyA9IGZhbHNlO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdHByX2luZm8oXCJUU0Mgc2NhbGluZyBzdXBwb3J0ZWRcXG5cIik7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguYyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbmluZGV4IGUzYmZlNmFjYTFhMGUuLjlhYmQyZWQzYWVhZTIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG5AQCAtMjg0MSw2ICsyODQxLDE2IEBAIHN0YXRpYyBpbnQgc2V0dXBfdm1jc19jb25maWcoc3RydWN0IHZtY3NfY29uZmlnICp2bWNzX2NvbmYsXG4gXHRpZiAoIWNwdV9oYXNfc2d4KCkpXG4gXHRcdF9jcHVfYmFzZWRfMm5kX2V4ZWNfY29udHJvbCBcdTAwMjY9IH5TRUNPTkRBUllfRVhFQ19FTkNMU19FWElUSU5HO1xuIFxuK1x0LypcbitcdCAqIEtWTSBkb2Vzbid0IHJlLWRlcml2ZSB0aGUgVFNDIHNjYWxpbmcgcmF0aW8gd2hlbiB0aGUgaG9zdCBUU0NcbitcdCAqIGZyZXF1ZW5jeSBjaGFuZ2VzLCBzbyBUU0Mgc2NhbGluZyBpcyBvbmx5IHVzYWJsZSB3aXRoIGEgY29uc3RhbnRcbitcdCAqIFRTQy4gIENsZWFyIHRoZSBjb250cm9sIGhlcmUgcmF0aGVyIHRoYW4gaW4gdm14X2hhcmR3YXJlX3NldHVwKCkgc29cbitcdCAqIHRoYXQgdGhlIHBlci1DUFUgY29uZmlncyByZWNvbXB1dGVkIGJ5IHZteF9jaGVja19wcm9jZXNzb3JfY29tcGF0KClcbitcdCAqIHN0YXkgY29uc2lzdGVudCB3aXRoIHRoZSBnb2xkZW4gdm1jc19jb25maWcuXG4rXHQgKi9cbitcdGlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQykpXG4rXHRcdF9jcHVfYmFzZWRfMm5kX2V4ZWNfY29udHJvbCBcdTAwMjY9IH5TRUNPTkRBUllfRVhFQ19UU0NfU0NBTElORztcbitcbiBcdGlmIChfY3B1X2Jhc2VkX2V4ZWNfY29udHJvbCBcdTAwMjYgQ1BVX0JBU0VEX0FDVElWQVRFX1RFUlRJQVJZX0NPTlRST0xTKVxuIFx0XHRfY3B1X2Jhc2VkXzNyZF9leGVjX2NvbnRyb2wgPVxuIFx0XHRcdGFkanVzdF92bXhfY29udHJvbHM2NChLVk1fT1BUSU9OQUxfVk1YX1RFUlRJQVJZX1ZNX0VYRUNfQ09OVFJPTCxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbmluZGV4IGQ5NGI1OTE0MGM0NTIuLmNiZTRmZDM0NTdiNDQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmNcbisrKyBiL2FyY2gveDg2L2t2bS94ODYuY1xuQEAgLTYxLDYgKzYxLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1fZW5jcnlwdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3VzcGVuZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc21wLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC91bml0cy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjdHJhY2UvZXZlbnRzL2lwaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdHJhY2UvZXZlbnRzL2t2bS5oXHUwMDNlXG5AQCAtODczLDcgKzg3NCw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fdmNwdV9leGl0X3JlcXVlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICAgICAgIGt2bV9yZXF1ZXN0X3BlbmRpbmcodmNwdSkgfHwgeGZlcl90b19ndWVzdF9tb2RlX3dvcmtfcGVuZGluZygpO1xuIH1cbiBcbi0jaWZkZWYgQ09ORklHX1g4Nl82NFxuIHN0cnVjdCBwdmNsb2NrX2Nsb2NrIHtcbiBcdGludCB2Y2xvY2tfbW9kZTtcbiBcdHU2NCBjeWNsZV9sYXN0O1xuQEAgLTkzMSwxMyArOTMxLDYgQEAgc3RhdGljIHM2NCBnZXRfa3ZtY2xvY2tfYmFzZV9ucyh2b2lkKVxuIFx0LyogQ291bnQgdXAgZnJvbSBib290IHRpbWUsIGJ1dCB3aXRoIHRoZSBmcmVxdWVuY3kgb2YgdGhlIHJhdyBjbG9jay4gICovXG4gXHRyZXR1cm4ga3RpbWVfdG9fbnMoa3RpbWVfYWRkKGt0aW1lX2dldF9yYXcoKSwgcHZjbG9ja19ndG9kX2RhdGEub2Zmc19ib290KSk7XG4gfVxuLSNlbHNlXG4tc3RhdGljIHM2NCBnZXRfa3ZtY2xvY2tfYmFzZV9ucyh2b2lkKVxuLXtcbi1cdC8qIE1hc3RlciBjbG9jayBub3QgdXNlZCwgc28gd2UgY2FuIGp1c3QgdXNlIENMT0NLX0JPT1RUSU1FLiAgKi9cbi1cdHJldHVybiBrdGltZV9nZXRfYm9vdHRpbWVfbnMoKTtcbi19XG4tI2VuZGlmXG4gXG4gc3RhdGljIHVpbnQzMl90IGRpdl9mcmFjKHVpbnQzMl90IGRpdmlkZW5kLCB1aW50MzJfdCBkaXZpc29yKVxuIHtcbkBAIC05NDUsMzIgKzkzOCw1NyBAQCBzdGF0aWMgdWludDMyX3QgZGl2X2ZyYWModWludDMyX3QgZGl2aWRlbmQsIHVpbnQzMl90IGRpdmlzb3IpXG4gXHRyZXR1cm4gZGl2aWRlbmQ7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGt2bV9nZXRfdGltZV9zY2FsZSh1aW50NjRfdCBzY2FsZWRfaHosIHVpbnQ2NF90IGJhc2VfaHosXG4rc3RhdGljIHZvaWQga3ZtX2dldF90aW1lX3NjYWxlKHU2NCBzY2FsZWRfaHosIHU2NCBiYXNlX2h6LFxuIFx0XHRcdCAgICAgICBzOCAqcHNoaWZ0LCB1MzIgKnBtdWx0aXBsaWVyKVxuIHtcbi1cdHVpbnQ2NF90IHNjYWxlZDY0O1xuLVx0aW50MzJfdCAgc2hpZnQgPSAwO1xuLVx0dWludDY0X3QgdHBzNjQ7XG4tXHR1aW50MzJfdCB0cHMzMjtcbitcdHU2NCBzY2FsZWRfaHpfdTY0ID0gc2NhbGVkX2h6O1xuK1x0czMyIHNoaWZ0ID0gMDtcbitcdHU2NCBiYXNlX2h6X3U2NDtcbitcdHUzMiBiYXNlMzI7XG4rXG4rXHQvKlxuK1x0ICogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIGEgZml4ZWQtcG9pbnQgbXVsdGlwbGllciBhbmQgc2hpZnQgc3VjaFxuK1x0ICogdGhhdDpcbitcdCAqICAgdGltZV9ucyA9ICh0c2NfY3ljbGVzIFx1MDAzY1x1MDAzYyBzaGlmdCkgKiBtdWx0aXBsaWVyIFx1MDAzZVx1MDAzZSAzMlxuK1x0ICpcbitcdCAqIFdoZXJlIHRzY19jeWNsZXMgdGljayBhdCBiYXNlX2h6LCBhbmQgdGltZV9ucyBzaG91bGQgY291bnQgYXRcbitcdCAqIHNjYWxlZF9oeiAodHlwaWNhbGx5IE5TRUNfUEVSX1NFQyBmb3IgYSBUU0PihpJuYW5vc2Vjb25kcyBjb252ZXJzaW9uKS5cbitcdCAqXG4rXHQgKiBUaGUgbXVsdGlwbGllciBpczogKHNjYWxlZF9oeiBcdTAwM2NcdTAwM2MgMzIpIC8gYmFzZV9oeiwgYWRqdXN0ZWQgYnkgc2hpZnRcbitcdCAqIHRvIGtlZXAgZXZlcnl0aGluZyBpbiByYW5nZS5cbitcdCAqL1xuIFxuLVx0dHBzNjQgPSBiYXNlX2h6O1xuLVx0c2NhbGVkNjQgPSBzY2FsZWRfaHo7XG4tXHR3aGlsZSAodHBzNjQgXHUwMDNlIHNjYWxlZDY0KjIgfHwgdHBzNjQgXHUwMDI2IDB4ZmZmZmZmZmYwMDAwMDAwMFVMTCkge1xuLVx0XHR0cHM2NCBcdTAwM2VcdTAwM2U9IDE7XG4rXHRiYXNlX2h6X3U2NCA9IGJhc2VfaHo7XG4rXG4rXHQvKlxuK1x0ICogU3RhcnQgYnkgc2hpZnRpbmcgYmFzZV9oeiByaWdodCB1bnRpbCBpdCBmaXRzIGluIDMyIGJpdHMsIGFuZFxuK1x0ICogaXMgbG93ZXIgdGhhbiBkb3VibGUgdGhlIHRhcmdldCByYXRlLiBUaGlzIGludHJvZHVjZXMgYSBuZWdhdGl2ZVxuK1x0ICogc2hpZnQgdmFsdWUgd2hpY2ggd291bGQgcmVzdWx0IGluIHB2Y2xvY2tfc2NhbGVfZGVsdGEoKSBzaGlmdGluZ1xuK1x0ICogdGhlIGFjdHVhbCB0aWNrIGNvdW50IHJpZ2h0IGJlZm9yZSBwZXJmb3JtaW5nIHRoZSBtdWx0aXBsaWNhdGlvbi5cbitcdCAqL1xuK1x0d2hpbGUgKGJhc2VfaHpfdTY0IFx1MDAzZSBzY2FsZWRfaHpfdTY0ICogMiB8fCBiYXNlX2h6X3U2NCBcdTAwM2VcdTAwM2UgMzIpIHtcbitcdFx0YmFzZV9oel91NjQgXHUwMDNlXHUwMDNlPSAxO1xuIFx0XHRzaGlmdC0tO1xuIFx0fVxuIFxuLVx0dHBzMzIgPSAodWludDMyX3QpdHBzNjQ7XG4tXHR3aGlsZSAodHBzMzIgXHUwMDNjPSBzY2FsZWQ2NCB8fCBzY2FsZWQ2NCBcdTAwMjYgMHhmZmZmZmZmZjAwMDAwMDAwVUxMKSB7XG4tXHRcdGlmIChzY2FsZWQ2NCBcdTAwMjYgMHhmZmZmZmZmZjAwMDAwMDAwVUxMIHx8IHRwczMyIFx1MDAyNiAweDgwMDAwMDAwKVxuLVx0XHRcdHNjYWxlZDY0IFx1MDAzZVx1MDAzZT0gMTtcbitcdC8qIE5vdyB0aGUgc2hpZnRlZCBiYXNlX2h6IGZpdHMgaW4gMzIgYml0cy4gKi9cbitcdGJhc2UzMiA9ICh1MzIpYmFzZV9oel91NjQ7XG4rXG4rXHQvKlxuK1x0ICogTmV4dCwgc2hpZnQgc2NhbGVkX2h6IHJpZ2h0IHVudGlsIGl0IGZpdHMgaW4gMzIgYml0cywgYW5kIGVuc3VyZVxuK1x0ICogdGhhdCB0aGUgc2hpZnRlZCBiYXNlX2h6IGlzIHN0cmljdGx5IGxhcmdlciAoc28gdGhhdCB0aGUgcmVzdWx0IG9mIHRoZVxuK1x0ICogZmluYWwgZGl2aXNpb24gYWxzbyBmaXRzIGluIDMyIGJpdHMpLlxuK1x0ICovXG4rXHR3aGlsZSAoYmFzZTMyIFx1MDAzYz0gc2NhbGVkX2h6X3U2NCB8fCBzY2FsZWRfaHpfdTY0IFx1MDAzZVx1MDAzZSAzMikge1xuK1x0XHRpZiAoc2NhbGVkX2h6X3U2NCBcdTAwM2VcdTAwM2UgMzIgfHwgYmFzZTMyIFx1MDAyNiBCSVQoMzEpKVxuK1x0XHRcdHNjYWxlZF9oel91NjQgXHUwMDNlXHUwMDNlPSAxO1xuIFx0XHRlbHNlXG4tXHRcdFx0dHBzMzIgXHUwMDNjXHUwMDNjPSAxO1xuK1x0XHRcdGJhc2UzMiBcdTAwM2NcdTAwM2M9IDE7XG4gXHRcdHNoaWZ0Kys7XG4gXHR9XG4gXG4gXHQqcHNoaWZ0ID0gc2hpZnQ7XG4tXHQqcG11bHRpcGxpZXIgPSBkaXZfZnJhYyhzY2FsZWQ2NCwgdHBzMzIpO1xuK1x0KnBtdWx0aXBsaWVyID0gZGl2X2ZyYWMoc2NhbGVkX2h6X3U2NCwgYmFzZTMyKTtcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19YODZfNjRcbkBAIC0xMDYxLDExICsxMDc5LDE1IEBAIHN0YXRpYyBpbnQga3ZtX3NldF90c2Nfa2h6KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHVzZXJfdHNjX2toeilcbiBcbiBzdGF0aWMgdTY0IGNvbXB1dGVfZ3Vlc3RfdHNjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgczY0IGtlcm5lbF9ucylcbiB7XG4tXHR1NjQgdHNjID0gcHZjbG9ja19zY2FsZV9kZWx0YShrZXJuZWxfbnMtdmNwdS1cdTAwM2VhcmNoLnRoaXNfdHNjX25zZWMsXG4tXHRcdFx0XHQgICAgICB2Y3B1LVx1MDAzZWFyY2gudmlydHVhbF90c2NfbXVsdCxcbi1cdFx0XHRcdCAgICAgIHZjcHUtXHUwMDNlYXJjaC52aXJ0dWFsX3RzY19zaGlmdCk7XG4tXHR0c2MgKz0gdmNwdS1cdTAwM2VhcmNoLnRoaXNfdHNjX3dyaXRlO1xuLVx0cmV0dXJuIHRzYztcbitcdHM2NCBkZWx0YV9ucyA9IGtlcm5lbF9ucyAtIHZjcHUtXHUwMDNlYXJjaC50aGlzX3RzY19uc2VjO1xuK1x0dTY0IHRzYztcbitcbitcdC8qIEhhbmRsZSBuZWdhdGl2ZSBkZWx0YXMgZ3JhY2VmdWxseSAobWFzdGVyIGNsb2NrIHJlZiBtYXkgYmUgZWFybGllcikgKi9cbitcdHRzYyA9IHB2Y2xvY2tfc2NhbGVfZGVsdGEoYWJzKGRlbHRhX25zKSxcbitcdFx0XHRcdCAgdmNwdS1cdTAwM2VhcmNoLnZpcnR1YWxfdHNjX211bHQsXG4rXHRcdFx0XHQgIHZjcHUtXHUwMDNlYXJjaC52aXJ0dWFsX3RzY19zaGlmdCk7XG4rXG4rXHRyZXR1cm4gdmNwdS1cdTAwM2VhcmNoLnRoaXNfdHNjX3dyaXRlICsgKGRlbHRhX25zIFx1MDAzZT0gMCA/IHRzYyA6IC10c2MpO1xuIH1cbiBcbiAjaWZkZWYgQ09ORklHX1g4Nl82NFxuQEAgLTExMzEsMTEgKzExNTMsMTIgQEAgdTY0IGt2bV9zY2FsZV90c2ModTY0IHRzYywgdTY0IHJhdGlvKVxuIFx0cmV0dXJuIF90c2M7XG4gfVxuIFxuLXU2NCBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHRhcmdldF90c2MpXG4rdTY0IGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgaG9zdF90c2MsXG4rXHRcdFx0ICAgICAgdTY0IHRhcmdldF90c2MpXG4ge1xuIFx0dTY0IHRzYztcbiBcbi1cdHRzYyA9IGt2bV9zY2FsZV90c2MocmR0c2MoKSwgdmNwdS1cdTAwM2VhcmNoLmwxX3RzY19zY2FsaW5nX3JhdGlvKTtcbitcdHRzYyA9IGt2bV9zY2FsZV90c2MoaG9zdF90c2MsIHZjcHUtXHUwMDNlYXJjaC5sMV90c2Nfc2NhbGluZ19yYXRpbyk7XG4gXG4gXHRyZXR1cm4gdGFyZ2V0X3RzYyAtIHRzYztcbiB9XG5AQCAtMTI1NCw2ICsxMjc3LDcgQEAgc3RhdGljIHZvaWQgX19rdm1fc3luY2hyb25pemVfdHNjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG9mZnNldCwgdTY0IHRzYyxcbiBcdGt2bS1cdTAwM2VhcmNoLmxhc3RfdHNjX3dyaXRlID0gdHNjO1xuIFx0a3ZtLVx1MDAzZWFyY2gubGFzdF90c2Nfa2h6ID0gdmNwdS1cdTAwM2VhcmNoLnZpcnR1YWxfdHNjX2toejtcbiBcdGt2bS1cdTAwM2VhcmNoLmxhc3RfdHNjX29mZnNldCA9IG9mZnNldDtcbitcdGt2bS1cdTAwM2VhcmNoLmxhc3RfdHNjX3NjYWxpbmdfcmF0aW8gPSB2Y3B1LVx1MDAzZWFyY2gubDFfdHNjX3NjYWxpbmdfcmF0aW87XG4gXG4gXHR2Y3B1LVx1MDAzZWFyY2gubGFzdF9ndWVzdF90c2MgPSB0c2M7XG4gXG5AQCAtMTI5Niw3ICsxMzIwLDcgQEAgdm9pZCBrdm1fc3luY2hyb25pemVfdHNjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0ICp1c2VyX3ZhbHVlKVxuIFx0Ym9vbCBzeW5jaHJvbml6aW5nID0gZmFsc2U7XG4gXG4gXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2a3ZtLVx1MDAzZWFyY2gudHNjX3dyaXRlX2xvY2ssIGZsYWdzKTtcbi1cdG9mZnNldCA9IGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXQodmNwdSwgZGF0YSk7XG4rXHRvZmZzZXQgPSBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0KHZjcHUsIHJkdHNjKCksIGRhdGEpO1xuIFx0bnMgPSBnZXRfa3ZtY2xvY2tfYmFzZV9ucygpO1xuIFx0ZWxhcHNlZCA9IG5zIC0ga3ZtLVx1MDAzZWFyY2gubGFzdF90c2NfbnNlYztcbiBcbkBAIC0xMzQ1LDcgKzEzNjksNyBAQCB2b2lkIGt2bV9zeW5jaHJvbml6ZV90c2Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKnVzZXJfdmFsdWUpXG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0dTY0IGRlbHRhID0gbnNlY190b19jeWNsZXModmNwdSwgZWxhcHNlZCk7XG4gXHRcdFx0ZGF0YSArPSBkZWx0YTtcbi1cdFx0XHRvZmZzZXQgPSBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0KHZjcHUsIGRhdGEpO1xuK1x0XHRcdG9mZnNldCA9IGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXQodmNwdSwgcmR0c2MoKSwgZGF0YSk7XG4gXHRcdH1cbiBcdFx0bWF0Y2hlZCA9IHRydWU7XG4gXHR9XG5AQCAtMTU2Niw2ICsxNTkwLDggQEAgc3RhdGljIGJvb2wga3ZtX2dldF93YWxsdGltZV9hbmRfY2xvY2tyZWFkKHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbiAgKlxuICAqL1xuIFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9jcHVfdHNjX2toeih2b2lkKTtcbitcbiBzdGF0aWMgdm9pZCBwdmNsb2NrX3VwZGF0ZV92bV9ndG9kX2NvcHkoc3RydWN0IGt2bSAqa3ZtKVxuIHtcbiAjaWZkZWYgQ09ORklHX1g4Nl82NFxuQEAgLTE1ODksOSArMTYxNSwzMCBAQCBzdGF0aWMgdm9pZCBwdmNsb2NrX3VwZGF0ZV92bV9ndG9kX2NvcHkoc3RydWN0IGt2bSAqa3ZtKVxuIFx0XHRcdFx0XHUwMDI2XHUwMDI2ICFrYS1cdTAwM2ViYWNrd2FyZHNfdHNjX29ic2VydmVkXG4gXHRcdFx0XHRcdTAwMjZcdTAwMjYgIWthLVx1MDAzZWJvb3RfdmNwdV9ydW5zX29sZF9rdm1jbG9jaztcbiBcbi1cdGlmIChrYS1cdTAwM2V1c2VfbWFzdGVyX2Nsb2NrKVxuK1x0aWYgKGthLVx1MDAzZXVzZV9tYXN0ZXJfY2xvY2spIHtcbitcdFx0dTY0IHRzY19oejtcbitcbiBcdFx0YXRvbWljX3NldChcdTAwMjZrdm1fZ3Vlc3RfaGFzX21hc3Rlcl9jbG9jaywgMSk7XG4gXG4rXHRcdC8qXG4rXHRcdCAqIENvcHkgdGhlIHNjYWxpbmcgcmF0aW8gYW5kIHByZWNvbXB1dGUgdGhlIG11bC9zaGlmdCBmb3JcbitcdFx0ICogY29udmVydGluZyBndWVzdCBUU0MgdG8gbmFub3NlY29uZHMuIFRoZXNlIGFyZSB1c2VkIGJ5XG4rXHRcdCAqIGdldF9rdm1jbG9jaygpIHRvIGNvbXB1dGUga3ZtY2xvY2sgZnJvbSB0aGUgaG9zdCBUU0NcbitcdFx0ICogd2l0aG91dCBuZWVkaW5nIGEgdkNQVSByZWZlcmVuY2UuXG4rXHRcdCAqL1xuK1x0XHRrYS1cdTAwM2VtYXN0ZXJfdHNjX3NjYWxpbmdfcmF0aW8gPSBrYS1cdTAwM2VsYXN0X3RzY19zY2FsaW5nX3JhdGlvO1xuK1x0XHR0c2NfaHogPSAodTY0KWdldF9jcHVfdHNjX2toeigpICogSFpfUEVSX0tIWjtcbitcdFx0aWYgKHRzY19oeiBcdTAwMjZcdTAwMjYga3ZtX2NhcHMuaGFzX3RzY19jb250cm9sKVxuK1x0XHRcdHRzY19oeiA9IGt2bV9zY2FsZV90c2ModHNjX2h6LFxuK1x0XHRcdFx0XHQgICAgICAga2EtXHUwMDNlbWFzdGVyX3RzY19zY2FsaW5nX3JhdGlvKTtcbitcdFx0aWYgKHRzY19oeilcbitcdFx0XHRrdm1fZ2V0X3RpbWVfc2NhbGUoTlNFQ19QRVJfU0VDLCB0c2NfaHosXG4rXHRcdFx0XHRcdCAgIFx1MDAyNmthLVx1MDAzZW1hc3Rlcl90c2Nfc2hpZnQsXG4rXHRcdFx0XHRcdCAgIFx1MDAyNmthLVx1MDAzZW1hc3Rlcl90c2NfbXVsKTtcbitcdFx0ZWxzZVxuK1x0XHRcdGthLVx1MDAzZXVzZV9tYXN0ZXJfY2xvY2sgPSBmYWxzZTtcbitcdH1cbitcbiBcdHZjbG9ja19tb2RlID0gcHZjbG9ja19ndG9kX2RhdGEuY2xvY2sudmNsb2NrX21vZGU7XG4gXHR0cmFjZV9rdm1fdXBkYXRlX21hc3Rlcl9jbG9jayhrYS1cdTAwM2V1c2VfbWFzdGVyX2Nsb2NrLCB2Y2xvY2tfbW9kZSxcbiBcdFx0XHRcdFx0dmNwdXNfbWF0Y2hlZCk7XG5AQCAtMTY1OCwzOSArMTcwNSw0OSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfY3B1X3RzY19raHoodm9pZClcbiB9XG4gXG4gLyogQ2FsbGVkIHdpdGhpbiByZWFkX3NlcWNvdW50X2JlZ2luL3JldHJ5IGZvciBrdm0tXHUwMDNlcHZjbG9ja19zYy4gICovXG4tc3RhdGljIHZvaWQgX19nZXRfa3ZtY2xvY2soc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2Nsb2NrX2RhdGEgKmRhdGEpXG4rc3RhdGljIGJvb2wgX19nZXRfa3ZtY2xvY2tfbWFzdGVyX2Nsb2NrKHN0cnVjdCBrdm0gKmt2bSxcbitcdFx0XHRcdFx0c3RydWN0IGt2bV9jbG9ja19kYXRhICpkYXRhKVxuIHtcbisjaWZkZWYgQ09ORklHX1g4Nl82NFxuIFx0c3RydWN0IGt2bV9hcmNoICprYSA9IFx1MDAyNmt2bS1cdTAwM2VhcmNoO1xuIFx0c3RydWN0IHB2Y2xvY2tfdmNwdV90aW1lX2luZm8gaHZfY2xvY2s7XG4rXHRzdHJ1Y3QgdGltZXNwZWM2NCB0cztcbiBcbi1cdC8qIGJvdGggX190aGlzX2NwdV9yZWFkKCkgYW5kIHJkdHNjKCkgc2hvdWxkIGJlIG9uIHRoZSBzYW1lIGNwdSAqL1xuLVx0Z2V0X2NwdSgpO1xuK1x0aWYgKCFrYS1cdTAwM2V1c2VfbWFzdGVyX2Nsb2NrKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRkYXRhLVx1MDAzZWZsYWdzID0gMDtcbi1cdGlmIChrYS1cdTAwM2V1c2VfbWFzdGVyX2Nsb2NrIFx1MDAyNlx1MDAyNlxuLVx0ICAgIChzdGF0aWNfY3B1X2hhcyhYODZfRkVBVFVSRV9DT05TVEFOVF9UU0MpIHx8IF9fdGhpc19jcHVfcmVhZChjcHVfdHNjX2toeikpKSB7XG4tI2lmZGVmIENPTkZJR19YODZfNjRcbi1cdFx0c3RydWN0IHRpbWVzcGVjNjQgdHM7XG4rXHRpZiAoIWt2bV9nZXRfd2FsbHRpbWVfYW5kX2Nsb2NrcmVhZChcdTAwMjZ0cywgXHUwMDI2ZGF0YS1cdTAwM2Vob3N0X3RzYykpXG4rXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdFx0aWYgKGt2bV9nZXRfd2FsbHRpbWVfYW5kX2Nsb2NrcmVhZChcdTAwMjZ0cywgXHUwMDI2ZGF0YS1cdTAwM2Vob3N0X3RzYykpIHtcbi1cdFx0XHRkYXRhLVx1MDAzZXJlYWx0aW1lID0gdHMudHZfbnNlYyArIE5TRUNfUEVSX1NFQyAqIHRzLnR2X3NlYztcbi1cdFx0XHRkYXRhLVx1MDAzZWZsYWdzIHw9IEtWTV9DTE9DS19SRUFMVElNRSB8IEtWTV9DTE9DS19IT1NUX1RTQztcbi1cdFx0fSBlbHNlXG4tI2VuZGlmXG4tXHRcdGRhdGEtXHUwMDNlaG9zdF90c2MgPSByZHRzYygpO1xuLVxuLVx0XHRkYXRhLVx1MDAzZWZsYWdzIHw9IEtWTV9DTE9DS19UU0NfU1RBQkxFO1xuLVx0XHRodl9jbG9jay50c2NfdGltZXN0YW1wID0ga2EtXHUwMDNlbWFzdGVyX2N5Y2xlX25vdztcbi1cdFx0aHZfY2xvY2suc3lzdGVtX3RpbWUgPSBrYS1cdTAwM2VtYXN0ZXJfa2VybmVsX25zICsga2EtXHUwMDNla3ZtY2xvY2tfb2Zmc2V0O1xuLVx0XHRrdm1fZ2V0X3RpbWVfc2NhbGUoTlNFQ19QRVJfU0VDLCBnZXRfY3B1X3RzY19raHooKSAqIDEwMDBMTCxcbi1cdFx0XHRcdCAgIFx1MDAyNmh2X2Nsb2NrLnRzY19zaGlmdCxcbi1cdFx0XHRcdCAgIFx1MDAyNmh2X2Nsb2NrLnRzY190b19zeXN0ZW1fbXVsKTtcbi1cdFx0ZGF0YS1cdTAwM2VjbG9jayA9IF9fcHZjbG9ja19yZWFkX2N5Y2xlcyhcdTAwMjZodl9jbG9jaywgZGF0YS1cdTAwM2Vob3N0X3RzYyk7XG4rXHRkYXRhLVx1MDAzZXJlYWx0aW1lID0gdHMudHZfbnNlYyArIE5TRUNfUEVSX1NFQyAqIHRzLnR2X3NlYztcbitcdGRhdGEtXHUwMDNlZmxhZ3MgfD0gS1ZNX0NMT0NLX1JFQUxUSU1FIHwgS1ZNX0NMT0NLX0hPU1RfVFNDIHxcbitcdFx0ICAgICAgIEtWTV9DTE9DS19UU0NfU1RBQkxFO1xuK1xuK1x0aHZfY2xvY2sudHNjX3RpbWVzdGFtcCA9IGthLVx1MDAzZW1hc3Rlcl9jeWNsZV9ub3c7XG4rXHRodl9jbG9jay5zeXN0ZW1fdGltZSA9IGthLVx1MDAzZW1hc3Rlcl9rZXJuZWxfbnMgKyBrYS1cdTAwM2Vrdm1jbG9ja19vZmZzZXQ7XG4rXG4rXHQvKlxuK1x0ICogVXNlIHRoZSBwcmVjb21wdXRlZCBndWVzdC1UU0MtYmFzZWQgbXVsL3NoaWZ0IHNvIHRoYXQgdGhlIGt2bWNsb2NrXG4rXHQgKiB2YWx1ZSBtYXRjaGVzIHdoYXQgdGhlIGd1ZXN0IGNvbXB1dGVzIGZyb20gaXRzIG93biBUU0MuXG4rXHQgKi9cbitcdGh2X2Nsb2NrLnRzY19zaGlmdCA9IGthLVx1MDAzZW1hc3Rlcl90c2Nfc2hpZnQ7XG4rXHRodl9jbG9jay50c2NfdG9fc3lzdGVtX211bCA9IGthLVx1MDAzZW1hc3Rlcl90c2NfbXVsO1xuK1xuK1x0aWYgKGt2bV9jYXBzLmhhc190c2NfY29udHJvbCkge1xuK1x0XHR1NjQgdHNjX2RlbHRhID0gZGF0YS1cdTAwM2Vob3N0X3RzYyAtIGthLVx1MDAzZW1hc3Rlcl9jeWNsZV9ub3c7XG4rXG4rXHRcdHRzY19kZWx0YSA9IGt2bV9zY2FsZV90c2ModHNjX2RlbHRhLCBrYS1cdTAwM2VtYXN0ZXJfdHNjX3NjYWxpbmdfcmF0aW8pO1xuK1x0XHRkYXRhLVx1MDAzZWNsb2NrID0gaHZfY2xvY2suc3lzdGVtX3RpbWUgK1xuK1x0XHRcdCAgICAgIHB2Y2xvY2tfc2NhbGVfZGVsdGEodHNjX2RlbHRhLFxuK1x0XHRcdFx0XHRcdCAgaHZfY2xvY2sudHNjX3RvX3N5c3RlbV9tdWwsXG4rXHRcdFx0XHRcdFx0ICBodl9jbG9jay50c2Nfc2hpZnQpO1xuIFx0fSBlbHNlIHtcbi1cdFx0ZGF0YS1cdTAwM2VjbG9jayA9IGdldF9rdm1jbG9ja19iYXNlX25zKCkgKyBrYS1cdTAwM2Vrdm1jbG9ja19vZmZzZXQ7XG4rXHRcdGRhdGEtXHUwMDNlY2xvY2sgPSBfX3B2Y2xvY2tfcmVhZF9jeWNsZXMoXHUwMDI2aHZfY2xvY2ssIGRhdGEtXHUwMDNlaG9zdF90c2MpO1xuIFx0fVxuLVxuLVx0cHV0X2NwdSgpO1xuK1x0cmV0dXJuIHRydWU7XG4rI2Vsc2VcbitcdHJldHVybiBmYWxzZTtcbisjZW5kaWZcbiB9XG4gXG4gc3RhdGljIHZvaWQgZ2V0X2t2bWNsb2NrKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9jbG9ja19kYXRhICpkYXRhKVxuQEAgLTE2OTksOCArMTc1NiwxMSBAQCBzdGF0aWMgdm9pZCBnZXRfa3ZtY2xvY2soc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2Nsb2NrX2RhdGEgKmRhdGEpXG4gXHR1bnNpZ25lZCBzZXE7XG4gXG4gXHRkbyB7XG4rXHRcdGRhdGEtXHUwMDNlZmxhZ3MgPSAwO1xuK1xuIFx0XHRzZXEgPSByZWFkX3NlcWNvdW50X2JlZ2luKFx1MDAyNmthLVx1MDAzZXB2Y2xvY2tfc2MpO1xuLVx0XHRfX2dldF9rdm1jbG9jayhrdm0sIGRhdGEpO1xuK1x0XHRpZiAoIV9fZ2V0X2t2bWNsb2NrX21hc3Rlcl9jbG9jayhrdm0sIGRhdGEpKVxuK1x0XHRcdGRhdGEtXHUwMDNlY2xvY2sgPSBnZXRfa3ZtY2xvY2tfYmFzZV9ucygpICsga2EtXHUwMDNla3ZtY2xvY2tfb2Zmc2V0O1xuIFx0fSB3aGlsZSAocmVhZF9zZXFjb3VudF9yZXRyeShcdTAwMjZrYS1cdTAwM2VwdmNsb2NrX3NjLCBzZXEpKTtcbiB9XG4gXG5AQCAtMTc2MiwzNiArMTgyMiw0NSBAQCBzdGF0aWMgdm9pZCBrdm1fc2V0dXBfZ3Vlc3RfcHZjbG9jayhzdHJ1Y3QgcHZjbG9ja192Y3B1X3RpbWVfaW5mbyAqcmVmX2h2X2Nsb2NrLFxuIFxuIGludCBrdm1fZ3Vlc3RfdGltZV91cGRhdGUoc3RydWN0IGt2bV92Y3B1ICp2KVxuIHtcbitcdHU2NCB0Z3RfdHNjX2h6LCB0c2NfdGltZXN0YW1wLCBob3N0X3RzYywgbWFzdGVyX3RzYywgbWFzdGVyX25zO1xuK1x0c3RydWN0IGt2bV9hcmNoICprYSBfX21heWJlX3VudXNlZCA9IFx1MDAyNnYtXHUwMDNla3ZtLVx1MDAzZWFyY2g7XG4gXHRzdHJ1Y3QgcHZjbG9ja192Y3B1X3RpbWVfaW5mbyBodl9jbG9jayA9IHt9O1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncywgdGd0X3RzY19raHo7XG4tXHR1bnNpZ25lZCBzZXE7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCAqdmNwdSA9IFx1MDAyNnYtXHUwMDNlYXJjaDtcbi1cdHN0cnVjdCBrdm1fYXJjaCAqa2EgPSBcdTAwMjZ2LVx1MDAzZWt2bS1cdTAwM2VhcmNoO1xuIFx0czY0IGtlcm5lbF9ucztcbi1cdHU2NCB0c2NfdGltZXN0YW1wLCBob3N0X3RzYztcbi1cdGJvb2wgdXNlX21hc3Rlcl9jbG9jaztcbi1cbi1cdGtlcm5lbF9ucyA9IDA7XG4tXHRob3N0X3RzYyA9IDA7XG4gXG4gXHQvKlxuIFx0ICogSWYgdGhlIGhvc3QgdXNlcyBUU0MgY2xvY2ssIHRoZW4gcGFzc3Rocm91Z2ggVFNDIGFzIHN0YWJsZVxuIFx0ICogdG8gdGhlIGd1ZXN0LlxuIFx0ICovXG4rI2lmZGVmIENPTkZJR19YODZfNjRcbitcdGJvb2wgdXNlX21hc3Rlcl9jbG9jaztcbitcdHVuc2lnbmVkIGludCBzZXE7XG4rXG4gXHRkbyB7XG4gXHRcdHNlcSA9IHJlYWRfc2VxY291bnRfYmVnaW4oXHUwMDI2a2EtXHUwMDNlcHZjbG9ja19zYyk7XG4gXHRcdHVzZV9tYXN0ZXJfY2xvY2sgPSBrYS1cdTAwM2V1c2VfbWFzdGVyX2Nsb2NrO1xuLVx0XHRpZiAodXNlX21hc3Rlcl9jbG9jaykge1xuLVx0XHRcdGhvc3RfdHNjID0ga2EtXHUwMDNlbWFzdGVyX2N5Y2xlX25vdztcbi1cdFx0XHRrZXJuZWxfbnMgPSBrYS1cdTAwM2VtYXN0ZXJfa2VybmVsX25zO1xuK1x0XHRpZiAoIXVzZV9tYXN0ZXJfY2xvY2spXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGlmICgha3ZtX2dldF90aW1lX2FuZF9jbG9ja3JlYWQoXHUwMDI2a2VybmVsX25zLCBcdTAwMjZob3N0X3RzYykpIHtcbitcdFx0XHR1c2VfbWFzdGVyX2Nsb2NrID0gZmFsc2U7XG4rXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbi1cdH0gd2hpbGUgKHJlYWRfc2VxY291bnRfcmV0cnkoXHUwMDI2a2EtXHUwMDNlcHZjbG9ja19zYywgc2VxKSk7XG4gXG4tXHQvKiBLZWVwIGlycSBkaXNhYmxlZCB0byBwcmV2ZW50IGNoYW5nZXMgdG8gdGhlIGNsb2NrICovXG4tXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4tXHR0Z3RfdHNjX2toeiA9IGdldF9jcHVfdHNjX2toeigpO1xuLVx0aWYgKHVubGlrZWx5KHRndF90c2Nfa2h6ID09IDApKSB7XG4tXHRcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbitcdFx0bWFzdGVyX3RzYyA9IGthLVx1MDAzZW1hc3Rlcl9jeWNsZV9ub3c7XG4rXHRcdG1hc3Rlcl9ucyA9IGthLVx1MDAzZW1hc3Rlcl9rZXJuZWxfbnM7XG4rXHR9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KFx1MDAyNmthLVx1MDAzZXB2Y2xvY2tfc2MsIHNlcSkpO1xuKyNlbHNlXG4rXHRjb25zdCBib29sIHVzZV9tYXN0ZXJfY2xvY2sgPSBmYWxzZTtcbisjZW5kaWZcbitcdC8qXG4rXHQgKiBFbnN1cmUgcmVhZGluZyB0aGUgVFNDK2ZyZXF1ZW5jeSBwYWlyIGlzIGRvbmUgb24gdGhlIHNhbWUgQ1BVLiAgV2hlblxuK1x0ICogTk9UIHVzaW5nIHRoZSBtYXN0ZXIgY2xvY2ssIHRoZSBUU0MgZnJlcXVlbmN5IG1heSB2YXJ5IGJldHdlZW4gQ1BVcy5cbitcdCAqL1xuK1x0cHJlZW1wdF9kaXNhYmxlKCk7XG4rXHR0Z3RfdHNjX2h6ID0gKHU2NClnZXRfY3B1X3RzY19raHooKSAqIEhaX1BFUl9LSFo7XG4rXHRpZiAodW5saWtlbHkodGd0X3RzY19oeiA9PSAwKSkge1xuK1x0XHRwcmVlbXB0X2VuYWJsZSgpO1xuIFx0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfQ0xPQ0tfVVBEQVRFLCB2KTtcbiBcdFx0cmV0dXJuIDE7XG4gXHR9XG5AQCAtMTgyMCwyOCArMTg4OSw0MyBAQCBpbnQga3ZtX2d1ZXN0X3RpbWVfdXBkYXRlKHN0cnVjdCBrdm1fdmNwdSAqdilcbiBcdFx0fVxuIFx0fVxuIFxuLVx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuK1x0LypcbitcdCAqIFJlZnJlc2ggTDEncyBsYXN0IFwib2JzZXJ2ZWRcIiBUU0MgdG8gbWF0Y2ggdGhlIFBWIGNsb2NrJ3MgdGltZXN0YW1wLFxuK1x0ICogZS5nLiBzbyB0aGF0IHRoZSBndWVzdCBjYW4ndCBzZWUgYSBUU0MgdGhhdCdzIGJlaGluZCB0aGUgcmVmZXJlbmNlLlxuK1x0ICovXG4rXHR2Y3B1LVx1MDAzZWxhc3RfZ3Vlc3RfdHNjID0gdHNjX3RpbWVzdGFtcDtcbitcbitcdHByZWVtcHRfZW5hYmxlKCk7XG4gXG4gXHQvKiBXaXRoIGFsbCB0aGUgaW5mbyB3ZSBnb3QsIGZpbGwgaW4gdGhlIHZhbHVlcyAqL1xuIFxuIFx0aWYgKGt2bV9jYXBzLmhhc190c2NfY29udHJvbCkge1xuLVx0XHR0Z3RfdHNjX2toeiA9IGt2bV9zY2FsZV90c2ModGd0X3RzY19raHosXG4rXHRcdHRndF90c2NfaHogPSBrdm1fc2NhbGVfdHNjKHRndF90c2NfaHosXG4gXHRcdFx0XHRcdCAgICB2LVx1MDAzZWFyY2gubDFfdHNjX3NjYWxpbmdfcmF0aW8pO1xuLVx0XHR0Z3RfdHNjX2toeiA9IHRndF90c2Nfa2h6ID8gOiAxO1xuK1x0XHR0Z3RfdHNjX2h6ID0gdGd0X3RzY19oeiA/IDogMTtcbiBcdH1cbiBcbi1cdGlmICh1bmxpa2VseSh2Y3B1LVx1MDAzZWh3X3RzY19raHogIT0gdGd0X3RzY19raHopKSB7XG4tXHRcdGt2bV9nZXRfdGltZV9zY2FsZShOU0VDX1BFUl9TRUMsIHRndF90c2Nfa2h6ICogMTAwMExMLFxuK1x0aWYgKHVubGlrZWx5KHZjcHUtXHUwMDNlaHdfdHNjX2h6ICE9IHRndF90c2NfaHopKSB7XG4rXHRcdGt2bV9nZXRfdGltZV9zY2FsZShOU0VDX1BFUl9TRUMsIHRndF90c2NfaHosXG4gXHRcdFx0XHQgICBcdTAwMjZ2Y3B1LVx1MDAzZXB2Y2xvY2tfdHNjX3NoaWZ0LFxuIFx0XHRcdFx0ICAgXHUwMDI2dmNwdS1cdTAwM2VwdmNsb2NrX3RzY19tdWwpO1xuLVx0XHR2Y3B1LVx1MDAzZWh3X3RzY19raHogPSB0Z3RfdHNjX2toejtcbitcdFx0dmNwdS1cdTAwM2Vod190c2NfaHogPSB0Z3RfdHNjX2h6O1xuIFx0fVxuIFxuIFx0aHZfY2xvY2sudHNjX3NoaWZ0ID0gdmNwdS1cdTAwM2VwdmNsb2NrX3RzY19zaGlmdDtcbiBcdGh2X2Nsb2NrLnRzY190b19zeXN0ZW1fbXVsID0gdmNwdS1cdTAwM2VwdmNsb2NrX3RzY19tdWw7XG4tXHRodl9jbG9jay50c2NfdGltZXN0YW1wID0gdHNjX3RpbWVzdGFtcDtcbi1cdGh2X2Nsb2NrLnN5c3RlbV90aW1lID0ga2VybmVsX25zICsgdi1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5rdm1jbG9ja19vZmZzZXQ7XG4tXHR2Y3B1LVx1MDAzZWxhc3RfZ3Vlc3RfdHNjID0gdHNjX3RpbWVzdGFtcDtcbitcdC8qXG4rXHQgKiBJZiB0aGUgbWFzdGVyIGNsb2NrIGlzIE5PVCBpbiB1c2UsIHRoZSByZWZlcmVuY2UgdGltZSBwbGFjZWQgaW4gdGhlXG4rXHQgKiBodl9jbG9jayBpcyBcIm5vd1wiLiAgSWYgbWFzdGVyIGNsb2NrIGlzIGluIHVzZSwgdGhlIHJlZmVyZW5jZSB0aW1lIGlzXG4rXHQgKiB0aGUgbWFzdGVyIGNsb2NrJ3Mgc25hcHNob3QgZnJvbSBzb21lIHRpbWUgaW4gdGhlIHBhc3QsIG5vdCBcIm5vd1wiLlxuK1x0ICovXG4rXHRpZiAodXNlX21hc3Rlcl9jbG9jaykge1xuK1x0XHRodl9jbG9jay50c2NfdGltZXN0YW1wID0ga3ZtX3JlYWRfbDFfdHNjKHYsIG1hc3Rlcl90c2MpO1xuK1x0XHRodl9jbG9jay5zeXN0ZW1fdGltZSA9IG1hc3Rlcl9ucyArIHYtXHUwMDNla3ZtLVx1MDAzZWFyY2gua3ZtY2xvY2tfb2Zmc2V0O1xuK1x0fSBlbHNlIHtcbitcdFx0aHZfY2xvY2sudHNjX3RpbWVzdGFtcCA9IHRzY190aW1lc3RhbXA7XG4rXHRcdGh2X2Nsb2NrLnN5c3RlbV90aW1lID0ga2VybmVsX25zICsgdi1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5rdm1jbG9ja19vZmZzZXQ7XG4rXHR9XG4gXG4gXHQvKiBJZiB0aGUgaG9zdCB1c2VzIFRTQyBjbG9ja3NvdXJjZSwgdGhlbiBpdCBpcyBzdGFibGUgKi9cbiBcdGh2X2Nsb2NrLmZsYWdzID0gMDtcbkBAIC0xOTAzLDYzICsxOTg3LDIyIEBAIGludCBrdm1fZ3Vlc3RfdGltZV91cGRhdGUoc3RydWN0IGt2bV92Y3B1ICp2KVxuICAqIHdhbGxjbG9jayBhbmQga3ZtY2xvY2sgdGltZXMsIGFuZCBzdWJ0cmFjdGluZyBvbmUgZnJvbSB0aGUgb3RoZXIuXG4gICpcbiAgKiBGYWxsIGJhY2sgdG8gdXNpbmcgdGhlaXIgdmFsdWVzIGF0IHNsaWdodGx5IGRpZmZlcmVudCBtb21lbnRzIGJ5XG4tICogY2FsbGluZyBrdGltZV9nZXRfcmVhbF9ucygpIGFuZCBnZXRfa3ZtY2xvY2tfbnMoKSBzZXBhcmF0ZWx5LlxuKyAqIGNhbGxpbmcga3RpbWVfZ2V0X3JlYWxfbnMoKSBhbmQgZ2V0X2t2bWNsb2NrKCkgc2VwYXJhdGVseS5cbiAgKi9cbiB1aW50NjRfdCBrdm1fZ2V0X3dhbGxfY2xvY2tfZXBvY2goc3RydWN0IGt2bSAqa3ZtKVxuIHtcbi0jaWZkZWYgQ09ORklHX1g4Nl82NFxuLVx0c3RydWN0IHB2Y2xvY2tfdmNwdV90aW1lX2luZm8gaHZfY2xvY2s7XG4tXHRzdHJ1Y3Qga3ZtX2FyY2ggKmthID0gXHUwMDI2a3ZtLVx1MDAzZWFyY2g7XG4tXHR1bnNpZ25lZCBsb25nIHNlcSwgbG9jYWxfdHNjX2toejtcbi1cdHN0cnVjdCB0aW1lc3BlYzY0IHRzO1xuLVx0dWludDY0X3QgaG9zdF90c2M7XG4tXG4tXHRkbyB7XG4tXHRcdHNlcSA9IHJlYWRfc2VxY291bnRfYmVnaW4oXHUwMDI2a2EtXHUwMDNlcHZjbG9ja19zYyk7XG4tXG4tXHRcdGxvY2FsX3RzY19raHogPSAwO1xuLVx0XHRpZiAoIWthLVx1MDAzZXVzZV9tYXN0ZXJfY2xvY2spXG4tXHRcdFx0YnJlYWs7XG4tXG4tXHRcdC8qXG4tXHRcdCAqIFRoZSBUU0MgcmVhZCBhbmQgdGhlIGNhbGwgdG8gZ2V0X2NwdV90c2Nfa2h6KCkgbXVzdCBoYXBwZW5cbi1cdFx0ICogb24gdGhlIHNhbWUgQ1BVLlxuLVx0XHQgKi9cbi1cdFx0Z2V0X2NwdSgpO1xuLVxuLVx0XHRsb2NhbF90c2Nfa2h6ID0gZ2V0X2NwdV90c2Nfa2h6KCk7XG4tXG4tXHRcdGlmIChsb2NhbF90c2Nfa2h6IFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIWt2bV9nZXRfd2FsbHRpbWVfYW5kX2Nsb2NrcmVhZChcdTAwMjZ0cywgXHUwMDI2aG9zdF90c2MpKVxuLVx0XHRcdGxvY2FsX3RzY19raHogPSAwOyAvKiBGYWxsIGJhY2sgdG8gb2xkIG1ldGhvZCAqL1xuLVxuLVx0XHRwdXRfY3B1KCk7XG4tXG4tXHRcdC8qXG4tXHRcdCAqIFRoZXNlIHZhbHVlcyBtdXN0IGJlIHNuYXBzaG90dGVkIHdpdGhpbiB0aGUgc2VxY291bnQgbG9vcC5cbi1cdFx0ICogQWZ0ZXIgdGhhdCwgaXQncyBqdXN0IG1hdGhlbWF0aWNzIHdoaWNoIGNhbiBoYXBwZW4gb24gYW55XG4tXHRcdCAqIENQVSBhdCBhbnkgdGltZS5cbi1cdFx0ICovXG4tXHRcdGh2X2Nsb2NrLnRzY190aW1lc3RhbXAgPSBrYS1cdTAwM2VtYXN0ZXJfY3ljbGVfbm93O1xuLVx0XHRodl9jbG9jay5zeXN0ZW1fdGltZSA9IGthLVx1MDAzZW1hc3Rlcl9rZXJuZWxfbnMgKyBrYS1cdTAwM2Vrdm1jbG9ja19vZmZzZXQ7XG4rXHRzdHJ1Y3Qga3ZtX2Nsb2NrX2RhdGEgZGF0YTtcbiBcbi1cdH0gd2hpbGUgKHJlYWRfc2VxY291bnRfcmV0cnkoXHUwMDI2a2EtXHUwMDNlcHZjbG9ja19zYywgc2VxKSk7XG4rXHRnZXRfa3ZtY2xvY2soa3ZtLCBcdTAwMjZkYXRhKTtcbiBcbiBcdC8qXG4tXHQgKiBJZiB0aGUgY29uZGl0aW9ucyB3ZXJlIHJpZ2h0LCBhbmQgb2J0YWluaW5nIHRoZSB3YWxsY2xvY2srVFNDIHdhc1xuLVx0ICogc3VjY2Vzc2Z1bCwgY2FsY3VsYXRlIHRoZSBLVk0gY2xvY2sgYXQgdGhlIGNvcnJlc3BvbmRpbmcgdGltZSBhbmRcbi1cdCAqIHN1YnRyYWN0IG9uZSBmcm9tIHRoZSBvdGhlciB0byBnZXQgdGhlIGd1ZXN0J3MgZXBvY2ggaW4gbmFub3NlY29uZHNcbi1cdCAqIHNpbmNlIDE5NzAtMDEtMDEuXG4rXHQgKiBJZiBnZXRfa3ZtY2xvY2soKSBjYXB0dXJlZCBib3RoIHdhbGxjbG9jayBhbmQga3ZtY2xvY2sgZnJvbSB0aGVcbitcdCAqIHNhbWUgVFNDIHJlYWRpbmcsIHVzZSB0aGVtIGZvciBhIHByZWNpc2UgZXBvY2ggY2FsY3VsYXRpb24uXG4gXHQgKi9cbi1cdGlmIChsb2NhbF90c2Nfa2h6KSB7XG4tXHRcdGt2bV9nZXRfdGltZV9zY2FsZShOU0VDX1BFUl9TRUMsIGxvY2FsX3RzY19raHogKiBOU0VDX1BFUl9VU0VDLFxuLVx0XHRcdFx0ICAgXHUwMDI2aHZfY2xvY2sudHNjX3NoaWZ0LFxuLVx0XHRcdFx0ICAgXHUwMDI2aHZfY2xvY2sudHNjX3RvX3N5c3RlbV9tdWwpO1xuLVx0XHRyZXR1cm4gdHMudHZfbnNlYyArIE5TRUNfUEVSX1NFQyAqIHRzLnR2X3NlYyAtXG4tXHRcdFx0X19wdmNsb2NrX3JlYWRfY3ljbGVzKFx1MDAyNmh2X2Nsb2NrLCBob3N0X3RzYyk7XG4tXHR9XG4tI2VuZGlmXG4tXHRyZXR1cm4ga3RpbWVfZ2V0X3JlYWxfbnMoKSAtIGdldF9rdm1jbG9ja19ucyhrdm0pO1xuK1x0aWYgKGRhdGEuZmxhZ3MgXHUwMDI2IEtWTV9DTE9DS19SRUFMVElNRSlcbitcdFx0cmV0dXJuIGRhdGEucmVhbHRpbWUgLSBkYXRhLmNsb2NrO1xuK1xuK1x0cmV0dXJuIGt0aW1lX2dldF9yZWFsX25zKCkgLSBkYXRhLmNsb2NrO1xuIH1cbiBcbiAvKlxuQEAgLTI1ODMsNyArMjYyNiw3IEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcbiBcdFx0XHRtYXJrX3RzY191bnN0YWJsZShcIktWTSBkaXNjb3ZlcmVkIGJhY2t3YXJkcyBUU0NcIik7XG4gXG4gXHRcdGlmIChrdm1fY2hlY2tfdHNjX3Vuc3RhYmxlKCkpIHtcbi1cdFx0XHR1NjQgb2Zmc2V0ID0ga3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldCh2Y3B1LFxuK1x0XHRcdHU2NCBvZmZzZXQgPSBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0KHZjcHUsIHJkdHNjKCksXG4gXHRcdFx0XHRcdFx0dmNwdS1cdTAwM2VhcmNoLmxhc3RfZ3Vlc3RfdHNjKTtcbiBcdFx0XHRrdm1fdmNwdV93cml0ZV90c2Nfb2Zmc2V0KHZjcHUsIG9mZnNldCk7XG4gXHRcdFx0aWYgKCF2Y3B1LVx1MDAzZWFyY2guZ3Vlc3RfdHNjX3Byb3RlY3RlZClcbkBAIC02ODY2LDYgKzY5MDksNyBAQCBzdGF0aWMgdm9pZCBwdmNsb2NrX2lycV93b3JrX2ZuKHN0cnVjdCBpcnFfd29yayAqdylcbiB9XG4gXG4gc3RhdGljIERFRklORV9JUlFfV09SSyhwdmNsb2NrX2lycV93b3JrLCBwdmNsb2NrX2lycV93b3JrX2ZuKTtcbisjZW5kaWZcbiBcbiAvKlxuICAqIE5vdGlmaWNhdGlvbiBhYm91dCBwdmNsb2NrIGd0b2QgZGF0YSB1cGRhdGUuXG5AQCAtNjg3MywyNiArNjkxNywyNiBAQCBzdGF0aWMgREVGSU5FX0lSUV9XT1JLKHB2Y2xvY2tfaXJxX3dvcmssIHB2Y2xvY2tfaXJxX3dvcmtfZm4pO1xuIHN0YXRpYyBpbnQgcHZjbG9ja19ndG9kX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIHVudXNlZCxcbiBcdFx0XHQgICAgICAgdm9pZCAqcHJpdilcbiB7XG4tXHRzdHJ1Y3QgcHZjbG9ja19ndG9kX2RhdGEgKmd0b2QgPSBcdTAwMjZwdmNsb2NrX2d0b2RfZGF0YTtcbiBcdHN0cnVjdCB0aW1la2VlcGVyICp0ayA9IHByaXY7XG4gXG4gXHR1cGRhdGVfcHZjbG9ja19ndG9kKHRrKTtcbiBcbisjaWZkZWYgQ09ORklHX1g4Nl82NFxuIFx0LypcbiBcdCAqIERpc2FibGUgbWFzdGVyIGNsb2NrIGlmIGhvc3QgZG9lcyBub3QgdHJ1c3QsIG9yIGRvZXMgbm90IHVzZSxcbiBcdCAqIFRTQyBiYXNlZCBjbG9ja3NvdXJjZS4gRGVsZWdhdGUgcXVldWVfd29yaygpIHRvIGlycV93b3JrIGFzXG4gXHQgKiB0aGlzIGlzIGludm9rZWQgd2l0aCB0a19jb3JlLnNlcSB3cml0ZSBoZWxkLlxuIFx0ICovXG4tXHRpZiAoIWd0b2RfaXNfYmFzZWRfb25fdHNjKGd0b2QtXHUwMDNlY2xvY2sudmNsb2NrX21vZGUpIFx1MDAyNlx1MDAyNlxuK1x0aWYgKCFndG9kX2lzX2Jhc2VkX29uX3RzYyhwdmNsb2NrX2d0b2RfZGF0YS5jbG9jay52Y2xvY2tfbW9kZSkgXHUwMDI2XHUwMDI2XG4gXHQgICAgYXRvbWljX3JlYWQoXHUwMDI2a3ZtX2d1ZXN0X2hhc19tYXN0ZXJfY2xvY2spICE9IDApXG4gXHRcdGlycV93b3JrX3F1ZXVlKFx1MDAyNnB2Y2xvY2tfaXJxX3dvcmspO1xuKyNlbmRpZlxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcHZjbG9ja19ndG9kX25vdGlmaWVyID0ge1xuIFx0Lm5vdGlmaWVyX2NhbGwgPSBwdmNsb2NrX2d0b2Rfbm90aWZ5LFxuIH07XG4tI2VuZGlmXG4gXG4gdm9pZCBrdm1fc2V0dXBfeHNzX2NhcHModm9pZClcbiB7XG5AQCAtNzExMSw5ICs3MTU1LDkgQEAgaW50IGt2bV94ODZfdmVuZG9yX2luaXQoc3RydWN0IGt2bV94ODZfaW5pdF9vcHMgKm9wcylcbiBcbiBcdGlmIChwaV9pbmplY3RfdGltZXIgPT0gLTEpXG4gXHRcdHBpX2luamVjdF90aW1lciA9IGhvdXNla2VlcGluZ19lbmFibGVkKEhLX1RZUEVfVElNRVIpO1xuLSNpZmRlZiBDT05GSUdfWDg2XzY0XG4gXHRwdmNsb2NrX2d0b2RfcmVnaXN0ZXJfbm90aWZpZXIoXHUwMDI2cHZjbG9ja19ndG9kX25vdGlmaWVyKTtcbiBcbisjaWZkZWYgQ09ORklHX1g4Nl82NFxuIFx0aWYgKGh5cGVydmlzb3JfaXNfdHlwZShYODZfSFlQRVJfTVNfSFlQRVJWKSlcbiBcdFx0c2V0X2h2X3RzY2NoYW5nZV9jYihrdm1faHlwZXJ2X3RzY19ub3RpZmllcik7XG4gI2VuZGlmXG5AQCAtNzE3MCw4ICs3MjE0LDggQEAgdm9pZCBrdm1feDg2X3ZlbmRvcl9leGl0KHZvaWQpXG4gXHRcdFx0XHRcdCAgICBDUFVGUkVRX1RSQU5TSVRJT05fTk9USUZJRVIpO1xuIFx0XHRjcHVocF9yZW1vdmVfc3RhdGVfbm9jYWxscyhDUFVIUF9BUF9YODZfS1ZNX0NMS19PTkxJTkUpO1xuIFx0fVxuLSNpZmRlZiBDT05GSUdfWDg2XzY0XG4gXHRwdmNsb2NrX2d0b2RfdW5yZWdpc3Rlcl9ub3RpZmllcihcdTAwMjZwdmNsb2NrX2d0b2Rfbm90aWZpZXIpO1xuKyNpZmRlZiBDT05GSUdfWDg2XzY0XG4gXHRpcnFfd29ya19zeW5jKFx1MDAyNnB2Y2xvY2tfaXJxX3dvcmspO1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZwdmNsb2NrX2d0b2Rfd29yayk7XG4gI2VuZGlmXG5AQCAtOTQ0MCw2ICs5NDg0LDggQEAgdm9pZCBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRyZXR1cm47XG4gXHR2Y3B1X2xvYWQodmNwdSk7XG4gXHRrdm1fc3luY2hyb25pemVfdHNjKHZjcHUsIE5VTEwpO1xuK1x0aWYgKCF2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnVzZV9tYXN0ZXJfY2xvY2spXG4rXHRcdGt2bV91cGRhdGVfbWFzdGVyY2xvY2sodmNwdS1cdTAwM2Vrdm0pO1xuIFx0dmNwdV9wdXQodmNwdSk7XG4gXG4gXHQvKiBwb2xsIGNvbnRyb2wgZW5hYmxlZCBieSBkZWZhdWx0ICovXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5oIGIvYXJjaC94ODYva3ZtL3g4Ni5oXG5pbmRleCAwZjU5MTliMDkyZTQ3Li4xZDlhNjYwNDhiMDFlIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5oXG4rKysgYi9hcmNoL3g4Ni9rdm0veDg2LmhcbkBAIC0zMzUsNyArMzM1LDggQEAgdTY0IGt2bV9zY2FsZV90c2ModTY0IHRzYywgdTY0IHJhdGlvKTtcbiB1NjQga3ZtX3JlYWRfbDFfdHNjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGhvc3RfdHNjKTtcbiB1NjQga3ZtX2NhbGNfbmVzdGVkX3RzY19vZmZzZXQodTY0IGwxX29mZnNldCwgdTY0IGwyX29mZnNldCwgdTY0IGwyX211bHRpcGxpZXIpO1xuIHU2NCBrdm1fY2FsY19uZXN0ZWRfdHNjX211bHRpcGxpZXIodTY0IGwxX211bHRpcGxpZXIsIHU2NCBsMl9tdWx0aXBsaWVyKTtcbi11NjQga3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB0YXJnZXRfdHNjKTtcbit1NjQga3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBob3N0X3RzYyxcbitcdFx0XHQgICAgICB1NjQgdGFyZ2V0X3RzYyk7XG4gdm9pZCBrdm1fdmNwdV93cml0ZV90c2Nfb2Zmc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGwxX29mZnNldCk7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGFkanVzdF90c2Nfb2Zmc2V0X2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAwOjM5OjA0LjIyMzM4MDc1MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNDE5OTczNTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLVk0geDg2IFRTQyBIYW5kbGluZyBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMgdGhhdCdzIHR3ZWFraW5nIEtWTSdzIHg4NiBUU0MgaW1wbGVtZW50YXRpb24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgYSBmYWlybHkgZGVlcCBkaXZlIGludG8gaG93IEtWTSBoYW5kbGVzIHRpbWUtcmVsYXRlZCBhc3BlY3RzIHdpdGhpbiB0aGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoZSBjaGFuZ2VzIHRvdWNoIGEgbG90IG9mIGNvcmUgS1ZNIGNvZGUsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBUaW1lIFN0YW1wIENvdW50ZXIgKFRTQykuXG5cbk15IGZpcnN0IHRob3VnaHQgaXMgdGhlIGFyY2hpdGVjdHVyYWwgaW1wYWN0LiBUaGV5J3ZlIHVwZGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIGxpa2UgYGt2bV92Y3B1X2FyY2hgIGFuZCBga3ZtX2FyY2hgIHRvIGFjY29tbW9kYXRlIHRoZSBUU0MgY2hhbmdlcywgcmVuYW1pbmcgYGh3X3RzY19raHpgIHRvIGBod190c2NfaHpgLCBhbmQgaW50cm9kdWNpbmcgbmV3IHZhcmlhYmxlcyByZWxhdGVkIHRvIHNjYWxpbmcgcmF0aW9zIGFuZCBzaGlmdHMuIFRoaXMgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgYSBzaGlmdCBpbiBob3cgVFNDIGZyZXF1ZW5jeSBpcyBtYW5hZ2VkIGFuZCBjYWxjdWxhdGVkLiBJIGFsc28gbm90aWNlIHRoZXkncmUgbm93IHBhc3NpbmcgdGhlIGhvc3QgVFNDIHZhbHVlIHRvIGBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0YCwgd2hpY2ggaGludHMgYXQgaW1wcm92ZW1lbnRzIGluIHN5bmNocm9uaXphdGlvbiBhbmQgb2Zmc2V0IGNhbGN1bGF0aW9uIGJldHdlZW4gaG9zdCBhbmQgZ3Vlc3QuIFRoZSBjaGFuZ2VzIHRvIGBrdm1fY3B1aWRgIGFuZCBga3ZtX3NldF9tc3JfY29tbW9uYCBjb25maXJtIHRoaXMgZm9jdXMgb24gcmVmaW5lZCBUU0MgaW5mb3JtYXRpb24gZXhjaGFuZ2UuXG5cblRoZSBkZXBlbmRlbmNlIG9uIGBYODZfRkVBVFVSRV9DT05TVEFOVF9UU0NgIGluIGBzdm1faGFyZHdhcmVfc2V0dXBgIGFuZCBgc2V0dXBfdm1jc19jb25maWdgIGlzIGltcG9ydGFudCDigJMgaXQgaW5kaWNhdGVzIHRoYXQgdGhlc2UgdXBkYXRlcyBhcmUgb3B0aW1pemVkIGZvciBzeXN0ZW1zIHdoZXJlIHRoZSBUU0MgaXMga25vd24gdG8gYmUgc3RhYmxlLCBzbyBpdCdzIGdvb2QgdGhhdCB0aGV5J3JlIGV4cGxpY2l0bHkgY2hlY2tpbmcgZm9yIHRoYXQuIEl0IGFsc28gZmVlbHMgbGlrZSB0aGVzZSBjaGFuZ2VzIGFyZSBnZWFyZWQgdG93YXJkcyBtb3JlIHByZWNpc2UgZ3Vlc3QgdGltZSBrZWVwaW5nLiBUaGV5J3JlIHJlZmluaW5nIGhvdyB0aGUgZ3Vlc3QgVFNDIGlzIGNvbXB1dGVkLCBtYWtpbmcgaXQgaGFuZGxlIG5lZ2F0aXZlIGRlbHRhcyBncmFjZWZ1bGx5LiBSZWZhY3RvcmluZyBvZiB0aGUgYGt2bWNsb2NrYCBmdW5jdGlvbnMgYW5kIHRoZSB1c2Ugb2YgYHRndF90c2NfaHpgIGluc3RlYWQgb2YgYHRndF90c2Nfa2h6YCBpbiBga3ZtX2d1ZXN0X3RpbWVfdXBkYXRlYCBmdXJ0aGVyIGVtcGhhc2l6ZSB0aGUgZm9jdXMgb24gaW5jcmVhc2VkIGFjY3VyYWN5IGFuZCBjb25zaXN0ZW5jeS5cblxuTm93LCBhcyBhIEtWTSBleHBlcnQsIEkgbmVlZCB0byBjb25zaWRlciB0aGUgYnJvYWRlciBpbXBsaWNhdGlvbnMuIFdlJ3JlIGxvb2tpbmcgYXQgY29yZSBmdW5jdGlvbnMsIGluY2x1ZGluZyBga3ZtX3N5bmNocm9uaXplX3RzY2AsIGBrdm1fZ3Vlc3RfdGltZV91cGRhdGVgLCBga3ZtX2dldF93YWxsX2Nsb2NrX2Vwb2NoYCwgYGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXRgLCBhbmQgYGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZWAuIEdpdmVuIG15IGtub3dsZWRnZSBvZiB0aGUgY29kZWJhc2UsIEkga25vdyB0aGVzZSBhcmUgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgaW9jdGxzIG9yIE1TUiB3cml0ZXMuIFRoaXMgbWVhbnMgdGhleSBhcmUgcmVhY2hhYmxlIGZyb20gYSBmdXp6ZXIgKHN5emthbGxlciwgaW4gbXkgY2FzZSkuXG5cbkVzc2VudGlhbGx5LCB0aGVzZSBUU0MgY2hhbmdlcyBhcmUgYW4gaW50ZWdyYWwgcGFydCBvZiBLVk0sIG1ha2luZyB0aGVtIGEgdmVyeSB2aWFibGUgdGFyZ2V0IGZvciBmdXp6aW5nLiBXaXRoIHRoaXMgaW4gbWluZCwgdGhlIHJlZmFjdG9yaW5nIGFuZCBhcmd1bWVudCBhZGRpdGlvbnMgYXJlIHJlYWxseSBpbXBvcnRhbnQuIEFueSBjaGFuZ2VzIHRvIHN5bmNocm9uaXphdGlvbiBvciBvZmZzZXQgY2FsY3VsYXRpb25zIHdpbGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIHRhcmdldHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODc5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI1NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAwOjM5OjE1LjY0MzM1Njg1OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzM0NDg5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMS1cXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXFxuYXJjaC94ODYva3ZtL0tjb25maWctNzAtXFx0Ym9vbCBcXFwiQ29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctODItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6ODM6Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDgtICAgICAgICBib29sIFxcXCJDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVxcdGJvb2wgXFxcIkFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTczOmNvbmZpZyBLVk1fSU9BUElDXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTc0LVxcdGJvb2wgXFxcIkkvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mzpjb25maWcgS1ZNX1NNTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4NC1cXHRib29sIFxcXCJTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5My1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxOTQ6Y29uZmlnIEtWTV9IWVBFUlZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTUtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA3LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwODpjb25maWcgS1ZNX1hFTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOS1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTc6Y29uZmlnIEtWTV9QUk9WRV9NTVVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTgtXFx0Ym9vbCBcXFwiUHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzA6Y29uZmlnIEtWTV9FWFRFUk5BTF9XUklURV9UUkFDS0lOR1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cXHRib29sXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMzpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzNC1cXHRpbnQgXFxcIk1heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAwOjM5OjE1LjY4NjcwODY0MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4NzczNjI5NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLVk0geDg2IFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgZG93biB0aGlzIEtWTSB4ODYgcGF0Y2guIEZpcnN0LCBpdCdzIHByZXR0eSBjbGVhciB0aGlzIGlzIEtWTS1zcGVjaWZpYywgd2hpY2ggaXMgYSBnaXZlbiwgYW5kIHdlJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IEtWTSBpcyBpbmRlZWQgZW5hYmxlZC4gRGlnZ2luZyBkZWVwZXIsIGl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgYXJjaC94ODYva3ZtL3g4Ni5jYCwgYGFyY2gveDg2L2t2bS9zdm0vc3ZtLmNgLCBhbmQgYGFyY2gveDg2L2t2bS92bXgvdm14LmNgLiBHaXZlbiB0aG9zZSBmaWxlcywgd2UncmUgbGlrZWx5IGxvb2tpbmcgYXQgY2hhbmdlcyByZWxhdGVkIHRvIGVpdGhlciBJbnRlbCBvciBBTUQgdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucywgc28ganVzdCBlbmFibGluZyBgS1ZNYCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgdGhlIGJ1aWxkIHJlcXVpcmVtZW50cy5cblxuTm93LCBsZXQncyBnZXQgaW50byB0aGUgZnVuY3Rpb25zIHRoZSBwYXRjaCBpcyB0YXJnZXRpbmcuIEkgc2VlOlxuXG4qICAgYGt2bV9zeW5jaHJvbml6ZV90c2NgXG4qICAgYGt2bV9ndWVzdF90aW1lX3VwZGF0ZWBcbiogICBga3ZtX2dldF93YWxsX2Nsb2NrX2Vwb2NoYFxuKiAgIGBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0YFxuKiAgIGBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGVgXG5cbk9rYXksIGFuZCBub3cgd2UgbmVlZCB0byBjb25zaWRlciBpZiB0aGVzZSBhcmUgaG90IHBhdGggZnVuY3Rpb25zLiBJdCBsb29rcyBsaWtlIGBrdm1fZ3Vlc3RfdGltZV91cGRhdGVgIHdpbGwgZ2V0IGNhbGxlZCBwZXJpb2RpY2FsbHksIG9yIHdoZW4gZXhpdHMgb2NjdXIsIHByb2JhYmx5IGEgcHJldHR5IGNvbW1vbiBvcGVyYXRpb24uIGBrdm1fc3luY2hyb25pemVfdHNjYCBpcyB0cmlnZ2VyZWQgYnkgTVNSIHdyaXRlcywgc28gYW55dGhpbmcgd3JpdGluZyB0aGUgVFNDIHdpbGwgYmUgY2FsbGluZyB0aGF0LiBga3ZtX2dldF93YWxsX2Nsb2NrX2Vwb2NoYCBoYXBwZW5zIG9uIGBLVk1fR0VUX0NMT0NLYCBpb2N0bHMgYW5kIGBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGVgIGlzIHRpZWQgdG8gdkNQVSBjcmVhdGlvbiwgd2hpY2ggaXMgYWxzbyBhIGZyZXF1ZW50IG9wZXJhdGlvbi5cblxuRmluYWxseSwgYSBxdWljayBjaGVjayB0byBzZWUgaWYgd2UncmUgZGVhbGluZyB3aXRoIGV4cG9ydGVkIGZ1bmN0aW9ucyBvciBzdGF0aWNzLiBJdCBhcHBlYXJzIG5vbmUgb2YgdGhlc2UgYXJlIHN0YXRpYywgd2hpY2ggaW1wbGllcyB0aGF0IHRoZXkncmUgYmVpbmcgdXNlZCBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGVpciBvcmlnaW5hbCBzb3VyY2UgZmlsZXMsIHdoaWNoIG1lYW5zIHdlIG1pZ2h0IGJlIGRlYWxpbmcgd2l0aCBhbiBBUEkgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDk1MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMDozOToyMS41NjQwNzQxNDVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxODc3MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3N5bmNocm9uaXplX3RzY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9tc3JzLmM9MTQ0Mj1pbnQga3ZtX3NldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcXG4tLVxcbmFyY2gveDg2L2t2bS9tc3JzLmMtMTYzMS1cXHRcXHRpZiAobXNyX2luZm8tXFx1MDAzZWhvc3RfaW5pdGlhdGVkKSB7XFxuYXJjaC94ODYva3ZtL21zcnMuYzoxNjMyOlxcdFxcdFxcdGt2bV9zeW5jaHJvbml6ZV90c2ModmNwdSwgXFx1MDAyNmRhdGEpO1xcbmFyY2gveDg2L2t2bS9tc3JzLmMtMTYzMy1cXHRcXHR9IGVsc2UgaWYgKCF2Y3B1LVxcdTAwM2VhcmNoLmd1ZXN0X3RzY19wcm90ZWN0ZWQpIHtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz0xMjQxPXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fY2hlY2tfdHNjX3Vuc3RhYmxlKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTI1OC0gKi9cXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTI1OTpzdGF0aWMgdm9pZCBfX2t2bV9zeW5jaHJvbml6ZV90c2Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgb2Zmc2V0LCB1NjQgdHNjLFxcbmFyY2gveDg2L2t2bS94ODYuYy0xMjYwLVxcdFxcdFxcdFxcdCAgdTY0IG5zLCBib29sIG1hdGNoZWQsIGJvb2wgdXNlcl9zZXRfdHNjKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEzMTItXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEzMTM6dm9pZCBrdm1fc3luY2hyb25pemVfdHNjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0ICp1c2VyX3ZhbHVlKVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMzE0LXtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMzc2LVxcbmFyY2gveDg2L2t2bS94ODYuYzoxMzc3OlxcdF9fa3ZtX3N5bmNocm9uaXplX3RzYyh2Y3B1LCBvZmZzZXQsIGRhdGEsIG5zLCBtYXRjaGVkLCAhIXVzZXJfdmFsdWUpO1xcbmFyY2gveDg2L2t2bS94ODYuYy0xMzc4LVxcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gudHNjX3dyaXRlX2xvY2ssIGZsYWdzKTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz0zMzM4PXN0YXRpYyBpbnQga3ZtX2FyY2hfdHNjX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0zMzYzLVxcbmFyY2gveDg2L2t2bS94ODYuYzozMzY0OlxcdFxcdF9fa3ZtX3N5bmNocm9uaXplX3RzYyh2Y3B1LCBvZmZzZXQsIHRzYywgbnMsIG1hdGNoZWQsIHRydWUpO1xcbmFyY2gveDg2L2t2bS94ODYuYy0zMzY1LVxcdFxcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gudHNjX3dyaXRlX2xvY2ssIGZsYWdzKTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz05NDgxPXZvaWQga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy05NDg1LVxcdHZjcHVfbG9hZCh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6OTQ4NjpcXHRrdm1fc3luY2hyb25pemVfdHNjKHZjcHUsIE5VTEwpO1xcbmFyY2gveDg2L2t2bS94ODYuYy05NDg3LVxcdGlmICghdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLnVzZV9tYXN0ZXJfY2xvY2spXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2Lmg9MzMxPWludCBrdm1fZ3Vlc3RfdGltZV91cGRhdGUoc3RydWN0IGt2bV92Y3B1ICp2KTtcXG5hcmNoL3g4Ni9rdm0veDg2LmgtMzMyLVxcbmFyY2gveDg2L2t2bS94ODYuaDozMzM6dm9pZCBrdm1fc3luY2hyb25pemVfdHNjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0ICp1c2VyX3ZhbHVlKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmgtMzM0LXU2NCBrdm1fc2NhbGVfdHNjKHU2NCB0c2MsIHU2NCByYXRpbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAwOjM5OjIxLjYwOTI2NjMxOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NTQ5MzYyMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBsb29rcyBsaWtlIGl0J3MgZGlnZ2luZyBpbnRvIHRoZSBoZWFydCBvZiBLVk0ncyBUU0Mgc2NhbGluZyBhbmQgbWFzdGVyIGNsb2NrIG1lY2hhbmlzbXMuIFRoYXQncyBhIGNyaXRpY2FsIGFyZWEsIGFuZCB0aGUgZmFjdCB0aGF0IGl0J3MgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIG1lYW5zIGl0J3MgZGVmaW5pdGVseSBmdXp6YWJsZS4gVGltZSB0byBkaWcgaW4uXG5cbk15IGZvY3VzIHNob3VsZCBiZSBvbiB0aGVzZSBrZXkgc3ltYm9sczogYGt2bV9zeW5jaHJvbml6ZV90c2NgLCBga3ZtX2d1ZXN0X3RpbWVfdXBkYXRlYCwgYGt2bV9nZXRfd2FsbF9jbG9ja19lcG9jaGAsIGBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0YCwgYW5kIGBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGVgLiBUaGV5IHNlZW0gY2VudHJhbCB0byB0aGUgY2hhbmdlcy5cblxuTm93LCBjb25maWd1cmF0aW9uLiAgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZnV6emluZyBzZXR1cCBjYW4gYWN0dWFsbHkgaGl0IHRoaXMgY29kZS4gSSBuZWVkIHRvIGVuYWJsZSBzb21lIEtWTSBjb25maWdzLiBSaWdodCwgbGV0J3Mgc3RhcnQgd2l0aCBgS1ZNYCwgYnV0IEkgYmV0IGZvciBhY3R1YWwgZXhlY3V0aW9uLCBJJ2xsIGFsc28gbmVlZCBlaXRoZXIgYEtWTV9JTlRFTGAgb3IgYEtWTV9BTURgLiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBvbmx5IGFkZCBgS1ZNYCwgYEtWTV9JTlRFTGAsIGFuZCBgS1ZNX0FNRGAgdG8gYEVuYWJsZUNvbmZpZ3NgLCB3aXRob3V0IHRoZSBgQ09ORklHX2AgcHJlZml4LlxuXG5CZWZvcmUgSSBtb3ZlIG9uLCBsZXQgbWUgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBrdm1fZ2V0X3dhbGxfY2xvY2tfZXBvY2hgLiBUaGF0IG9uZSBzZWVtcyBpbnRlcmVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3OTAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDA6Mzk6MjYuMTY0MjA4NjFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDczNDE1MjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2dldF93YWxsX2Nsb2NrX2Vwb2NoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL21zcnMuYz0xMjI0PXN0YXRpYyB2b2lkIGt2bV93cml0ZV93YWxsX2Nsb2NrKHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3Qgd2FsbF9jbG9jaywgaW50IHNlY19oaV9vZnMpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTEyNDYtXFxuYXJjaC94ODYva3ZtL21zcnMuYzoxMjQ3OlxcdHdhbGxfbnNlYyA9IGt2bV9nZXRfd2FsbF9jbG9ja19lcG9jaChrdm0pO1xcbmFyY2gveDg2L2t2bS9tc3JzLmMtMTI0OC1cXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz0xODIzPWludCBrdm1fZ3Vlc3RfdGltZV91cGRhdGUoc3RydWN0IGt2bV92Y3B1ICp2KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTE5OTEtICovXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjE5OTI6dWludDY0X3Qga3ZtX2dldF93YWxsX2Nsb2NrX2Vwb2NoKHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTk5My17XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2Lmg9MzI4PXU2NCBnZXRfa3ZtY2xvY2tfbnMoc3RydWN0IGt2bSAqa3ZtKTtcXG5hcmNoL3g4Ni9rdm0veDg2Lmg6MzI5OnVpbnQ2NF90IGt2bV9nZXRfd2FsbF9jbG9ja19lcG9jaChzdHJ1Y3Qga3ZtICprdm0pO1xcbmFyY2gveDg2L2t2bS94ODYuaC0zMzAtYm9vbCBrdm1fZ2V0X21vbm90b25pY19hbmRfY2xvY2tyZWFkKHM2NCAqa2VybmVsX25zLCB1NjQgKnRzY190aW1lc3RhbXApO1xcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jPTM5PXN0YXRpYyBpbnQga3ZtX3hlbl9zaGFyZWRfaW5mb19pbml0KHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy02My1cXHQgKi9cXG5hcmNoL3g4Ni9rdm0veGVuLmM6NjQ6XFx0d2FsbF9uc2VjID0ga3ZtX2dldF93YWxsX2Nsb2NrX2Vwb2NoKGt2bSk7XFxuYXJjaC94ODYva3ZtL3hlbi5jLTY1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMDozOToyNi4yMTE1NTQwMDNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzAxMDc4MDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuIFRoaXMgYGt2bV9nZXRfd2FsbF9jbG9ja19lcG9jaGAgZnVuY3Rpb24uLi4gcmlnaHQsIGl0J3MgdXNlZCBieSBYZW4gYW5kIGludGVyYWN0cyB3aXRoIE1vZGVsLVNwZWNpZmljIFJlZ2lzdGVycyAoTVNScykuIFNvLCBpdCdzIHByZXR0eSBsb3ctbGV2ZWwsIGxpa2VseSBkZWFsaW5nIHdpdGggdGltZWtlZXBpbmcgc3luY2hyb25pemF0aW9uIGJldHdlZW4gdGhlIGh5cGVydmlzb3IgYW5kIHRoZSBndWVzdC5cblxuKipEaWdnaW5nIGludG8gVGltZWtlZXBpbmc6IFVuZGVyc3RhbmRpbmcgYGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXRgKipcblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5ICpob3cqIGl0J3Mgb3BlcmF0aW5nLiBNeSBuZXh0IHN0ZXAgaXMgZGVmaW5pdGVseSBnb2luZyB0byBiZSBkaXZpbmcgaW50byBga3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldGAuIEl0J3MgYWxtb3N0IGNlcnRhaW4gdGhpcyBmdW5jdGlvbiBmaWd1cmVzIG91dCB0aGUgVGltZSBTdGFtcCBDb3VudGVyIChUU0MpIG9mZnNldCBhdCB0aGUgTGV2ZWwgMSAoTDEpIHN0YWdlLiBUaGUgVFNDIGlzIHRoZSBjcml0aWNhbCBoYXJkd2FyZSByZWdpc3RlciB3ZSdyZSB0YWxraW5nIGFib3V0IGhlcmUuIEtub3dpbmcgaG93IHRoZSBndWVzdCdzIFRTQyByZWxhdGVzIHRvIHRoZSBob3N0J3MsIGVzcGVjaWFsbHkgd2l0aCB2aXJ0dWFsaXphdGlvbiwgaXMgYWJzb2x1dGVseSBrZXkgZm9yIGNvcnJlY3QgdGltZSBtYW5hZ2VtZW50LiBJJ20gZ3Vlc3NpbmcgdGhpcyBmdW5jdGlvbiBpcyBjZW50cmFsIHRvIGVzdGFibGlzaGluZyBhIHJlbGlhYmxlIHRpbWUgYmFzZSBmb3IgdGhlIGd1ZXN0LCBkZXNwaXRlIGFueSBoeXBlcnZpc29yIG92ZXJoZWFkIG9yIGludGVycnVwdGlvbnMuIEkgc3VzcGVjdCBpdCdzIGxvb2tpbmcgYXQgdGhlIGd1ZXN0IFRTQyBhbmQgY29tcGFyaW5nIGl0IHRvIGEga25vd24gaG9zdCBUU0Mgb3IgYSByZWZlcmVuY2UgdGltZSwgbWF5YmUgdXNpbmcgc29tZSBjYWxpYnJhdGlvbi4gVGhlIG9mZnNldCBjYWxjdWxhdGlvbiBpcyBjcnVjaWFsIHRvIG1haW50YWluaW5nIGEgY29uc2lzdGVudCB0aW1lIHZpZXcgd2l0aGluIHRoZSB2aXJ0dWFsIG1hY2hpbmUuIFRoaXMgaGFzIGltcGxpY2F0aW9ucyBmb3IgYSB3aG9sZSBsb2FkIG9mIHBlcmZvcm1hbmNlIG1ldHJpY3MsIGFuZCBpdCdzIHNvbWV0aGluZyBJIG5lZWQgdG8gZnVsbHkgZ3Jhc3AuIEknbGwgbmVlZCB0byBsb29rIGNhcmVmdWxseSBhdCB0aGUgY29kZSB0byB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzg1NywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAwOjM5OjI5LjkxMjYzMzk2NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYwMjk0ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9tc3JzLmM9MTQ0Mj1pbnQga3ZtX3NldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcXG4tLVxcbmFyY2gveDg2L2t2bS9tc3JzLmMtMTYzMy1cXHRcXHR9IGVsc2UgaWYgKCF2Y3B1LVxcdTAwM2VhcmNoLmd1ZXN0X3RzY19wcm90ZWN0ZWQpIHtcXG5hcmNoL3g4Ni9rdm0vbXNycy5jOjE2MzQ6XFx0XFx0XFx0dTY0IGFkaiA9IGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXQodmNwdSwgcmR0c2MoKSwgZGF0YSkgLVxcbmFyY2gveDg2L2t2bS9tc3JzLmMtMTYzNS1cXHRcXHRcXHRcXHQgIHZjcHUtXFx1MDAzZWFyY2gubDFfdHNjX29mZnNldDtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz0xMTQ2PXU2NCBrdm1fc2NhbGVfdHNjKHU2NCB0c2MsIHU2NCByYXRpbylcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMTU1LVxcbmFyY2gveDg2L2t2bS94ODYuYzoxMTU2OnU2NCBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGhvc3RfdHNjLFxcbmFyY2gveDg2L2t2bS94ODYuYy0xMTU3LVxcdFxcdFxcdCAgICAgIHU2NCB0YXJnZXRfdHNjKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTEzMTM9dm9pZCBrdm1fc3luY2hyb25pemVfdHNjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0ICp1c2VyX3ZhbHVlKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEzMjItXFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gudHNjX3dyaXRlX2xvY2ssIGZsYWdzKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTMyMzpcXHRvZmZzZXQgPSBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0KHZjcHUsIHJkdHNjKCksIGRhdGEpO1xcbmFyY2gveDg2L2t2bS94ODYuYy0xMzI0LVxcdG5zID0gZ2V0X2t2bWNsb2NrX2Jhc2VfbnMoKTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMzcxLVxcdFxcdFxcdGRhdGEgKz0gZGVsdGE7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEzNzI6XFx0XFx0XFx0b2Zmc2V0ID0ga3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldCh2Y3B1LCByZHRzYygpLCBkYXRhKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTM3My1cXHRcXHR9XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MjU3OD12b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMjYyOC1cXHRcXHRpZiAoa3ZtX2NoZWNrX3RzY191bnN0YWJsZSgpKSB7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjI2Mjk6XFx0XFx0XFx0dTY0IG9mZnNldCA9IGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXQodmNwdSwgcmR0c2MoKSxcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMjYzMC1cXHRcXHRcXHRcXHRcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLmxhc3RfZ3Vlc3RfdHNjKTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuaD0zMzc9dTY0IGt2bV9jYWxjX25lc3RlZF90c2NfbXVsdGlwbGllcih1NjQgbDFfbXVsdGlwbGllciwgdTY0IGwyX211bHRpcGxpZXIpO1xcbmFyY2gveDg2L2t2bS94ODYuaDozMzg6dTY0IGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgaG9zdF90c2MsXFxuYXJjaC94ODYva3ZtL3g4Ni5oLTMzOS1cXHRcXHRcXHQgICAgICB1NjQgdGFyZ2V0X3RzYyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAwOjM5OjI5Ljk1ODY2OTg1OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzAyMDcyOTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgU3RyYXRlZ3kgZm9yIFRoaXMgS1ZNIFBhdGNoKipcblxuT2theSwgYWZ0ZXIgYSBxdWljayByZXZpZXcsIHRoaXMgcGF0Y2ggbG9va3MgbGlrZSBpdCdzIGRlZmluaXRlbHkgd29ydGggdGhlIGVmZm9ydCB0byBmdXp6LiBUaGUgbW9kaWZpY2F0aW9ucyBpdCBtYWtlcyB0byB0aGUgS1ZNIHg4NiBUU0MgaGFuZGxpbmcsIHNwZWNpZmljYWxseSB0aGUgVFNDIHNjYWxpbmcsIG1hc3RlciBjbG9jayB1cGRhdGVzLCBhbmQgd2FsbCBjbG9jayBlcG9jaCBjYWxjdWxhdGlvbnMsIGFyZSBhbGwgcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZy4gVGhpcyBpcyBjb3JlIGh5cGVydmlzb3IgbG9naWMsIGFuZCB3ZSBrbm93IHRoYXQgaXQncyBkaXJlY3RseSBhY2Nlc3NpYmxlIGZyb20gZ3Vlc3QgVk1zIHRocm91Z2ggdmFyaW91cyBpbnRlcmZhY2VzIGxpa2UgTVNSIHdyaXRlcywgQ1BVSUQgaW5zdHJ1Y3Rpb25zLCBhbmQgS1ZNIGlvY3Rscy4gVGhhdCBraW5kIG9mIGV4cG9zdXJlIHNjcmVhbXMgdnVsbmVyYWJpbGl0eSBwb3RlbnRpYWwuXG5cblRoZXJlZm9yZSwgSSdtIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAuXG5cbk15IGltbWVkaWF0ZSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCBkaXJlY3RseSBoYW5kbGUgdGhlIFRTQyBzeW5jaHJvbml6YXRpb24gYW5kIGd1ZXN0IHRpbWUgdXBkYXRlcy4gSSdsbCBtYWtlIHN1cmUgdG8gYWRkIHRoZXNlIGZvY3VzIHN5bWJvbHMgdG8gdGhlIGZ1enppbmcgY29uZmlndXJhdGlvbjogYGt2bV9zeW5jaHJvbml6ZV90c2NgLCBga3ZtX2d1ZXN0X3RpbWVfdXBkYXRlYCwgYGt2bV9nZXRfd2FsbF9jbG9ja19lcG9jaGAsIGBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0YCwgYW5kIGBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGVgLiBUaGVzZSBhcmUgdGhlIGtleSBhcmVhcyB3aGVyZSB0aGUgcGF0Y2ggaW50cm9kdWNlcyBjaGFuZ2VzIGFuZCwgY29uc2VxdWVudGx5LCB3aGVyZSBJIGFudGljaXBhdGUgdGhlIG1vc3QgaW50ZXJlc3RpbmcgZnV6emluZyByZXN1bHRzLlxuXG5GaW5hbGx5LCBJJ2xsIGVuYWJsZSB0aGUgYEtWTWAsIGBLVk1fSU5URUxgLCBhbmQgYEtWTV9BTURgIGNvbmZpZ3VyYXRpb25zLiBHaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2VzLCB0aGVzZSBhcmUgZXNzZW50aWFsIHRvIGVuc3VyZSB0aGUgZnV6emVyIGNhbiBjb3JyZWN0bHkgZXhlcmNpc2UgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5kZXIgZGlmZmVyZW50IGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zLiBUaGlzIHNob3VsZCBnaXZlIHVzIGEgZ29vZCBzdGFydCB0b3dhcmRzIGlkZW50aWZ5aW5nIGFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGhpbiB0aGlzIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTE0NiwiT3V0cHV0VG9rZW5zIjoxODIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDA6Mzk6MzUuMjYwNzQ1MTg3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg3Mjk5MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fQU1EXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3N5bmNocm9uaXplX3RzY1wiLFxuICAgIFwia3ZtX2d1ZXN0X3RpbWVfdXBkYXRlXCIsXG4gICAgXCJrdm1fZ2V0X3dhbGxfY2xvY2tfZXBvY2hcIixcbiAgICBcImt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXRcIixcbiAgICBcImt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSB4ODYgVFNDIChUaW1lIFN0YW1wIENvdW50ZXIpIGhhbmRsaW5nLCBpbmNsdWRpbmcgVFNDIHNjYWxpbmcsIG1hc3RlciBjbG9jayB1cGRhdGVzLCBhbmQgd2FsbCBjbG9jayBlcG9jaCBjYWxjdWxhdGlvbnMuIFRoaXMgaXMgY29yZSBoeXBlcnZpc29yIGxvZ2ljIHJlYWNoYWJsZSBmcm9tIGd1ZXN0IFZNcyB2aWEgTVNSIHdyaXRlcywgQ1BVSUQsIGFuZCBLVk0gaW9jdGxzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGhhbmRsaW5nIFRTQyBzeW5jaHJvbml6YXRpb24gYW5kIGd1ZXN0IHRpbWUgdXBkYXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0FNRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9zeW5jaHJvbml6ZV90c2NcIixcbiAgICBcImt2bV9ndWVzdF90aW1lX3VwZGF0ZVwiLFxuICAgIFwia3ZtX2dldF93YWxsX2Nsb2NrX2Vwb2NoXCIsXG4gICAgXCJrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0XCIsXG4gICAgXCJrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0geDg2IFRTQyAoVGltZSBTdGFtcCBDb3VudGVyKSBoYW5kbGluZywgaW5jbHVkaW5nIFRTQyBzY2FsaW5nLCBtYXN0ZXIgY2xvY2sgdXBkYXRlcywgYW5kIHdhbGwgY2xvY2sgZXBvY2ggY2FsY3VsYXRpb25zLiBUaGlzIGlzIGNvcmUgaHlwZXJ2aXNvciBsb2dpYyByZWFjaGFibGUgZnJvbSBndWVzdCBWTXMgdmlhIE1TUiB3cml0ZXMsIENQVUlELCBhbmQgS1ZNIGlvY3Rscy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBoYW5kbGluZyBUU0Mgc3luY2hyb25pemF0aW9uIGFuZCBndWVzdCB0aW1lIHVwZGF0ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5c2q5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-04 23:52:38 +0000 UTC FinishedAt: 2026-08-05 00:39:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-x86", "tree_url": "https://github.com/kvm-x86/linux.git", "commit_hash": "2dfab80a305700a45bd947350dae253ba4e30c41", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-x86", "tree_url": "https://github.com/kvm-x86/linux.git", "commit_hash": "2dfab80a305700a45bd947350dae253ba4e30c41", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL", "KVM_AMD" ], "series_id": "6c89dfdc-3f3c-4a5e-bcfd-9ea6b3d59495" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_synchronize_tsc", "kvm_guest_time_update", "kvm_get_wall_clock_epoch", "kvm_compute_l1_tsc_offset", "kvm_arch_vcpu_postcreate" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAwOjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9zeW5jaHJvbml6ZV90c2MmIzM0OywKICAgICYjMzQ7a3ZtX2d1ZXN0X3RpbWVfdXBkYXRlJiMzNDssCiAgICAmIzM0O2t2bV9nZXRfd2FsbF9jbG9ja19lcG9jaCYjMzQ7LAogICAgJiMzNDtrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0JiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBLVk0geDg2IFRTQyAoVGltZSBTdGFtcCBDb3VudGVyKSBoYW5kbGluZywgaW5jbHVkaW5nIFRTQyBzY2FsaW5nLCBtYXN0ZXIgY2xvY2sgdXBkYXRlcywgYW5kIHdhbGwgY2xvY2sgZXBvY2ggY2FsY3VsYXRpb25zLiBUaGlzIGlzIGNvcmUgaHlwZXJ2aXNvciBsb2dpYyByZWFjaGFibGUgZnJvbSBndWVzdCBWTXMgdmlhIE1TUiB3cml0ZXMsIENQVUlELCBhbmQgS1ZNIGlvY3Rscy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBoYW5kbGluZyBUU0Mgc3luY2hyb25pemF0aW9uIGFuZCBndWVzdCB0aW1lIHVwZGF0ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDA6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyNjI0NDQ0YzUyMGI4NDczM2U5MmY2NWVkZTI2ZDBmZmI1YjUyZjg4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgNSAwMDozOTowMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggMjgzODQ3NjE5ZmY4OC4uMjg3OGE1MTgxY2Q5YiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC04NjQsNyAmIzQzOzg2NCw3IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcbiBcdGdwYV90IHRpbWU7XG4gXHRzOCAgcHZjbG9ja190c2Nfc2hpZnQ7XG4gXHR1MzIgcHZjbG9ja190c2NfbXVsO1xuLVx0dW5zaWduZWQgaW50IGh3X3RzY19raHo7XG4mIzQzO1x0dTY0IGh3X3RzY19oejtcbiBcdHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlIHB2X3RpbWU7XG4gXHQvKiBzZXQgZ3Vlc3Qgc3RvcHBlZCBmbGFnIGluIHB2Y2xvY2sgZmxhZ3MgZmllbGQgKi9cbiBcdGJvb2wgcHZjbG9ja19zZXRfZ3Vlc3Rfc3RvcHBlZF9yZXF1ZXN0O1xuQEAgLTEyMzYsNiAmIzQzOzEyMzYsNyBAQCBzdHJ1Y3Qga3ZtX2FyY2gge1xuIFx0dTY0IGxhc3RfdHNjX3dyaXRlO1xuIFx0dTMyIGxhc3RfdHNjX2toejtcbiBcdHU2NCBsYXN0X3RzY19vZmZzZXQ7XG4mIzQzO1x0dTY0IGxhc3RfdHNjX3NjYWxpbmdfcmF0aW87XG4gXHR1NjQgY3VyX3RzY19uc2VjO1xuIFx0dTY0IGN1cl90c2Nfd3JpdGU7XG4gXHR1NjQgY3VyX3RzY19vZmZzZXQ7XG5AQCAtMTI1MSw2ICYjNDM7MTI1Miw5IEBAIHN0cnVjdCBrdm1fYXJjaCB7XG4gXHR1NjQgbWFzdGVyX2tlcm5lbF9ucztcbiBcdHU2NCBtYXN0ZXJfY3ljbGVfbm93O1xuIFx0c3RydWN0IHJhdGVsaW1pdF9zdGF0ZSBrdm1jbG9ja191cGRhdGVfcnM7XG4mIzQzO1x0dTY0IG1hc3Rlcl90c2Nfc2NhbGluZ19yYXRpbztcbiYjNDM7XHRzOCAgbWFzdGVyX3RzY19zaGlmdDtcbiYjNDM7XHR1MzIgbWFzdGVyX3RzY19tdWw7XG4gXG4gI2lmZGVmIENPTkZJR19LVk1fSFlQRVJWXG4gXHRzdHJ1Y3Qga3ZtX2h2IGh5cGVydjtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vY3B1aWQuYyBiL2FyY2gveDg2L2t2bS9jcHVpZC5jXG5pbmRleCA5ZTljZjY1MzhhOTZlLi43MDQ5ZjVhNTU5N2I0IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL2NwdWlkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9jcHVpZC5jXG5AQCAtMTYsNiAmIzQzOzE2LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC92bWFsbG9jLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91YWNjZXNzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9zdGF0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdW5pdHMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS9wcm9jZXNzb3IuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS91c2VyLmhcdTAwM2VcbkBAIC0yMTQ2LDcgJiM0MzsyMTQ3LDcgQEAgYm9vbCBrdm1fY3B1aWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgKmVheCwgdTMyICplYngsXG4gXHRcdFx0XHQqZWN4ID0gdmNwdS1cdTAwM2VhcmNoLnB2Y2xvY2tfdHNjX211bDtcbiBcdFx0XHRcdCplZHggPSB2Y3B1LVx1MDAzZWFyY2gucHZjbG9ja190c2Nfc2hpZnQ7XG4gXHRcdFx0fSBlbHNlIGlmIChpbmRleCA9PSAyKSB7XG4tXHRcdFx0XHQqZWF4ID0gdmNwdS1cdTAwM2VhcmNoLmh3X3RzY19raHo7XG4mIzQzO1x0XHRcdFx0KmVheCA9IGRpdl91NjQodmNwdS1cdTAwM2VhcmNoLmh3X3RzY19oeiwgSFpfUEVSX0tIWik7XG4gXHRcdFx0fVxuIFx0XHR9XG4gXHR9IGVsc2Uge1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tc3JzLmMgYi9hcmNoL3g4Ni9rdm0vbXNycy5jXG5pbmRleCA2NmZhNzE0MGQ2NWQ5Li4yMmNlYjM5ZDQxZjY2IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL21zcnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL21zcnMuY1xuQEAgLTE2MzEsNyAmIzQzOzE2MzEsOCBAQCBpbnQga3ZtX3NldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcbiBcdFx0aWYgKG1zcl9pbmZvLVx1MDAzZWhvc3RfaW5pdGlhdGVkKSB7XG4gXHRcdFx0a3ZtX3N5bmNocm9uaXplX3RzYyh2Y3B1LCBcdTAwMjZkYXRhKTtcbiBcdFx0fSBlbHNlIGlmICghdmNwdS1cdTAwM2VhcmNoLmd1ZXN0X3RzY19wcm90ZWN0ZWQpIHtcbi1cdFx0XHR1NjQgYWRqID0ga3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldCh2Y3B1LCBkYXRhKSAtIHZjcHUtXHUwMDNlYXJjaC5sMV90c2Nfb2Zmc2V0O1xuJiM0MztcdFx0XHR1NjQgYWRqID0ga3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldCh2Y3B1LCByZHRzYygpLCBkYXRhKSAtXG4mIzQzO1x0XHRcdFx0ICB2Y3B1LVx1MDAzZWFyY2gubDFfdHNjX29mZnNldDtcbiBcdFx0XHRhZGp1c3RfdHNjX29mZnNldF9ndWVzdCh2Y3B1LCBhZGopO1xuIFx0XHRcdHZjcHUtXHUwMDNlYXJjaC5pYTMyX3RzY19hZGp1c3RfbXNyICYjNDM7PSBhZGo7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuaW5kZXggOWQ2MDdiOThiZDA2Ny4uMzA1N2NhNzA1MWRiMSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbkBAIC01NjAyLDcgJiM0Mzs1NjAyLDggQEAgc3RhdGljIF9faW5pdCBpbnQgc3ZtX2hhcmR3YXJlX3NldHVwKHZvaWQpXG4gXHRcdFx0XHQgICAgIFhGRUFUVVJFX01BU0tfQk5EQ1NSKTtcbiBcbiBcdGlmICh0c2Nfc2NhbGluZykge1xuLVx0XHRpZiAoIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9UU0NSQVRFTVNSKSkge1xuJiM0MztcdFx0aWYgKCFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfVFNDUkFURU1TUikgfHxcbiYjNDM7XHRcdCAgICAhYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQykpIHtcbiBcdFx0XHR0c2Nfc2NhbGluZyA9IGZhbHNlO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdHByX2luZm8oXCYjMzQ7VFNDIHNjYWxpbmcgc3VwcG9ydGVkXFxuXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jIGIvYXJjaC94ODYva3ZtL3ZteC92bXguY1xuaW5kZXggZTNiZmU2YWNhMWEwZS4uOWFiZDJlZDNhZWFlMiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbkBAIC0yODQxLDYgJiM0MzsyODQxLDE2IEBAIHN0YXRpYyBpbnQgc2V0dXBfdm1jc19jb25maWcoc3RydWN0IHZtY3NfY29uZmlnICp2bWNzX2NvbmYsXG4gXHRpZiAoIWNwdV9oYXNfc2d4KCkpXG4gXHRcdF9jcHVfYmFzZWRfMm5kX2V4ZWNfY29udHJvbCBcdTAwMjY9IH5TRUNPTkRBUllfRVhFQ19FTkNMU19FWElUSU5HO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogS1ZNIGRvZXNuJiMzOTt0IHJlLWRlcml2ZSB0aGUgVFNDIHNjYWxpbmcgcmF0aW8gd2hlbiB0aGUgaG9zdCBUU0NcbiYjNDM7XHQgKiBmcmVxdWVuY3kgY2hhbmdlcywgc28gVFNDIHNjYWxpbmcgaXMgb25seSB1c2FibGUgd2l0aCBhIGNvbnN0YW50XG4mIzQzO1x0ICogVFNDLiAgQ2xlYXIgdGhlIGNvbnRyb2wgaGVyZSByYXRoZXIgdGhhbiBpbiB2bXhfaGFyZHdhcmVfc2V0dXAoKSBzb1xuJiM0MztcdCAqIHRoYXQgdGhlIHBlci1DUFUgY29uZmlncyByZWNvbXB1dGVkIGJ5IHZteF9jaGVja19wcm9jZXNzb3JfY29tcGF0KClcbiYjNDM7XHQgKiBzdGF5IGNvbnNpc3RlbnQgd2l0aCB0aGUgZ29sZGVuIHZtY3NfY29uZmlnLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQykpXG4mIzQzO1x0XHRfY3B1X2Jhc2VkXzJuZF9leGVjX2NvbnRyb2wgXHUwMDI2PSB+U0VDT05EQVJZX0VYRUNfVFNDX1NDQUxJTkc7XG4mIzQzO1xuIFx0aWYgKF9jcHVfYmFzZWRfZXhlY19jb250cm9sIFx1MDAyNiBDUFVfQkFTRURfQUNUSVZBVEVfVEVSVElBUllfQ09OVFJPTFMpXG4gXHRcdF9jcHVfYmFzZWRfM3JkX2V4ZWNfY29udHJvbCA9XG4gXHRcdFx0YWRqdXN0X3ZteF9jb250cm9sczY0KEtWTV9PUFRJT05BTF9WTVhfVEVSVElBUllfVk1fRVhFQ19DT05UUk9MLFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggZDk0YjU5MTQwYzQ1Mi4uY2JlNGZkMzQ1N2I0NCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5AQCAtNjEsNiAmIzQzOzYxLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1fZW5jcnlwdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3VzcGVuZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc21wLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdW5pdHMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9pcGkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9rdm0uaFx1MDAzZVxuQEAgLTg3Myw3ICYjNDM7ODc0LDYgQEAgc3RhdGljIGlubGluZSBib29sIGt2bV92Y3B1X2V4aXRfcmVxdWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHQgICAgICAga3ZtX3JlcXVlc3RfcGVuZGluZyh2Y3B1KSB8fCB4ZmVyX3RvX2d1ZXN0X21vZGVfd29ya19wZW5kaW5nKCk7XG4gfVxuIFxuLSNpZmRlZiBDT05GSUdfWDg2XzY0XG4gc3RydWN0IHB2Y2xvY2tfY2xvY2sge1xuIFx0aW50IHZjbG9ja19tb2RlO1xuIFx0dTY0IGN5Y2xlX2xhc3Q7XG5AQCAtOTMxLDEzICYjNDM7OTMxLDYgQEAgc3RhdGljIHM2NCBnZXRfa3ZtY2xvY2tfYmFzZV9ucyh2b2lkKVxuIFx0LyogQ291bnQgdXAgZnJvbSBib290IHRpbWUsIGJ1dCB3aXRoIHRoZSBmcmVxdWVuY3kgb2YgdGhlIHJhdyBjbG9jay4gICovXG4gXHRyZXR1cm4ga3RpbWVfdG9fbnMoa3RpbWVfYWRkKGt0aW1lX2dldF9yYXcoKSwgcHZjbG9ja19ndG9kX2RhdGEub2Zmc19ib290KSk7XG4gfVxuLSNlbHNlXG4tc3RhdGljIHM2NCBnZXRfa3ZtY2xvY2tfYmFzZV9ucyh2b2lkKVxuLXtcbi1cdC8qIE1hc3RlciBjbG9jayBub3QgdXNlZCwgc28gd2UgY2FuIGp1c3QgdXNlIENMT0NLX0JPT1RUSU1FLiAgKi9cbi1cdHJldHVybiBrdGltZV9nZXRfYm9vdHRpbWVfbnMoKTtcbi19XG4tI2VuZGlmXG4gXG4gc3RhdGljIHVpbnQzMl90IGRpdl9mcmFjKHVpbnQzMl90IGRpdmlkZW5kLCB1aW50MzJfdCBkaXZpc29yKVxuIHtcbkBAIC05NDUsMzIgJiM0Mzs5MzgsNTcgQEAgc3RhdGljIHVpbnQzMl90IGRpdl9mcmFjKHVpbnQzMl90IGRpdmlkZW5kLCB1aW50MzJfdCBkaXZpc29yKVxuIFx0cmV0dXJuIGRpdmlkZW5kO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBrdm1fZ2V0X3RpbWVfc2NhbGUodWludDY0X3Qgc2NhbGVkX2h6LCB1aW50NjRfdCBiYXNlX2h6LFxuJiM0MztzdGF0aWMgdm9pZCBrdm1fZ2V0X3RpbWVfc2NhbGUodTY0IHNjYWxlZF9oeiwgdTY0IGJhc2VfaHosXG4gXHRcdFx0ICAgICAgIHM4ICpwc2hpZnQsIHUzMiAqcG11bHRpcGxpZXIpXG4ge1xuLVx0dWludDY0X3Qgc2NhbGVkNjQ7XG4tXHRpbnQzMl90ICBzaGlmdCA9IDA7XG4tXHR1aW50NjRfdCB0cHM2NDtcbi1cdHVpbnQzMl90IHRwczMyO1xuJiM0MztcdHU2NCBzY2FsZWRfaHpfdTY0ID0gc2NhbGVkX2h6O1xuJiM0MztcdHMzMiBzaGlmdCA9IDA7XG4mIzQzO1x0dTY0IGJhc2VfaHpfdTY0O1xuJiM0MztcdHUzMiBiYXNlMzI7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIGEgZml4ZWQtcG9pbnQgbXVsdGlwbGllciBhbmQgc2hpZnQgc3VjaFxuJiM0MztcdCAqIHRoYXQ6XG4mIzQzO1x0ICogICB0aW1lX25zID0gKHRzY19jeWNsZXMgXHUwMDNjXHUwMDNjIHNoaWZ0KSAqIG11bHRpcGxpZXIgXHUwMDNlXHUwMDNlIDMyXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBXaGVyZSB0c2NfY3ljbGVzIHRpY2sgYXQgYmFzZV9oeiwgYW5kIHRpbWVfbnMgc2hvdWxkIGNvdW50IGF0XG4mIzQzO1x0ICogc2NhbGVkX2h6ICh0eXBpY2FsbHkgTlNFQ19QRVJfU0VDIGZvciBhIFRTQ+KGkm5hbm9zZWNvbmRzIGNvbnZlcnNpb24pLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogVGhlIG11bHRpcGxpZXIgaXM6IChzY2FsZWRfaHogXHUwMDNjXHUwMDNjIDMyKSAvIGJhc2VfaHosIGFkanVzdGVkIGJ5IHNoaWZ0XG4mIzQzO1x0ICogdG8ga2VlcCBldmVyeXRoaW5nIGluIHJhbmdlLlxuJiM0MztcdCAqL1xuIFxuLVx0dHBzNjQgPSBiYXNlX2h6O1xuLVx0c2NhbGVkNjQgPSBzY2FsZWRfaHo7XG4tXHR3aGlsZSAodHBzNjQgXHUwMDNlIHNjYWxlZDY0KjIgfHwgdHBzNjQgXHUwMDI2IDB4ZmZmZmZmZmYwMDAwMDAwMFVMTCkge1xuLVx0XHR0cHM2NCBcdTAwM2VcdTAwM2U9IDE7XG4mIzQzO1x0YmFzZV9oel91NjQgPSBiYXNlX2h6O1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFN0YXJ0IGJ5IHNoaWZ0aW5nIGJhc2VfaHogcmlnaHQgdW50aWwgaXQgZml0cyBpbiAzMiBiaXRzLCBhbmRcbiYjNDM7XHQgKiBpcyBsb3dlciB0aGFuIGRvdWJsZSB0aGUgdGFyZ2V0IHJhdGUuIFRoaXMgaW50cm9kdWNlcyBhIG5lZ2F0aXZlXG4mIzQzO1x0ICogc2hpZnQgdmFsdWUgd2hpY2ggd291bGQgcmVzdWx0IGluIHB2Y2xvY2tfc2NhbGVfZGVsdGEoKSBzaGlmdGluZ1xuJiM0MztcdCAqIHRoZSBhY3R1YWwgdGljayBjb3VudCByaWdodCBiZWZvcmUgcGVyZm9ybWluZyB0aGUgbXVsdGlwbGljYXRpb24uXG4mIzQzO1x0ICovXG4mIzQzO1x0d2hpbGUgKGJhc2VfaHpfdTY0IFx1MDAzZSBzY2FsZWRfaHpfdTY0ICogMiB8fCBiYXNlX2h6X3U2NCBcdTAwM2VcdTAwM2UgMzIpIHtcbiYjNDM7XHRcdGJhc2VfaHpfdTY0IFx1MDAzZVx1MDAzZT0gMTtcbiBcdFx0c2hpZnQtLTtcbiBcdH1cbiBcbi1cdHRwczMyID0gKHVpbnQzMl90KXRwczY0O1xuLVx0d2hpbGUgKHRwczMyIFx1MDAzYz0gc2NhbGVkNjQgfHwgc2NhbGVkNjQgXHUwMDI2IDB4ZmZmZmZmZmYwMDAwMDAwMFVMTCkge1xuLVx0XHRpZiAoc2NhbGVkNjQgXHUwMDI2IDB4ZmZmZmZmZmYwMDAwMDAwMFVMTCB8fCB0cHMzMiBcdTAwMjYgMHg4MDAwMDAwMClcbi1cdFx0XHRzY2FsZWQ2NCBcdTAwM2VcdTAwM2U9IDE7XG4mIzQzO1x0LyogTm93IHRoZSBzaGlmdGVkIGJhc2VfaHogZml0cyBpbiAzMiBiaXRzLiAqL1xuJiM0MztcdGJhc2UzMiA9ICh1MzIpYmFzZV9oel91NjQ7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTmV4dCwgc2hpZnQgc2NhbGVkX2h6IHJpZ2h0IHVudGlsIGl0IGZpdHMgaW4gMzIgYml0cywgYW5kIGVuc3VyZVxuJiM0MztcdCAqIHRoYXQgdGhlIHNoaWZ0ZWQgYmFzZV9oeiBpcyBzdHJpY3RseSBsYXJnZXIgKHNvIHRoYXQgdGhlIHJlc3VsdCBvZiB0aGVcbiYjNDM7XHQgKiBmaW5hbCBkaXZpc2lvbiBhbHNvIGZpdHMgaW4gMzIgYml0cykuXG4mIzQzO1x0ICovXG4mIzQzO1x0d2hpbGUgKGJhc2UzMiBcdTAwM2M9IHNjYWxlZF9oel91NjQgfHwgc2NhbGVkX2h6X3U2NCBcdTAwM2VcdTAwM2UgMzIpIHtcbiYjNDM7XHRcdGlmIChzY2FsZWRfaHpfdTY0IFx1MDAzZVx1MDAzZSAzMiB8fCBiYXNlMzIgXHUwMDI2IEJJVCgzMSkpXG4mIzQzO1x0XHRcdHNjYWxlZF9oel91NjQgXHUwMDNlXHUwMDNlPSAxO1xuIFx0XHRlbHNlXG4tXHRcdFx0dHBzMzIgXHUwMDNjXHUwMDNjPSAxO1xuJiM0MztcdFx0XHRiYXNlMzIgXHUwMDNjXHUwMDNjPSAxO1xuIFx0XHRzaGlmdCYjNDM7JiM0Mzs7XG4gXHR9XG4gXG4gXHQqcHNoaWZ0ID0gc2hpZnQ7XG4tXHQqcG11bHRpcGxpZXIgPSBkaXZfZnJhYyhzY2FsZWQ2NCwgdHBzMzIpO1xuJiM0MztcdCpwbXVsdGlwbGllciA9IGRpdl9mcmFjKHNjYWxlZF9oel91NjQsIGJhc2UzMik7XG4gfVxuIFxuICNpZmRlZiBDT05GSUdfWDg2XzY0XG5AQCAtMTA2MSwxMSAmIzQzOzEwNzksMTUgQEAgc3RhdGljIGludCBrdm1fc2V0X3RzY19raHooc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdXNlcl90c2Nfa2h6KVxuIFxuIHN0YXRpYyB1NjQgY29tcHV0ZV9ndWVzdF90c2Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzNjQga2VybmVsX25zKVxuIHtcbi1cdHU2NCB0c2MgPSBwdmNsb2NrX3NjYWxlX2RlbHRhKGtlcm5lbF9ucy12Y3B1LVx1MDAzZWFyY2gudGhpc190c2NfbnNlYyxcbi1cdFx0XHRcdCAgICAgIHZjcHUtXHUwMDNlYXJjaC52aXJ0dWFsX3RzY19tdWx0LFxuLVx0XHRcdFx0ICAgICAgdmNwdS1cdTAwM2VhcmNoLnZpcnR1YWxfdHNjX3NoaWZ0KTtcbi1cdHRzYyAmIzQzOz0gdmNwdS1cdTAwM2VhcmNoLnRoaXNfdHNjX3dyaXRlO1xuLVx0cmV0dXJuIHRzYztcbiYjNDM7XHRzNjQgZGVsdGFfbnMgPSBrZXJuZWxfbnMgLSB2Y3B1LVx1MDAzZWFyY2gudGhpc190c2NfbnNlYztcbiYjNDM7XHR1NjQgdHNjO1xuJiM0MztcbiYjNDM7XHQvKiBIYW5kbGUgbmVnYXRpdmUgZGVsdGFzIGdyYWNlZnVsbHkgKG1hc3RlciBjbG9jayByZWYgbWF5IGJlIGVhcmxpZXIpICovXG4mIzQzO1x0dHNjID0gcHZjbG9ja19zY2FsZV9kZWx0YShhYnMoZGVsdGFfbnMpLFxuJiM0MztcdFx0XHRcdCAgdmNwdS1cdTAwM2VhcmNoLnZpcnR1YWxfdHNjX211bHQsXG4mIzQzO1x0XHRcdFx0ICB2Y3B1LVx1MDAzZWFyY2gudmlydHVhbF90c2Nfc2hpZnQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdmNwdS1cdTAwM2VhcmNoLnRoaXNfdHNjX3dyaXRlICYjNDM7IChkZWx0YV9ucyBcdTAwM2U9IDAgPyB0c2MgOiAtdHNjKTtcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19YODZfNjRcbkBAIC0xMTMxLDExICYjNDM7MTE1MywxMiBAQCB1NjQga3ZtX3NjYWxlX3RzYyh1NjQgdHNjLCB1NjQgcmF0aW8pXG4gXHRyZXR1cm4gX3RzYztcbiB9XG4gXG4tdTY0IGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdGFyZ2V0X3RzYylcbiYjNDM7dTY0IGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgaG9zdF90c2MsXG4mIzQzO1x0XHRcdCAgICAgIHU2NCB0YXJnZXRfdHNjKVxuIHtcbiBcdHU2NCB0c2M7XG4gXG4tXHR0c2MgPSBrdm1fc2NhbGVfdHNjKHJkdHNjKCksIHZjcHUtXHUwMDNlYXJjaC5sMV90c2Nfc2NhbGluZ19yYXRpbyk7XG4mIzQzO1x0dHNjID0ga3ZtX3NjYWxlX3RzYyhob3N0X3RzYywgdmNwdS1cdTAwM2VhcmNoLmwxX3RzY19zY2FsaW5nX3JhdGlvKTtcbiBcbiBcdHJldHVybiB0YXJnZXRfdHNjIC0gdHNjO1xuIH1cbkBAIC0xMjU0LDYgJiM0MzsxMjc3LDcgQEAgc3RhdGljIHZvaWQgX19rdm1fc3luY2hyb25pemVfdHNjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG9mZnNldCwgdTY0IHRzYyxcbiBcdGt2bS1cdTAwM2VhcmNoLmxhc3RfdHNjX3dyaXRlID0gdHNjO1xuIFx0a3ZtLVx1MDAzZWFyY2gubGFzdF90c2Nfa2h6ID0gdmNwdS1cdTAwM2VhcmNoLnZpcnR1YWxfdHNjX2toejtcbiBcdGt2bS1cdTAwM2VhcmNoLmxhc3RfdHNjX29mZnNldCA9IG9mZnNldDtcbiYjNDM7XHRrdm0tXHUwMDNlYXJjaC5sYXN0X3RzY19zY2FsaW5nX3JhdGlvID0gdmNwdS1cdTAwM2VhcmNoLmwxX3RzY19zY2FsaW5nX3JhdGlvO1xuIFxuIFx0dmNwdS1cdTAwM2VhcmNoLmxhc3RfZ3Vlc3RfdHNjID0gdHNjO1xuIFxuQEAgLTEyOTYsNyAmIzQzOzEzMjAsNyBAQCB2b2lkIGt2bV9zeW5jaHJvbml6ZV90c2Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKnVzZXJfdmFsdWUpXG4gXHRib29sIHN5bmNocm9uaXppbmcgPSBmYWxzZTtcbiBcbiBcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZrdm0tXHUwMDNlYXJjaC50c2Nfd3JpdGVfbG9jaywgZmxhZ3MpO1xuLVx0b2Zmc2V0ID0ga3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldCh2Y3B1LCBkYXRhKTtcbiYjNDM7XHRvZmZzZXQgPSBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0KHZjcHUsIHJkdHNjKCksIGRhdGEpO1xuIFx0bnMgPSBnZXRfa3ZtY2xvY2tfYmFzZV9ucygpO1xuIFx0ZWxhcHNlZCA9IG5zIC0ga3ZtLVx1MDAzZWFyY2gubGFzdF90c2NfbnNlYztcbiBcbkBAIC0xMzQ1LDcgJiM0MzsxMzY5LDcgQEAgdm9pZCBrdm1fc3luY2hyb25pemVfdHNjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0ICp1c2VyX3ZhbHVlKVxuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdHU2NCBkZWx0YSA9IG5zZWNfdG9fY3ljbGVzKHZjcHUsIGVsYXBzZWQpO1xuIFx0XHRcdGRhdGEgJiM0Mzs9IGRlbHRhO1xuLVx0XHRcdG9mZnNldCA9IGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXQodmNwdSwgZGF0YSk7XG4mIzQzO1x0XHRcdG9mZnNldCA9IGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXQodmNwdSwgcmR0c2MoKSwgZGF0YSk7XG4gXHRcdH1cbiBcdFx0bWF0Y2hlZCA9IHRydWU7XG4gXHR9XG5AQCAtMTU2Niw2ICYjNDM7MTU5MCw4IEBAIHN0YXRpYyBib29sIGt2bV9nZXRfd2FsbHRpbWVfYW5kX2Nsb2NrcmVhZChzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXG4gICpcbiAgKi9cbiBcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X2NwdV90c2Nfa2h6KHZvaWQpO1xuJiM0MztcbiBzdGF0aWMgdm9pZCBwdmNsb2NrX3VwZGF0ZV92bV9ndG9kX2NvcHkoc3RydWN0IGt2bSAqa3ZtKVxuIHtcbiAjaWZkZWYgQ09ORklHX1g4Nl82NFxuQEAgLTE1ODksOSAmIzQzOzE2MTUsMzAgQEAgc3RhdGljIHZvaWQgcHZjbG9ja191cGRhdGVfdm1fZ3RvZF9jb3B5KHN0cnVjdCBrdm0gKmt2bSlcbiBcdFx0XHRcdFx1MDAyNlx1MDAyNiAha2EtXHUwMDNlYmFja3dhcmRzX3RzY19vYnNlcnZlZFxuIFx0XHRcdFx0XHUwMDI2XHUwMDI2ICFrYS1cdTAwM2Vib290X3ZjcHVfcnVuc19vbGRfa3ZtY2xvY2s7XG4gXG4tXHRpZiAoa2EtXHUwMDNldXNlX21hc3Rlcl9jbG9jaylcbiYjNDM7XHRpZiAoa2EtXHUwMDNldXNlX21hc3Rlcl9jbG9jaykge1xuJiM0MztcdFx0dTY0IHRzY19oejtcbiYjNDM7XG4gXHRcdGF0b21pY19zZXQoXHUwMDI2a3ZtX2d1ZXN0X2hhc19tYXN0ZXJfY2xvY2ssIDEpO1xuIFxuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIENvcHkgdGhlIHNjYWxpbmcgcmF0aW8gYW5kIHByZWNvbXB1dGUgdGhlIG11bC9zaGlmdCBmb3JcbiYjNDM7XHRcdCAqIGNvbnZlcnRpbmcgZ3Vlc3QgVFNDIHRvIG5hbm9zZWNvbmRzLiBUaGVzZSBhcmUgdXNlZCBieVxuJiM0MztcdFx0ICogZ2V0X2t2bWNsb2NrKCkgdG8gY29tcHV0ZSBrdm1jbG9jayBmcm9tIHRoZSBob3N0IFRTQ1xuJiM0MztcdFx0ICogd2l0aG91dCBuZWVkaW5nIGEgdkNQVSByZWZlcmVuY2UuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGthLVx1MDAzZW1hc3Rlcl90c2Nfc2NhbGluZ19yYXRpbyA9IGthLVx1MDAzZWxhc3RfdHNjX3NjYWxpbmdfcmF0aW87XG4mIzQzO1x0XHR0c2NfaHogPSAodTY0KWdldF9jcHVfdHNjX2toeigpICogSFpfUEVSX0tIWjtcbiYjNDM7XHRcdGlmICh0c2NfaHogXHUwMDI2XHUwMDI2IGt2bV9jYXBzLmhhc190c2NfY29udHJvbClcbiYjNDM7XHRcdFx0dHNjX2h6ID0ga3ZtX3NjYWxlX3RzYyh0c2NfaHosXG4mIzQzO1x0XHRcdFx0XHQgICAgICAga2EtXHUwMDNlbWFzdGVyX3RzY19zY2FsaW5nX3JhdGlvKTtcbiYjNDM7XHRcdGlmICh0c2NfaHopXG4mIzQzO1x0XHRcdGt2bV9nZXRfdGltZV9zY2FsZShOU0VDX1BFUl9TRUMsIHRzY19oeixcbiYjNDM7XHRcdFx0XHRcdCAgIFx1MDAyNmthLVx1MDAzZW1hc3Rlcl90c2Nfc2hpZnQsXG4mIzQzO1x0XHRcdFx0XHQgICBcdTAwMjZrYS1cdTAwM2VtYXN0ZXJfdHNjX211bCk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdGthLVx1MDAzZXVzZV9tYXN0ZXJfY2xvY2sgPSBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0dmNsb2NrX21vZGUgPSBwdmNsb2NrX2d0b2RfZGF0YS5jbG9jay52Y2xvY2tfbW9kZTtcbiBcdHRyYWNlX2t2bV91cGRhdGVfbWFzdGVyX2Nsb2NrKGthLVx1MDAzZXVzZV9tYXN0ZXJfY2xvY2ssIHZjbG9ja19tb2RlLFxuIFx0XHRcdFx0XHR2Y3B1c19tYXRjaGVkKTtcbkBAIC0xNjU4LDM5ICYjNDM7MTcwNSw0OSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfY3B1X3RzY19raHoodm9pZClcbiB9XG4gXG4gLyogQ2FsbGVkIHdpdGhpbiByZWFkX3NlcWNvdW50X2JlZ2luL3JldHJ5IGZvciBrdm0tXHUwMDNlcHZjbG9ja19zYy4gICovXG4tc3RhdGljIHZvaWQgX19nZXRfa3ZtY2xvY2soc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2Nsb2NrX2RhdGEgKmRhdGEpXG4mIzQzO3N0YXRpYyBib29sIF9fZ2V0X2t2bWNsb2NrX21hc3Rlcl9jbG9jayhzdHJ1Y3Qga3ZtICprdm0sXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3Qga3ZtX2Nsb2NrX2RhdGEgKmRhdGEpXG4ge1xuJiM0MzsjaWZkZWYgQ09ORklHX1g4Nl82NFxuIFx0c3RydWN0IGt2bV9hcmNoICprYSA9IFx1MDAyNmt2bS1cdTAwM2VhcmNoO1xuIFx0c3RydWN0IHB2Y2xvY2tfdmNwdV90aW1lX2luZm8gaHZfY2xvY2s7XG4mIzQzO1x0c3RydWN0IHRpbWVzcGVjNjQgdHM7XG4gXG4tXHQvKiBib3RoIF9fdGhpc19jcHVfcmVhZCgpIGFuZCByZHRzYygpIHNob3VsZCBiZSBvbiB0aGUgc2FtZSBjcHUgKi9cbi1cdGdldF9jcHUoKTtcbiYjNDM7XHRpZiAoIWthLVx1MDAzZXVzZV9tYXN0ZXJfY2xvY2spXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRkYXRhLVx1MDAzZWZsYWdzID0gMDtcbi1cdGlmIChrYS1cdTAwM2V1c2VfbWFzdGVyX2Nsb2NrIFx1MDAyNlx1MDAyNlxuLVx0ICAgIChzdGF0aWNfY3B1X2hhcyhYODZfRkVBVFVSRV9DT05TVEFOVF9UU0MpIHx8IF9fdGhpc19jcHVfcmVhZChjcHVfdHNjX2toeikpKSB7XG4tI2lmZGVmIENPTkZJR19YODZfNjRcbi1cdFx0c3RydWN0IHRpbWVzcGVjNjQgdHM7XG4mIzQzO1x0aWYgKCFrdm1fZ2V0X3dhbGx0aW1lX2FuZF9jbG9ja3JlYWQoXHUwMDI2dHMsIFx1MDAyNmRhdGEtXHUwMDNlaG9zdF90c2MpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0XHRpZiAoa3ZtX2dldF93YWxsdGltZV9hbmRfY2xvY2tyZWFkKFx1MDAyNnRzLCBcdTAwMjZkYXRhLVx1MDAzZWhvc3RfdHNjKSkge1xuLVx0XHRcdGRhdGEtXHUwMDNlcmVhbHRpbWUgPSB0cy50dl9uc2VjICYjNDM7IE5TRUNfUEVSX1NFQyAqIHRzLnR2X3NlYztcbi1cdFx0XHRkYXRhLVx1MDAzZWZsYWdzIHw9IEtWTV9DTE9DS19SRUFMVElNRSB8IEtWTV9DTE9DS19IT1NUX1RTQztcbi1cdFx0fSBlbHNlXG4tI2VuZGlmXG4tXHRcdGRhdGEtXHUwMDNlaG9zdF90c2MgPSByZHRzYygpO1xuLVxuLVx0XHRkYXRhLVx1MDAzZWZsYWdzIHw9IEtWTV9DTE9DS19UU0NfU1RBQkxFO1xuLVx0XHRodl9jbG9jay50c2NfdGltZXN0YW1wID0ga2EtXHUwMDNlbWFzdGVyX2N5Y2xlX25vdztcbi1cdFx0aHZfY2xvY2suc3lzdGVtX3RpbWUgPSBrYS1cdTAwM2VtYXN0ZXJfa2VybmVsX25zICYjNDM7IGthLVx1MDAzZWt2bWNsb2NrX29mZnNldDtcbi1cdFx0a3ZtX2dldF90aW1lX3NjYWxlKE5TRUNfUEVSX1NFQywgZ2V0X2NwdV90c2Nfa2h6KCkgKiAxMDAwTEwsXG4tXHRcdFx0XHQgICBcdTAwMjZodl9jbG9jay50c2Nfc2hpZnQsXG4tXHRcdFx0XHQgICBcdTAwMjZodl9jbG9jay50c2NfdG9fc3lzdGVtX211bCk7XG4tXHRcdGRhdGEtXHUwMDNlY2xvY2sgPSBfX3B2Y2xvY2tfcmVhZF9jeWNsZXMoXHUwMDI2aHZfY2xvY2ssIGRhdGEtXHUwMDNlaG9zdF90c2MpO1xuJiM0MztcdGRhdGEtXHUwMDNlcmVhbHRpbWUgPSB0cy50dl9uc2VjICYjNDM7IE5TRUNfUEVSX1NFQyAqIHRzLnR2X3NlYztcbiYjNDM7XHRkYXRhLVx1MDAzZWZsYWdzIHw9IEtWTV9DTE9DS19SRUFMVElNRSB8IEtWTV9DTE9DS19IT1NUX1RTQyB8XG4mIzQzO1x0XHQgICAgICAgS1ZNX0NMT0NLX1RTQ19TVEFCTEU7XG4mIzQzO1xuJiM0MztcdGh2X2Nsb2NrLnRzY190aW1lc3RhbXAgPSBrYS1cdTAwM2VtYXN0ZXJfY3ljbGVfbm93O1xuJiM0MztcdGh2X2Nsb2NrLnN5c3RlbV90aW1lID0ga2EtXHUwMDNlbWFzdGVyX2tlcm5lbF9ucyAmIzQzOyBrYS1cdTAwM2Vrdm1jbG9ja19vZmZzZXQ7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVXNlIHRoZSBwcmVjb21wdXRlZCBndWVzdC1UU0MtYmFzZWQgbXVsL3NoaWZ0IHNvIHRoYXQgdGhlIGt2bWNsb2NrXG4mIzQzO1x0ICogdmFsdWUgbWF0Y2hlcyB3aGF0IHRoZSBndWVzdCBjb21wdXRlcyBmcm9tIGl0cyBvd24gVFNDLlxuJiM0MztcdCAqL1xuJiM0MztcdGh2X2Nsb2NrLnRzY19zaGlmdCA9IGthLVx1MDAzZW1hc3Rlcl90c2Nfc2hpZnQ7XG4mIzQzO1x0aHZfY2xvY2sudHNjX3RvX3N5c3RlbV9tdWwgPSBrYS1cdTAwM2VtYXN0ZXJfdHNjX211bDtcbiYjNDM7XG4mIzQzO1x0aWYgKGt2bV9jYXBzLmhhc190c2NfY29udHJvbCkge1xuJiM0MztcdFx0dTY0IHRzY19kZWx0YSA9IGRhdGEtXHUwMDNlaG9zdF90c2MgLSBrYS1cdTAwM2VtYXN0ZXJfY3ljbGVfbm93O1xuJiM0MztcbiYjNDM7XHRcdHRzY19kZWx0YSA9IGt2bV9zY2FsZV90c2ModHNjX2RlbHRhLCBrYS1cdTAwM2VtYXN0ZXJfdHNjX3NjYWxpbmdfcmF0aW8pO1xuJiM0MztcdFx0ZGF0YS1cdTAwM2VjbG9jayA9IGh2X2Nsb2NrLnN5c3RlbV90aW1lICYjNDM7XG4mIzQzO1x0XHRcdCAgICAgIHB2Y2xvY2tfc2NhbGVfZGVsdGEodHNjX2RlbHRhLFxuJiM0MztcdFx0XHRcdFx0XHQgIGh2X2Nsb2NrLnRzY190b19zeXN0ZW1fbXVsLFxuJiM0MztcdFx0XHRcdFx0XHQgIGh2X2Nsb2NrLnRzY19zaGlmdCk7XG4gXHR9IGVsc2Uge1xuLVx0XHRkYXRhLVx1MDAzZWNsb2NrID0gZ2V0X2t2bWNsb2NrX2Jhc2VfbnMoKSAmIzQzOyBrYS1cdTAwM2Vrdm1jbG9ja19vZmZzZXQ7XG4mIzQzO1x0XHRkYXRhLVx1MDAzZWNsb2NrID0gX19wdmNsb2NrX3JlYWRfY3ljbGVzKFx1MDAyNmh2X2Nsb2NrLCBkYXRhLVx1MDAzZWhvc3RfdHNjKTtcbiBcdH1cbi1cbi1cdHB1dF9jcHUoKTtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7I2Vsc2VcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzOyNlbmRpZlxuIH1cbiBcbiBzdGF0aWMgdm9pZCBnZXRfa3ZtY2xvY2soc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2Nsb2NrX2RhdGEgKmRhdGEpXG5AQCAtMTY5OSw4ICYjNDM7MTc1NiwxMSBAQCBzdGF0aWMgdm9pZCBnZXRfa3ZtY2xvY2soc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2Nsb2NrX2RhdGEgKmRhdGEpXG4gXHR1bnNpZ25lZCBzZXE7XG4gXG4gXHRkbyB7XG4mIzQzO1x0XHRkYXRhLVx1MDAzZWZsYWdzID0gMDtcbiYjNDM7XG4gXHRcdHNlcSA9IHJlYWRfc2VxY291bnRfYmVnaW4oXHUwMDI2a2EtXHUwMDNlcHZjbG9ja19zYyk7XG4tXHRcdF9fZ2V0X2t2bWNsb2NrKGt2bSwgZGF0YSk7XG4mIzQzO1x0XHRpZiAoIV9fZ2V0X2t2bWNsb2NrX21hc3Rlcl9jbG9jayhrdm0sIGRhdGEpKVxuJiM0MztcdFx0XHRkYXRhLVx1MDAzZWNsb2NrID0gZ2V0X2t2bWNsb2NrX2Jhc2VfbnMoKSAmIzQzOyBrYS1cdTAwM2Vrdm1jbG9ja19vZmZzZXQ7XG4gXHR9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KFx1MDAyNmthLVx1MDAzZXB2Y2xvY2tfc2MsIHNlcSkpO1xuIH1cbiBcbkBAIC0xNzYyLDM2ICYjNDM7MTgyMiw0NSBAQCBzdGF0aWMgdm9pZCBrdm1fc2V0dXBfZ3Vlc3RfcHZjbG9jayhzdHJ1Y3QgcHZjbG9ja192Y3B1X3RpbWVfaW5mbyAqcmVmX2h2X2Nsb2NrLFxuIFxuIGludCBrdm1fZ3Vlc3RfdGltZV91cGRhdGUoc3RydWN0IGt2bV92Y3B1ICp2KVxuIHtcbiYjNDM7XHR1NjQgdGd0X3RzY19oeiwgdHNjX3RpbWVzdGFtcCwgaG9zdF90c2MsIG1hc3Rlcl90c2MsIG1hc3Rlcl9ucztcbiYjNDM7XHRzdHJ1Y3Qga3ZtX2FyY2ggKmthIF9fbWF5YmVfdW51c2VkID0gXHUwMDI2di1cdTAwM2Vrdm0tXHUwMDNlYXJjaDtcbiBcdHN0cnVjdCBwdmNsb2NrX3ZjcHVfdGltZV9pbmZvIGh2X2Nsb2NrID0ge307XG4tXHR1bnNpZ25lZCBsb25nIGZsYWdzLCB0Z3RfdHNjX2toejtcbi1cdHVuc2lnbmVkIHNlcTtcbiBcdHN0cnVjdCBrdm1fdmNwdV9hcmNoICp2Y3B1ID0gXHUwMDI2di1cdTAwM2VhcmNoO1xuLVx0c3RydWN0IGt2bV9hcmNoICprYSA9IFx1MDAyNnYtXHUwMDNla3ZtLVx1MDAzZWFyY2g7XG4gXHRzNjQga2VybmVsX25zO1xuLVx0dTY0IHRzY190aW1lc3RhbXAsIGhvc3RfdHNjO1xuLVx0Ym9vbCB1c2VfbWFzdGVyX2Nsb2NrO1xuLVxuLVx0a2VybmVsX25zID0gMDtcbi1cdGhvc3RfdHNjID0gMDtcbiBcbiBcdC8qXG4gXHQgKiBJZiB0aGUgaG9zdCB1c2VzIFRTQyBjbG9jaywgdGhlbiBwYXNzdGhyb3VnaCBUU0MgYXMgc3RhYmxlXG4gXHQgKiB0byB0aGUgZ3Vlc3QuXG4gXHQgKi9cbiYjNDM7I2lmZGVmIENPTkZJR19YODZfNjRcbiYjNDM7XHRib29sIHVzZV9tYXN0ZXJfY2xvY2s7XG4mIzQzO1x0dW5zaWduZWQgaW50IHNlcTtcbiYjNDM7XG4gXHRkbyB7XG4gXHRcdHNlcSA9IHJlYWRfc2VxY291bnRfYmVnaW4oXHUwMDI2a2EtXHUwMDNlcHZjbG9ja19zYyk7XG4gXHRcdHVzZV9tYXN0ZXJfY2xvY2sgPSBrYS1cdTAwM2V1c2VfbWFzdGVyX2Nsb2NrO1xuLVx0XHRpZiAodXNlX21hc3Rlcl9jbG9jaykge1xuLVx0XHRcdGhvc3RfdHNjID0ga2EtXHUwMDNlbWFzdGVyX2N5Y2xlX25vdztcbi1cdFx0XHRrZXJuZWxfbnMgPSBrYS1cdTAwM2VtYXN0ZXJfa2VybmVsX25zO1xuJiM0MztcdFx0aWYgKCF1c2VfbWFzdGVyX2Nsb2NrKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWt2bV9nZXRfdGltZV9hbmRfY2xvY2tyZWFkKFx1MDAyNmtlcm5lbF9ucywgXHUwMDI2aG9zdF90c2MpKSB7XG4mIzQzO1x0XHRcdHVzZV9tYXN0ZXJfY2xvY2sgPSBmYWxzZTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4gXHRcdH1cbi1cdH0gd2hpbGUgKHJlYWRfc2VxY291bnRfcmV0cnkoXHUwMDI2a2EtXHUwMDNlcHZjbG9ja19zYywgc2VxKSk7XG4gXG4tXHQvKiBLZWVwIGlycSBkaXNhYmxlZCB0byBwcmV2ZW50IGNoYW5nZXMgdG8gdGhlIGNsb2NrICovXG4tXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4tXHR0Z3RfdHNjX2toeiA9IGdldF9jcHVfdHNjX2toeigpO1xuLVx0aWYgKHVubGlrZWx5KHRndF90c2Nfa2h6ID09IDApKSB7XG4tXHRcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbiYjNDM7XHRcdG1hc3Rlcl90c2MgPSBrYS1cdTAwM2VtYXN0ZXJfY3ljbGVfbm93O1xuJiM0MztcdFx0bWFzdGVyX25zID0ga2EtXHUwMDNlbWFzdGVyX2tlcm5lbF9ucztcbiYjNDM7XHR9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KFx1MDAyNmthLVx1MDAzZXB2Y2xvY2tfc2MsIHNlcSkpO1xuJiM0MzsjZWxzZVxuJiM0MztcdGNvbnN0IGJvb2wgdXNlX21hc3Rlcl9jbG9jayA9IGZhbHNlO1xuJiM0MzsjZW5kaWZcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEVuc3VyZSByZWFkaW5nIHRoZSBUU0MmIzQzO2ZyZXF1ZW5jeSBwYWlyIGlzIGRvbmUgb24gdGhlIHNhbWUgQ1BVLiAgV2hlblxuJiM0MztcdCAqIE5PVCB1c2luZyB0aGUgbWFzdGVyIGNsb2NrLCB0aGUgVFNDIGZyZXF1ZW5jeSBtYXkgdmFyeSBiZXR3ZWVuIENQVXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0cHJlZW1wdF9kaXNhYmxlKCk7XG4mIzQzO1x0dGd0X3RzY19oeiA9ICh1NjQpZ2V0X2NwdV90c2Nfa2h6KCkgKiBIWl9QRVJfS0haO1xuJiM0MztcdGlmICh1bmxpa2VseSh0Z3RfdHNjX2h6ID09IDApKSB7XG4mIzQzO1x0XHRwcmVlbXB0X2VuYWJsZSgpO1xuIFx0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfQ0xPQ0tfVVBEQVRFLCB2KTtcbiBcdFx0cmV0dXJuIDE7XG4gXHR9XG5AQCAtMTgyMCwyOCAmIzQzOzE4ODksNDMgQEAgaW50IGt2bV9ndWVzdF90aW1lX3VwZGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnYpXG4gXHRcdH1cbiBcdH1cbiBcbi1cdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJlZnJlc2ggTDEmIzM5O3MgbGFzdCBcJiMzNDtvYnNlcnZlZFwmIzM0OyBUU0MgdG8gbWF0Y2ggdGhlIFBWIGNsb2NrJiMzOTtzIHRpbWVzdGFtcCxcbiYjNDM7XHQgKiBlLmcuIHNvIHRoYXQgdGhlIGd1ZXN0IGNhbiYjMzk7dCBzZWUgYSBUU0MgdGhhdCYjMzk7cyBiZWhpbmQgdGhlIHJlZmVyZW5jZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHR2Y3B1LVx1MDAzZWxhc3RfZ3Vlc3RfdHNjID0gdHNjX3RpbWVzdGFtcDtcbiYjNDM7XG4mIzQzO1x0cHJlZW1wdF9lbmFibGUoKTtcbiBcbiBcdC8qIFdpdGggYWxsIHRoZSBpbmZvIHdlIGdvdCwgZmlsbCBpbiB0aGUgdmFsdWVzICovXG4gXG4gXHRpZiAoa3ZtX2NhcHMuaGFzX3RzY19jb250cm9sKSB7XG4tXHRcdHRndF90c2Nfa2h6ID0ga3ZtX3NjYWxlX3RzYyh0Z3RfdHNjX2toeixcbiYjNDM7XHRcdHRndF90c2NfaHogPSBrdm1fc2NhbGVfdHNjKHRndF90c2NfaHosXG4gXHRcdFx0XHRcdCAgICB2LVx1MDAzZWFyY2gubDFfdHNjX3NjYWxpbmdfcmF0aW8pO1xuLVx0XHR0Z3RfdHNjX2toeiA9IHRndF90c2Nfa2h6ID8gOiAxO1xuJiM0MztcdFx0dGd0X3RzY19oeiA9IHRndF90c2NfaHogPyA6IDE7XG4gXHR9XG4gXG4tXHRpZiAodW5saWtlbHkodmNwdS1cdTAwM2Vod190c2Nfa2h6ICE9IHRndF90c2Nfa2h6KSkge1xuLVx0XHRrdm1fZ2V0X3RpbWVfc2NhbGUoTlNFQ19QRVJfU0VDLCB0Z3RfdHNjX2toeiAqIDEwMDBMTCxcbiYjNDM7XHRpZiAodW5saWtlbHkodmNwdS1cdTAwM2Vod190c2NfaHogIT0gdGd0X3RzY19oeikpIHtcbiYjNDM7XHRcdGt2bV9nZXRfdGltZV9zY2FsZShOU0VDX1BFUl9TRUMsIHRndF90c2NfaHosXG4gXHRcdFx0XHQgICBcdTAwMjZ2Y3B1LVx1MDAzZXB2Y2xvY2tfdHNjX3NoaWZ0LFxuIFx0XHRcdFx0ICAgXHUwMDI2dmNwdS1cdTAwM2VwdmNsb2NrX3RzY19tdWwpO1xuLVx0XHR2Y3B1LVx1MDAzZWh3X3RzY19raHogPSB0Z3RfdHNjX2toejtcbiYjNDM7XHRcdHZjcHUtXHUwMDNlaHdfdHNjX2h6ID0gdGd0X3RzY19oejtcbiBcdH1cbiBcbiBcdGh2X2Nsb2NrLnRzY19zaGlmdCA9IHZjcHUtXHUwMDNlcHZjbG9ja190c2Nfc2hpZnQ7XG4gXHRodl9jbG9jay50c2NfdG9fc3lzdGVtX211bCA9IHZjcHUtXHUwMDNlcHZjbG9ja190c2NfbXVsO1xuLVx0aHZfY2xvY2sudHNjX3RpbWVzdGFtcCA9IHRzY190aW1lc3RhbXA7XG4tXHRodl9jbG9jay5zeXN0ZW1fdGltZSA9IGtlcm5lbF9ucyAmIzQzOyB2LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmt2bWNsb2NrX29mZnNldDtcbi1cdHZjcHUtXHUwMDNlbGFzdF9ndWVzdF90c2MgPSB0c2NfdGltZXN0YW1wO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSWYgdGhlIG1hc3RlciBjbG9jayBpcyBOT1QgaW4gdXNlLCB0aGUgcmVmZXJlbmNlIHRpbWUgcGxhY2VkIGluIHRoZVxuJiM0MztcdCAqIGh2X2Nsb2NrIGlzIFwmIzM0O25vd1wmIzM0Oy4gIElmIG1hc3RlciBjbG9jayBpcyBpbiB1c2UsIHRoZSByZWZlcmVuY2UgdGltZSBpc1xuJiM0MztcdCAqIHRoZSBtYXN0ZXIgY2xvY2smIzM5O3Mgc25hcHNob3QgZnJvbSBzb21lIHRpbWUgaW4gdGhlIHBhc3QsIG5vdCBcJiMzNDtub3dcJiMzNDsuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHVzZV9tYXN0ZXJfY2xvY2spIHtcbiYjNDM7XHRcdGh2X2Nsb2NrLnRzY190aW1lc3RhbXAgPSBrdm1fcmVhZF9sMV90c2ModiwgbWFzdGVyX3RzYyk7XG4mIzQzO1x0XHRodl9jbG9jay5zeXN0ZW1fdGltZSA9IG1hc3Rlcl9ucyAmIzQzOyB2LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmt2bWNsb2NrX29mZnNldDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0aHZfY2xvY2sudHNjX3RpbWVzdGFtcCA9IHRzY190aW1lc3RhbXA7XG4mIzQzO1x0XHRodl9jbG9jay5zeXN0ZW1fdGltZSA9IGtlcm5lbF9ucyAmIzQzOyB2LVx1MDAzZWt2bS1cdTAwM2VhcmNoLmt2bWNsb2NrX29mZnNldDtcbiYjNDM7XHR9XG4gXG4gXHQvKiBJZiB0aGUgaG9zdCB1c2VzIFRTQyBjbG9ja3NvdXJjZSwgdGhlbiBpdCBpcyBzdGFibGUgKi9cbiBcdGh2X2Nsb2NrLmZsYWdzID0gMDtcbkBAIC0xOTAzLDYzICYjNDM7MTk4NywyMiBAQCBpbnQga3ZtX2d1ZXN0X3RpbWVfdXBkYXRlKHN0cnVjdCBrdm1fdmNwdSAqdilcbiAgKiB3YWxsY2xvY2sgYW5kIGt2bWNsb2NrIHRpbWVzLCBhbmQgc3VidHJhY3Rpbmcgb25lIGZyb20gdGhlIG90aGVyLlxuICAqXG4gICogRmFsbCBiYWNrIHRvIHVzaW5nIHRoZWlyIHZhbHVlcyBhdCBzbGlnaHRseSBkaWZmZXJlbnQgbW9tZW50cyBieVxuLSAqIGNhbGxpbmcga3RpbWVfZ2V0X3JlYWxfbnMoKSBhbmQgZ2V0X2t2bWNsb2NrX25zKCkgc2VwYXJhdGVseS5cbiYjNDM7ICogY2FsbGluZyBrdGltZV9nZXRfcmVhbF9ucygpIGFuZCBnZXRfa3ZtY2xvY2soKSBzZXBhcmF0ZWx5LlxuICAqL1xuIHVpbnQ2NF90IGt2bV9nZXRfd2FsbF9jbG9ja19lcG9jaChzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuLSNpZmRlZiBDT05GSUdfWDg2XzY0XG4tXHRzdHJ1Y3QgcHZjbG9ja192Y3B1X3RpbWVfaW5mbyBodl9jbG9jaztcbi1cdHN0cnVjdCBrdm1fYXJjaCAqa2EgPSBcdTAwMjZrdm0tXHUwMDNlYXJjaDtcbi1cdHVuc2lnbmVkIGxvbmcgc2VxLCBsb2NhbF90c2Nfa2h6O1xuLVx0c3RydWN0IHRpbWVzcGVjNjQgdHM7XG4tXHR1aW50NjRfdCBob3N0X3RzYztcbi1cbi1cdGRvIHtcbi1cdFx0c2VxID0gcmVhZF9zZXFjb3VudF9iZWdpbihcdTAwMjZrYS1cdTAwM2VwdmNsb2NrX3NjKTtcbi1cbi1cdFx0bG9jYWxfdHNjX2toeiA9IDA7XG4tXHRcdGlmICgha2EtXHUwMDNldXNlX21hc3Rlcl9jbG9jaylcbi1cdFx0XHRicmVhaztcbi1cbi1cdFx0Lypcbi1cdFx0ICogVGhlIFRTQyByZWFkIGFuZCB0aGUgY2FsbCB0byBnZXRfY3B1X3RzY19raHooKSBtdXN0IGhhcHBlblxuLVx0XHQgKiBvbiB0aGUgc2FtZSBDUFUuXG4tXHRcdCAqL1xuLVx0XHRnZXRfY3B1KCk7XG4tXG4tXHRcdGxvY2FsX3RzY19raHogPSBnZXRfY3B1X3RzY19raHooKTtcbi1cbi1cdFx0aWYgKGxvY2FsX3RzY19raHogXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAha3ZtX2dldF93YWxsdGltZV9hbmRfY2xvY2tyZWFkKFx1MDAyNnRzLCBcdTAwMjZob3N0X3RzYykpXG4tXHRcdFx0bG9jYWxfdHNjX2toeiA9IDA7IC8qIEZhbGwgYmFjayB0byBvbGQgbWV0aG9kICovXG4tXG4tXHRcdHB1dF9jcHUoKTtcbi1cbi1cdFx0Lypcbi1cdFx0ICogVGhlc2UgdmFsdWVzIG11c3QgYmUgc25hcHNob3R0ZWQgd2l0aGluIHRoZSBzZXFjb3VudCBsb29wLlxuLVx0XHQgKiBBZnRlciB0aGF0LCBpdCYjMzk7cyBqdXN0IG1hdGhlbWF0aWNzIHdoaWNoIGNhbiBoYXBwZW4gb24gYW55XG4tXHRcdCAqIENQVSBhdCBhbnkgdGltZS5cbi1cdFx0ICovXG4tXHRcdGh2X2Nsb2NrLnRzY190aW1lc3RhbXAgPSBrYS1cdTAwM2VtYXN0ZXJfY3ljbGVfbm93O1xuLVx0XHRodl9jbG9jay5zeXN0ZW1fdGltZSA9IGthLVx1MDAzZW1hc3Rlcl9rZXJuZWxfbnMgJiM0Mzsga2EtXHUwMDNla3ZtY2xvY2tfb2Zmc2V0O1xuJiM0MztcdHN0cnVjdCBrdm1fY2xvY2tfZGF0YSBkYXRhO1xuIFxuLVx0fSB3aGlsZSAocmVhZF9zZXFjb3VudF9yZXRyeShcdTAwMjZrYS1cdTAwM2VwdmNsb2NrX3NjLCBzZXEpKTtcbiYjNDM7XHRnZXRfa3ZtY2xvY2soa3ZtLCBcdTAwMjZkYXRhKTtcbiBcbiBcdC8qXG4tXHQgKiBJZiB0aGUgY29uZGl0aW9ucyB3ZXJlIHJpZ2h0LCBhbmQgb2J0YWluaW5nIHRoZSB3YWxsY2xvY2smIzQzO1RTQyB3YXNcbi1cdCAqIHN1Y2Nlc3NmdWwsIGNhbGN1bGF0ZSB0aGUgS1ZNIGNsb2NrIGF0IHRoZSBjb3JyZXNwb25kaW5nIHRpbWUgYW5kXG4tXHQgKiBzdWJ0cmFjdCBvbmUgZnJvbSB0aGUgb3RoZXIgdG8gZ2V0IHRoZSBndWVzdCYjMzk7cyBlcG9jaCBpbiBuYW5vc2Vjb25kc1xuLVx0ICogc2luY2UgMTk3MC0wMS0wMS5cbiYjNDM7XHQgKiBJZiBnZXRfa3ZtY2xvY2soKSBjYXB0dXJlZCBib3RoIHdhbGxjbG9jayBhbmQga3ZtY2xvY2sgZnJvbSB0aGVcbiYjNDM7XHQgKiBzYW1lIFRTQyByZWFkaW5nLCB1c2UgdGhlbSBmb3IgYSBwcmVjaXNlIGVwb2NoIGNhbGN1bGF0aW9uLlxuIFx0ICovXG4tXHRpZiAobG9jYWxfdHNjX2toeikge1xuLVx0XHRrdm1fZ2V0X3RpbWVfc2NhbGUoTlNFQ19QRVJfU0VDLCBsb2NhbF90c2Nfa2h6ICogTlNFQ19QRVJfVVNFQyxcbi1cdFx0XHRcdCAgIFx1MDAyNmh2X2Nsb2NrLnRzY19zaGlmdCxcbi1cdFx0XHRcdCAgIFx1MDAyNmh2X2Nsb2NrLnRzY190b19zeXN0ZW1fbXVsKTtcbi1cdFx0cmV0dXJuIHRzLnR2X25zZWMgJiM0MzsgTlNFQ19QRVJfU0VDICogdHMudHZfc2VjIC1cbi1cdFx0XHRfX3B2Y2xvY2tfcmVhZF9jeWNsZXMoXHUwMDI2aHZfY2xvY2ssIGhvc3RfdHNjKTtcbi1cdH1cbi0jZW5kaWZcbi1cdHJldHVybiBrdGltZV9nZXRfcmVhbF9ucygpIC0gZ2V0X2t2bWNsb2NrX25zKGt2bSk7XG4mIzQzO1x0aWYgKGRhdGEuZmxhZ3MgXHUwMDI2IEtWTV9DTE9DS19SRUFMVElNRSlcbiYjNDM7XHRcdHJldHVybiBkYXRhLnJlYWx0aW1lIC0gZGF0YS5jbG9jaztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGt0aW1lX2dldF9yZWFsX25zKCkgLSBkYXRhLmNsb2NrO1xuIH1cbiBcbiAvKlxuQEAgLTI1ODMsNyAmIzQzOzI2MjYsNyBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4gXHRcdFx0bWFya190c2NfdW5zdGFibGUoXCYjMzQ7S1ZNIGRpc2NvdmVyZWQgYmFja3dhcmRzIFRTQ1wmIzM0Oyk7XG4gXG4gXHRcdGlmIChrdm1fY2hlY2tfdHNjX3Vuc3RhYmxlKCkpIHtcbi1cdFx0XHR1NjQgb2Zmc2V0ID0ga3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldCh2Y3B1LFxuJiM0MztcdFx0XHR1NjQgb2Zmc2V0ID0ga3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldCh2Y3B1LCByZHRzYygpLFxuIFx0XHRcdFx0XHRcdHZjcHUtXHUwMDNlYXJjaC5sYXN0X2d1ZXN0X3RzYyk7XG4gXHRcdFx0a3ZtX3ZjcHVfd3JpdGVfdHNjX29mZnNldCh2Y3B1LCBvZmZzZXQpO1xuIFx0XHRcdGlmICghdmNwdS1cdTAwM2VhcmNoLmd1ZXN0X3RzY19wcm90ZWN0ZWQpXG5AQCAtNjg2Niw2ICYjNDM7NjkwOSw3IEBAIHN0YXRpYyB2b2lkIHB2Y2xvY2tfaXJxX3dvcmtfZm4oc3RydWN0IGlycV93b3JrICp3KVxuIH1cbiBcbiBzdGF0aWMgREVGSU5FX0lSUV9XT1JLKHB2Y2xvY2tfaXJxX3dvcmssIHB2Y2xvY2tfaXJxX3dvcmtfZm4pO1xuJiM0MzsjZW5kaWZcbiBcbiAvKlxuICAqIE5vdGlmaWNhdGlvbiBhYm91dCBwdmNsb2NrIGd0b2QgZGF0YSB1cGRhdGUuXG5AQCAtNjg3MywyNiAmIzQzOzY5MTcsMjYgQEAgc3RhdGljIERFRklORV9JUlFfV09SSyhwdmNsb2NrX2lycV93b3JrLCBwdmNsb2NrX2lycV93b3JrX2ZuKTtcbiBzdGF0aWMgaW50IHB2Y2xvY2tfZ3RvZF9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyB1bnVzZWQsXG4gXHRcdFx0ICAgICAgIHZvaWQgKnByaXYpXG4ge1xuLVx0c3RydWN0IHB2Y2xvY2tfZ3RvZF9kYXRhICpndG9kID0gXHUwMDI2cHZjbG9ja19ndG9kX2RhdGE7XG4gXHRzdHJ1Y3QgdGltZWtlZXBlciAqdGsgPSBwcml2O1xuIFxuIFx0dXBkYXRlX3B2Y2xvY2tfZ3RvZCh0ayk7XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfWDg2XzY0XG4gXHQvKlxuIFx0ICogRGlzYWJsZSBtYXN0ZXIgY2xvY2sgaWYgaG9zdCBkb2VzIG5vdCB0cnVzdCwgb3IgZG9lcyBub3QgdXNlLFxuIFx0ICogVFNDIGJhc2VkIGNsb2Nrc291cmNlLiBEZWxlZ2F0ZSBxdWV1ZV93b3JrKCkgdG8gaXJxX3dvcmsgYXNcbiBcdCAqIHRoaXMgaXMgaW52b2tlZCB3aXRoIHRrX2NvcmUuc2VxIHdyaXRlIGhlbGQuXG4gXHQgKi9cbi1cdGlmICghZ3RvZF9pc19iYXNlZF9vbl90c2MoZ3RvZC1cdTAwM2VjbG9jay52Y2xvY2tfbW9kZSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0aWYgKCFndG9kX2lzX2Jhc2VkX29uX3RzYyhwdmNsb2NrX2d0b2RfZGF0YS5jbG9jay52Y2xvY2tfbW9kZSkgXHUwMDI2XHUwMDI2XG4gXHQgICAgYXRvbWljX3JlYWQoXHUwMDI2a3ZtX2d1ZXN0X2hhc19tYXN0ZXJfY2xvY2spICE9IDApXG4gXHRcdGlycV93b3JrX3F1ZXVlKFx1MDAyNnB2Y2xvY2tfaXJxX3dvcmspO1xuJiM0MzsjZW5kaWZcbiBcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHB2Y2xvY2tfZ3RvZF9ub3RpZmllciA9IHtcbiBcdC5ub3RpZmllcl9jYWxsID0gcHZjbG9ja19ndG9kX25vdGlmeSxcbiB9O1xuLSNlbmRpZlxuIFxuIHZvaWQga3ZtX3NldHVwX3hzc19jYXBzKHZvaWQpXG4ge1xuQEAgLTcxMTEsOSAmIzQzOzcxNTUsOSBAQCBpbnQga3ZtX3g4Nl92ZW5kb3JfaW5pdChzdHJ1Y3Qga3ZtX3g4Nl9pbml0X29wcyAqb3BzKVxuIFxuIFx0aWYgKHBpX2luamVjdF90aW1lciA9PSAtMSlcbiBcdFx0cGlfaW5qZWN0X3RpbWVyID0gaG91c2VrZWVwaW5nX2VuYWJsZWQoSEtfVFlQRV9USU1FUik7XG4tI2lmZGVmIENPTkZJR19YODZfNjRcbiBcdHB2Y2xvY2tfZ3RvZF9yZWdpc3Rlcl9ub3RpZmllcihcdTAwMjZwdmNsb2NrX2d0b2Rfbm90aWZpZXIpO1xuIFxuJiM0MzsjaWZkZWYgQ09ORklHX1g4Nl82NFxuIFx0aWYgKGh5cGVydmlzb3JfaXNfdHlwZShYODZfSFlQRVJfTVNfSFlQRVJWKSlcbiBcdFx0c2V0X2h2X3RzY2NoYW5nZV9jYihrdm1faHlwZXJ2X3RzY19ub3RpZmllcik7XG4gI2VuZGlmXG5AQCAtNzE3MCw4ICYjNDM7NzIxNCw4IEBAIHZvaWQga3ZtX3g4Nl92ZW5kb3JfZXhpdCh2b2lkKVxuIFx0XHRcdFx0XHQgICAgQ1BVRlJFUV9UUkFOU0lUSU9OX05PVElGSUVSKTtcbiBcdFx0Y3B1aHBfcmVtb3ZlX3N0YXRlX25vY2FsbHMoQ1BVSFBfQVBfWDg2X0tWTV9DTEtfT05MSU5FKTtcbiBcdH1cbi0jaWZkZWYgQ09ORklHX1g4Nl82NFxuIFx0cHZjbG9ja19ndG9kX3VucmVnaXN0ZXJfbm90aWZpZXIoXHUwMDI2cHZjbG9ja19ndG9kX25vdGlmaWVyKTtcbiYjNDM7I2lmZGVmIENPTkZJR19YODZfNjRcbiBcdGlycV93b3JrX3N5bmMoXHUwMDI2cHZjbG9ja19pcnFfd29yayk7XG4gXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnB2Y2xvY2tfZ3RvZF93b3JrKTtcbiAjZW5kaWZcbkBAIC05NDQwLDYgJiM0Mzs5NDg0LDggQEAgdm9pZCBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRyZXR1cm47XG4gXHR2Y3B1X2xvYWQodmNwdSk7XG4gXHRrdm1fc3luY2hyb25pemVfdHNjKHZjcHUsIE5VTEwpO1xuJiM0MztcdGlmICghdmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC51c2VfbWFzdGVyX2Nsb2NrKVxuJiM0MztcdFx0a3ZtX3VwZGF0ZV9tYXN0ZXJjbG9jayh2Y3B1LVx1MDAzZWt2bSk7XG4gXHR2Y3B1X3B1dCh2Y3B1KTtcbiBcbiBcdC8qIHBvbGwgY29udHJvbCBlbmFibGVkIGJ5IGRlZmF1bHQgKi9cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmggYi9hcmNoL3g4Ni9rdm0veDg2LmhcbmluZGV4IDBmNTkxOWIwOTJlNDcuLjFkOWE2NjA0OGIwMWUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ODYuaFxuQEAgLTMzNSw3ICYjNDM7MzM1LDggQEAgdTY0IGt2bV9zY2FsZV90c2ModTY0IHRzYywgdTY0IHJhdGlvKTtcbiB1NjQga3ZtX3JlYWRfbDFfdHNjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGhvc3RfdHNjKTtcbiB1NjQga3ZtX2NhbGNfbmVzdGVkX3RzY19vZmZzZXQodTY0IGwxX29mZnNldCwgdTY0IGwyX29mZnNldCwgdTY0IGwyX211bHRpcGxpZXIpO1xuIHU2NCBrdm1fY2FsY19uZXN0ZWRfdHNjX211bHRpcGxpZXIodTY0IGwxX211bHRpcGxpZXIsIHU2NCBsMl9tdWx0aXBsaWVyKTtcbi11NjQga3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB0YXJnZXRfdHNjKTtcbiYjNDM7dTY0IGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgaG9zdF90c2MsXG4mIzQzO1x0XHRcdCAgICAgIHU2NCB0YXJnZXRfdHNjKTtcbiB2b2lkIGt2bV92Y3B1X3dyaXRlX3RzY19vZmZzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgbDFfb2Zmc2V0KTtcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgYWRqdXN0X3RzY19vZmZzZXRfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAwOjM5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fc3luY2hyb25pemVfdHNjJiMzNDssCiAgICAmIzM0O2t2bV9ndWVzdF90aW1lX3VwZGF0ZSYjMzQ7LAogICAgJiMzNDtrdm1fZ2V0X3dhbGxfY2xvY2tfZXBvY2gmIzM0OywKICAgICYjMzQ7a3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldCYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIHg4NiBUU0MgKFRpbWUgU3RhbXAgQ291bnRlcikgaGFuZGxpbmcsIGluY2x1ZGluZyBUU0Mgc2NhbGluZywgbWFzdGVyIGNsb2NrIHVwZGF0ZXMsIGFuZCB3YWxsIGNsb2NrIGVwb2NoIGNhbGN1bGF0aW9ucy4gVGhpcyBpcyBjb3JlIGh5cGVydmlzb3IgbG9naWMgcmVhY2hhYmxlIGZyb20gZ3Vlc3QgVk1zIHZpYSBNU1Igd3JpdGVzLCBDUFVJRCwgYW5kIEtWTSBpb2N0bHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgaGFuZGxpbmcgVFNDIHN5bmNocm9uaXphdGlvbiBhbmQgZ3Vlc3QgdGltZSB1cGRhdGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjYyNDQ0NGM1MjBiODQ3MzNlOTJmNjVlZGUyNmQwZmZiNWI1MmY4OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDUgMDA6Mzk6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCAyODM4NDc2MTlmZjg4Li4yODc4YTUxODFjZDliIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTg2NCw3ICYjNDM7ODY0LDcgQEAgc3RydWN0IGt2bV92Y3B1X2FyY2ggewogCWdwYV90IHRpbWU7CiAJczggIHB2Y2xvY2tfdHNjX3NoaWZ0OwogCXUzMiBwdmNsb2NrX3RzY19tdWw7Ci0JdW5zaWduZWQgaW50IGh3X3RzY19raHo7CiYjNDM7CXU2NCBod190c2NfaHo7CiAJc3RydWN0IGdmbl90b19wZm5fY2FjaGUgcHZfdGltZTsKIAkvKiBzZXQgZ3Vlc3Qgc3RvcHBlZCBmbGFnIGluIHB2Y2xvY2sgZmxhZ3MgZmllbGQgKi8KIAlib29sIHB2Y2xvY2tfc2V0X2d1ZXN0X3N0b3BwZWRfcmVxdWVzdDsKQEAgLTEyMzYsNiAmIzQzOzEyMzYsNyBAQCBzdHJ1Y3Qga3ZtX2FyY2ggewogCXU2NCBsYXN0X3RzY193cml0ZTsKIAl1MzIgbGFzdF90c2Nfa2h6OwogCXU2NCBsYXN0X3RzY19vZmZzZXQ7CiYjNDM7CXU2NCBsYXN0X3RzY19zY2FsaW5nX3JhdGlvOwogCXU2NCBjdXJfdHNjX25zZWM7CiAJdTY0IGN1cl90c2Nfd3JpdGU7CiAJdTY0IGN1cl90c2Nfb2Zmc2V0OwpAQCAtMTI1MSw2ICYjNDM7MTI1Miw5IEBAIHN0cnVjdCBrdm1fYXJjaCB7CiAJdTY0IG1hc3Rlcl9rZXJuZWxfbnM7CiAJdTY0IG1hc3Rlcl9jeWNsZV9ub3c7CiAJc3RydWN0IHJhdGVsaW1pdF9zdGF0ZSBrdm1jbG9ja191cGRhdGVfcnM7CiYjNDM7CXU2NCBtYXN0ZXJfdHNjX3NjYWxpbmdfcmF0aW87CiYjNDM7CXM4ICBtYXN0ZXJfdHNjX3NoaWZ0OwomIzQzOwl1MzIgbWFzdGVyX3RzY19tdWw7CiAKICNpZmRlZiBDT05GSUdfS1ZNX0hZUEVSVgogCXN0cnVjdCBrdm1faHYgaHlwZXJ2OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2NwdWlkLmMgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuYwppbmRleCA5ZTljZjY1MzhhOTZlLi43MDQ5ZjVhNTU5N2I0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vY3B1aWQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuYwpAQCAtMTYsNiAmIzQzOzE2LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC92bWFsbG9jLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdWFjY2Vzcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL3N0YXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdW5pdHMuaCZndDsKIAogI2luY2x1ZGUgJmx0O2FzbS9wcm9jZXNzb3IuaCZndDsKICNpbmNsdWRlICZsdDthc20vdXNlci5oJmd0OwpAQCAtMjE0Niw3ICYjNDM7MjE0Nyw3IEBAIGJvb2wga3ZtX2NwdWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyICplYXgsIHUzMiAqZWJ4LAogCQkJCSplY3ggPSB2Y3B1LSZndDthcmNoLnB2Y2xvY2tfdHNjX211bDsKIAkJCQkqZWR4ID0gdmNwdS0mZ3Q7YXJjaC5wdmNsb2NrX3RzY19zaGlmdDsKIAkJCX0gZWxzZSBpZiAoaW5kZXggPT0gMikgewotCQkJCSplYXggPSB2Y3B1LSZndDthcmNoLmh3X3RzY19raHo7CiYjNDM7CQkJCSplYXggPSBkaXZfdTY0KHZjcHUtJmd0O2FyY2guaHdfdHNjX2h6LCBIWl9QRVJfS0haKTsKIAkJCX0KIAkJfQogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbXNycy5jIGIvYXJjaC94ODYva3ZtL21zcnMuYwppbmRleCA2NmZhNzE0MGQ2NWQ5Li4yMmNlYjM5ZDQxZjY2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbXNycy5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9tc3JzLmMKQEAgLTE2MzEsNyAmIzQzOzE2MzEsOCBAQCBpbnQga3ZtX3NldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbykKIAkJaWYgKG1zcl9pbmZvLSZndDtob3N0X2luaXRpYXRlZCkgewogCQkJa3ZtX3N5bmNocm9uaXplX3RzYyh2Y3B1LCAmYW1wO2RhdGEpOwogCQl9IGVsc2UgaWYgKCF2Y3B1LSZndDthcmNoLmd1ZXN0X3RzY19wcm90ZWN0ZWQpIHsKLQkJCXU2NCBhZGogPSBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0KHZjcHUsIGRhdGEpIC0gdmNwdS0mZ3Q7YXJjaC5sMV90c2Nfb2Zmc2V0OwomIzQzOwkJCXU2NCBhZGogPSBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0KHZjcHUsIHJkdHNjKCksIGRhdGEpIC0KJiM0MzsJCQkJICB2Y3B1LSZndDthcmNoLmwxX3RzY19vZmZzZXQ7CiAJCQlhZGp1c3RfdHNjX29mZnNldF9ndWVzdCh2Y3B1LCBhZGopOwogCQkJdmNwdS0mZ3Q7YXJjaC5pYTMyX3RzY19hZGp1c3RfbXNyICYjNDM7PSBhZGo7CiAJCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jCmluZGV4IDlkNjA3Yjk4YmQwNjcuLjMwNTdjYTcwNTFkYjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uYwpAQCAtNTYwMiw3ICYjNDM7NTYwMiw4IEBAIHN0YXRpYyBfX2luaXQgaW50IHN2bV9oYXJkd2FyZV9zZXR1cCh2b2lkKQogCQkJCSAgICAgWEZFQVRVUkVfTUFTS19CTkRDU1IpOwogCiAJaWYgKHRzY19zY2FsaW5nKSB7Ci0JCWlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1RTQ1JBVEVNU1IpKSB7CiYjNDM7CQlpZiAoIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9UU0NSQVRFTVNSKSB8fAomIzQzOwkJICAgICFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQ09OU1RBTlRfVFNDKSkgewogCQkJdHNjX3NjYWxpbmcgPSBmYWxzZTsKIAkJfSBlbHNlIHsKIAkJCXByX2luZm8oJiMzNDtUU0Mgc2NhbGluZyBzdXBwb3J0ZWRcbiYjMzQ7KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jCmluZGV4IGUzYmZlNmFjYTFhMGUuLjlhYmQyZWQzYWVhZTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC92bXguYwpAQCAtMjg0MSw2ICYjNDM7Mjg0MSwxNiBAQCBzdGF0aWMgaW50IHNldHVwX3ZtY3NfY29uZmlnKHN0cnVjdCB2bWNzX2NvbmZpZyAqdm1jc19jb25mLAogCWlmICghY3B1X2hhc19zZ3goKSkKIAkJX2NwdV9iYXNlZF8ybmRfZXhlY19jb250cm9sICZhbXA7PSB+U0VDT05EQVJZX0VYRUNfRU5DTFNfRVhJVElORzsKIAomIzQzOwkvKgomIzQzOwkgKiBLVk0gZG9lc24mIzM5O3QgcmUtZGVyaXZlIHRoZSBUU0Mgc2NhbGluZyByYXRpbyB3aGVuIHRoZSBob3N0IFRTQwomIzQzOwkgKiBmcmVxdWVuY3kgY2hhbmdlcywgc28gVFNDIHNjYWxpbmcgaXMgb25seSB1c2FibGUgd2l0aCBhIGNvbnN0YW50CiYjNDM7CSAqIFRTQy4gIENsZWFyIHRoZSBjb250cm9sIGhlcmUgcmF0aGVyIHRoYW4gaW4gdm14X2hhcmR3YXJlX3NldHVwKCkgc28KJiM0MzsJICogdGhhdCB0aGUgcGVyLUNQVSBjb25maWdzIHJlY29tcHV0ZWQgYnkgdm14X2NoZWNrX3Byb2Nlc3Nvcl9jb21wYXQoKQomIzQzOwkgKiBzdGF5IGNvbnNpc3RlbnQgd2l0aCB0aGUgZ29sZGVuIHZtY3NfY29uZmlnLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQ09OU1RBTlRfVFNDKSkKJiM0MzsJCV9jcHVfYmFzZWRfMm5kX2V4ZWNfY29udHJvbCAmYW1wOz0gflNFQ09OREFSWV9FWEVDX1RTQ19TQ0FMSU5HOwomIzQzOwogCWlmIChfY3B1X2Jhc2VkX2V4ZWNfY29udHJvbCAmYW1wOyBDUFVfQkFTRURfQUNUSVZBVEVfVEVSVElBUllfQ09OVFJPTFMpCiAJCV9jcHVfYmFzZWRfM3JkX2V4ZWNfY29udHJvbCA9CiAJCQlhZGp1c3Rfdm14X2NvbnRyb2xzNjQoS1ZNX09QVElPTkFMX1ZNWF9URVJUSUFSWV9WTV9FWEVDX0NPTlRST0wsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmMKaW5kZXggZDk0YjU5MTQwYzQ1Mi4uY2JlNGZkMzQ1N2I0NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ODYuYwpAQCAtNjEsNiAmIzQzOzYxLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9tZW1fZW5jcnlwdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3N1c3BlbmQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zbXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdW5pdHMuaCZndDsKIAogI2luY2x1ZGUgJmx0O3RyYWNlL2V2ZW50cy9pcGkuaCZndDsKICNpbmNsdWRlICZsdDt0cmFjZS9ldmVudHMva3ZtLmgmZ3Q7CkBAIC04NzMsNyAmIzQzOzg3NCw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fdmNwdV9leGl0X3JlcXVlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCSAgICAgICBrdm1fcmVxdWVzdF9wZW5kaW5nKHZjcHUpIHx8IHhmZXJfdG9fZ3Vlc3RfbW9kZV93b3JrX3BlbmRpbmcoKTsKIH0KIAotI2lmZGVmIENPTkZJR19YODZfNjQKIHN0cnVjdCBwdmNsb2NrX2Nsb2NrIHsKIAlpbnQgdmNsb2NrX21vZGU7CiAJdTY0IGN5Y2xlX2xhc3Q7CkBAIC05MzEsMTMgJiM0Mzs5MzEsNiBAQCBzdGF0aWMgczY0IGdldF9rdm1jbG9ja19iYXNlX25zKHZvaWQpCiAJLyogQ291bnQgdXAgZnJvbSBib290IHRpbWUsIGJ1dCB3aXRoIHRoZSBmcmVxdWVuY3kgb2YgdGhlIHJhdyBjbG9jay4gICovCiAJcmV0dXJuIGt0aW1lX3RvX25zKGt0aW1lX2FkZChrdGltZV9nZXRfcmF3KCksIHB2Y2xvY2tfZ3RvZF9kYXRhLm9mZnNfYm9vdCkpOwogfQotI2Vsc2UKLXN0YXRpYyBzNjQgZ2V0X2t2bWNsb2NrX2Jhc2VfbnModm9pZCkKLXsKLQkvKiBNYXN0ZXIgY2xvY2sgbm90IHVzZWQsIHNvIHdlIGNhbiBqdXN0IHVzZSBDTE9DS19CT09UVElNRS4gICovCi0JcmV0dXJuIGt0aW1lX2dldF9ib290dGltZV9ucygpOwotfQotI2VuZGlmCiAKIHN0YXRpYyB1aW50MzJfdCBkaXZfZnJhYyh1aW50MzJfdCBkaXZpZGVuZCwgdWludDMyX3QgZGl2aXNvcikKIHsKQEAgLTk0NSwzMiAmIzQzOzkzOCw1NyBAQCBzdGF0aWMgdWludDMyX3QgZGl2X2ZyYWModWludDMyX3QgZGl2aWRlbmQsIHVpbnQzMl90IGRpdmlzb3IpCiAJcmV0dXJuIGRpdmlkZW5kOwogfQogCi1zdGF0aWMgdm9pZCBrdm1fZ2V0X3RpbWVfc2NhbGUodWludDY0X3Qgc2NhbGVkX2h6LCB1aW50NjRfdCBiYXNlX2h6LAomIzQzO3N0YXRpYyB2b2lkIGt2bV9nZXRfdGltZV9zY2FsZSh1NjQgc2NhbGVkX2h6LCB1NjQgYmFzZV9oeiwKIAkJCSAgICAgICBzOCAqcHNoaWZ0LCB1MzIgKnBtdWx0aXBsaWVyKQogewotCXVpbnQ2NF90IHNjYWxlZDY0OwotCWludDMyX3QgIHNoaWZ0ID0gMDsKLQl1aW50NjRfdCB0cHM2NDsKLQl1aW50MzJfdCB0cHMzMjsKJiM0MzsJdTY0IHNjYWxlZF9oel91NjQgPSBzY2FsZWRfaHo7CiYjNDM7CXMzMiBzaGlmdCA9IDA7CiYjNDM7CXU2NCBiYXNlX2h6X3U2NDsKJiM0MzsJdTMyIGJhc2UzMjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIGEgZml4ZWQtcG9pbnQgbXVsdGlwbGllciBhbmQgc2hpZnQgc3VjaAomIzQzOwkgKiB0aGF0OgomIzQzOwkgKiAgIHRpbWVfbnMgPSAodHNjX2N5Y2xlcyAmbHQ7Jmx0OyBzaGlmdCkgKiBtdWx0aXBsaWVyICZndDsmZ3Q7IDMyCiYjNDM7CSAqCiYjNDM7CSAqIFdoZXJlIHRzY19jeWNsZXMgdGljayBhdCBiYXNlX2h6LCBhbmQgdGltZV9ucyBzaG91bGQgY291bnQgYXQKJiM0MzsJICogc2NhbGVkX2h6ICh0eXBpY2FsbHkgTlNFQ19QRVJfU0VDIGZvciBhIFRTQ+KGkm5hbm9zZWNvbmRzIGNvbnZlcnNpb24pLgomIzQzOwkgKgomIzQzOwkgKiBUaGUgbXVsdGlwbGllciBpczogKHNjYWxlZF9oeiAmbHQ7Jmx0OyAzMikgLyBiYXNlX2h6LCBhZGp1c3RlZCBieSBzaGlmdAomIzQzOwkgKiB0byBrZWVwIGV2ZXJ5dGhpbmcgaW4gcmFuZ2UuCiYjNDM7CSAqLwogCi0JdHBzNjQgPSBiYXNlX2h6OwotCXNjYWxlZDY0ID0gc2NhbGVkX2h6OwotCXdoaWxlICh0cHM2NCAmZ3Q7IHNjYWxlZDY0KjIgfHwgdHBzNjQgJmFtcDsgMHhmZmZmZmZmZjAwMDAwMDAwVUxMKSB7Ci0JCXRwczY0ICZndDsmZ3Q7PSAxOwomIzQzOwliYXNlX2h6X3U2NCA9IGJhc2VfaHo7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFN0YXJ0IGJ5IHNoaWZ0aW5nIGJhc2VfaHogcmlnaHQgdW50aWwgaXQgZml0cyBpbiAzMiBiaXRzLCBhbmQKJiM0MzsJICogaXMgbG93ZXIgdGhhbiBkb3VibGUgdGhlIHRhcmdldCByYXRlLiBUaGlzIGludHJvZHVjZXMgYSBuZWdhdGl2ZQomIzQzOwkgKiBzaGlmdCB2YWx1ZSB3aGljaCB3b3VsZCByZXN1bHQgaW4gcHZjbG9ja19zY2FsZV9kZWx0YSgpIHNoaWZ0aW5nCiYjNDM7CSAqIHRoZSBhY3R1YWwgdGljayBjb3VudCByaWdodCBiZWZvcmUgcGVyZm9ybWluZyB0aGUgbXVsdGlwbGljYXRpb24uCiYjNDM7CSAqLwomIzQzOwl3aGlsZSAoYmFzZV9oel91NjQgJmd0OyBzY2FsZWRfaHpfdTY0ICogMiB8fCBiYXNlX2h6X3U2NCAmZ3Q7Jmd0OyAzMikgewomIzQzOwkJYmFzZV9oel91NjQgJmd0OyZndDs9IDE7CiAJCXNoaWZ0LS07CiAJfQogCi0JdHBzMzIgPSAodWludDMyX3QpdHBzNjQ7Ci0Jd2hpbGUgKHRwczMyICZsdDs9IHNjYWxlZDY0IHx8IHNjYWxlZDY0ICZhbXA7IDB4ZmZmZmZmZmYwMDAwMDAwMFVMTCkgewotCQlpZiAoc2NhbGVkNjQgJmFtcDsgMHhmZmZmZmZmZjAwMDAwMDAwVUxMIHx8IHRwczMyICZhbXA7IDB4ODAwMDAwMDApCi0JCQlzY2FsZWQ2NCAmZ3Q7Jmd0Oz0gMTsKJiM0MzsJLyogTm93IHRoZSBzaGlmdGVkIGJhc2VfaHogZml0cyBpbiAzMiBiaXRzLiAqLwomIzQzOwliYXNlMzIgPSAodTMyKWJhc2VfaHpfdTY0OwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBOZXh0LCBzaGlmdCBzY2FsZWRfaHogcmlnaHQgdW50aWwgaXQgZml0cyBpbiAzMiBiaXRzLCBhbmQgZW5zdXJlCiYjNDM7CSAqIHRoYXQgdGhlIHNoaWZ0ZWQgYmFzZV9oeiBpcyBzdHJpY3RseSBsYXJnZXIgKHNvIHRoYXQgdGhlIHJlc3VsdCBvZiB0aGUKJiM0MzsJICogZmluYWwgZGl2aXNpb24gYWxzbyBmaXRzIGluIDMyIGJpdHMpLgomIzQzOwkgKi8KJiM0MzsJd2hpbGUgKGJhc2UzMiAmbHQ7PSBzY2FsZWRfaHpfdTY0IHx8IHNjYWxlZF9oel91NjQgJmd0OyZndDsgMzIpIHsKJiM0MzsJCWlmIChzY2FsZWRfaHpfdTY0ICZndDsmZ3Q7IDMyIHx8IGJhc2UzMiAmYW1wOyBCSVQoMzEpKQomIzQzOwkJCXNjYWxlZF9oel91NjQgJmd0OyZndDs9IDE7CiAJCWVsc2UKLQkJCXRwczMyICZsdDsmbHQ7PSAxOwomIzQzOwkJCWJhc2UzMiAmbHQ7Jmx0Oz0gMTsKIAkJc2hpZnQmIzQzOyYjNDM7OwogCX0KIAogCSpwc2hpZnQgPSBzaGlmdDsKLQkqcG11bHRpcGxpZXIgPSBkaXZfZnJhYyhzY2FsZWQ2NCwgdHBzMzIpOwomIzQzOwkqcG11bHRpcGxpZXIgPSBkaXZfZnJhYyhzY2FsZWRfaHpfdTY0LCBiYXNlMzIpOwogfQogCiAjaWZkZWYgQ09ORklHX1g4Nl82NApAQCAtMTA2MSwxMSAmIzQzOzEwNzksMTUgQEAgc3RhdGljIGludCBrdm1fc2V0X3RzY19raHooc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdXNlcl90c2Nfa2h6KQogCiBzdGF0aWMgdTY0IGNvbXB1dGVfZ3Vlc3RfdHNjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgczY0IGtlcm5lbF9ucykKIHsKLQl1NjQgdHNjID0gcHZjbG9ja19zY2FsZV9kZWx0YShrZXJuZWxfbnMtdmNwdS0mZ3Q7YXJjaC50aGlzX3RzY19uc2VjLAotCQkJCSAgICAgIHZjcHUtJmd0O2FyY2gudmlydHVhbF90c2NfbXVsdCwKLQkJCQkgICAgICB2Y3B1LSZndDthcmNoLnZpcnR1YWxfdHNjX3NoaWZ0KTsKLQl0c2MgJiM0Mzs9IHZjcHUtJmd0O2FyY2gudGhpc190c2Nfd3JpdGU7Ci0JcmV0dXJuIHRzYzsKJiM0MzsJczY0IGRlbHRhX25zID0ga2VybmVsX25zIC0gdmNwdS0mZ3Q7YXJjaC50aGlzX3RzY19uc2VjOwomIzQzOwl1NjQgdHNjOwomIzQzOwomIzQzOwkvKiBIYW5kbGUgbmVnYXRpdmUgZGVsdGFzIGdyYWNlZnVsbHkgKG1hc3RlciBjbG9jayByZWYgbWF5IGJlIGVhcmxpZXIpICovCiYjNDM7CXRzYyA9IHB2Y2xvY2tfc2NhbGVfZGVsdGEoYWJzKGRlbHRhX25zKSwKJiM0MzsJCQkJICB2Y3B1LSZndDthcmNoLnZpcnR1YWxfdHNjX211bHQsCiYjNDM7CQkJCSAgdmNwdS0mZ3Q7YXJjaC52aXJ0dWFsX3RzY19zaGlmdCk7CiYjNDM7CiYjNDM7CXJldHVybiB2Y3B1LSZndDthcmNoLnRoaXNfdHNjX3dyaXRlICYjNDM7IChkZWx0YV9ucyAmZ3Q7PSAwID8gdHNjIDogLXRzYyk7CiB9CiAKICNpZmRlZiBDT05GSUdfWDg2XzY0CkBAIC0xMTMxLDExICYjNDM7MTE1MywxMiBAQCB1NjQga3ZtX3NjYWxlX3RzYyh1NjQgdHNjLCB1NjQgcmF0aW8pCiAJcmV0dXJuIF90c2M7CiB9CiAKLXU2NCBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHRhcmdldF90c2MpCiYjNDM7dTY0IGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgaG9zdF90c2MsCiYjNDM7CQkJICAgICAgdTY0IHRhcmdldF90c2MpCiB7CiAJdTY0IHRzYzsKIAotCXRzYyA9IGt2bV9zY2FsZV90c2MocmR0c2MoKSwgdmNwdS0mZ3Q7YXJjaC5sMV90c2Nfc2NhbGluZ19yYXRpbyk7CiYjNDM7CXRzYyA9IGt2bV9zY2FsZV90c2MoaG9zdF90c2MsIHZjcHUtJmd0O2FyY2gubDFfdHNjX3NjYWxpbmdfcmF0aW8pOwogCiAJcmV0dXJuIHRhcmdldF90c2MgLSB0c2M7CiB9CkBAIC0xMjU0LDYgJiM0MzsxMjc3LDcgQEAgc3RhdGljIHZvaWQgX19rdm1fc3luY2hyb25pemVfdHNjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG9mZnNldCwgdTY0IHRzYywKIAlrdm0tJmd0O2FyY2gubGFzdF90c2Nfd3JpdGUgPSB0c2M7CiAJa3ZtLSZndDthcmNoLmxhc3RfdHNjX2toeiA9IHZjcHUtJmd0O2FyY2gudmlydHVhbF90c2Nfa2h6OwogCWt2bS0mZ3Q7YXJjaC5sYXN0X3RzY19vZmZzZXQgPSBvZmZzZXQ7CiYjNDM7CWt2bS0mZ3Q7YXJjaC5sYXN0X3RzY19zY2FsaW5nX3JhdGlvID0gdmNwdS0mZ3Q7YXJjaC5sMV90c2Nfc2NhbGluZ19yYXRpbzsKIAogCXZjcHUtJmd0O2FyY2gubGFzdF9ndWVzdF90c2MgPSB0c2M7CiAKQEAgLTEyOTYsNyAmIzQzOzEzMjAsNyBAQCB2b2lkIGt2bV9zeW5jaHJvbml6ZV90c2Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKnVzZXJfdmFsdWUpCiAJYm9vbCBzeW5jaHJvbml6aW5nID0gZmFsc2U7CiAKIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtrdm0tJmd0O2FyY2gudHNjX3dyaXRlX2xvY2ssIGZsYWdzKTsKLQlvZmZzZXQgPSBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0KHZjcHUsIGRhdGEpOwomIzQzOwlvZmZzZXQgPSBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0KHZjcHUsIHJkdHNjKCksIGRhdGEpOwogCW5zID0gZ2V0X2t2bWNsb2NrX2Jhc2VfbnMoKTsKIAllbGFwc2VkID0gbnMgLSBrdm0tJmd0O2FyY2gubGFzdF90c2NfbnNlYzsKIApAQCAtMTM0NSw3ICYjNDM7MTM2OSw3IEBAIHZvaWQga3ZtX3N5bmNocm9uaXplX3RzYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqdXNlcl92YWx1ZSkKIAkJfSBlbHNlIHsKIAkJCXU2NCBkZWx0YSA9IG5zZWNfdG9fY3ljbGVzKHZjcHUsIGVsYXBzZWQpOwogCQkJZGF0YSAmIzQzOz0gZGVsdGE7Ci0JCQlvZmZzZXQgPSBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0KHZjcHUsIGRhdGEpOwomIzQzOwkJCW9mZnNldCA9IGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXQodmNwdSwgcmR0c2MoKSwgZGF0YSk7CiAJCX0KIAkJbWF0Y2hlZCA9IHRydWU7CiAJfQpAQCAtMTU2Niw2ICYjNDM7MTU5MCw4IEBAIHN0YXRpYyBib29sIGt2bV9nZXRfd2FsbHRpbWVfYW5kX2Nsb2NrcmVhZChzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsCiAgKgogICovCiAKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfY3B1X3RzY19raHoodm9pZCk7CiYjNDM7CiBzdGF0aWMgdm9pZCBwdmNsb2NrX3VwZGF0ZV92bV9ndG9kX2NvcHkoc3RydWN0IGt2bSAqa3ZtKQogewogI2lmZGVmIENPTkZJR19YODZfNjQKQEAgLTE1ODksOSAmIzQzOzE2MTUsMzAgQEAgc3RhdGljIHZvaWQgcHZjbG9ja191cGRhdGVfdm1fZ3RvZF9jb3B5KHN0cnVjdCBrdm0gKmt2bSkKIAkJCQkmYW1wOyZhbXA7ICFrYS0mZ3Q7YmFja3dhcmRzX3RzY19vYnNlcnZlZAogCQkJCSZhbXA7JmFtcDsgIWthLSZndDtib290X3ZjcHVfcnVuc19vbGRfa3ZtY2xvY2s7CiAKLQlpZiAoa2EtJmd0O3VzZV9tYXN0ZXJfY2xvY2spCiYjNDM7CWlmIChrYS0mZ3Q7dXNlX21hc3Rlcl9jbG9jaykgewomIzQzOwkJdTY0IHRzY19oejsKJiM0MzsKIAkJYXRvbWljX3NldCgmYW1wO2t2bV9ndWVzdF9oYXNfbWFzdGVyX2Nsb2NrLCAxKTsKIAomIzQzOwkJLyoKJiM0MzsJCSAqIENvcHkgdGhlIHNjYWxpbmcgcmF0aW8gYW5kIHByZWNvbXB1dGUgdGhlIG11bC9zaGlmdCBmb3IKJiM0MzsJCSAqIGNvbnZlcnRpbmcgZ3Vlc3QgVFNDIHRvIG5hbm9zZWNvbmRzLiBUaGVzZSBhcmUgdXNlZCBieQomIzQzOwkJICogZ2V0X2t2bWNsb2NrKCkgdG8gY29tcHV0ZSBrdm1jbG9jayBmcm9tIHRoZSBob3N0IFRTQwomIzQzOwkJICogd2l0aG91dCBuZWVkaW5nIGEgdkNQVSByZWZlcmVuY2UuCiYjNDM7CQkgKi8KJiM0MzsJCWthLSZndDttYXN0ZXJfdHNjX3NjYWxpbmdfcmF0aW8gPSBrYS0mZ3Q7bGFzdF90c2Nfc2NhbGluZ19yYXRpbzsKJiM0MzsJCXRzY19oeiA9ICh1NjQpZ2V0X2NwdV90c2Nfa2h6KCkgKiBIWl9QRVJfS0haOwomIzQzOwkJaWYgKHRzY19oeiAmYW1wOyZhbXA7IGt2bV9jYXBzLmhhc190c2NfY29udHJvbCkKJiM0MzsJCQl0c2NfaHogPSBrdm1fc2NhbGVfdHNjKHRzY19oeiwKJiM0MzsJCQkJCSAgICAgICBrYS0mZ3Q7bWFzdGVyX3RzY19zY2FsaW5nX3JhdGlvKTsKJiM0MzsJCWlmICh0c2NfaHopCiYjNDM7CQkJa3ZtX2dldF90aW1lX3NjYWxlKE5TRUNfUEVSX1NFQywgdHNjX2h6LAomIzQzOwkJCQkJICAgJmFtcDtrYS0mZ3Q7bWFzdGVyX3RzY19zaGlmdCwKJiM0MzsJCQkJCSAgICZhbXA7a2EtJmd0O21hc3Rlcl90c2NfbXVsKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlrYS0mZ3Q7dXNlX21hc3Rlcl9jbG9jayA9IGZhbHNlOwomIzQzOwl9CiYjNDM7CiAJdmNsb2NrX21vZGUgPSBwdmNsb2NrX2d0b2RfZGF0YS5jbG9jay52Y2xvY2tfbW9kZTsKIAl0cmFjZV9rdm1fdXBkYXRlX21hc3Rlcl9jbG9jayhrYS0mZ3Q7dXNlX21hc3Rlcl9jbG9jaywgdmNsb2NrX21vZGUsCiAJCQkJCXZjcHVzX21hdGNoZWQpOwpAQCAtMTY1OCwzOSAmIzQzOzE3MDUsNDkgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X2NwdV90c2Nfa2h6KHZvaWQpCiB9CiAKIC8qIENhbGxlZCB3aXRoaW4gcmVhZF9zZXFjb3VudF9iZWdpbi9yZXRyeSBmb3Iga3ZtLSZndDtwdmNsb2NrX3NjLiAgKi8KLXN0YXRpYyB2b2lkIF9fZ2V0X2t2bWNsb2NrKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9jbG9ja19kYXRhICpkYXRhKQomIzQzO3N0YXRpYyBib29sIF9fZ2V0X2t2bWNsb2NrX21hc3Rlcl9jbG9jayhzdHJ1Y3Qga3ZtICprdm0sCiYjNDM7CQkJCQlzdHJ1Y3Qga3ZtX2Nsb2NrX2RhdGEgKmRhdGEpCiB7CiYjNDM7I2lmZGVmIENPTkZJR19YODZfNjQKIAlzdHJ1Y3Qga3ZtX2FyY2ggKmthID0gJmFtcDtrdm0tJmd0O2FyY2g7CiAJc3RydWN0IHB2Y2xvY2tfdmNwdV90aW1lX2luZm8gaHZfY2xvY2s7CiYjNDM7CXN0cnVjdCB0aW1lc3BlYzY0IHRzOwogCi0JLyogYm90aCBfX3RoaXNfY3B1X3JlYWQoKSBhbmQgcmR0c2MoKSBzaG91bGQgYmUgb24gdGhlIHNhbWUgY3B1ICovCi0JZ2V0X2NwdSgpOwomIzQzOwlpZiAoIWthLSZndDt1c2VfbWFzdGVyX2Nsb2NrKQomIzQzOwkJcmV0dXJuIGZhbHNlOwogCi0JZGF0YS0mZ3Q7ZmxhZ3MgPSAwOwotCWlmIChrYS0mZ3Q7dXNlX21hc3Rlcl9jbG9jayAmYW1wOyZhbXA7Ci0JICAgIChzdGF0aWNfY3B1X2hhcyhYODZfRkVBVFVSRV9DT05TVEFOVF9UU0MpIHx8IF9fdGhpc19jcHVfcmVhZChjcHVfdHNjX2toeikpKSB7Ci0jaWZkZWYgQ09ORklHX1g4Nl82NAotCQlzdHJ1Y3QgdGltZXNwZWM2NCB0czsKJiM0MzsJaWYgKCFrdm1fZ2V0X3dhbGx0aW1lX2FuZF9jbG9ja3JlYWQoJmFtcDt0cywgJmFtcDtkYXRhLSZndDtob3N0X3RzYykpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiAKLQkJaWYgKGt2bV9nZXRfd2FsbHRpbWVfYW5kX2Nsb2NrcmVhZCgmYW1wO3RzLCAmYW1wO2RhdGEtJmd0O2hvc3RfdHNjKSkgewotCQkJZGF0YS0mZ3Q7cmVhbHRpbWUgPSB0cy50dl9uc2VjICYjNDM7IE5TRUNfUEVSX1NFQyAqIHRzLnR2X3NlYzsKLQkJCWRhdGEtJmd0O2ZsYWdzIHw9IEtWTV9DTE9DS19SRUFMVElNRSB8IEtWTV9DTE9DS19IT1NUX1RTQzsKLQkJfSBlbHNlCi0jZW5kaWYKLQkJZGF0YS0mZ3Q7aG9zdF90c2MgPSByZHRzYygpOwotCi0JCWRhdGEtJmd0O2ZsYWdzIHw9IEtWTV9DTE9DS19UU0NfU1RBQkxFOwotCQlodl9jbG9jay50c2NfdGltZXN0YW1wID0ga2EtJmd0O21hc3Rlcl9jeWNsZV9ub3c7Ci0JCWh2X2Nsb2NrLnN5c3RlbV90aW1lID0ga2EtJmd0O21hc3Rlcl9rZXJuZWxfbnMgJiM0Mzsga2EtJmd0O2t2bWNsb2NrX29mZnNldDsKLQkJa3ZtX2dldF90aW1lX3NjYWxlKE5TRUNfUEVSX1NFQywgZ2V0X2NwdV90c2Nfa2h6KCkgKiAxMDAwTEwsCi0JCQkJICAgJmFtcDtodl9jbG9jay50c2Nfc2hpZnQsCi0JCQkJICAgJmFtcDtodl9jbG9jay50c2NfdG9fc3lzdGVtX211bCk7Ci0JCWRhdGEtJmd0O2Nsb2NrID0gX19wdmNsb2NrX3JlYWRfY3ljbGVzKCZhbXA7aHZfY2xvY2ssIGRhdGEtJmd0O2hvc3RfdHNjKTsKJiM0MzsJZGF0YS0mZ3Q7cmVhbHRpbWUgPSB0cy50dl9uc2VjICYjNDM7IE5TRUNfUEVSX1NFQyAqIHRzLnR2X3NlYzsKJiM0MzsJZGF0YS0mZ3Q7ZmxhZ3MgfD0gS1ZNX0NMT0NLX1JFQUxUSU1FIHwgS1ZNX0NMT0NLX0hPU1RfVFNDIHwKJiM0MzsJCSAgICAgICBLVk1fQ0xPQ0tfVFNDX1NUQUJMRTsKJiM0MzsKJiM0MzsJaHZfY2xvY2sudHNjX3RpbWVzdGFtcCA9IGthLSZndDttYXN0ZXJfY3ljbGVfbm93OwomIzQzOwlodl9jbG9jay5zeXN0ZW1fdGltZSA9IGthLSZndDttYXN0ZXJfa2VybmVsX25zICYjNDM7IGthLSZndDtrdm1jbG9ja19vZmZzZXQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFVzZSB0aGUgcHJlY29tcHV0ZWQgZ3Vlc3QtVFNDLWJhc2VkIG11bC9zaGlmdCBzbyB0aGF0IHRoZSBrdm1jbG9jawomIzQzOwkgKiB2YWx1ZSBtYXRjaGVzIHdoYXQgdGhlIGd1ZXN0IGNvbXB1dGVzIGZyb20gaXRzIG93biBUU0MuCiYjNDM7CSAqLwomIzQzOwlodl9jbG9jay50c2Nfc2hpZnQgPSBrYS0mZ3Q7bWFzdGVyX3RzY19zaGlmdDsKJiM0MzsJaHZfY2xvY2sudHNjX3RvX3N5c3RlbV9tdWwgPSBrYS0mZ3Q7bWFzdGVyX3RzY19tdWw7CiYjNDM7CiYjNDM7CWlmIChrdm1fY2Fwcy5oYXNfdHNjX2NvbnRyb2wpIHsKJiM0MzsJCXU2NCB0c2NfZGVsdGEgPSBkYXRhLSZndDtob3N0X3RzYyAtIGthLSZndDttYXN0ZXJfY3ljbGVfbm93OwomIzQzOwomIzQzOwkJdHNjX2RlbHRhID0ga3ZtX3NjYWxlX3RzYyh0c2NfZGVsdGEsIGthLSZndDttYXN0ZXJfdHNjX3NjYWxpbmdfcmF0aW8pOwomIzQzOwkJZGF0YS0mZ3Q7Y2xvY2sgPSBodl9jbG9jay5zeXN0ZW1fdGltZSAmIzQzOwomIzQzOwkJCSAgICAgIHB2Y2xvY2tfc2NhbGVfZGVsdGEodHNjX2RlbHRhLAomIzQzOwkJCQkJCSAgaHZfY2xvY2sudHNjX3RvX3N5c3RlbV9tdWwsCiYjNDM7CQkJCQkJICBodl9jbG9jay50c2Nfc2hpZnQpOwogCX0gZWxzZSB7Ci0JCWRhdGEtJmd0O2Nsb2NrID0gZ2V0X2t2bWNsb2NrX2Jhc2VfbnMoKSAmIzQzOyBrYS0mZ3Q7a3ZtY2xvY2tfb2Zmc2V0OwomIzQzOwkJZGF0YS0mZ3Q7Y2xvY2sgPSBfX3B2Y2xvY2tfcmVhZF9jeWNsZXMoJmFtcDtodl9jbG9jaywgZGF0YS0mZ3Q7aG9zdF90c2MpOwogCX0KLQotCXB1dF9jcHUoKTsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7I2Vsc2UKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzOyNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCBnZXRfa3ZtY2xvY2soc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2Nsb2NrX2RhdGEgKmRhdGEpCkBAIC0xNjk5LDggJiM0MzsxNzU2LDExIEBAIHN0YXRpYyB2b2lkIGdldF9rdm1jbG9jayhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fY2xvY2tfZGF0YSAqZGF0YSkKIAl1bnNpZ25lZCBzZXE7CiAKIAlkbyB7CiYjNDM7CQlkYXRhLSZndDtmbGFncyA9IDA7CiYjNDM7CiAJCXNlcSA9IHJlYWRfc2VxY291bnRfYmVnaW4oJmFtcDtrYS0mZ3Q7cHZjbG9ja19zYyk7Ci0JCV9fZ2V0X2t2bWNsb2NrKGt2bSwgZGF0YSk7CiYjNDM7CQlpZiAoIV9fZ2V0X2t2bWNsb2NrX21hc3Rlcl9jbG9jayhrdm0sIGRhdGEpKQomIzQzOwkJCWRhdGEtJmd0O2Nsb2NrID0gZ2V0X2t2bWNsb2NrX2Jhc2VfbnMoKSAmIzQzOyBrYS0mZ3Q7a3ZtY2xvY2tfb2Zmc2V0OwogCX0gd2hpbGUgKHJlYWRfc2VxY291bnRfcmV0cnkoJmFtcDtrYS0mZ3Q7cHZjbG9ja19zYywgc2VxKSk7CiB9CiAKQEAgLTE3NjIsMzYgJiM0MzsxODIyLDQ1IEBAIHN0YXRpYyB2b2lkIGt2bV9zZXR1cF9ndWVzdF9wdmNsb2NrKHN0cnVjdCBwdmNsb2NrX3ZjcHVfdGltZV9pbmZvICpyZWZfaHZfY2xvY2ssCiAKIGludCBrdm1fZ3Vlc3RfdGltZV91cGRhdGUoc3RydWN0IGt2bV92Y3B1ICp2KQogewomIzQzOwl1NjQgdGd0X3RzY19oeiwgdHNjX3RpbWVzdGFtcCwgaG9zdF90c2MsIG1hc3Rlcl90c2MsIG1hc3Rlcl9uczsKJiM0MzsJc3RydWN0IGt2bV9hcmNoICprYSBfX21heWJlX3VudXNlZCA9ICZhbXA7di0mZ3Q7a3ZtLSZndDthcmNoOwogCXN0cnVjdCBwdmNsb2NrX3ZjcHVfdGltZV9pbmZvIGh2X2Nsb2NrID0ge307Ci0JdW5zaWduZWQgbG9uZyBmbGFncywgdGd0X3RzY19raHo7Ci0JdW5zaWduZWQgc2VxOwogCXN0cnVjdCBrdm1fdmNwdV9hcmNoICp2Y3B1ID0gJmFtcDt2LSZndDthcmNoOwotCXN0cnVjdCBrdm1fYXJjaCAqa2EgPSAmYW1wO3YtJmd0O2t2bS0mZ3Q7YXJjaDsKIAlzNjQga2VybmVsX25zOwotCXU2NCB0c2NfdGltZXN0YW1wLCBob3N0X3RzYzsKLQlib29sIHVzZV9tYXN0ZXJfY2xvY2s7Ci0KLQlrZXJuZWxfbnMgPSAwOwotCWhvc3RfdHNjID0gMDsKIAogCS8qCiAJICogSWYgdGhlIGhvc3QgdXNlcyBUU0MgY2xvY2ssIHRoZW4gcGFzc3Rocm91Z2ggVFNDIGFzIHN0YWJsZQogCSAqIHRvIHRoZSBndWVzdC4KIAkgKi8KJiM0MzsjaWZkZWYgQ09ORklHX1g4Nl82NAomIzQzOwlib29sIHVzZV9tYXN0ZXJfY2xvY2s7CiYjNDM7CXVuc2lnbmVkIGludCBzZXE7CiYjNDM7CiAJZG8gewogCQlzZXEgPSByZWFkX3NlcWNvdW50X2JlZ2luKCZhbXA7a2EtJmd0O3B2Y2xvY2tfc2MpOwogCQl1c2VfbWFzdGVyX2Nsb2NrID0ga2EtJmd0O3VzZV9tYXN0ZXJfY2xvY2s7Ci0JCWlmICh1c2VfbWFzdGVyX2Nsb2NrKSB7Ci0JCQlob3N0X3RzYyA9IGthLSZndDttYXN0ZXJfY3ljbGVfbm93OwotCQkJa2VybmVsX25zID0ga2EtJmd0O21hc3Rlcl9rZXJuZWxfbnM7CiYjNDM7CQlpZiAoIXVzZV9tYXN0ZXJfY2xvY2spCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlpZiAoIWt2bV9nZXRfdGltZV9hbmRfY2xvY2tyZWFkKCZhbXA7a2VybmVsX25zLCAmYW1wO2hvc3RfdHNjKSkgewomIzQzOwkJCXVzZV9tYXN0ZXJfY2xvY2sgPSBmYWxzZTsKJiM0MzsJCQljb250aW51ZTsKIAkJfQotCX0gd2hpbGUgKHJlYWRfc2VxY291bnRfcmV0cnkoJmFtcDtrYS0mZ3Q7cHZjbG9ja19zYywgc2VxKSk7CiAKLQkvKiBLZWVwIGlycSBkaXNhYmxlZCB0byBwcmV2ZW50IGNoYW5nZXMgdG8gdGhlIGNsb2NrICovCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCXRndF90c2Nfa2h6ID0gZ2V0X2NwdV90c2Nfa2h6KCk7Ci0JaWYgKHVubGlrZWx5KHRndF90c2Nfa2h6ID09IDApKSB7Ci0JCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKJiM0MzsJCW1hc3Rlcl90c2MgPSBrYS0mZ3Q7bWFzdGVyX2N5Y2xlX25vdzsKJiM0MzsJCW1hc3Rlcl9ucyA9IGthLSZndDttYXN0ZXJfa2VybmVsX25zOwomIzQzOwl9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KCZhbXA7a2EtJmd0O3B2Y2xvY2tfc2MsIHNlcSkpOwomIzQzOyNlbHNlCiYjNDM7CWNvbnN0IGJvb2wgdXNlX21hc3Rlcl9jbG9jayA9IGZhbHNlOwomIzQzOyNlbmRpZgomIzQzOwkvKgomIzQzOwkgKiBFbnN1cmUgcmVhZGluZyB0aGUgVFNDJiM0MztmcmVxdWVuY3kgcGFpciBpcyBkb25lIG9uIHRoZSBzYW1lIENQVS4gIFdoZW4KJiM0MzsJICogTk9UIHVzaW5nIHRoZSBtYXN0ZXIgY2xvY2ssIHRoZSBUU0MgZnJlcXVlbmN5IG1heSB2YXJ5IGJldHdlZW4gQ1BVcy4KJiM0MzsJICovCiYjNDM7CXByZWVtcHRfZGlzYWJsZSgpOwomIzQzOwl0Z3RfdHNjX2h6ID0gKHU2NClnZXRfY3B1X3RzY19raHooKSAqIEhaX1BFUl9LSFo7CiYjNDM7CWlmICh1bmxpa2VseSh0Z3RfdHNjX2h6ID09IDApKSB7CiYjNDM7CQlwcmVlbXB0X2VuYWJsZSgpOwogCQlrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfQ0xPQ0tfVVBEQVRFLCB2KTsKIAkJcmV0dXJuIDE7CiAJfQpAQCAtMTgyMCwyOCAmIzQzOzE4ODksNDMgQEAgaW50IGt2bV9ndWVzdF90aW1lX3VwZGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnYpCiAJCX0KIAl9CiAKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiYjNDM7CS8qCiYjNDM7CSAqIFJlZnJlc2ggTDEmIzM5O3MgbGFzdCAmIzM0O29ic2VydmVkJiMzNDsgVFNDIHRvIG1hdGNoIHRoZSBQViBjbG9jayYjMzk7cyB0aW1lc3RhbXAsCiYjNDM7CSAqIGUuZy4gc28gdGhhdCB0aGUgZ3Vlc3QgY2FuJiMzOTt0IHNlZSBhIFRTQyB0aGF0JiMzOTtzIGJlaGluZCB0aGUgcmVmZXJlbmNlLgomIzQzOwkgKi8KJiM0MzsJdmNwdS0mZ3Q7bGFzdF9ndWVzdF90c2MgPSB0c2NfdGltZXN0YW1wOwomIzQzOwomIzQzOwlwcmVlbXB0X2VuYWJsZSgpOwogCiAJLyogV2l0aCBhbGwgdGhlIGluZm8gd2UgZ290LCBmaWxsIGluIHRoZSB2YWx1ZXMgKi8KIAogCWlmIChrdm1fY2Fwcy5oYXNfdHNjX2NvbnRyb2wpIHsKLQkJdGd0X3RzY19raHogPSBrdm1fc2NhbGVfdHNjKHRndF90c2Nfa2h6LAomIzQzOwkJdGd0X3RzY19oeiA9IGt2bV9zY2FsZV90c2ModGd0X3RzY19oeiwKIAkJCQkJICAgIHYtJmd0O2FyY2gubDFfdHNjX3NjYWxpbmdfcmF0aW8pOwotCQl0Z3RfdHNjX2toeiA9IHRndF90c2Nfa2h6ID8gOiAxOwomIzQzOwkJdGd0X3RzY19oeiA9IHRndF90c2NfaHogPyA6IDE7CiAJfQogCi0JaWYgKHVubGlrZWx5KHZjcHUtJmd0O2h3X3RzY19raHogIT0gdGd0X3RzY19raHopKSB7Ci0JCWt2bV9nZXRfdGltZV9zY2FsZShOU0VDX1BFUl9TRUMsIHRndF90c2Nfa2h6ICogMTAwMExMLAomIzQzOwlpZiAodW5saWtlbHkodmNwdS0mZ3Q7aHdfdHNjX2h6ICE9IHRndF90c2NfaHopKSB7CiYjNDM7CQlrdm1fZ2V0X3RpbWVfc2NhbGUoTlNFQ19QRVJfU0VDLCB0Z3RfdHNjX2h6LAogCQkJCSAgICZhbXA7dmNwdS0mZ3Q7cHZjbG9ja190c2Nfc2hpZnQsCiAJCQkJICAgJmFtcDt2Y3B1LSZndDtwdmNsb2NrX3RzY19tdWwpOwotCQl2Y3B1LSZndDtod190c2Nfa2h6ID0gdGd0X3RzY19raHo7CiYjNDM7CQl2Y3B1LSZndDtod190c2NfaHogPSB0Z3RfdHNjX2h6OwogCX0KIAogCWh2X2Nsb2NrLnRzY19zaGlmdCA9IHZjcHUtJmd0O3B2Y2xvY2tfdHNjX3NoaWZ0OwogCWh2X2Nsb2NrLnRzY190b19zeXN0ZW1fbXVsID0gdmNwdS0mZ3Q7cHZjbG9ja190c2NfbXVsOwotCWh2X2Nsb2NrLnRzY190aW1lc3RhbXAgPSB0c2NfdGltZXN0YW1wOwotCWh2X2Nsb2NrLnN5c3RlbV90aW1lID0ga2VybmVsX25zICYjNDM7IHYtJmd0O2t2bS0mZ3Q7YXJjaC5rdm1jbG9ja19vZmZzZXQ7Ci0JdmNwdS0mZ3Q7bGFzdF9ndWVzdF90c2MgPSB0c2NfdGltZXN0YW1wOwomIzQzOwkvKgomIzQzOwkgKiBJZiB0aGUgbWFzdGVyIGNsb2NrIGlzIE5PVCBpbiB1c2UsIHRoZSByZWZlcmVuY2UgdGltZSBwbGFjZWQgaW4gdGhlCiYjNDM7CSAqIGh2X2Nsb2NrIGlzICYjMzQ7bm93JiMzNDsuICBJZiBtYXN0ZXIgY2xvY2sgaXMgaW4gdXNlLCB0aGUgcmVmZXJlbmNlIHRpbWUgaXMKJiM0MzsJICogdGhlIG1hc3RlciBjbG9jayYjMzk7cyBzbmFwc2hvdCBmcm9tIHNvbWUgdGltZSBpbiB0aGUgcGFzdCwgbm90ICYjMzQ7bm93JiMzNDsuCiYjNDM7CSAqLwomIzQzOwlpZiAodXNlX21hc3Rlcl9jbG9jaykgewomIzQzOwkJaHZfY2xvY2sudHNjX3RpbWVzdGFtcCA9IGt2bV9yZWFkX2wxX3RzYyh2LCBtYXN0ZXJfdHNjKTsKJiM0MzsJCWh2X2Nsb2NrLnN5c3RlbV90aW1lID0gbWFzdGVyX25zICYjNDM7IHYtJmd0O2t2bS0mZ3Q7YXJjaC5rdm1jbG9ja19vZmZzZXQ7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlodl9jbG9jay50c2NfdGltZXN0YW1wID0gdHNjX3RpbWVzdGFtcDsKJiM0MzsJCWh2X2Nsb2NrLnN5c3RlbV90aW1lID0ga2VybmVsX25zICYjNDM7IHYtJmd0O2t2bS0mZ3Q7YXJjaC5rdm1jbG9ja19vZmZzZXQ7CiYjNDM7CX0KIAogCS8qIElmIHRoZSBob3N0IHVzZXMgVFNDIGNsb2Nrc291cmNlLCB0aGVuIGl0IGlzIHN0YWJsZSAqLwogCWh2X2Nsb2NrLmZsYWdzID0gMDsKQEAgLTE5MDMsNjMgJiM0MzsxOTg3LDIyIEBAIGludCBrdm1fZ3Vlc3RfdGltZV91cGRhdGUoc3RydWN0IGt2bV92Y3B1ICp2KQogICogd2FsbGNsb2NrIGFuZCBrdm1jbG9jayB0aW1lcywgYW5kIHN1YnRyYWN0aW5nIG9uZSBmcm9tIHRoZSBvdGhlci4KICAqCiAgKiBGYWxsIGJhY2sgdG8gdXNpbmcgdGhlaXIgdmFsdWVzIGF0IHNsaWdodGx5IGRpZmZlcmVudCBtb21lbnRzIGJ5Ci0gKiBjYWxsaW5nIGt0aW1lX2dldF9yZWFsX25zKCkgYW5kIGdldF9rdm1jbG9ja19ucygpIHNlcGFyYXRlbHkuCiYjNDM7ICogY2FsbGluZyBrdGltZV9nZXRfcmVhbF9ucygpIGFuZCBnZXRfa3ZtY2xvY2soKSBzZXBhcmF0ZWx5LgogICovCiB1aW50NjRfdCBrdm1fZ2V0X3dhbGxfY2xvY2tfZXBvY2goc3RydWN0IGt2bSAqa3ZtKQogewotI2lmZGVmIENPTkZJR19YODZfNjQKLQlzdHJ1Y3QgcHZjbG9ja192Y3B1X3RpbWVfaW5mbyBodl9jbG9jazsKLQlzdHJ1Y3Qga3ZtX2FyY2ggKmthID0gJmFtcDtrdm0tJmd0O2FyY2g7Ci0JdW5zaWduZWQgbG9uZyBzZXEsIGxvY2FsX3RzY19raHo7Ci0Jc3RydWN0IHRpbWVzcGVjNjQgdHM7Ci0JdWludDY0X3QgaG9zdF90c2M7Ci0KLQlkbyB7Ci0JCXNlcSA9IHJlYWRfc2VxY291bnRfYmVnaW4oJmFtcDtrYS0mZ3Q7cHZjbG9ja19zYyk7Ci0KLQkJbG9jYWxfdHNjX2toeiA9IDA7Ci0JCWlmICgha2EtJmd0O3VzZV9tYXN0ZXJfY2xvY2spCi0JCQlicmVhazsKLQotCQkvKgotCQkgKiBUaGUgVFNDIHJlYWQgYW5kIHRoZSBjYWxsIHRvIGdldF9jcHVfdHNjX2toeigpIG11c3QgaGFwcGVuCi0JCSAqIG9uIHRoZSBzYW1lIENQVS4KLQkJICovCi0JCWdldF9jcHUoKTsKLQotCQlsb2NhbF90c2Nfa2h6ID0gZ2V0X2NwdV90c2Nfa2h6KCk7Ci0KLQkJaWYgKGxvY2FsX3RzY19raHogJmFtcDsmYW1wOwotCQkgICAgIWt2bV9nZXRfd2FsbHRpbWVfYW5kX2Nsb2NrcmVhZCgmYW1wO3RzLCAmYW1wO2hvc3RfdHNjKSkKLQkJCWxvY2FsX3RzY19raHogPSAwOyAvKiBGYWxsIGJhY2sgdG8gb2xkIG1ldGhvZCAqLwotCi0JCXB1dF9jcHUoKTsKLQotCQkvKgotCQkgKiBUaGVzZSB2YWx1ZXMgbXVzdCBiZSBzbmFwc2hvdHRlZCB3aXRoaW4gdGhlIHNlcWNvdW50IGxvb3AuCi0JCSAqIEFmdGVyIHRoYXQsIGl0JiMzOTtzIGp1c3QgbWF0aGVtYXRpY3Mgd2hpY2ggY2FuIGhhcHBlbiBvbiBhbnkKLQkJICogQ1BVIGF0IGFueSB0aW1lLgotCQkgKi8KLQkJaHZfY2xvY2sudHNjX3RpbWVzdGFtcCA9IGthLSZndDttYXN0ZXJfY3ljbGVfbm93OwotCQlodl9jbG9jay5zeXN0ZW1fdGltZSA9IGthLSZndDttYXN0ZXJfa2VybmVsX25zICYjNDM7IGthLSZndDtrdm1jbG9ja19vZmZzZXQ7CiYjNDM7CXN0cnVjdCBrdm1fY2xvY2tfZGF0YSBkYXRhOwogCi0JfSB3aGlsZSAocmVhZF9zZXFjb3VudF9yZXRyeSgmYW1wO2thLSZndDtwdmNsb2NrX3NjLCBzZXEpKTsKJiM0MzsJZ2V0X2t2bWNsb2NrKGt2bSwgJmFtcDtkYXRhKTsKIAogCS8qCi0JICogSWYgdGhlIGNvbmRpdGlvbnMgd2VyZSByaWdodCwgYW5kIG9idGFpbmluZyB0aGUgd2FsbGNsb2NrJiM0MztUU0Mgd2FzCi0JICogc3VjY2Vzc2Z1bCwgY2FsY3VsYXRlIHRoZSBLVk0gY2xvY2sgYXQgdGhlIGNvcnJlc3BvbmRpbmcgdGltZSBhbmQKLQkgKiBzdWJ0cmFjdCBvbmUgZnJvbSB0aGUgb3RoZXIgdG8gZ2V0IHRoZSBndWVzdCYjMzk7cyBlcG9jaCBpbiBuYW5vc2Vjb25kcwotCSAqIHNpbmNlIDE5NzAtMDEtMDEuCiYjNDM7CSAqIElmIGdldF9rdm1jbG9jaygpIGNhcHR1cmVkIGJvdGggd2FsbGNsb2NrIGFuZCBrdm1jbG9jayBmcm9tIHRoZQomIzQzOwkgKiBzYW1lIFRTQyByZWFkaW5nLCB1c2UgdGhlbSBmb3IgYSBwcmVjaXNlIGVwb2NoIGNhbGN1bGF0aW9uLgogCSAqLwotCWlmIChsb2NhbF90c2Nfa2h6KSB7Ci0JCWt2bV9nZXRfdGltZV9zY2FsZShOU0VDX1BFUl9TRUMsIGxvY2FsX3RzY19raHogKiBOU0VDX1BFUl9VU0VDLAotCQkJCSAgICZhbXA7aHZfY2xvY2sudHNjX3NoaWZ0LAotCQkJCSAgICZhbXA7aHZfY2xvY2sudHNjX3RvX3N5c3RlbV9tdWwpOwotCQlyZXR1cm4gdHMudHZfbnNlYyAmIzQzOyBOU0VDX1BFUl9TRUMgKiB0cy50dl9zZWMgLQotCQkJX19wdmNsb2NrX3JlYWRfY3ljbGVzKCZhbXA7aHZfY2xvY2ssIGhvc3RfdHNjKTsKLQl9Ci0jZW5kaWYKLQlyZXR1cm4ga3RpbWVfZ2V0X3JlYWxfbnMoKSAtIGdldF9rdm1jbG9ja19ucyhrdm0pOwomIzQzOwlpZiAoZGF0YS5mbGFncyAmYW1wOyBLVk1fQ0xPQ0tfUkVBTFRJTUUpCiYjNDM7CQlyZXR1cm4gZGF0YS5yZWFsdGltZSAtIGRhdGEuY2xvY2s7CiYjNDM7CiYjNDM7CXJldHVybiBrdGltZV9nZXRfcmVhbF9ucygpIC0gZGF0YS5jbG9jazsKIH0KIAogLyoKQEAgLTI1ODMsNyAmIzQzOzI2MjYsNyBAQCB2b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpCiAJCQltYXJrX3RzY191bnN0YWJsZSgmIzM0O0tWTSBkaXNjb3ZlcmVkIGJhY2t3YXJkcyBUU0MmIzM0Oyk7CiAKIAkJaWYgKGt2bV9jaGVja190c2NfdW5zdGFibGUoKSkgewotCQkJdTY0IG9mZnNldCA9IGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXQodmNwdSwKJiM0MzsJCQl1NjQgb2Zmc2V0ID0ga3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldCh2Y3B1LCByZHRzYygpLAogCQkJCQkJdmNwdS0mZ3Q7YXJjaC5sYXN0X2d1ZXN0X3RzYyk7CiAJCQlrdm1fdmNwdV93cml0ZV90c2Nfb2Zmc2V0KHZjcHUsIG9mZnNldCk7CiAJCQlpZiAoIXZjcHUtJmd0O2FyY2guZ3Vlc3RfdHNjX3Byb3RlY3RlZCkKQEAgLTY4NjYsNiAmIzQzOzY5MDksNyBAQCBzdGF0aWMgdm9pZCBwdmNsb2NrX2lycV93b3JrX2ZuKHN0cnVjdCBpcnFfd29yayAqdykKIH0KIAogc3RhdGljIERFRklORV9JUlFfV09SSyhwdmNsb2NrX2lycV93b3JrLCBwdmNsb2NrX2lycV93b3JrX2ZuKTsKJiM0MzsjZW5kaWYKIAogLyoKICAqIE5vdGlmaWNhdGlvbiBhYm91dCBwdmNsb2NrIGd0b2QgZGF0YSB1cGRhdGUuCkBAIC02ODczLDI2ICYjNDM7NjkxNywyNiBAQCBzdGF0aWMgREVGSU5FX0lSUV9XT1JLKHB2Y2xvY2tfaXJxX3dvcmssIHB2Y2xvY2tfaXJxX3dvcmtfZm4pOwogc3RhdGljIGludCBwdmNsb2NrX2d0b2Rfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgdW51c2VkLAogCQkJICAgICAgIHZvaWQgKnByaXYpCiB7Ci0Jc3RydWN0IHB2Y2xvY2tfZ3RvZF9kYXRhICpndG9kID0gJmFtcDtwdmNsb2NrX2d0b2RfZGF0YTsKIAlzdHJ1Y3QgdGltZWtlZXBlciAqdGsgPSBwcml2OwogCiAJdXBkYXRlX3B2Y2xvY2tfZ3RvZCh0ayk7CiAKJiM0MzsjaWZkZWYgQ09ORklHX1g4Nl82NAogCS8qCiAJICogRGlzYWJsZSBtYXN0ZXIgY2xvY2sgaWYgaG9zdCBkb2VzIG5vdCB0cnVzdCwgb3IgZG9lcyBub3QgdXNlLAogCSAqIFRTQyBiYXNlZCBjbG9ja3NvdXJjZS4gRGVsZWdhdGUgcXVldWVfd29yaygpIHRvIGlycV93b3JrIGFzCiAJICogdGhpcyBpcyBpbnZva2VkIHdpdGggdGtfY29yZS5zZXEgd3JpdGUgaGVsZC4KIAkgKi8KLQlpZiAoIWd0b2RfaXNfYmFzZWRfb25fdHNjKGd0b2QtJmd0O2Nsb2NrLnZjbG9ja19tb2RlKSAmYW1wOyZhbXA7CiYjNDM7CWlmICghZ3RvZF9pc19iYXNlZF9vbl90c2MocHZjbG9ja19ndG9kX2RhdGEuY2xvY2sudmNsb2NrX21vZGUpICZhbXA7JmFtcDsKIAkgICAgYXRvbWljX3JlYWQoJmFtcDtrdm1fZ3Vlc3RfaGFzX21hc3Rlcl9jbG9jaykgIT0gMCkKIAkJaXJxX3dvcmtfcXVldWUoJmFtcDtwdmNsb2NrX2lycV93b3JrKTsKJiM0MzsjZW5kaWYKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBwdmNsb2NrX2d0b2Rfbm90aWZpZXIgPSB7CiAJLm5vdGlmaWVyX2NhbGwgPSBwdmNsb2NrX2d0b2Rfbm90aWZ5LAogfTsKLSNlbmRpZgogCiB2b2lkIGt2bV9zZXR1cF94c3NfY2Fwcyh2b2lkKQogewpAQCAtNzExMSw5ICYjNDM7NzE1NSw5IEBAIGludCBrdm1feDg2X3ZlbmRvcl9pbml0KHN0cnVjdCBrdm1feDg2X2luaXRfb3BzICpvcHMpCiAKIAlpZiAocGlfaW5qZWN0X3RpbWVyID09IC0xKQogCQlwaV9pbmplY3RfdGltZXIgPSBob3VzZWtlZXBpbmdfZW5hYmxlZChIS19UWVBFX1RJTUVSKTsKLSNpZmRlZiBDT05GSUdfWDg2XzY0CiAJcHZjbG9ja19ndG9kX3JlZ2lzdGVyX25vdGlmaWVyKCZhbXA7cHZjbG9ja19ndG9kX25vdGlmaWVyKTsKIAomIzQzOyNpZmRlZiBDT05GSUdfWDg2XzY0CiAJaWYgKGh5cGVydmlzb3JfaXNfdHlwZShYODZfSFlQRVJfTVNfSFlQRVJWKSkKIAkJc2V0X2h2X3RzY2NoYW5nZV9jYihrdm1faHlwZXJ2X3RzY19ub3RpZmllcik7CiAjZW5kaWYKQEAgLTcxNzAsOCAmIzQzOzcyMTQsOCBAQCB2b2lkIGt2bV94ODZfdmVuZG9yX2V4aXQodm9pZCkKIAkJCQkJICAgIENQVUZSRVFfVFJBTlNJVElPTl9OT1RJRklFUik7CiAJCWNwdWhwX3JlbW92ZV9zdGF0ZV9ub2NhbGxzKENQVUhQX0FQX1g4Nl9LVk1fQ0xLX09OTElORSk7CiAJfQotI2lmZGVmIENPTkZJR19YODZfNjQKIAlwdmNsb2NrX2d0b2RfdW5yZWdpc3Rlcl9ub3RpZmllcigmYW1wO3B2Y2xvY2tfZ3RvZF9ub3RpZmllcik7CiYjNDM7I2lmZGVmIENPTkZJR19YODZfNjQKIAlpcnFfd29ya19zeW5jKCZhbXA7cHZjbG9ja19pcnFfd29yayk7CiAJY2FuY2VsX3dvcmtfc3luYygmYW1wO3B2Y2xvY2tfZ3RvZF93b3JrKTsKICNlbmRpZgpAQCAtOTQ0MCw2ICYjNDM7OTQ4NCw4IEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJcmV0dXJuOwogCXZjcHVfbG9hZCh2Y3B1KTsKIAlrdm1fc3luY2hyb25pemVfdHNjKHZjcHUsIE5VTEwpOwomIzQzOwlpZiAoIXZjcHUtJmd0O2t2bS0mZ3Q7YXJjaC51c2VfbWFzdGVyX2Nsb2NrKQomIzQzOwkJa3ZtX3VwZGF0ZV9tYXN0ZXJjbG9jayh2Y3B1LSZndDtrdm0pOwogCXZjcHVfcHV0KHZjcHUpOwogCiAJLyogcG9sbCBjb250cm9sIGVuYWJsZWQgYnkgZGVmYXVsdCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5oIGIvYXJjaC94ODYva3ZtL3g4Ni5oCmluZGV4IDBmNTkxOWIwOTJlNDcuLjFkOWE2NjA0OGIwMWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS94ODYuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmgKQEAgLTMzNSw3ICYjNDM7MzM1LDggQEAgdTY0IGt2bV9zY2FsZV90c2ModTY0IHRzYywgdTY0IHJhdGlvKTsKIHU2NCBrdm1fcmVhZF9sMV90c2Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgaG9zdF90c2MpOwogdTY0IGt2bV9jYWxjX25lc3RlZF90c2Nfb2Zmc2V0KHU2NCBsMV9vZmZzZXQsIHU2NCBsMl9vZmZzZXQsIHU2NCBsMl9tdWx0aXBsaWVyKTsKIHU2NCBrdm1fY2FsY19uZXN0ZWRfdHNjX211bHRpcGxpZXIodTY0IGwxX211bHRpcGxpZXIsIHU2NCBsMl9tdWx0aXBsaWVyKTsKLXU2NCBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHRhcmdldF90c2MpOwomIzQzO3U2NCBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGhvc3RfdHNjLAomIzQzOwkJCSAgICAgIHU2NCB0YXJnZXRfdHNjKTsKIHZvaWQga3ZtX3ZjcHVfd3JpdGVfdHNjX29mZnNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBsMV9vZmZzZXQpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgYWRqdXN0X3RzY19vZmZzZXRfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg3OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEyNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtWTSB4ODYgVFNDIEhhbmRsaW5nIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIHRoYXQmIzM5O3MgdHdlYWtpbmcgS1ZNJiMzOTtzIHg4NiBUU0MgaW1wbGVtZW50YXRpb24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgYSBmYWlybHkgZGVlcCBkaXZlIGludG8gaG93IEtWTSBoYW5kbGVzIHRpbWUtcmVsYXRlZCBhc3BlY3RzIHdpdGhpbiB0aGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoZSBjaGFuZ2VzIHRvdWNoIGEgbG90IG9mIGNvcmUgS1ZNIGNvZGUsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBUaW1lIFN0YW1wIENvdW50ZXIgKFRTQykuCgpNeSBmaXJzdCB0aG91Z2h0IGlzIHRoZSBhcmNoaXRlY3R1cmFsIGltcGFjdC4gVGhleSYjMzk7dmUgdXBkYXRlZCBkYXRhIHN0cnVjdHVyZXMgbGlrZSBga3ZtX3ZjcHVfYXJjaGAgYW5kIGBrdm1fYXJjaGAgdG8gYWNjb21tb2RhdGUgdGhlIFRTQyBjaGFuZ2VzLCByZW5hbWluZyBgaHdfdHNjX2toemAgdG8gYGh3X3RzY19oemAsIGFuZCBpbnRyb2R1Y2luZyBuZXcgdmFyaWFibGVzIHJlbGF0ZWQgdG8gc2NhbGluZyByYXRpb3MgYW5kIHNoaWZ0cy4gVGhpcyBpbW1lZGlhdGVseSBzdWdnZXN0cyBhIHNoaWZ0IGluIGhvdyBUU0MgZnJlcXVlbmN5IGlzIG1hbmFnZWQgYW5kIGNhbGN1bGF0ZWQuIEkgYWxzbyBub3RpY2UgdGhleSYjMzk7cmUgbm93IHBhc3NpbmcgdGhlIGhvc3QgVFNDIHZhbHVlIHRvIGBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0YCwgd2hpY2ggaGludHMgYXQgaW1wcm92ZW1lbnRzIGluIHN5bmNocm9uaXphdGlvbiBhbmQgb2Zmc2V0IGNhbGN1bGF0aW9uIGJldHdlZW4gaG9zdCBhbmQgZ3Vlc3QuIFRoZSBjaGFuZ2VzIHRvIGBrdm1fY3B1aWRgIGFuZCBga3ZtX3NldF9tc3JfY29tbW9uYCBjb25maXJtIHRoaXMgZm9jdXMgb24gcmVmaW5lZCBUU0MgaW5mb3JtYXRpb24gZXhjaGFuZ2UuCgpUaGUgZGVwZW5kZW5jZSBvbiBgWDg2X0ZFQVRVUkVfQ09OU1RBTlRfVFNDYCBpbiBgc3ZtX2hhcmR3YXJlX3NldHVwYCBhbmQgYHNldHVwX3ZtY3NfY29uZmlnYCBpcyBpbXBvcnRhbnQg4oCTIGl0IGluZGljYXRlcyB0aGF0IHRoZXNlIHVwZGF0ZXMgYXJlIG9wdGltaXplZCBmb3Igc3lzdGVtcyB3aGVyZSB0aGUgVFNDIGlzIGtub3duIHRvIGJlIHN0YWJsZSwgc28gaXQmIzM5O3MgZ29vZCB0aGF0IHRoZXkmIzM5O3JlIGV4cGxpY2l0bHkgY2hlY2tpbmcgZm9yIHRoYXQuIEl0IGFsc28gZmVlbHMgbGlrZSB0aGVzZSBjaGFuZ2VzIGFyZSBnZWFyZWQgdG93YXJkcyBtb3JlIHByZWNpc2UgZ3Vlc3QgdGltZSBrZWVwaW5nLiBUaGV5JiMzOTtyZSByZWZpbmluZyBob3cgdGhlIGd1ZXN0IFRTQyBpcyBjb21wdXRlZCwgbWFraW5nIGl0IGhhbmRsZSBuZWdhdGl2ZSBkZWx0YXMgZ3JhY2VmdWxseS4gUmVmYWN0b3Jpbmcgb2YgdGhlIGBrdm1jbG9ja2AgZnVuY3Rpb25zIGFuZCB0aGUgdXNlIG9mIGB0Z3RfdHNjX2h6YCBpbnN0ZWFkIG9mIGB0Z3RfdHNjX2toemAgaW4gYGt2bV9ndWVzdF90aW1lX3VwZGF0ZWAgZnVydGhlciBlbXBoYXNpemUgdGhlIGZvY3VzIG9uIGluY3JlYXNlZCBhY2N1cmFjeSBhbmQgY29uc2lzdGVuY3kuCgpOb3csIGFzIGEgS1ZNIGV4cGVydCwgSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBicm9hZGVyIGltcGxpY2F0aW9ucy4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgY29yZSBmdW5jdGlvbnMsIGluY2x1ZGluZyBga3ZtX3N5bmNocm9uaXplX3RzY2AsIGBrdm1fZ3Vlc3RfdGltZV91cGRhdGVgLCBga3ZtX2dldF93YWxsX2Nsb2NrX2Vwb2NoYCwgYGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXRgLCBhbmQgYGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZWAuIEdpdmVuIG15IGtub3dsZWRnZSBvZiB0aGUgY29kZWJhc2UsIEkga25vdyB0aGVzZSBhcmUgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgaW9jdGxzIG9yIE1TUiB3cml0ZXMuIFRoaXMgbWVhbnMgdGhleSBhcmUgcmVhY2hhYmxlIGZyb20gYSBmdXp6ZXIgKHN5emthbGxlciwgaW4gbXkgY2FzZSkuCgpFc3NlbnRpYWxseSwgdGhlc2UgVFNDIGNoYW5nZXMgYXJlIGFuIGludGVncmFsIHBhcnQgb2YgS1ZNLCBtYWtpbmcgdGhlbSBhIHZlcnkgdmlhYmxlIHRhcmdldCBmb3IgZnV6emluZy4gV2l0aCB0aGlzIGluIG1pbmQsIHRoZSByZWZhY3RvcmluZyBhbmQgYXJndW1lbnQgYWRkaXRpb25zIGFyZSByZWFsbHkgaW1wb3J0YW50LiBBbnkgY2hhbmdlcyB0byBzeW5jaHJvbml6YXRpb24gb3Igb2Zmc2V0IGNhbGN1bGF0aW9ucyB3aWxsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyB0YXJnZXRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAwOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVx0Ym9vbCBcJiMzNDtDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTcyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTczOmNvbmZpZyBLVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzQtXHRib29sIFwmIzM0O0kvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgzOmNvbmZpZyBLVk1fU01NXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODQtXHRib29sIFwmIzM0O1N5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTkzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTk0OmNvbmZpZyBLVk1fSFlQRVJWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTUtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNy1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwODpjb25maWcgS1ZNX1hFTlxuYXJjaC94ODYva3ZtL0tjb25maWctMjA5LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNzpjb25maWcgS1ZNX1BST1ZFX01NVVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE4LVx0Ym9vbCBcJiMzNDtQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjI5LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjMwOmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cdGJvb2xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMzpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xuYXJjaC94ODYva3ZtL0tjb25maWctMjM0LVx0aW50IFwmIzM0O01heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDk1MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtWTSB4ODYgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBLVk0geDg2IHBhdGNoLiBGaXJzdCwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoaXMgaXMgS1ZNLXNwZWNpZmljLCB3aGljaCBpcyBhIGdpdmVuLCBhbmQgd2UmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IEtWTSBpcyBpbmRlZWQgZW5hYmxlZC4gRGlnZ2luZyBkZWVwZXIsIGl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgYXJjaC94ODYva3ZtL3g4Ni5jYCwgYGFyY2gveDg2L2t2bS9zdm0vc3ZtLmNgLCBhbmQgYGFyY2gveDg2L2t2bS92bXgvdm14LmNgLiBHaXZlbiB0aG9zZSBmaWxlcywgd2UmIzM5O3JlIGxpa2VseSBsb29raW5nIGF0IGNoYW5nZXMgcmVsYXRlZCB0byBlaXRoZXIgSW50ZWwgb3IgQU1EIHZpcnR1YWxpemF0aW9uIGV4dGVuc2lvbnMsIHNvIGp1c3QgZW5hYmxpbmcgYEtWTWAgc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIHRoZSBidWlsZCByZXF1aXJlbWVudHMuCgpOb3csIGxldCYjMzk7cyBnZXQgaW50byB0aGUgZnVuY3Rpb25zIHRoZSBwYXRjaCBpcyB0YXJnZXRpbmcuIEkgc2VlOgoKKiAgIGBrdm1fc3luY2hyb25pemVfdHNjYAoqICAgYGt2bV9ndWVzdF90aW1lX3VwZGF0ZWAKKiAgIGBrdm1fZ2V0X3dhbGxfY2xvY2tfZXBvY2hgCiogICBga3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldGAKKiAgIGBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGVgCgpPa2F5LCBhbmQgbm93IHdlIG5lZWQgdG8gY29uc2lkZXIgaWYgdGhlc2UgYXJlIGhvdCBwYXRoIGZ1bmN0aW9ucy4gSXQgbG9va3MgbGlrZSBga3ZtX2d1ZXN0X3RpbWVfdXBkYXRlYCB3aWxsIGdldCBjYWxsZWQgcGVyaW9kaWNhbGx5LCBvciB3aGVuIGV4aXRzIG9jY3VyLCBwcm9iYWJseSBhIHByZXR0eSBjb21tb24gb3BlcmF0aW9uLiBga3ZtX3N5bmNocm9uaXplX3RzY2AgaXMgdHJpZ2dlcmVkIGJ5IE1TUiB3cml0ZXMsIHNvIGFueXRoaW5nIHdyaXRpbmcgdGhlIFRTQyB3aWxsIGJlIGNhbGxpbmcgdGhhdC4gYGt2bV9nZXRfd2FsbF9jbG9ja19lcG9jaGAgaGFwcGVucyBvbiBgS1ZNX0dFVF9DTE9DS2AgaW9jdGxzIGFuZCBga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlYCBpcyB0aWVkIHRvIHZDUFUgY3JlYXRpb24sIHdoaWNoIGlzIGFsc28gYSBmcmVxdWVudCBvcGVyYXRpb24uCgpGaW5hbGx5LCBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGV4cG9ydGVkIGZ1bmN0aW9ucyBvciBzdGF0aWNzLiBJdCBhcHBlYXJzIG5vbmUgb2YgdGhlc2UgYXJlIHN0YXRpYywgd2hpY2ggaW1wbGllcyB0aGF0IHRoZXkmIzM5O3JlIGJlaW5nIHVzZWQgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhlaXIgb3JpZ2luYWwgc291cmNlIGZpbGVzLCB3aGljaCBtZWFucyB3ZSBtaWdodCBiZSBkZWFsaW5nIHdpdGggYW4gQVBJIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fc3luY2hyb25pemVfdHNjJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vbXNycy5jPTE0NDI9aW50IGt2bV9zZXRfbXNyX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXG4tLVxuYXJjaC94ODYva3ZtL21zcnMuYy0xNjMxLVx0XHRpZiAobXNyX2luZm8tXHUwMDNlaG9zdF9pbml0aWF0ZWQpIHtcbmFyY2gveDg2L2t2bS9tc3JzLmM6MTYzMjpcdFx0XHRrdm1fc3luY2hyb25pemVfdHNjKHZjcHUsIFx1MDAyNmRhdGEpO1xuYXJjaC94ODYva3ZtL21zcnMuYy0xNjMzLVx0XHR9IGVsc2UgaWYgKCF2Y3B1LVx1MDAzZWFyY2guZ3Vlc3RfdHNjX3Byb3RlY3RlZCkge1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYz0xMjQxPXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fY2hlY2tfdHNjX3Vuc3RhYmxlKHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTEyNTgtICovXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTI1OTpzdGF0aWMgdm9pZCBfX2t2bV9zeW5jaHJvbml6ZV90c2Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgb2Zmc2V0LCB1NjQgdHNjLFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEyNjAtXHRcdFx0XHQgIHU2NCBucywgYm9vbCBtYXRjaGVkLCBib29sIHVzZXJfc2V0X3RzYylcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTMxMi1cbmFyY2gveDg2L2t2bS94ODYuYzoxMzEzOnZvaWQga3ZtX3N5bmNocm9uaXplX3RzYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqdXNlcl92YWx1ZSlcbmFyY2gveDg2L2t2bS94ODYuYy0xMzE0LXtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTM3Ni1cbmFyY2gveDg2L2t2bS94ODYuYzoxMzc3Olx0X19rdm1fc3luY2hyb25pemVfdHNjKHZjcHUsIG9mZnNldCwgZGF0YSwgbnMsIG1hdGNoZWQsICEhdXNlcl92YWx1ZSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtMTM3OC1cdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnRzY193cml0ZV9sb2NrLCBmbGFncyk7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTMzMzg9c3RhdGljIGludCBrdm1fYXJjaF90c2Nfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0zMzYzLVxuYXJjaC94ODYva3ZtL3g4Ni5jOjMzNjQ6XHRcdF9fa3ZtX3N5bmNocm9uaXplX3RzYyh2Y3B1LCBvZmZzZXQsIHRzYywgbnMsIG1hdGNoZWQsIHRydWUpO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTMzNjUtXHRcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnRzY193cml0ZV9sb2NrLCBmbGFncyk7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTk0ODE9dm9pZCBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy05NDg1LVx0dmNwdV9sb2FkKHZjcHUpO1xuYXJjaC94ODYva3ZtL3g4Ni5jOjk0ODY6XHRrdm1fc3luY2hyb25pemVfdHNjKHZjcHUsIE5VTEwpO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTk0ODctXHRpZiAoIXZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gudXNlX21hc3Rlcl9jbG9jaylcbi0tXG5hcmNoL3g4Ni9rdm0veDg2Lmg9MzMxPWludCBrdm1fZ3Vlc3RfdGltZV91cGRhdGUoc3RydWN0IGt2bV92Y3B1ICp2KTtcbmFyY2gveDg2L2t2bS94ODYuaC0zMzItXG5hcmNoL3g4Ni9rdm0veDg2Lmg6MzMzOnZvaWQga3ZtX3N5bmNocm9uaXplX3RzYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqdXNlcl92YWx1ZSk7XG5hcmNoL3g4Ni9rdm0veDg2LmgtMzM0LXU2NCBrdm1fc2NhbGVfdHNjKHU2NCB0c2MsIHU2NCByYXRpbyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDA6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3OTAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggbG9va3MgbGlrZSBpdCYjMzk7cyBkaWdnaW5nIGludG8gdGhlIGhlYXJ0IG9mIEtWTSYjMzk7cyBUU0Mgc2NhbGluZyBhbmQgbWFzdGVyIGNsb2NrIG1lY2hhbmlzbXMuIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBhcmVhLCBhbmQgdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgbWVhbnMgaXQmIzM5O3MgZGVmaW5pdGVseSBmdXp6YWJsZS4gVGltZSB0byBkaWcgaW4uCgpNeSBmb2N1cyBzaG91bGQgYmUgb24gdGhlc2Uga2V5IHN5bWJvbHM6IGBrdm1fc3luY2hyb25pemVfdHNjYCwgYGt2bV9ndWVzdF90aW1lX3VwZGF0ZWAsIGBrdm1fZ2V0X3dhbGxfY2xvY2tfZXBvY2hgLCBga3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldGAsIGFuZCBga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlYC4gVGhleSBzZWVtIGNlbnRyYWwgdG8gdGhlIGNoYW5nZXMuCgpOb3csIGNvbmZpZ3VyYXRpb24uICBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBmdXp6aW5nIHNldHVwIGNhbiBhY3R1YWxseSBoaXQgdGhpcyBjb2RlLiBJIG5lZWQgdG8gZW5hYmxlIHNvbWUgS1ZNIGNvbmZpZ3MuIFJpZ2h0LCBsZXQmIzM5O3Mgc3RhcnQgd2l0aCBgS1ZNYCwgYnV0IEkgYmV0IGZvciBhY3R1YWwgZXhlY3V0aW9uLCBJJiMzOTtsbCBhbHNvIG5lZWQgZWl0aGVyIGBLVk1fSU5URUxgIG9yIGBLVk1fQU1EYC4gVGhlIGluc3RydWN0aW9ucyBzYXkgdG8gb25seSBhZGQgYEtWTWAsIGBLVk1fSU5URUxgLCBhbmQgYEtWTV9BTURgIHRvIGBFbmFibGVDb25maWdzYCwgd2l0aG91dCB0aGUgYENPTkZJR19gIHByZWZpeC4KCkJlZm9yZSBJIG1vdmUgb24sIGxldCBtZSBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGt2bV9nZXRfd2FsbF9jbG9ja19lcG9jaGAuIFRoYXQgb25lIHNlZW1zIGludGVyZXN0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAwOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9nZXRfd2FsbF9jbG9ja19lcG9jaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL21zcnMuYz0xMjI0PXN0YXRpYyB2b2lkIGt2bV93cml0ZV93YWxsX2Nsb2NrKHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3Qgd2FsbF9jbG9jaywgaW50IHNlY19oaV9vZnMpXG4tLVxuYXJjaC94ODYva3ZtL21zcnMuYy0xMjQ2LVxuYXJjaC94ODYva3ZtL21zcnMuYzoxMjQ3Olx0d2FsbF9uc2VjID0ga3ZtX2dldF93YWxsX2Nsb2NrX2Vwb2NoKGt2bSk7XG5hcmNoL3g4Ni9rdm0vbXNycy5jLTEyNDgtXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTE4MjM9aW50IGt2bV9ndWVzdF90aW1lX3VwZGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnYpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTE5OTEtICovXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTk5Mjp1aW50NjRfdCBrdm1fZ2V0X3dhbGxfY2xvY2tfZXBvY2goc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC94ODYva3ZtL3g4Ni5jLTE5OTMte1xuLS1cbmFyY2gveDg2L2t2bS94ODYuaD0zMjg9dTY0IGdldF9rdm1jbG9ja19ucyhzdHJ1Y3Qga3ZtICprdm0pO1xuYXJjaC94ODYva3ZtL3g4Ni5oOjMyOTp1aW50NjRfdCBrdm1fZ2V0X3dhbGxfY2xvY2tfZXBvY2goc3RydWN0IGt2bSAqa3ZtKTtcbmFyY2gveDg2L2t2bS94ODYuaC0zMzAtYm9vbCBrdm1fZ2V0X21vbm90b25pY19hbmRfY2xvY2tyZWFkKHM2NCAqa2VybmVsX25zLCB1NjQgKnRzY190aW1lc3RhbXApO1xuLS1cbmFyY2gveDg2L2t2bS94ZW4uYz0zOT1zdGF0aWMgaW50IGt2bV94ZW5fc2hhcmVkX2luZm9faW5pdChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL3hlbi5jLTYzLVx0ICovXG5hcmNoL3g4Ni9rdm0veGVuLmM6NjQ6XHR3YWxsX25zZWMgPSBrdm1fZ2V0X3dhbGxfY2xvY2tfZXBvY2goa3ZtKTtcbmFyY2gveDg2L2t2bS94ZW4uYy02NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzg1NwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLiBUaGlzIGBrdm1fZ2V0X3dhbGxfY2xvY2tfZXBvY2hgIGZ1bmN0aW9uLi4uIHJpZ2h0LCBpdCYjMzk7cyB1c2VkIGJ5IFhlbiBhbmQgaW50ZXJhY3RzIHdpdGggTW9kZWwtU3BlY2lmaWMgUmVnaXN0ZXJzIChNU1JzKS4gU28sIGl0JiMzOTtzIHByZXR0eSBsb3ctbGV2ZWwsIGxpa2VseSBkZWFsaW5nIHdpdGggdGltZWtlZXBpbmcgc3luY2hyb25pemF0aW9uIGJldHdlZW4gdGhlIGh5cGVydmlzb3IgYW5kIHRoZSBndWVzdC4KCioqRGlnZ2luZyBpbnRvIFRpbWVrZWVwaW5nOiBVbmRlcnN0YW5kaW5nIGBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0YCoqCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgKmhvdyogaXQmIzM5O3Mgb3BlcmF0aW5nLiBNeSBuZXh0IHN0ZXAgaXMgZGVmaW5pdGVseSBnb2luZyB0byBiZSBkaXZpbmcgaW50byBga3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldGAuIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWluIHRoaXMgZnVuY3Rpb24gZmlndXJlcyBvdXQgdGhlIFRpbWUgU3RhbXAgQ291bnRlciAoVFNDKSBvZmZzZXQgYXQgdGhlIExldmVsIDEgKEwxKSBzdGFnZS4gVGhlIFRTQyBpcyB0aGUgY3JpdGljYWwgaGFyZHdhcmUgcmVnaXN0ZXIgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgaGVyZS4gS25vd2luZyBob3cgdGhlIGd1ZXN0JiMzOTtzIFRTQyByZWxhdGVzIHRvIHRoZSBob3N0JiMzOTtzLCBlc3BlY2lhbGx5IHdpdGggdmlydHVhbGl6YXRpb24sIGlzIGFic29sdXRlbHkga2V5IGZvciBjb3JyZWN0IHRpbWUgbWFuYWdlbWVudC4gSSYjMzk7bSBndWVzc2luZyB0aGlzIGZ1bmN0aW9uIGlzIGNlbnRyYWwgdG8gZXN0YWJsaXNoaW5nIGEgcmVsaWFibGUgdGltZSBiYXNlIGZvciB0aGUgZ3Vlc3QsIGRlc3BpdGUgYW55IGh5cGVydmlzb3Igb3ZlcmhlYWQgb3IgaW50ZXJydXB0aW9ucy4gSSBzdXNwZWN0IGl0JiMzOTtzIGxvb2tpbmcgYXQgdGhlIGd1ZXN0IFRTQyBhbmQgY29tcGFyaW5nIGl0IHRvIGEga25vd24gaG9zdCBUU0Mgb3IgYSByZWZlcmVuY2UgdGltZSwgbWF5YmUgdXNpbmcgc29tZSBjYWxpYnJhdGlvbi4gVGhlIG9mZnNldCBjYWxjdWxhdGlvbiBpcyBjcnVjaWFsIHRvIG1haW50YWluaW5nIGEgY29uc2lzdGVudCB0aW1lIHZpZXcgd2l0aGluIHRoZSB2aXJ0dWFsIG1hY2hpbmUuIFRoaXMgaGFzIGltcGxpY2F0aW9ucyBmb3IgYSB3aG9sZSBsb2FkIG9mIHBlcmZvcm1hbmNlIG1ldHJpY3MsIGFuZCBpdCYjMzk7cyBzb21ldGhpbmcgSSBuZWVkIHRvIGZ1bGx5IGdyYXNwLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgY2FyZWZ1bGx5IGF0IHRoZSBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgbG9naWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAwOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9jb21wdXRlX2wxX3RzY19vZmZzZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9tc3JzLmM9MTQ0Mj1pbnQga3ZtX3NldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcbi0tXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTE2MzMtXHRcdH0gZWxzZSBpZiAoIXZjcHUtXHUwMDNlYXJjaC5ndWVzdF90c2NfcHJvdGVjdGVkKSB7XG5hcmNoL3g4Ni9rdm0vbXNycy5jOjE2MzQ6XHRcdFx0dTY0IGFkaiA9IGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXQodmNwdSwgcmR0c2MoKSwgZGF0YSkgLVxuYXJjaC94ODYva3ZtL21zcnMuYy0xNjM1LVx0XHRcdFx0ICB2Y3B1LVx1MDAzZWFyY2gubDFfdHNjX29mZnNldDtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTE0Nj11NjQga3ZtX3NjYWxlX3RzYyh1NjQgdHNjLCB1NjQgcmF0aW8pXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTExNTUtXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTE1Njp1NjQga3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBob3N0X3RzYyxcbmFyY2gveDg2L2t2bS94ODYuYy0xMTU3LVx0XHRcdCAgICAgIHU2NCB0YXJnZXRfdHNjKVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz0xMzEzPXZvaWQga3ZtX3N5bmNocm9uaXplX3RzYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqdXNlcl92YWx1ZSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTMyMi1cdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZrdm0tXHUwMDNlYXJjaC50c2Nfd3JpdGVfbG9jaywgZmxhZ3MpO1xuYXJjaC94ODYva3ZtL3g4Ni5jOjEzMjM6XHRvZmZzZXQgPSBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0KHZjcHUsIHJkdHNjKCksIGRhdGEpO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTEzMjQtXHRucyA9IGdldF9rdm1jbG9ja19iYXNlX25zKCk7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTEzNzEtXHRcdFx0ZGF0YSAmIzQzOz0gZGVsdGE7XG5hcmNoL3g4Ni9rdm0veDg2LmM6MTM3MjpcdFx0XHRvZmZzZXQgPSBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0KHZjcHUsIHJkdHNjKCksIGRhdGEpO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTEzNzMtXHRcdH1cbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9MjU3OD12b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTI2MjgtXHRcdGlmIChrdm1fY2hlY2tfdHNjX3Vuc3RhYmxlKCkpIHtcbmFyY2gveDg2L2t2bS94ODYuYzoyNjI5Olx0XHRcdHU2NCBvZmZzZXQgPSBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0KHZjcHUsIHJkdHNjKCksXG5hcmNoL3g4Ni9rdm0veDg2LmMtMjYzMC1cdFx0XHRcdFx0XHR2Y3B1LVx1MDAzZWFyY2gubGFzdF9ndWVzdF90c2MpO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuaD0zMzc9dTY0IGt2bV9jYWxjX25lc3RlZF90c2NfbXVsdGlwbGllcih1NjQgbDFfbXVsdGlwbGllciwgdTY0IGwyX211bHRpcGxpZXIpO1xuYXJjaC94ODYva3ZtL3g4Ni5oOjMzODp1NjQga3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBob3N0X3RzYyxcbmFyY2gveDg2L2t2bS94ODYuaC0zMzktXHRcdFx0ICAgICAgdTY0IHRhcmdldF90c2MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTE0NgoJCQkJCQkJb3V0cHV0OiAxODIKCQkJCQkJCXRob3VnaHRzOiAxODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBTdHJhdGVneSBmb3IgVGhpcyBLVk0gUGF0Y2gqKgoKT2theSwgYWZ0ZXIgYSBxdWljayByZXZpZXcsIHRoaXMgcGF0Y2ggbG9va3MgbGlrZSBpdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIHRoZSBlZmZvcnQgdG8gZnV6ei4gVGhlIG1vZGlmaWNhdGlvbnMgaXQgbWFrZXMgdG8gdGhlIEtWTSB4ODYgVFNDIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgdGhlIFRTQyBzY2FsaW5nLCBtYXN0ZXIgY2xvY2sgdXBkYXRlcywgYW5kIHdhbGwgY2xvY2sgZXBvY2ggY2FsY3VsYXRpb25zLCBhcmUgYWxsIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcuIFRoaXMgaXMgY29yZSBoeXBlcnZpc29yIGxvZ2ljLCBhbmQgd2Uga25vdyB0aGF0IGl0JiMzOTtzIGRpcmVjdGx5IGFjY2Vzc2libGUgZnJvbSBndWVzdCBWTXMgdGhyb3VnaCB2YXJpb3VzIGludGVyZmFjZXMgbGlrZSBNU1Igd3JpdGVzLCBDUFVJRCBpbnN0cnVjdGlvbnMsIGFuZCBLVk0gaW9jdGxzLiBUaGF0IGtpbmQgb2YgZXhwb3N1cmUgc2NyZWFtcyB2dWxuZXJhYmlsaXR5IHBvdGVudGlhbC4KClRoZXJlZm9yZSwgSSYjMzk7bSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgLgoKTXkgaW1tZWRpYXRlIGZvY3VzIHdpbGwgYmUgb24gdGhlIGZ1bmN0aW9ucyB0aGF0IGRpcmVjdGx5IGhhbmRsZSB0aGUgVFNDIHN5bmNocm9uaXphdGlvbiBhbmQgZ3Vlc3QgdGltZSB1cGRhdGVzLiBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gYWRkIHRoZXNlIGZvY3VzIHN5bWJvbHMgdG8gdGhlIGZ1enppbmcgY29uZmlndXJhdGlvbjogYGt2bV9zeW5jaHJvbml6ZV90c2NgLCBga3ZtX2d1ZXN0X3RpbWVfdXBkYXRlYCwgYGt2bV9nZXRfd2FsbF9jbG9ja19lcG9jaGAsIGBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0YCwgYW5kIGBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGVgLiBUaGVzZSBhcmUgdGhlIGtleSBhcmVhcyB3aGVyZSB0aGUgcGF0Y2ggaW50cm9kdWNlcyBjaGFuZ2VzIGFuZCwgY29uc2VxdWVudGx5LCB3aGVyZSBJIGFudGljaXBhdGUgdGhlIG1vc3QgaW50ZXJlc3RpbmcgZnV6emluZyByZXN1bHRzLgoKRmluYWxseSwgSSYjMzk7bGwgZW5hYmxlIHRoZSBgS1ZNYCwgYEtWTV9JTlRFTGAsIGFuZCBgS1ZNX0FNRGAgY29uZmlndXJhdGlvbnMuIEdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZXMsIHRoZXNlIGFyZSBlc3NlbnRpYWwgdG8gZW5zdXJlIHRoZSBmdXp6ZXIgY2FuIGNvcnJlY3RseSBleGVyY2lzZSB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bmRlciBkaWZmZXJlbnQgaGFyZHdhcmUgY29uZmlndXJhdGlvbnMuIFRoaXMgc2hvdWxkIGdpdmUgdXMgYSBnb29kIHN0YXJ0IHRvd2FyZHMgaWRlbnRpZnlpbmcgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aGluIHRoaXMgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAwOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fc3luY2hyb25pemVfdHNjJiMzNDssCiAgICAmIzM0O2t2bV9ndWVzdF90aW1lX3VwZGF0ZSYjMzQ7LAogICAgJiMzNDtrdm1fZ2V0X3dhbGxfY2xvY2tfZXBvY2gmIzM0OywKICAgICYjMzQ7a3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldCYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIHg4NiBUU0MgKFRpbWUgU3RhbXAgQ291bnRlcikgaGFuZGxpbmcsIGluY2x1ZGluZyBUU0Mgc2NhbGluZywgbWFzdGVyIGNsb2NrIHVwZGF0ZXMsIGFuZCB3YWxsIGNsb2NrIGVwb2NoIGNhbGN1bGF0aW9ucy4gVGhpcyBpcyBjb3JlIGh5cGVydmlzb3IgbG9naWMgcmVhY2hhYmxlIGZyb20gZ3Vlc3QgVk1zIHZpYSBNU1Igd3JpdGVzLCBDUFVJRCwgYW5kIEtWTSBpb2N0bHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgaGFuZGxpbmcgVFNDIHN5bmNocm9uaXphdGlvbiBhbmQgZ3Vlc3QgdGltZSB1cGRhdGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgICAmIzM0O0tWTV9BTUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fc3luY2hyb25pemVfdHNjJiMzNDssCiAgICAmIzM0O2t2bV9ndWVzdF90aW1lX3VwZGF0ZSYjMzQ7LAogICAgJiMzNDtrdm1fZ2V0X3dhbGxfY2xvY2tfZXBvY2gmIzM0OywKICAgICYjMzQ7a3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldCYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIHg4NiBUU0MgKFRpbWUgU3RhbXAgQ291bnRlcikgaGFuZGxpbmcsIGluY2x1ZGluZyBUU0Mgc2NhbGluZywgbWFzdGVyIGNsb2NrIHVwZGF0ZXMsIGFuZCB3YWxsIGNsb2NrIGVwb2NoIGNhbGN1bGF0aW9ucy4gVGhpcyBpcyBjb3JlIGh5cGVydmlzb3IgbG9naWMgcmVhY2hhYmxlIGZyb20gZ3Vlc3QgVk1zIHZpYSBNU1Igd3JpdGVzLCBDUFVJRCwgYW5kIEtWTSBpb2N0bHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgaGFuZGxpbmcgVFNDIHN5bmNocm9uaXphdGlvbiBhbmQgZ3Vlc3QgdGltZSB1cGRhdGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDA6Mzk6MDIuOTg1NzI0MzI5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzIzNTM3NjIzNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIixcbiAgICBcIktWTV9BTURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fc3luY2hyb25pemVfdHNjXCIsXG4gICAgXCJrdm1fZ3Vlc3RfdGltZV91cGRhdGVcIixcbiAgICBcImt2bV9nZXRfd2FsbF9jbG9ja19lcG9jaFwiLFxuICAgIFwia3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldFwiLFxuICAgIFwia3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgS1ZNIHg4NiBUU0MgKFRpbWUgU3RhbXAgQ291bnRlcikgaGFuZGxpbmcsIGluY2x1ZGluZyBUU0Mgc2NhbGluZywgbWFzdGVyIGNsb2NrIHVwZGF0ZXMsIGFuZCB3YWxsIGNsb2NrIGVwb2NoIGNhbGN1bGF0aW9ucy4gVGhpcyBpcyBjb3JlIGh5cGVydmlzb3IgbG9naWMgcmVhY2hhYmxlIGZyb20gZ3Vlc3QgVk1zIHZpYSBNU1Igd3JpdGVzLCBDUFVJRCwgYW5kIEtWTSBpb2N0bHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgaGFuZGxpbmcgVFNDIHN5bmNocm9uaXphdGlvbiBhbmQgZ3Vlc3QgdGltZSB1cGRhdGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMDozOTowMi45ODU3Mjg2NzlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzY3OTc5ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyNjI0NDQ0YzUyMGI4NDczM2U5MmY2NWVkZTI2ZDBmZmI1YjUyZjg4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDUgMDA6Mzk6MDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG5pbmRleCAyODM4NDc2MTlmZjg4Li4yODc4YTUxODFjZDliIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuQEAgLTg2NCw3ICs4NjQsNyBAQCBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7XFxuIFxcdGdwYV90IHRpbWU7XFxuIFxcdHM4ICBwdmNsb2NrX3RzY19zaGlmdDtcXG4gXFx0dTMyIHB2Y2xvY2tfdHNjX211bDtcXG4tXFx0dW5zaWduZWQgaW50IGh3X3RzY19raHo7XFxuK1xcdHU2NCBod190c2NfaHo7XFxuIFxcdHN0cnVjdCBnZm5fdG9fcGZuX2NhY2hlIHB2X3RpbWU7XFxuIFxcdC8qIHNldCBndWVzdCBzdG9wcGVkIGZsYWcgaW4gcHZjbG9jayBmbGFncyBmaWVsZCAqL1xcbiBcXHRib29sIHB2Y2xvY2tfc2V0X2d1ZXN0X3N0b3BwZWRfcmVxdWVzdDtcXG5AQCAtMTIzNiw2ICsxMjM2LDcgQEAgc3RydWN0IGt2bV9hcmNoIHtcXG4gXFx0dTY0IGxhc3RfdHNjX3dyaXRlO1xcbiBcXHR1MzIgbGFzdF90c2Nfa2h6O1xcbiBcXHR1NjQgbGFzdF90c2Nfb2Zmc2V0O1xcbitcXHR1NjQgbGFzdF90c2Nfc2NhbGluZ19yYXRpbztcXG4gXFx0dTY0IGN1cl90c2NfbnNlYztcXG4gXFx0dTY0IGN1cl90c2Nfd3JpdGU7XFxuIFxcdHU2NCBjdXJfdHNjX29mZnNldDtcXG5AQCAtMTI1MSw2ICsxMjUyLDkgQEAgc3RydWN0IGt2bV9hcmNoIHtcXG4gXFx0dTY0IG1hc3Rlcl9rZXJuZWxfbnM7XFxuIFxcdHU2NCBtYXN0ZXJfY3ljbGVfbm93O1xcbiBcXHRzdHJ1Y3QgcmF0ZWxpbWl0X3N0YXRlIGt2bWNsb2NrX3VwZGF0ZV9ycztcXG4rXFx0dTY0IG1hc3Rlcl90c2Nfc2NhbGluZ19yYXRpbztcXG4rXFx0czggIG1hc3Rlcl90c2Nfc2hpZnQ7XFxuK1xcdHUzMiBtYXN0ZXJfdHNjX211bDtcXG4gXFxuICNpZmRlZiBDT05GSUdfS1ZNX0hZUEVSVlxcbiBcXHRzdHJ1Y3Qga3ZtX2h2IGh5cGVydjtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2NwdWlkLmMgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuY1xcbmluZGV4IDllOWNmNjUzOGE5NmUuLjcwNDlmNWE1NTk3YjQgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL2NwdWlkLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vY3B1aWQuY1xcbkBAIC0xNiw2ICsxNiw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC92bWFsbG9jLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC91YWNjZXNzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9zdGF0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC91bml0cy5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9wcm9jZXNzb3IuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS91c2VyLmhcXHUwMDNlXFxuQEAgLTIxNDYsNyArMjE0Nyw3IEBAIGJvb2wga3ZtX2NwdWlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyICplYXgsIHUzMiAqZWJ4LFxcbiBcXHRcXHRcXHRcXHQqZWN4ID0gdmNwdS1cXHUwMDNlYXJjaC5wdmNsb2NrX3RzY19tdWw7XFxuIFxcdFxcdFxcdFxcdCplZHggPSB2Y3B1LVxcdTAwM2VhcmNoLnB2Y2xvY2tfdHNjX3NoaWZ0O1xcbiBcXHRcXHRcXHR9IGVsc2UgaWYgKGluZGV4ID09IDIpIHtcXG4tXFx0XFx0XFx0XFx0KmVheCA9IHZjcHUtXFx1MDAzZWFyY2guaHdfdHNjX2toejtcXG4rXFx0XFx0XFx0XFx0KmVheCA9IGRpdl91NjQodmNwdS1cXHUwMDNlYXJjaC5od190c2NfaHosIEhaX1BFUl9LSFopO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFx0fSBlbHNlIHtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21zcnMuYyBiL2FyY2gveDg2L2t2bS9tc3JzLmNcXG5pbmRleCA2NmZhNzE0MGQ2NWQ5Li4yMmNlYjM5ZDQxZjY2IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9tc3JzLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vbXNycy5jXFxuQEAgLTE2MzEsNyArMTYzMSw4IEBAIGludCBrdm1fc2V0X21zcl9jb21tb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKVxcbiBcXHRcXHRpZiAobXNyX2luZm8tXFx1MDAzZWhvc3RfaW5pdGlhdGVkKSB7XFxuIFxcdFxcdFxcdGt2bV9zeW5jaHJvbml6ZV90c2ModmNwdSwgXFx1MDAyNmRhdGEpO1xcbiBcXHRcXHR9IGVsc2UgaWYgKCF2Y3B1LVxcdTAwM2VhcmNoLmd1ZXN0X3RzY19wcm90ZWN0ZWQpIHtcXG4tXFx0XFx0XFx0dTY0IGFkaiA9IGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXQodmNwdSwgZGF0YSkgLSB2Y3B1LVxcdTAwM2VhcmNoLmwxX3RzY19vZmZzZXQ7XFxuK1xcdFxcdFxcdHU2NCBhZGogPSBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0KHZjcHUsIHJkdHNjKCksIGRhdGEpIC1cXG4rXFx0XFx0XFx0XFx0ICB2Y3B1LVxcdTAwM2VhcmNoLmwxX3RzY19vZmZzZXQ7XFxuIFxcdFxcdFxcdGFkanVzdF90c2Nfb2Zmc2V0X2d1ZXN0KHZjcHUsIGFkaik7XFxuIFxcdFxcdFxcdHZjcHUtXFx1MDAzZWFyY2guaWEzMl90c2NfYWRqdXN0X21zciArPSBhZGo7XFxuIFxcdFxcdH1cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zdm0uYyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcXG5pbmRleCA5ZDYwN2I5OGJkMDY3Li4zMDU3Y2E3MDUxZGIxIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jXFxuQEAgLTU2MDIsNyArNTYwMiw4IEBAIHN0YXRpYyBfX2luaXQgaW50IHN2bV9oYXJkd2FyZV9zZXR1cCh2b2lkKVxcbiBcXHRcXHRcXHRcXHQgICAgIFhGRUFUVVJFX01BU0tfQk5EQ1NSKTtcXG4gXFxuIFxcdGlmICh0c2Nfc2NhbGluZykge1xcbi1cXHRcXHRpZiAoIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9UU0NSQVRFTVNSKSkge1xcbitcXHRcXHRpZiAoIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9UU0NSQVRFTVNSKSB8fFxcbitcXHRcXHQgICAgIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9DT05TVEFOVF9UU0MpKSB7XFxuIFxcdFxcdFxcdHRzY19zY2FsaW5nID0gZmFsc2U7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdHByX2luZm8oXFxcIlRTQyBzY2FsaW5nIHN1cHBvcnRlZFxcXFxuXFxcIik7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdm14LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXFxuaW5kZXggZTNiZmU2YWNhMWEwZS4uOWFiZDJlZDNhZWFlMiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC92bXguY1xcbkBAIC0yODQxLDYgKzI4NDEsMTYgQEAgc3RhdGljIGludCBzZXR1cF92bWNzX2NvbmZpZyhzdHJ1Y3Qgdm1jc19jb25maWcgKnZtY3NfY29uZixcXG4gXFx0aWYgKCFjcHVfaGFzX3NneCgpKVxcbiBcXHRcXHRfY3B1X2Jhc2VkXzJuZF9leGVjX2NvbnRyb2wgXFx1MDAyNj0gflNFQ09OREFSWV9FWEVDX0VOQ0xTX0VYSVRJTkc7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBLVk0gZG9lc24ndCByZS1kZXJpdmUgdGhlIFRTQyBzY2FsaW5nIHJhdGlvIHdoZW4gdGhlIGhvc3QgVFNDXFxuK1xcdCAqIGZyZXF1ZW5jeSBjaGFuZ2VzLCBzbyBUU0Mgc2NhbGluZyBpcyBvbmx5IHVzYWJsZSB3aXRoIGEgY29uc3RhbnRcXG4rXFx0ICogVFNDLiAgQ2xlYXIgdGhlIGNvbnRyb2wgaGVyZSByYXRoZXIgdGhhbiBpbiB2bXhfaGFyZHdhcmVfc2V0dXAoKSBzb1xcbitcXHQgKiB0aGF0IHRoZSBwZXItQ1BVIGNvbmZpZ3MgcmVjb21wdXRlZCBieSB2bXhfY2hlY2tfcHJvY2Vzc29yX2NvbXBhdCgpXFxuK1xcdCAqIHN0YXkgY29uc2lzdGVudCB3aXRoIHRoZSBnb2xkZW4gdm1jc19jb25maWcuXFxuK1xcdCAqL1xcbitcXHRpZiAoIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9DT05TVEFOVF9UU0MpKVxcbitcXHRcXHRfY3B1X2Jhc2VkXzJuZF9leGVjX2NvbnRyb2wgXFx1MDAyNj0gflNFQ09OREFSWV9FWEVDX1RTQ19TQ0FMSU5HO1xcbitcXG4gXFx0aWYgKF9jcHVfYmFzZWRfZXhlY19jb250cm9sIFxcdTAwMjYgQ1BVX0JBU0VEX0FDVElWQVRFX1RFUlRJQVJZX0NPTlRST0xTKVxcbiBcXHRcXHRfY3B1X2Jhc2VkXzNyZF9leGVjX2NvbnRyb2wgPVxcbiBcXHRcXHRcXHRhZGp1c3Rfdm14X2NvbnRyb2xzNjQoS1ZNX09QVElPTkFMX1ZNWF9URVJUSUFSWV9WTV9FWEVDX0NPTlRST0wsXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xcbmluZGV4IGQ5NGI1OTE0MGM0NTIuLmNiZTRmZDM0NTdiNDQgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5jXFxuQEAgLTYxLDYgKzYxLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbV9lbmNyeXB0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdXNwZW5kLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbXAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VuaXRzLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjdHJhY2UvZXZlbnRzL2lwaS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdHJhY2UvZXZlbnRzL2t2bS5oXFx1MDAzZVxcbkBAIC04NzMsNyArODc0LDYgQEAgc3RhdGljIGlubGluZSBib29sIGt2bV92Y3B1X2V4aXRfcmVxdWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdCAgICAgICBrdm1fcmVxdWVzdF9wZW5kaW5nKHZjcHUpIHx8IHhmZXJfdG9fZ3Vlc3RfbW9kZV93b3JrX3BlbmRpbmcoKTtcXG4gfVxcbiBcXG4tI2lmZGVmIENPTkZJR19YODZfNjRcXG4gc3RydWN0IHB2Y2xvY2tfY2xvY2sge1xcbiBcXHRpbnQgdmNsb2NrX21vZGU7XFxuIFxcdHU2NCBjeWNsZV9sYXN0O1xcbkBAIC05MzEsMTMgKzkzMSw2IEBAIHN0YXRpYyBzNjQgZ2V0X2t2bWNsb2NrX2Jhc2VfbnModm9pZClcXG4gXFx0LyogQ291bnQgdXAgZnJvbSBib290IHRpbWUsIGJ1dCB3aXRoIHRoZSBmcmVxdWVuY3kgb2YgdGhlIHJhdyBjbG9jay4gICovXFxuIFxcdHJldHVybiBrdGltZV90b19ucyhrdGltZV9hZGQoa3RpbWVfZ2V0X3JhdygpLCBwdmNsb2NrX2d0b2RfZGF0YS5vZmZzX2Jvb3QpKTtcXG4gfVxcbi0jZWxzZVxcbi1zdGF0aWMgczY0IGdldF9rdm1jbG9ja19iYXNlX25zKHZvaWQpXFxuLXtcXG4tXFx0LyogTWFzdGVyIGNsb2NrIG5vdCB1c2VkLCBzbyB3ZSBjYW4ganVzdCB1c2UgQ0xPQ0tfQk9PVFRJTUUuICAqL1xcbi1cXHRyZXR1cm4ga3RpbWVfZ2V0X2Jvb3R0aW1lX25zKCk7XFxuLX1cXG4tI2VuZGlmXFxuIFxcbiBzdGF0aWMgdWludDMyX3QgZGl2X2ZyYWModWludDMyX3QgZGl2aWRlbmQsIHVpbnQzMl90IGRpdmlzb3IpXFxuIHtcXG5AQCAtOTQ1LDMyICs5MzgsNTcgQEAgc3RhdGljIHVpbnQzMl90IGRpdl9mcmFjKHVpbnQzMl90IGRpdmlkZW5kLCB1aW50MzJfdCBkaXZpc29yKVxcbiBcXHRyZXR1cm4gZGl2aWRlbmQ7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGt2bV9nZXRfdGltZV9zY2FsZSh1aW50NjRfdCBzY2FsZWRfaHosIHVpbnQ2NF90IGJhc2VfaHosXFxuK3N0YXRpYyB2b2lkIGt2bV9nZXRfdGltZV9zY2FsZSh1NjQgc2NhbGVkX2h6LCB1NjQgYmFzZV9oeixcXG4gXFx0XFx0XFx0ICAgICAgIHM4ICpwc2hpZnQsIHUzMiAqcG11bHRpcGxpZXIpXFxuIHtcXG4tXFx0dWludDY0X3Qgc2NhbGVkNjQ7XFxuLVxcdGludDMyX3QgIHNoaWZ0ID0gMDtcXG4tXFx0dWludDY0X3QgdHBzNjQ7XFxuLVxcdHVpbnQzMl90IHRwczMyO1xcbitcXHR1NjQgc2NhbGVkX2h6X3U2NCA9IHNjYWxlZF9oejtcXG4rXFx0czMyIHNoaWZ0ID0gMDtcXG4rXFx0dTY0IGJhc2VfaHpfdTY0O1xcbitcXHR1MzIgYmFzZTMyO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIGEgZml4ZWQtcG9pbnQgbXVsdGlwbGllciBhbmQgc2hpZnQgc3VjaFxcbitcXHQgKiB0aGF0OlxcbitcXHQgKiAgIHRpbWVfbnMgPSAodHNjX2N5Y2xlcyBcXHUwMDNjXFx1MDAzYyBzaGlmdCkgKiBtdWx0aXBsaWVyIFxcdTAwM2VcXHUwMDNlIDMyXFxuK1xcdCAqXFxuK1xcdCAqIFdoZXJlIHRzY19jeWNsZXMgdGljayBhdCBiYXNlX2h6LCBhbmQgdGltZV9ucyBzaG91bGQgY291bnQgYXRcXG4rXFx0ICogc2NhbGVkX2h6ICh0eXBpY2FsbHkgTlNFQ19QRVJfU0VDIGZvciBhIFRTQ+KGkm5hbm9zZWNvbmRzIGNvbnZlcnNpb24pLlxcbitcXHQgKlxcbitcXHQgKiBUaGUgbXVsdGlwbGllciBpczogKHNjYWxlZF9oeiBcXHUwMDNjXFx1MDAzYyAzMikgLyBiYXNlX2h6LCBhZGp1c3RlZCBieSBzaGlmdFxcbitcXHQgKiB0byBrZWVwIGV2ZXJ5dGhpbmcgaW4gcmFuZ2UuXFxuK1xcdCAqL1xcbiBcXG4tXFx0dHBzNjQgPSBiYXNlX2h6O1xcbi1cXHRzY2FsZWQ2NCA9IHNjYWxlZF9oejtcXG4tXFx0d2hpbGUgKHRwczY0IFxcdTAwM2Ugc2NhbGVkNjQqMiB8fCB0cHM2NCBcXHUwMDI2IDB4ZmZmZmZmZmYwMDAwMDAwMFVMTCkge1xcbi1cXHRcXHR0cHM2NCBcXHUwMDNlXFx1MDAzZT0gMTtcXG4rXFx0YmFzZV9oel91NjQgPSBiYXNlX2h6O1xcbitcXG4rXFx0LypcXG4rXFx0ICogU3RhcnQgYnkgc2hpZnRpbmcgYmFzZV9oeiByaWdodCB1bnRpbCBpdCBmaXRzIGluIDMyIGJpdHMsIGFuZFxcbitcXHQgKiBpcyBsb3dlciB0aGFuIGRvdWJsZSB0aGUgdGFyZ2V0IHJhdGUuIFRoaXMgaW50cm9kdWNlcyBhIG5lZ2F0aXZlXFxuK1xcdCAqIHNoaWZ0IHZhbHVlIHdoaWNoIHdvdWxkIHJlc3VsdCBpbiBwdmNsb2NrX3NjYWxlX2RlbHRhKCkgc2hpZnRpbmdcXG4rXFx0ICogdGhlIGFjdHVhbCB0aWNrIGNvdW50IHJpZ2h0IGJlZm9yZSBwZXJmb3JtaW5nIHRoZSBtdWx0aXBsaWNhdGlvbi5cXG4rXFx0ICovXFxuK1xcdHdoaWxlIChiYXNlX2h6X3U2NCBcXHUwMDNlIHNjYWxlZF9oel91NjQgKiAyIHx8IGJhc2VfaHpfdTY0IFxcdTAwM2VcXHUwMDNlIDMyKSB7XFxuK1xcdFxcdGJhc2VfaHpfdTY0IFxcdTAwM2VcXHUwMDNlPSAxO1xcbiBcXHRcXHRzaGlmdC0tO1xcbiBcXHR9XFxuIFxcbi1cXHR0cHMzMiA9ICh1aW50MzJfdCl0cHM2NDtcXG4tXFx0d2hpbGUgKHRwczMyIFxcdTAwM2M9IHNjYWxlZDY0IHx8IHNjYWxlZDY0IFxcdTAwMjYgMHhmZmZmZmZmZjAwMDAwMDAwVUxMKSB7XFxuLVxcdFxcdGlmIChzY2FsZWQ2NCBcXHUwMDI2IDB4ZmZmZmZmZmYwMDAwMDAwMFVMTCB8fCB0cHMzMiBcXHUwMDI2IDB4ODAwMDAwMDApXFxuLVxcdFxcdFxcdHNjYWxlZDY0IFxcdTAwM2VcXHUwMDNlPSAxO1xcbitcXHQvKiBOb3cgdGhlIHNoaWZ0ZWQgYmFzZV9oeiBmaXRzIGluIDMyIGJpdHMuICovXFxuK1xcdGJhc2UzMiA9ICh1MzIpYmFzZV9oel91NjQ7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBOZXh0LCBzaGlmdCBzY2FsZWRfaHogcmlnaHQgdW50aWwgaXQgZml0cyBpbiAzMiBiaXRzLCBhbmQgZW5zdXJlXFxuK1xcdCAqIHRoYXQgdGhlIHNoaWZ0ZWQgYmFzZV9oeiBpcyBzdHJpY3RseSBsYXJnZXIgKHNvIHRoYXQgdGhlIHJlc3VsdCBvZiB0aGVcXG4rXFx0ICogZmluYWwgZGl2aXNpb24gYWxzbyBmaXRzIGluIDMyIGJpdHMpLlxcbitcXHQgKi9cXG4rXFx0d2hpbGUgKGJhc2UzMiBcXHUwMDNjPSBzY2FsZWRfaHpfdTY0IHx8IHNjYWxlZF9oel91NjQgXFx1MDAzZVxcdTAwM2UgMzIpIHtcXG4rXFx0XFx0aWYgKHNjYWxlZF9oel91NjQgXFx1MDAzZVxcdTAwM2UgMzIgfHwgYmFzZTMyIFxcdTAwMjYgQklUKDMxKSlcXG4rXFx0XFx0XFx0c2NhbGVkX2h6X3U2NCBcXHUwMDNlXFx1MDAzZT0gMTtcXG4gXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHR0cHMzMiBcXHUwMDNjXFx1MDAzYz0gMTtcXG4rXFx0XFx0XFx0YmFzZTMyIFxcdTAwM2NcXHUwMDNjPSAxO1xcbiBcXHRcXHRzaGlmdCsrO1xcbiBcXHR9XFxuIFxcbiBcXHQqcHNoaWZ0ID0gc2hpZnQ7XFxuLVxcdCpwbXVsdGlwbGllciA9IGRpdl9mcmFjKHNjYWxlZDY0LCB0cHMzMik7XFxuK1xcdCpwbXVsdGlwbGllciA9IGRpdl9mcmFjKHNjYWxlZF9oel91NjQsIGJhc2UzMik7XFxuIH1cXG4gXFxuICNpZmRlZiBDT05GSUdfWDg2XzY0XFxuQEAgLTEwNjEsMTEgKzEwNzksMTUgQEAgc3RhdGljIGludCBrdm1fc2V0X3RzY19raHooc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdXNlcl90c2Nfa2h6KVxcbiBcXG4gc3RhdGljIHU2NCBjb21wdXRlX2d1ZXN0X3RzYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHM2NCBrZXJuZWxfbnMpXFxuIHtcXG4tXFx0dTY0IHRzYyA9IHB2Y2xvY2tfc2NhbGVfZGVsdGEoa2VybmVsX25zLXZjcHUtXFx1MDAzZWFyY2gudGhpc190c2NfbnNlYyxcXG4tXFx0XFx0XFx0XFx0ICAgICAgdmNwdS1cXHUwMDNlYXJjaC52aXJ0dWFsX3RzY19tdWx0LFxcbi1cXHRcXHRcXHRcXHQgICAgICB2Y3B1LVxcdTAwM2VhcmNoLnZpcnR1YWxfdHNjX3NoaWZ0KTtcXG4tXFx0dHNjICs9IHZjcHUtXFx1MDAzZWFyY2gudGhpc190c2Nfd3JpdGU7XFxuLVxcdHJldHVybiB0c2M7XFxuK1xcdHM2NCBkZWx0YV9ucyA9IGtlcm5lbF9ucyAtIHZjcHUtXFx1MDAzZWFyY2gudGhpc190c2NfbnNlYztcXG4rXFx0dTY0IHRzYztcXG4rXFxuK1xcdC8qIEhhbmRsZSBuZWdhdGl2ZSBkZWx0YXMgZ3JhY2VmdWxseSAobWFzdGVyIGNsb2NrIHJlZiBtYXkgYmUgZWFybGllcikgKi9cXG4rXFx0dHNjID0gcHZjbG9ja19zY2FsZV9kZWx0YShhYnMoZGVsdGFfbnMpLFxcbitcXHRcXHRcXHRcXHQgIHZjcHUtXFx1MDAzZWFyY2gudmlydHVhbF90c2NfbXVsdCxcXG4rXFx0XFx0XFx0XFx0ICB2Y3B1LVxcdTAwM2VhcmNoLnZpcnR1YWxfdHNjX3NoaWZ0KTtcXG4rXFxuK1xcdHJldHVybiB2Y3B1LVxcdTAwM2VhcmNoLnRoaXNfdHNjX3dyaXRlICsgKGRlbHRhX25zIFxcdTAwM2U9IDAgPyB0c2MgOiAtdHNjKTtcXG4gfVxcbiBcXG4gI2lmZGVmIENPTkZJR19YODZfNjRcXG5AQCAtMTEzMSwxMSArMTE1MywxMiBAQCB1NjQga3ZtX3NjYWxlX3RzYyh1NjQgdHNjLCB1NjQgcmF0aW8pXFxuIFxcdHJldHVybiBfdHNjO1xcbiB9XFxuIFxcbi11NjQga3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB0YXJnZXRfdHNjKVxcbit1NjQga3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBob3N0X3RzYyxcXG4rXFx0XFx0XFx0ICAgICAgdTY0IHRhcmdldF90c2MpXFxuIHtcXG4gXFx0dTY0IHRzYztcXG4gXFxuLVxcdHRzYyA9IGt2bV9zY2FsZV90c2MocmR0c2MoKSwgdmNwdS1cXHUwMDNlYXJjaC5sMV90c2Nfc2NhbGluZ19yYXRpbyk7XFxuK1xcdHRzYyA9IGt2bV9zY2FsZV90c2MoaG9zdF90c2MsIHZjcHUtXFx1MDAzZWFyY2gubDFfdHNjX3NjYWxpbmdfcmF0aW8pO1xcbiBcXG4gXFx0cmV0dXJuIHRhcmdldF90c2MgLSB0c2M7XFxuIH1cXG5AQCAtMTI1NCw2ICsxMjc3LDcgQEAgc3RhdGljIHZvaWQgX19rdm1fc3luY2hyb25pemVfdHNjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG9mZnNldCwgdTY0IHRzYyxcXG4gXFx0a3ZtLVxcdTAwM2VhcmNoLmxhc3RfdHNjX3dyaXRlID0gdHNjO1xcbiBcXHRrdm0tXFx1MDAzZWFyY2gubGFzdF90c2Nfa2h6ID0gdmNwdS1cXHUwMDNlYXJjaC52aXJ0dWFsX3RzY19raHo7XFxuIFxcdGt2bS1cXHUwMDNlYXJjaC5sYXN0X3RzY19vZmZzZXQgPSBvZmZzZXQ7XFxuK1xcdGt2bS1cXHUwMDNlYXJjaC5sYXN0X3RzY19zY2FsaW5nX3JhdGlvID0gdmNwdS1cXHUwMDNlYXJjaC5sMV90c2Nfc2NhbGluZ19yYXRpbztcXG4gXFxuIFxcdHZjcHUtXFx1MDAzZWFyY2gubGFzdF9ndWVzdF90c2MgPSB0c2M7XFxuIFxcbkBAIC0xMjk2LDcgKzEzMjAsNyBAQCB2b2lkIGt2bV9zeW5jaHJvbml6ZV90c2Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKnVzZXJfdmFsdWUpXFxuIFxcdGJvb2wgc3luY2hyb25pemluZyA9IGZhbHNlO1xcbiBcXG4gXFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gudHNjX3dyaXRlX2xvY2ssIGZsYWdzKTtcXG4tXFx0b2Zmc2V0ID0ga3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldCh2Y3B1LCBkYXRhKTtcXG4rXFx0b2Zmc2V0ID0ga3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldCh2Y3B1LCByZHRzYygpLCBkYXRhKTtcXG4gXFx0bnMgPSBnZXRfa3ZtY2xvY2tfYmFzZV9ucygpO1xcbiBcXHRlbGFwc2VkID0gbnMgLSBrdm0tXFx1MDAzZWFyY2gubGFzdF90c2NfbnNlYztcXG4gXFxuQEAgLTEzNDUsNyArMTM2OSw3IEBAIHZvaWQga3ZtX3N5bmNocm9uaXplX3RzYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqdXNlcl92YWx1ZSlcXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0dTY0IGRlbHRhID0gbnNlY190b19jeWNsZXModmNwdSwgZWxhcHNlZCk7XFxuIFxcdFxcdFxcdGRhdGEgKz0gZGVsdGE7XFxuLVxcdFxcdFxcdG9mZnNldCA9IGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXQodmNwdSwgZGF0YSk7XFxuK1xcdFxcdFxcdG9mZnNldCA9IGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXQodmNwdSwgcmR0c2MoKSwgZGF0YSk7XFxuIFxcdFxcdH1cXG4gXFx0XFx0bWF0Y2hlZCA9IHRydWU7XFxuIFxcdH1cXG5AQCAtMTU2Niw2ICsxNTkwLDggQEAgc3RhdGljIGJvb2wga3ZtX2dldF93YWxsdGltZV9hbmRfY2xvY2tyZWFkKHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcXG4gICpcXG4gICovXFxuIFxcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfY3B1X3RzY19raHoodm9pZCk7XFxuK1xcbiBzdGF0aWMgdm9pZCBwdmNsb2NrX3VwZGF0ZV92bV9ndG9kX2NvcHkoc3RydWN0IGt2bSAqa3ZtKVxcbiB7XFxuICNpZmRlZiBDT05GSUdfWDg2XzY0XFxuQEAgLTE1ODksOSArMTYxNSwzMCBAQCBzdGF0aWMgdm9pZCBwdmNsb2NrX3VwZGF0ZV92bV9ndG9kX2NvcHkoc3RydWN0IGt2bSAqa3ZtKVxcbiBcXHRcXHRcXHRcXHRcXHUwMDI2XFx1MDAyNiAha2EtXFx1MDAzZWJhY2t3YXJkc190c2Nfb2JzZXJ2ZWRcXG4gXFx0XFx0XFx0XFx0XFx1MDAyNlxcdTAwMjYgIWthLVxcdTAwM2Vib290X3ZjcHVfcnVuc19vbGRfa3ZtY2xvY2s7XFxuIFxcbi1cXHRpZiAoa2EtXFx1MDAzZXVzZV9tYXN0ZXJfY2xvY2spXFxuK1xcdGlmIChrYS1cXHUwMDNldXNlX21hc3Rlcl9jbG9jaykge1xcbitcXHRcXHR1NjQgdHNjX2h6O1xcbitcXG4gXFx0XFx0YXRvbWljX3NldChcXHUwMDI2a3ZtX2d1ZXN0X2hhc19tYXN0ZXJfY2xvY2ssIDEpO1xcbiBcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQ29weSB0aGUgc2NhbGluZyByYXRpbyBhbmQgcHJlY29tcHV0ZSB0aGUgbXVsL3NoaWZ0IGZvclxcbitcXHRcXHQgKiBjb252ZXJ0aW5nIGd1ZXN0IFRTQyB0byBuYW5vc2Vjb25kcy4gVGhlc2UgYXJlIHVzZWQgYnlcXG4rXFx0XFx0ICogZ2V0X2t2bWNsb2NrKCkgdG8gY29tcHV0ZSBrdm1jbG9jayBmcm9tIHRoZSBob3N0IFRTQ1xcbitcXHRcXHQgKiB3aXRob3V0IG5lZWRpbmcgYSB2Q1BVIHJlZmVyZW5jZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGthLVxcdTAwM2VtYXN0ZXJfdHNjX3NjYWxpbmdfcmF0aW8gPSBrYS1cXHUwMDNlbGFzdF90c2Nfc2NhbGluZ19yYXRpbztcXG4rXFx0XFx0dHNjX2h6ID0gKHU2NClnZXRfY3B1X3RzY19raHooKSAqIEhaX1BFUl9LSFo7XFxuK1xcdFxcdGlmICh0c2NfaHogXFx1MDAyNlxcdTAwMjYga3ZtX2NhcHMuaGFzX3RzY19jb250cm9sKVxcbitcXHRcXHRcXHR0c2NfaHogPSBrdm1fc2NhbGVfdHNjKHRzY19oeixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIGthLVxcdTAwM2VtYXN0ZXJfdHNjX3NjYWxpbmdfcmF0aW8pO1xcbitcXHRcXHRpZiAodHNjX2h6KVxcbitcXHRcXHRcXHRrdm1fZ2V0X3RpbWVfc2NhbGUoTlNFQ19QRVJfU0VDLCB0c2NfaHosXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZrYS1cXHUwMDNlbWFzdGVyX3RzY19zaGlmdCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNmthLVxcdTAwM2VtYXN0ZXJfdHNjX211bCk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0a2EtXFx1MDAzZXVzZV9tYXN0ZXJfY2xvY2sgPSBmYWxzZTtcXG4rXFx0fVxcbitcXG4gXFx0dmNsb2NrX21vZGUgPSBwdmNsb2NrX2d0b2RfZGF0YS5jbG9jay52Y2xvY2tfbW9kZTtcXG4gXFx0dHJhY2Vfa3ZtX3VwZGF0ZV9tYXN0ZXJfY2xvY2soa2EtXFx1MDAzZXVzZV9tYXN0ZXJfY2xvY2ssIHZjbG9ja19tb2RlLFxcbiBcXHRcXHRcXHRcXHRcXHR2Y3B1c19tYXRjaGVkKTtcXG5AQCAtMTY1OCwzOSArMTcwNSw0OSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfY3B1X3RzY19raHoodm9pZClcXG4gfVxcbiBcXG4gLyogQ2FsbGVkIHdpdGhpbiByZWFkX3NlcWNvdW50X2JlZ2luL3JldHJ5IGZvciBrdm0tXFx1MDAzZXB2Y2xvY2tfc2MuICAqL1xcbi1zdGF0aWMgdm9pZCBfX2dldF9rdm1jbG9jayhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fY2xvY2tfZGF0YSAqZGF0YSlcXG4rc3RhdGljIGJvb2wgX19nZXRfa3ZtY2xvY2tfbWFzdGVyX2Nsb2NrKHN0cnVjdCBrdm0gKmt2bSxcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IGt2bV9jbG9ja19kYXRhICpkYXRhKVxcbiB7XFxuKyNpZmRlZiBDT05GSUdfWDg2XzY0XFxuIFxcdHN0cnVjdCBrdm1fYXJjaCAqa2EgPSBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoO1xcbiBcXHRzdHJ1Y3QgcHZjbG9ja192Y3B1X3RpbWVfaW5mbyBodl9jbG9jaztcXG4rXFx0c3RydWN0IHRpbWVzcGVjNjQgdHM7XFxuIFxcbi1cXHQvKiBib3RoIF9fdGhpc19jcHVfcmVhZCgpIGFuZCByZHRzYygpIHNob3VsZCBiZSBvbiB0aGUgc2FtZSBjcHUgKi9cXG4tXFx0Z2V0X2NwdSgpO1xcbitcXHRpZiAoIWthLVxcdTAwM2V1c2VfbWFzdGVyX2Nsb2NrKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRkYXRhLVxcdTAwM2VmbGFncyA9IDA7XFxuLVxcdGlmIChrYS1cXHUwMDNldXNlX21hc3Rlcl9jbG9jayBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgKHN0YXRpY19jcHVfaGFzKFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQykgfHwgX190aGlzX2NwdV9yZWFkKGNwdV90c2Nfa2h6KSkpIHtcXG4tI2lmZGVmIENPTkZJR19YODZfNjRcXG4tXFx0XFx0c3RydWN0IHRpbWVzcGVjNjQgdHM7XFxuK1xcdGlmICgha3ZtX2dldF93YWxsdGltZV9hbmRfY2xvY2tyZWFkKFxcdTAwMjZ0cywgXFx1MDAyNmRhdGEtXFx1MDAzZWhvc3RfdHNjKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4tXFx0XFx0aWYgKGt2bV9nZXRfd2FsbHRpbWVfYW5kX2Nsb2NrcmVhZChcXHUwMDI2dHMsIFxcdTAwMjZkYXRhLVxcdTAwM2Vob3N0X3RzYykpIHtcXG4tXFx0XFx0XFx0ZGF0YS1cXHUwMDNlcmVhbHRpbWUgPSB0cy50dl9uc2VjICsgTlNFQ19QRVJfU0VDICogdHMudHZfc2VjO1xcbi1cXHRcXHRcXHRkYXRhLVxcdTAwM2VmbGFncyB8PSBLVk1fQ0xPQ0tfUkVBTFRJTUUgfCBLVk1fQ0xPQ0tfSE9TVF9UU0M7XFxuLVxcdFxcdH0gZWxzZVxcbi0jZW5kaWZcXG4tXFx0XFx0ZGF0YS1cXHUwMDNlaG9zdF90c2MgPSByZHRzYygpO1xcbi1cXG4tXFx0XFx0ZGF0YS1cXHUwMDNlZmxhZ3MgfD0gS1ZNX0NMT0NLX1RTQ19TVEFCTEU7XFxuLVxcdFxcdGh2X2Nsb2NrLnRzY190aW1lc3RhbXAgPSBrYS1cXHUwMDNlbWFzdGVyX2N5Y2xlX25vdztcXG4tXFx0XFx0aHZfY2xvY2suc3lzdGVtX3RpbWUgPSBrYS1cXHUwMDNlbWFzdGVyX2tlcm5lbF9ucyArIGthLVxcdTAwM2Vrdm1jbG9ja19vZmZzZXQ7XFxuLVxcdFxcdGt2bV9nZXRfdGltZV9zY2FsZShOU0VDX1BFUl9TRUMsIGdldF9jcHVfdHNjX2toeigpICogMTAwMExMLFxcbi1cXHRcXHRcXHRcXHQgICBcXHUwMDI2aHZfY2xvY2sudHNjX3NoaWZ0LFxcbi1cXHRcXHRcXHRcXHQgICBcXHUwMDI2aHZfY2xvY2sudHNjX3RvX3N5c3RlbV9tdWwpO1xcbi1cXHRcXHRkYXRhLVxcdTAwM2VjbG9jayA9IF9fcHZjbG9ja19yZWFkX2N5Y2xlcyhcXHUwMDI2aHZfY2xvY2ssIGRhdGEtXFx1MDAzZWhvc3RfdHNjKTtcXG4rXFx0ZGF0YS1cXHUwMDNlcmVhbHRpbWUgPSB0cy50dl9uc2VjICsgTlNFQ19QRVJfU0VDICogdHMudHZfc2VjO1xcbitcXHRkYXRhLVxcdTAwM2VmbGFncyB8PSBLVk1fQ0xPQ0tfUkVBTFRJTUUgfCBLVk1fQ0xPQ0tfSE9TVF9UU0MgfFxcbitcXHRcXHQgICAgICAgS1ZNX0NMT0NLX1RTQ19TVEFCTEU7XFxuK1xcbitcXHRodl9jbG9jay50c2NfdGltZXN0YW1wID0ga2EtXFx1MDAzZW1hc3Rlcl9jeWNsZV9ub3c7XFxuK1xcdGh2X2Nsb2NrLnN5c3RlbV90aW1lID0ga2EtXFx1MDAzZW1hc3Rlcl9rZXJuZWxfbnMgKyBrYS1cXHUwMDNla3ZtY2xvY2tfb2Zmc2V0O1xcbitcXG4rXFx0LypcXG4rXFx0ICogVXNlIHRoZSBwcmVjb21wdXRlZCBndWVzdC1UU0MtYmFzZWQgbXVsL3NoaWZ0IHNvIHRoYXQgdGhlIGt2bWNsb2NrXFxuK1xcdCAqIHZhbHVlIG1hdGNoZXMgd2hhdCB0aGUgZ3Vlc3QgY29tcHV0ZXMgZnJvbSBpdHMgb3duIFRTQy5cXG4rXFx0ICovXFxuK1xcdGh2X2Nsb2NrLnRzY19zaGlmdCA9IGthLVxcdTAwM2VtYXN0ZXJfdHNjX3NoaWZ0O1xcbitcXHRodl9jbG9jay50c2NfdG9fc3lzdGVtX211bCA9IGthLVxcdTAwM2VtYXN0ZXJfdHNjX211bDtcXG4rXFxuK1xcdGlmIChrdm1fY2Fwcy5oYXNfdHNjX2NvbnRyb2wpIHtcXG4rXFx0XFx0dTY0IHRzY19kZWx0YSA9IGRhdGEtXFx1MDAzZWhvc3RfdHNjIC0ga2EtXFx1MDAzZW1hc3Rlcl9jeWNsZV9ub3c7XFxuK1xcbitcXHRcXHR0c2NfZGVsdGEgPSBrdm1fc2NhbGVfdHNjKHRzY19kZWx0YSwga2EtXFx1MDAzZW1hc3Rlcl90c2Nfc2NhbGluZ19yYXRpbyk7XFxuK1xcdFxcdGRhdGEtXFx1MDAzZWNsb2NrID0gaHZfY2xvY2suc3lzdGVtX3RpbWUgK1xcbitcXHRcXHRcXHQgICAgICBwdmNsb2NrX3NjYWxlX2RlbHRhKHRzY19kZWx0YSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBodl9jbG9jay50c2NfdG9fc3lzdGVtX211bCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBodl9jbG9jay50c2Nfc2hpZnQpO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRkYXRhLVxcdTAwM2VjbG9jayA9IGdldF9rdm1jbG9ja19iYXNlX25zKCkgKyBrYS1cXHUwMDNla3ZtY2xvY2tfb2Zmc2V0O1xcbitcXHRcXHRkYXRhLVxcdTAwM2VjbG9jayA9IF9fcHZjbG9ja19yZWFkX2N5Y2xlcyhcXHUwMDI2aHZfY2xvY2ssIGRhdGEtXFx1MDAzZWhvc3RfdHNjKTtcXG4gXFx0fVxcbi1cXG4tXFx0cHV0X2NwdSgpO1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rI2Vsc2VcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbisjZW5kaWZcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgZ2V0X2t2bWNsb2NrKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9jbG9ja19kYXRhICpkYXRhKVxcbkBAIC0xNjk5LDggKzE3NTYsMTEgQEAgc3RhdGljIHZvaWQgZ2V0X2t2bWNsb2NrKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9jbG9ja19kYXRhICpkYXRhKVxcbiBcXHR1bnNpZ25lZCBzZXE7XFxuIFxcbiBcXHRkbyB7XFxuK1xcdFxcdGRhdGEtXFx1MDAzZWZsYWdzID0gMDtcXG4rXFxuIFxcdFxcdHNlcSA9IHJlYWRfc2VxY291bnRfYmVnaW4oXFx1MDAyNmthLVxcdTAwM2VwdmNsb2NrX3NjKTtcXG4tXFx0XFx0X19nZXRfa3ZtY2xvY2soa3ZtLCBkYXRhKTtcXG4rXFx0XFx0aWYgKCFfX2dldF9rdm1jbG9ja19tYXN0ZXJfY2xvY2soa3ZtLCBkYXRhKSlcXG4rXFx0XFx0XFx0ZGF0YS1cXHUwMDNlY2xvY2sgPSBnZXRfa3ZtY2xvY2tfYmFzZV9ucygpICsga2EtXFx1MDAzZWt2bWNsb2NrX29mZnNldDtcXG4gXFx0fSB3aGlsZSAocmVhZF9zZXFjb3VudF9yZXRyeShcXHUwMDI2a2EtXFx1MDAzZXB2Y2xvY2tfc2MsIHNlcSkpO1xcbiB9XFxuIFxcbkBAIC0xNzYyLDM2ICsxODIyLDQ1IEBAIHN0YXRpYyB2b2lkIGt2bV9zZXR1cF9ndWVzdF9wdmNsb2NrKHN0cnVjdCBwdmNsb2NrX3ZjcHVfdGltZV9pbmZvICpyZWZfaHZfY2xvY2ssXFxuIFxcbiBpbnQga3ZtX2d1ZXN0X3RpbWVfdXBkYXRlKHN0cnVjdCBrdm1fdmNwdSAqdilcXG4ge1xcbitcXHR1NjQgdGd0X3RzY19oeiwgdHNjX3RpbWVzdGFtcCwgaG9zdF90c2MsIG1hc3Rlcl90c2MsIG1hc3Rlcl9ucztcXG4rXFx0c3RydWN0IGt2bV9hcmNoICprYSBfX21heWJlX3VudXNlZCA9IFxcdTAwMjZ2LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2g7XFxuIFxcdHN0cnVjdCBwdmNsb2NrX3ZjcHVfdGltZV9pbmZvIGh2X2Nsb2NrID0ge307XFxuLVxcdHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHRndF90c2Nfa2h6O1xcbi1cXHR1bnNpZ25lZCBzZXE7XFxuIFxcdHN0cnVjdCBrdm1fdmNwdV9hcmNoICp2Y3B1ID0gXFx1MDAyNnYtXFx1MDAzZWFyY2g7XFxuLVxcdHN0cnVjdCBrdm1fYXJjaCAqa2EgPSBcXHUwMDI2di1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoO1xcbiBcXHRzNjQga2VybmVsX25zO1xcbi1cXHR1NjQgdHNjX3RpbWVzdGFtcCwgaG9zdF90c2M7XFxuLVxcdGJvb2wgdXNlX21hc3Rlcl9jbG9jaztcXG4tXFxuLVxcdGtlcm5lbF9ucyA9IDA7XFxuLVxcdGhvc3RfdHNjID0gMDtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIElmIHRoZSBob3N0IHVzZXMgVFNDIGNsb2NrLCB0aGVuIHBhc3N0aHJvdWdoIFRTQyBhcyBzdGFibGVcXG4gXFx0ICogdG8gdGhlIGd1ZXN0LlxcbiBcXHQgKi9cXG4rI2lmZGVmIENPTkZJR19YODZfNjRcXG4rXFx0Ym9vbCB1c2VfbWFzdGVyX2Nsb2NrO1xcbitcXHR1bnNpZ25lZCBpbnQgc2VxO1xcbitcXG4gXFx0ZG8ge1xcbiBcXHRcXHRzZXEgPSByZWFkX3NlcWNvdW50X2JlZ2luKFxcdTAwMjZrYS1cXHUwMDNlcHZjbG9ja19zYyk7XFxuIFxcdFxcdHVzZV9tYXN0ZXJfY2xvY2sgPSBrYS1cXHUwMDNldXNlX21hc3Rlcl9jbG9jaztcXG4tXFx0XFx0aWYgKHVzZV9tYXN0ZXJfY2xvY2spIHtcXG4tXFx0XFx0XFx0aG9zdF90c2MgPSBrYS1cXHUwMDNlbWFzdGVyX2N5Y2xlX25vdztcXG4tXFx0XFx0XFx0a2VybmVsX25zID0ga2EtXFx1MDAzZW1hc3Rlcl9rZXJuZWxfbnM7XFxuK1xcdFxcdGlmICghdXNlX21hc3Rlcl9jbG9jaylcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRpZiAoIWt2bV9nZXRfdGltZV9hbmRfY2xvY2tyZWFkKFxcdTAwMjZrZXJuZWxfbnMsIFxcdTAwMjZob3N0X3RzYykpIHtcXG4rXFx0XFx0XFx0dXNlX21hc3Rlcl9jbG9jayA9IGZhbHNlO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbi1cXHR9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KFxcdTAwMjZrYS1cXHUwMDNlcHZjbG9ja19zYywgc2VxKSk7XFxuIFxcbi1cXHQvKiBLZWVwIGlycSBkaXNhYmxlZCB0byBwcmV2ZW50IGNoYW5nZXMgdG8gdGhlIGNsb2NrICovXFxuLVxcdGxvY2FsX2lycV9zYXZlKGZsYWdzKTtcXG4tXFx0dGd0X3RzY19raHogPSBnZXRfY3B1X3RzY19raHooKTtcXG4tXFx0aWYgKHVubGlrZWx5KHRndF90c2Nfa2h6ID09IDApKSB7XFxuLVxcdFxcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcXG4rXFx0XFx0bWFzdGVyX3RzYyA9IGthLVxcdTAwM2VtYXN0ZXJfY3ljbGVfbm93O1xcbitcXHRcXHRtYXN0ZXJfbnMgPSBrYS1cXHUwMDNlbWFzdGVyX2tlcm5lbF9ucztcXG4rXFx0fSB3aGlsZSAocmVhZF9zZXFjb3VudF9yZXRyeShcXHUwMDI2a2EtXFx1MDAzZXB2Y2xvY2tfc2MsIHNlcSkpO1xcbisjZWxzZVxcbitcXHRjb25zdCBib29sIHVzZV9tYXN0ZXJfY2xvY2sgPSBmYWxzZTtcXG4rI2VuZGlmXFxuK1xcdC8qXFxuK1xcdCAqIEVuc3VyZSByZWFkaW5nIHRoZSBUU0MrZnJlcXVlbmN5IHBhaXIgaXMgZG9uZSBvbiB0aGUgc2FtZSBDUFUuICBXaGVuXFxuK1xcdCAqIE5PVCB1c2luZyB0aGUgbWFzdGVyIGNsb2NrLCB0aGUgVFNDIGZyZXF1ZW5jeSBtYXkgdmFyeSBiZXR3ZWVuIENQVXMuXFxuK1xcdCAqL1xcbitcXHRwcmVlbXB0X2Rpc2FibGUoKTtcXG4rXFx0dGd0X3RzY19oeiA9ICh1NjQpZ2V0X2NwdV90c2Nfa2h6KCkgKiBIWl9QRVJfS0haO1xcbitcXHRpZiAodW5saWtlbHkodGd0X3RzY19oeiA9PSAwKSkge1xcbitcXHRcXHRwcmVlbXB0X2VuYWJsZSgpO1xcbiBcXHRcXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfQ0xPQ0tfVVBEQVRFLCB2KTtcXG4gXFx0XFx0cmV0dXJuIDE7XFxuIFxcdH1cXG5AQCAtMTgyMCwyOCArMTg4OSw0MyBAQCBpbnQga3ZtX2d1ZXN0X3RpbWVfdXBkYXRlKHN0cnVjdCBrdm1fdmNwdSAqdilcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XFxuK1xcdC8qXFxuK1xcdCAqIFJlZnJlc2ggTDEncyBsYXN0IFxcXCJvYnNlcnZlZFxcXCIgVFNDIHRvIG1hdGNoIHRoZSBQViBjbG9jaydzIHRpbWVzdGFtcCxcXG4rXFx0ICogZS5nLiBzbyB0aGF0IHRoZSBndWVzdCBjYW4ndCBzZWUgYSBUU0MgdGhhdCdzIGJlaGluZCB0aGUgcmVmZXJlbmNlLlxcbitcXHQgKi9cXG4rXFx0dmNwdS1cXHUwMDNlbGFzdF9ndWVzdF90c2MgPSB0c2NfdGltZXN0YW1wO1xcbitcXG4rXFx0cHJlZW1wdF9lbmFibGUoKTtcXG4gXFxuIFxcdC8qIFdpdGggYWxsIHRoZSBpbmZvIHdlIGdvdCwgZmlsbCBpbiB0aGUgdmFsdWVzICovXFxuIFxcbiBcXHRpZiAoa3ZtX2NhcHMuaGFzX3RzY19jb250cm9sKSB7XFxuLVxcdFxcdHRndF90c2Nfa2h6ID0ga3ZtX3NjYWxlX3RzYyh0Z3RfdHNjX2toeixcXG4rXFx0XFx0dGd0X3RzY19oeiA9IGt2bV9zY2FsZV90c2ModGd0X3RzY19oeixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIHYtXFx1MDAzZWFyY2gubDFfdHNjX3NjYWxpbmdfcmF0aW8pO1xcbi1cXHRcXHR0Z3RfdHNjX2toeiA9IHRndF90c2Nfa2h6ID8gOiAxO1xcbitcXHRcXHR0Z3RfdHNjX2h6ID0gdGd0X3RzY19oeiA/IDogMTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKHVubGlrZWx5KHZjcHUtXFx1MDAzZWh3X3RzY19raHogIT0gdGd0X3RzY19raHopKSB7XFxuLVxcdFxcdGt2bV9nZXRfdGltZV9zY2FsZShOU0VDX1BFUl9TRUMsIHRndF90c2Nfa2h6ICogMTAwMExMLFxcbitcXHRpZiAodW5saWtlbHkodmNwdS1cXHUwMDNlaHdfdHNjX2h6ICE9IHRndF90c2NfaHopKSB7XFxuK1xcdFxcdGt2bV9nZXRfdGltZV9zY2FsZShOU0VDX1BFUl9TRUMsIHRndF90c2NfaHosXFxuIFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZ2Y3B1LVxcdTAwM2VwdmNsb2NrX3RzY19zaGlmdCxcXG4gXFx0XFx0XFx0XFx0ICAgXFx1MDAyNnZjcHUtXFx1MDAzZXB2Y2xvY2tfdHNjX211bCk7XFxuLVxcdFxcdHZjcHUtXFx1MDAzZWh3X3RzY19raHogPSB0Z3RfdHNjX2toejtcXG4rXFx0XFx0dmNwdS1cXHUwMDNlaHdfdHNjX2h6ID0gdGd0X3RzY19oejtcXG4gXFx0fVxcbiBcXG4gXFx0aHZfY2xvY2sudHNjX3NoaWZ0ID0gdmNwdS1cXHUwMDNlcHZjbG9ja190c2Nfc2hpZnQ7XFxuIFxcdGh2X2Nsb2NrLnRzY190b19zeXN0ZW1fbXVsID0gdmNwdS1cXHUwMDNlcHZjbG9ja190c2NfbXVsO1xcbi1cXHRodl9jbG9jay50c2NfdGltZXN0YW1wID0gdHNjX3RpbWVzdGFtcDtcXG4tXFx0aHZfY2xvY2suc3lzdGVtX3RpbWUgPSBrZXJuZWxfbnMgKyB2LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gua3ZtY2xvY2tfb2Zmc2V0O1xcbi1cXHR2Y3B1LVxcdTAwM2VsYXN0X2d1ZXN0X3RzYyA9IHRzY190aW1lc3RhbXA7XFxuK1xcdC8qXFxuK1xcdCAqIElmIHRoZSBtYXN0ZXIgY2xvY2sgaXMgTk9UIGluIHVzZSwgdGhlIHJlZmVyZW5jZSB0aW1lIHBsYWNlZCBpbiB0aGVcXG4rXFx0ICogaHZfY2xvY2sgaXMgXFxcIm5vd1xcXCIuICBJZiBtYXN0ZXIgY2xvY2sgaXMgaW4gdXNlLCB0aGUgcmVmZXJlbmNlIHRpbWUgaXNcXG4rXFx0ICogdGhlIG1hc3RlciBjbG9jaydzIHNuYXBzaG90IGZyb20gc29tZSB0aW1lIGluIHRoZSBwYXN0LCBub3QgXFxcIm5vd1xcXCIuXFxuK1xcdCAqL1xcbitcXHRpZiAodXNlX21hc3Rlcl9jbG9jaykge1xcbitcXHRcXHRodl9jbG9jay50c2NfdGltZXN0YW1wID0ga3ZtX3JlYWRfbDFfdHNjKHYsIG1hc3Rlcl90c2MpO1xcbitcXHRcXHRodl9jbG9jay5zeXN0ZW1fdGltZSA9IG1hc3Rlcl9ucyArIHYtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5rdm1jbG9ja19vZmZzZXQ7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGh2X2Nsb2NrLnRzY190aW1lc3RhbXAgPSB0c2NfdGltZXN0YW1wO1xcbitcXHRcXHRodl9jbG9jay5zeXN0ZW1fdGltZSA9IGtlcm5lbF9ucyArIHYtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC5rdm1jbG9ja19vZmZzZXQ7XFxuK1xcdH1cXG4gXFxuIFxcdC8qIElmIHRoZSBob3N0IHVzZXMgVFNDIGNsb2Nrc291cmNlLCB0aGVuIGl0IGlzIHN0YWJsZSAqL1xcbiBcXHRodl9jbG9jay5mbGFncyA9IDA7XFxuQEAgLTE5MDMsNjMgKzE5ODcsMjIgQEAgaW50IGt2bV9ndWVzdF90aW1lX3VwZGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnYpXFxuICAqIHdhbGxjbG9jayBhbmQga3ZtY2xvY2sgdGltZXMsIGFuZCBzdWJ0cmFjdGluZyBvbmUgZnJvbSB0aGUgb3RoZXIuXFxuICAqXFxuICAqIEZhbGwgYmFjayB0byB1c2luZyB0aGVpciB2YWx1ZXMgYXQgc2xpZ2h0bHkgZGlmZmVyZW50IG1vbWVudHMgYnlcXG4tICogY2FsbGluZyBrdGltZV9nZXRfcmVhbF9ucygpIGFuZCBnZXRfa3ZtY2xvY2tfbnMoKSBzZXBhcmF0ZWx5LlxcbisgKiBjYWxsaW5nIGt0aW1lX2dldF9yZWFsX25zKCkgYW5kIGdldF9rdm1jbG9jaygpIHNlcGFyYXRlbHkuXFxuICAqL1xcbiB1aW50NjRfdCBrdm1fZ2V0X3dhbGxfY2xvY2tfZXBvY2goc3RydWN0IGt2bSAqa3ZtKVxcbiB7XFxuLSNpZmRlZiBDT05GSUdfWDg2XzY0XFxuLVxcdHN0cnVjdCBwdmNsb2NrX3ZjcHVfdGltZV9pbmZvIGh2X2Nsb2NrO1xcbi1cXHRzdHJ1Y3Qga3ZtX2FyY2ggKmthID0gXFx1MDAyNmt2bS1cXHUwMDNlYXJjaDtcXG4tXFx0dW5zaWduZWQgbG9uZyBzZXEsIGxvY2FsX3RzY19raHo7XFxuLVxcdHN0cnVjdCB0aW1lc3BlYzY0IHRzO1xcbi1cXHR1aW50NjRfdCBob3N0X3RzYztcXG4tXFxuLVxcdGRvIHtcXG4tXFx0XFx0c2VxID0gcmVhZF9zZXFjb3VudF9iZWdpbihcXHUwMDI2a2EtXFx1MDAzZXB2Y2xvY2tfc2MpO1xcbi1cXG4tXFx0XFx0bG9jYWxfdHNjX2toeiA9IDA7XFxuLVxcdFxcdGlmICgha2EtXFx1MDAzZXVzZV9tYXN0ZXJfY2xvY2spXFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogVGhlIFRTQyByZWFkIGFuZCB0aGUgY2FsbCB0byBnZXRfY3B1X3RzY19raHooKSBtdXN0IGhhcHBlblxcbi1cXHRcXHQgKiBvbiB0aGUgc2FtZSBDUFUuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRnZXRfY3B1KCk7XFxuLVxcbi1cXHRcXHRsb2NhbF90c2Nfa2h6ID0gZ2V0X2NwdV90c2Nfa2h6KCk7XFxuLVxcbi1cXHRcXHRpZiAobG9jYWxfdHNjX2toeiBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgIWt2bV9nZXRfd2FsbHRpbWVfYW5kX2Nsb2NrcmVhZChcXHUwMDI2dHMsIFxcdTAwMjZob3N0X3RzYykpXFxuLVxcdFxcdFxcdGxvY2FsX3RzY19raHogPSAwOyAvKiBGYWxsIGJhY2sgdG8gb2xkIG1ldGhvZCAqL1xcbi1cXG4tXFx0XFx0cHV0X2NwdSgpO1xcbi1cXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogVGhlc2UgdmFsdWVzIG11c3QgYmUgc25hcHNob3R0ZWQgd2l0aGluIHRoZSBzZXFjb3VudCBsb29wLlxcbi1cXHRcXHQgKiBBZnRlciB0aGF0LCBpdCdzIGp1c3QgbWF0aGVtYXRpY3Mgd2hpY2ggY2FuIGhhcHBlbiBvbiBhbnlcXG4tXFx0XFx0ICogQ1BVIGF0IGFueSB0aW1lLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0aHZfY2xvY2sudHNjX3RpbWVzdGFtcCA9IGthLVxcdTAwM2VtYXN0ZXJfY3ljbGVfbm93O1xcbi1cXHRcXHRodl9jbG9jay5zeXN0ZW1fdGltZSA9IGthLVxcdTAwM2VtYXN0ZXJfa2VybmVsX25zICsga2EtXFx1MDAzZWt2bWNsb2NrX29mZnNldDtcXG4rXFx0c3RydWN0IGt2bV9jbG9ja19kYXRhIGRhdGE7XFxuIFxcbi1cXHR9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KFxcdTAwMjZrYS1cXHUwMDNlcHZjbG9ja19zYywgc2VxKSk7XFxuK1xcdGdldF9rdm1jbG9jayhrdm0sIFxcdTAwMjZkYXRhKTtcXG4gXFxuIFxcdC8qXFxuLVxcdCAqIElmIHRoZSBjb25kaXRpb25zIHdlcmUgcmlnaHQsIGFuZCBvYnRhaW5pbmcgdGhlIHdhbGxjbG9jaytUU0Mgd2FzXFxuLVxcdCAqIHN1Y2Nlc3NmdWwsIGNhbGN1bGF0ZSB0aGUgS1ZNIGNsb2NrIGF0IHRoZSBjb3JyZXNwb25kaW5nIHRpbWUgYW5kXFxuLVxcdCAqIHN1YnRyYWN0IG9uZSBmcm9tIHRoZSBvdGhlciB0byBnZXQgdGhlIGd1ZXN0J3MgZXBvY2ggaW4gbmFub3NlY29uZHNcXG4tXFx0ICogc2luY2UgMTk3MC0wMS0wMS5cXG4rXFx0ICogSWYgZ2V0X2t2bWNsb2NrKCkgY2FwdHVyZWQgYm90aCB3YWxsY2xvY2sgYW5kIGt2bWNsb2NrIGZyb20gdGhlXFxuK1xcdCAqIHNhbWUgVFNDIHJlYWRpbmcsIHVzZSB0aGVtIGZvciBhIHByZWNpc2UgZXBvY2ggY2FsY3VsYXRpb24uXFxuIFxcdCAqL1xcbi1cXHRpZiAobG9jYWxfdHNjX2toeikge1xcbi1cXHRcXHRrdm1fZ2V0X3RpbWVfc2NhbGUoTlNFQ19QRVJfU0VDLCBsb2NhbF90c2Nfa2h6ICogTlNFQ19QRVJfVVNFQyxcXG4tXFx0XFx0XFx0XFx0ICAgXFx1MDAyNmh2X2Nsb2NrLnRzY19zaGlmdCxcXG4tXFx0XFx0XFx0XFx0ICAgXFx1MDAyNmh2X2Nsb2NrLnRzY190b19zeXN0ZW1fbXVsKTtcXG4tXFx0XFx0cmV0dXJuIHRzLnR2X25zZWMgKyBOU0VDX1BFUl9TRUMgKiB0cy50dl9zZWMgLVxcbi1cXHRcXHRcXHRfX3B2Y2xvY2tfcmVhZF9jeWNsZXMoXFx1MDAyNmh2X2Nsb2NrLCBob3N0X3RzYyk7XFxuLVxcdH1cXG4tI2VuZGlmXFxuLVxcdHJldHVybiBrdGltZV9nZXRfcmVhbF9ucygpIC0gZ2V0X2t2bWNsb2NrX25zKGt2bSk7XFxuK1xcdGlmIChkYXRhLmZsYWdzIFxcdTAwMjYgS1ZNX0NMT0NLX1JFQUxUSU1FKVxcbitcXHRcXHRyZXR1cm4gZGF0YS5yZWFsdGltZSAtIGRhdGEuY2xvY2s7XFxuK1xcbitcXHRyZXR1cm4ga3RpbWVfZ2V0X3JlYWxfbnMoKSAtIGRhdGEuY2xvY2s7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTI1ODMsNyArMjYyNiw3IEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcXG4gXFx0XFx0XFx0bWFya190c2NfdW5zdGFibGUoXFxcIktWTSBkaXNjb3ZlcmVkIGJhY2t3YXJkcyBUU0NcXFwiKTtcXG4gXFxuIFxcdFxcdGlmIChrdm1fY2hlY2tfdHNjX3Vuc3RhYmxlKCkpIHtcXG4tXFx0XFx0XFx0dTY0IG9mZnNldCA9IGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXQodmNwdSxcXG4rXFx0XFx0XFx0dTY0IG9mZnNldCA9IGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXQodmNwdSwgcmR0c2MoKSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0dmNwdS1cXHUwMDNlYXJjaC5sYXN0X2d1ZXN0X3RzYyk7XFxuIFxcdFxcdFxcdGt2bV92Y3B1X3dyaXRlX3RzY19vZmZzZXQodmNwdSwgb2Zmc2V0KTtcXG4gXFx0XFx0XFx0aWYgKCF2Y3B1LVxcdTAwM2VhcmNoLmd1ZXN0X3RzY19wcm90ZWN0ZWQpXFxuQEAgLTY4NjYsNiArNjkwOSw3IEBAIHN0YXRpYyB2b2lkIHB2Y2xvY2tfaXJxX3dvcmtfZm4oc3RydWN0IGlycV93b3JrICp3KVxcbiB9XFxuIFxcbiBzdGF0aWMgREVGSU5FX0lSUV9XT1JLKHB2Y2xvY2tfaXJxX3dvcmssIHB2Y2xvY2tfaXJxX3dvcmtfZm4pO1xcbisjZW5kaWZcXG4gXFxuIC8qXFxuICAqIE5vdGlmaWNhdGlvbiBhYm91dCBwdmNsb2NrIGd0b2QgZGF0YSB1cGRhdGUuXFxuQEAgLTY4NzMsMjYgKzY5MTcsMjYgQEAgc3RhdGljIERFRklORV9JUlFfV09SSyhwdmNsb2NrX2lycV93b3JrLCBwdmNsb2NrX2lycV93b3JrX2ZuKTtcXG4gc3RhdGljIGludCBwdmNsb2NrX2d0b2Rfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgdW51c2VkLFxcbiBcXHRcXHRcXHQgICAgICAgdm9pZCAqcHJpdilcXG4ge1xcbi1cXHRzdHJ1Y3QgcHZjbG9ja19ndG9kX2RhdGEgKmd0b2QgPSBcXHUwMDI2cHZjbG9ja19ndG9kX2RhdGE7XFxuIFxcdHN0cnVjdCB0aW1la2VlcGVyICp0ayA9IHByaXY7XFxuIFxcbiBcXHR1cGRhdGVfcHZjbG9ja19ndG9kKHRrKTtcXG4gXFxuKyNpZmRlZiBDT05GSUdfWDg2XzY0XFxuIFxcdC8qXFxuIFxcdCAqIERpc2FibGUgbWFzdGVyIGNsb2NrIGlmIGhvc3QgZG9lcyBub3QgdHJ1c3QsIG9yIGRvZXMgbm90IHVzZSxcXG4gXFx0ICogVFNDIGJhc2VkIGNsb2Nrc291cmNlLiBEZWxlZ2F0ZSBxdWV1ZV93b3JrKCkgdG8gaXJxX3dvcmsgYXNcXG4gXFx0ICogdGhpcyBpcyBpbnZva2VkIHdpdGggdGtfY29yZS5zZXEgd3JpdGUgaGVsZC5cXG4gXFx0ICovXFxuLVxcdGlmICghZ3RvZF9pc19iYXNlZF9vbl90c2MoZ3RvZC1cXHUwMDNlY2xvY2sudmNsb2NrX21vZGUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdGlmICghZ3RvZF9pc19iYXNlZF9vbl90c2MocHZjbG9ja19ndG9kX2RhdGEuY2xvY2sudmNsb2NrX21vZGUpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBhdG9taWNfcmVhZChcXHUwMDI2a3ZtX2d1ZXN0X2hhc19tYXN0ZXJfY2xvY2spICE9IDApXFxuIFxcdFxcdGlycV93b3JrX3F1ZXVlKFxcdTAwMjZwdmNsb2NrX2lycV93b3JrKTtcXG4rI2VuZGlmXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHB2Y2xvY2tfZ3RvZF9ub3RpZmllciA9IHtcXG4gXFx0Lm5vdGlmaWVyX2NhbGwgPSBwdmNsb2NrX2d0b2Rfbm90aWZ5LFxcbiB9O1xcbi0jZW5kaWZcXG4gXFxuIHZvaWQga3ZtX3NldHVwX3hzc19jYXBzKHZvaWQpXFxuIHtcXG5AQCAtNzExMSw5ICs3MTU1LDkgQEAgaW50IGt2bV94ODZfdmVuZG9yX2luaXQoc3RydWN0IGt2bV94ODZfaW5pdF9vcHMgKm9wcylcXG4gXFxuIFxcdGlmIChwaV9pbmplY3RfdGltZXIgPT0gLTEpXFxuIFxcdFxcdHBpX2luamVjdF90aW1lciA9IGhvdXNla2VlcGluZ19lbmFibGVkKEhLX1RZUEVfVElNRVIpO1xcbi0jaWZkZWYgQ09ORklHX1g4Nl82NFxcbiBcXHRwdmNsb2NrX2d0b2RfcmVnaXN0ZXJfbm90aWZpZXIoXFx1MDAyNnB2Y2xvY2tfZ3RvZF9ub3RpZmllcik7XFxuIFxcbisjaWZkZWYgQ09ORklHX1g4Nl82NFxcbiBcXHRpZiAoaHlwZXJ2aXNvcl9pc190eXBlKFg4Nl9IWVBFUl9NU19IWVBFUlYpKVxcbiBcXHRcXHRzZXRfaHZfdHNjY2hhbmdlX2NiKGt2bV9oeXBlcnZfdHNjX25vdGlmaWVyKTtcXG4gI2VuZGlmXFxuQEAgLTcxNzAsOCArNzIxNCw4IEBAIHZvaWQga3ZtX3g4Nl92ZW5kb3JfZXhpdCh2b2lkKVxcbiBcXHRcXHRcXHRcXHRcXHQgICAgQ1BVRlJFUV9UUkFOU0lUSU9OX05PVElGSUVSKTtcXG4gXFx0XFx0Y3B1aHBfcmVtb3ZlX3N0YXRlX25vY2FsbHMoQ1BVSFBfQVBfWDg2X0tWTV9DTEtfT05MSU5FKTtcXG4gXFx0fVxcbi0jaWZkZWYgQ09ORklHX1g4Nl82NFxcbiBcXHRwdmNsb2NrX2d0b2RfdW5yZWdpc3Rlcl9ub3RpZmllcihcXHUwMDI2cHZjbG9ja19ndG9kX25vdGlmaWVyKTtcXG4rI2lmZGVmIENPTkZJR19YODZfNjRcXG4gXFx0aXJxX3dvcmtfc3luYyhcXHUwMDI2cHZjbG9ja19pcnFfd29yayk7XFxuIFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnB2Y2xvY2tfZ3RvZF93b3JrKTtcXG4gI2VuZGlmXFxuQEAgLTk0NDAsNiArOTQ4NCw4IEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR2Y3B1X2xvYWQodmNwdSk7XFxuIFxcdGt2bV9zeW5jaHJvbml6ZV90c2ModmNwdSwgTlVMTCk7XFxuK1xcdGlmICghdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLnVzZV9tYXN0ZXJfY2xvY2spXFxuK1xcdFxcdGt2bV91cGRhdGVfbWFzdGVyY2xvY2sodmNwdS1cXHUwMDNla3ZtKTtcXG4gXFx0dmNwdV9wdXQodmNwdSk7XFxuIFxcbiBcXHQvKiBwb2xsIGNvbnRyb2wgZW5hYmxlZCBieSBkZWZhdWx0ICovXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuaCBiL2FyY2gveDg2L2t2bS94ODYuaFxcbmluZGV4IDBmNTkxOWIwOTJlNDcuLjFkOWE2NjA0OGIwMWUgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5oXFxuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5oXFxuQEAgLTMzNSw3ICszMzUsOCBAQCB1NjQga3ZtX3NjYWxlX3RzYyh1NjQgdHNjLCB1NjQgcmF0aW8pO1xcbiB1NjQga3ZtX3JlYWRfbDFfdHNjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGhvc3RfdHNjKTtcXG4gdTY0IGt2bV9jYWxjX25lc3RlZF90c2Nfb2Zmc2V0KHU2NCBsMV9vZmZzZXQsIHU2NCBsMl9vZmZzZXQsIHU2NCBsMl9tdWx0aXBsaWVyKTtcXG4gdTY0IGt2bV9jYWxjX25lc3RlZF90c2NfbXVsdGlwbGllcih1NjQgbDFfbXVsdGlwbGllciwgdTY0IGwyX211bHRpcGxpZXIpO1xcbi11NjQga3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB0YXJnZXRfdHNjKTtcXG4rdTY0IGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgaG9zdF90c2MsXFxuK1xcdFxcdFxcdCAgICAgIHU2NCB0YXJnZXRfdHNjKTtcXG4gdm9pZCBrdm1fdmNwdV93cml0ZV90c2Nfb2Zmc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGwxX29mZnNldCk7XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgYWRqdXN0X3RzY19vZmZzZXRfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMDozOTowNC4yMjMzNzk1OTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozMTExNjA5ODYxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0FNRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9zeW5jaHJvbml6ZV90c2NcIixcbiAgICBcImt2bV9ndWVzdF90aW1lX3VwZGF0ZVwiLFxuICAgIFwia3ZtX2dldF93YWxsX2Nsb2NrX2Vwb2NoXCIsXG4gICAgXCJrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0XCIsXG4gICAgXCJrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0geDg2IFRTQyAoVGltZSBTdGFtcCBDb3VudGVyKSBoYW5kbGluZywgaW5jbHVkaW5nIFRTQyBzY2FsaW5nLCBtYXN0ZXIgY2xvY2sgdXBkYXRlcywgYW5kIHdhbGwgY2xvY2sgZXBvY2ggY2FsY3VsYXRpb25zLiBUaGlzIGlzIGNvcmUgaHlwZXJ2aXNvciBsb2dpYyByZWFjaGFibGUgZnJvbSBndWVzdCBWTXMgdmlhIE1TUiB3cml0ZXMsIENQVUlELCBhbmQgS1ZNIGlvY3Rscy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBoYW5kbGluZyBUU0Mgc3luY2hyb25pemF0aW9uIGFuZCBndWVzdCB0aW1lIHVwZGF0ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI2MjQ0NDRjNTIwYjg0NzMzZTkyZjY1ZWRlMjZkMGZmYjViNTJmODhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyA1IDAwOjM5OjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IDI4Mzg0NzYxOWZmODguLjI4NzhhNTE4MWNkOWIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtODY0LDcgKzg2NCw3IEBAIHN0cnVjdCBrdm1fdmNwdV9hcmNoIHtcbiBcdGdwYV90IHRpbWU7XG4gXHRzOCAgcHZjbG9ja190c2Nfc2hpZnQ7XG4gXHR1MzIgcHZjbG9ja190c2NfbXVsO1xuLVx0dW5zaWduZWQgaW50IGh3X3RzY19raHo7XG4rXHR1NjQgaHdfdHNjX2h6O1xuIFx0c3RydWN0IGdmbl90b19wZm5fY2FjaGUgcHZfdGltZTtcbiBcdC8qIHNldCBndWVzdCBzdG9wcGVkIGZsYWcgaW4gcHZjbG9jayBmbGFncyBmaWVsZCAqL1xuIFx0Ym9vbCBwdmNsb2NrX3NldF9ndWVzdF9zdG9wcGVkX3JlcXVlc3Q7XG5AQCAtMTIzNiw2ICsxMjM2LDcgQEAgc3RydWN0IGt2bV9hcmNoIHtcbiBcdHU2NCBsYXN0X3RzY193cml0ZTtcbiBcdHUzMiBsYXN0X3RzY19raHo7XG4gXHR1NjQgbGFzdF90c2Nfb2Zmc2V0O1xuK1x0dTY0IGxhc3RfdHNjX3NjYWxpbmdfcmF0aW87XG4gXHR1NjQgY3VyX3RzY19uc2VjO1xuIFx0dTY0IGN1cl90c2Nfd3JpdGU7XG4gXHR1NjQgY3VyX3RzY19vZmZzZXQ7XG5AQCAtMTI1MSw2ICsxMjUyLDkgQEAgc3RydWN0IGt2bV9hcmNoIHtcbiBcdHU2NCBtYXN0ZXJfa2VybmVsX25zO1xuIFx0dTY0IG1hc3Rlcl9jeWNsZV9ub3c7XG4gXHRzdHJ1Y3QgcmF0ZWxpbWl0X3N0YXRlIGt2bWNsb2NrX3VwZGF0ZV9ycztcbitcdHU2NCBtYXN0ZXJfdHNjX3NjYWxpbmdfcmF0aW87XG4rXHRzOCAgbWFzdGVyX3RzY19zaGlmdDtcbitcdHUzMiBtYXN0ZXJfdHNjX211bDtcbiBcbiAjaWZkZWYgQ09ORklHX0tWTV9IWVBFUlZcbiBcdHN0cnVjdCBrdm1faHYgaHlwZXJ2O1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9jcHVpZC5jIGIvYXJjaC94ODYva3ZtL2NwdWlkLmNcbmluZGV4IDllOWNmNjUzOGE5NmUuLjcwNDlmNWE1NTk3YjQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vY3B1aWQuY1xuKysrIGIvYXJjaC94ODYva3ZtL2NwdWlkLmNcbkBAIC0xNiw2ICsxNiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdm1hbGxvYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWFjY2Vzcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvc3RhdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdW5pdHMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS9wcm9jZXNzb3IuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS91c2VyLmhcdTAwM2VcbkBAIC0yMTQ2LDcgKzIxNDcsNyBAQCBib29sIGt2bV9jcHVpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiAqZWF4LCB1MzIgKmVieCxcbiBcdFx0XHRcdCplY3ggPSB2Y3B1LVx1MDAzZWFyY2gucHZjbG9ja190c2NfbXVsO1xuIFx0XHRcdFx0KmVkeCA9IHZjcHUtXHUwMDNlYXJjaC5wdmNsb2NrX3RzY19zaGlmdDtcbiBcdFx0XHR9IGVsc2UgaWYgKGluZGV4ID09IDIpIHtcbi1cdFx0XHRcdCplYXggPSB2Y3B1LVx1MDAzZWFyY2guaHdfdHNjX2toejtcbitcdFx0XHRcdCplYXggPSBkaXZfdTY0KHZjcHUtXHUwMDNlYXJjaC5od190c2NfaHosIEhaX1BFUl9LSFopO1xuIFx0XHRcdH1cbiBcdFx0fVxuIFx0fSBlbHNlIHtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbXNycy5jIGIvYXJjaC94ODYva3ZtL21zcnMuY1xuaW5kZXggNjZmYTcxNDBkNjVkOS4uMjJjZWIzOWQ0MWY2NiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9tc3JzLmNcbisrKyBiL2FyY2gveDg2L2t2bS9tc3JzLmNcbkBAIC0xNjMxLDcgKzE2MzEsOCBAQCBpbnQga3ZtX3NldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcbiBcdFx0aWYgKG1zcl9pbmZvLVx1MDAzZWhvc3RfaW5pdGlhdGVkKSB7XG4gXHRcdFx0a3ZtX3N5bmNocm9uaXplX3RzYyh2Y3B1LCBcdTAwMjZkYXRhKTtcbiBcdFx0fSBlbHNlIGlmICghdmNwdS1cdTAwM2VhcmNoLmd1ZXN0X3RzY19wcm90ZWN0ZWQpIHtcbi1cdFx0XHR1NjQgYWRqID0ga3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldCh2Y3B1LCBkYXRhKSAtIHZjcHUtXHUwMDNlYXJjaC5sMV90c2Nfb2Zmc2V0O1xuK1x0XHRcdHU2NCBhZGogPSBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0KHZjcHUsIHJkdHNjKCksIGRhdGEpIC1cbitcdFx0XHRcdCAgdmNwdS1cdTAwM2VhcmNoLmwxX3RzY19vZmZzZXQ7XG4gXHRcdFx0YWRqdXN0X3RzY19vZmZzZXRfZ3Vlc3QodmNwdSwgYWRqKTtcbiBcdFx0XHR2Y3B1LVx1MDAzZWFyY2guaWEzMl90c2NfYWRqdXN0X21zciArPSBhZGo7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jIGIvYXJjaC94ODYva3ZtL3N2bS9zdm0uY1xuaW5kZXggOWQ2MDdiOThiZDA2Ny4uMzA1N2NhNzA1MWRiMSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc3ZtLmNcbkBAIC01NjAyLDcgKzU2MDIsOCBAQCBzdGF0aWMgX19pbml0IGludCBzdm1faGFyZHdhcmVfc2V0dXAodm9pZClcbiBcdFx0XHRcdCAgICAgWEZFQVRVUkVfTUFTS19CTkRDU1IpO1xuIFxuIFx0aWYgKHRzY19zY2FsaW5nKSB7XG4tXHRcdGlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1RTQ1JBVEVNU1IpKSB7XG4rXHRcdGlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1RTQ1JBVEVNU1IpIHx8XG4rXHRcdCAgICAhYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQykpIHtcbiBcdFx0XHR0c2Nfc2NhbGluZyA9IGZhbHNlO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdHByX2luZm8oXCJUU0Mgc2NhbGluZyBzdXBwb3J0ZWRcXG5cIik7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC92bXguYyBiL2FyY2gveDg2L2t2bS92bXgvdm14LmNcbmluZGV4IGUzYmZlNmFjYTFhMGUuLjlhYmQyZWQzYWVhZTIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3ZteC5jXG5AQCAtMjg0MSw2ICsyODQxLDE2IEBAIHN0YXRpYyBpbnQgc2V0dXBfdm1jc19jb25maWcoc3RydWN0IHZtY3NfY29uZmlnICp2bWNzX2NvbmYsXG4gXHRpZiAoIWNwdV9oYXNfc2d4KCkpXG4gXHRcdF9jcHVfYmFzZWRfMm5kX2V4ZWNfY29udHJvbCBcdTAwMjY9IH5TRUNPTkRBUllfRVhFQ19FTkNMU19FWElUSU5HO1xuIFxuK1x0LypcbitcdCAqIEtWTSBkb2Vzbid0IHJlLWRlcml2ZSB0aGUgVFNDIHNjYWxpbmcgcmF0aW8gd2hlbiB0aGUgaG9zdCBUU0NcbitcdCAqIGZyZXF1ZW5jeSBjaGFuZ2VzLCBzbyBUU0Mgc2NhbGluZyBpcyBvbmx5IHVzYWJsZSB3aXRoIGEgY29uc3RhbnRcbitcdCAqIFRTQy4gIENsZWFyIHRoZSBjb250cm9sIGhlcmUgcmF0aGVyIHRoYW4gaW4gdm14X2hhcmR3YXJlX3NldHVwKCkgc29cbitcdCAqIHRoYXQgdGhlIHBlci1DUFUgY29uZmlncyByZWNvbXB1dGVkIGJ5IHZteF9jaGVja19wcm9jZXNzb3JfY29tcGF0KClcbitcdCAqIHN0YXkgY29uc2lzdGVudCB3aXRoIHRoZSBnb2xkZW4gdm1jc19jb25maWcuXG4rXHQgKi9cbitcdGlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQykpXG4rXHRcdF9jcHVfYmFzZWRfMm5kX2V4ZWNfY29udHJvbCBcdTAwMjY9IH5TRUNPTkRBUllfRVhFQ19UU0NfU0NBTElORztcbitcbiBcdGlmIChfY3B1X2Jhc2VkX2V4ZWNfY29udHJvbCBcdTAwMjYgQ1BVX0JBU0VEX0FDVElWQVRFX1RFUlRJQVJZX0NPTlRST0xTKVxuIFx0XHRfY3B1X2Jhc2VkXzNyZF9leGVjX2NvbnRyb2wgPVxuIFx0XHRcdGFkanVzdF92bXhfY29udHJvbHM2NChLVk1fT1BUSU9OQUxfVk1YX1RFUlRJQVJZX1ZNX0VYRUNfQ09OVFJPTCxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbmluZGV4IGQ5NGI1OTE0MGM0NTIuLmNiZTRmZDM0NTdiNDQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmNcbisrKyBiL2FyY2gveDg2L2t2bS94ODYuY1xuQEAgLTYxLDYgKzYxLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1fZW5jcnlwdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3VzcGVuZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc21wLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC91bml0cy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjdHJhY2UvZXZlbnRzL2lwaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdHJhY2UvZXZlbnRzL2t2bS5oXHUwMDNlXG5AQCAtODczLDcgKzg3NCw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fdmNwdV9leGl0X3JlcXVlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0ICAgICAgIGt2bV9yZXF1ZXN0X3BlbmRpbmcodmNwdSkgfHwgeGZlcl90b19ndWVzdF9tb2RlX3dvcmtfcGVuZGluZygpO1xuIH1cbiBcbi0jaWZkZWYgQ09ORklHX1g4Nl82NFxuIHN0cnVjdCBwdmNsb2NrX2Nsb2NrIHtcbiBcdGludCB2Y2xvY2tfbW9kZTtcbiBcdHU2NCBjeWNsZV9sYXN0O1xuQEAgLTkzMSwxMyArOTMxLDYgQEAgc3RhdGljIHM2NCBnZXRfa3ZtY2xvY2tfYmFzZV9ucyh2b2lkKVxuIFx0LyogQ291bnQgdXAgZnJvbSBib290IHRpbWUsIGJ1dCB3aXRoIHRoZSBmcmVxdWVuY3kgb2YgdGhlIHJhdyBjbG9jay4gICovXG4gXHRyZXR1cm4ga3RpbWVfdG9fbnMoa3RpbWVfYWRkKGt0aW1lX2dldF9yYXcoKSwgcHZjbG9ja19ndG9kX2RhdGEub2Zmc19ib290KSk7XG4gfVxuLSNlbHNlXG4tc3RhdGljIHM2NCBnZXRfa3ZtY2xvY2tfYmFzZV9ucyh2b2lkKVxuLXtcbi1cdC8qIE1hc3RlciBjbG9jayBub3QgdXNlZCwgc28gd2UgY2FuIGp1c3QgdXNlIENMT0NLX0JPT1RUSU1FLiAgKi9cbi1cdHJldHVybiBrdGltZV9nZXRfYm9vdHRpbWVfbnMoKTtcbi19XG4tI2VuZGlmXG4gXG4gc3RhdGljIHVpbnQzMl90IGRpdl9mcmFjKHVpbnQzMl90IGRpdmlkZW5kLCB1aW50MzJfdCBkaXZpc29yKVxuIHtcbkBAIC05NDUsMzIgKzkzOCw1NyBAQCBzdGF0aWMgdWludDMyX3QgZGl2X2ZyYWModWludDMyX3QgZGl2aWRlbmQsIHVpbnQzMl90IGRpdmlzb3IpXG4gXHRyZXR1cm4gZGl2aWRlbmQ7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGt2bV9nZXRfdGltZV9zY2FsZSh1aW50NjRfdCBzY2FsZWRfaHosIHVpbnQ2NF90IGJhc2VfaHosXG4rc3RhdGljIHZvaWQga3ZtX2dldF90aW1lX3NjYWxlKHU2NCBzY2FsZWRfaHosIHU2NCBiYXNlX2h6LFxuIFx0XHRcdCAgICAgICBzOCAqcHNoaWZ0LCB1MzIgKnBtdWx0aXBsaWVyKVxuIHtcbi1cdHVpbnQ2NF90IHNjYWxlZDY0O1xuLVx0aW50MzJfdCAgc2hpZnQgPSAwO1xuLVx0dWludDY0X3QgdHBzNjQ7XG4tXHR1aW50MzJfdCB0cHMzMjtcbitcdHU2NCBzY2FsZWRfaHpfdTY0ID0gc2NhbGVkX2h6O1xuK1x0czMyIHNoaWZ0ID0gMDtcbitcdHU2NCBiYXNlX2h6X3U2NDtcbitcdHUzMiBiYXNlMzI7XG4rXG4rXHQvKlxuK1x0ICogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIGEgZml4ZWQtcG9pbnQgbXVsdGlwbGllciBhbmQgc2hpZnQgc3VjaFxuK1x0ICogdGhhdDpcbitcdCAqICAgdGltZV9ucyA9ICh0c2NfY3ljbGVzIFx1MDAzY1x1MDAzYyBzaGlmdCkgKiBtdWx0aXBsaWVyIFx1MDAzZVx1MDAzZSAzMlxuK1x0ICpcbitcdCAqIFdoZXJlIHRzY19jeWNsZXMgdGljayBhdCBiYXNlX2h6LCBhbmQgdGltZV9ucyBzaG91bGQgY291bnQgYXRcbitcdCAqIHNjYWxlZF9oeiAodHlwaWNhbGx5IE5TRUNfUEVSX1NFQyBmb3IgYSBUU0PihpJuYW5vc2Vjb25kcyBjb252ZXJzaW9uKS5cbitcdCAqXG4rXHQgKiBUaGUgbXVsdGlwbGllciBpczogKHNjYWxlZF9oeiBcdTAwM2NcdTAwM2MgMzIpIC8gYmFzZV9oeiwgYWRqdXN0ZWQgYnkgc2hpZnRcbitcdCAqIHRvIGtlZXAgZXZlcnl0aGluZyBpbiByYW5nZS5cbitcdCAqL1xuIFxuLVx0dHBzNjQgPSBiYXNlX2h6O1xuLVx0c2NhbGVkNjQgPSBzY2FsZWRfaHo7XG4tXHR3aGlsZSAodHBzNjQgXHUwMDNlIHNjYWxlZDY0KjIgfHwgdHBzNjQgXHUwMDI2IDB4ZmZmZmZmZmYwMDAwMDAwMFVMTCkge1xuLVx0XHR0cHM2NCBcdTAwM2VcdTAwM2U9IDE7XG4rXHRiYXNlX2h6X3U2NCA9IGJhc2VfaHo7XG4rXG4rXHQvKlxuK1x0ICogU3RhcnQgYnkgc2hpZnRpbmcgYmFzZV9oeiByaWdodCB1bnRpbCBpdCBmaXRzIGluIDMyIGJpdHMsIGFuZFxuK1x0ICogaXMgbG93ZXIgdGhhbiBkb3VibGUgdGhlIHRhcmdldCByYXRlLiBUaGlzIGludHJvZHVjZXMgYSBuZWdhdGl2ZVxuK1x0ICogc2hpZnQgdmFsdWUgd2hpY2ggd291bGQgcmVzdWx0IGluIHB2Y2xvY2tfc2NhbGVfZGVsdGEoKSBzaGlmdGluZ1xuK1x0ICogdGhlIGFjdHVhbCB0aWNrIGNvdW50IHJpZ2h0IGJlZm9yZSBwZXJmb3JtaW5nIHRoZSBtdWx0aXBsaWNhdGlvbi5cbitcdCAqL1xuK1x0d2hpbGUgKGJhc2VfaHpfdTY0IFx1MDAzZSBzY2FsZWRfaHpfdTY0ICogMiB8fCBiYXNlX2h6X3U2NCBcdTAwM2VcdTAwM2UgMzIpIHtcbitcdFx0YmFzZV9oel91NjQgXHUwMDNlXHUwMDNlPSAxO1xuIFx0XHRzaGlmdC0tO1xuIFx0fVxuIFxuLVx0dHBzMzIgPSAodWludDMyX3QpdHBzNjQ7XG4tXHR3aGlsZSAodHBzMzIgXHUwMDNjPSBzY2FsZWQ2NCB8fCBzY2FsZWQ2NCBcdTAwMjYgMHhmZmZmZmZmZjAwMDAwMDAwVUxMKSB7XG4tXHRcdGlmIChzY2FsZWQ2NCBcdTAwMjYgMHhmZmZmZmZmZjAwMDAwMDAwVUxMIHx8IHRwczMyIFx1MDAyNiAweDgwMDAwMDAwKVxuLVx0XHRcdHNjYWxlZDY0IFx1MDAzZVx1MDAzZT0gMTtcbitcdC8qIE5vdyB0aGUgc2hpZnRlZCBiYXNlX2h6IGZpdHMgaW4gMzIgYml0cy4gKi9cbitcdGJhc2UzMiA9ICh1MzIpYmFzZV9oel91NjQ7XG4rXG4rXHQvKlxuK1x0ICogTmV4dCwgc2hpZnQgc2NhbGVkX2h6IHJpZ2h0IHVudGlsIGl0IGZpdHMgaW4gMzIgYml0cywgYW5kIGVuc3VyZVxuK1x0ICogdGhhdCB0aGUgc2hpZnRlZCBiYXNlX2h6IGlzIHN0cmljdGx5IGxhcmdlciAoc28gdGhhdCB0aGUgcmVzdWx0IG9mIHRoZVxuK1x0ICogZmluYWwgZGl2aXNpb24gYWxzbyBmaXRzIGluIDMyIGJpdHMpLlxuK1x0ICovXG4rXHR3aGlsZSAoYmFzZTMyIFx1MDAzYz0gc2NhbGVkX2h6X3U2NCB8fCBzY2FsZWRfaHpfdTY0IFx1MDAzZVx1MDAzZSAzMikge1xuK1x0XHRpZiAoc2NhbGVkX2h6X3U2NCBcdTAwM2VcdTAwM2UgMzIgfHwgYmFzZTMyIFx1MDAyNiBCSVQoMzEpKVxuK1x0XHRcdHNjYWxlZF9oel91NjQgXHUwMDNlXHUwMDNlPSAxO1xuIFx0XHRlbHNlXG4tXHRcdFx0dHBzMzIgXHUwMDNjXHUwMDNjPSAxO1xuK1x0XHRcdGJhc2UzMiBcdTAwM2NcdTAwM2M9IDE7XG4gXHRcdHNoaWZ0Kys7XG4gXHR9XG4gXG4gXHQqcHNoaWZ0ID0gc2hpZnQ7XG4tXHQqcG11bHRpcGxpZXIgPSBkaXZfZnJhYyhzY2FsZWQ2NCwgdHBzMzIpO1xuK1x0KnBtdWx0aXBsaWVyID0gZGl2X2ZyYWMoc2NhbGVkX2h6X3U2NCwgYmFzZTMyKTtcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19YODZfNjRcbkBAIC0xMDYxLDExICsxMDc5LDE1IEBAIHN0YXRpYyBpbnQga3ZtX3NldF90c2Nfa2h6KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHVzZXJfdHNjX2toeilcbiBcbiBzdGF0aWMgdTY0IGNvbXB1dGVfZ3Vlc3RfdHNjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgczY0IGtlcm5lbF9ucylcbiB7XG4tXHR1NjQgdHNjID0gcHZjbG9ja19zY2FsZV9kZWx0YShrZXJuZWxfbnMtdmNwdS1cdTAwM2VhcmNoLnRoaXNfdHNjX25zZWMsXG4tXHRcdFx0XHQgICAgICB2Y3B1LVx1MDAzZWFyY2gudmlydHVhbF90c2NfbXVsdCxcbi1cdFx0XHRcdCAgICAgIHZjcHUtXHUwMDNlYXJjaC52aXJ0dWFsX3RzY19zaGlmdCk7XG4tXHR0c2MgKz0gdmNwdS1cdTAwM2VhcmNoLnRoaXNfdHNjX3dyaXRlO1xuLVx0cmV0dXJuIHRzYztcbitcdHM2NCBkZWx0YV9ucyA9IGtlcm5lbF9ucyAtIHZjcHUtXHUwMDNlYXJjaC50aGlzX3RzY19uc2VjO1xuK1x0dTY0IHRzYztcbitcbitcdC8qIEhhbmRsZSBuZWdhdGl2ZSBkZWx0YXMgZ3JhY2VmdWxseSAobWFzdGVyIGNsb2NrIHJlZiBtYXkgYmUgZWFybGllcikgKi9cbitcdHRzYyA9IHB2Y2xvY2tfc2NhbGVfZGVsdGEoYWJzKGRlbHRhX25zKSxcbitcdFx0XHRcdCAgdmNwdS1cdTAwM2VhcmNoLnZpcnR1YWxfdHNjX211bHQsXG4rXHRcdFx0XHQgIHZjcHUtXHUwMDNlYXJjaC52aXJ0dWFsX3RzY19zaGlmdCk7XG4rXG4rXHRyZXR1cm4gdmNwdS1cdTAwM2VhcmNoLnRoaXNfdHNjX3dyaXRlICsgKGRlbHRhX25zIFx1MDAzZT0gMCA/IHRzYyA6IC10c2MpO1xuIH1cbiBcbiAjaWZkZWYgQ09ORklHX1g4Nl82NFxuQEAgLTExMzEsMTEgKzExNTMsMTIgQEAgdTY0IGt2bV9zY2FsZV90c2ModTY0IHRzYywgdTY0IHJhdGlvKVxuIFx0cmV0dXJuIF90c2M7XG4gfVxuIFxuLXU2NCBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHRhcmdldF90c2MpXG4rdTY0IGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgaG9zdF90c2MsXG4rXHRcdFx0ICAgICAgdTY0IHRhcmdldF90c2MpXG4ge1xuIFx0dTY0IHRzYztcbiBcbi1cdHRzYyA9IGt2bV9zY2FsZV90c2MocmR0c2MoKSwgdmNwdS1cdTAwM2VhcmNoLmwxX3RzY19zY2FsaW5nX3JhdGlvKTtcbitcdHRzYyA9IGt2bV9zY2FsZV90c2MoaG9zdF90c2MsIHZjcHUtXHUwMDNlYXJjaC5sMV90c2Nfc2NhbGluZ19yYXRpbyk7XG4gXG4gXHRyZXR1cm4gdGFyZ2V0X3RzYyAtIHRzYztcbiB9XG5AQCAtMTI1NCw2ICsxMjc3LDcgQEAgc3RhdGljIHZvaWQgX19rdm1fc3luY2hyb25pemVfdHNjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG9mZnNldCwgdTY0IHRzYyxcbiBcdGt2bS1cdTAwM2VhcmNoLmxhc3RfdHNjX3dyaXRlID0gdHNjO1xuIFx0a3ZtLVx1MDAzZWFyY2gubGFzdF90c2Nfa2h6ID0gdmNwdS1cdTAwM2VhcmNoLnZpcnR1YWxfdHNjX2toejtcbiBcdGt2bS1cdTAwM2VhcmNoLmxhc3RfdHNjX29mZnNldCA9IG9mZnNldDtcbitcdGt2bS1cdTAwM2VhcmNoLmxhc3RfdHNjX3NjYWxpbmdfcmF0aW8gPSB2Y3B1LVx1MDAzZWFyY2gubDFfdHNjX3NjYWxpbmdfcmF0aW87XG4gXG4gXHR2Y3B1LVx1MDAzZWFyY2gubGFzdF9ndWVzdF90c2MgPSB0c2M7XG4gXG5AQCAtMTI5Niw3ICsxMzIwLDcgQEAgdm9pZCBrdm1fc3luY2hyb25pemVfdHNjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0ICp1c2VyX3ZhbHVlKVxuIFx0Ym9vbCBzeW5jaHJvbml6aW5nID0gZmFsc2U7XG4gXG4gXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2a3ZtLVx1MDAzZWFyY2gudHNjX3dyaXRlX2xvY2ssIGZsYWdzKTtcbi1cdG9mZnNldCA9IGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXQodmNwdSwgZGF0YSk7XG4rXHRvZmZzZXQgPSBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0KHZjcHUsIHJkdHNjKCksIGRhdGEpO1xuIFx0bnMgPSBnZXRfa3ZtY2xvY2tfYmFzZV9ucygpO1xuIFx0ZWxhcHNlZCA9IG5zIC0ga3ZtLVx1MDAzZWFyY2gubGFzdF90c2NfbnNlYztcbiBcbkBAIC0xMzQ1LDcgKzEzNjksNyBAQCB2b2lkIGt2bV9zeW5jaHJvbml6ZV90c2Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKnVzZXJfdmFsdWUpXG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0dTY0IGRlbHRhID0gbnNlY190b19jeWNsZXModmNwdSwgZWxhcHNlZCk7XG4gXHRcdFx0ZGF0YSArPSBkZWx0YTtcbi1cdFx0XHRvZmZzZXQgPSBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0KHZjcHUsIGRhdGEpO1xuK1x0XHRcdG9mZnNldCA9IGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXQodmNwdSwgcmR0c2MoKSwgZGF0YSk7XG4gXHRcdH1cbiBcdFx0bWF0Y2hlZCA9IHRydWU7XG4gXHR9XG5AQCAtMTU2Niw2ICsxNTkwLDggQEAgc3RhdGljIGJvb2wga3ZtX2dldF93YWxsdGltZV9hbmRfY2xvY2tyZWFkKHN0cnVjdCB0aW1lc3BlYzY0ICp0cyxcbiAgKlxuICAqL1xuIFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9jcHVfdHNjX2toeih2b2lkKTtcbitcbiBzdGF0aWMgdm9pZCBwdmNsb2NrX3VwZGF0ZV92bV9ndG9kX2NvcHkoc3RydWN0IGt2bSAqa3ZtKVxuIHtcbiAjaWZkZWYgQ09ORklHX1g4Nl82NFxuQEAgLTE1ODksOSArMTYxNSwzMCBAQCBzdGF0aWMgdm9pZCBwdmNsb2NrX3VwZGF0ZV92bV9ndG9kX2NvcHkoc3RydWN0IGt2bSAqa3ZtKVxuIFx0XHRcdFx0XHUwMDI2XHUwMDI2ICFrYS1cdTAwM2ViYWNrd2FyZHNfdHNjX29ic2VydmVkXG4gXHRcdFx0XHRcdTAwMjZcdTAwMjYgIWthLVx1MDAzZWJvb3RfdmNwdV9ydW5zX29sZF9rdm1jbG9jaztcbiBcbi1cdGlmIChrYS1cdTAwM2V1c2VfbWFzdGVyX2Nsb2NrKVxuK1x0aWYgKGthLVx1MDAzZXVzZV9tYXN0ZXJfY2xvY2spIHtcbitcdFx0dTY0IHRzY19oejtcbitcbiBcdFx0YXRvbWljX3NldChcdTAwMjZrdm1fZ3Vlc3RfaGFzX21hc3Rlcl9jbG9jaywgMSk7XG4gXG4rXHRcdC8qXG4rXHRcdCAqIENvcHkgdGhlIHNjYWxpbmcgcmF0aW8gYW5kIHByZWNvbXB1dGUgdGhlIG11bC9zaGlmdCBmb3JcbitcdFx0ICogY29udmVydGluZyBndWVzdCBUU0MgdG8gbmFub3NlY29uZHMuIFRoZXNlIGFyZSB1c2VkIGJ5XG4rXHRcdCAqIGdldF9rdm1jbG9jaygpIHRvIGNvbXB1dGUga3ZtY2xvY2sgZnJvbSB0aGUgaG9zdCBUU0NcbitcdFx0ICogd2l0aG91dCBuZWVkaW5nIGEgdkNQVSByZWZlcmVuY2UuXG4rXHRcdCAqL1xuK1x0XHRrYS1cdTAwM2VtYXN0ZXJfdHNjX3NjYWxpbmdfcmF0aW8gPSBrYS1cdTAwM2VsYXN0X3RzY19zY2FsaW5nX3JhdGlvO1xuK1x0XHR0c2NfaHogPSAodTY0KWdldF9jcHVfdHNjX2toeigpICogSFpfUEVSX0tIWjtcbitcdFx0aWYgKHRzY19oeiBcdTAwMjZcdTAwMjYga3ZtX2NhcHMuaGFzX3RzY19jb250cm9sKVxuK1x0XHRcdHRzY19oeiA9IGt2bV9zY2FsZV90c2ModHNjX2h6LFxuK1x0XHRcdFx0XHQgICAgICAga2EtXHUwMDNlbWFzdGVyX3RzY19zY2FsaW5nX3JhdGlvKTtcbitcdFx0aWYgKHRzY19oeilcbitcdFx0XHRrdm1fZ2V0X3RpbWVfc2NhbGUoTlNFQ19QRVJfU0VDLCB0c2NfaHosXG4rXHRcdFx0XHRcdCAgIFx1MDAyNmthLVx1MDAzZW1hc3Rlcl90c2Nfc2hpZnQsXG4rXHRcdFx0XHRcdCAgIFx1MDAyNmthLVx1MDAzZW1hc3Rlcl90c2NfbXVsKTtcbitcdFx0ZWxzZVxuK1x0XHRcdGthLVx1MDAzZXVzZV9tYXN0ZXJfY2xvY2sgPSBmYWxzZTtcbitcdH1cbitcbiBcdHZjbG9ja19tb2RlID0gcHZjbG9ja19ndG9kX2RhdGEuY2xvY2sudmNsb2NrX21vZGU7XG4gXHR0cmFjZV9rdm1fdXBkYXRlX21hc3Rlcl9jbG9jayhrYS1cdTAwM2V1c2VfbWFzdGVyX2Nsb2NrLCB2Y2xvY2tfbW9kZSxcbiBcdFx0XHRcdFx0dmNwdXNfbWF0Y2hlZCk7XG5AQCAtMTY1OCwzOSArMTcwNSw0OSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfY3B1X3RzY19raHoodm9pZClcbiB9XG4gXG4gLyogQ2FsbGVkIHdpdGhpbiByZWFkX3NlcWNvdW50X2JlZ2luL3JldHJ5IGZvciBrdm0tXHUwMDNlcHZjbG9ja19zYy4gICovXG4tc3RhdGljIHZvaWQgX19nZXRfa3ZtY2xvY2soc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2Nsb2NrX2RhdGEgKmRhdGEpXG4rc3RhdGljIGJvb2wgX19nZXRfa3ZtY2xvY2tfbWFzdGVyX2Nsb2NrKHN0cnVjdCBrdm0gKmt2bSxcbitcdFx0XHRcdFx0c3RydWN0IGt2bV9jbG9ja19kYXRhICpkYXRhKVxuIHtcbisjaWZkZWYgQ09ORklHX1g4Nl82NFxuIFx0c3RydWN0IGt2bV9hcmNoICprYSA9IFx1MDAyNmt2bS1cdTAwM2VhcmNoO1xuIFx0c3RydWN0IHB2Y2xvY2tfdmNwdV90aW1lX2luZm8gaHZfY2xvY2s7XG4rXHRzdHJ1Y3QgdGltZXNwZWM2NCB0cztcbiBcbi1cdC8qIGJvdGggX190aGlzX2NwdV9yZWFkKCkgYW5kIHJkdHNjKCkgc2hvdWxkIGJlIG9uIHRoZSBzYW1lIGNwdSAqL1xuLVx0Z2V0X2NwdSgpO1xuK1x0aWYgKCFrYS1cdTAwM2V1c2VfbWFzdGVyX2Nsb2NrKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRkYXRhLVx1MDAzZWZsYWdzID0gMDtcbi1cdGlmIChrYS1cdTAwM2V1c2VfbWFzdGVyX2Nsb2NrIFx1MDAyNlx1MDAyNlxuLVx0ICAgIChzdGF0aWNfY3B1X2hhcyhYODZfRkVBVFVSRV9DT05TVEFOVF9UU0MpIHx8IF9fdGhpc19jcHVfcmVhZChjcHVfdHNjX2toeikpKSB7XG4tI2lmZGVmIENPTkZJR19YODZfNjRcbi1cdFx0c3RydWN0IHRpbWVzcGVjNjQgdHM7XG4rXHRpZiAoIWt2bV9nZXRfd2FsbHRpbWVfYW5kX2Nsb2NrcmVhZChcdTAwMjZ0cywgXHUwMDI2ZGF0YS1cdTAwM2Vob3N0X3RzYykpXG4rXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdFx0aWYgKGt2bV9nZXRfd2FsbHRpbWVfYW5kX2Nsb2NrcmVhZChcdTAwMjZ0cywgXHUwMDI2ZGF0YS1cdTAwM2Vob3N0X3RzYykpIHtcbi1cdFx0XHRkYXRhLVx1MDAzZXJlYWx0aW1lID0gdHMudHZfbnNlYyArIE5TRUNfUEVSX1NFQyAqIHRzLnR2X3NlYztcbi1cdFx0XHRkYXRhLVx1MDAzZWZsYWdzIHw9IEtWTV9DTE9DS19SRUFMVElNRSB8IEtWTV9DTE9DS19IT1NUX1RTQztcbi1cdFx0fSBlbHNlXG4tI2VuZGlmXG4tXHRcdGRhdGEtXHUwMDNlaG9zdF90c2MgPSByZHRzYygpO1xuLVxuLVx0XHRkYXRhLVx1MDAzZWZsYWdzIHw9IEtWTV9DTE9DS19UU0NfU1RBQkxFO1xuLVx0XHRodl9jbG9jay50c2NfdGltZXN0YW1wID0ga2EtXHUwMDNlbWFzdGVyX2N5Y2xlX25vdztcbi1cdFx0aHZfY2xvY2suc3lzdGVtX3RpbWUgPSBrYS1cdTAwM2VtYXN0ZXJfa2VybmVsX25zICsga2EtXHUwMDNla3ZtY2xvY2tfb2Zmc2V0O1xuLVx0XHRrdm1fZ2V0X3RpbWVfc2NhbGUoTlNFQ19QRVJfU0VDLCBnZXRfY3B1X3RzY19raHooKSAqIDEwMDBMTCxcbi1cdFx0XHRcdCAgIFx1MDAyNmh2X2Nsb2NrLnRzY19zaGlmdCxcbi1cdFx0XHRcdCAgIFx1MDAyNmh2X2Nsb2NrLnRzY190b19zeXN0ZW1fbXVsKTtcbi1cdFx0ZGF0YS1cdTAwM2VjbG9jayA9IF9fcHZjbG9ja19yZWFkX2N5Y2xlcyhcdTAwMjZodl9jbG9jaywgZGF0YS1cdTAwM2Vob3N0X3RzYyk7XG4rXHRkYXRhLVx1MDAzZXJlYWx0aW1lID0gdHMudHZfbnNlYyArIE5TRUNfUEVSX1NFQyAqIHRzLnR2X3NlYztcbitcdGRhdGEtXHUwMDNlZmxhZ3MgfD0gS1ZNX0NMT0NLX1JFQUxUSU1FIHwgS1ZNX0NMT0NLX0hPU1RfVFNDIHxcbitcdFx0ICAgICAgIEtWTV9DTE9DS19UU0NfU1RBQkxFO1xuK1xuK1x0aHZfY2xvY2sudHNjX3RpbWVzdGFtcCA9IGthLVx1MDAzZW1hc3Rlcl9jeWNsZV9ub3c7XG4rXHRodl9jbG9jay5zeXN0ZW1fdGltZSA9IGthLVx1MDAzZW1hc3Rlcl9rZXJuZWxfbnMgKyBrYS1cdTAwM2Vrdm1jbG9ja19vZmZzZXQ7XG4rXG4rXHQvKlxuK1x0ICogVXNlIHRoZSBwcmVjb21wdXRlZCBndWVzdC1UU0MtYmFzZWQgbXVsL3NoaWZ0IHNvIHRoYXQgdGhlIGt2bWNsb2NrXG4rXHQgKiB2YWx1ZSBtYXRjaGVzIHdoYXQgdGhlIGd1ZXN0IGNvbXB1dGVzIGZyb20gaXRzIG93biBUU0MuXG4rXHQgKi9cbitcdGh2X2Nsb2NrLnRzY19zaGlmdCA9IGthLVx1MDAzZW1hc3Rlcl90c2Nfc2hpZnQ7XG4rXHRodl9jbG9jay50c2NfdG9fc3lzdGVtX211bCA9IGthLVx1MDAzZW1hc3Rlcl90c2NfbXVsO1xuK1xuK1x0aWYgKGt2bV9jYXBzLmhhc190c2NfY29udHJvbCkge1xuK1x0XHR1NjQgdHNjX2RlbHRhID0gZGF0YS1cdTAwM2Vob3N0X3RzYyAtIGthLVx1MDAzZW1hc3Rlcl9jeWNsZV9ub3c7XG4rXG4rXHRcdHRzY19kZWx0YSA9IGt2bV9zY2FsZV90c2ModHNjX2RlbHRhLCBrYS1cdTAwM2VtYXN0ZXJfdHNjX3NjYWxpbmdfcmF0aW8pO1xuK1x0XHRkYXRhLVx1MDAzZWNsb2NrID0gaHZfY2xvY2suc3lzdGVtX3RpbWUgK1xuK1x0XHRcdCAgICAgIHB2Y2xvY2tfc2NhbGVfZGVsdGEodHNjX2RlbHRhLFxuK1x0XHRcdFx0XHRcdCAgaHZfY2xvY2sudHNjX3RvX3N5c3RlbV9tdWwsXG4rXHRcdFx0XHRcdFx0ICBodl9jbG9jay50c2Nfc2hpZnQpO1xuIFx0fSBlbHNlIHtcbi1cdFx0ZGF0YS1cdTAwM2VjbG9jayA9IGdldF9rdm1jbG9ja19iYXNlX25zKCkgKyBrYS1cdTAwM2Vrdm1jbG9ja19vZmZzZXQ7XG4rXHRcdGRhdGEtXHUwMDNlY2xvY2sgPSBfX3B2Y2xvY2tfcmVhZF9jeWNsZXMoXHUwMDI2aHZfY2xvY2ssIGRhdGEtXHUwMDNlaG9zdF90c2MpO1xuIFx0fVxuLVxuLVx0cHV0X2NwdSgpO1xuK1x0cmV0dXJuIHRydWU7XG4rI2Vsc2VcbitcdHJldHVybiBmYWxzZTtcbisjZW5kaWZcbiB9XG4gXG4gc3RhdGljIHZvaWQgZ2V0X2t2bWNsb2NrKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9jbG9ja19kYXRhICpkYXRhKVxuQEAgLTE2OTksOCArMTc1NiwxMSBAQCBzdGF0aWMgdm9pZCBnZXRfa3ZtY2xvY2soc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2Nsb2NrX2RhdGEgKmRhdGEpXG4gXHR1bnNpZ25lZCBzZXE7XG4gXG4gXHRkbyB7XG4rXHRcdGRhdGEtXHUwMDNlZmxhZ3MgPSAwO1xuK1xuIFx0XHRzZXEgPSByZWFkX3NlcWNvdW50X2JlZ2luKFx1MDAyNmthLVx1MDAzZXB2Y2xvY2tfc2MpO1xuLVx0XHRfX2dldF9rdm1jbG9jayhrdm0sIGRhdGEpO1xuK1x0XHRpZiAoIV9fZ2V0X2t2bWNsb2NrX21hc3Rlcl9jbG9jayhrdm0sIGRhdGEpKVxuK1x0XHRcdGRhdGEtXHUwMDNlY2xvY2sgPSBnZXRfa3ZtY2xvY2tfYmFzZV9ucygpICsga2EtXHUwMDNla3ZtY2xvY2tfb2Zmc2V0O1xuIFx0fSB3aGlsZSAocmVhZF9zZXFjb3VudF9yZXRyeShcdTAwMjZrYS1cdTAwM2VwdmNsb2NrX3NjLCBzZXEpKTtcbiB9XG4gXG5AQCAtMTc2MiwzNiArMTgyMiw0NSBAQCBzdGF0aWMgdm9pZCBrdm1fc2V0dXBfZ3Vlc3RfcHZjbG9jayhzdHJ1Y3QgcHZjbG9ja192Y3B1X3RpbWVfaW5mbyAqcmVmX2h2X2Nsb2NrLFxuIFxuIGludCBrdm1fZ3Vlc3RfdGltZV91cGRhdGUoc3RydWN0IGt2bV92Y3B1ICp2KVxuIHtcbitcdHU2NCB0Z3RfdHNjX2h6LCB0c2NfdGltZXN0YW1wLCBob3N0X3RzYywgbWFzdGVyX3RzYywgbWFzdGVyX25zO1xuK1x0c3RydWN0IGt2bV9hcmNoICprYSBfX21heWJlX3VudXNlZCA9IFx1MDAyNnYtXHUwMDNla3ZtLVx1MDAzZWFyY2g7XG4gXHRzdHJ1Y3QgcHZjbG9ja192Y3B1X3RpbWVfaW5mbyBodl9jbG9jayA9IHt9O1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncywgdGd0X3RzY19raHo7XG4tXHR1bnNpZ25lZCBzZXE7XG4gXHRzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCAqdmNwdSA9IFx1MDAyNnYtXHUwMDNlYXJjaDtcbi1cdHN0cnVjdCBrdm1fYXJjaCAqa2EgPSBcdTAwMjZ2LVx1MDAzZWt2bS1cdTAwM2VhcmNoO1xuIFx0czY0IGtlcm5lbF9ucztcbi1cdHU2NCB0c2NfdGltZXN0YW1wLCBob3N0X3RzYztcbi1cdGJvb2wgdXNlX21hc3Rlcl9jbG9jaztcbi1cbi1cdGtlcm5lbF9ucyA9IDA7XG4tXHRob3N0X3RzYyA9IDA7XG4gXG4gXHQvKlxuIFx0ICogSWYgdGhlIGhvc3QgdXNlcyBUU0MgY2xvY2ssIHRoZW4gcGFzc3Rocm91Z2ggVFNDIGFzIHN0YWJsZVxuIFx0ICogdG8gdGhlIGd1ZXN0LlxuIFx0ICovXG4rI2lmZGVmIENPTkZJR19YODZfNjRcbitcdGJvb2wgdXNlX21hc3Rlcl9jbG9jaztcbitcdHVuc2lnbmVkIGludCBzZXE7XG4rXG4gXHRkbyB7XG4gXHRcdHNlcSA9IHJlYWRfc2VxY291bnRfYmVnaW4oXHUwMDI2a2EtXHUwMDNlcHZjbG9ja19zYyk7XG4gXHRcdHVzZV9tYXN0ZXJfY2xvY2sgPSBrYS1cdTAwM2V1c2VfbWFzdGVyX2Nsb2NrO1xuLVx0XHRpZiAodXNlX21hc3Rlcl9jbG9jaykge1xuLVx0XHRcdGhvc3RfdHNjID0ga2EtXHUwMDNlbWFzdGVyX2N5Y2xlX25vdztcbi1cdFx0XHRrZXJuZWxfbnMgPSBrYS1cdTAwM2VtYXN0ZXJfa2VybmVsX25zO1xuK1x0XHRpZiAoIXVzZV9tYXN0ZXJfY2xvY2spXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGlmICgha3ZtX2dldF90aW1lX2FuZF9jbG9ja3JlYWQoXHUwMDI2a2VybmVsX25zLCBcdTAwMjZob3N0X3RzYykpIHtcbitcdFx0XHR1c2VfbWFzdGVyX2Nsb2NrID0gZmFsc2U7XG4rXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbi1cdH0gd2hpbGUgKHJlYWRfc2VxY291bnRfcmV0cnkoXHUwMDI2a2EtXHUwMDNlcHZjbG9ja19zYywgc2VxKSk7XG4gXG4tXHQvKiBLZWVwIGlycSBkaXNhYmxlZCB0byBwcmV2ZW50IGNoYW5nZXMgdG8gdGhlIGNsb2NrICovXG4tXHRsb2NhbF9pcnFfc2F2ZShmbGFncyk7XG4tXHR0Z3RfdHNjX2toeiA9IGdldF9jcHVfdHNjX2toeigpO1xuLVx0aWYgKHVubGlrZWx5KHRndF90c2Nfa2h6ID09IDApKSB7XG4tXHRcdGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbitcdFx0bWFzdGVyX3RzYyA9IGthLVx1MDAzZW1hc3Rlcl9jeWNsZV9ub3c7XG4rXHRcdG1hc3Rlcl9ucyA9IGthLVx1MDAzZW1hc3Rlcl9rZXJuZWxfbnM7XG4rXHR9IHdoaWxlIChyZWFkX3NlcWNvdW50X3JldHJ5KFx1MDAyNmthLVx1MDAzZXB2Y2xvY2tfc2MsIHNlcSkpO1xuKyNlbHNlXG4rXHRjb25zdCBib29sIHVzZV9tYXN0ZXJfY2xvY2sgPSBmYWxzZTtcbisjZW5kaWZcbitcdC8qXG4rXHQgKiBFbnN1cmUgcmVhZGluZyB0aGUgVFNDK2ZyZXF1ZW5jeSBwYWlyIGlzIGRvbmUgb24gdGhlIHNhbWUgQ1BVLiAgV2hlblxuK1x0ICogTk9UIHVzaW5nIHRoZSBtYXN0ZXIgY2xvY2ssIHRoZSBUU0MgZnJlcXVlbmN5IG1heSB2YXJ5IGJldHdlZW4gQ1BVcy5cbitcdCAqL1xuK1x0cHJlZW1wdF9kaXNhYmxlKCk7XG4rXHR0Z3RfdHNjX2h6ID0gKHU2NClnZXRfY3B1X3RzY19raHooKSAqIEhaX1BFUl9LSFo7XG4rXHRpZiAodW5saWtlbHkodGd0X3RzY19oeiA9PSAwKSkge1xuK1x0XHRwcmVlbXB0X2VuYWJsZSgpO1xuIFx0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfQ0xPQ0tfVVBEQVRFLCB2KTtcbiBcdFx0cmV0dXJuIDE7XG4gXHR9XG5AQCAtMTgyMCwyOCArMTg4OSw0MyBAQCBpbnQga3ZtX2d1ZXN0X3RpbWVfdXBkYXRlKHN0cnVjdCBrdm1fdmNwdSAqdilcbiBcdFx0fVxuIFx0fVxuIFxuLVx0bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuK1x0LypcbitcdCAqIFJlZnJlc2ggTDEncyBsYXN0IFwib2JzZXJ2ZWRcIiBUU0MgdG8gbWF0Y2ggdGhlIFBWIGNsb2NrJ3MgdGltZXN0YW1wLFxuK1x0ICogZS5nLiBzbyB0aGF0IHRoZSBndWVzdCBjYW4ndCBzZWUgYSBUU0MgdGhhdCdzIGJlaGluZCB0aGUgcmVmZXJlbmNlLlxuK1x0ICovXG4rXHR2Y3B1LVx1MDAzZWxhc3RfZ3Vlc3RfdHNjID0gdHNjX3RpbWVzdGFtcDtcbitcbitcdHByZWVtcHRfZW5hYmxlKCk7XG4gXG4gXHQvKiBXaXRoIGFsbCB0aGUgaW5mbyB3ZSBnb3QsIGZpbGwgaW4gdGhlIHZhbHVlcyAqL1xuIFxuIFx0aWYgKGt2bV9jYXBzLmhhc190c2NfY29udHJvbCkge1xuLVx0XHR0Z3RfdHNjX2toeiA9IGt2bV9zY2FsZV90c2ModGd0X3RzY19raHosXG4rXHRcdHRndF90c2NfaHogPSBrdm1fc2NhbGVfdHNjKHRndF90c2NfaHosXG4gXHRcdFx0XHRcdCAgICB2LVx1MDAzZWFyY2gubDFfdHNjX3NjYWxpbmdfcmF0aW8pO1xuLVx0XHR0Z3RfdHNjX2toeiA9IHRndF90c2Nfa2h6ID8gOiAxO1xuK1x0XHR0Z3RfdHNjX2h6ID0gdGd0X3RzY19oeiA/IDogMTtcbiBcdH1cbiBcbi1cdGlmICh1bmxpa2VseSh2Y3B1LVx1MDAzZWh3X3RzY19raHogIT0gdGd0X3RzY19raHopKSB7XG4tXHRcdGt2bV9nZXRfdGltZV9zY2FsZShOU0VDX1BFUl9TRUMsIHRndF90c2Nfa2h6ICogMTAwMExMLFxuK1x0aWYgKHVubGlrZWx5KHZjcHUtXHUwMDNlaHdfdHNjX2h6ICE9IHRndF90c2NfaHopKSB7XG4rXHRcdGt2bV9nZXRfdGltZV9zY2FsZShOU0VDX1BFUl9TRUMsIHRndF90c2NfaHosXG4gXHRcdFx0XHQgICBcdTAwMjZ2Y3B1LVx1MDAzZXB2Y2xvY2tfdHNjX3NoaWZ0LFxuIFx0XHRcdFx0ICAgXHUwMDI2dmNwdS1cdTAwM2VwdmNsb2NrX3RzY19tdWwpO1xuLVx0XHR2Y3B1LVx1MDAzZWh3X3RzY19raHogPSB0Z3RfdHNjX2toejtcbitcdFx0dmNwdS1cdTAwM2Vod190c2NfaHogPSB0Z3RfdHNjX2h6O1xuIFx0fVxuIFxuIFx0aHZfY2xvY2sudHNjX3NoaWZ0ID0gdmNwdS1cdTAwM2VwdmNsb2NrX3RzY19zaGlmdDtcbiBcdGh2X2Nsb2NrLnRzY190b19zeXN0ZW1fbXVsID0gdmNwdS1cdTAwM2VwdmNsb2NrX3RzY19tdWw7XG4tXHRodl9jbG9jay50c2NfdGltZXN0YW1wID0gdHNjX3RpbWVzdGFtcDtcbi1cdGh2X2Nsb2NrLnN5c3RlbV90aW1lID0ga2VybmVsX25zICsgdi1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5rdm1jbG9ja19vZmZzZXQ7XG4tXHR2Y3B1LVx1MDAzZWxhc3RfZ3Vlc3RfdHNjID0gdHNjX3RpbWVzdGFtcDtcbitcdC8qXG4rXHQgKiBJZiB0aGUgbWFzdGVyIGNsb2NrIGlzIE5PVCBpbiB1c2UsIHRoZSByZWZlcmVuY2UgdGltZSBwbGFjZWQgaW4gdGhlXG4rXHQgKiBodl9jbG9jayBpcyBcIm5vd1wiLiAgSWYgbWFzdGVyIGNsb2NrIGlzIGluIHVzZSwgdGhlIHJlZmVyZW5jZSB0aW1lIGlzXG4rXHQgKiB0aGUgbWFzdGVyIGNsb2NrJ3Mgc25hcHNob3QgZnJvbSBzb21lIHRpbWUgaW4gdGhlIHBhc3QsIG5vdCBcIm5vd1wiLlxuK1x0ICovXG4rXHRpZiAodXNlX21hc3Rlcl9jbG9jaykge1xuK1x0XHRodl9jbG9jay50c2NfdGltZXN0YW1wID0ga3ZtX3JlYWRfbDFfdHNjKHYsIG1hc3Rlcl90c2MpO1xuK1x0XHRodl9jbG9jay5zeXN0ZW1fdGltZSA9IG1hc3Rlcl9ucyArIHYtXHUwMDNla3ZtLVx1MDAzZWFyY2gua3ZtY2xvY2tfb2Zmc2V0O1xuK1x0fSBlbHNlIHtcbitcdFx0aHZfY2xvY2sudHNjX3RpbWVzdGFtcCA9IHRzY190aW1lc3RhbXA7XG4rXHRcdGh2X2Nsb2NrLnN5c3RlbV90aW1lID0ga2VybmVsX25zICsgdi1cdTAwM2Vrdm0tXHUwMDNlYXJjaC5rdm1jbG9ja19vZmZzZXQ7XG4rXHR9XG4gXG4gXHQvKiBJZiB0aGUgaG9zdCB1c2VzIFRTQyBjbG9ja3NvdXJjZSwgdGhlbiBpdCBpcyBzdGFibGUgKi9cbiBcdGh2X2Nsb2NrLmZsYWdzID0gMDtcbkBAIC0xOTAzLDYzICsxOTg3LDIyIEBAIGludCBrdm1fZ3Vlc3RfdGltZV91cGRhdGUoc3RydWN0IGt2bV92Y3B1ICp2KVxuICAqIHdhbGxjbG9jayBhbmQga3ZtY2xvY2sgdGltZXMsIGFuZCBzdWJ0cmFjdGluZyBvbmUgZnJvbSB0aGUgb3RoZXIuXG4gICpcbiAgKiBGYWxsIGJhY2sgdG8gdXNpbmcgdGhlaXIgdmFsdWVzIGF0IHNsaWdodGx5IGRpZmZlcmVudCBtb21lbnRzIGJ5XG4tICogY2FsbGluZyBrdGltZV9nZXRfcmVhbF9ucygpIGFuZCBnZXRfa3ZtY2xvY2tfbnMoKSBzZXBhcmF0ZWx5LlxuKyAqIGNhbGxpbmcga3RpbWVfZ2V0X3JlYWxfbnMoKSBhbmQgZ2V0X2t2bWNsb2NrKCkgc2VwYXJhdGVseS5cbiAgKi9cbiB1aW50NjRfdCBrdm1fZ2V0X3dhbGxfY2xvY2tfZXBvY2goc3RydWN0IGt2bSAqa3ZtKVxuIHtcbi0jaWZkZWYgQ09ORklHX1g4Nl82NFxuLVx0c3RydWN0IHB2Y2xvY2tfdmNwdV90aW1lX2luZm8gaHZfY2xvY2s7XG4tXHRzdHJ1Y3Qga3ZtX2FyY2ggKmthID0gXHUwMDI2a3ZtLVx1MDAzZWFyY2g7XG4tXHR1bnNpZ25lZCBsb25nIHNlcSwgbG9jYWxfdHNjX2toejtcbi1cdHN0cnVjdCB0aW1lc3BlYzY0IHRzO1xuLVx0dWludDY0X3QgaG9zdF90c2M7XG4tXG4tXHRkbyB7XG4tXHRcdHNlcSA9IHJlYWRfc2VxY291bnRfYmVnaW4oXHUwMDI2a2EtXHUwMDNlcHZjbG9ja19zYyk7XG4tXG4tXHRcdGxvY2FsX3RzY19raHogPSAwO1xuLVx0XHRpZiAoIWthLVx1MDAzZXVzZV9tYXN0ZXJfY2xvY2spXG4tXHRcdFx0YnJlYWs7XG4tXG4tXHRcdC8qXG4tXHRcdCAqIFRoZSBUU0MgcmVhZCBhbmQgdGhlIGNhbGwgdG8gZ2V0X2NwdV90c2Nfa2h6KCkgbXVzdCBoYXBwZW5cbi1cdFx0ICogb24gdGhlIHNhbWUgQ1BVLlxuLVx0XHQgKi9cbi1cdFx0Z2V0X2NwdSgpO1xuLVxuLVx0XHRsb2NhbF90c2Nfa2h6ID0gZ2V0X2NwdV90c2Nfa2h6KCk7XG4tXG4tXHRcdGlmIChsb2NhbF90c2Nfa2h6IFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIWt2bV9nZXRfd2FsbHRpbWVfYW5kX2Nsb2NrcmVhZChcdTAwMjZ0cywgXHUwMDI2aG9zdF90c2MpKVxuLVx0XHRcdGxvY2FsX3RzY19raHogPSAwOyAvKiBGYWxsIGJhY2sgdG8gb2xkIG1ldGhvZCAqL1xuLVxuLVx0XHRwdXRfY3B1KCk7XG4tXG4tXHRcdC8qXG4tXHRcdCAqIFRoZXNlIHZhbHVlcyBtdXN0IGJlIHNuYXBzaG90dGVkIHdpdGhpbiB0aGUgc2VxY291bnQgbG9vcC5cbi1cdFx0ICogQWZ0ZXIgdGhhdCwgaXQncyBqdXN0IG1hdGhlbWF0aWNzIHdoaWNoIGNhbiBoYXBwZW4gb24gYW55XG4tXHRcdCAqIENQVSBhdCBhbnkgdGltZS5cbi1cdFx0ICovXG4tXHRcdGh2X2Nsb2NrLnRzY190aW1lc3RhbXAgPSBrYS1cdTAwM2VtYXN0ZXJfY3ljbGVfbm93O1xuLVx0XHRodl9jbG9jay5zeXN0ZW1fdGltZSA9IGthLVx1MDAzZW1hc3Rlcl9rZXJuZWxfbnMgKyBrYS1cdTAwM2Vrdm1jbG9ja19vZmZzZXQ7XG4rXHRzdHJ1Y3Qga3ZtX2Nsb2NrX2RhdGEgZGF0YTtcbiBcbi1cdH0gd2hpbGUgKHJlYWRfc2VxY291bnRfcmV0cnkoXHUwMDI2a2EtXHUwMDNlcHZjbG9ja19zYywgc2VxKSk7XG4rXHRnZXRfa3ZtY2xvY2soa3ZtLCBcdTAwMjZkYXRhKTtcbiBcbiBcdC8qXG4tXHQgKiBJZiB0aGUgY29uZGl0aW9ucyB3ZXJlIHJpZ2h0LCBhbmQgb2J0YWluaW5nIHRoZSB3YWxsY2xvY2srVFNDIHdhc1xuLVx0ICogc3VjY2Vzc2Z1bCwgY2FsY3VsYXRlIHRoZSBLVk0gY2xvY2sgYXQgdGhlIGNvcnJlc3BvbmRpbmcgdGltZSBhbmRcbi1cdCAqIHN1YnRyYWN0IG9uZSBmcm9tIHRoZSBvdGhlciB0byBnZXQgdGhlIGd1ZXN0J3MgZXBvY2ggaW4gbmFub3NlY29uZHNcbi1cdCAqIHNpbmNlIDE5NzAtMDEtMDEuXG4rXHQgKiBJZiBnZXRfa3ZtY2xvY2soKSBjYXB0dXJlZCBib3RoIHdhbGxjbG9jayBhbmQga3ZtY2xvY2sgZnJvbSB0aGVcbitcdCAqIHNhbWUgVFNDIHJlYWRpbmcsIHVzZSB0aGVtIGZvciBhIHByZWNpc2UgZXBvY2ggY2FsY3VsYXRpb24uXG4gXHQgKi9cbi1cdGlmIChsb2NhbF90c2Nfa2h6KSB7XG4tXHRcdGt2bV9nZXRfdGltZV9zY2FsZShOU0VDX1BFUl9TRUMsIGxvY2FsX3RzY19raHogKiBOU0VDX1BFUl9VU0VDLFxuLVx0XHRcdFx0ICAgXHUwMDI2aHZfY2xvY2sudHNjX3NoaWZ0LFxuLVx0XHRcdFx0ICAgXHUwMDI2aHZfY2xvY2sudHNjX3RvX3N5c3RlbV9tdWwpO1xuLVx0XHRyZXR1cm4gdHMudHZfbnNlYyArIE5TRUNfUEVSX1NFQyAqIHRzLnR2X3NlYyAtXG4tXHRcdFx0X19wdmNsb2NrX3JlYWRfY3ljbGVzKFx1MDAyNmh2X2Nsb2NrLCBob3N0X3RzYyk7XG4tXHR9XG4tI2VuZGlmXG4tXHRyZXR1cm4ga3RpbWVfZ2V0X3JlYWxfbnMoKSAtIGdldF9rdm1jbG9ja19ucyhrdm0pO1xuK1x0aWYgKGRhdGEuZmxhZ3MgXHUwMDI2IEtWTV9DTE9DS19SRUFMVElNRSlcbitcdFx0cmV0dXJuIGRhdGEucmVhbHRpbWUgLSBkYXRhLmNsb2NrO1xuK1xuK1x0cmV0dXJuIGt0aW1lX2dldF9yZWFsX25zKCkgLSBkYXRhLmNsb2NrO1xuIH1cbiBcbiAvKlxuQEAgLTI1ODMsNyArMjYyNiw3IEBAIHZvaWQga3ZtX2FyY2hfdmNwdV9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGNwdSlcbiBcdFx0XHRtYXJrX3RzY191bnN0YWJsZShcIktWTSBkaXNjb3ZlcmVkIGJhY2t3YXJkcyBUU0NcIik7XG4gXG4gXHRcdGlmIChrdm1fY2hlY2tfdHNjX3Vuc3RhYmxlKCkpIHtcbi1cdFx0XHR1NjQgb2Zmc2V0ID0ga3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldCh2Y3B1LFxuK1x0XHRcdHU2NCBvZmZzZXQgPSBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0KHZjcHUsIHJkdHNjKCksXG4gXHRcdFx0XHRcdFx0dmNwdS1cdTAwM2VhcmNoLmxhc3RfZ3Vlc3RfdHNjKTtcbiBcdFx0XHRrdm1fdmNwdV93cml0ZV90c2Nfb2Zmc2V0KHZjcHUsIG9mZnNldCk7XG4gXHRcdFx0aWYgKCF2Y3B1LVx1MDAzZWFyY2guZ3Vlc3RfdHNjX3Byb3RlY3RlZClcbkBAIC02ODY2LDYgKzY5MDksNyBAQCBzdGF0aWMgdm9pZCBwdmNsb2NrX2lycV93b3JrX2ZuKHN0cnVjdCBpcnFfd29yayAqdylcbiB9XG4gXG4gc3RhdGljIERFRklORV9JUlFfV09SSyhwdmNsb2NrX2lycV93b3JrLCBwdmNsb2NrX2lycV93b3JrX2ZuKTtcbisjZW5kaWZcbiBcbiAvKlxuICAqIE5vdGlmaWNhdGlvbiBhYm91dCBwdmNsb2NrIGd0b2QgZGF0YSB1cGRhdGUuXG5AQCAtNjg3MywyNiArNjkxNywyNiBAQCBzdGF0aWMgREVGSU5FX0lSUV9XT1JLKHB2Y2xvY2tfaXJxX3dvcmssIHB2Y2xvY2tfaXJxX3dvcmtfZm4pO1xuIHN0YXRpYyBpbnQgcHZjbG9ja19ndG9kX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIHVudXNlZCxcbiBcdFx0XHQgICAgICAgdm9pZCAqcHJpdilcbiB7XG4tXHRzdHJ1Y3QgcHZjbG9ja19ndG9kX2RhdGEgKmd0b2QgPSBcdTAwMjZwdmNsb2NrX2d0b2RfZGF0YTtcbiBcdHN0cnVjdCB0aW1la2VlcGVyICp0ayA9IHByaXY7XG4gXG4gXHR1cGRhdGVfcHZjbG9ja19ndG9kKHRrKTtcbiBcbisjaWZkZWYgQ09ORklHX1g4Nl82NFxuIFx0LypcbiBcdCAqIERpc2FibGUgbWFzdGVyIGNsb2NrIGlmIGhvc3QgZG9lcyBub3QgdHJ1c3QsIG9yIGRvZXMgbm90IHVzZSxcbiBcdCAqIFRTQyBiYXNlZCBjbG9ja3NvdXJjZS4gRGVsZWdhdGUgcXVldWVfd29yaygpIHRvIGlycV93b3JrIGFzXG4gXHQgKiB0aGlzIGlzIGludm9rZWQgd2l0aCB0a19jb3JlLnNlcSB3cml0ZSBoZWxkLlxuIFx0ICovXG4tXHRpZiAoIWd0b2RfaXNfYmFzZWRfb25fdHNjKGd0b2QtXHUwMDNlY2xvY2sudmNsb2NrX21vZGUpIFx1MDAyNlx1MDAyNlxuK1x0aWYgKCFndG9kX2lzX2Jhc2VkX29uX3RzYyhwdmNsb2NrX2d0b2RfZGF0YS5jbG9jay52Y2xvY2tfbW9kZSkgXHUwMDI2XHUwMDI2XG4gXHQgICAgYXRvbWljX3JlYWQoXHUwMDI2a3ZtX2d1ZXN0X2hhc19tYXN0ZXJfY2xvY2spICE9IDApXG4gXHRcdGlycV93b3JrX3F1ZXVlKFx1MDAyNnB2Y2xvY2tfaXJxX3dvcmspO1xuKyNlbmRpZlxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcHZjbG9ja19ndG9kX25vdGlmaWVyID0ge1xuIFx0Lm5vdGlmaWVyX2NhbGwgPSBwdmNsb2NrX2d0b2Rfbm90aWZ5LFxuIH07XG4tI2VuZGlmXG4gXG4gdm9pZCBrdm1fc2V0dXBfeHNzX2NhcHModm9pZClcbiB7XG5AQCAtNzExMSw5ICs3MTU1LDkgQEAgaW50IGt2bV94ODZfdmVuZG9yX2luaXQoc3RydWN0IGt2bV94ODZfaW5pdF9vcHMgKm9wcylcbiBcbiBcdGlmIChwaV9pbmplY3RfdGltZXIgPT0gLTEpXG4gXHRcdHBpX2luamVjdF90aW1lciA9IGhvdXNla2VlcGluZ19lbmFibGVkKEhLX1RZUEVfVElNRVIpO1xuLSNpZmRlZiBDT05GSUdfWDg2XzY0XG4gXHRwdmNsb2NrX2d0b2RfcmVnaXN0ZXJfbm90aWZpZXIoXHUwMDI2cHZjbG9ja19ndG9kX25vdGlmaWVyKTtcbiBcbisjaWZkZWYgQ09ORklHX1g4Nl82NFxuIFx0aWYgKGh5cGVydmlzb3JfaXNfdHlwZShYODZfSFlQRVJfTVNfSFlQRVJWKSlcbiBcdFx0c2V0X2h2X3RzY2NoYW5nZV9jYihrdm1faHlwZXJ2X3RzY19ub3RpZmllcik7XG4gI2VuZGlmXG5AQCAtNzE3MCw4ICs3MjE0LDggQEAgdm9pZCBrdm1feDg2X3ZlbmRvcl9leGl0KHZvaWQpXG4gXHRcdFx0XHRcdCAgICBDUFVGUkVRX1RSQU5TSVRJT05fTk9USUZJRVIpO1xuIFx0XHRjcHVocF9yZW1vdmVfc3RhdGVfbm9jYWxscyhDUFVIUF9BUF9YODZfS1ZNX0NMS19PTkxJTkUpO1xuIFx0fVxuLSNpZmRlZiBDT05GSUdfWDg2XzY0XG4gXHRwdmNsb2NrX2d0b2RfdW5yZWdpc3Rlcl9ub3RpZmllcihcdTAwMjZwdmNsb2NrX2d0b2Rfbm90aWZpZXIpO1xuKyNpZmRlZiBDT05GSUdfWDg2XzY0XG4gXHRpcnFfd29ya19zeW5jKFx1MDAyNnB2Y2xvY2tfaXJxX3dvcmspO1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZwdmNsb2NrX2d0b2Rfd29yayk7XG4gI2VuZGlmXG5AQCAtOTQ0MCw2ICs5NDg0LDggQEAgdm9pZCBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0XHRyZXR1cm47XG4gXHR2Y3B1X2xvYWQodmNwdSk7XG4gXHRrdm1fc3luY2hyb25pemVfdHNjKHZjcHUsIE5VTEwpO1xuK1x0aWYgKCF2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnVzZV9tYXN0ZXJfY2xvY2spXG4rXHRcdGt2bV91cGRhdGVfbWFzdGVyY2xvY2sodmNwdS1cdTAwM2Vrdm0pO1xuIFx0dmNwdV9wdXQodmNwdSk7XG4gXG4gXHQvKiBwb2xsIGNvbnRyb2wgZW5hYmxlZCBieSBkZWZhdWx0ICovXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5oIGIvYXJjaC94ODYva3ZtL3g4Ni5oXG5pbmRleCAwZjU5MTliMDkyZTQ3Li4xZDlhNjYwNDhiMDFlIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5oXG4rKysgYi9hcmNoL3g4Ni9rdm0veDg2LmhcbkBAIC0zMzUsNyArMzM1LDggQEAgdTY0IGt2bV9zY2FsZV90c2ModTY0IHRzYywgdTY0IHJhdGlvKTtcbiB1NjQga3ZtX3JlYWRfbDFfdHNjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGhvc3RfdHNjKTtcbiB1NjQga3ZtX2NhbGNfbmVzdGVkX3RzY19vZmZzZXQodTY0IGwxX29mZnNldCwgdTY0IGwyX29mZnNldCwgdTY0IGwyX211bHRpcGxpZXIpO1xuIHU2NCBrdm1fY2FsY19uZXN0ZWRfdHNjX211bHRpcGxpZXIodTY0IGwxX211bHRpcGxpZXIsIHU2NCBsMl9tdWx0aXBsaWVyKTtcbi11NjQga3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB0YXJnZXRfdHNjKTtcbit1NjQga3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBob3N0X3RzYyxcbitcdFx0XHQgICAgICB1NjQgdGFyZ2V0X3RzYyk7XG4gdm9pZCBrdm1fdmNwdV93cml0ZV90c2Nfb2Zmc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGwxX29mZnNldCk7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGFkanVzdF90c2Nfb2Zmc2V0X2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAwOjM5OjA0LjIyMzM4MDc1MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNDE5OTczNTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLVk0geDg2IFRTQyBIYW5kbGluZyBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMgdGhhdCdzIHR3ZWFraW5nIEtWTSdzIHg4NiBUU0MgaW1wbGVtZW50YXRpb24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgYSBmYWlybHkgZGVlcCBkaXZlIGludG8gaG93IEtWTSBoYW5kbGVzIHRpbWUtcmVsYXRlZCBhc3BlY3RzIHdpdGhpbiB0aGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoZSBjaGFuZ2VzIHRvdWNoIGEgbG90IG9mIGNvcmUgS1ZNIGNvZGUsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBUaW1lIFN0YW1wIENvdW50ZXIgKFRTQykuXG5cbk15IGZpcnN0IHRob3VnaHQgaXMgdGhlIGFyY2hpdGVjdHVyYWwgaW1wYWN0LiBUaGV5J3ZlIHVwZGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIGxpa2UgYGt2bV92Y3B1X2FyY2hgIGFuZCBga3ZtX2FyY2hgIHRvIGFjY29tbW9kYXRlIHRoZSBUU0MgY2hhbmdlcywgcmVuYW1pbmcgYGh3X3RzY19raHpgIHRvIGBod190c2NfaHpgLCBhbmQgaW50cm9kdWNpbmcgbmV3IHZhcmlhYmxlcyByZWxhdGVkIHRvIHNjYWxpbmcgcmF0aW9zIGFuZCBzaGlmdHMuIFRoaXMgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgYSBzaGlmdCBpbiBob3cgVFNDIGZyZXF1ZW5jeSBpcyBtYW5hZ2VkIGFuZCBjYWxjdWxhdGVkLiBJIGFsc28gbm90aWNlIHRoZXkncmUgbm93IHBhc3NpbmcgdGhlIGhvc3QgVFNDIHZhbHVlIHRvIGBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0YCwgd2hpY2ggaGludHMgYXQgaW1wcm92ZW1lbnRzIGluIHN5bmNocm9uaXphdGlvbiBhbmQgb2Zmc2V0IGNhbGN1bGF0aW9uIGJldHdlZW4gaG9zdCBhbmQgZ3Vlc3QuIFRoZSBjaGFuZ2VzIHRvIGBrdm1fY3B1aWRgIGFuZCBga3ZtX3NldF9tc3JfY29tbW9uYCBjb25maXJtIHRoaXMgZm9jdXMgb24gcmVmaW5lZCBUU0MgaW5mb3JtYXRpb24gZXhjaGFuZ2UuXG5cblRoZSBkZXBlbmRlbmNlIG9uIGBYODZfRkVBVFVSRV9DT05TVEFOVF9UU0NgIGluIGBzdm1faGFyZHdhcmVfc2V0dXBgIGFuZCBgc2V0dXBfdm1jc19jb25maWdgIGlzIGltcG9ydGFudCDigJMgaXQgaW5kaWNhdGVzIHRoYXQgdGhlc2UgdXBkYXRlcyBhcmUgb3B0aW1pemVkIGZvciBzeXN0ZW1zIHdoZXJlIHRoZSBUU0MgaXMga25vd24gdG8gYmUgc3RhYmxlLCBzbyBpdCdzIGdvb2QgdGhhdCB0aGV5J3JlIGV4cGxpY2l0bHkgY2hlY2tpbmcgZm9yIHRoYXQuIEl0IGFsc28gZmVlbHMgbGlrZSB0aGVzZSBjaGFuZ2VzIGFyZSBnZWFyZWQgdG93YXJkcyBtb3JlIHByZWNpc2UgZ3Vlc3QgdGltZSBrZWVwaW5nLiBUaGV5J3JlIHJlZmluaW5nIGhvdyB0aGUgZ3Vlc3QgVFNDIGlzIGNvbXB1dGVkLCBtYWtpbmcgaXQgaGFuZGxlIG5lZ2F0aXZlIGRlbHRhcyBncmFjZWZ1bGx5LiBSZWZhY3RvcmluZyBvZiB0aGUgYGt2bWNsb2NrYCBmdW5jdGlvbnMgYW5kIHRoZSB1c2Ugb2YgYHRndF90c2NfaHpgIGluc3RlYWQgb2YgYHRndF90c2Nfa2h6YCBpbiBga3ZtX2d1ZXN0X3RpbWVfdXBkYXRlYCBmdXJ0aGVyIGVtcGhhc2l6ZSB0aGUgZm9jdXMgb24gaW5jcmVhc2VkIGFjY3VyYWN5IGFuZCBjb25zaXN0ZW5jeS5cblxuTm93LCBhcyBhIEtWTSBleHBlcnQsIEkgbmVlZCB0byBjb25zaWRlciB0aGUgYnJvYWRlciBpbXBsaWNhdGlvbnMuIFdlJ3JlIGxvb2tpbmcgYXQgY29yZSBmdW5jdGlvbnMsIGluY2x1ZGluZyBga3ZtX3N5bmNocm9uaXplX3RzY2AsIGBrdm1fZ3Vlc3RfdGltZV91cGRhdGVgLCBga3ZtX2dldF93YWxsX2Nsb2NrX2Vwb2NoYCwgYGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXRgLCBhbmQgYGt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZWAuIEdpdmVuIG15IGtub3dsZWRnZSBvZiB0aGUgY29kZWJhc2UsIEkga25vdyB0aGVzZSBhcmUgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgaW9jdGxzIG9yIE1TUiB3cml0ZXMuIFRoaXMgbWVhbnMgdGhleSBhcmUgcmVhY2hhYmxlIGZyb20gYSBmdXp6ZXIgKHN5emthbGxlciwgaW4gbXkgY2FzZSkuXG5cbkVzc2VudGlhbGx5LCB0aGVzZSBUU0MgY2hhbmdlcyBhcmUgYW4gaW50ZWdyYWwgcGFydCBvZiBLVk0sIG1ha2luZyB0aGVtIGEgdmVyeSB2aWFibGUgdGFyZ2V0IGZvciBmdXp6aW5nLiBXaXRoIHRoaXMgaW4gbWluZCwgdGhlIHJlZmFjdG9yaW5nIGFuZCBhcmd1bWVudCBhZGRpdGlvbnMgYXJlIHJlYWxseSBpbXBvcnRhbnQuIEFueSBjaGFuZ2VzIHRvIHN5bmNocm9uaXphdGlvbiBvciBvZmZzZXQgY2FsY3VsYXRpb25zIHdpbGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIHRhcmdldHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODc5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI1NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAwOjM5OjE1LjY0MzM1Njg1OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzM0NDg5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMS1cXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXFxuYXJjaC94ODYva3ZtL0tjb25maWctNzAtXFx0Ym9vbCBcXFwiQ29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctODItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6ODM6Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDgtICAgICAgICBib29sIFxcXCJDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVxcdGJvb2wgXFxcIkFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTczOmNvbmZpZyBLVk1fSU9BUElDXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTc0LVxcdGJvb2wgXFxcIkkvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mzpjb25maWcgS1ZNX1NNTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4NC1cXHRib29sIFxcXCJTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5My1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxOTQ6Y29uZmlnIEtWTV9IWVBFUlZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTUtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA3LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwODpjb25maWcgS1ZNX1hFTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOS1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTc6Y29uZmlnIEtWTV9QUk9WRV9NTVVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTgtXFx0Ym9vbCBcXFwiUHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzA6Y29uZmlnIEtWTV9FWFRFUk5BTF9XUklURV9UUkFDS0lOR1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cXHRib29sXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMzpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzNC1cXHRpbnQgXFxcIk1heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAwOjM5OjE1LjY4NjcwODY0MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4NzczNjI5NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLVk0geDg2IFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgZG93biB0aGlzIEtWTSB4ODYgcGF0Y2guIEZpcnN0LCBpdCdzIHByZXR0eSBjbGVhciB0aGlzIGlzIEtWTS1zcGVjaWZpYywgd2hpY2ggaXMgYSBnaXZlbiwgYW5kIHdlJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IEtWTSBpcyBpbmRlZWQgZW5hYmxlZC4gRGlnZ2luZyBkZWVwZXIsIGl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgYXJjaC94ODYva3ZtL3g4Ni5jYCwgYGFyY2gveDg2L2t2bS9zdm0vc3ZtLmNgLCBhbmQgYGFyY2gveDg2L2t2bS92bXgvdm14LmNgLiBHaXZlbiB0aG9zZSBmaWxlcywgd2UncmUgbGlrZWx5IGxvb2tpbmcgYXQgY2hhbmdlcyByZWxhdGVkIHRvIGVpdGhlciBJbnRlbCBvciBBTUQgdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucywgc28ganVzdCBlbmFibGluZyBgS1ZNYCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgdGhlIGJ1aWxkIHJlcXVpcmVtZW50cy5cblxuTm93LCBsZXQncyBnZXQgaW50byB0aGUgZnVuY3Rpb25zIHRoZSBwYXRjaCBpcyB0YXJnZXRpbmcuIEkgc2VlOlxuXG4qICAgYGt2bV9zeW5jaHJvbml6ZV90c2NgXG4qICAgYGt2bV9ndWVzdF90aW1lX3VwZGF0ZWBcbiogICBga3ZtX2dldF93YWxsX2Nsb2NrX2Vwb2NoYFxuKiAgIGBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0YFxuKiAgIGBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGVgXG5cbk9rYXksIGFuZCBub3cgd2UgbmVlZCB0byBjb25zaWRlciBpZiB0aGVzZSBhcmUgaG90IHBhdGggZnVuY3Rpb25zLiBJdCBsb29rcyBsaWtlIGBrdm1fZ3Vlc3RfdGltZV91cGRhdGVgIHdpbGwgZ2V0IGNhbGxlZCBwZXJpb2RpY2FsbHksIG9yIHdoZW4gZXhpdHMgb2NjdXIsIHByb2JhYmx5IGEgcHJldHR5IGNvbW1vbiBvcGVyYXRpb24uIGBrdm1fc3luY2hyb25pemVfdHNjYCBpcyB0cmlnZ2VyZWQgYnkgTVNSIHdyaXRlcywgc28gYW55dGhpbmcgd3JpdGluZyB0aGUgVFNDIHdpbGwgYmUgY2FsbGluZyB0aGF0LiBga3ZtX2dldF93YWxsX2Nsb2NrX2Vwb2NoYCBoYXBwZW5zIG9uIGBLVk1fR0VUX0NMT0NLYCBpb2N0bHMgYW5kIGBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGVgIGlzIHRpZWQgdG8gdkNQVSBjcmVhdGlvbiwgd2hpY2ggaXMgYWxzbyBhIGZyZXF1ZW50IG9wZXJhdGlvbi5cblxuRmluYWxseSwgYSBxdWljayBjaGVjayB0byBzZWUgaWYgd2UncmUgZGVhbGluZyB3aXRoIGV4cG9ydGVkIGZ1bmN0aW9ucyBvciBzdGF0aWNzLiBJdCBhcHBlYXJzIG5vbmUgb2YgdGhlc2UgYXJlIHN0YXRpYywgd2hpY2ggaW1wbGllcyB0aGF0IHRoZXkncmUgYmVpbmcgdXNlZCBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGVpciBvcmlnaW5hbCBzb3VyY2UgZmlsZXMsIHdoaWNoIG1lYW5zIHdlIG1pZ2h0IGJlIGRlYWxpbmcgd2l0aCBhbiBBUEkgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDk1MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMDozOToyMS41NjQwNzQxNDVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxODc3MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3N5bmNocm9uaXplX3RzY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9tc3JzLmM9MTQ0Mj1pbnQga3ZtX3NldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcXG4tLVxcbmFyY2gveDg2L2t2bS9tc3JzLmMtMTYzMS1cXHRcXHRpZiAobXNyX2luZm8tXFx1MDAzZWhvc3RfaW5pdGlhdGVkKSB7XFxuYXJjaC94ODYva3ZtL21zcnMuYzoxNjMyOlxcdFxcdFxcdGt2bV9zeW5jaHJvbml6ZV90c2ModmNwdSwgXFx1MDAyNmRhdGEpO1xcbmFyY2gveDg2L2t2bS9tc3JzLmMtMTYzMy1cXHRcXHR9IGVsc2UgaWYgKCF2Y3B1LVxcdTAwM2VhcmNoLmd1ZXN0X3RzY19wcm90ZWN0ZWQpIHtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz0xMjQxPXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fY2hlY2tfdHNjX3Vuc3RhYmxlKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTI1OC0gKi9cXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTI1OTpzdGF0aWMgdm9pZCBfX2t2bV9zeW5jaHJvbml6ZV90c2Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgb2Zmc2V0LCB1NjQgdHNjLFxcbmFyY2gveDg2L2t2bS94ODYuYy0xMjYwLVxcdFxcdFxcdFxcdCAgdTY0IG5zLCBib29sIG1hdGNoZWQsIGJvb2wgdXNlcl9zZXRfdHNjKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEzMTItXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEzMTM6dm9pZCBrdm1fc3luY2hyb25pemVfdHNjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0ICp1c2VyX3ZhbHVlKVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMzE0LXtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMzc2LVxcbmFyY2gveDg2L2t2bS94ODYuYzoxMzc3OlxcdF9fa3ZtX3N5bmNocm9uaXplX3RzYyh2Y3B1LCBvZmZzZXQsIGRhdGEsIG5zLCBtYXRjaGVkLCAhIXVzZXJfdmFsdWUpO1xcbmFyY2gveDg2L2t2bS94ODYuYy0xMzc4LVxcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gudHNjX3dyaXRlX2xvY2ssIGZsYWdzKTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz0zMzM4PXN0YXRpYyBpbnQga3ZtX2FyY2hfdHNjX3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0zMzYzLVxcbmFyY2gveDg2L2t2bS94ODYuYzozMzY0OlxcdFxcdF9fa3ZtX3N5bmNocm9uaXplX3RzYyh2Y3B1LCBvZmZzZXQsIHRzYywgbnMsIG1hdGNoZWQsIHRydWUpO1xcbmFyY2gveDg2L2t2bS94ODYuYy0zMzY1LVxcdFxcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gudHNjX3dyaXRlX2xvY2ssIGZsYWdzKTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz05NDgxPXZvaWQga3ZtX2FyY2hfdmNwdV9wb3N0Y3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy05NDg1LVxcdHZjcHVfbG9hZCh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6OTQ4NjpcXHRrdm1fc3luY2hyb25pemVfdHNjKHZjcHUsIE5VTEwpO1xcbmFyY2gveDg2L2t2bS94ODYuYy05NDg3LVxcdGlmICghdmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLnVzZV9tYXN0ZXJfY2xvY2spXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2Lmg9MzMxPWludCBrdm1fZ3Vlc3RfdGltZV91cGRhdGUoc3RydWN0IGt2bV92Y3B1ICp2KTtcXG5hcmNoL3g4Ni9rdm0veDg2LmgtMzMyLVxcbmFyY2gveDg2L2t2bS94ODYuaDozMzM6dm9pZCBrdm1fc3luY2hyb25pemVfdHNjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0ICp1c2VyX3ZhbHVlKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmgtMzM0LXU2NCBrdm1fc2NhbGVfdHNjKHU2NCB0c2MsIHU2NCByYXRpbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAwOjM5OjIxLjYwOTI2NjMxOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NTQ5MzYyMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBsb29rcyBsaWtlIGl0J3MgZGlnZ2luZyBpbnRvIHRoZSBoZWFydCBvZiBLVk0ncyBUU0Mgc2NhbGluZyBhbmQgbWFzdGVyIGNsb2NrIG1lY2hhbmlzbXMuIFRoYXQncyBhIGNyaXRpY2FsIGFyZWEsIGFuZCB0aGUgZmFjdCB0aGF0IGl0J3MgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIG1lYW5zIGl0J3MgZGVmaW5pdGVseSBmdXp6YWJsZS4gVGltZSB0byBkaWcgaW4uXG5cbk15IGZvY3VzIHNob3VsZCBiZSBvbiB0aGVzZSBrZXkgc3ltYm9sczogYGt2bV9zeW5jaHJvbml6ZV90c2NgLCBga3ZtX2d1ZXN0X3RpbWVfdXBkYXRlYCwgYGt2bV9nZXRfd2FsbF9jbG9ja19lcG9jaGAsIGBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0YCwgYW5kIGBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGVgLiBUaGV5IHNlZW0gY2VudHJhbCB0byB0aGUgY2hhbmdlcy5cblxuTm93LCBjb25maWd1cmF0aW9uLiAgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZnV6emluZyBzZXR1cCBjYW4gYWN0dWFsbHkgaGl0IHRoaXMgY29kZS4gSSBuZWVkIHRvIGVuYWJsZSBzb21lIEtWTSBjb25maWdzLiBSaWdodCwgbGV0J3Mgc3RhcnQgd2l0aCBgS1ZNYCwgYnV0IEkgYmV0IGZvciBhY3R1YWwgZXhlY3V0aW9uLCBJJ2xsIGFsc28gbmVlZCBlaXRoZXIgYEtWTV9JTlRFTGAgb3IgYEtWTV9BTURgLiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBvbmx5IGFkZCBgS1ZNYCwgYEtWTV9JTlRFTGAsIGFuZCBgS1ZNX0FNRGAgdG8gYEVuYWJsZUNvbmZpZ3NgLCB3aXRob3V0IHRoZSBgQ09ORklHX2AgcHJlZml4LlxuXG5CZWZvcmUgSSBtb3ZlIG9uLCBsZXQgbWUgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBrdm1fZ2V0X3dhbGxfY2xvY2tfZXBvY2hgLiBUaGF0IG9uZSBzZWVtcyBpbnRlcmVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3OTAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDA6Mzk6MjYuMTY0MjA4NjFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDczNDE1MjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2dldF93YWxsX2Nsb2NrX2Vwb2NoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL21zcnMuYz0xMjI0PXN0YXRpYyB2b2lkIGt2bV93cml0ZV93YWxsX2Nsb2NrKHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3Qgd2FsbF9jbG9jaywgaW50IHNlY19oaV9vZnMpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTEyNDYtXFxuYXJjaC94ODYva3ZtL21zcnMuYzoxMjQ3OlxcdHdhbGxfbnNlYyA9IGt2bV9nZXRfd2FsbF9jbG9ja19lcG9jaChrdm0pO1xcbmFyY2gveDg2L2t2bS9tc3JzLmMtMTI0OC1cXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz0xODIzPWludCBrdm1fZ3Vlc3RfdGltZV91cGRhdGUoc3RydWN0IGt2bV92Y3B1ICp2KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTE5OTEtICovXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjE5OTI6dWludDY0X3Qga3ZtX2dldF93YWxsX2Nsb2NrX2Vwb2NoKHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTk5My17XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2Lmg9MzI4PXU2NCBnZXRfa3ZtY2xvY2tfbnMoc3RydWN0IGt2bSAqa3ZtKTtcXG5hcmNoL3g4Ni9rdm0veDg2Lmg6MzI5OnVpbnQ2NF90IGt2bV9nZXRfd2FsbF9jbG9ja19lcG9jaChzdHJ1Y3Qga3ZtICprdm0pO1xcbmFyY2gveDg2L2t2bS94ODYuaC0zMzAtYm9vbCBrdm1fZ2V0X21vbm90b25pY19hbmRfY2xvY2tyZWFkKHM2NCAqa2VybmVsX25zLCB1NjQgKnRzY190aW1lc3RhbXApO1xcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jPTM5PXN0YXRpYyBpbnQga3ZtX3hlbl9zaGFyZWRfaW5mb19pbml0KHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy02My1cXHQgKi9cXG5hcmNoL3g4Ni9rdm0veGVuLmM6NjQ6XFx0d2FsbF9uc2VjID0ga3ZtX2dldF93YWxsX2Nsb2NrX2Vwb2NoKGt2bSk7XFxuYXJjaC94ODYva3ZtL3hlbi5jLTY1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMDozOToyNi4yMTE1NTQwMDNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzAxMDc4MDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuIFRoaXMgYGt2bV9nZXRfd2FsbF9jbG9ja19lcG9jaGAgZnVuY3Rpb24uLi4gcmlnaHQsIGl0J3MgdXNlZCBieSBYZW4gYW5kIGludGVyYWN0cyB3aXRoIE1vZGVsLVNwZWNpZmljIFJlZ2lzdGVycyAoTVNScykuIFNvLCBpdCdzIHByZXR0eSBsb3ctbGV2ZWwsIGxpa2VseSBkZWFsaW5nIHdpdGggdGltZWtlZXBpbmcgc3luY2hyb25pemF0aW9uIGJldHdlZW4gdGhlIGh5cGVydmlzb3IgYW5kIHRoZSBndWVzdC5cblxuKipEaWdnaW5nIGludG8gVGltZWtlZXBpbmc6IFVuZGVyc3RhbmRpbmcgYGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXRgKipcblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5ICpob3cqIGl0J3Mgb3BlcmF0aW5nLiBNeSBuZXh0IHN0ZXAgaXMgZGVmaW5pdGVseSBnb2luZyB0byBiZSBkaXZpbmcgaW50byBga3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldGAuIEl0J3MgYWxtb3N0IGNlcnRhaW4gdGhpcyBmdW5jdGlvbiBmaWd1cmVzIG91dCB0aGUgVGltZSBTdGFtcCBDb3VudGVyIChUU0MpIG9mZnNldCBhdCB0aGUgTGV2ZWwgMSAoTDEpIHN0YWdlLiBUaGUgVFNDIGlzIHRoZSBjcml0aWNhbCBoYXJkd2FyZSByZWdpc3RlciB3ZSdyZSB0YWxraW5nIGFib3V0IGhlcmUuIEtub3dpbmcgaG93IHRoZSBndWVzdCdzIFRTQyByZWxhdGVzIHRvIHRoZSBob3N0J3MsIGVzcGVjaWFsbHkgd2l0aCB2aXJ0dWFsaXphdGlvbiwgaXMgYWJzb2x1dGVseSBrZXkgZm9yIGNvcnJlY3QgdGltZSBtYW5hZ2VtZW50LiBJJ20gZ3Vlc3NpbmcgdGhpcyBmdW5jdGlvbiBpcyBjZW50cmFsIHRvIGVzdGFibGlzaGluZyBhIHJlbGlhYmxlIHRpbWUgYmFzZSBmb3IgdGhlIGd1ZXN0LCBkZXNwaXRlIGFueSBoeXBlcnZpc29yIG92ZXJoZWFkIG9yIGludGVycnVwdGlvbnMuIEkgc3VzcGVjdCBpdCdzIGxvb2tpbmcgYXQgdGhlIGd1ZXN0IFRTQyBhbmQgY29tcGFyaW5nIGl0IHRvIGEga25vd24gaG9zdCBUU0Mgb3IgYSByZWZlcmVuY2UgdGltZSwgbWF5YmUgdXNpbmcgc29tZSBjYWxpYnJhdGlvbi4gVGhlIG9mZnNldCBjYWxjdWxhdGlvbiBpcyBjcnVjaWFsIHRvIG1haW50YWluaW5nIGEgY29uc2lzdGVudCB0aW1lIHZpZXcgd2l0aGluIHRoZSB2aXJ0dWFsIG1hY2hpbmUuIFRoaXMgaGFzIGltcGxpY2F0aW9ucyBmb3IgYSB3aG9sZSBsb2FkIG9mIHBlcmZvcm1hbmNlIG1ldHJpY3MsIGFuZCBpdCdzIHNvbWV0aGluZyBJIG5lZWQgdG8gZnVsbHkgZ3Jhc3AuIEknbGwgbmVlZCB0byBsb29rIGNhcmVmdWxseSBhdCB0aGUgY29kZSB0byB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzg1NywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAwOjM5OjI5LjkxMjYzMzk2NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYwMjk0ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9tc3JzLmM9MTQ0Mj1pbnQga3ZtX3NldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcXG4tLVxcbmFyY2gveDg2L2t2bS9tc3JzLmMtMTYzMy1cXHRcXHR9IGVsc2UgaWYgKCF2Y3B1LVxcdTAwM2VhcmNoLmd1ZXN0X3RzY19wcm90ZWN0ZWQpIHtcXG5hcmNoL3g4Ni9rdm0vbXNycy5jOjE2MzQ6XFx0XFx0XFx0dTY0IGFkaiA9IGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXQodmNwdSwgcmR0c2MoKSwgZGF0YSkgLVxcbmFyY2gveDg2L2t2bS9tc3JzLmMtMTYzNS1cXHRcXHRcXHRcXHQgIHZjcHUtXFx1MDAzZWFyY2gubDFfdHNjX29mZnNldDtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYz0xMTQ2PXU2NCBrdm1fc2NhbGVfdHNjKHU2NCB0c2MsIHU2NCByYXRpbylcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMTU1LVxcbmFyY2gveDg2L2t2bS94ODYuYzoxMTU2OnU2NCBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGhvc3RfdHNjLFxcbmFyY2gveDg2L2t2bS94ODYuYy0xMTU3LVxcdFxcdFxcdCAgICAgIHU2NCB0YXJnZXRfdHNjKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTEzMTM9dm9pZCBrdm1fc3luY2hyb25pemVfdHNjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0ICp1c2VyX3ZhbHVlKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEzMjItXFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gudHNjX3dyaXRlX2xvY2ssIGZsYWdzKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTMyMzpcXHRvZmZzZXQgPSBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0KHZjcHUsIHJkdHNjKCksIGRhdGEpO1xcbmFyY2gveDg2L2t2bS94ODYuYy0xMzI0LVxcdG5zID0gZ2V0X2t2bWNsb2NrX2Jhc2VfbnMoKTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy0xMzcxLVxcdFxcdFxcdGRhdGEgKz0gZGVsdGE7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjEzNzI6XFx0XFx0XFx0b2Zmc2V0ID0ga3ZtX2NvbXB1dGVfbDFfdHNjX29mZnNldCh2Y3B1LCByZHRzYygpLCBkYXRhKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTM3My1cXHRcXHR9XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MjU3OD12b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtMjYyOC1cXHRcXHRpZiAoa3ZtX2NoZWNrX3RzY191bnN0YWJsZSgpKSB7XFxuYXJjaC94ODYva3ZtL3g4Ni5jOjI2Mjk6XFx0XFx0XFx0dTY0IG9mZnNldCA9IGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXQodmNwdSwgcmR0c2MoKSxcXG5hcmNoL3g4Ni9rdm0veDg2LmMtMjYzMC1cXHRcXHRcXHRcXHRcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLmxhc3RfZ3Vlc3RfdHNjKTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuaD0zMzc9dTY0IGt2bV9jYWxjX25lc3RlZF90c2NfbXVsdGlwbGllcih1NjQgbDFfbXVsdGlwbGllciwgdTY0IGwyX211bHRpcGxpZXIpO1xcbmFyY2gveDg2L2t2bS94ODYuaDozMzg6dTY0IGt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgaG9zdF90c2MsXFxuYXJjaC94ODYva3ZtL3g4Ni5oLTMzOS1cXHRcXHRcXHQgICAgICB1NjQgdGFyZ2V0X3RzYyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAwOjM5OjI5Ljk1ODY2OTg1OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzAyMDcyOTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgU3RyYXRlZ3kgZm9yIFRoaXMgS1ZNIFBhdGNoKipcblxuT2theSwgYWZ0ZXIgYSBxdWljayByZXZpZXcsIHRoaXMgcGF0Y2ggbG9va3MgbGlrZSBpdCdzIGRlZmluaXRlbHkgd29ydGggdGhlIGVmZm9ydCB0byBmdXp6LiBUaGUgbW9kaWZpY2F0aW9ucyBpdCBtYWtlcyB0byB0aGUgS1ZNIHg4NiBUU0MgaGFuZGxpbmcsIHNwZWNpZmljYWxseSB0aGUgVFNDIHNjYWxpbmcsIG1hc3RlciBjbG9jayB1cGRhdGVzLCBhbmQgd2FsbCBjbG9jayBlcG9jaCBjYWxjdWxhdGlvbnMsIGFyZSBhbGwgcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZy4gVGhpcyBpcyBjb3JlIGh5cGVydmlzb3IgbG9naWMsIGFuZCB3ZSBrbm93IHRoYXQgaXQncyBkaXJlY3RseSBhY2Nlc3NpYmxlIGZyb20gZ3Vlc3QgVk1zIHRocm91Z2ggdmFyaW91cyBpbnRlcmZhY2VzIGxpa2UgTVNSIHdyaXRlcywgQ1BVSUQgaW5zdHJ1Y3Rpb25zLCBhbmQgS1ZNIGlvY3Rscy4gVGhhdCBraW5kIG9mIGV4cG9zdXJlIHNjcmVhbXMgdnVsbmVyYWJpbGl0eSBwb3RlbnRpYWwuXG5cblRoZXJlZm9yZSwgSSdtIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAuXG5cbk15IGltbWVkaWF0ZSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCBkaXJlY3RseSBoYW5kbGUgdGhlIFRTQyBzeW5jaHJvbml6YXRpb24gYW5kIGd1ZXN0IHRpbWUgdXBkYXRlcy4gSSdsbCBtYWtlIHN1cmUgdG8gYWRkIHRoZXNlIGZvY3VzIHN5bWJvbHMgdG8gdGhlIGZ1enppbmcgY29uZmlndXJhdGlvbjogYGt2bV9zeW5jaHJvbml6ZV90c2NgLCBga3ZtX2d1ZXN0X3RpbWVfdXBkYXRlYCwgYGt2bV9nZXRfd2FsbF9jbG9ja19lcG9jaGAsIGBrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0YCwgYW5kIGBrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGVgLiBUaGVzZSBhcmUgdGhlIGtleSBhcmVhcyB3aGVyZSB0aGUgcGF0Y2ggaW50cm9kdWNlcyBjaGFuZ2VzIGFuZCwgY29uc2VxdWVudGx5LCB3aGVyZSBJIGFudGljaXBhdGUgdGhlIG1vc3QgaW50ZXJlc3RpbmcgZnV6emluZyByZXN1bHRzLlxuXG5GaW5hbGx5LCBJJ2xsIGVuYWJsZSB0aGUgYEtWTWAsIGBLVk1fSU5URUxgLCBhbmQgYEtWTV9BTURgIGNvbmZpZ3VyYXRpb25zLiBHaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2VzLCB0aGVzZSBhcmUgZXNzZW50aWFsIHRvIGVuc3VyZSB0aGUgZnV6emVyIGNhbiBjb3JyZWN0bHkgZXhlcmNpc2UgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5kZXIgZGlmZmVyZW50IGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zLiBUaGlzIHNob3VsZCBnaXZlIHVzIGEgZ29vZCBzdGFydCB0b3dhcmRzIGlkZW50aWZ5aW5nIGFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGhpbiB0aGlzIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTE0NiwiT3V0cHV0VG9rZW5zIjoxODIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDA6Mzk6MzUuMjYwNzQ1MTg3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg3Mjk5MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCIsXG4gICAgXCJLVk1fQU1EXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3N5bmNocm9uaXplX3RzY1wiLFxuICAgIFwia3ZtX2d1ZXN0X3RpbWVfdXBkYXRlXCIsXG4gICAgXCJrdm1fZ2V0X3dhbGxfY2xvY2tfZXBvY2hcIixcbiAgICBcImt2bV9jb21wdXRlX2wxX3RzY19vZmZzZXRcIixcbiAgICBcImt2bV9hcmNoX3ZjcHVfcG9zdGNyZWF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEtWTSB4ODYgVFNDIChUaW1lIFN0YW1wIENvdW50ZXIpIGhhbmRsaW5nLCBpbmNsdWRpbmcgVFNDIHNjYWxpbmcsIG1hc3RlciBjbG9jayB1cGRhdGVzLCBhbmQgd2FsbCBjbG9jayBlcG9jaCBjYWxjdWxhdGlvbnMuIFRoaXMgaXMgY29yZSBoeXBlcnZpc29yIGxvZ2ljIHJlYWNoYWJsZSBmcm9tIGd1ZXN0IFZNcyB2aWEgTVNSIHdyaXRlcywgQ1BVSUQsIGFuZCBLVk0gaW9jdGxzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGhhbmRsaW5nIFRTQyBzeW5jaHJvbml6YXRpb24gYW5kIGd1ZXN0IHRpbWUgdXBkYXRlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9JTlRFTFwiLFxuICAgIFwiS1ZNX0FNRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9zeW5jaHJvbml6ZV90c2NcIixcbiAgICBcImt2bV9ndWVzdF90aW1lX3VwZGF0ZVwiLFxuICAgIFwia3ZtX2dldF93YWxsX2Nsb2NrX2Vwb2NoXCIsXG4gICAgXCJrdm1fY29tcHV0ZV9sMV90c2Nfb2Zmc2V0XCIsXG4gICAgXCJrdm1fYXJjaF92Y3B1X3Bvc3RjcmVhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBLVk0geDg2IFRTQyAoVGltZSBTdGFtcCBDb3VudGVyKSBoYW5kbGluZywgaW5jbHVkaW5nIFRTQyBzY2FsaW5nLCBtYXN0ZXIgY2xvY2sgdXBkYXRlcywgYW5kIHdhbGwgY2xvY2sgZXBvY2ggY2FsY3VsYXRpb25zLiBUaGlzIGlzIGNvcmUgaHlwZXJ2aXNvciBsb2dpYyByZWFjaGFibGUgZnJvbSBndWVzdCBWTXMgdmlhIE1TUiB3cml0ZXMsIENQVUlELCBhbmQgS1ZNIGlvY3Rscy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBoYW5kbGluZyBUU0Mgc3luY2hyb25pemF0aW9uIGFuZCBndWVzdCB0aW1lIHVwZGF0ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5c2q5[1] Phase: Succeeded StartedAt: 2026-08-05 00:39:46 +0000 UTC FinishedAt: 2026-08-05 00:39:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5c2q5[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-05 00:39:46 +0000 UTC FinishedAt: 2026-08-05 00:39:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5c2q5[2] Phase: Succeeded StartedAt: 2026-08-05 00:39:46 +0000 UTC FinishedAt: 2026-08-05 04:28:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5c2q5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_synchronize_tsc","kvm_guest_time_update","kvm_get_wall_clock_epoch","kvm_compute_l1_tsc_offset","kvm_arch_vcpu_postcreate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"6c89dfdc-3f3c-4a5e-bcfd-9ea6b3d59495","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-05 00:39:46 +0000 UTC FinishedAt: 2026-08-05 04:28:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_synchronize_tsc","kvm_guest_time_update","kvm_get_wall_clock_epoch","kvm_compute_l1_tsc_offset","kvm_arch_vcpu_postcreate"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"6c89dfdc-3f3c-4a5e-bcfd-9ea6b3d59495","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow5c2q5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_synchronize_tsc","kvm_guest_time_update","kvm_get_wall_clock_epoch","kvm_compute_l1_tsc_offset","kvm_arch_vcpu_postcreate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"6c89dfdc-3f3c-4a5e-bcfd-9ea6b3d59495","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-05 00:39:46 +0000 UTC FinishedAt: 2026-08-05 00:39:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5c2q5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_synchronize_tsc","kvm_guest_time_update","kvm_get_wall_clock_epoch","kvm_compute_l1_tsc_offset","kvm_arch_vcpu_postcreate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"6c89dfdc-3f3c-4a5e-bcfd-9ea6b3d59495","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-05 00:39:46 +0000 UTC FinishedAt: 2026-08-05 00:39:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.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-workflow5c2q5/series-workflow5c2q5-convert-artifact-4171612479/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5c2q5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_synchronize_tsc","kvm_guest_time_update","kvm_get_wall_clock_epoch","kvm_compute_l1_tsc_offset","kvm_arch_vcpu_postcreate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"6c89dfdc-3f3c-4a5e-bcfd-9ea6b3d59495","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-05 00:39:56 +0000 UTC FinishedAt: 2026-08-05 00:59:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5c2q5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_synchronize_tsc","kvm_guest_time_update","kvm_get_wall_clock_epoch","kvm_compute_l1_tsc_offset","kvm_arch_vcpu_postcreate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"6c89dfdc-3f3c-4a5e-bcfd-9ea6b3d59495","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-05 00:39:56 +0000 UTC FinishedAt: 2026-08-05 00:59:54 +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:*c271885a-bf2d-4769-810c-77b401deeade,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-workflow5c2q5/series-workflow5c2q5-convert-artifact-4171612479/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": "64d5370f-67e5-430d-b6f4-f07849f3fc86", "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-workflow5c2q5/series-workflow5c2q5-build-action-925748165/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5c2q5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_synchronize_tsc","kvm_guest_time_update","kvm_get_wall_clock_epoch","kvm_compute_l1_tsc_offset","kvm_arch_vcpu_postcreate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"6c89dfdc-3f3c-4a5e-bcfd-9ea6b3d59495","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-05 00:39:56 +0000 UTC FinishedAt: 2026-08-05 00:59:44 +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:*c271885a-bf2d-4769-810c-77b401deeade,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-workflow5c2q5/series-workflow5c2q5-convert-artifact-4171612479/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": "64d5370f-67e5-430d-b6f4-f07849f3fc86", "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-workflow5c2q5/series-workflow5c2q5-build-action-925748165/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5c2q5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_synchronize_tsc","kvm_guest_time_update","kvm_get_wall_clock_epoch","kvm_compute_l1_tsc_offset","kvm_arch_vcpu_postcreate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"6c89dfdc-3f3c-4a5e-bcfd-9ea6b3d59495","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-05 00:59:54 +0000 UTC FinishedAt: 2026-08-05 00:59:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5c2q5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_synchronize_tsc","kvm_guest_time_update","kvm_get_wall_clock_epoch","kvm_compute_l1_tsc_offset","kvm_arch_vcpu_postcreate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"6c89dfdc-3f3c-4a5e-bcfd-9ea6b3d59495","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-05 00:59:54 +0000 UTC FinishedAt: 2026-08-05 00:59:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5c2q5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_synchronize_tsc","kvm_guest_time_update","kvm_get_wall_clock_epoch","kvm_compute_l1_tsc_offset","kvm_arch_vcpu_postcreate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"6c89dfdc-3f3c-4a5e-bcfd-9ea6b3d59495","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-05 00:59:54 +0000 UTC FinishedAt: 2026-08-05 01:00:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5c2q5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_synchronize_tsc","kvm_guest_time_update","kvm_get_wall_clock_epoch","kvm_compute_l1_tsc_offset","kvm_arch_vcpu_postcreate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"6c89dfdc-3f3c-4a5e-bcfd-9ea6b3d59495","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-05 00:59:54 +0000 UTC FinishedAt: 2026-08-05 00:59:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"6c89dfdc-3f3c-4a5e-bcfd-9ea6b3d59495","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.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-workflow5c2q5/series-workflow5c2q5-convert-artifact-840307278/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5c2q5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_synchronize_tsc","kvm_guest_time_update","kvm_get_wall_clock_epoch","kvm_compute_l1_tsc_offset","kvm_arch_vcpu_postcreate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"6c89dfdc-3f3c-4a5e-bcfd-9ea6b3d59495","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-05 01:00:04 +0000 UTC FinishedAt: 2026-08-05 01:02:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5c2q5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_synchronize_tsc","kvm_guest_time_update","kvm_get_wall_clock_epoch","kvm_compute_l1_tsc_offset","kvm_arch_vcpu_postcreate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"6c89dfdc-3f3c-4a5e-bcfd-9ea6b3d59495","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-05 01:00:04 +0000 UTC FinishedAt: 2026-08-05 01:02:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*64d5370f-67e5-430d-b6f4-f07849f3fc86,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-workflow5c2q5/series-workflow5c2q5-build-action-925748165/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-workflow5c2q5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_synchronize_tsc","kvm_guest_time_update","kvm_get_wall_clock_epoch","kvm_compute_l1_tsc_offset","kvm_arch_vcpu_postcreate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"6c89dfdc-3f3c-4a5e-bcfd-9ea6b3d59495","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-05 01:02:18 +0000 UTC FinishedAt: 2026-08-05 01:02:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5c2q5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_synchronize_tsc","kvm_guest_time_update","kvm_get_wall_clock_epoch","kvm_compute_l1_tsc_offset","kvm_arch_vcpu_postcreate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"6c89dfdc-3f3c-4a5e-bcfd-9ea6b3d59495","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-05 01:02:18 +0000 UTC FinishedAt: 2026-08-05 01:02:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5c2q5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_synchronize_tsc","kvm_guest_time_update","kvm_get_wall_clock_epoch","kvm_compute_l1_tsc_offset","kvm_arch_vcpu_postcreate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"6c89dfdc-3f3c-4a5e-bcfd-9ea6b3d59495","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-05 01:02:18 +0000 UTC FinishedAt: 2026-08-05 01:18:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5c2q5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_synchronize_tsc","kvm_guest_time_update","kvm_get_wall_clock_epoch","kvm_compute_l1_tsc_offset","kvm_arch_vcpu_postcreate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"6c89dfdc-3f3c-4a5e-bcfd-9ea6b3d59495","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-05 01:02:18 +0000 UTC FinishedAt: 2026-08-05 01:18:39 +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:*c271885a-bf2d-4769-810c-77b401deeade,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-workflow5c2q5/series-workflow5c2q5-convert-artifact-840307278/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": "aa73922b-fda2-4038-816c-4d24da4bafdb", "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-workflow5c2q5/series-workflow5c2q5-build-action-1162654690/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5c2q5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_synchronize_tsc","kvm_guest_time_update","kvm_get_wall_clock_epoch","kvm_compute_l1_tsc_offset","kvm_arch_vcpu_postcreate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"6c89dfdc-3f3c-4a5e-bcfd-9ea6b3d59495","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-05 01:02:18 +0000 UTC FinishedAt: 2026-08-05 01:18:29 +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:*c271885a-bf2d-4769-810c-77b401deeade,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-workflow5c2q5/series-workflow5c2q5-convert-artifact-840307278/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": "aa73922b-fda2-4038-816c-4d24da4bafdb", "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-workflow5c2q5/series-workflow5c2q5-build-action-1162654690/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5c2q5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_synchronize_tsc","kvm_guest_time_update","kvm_get_wall_clock_epoch","kvm_compute_l1_tsc_offset","kvm_arch_vcpu_postcreate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"6c89dfdc-3f3c-4a5e-bcfd-9ea6b3d59495","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-05 01:18:39 +0000 UTC FinishedAt: 2026-08-05 01:18:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5c2q5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_synchronize_tsc","kvm_guest_time_update","kvm_get_wall_clock_epoch","kvm_compute_l1_tsc_offset","kvm_arch_vcpu_postcreate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"6c89dfdc-3f3c-4a5e-bcfd-9ea6b3d59495","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-05 01:18:39 +0000 UTC FinishedAt: 2026-08-05 01:18:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5c2q5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_synchronize_tsc","kvm_guest_time_update","kvm_get_wall_clock_epoch","kvm_compute_l1_tsc_offset","kvm_arch_vcpu_postcreate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"6c89dfdc-3f3c-4a5e-bcfd-9ea6b3d59495","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-05 01:18:39 +0000 UTC FinishedAt: 2026-08-05 01:20:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5c2q5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_synchronize_tsc","kvm_guest_time_update","kvm_get_wall_clock_epoch","kvm_compute_l1_tsc_offset","kvm_arch_vcpu_postcreate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"6c89dfdc-3f3c-4a5e-bcfd-9ea6b3d59495","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-05 01:18:39 +0000 UTC FinishedAt: 2026-08-05 01:20:43 +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:*aa73922b-fda2-4038-816c-4d24da4bafdb,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-workflow5c2q5/series-workflow5c2q5-build-action-1162654690/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-workflow5c2q5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_synchronize_tsc","kvm_guest_time_update","kvm_get_wall_clock_epoch","kvm_compute_l1_tsc_offset","kvm_arch_vcpu_postcreate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"6c89dfdc-3f3c-4a5e-bcfd-9ea6b3d59495","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-05 01:20:53 +0000 UTC FinishedAt: 2026-08-05 04:28:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5c2q5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_synchronize_tsc","kvm_guest_time_update","kvm_get_wall_clock_epoch","kvm_compute_l1_tsc_offset","kvm_arch_vcpu_postcreate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"6c89dfdc-3f3c-4a5e-bcfd-9ea6b3d59495","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-05 01:20:53 +0000 UTC FinishedAt: 2026-08-05 04:28:03 +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":["kvm"],"focus_symbols":["kvm_synchronize_tsc","kvm_guest_time_update","kvm_get_wall_clock_epoch","kvm_compute_l1_tsc_offset","kvm_arch_vcpu_postcreate"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*64d5370f-67e5-430d-b6f4-f07849f3fc86,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*aa73922b-fda2-4038-816c-4d24da4bafdb,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-workflow5c2q5/series-workflow5c2q5-build-action-925748165/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-workflow5c2q5/series-workflow5c2q5-build-action-1162654690/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow5c2q5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_synchronize_tsc","kvm_guest_time_update","kvm_get_wall_clock_epoch","kvm_compute_l1_tsc_offset","kvm_arch_vcpu_postcreate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"6c89dfdc-3f3c-4a5e-bcfd-9ea6b3d59495","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-05 01:20:53 +0000 UTC FinishedAt: 2026-08-05 01:21:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5c2q5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_synchronize_tsc","kvm_guest_time_update","kvm_get_wall_clock_epoch","kvm_compute_l1_tsc_offset","kvm_arch_vcpu_postcreate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"6c89dfdc-3f3c-4a5e-bcfd-9ea6b3d59495","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-05 01:20:53 +0000 UTC FinishedAt: 2026-08-05 01:20:57 +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":["kvm"],"focus_symbols":["kvm_synchronize_tsc","kvm_guest_time_update","kvm_get_wall_clock_epoch","kvm_compute_l1_tsc_offset","kvm_arch_vcpu_postcreate"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5c2q5/series-workflow5c2q5-convert-artifact-2671543411/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5c2q5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_synchronize_tsc","kvm_guest_time_update","kvm_get_wall_clock_epoch","kvm_compute_l1_tsc_offset","kvm_arch_vcpu_postcreate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"6c89dfdc-3f3c-4a5e-bcfd-9ea6b3d59495","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-05 01:20:53 +0000 UTC FinishedAt: 2026-08-05 01:20:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5c2q5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_synchronize_tsc","kvm_guest_time_update","kvm_get_wall_clock_epoch","kvm_compute_l1_tsc_offset","kvm_arch_vcpu_postcreate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"6c89dfdc-3f3c-4a5e-bcfd-9ea6b3d59495","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-05 01:20:53 +0000 UTC FinishedAt: 2026-08-05 01:20:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5c2q5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_synchronize_tsc","kvm_guest_time_update","kvm_get_wall_clock_epoch","kvm_compute_l1_tsc_offset","kvm_arch_vcpu_postcreate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"6c89dfdc-3f3c-4a5e-bcfd-9ea6b3d59495","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-05 01:20:53 +0000 UTC FinishedAt: 2026-08-05 01:20:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5c2q5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_synchronize_tsc","kvm_guest_time_update","kvm_get_wall_clock_epoch","kvm_compute_l1_tsc_offset","kvm_arch_vcpu_postcreate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"6c89dfdc-3f3c-4a5e-bcfd-9ea6b3d59495","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-05 01:21:03 +0000 UTC FinishedAt: 2026-08-05 04:28:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5c2q5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_synchronize_tsc","kvm_guest_time_update","kvm_get_wall_clock_epoch","kvm_compute_l1_tsc_offset","kvm_arch_vcpu_postcreate"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2dfab80a305700a45bd947350dae253ba4e30c41","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL","KVM_AMD"],"series_id":"6c89dfdc-3f3c-4a5e-bcfd-9ea6b3d59495","tree_name":"kvm-x86","tree_url":"https://github.com/kvm-x86/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-05 01:21:03 +0000 UTC FinishedAt: 2026-08-05 04:27:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*64d5370f-67e5-430d-b6f4-f07849f3fc86,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*aa73922b-fda2-4038-816c-4d24da4bafdb,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-workflow5c2q5/series-workflow5c2q5-build-action-925748165/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-workflow5c2q5/series-workflow5c2q5-build-action-1162654690/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-workflow5c2q5/series-workflow5c2q5-convert-artifact-2671543411/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,}