Name: series-workflowgjcrb Phase: Succeeded StartedAt: 2026-08-11 06:13:15 +0000 UTC FinishedAt: 2026-08-11 07:43:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgjcrb[0] Phase: Succeeded StartedAt: 2026-08-11 06:13:15 +0000 UTC FinishedAt: 2026-08-11 07:04:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgjcrb[0].run-triage Phase: Succeeded StartedAt: 2026-08-11 06:13:15 +0000 UTC FinishedAt: 2026-08-11 07:04:31 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "VIRTUALIZATION" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "VIRTUALIZATION" ], "series_id": "97eefc46-3553-43ac-be61-0262dcd6ce32" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_arch_vcpu_pre_fault_memory", "kvm_riscv_gstage_map_page" ], "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+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtWSVJUVUFMSVpBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyB0aGUgYEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWWAgY2FwYWJpbGl0eSBmb3IgUklTQy1WIGJ5IGFkZGluZyBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBhbmQgd2lyaW5nIGl0IHVwIGluIHRoZSBNTVUuIFRoZSBvbmx5IGRhdGEgc3RydWN0dXJlIGludm9sdmVkIGluIHVzZXIgc3BhY2UgY29tbXVuaWNhdGlvbiBpcyBgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5YCwgd2hpY2ggaXMgaGFuZGxlZCBieSBnZW5lcmljIEtWTSBjb2RlIChgdmlydC9rdm0va3ZtX21haW4uY2ApLiBUaGUgZ2VuZXJpYyBjb2RlIGZ1bGx5IGluaXRpYWxpemVzIHRoZSBzdHJ1Y3QgdmlhIGBjb3B5X2Zyb21fdXNlcmAgYmVmb3JlIG1vZGlmeWluZyBpdHMgYHNpemVgIGFuZCBgZ3BhYCBmaWVsZHMgYW5kIGNvcHlpbmcgaXQgYmFjayB0byB1c2VyIHNwYWNlLiBBbnkgcGFkZGluZyBmaWVsZHMgc2ltcGx5IGVjaG8gYmFjayB0aGUgdXNlci1wcm92aWRlZCB2YWx1ZXMsIHByZXZlbnRpbmcgYW55IGtlcm5lbCBtZW1vcnkgaW5mby1sZWFrcy4gVGhlIGxvY2FsIHZhcmlhYmxlIGBvdXRfbWFwYCBvZiB0eXBlIGBzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nYCBpcyBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgKGA9IHsgMCB9YCkgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byBga3ZtX3Jpc2N2X21tdV9tYXBgLiBUaGVyZSBhcmUgbm8gbmV3IGNvbXBsZXggYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGVuYWJsZXMgdGhlIEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWSBjYXBhYmlsaXR5IGFuZCBpdHMgY29ycmVzcG9uZGluZyBpb2N0bCAoS1ZNX1BSRV9GQVVMVF9NRU1PUlkpIGZvciBSSVNDLVYgS1ZNLiBJdCBpbXBsZW1lbnRzIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaGFuZGxlciBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBhbmQgbW9kaWZpZXMgYGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2VgIHRvIHJldHVybiBtYXBwaW5nIGluZm9ybWF0aW9uLiBUaGlzIGludHJvZHVjZXMgbmV3IHJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHRoZSBSSVNDLVYgS1ZNIHN1YnN5c3RlbSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBpb2N0bC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzowMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGIwYjYwYTBjNzlmM2MyMmY5YWY2ODc2ODg4MGQyNmNmYjI1MjI1MDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAwNzowMTo1OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnIGIvYXJjaC9yaXNjdi9rdm0vS2NvbmZpZ1xuaW5kZXggZWMyY2VlMGEzOWUwMS4uOGFjMjA5ZThhYzg3MCAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL0tjb25maWdcbkBAIC0yOCw2ICYjNDM7MjgsNyBAQCBjb25maWcgS1ZNXG4gXHRzZWxlY3QgS1ZNX0NPTU1PTlxuIFx0c2VsZWN0IEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxuIFx0c2VsZWN0IEtWTV9HRU5FUklDX0hBUkRXQVJFX0VOQUJMSU5HXG4mIzQzO1x0c2VsZWN0IEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcbiBcdHNlbGVjdCBLVk1fTU1JT1xuIFx0c2VsZWN0IFZJUlRfWEZFUl9UT19HVUVTVF9XT1JLXG4gXHRzZWxlY3QgU0NIRURfSU5GT1xuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jIGIvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNcbmluZGV4IGU1MDAyY2I5Y2JlZjEuLjZiZDhiOGZkNmNlYjIgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNcbkBAIC0yODAsNiAmIzQzOzI4MCw5IEBAIGludCBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsXG4gXHRcdFx0XHRcdFx0ICAgIG91dF9tYXAtXHUwMDNlbGV2ZWwsIHRydWUpO1xuIFx0XHR9IGVsc2UgaWYgKEFMSUdOX0RPV04oUEZOX1BIWVMocHRlX3BmbihwdGVwX2dldChwdGVwKSkpLCBwYWdlX3NpemUpID09IGhwYSkge1xuIFx0XHRcdGt2bV9yaXNjdl9nc3RhZ2VfdXBkYXRlX3B0ZV9wcm90KGdzdGFnZSwgcHRlcF9sZXZlbCwgZ3BhLCBwdGVwLCBwcm90KTtcbiYjNDM7XHRcdFx0b3V0X21hcC1cdTAwM2VhZGRyID0gQUxJR05fRE9XTihncGEsIHBhZ2Vfc2l6ZSk7XG4mIzQzO1x0XHRcdG91dF9tYXAtXHUwMDNlbGV2ZWwgPSBwdGVwX2xldmVsO1xuJiM0MztcdFx0XHRvdXRfbWFwLVx1MDAzZXB0ZSA9IHB0ZXBfZ2V0KHB0ZXApO1xuIFx0XHRcdHJldHVybiAwO1xuIFx0XHR9XG4gXHR9XG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vbW11LmMgYi9hcmNoL3Jpc2N2L2t2bS9tbXUuY1xuaW5kZXggNjAzNWI1ZWM5NTAzOS4uYzk2ZTIxNzQwYzkxMyAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL21tdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS9tbXUuY1xuQEAgLTc0OCw2ICYjNDM7NzQ4LDM5IEBAIGludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuJiM0MztcdFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyBvdXRfbWFwID0geyAwIH07XG4mIzQzO1x0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG1hcF9zaXplO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaHZhO1xuJiM0MztcdGdwYV90IGVuZDtcbiYjNDM7XHRnZm5fdCBnZm47XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0Z2ZuID0gZ3BhX3RvX2dmbihyYW5nZS1cdTAwM2VncGEpO1xuJiM0MztcdG1lbXNsb3QgPSBrdm1fdmNwdV9nZm5fdG9fbWVtc2xvdCh2Y3B1LCBnZm4pO1xuJiM0MztcdGlmICghbWVtc2xvdClcbiYjNDM7XHRcdHJldHVybiAtRU5PRU5UO1xuJiM0MztcbiYjNDM7XHRodmEgPSBnZm5fdG9faHZhX21lbXNsb3RfcHJvdChtZW1zbG90LCBnZm4sIE5VTEwpO1xuJiM0MztcdGlmIChrdm1faXNfZXJyb3JfaHZhKGh2YSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0VOVDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0ga3ZtX3Jpc2N2X21tdV9tYXAodmNwdSwgbWVtc2xvdCwgcmFuZ2UtXHUwMDNlZ3BhLCBodmEsIGZhbHNlLCBcdTAwMjZvdXRfbWFwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwdGVfdmFsKG91dF9tYXAucHRlKSlcbiYjNDM7XHRcdHJldHVybiAtRUFHQUlOO1xuJiM0MztcbiYjNDM7XHRtYXBfc2l6ZSA9IFBBR0VfU0laRSBcdTAwM2NcdTAwM2MgKG91dF9tYXAubGV2ZWwgKiBrdm1fcmlzY3ZfZ3N0YWdlX2luZGV4X2JpdHMpO1xuJiM0MztcdGVuZCA9IEFMSUdOX0RPV04ocmFuZ2UtXHUwMDNlZ3BhLCBtYXBfc2l6ZSkgJiM0MzsgbWFwX3NpemU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtaW5fdCh1NjQsIHJhbmdlLVx1MDAzZXNpemUsIGVuZCAtIHJhbmdlLVx1MDAzZWdwYSk7XG4mIzQzO31cbiYjNDM7XG4gaW50IGt2bV9yaXNjdl9tbXVfYWxsb2NfcGdkKHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4gXHRzdHJ1Y3QgcGFnZSAqcGdkX3BhZ2U7XG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vdm0uYyBiL2FyY2gvcmlzY3Yva3ZtL3ZtLmNcbmluZGV4IGE5ZjA4M2ZlZWI3NjcuLjU4NTAwYTE5YjMzYmQgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS92bS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS92bS5jXG5AQCAtMTg3LDYgJiM0MzsxODcsNyBAQCBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxuIFx0Y2FzZSBLVk1fQ0FQX01QX1NUQVRFOlxuIFx0Y2FzZSBLVk1fQ0FQX0lNTUVESUFURV9FWElUOlxuIFx0Y2FzZSBLVk1fQ0FQX1NFVF9HVUVTVF9ERUJVRzpcbiYjNDM7XHRjYXNlIEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWTpcbiBcdFx0ciA9IDE7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBLVk1fQ0FQX05SX1ZDUFVTOlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG5pbmRleCA2ZmMzNGU5YmY4ZTFiLi5hYzY0YWM5MmZkNGIwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuQEAgLTIyNSw2ICYjNDM7MjI1LDcgQEAgVEVTVF9HRU5fUFJPR1NfcmlzY3YgJiM0Mzs9IGNvYWxlc2NlZF9pb190ZXN0XG4gVEVTVF9HRU5fUFJPR1NfcmlzY3YgJiM0Mzs9IGRpcnR5X2xvZ19wZXJmX3Rlc3RcbiBURVNUX0dFTl9QUk9HU19yaXNjdiAmIzQzOz0gZ2V0LXJlZy1saXN0XG4gVEVTVF9HRU5fUFJPR1NfcmlzY3YgJiM0Mzs9IG1tdV9zdHJlc3NfdGVzdFxuJiM0MztURVNUX0dFTl9QUk9HU19yaXNjdiAmIzQzOz0gcHJlX2ZhdWx0X21lbW9yeV90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfcmlzY3YgJiM0Mzs9IHJzZXFfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICYjNDM7PSBzdGVhbF90aW1lXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaFxuaW5kZXggZTNhY2YyYWU5ODgxZS4uNzA0ODdjOGVkMTU1MyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaFxuQEAgLTEyLDYgJiM0MzsxMiw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3Zkc28vcHJvY2Vzc29yLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtrdm1fdXRpbC5oXCYjMzQ7XG4gXG4mIzQzOyNkZWZpbmUgUEFHRV9TSElGVFx0XHQxMlxuJiM0MzsjZGVmaW5lIFBBR0VfU0laRVx0XHRCSVRfVUxMKFBBR0VfU0hJRlQpXG4mIzQzO1xuICNkZWZpbmUgSU5TTl9PUENPREVfTUFTS1x0MHgwMDdjXG4gI2RlZmluZSBJTlNOX09QQ09ERV9TSElGVFx0MlxuICNkZWZpbmUgSU5TTl9PUENPREVfU1lTVEVNXHQyOFxuQEAgLTEyNyw2ICYjNDM7MTMwLDkgQEAgdm9pZCB2bV9pbnN0YWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHN0cnVjdCBrdm1fdm0gKnZtLCBpbnQgdmVjdG9yLCBleGNlcHRpb25faGFuZGxcbiBcbiB2b2lkIHZtX2luc3RhbGxfaW50ZXJydXB0X2hhbmRsZXIoc3RydWN0IGt2bV92bSAqdm0sIGV4Y2VwdGlvbl9oYW5kbGVyX2ZuIGhhbmRsZXIpO1xuIFxuJiM0MzsvKiBMNCBpbmRleCBCaXRbNTY6NDhdICovXG4mIzQzOyNkZWZpbmUgUEdUQkxfTDRfSU5ERVhfTUFTS1x0XHRcdDB4MDFGRjAwMDAwMDAwMDAwMFVMTFxuJiM0MzsjZGVmaW5lIFBHVEJMX0w0X0lOREVYX1NISUZUXHRcdFx0NDhcbiAvKiBMMyBpbmRleCBCaXRbNDc6MzldICovXG4gI2RlZmluZSBQR1RCTF9MM19JTkRFWF9NQVNLXHRcdFx0MHgwMDAwRkY4MDAwMDAwMDAwVUxMXG4gI2RlZmluZSBQR1RCTF9MM19JTkRFWF9TSElGVFx0XHRcdDM5XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmNcbmluZGV4IGRlZDU0MjlmMzQ0ODMuLmI0ZDQxYTQwNzU1MzYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXG5AQCAtNDMsNiAmIzQzOzQzLDcgQEAgc3RhdGljIHU2NCBwdGVfaW5kZXhfbWFza1tdID0ge1xuIFx0UEdUQkxfTDFfSU5ERVhfTUFTSyxcbiBcdFBHVEJMX0wyX0lOREVYX01BU0ssXG4gXHRQR1RCTF9MM19JTkRFWF9NQVNLLFxuJiM0MztcdFBHVEJMX0w0X0lOREVYX01BU0ssXG4gfTtcbiBcbiBzdGF0aWMgdTMyIHB0ZV9pbmRleF9zaGlmdFtdID0ge1xuQEAgLTUwLDYgJiM0Mzs1MSw3IEBAIHN0YXRpYyB1MzIgcHRlX2luZGV4X3NoaWZ0W10gPSB7XG4gXHRQR1RCTF9MMV9JTkRFWF9TSElGVCxcbiBcdFBHVEJMX0wyX0lOREVYX1NISUZULFxuIFx0UEdUQkxfTDNfSU5ERVhfU0hJRlQsXG4mIzQzO1x0UEdUQkxfTDRfSU5ERVhfU0hJRlQsXG4gfTtcbiBcbiBzdGF0aWMgdTY0IHB0ZV9pbmRleChzdHJ1Y3Qga3ZtX3ZtICp2bSwgZ3ZhX3QgZ3ZhLCBpbnQgbGV2ZWwpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jXG5pbmRleCBhMGZjYWUzY2I3YThiLi42ZWViZjA1MjQ2NzM2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmNcbkBAIC04LDYgJiM0Mzs4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zaXplcy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjdGVzdF91dGlsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZ3Vlc3RfbW9kZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2t2bV91dGlsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nwcm9jZXNzb3IuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuQEAgLTIxOSw2ICYjNDM7MjIwLDggQEAgc3RhdGljIHZvaWQgdGVzdF9wcmVfZmF1bHRfbWVtb3J5KHVuc2lnbmVkIGxvbmcgdm1fdHlwZSwgYm9vbCBwcml2YXRlKVxuIFxuIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4ge1xuJiM0MztcdGd1ZXN0X21vZGVzX2FwcGVuZF9kZWZhdWx0KCk7XG4mIzQzO1xuIFx0VEVTVF9SRVFVSVJFKGt2bV9jaGVja19jYXAoS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZKSk7XG4gXG4gXHR0ZXN0X3ByZV9mYXVsdF9tZW1vcnkoMCwgZmFsc2UpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjAyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7VklSVFVBTElaQVRJT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkmIzM0OywKICAgICYjMzQ7a3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBlbmFibGVzIHRoZSBLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUlkgY2FwYWJpbGl0eSBhbmQgaXRzIGNvcnJlc3BvbmRpbmcgaW9jdGwgKEtWTV9QUkVfRkFVTFRfTUVNT1JZKSBmb3IgUklTQy1WIEtWTS4gSXQgaW1wbGVtZW50cyB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGhhbmRsZXIgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgYW5kIG1vZGlmaWVzIGBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlYCB0byByZXR1cm4gbWFwcGluZyBpbmZvcm1hdGlvbi4gVGhpcyBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUgY29kZSBwYXRocyBpbiB0aGUgUklTQy1WIEtWTSBzdWJzeXN0ZW0gdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgaW9jdGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiMGI2MGEwYzc5ZjNjMjJmOWFmNjg3Njg4ODBkMjZjZmIyNTIyNTAyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTEgMDc6MDE6NTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnIGIvYXJjaC9yaXNjdi9rdm0vS2NvbmZpZwppbmRleCBlYzJjZWUwYTM5ZTAxLi44YWMyMDllOGFjODcwIDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL0tjb25maWcKQEAgLTI4LDYgJiM0MzsyOCw3IEBAIGNvbmZpZyBLVk0KIAlzZWxlY3QgS1ZNX0NPTU1PTgogCXNlbGVjdCBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1QKIAlzZWxlY3QgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkcKJiM0MzsJc2VsZWN0IEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUlkKIAlzZWxlY3QgS1ZNX01NSU8KIAlzZWxlY3QgVklSVF9YRkVSX1RPX0dVRVNUX1dPUksKIAlzZWxlY3QgU0NIRURfSU5GTwpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmMgYi9hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYwppbmRleCBlNTAwMmNiOWNiZWYxLi42YmQ4YjhmZDZjZWIyIDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYwpAQCAtMjgwLDYgJiM0MzsyODAsOSBAQCBpbnQga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLAogCQkJCQkJICAgIG91dF9tYXAtJmd0O2xldmVsLCB0cnVlKTsKIAkJfSBlbHNlIGlmIChBTElHTl9ET1dOKFBGTl9QSFlTKHB0ZV9wZm4ocHRlcF9nZXQocHRlcCkpKSwgcGFnZV9zaXplKSA9PSBocGEpIHsKIAkJCWt2bV9yaXNjdl9nc3RhZ2VfdXBkYXRlX3B0ZV9wcm90KGdzdGFnZSwgcHRlcF9sZXZlbCwgZ3BhLCBwdGVwLCBwcm90KTsKJiM0MzsJCQlvdXRfbWFwLSZndDthZGRyID0gQUxJR05fRE9XTihncGEsIHBhZ2Vfc2l6ZSk7CiYjNDM7CQkJb3V0X21hcC0mZ3Q7bGV2ZWwgPSBwdGVwX2xldmVsOwomIzQzOwkJCW91dF9tYXAtJmd0O3B0ZSA9IHB0ZXBfZ2V0KHB0ZXApOwogCQkJcmV0dXJuIDA7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9tbXUuYyBiL2FyY2gvcmlzY3Yva3ZtL21tdS5jCmluZGV4IDYwMzViNWVjOTUwMzkuLmM5NmUyMTc0MGM5MTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3Yva3ZtL21tdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL21tdS5jCkBAIC03NDgsNiAmIzQzOzc0OCwzOSBAQCBpbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LAogCXJldHVybiByZXQ7CiB9CiAKJiM0Mztsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiYjNDM7CQkJCSAgICBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyBvdXRfbWFwID0geyAwIH07CiYjNDM7CXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3Q7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbWFwX3NpemU7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaHZhOwomIzQzOwlncGFfdCBlbmQ7CiYjNDM7CWdmbl90IGdmbjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZ2ZuID0gZ3BhX3RvX2dmbihyYW5nZS0mZ3Q7Z3BhKTsKJiM0MzsJbWVtc2xvdCA9IGt2bV92Y3B1X2dmbl90b19tZW1zbG90KHZjcHUsIGdmbik7CiYjNDM7CWlmICghbWVtc2xvdCkKJiM0MzsJCXJldHVybiAtRU5PRU5UOwomIzQzOwomIzQzOwlodmEgPSBnZm5fdG9faHZhX21lbXNsb3RfcHJvdChtZW1zbG90LCBnZm4sIE5VTEwpOwomIzQzOwlpZiAoa3ZtX2lzX2Vycm9yX2h2YShodmEpKQomIzQzOwkJcmV0dXJuIC1FTk9FTlQ7CiYjNDM7CiYjNDM7CXJldCA9IGt2bV9yaXNjdl9tbXVfbWFwKHZjcHUsIG1lbXNsb3QsIHJhbmdlLSZndDtncGEsIGh2YSwgZmFsc2UsICZhbXA7b3V0X21hcCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAoIXB0ZV92YWwob3V0X21hcC5wdGUpKQomIzQzOwkJcmV0dXJuIC1FQUdBSU47CiYjNDM7CiYjNDM7CW1hcF9zaXplID0gUEFHRV9TSVpFICZsdDsmbHQ7IChvdXRfbWFwLmxldmVsICoga3ZtX3Jpc2N2X2dzdGFnZV9pbmRleF9iaXRzKTsKJiM0MzsJZW5kID0gQUxJR05fRE9XTihyYW5nZS0mZ3Q7Z3BhLCBtYXBfc2l6ZSkgJiM0MzsgbWFwX3NpemU7CiYjNDM7CiYjNDM7CXJldHVybiBtaW5fdCh1NjQsIHJhbmdlLSZndDtzaXplLCBlbmQgLSByYW5nZS0mZ3Q7Z3BhKTsKJiM0Mzt9CiYjNDM7CiBpbnQga3ZtX3Jpc2N2X21tdV9hbGxvY19wZ2Qoc3RydWN0IGt2bSAqa3ZtKQogewogCXN0cnVjdCBwYWdlICpwZ2RfcGFnZTsKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3ZtLmMgYi9hcmNoL3Jpc2N2L2t2bS92bS5jCmluZGV4IGE5ZjA4M2ZlZWI3NjcuLjU4NTAwYTE5YjMzYmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3Yva3ZtL3ZtLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rdm0vdm0uYwpAQCAtMTg3LDYgJiM0MzsxODcsNyBAQCBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KQogCWNhc2UgS1ZNX0NBUF9NUF9TVEFURToKIAljYXNlIEtWTV9DQVBfSU1NRURJQVRFX0VYSVQ6CiAJY2FzZSBLVk1fQ0FQX1NFVF9HVUVTVF9ERUJVRzoKJiM0MzsJY2FzZSBLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUlk6CiAJCXIgPSAxOwogCQlicmVhazsKIAljYXNlIEtWTV9DQVBfTlJfVkNQVVM6CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bQppbmRleCA2ZmMzNGU5YmY4ZTFiLi5hYzY0YWM5MmZkNGIwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0KQEAgLTIyNSw2ICYjNDM7MjI1LDcgQEAgVEVTVF9HRU5fUFJPR1NfcmlzY3YgJiM0Mzs9IGNvYWxlc2NlZF9pb190ZXN0CiBURVNUX0dFTl9QUk9HU19yaXNjdiAmIzQzOz0gZGlydHlfbG9nX3BlcmZfdGVzdAogVEVTVF9HRU5fUFJPR1NfcmlzY3YgJiM0Mzs9IGdldC1yZWctbGlzdAogVEVTVF9HRU5fUFJPR1NfcmlzY3YgJiM0Mzs9IG1tdV9zdHJlc3NfdGVzdAomIzQzO1RFU1RfR0VOX1BST0dTX3Jpc2N2ICYjNDM7PSBwcmVfZmF1bHRfbWVtb3J5X3Rlc3QKIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICYjNDM7PSByc2VxX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICYjNDM7PSBzdGVhbF90aW1lCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmgKaW5kZXggZTNhY2YyYWU5ODgxZS4uNzA0ODdjOGVkMTU1MyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmgKQEAgLTEyLDYgJiM0MzsxMiw5IEBACiAjaW5jbHVkZSAmbHQ7YXNtL3Zkc28vcHJvY2Vzc29yLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2t2bV91dGlsLmgmIzM0OwogCiYjNDM7I2RlZmluZSBQQUdFX1NISUZUCQkxMgomIzQzOyNkZWZpbmUgUEFHRV9TSVpFCQlCSVRfVUxMKFBBR0VfU0hJRlQpCiYjNDM7CiAjZGVmaW5lIElOU05fT1BDT0RFX01BU0sJMHgwMDdjCiAjZGVmaW5lIElOU05fT1BDT0RFX1NISUZUCTIKICNkZWZpbmUgSU5TTl9PUENPREVfU1lTVEVNCTI4CkBAIC0xMjcsNiAmIzQzOzEzMCw5IEBAIHZvaWQgdm1faW5zdGFsbF9leGNlcHRpb25faGFuZGxlcihzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IHZlY3RvciwgZXhjZXB0aW9uX2hhbmRsCiAKIHZvaWQgdm1faW5zdGFsbF9pbnRlcnJ1cHRfaGFuZGxlcihzdHJ1Y3Qga3ZtX3ZtICp2bSwgZXhjZXB0aW9uX2hhbmRsZXJfZm4gaGFuZGxlcik7CiAKJiM0MzsvKiBMNCBpbmRleCBCaXRbNTY6NDhdICovCiYjNDM7I2RlZmluZSBQR1RCTF9MNF9JTkRFWF9NQVNLCQkJMHgwMUZGMDAwMDAwMDAwMDAwVUxMCiYjNDM7I2RlZmluZSBQR1RCTF9MNF9JTkRFWF9TSElGVAkJCTQ4CiAvKiBMMyBpbmRleCBCaXRbNDc6MzldICovCiAjZGVmaW5lIFBHVEJMX0wzX0lOREVYX01BU0sJCQkweDAwMDBGRjgwMDAwMDAwMDBVTEwKICNkZWZpbmUgUEdUQkxfTDNfSU5ERVhfU0hJRlQJCQkzOQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmMKaW5kZXggZGVkNTQyOWYzNDQ4My4uYjRkNDFhNDA3NTUzNiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jCkBAIC00Myw2ICYjNDM7NDMsNyBAQCBzdGF0aWMgdTY0IHB0ZV9pbmRleF9tYXNrW10gPSB7CiAJUEdUQkxfTDFfSU5ERVhfTUFTSywKIAlQR1RCTF9MMl9JTkRFWF9NQVNLLAogCVBHVEJMX0wzX0lOREVYX01BU0ssCiYjNDM7CVBHVEJMX0w0X0lOREVYX01BU0ssCiB9OwogCiBzdGF0aWMgdTMyIHB0ZV9pbmRleF9zaGlmdFtdID0gewpAQCAtNTAsNiAmIzQzOzUxLDcgQEAgc3RhdGljIHUzMiBwdGVfaW5kZXhfc2hpZnRbXSA9IHsKIAlQR1RCTF9MMV9JTkRFWF9TSElGVCwKIAlQR1RCTF9MMl9JTkRFWF9TSElGVCwKIAlQR1RCTF9MM19JTkRFWF9TSElGVCwKJiM0MzsJUEdUQkxfTDRfSU5ERVhfU0hJRlQsCiB9OwogCiBzdGF0aWMgdTY0IHB0ZV9pbmRleChzdHJ1Y3Qga3ZtX3ZtICp2bSwgZ3ZhX3QgZ3ZhLCBpbnQgbGV2ZWwpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmMKaW5kZXggYTBmY2FlM2NiN2E4Yi4uNmVlYmYwNTI0NjczNiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuYwpAQCAtOCw2ICYjNDM7OCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc2l6ZXMuaCZndDsKIAogI2luY2x1ZGUgJmx0O3Rlc3RfdXRpbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtndWVzdF9tb2Rlcy5oJmd0OwogI2luY2x1ZGUgJmx0O2t2bV91dGlsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7cHJvY2Vzc29yLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7cHRocmVhZC5oJmd0OwpAQCAtMjE5LDYgJiM0MzsyMjAsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3ByZV9mYXVsdF9tZW1vcnkodW5zaWduZWQgbG9uZyB2bV90eXBlLCBib29sIHByaXZhdGUpCiAKIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7CiYjNDM7CWd1ZXN0X21vZGVzX2FwcGVuZF9kZWZhdWx0KCk7CiYjNDM7CiAJVEVTVF9SRVFVSVJFKGt2bV9jaGVja19jYXAoS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZKSk7CiAKIAl0ZXN0X3ByZV9mYXVsdF9tZW1vcnkoMCwgZmFsc2UpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzgwCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUklTQy1WIEtWTSBQcmUtRmF1bHQgTWVtb3J5IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBSSVNDLVYgS1ZNIHRoYXQmIzM5O3MgYWRkaW5nIHN1cHBvcnQgZm9yIGBLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUllgLiBJdCBsb29rcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9uIHRoZSBzdXJmYWNlLiBXZSYjMzk7cmUgbW9kaWZ5aW5nIGBLY29uZmlnYCB0byBzZWxlY3QgYEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllgLCB3aGljaCBtYWtlcyBzZW5zZTsgdGhpcyBlbmFibGVzIHRoZSBnZW5lcmljIHByZS1mYXVsdGluZyBtZWNoYW5pc20uIFRoZW4gdGhlcmUgYXJlIGNoYW5nZXMgaW4gYGdzdGFnZS5jYCB0byBoYW5kbGUgbWFwcGluZywgYG1tdS5jYCB3aGljaCBhY3R1YWxseSBhZGRzIHRoZSBjb3JlIGZ1bmN0aW9uIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLCBhbmQgYHZtLmNgIHRvIGFkdmVydGlzZSB0aGUgY2FwYWJpbGl0eS4gUGx1cywgdGhleSYjMzk7dmUgaW5jbHVkZWQgYSBzZWxmLXRlc3QuIFNvbGlkLgoKVGhpcyBjbGVhcmx5IGludHJvZHVjZXMgYSBuZXcgY2FwYWJpbGl0eSwgYEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWWAsIGFuZCB0aGUgYXNzb2NpYXRlZCBgS1ZNX1BSRV9GQVVMVF9NRU1PUllgIGlvY3RsIGZvciB0aGUgdkNQVS4gRnVuY3Rpb25hbGx5IHNvdW5kLCB0aGF0JiMzOTtzIGdvb2QuCgpUaGUgbmV4dCB0aG91Z2h0IGlzLCBjYW4gdGhpcyBiZSBlZmZlY3RpdmVseSB0ZXN0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzPyBPZiBjb3Vyc2UsIHRoaXMgaXMgS1ZNIGNvZGUuIFN5emthbGxlciBpcyB0aGUgcHJpbWFyeSBmdXp6aW5nIHRvb2wgdGhhdCBjb21lcyB0byBtaW5kLCBhbmQgd2hpbGUgaXQgaGVhdmlseSB0YXJnZXRzIHg4Nl82NCwgaXQgKmRvZXMqIGhhdmUgc29tZSBzdXBwb3J0IGZvciBBUk02NCBhbmQgUklTQy1WLiBXYWl0LCBpdCAqZG9lcyogc3VwcG9ydCBSSVNDLVY2NCwgZ3JlYXQuIE5vdywgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIEl0IGxvb2tzIGxpa2Ugd2UganVzdCBuZWVkIGBDT05GSUdfS1ZNYCwgd2hpY2ggaXMgc3RhbmRhcmQgZm9yIEtWTSBndWVzdHMuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZHJpbGwgZG93bi4gVGhlIGtleSBmdW5jdGlvbiBpcyBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IGl0IGluIGBhcmNoL3Jpc2N2L2t2bS9tbXUuY2AuIEl0IGxvb2tzIGxpa2UgaXQgY2FsbHMgYGt2bV9yaXNjdl9tbXVfbWFwYCB0byBkbyB0aGUgYWN0dWFsIG1hcHBpbmcuCgpUbyBiZSB0aG9yb3VnaCwgSSYjMzk7bSBnb2luZyB0byBsZXZlcmFnZSBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAgdG8gc2VlIGlmIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGlzIGV2ZXIgY2FsbGVkIGRpcmVjdGx5IGZyb20gZ2VuZXJpYyBLVk0gY29kZS4gVGhpcyB3aWxsIGhlbHAgY29uZmlybSB0aGlzIHNwZWNpZmljIFJJU0MtViBjb2RlIHBhdGguIEkgd2FudCB0byBzZWUgaG93IHRpZ2h0bHkgY291cGxlZCB0aGlzIGlzIHRvIGdlbmVyaWMgS1ZNIG9wZXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL21tdS5jPTYyMz1pbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxuLS1cbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTc1MC1cbmFyY2gvcmlzY3Yva3ZtL21tdS5jOjc1MTpsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03NTItXHRcdFx0XHQgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTc5Nz12b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTg0MC0vKipcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1ODQxOiAqIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSgpIC0tIHByZS1mYXVsdCBhbmQgbGluayBnbWFwIGRhdCB0YWJsZXNcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01ODQyLSAqIEB2Y3B1OiB0aGUgdmNwdSB0aGF0IHNoYWxsIGFwcGVhciB0byBoYXZlIGdlbmVyYXRlZCB0aGUgZmF1bHQtaW4uXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU4NTktICovXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTg2MDpsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTg2MS17XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz00OTczPXN0YXRpYyBpbnQga3ZtX3RkcF9wYWdlX3ByZWZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTAxNi1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTAxNzpsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUwMTgtXHRcdFx0XHQgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTE3MDE9c3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVsLFxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMTcxMy1cdC8qXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjE3MTQ6XHQgKiBFbnN1cmUgcHJlX2ZhdWx0X2FsbG93ZWQgaXMgcmVhZCBieSBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoKVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0xNzE1LVx0ICogYmVmb3JlIGt2bV90ZHgtXHUwMDNlc3RhdGUuICBVc2Vyc3BhY2UgbXVzdCBub3QgYmUgYWxsb3dlZCB0byBwcmUtZmF1bHRcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MjYxMD12b2lkIGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpO1xuLS1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNjEzLSNpZmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjI2MTQ6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI2MTUtXHRcdFx0XHQgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSk7XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz00MzM0PXN0YXRpYyBpbnQga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy00MzU4LVxudmlydC9rdm0va3ZtX21haW4uYzo0MzU5Olx0XHRyID0ga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHZjcHUsIHJhbmdlKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDM2MC1cdFx0aWYgKFdBUk5fT05fT05DRShyID09IDAgfHwgciA9PSAtRUlPKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDEyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUklTQy1WIEtWTSBQcmUtRmF1bHQgTWVtb3J5IFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciB0aGUgYEtWTV9QUkVfRkFVTFRfTUVNT1JZYCBpb2N0bCBzcGVjaWZpY2FsbHkgZm9yIFJJU0MtVi4gSXQmIzM5O3MgY2FsbGVkIHRocm91Z2ggYGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGZyb20gYGt2bV9tYWluLmNgLCB0cmlnZ2VyZWQgYnkgdGhlIGlvY3RsIGl0c2VsZi4gIFNpbmNlIHRoaXMgaXMgYSBuZXcgaW9jdGwgaGFuZGxlciwgZnV6emluZyBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZDsgdGhhdCYjMzk7cyBhIHByaW1lIHRhcmdldCBmb3IgZmluZGluZyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLgoKVGhlIGNvcmUgaW1wbGVtZW50YXRpb24gc2VlbXMgdG8gcmVzaWRlIGluIGBhcmNoL3Jpc2N2L2t2bS9tbXUuY2AsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBtZW1vcnktcmVsYXRlZCBuYXR1cmUgb2YgdGhlIGlvY3RsLiBUaGUgbWFpbiBmdW5jdGlvbiBJIG5lZWQgdG8gZm9jdXMgb24gaXMgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAsIGFsdGhvdWdoIHRoZSBuYW1pbmcgaXMgYSBiaXQgbWlzbGVhZGluZyBzaW5jZSBpdCYjMzk7cyBkZWZpbmVkIHNwZWNpZmljYWxseSBmb3IgUklTQy1WLiBJdCYjMzk7cyBhY3R1YWxseSBpbiBgYXJjaC9yaXNjdi9rdm0vbW11LmNgLiBBbHNvIHdvcnRoIG5vdGluZyBpcyB0aGUgbW9kaWZpY2F0aW9uIHRvIGBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlYC4KCkkmIzM5O2xsIGNoZWNrIGBhcmNoL3Jpc2N2L2t2bS9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMgcmVxdWlyZWQgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eSB0byBiZSBlbmFibGVkIG9yIGlmIHRoZXJlIGFyZSBhbnkgaW50ZXJlc3Rpbmcgb3B0aW9ucyB0aGF0IGNvdWxkIGltcGFjdCBpdHMgYmVoYXZpb3IuIFRoaXMgY291bGQgcHJvdmlkZSB2YWx1YWJsZSBjb250ZXh0IGZvciB0ZXN0aW5nIGFuZCBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMTktXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMjEtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTAyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeToKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzOiBLVk0gYW5kIFZpcnR1YWxpemF0aW9uKioKCkFscmlnaHQsIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBrZXJuZWwgY29uZmlndXJhdGlvbiwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgYWJzb2x1dGUgcmVxdWlyZW1lbnQgZm9yIGBDT05GSUdfS1ZNYC4gVGhhdCYjMzk7cyBhIGdpdmVuIOKAkyBjYW4mIzM5O3QgZG8gYW55dGhpbmcgS1ZNLXJlbGF0ZWQgd2l0aG91dCB0aGF0IGVuYWJsZWQsIG9idmlvdXNseS4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHF1ZXN0aW9uIGlzOiBkb2VzIGVuYWJsaW5nIEtWTSBuZWNlc3NpdGF0ZSwgb3IgYXQgbGVhc3QgaGlnaGx5IHN1Z2dlc3QsIHRoYXQgd2UgYWxzbyBjb25zaWRlciBgQ09ORklHX1ZJUlRVQUxJWkFUSU9OYD8gVGhlIHJlbGF0aW9uc2hpcCB0aGVyZSBpcyBrZXkuIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWluIHRoYXQgdGhlIHVuZGVybHlpbmcgaHlwZXJ2aXNvciBzdXBwb3J0IHdpbGwgYmUgbmVlZGVkLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB3aGV0aGVyIGBWSVJUVUFMSVpBVElPTmAgaXMgKnN0cmljdGx5KiBhIHByZXJlcXVpc2l0ZSwgb3IgaWYgaXQmIzM5O3MgbW9yZSBvZiBhbiBhbmNpbGxhcnkgZmVhdHVyZSB0aGF0IGlzIGJlc3QgcHJhY3RpY2UgdG8gZW5hYmxlIHdoZW4gZW5hYmxpbmcgS1ZNLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGRlcGVuZGVuY3kgcGF0aCBjbGVhcmx5IHRvIG1ha2UgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24gZGVjaXNpb25zLiBJdCBkZXBlbmRzIG9uIHdoZXRoZXIgd2UgYXJlIGRlYWxpbmcgd2l0aCBhIHR5cGUgMSBvciB0eXBlIDIgaHlwZXJ2aXNvciwgYW5kIGhvdyBtdWNoIGlzIGJlaW5nIHZpcnR1YWxpemVkLCBvciBlbXVsYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVklSVFVBTElaQVRJT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL0tjb25maWc9Nj1zb3VyY2UgXCYjMzQ7dmlydC9rdm0vS2NvbmZpZ1wmIzM0O1xuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy03LVxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZzo4Om1lbnVjb25maWcgVklSVFVBTElaQVRJT05cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctOS1cdGJvb2wgXCYjMzQ7VmlydHVhbGl6YXRpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDg1CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIGFuZCBNTVUgRnVuY3Rpb24gUmV2aWV3KioKCkFscmlnaHQsIGZpcnN0IHRoaW5ncyBmaXJzdCwgc2VlbXMgbGlrZSB3ZSYjMzk7cmUgbG9va2luZyBhdCBLVk0gb24gUklTQy1WLiBUaGVyZWZvcmUsIGBDT05GSUdfS1ZNYCBhbmQgYENPTkZJR19WSVJUVUFMSVpBVElPTmAgYXJlIGRlZmluaXRlbHkgcHJlcmVxdWlzaXRlcy4gTm90aGluZyBzdXJwcmlzaW5nIHRoZXJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIGFyZSBlbmFibGVkLCBvYnZpb3VzbHkuCgpOZXh0LCBJJiMzOTttIHRoaW5raW5nIG9mIGRpdmluZyBpbnRvIHRoZSBNTVUtcmVsYXRlZCBjb2RlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBSSVNDLVYgS1ZNIGltcGxlbWVudGF0aW9uLiBUaGUgZnVuY3Rpb24gSSB3YW50IHRvIGxvb2sgYXQgaXMgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAg4oCTIEkmIzM5O20gYXNzdW1pbmcgdGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBwcmUtZmF1bHQgaGFuZGxpbmcgaGFwcGVucyBhbmQgbGlrZWx5IHdoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZm9yIHdoYXRldmVyIHRhc2sgSSYjMzk7dmUgZ290IGluIG1pbmQuIFRpbWUgdG8gZ2V0IGRpZ2dpbmcgaW4gYGFyY2gvcmlzY3Yva3ZtL21tdS5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vbW11LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vbW11LmM9NjIzPWludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXG4tLVxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNzUwLVxuYXJjaC9yaXNjdi9rdm0vbW11LmM6NzUxOmxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTc1Mi1cdFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTMyCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkZvY3VzaW5nIG9uIE1lbW9yeSBGYXVsdHMgaW4gS1ZNLVJJU0NWKioKCkFscmlnaHQsIHRoZSBjb3JlIG9mIHRoaXMgbWVtb3J5IGZhdWx0IGludmVzdGlnYXRpb24gc2VlbXMgdG8gbGllIHdpdGhpbiBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YC4gVGhhdCYjMzk7cyBkZWZpbml0ZWx5IHdoZXJlIEkgbmVlZCB0byBzdGFydCBkaWdnaW5nLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgdmlydHVhbCBDUFUgaXMgaW50ZXJjZXB0aW5nIHRoZSBtZW1vcnkgYWNjZXNzIGJlZm9yZSB0aGUgZmF1bHQgZXZlbiBvY2N1cnMsIGFsbG93aW5nIGZvciBvdXIgaW50ZXJ2ZW50aW9uLgoKQW5kLCBmcm9tIHRoZSBsb29rcyBvZiBpdCwgaXQgc2VlbXMgbGlrZSBga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZWAgaGFzIHNlZW4gc29tZSBtb2RpZmljYXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRob3NlIGNoYW5nZXMgaW4gYGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2VgIGFyZSBpbnRlcmFjdGluZyB3aXRoIHRoZSBmYXVsdCBoYW5kbGluZyBpbiBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YC4gR290dGEgZmlndXJlIG91dCB0aGUgaW50ZXJwbGF5LgoKRmlyc3QsIGxldCYjMzk7cyBwdWxsIHVwIHRoZSBzb3VyY2UgZm9yIGBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlYC4gSSYjMzk7bGwgZmluZCBpdCBpbiBgYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNgIGFuZCBzZWUgaG93IHRoaXMgaXMgYWZmZWN0aW5nIHRoZSBtYXBwaW5nIG9mIGd1ZXN0IHBoeXNpY2FsIHBhZ2VzIHdpdGhpbiB0aGUgZ2xvYmFsIHN0YWdlLiBJdCBzZWVtcyBsaWtlIHRoZSBtb2RpZmljYXRpb25zIHRoZXJlIGFyZSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgbWVtb3J5IGZhdWx0cyBhcmUgaGFuZGxlZCBpbiBSSVNDLVYuIFRoYXQmIzM5O3MgdGhlIHByaW9yaXR5IG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jPTE4Nj1zdGF0aWMgdm9pZCBrdm1fcmlzY3ZfZ3N0YWdlX3VwZGF0ZV9wdGVfcHJvdChzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLCB1MzIgbGV2ZWwsXG4tLVxuYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmMtMjA2LVxuYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmM6MjA3OmludCBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsXG5hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYy0yMDgtXHRcdFx0ICAgICAgc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpwY2FjaGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0ODEKCQkJCQkJCW91dHB1dDogMTgwCgkJCQkJCQl0aG91Z2h0czogMjU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFJJU0MtViBLVk0gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgUklTQy1WIEtWTSBwYXRjaCwgYW5kIGl0IHNlZW1zIGxpa2UgYGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2VgIGFuZCBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBhcmUgdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24uIFRoZXkgYXJlIHRoZSBwcmltYXJ5IHRhcmdldHMgaGVyZS4KCkxldCBtZSBqdXN0IHF1aWNrbHkgY2hlY2sgZm9yIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucy4gQWgsIHllcywgYEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllgIGlzIGluZGVlZCBzZWxlY3RlZCB3aGVuIGBLVk1gIGlzIGVuYWJsZWQgZm9yIFJJU0MtVi4gU28sIGp1c3QgZW5hYmxpbmcgYEtWTWAgc2hvdWxkIHN1ZmZpY2UuCgpOb3csIGxldCYjMzk7cyBmb3JtYXQgbXkgZmluZGluZ3MgZm9yIGVhc3kgY29uc3VtcHRpb24uCgpFc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBpcyBhZGRpbmcgdGhlIGBLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUllgIGNhcGFiaWxpdHkgYW5kIGl0cyBhc3NvY2lhdGVkIGlvY3RsLCBgS1ZNX1BSRV9GQVVMVF9NRU1PUllgLCBmb3IgUklTQy1WIEtWTS4gVGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBwcmUtZmF1bHQgaGFuZGxlciwgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAsIGlzIGJlaW5nIGludHJvZHVjZWQuIFBsdXMsIGBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlYCBpcyBiZWluZyB1cGRhdGVkIHRvIHJldHVybiBtYXBwaW5nIGluZm9ybWF0aW9uLgoKVGhpcyBtZWFucyBuZXcsIHBvdGVudGlhbGx5IHJlYWNoYWJsZSBjb2RlIHBhdGhzIGFyZSBiZWluZyBvcGVuZWQgdXAgaW4gdGhlIFJJU0MtViBLVk0gc3Vic3lzdGVtLCBhbmQgdXNlcnNwYWNlIGNhbiB0cmlnZ2VyIHRoZW0gdmlhIHRoaXMgbmV3IGlvY3RsLgoKSGVyZSYjMzk7cyB0aGUgZGF0YSBmb3IgbXkgcmVjb3JkczoKCiogICAqKldvcnRoRnV6emluZyoqOiBgdHJ1ZWAKKiAgICoqRm9jdXNTeW1ib2xzKio6CiAgICAqICAgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAKICAgICogICBga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZWAKKiAgICoqRW5hYmxlQ29uZmlncyoqOgogICAgKiAgIGBLVk1gCiAgICAqICAgYFZJUlRVQUxJWkFUSU9OYAoqICAgKipSZWFzb25pbmcqKjogVGhpcyBwYXRjaCBlbmFibGVzIHRoZSBLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUlkgY2FwYWJpbGl0eSBhbmQgaXRzIGNvcnJlc3BvbmRpbmcgaW9jdGwgKEtWTV9QUkVfRkFVTFRfTUVNT1JZKSBmb3IgUklTQy1WIEtWTS4gSXQgaW1wbGVtZW50cyB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGhhbmRsZXIgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgYW5kIG1vZGlmaWVzIGBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlYCB0byByZXR1cm4gbWFwcGluZyBpbmZvcm1hdGlvbi4gVGhpcyBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUgY29kZSBwYXRocyBpbiB0aGUgUklTQy1WIEtWTSBzdWJzeXN0ZW0gdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgaW9jdGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7VklSVFVBTElaQVRJT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkmIzM0OywKICAgICYjMzQ7a3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBlbmFibGVzIHRoZSBLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUlkgY2FwYWJpbGl0eSBhbmQgaXRzIGNvcnJlc3BvbmRpbmcgaW9jdGwgKEtWTV9QUkVfRkFVTFRfTUVNT1JZKSBmb3IgUklTQy1WIEtWTS4gSXQgaW1wbGVtZW50cyB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGhhbmRsZXIgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgYW5kIG1vZGlmaWVzIGBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlYCB0byByZXR1cm4gbWFwcGluZyBpbmZvcm1hdGlvbi4gVGhpcyBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUgY29kZSBwYXRocyBpbiB0aGUgUklTQy1WIEtWTSBzdWJzeXN0ZW0gdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgaW9jdGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtWSVJUVUFMSVpBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGVuYWJsZXMgdGhlIEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWSBjYXBhYmlsaXR5IGFuZCBpdHMgY29ycmVzcG9uZGluZyBpb2N0bCAoS1ZNX1BSRV9GQVVMVF9NRU1PUlkpIGZvciBSSVNDLVYgS1ZNLiBJdCBpbXBsZW1lbnRzIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaGFuZGxlciBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBhbmQgbW9kaWZpZXMgYGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2VgIHRvIHJldHVybiBtYXBwaW5nIGluZm9ybWF0aW9uLiBUaGlzIGludHJvZHVjZXMgbmV3IHJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHRoZSBSSVNDLVYgS1ZNIHN1YnN5c3RlbSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBpb2N0bC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzowMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbXBsZW1lbnRzIHRoZSBgS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZYCBjYXBhYmlsaXR5IGZvciBSSVNDLVYgYnkgYWRkaW5nIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGFuZCB3aXJpbmcgaXQgdXAgaW4gdGhlIE1NVS4gVGhlIG9ubHkgZGF0YSBzdHJ1Y3R1cmUgaW52b2x2ZWQgaW4gdXNlciBzcGFjZSBjb21tdW5pY2F0aW9uIGlzIGBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnlgLCB3aGljaCBpcyBoYW5kbGVkIGJ5IGdlbmVyaWMgS1ZNIGNvZGUgKGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCkuIFRoZSBnZW5lcmljIGNvZGUgZnVsbHkgaW5pdGlhbGl6ZXMgdGhlIHN0cnVjdCB2aWEgYGNvcHlfZnJvbV91c2VyYCBiZWZvcmUgbW9kaWZ5aW5nIGl0cyBgc2l6ZWAgYW5kIGBncGFgIGZpZWxkcyBhbmQgY29weWluZyBpdCBiYWNrIHRvIHVzZXIgc3BhY2UuIEFueSBwYWRkaW5nIGZpZWxkcyBzaW1wbHkgZWNobyBiYWNrIHRoZSB1c2VyLXByb3ZpZGVkIHZhbHVlcywgcHJldmVudGluZyBhbnkga2VybmVsIG1lbW9yeSBpbmZvLWxlYWtzLiBUaGUgbG9jYWwgdmFyaWFibGUgYG91dF9tYXBgIG9mIHR5cGUgYHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmdgIGlzIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCAoYD0geyAwIH1gKSBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvIGBrdm1fcmlzY3ZfbW11X21hcGAuIFRoZXJlIGFyZSBubyBuZXcgY29tcGxleCBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjBiNjBhMGM3OWYzYzIyZjlhZjY4NzY4ODgwZDI2Y2ZiMjUyMjUwMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDExIDA3OjAxOjU5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vS2NvbmZpZyBiL2FyY2gvcmlzY3Yva3ZtL0tjb25maWcKaW5kZXggZWMyY2VlMGEzOWUwMS4uOGFjMjA5ZThhYzg3MCAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9rdm0vS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnCkBAIC0yOCw2ICYjNDM7MjgsNyBAQCBjb25maWcgS1ZNCiAJc2VsZWN0IEtWTV9DT01NT04KIAlzZWxlY3QgS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUCiAJc2VsZWN0IEtWTV9HRU5FUklDX0hBUkRXQVJFX0VOQUJMSU5HCiYjNDM7CXNlbGVjdCBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZCiAJc2VsZWN0IEtWTV9NTUlPCiAJc2VsZWN0IFZJUlRfWEZFUl9UT19HVUVTVF9XT1JLCiAJc2VsZWN0IFNDSEVEX0lORk8KZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jIGIvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmMKaW5kZXggZTUwMDJjYjljYmVmMS4uNmJkOGI4ZmQ2Y2ViMiAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmMKQEAgLTI4MCw2ICYjNDM7MjgwLDkgQEAgaW50IGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2Uoc3RydWN0IGt2bV9nc3RhZ2UgKmdzdGFnZSwKIAkJCQkJCSAgICBvdXRfbWFwLSZndDtsZXZlbCwgdHJ1ZSk7CiAJCX0gZWxzZSBpZiAoQUxJR05fRE9XTihQRk5fUEhZUyhwdGVfcGZuKHB0ZXBfZ2V0KHB0ZXApKSksIHBhZ2Vfc2l6ZSkgPT0gaHBhKSB7CiAJCQlrdm1fcmlzY3ZfZ3N0YWdlX3VwZGF0ZV9wdGVfcHJvdChnc3RhZ2UsIHB0ZXBfbGV2ZWwsIGdwYSwgcHRlcCwgcHJvdCk7CiYjNDM7CQkJb3V0X21hcC0mZ3Q7YWRkciA9IEFMSUdOX0RPV04oZ3BhLCBwYWdlX3NpemUpOwomIzQzOwkJCW91dF9tYXAtJmd0O2xldmVsID0gcHRlcF9sZXZlbDsKJiM0MzsJCQlvdXRfbWFwLSZndDtwdGUgPSBwdGVwX2dldChwdGVwKTsKIAkJCXJldHVybiAwOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vbW11LmMgYi9hcmNoL3Jpc2N2L2t2bS9tbXUuYwppbmRleCA2MDM1YjVlYzk1MDM5Li5jOTZlMjE3NDBjOTEzIDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2t2bS9tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS9tbXUuYwpAQCAtNzQ4LDYgJiM0Mzs3NDgsMzkgQEAgaW50IGt2bV9yaXNjdl9tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCwKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAomIzQzOwkJCQkgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgb3V0X21hcCA9IHsgMCB9OwomIzQzOwlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90OwomIzQzOwl1bnNpZ25lZCBsb25nIG1hcF9zaXplOwomIzQzOwl1bnNpZ25lZCBsb25nIGh2YTsKJiM0MzsJZ3BhX3QgZW5kOwomIzQzOwlnZm5fdCBnZm47CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWdmbiA9IGdwYV90b19nZm4ocmFuZ2UtJmd0O2dwYSk7CiYjNDM7CW1lbXNsb3QgPSBrdm1fdmNwdV9nZm5fdG9fbWVtc2xvdCh2Y3B1LCBnZm4pOwomIzQzOwlpZiAoIW1lbXNsb3QpCiYjNDM7CQlyZXR1cm4gLUVOT0VOVDsKJiM0MzsKJiM0MzsJaHZhID0gZ2ZuX3RvX2h2YV9tZW1zbG90X3Byb3QobWVtc2xvdCwgZ2ZuLCBOVUxMKTsKJiM0MzsJaWYgKGt2bV9pc19lcnJvcl9odmEoaHZhKSkKJiM0MzsJCXJldHVybiAtRU5PRU5UOwomIzQzOwomIzQzOwlyZXQgPSBrdm1fcmlzY3ZfbW11X21hcCh2Y3B1LCBtZW1zbG90LCByYW5nZS0mZ3Q7Z3BhLCBodmEsIGZhbHNlLCAmYW1wO291dF9tYXApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKCFwdGVfdmFsKG91dF9tYXAucHRlKSkKJiM0MzsJCXJldHVybiAtRUFHQUlOOwomIzQzOwomIzQzOwltYXBfc2l6ZSA9IFBBR0VfU0laRSAmbHQ7Jmx0OyAob3V0X21hcC5sZXZlbCAqIGt2bV9yaXNjdl9nc3RhZ2VfaW5kZXhfYml0cyk7CiYjNDM7CWVuZCA9IEFMSUdOX0RPV04ocmFuZ2UtJmd0O2dwYSwgbWFwX3NpemUpICYjNDM7IG1hcF9zaXplOwomIzQzOwomIzQzOwlyZXR1cm4gbWluX3QodTY0LCByYW5nZS0mZ3Q7c2l6ZSwgZW5kIC0gcmFuZ2UtJmd0O2dwYSk7CiYjNDM7fQomIzQzOwogaW50IGt2bV9yaXNjdl9tbXVfYWxsb2NfcGdkKHN0cnVjdCBrdm0gKmt2bSkKIHsKIAlzdHJ1Y3QgcGFnZSAqcGdkX3BhZ2U7CmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS92bS5jIGIvYXJjaC9yaXNjdi9rdm0vdm0uYwppbmRleCBhOWYwODNmZWViNzY3Li41ODUwMGExOWIzM2JkIDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2t2bS92bS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL3ZtLmMKQEAgLTE4Nyw2ICYjNDM7MTg3LDcgQEAgaW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dCkKIAljYXNlIEtWTV9DQVBfTVBfU1RBVEU6CiAJY2FzZSBLVk1fQ0FQX0lNTUVESUFURV9FWElUOgogCWNhc2UgS1ZNX0NBUF9TRVRfR1VFU1RfREVCVUc6CiYjNDM7CWNhc2UgS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZOgogCQlyID0gMTsKIAkJYnJlYWs7CiAJY2FzZSBLVk1fQ0FQX05SX1ZDUFVTOgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0KaW5kZXggNmZjMzRlOWJmOGUxYi4uYWM2NGFjOTJmZDRiMCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtCkBAIC0yMjUsNiAmIzQzOzIyNSw3IEBAIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICYjNDM7PSBjb2FsZXNjZWRfaW9fdGVzdAogVEVTVF9HRU5fUFJPR1NfcmlzY3YgJiM0Mzs9IGRpcnR5X2xvZ19wZXJmX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICYjNDM7PSBnZXQtcmVnLWxpc3QKIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICYjNDM7PSBtbXVfc3RyZXNzX3Rlc3QKJiM0MztURVNUX0dFTl9QUk9HU19yaXNjdiAmIzQzOz0gcHJlX2ZhdWx0X21lbW9yeV90ZXN0CiBURVNUX0dFTl9QUk9HU19yaXNjdiAmIzQzOz0gcnNlcV90ZXN0CiBURVNUX0dFTl9QUk9HU19yaXNjdiAmIzQzOz0gc3RlYWxfdGltZQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oCmluZGV4IGUzYWNmMmFlOTg4MWUuLjcwNDg3YzhlZDE1NTMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oCkBAIC0xMiw2ICYjNDM7MTIsOSBAQAogI2luY2x1ZGUgJmx0O2FzbS92ZHNvL3Byb2Nlc3Nvci5oJmd0OwogI2luY2x1ZGUgJiMzNDtrdm1fdXRpbC5oJiMzNDsKIAomIzQzOyNkZWZpbmUgUEFHRV9TSElGVAkJMTIKJiM0MzsjZGVmaW5lIFBBR0VfU0laRQkJQklUX1VMTChQQUdFX1NISUZUKQomIzQzOwogI2RlZmluZSBJTlNOX09QQ09ERV9NQVNLCTB4MDA3YwogI2RlZmluZSBJTlNOX09QQ09ERV9TSElGVAkyCiAjZGVmaW5lIElOU05fT1BDT0RFX1NZU1RFTQkyOApAQCAtMTI3LDYgJiM0MzsxMzAsOSBAQCB2b2lkIHZtX2luc3RhbGxfZXhjZXB0aW9uX2hhbmRsZXIoc3RydWN0IGt2bV92bSAqdm0sIGludCB2ZWN0b3IsIGV4Y2VwdGlvbl9oYW5kbAogCiB2b2lkIHZtX2luc3RhbGxfaW50ZXJydXB0X2hhbmRsZXIoc3RydWN0IGt2bV92bSAqdm0sIGV4Y2VwdGlvbl9oYW5kbGVyX2ZuIGhhbmRsZXIpOwogCiYjNDM7LyogTDQgaW5kZXggQml0WzU2OjQ4XSAqLwomIzQzOyNkZWZpbmUgUEdUQkxfTDRfSU5ERVhfTUFTSwkJCTB4MDFGRjAwMDAwMDAwMDAwMFVMTAomIzQzOyNkZWZpbmUgUEdUQkxfTDRfSU5ERVhfU0hJRlQJCQk0OAogLyogTDMgaW5kZXggQml0WzQ3OjM5XSAqLwogI2RlZmluZSBQR1RCTF9MM19JTkRFWF9NQVNLCQkJMHgwMDAwRkY4MDAwMDAwMDAwVUxMCiAjZGVmaW5lIFBHVEJMX0wzX0lOREVYX1NISUZUCQkJMzkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jCmluZGV4IGRlZDU0MjlmMzQ0ODMuLmI0ZDQxYTQwNzU1MzYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuYwpAQCAtNDMsNiAmIzQzOzQzLDcgQEAgc3RhdGljIHU2NCBwdGVfaW5kZXhfbWFza1tdID0gewogCVBHVEJMX0wxX0lOREVYX01BU0ssCiAJUEdUQkxfTDJfSU5ERVhfTUFTSywKIAlQR1RCTF9MM19JTkRFWF9NQVNLLAomIzQzOwlQR1RCTF9MNF9JTkRFWF9NQVNLLAogfTsKIAogc3RhdGljIHUzMiBwdGVfaW5kZXhfc2hpZnRbXSA9IHsKQEAgLTUwLDYgJiM0Mzs1MSw3IEBAIHN0YXRpYyB1MzIgcHRlX2luZGV4X3NoaWZ0W10gPSB7CiAJUEdUQkxfTDFfSU5ERVhfU0hJRlQsCiAJUEdUQkxfTDJfSU5ERVhfU0hJRlQsCiAJUEdUQkxfTDNfSU5ERVhfU0hJRlQsCiYjNDM7CVBHVEJMX0w0X0lOREVYX1NISUZULAogfTsKIAogc3RhdGljIHU2NCBwdGVfaW5kZXgoc3RydWN0IGt2bV92bSAqdm0sIGd2YV90IGd2YSwgaW50IGxldmVsKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jCmluZGV4IGEwZmNhZTNjYjdhOGIuLjZlZWJmMDUyNDY3MzYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmMKQEAgLTgsNiAmIzQzOzgsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3NpemVzLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDt0ZXN0X3V0aWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7Z3Vlc3RfbW9kZXMuaCZndDsKICNpbmNsdWRlICZsdDtrdm1fdXRpbC5oJmd0OwogI2luY2x1ZGUgJmx0O3Byb2Nlc3Nvci5oJmd0OwogI2luY2x1ZGUgJmx0O3B0aHJlYWQuaCZndDsKQEAgLTIxOSw2ICYjNDM7MjIwLDggQEAgc3RhdGljIHZvaWQgdGVzdF9wcmVfZmF1bHRfbWVtb3J5KHVuc2lnbmVkIGxvbmcgdm1fdHlwZSwgYm9vbCBwcml2YXRlKQogCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogewomIzQzOwlndWVzdF9tb2Rlc19hcHBlbmRfZGVmYXVsdCgpOwomIzQzOwogCVRFU1RfUkVRVUlSRShrdm1fY2hlY2tfY2FwKEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWSkpOwogCiAJdGVzdF9wcmVfZmF1bHRfbWVtb3J5KDAsIGZhbHNlKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNzcKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA3MDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUklTQy1WIEtWTSBQcmUtRmF1bHQgTWVtb3J5IFN1cHBvcnQgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIFJJU0MtViBLVk0uIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGFib3V0IGFkZGluZyBzdXBwb3J0IGZvciBgS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZYC4gIEVzc2VudGlhbGx5LCBpdCYjMzk7cyBhYm91dCBwcm9hY3RpdmVseSBmYXVsdGluZyBpbiBtZW1vcnkgcmVnaW9ucywgd2hpY2ggY2FuIGltcHJvdmUgcGVyZm9ybWFuY2UgYnkgcmVkdWNpbmcgdGhlIGxhdGVuY3kgb2YgdGhlIGZpcnN0IGFjY2Vzcy4KClRoZSBmaXJzdCB0aGluZyBJIHNlZSBpcyB0aGUgYEtjb25maWdgIGNoYW5nZTsgaXQmIzM5O3Mgc2VsZWN0aW5nIGBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZYC4gR29vZCwgd2UgYXJlIHJldXNpbmcgdGhlIGdlbmVyaWMgZnJhbWV3b3JrIHdoZXJlIHBvc3NpYmxlLiBUaGVuIHRoZXJlIGFyZSB0aGUgbW9kaWZpY2F0aW9ucyB0byBgZ3N0YWdlLmNgIOKAkyBwcmVzdW1hYmx5IHBvcHVsYXRpbmcgYG91dF9tYXBgIGZpZWxkcyDigJMgYW5kIGBtbXUuY2AsIHdoaWNoIGltcGxlbWVudHMgdGhlIGtleSBmdW5jdGlvbjogYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAuIEZpbmFsbHksIGl0IHJlcG9ydHMgdGhlIG5ldyBjYXBhYmlsaXR5IGFzIHN1cHBvcnRlZCBhbmQgdXBkYXRlcyBzZWxmdGVzdHMuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBzbyBmYXIuCgpOb3cgbGV0JiMzOTtzIGRpdmUgaW50byB0aGF0IGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGZ1bmN0aW9uLiBJJiMzOTttIHNlZWluZyBhIGxvY2FsIGBzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nIG91dF9tYXAgPSB7IDAgfTtgIGJlaW5nIGluaXRpYWxpemVkIHRvIHplcm8uIEkgdGhlbiBzZWUgdGhhdCBga3ZtX3Jpc2N2X21tdV9tYXBgIGlzIGJlaW5nIGNhbGxlZCB3aXRoIGAmYW1wO291dF9tYXBgIGFzIGFuIGFyZ3VtZW50LiAgSSBzZWUgdGhhdCB0aGUgYG91dF9tYXBgIHN0cnVjdCBpcyB1c2VkIGxhdGVyIHRvIGNhbGN1bGF0ZSBgbWFwX3NpemVgIHdoaWNoLCBnaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwcmUtZmF1bHRpbmcgcHJvY2Vzcywgc2VlbXMgY29ycmVjdC4gV2UmIzM5O3JlIGVmZmVjdGl2ZWx5IGZpZ3VyaW5nIG91dCB0aGUgbWFwcGluZyYjMzk7cyBzaXplLCBiYXNlZCBvbiB0aGUgTU1VJiMzOTtzIHBhZ2UgdGFibGUgbGV2ZWwuIFRoZSBgZW5kYCBjYWxjdWxhdGlvbiB0aGVuIHVzZXMgdGhlIGBtYXBfc2l6ZWAgdG8gZmlndXJlIG91dCB0aGUgYWN0dWFsIGJ5dGVzIHRvIHByZS1mYXVsdC4gVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdlcmUgc3VjY2Vzc2Z1bGx5IHByZS1mYXVsdGVkLCBvciBhbiBlcnJvci4KClRoZSBpbXBvcnRhbnQgdGhpbmcgaXMgdGhpcyB6ZXJvIGluaXRpYWxpemF0aW9uIG9mIGBvdXRfbWFwYC4gSXMgdGhpcyBva2F5PyBJdCBjb3VsZCBjYXVzZSBwcm9ibGVtcywgaXQmIzM5O3Mgc29tZXRoaW5nIEkgbmVlZCB0byBsb29rIGludG8uCgpUaGUgbmV4dCBwb2ludCBJIG5lZWQgdG8gY2xhcmlmeSBpcyB3aGV0aGVyIHRoZSBgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5YCBpcyBiZWluZyBjb3BpZWQgdG8vZnJvbSB1c2Vyc3BhY2UuIEJlY2F1c2UgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBhcyBhbiBgaW9jdGxgIGFuZCwgZ2l2ZW4gbXkga25vd2xlZGdlIG9mIGhvdyB0aGlzIHR5cGljYWxseSB3b3JrcyB3aXRoIEtWTSwgSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGF0IHRoaXMgaXMgaW5kZWVkIHRoZSBjYXNlLiBUaGF0IG1lYW5zIHRoZXJlJiMzOTtzIGEgZ29vZCBjaGFuY2UgdGhpcyBpcyBhIHZ1bG5lcmFiaWxpdHkuICBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBnZW5lcmljIEtWTSBjb2RlIGZvciB0aGUgYEtWTV9QUkVfRkFVTFRfTUVNT1JZYCBpb2N0bCBpbXBsZW1lbnRhdGlvbi4gSSBjYW4gdXNlIGBncmVwcGVyYCB0byBmaW5kIG91dCB3aGVyZSBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBpcyBhY3R1YWxseSBjYWxsZWQuIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9tbXUuYz02MjM9aW50IGt2bV9yaXNjdl9tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcbi0tXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03NTAtXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYzo3NTE6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNzUyLVx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU3OTc9dm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU4NDAtLyoqXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTg0MTogKiBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoKSAtLSBwcmUtZmF1bHQgYW5kIGxpbmsgZ21hcCBkYXQgdGFibGVzXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTg0Mi0gKiBAdmNwdTogdGhlIHZjcHUgdGhhdCBzaGFsbCBhcHBlYXIgdG8gaGF2ZSBnZW5lcmF0ZWQgdGhlIGZhdWx0LWluLlxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01ODU5LSAqL1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU4NjA6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU4NjEte1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NDk3Mz1zdGF0aWMgaW50IGt2bV90ZHBfcGFnZV9wcmVmYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUwMTYtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUwMTc6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MDE4LVx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0xNzAxPXN0YXRpYyBpbnQgdGR4X3NlcHRfbWFwX2xlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgZW51bSBwZ19sZXZlbCBsZXZlbCxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTE3MTMtXHQvKlxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoxNzE0Olx0ICogRW5zdXJlIHByZV9mYXVsdF9hbGxvd2VkIGlzIHJlYWQgYnkga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KClcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMTcxNS1cdCAqIGJlZm9yZSBrdm1fdGR4LVx1MDAzZXN0YXRlLiAgVXNlcnNwYWNlIG11c3Qgbm90IGJlIGFsbG93ZWQgdG8gcHJlLWZhdWx0XG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTI2MTA9dm9pZCBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGUoa3ZtX3Bmbl90IHN0YXJ0LCBrdm1fcGZuX3QgZW5kKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjYxMy0jaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoyNjE0Omxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNjE1LVx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpO1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9NDMzND1zdGF0aWMgaW50IGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNDM1OC1cbnZpcnQva3ZtL2t2bV9tYWluLmM6NDM1OTpcdFx0ciA9IGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSh2Y3B1LCByYW5nZSk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQzNjAtXHRcdGlmIChXQVJOX09OX09OQ0UociA9PSAwIHx8IHIgPT0gLUVJTykpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3NTcKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0YWNrbGluZyB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24sIGBrdm1fdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCwgZm91bmQgaW4gYHZpcnQva3ZtL2t2bV9tYWluLmNgOgoKKipEaXZpbmcgaW50byBga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAqKgoKQWxyaWdodCwgdGhlIG5leHQgc3RlcCBpbiB0aGlzIGludmVzdGlnYXRpb24gaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIGBrdm1fdmNwdV9wcmVfZmF1bHRfbWVtb3J5YC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgKmJlZm9yZSogYSBtZW1vcnkgZmF1bHQgb2NjdXJzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBLVk0gZW52aXJvbm1lbnQuIEdpdmVuIHRoZSBuYW1lLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhpcyBpcyBhIHByZS1mYXVsdCBoYW5kbGVyLCBsaWtlbHkgY3J1Y2lhbCBmb3IgS1ZNJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBleGNlcHRpb24gaGFuZGxpbmcuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgaW4gYGt2bV9tYWluLmNgIHN1Z2dlc3RzIGl0JiMzOTtzIGEgY2VudHJhbCBjb21wb25lbnQsIHByb2JhYmx5IGludm9sdmVkIGluIHRoZSBjb3JlIFZDUFUgbGlmZWN5Y2xlIGFuZCBtZW1vcnkgYWNjZXNzIG9wZXJhdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgS1ZNIGFyY2hpdGVjdHVyZSBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIHVuZGVybHlpbmcgaG9zdCBtZW1vcnkgYW5kIHRoZSBndWVzdCYjMzk7cyB2aXJ0dWFsIG1lbW9yeS4gSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhhdCB0aGlzIGlzIHdoZXJlIGNydWNpYWwgY2hlY2tzLCBwcmUtZW1wdGl2ZSBhY3Rpb25zIChsaWtlIGRpcnR5IGJpdCBoYW5kbGluZyksIG9yIG9wdGltaXphdGlvbnMgYXJlIGltcGxlbWVudGVkIHRvIHByZXZlbnQgdGhlIGZhdWx0IGl0c2VsZiBvciB0byBwcmVwYXJlIGZvciBpdHMgcmVzb2x1dGlvbi4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHN1Y2ggYXMgdGhlIFZDUFUmIzM5O3Mgc3RhdGUsIHRoZSBndWVzdCYjMzk7cyBwYWdlIHRhYmxlcywgYW5kIGFueSByZWxldmFudCBLVk0tc3BlY2lmaWMgbWVtb3J5IGRlc2NyaXB0b3JzLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgc3RhcnQgcmVhZGluZyBzb21lIGNvZGUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYz00MzA4PXN0YXRpYyBpbnQga3ZtX3ZjcHVfaW9jdGxfZ2V0X3N0YXRzX2ZkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQzMzMtI2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjQzMzQ6c3RhdGljIGludCBrdm1fdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDMzNS1cdFx0XHRcdCAgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSlcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTQ0MDY9c3RhdGljIGxvbmcga3ZtX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy00NjM4LVx0XHRcdGJyZWFrO1xudmlydC9rdm0va3ZtX21haW4uYzo0NjM5Olx0XHRyID0ga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSh2Y3B1LCBcdTAwMjZyYW5nZSk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ2NDAtXHRcdC8qIFBhc3MgYmFjayBsZWZ0b3ZlciByYW5nZS4gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQwOQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGt2bV92Y3B1X2lvY3RsYCBidXNpbmVzcywgc3BlY2lmaWNhbGx5IHRoZSBoYW5kbGluZyBvZiBgS1ZNX1BSRV9GQVVMVF9NRU1PUllgLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gaXQ6CgoqKkRpc3NlY3RpbmcgdGhlIEtWTV9QUkVfRkFVTFRfTUVNT1JZIGlvY3RsIGluIGt2bV92Y3B1X2lvY3RsKioKCkFscmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IHByZS1mYXVsdGluZyBtZW1vcnkuIFRoYXQgaW9jdGwgaXMga2V5LCBgS1ZNX1BSRV9GQVVMVF9NRU1PUllgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY29uc2lkZXIgdGhlIGNvbnRleHQ6IHdlJiMzOTtyZSBsaWtlbHkgdHJ5aW5nIHRvIG9wdGltaXplIG1lbW9yeSBhY2Nlc3MgaW4gdGhlIGd1ZXN0LCBieSBicmluZ2luZyBwYWdlcyBpbnRvIHRoZSBndWVzdCYjMzk7cyB3b3JraW5nIHNldCAqYmVmb3JlKiB0aGV5JiMzOTtyZSBhY3R1YWxseSBhY2Nlc3NlZC4gU21hcnQuIFRoaXMgc3VnZ2VzdHMgcHJlLWxvYWRpbmcgcGFnZXMgZm9yIGEgcmVhc29uLCBwZXJoYXBzIHBlcmZvcm1hbmNlIHByb2ZpbGluZyBkZXRlY3RlZCBzb21lIGxhdGVuY3kgaW4gdGhlIGFwcGxpY2F0aW9uLgoKTm93LCB3aXRoaW4gYGt2bV92Y3B1X2lvY3RsYCwgaXQmIzM5O3MgYWxsIGFib3V0IGhvdyBgS1ZNX1BSRV9GQVVMVF9NRU1PUllgIGlzICpoYW5kbGVkKi4gV2hhdCBhcmUgdGhlIHN0ZXBzPyBXaGVyZSBkb2VzIGl0IGZpdCBpbnRvIHRoZSBvdmVyYWxsIGlvY3RsIHN0cnVjdHVyZT8gSXMgaXQgYSBzaW1wbGUgJiMzNDtmYXVsdCB0aGlzIHJhbmdlJiMzNDsgb3IgYXJlIHRoZXJlIG1vcmUgY29tcGxleCBjb25zaWRlcmF0aW9ucywgbGlrZSBoYW5kbGluZyBwYWdlIGZhdWx0cyBhbmQgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIE1NVT8gR2l2ZW4gaXRzIG5hbWUsIGl04oCZcyBtb3N0IGxpa2VseSBzZXR0aW5nIHVwIHRoZSBwcmUtZmF1bHQgZm9yIGEgZ2l2ZW4gcmFuZ2Ugb2YgbWVtb3J5LiBIb3cgYXJlIHdlIGlkZW50aWZ5aW5nIHRoZSBtZW1vcnk/IFByb2JhYmx5IHNvbWUgc29ydCBvZiBhZGRyZXNzIHJhbmdlIHdpdGggc3RhcnQgYW5kIGVuZC4gQXJlIHdlIHVzaW5nIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3NlcyBvciB2aXJ0dWFsIGFkZHJlc3NlcyB3aXRoaW4gdGhlIFZNPyBXZSYjMzk7bGwgbmVlZCB0byB0cmFuc2xhdGUgYXMgbmVjZXNzYXJ5IHRvIHRoZSBob3N0LgoKSSYjMzk7ZCBleHBlY3QgdG8gc2VlIGEgY2hlY2sgZm9yIHZhbGlkaXR5IG9mIHRoZSByZXF1ZXN0ZWQgcmFuZ2UsIGVycm9yIGhhbmRsaW5nIGlmIHRoZSBvcGVyYXRpb24gZmFpbHMsIGFuZCBtb3N0IGltcG9ydGFudGx5LCB0aGUgYWN0dWFsIG1lY2hhbmlzbSBmb3IgYnJpbmdpbmcgdGhvc2UgcGFnZXMgaW50byBtZW1vcnkuIElzIEtWTSBsZXZlcmFnaW5nIHNvbWUgaG9zdCBzeXN0ZW0gY2FsbHMgb3IgdHJpY2tzIHRvIHByb2FjdGl2ZWx5IHRvdWNoIHRoZSBndWVzdCYjMzk7cyBtZW1vcnk/CgpJJiMzOTttIGN1cmlvdXM6IGFyZSB0aGVyZSBhbnkgZmxhZ3Mgb3Igb3B0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhpcyBpb2N0bD8gQXJlIHdlIGxvb2tpbmcgYXQgKmp1c3QqIHByZWZhdWx0aW5nIG9yIGlzIHRoZXJlIGEgd2F5IHRvIHByZS1wb3B1bGF0ZSBhbmQgcHJldmVudCBhIHJlYWwgcGFnZSBmYXVsdCBsYXRlcj8gSSB3b3VsZCBiZSBpbnRlcmVzdGVkIGluIHRoZSBtZWNoYW5pc21zIGluIHBsYWNlIHRoYXQgcHJldmVudCBhIHJhY2UgY29uZGl0aW9uIG9yIGNvbmZsaWN0LCBhbmQgaG93IHRoZXkgaGFuZGxlIHRoZSBWTeKAmXMgcGFnaW5nIHN0cnVjdHVyZXMuIEFsc28sIGhvdyBhcmUgd2UgZGVhbGluZyB3aXRoIHBvc3NpYmxlIE5VTUEgY29uc2lkZXJhdGlvbnMgaW4gdGhpcyBjb250ZXh0PwoKVWx0aW1hdGVseSwgbXkgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgZWZmaWNpZW5jeSBhbmQgc2FmZXR5IG9mIHRoaXMgcHJlLWZhdWx0aW5nIHByb2Nlc3MsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIFZNJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgaG93IHRoaXMgZml0cyBpbnRvIEtWTSYjMzk7cyBvdmVyYWxsIGFyY2hpdGVjdHVyZS4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyB0cmFuc2xhdGVzIGludG8gcmVhbC13b3JsZCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMsIG9yIGlmIHRoZXJlIGlzIGV2ZXIgYW55IHNjZW5hcmlvIHdoZXJlIGl0IGNvdWxkIGludHJvZHVjZSBhZGRpdGlvbmFsIG92ZXJoZWFkLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgaG93IGl0JiMzOTtzIGRvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0tWTV9QUkVfRkFVTFRfTUVNT1JZJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02NDcxPVNlZSBLVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTjIgZm9yIGFkZGl0aW9uYWwgZGV0YWlscy5cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDcyLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0NzM6NC4xNDMgS1ZNX1BSRV9GQVVMVF9NRU1PUllcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDc0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02NDgyPUVycm9yczpcbi0tXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjUwNi1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NTA3OktWTV9QUkVfRkFVTFRfTUVNT1JZIHBvcHVsYXRlcyBLVk0mIzM5O3Mgc3RhZ2UtMiBwYWdlIHRhYmxlcyB1c2VkIHRvIG1hcCBtZW1vcnlcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NTA4LWZvciB0aGUgY3VycmVudCB2Q1BVIHN0YXRlLiAgS1ZNIG1hcHMgbWVtb3J5IGFzIGlmIHRoZSB2Q1BVIGdlbmVyYXRlZCBhXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNTM5PXN0YXRpYyBpbnQgc25wX2xhdW5jaF9maW5pc2goc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNTk4LVx0ICogY2FuIGJlIGdpdmVuIHRvIHRoZSBndWVzdCBzaW1wbHkgYnkgbWFya2luZyB0aGUgUk1QIGVudHJ5IGFzIHByaXZhdGUuXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI1OTk6XHQgKiBUaGlzIGNhbiBoYXBwZW4gb24gZmlyc3QgYWNjZXNzIGFuZCBhbHNvIHdpdGggS1ZNX1BSRV9GQVVMVF9NRU1PUlkuXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI2MDAtXHQgKi9cbi0tXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg9MTY1OD1zdHJ1Y3Qga3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NjMtXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6MTY2NDojZGVmaW5lIEtWTV9QUkVfRkFVTFRfTUVNT1JZXHRfSU9XUihLVk1JTywgMHhkNSwgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5KVxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NjUtXG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oPTE2NTg9c3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQge1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjYzLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oOjE2NjQ6I2RlZmluZSBLVk1fUFJFX0ZBVUxUX01FTU9SWVx0X0lPV1IoS1ZNSU8sIDB4ZDUsIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSlcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjY1LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuYz02Nj1zdGF0aWMgdm9pZCBwcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGJhc2VfZ3BhLCB1NjQgb2Zmc2V0LFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuYy05Ni1cdFx0cHJldiA9IHJhbmdlLnNpemU7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmM6OTc6XHRcdHJldCA9IF9fdmNwdV9pb2N0bCh2Y3B1LCBLVk1fUFJFX0ZBVUxUX01FTU9SWSwgXHUwMDI2cmFuZ2UpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jLTk4LVx0XHRzYXZlX2Vycm5vID0gZXJybm87XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jLTE1Ny1cdGlmICghZXhwZWN0ZWRfbGVmdClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuYzoxNTg6XHRcdFRFU1RfQVNTRVJUX1ZNX1ZDUFVfSU9DVEwoIXJldCwgS1ZNX1BSRV9GQVVMVF9NRU1PUlksIHJldCwgdmNwdS1cdTAwM2V2bSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmMtMTU5LVx0ZWxzZVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jLTE2MC1cdFx0VEVTVF9BU1NFUlRfVk1fVkNQVV9JT0NUTChyZXQgXHUwMDI2XHUwMDI2IHNhdmVfZXJybm8gPT0gRU5PRU5ULFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jOjE2MTpcdFx0XHRcdFx0ICBLVk1fUFJFX0ZBVUxUX01FTU9SWSwgcmV0LCB2Y3B1LVx1MDAzZXZtKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuYy0xNjItfVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9NDQwNj1zdGF0aWMgbG9uZyBrdm1fdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ2MzItI2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjQ2MzM6XHRjYXNlIEtWTV9QUkVfRkFVTFRfTUVNT1JZOiB7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ2MzQtXHRcdHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSByYW5nZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE2NAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBzbmlwcGV0LCBmcmFtZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gS1ZNJiMzOTtzIENvcmUqKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIEtWTSBpbnRlcmFjdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyB0aGUgdmlydHVhbCBDUFUgaXMgbWFuYWdlZC4gVGhlIGZpcnN0IHBsYWNlIEkmIzM5O20gZ29pbmcgdG8gbG9vayBpcyB0aGUgYGt2bV92Y3B1X2lvY3RsYCBmdW5jdGlvbi4gSSByZW1lbWJlciB0aGF0JiMzOTtzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciBjb250cm9sIG9wZXJhdGlvbnMgb24gdGhlIHZpcnR1YWwgQ1BVLiBOb3csIHRoZSBoaW50IGFsc28gbWVudGlvbnMgdGhlIGZpbGUgYW5kIGxpbmUsIHdoaWNoIHNob3VsZCBleHBlZGl0ZSB0aGluZ3M7IGl0JiMzOTtzIGdvaW5nIHRvIGJlIGluIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCBhcm91bmQgbGluZSA0NjMzLiBLbm93aW5nIHRoZSBmaWxlIGxvY2F0aW9uIGlzIGtleSAtIGl0IHBsYWNlcyB0aGlzIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgS1ZNJiMzOTtzIGNvcmUgYXJjaGl0ZWN0dXJlLiBXaXRoIHRoZSBsaW5lIG51bWJlciwgSSBjYW4gc3RhcnQgcmlnaHQgd2hlcmUgSSBuZWVkIHRvIGJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NjI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ2MjU6XHRcdFx0ciA9IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X2ZwdSh2Y3B1LCBmcHUpO1xuNDYyNjpcdFx0XHRicmVhaztcbjQ2Mjc6XHRcdH1cbjQ2Mjg6XHRcdGNhc2UgS1ZNX0dFVF9TVEFUU19GRDoge1xuNDYyOTpcdFx0XHRyID0ga3ZtX3ZjcHVfaW9jdGxfZ2V0X3N0YXRzX2ZkKHZjcHUpO1xuNDYzMDpcdFx0XHRicmVhaztcbjQ2MzE6XHRcdH1cbjQ2MzI6XHQjaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcbjQ2MzM6XHRcdGNhc2UgS1ZNX1BSRV9GQVVMVF9NRU1PUlk6IHtcbjQ2MzQ6XHRcdFx0c3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5IHJhbmdlO1xuNDYzNTpcdFxuNDYzNjpcdFx0XHRyID0gLUVGQVVMVDtcbjQ2Mzc6XHRcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnJhbmdlLCBhcmdwLCBzaXplb2YocmFuZ2UpKSlcbjQ2Mzg6XHRcdFx0XHRicmVhaztcbjQ2Mzk6XHRcdFx0ciA9IGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnkodmNwdSwgXHUwMDI2cmFuZ2UpO1xuNDY0MDpcdFx0XHQvKiBQYXNzIGJhY2sgbGVmdG92ZXIgcmFuZ2UuICovXG40NjQxOlx0XHRcdGlmIChjb3B5X3RvX3VzZXIoYXJncCwgXHUwMDI2cmFuZ2UsIHNpemVvZihyYW5nZSkpKVxuNDY0MjpcdFx0XHRcdHIgPSAtRUZBVUxUO1xuNDY0MzpcdFx0XHRicmVhaztcbjQ2NDQ6XHRcdH1cbjQ2NDU6XHQjZW5kaWZcbjQ2NDY6XHRcdGRlZmF1bHQ6XG40NjQ3Olx0XHRcdHIgPSBrdm1fYXJjaF92Y3B1X2lvY3RsKGZpbHAsIGlvY3RsLCBhcmcpO1xuNDY0ODpcdFx0fVxuNDY0OTpcdG91dDpcbjQ2NTA6XHRcdG11dGV4X3VubG9jayhcdTAwMjZ2Y3B1LVx1MDAzZW11dGV4KTtcbjQ2NTE6XHRcdGtmcmVlKGZwdSk7XG40NjUyOlx0XHRrZnJlZShrdm1fc3JlZ3MpO1xuNDY1MzpcdFx0cmV0dXJuIHI7XG40NjU0Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODcyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS1ZNIFByZS1GYXVsdCBNZW1vcnkgUHJvY2VzcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgS1ZNX1BSRV9GQVVMVF9NRU1PUllgIG9wZXJhdGlvbiwgYW5kIGl0IHNlZW1zIGxpa2UgdGhlIHNlcXVlbmNlIG9mIGV2ZW50cyBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGF0IGZpcnN0IGdsYW5jZS4gSXQgY29waWVzIGEgbWVtb3J5IGByYW5nZWAgZnJvbSB1c2Vyc3BhY2UsIGNhbGxzIGBrdm1fdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCB3aXRoIHRoYXQgYHJhbmdlYCwgYW5kIHRoZW4gY29waWVzIHRoZSBwb3RlbnRpYWxseSBtb2RpZmllZCBgcmFuZ2VgIGJhY2sgdG8gdXNlcnNwYWNlLgoKQnV0IHdhaXQgYSBtaW51dGUuLi4gZG9lcyBga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgYWN0dWFsbHkgKm1vZGlmeSogdGhhdCBgcmFuZ2VgPyBUaGF0JiMzOTtzIHRoZSBjcnVjaWFsIGRldGFpbCBJIG5lZWQgdG8gbmFpbCBkb3duLiBJZiBpdCBkb2VzLCBhbmQgaG93IGl0IGlzIG1vZGlmaWVkLCB0aGF0IHdpbGwgY2hhbmdlIGV2ZXJ5dGhpbmcgYWJvdXQgaG93IEkgc2VlIHRoaXMgZnVuY3Rpb24hCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgc291cmNlIGNvZGUgdG8gZ2V0IHRoZSBkZWZpbml0aXZlIGFuc3dlci4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLCBhbmQgZnJvbSBteSBleHBlcmllbmNlLCB0aGF0IGZ1bmN0aW9uIGlzIHByb2JhYmx5IGluIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZyB0byB0aGlzIGByYW5nZWAgd2l0aGluIHRoYXQgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzaWRlIGVmZmVjdHMgaWYgSSYjMzk7bSBnb2luZyB0byB1bmRlcnN0YW5kIHRoaXMgZnVuY3Rpb24gY29tcGxldGVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDMzNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MzM0Olx0c3RhdGljIGludCBrdm1fdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbjQzMzU6XHRcdFx0XHRcdCAgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSlcbjQzMzY6XHR7XG40MzM3Olx0XHRpbnQgaWR4O1xuNDMzODpcdFx0bG9uZyByO1xuNDMzOTpcdFx0dTY0IGZ1bGxfc2l6ZTtcbjQzNDA6XHRcbjQzNDE6XHRcdGlmIChyYW5nZS1cdTAwM2VmbGFncylcbjQzNDI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG40MzQzOlx0XG40MzQ0Olx0XHRpZiAoIVBBR0VfQUxJR05FRChyYW5nZS1cdTAwM2VncGEpIHx8XG40MzQ1Olx0XHQgICAgIVBBR0VfQUxJR05FRChyYW5nZS1cdTAwM2VzaXplKSB8fFxuNDM0NjpcdFx0ICAgIHJhbmdlLVx1MDAzZWdwYSAmIzQzOyByYW5nZS1cdTAwM2VzaXplIFx1MDAzYz0gcmFuZ2UtXHUwMDNlZ3BhKVxuNDM0NzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQzNDg6XHRcbjQzNDk6XHRcdHZjcHVfbG9hZCh2Y3B1KTtcbjQzNTA6XHRcdGlkeCA9IHNyY3VfcmVhZF9sb2NrKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZXNyY3UpO1xuNDM1MTpcdFxuNDM1MjpcdFx0ZnVsbF9zaXplID0gcmFuZ2UtXHUwMDNlc2l6ZTtcbjQzNTM6XHRcdGRvIHtcbjQzNTQ6XHRcdFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XG40MzU1Olx0XHRcdFx0ciA9IC1FSU5UUjtcbjQzNTY6XHRcdFx0XHRicmVhaztcbjQzNTc6XHRcdFx0fVxuNDM1ODpcdFxuNDM1OTpcdFx0XHRyID0ga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHZjcHUsIHJhbmdlKTtcbjQzNjA6XHRcdFx0aWYgKFdBUk5fT05fT05DRShyID09IDAgfHwgciA9PSAtRUlPKSlcbjQzNjE6XHRcdFx0XHRicmVhaztcbjQzNjI6XHRcbjQzNjM6XHRcdFx0aWYgKHIgXHUwMDNjIDApXG40MzY0Olx0XHRcdFx0YnJlYWs7XG40MzY1Olx0XG40MzY2Olx0XHRcdHJhbmdlLVx1MDAzZXNpemUgLT0gcjtcbjQzNjc6XHRcdFx0cmFuZ2UtXHUwMDNlZ3BhICYjNDM7PSByO1xuNDM2ODpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbjQzNjk6XHRcdH0gd2hpbGUgKHJhbmdlLVx1MDAzZXNpemUpO1xuNDM3MDpcdFxuNDM3MTpcdFx0c3JjdV9yZWFkX3VubG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzcmN1LCBpZHgpO1xuNDM3MjpcdFx0dmNwdV9wdXQodmNwdSk7XG40MzczOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODIxCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgTWVtb3J5IExlYWtzIGFuZCBQYWRkaW5nIGluIGBrdm1fcHJlX2ZhdWx0X21lbW9yeWAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSB3aGVyZSBgcmFuZ2VgIGlzIGJlaW5nIG1hbmlwdWxhdGVkLiBUaGUgc2l6ZSBhbmQgR1BBIGFyZSBhZGp1c3RlZCAoYHJhbmdlLSZndDtzaXplIC09IHI7IHJhbmdlLSZndDtncGEgJiM0Mzs9IHI7YCkgYW5kIHRoZW4gY29waWVkIGJhY2sgdG8gdGhlIHVzZXIgc3BhY2UuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IHNjYW4gZm9yIGEgcG9zc2libGUgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhay4KCkhvd2V2ZXIsIEkgcmVtZW1iZXIgdGhhdCB0aGUgYHJhbmdlYCB2YXJpYWJsZSBpcyAqZnVsbHkqIGluaXRpYWxpemVkIHJpZ2h0IGF0IHRoZSBiZWdpbm5pbmcgYnkgdGhlIGBjb3B5X2Zyb21fdXNlcmAgY2FsbC4gU28sIHRoYXQmIzM5O3MgZ29vZC4gQnV0LCBhbmQgdGhpcyBpcyB3aGVyZSBJIG5lZWQgdG8gYmUgY2FyZWZ1bCwgd2hhdCBhYm91dCBwYWRkaW5nPyBJIG5lZWQgdG8gY29uc2lkZXIgaWYgdGhlcmUgbWlnaHQgYmUgYW55IHBhZGRpbmcgd2l0aGluIHRoZSBgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5YCBzdHJ1Y3R1cmUuIFRoaXMgY291bGQgbGVhZCB0byBpc3N1ZXMgaWYgbm90IGhhbmRsZWQgcHJvcGVybHkgZHVyaW5nIHRoZSBjb3B5IG9wZXJhdGlvbnMuCgpUbyBlbnN1cmUgdGhpcyBpcyBoYW5kbGVkIHNhZmVseSwgSSBzaG91bGQgaW1tZWRpYXRlbHkgcmVmZXJlbmNlIHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnlgIGluIGBpbmNsdWRlL3VhcGkvbGludXgva3ZtLmhgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBkZWZpbml0aXZlIGFuc3dlciB3aWxsIGJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgXFx7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02NDgyPUVycm9yczpcbi0tXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQ5Ny1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDk4OiAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5IHtcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDk5LVx0LyogaW4vb3V0ICovXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oPTE2NTg9c3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjY1LVxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oOjE2NjY6c3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5IHtcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjY3LVx0X191NjQgZ3BhO1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaD0xNjU4PXN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkIHtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY2NS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaDoxNjY2OnN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSB7XG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY2Ny1cdF9fdTY0IGdwYTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1MDUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIEtWTSYjMzk7cyBNZW1vcnkgUmVnaW9uIERlZmluaXRpb25zKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgS1ZNJiMzOTtzIG1lbW9yeSByZWdpb24gbWFuYWdlbWVudC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIHN0cnVjdHVyZXMgdGhhdCBkZWZpbmUgaG93IGd1ZXN0IHBoeXNpY2FsIG1lbW9yeSBpcyBtYXBwZWQgdG8gaG9zdCB2aXJ0dWFsIG1lbW9yeSwgc28gSSYjMzk7bGwgYmUgaGVhZGluZyB0byBgaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oYC4gSSYjMzk7bSBndWVzc2luZyBhcm91bmQgbGluZSAxNjY2IHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gZmluZCB0aGUgcmVsZXZhbnQgc3RydWN0cy4gVGhpcyBpcyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBtZWF0IG9mIHRoZSBtZW1vcnkgbWFwIGNvbmZpZ3VyYXRpb24uIEkmIzM5O20gbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgdGhlIGBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb25gIHN0cnVjdHVyZSBhbmQgaXRzIHJlbGF0ZWQgZmllbGRzLiBJIHdhbnQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB1c2VyLXNwYWNlIGludGVyYWN0cyB3aXRoIHRoZSBLVk0gY29yZSB0byBzZXQgdXAgbWVtb3J5IHJlZ2lvbnMsIHRoZSBpbXBsaWNhdGlvbnMgb2YgZGlmZmVyZW50IGZsYWdzIGFuZCBhdHRyaWJ1dGVzLCBhbmQgYW55IGFsaWdubWVudCBjb25zdHJhaW50cy4gSG9wZWZ1bGx5LCB0aGlzIHdpbGwgZ2l2ZSBtZSB0aGUgaW5mb3JtYXRpb24gSSBuZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTY2MDpcdFx0X191NjQgZmxhZ3M7XG4xNjYxOlx0XHRfX3U2NCByZXNlcnZlZFs2XTtcbjE2NjI6XHR9O1xuMTY2MzpcdFxuMTY2NDpcdCNkZWZpbmUgS1ZNX1BSRV9GQVVMVF9NRU1PUllcdF9JT1dSKEtWTUlPLCAweGQ1LCBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkpXG4xNjY1Olx0XG4xNjY2Olx0c3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5IHtcbjE2Njc6XHRcdF9fdTY0IGdwYTtcbjE2Njg6XHRcdF9fdTY0IHNpemU7XG4xNjY5Olx0XHRfX3U2NCBmbGFncztcbjE2NzA6XHRcdF9fdTY0IHBhZGRpbmdbNV07XG4xNjcxOlx0fTtcbjE2NzI6XHRcbjE2NzM6XHQjZW5kaWYgLyogX19MSU5VWF9LVk1fSCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk5NgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDY2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYGt2bV9wcmVfZmF1bHRfbWVtb3J5YCBhbmQgUG90ZW50aWFsIEluZm9ybWF0aW9uIExlYWtzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnlgIGFuZCBub3RpY2luZyB0aGF0IGl0IGhhcyBzb21lIHBhZGRpbmcuIE15IGluaXRpYWwgdGhvdWdodCB3YXMsIGlmIHdlIGNvcHkgdGhpcyBzdHJ1Y3QgZnJvbSB1c2VyIHNwYWNlIHVzaW5nIGBjb3B5X2Zyb21fdXNlcmAgaW50byBhIGByYW5nZWAgdmFyaWFibGUsIHRoZW4gbW9kaWZ5IGNlcnRhaW4gZmllbGRzIGxpa2UgYHJhbmdlLSZndDtzaXplYCBhbmQgYHJhbmdlLSZndDtncGFgLCBhbmQgdGhlbiBgY29weV90b191c2VyYCBpdCBiYWNrLCB0aGVyZSBzaG91bGRuJiMzOTt0IGJlIGEgdnVsbmVyYWJpbGl0eS4gVGhlIHBhZGRpbmcgZmllbGRzIGp1c3QgZWNobyBiYWNrIHdoYXRldmVyIHRoZSB1c2VyIHNlbnQuIFRoZXJlJiMzOTtzIG5vIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBiZWluZyBsZWFrZWQgaGVyZSwgYmVjYXVzZSB0aGUga2VybmVsIGlzIG1lcmVseSByZWZsZWN0aW5nIHRoZSB1c2VyJiMzOTtzIGlucHV0LgoKQnV0LCBob2xkIG9uLiBXaGF0IGlmIGBjb3B5X2Zyb21fdXNlcmAgZmFpbHM/IFRoZW4gdGhlIGNvcHktYmFjayBkb2VzbiYjMzk7dCBoYXBwZW4uIFdoYXQgaWYgYGNvcHlfZnJvbV91c2VyYCAqc3VjY2VlZHMqIGJ1dCB0aGUga2VybmVsIHNvbWVob3cgZGlkbiYjMzk7dCBpbml0aWFsaXplIGByYW5nZWAgZmlyc3Q/IEFoLCBidXQgd2FpdCwgdGhlIGVudGlyZSBgcmFuZ2VgIHN0cnVjdCBpcyBpbml0aWFsaXplZCBieSBgY29weV9mcm9tX3VzZXJgLCBzbyB0aGF0JiMzOTtzIGEgbW9vdCBwb2ludC4KCkxldCBtZSByZXZpc2l0IHRoZSBjb3JlIGxvZ2ljIHdpdGhpbiBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YC4gSXQgbG9va3MgbGlrZSBpdCBpbml0aWFsaXplcyBhIGBrdm1fZ3N0YWdlX21hcHBpbmdgIHN0cnVjdCBjYWxsZWQgYG91dF9tYXBgIHRvIGFsbCB6ZXJvcy4gSXQgdGhlbiBjYWxscyBga3ZtX3Jpc2N2X21tdV9tYXBgIHRvIHBvcHVsYXRlIGl0LiBJIHNlZSB0aGF0IGBrdm1fcmlzY3ZfbW11X21hcGAgaXMgdGhlIGNydWNpYWwgcGFydCB0aGF0IGxpa2VseSBwb3B1bGF0ZXMgYG91dF9tYXBgLiBUaGF0JiMzOTtzIHRoZSBmdW5jdGlvbiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgaW4gYGFyY2gvcmlzY3Yva3ZtL21tdS5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9tbXUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDczMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzMwOlx0XHRpZiAoIWxvZ2dpbmcgXHUwMDI2XHUwMDI2ICFpc19odWdldGxiIFx1MDAyNlx1MDAyNiB2bWFfcGFnZXNpemUgPT0gUEFHRV9TSVpFKVxuIDczMTpcdFx0XHR2bWFfcGFnZXNpemUgPSB0cmFuc3BhcmVudF9odWdlcGFnZV9hZGp1c3Qoa3ZtLCBtZW1zbG90LCBodmEsIFx1MDAyNmhmbiwgXHUwMDI2Z3BhKTtcbiA3MzI6XHRcbiA3MzM6XHRcdGlmICh3cml0YWJsZSkge1xuIDczNDpcdFx0XHRtYXJrX3BhZ2VfZGlydHlfaW5fc2xvdChrdm0sIG1lbXNsb3QsIGdmbik7XG4gNzM1Olx0XHRcdHJldCA9IGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2UoXHUwMDI2Z3N0YWdlLCBwY2FjaGUsIGdwYSwgaGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULFxuIDczNjpcdFx0XHRcdFx0XHRcdHZtYV9wYWdlc2l6ZSwgZmFsc2UsIHRydWUsIG91dF9tYXApO1xuIDczNzpcdFx0fSBlbHNlIHtcbiA3Mzg6XHRcdFx0cmV0ID0ga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZShcdTAwMjZnc3RhZ2UsIHBjYWNoZSwgZ3BhLCBoZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsXG4gNzM5Olx0XHRcdFx0XHRcdFx0dm1hX3BhZ2VzaXplLCB0cnVlLCB0cnVlLCBvdXRfbWFwKTtcbiA3NDA6XHRcdH1cbiA3NDE6XHRcbiA3NDI6XHRcdGlmIChyZXQpXG4gNzQzOlx0XHRcdGt2bV9lcnIoXCYjMzQ7RmFpbGVkIHRvIG1hcCBpbiBHLXN0YWdlXFxuXCYjMzQ7KTtcbiA3NDQ6XHRcbiA3NDU6XHRvdXRfdW5sb2NrOlxuIDc0NjpcdFx0a3ZtX3JlbGVhc2VfZmF1bHRpbl9wYWdlKGt2bSwgcGFnZSwgcmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVFWElTVCwgd3JpdGFibGUpO1xuIDc0NzpcdFx0d3JpdGVfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4gNzQ4Olx0XHRyZXR1cm4gcmV0O1xuIDc0OTpcdH1cbiA3NTA6XHRcbiA3NTE6XHRsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gNzUyOlx0XHRcdFx0XHQgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSlcbiA3NTM6XHR7XG4gNzU0Olx0XHRzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nIG91dF9tYXAgPSB7IDAgfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1MjgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBLVk0gZm9yIFJJU0MtVjogZ3N0YWdlIGFuZCBQYWdlIE1hcHBpbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgS1ZNIGludGVyYWN0cyB3aXRoIHRoZSBSSVNDLVYgYXJjaGl0ZWN0dXJlIGF0IGEgZnVuZGFtZW50YWwgbGV2ZWwsIHBhcnRpY3VsYXJseSByZWdhcmRpbmcgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBndWVzdCBlbnZpcm9ubWVudC4gVGhlIGZ1bmN0aW9uIGBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlYCBpbiBgYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNgIHNlZW1zIGxpa2UgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGF0IHB1enpsZS4gSXQmIzM5O3MgdGltZSB0byBkaXNzZWN0IGl0cyBpbm5lciB3b3JraW5ncy4gSSBzdXNwZWN0IHRoaXMgZnVuY3Rpb24gaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIHdoZXJlIHRoZSBndWVzdCYjMzk7cyB2aXJ0dWFsIGFkZHJlc3NlcyBhcmUgdHJhbnNsYXRlZCBhbmQgbWFwcGVkIHRvIHRoZSBob3N0JiMzOTtzIHBoeXNpY2FsIG1lbW9yeSwgcG90ZW50aWFsbHkgdXNpbmcgdGhlIGdzdGFnZSBtZWNoYW5pc21zLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaGFuZGxlcyBwYWdlIHRhYmxlIHdhbGtzLCB0aGUgaW50ZXJhY3Rpb24gd2l0aCBSSVNDLVYmIzM5O3MgcGFnZSB0YWJsZSBzdHJ1Y3R1cmVzLCBhbmQgYW55IHNwZWNpZmljIG9wdGltaXphdGlvbnMgZm9yIHRoZSBhcmNoaXRlY3R1cmUuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaG93IHRoZSBLVk0gbWFjaGluZXJ5IHRyYW5zbGF0ZXMgYSBndWVzdCB2aXJ0dWFsIGFkZHJlc3MgaW50byBhIHBoeXNpY2FsIGFkZHJlc3Mgb24gdGhlIGhvc3QuIFRoaXMgbGlrZWx5IGludm9sdmVzIHNvbWUgY2xldmVyIG1hbmlwdWxhdGlvbnMgYW5kIGNvbnNpZGVyYXRpb25zIGZvciBwZXJmb3JtYW5jZSwgdmlydHVhbCBtZW1vcnkgcHJvdGVjdGlvbiwgYW5kIGhvdyBpdCBhbGwgd29ya3MgdW5kZXIgdGhlIGhvb2QuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjcwOlx0XHRcdCAqXG4gMjcxOlx0XHRcdCAqIEl0IGlzIGJldHRlciB0byByZWNvdmVyIHRoZSBodWdlIHBhZ2UgbWFwcGluZyBpbiB0aGUgaW9jdGwgY29udGV4dCB3aGVuXG4gMjcyOlx0XHRcdCAqIGRpc2FibGluZyBkaXJ0eSBsb2dnaW5nLlxuIDI3MzpcdFx0XHQgKlxuIDI3NDpcdFx0XHQgKiAzKSBwdGVwX2xldmVsID09IG91dF9tYXAtXHUwMDNlbGV2ZWxcbiAyNzU6XHRcdFx0ICogV2UgYWxyZWFkeSBoYXZlIHRoZSBwdGVwLCBqdXN0IHVwZGF0ZSB0aGUgcHRlIHByb3QgaWYgdGhlIHBmbiBub3QgY2hhbmdlLlxuIDI3NjpcdFx0XHQgKiBUaGVyZSBpcyBubyBuZWVkIHRvIGludm9rZSBga3ZtX3Jpc2N2X2dzdGFnZV9zZXRfcHRlYCBhZ2Fpbi5cbiAyNzc6XHRcdFx0ICovXG4gMjc4Olx0XHRcdGlmIChwdGVwX2xldmVsIFx1MDAzZSBvdXRfbWFwLVx1MDAzZWxldmVsKSB7XG4gMjc5Olx0XHRcdFx0a3ZtX3Jpc2N2X2dzdGFnZV9zcGxpdF9odWdlKGdzdGFnZSwgcGNhY2hlLCBncGEsXG4gMjgwOlx0XHRcdFx0XHRcdFx0ICAgIG91dF9tYXAtXHUwMDNlbGV2ZWwsIHRydWUpO1xuIDI4MTpcdFx0XHR9IGVsc2UgaWYgKEFMSUdOX0RPV04oUEZOX1BIWVMocHRlX3BmbihwdGVwX2dldChwdGVwKSkpLCBwYWdlX3NpemUpID09IGhwYSkge1xuIDI4MjpcdFx0XHRcdGt2bV9yaXNjdl9nc3RhZ2VfdXBkYXRlX3B0ZV9wcm90KGdzdGFnZSwgcHRlcF9sZXZlbCwgZ3BhLCBwdGVwLCBwcm90KTtcbiAyODM6XHRcdFx0XHRvdXRfbWFwLVx1MDAzZWFkZHIgPSBBTElHTl9ET1dOKGdwYSwgcGFnZV9zaXplKTtcbiAyODQ6XHRcdFx0XHRvdXRfbWFwLVx1MDAzZWxldmVsID0gcHRlcF9sZXZlbDtcbiAyODU6XHRcdFx0XHRvdXRfbWFwLVx1MDAzZXB0ZSA9IHB0ZXBfZ2V0KHB0ZXApO1xuIDI4NjpcdFx0XHRcdHJldHVybiAwO1xuIDI4NzpcdFx0XHR9XG4gMjg4Olx0XHR9XG4gMjg5Olx0XG4gMjkwOlx0XHRvdXRfbWFwLVx1MDAzZXB0ZSA9IHBmbl9wdGUoUEZOX0RPV04oaHBhKSwgcHJvdCk7XG4gMjkxOlx0XHRvdXRfbWFwLVx1MDAzZXB0ZSA9IHB0ZV9ta2RpcnR5KG91dF9tYXAtXHUwMDNlcHRlKTtcbiAyOTI6XHRcbiAyOTM6XHRcdHJldHVybiBrdm1fcmlzY3ZfZ3N0YWdlX3NldF9wdGUoZ3N0YWdlLCBwY2FjaGUsIG91dF9tYXApO1xuIDI5NDpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzNTIKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgb3V0X21hcGAgUGFyYW1ldGVyIGluIEtWTS1SSVNDViBHLVN0YWdlIE1hcHBpbmcqKgoKT2theSwgc28gSSBzZWUgYG91dF9tYXBgIGlzIGJlaW5nIGZlZCBpbnRvIGBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gVGhlIHdheSB0aGUgY29kZSYjMzk7cyBzdHJ1Y3R1cmVkLCBpdCBsb29rcyBsaWtlIGBvdXRfbWFwYCBpcyBhY3RpbmcgYXMgYm90aCBhbiBpbnB1dCAqYW5kKiBhbiBvdXRwdXQgcGFyYW1ldGVyIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBJIG5lZWQgdG8gY2xhcmlmeSB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZyBoZXJlLiBHaXZlbiBteSBleHBlcmllbmNlLCB0aGF0JiMzOTtzIG5vdCBuZWNlc3NhcmlseSBhIGJhZCB0aGluZywgYnV0IEkgd2FudCB0byBtYWtlIHN1cmUgSSBncmFzcCB0aGUgaW50ZW50IGZ1bGx5LiBMZXQgbWUgcXVpY2tseSBleGFtaW5lIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgb2YgYGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2VgIHRvIHZlcmlmeSBob3cgaXQgaGFuZGxlcyBgb3V0X21hcGAuIFRoYXQmIzM5O2xsIGJlIGtleSB0byBmaWd1cmluZyBvdXQgaG93IHRoaXMgbWVtb3J5IG1hcHBpbmcgaXMgZnVuY3Rpb25pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmg9NTc9Ym9vbCBrdm1fcmlzY3ZfZ3N0YWdlX3RyeV91cGRhdGVfcHRlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsIHUzMiBsZXZlbCxcbi0tXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaC02MC1cbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2dzdGFnZS5oOjYxOmludCBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaC02Mi1cdFx0XHQgICAgICBzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgKnBjYWNoZSxcbi0tXG5hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYz0xODY9c3RhdGljIHZvaWQga3ZtX3Jpc2N2X2dzdGFnZV91cGRhdGVfcHRlX3Byb3Qoc3RydWN0IGt2bV9nc3RhZ2UgKmdzdGFnZSwgdTMyIGxldmVsLFxuLS1cbmFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jLTIwNi1cbmFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jOjIwNzppbnQga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLFxuYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmMtMjA4LVx0XHRcdCAgICAgIHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSAqcGNhY2hlLFxuLS1cbmFyY2gvcmlzY3Yva3ZtL21tdS5jPTYyMz1pbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxuLS1cbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTczNC1cdFx0bWFya19wYWdlX2RpcnR5X2luX3Nsb3Qoa3ZtLCBtZW1zbG90LCBnZm4pO1xuYXJjaC9yaXNjdi9rdm0vbW11LmM6NzM1Olx0XHRyZXQgPSBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKFx1MDAyNmdzdGFnZSwgcGNhY2hlLCBncGEsIGhmbiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTczNi1cdFx0XHRcdFx0XHR2bWFfcGFnZXNpemUsIGZhbHNlLCB0cnVlLCBvdXRfbWFwKTtcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTczNy1cdH0gZWxzZSB7XG5hcmNoL3Jpc2N2L2t2bS9tbXUuYzo3Mzg6XHRcdHJldCA9IGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2UoXHUwMDI2Z3N0YWdlLCBwY2FjaGUsIGdwYSwgaGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNzM5LVx0XHRcdFx0XHRcdHZtYV9wYWdlc2l6ZSwgdHJ1ZSwgdHJ1ZSwgb3V0X21hcCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MjM0CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIGBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlYCBpbiBgYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNgLCBzcGVjaWZpY2FsbHkgc3RhcnRpbmcgYXQgbGluZSAyMDcuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGdzdGFnZSBtYXBwaW5nIHByb2Nlc3Mgd2l0aGluIHRoZSBLVk0vUklTQy1WIGFyY2hpdGVjdHVyZS4gSSYjMzk7bSBpbnRlcmVzdGVkIGluIGhvdyB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gaXMgaGFuZGxpbmcgdGhlIG1hcHBpbmcgb2YgYSBwYWdlIHdpdGhpbiB0aGUgZ3Vlc3Qgc3RhZ2UuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGxhcmdlciBjb250ZXh0IG9mIHZpcnR1YWwgbWVtb3J5IHRyYW5zbGF0aW9uIGFuZCB0aGUgZ3Vlc3QmIzM5O3MgdmlldyBvZiB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBkZXRhaWxzIGFib3V0IHBhZ2UgdGFibGUgd2Fsa3MsIHBlcm1pc3Npb24gY2hlY2tzLCBhbmQgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGhvc3QmIzM5O3MgcGh5c2ljYWwgbWVtb3J5LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgUklTQy1WIHNwZWNpZmljIGludHJpY2FjaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjA3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMDc6XHRpbnQga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLFxuIDIwODpcdFx0XHRcdCAgICAgIHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSAqcGNhY2hlLFxuIDIwOTpcdFx0XHRcdCAgICAgIGdwYV90IGdwYSwgcGh5c19hZGRyX3QgaHBhLCB1bnNpZ25lZCBsb25nIHBhZ2Vfc2l6ZSxcbiAyMTA6XHRcdFx0XHQgICAgICBib29sIHBhZ2VfcmRvbmx5LCBib29sIHBhZ2VfZXhlYyxcbiAyMTE6XHRcdFx0XHQgICAgICBzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nICpvdXRfbWFwKVxuIDIxMjpcdHtcbiAyMTM6XHRcdGJvb2wgZm91bmRfbGVhZjtcbiAyMTQ6XHRcdHUzMiBwdGVwX2xldmVsO1xuIDIxNTpcdFx0cGdwcm90X3QgcHJvdDtcbiAyMTY6XHRcdHB0ZV90ICpwdGVwO1xuIDIxNzpcdFx0aW50IHJldDtcbiAyMTg6XHRcbiAyMTk6XHRcdG91dF9tYXAtXHUwMDNlYWRkciA9IGdwYTtcbiAyMjA6XHRcdG91dF9tYXAtXHUwMDNlbGV2ZWwgPSAwO1xuIDIyMTpcdFxuIDIyMjpcdFx0cmV0ID0gZ3N0YWdlX3BhZ2Vfc2l6ZV90b19sZXZlbChnc3RhZ2UsIHBhZ2Vfc2l6ZSwgXHUwMDI2b3V0X21hcC1cdTAwM2VsZXZlbCk7XG4gMjIzOlx0XHRpZiAocmV0KVxuIDIyNDpcdFx0XHRyZXR1cm4gcmV0O1xuIDIyNTpcdFxuIDIyNjpcdFx0LypcbiAyMjc6XHRcdCAqIEEgUklTQy1WIGltcGxlbWVudGF0aW9uIGNhbiBjaG9vc2UgdG8gZWl0aGVyOlxuIDIyODpcdFx0ICogMSkgVXBkYXRlICYjMzk7QSYjMzk7IGFuZCAmIzM5O0QmIzM5OyBQVEUgYml0cyBpbiBoYXJkd2FyZVxuIDIyOTpcdFx0ICogMikgR2VuZXJhdGUgcGFnZSBmYXVsdCB3aGVuICYjMzk7QSYjMzk7IGFuZC9vciAmIzM5O0QmIzM5OyBiaXRzIGFyZSBub3Qgc2V0XG4gMjMwOlx0XHQgKiAgICBQVEUgc28gdGhhdCBzb2Z0d2FyZSBjYW4gdXBkYXRlIHRoZXNlIGJpdHMuXG4gMjMxOlx0XHQgKlxuIDIzMjpcdFx0ICogV2Ugc3VwcG9ydCBib3RoIG9wdGlvbnMgbWVudGlvbmVkIGFib3ZlLiBUbyBhY2hpZXZlIHRoaXMsIHdlXG4gMjMzOlx0XHQgKiBhbHdheXMgc2V0ICYjMzk7QSYjMzk7IGFuZCAmIzM5O0QmIzM5OyBQVEUgYml0cyBhdCB0aW1lIG9mIGNyZWF0aW5nIEctc3RhZ2VcbiAyMzQ6XHRcdCAqIG1hcHBpbmcuIFRvIHN1cHBvcnQgS1ZNIGRpcnR5IHBhZ2UgbG9nZ2luZyB3aXRoIGJvdGggb3B0aW9uc1xuIDIzNTpcdFx0ICogbWVudGlvbmVkIGFib3ZlLCB3ZSB3aWxsIHdyaXRlLXByb3RlY3QgRy1zdGFnZSBQVEVzIHRvIHRyYWNrXG4gMjM2Olx0XHQgKiBkaXJ0eSBwYWdlcy5cbiAyMzc6XHRcdCAqL1xuIDIzODpcdFxuIDIzOTpcdFx0aWYgKHBhZ2VfZXhlYykge1xuIDI0MDpcdFx0XHRpZiAocGFnZV9yZG9ubHkpXG4gMjQxOlx0XHRcdFx0cHJvdCA9IFBBR0VfUkVBRF9FWEVDO1xuIDI0MjpcdFx0XHRlbHNlXG4gMjQzOlx0XHRcdFx0cHJvdCA9IFBBR0VfV1JJVEVfRVhFQztcbiAyNDQ6XHRcdH0gZWxzZSB7XG4gMjQ1Olx0XHRcdGlmIChwYWdlX3Jkb25seSlcbiAyNDY6XHRcdFx0XHRwcm90ID0gUEFHRV9SRUFEO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjEyNAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlYCBmdW5jdGlvbiwgZm9jdXNpbmcgb24gdGhlIG1hcHBpbmcgc2V0dXA6CgoqKk15IFBlcnNwZWN0aXZlIG9uIHRoZSBNYXBwaW5nIFByb2Nlc3MqKgoKT2theSwgc28gSSBzZWUgdGhhdCB3ZSYjMzk7cmUgaW5pdGlhbGx5IHNldHRpbmcgdXAgdGhlIGFkZHJlc3MgbWFwcGluZyB3aXRoIGBvdXRfbWFwLSZndDthZGRyID0gZ3BhO2AgYW5kIGBvdXRfbWFwLSZndDtsZXZlbCA9IDA7YC4gVGhpcyBzdWdnZXN0cyB3ZSYjMzk7cmUgZ2V0dGluZyB0aGUgZ3JvdW5kIHBoeXNpY2FsIGFkZHJlc3MgKEdQQSkgZGlyZWN0bHkgYXNzb2NpYXRlZCB3aXRoIGEgbWFwIGVudHJ5LCBhbmQgc3RhcnRpbmcgYXQgdGhlIHZlcnkgYmFzZSBsZXZlbCBvZiB0aGUgcGFnZSB0YWJsZSBoaWVyYXJjaHkuIEkmIzM5O2QgZXhwZWN0IHRoaXMgbGV2ZWwgdG8gYmUgYSBiaXQgY29hcnNlIGF0IHRoaXMgcG9pbnQsIGJlZm9yZSBhbnkgbW9yZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uLgoKVGhlbiwgdGhlIGNvZGUgY2FsbHMgYGdzdGFnZV9wYWdlX3NpemVfdG9fbGV2ZWxgLCBhbmQgKnRoYXQmIzM5O3MqIHdoZXJlIHRoZSBjcnVjaWFsIHBhcnQgaGFwcGVucy4gVGhpcyBpbXBsaWVzIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBjb3JyZWN0IHBhZ2UgdGFibGUgbGV2ZWwgdG8gdXNlIGJhc2VkIG9uIHRoZSBwYWdlIHNpemUuIEkmIzM5O2QgYmV0IHRoaXMgZnVuY3Rpb24gdGFrZXMgaW50byBjb25zaWRlcmF0aW9uIGhhcmR3YXJlIHBhZ2UgdGFibGUgc3VwcG9ydCAoZS5nLiwgc3BlY2lmaWMgcGFnZSBzaXplIGNhcGFiaWxpdGllcyBvZiB0aGUgUklTQy1WIGFyY2hpdGVjdHVyZSksIGFuZCBwb3RlbnRpYWxseSBhbHNvIGFueSBndWVzdC1jb25maWd1cmVkIHBhZ2Ugc2l6ZSBvdmVycmlkZXMgb3IgY29uc3RyYWludHMuIEluIG90aGVyIHdvcmRzLCBpdCYjMzk7cyBtYWtpbmcgdGhlIGRlY2lzaW9uIG9uICpob3cqIGdyYW51bGFyIHRoZSBtYXBwaW5nIHNob3VsZCBiZSwgYW5kIHNldHMgdGhlIGFwcHJvcHJpYXRlIGBvdXRfbWFwLSZndDtsZXZlbGAuCgpGaW5hbGx5LCBhZnRlciBhbGwgb2YgdGhhdCBtYXBwaW5nIHNldHVwLCB0aGUgZnVuY3Rpb24gY29uY2x1ZGVzIHdpdGggYWxsIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gcmVhZHkgdG8gZ28uIEkgc2VlIHRoZSBmaW5hbCBjb25maWd1cmF0aW9uIGlzIGNvbXBsZXRlIGF0IHRoaXMgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI0NzpcdFx0XHRlbHNlXG4gMjQ4Olx0XHRcdFx0cHJvdCA9IFBBR0VfV1JJVEU7XG4gMjQ5Olx0XHR9XG4gMjUwOlx0XG4gMjUxOlx0XHRmb3VuZF9sZWFmID0ga3ZtX3Jpc2N2X2dzdGFnZV9nZXRfbGVhZihnc3RhZ2UsIGdwYSwgXHUwMDI2cHRlcCwgXHUwMDI2cHRlcF9sZXZlbCk7XG4gMjUyOlx0XHRpZiAoZm91bmRfbGVhZikge1xuIDI1MzpcdFx0XHQvKlxuIDI1NDpcdFx0XHQgKiBwdGVwX2xldmVsIGlzIHRoZSBjdXJyZW50IGdzdGFnZSBtYXBwaW5nIGxldmVsIG9mIGFkZHIsIG91dF9tYXAtXHUwMDNlbGV2ZWxcbiAyNTU6XHRcdFx0ICogaXMgdGhlIHJlcXVpcmVkIG1hcHBpbmcgbGV2ZWwgZHVyaW5nIGZhdWx0IGhhbmRsaW5nLlxuIDI1NjpcdFx0XHQgKlxuIDI1NzpcdFx0XHQgKiAxKSBwdGVwX2xldmVsIFx1MDAzZSBvdXRfbWFwLVx1MDAzZWxldmVsXG4gMjU4Olx0XHRcdCAqIFRoaXMgaGFwcGVucyB3aGVuIGRpcnR5IGxvZ2dpbmcgaXMgZW5hYmxlZCBhbmQgaHVnZSBwYWdlcyBhcmUgdXNlZC5cbiAyNTk6XHRcdFx0ICogS1ZNIG11c3QgdHJhY2sgdGhlIHBhZ2VzIGF0IDRLIGxldmVsLCBhbmQgc3BsaXQgdGhlIGh1Z2UgbWFwcGluZ1xuIDI2MDpcdFx0XHQgKiBpbnRvIDRLIG1hcHBpbmdzLlxuIDI2MTpcdFx0XHQgKlxuIDI2MjpcdFx0XHQgKiAyKSBwdGVwX2xldmVsIFx1MDAzYyBvdXRfbWFwLVx1MDAzZWxldmVsXG4gMjYzOlx0XHRcdCAqIFRoaXMgaGFwcGVucyB3aGVuIGRpcnR5IGxvZ2dpbmcgaXMgZGlzYWJsZWQgYW5kIGh1Z2UgcGFnZXMgYXJlIHVzZWQuXG4gMjY0Olx0XHRcdCAqIFRoZSBnc3RhZ2UgaXMgc3BsaXQgaW50byA0SyBtYXBwaW5ncywgYnV0IHRoZSBvdXRfbWFwIGxldmVsIGlzIG5vd1xuIDI2NTpcdFx0XHQgKiBiYWNrIHRvIHRoZSBodWdlIHBhZ2UgbGV2ZWwuIElnbm9yZSB0aGUgb3V0X21hcCBsZXZlbCB0aGlzIHRpbWUsIGFuZFxuIDI2NjpcdFx0XHQgKiBqdXN0IHVwZGF0ZSB0aGUgcHRlIHByb3QgaGVyZS4gT3RoZXJ3aXNlLCB3ZSB3b3VsZCBmYWxsIGJhY2sgdG8gbWFwcGluZ1xuIDI2NzpcdFx0XHQgKiB0aGUgZ3N0YWdlIGF0IGh1Z2UgcGFnZSBsZXZlbCBpbiBga3ZtX3Jpc2N2X2dzdGFnZV9zZXRfcHRlYCwgd2l0aCB0aGVcbiAyNjg6XHRcdFx0ICogb3ZlcmhlYWQgb2YgZnJlZWluZyB0aGUgcGFnZSB0YWJsZXMobm90IHN1cHBvcnQgbm93KSwgd2hpY2ggd291bGQgc2xvd1xuIDI2OTpcdFx0XHQgKiBkb3duIHRoZSB2Q1BVcyYjMzk7IHBlcmZvcm1hbmNlLlxuIDI3MDpcdFx0XHQgKlxuIDI3MTpcdFx0XHQgKiBJdCBpcyBiZXR0ZXIgdG8gcmVjb3ZlciB0aGUgaHVnZSBwYWdlIG1hcHBpbmcgaW4gdGhlIGlvY3RsIGNvbnRleHQgd2hlblxuIDI3MjpcdFx0XHQgKiBkaXNhYmxpbmcgZGlydHkgbG9nZ2luZy5cbiAyNzM6XHRcdFx0ICpcbiAyNzQ6XHRcdFx0ICogMykgcHRlcF9sZXZlbCA9PSBvdXRfbWFwLVx1MDAzZWxldmVsXG4gMjc1Olx0XHRcdCAqIFdlIGFscmVhZHkgaGF2ZSB0aGUgcHRlcCwganVzdCB1cGRhdGUgdGhlIHB0ZSBwcm90IGlmIHRoZSBwZm4gbm90IGNoYW5nZS5cbiAyNzY6XHRcdFx0ICogVGhlcmUgaXMgbm8gbmVlZCB0byBpbnZva2UgYGt2bV9yaXNjdl9nc3RhZ2Vfc2V0X3B0ZWAgYWdhaW4uXG4gMjc3Olx0XHRcdCAqL1xuIDI3ODpcdFx0XHRpZiAocHRlcF9sZXZlbCBcdTAwM2Ugb3V0X21hcC1cdTAwM2VsZXZlbCkge1xuIDI3OTpcdFx0XHRcdGt2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZShnc3RhZ2UsIHBjYWNoZSwgZ3BhLFxuIDI4MDpcdFx0XHRcdFx0XHRcdCAgICBvdXRfbWFwLVx1MDAzZWxldmVsLCB0cnVlKTtcbiAyODE6XHRcdFx0fSBlbHNlIGlmIChBTElHTl9ET1dOKFBGTl9QSFlTKHB0ZV9wZm4ocHRlcF9nZXQocHRlcCkpKSwgcGFnZV9zaXplKSA9PSBocGEpIHtcbiAyODI6XHRcdFx0XHRrdm1fcmlzY3ZfZ3N0YWdlX3VwZGF0ZV9wdGVfcHJvdChnc3RhZ2UsIHB0ZXBfbGV2ZWwsIGdwYSwgcHRlcCwgcHJvdCk7XG4gMjgzOlx0XHRcdFx0b3V0X21hcC1cdTAwM2VhZGRyID0gQUxJR05fRE9XTihncGEsIHBhZ2Vfc2l6ZSk7XG4gMjg0Olx0XHRcdFx0b3V0X21hcC1cdTAwM2VsZXZlbCA9IHB0ZXBfbGV2ZWw7XG4gMjg1Olx0XHRcdFx0b3V0X21hcC1cdTAwM2VwdGUgPSBwdGVwX2dldChwdGVwKTtcbiAyODY6XHRcdFx0XHRyZXR1cm4gMDtcbiAyODc6XHRcdFx0fVxuIDI4ODpcdFx0fVxuIDI4OTpcdFxuIDI5MDpcdFx0b3V0X21hcC1cdTAwM2VwdGUgPSBwZm5fcHRlKFBGTl9ET1dOKGhwYSksIHByb3QpO1xuIDI5MTpcdFx0b3V0X21hcC1cdTAwM2VwdGUgPSBwdGVfbWtkaXJ0eShvdXRfbWFwLVx1MDAzZXB0ZSk7XG4gMjkyOlx0XG4gMjkzOlx0XHRyZXR1cm4ga3ZtX3Jpc2N2X2dzdGFnZV9zZXRfcHRlKGdzdGFnZSwgcGNhY2hlLCBvdXRfbWFwKTtcbiAyOTQ6XHR9XG4gMjk1Olx0XG4gMjk2Olx0c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1ha2VfY2hpbGRfcHRlKHVuc2lnbmVkIGxvbmcgaHVnZV9wdGUsIGludCBpbmRleCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0ODcKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA5MTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBJc3N1ZXMgaW4gUklTQy1WIEtWTSBQUkVfRkFVTFRfTUVNT1JZIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gc3RlcHBpbmcgdGhyb3VnaCB0aGlzIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGZ1bmN0aW9uLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0FyZSB0aGVyZSBhbnkgdnVsbmVyYWJpbGl0aWVzIGhlcmUgY29uY2VybmluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIHRvIHVzZXIgc3BhY2U/JiMzNDsgSSBzZWUgYG91dF9tYXAtJmd0O2FkZHJgLCBgb3V0X21hcC0mZ3Q7bGV2ZWxgLCBhbmQgYG91dF9tYXAtJmd0O3B0ZWAgYmVpbmcgc2V0LCB3aGljaCBpbW1lZGlhdGVseSB0cmlnZ2VycyB0aGUgcXVlc3Rpb24sICYjMzQ7SXMgdGhpcyBwb3RlbnRpYWxseSBsZWFraW5nIGtlcm5lbCBpbmZvcm1hdGlvbj8mIzM0OwoKQnV0IHdhaXQuIGBvdXRfbWFwYCBpcyBhIGxvY2FsIHZhcmlhYmxlIHdpdGhpbiBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YC4gSXQmIzM5O3MgdXNlZCBpbnRlcm5hbGx5IHRvIGNhbGN1bGF0ZSBgbWFwX3NpemVgIGFuZCBgZW5kYC4gVGhlIHJlbGV2YW50IGNvZGUgc25pcHBldCBtYWtlcyB0aGF0IHF1aXRlIGNsZWFyLiBJdCYjMzk7cyBub3QgY29waWVkIGJhY2sgdG8gdXNlciBzcGFjZSBkaXJlY3RseS4gVGhlIHJldHVybiB2YWx1ZSwgd2hpY2ggaXMgYSBsZW5ndGggY2FsY3VsYXRpb24gdXNpbmcgdGhvc2UgdmFsdWVzLCAqZG9lcyogbW9kaWZ5IGZpZWxkcyB3aXRoaW4gdGhlIGByYW5nZWAgc3RydWN0LCBzcGVjaWZpY2FsbHkgYHNpemVgIGFuZCBgZ3BhYCBpbiBga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAsIGJ1dCBpdCYjMzk7cyBmdW5kYW1lbnRhbGx5IGp1c3QgYSBsZW5ndGguIFRoZSBgcmFuZ2VgIHN0cnVjdCBpdHNlbGYgaXMgaGFuZGxlZCBieSBgY29weV9mcm9tX3VzZXJgIGluIHRoZSBjYWxsZXIuCgpTbywgSSYjMzk7bSB0aGlua2luZywgJiMzNDtObywgaXQgZG9lc24mIzM5O3QgbG9vayBsaWtlIHRoZXJlJiMzOTtzIGFueSBkaXJlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgZnJvbSBgb3V0X21hcGAgdG8gdXNlciBzcGFjZS4mIzM0OyBUaGUgYHJhbmdlYCBzdHJ1Y3QgY29tZXMgZnJvbSB1c2VyIHNwYWNlLCBhbmQgd2hpbGUgaXRzIGBzaXplYCBhbmQgYGdwYWAgbWVtYmVycyBhcmUgbW9kaWZpZWQsIHRoZSBwYWRkaW5nIGlzIHVudG91Y2hlZCwgZWNob2luZyBiYWNrIHdoYXQgdGhlIHVzZXIgaW5pdGlhbGx5IHN1cHBsaWVkLgoKSSBuZWVkIHRvIGJlIHRob3JvdWdoLCB0aG91Z2guIEkgYXNrIG15c2VsZiwgJiMzNDtJcyB0aGVyZSBhbm90aGVyIGxvY2F0aW9uIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGluIHBsYXk/JiMzNDsgSSBjb25zaWRlciBgb3V0X21hcGAgYWdhaW4uIEl0JiMzOTtzIGluaXRpYWxpemVkIHRvIGB7IDAgfWAsIGFuZCBga3ZtX3Jpc2N2X21tdV9tYXBgIHBvcHVsYXRlcyBpdC4gRXZlbiBpZiB0aGF0IGZ1bmN0aW9uIGRpZG4mIzM5O3QgcG9wdWxhdGUgZXZlcnkgZmllbGQsIHdoaWNoIHNlZW1zIHVubGlrZWx5LCBpdCYjMzk7cyBpbml0aWFsaXplZCB0byB6ZXJvLCBhbmQgdGhlIHJldHVybiB2YWx1ZSBpcyB0aGUga2V5IGZhY3Rvci4gVGhlIGZ1bmN0aW9uJiMzOTtzIHJldHVybiB2YWx1ZSBpcyB1c2VkIHRvIHVwZGF0ZSBgcmFuZ2UtJmd0O3NpemVgIGFuZCBgcmFuZ2UtJmd0O2dwYWAsIGJ1dCB0aGF0JiMzOTtzIGp1c3QgYSBsZW5ndGgsIGRlcml2ZWQgZnJvbSBpbnRlcm5hbGx5IGNhbGN1bGF0ZWQgdmFsdWVzLgoKTm93LCBsZXQmIzM5O3Mgd2lkZW4gdGhlIHNjb3BlLiBJIGxvb2sgYXQgYWxsIHRoZSBjaGFuZ2VkIGZpbGVzOiBgYXJjaC9yaXNjdi9rdm0vS2NvbmZpZ2AsIGBhcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuY2AsIGBhcmNoL3Jpc2N2L2t2bS9tbXUuY2AsIGBhcmNoL3Jpc2N2L2t2bS92bS5jYCwgYW5kIHRoZSByZWxldmFudCBzZWxmdGVzdHMuIFRoZSBjaGFuZ2VzIGFyZSBhbGwgcXVpdGUgdGFyZ2V0ZWQsIGZvY3VzaW5nIG9uIGltcGxlbWVudGluZyBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBzcGVjaWZpY2FsbHkgZm9yIFJJU0MtVi4gVGhlcmUgYXJlbiYjMzk7dCBhbnkgbmV3IHN0cnVjdHMgYmVpbmcgaW50cm9kdWNlZCB0aGF0IGFyZSAqY29waWVkKiB0byB1c2VyIHNwYWNlLiBUaGUgYEtWTV9QUkVfRkFVTFRfTUVNT1JZYCBpb2N0bCBhbHJlYWR5IGhhbmRsZXMgdGhlIHVzZXIgc3BhY2UgY29weSBmb3IgdGhlIGV4aXN0aW5nIGByYW5nZWAgc3RydWN0LiBUaGUgYHJhbmdlYCBzdHJ1Y3QgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgdGhlIGBjb3B5X2Zyb21fdXNlcmAgY2FsbC4KCk9rYXksIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIHN1bW1hcml6ZS4gYG91dF9tYXBgIGlzIGluaXRpYWxpemVkIHRvIHplcm8uIFRoZSBgcmFuZ2VgIHN0cnVjdCBpcyBjb3BpZWQgKmZyb20qIHVzZXIgc3BhY2UsIG5vdCB0aGUgb3RoZXIgd2F5IGFyb3VuZC4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgaW50cm9kdWNlZCB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gTm8gY29tcGxleCBhbGxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIHRoYXQgd291bGQgcG90ZW50aWFsbHkgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKVGhlcmVmb3JlLCBteSBhc3Nlc3NtZW50IGlzIHRoYXQgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBpc24mIzM5O3QgbmVjZXNzYXJ5IGhlcmUgdG8gYWRkcmVzcyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG91dC1vZi1ib3VuZHMgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLCB0aG91Z2ggSSYjMzk7bSBub3Qgc2VlaW5nIGFueSBvYnZpb3VzIG9uZXMgYXQgdGhpcyBzdGFnZS4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGBrdm1fcmlzY3ZfZ3N0YWdlX21hcHBpbmdgIHN0cnVjdCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyBcXHsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmg9MTI9c3RydWN0IGt2bV9nc3RhZ2Uge1xuLS1cbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2dzdGFnZS5oLTIwLVxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmg6MjE6c3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyB7XG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaC0yMi1cdGdwYV90IGFkZHI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MzQyCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyB0aG91Z2ggdGhleSB3ZXJlIG15IG93bjoKCioqQW5hbHl6aW5nIGBhcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaGAqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBkaWdnaW5nIGludG8gdGhlIFJJU0MtViBLVk0gaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSB0aGUgYGt2bV9nc3RhZ2UuaGAgaGVhZGVyIGZpbGUuIEl0JiMzOTtzIG9mdGVuIHRoZSBwbGFjZSB0byBmaW5kIGNydWNpYWwgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byB0aGUgZ3Vlc3Qgc3RhZ2UsIHNvIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bSBmb2N1c2luZy4gTGluZSAyMSwgaW4gcGFydGljdWxhciwgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgc3RhcnRpbmcgcG9pbnQuIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3IG9mIGhvdyB0aGUgS1ZNIGhhbmRsZXMgZ3Vlc3Qgc3RhdGUsIGFkZHJlc3MgdHJhbnNsYXRpb24sIG9yIHBlcmhhcHMgc29tZSBmdW5kYW1lbnRhbCBkYXRhIHN0cnVjdHVyZXMgcmVsYXRlZCB0byB0aGUgZy1zdGFnZS4gRGVwZW5kaW5nIG9uIHRoZSBzb3BoaXN0aWNhdGlvbiBvZiB0aGUgUklTQy1WIGltcGxlbWVudGF0aW9uLCBpdCBjb3VsZCBiZSBhIHNpbXBsZSBzdHJ1Y3R1cmUsIGEgY29tcGxleCBzZXQgb2YgbWFjcm9zLCBvciBwZXJoYXBzIGV2ZW4gYSBub3ZlbCBhcHByb2FjaC4gSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIHdoYXQmIzM5O3MgZGVjbGFyZWQgdGhlcmUgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9mIHRoZSBvdmVyYWxsIGRlc2lnbiBhbmQgd2hhdCBraW5kIG9mIGRldGFpbHMgYXJlIGltcG9ydGFudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjA6XHRcbiAgMjE6XHRzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nIHtcbiAgMjI6XHRcdGdwYV90IGFkZHI7XG4gIDIzOlx0XHRwdGVfdCBwdGU7XG4gIDI0Olx0XHR1MzIgbGV2ZWw7XG4gIDI1Olx0fTtcbiAgMjY6XHRcbiAgMjc6XHQjaWZkZWYgQ09ORklHXzY0QklUXG4gIDI4Olx0I2RlZmluZSBrdm1fcmlzY3ZfZ3N0YWdlX2luZGV4X2JpdHNcdDlcbiAgMjk6XHQjZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTc1NAoJCQkJCQkJb3V0cHV0OiAyNjEKCQkJCQkJCXRob3VnaHRzOiA3NDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgTWVtb3J5IFNhZmV0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGNvbmNlcm4gd2FzLCBhcyBhbHdheXMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MsIHBhcnRpY3VsYXJseSBnaXZlbiB0aGUgaW50ZXJhY3Rpb24gd2l0aCB1c2VyIHNwYWNlLiBJJiMzOTt2ZSBmb2N1c2VkIG9uIHR3byBrZXkgZGF0YSBzdHJ1Y3R1cmVzOiBga3ZtX2dzdGFnZV9tYXBwaW5nYCBhbmQgYGt2bV9wcmVfZmF1bHRfbWVtb3J5YC4KCkZpcnN0LCB0aGUgYGt2bV9nc3RhZ2VfbWFwcGluZ2Agc3RydWN0LiBUaGlzIGlzIHVzZWQgaW50ZXJuYWxseSBpbiB0aGUgUklTQy1WIE1NVSBjb2RlLiBJIHNlZSB0aGF0IGl0JiMzOTtzIGluaXRpYWxpemVkIHdpdGggYHsgMCB9YCB3aXRoaW4gYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAuIFNvLCBgYWRkcmAsIGBwdGVgLCBhbmQgYGxldmVsYCBhcmUgYWxsIHplcm9lZCBvdXQgYXQgdGhlIHN0YXJ0LiBUaGVuLCBga3ZtX3Jpc2N2X21tdV9tYXBgIGdldHMgYSBjaGFuY2UgdG8gbW9kaWZ5IHRoZXNlLCBhbmQgZXZlbiBpZiBpdCBkaWRuJiMzOTt0LCB3ZSBhcmUgc3RhcnRpbmcgZnJvbSBhIGNsZWFuIHNsYXRlLiBObyByaXNrIHRoZXJlLgoKTmV4dCwgSSBleGFtaW5lZCBgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5YC4gVGhpcyBpcyB3aGVyZSB0aGUgdXNlciBzcGFjZSBpbnRlcmFjdGlvbiBvY2N1cnMsIHRocm91Z2ggdGhlIGBLVk1fUFJFX0ZBVUxUX01FTU9SWWAgaW9jdGwgaW4gYGt2bV9tYWluLmNgLiBIZXJlJiMzOTtzIHRoZSBjcml0aWNhbCBiaXQ6IHRoZSBgcmFuZ2VgIHZhcmlhYmxlIG9mIHRoaXMgdHlwZSBpcyBmdWxseSBwb3B1bGF0ZWQgYnkgYGNvcHlfZnJvbV91c2VyYCBmcm9tIHRoZSB1c2VyLXByb3ZpZGVkIGRhdGEuIFRoZSBjb2RlIHRoZW4gbW9kaWZpZXMgYHJhbmdlLnNpemVgIGFuZCBgcmFuZ2UuZ3BhYCBpbnNpZGUgYGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLiBBbmQgZmluYWxseSwgdGhlIGVudGlyZSBgcmFuZ2VgIHN0cnVjdCwgaW5jbHVkaW5nIHRoZSBgcGFkZGluZ2AgZmllbGRzLCBpcyBjb3BpZWQgYmFjayB0byB1c2VyIHNwYWNlIHVzaW5nIGBjb3B5X3RvX3VzZXJgLiBUaGUgcGFkZGluZyBmaWVsZHMgYXJlIHNpbXBseSBlY2hvaW5nIHRoZSB1c2VyJiMzOTtzIGlucHV0LCB3aGljaCBpcyBhIGNvbW1vbiBhbmQgc2FmZSBwYXR0ZXJuIGZvciBpb2N0bHMuIFRoZXJlJiMzOTtzIG5vIGtlcm5lbCBtZW1vcnkgbGVhayBoZXJlIGJlY2F1c2UgdGhlIGNvbnRlbnRzIG9mIHRoZSBwYWRkaW5nIG9yaWdpbmF0ZSBmcm9tIHRoZSB1c2VyLgoKTG9va2luZyBhdCB0aGUgb3ZlcmFsbCBjb250ZXh0LCB0aGUgcGF0Y2ggc2ltcGx5IGVuYWJsZXMgdGhlIGV4aXN0aW5nIGBLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUllgIGZlYXR1cmUgZm9yIFJJU0MtVi4gSXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbiBwYXR0ZXJucyBvciBkYXRhIHN0cnVjdHVyZXMgdGhhdCB3b3VsZCByYWlzZSBhbGFybSBiZWxscy4gVGhlIHBhdGNoIGlzIHJlbGF0aXZlbHkgc2ltcGxlOyBpdCBpcyBqdXN0IHdpcmluZyB1cCBhbiBleGlzdGluZyBnZW5lcmljIEtWTSBmZWF0dXJlLgoKQmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnksIGluZm9ybWF0aW9uIGxlYWtzLCBvciBtZW1vcnkgY29ycnVwdGlvbi4gVGhlIGV4aXN0aW5nIEtBU0FOIGNoZWNrcyBhcmUgc3VmZmljaWVudCB0byBoYW5kbGUgYW55IHVuZm9yZXNlZW4gaXNzdWVzLiBTbywgSSB3aWxsIG1hcmsgdGhpcyBhcyBgTmVlZHNLTVNBTj1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgdGhlIGBLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUllgIGNhcGFiaWxpdHkgZm9yIFJJU0MtViBieSBhZGRpbmcgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgYW5kIHdpcmluZyBpdCB1cCBpbiB0aGUgTU1VLiBUaGUgb25seSBkYXRhIHN0cnVjdHVyZSBpbnZvbHZlZCBpbiB1c2VyIHNwYWNlIGNvbW11bmljYXRpb24gaXMgYHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeWAsIHdoaWNoIGlzIGhhbmRsZWQgYnkgZ2VuZXJpYyBLVk0gY29kZSAoYHZpcnQva3ZtL2t2bV9tYWluLmNgKS4gVGhlIGdlbmVyaWMgY29kZSBmdWxseSBpbml0aWFsaXplcyB0aGUgc3RydWN0IHZpYSBgY29weV9mcm9tX3VzZXJgIGJlZm9yZSBtb2RpZnlpbmcgaXRzIGBzaXplYCBhbmQgYGdwYWAgZmllbGRzIGFuZCBjb3B5aW5nIGl0IGJhY2sgdG8gdXNlciBzcGFjZS4gQW55IHBhZGRpbmcgZmllbGRzIHNpbXBseSBlY2hvIGJhY2sgdGhlIHVzZXItcHJvdmlkZWQgdmFsdWVzLCBwcmV2ZW50aW5nIGFueSBrZXJuZWwgbWVtb3J5IGluZm8tbGVha3MuIFRoZSBsb2NhbCB2YXJpYWJsZSBgb3V0X21hcGAgb2YgdHlwZSBgc3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZ2AgaXMgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkIChgPSB7IDAgfWApIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gYGt2bV9yaXNjdl9tbXVfbWFwYC4gVGhlcmUgYXJlIG5vIG5ldyBjb21wbGV4IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyB0aGUgYEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWWAgY2FwYWJpbGl0eSBmb3IgUklTQy1WIGJ5IGFkZGluZyBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBhbmQgd2lyaW5nIGl0IHVwIGluIHRoZSBNTVUuIFRoZSBvbmx5IGRhdGEgc3RydWN0dXJlIGludm9sdmVkIGluIHVzZXIgc3BhY2UgY29tbXVuaWNhdGlvbiBpcyBgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5YCwgd2hpY2ggaXMgaGFuZGxlZCBieSBnZW5lcmljIEtWTSBjb2RlIChgdmlydC9rdm0va3ZtX21haW4uY2ApLiBUaGUgZ2VuZXJpYyBjb2RlIGZ1bGx5IGluaXRpYWxpemVzIHRoZSBzdHJ1Y3QgdmlhIGBjb3B5X2Zyb21fdXNlcmAgYmVmb3JlIG1vZGlmeWluZyBpdHMgYHNpemVgIGFuZCBgZ3BhYCBmaWVsZHMgYW5kIGNvcHlpbmcgaXQgYmFjayB0byB1c2VyIHNwYWNlLiBBbnkgcGFkZGluZyBmaWVsZHMgc2ltcGx5IGVjaG8gYmFjayB0aGUgdXNlci1wcm92aWRlZCB2YWx1ZXMsIHByZXZlbnRpbmcgYW55IGtlcm5lbCBtZW1vcnkgaW5mby1sZWFrcy4gVGhlIGxvY2FsIHZhcmlhYmxlIGBvdXRfbWFwYCBvZiB0eXBlIGBzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nYCBpcyBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgKGA9IHsgMCB9YCkgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byBga3ZtX3Jpc2N2X21tdV9tYXBgLiBUaGVyZSBhcmUgbm8gbmV3IGNvbXBsZXggYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjAyOjAxLjM4MDA0MjI0M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODE2OTYzMzk1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIlZJUlRVQUxJWkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5XCIsXG4gICAgXCJrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIHRoZSBgS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZYCBjYXBhYmlsaXR5IGZvciBSSVNDLVYgYnkgYWRkaW5nIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGFuZCB3aXJpbmcgaXQgdXAgaW4gdGhlIE1NVS4gVGhlIG9ubHkgZGF0YSBzdHJ1Y3R1cmUgaW52b2x2ZWQgaW4gdXNlciBzcGFjZSBjb21tdW5pY2F0aW9uIGlzIGBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnlgLCB3aGljaCBpcyBoYW5kbGVkIGJ5IGdlbmVyaWMgS1ZNIGNvZGUgKGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCkuIFRoZSBnZW5lcmljIGNvZGUgZnVsbHkgaW5pdGlhbGl6ZXMgdGhlIHN0cnVjdCB2aWEgYGNvcHlfZnJvbV91c2VyYCBiZWZvcmUgbW9kaWZ5aW5nIGl0cyBgc2l6ZWAgYW5kIGBncGFgIGZpZWxkcyBhbmQgY29weWluZyBpdCBiYWNrIHRvIHVzZXIgc3BhY2UuIEFueSBwYWRkaW5nIGZpZWxkcyBzaW1wbHkgZWNobyBiYWNrIHRoZSB1c2VyLXByb3ZpZGVkIHZhbHVlcywgcHJldmVudGluZyBhbnkga2VybmVsIG1lbW9yeSBpbmZvLWxlYWtzLiBUaGUgbG9jYWwgdmFyaWFibGUgYG91dF9tYXBgIG9mIHR5cGUgYHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmdgIGlzIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCAoYD0geyAwIH1gKSBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvIGBrdm1fcmlzY3ZfbW11X21hcGAuIFRoZXJlIGFyZSBubyBuZXcgY29tcGxleCBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBlbmFibGVzIHRoZSBLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUlkgY2FwYWJpbGl0eSBhbmQgaXRzIGNvcnJlc3BvbmRpbmcgaW9jdGwgKEtWTV9QUkVfRkFVTFRfTUVNT1JZKSBmb3IgUklTQy1WIEtWTS4gSXQgaW1wbGVtZW50cyB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGhhbmRsZXIgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgYW5kIG1vZGlmaWVzIGBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlYCB0byByZXR1cm4gbWFwcGluZyBpbmZvcm1hdGlvbi4gVGhpcyBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUgY29kZSBwYXRocyBpbiB0aGUgUklTQy1WIEtWTSBzdWJzeXN0ZW0gdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgaW9jdGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjAyOjAxLjM4MDA0NzUwM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3MjExODYxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGIwYjYwYTBjNzlmM2MyMmY5YWY2ODc2ODg4MGQyNmNmYjI1MjI1MDJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMDc6MDE6NTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vS2NvbmZpZyBiL2FyY2gvcmlzY3Yva3ZtL0tjb25maWdcXG5pbmRleCBlYzJjZWUwYTM5ZTAxLi44YWMyMDllOGFjODcwIDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL0tjb25maWdcXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnXFxuQEAgLTI4LDYgKzI4LDcgQEAgY29uZmlnIEtWTVxcbiBcXHRzZWxlY3QgS1ZNX0NPTU1PTlxcbiBcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUXFxuIFxcdHNlbGVjdCBLVk1fR0VORVJJQ19IQVJEV0FSRV9FTkFCTElOR1xcbitcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxcbiBcXHRzZWxlY3QgS1ZNX01NSU9cXG4gXFx0c2VsZWN0IFZJUlRfWEZFUl9UT19HVUVTVF9XT1JLXFxuIFxcdHNlbGVjdCBTQ0hFRF9JTkZPXFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jIGIvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNcXG5pbmRleCBlNTAwMmNiOWNiZWYxLi42YmQ4YjhmZDZjZWIyIDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jXFxuKysrIGIvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNcXG5AQCAtMjgwLDYgKzI4MCw5IEBAIGludCBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICBvdXRfbWFwLVxcdTAwM2VsZXZlbCwgdHJ1ZSk7XFxuIFxcdFxcdH0gZWxzZSBpZiAoQUxJR05fRE9XTihQRk5fUEhZUyhwdGVfcGZuKHB0ZXBfZ2V0KHB0ZXApKSksIHBhZ2Vfc2l6ZSkgPT0gaHBhKSB7XFxuIFxcdFxcdFxcdGt2bV9yaXNjdl9nc3RhZ2VfdXBkYXRlX3B0ZV9wcm90KGdzdGFnZSwgcHRlcF9sZXZlbCwgZ3BhLCBwdGVwLCBwcm90KTtcXG4rXFx0XFx0XFx0b3V0X21hcC1cXHUwMDNlYWRkciA9IEFMSUdOX0RPV04oZ3BhLCBwYWdlX3NpemUpO1xcbitcXHRcXHRcXHRvdXRfbWFwLVxcdTAwM2VsZXZlbCA9IHB0ZXBfbGV2ZWw7XFxuK1xcdFxcdFxcdG91dF9tYXAtXFx1MDAzZXB0ZSA9IHB0ZXBfZ2V0KHB0ZXApO1xcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL21tdS5jIGIvYXJjaC9yaXNjdi9rdm0vbW11LmNcXG5pbmRleCA2MDM1YjVlYzk1MDM5Li5jOTZlMjE3NDBjOTEzIDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL21tdS5jXFxuKysrIGIvYXJjaC9yaXNjdi9rdm0vbW11LmNcXG5AQCAtNzQ4LDYgKzc0OCwzOSBAQCBpbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbitsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKVxcbit7XFxuK1xcdHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgb3V0X21hcCA9IHsgMCB9O1xcbitcXHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90O1xcbitcXHR1bnNpZ25lZCBsb25nIG1hcF9zaXplO1xcbitcXHR1bnNpZ25lZCBsb25nIGh2YTtcXG4rXFx0Z3BhX3QgZW5kO1xcbitcXHRnZm5fdCBnZm47XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRnZm4gPSBncGFfdG9fZ2ZuKHJhbmdlLVxcdTAwM2VncGEpO1xcbitcXHRtZW1zbG90ID0ga3ZtX3ZjcHVfZ2ZuX3RvX21lbXNsb3QodmNwdSwgZ2ZuKTtcXG4rXFx0aWYgKCFtZW1zbG90KVxcbitcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4rXFxuK1xcdGh2YSA9IGdmbl90b19odmFfbWVtc2xvdF9wcm90KG1lbXNsb3QsIGdmbiwgTlVMTCk7XFxuK1xcdGlmIChrdm1faXNfZXJyb3JfaHZhKGh2YSkpXFxuK1xcdFxcdHJldHVybiAtRU5PRU5UO1xcbitcXG4rXFx0cmV0ID0ga3ZtX3Jpc2N2X21tdV9tYXAodmNwdSwgbWVtc2xvdCwgcmFuZ2UtXFx1MDAzZWdwYSwgaHZhLCBmYWxzZSwgXFx1MDAyNm91dF9tYXApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKCFwdGVfdmFsKG91dF9tYXAucHRlKSlcXG4rXFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuK1xcbitcXHRtYXBfc2l6ZSA9IFBBR0VfU0laRSBcXHUwMDNjXFx1MDAzYyAob3V0X21hcC5sZXZlbCAqIGt2bV9yaXNjdl9nc3RhZ2VfaW5kZXhfYml0cyk7XFxuK1xcdGVuZCA9IEFMSUdOX0RPV04ocmFuZ2UtXFx1MDAzZWdwYSwgbWFwX3NpemUpICsgbWFwX3NpemU7XFxuK1xcbitcXHRyZXR1cm4gbWluX3QodTY0LCByYW5nZS1cXHUwMDNlc2l6ZSwgZW5kIC0gcmFuZ2UtXFx1MDAzZWdwYSk7XFxuK31cXG4rXFxuIGludCBrdm1fcmlzY3ZfbW11X2FsbG9jX3BnZChzdHJ1Y3Qga3ZtICprdm0pXFxuIHtcXG4gXFx0c3RydWN0IHBhZ2UgKnBnZF9wYWdlO1xcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS92bS5jIGIvYXJjaC9yaXNjdi9rdm0vdm0uY1xcbmluZGV4IGE5ZjA4M2ZlZWI3NjcuLjU4NTAwYTE5YjMzYmQgMTAwNjQ0XFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vdm0uY1xcbisrKyBiL2FyY2gvcmlzY3Yva3ZtL3ZtLmNcXG5AQCAtMTg3LDYgKzE4Nyw3IEBAIGludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpXFxuIFxcdGNhc2UgS1ZNX0NBUF9NUF9TVEFURTpcXG4gXFx0Y2FzZSBLVk1fQ0FQX0lNTUVESUFURV9FWElUOlxcbiBcXHRjYXNlIEtWTV9DQVBfU0VUX0dVRVNUX0RFQlVHOlxcbitcXHRjYXNlIEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWTpcXG4gXFx0XFx0ciA9IDE7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIEtWTV9DQVBfTlJfVkNQVVM6XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXFxuaW5kZXggNmZjMzRlOWJmOGUxYi4uYWM2NGFjOTJmZDRiMCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxcbkBAIC0yMjUsNiArMjI1LDcgQEAgVEVTVF9HRU5fUFJPR1NfcmlzY3YgKz0gY29hbGVzY2VkX2lvX3Rlc3RcXG4gVEVTVF9HRU5fUFJPR1NfcmlzY3YgKz0gZGlydHlfbG9nX3BlcmZfdGVzdFxcbiBURVNUX0dFTl9QUk9HU19yaXNjdiArPSBnZXQtcmVnLWxpc3RcXG4gVEVTVF9HRU5fUFJPR1NfcmlzY3YgKz0gbW11X3N0cmVzc190ZXN0XFxuK1RFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IHByZV9mYXVsdF9tZW1vcnlfdGVzdFxcbiBURVNUX0dFTl9QUk9HU19yaXNjdiArPSByc2VxX3Rlc3RcXG4gVEVTVF9HRU5fUFJPR1NfcmlzY3YgKz0gc3RlYWxfdGltZVxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaFxcbmluZGV4IGUzYWNmMmFlOTg4MWUuLjcwNDg3YzhlZDE1NTMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaFxcbkBAIC0xMiw2ICsxMiw5IEBAXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vdmRzby9wcm9jZXNzb3IuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImt2bV91dGlsLmhcXFwiXFxuIFxcbisjZGVmaW5lIFBBR0VfU0hJRlRcXHRcXHQxMlxcbisjZGVmaW5lIFBBR0VfU0laRVxcdFxcdEJJVF9VTEwoUEFHRV9TSElGVClcXG4rXFxuICNkZWZpbmUgSU5TTl9PUENPREVfTUFTS1xcdDB4MDA3Y1xcbiAjZGVmaW5lIElOU05fT1BDT0RFX1NISUZUXFx0MlxcbiAjZGVmaW5lIElOU05fT1BDT0RFX1NZU1RFTVxcdDI4XFxuQEAgLTEyNyw2ICsxMzAsOSBAQCB2b2lkIHZtX2luc3RhbGxfZXhjZXB0aW9uX2hhbmRsZXIoc3RydWN0IGt2bV92bSAqdm0sIGludCB2ZWN0b3IsIGV4Y2VwdGlvbl9oYW5kbFxcbiBcXG4gdm9pZCB2bV9pbnN0YWxsX2ludGVycnVwdF9oYW5kbGVyKHN0cnVjdCBrdm1fdm0gKnZtLCBleGNlcHRpb25faGFuZGxlcl9mbiBoYW5kbGVyKTtcXG4gXFxuKy8qIEw0IGluZGV4IEJpdFs1Njo0OF0gKi9cXG4rI2RlZmluZSBQR1RCTF9MNF9JTkRFWF9NQVNLXFx0XFx0XFx0MHgwMUZGMDAwMDAwMDAwMDAwVUxMXFxuKyNkZWZpbmUgUEdUQkxfTDRfSU5ERVhfU0hJRlRcXHRcXHRcXHQ0OFxcbiAvKiBMMyBpbmRleCBCaXRbNDc6MzldICovXFxuICNkZWZpbmUgUEdUQkxfTDNfSU5ERVhfTUFTS1xcdFxcdFxcdDB4MDAwMEZGODAwMDAwMDAwMFVMTFxcbiAjZGVmaW5lIFBHVEJMX0wzX0lOREVYX1NISUZUXFx0XFx0XFx0MzlcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmNcXG5pbmRleCBkZWQ1NDI5ZjM0NDgzLi5iNGQ0MWE0MDc1NTM2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXFxuQEAgLTQzLDYgKzQzLDcgQEAgc3RhdGljIHU2NCBwdGVfaW5kZXhfbWFza1tdID0ge1xcbiBcXHRQR1RCTF9MMV9JTkRFWF9NQVNLLFxcbiBcXHRQR1RCTF9MMl9JTkRFWF9NQVNLLFxcbiBcXHRQR1RCTF9MM19JTkRFWF9NQVNLLFxcbitcXHRQR1RCTF9MNF9JTkRFWF9NQVNLLFxcbiB9O1xcbiBcXG4gc3RhdGljIHUzMiBwdGVfaW5kZXhfc2hpZnRbXSA9IHtcXG5AQCAtNTAsNiArNTEsNyBAQCBzdGF0aWMgdTMyIHB0ZV9pbmRleF9zaGlmdFtdID0ge1xcbiBcXHRQR1RCTF9MMV9JTkRFWF9TSElGVCxcXG4gXFx0UEdUQkxfTDJfSU5ERVhfU0hJRlQsXFxuIFxcdFBHVEJMX0wzX0lOREVYX1NISUZULFxcbitcXHRQR1RCTF9MNF9JTkRFWF9TSElGVCxcXG4gfTtcXG4gXFxuIHN0YXRpYyB1NjQgcHRlX2luZGV4KHN0cnVjdCBrdm1fdm0gKnZtLCBndmFfdCBndmEsIGludCBsZXZlbClcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jXFxuaW5kZXggYTBmY2FlM2NiN2E4Yi4uNmVlYmYwNTI0NjczNiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmNcXG5AQCAtOCw2ICs4LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NpemVzLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjdGVzdF91dGlsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NndWVzdF9tb2Rlcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNja3ZtX3V0aWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3Byb2Nlc3Nvci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjcHRocmVhZC5oXFx1MDAzZVxcbkBAIC0yMTksNiArMjIwLDggQEAgc3RhdGljIHZvaWQgdGVzdF9wcmVfZmF1bHRfbWVtb3J5KHVuc2lnbmVkIGxvbmcgdm1fdHlwZSwgYm9vbCBwcml2YXRlKVxcbiBcXG4gaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4ge1xcbitcXHRndWVzdF9tb2Rlc19hcHBlbmRfZGVmYXVsdCgpO1xcbitcXG4gXFx0VEVTVF9SRVFVSVJFKGt2bV9jaGVja19jYXAoS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZKSk7XFxuIFxcbiBcXHR0ZXN0X3ByZV9mYXVsdF9tZW1vcnkoMCwgZmFsc2UpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzowMjowMi44NTI3Njc3MjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozNTYyMTczOTEyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIlZJUlRVQUxJWkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5XCIsXG4gICAgXCJrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZW5hYmxlcyB0aGUgS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZIGNhcGFiaWxpdHkgYW5kIGl0cyBjb3JyZXNwb25kaW5nIGlvY3RsIChLVk1fUFJFX0ZBVUxUX01FTU9SWSkgZm9yIFJJU0MtViBLVk0uIEl0IGltcGxlbWVudHMgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBoYW5kbGVyIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGFuZCBtb2RpZmllcyBga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZWAgdG8gcmV0dXJuIG1hcHBpbmcgaW5mb3JtYXRpb24uIFRoaXMgaW50cm9kdWNlcyBuZXcgcmVhY2hhYmxlIGNvZGUgcGF0aHMgaW4gdGhlIFJJU0MtViBLVk0gc3Vic3lzdGVtIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGlvY3RsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiMGI2MGEwYzc5ZjNjMjJmOWFmNjg3Njg4ODBkMjZjZmIyNTIyNTAyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMDc6MDE6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnIGIvYXJjaC9yaXNjdi9rdm0vS2NvbmZpZ1xuaW5kZXggZWMyY2VlMGEzOWUwMS4uOGFjMjA5ZThhYzg3MCAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL0tjb25maWdcbisrKyBiL2FyY2gvcmlzY3Yva3ZtL0tjb25maWdcbkBAIC0yOCw2ICsyOCw3IEBAIGNvbmZpZyBLVk1cbiBcdHNlbGVjdCBLVk1fQ09NTU9OXG4gXHRzZWxlY3QgS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUXG4gXHRzZWxlY3QgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkdcbitcdHNlbGVjdCBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXG4gXHRzZWxlY3QgS1ZNX01NSU9cbiBcdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xuIFx0c2VsZWN0IFNDSEVEX0lORk9cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYyBiL2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jXG5pbmRleCBlNTAwMmNiOWNiZWYxLi42YmQ4YjhmZDZjZWIyIDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNcbisrKyBiL2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jXG5AQCAtMjgwLDYgKzI4MCw5IEBAIGludCBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsXG4gXHRcdFx0XHRcdFx0ICAgIG91dF9tYXAtXHUwMDNlbGV2ZWwsIHRydWUpO1xuIFx0XHR9IGVsc2UgaWYgKEFMSUdOX0RPV04oUEZOX1BIWVMocHRlX3BmbihwdGVwX2dldChwdGVwKSkpLCBwYWdlX3NpemUpID09IGhwYSkge1xuIFx0XHRcdGt2bV9yaXNjdl9nc3RhZ2VfdXBkYXRlX3B0ZV9wcm90KGdzdGFnZSwgcHRlcF9sZXZlbCwgZ3BhLCBwdGVwLCBwcm90KTtcbitcdFx0XHRvdXRfbWFwLVx1MDAzZWFkZHIgPSBBTElHTl9ET1dOKGdwYSwgcGFnZV9zaXplKTtcbitcdFx0XHRvdXRfbWFwLVx1MDAzZWxldmVsID0gcHRlcF9sZXZlbDtcbitcdFx0XHRvdXRfbWFwLVx1MDAzZXB0ZSA9IHB0ZXBfZ2V0KHB0ZXApO1xuIFx0XHRcdHJldHVybiAwO1xuIFx0XHR9XG4gXHR9XG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vbW11LmMgYi9hcmNoL3Jpc2N2L2t2bS9tbXUuY1xuaW5kZXggNjAzNWI1ZWM5NTAzOS4uYzk2ZTIxNzQwYzkxMyAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL21tdS5jXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS9tbXUuY1xuQEAgLTc0OCw2ICs3NDgsMzkgQEAgaW50IGt2bV9yaXNjdl9tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK2xvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbitcdFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKVxuK3tcbitcdHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgb3V0X21hcCA9IHsgMCB9O1xuK1x0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdDtcbitcdHVuc2lnbmVkIGxvbmcgbWFwX3NpemU7XG4rXHR1bnNpZ25lZCBsb25nIGh2YTtcbitcdGdwYV90IGVuZDtcbitcdGdmbl90IGdmbjtcbitcdGludCByZXQ7XG4rXG4rXHRnZm4gPSBncGFfdG9fZ2ZuKHJhbmdlLVx1MDAzZWdwYSk7XG4rXHRtZW1zbG90ID0ga3ZtX3ZjcHVfZ2ZuX3RvX21lbXNsb3QodmNwdSwgZ2ZuKTtcbitcdGlmICghbWVtc2xvdClcbitcdFx0cmV0dXJuIC1FTk9FTlQ7XG4rXG4rXHRodmEgPSBnZm5fdG9faHZhX21lbXNsb3RfcHJvdChtZW1zbG90LCBnZm4sIE5VTEwpO1xuK1x0aWYgKGt2bV9pc19lcnJvcl9odmEoaHZhKSlcbitcdFx0cmV0dXJuIC1FTk9FTlQ7XG4rXG4rXHRyZXQgPSBrdm1fcmlzY3ZfbW11X21hcCh2Y3B1LCBtZW1zbG90LCByYW5nZS1cdTAwM2VncGEsIGh2YSwgZmFsc2UsIFx1MDAyNm91dF9tYXApO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmICghcHRlX3ZhbChvdXRfbWFwLnB0ZSkpXG4rXHRcdHJldHVybiAtRUFHQUlOO1xuK1xuK1x0bWFwX3NpemUgPSBQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIChvdXRfbWFwLmxldmVsICoga3ZtX3Jpc2N2X2dzdGFnZV9pbmRleF9iaXRzKTtcbitcdGVuZCA9IEFMSUdOX0RPV04ocmFuZ2UtXHUwMDNlZ3BhLCBtYXBfc2l6ZSkgKyBtYXBfc2l6ZTtcbitcbitcdHJldHVybiBtaW5fdCh1NjQsIHJhbmdlLVx1MDAzZXNpemUsIGVuZCAtIHJhbmdlLVx1MDAzZWdwYSk7XG4rfVxuK1xuIGludCBrdm1fcmlzY3ZfbW11X2FsbG9jX3BnZChzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0c3RydWN0IHBhZ2UgKnBnZF9wYWdlO1xuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3ZtLmMgYi9hcmNoL3Jpc2N2L2t2bS92bS5jXG5pbmRleCBhOWYwODNmZWViNzY3Li41ODUwMGExOWIzM2JkIDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vdm0uY1xuKysrIGIvYXJjaC9yaXNjdi9rdm0vdm0uY1xuQEAgLTE4Nyw2ICsxODcsNyBAQCBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxuIFx0Y2FzZSBLVk1fQ0FQX01QX1NUQVRFOlxuIFx0Y2FzZSBLVk1fQ0FQX0lNTUVESUFURV9FWElUOlxuIFx0Y2FzZSBLVk1fQ0FQX1NFVF9HVUVTVF9ERUJVRzpcbitcdGNhc2UgS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZOlxuIFx0XHRyID0gMTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEtWTV9DQVBfTlJfVkNQVVM6XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbmluZGV4IDZmYzM0ZTliZjhlMWIuLmFjNjRhYzkyZmQ0YjAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG5AQCAtMjI1LDYgKzIyNSw3IEBAIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IGNvYWxlc2NlZF9pb190ZXN0XG4gVEVTVF9HRU5fUFJPR1NfcmlzY3YgKz0gZGlydHlfbG9nX3BlcmZfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IGdldC1yZWctbGlzdFxuIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IG1tdV9zdHJlc3NfdGVzdFxuK1RFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IHByZV9mYXVsdF9tZW1vcnlfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IHJzZXFfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IHN0ZWFsX3RpbWVcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oXG5pbmRleCBlM2FjZjJhZTk4ODFlLi43MDQ4N2M4ZWQxNTUzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oXG5AQCAtMTIsNiArMTIsOSBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS92ZHNvL3Byb2Nlc3Nvci5oXHUwMDNlXG4gI2luY2x1ZGUgXCJrdm1fdXRpbC5oXCJcbiBcbisjZGVmaW5lIFBBR0VfU0hJRlRcdFx0MTJcbisjZGVmaW5lIFBBR0VfU0laRVx0XHRCSVRfVUxMKFBBR0VfU0hJRlQpXG4rXG4gI2RlZmluZSBJTlNOX09QQ09ERV9NQVNLXHQweDAwN2NcbiAjZGVmaW5lIElOU05fT1BDT0RFX1NISUZUXHQyXG4gI2RlZmluZSBJTlNOX09QQ09ERV9TWVNURU1cdDI4XG5AQCAtMTI3LDYgKzEzMCw5IEBAIHZvaWQgdm1faW5zdGFsbF9leGNlcHRpb25faGFuZGxlcihzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IHZlY3RvciwgZXhjZXB0aW9uX2hhbmRsXG4gXG4gdm9pZCB2bV9pbnN0YWxsX2ludGVycnVwdF9oYW5kbGVyKHN0cnVjdCBrdm1fdm0gKnZtLCBleGNlcHRpb25faGFuZGxlcl9mbiBoYW5kbGVyKTtcbiBcbisvKiBMNCBpbmRleCBCaXRbNTY6NDhdICovXG4rI2RlZmluZSBQR1RCTF9MNF9JTkRFWF9NQVNLXHRcdFx0MHgwMUZGMDAwMDAwMDAwMDAwVUxMXG4rI2RlZmluZSBQR1RCTF9MNF9JTkRFWF9TSElGVFx0XHRcdDQ4XG4gLyogTDMgaW5kZXggQml0WzQ3OjM5XSAqL1xuICNkZWZpbmUgUEdUQkxfTDNfSU5ERVhfTUFTS1x0XHRcdDB4MDAwMEZGODAwMDAwMDAwMFVMTFxuICNkZWZpbmUgUEdUQkxfTDNfSU5ERVhfU0hJRlRcdFx0XHQzOVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXG5pbmRleCBkZWQ1NDI5ZjM0NDgzLi5iNGQ0MWE0MDc1NTM2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuY1xuQEAgLTQzLDYgKzQzLDcgQEAgc3RhdGljIHU2NCBwdGVfaW5kZXhfbWFza1tdID0ge1xuIFx0UEdUQkxfTDFfSU5ERVhfTUFTSyxcbiBcdFBHVEJMX0wyX0lOREVYX01BU0ssXG4gXHRQR1RCTF9MM19JTkRFWF9NQVNLLFxuK1x0UEdUQkxfTDRfSU5ERVhfTUFTSyxcbiB9O1xuIFxuIHN0YXRpYyB1MzIgcHRlX2luZGV4X3NoaWZ0W10gPSB7XG5AQCAtNTAsNiArNTEsNyBAQCBzdGF0aWMgdTMyIHB0ZV9pbmRleF9zaGlmdFtdID0ge1xuIFx0UEdUQkxfTDFfSU5ERVhfU0hJRlQsXG4gXHRQR1RCTF9MMl9JTkRFWF9TSElGVCxcbiBcdFBHVEJMX0wzX0lOREVYX1NISUZULFxuK1x0UEdUQkxfTDRfSU5ERVhfU0hJRlQsXG4gfTtcbiBcbiBzdGF0aWMgdTY0IHB0ZV9pbmRleChzdHJ1Y3Qga3ZtX3ZtICp2bSwgZ3ZhX3QgZ3ZhLCBpbnQgbGV2ZWwpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jXG5pbmRleCBhMGZjYWUzY2I3YThiLi42ZWViZjA1MjQ2NzM2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmNcbkBAIC04LDYgKzgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NpemVzLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2N0ZXN0X3V0aWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2d1ZXN0X21vZGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nrdm1fdXRpbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjcHJvY2Vzc29yLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NwdGhyZWFkLmhcdTAwM2VcbkBAIC0yMTksNiArMjIwLDggQEAgc3RhdGljIHZvaWQgdGVzdF9wcmVfZmF1bHRfbWVtb3J5KHVuc2lnbmVkIGxvbmcgdm1fdHlwZSwgYm9vbCBwcml2YXRlKVxuIFxuIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4ge1xuK1x0Z3Vlc3RfbW9kZXNfYXBwZW5kX2RlZmF1bHQoKTtcbitcbiBcdFRFU1RfUkVRVUlSRShrdm1fY2hlY2tfY2FwKEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWSkpO1xuIFxuIFx0dGVzdF9wcmVfZmF1bHRfbWVtb3J5KDAsIGZhbHNlKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjAyOjAyLjg1Mjc2OTAxNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMjIzODIxMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSSVNDLVYgS1ZNIFByZS1GYXVsdCBNZW1vcnkgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBSSVNDLVYgS1ZNIHRoYXQncyBhZGRpbmcgc3VwcG9ydCBmb3IgYEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWWAuIEl0IGxvb2tzIHByZXR0eSBzdHJhaWdodGZvcndhcmQgb24gdGhlIHN1cmZhY2UuIFdlJ3JlIG1vZGlmeWluZyBgS2NvbmZpZ2AgdG8gc2VsZWN0IGBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZYCwgd2hpY2ggbWFrZXMgc2Vuc2U7IHRoaXMgZW5hYmxlcyB0aGUgZ2VuZXJpYyBwcmUtZmF1bHRpbmcgbWVjaGFuaXNtLiBUaGVuIHRoZXJlIGFyZSBjaGFuZ2VzIGluIGBnc3RhZ2UuY2AgdG8gaGFuZGxlIG1hcHBpbmcsIGBtbXUuY2Agd2hpY2ggYWN0dWFsbHkgYWRkcyB0aGUgY29yZSBmdW5jdGlvbiBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCwgYW5kIGB2bS5jYCB0byBhZHZlcnRpc2UgdGhlIGNhcGFiaWxpdHkuIFBsdXMsIHRoZXkndmUgaW5jbHVkZWQgYSBzZWxmLXRlc3QuIFNvbGlkLlxuXG5UaGlzIGNsZWFybHkgaW50cm9kdWNlcyBhIG5ldyBjYXBhYmlsaXR5LCBgS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZYCwgYW5kIHRoZSBhc3NvY2lhdGVkIGBLVk1fUFJFX0ZBVUxUX01FTU9SWWAgaW9jdGwgZm9yIHRoZSB2Q1BVLiBGdW5jdGlvbmFsbHkgc291bmQsIHRoYXQncyBnb29kLlxuXG5UaGUgbmV4dCB0aG91Z2h0IGlzLCBjYW4gdGhpcyBiZSBlZmZlY3RpdmVseSB0ZXN0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzPyBPZiBjb3Vyc2UsIHRoaXMgaXMgS1ZNIGNvZGUuIFN5emthbGxlciBpcyB0aGUgcHJpbWFyeSBmdXp6aW5nIHRvb2wgdGhhdCBjb21lcyB0byBtaW5kLCBhbmQgd2hpbGUgaXQgaGVhdmlseSB0YXJnZXRzIHg4Nl82NCwgaXQgKmRvZXMqIGhhdmUgc29tZSBzdXBwb3J0IGZvciBBUk02NCBhbmQgUklTQy1WLiBXYWl0LCBpdCAqZG9lcyogc3VwcG9ydCBSSVNDLVY2NCwgZ3JlYXQuIE5vdywgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIEl0IGxvb2tzIGxpa2Ugd2UganVzdCBuZWVkIGBDT05GSUdfS1ZNYCwgd2hpY2ggaXMgc3RhbmRhcmQgZm9yIEtWTSBndWVzdHMuXG5cbkFscmlnaHQsIGxldCdzIGRyaWxsIGRvd24uIFRoZSBrZXkgZnVuY3Rpb24gaXMgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAuIEknbSBnb2luZyB0byBsb29rIGF0IGl0IGluIGBhcmNoL3Jpc2N2L2t2bS9tbXUuY2AuIEl0IGxvb2tzIGxpa2UgaXQgY2FsbHMgYGt2bV9yaXNjdl9tbXVfbWFwYCB0byBkbyB0aGUgYWN0dWFsIG1hcHBpbmcuXG5cblRvIGJlIHRob3JvdWdoLCBJJ20gZ29pbmcgdG8gbGV2ZXJhZ2UgYGRlZmF1bHRfYXBpOmdyZXBwZXJgIHRvIHNlZSBpZiBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBpcyBldmVyIGNhbGxlZCBkaXJlY3RseSBmcm9tIGdlbmVyaWMgS1ZNIGNvZGUuIFRoaXMgd2lsbCBoZWxwIGNvbmZpcm0gdGhpcyBzcGVjaWZpYyBSSVNDLVYgY29kZSBwYXRoLiBJIHdhbnQgdG8gc2VlIGhvdyB0aWdodGx5IGNvdXBsZWQgdGhpcyBpcyB0byBnZW5lcmljIEtWTSBvcGVyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzgwLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDM5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MDI6MTEuMDc1MTUzNTRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1OTEwMTMzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9rdm0vbW11LmM9NjIzPWludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03NTAtXFxuYXJjaC9yaXNjdi9rdm0vbW11LmM6NzUxOmxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03NTItXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTc5Nz12b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01ODQwLS8qKlxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1ODQxOiAqIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSgpIC0tIHByZS1mYXVsdCBhbmQgbGluayBnbWFwIGRhdCB0YWJsZXNcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTg0Mi0gKiBAdmNwdTogdGhlIHZjcHUgdGhhdCBzaGFsbCBhcHBlYXIgdG8gaGF2ZSBnZW5lcmF0ZWQgdGhlIGZhdWx0LWluLlxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU4NTktICovXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU4NjA6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01ODYxLXtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NDk3Mz1zdGF0aWMgaW50IGt2bV90ZHBfcGFnZV9wcmVmYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTAxNi1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUwMTc6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTAxOC1cXHRcXHRcXHRcXHQgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MTcwMT1zdGF0aWMgaW50IHRkeF9zZXB0X21hcF9sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGVudW0gcGdfbGV2ZWwgbGV2ZWwsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTE3MTMtXFx0LypcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjE3MTQ6XFx0ICogRW5zdXJlIHByZV9mYXVsdF9hbGxvd2VkIGlzIHJlYWQgYnkga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KClcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTE3MTUtXFx0ICogYmVmb3JlIGt2bV90ZHgtXFx1MDAzZXN0YXRlLiAgVXNlcnNwYWNlIG11c3Qgbm90IGJlIGFsbG93ZWQgdG8gcHJlLWZhdWx0XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MjYxMD12b2lkIGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI2MTMtI2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjI2MTQ6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNjE1LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKTtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9NDMzND1zdGF0aWMgaW50IGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy00MzU4LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6NDM1OTpcXHRcXHRyID0ga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHZjcHUsIHJhbmdlKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQzNjAtXFx0XFx0aWYgKFdBUk5fT05fT05DRShyID09IDAgfHwgciA9PSAtRUlPKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MDI6MTMuMzM0MjU5ODExWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA1NzE2NzQ0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFJJU0MtViBLVk0gUHJlLUZhdWx0IE1lbW9yeSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciB0aGUgYEtWTV9QUkVfRkFVTFRfTUVNT1JZYCBpb2N0bCBzcGVjaWZpY2FsbHkgZm9yIFJJU0MtVi4gSXQncyBjYWxsZWQgdGhyb3VnaCBga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgZnJvbSBga3ZtX21haW4uY2AsIHRyaWdnZXJlZCBieSB0aGUgaW9jdGwgaXRzZWxmLiAgU2luY2UgdGhpcyBpcyBhIG5ldyBpb2N0bCBoYW5kbGVyLCBmdXp6aW5nIGlzIGRlZmluaXRlbHkgd2FycmFudGVkOyB0aGF0J3MgYSBwcmltZSB0YXJnZXQgZm9yIGZpbmRpbmcgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy5cblxuVGhlIGNvcmUgaW1wbGVtZW50YXRpb24gc2VlbXMgdG8gcmVzaWRlIGluIGBhcmNoL3Jpc2N2L2t2bS9tbXUuY2AsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBtZW1vcnktcmVsYXRlZCBuYXR1cmUgb2YgdGhlIGlvY3RsLiBUaGUgbWFpbiBmdW5jdGlvbiBJIG5lZWQgdG8gZm9jdXMgb24gaXMgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAsIGFsdGhvdWdoIHRoZSBuYW1pbmcgaXMgYSBiaXQgbWlzbGVhZGluZyBzaW5jZSBpdCdzIGRlZmluZWQgc3BlY2lmaWNhbGx5IGZvciBSSVNDLVYuIEl0J3MgYWN0dWFsbHkgaW4gYGFyY2gvcmlzY3Yva3ZtL21tdS5jYC4gQWxzbyB3b3J0aCBub3RpbmcgaXMgdGhlIG1vZGlmaWNhdGlvbiB0byBga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZWAuXG5cbkknbGwgY2hlY2sgYGFyY2gvcmlzY3Yva3ZtL0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyByZXF1aXJlZCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5IHRvIGJlIGVuYWJsZWQgb3IgaWYgdGhlcmUgYXJlIGFueSBpbnRlcmVzdGluZyBvcHRpb25zIHRoYXQgY291bGQgaW1wYWN0IGl0cyBiZWhhdmlvci4gVGhpcyBjb3VsZCBwcm92aWRlIHZhbHVhYmxlIGNvbnRleHQgZm9yIHRlc3RpbmcgYW5kIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0MTIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MDI6MTguMzkxNDMxMjI3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMzU2OTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTIxLVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjAyOjE4LjQ3Mjc5MjUzNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MDg4ODc1OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llczogS1ZNIGFuZCBWaXJ0dWFsaXphdGlvbioqXG5cbkFscmlnaHQsIEknbSBkaXZpbmcgaW50byB0aGlzIGtlcm5lbCBjb25maWd1cmF0aW9uLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBhYnNvbHV0ZSByZXF1aXJlbWVudCBmb3IgYENPTkZJR19LVk1gLiBUaGF0J3MgYSBnaXZlbiDigJMgY2FuJ3QgZG8gYW55dGhpbmcgS1ZNLXJlbGF0ZWQgd2l0aG91dCB0aGF0IGVuYWJsZWQsIG9idmlvdXNseS4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHF1ZXN0aW9uIGlzOiBkb2VzIGVuYWJsaW5nIEtWTSBuZWNlc3NpdGF0ZSwgb3IgYXQgbGVhc3QgaGlnaGx5IHN1Z2dlc3QsIHRoYXQgd2UgYWxzbyBjb25zaWRlciBgQ09ORklHX1ZJUlRVQUxJWkFUSU9OYD8gVGhlIHJlbGF0aW9uc2hpcCB0aGVyZSBpcyBrZXkuIEl0J3MgYWxtb3N0IGNlcnRhaW4gdGhhdCB0aGUgdW5kZXJseWluZyBoeXBlcnZpc29yIHN1cHBvcnQgd2lsbCBiZSBuZWVkZWQsIGJ1dCBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHdoZXRoZXIgYFZJUlRVQUxJWkFUSU9OYCBpcyAqc3RyaWN0bHkqIGEgcHJlcmVxdWlzaXRlLCBvciBpZiBpdCdzIG1vcmUgb2YgYW4gYW5jaWxsYXJ5IGZlYXR1cmUgdGhhdCBpcyBiZXN0IHByYWN0aWNlIHRvIGVuYWJsZSB3aGVuIGVuYWJsaW5nIEtWTS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBkZXBlbmRlbmN5IHBhdGggY2xlYXJseSB0byBtYWtlIHRoZSByaWdodCBjb25maWd1cmF0aW9uIGRlY2lzaW9ucy4gSXQgZGVwZW5kcyBvbiB3aGV0aGVyIHdlIGFyZSBkZWFsaW5nIHdpdGggYSB0eXBlIDEgb3IgdHlwZSAyIGh5cGVydmlzb3IsIGFuZCBob3cgbXVjaCBpcyBiZWluZyB2aXJ0dWFsaXplZCwgb3IgZW11bGF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxMDIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzowMjoyMi4wODE2ODE5OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTYyMjM2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVklSVFVBTElaQVRJT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L2t2bS9LY29uZmlnPTY9c291cmNlIFxcXCJ2aXJ0L2t2bS9LY29uZmlnXFxcIlxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctNy1cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnOjg6bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctOS1cXHRib29sIFxcXCJWaXJ0dWFsaXphdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MDI6MjIuMTU3MzA5NjI5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5Mzg1NDAwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIGFuZCBNTVUgRnVuY3Rpb24gUmV2aWV3KipcblxuQWxyaWdodCwgZmlyc3QgdGhpbmdzIGZpcnN0LCBzZWVtcyBsaWtlIHdlJ3JlIGxvb2tpbmcgYXQgS1ZNIG9uIFJJU0MtVi4gVGhlcmVmb3JlLCBgQ09ORklHX0tWTWAgYW5kIGBDT05GSUdfVklSVFVBTElaQVRJT05gIGFyZSBkZWZpbml0ZWx5IHByZXJlcXVpc2l0ZXMuIE5vdGhpbmcgc3VycHJpc2luZyB0aGVyZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aG9zZSBhcmUgZW5hYmxlZCwgb2J2aW91c2x5LlxuXG5OZXh0LCBJJ20gdGhpbmtpbmcgb2YgZGl2aW5nIGludG8gdGhlIE1NVS1yZWxhdGVkIGNvZGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIFJJU0MtViBLVk0gaW1wbGVtZW50YXRpb24uIFRoZSBmdW5jdGlvbiBJIHdhbnQgdG8gbG9vayBhdCBpcyBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCDigJMgSSdtIGFzc3VtaW5nIHRoYXQncyB3aGVyZSB0aGUgY29yZSBwcmUtZmF1bHQgaGFuZGxpbmcgaGFwcGVucyBhbmQgbGlrZWx5IHdoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZm9yIHdoYXRldmVyIHRhc2sgSSd2ZSBnb3QgaW4gbWluZC4gVGltZSB0byBnZXQgZGlnZ2luZyBpbiBgYXJjaC9yaXNjdi9rdm0vbW11LmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDg1LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MDI6MjUuNTUxMTY1Njk2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTgxMTk2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9rdm0vbW11LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9rdm0vbW11LmM9NjIzPWludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03NTAtXFxuYXJjaC9yaXNjdi9rdm0vbW11LmM6NzUxOmxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03NTItXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjAyOjI1LjYxMDk4MzIwNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzI0ODc1NDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipGb2N1c2luZyBvbiBNZW1vcnkgRmF1bHRzIGluIEtWTS1SSVNDVioqXG5cbkFscmlnaHQsIHRoZSBjb3JlIG9mIHRoaXMgbWVtb3J5IGZhdWx0IGludmVzdGlnYXRpb24gc2VlbXMgdG8gbGllIHdpdGhpbiBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YC4gVGhhdCdzIGRlZmluaXRlbHkgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0IGRpZ2dpbmcuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSB2aXJ0dWFsIENQVSBpcyBpbnRlcmNlcHRpbmcgdGhlIG1lbW9yeSBhY2Nlc3MgYmVmb3JlIHRoZSBmYXVsdCBldmVuIG9jY3VycywgYWxsb3dpbmcgZm9yIG91ciBpbnRlcnZlbnRpb24uXG5cbkFuZCwgZnJvbSB0aGUgbG9va3Mgb2YgaXQsIGl0IHNlZW1zIGxpa2UgYGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2VgIGhhcyBzZWVuIHNvbWUgbW9kaWZpY2F0aW9ucy4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRob3NlIGNoYW5nZXMgaW4gYGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2VgIGFyZSBpbnRlcmFjdGluZyB3aXRoIHRoZSBmYXVsdCBoYW5kbGluZyBpbiBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YC4gR290dGEgZmlndXJlIG91dCB0aGUgaW50ZXJwbGF5LlxuXG5GaXJzdCwgbGV0J3MgcHVsbCB1cCB0aGUgc291cmNlIGZvciBga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZWAuIEknbGwgZmluZCBpdCBpbiBgYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNgIGFuZCBzZWUgaG93IHRoaXMgaXMgYWZmZWN0aW5nIHRoZSBtYXBwaW5nIG9mIGd1ZXN0IHBoeXNpY2FsIHBhZ2VzIHdpdGhpbiB0aGUgZ2xvYmFsIHN0YWdlLiBJdCBzZWVtcyBsaWtlIHRoZSBtb2RpZmljYXRpb25zIHRoZXJlIGFyZSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgbWVtb3J5IGZhdWx0cyBhcmUgaGFuZGxlZCBpbiBSSVNDLVYuIFRoYXQncyB0aGUgcHJpb3JpdHkgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTMyLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MDI6MjkuMzM1ODYxMDQ4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTExMTQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jPTE4Nj1zdGF0aWMgdm9pZCBrdm1fcmlzY3ZfZ3N0YWdlX3VwZGF0ZV9wdGVfcHJvdChzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLCB1MzIgbGV2ZWwsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYy0yMDYtXFxuYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmM6MjA3OmludCBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsXFxuYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmMtMjA4LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSAqcGNhY2hlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzowMjoyOS4zOTA5NzgxODdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODk2NDMxOTEwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBSSVNDLVYgS1ZNIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBSSVNDLVYgS1ZNIHBhdGNoLCBhbmQgaXQgc2VlbXMgbGlrZSBga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZWAgYW5kIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbi4gVGhleSBhcmUgdGhlIHByaW1hcnkgdGFyZ2V0cyBoZXJlLlxuXG5MZXQgbWUganVzdCBxdWlja2x5IGNoZWNrIGZvciBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEFoLCB5ZXMsIGBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZYCBpcyBpbmRlZWQgc2VsZWN0ZWQgd2hlbiBgS1ZNYCBpcyBlbmFibGVkIGZvciBSSVNDLVYuIFNvLCBqdXN0IGVuYWJsaW5nIGBLVk1gIHNob3VsZCBzdWZmaWNlLlxuXG5Ob3csIGxldCdzIGZvcm1hdCBteSBmaW5kaW5ncyBmb3IgZWFzeSBjb25zdW1wdGlvbi5cblxuRXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggaXMgYWRkaW5nIHRoZSBgS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZYCBjYXBhYmlsaXR5IGFuZCBpdHMgYXNzb2NpYXRlZCBpb2N0bCwgYEtWTV9QUkVfRkFVTFRfTUVNT1JZYCwgZm9yIFJJU0MtViBLVk0uIFRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgcHJlLWZhdWx0IGhhbmRsZXIsIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLCBpcyBiZWluZyBpbnRyb2R1Y2VkLiBQbHVzLCBga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZWAgaXMgYmVpbmcgdXBkYXRlZCB0byByZXR1cm4gbWFwcGluZyBpbmZvcm1hdGlvbi5cblxuVGhpcyBtZWFucyBuZXcsIHBvdGVudGlhbGx5IHJlYWNoYWJsZSBjb2RlIHBhdGhzIGFyZSBiZWluZyBvcGVuZWQgdXAgaW4gdGhlIFJJU0MtViBLVk0gc3Vic3lzdGVtLCBhbmQgdXNlcnNwYWNlIGNhbiB0cmlnZ2VyIHRoZW0gdmlhIHRoaXMgbmV3IGlvY3RsLlxuXG5IZXJlJ3MgdGhlIGRhdGEgZm9yIG15IHJlY29yZHM6XG5cbiogICAqKldvcnRoRnV6emluZyoqOiBgdHJ1ZWBcbiogICAqKkZvY3VzU3ltYm9scyoqOlxuICAgICogICBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YFxuICAgICogICBga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZWBcbiogICAqKkVuYWJsZUNvbmZpZ3MqKjpcbiAgICAqICAgYEtWTWBcbiAgICAqICAgYFZJUlRVQUxJWkFUSU9OYFxuKiAgICoqUmVhc29uaW5nKio6IFRoaXMgcGF0Y2ggZW5hYmxlcyB0aGUgS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZIGNhcGFiaWxpdHkgYW5kIGl0cyBjb3JyZXNwb25kaW5nIGlvY3RsIChLVk1fUFJFX0ZBVUxUX01FTU9SWSkgZm9yIFJJU0MtViBLVk0uIEl0IGltcGxlbWVudHMgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBoYW5kbGVyIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGFuZCBtb2RpZmllcyBga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZWAgdG8gcmV0dXJuIG1hcHBpbmcgaW5mb3JtYXRpb24uIFRoaXMgaW50cm9kdWNlcyBuZXcgcmVhY2hhYmxlIGNvZGUgcGF0aHMgaW4gdGhlIFJJU0MtViBLVk0gc3Vic3lzdGVtIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGlvY3RsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDgxLCJPdXRwdXRUb2tlbnMiOjE4MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzowMjozOC4zNTUyOTk5NjRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkyMDQyOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiVklSVFVBTElaQVRJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlcIixcbiAgICBcImt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBlbmFibGVzIHRoZSBLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUlkgY2FwYWJpbGl0eSBhbmQgaXRzIGNvcnJlc3BvbmRpbmcgaW9jdGwgKEtWTV9QUkVfRkFVTFRfTUVNT1JZKSBmb3IgUklTQy1WIEtWTS4gSXQgaW1wbGVtZW50cyB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGhhbmRsZXIgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgYW5kIG1vZGlmaWVzIGBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlYCB0byByZXR1cm4gbWFwcGluZyBpbmZvcm1hdGlvbi4gVGhpcyBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUgY29kZSBwYXRocyBpbiB0aGUgUklTQy1WIEtWTSBzdWJzeXN0ZW0gdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgaW9jdGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJWSVJUVUFMSVpBVElPTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeVwiLFxuICAgIFwia3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGVuYWJsZXMgdGhlIEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWSBjYXBhYmlsaXR5IGFuZCBpdHMgY29ycmVzcG9uZGluZyBpb2N0bCAoS1ZNX1BSRV9GQVVMVF9NRU1PUlkpIGZvciBSSVNDLVYgS1ZNLiBJdCBpbXBsZW1lbnRzIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaGFuZGxlciBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBhbmQgbW9kaWZpZXMgYGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2VgIHRvIHJldHVybiBtYXBwaW5nIGluZm9ybWF0aW9uLiBUaGlzIGludHJvZHVjZXMgbmV3IHJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHRoZSBSSVNDLVYgS1ZNIHN1YnN5c3RlbSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBpb2N0bC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MDI6MzguNDc0NTEwNDAyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDEwNzUxNTAzNzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzowMjozOC40NzQ5Mzg1NDJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTAxMDc0NzE2ODA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIHRoZSBgS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZYCBjYXBhYmlsaXR5IGZvciBSSVNDLVYgYnkgYWRkaW5nIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGFuZCB3aXJpbmcgaXQgdXAgaW4gdGhlIE1NVS4gVGhlIG9ubHkgZGF0YSBzdHJ1Y3R1cmUgaW52b2x2ZWQgaW4gdXNlciBzcGFjZSBjb21tdW5pY2F0aW9uIGlzIGBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnlgLCB3aGljaCBpcyBoYW5kbGVkIGJ5IGdlbmVyaWMgS1ZNIGNvZGUgKGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCkuIFRoZSBnZW5lcmljIGNvZGUgZnVsbHkgaW5pdGlhbGl6ZXMgdGhlIHN0cnVjdCB2aWEgYGNvcHlfZnJvbV91c2VyYCBiZWZvcmUgbW9kaWZ5aW5nIGl0cyBgc2l6ZWAgYW5kIGBncGFgIGZpZWxkcyBhbmQgY29weWluZyBpdCBiYWNrIHRvIHVzZXIgc3BhY2UuIEFueSBwYWRkaW5nIGZpZWxkcyBzaW1wbHkgZWNobyBiYWNrIHRoZSB1c2VyLXByb3ZpZGVkIHZhbHVlcywgcHJldmVudGluZyBhbnkga2VybmVsIG1lbW9yeSBpbmZvLWxlYWtzLiBUaGUgbG9jYWwgdmFyaWFibGUgYG91dF9tYXBgIG9mIHR5cGUgYHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmdgIGlzIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCAoYD0geyAwIH1gKSBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvIGBrdm1fcmlzY3ZfbW11X21hcGAuIFRoZXJlIGFyZSBubyBuZXcgY29tcGxleCBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiMGI2MGEwYzc5ZjNjMjJmOWFmNjg3Njg4ODBkMjZjZmIyNTIyNTAyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMDc6MDE6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnIGIvYXJjaC9yaXNjdi9rdm0vS2NvbmZpZ1xuaW5kZXggZWMyY2VlMGEzOWUwMS4uOGFjMjA5ZThhYzg3MCAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL0tjb25maWdcbisrKyBiL2FyY2gvcmlzY3Yva3ZtL0tjb25maWdcbkBAIC0yOCw2ICsyOCw3IEBAIGNvbmZpZyBLVk1cbiBcdHNlbGVjdCBLVk1fQ09NTU9OXG4gXHRzZWxlY3QgS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUXG4gXHRzZWxlY3QgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkdcbitcdHNlbGVjdCBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXG4gXHRzZWxlY3QgS1ZNX01NSU9cbiBcdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xuIFx0c2VsZWN0IFNDSEVEX0lORk9cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYyBiL2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jXG5pbmRleCBlNTAwMmNiOWNiZWYxLi42YmQ4YjhmZDZjZWIyIDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNcbisrKyBiL2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jXG5AQCAtMjgwLDYgKzI4MCw5IEBAIGludCBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsXG4gXHRcdFx0XHRcdFx0ICAgIG91dF9tYXAtXHUwMDNlbGV2ZWwsIHRydWUpO1xuIFx0XHR9IGVsc2UgaWYgKEFMSUdOX0RPV04oUEZOX1BIWVMocHRlX3BmbihwdGVwX2dldChwdGVwKSkpLCBwYWdlX3NpemUpID09IGhwYSkge1xuIFx0XHRcdGt2bV9yaXNjdl9nc3RhZ2VfdXBkYXRlX3B0ZV9wcm90KGdzdGFnZSwgcHRlcF9sZXZlbCwgZ3BhLCBwdGVwLCBwcm90KTtcbitcdFx0XHRvdXRfbWFwLVx1MDAzZWFkZHIgPSBBTElHTl9ET1dOKGdwYSwgcGFnZV9zaXplKTtcbitcdFx0XHRvdXRfbWFwLVx1MDAzZWxldmVsID0gcHRlcF9sZXZlbDtcbitcdFx0XHRvdXRfbWFwLVx1MDAzZXB0ZSA9IHB0ZXBfZ2V0KHB0ZXApO1xuIFx0XHRcdHJldHVybiAwO1xuIFx0XHR9XG4gXHR9XG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vbW11LmMgYi9hcmNoL3Jpc2N2L2t2bS9tbXUuY1xuaW5kZXggNjAzNWI1ZWM5NTAzOS4uYzk2ZTIxNzQwYzkxMyAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL21tdS5jXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS9tbXUuY1xuQEAgLTc0OCw2ICs3NDgsMzkgQEAgaW50IGt2bV9yaXNjdl9tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK2xvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbitcdFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKVxuK3tcbitcdHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgb3V0X21hcCA9IHsgMCB9O1xuK1x0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdDtcbitcdHVuc2lnbmVkIGxvbmcgbWFwX3NpemU7XG4rXHR1bnNpZ25lZCBsb25nIGh2YTtcbitcdGdwYV90IGVuZDtcbitcdGdmbl90IGdmbjtcbitcdGludCByZXQ7XG4rXG4rXHRnZm4gPSBncGFfdG9fZ2ZuKHJhbmdlLVx1MDAzZWdwYSk7XG4rXHRtZW1zbG90ID0ga3ZtX3ZjcHVfZ2ZuX3RvX21lbXNsb3QodmNwdSwgZ2ZuKTtcbitcdGlmICghbWVtc2xvdClcbitcdFx0cmV0dXJuIC1FTk9FTlQ7XG4rXG4rXHRodmEgPSBnZm5fdG9faHZhX21lbXNsb3RfcHJvdChtZW1zbG90LCBnZm4sIE5VTEwpO1xuK1x0aWYgKGt2bV9pc19lcnJvcl9odmEoaHZhKSlcbitcdFx0cmV0dXJuIC1FTk9FTlQ7XG4rXG4rXHRyZXQgPSBrdm1fcmlzY3ZfbW11X21hcCh2Y3B1LCBtZW1zbG90LCByYW5nZS1cdTAwM2VncGEsIGh2YSwgZmFsc2UsIFx1MDAyNm91dF9tYXApO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmICghcHRlX3ZhbChvdXRfbWFwLnB0ZSkpXG4rXHRcdHJldHVybiAtRUFHQUlOO1xuK1xuK1x0bWFwX3NpemUgPSBQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIChvdXRfbWFwLmxldmVsICoga3ZtX3Jpc2N2X2dzdGFnZV9pbmRleF9iaXRzKTtcbitcdGVuZCA9IEFMSUdOX0RPV04ocmFuZ2UtXHUwMDNlZ3BhLCBtYXBfc2l6ZSkgKyBtYXBfc2l6ZTtcbitcbitcdHJldHVybiBtaW5fdCh1NjQsIHJhbmdlLVx1MDAzZXNpemUsIGVuZCAtIHJhbmdlLVx1MDAzZWdwYSk7XG4rfVxuK1xuIGludCBrdm1fcmlzY3ZfbW11X2FsbG9jX3BnZChzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0c3RydWN0IHBhZ2UgKnBnZF9wYWdlO1xuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3ZtLmMgYi9hcmNoL3Jpc2N2L2t2bS92bS5jXG5pbmRleCBhOWYwODNmZWViNzY3Li41ODUwMGExOWIzM2JkIDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vdm0uY1xuKysrIGIvYXJjaC9yaXNjdi9rdm0vdm0uY1xuQEAgLTE4Nyw2ICsxODcsNyBAQCBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxuIFx0Y2FzZSBLVk1fQ0FQX01QX1NUQVRFOlxuIFx0Y2FzZSBLVk1fQ0FQX0lNTUVESUFURV9FWElUOlxuIFx0Y2FzZSBLVk1fQ0FQX1NFVF9HVUVTVF9ERUJVRzpcbitcdGNhc2UgS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZOlxuIFx0XHRyID0gMTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEtWTV9DQVBfTlJfVkNQVVM6XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbmluZGV4IDZmYzM0ZTliZjhlMWIuLmFjNjRhYzkyZmQ0YjAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG5AQCAtMjI1LDYgKzIyNSw3IEBAIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IGNvYWxlc2NlZF9pb190ZXN0XG4gVEVTVF9HRU5fUFJPR1NfcmlzY3YgKz0gZGlydHlfbG9nX3BlcmZfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IGdldC1yZWctbGlzdFxuIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IG1tdV9zdHJlc3NfdGVzdFxuK1RFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IHByZV9mYXVsdF9tZW1vcnlfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IHJzZXFfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IHN0ZWFsX3RpbWVcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oXG5pbmRleCBlM2FjZjJhZTk4ODFlLi43MDQ4N2M4ZWQxNTUzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oXG5AQCAtMTIsNiArMTIsOSBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS92ZHNvL3Byb2Nlc3Nvci5oXHUwMDNlXG4gI2luY2x1ZGUgXCJrdm1fdXRpbC5oXCJcbiBcbisjZGVmaW5lIFBBR0VfU0hJRlRcdFx0MTJcbisjZGVmaW5lIFBBR0VfU0laRVx0XHRCSVRfVUxMKFBBR0VfU0hJRlQpXG4rXG4gI2RlZmluZSBJTlNOX09QQ09ERV9NQVNLXHQweDAwN2NcbiAjZGVmaW5lIElOU05fT1BDT0RFX1NISUZUXHQyXG4gI2RlZmluZSBJTlNOX09QQ09ERV9TWVNURU1cdDI4XG5AQCAtMTI3LDYgKzEzMCw5IEBAIHZvaWQgdm1faW5zdGFsbF9leGNlcHRpb25faGFuZGxlcihzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IHZlY3RvciwgZXhjZXB0aW9uX2hhbmRsXG4gXG4gdm9pZCB2bV9pbnN0YWxsX2ludGVycnVwdF9oYW5kbGVyKHN0cnVjdCBrdm1fdm0gKnZtLCBleGNlcHRpb25faGFuZGxlcl9mbiBoYW5kbGVyKTtcbiBcbisvKiBMNCBpbmRleCBCaXRbNTY6NDhdICovXG4rI2RlZmluZSBQR1RCTF9MNF9JTkRFWF9NQVNLXHRcdFx0MHgwMUZGMDAwMDAwMDAwMDAwVUxMXG4rI2RlZmluZSBQR1RCTF9MNF9JTkRFWF9TSElGVFx0XHRcdDQ4XG4gLyogTDMgaW5kZXggQml0WzQ3OjM5XSAqL1xuICNkZWZpbmUgUEdUQkxfTDNfSU5ERVhfTUFTS1x0XHRcdDB4MDAwMEZGODAwMDAwMDAwMFVMTFxuICNkZWZpbmUgUEdUQkxfTDNfSU5ERVhfU0hJRlRcdFx0XHQzOVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXG5pbmRleCBkZWQ1NDI5ZjM0NDgzLi5iNGQ0MWE0MDc1NTM2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuY1xuQEAgLTQzLDYgKzQzLDcgQEAgc3RhdGljIHU2NCBwdGVfaW5kZXhfbWFza1tdID0ge1xuIFx0UEdUQkxfTDFfSU5ERVhfTUFTSyxcbiBcdFBHVEJMX0wyX0lOREVYX01BU0ssXG4gXHRQR1RCTF9MM19JTkRFWF9NQVNLLFxuK1x0UEdUQkxfTDRfSU5ERVhfTUFTSyxcbiB9O1xuIFxuIHN0YXRpYyB1MzIgcHRlX2luZGV4X3NoaWZ0W10gPSB7XG5AQCAtNTAsNiArNTEsNyBAQCBzdGF0aWMgdTMyIHB0ZV9pbmRleF9zaGlmdFtdID0ge1xuIFx0UEdUQkxfTDFfSU5ERVhfU0hJRlQsXG4gXHRQR1RCTF9MMl9JTkRFWF9TSElGVCxcbiBcdFBHVEJMX0wzX0lOREVYX1NISUZULFxuK1x0UEdUQkxfTDRfSU5ERVhfU0hJRlQsXG4gfTtcbiBcbiBzdGF0aWMgdTY0IHB0ZV9pbmRleChzdHJ1Y3Qga3ZtX3ZtICp2bSwgZ3ZhX3QgZ3ZhLCBpbnQgbGV2ZWwpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jXG5pbmRleCBhMGZjYWUzY2I3YThiLi42ZWViZjA1MjQ2NzM2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmNcbkBAIC04LDYgKzgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NpemVzLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2N0ZXN0X3V0aWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2d1ZXN0X21vZGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nrdm1fdXRpbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjcHJvY2Vzc29yLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NwdGhyZWFkLmhcdTAwM2VcbkBAIC0yMTksNiArMjIwLDggQEAgc3RhdGljIHZvaWQgdGVzdF9wcmVfZmF1bHRfbWVtb3J5KHVuc2lnbmVkIGxvbmcgdm1fdHlwZSwgYm9vbCBwcml2YXRlKVxuIFxuIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4ge1xuK1x0Z3Vlc3RfbW9kZXNfYXBwZW5kX2RlZmF1bHQoKTtcbitcbiBcdFRFU1RfUkVRVUlSRShrdm1fY2hlY2tfY2FwKEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWSkpO1xuIFxuIFx0dGVzdF9wcmVfZmF1bHRfbWVtb3J5KDAsIGZhbHNlKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjAyOjM4LjQ3NDkzOTQyMloiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MDQzMDg0ODA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJJU0MtViBLVk0gUHJlLUZhdWx0IE1lbW9yeSBTdXBwb3J0IEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgUklTQy1WIEtWTS4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgYWJvdXQgYWRkaW5nIHN1cHBvcnQgZm9yIGBLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUllgLiAgRXNzZW50aWFsbHksIGl0J3MgYWJvdXQgcHJvYWN0aXZlbHkgZmF1bHRpbmcgaW4gbWVtb3J5IHJlZ2lvbnMsIHdoaWNoIGNhbiBpbXByb3ZlIHBlcmZvcm1hbmNlIGJ5IHJlZHVjaW5nIHRoZSBsYXRlbmN5IG9mIHRoZSBmaXJzdCBhY2Nlc3MuXG5cblRoZSBmaXJzdCB0aGluZyBJIHNlZSBpcyB0aGUgYEtjb25maWdgIGNoYW5nZTsgaXQncyBzZWxlY3RpbmcgYEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllgLiBHb29kLCB3ZSBhcmUgcmV1c2luZyB0aGUgZ2VuZXJpYyBmcmFtZXdvcmsgd2hlcmUgcG9zc2libGUuIFRoZW4gdGhlcmUgYXJlIHRoZSBtb2RpZmljYXRpb25zIHRvIGBnc3RhZ2UuY2Ag4oCTIHByZXN1bWFibHkgcG9wdWxhdGluZyBgb3V0X21hcGAgZmllbGRzIOKAkyBhbmQgYG1tdS5jYCwgd2hpY2ggaW1wbGVtZW50cyB0aGUga2V5IGZ1bmN0aW9uOiBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YC4gRmluYWxseSwgaXQgcmVwb3J0cyB0aGUgbmV3IGNhcGFiaWxpdHkgYXMgc3VwcG9ydGVkIGFuZCB1cGRhdGVzIHNlbGZ0ZXN0cy4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIHNvIGZhci5cblxuTm93IGxldCdzIGRpdmUgaW50byB0aGF0IGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGZ1bmN0aW9uLiBJJ20gc2VlaW5nIGEgbG9jYWwgYHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgb3V0X21hcCA9IHsgMCB9O2AgYmVpbmcgaW5pdGlhbGl6ZWQgdG8gemVyby4gSSB0aGVuIHNlZSB0aGF0IGBrdm1fcmlzY3ZfbW11X21hcGAgaXMgYmVpbmcgY2FsbGVkIHdpdGggYFx1MDAyNm91dF9tYXBgIGFzIGFuIGFyZ3VtZW50LiAgSSBzZWUgdGhhdCB0aGUgYG91dF9tYXBgIHN0cnVjdCBpcyB1c2VkIGxhdGVyIHRvIGNhbGN1bGF0ZSBgbWFwX3NpemVgIHdoaWNoLCBnaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwcmUtZmF1bHRpbmcgcHJvY2Vzcywgc2VlbXMgY29ycmVjdC4gV2UncmUgZWZmZWN0aXZlbHkgZmlndXJpbmcgb3V0IHRoZSBtYXBwaW5nJ3Mgc2l6ZSwgYmFzZWQgb24gdGhlIE1NVSdzIHBhZ2UgdGFibGUgbGV2ZWwuIFRoZSBgZW5kYCBjYWxjdWxhdGlvbiB0aGVuIHVzZXMgdGhlIGBtYXBfc2l6ZWAgdG8gZmlndXJlIG91dCB0aGUgYWN0dWFsIGJ5dGVzIHRvIHByZS1mYXVsdC4gVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdlcmUgc3VjY2Vzc2Z1bGx5IHByZS1mYXVsdGVkLCBvciBhbiBlcnJvci5cblxuVGhlIGltcG9ydGFudCB0aGluZyBpcyB0aGlzIHplcm8gaW5pdGlhbGl6YXRpb24gb2YgYG91dF9tYXBgLiBJcyB0aGlzIG9rYXk/IEl0IGNvdWxkIGNhdXNlIHByb2JsZW1zLCBpdCdzIHNvbWV0aGluZyBJIG5lZWQgdG8gbG9vayBpbnRvLlxuXG5UaGUgbmV4dCBwb2ludCBJIG5lZWQgdG8gY2xhcmlmeSBpcyB3aGV0aGVyIHRoZSBgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5YCBpcyBiZWluZyBjb3BpZWQgdG8vZnJvbSB1c2Vyc3BhY2UuIEJlY2F1c2UgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBhcyBhbiBgaW9jdGxgIGFuZCwgZ2l2ZW4gbXkga25vd2xlZGdlIG9mIGhvdyB0aGlzIHR5cGljYWxseSB3b3JrcyB3aXRoIEtWTSwgSSdtIHByZXR0eSBzdXJlIHRoYXQgdGhpcyBpcyBpbmRlZWQgdGhlIGNhc2UuIFRoYXQgbWVhbnMgdGhlcmUncyBhIGdvb2QgY2hhbmNlIHRoaXMgaXMgYSB2dWxuZXJhYmlsaXR5LiAgSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBnZW5lcmljIEtWTSBjb2RlIGZvciB0aGUgYEtWTV9QUkVfRkFVTFRfTUVNT1JZYCBpb2N0bCBpbXBsZW1lbnRhdGlvbi4gSSBjYW4gdXNlIGBncmVwcGVyYCB0byBmaW5kIG91dCB3aGVyZSBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBpcyBhY3R1YWxseSBjYWxsZWQuIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNzcsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MDEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzowMjo0Ny41MTgwMjczNjdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyOTUwMjg2NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3Yva3ZtL21tdS5jPTYyMz1pbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNzUwLVxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jOjc1MTpsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNzUyLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU3OTc9dm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTg0MC0vKipcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTg0MTogKiBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoKSAtLSBwcmUtZmF1bHQgYW5kIGxpbmsgZ21hcCBkYXQgdGFibGVzXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU4NDItICogQHZjcHU6IHRoZSB2Y3B1IHRoYXQgc2hhbGwgYXBwZWFyIHRvIGhhdmUgZ2VuZXJhdGVkIHRoZSBmYXVsdC1pbi5cXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01ODU5LSAqL1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1ODYwOmxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTg2MS17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ5NzM9c3RhdGljIGludCBrdm1fdGRwX3BhZ2VfcHJlZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUwMTYtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MDE3Omxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUwMTgtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTE3MDE9c3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVsLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0xNzEzLVxcdC8qXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoxNzE0OlxcdCAqIEVuc3VyZSBwcmVfZmF1bHRfYWxsb3dlZCBpcyByZWFkIGJ5IGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSgpXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0xNzE1LVxcdCAqIGJlZm9yZSBrdm1fdGR4LVxcdTAwM2VzdGF0ZS4gIFVzZXJzcGFjZSBtdXN0IG5vdCBiZSBhbGxvd2VkIHRvIHByZS1mYXVsdFxcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTI2MTA9dm9pZCBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGUoa3ZtX3Bmbl90IHN0YXJ0LCBrdm1fcGZuX3QgZW5kKTtcXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNjEzLSNpZmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoyNjE0Omxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjYxNS1cXHRcXHRcXHRcXHQgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSk7XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTQzMzQ9c3RhdGljIGludCBrdm1fdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDM1OC1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjQzNTk6XFx0XFx0ciA9IGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSh2Y3B1LCByYW5nZSk7XFxudmlydC9rdm0va3ZtX21haW4uYy00MzYwLVxcdFxcdGlmIChXQVJOX09OX09OQ0UociA9PSAwIHx8IHIgPT0gLUVJTykpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjAyOjQ5LjgxMzA3MTIyOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzg0NTkyNTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0YWNrbGluZyB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24sIGBrdm1fdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCwgZm91bmQgaW4gYHZpcnQva3ZtL2t2bV9tYWluLmNgOlxuXG4qKkRpdmluZyBpbnRvIGBrdm1fdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCoqXG5cbkFscmlnaHQsIHRoZSBuZXh0IHN0ZXAgaW4gdGhpcyBpbnZlc3RpZ2F0aW9uIGlzIHRvIGdldCBhIGhhbmRsZSBvbiBga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQncyBoYXBwZW5pbmcgKmJlZm9yZSogYSBtZW1vcnkgZmF1bHQgb2NjdXJzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBLVk0gZW52aXJvbm1lbnQuIEdpdmVuIHRoZSBuYW1lLCBpdCdzIHByZXR0eSBjbGVhciB0aGlzIGlzIGEgcHJlLWZhdWx0IGhhbmRsZXIsIGxpa2VseSBjcnVjaWFsIGZvciBLVk0ncyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZXhjZXB0aW9uIGhhbmRsaW5nLiBUaGUgZmFjdCB0aGF0IGl0J3MgaW4gYGt2bV9tYWluLmNgIHN1Z2dlc3RzIGl0J3MgYSBjZW50cmFsIGNvbXBvbmVudCwgcHJvYmFibHkgaW52b2x2ZWQgaW4gdGhlIGNvcmUgVkNQVSBsaWZlY3ljbGUgYW5kIG1lbW9yeSBhY2Nlc3Mgb3BlcmF0aW9ucy4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIEtWTSBhcmNoaXRlY3R1cmUgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSB1bmRlcmx5aW5nIGhvc3QgbWVtb3J5IGFuZCB0aGUgZ3Vlc3QncyB2aXJ0dWFsIG1lbW9yeS4gSSdtIGFudGljaXBhdGluZyB0aGF0IHRoaXMgaXMgd2hlcmUgY3J1Y2lhbCBjaGVja3MsIHByZS1lbXB0aXZlIGFjdGlvbnMgKGxpa2UgZGlydHkgYml0IGhhbmRsaW5nKSwgb3Igb3B0aW1pemF0aW9ucyBhcmUgaW1wbGVtZW50ZWQgdG8gcHJldmVudCB0aGUgZmF1bHQgaXRzZWxmIG9yIHRvIHByZXBhcmUgZm9yIGl0cyByZXNvbHV0aW9uLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBzdWNoIGFzIHRoZSBWQ1BVJ3Mgc3RhdGUsIHRoZSBndWVzdCdzIHBhZ2UgdGFibGVzLCBhbmQgYW55IHJlbGV2YW50IEtWTS1zcGVjaWZpYyBtZW1vcnkgZGVzY3JpcHRvcnMuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBzdGFydCByZWFkaW5nIHNvbWUgY29kZSFcblxuXG4iLCJJbnB1dFRva2VucyI6Njc1NywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjAyOjUzLjU5NzY2Njc4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDA4MjkyNzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidmlydC9rdm0va3ZtX21haW4uYz00MzA4PXN0YXRpYyBpbnQga3ZtX3ZjcHVfaW9jdGxfZ2V0X3N0YXRzX2ZkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDMzMy0jaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjQzMzQ6c3RhdGljIGludCBrdm1fdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQzMzUtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz00NDA2PXN0YXRpYyBsb25nIGt2bV92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy00NjM4LVxcdFxcdFxcdGJyZWFrO1xcbnZpcnQva3ZtL2t2bV9tYWluLmM6NDYzOTpcXHRcXHRyID0ga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSh2Y3B1LCBcXHUwMDI2cmFuZ2UpO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDY0MC1cXHRcXHQvKiBQYXNzIGJhY2sgbGVmdG92ZXIgcmFuZ2UuICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjAyOjU1LjYwNTk2NTUzNFoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjU0NTA0NjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBga3ZtX3ZjcHVfaW9jdGxgIGJ1c2luZXNzLCBzcGVjaWZpY2FsbHkgdGhlIGhhbmRsaW5nIG9mIGBLVk1fUFJFX0ZBVUxUX01FTU9SWWAuIEhlcmUncyBteSB0YWtlIG9uIGl0OlxuXG4qKkRpc3NlY3RpbmcgdGhlIEtWTV9QUkVfRkFVTFRfTUVNT1JZIGlvY3RsIGluIGt2bV92Y3B1X2lvY3RsKipcblxuQWxyaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBwcmUtZmF1bHRpbmcgbWVtb3J5LiBUaGF0IGlvY3RsIGlzIGtleSwgYEtWTV9QUkVfRkFVTFRfTUVNT1JZYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNvbnNpZGVyIHRoZSBjb250ZXh0OiB3ZSdyZSBsaWtlbHkgdHJ5aW5nIHRvIG9wdGltaXplIG1lbW9yeSBhY2Nlc3MgaW4gdGhlIGd1ZXN0LCBieSBicmluZ2luZyBwYWdlcyBpbnRvIHRoZSBndWVzdCdzIHdvcmtpbmcgc2V0ICpiZWZvcmUqIHRoZXkncmUgYWN0dWFsbHkgYWNjZXNzZWQuIFNtYXJ0LiBUaGlzIHN1Z2dlc3RzIHByZS1sb2FkaW5nIHBhZ2VzIGZvciBhIHJlYXNvbiwgcGVyaGFwcyBwZXJmb3JtYW5jZSBwcm9maWxpbmcgZGV0ZWN0ZWQgc29tZSBsYXRlbmN5IGluIHRoZSBhcHBsaWNhdGlvbi5cblxuTm93LCB3aXRoaW4gYGt2bV92Y3B1X2lvY3RsYCwgaXQncyBhbGwgYWJvdXQgaG93IGBLVk1fUFJFX0ZBVUxUX01FTU9SWWAgaXMgKmhhbmRsZWQqLiBXaGF0IGFyZSB0aGUgc3RlcHM/IFdoZXJlIGRvZXMgaXQgZml0IGludG8gdGhlIG92ZXJhbGwgaW9jdGwgc3RydWN0dXJlPyBJcyBpdCBhIHNpbXBsZSBcImZhdWx0IHRoaXMgcmFuZ2VcIiBvciBhcmUgdGhlcmUgbW9yZSBjb21wbGV4IGNvbnNpZGVyYXRpb25zLCBsaWtlIGhhbmRsaW5nIHBhZ2UgZmF1bHRzIGFuZCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgTU1VPyBHaXZlbiBpdHMgbmFtZSwgaXTigJlzIG1vc3QgbGlrZWx5IHNldHRpbmcgdXAgdGhlIHByZS1mYXVsdCBmb3IgYSBnaXZlbiByYW5nZSBvZiBtZW1vcnkuIEhvdyBhcmUgd2UgaWRlbnRpZnlpbmcgdGhlIG1lbW9yeT8gUHJvYmFibHkgc29tZSBzb3J0IG9mIGFkZHJlc3MgcmFuZ2Ugd2l0aCBzdGFydCBhbmQgZW5kLiBBcmUgd2UgdXNpbmcgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzc2VzIG9yIHZpcnR1YWwgYWRkcmVzc2VzIHdpdGhpbiB0aGUgVk0/IFdlJ2xsIG5lZWQgdG8gdHJhbnNsYXRlIGFzIG5lY2Vzc2FyeSB0byB0aGUgaG9zdC5cblxuSSdkIGV4cGVjdCB0byBzZWUgYSBjaGVjayBmb3IgdmFsaWRpdHkgb2YgdGhlIHJlcXVlc3RlZCByYW5nZSwgZXJyb3IgaGFuZGxpbmcgaWYgdGhlIG9wZXJhdGlvbiBmYWlscywgYW5kIG1vc3QgaW1wb3J0YW50bHksIHRoZSBhY3R1YWwgbWVjaGFuaXNtIGZvciBicmluZ2luZyB0aG9zZSBwYWdlcyBpbnRvIG1lbW9yeS4gSXMgS1ZNIGxldmVyYWdpbmcgc29tZSBob3N0IHN5c3RlbSBjYWxscyBvciB0cmlja3MgdG8gcHJvYWN0aXZlbHkgdG91Y2ggdGhlIGd1ZXN0J3MgbWVtb3J5P1xuXG5JJ20gY3VyaW91czogYXJlIHRoZXJlIGFueSBmbGFncyBvciBvcHRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGlvY3RsPyBBcmUgd2UgbG9va2luZyBhdCAqanVzdCogcHJlZmF1bHRpbmcgb3IgaXMgdGhlcmUgYSB3YXkgdG8gcHJlLXBvcHVsYXRlIGFuZCBwcmV2ZW50IGEgcmVhbCBwYWdlIGZhdWx0IGxhdGVyPyBJIHdvdWxkIGJlIGludGVyZXN0ZWQgaW4gdGhlIG1lY2hhbmlzbXMgaW4gcGxhY2UgdGhhdCBwcmV2ZW50IGEgcmFjZSBjb25kaXRpb24gb3IgY29uZmxpY3QsIGFuZCBob3cgdGhleSBoYW5kbGUgdGhlIFZN4oCZcyBwYWdpbmcgc3RydWN0dXJlcy4gQWxzbywgaG93IGFyZSB3ZSBkZWFsaW5nIHdpdGggcG9zc2libGUgTlVNQSBjb25zaWRlcmF0aW9ucyBpbiB0aGlzIGNvbnRleHQ/XG5cblVsdGltYXRlbHksIG15IGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGVmZmljaWVuY3kgYW5kIHNhZmV0eSBvZiB0aGlzIHByZS1mYXVsdGluZyBwcm9jZXNzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBWTSdzIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgaG93IHRoaXMgZml0cyBpbnRvIEtWTSdzIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIHRyYW5zbGF0ZXMgaW50byByZWFsLXdvcmxkIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cywgb3IgaWYgdGhlcmUgaXMgZXZlciBhbnkgc2NlbmFyaW8gd2hlcmUgaXQgY291bGQgaW50cm9kdWNlIGFkZGl0aW9uYWwgb3ZlcmhlYWQuIEl0J3MgdGltZSB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgc2VlIGhvdyBpdCdzIGRvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0MDksIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzowMjo1OS44NjA0NzIzNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM4MTI5NDc5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJLVk1fUFJFX0ZBVUxUX01FTU9SWVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjQ3MT1TZWUgS1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT04yIGZvciBhZGRpdGlvbmFsIGRldGFpbHMuXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0NzItXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0NzM6NC4xNDMgS1ZNX1BSRV9GQVVMVF9NRU1PUllcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQ3NC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4tLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02NDgyPUVycm9yczpcXG4tLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NTA2LVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NTA3OktWTV9QUkVfRkFVTFRfTUVNT1JZIHBvcHVsYXRlcyBLVk0ncyBzdGFnZS0yIHBhZ2UgdGFibGVzIHVzZWQgdG8gbWFwIG1lbW9yeVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NTA4LWZvciB0aGUgY3VycmVudCB2Q1BVIHN0YXRlLiAgS1ZNIG1hcHMgbWVtb3J5IGFzIGlmIHRoZSB2Q1BVIGdlbmVyYXRlZCBhXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTI1Mzk9c3RhdGljIGludCBzbnBfbGF1bmNoX2ZpbmlzaChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjU5OC1cXHQgKiBjYW4gYmUgZ2l2ZW4gdG8gdGhlIGd1ZXN0IHNpbXBseSBieSBtYXJraW5nIHRoZSBSTVAgZW50cnkgYXMgcHJpdmF0ZS5cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI1OTk6XFx0ICogVGhpcyBjYW4gaGFwcGVuIG9uIGZpcnN0IGFjY2VzcyBhbmQgYWxzbyB3aXRoIEtWTV9QUkVfRkFVTFRfTUVNT1JZLlxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjYwMC1cXHQgKi9cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaD0xNjU4PXN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjYzLVxcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaDoxNjY0OiNkZWZpbmUgS1ZNX1BSRV9GQVVMVF9NRU1PUllcXHRfSU9XUihLVk1JTywgMHhkNSwgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5KVxcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjY1LVxcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oPTE2NTg9c3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQge1xcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NjMtXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oOjE2NjQ6I2RlZmluZSBLVk1fUFJFX0ZBVUxUX01FTU9SWVxcdF9JT1dSKEtWTUlPLCAweGQ1LCBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkpXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NjUtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmM9NjY9c3RhdGljIHZvaWQgcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBiYXNlX2dwYSwgdTY0IG9mZnNldCxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuYy05Ni1cXHRcXHRwcmV2ID0gcmFuZ2Uuc2l6ZTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmM6OTc6XFx0XFx0cmV0ID0gX192Y3B1X2lvY3RsKHZjcHUsIEtWTV9QUkVfRkFVTFRfTUVNT1JZLCBcXHUwMDI2cmFuZ2UpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuYy05OC1cXHRcXHRzYXZlX2Vycm5vID0gZXJybm87XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmMtMTU3LVxcdGlmICghZXhwZWN0ZWRfbGVmdClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmM6MTU4OlxcdFxcdFRFU1RfQVNTRVJUX1ZNX1ZDUFVfSU9DVEwoIXJldCwgS1ZNX1BSRV9GQVVMVF9NRU1PUlksIHJldCwgdmNwdS1cXHUwMDNldm0pO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuYy0xNTktXFx0ZWxzZVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuYy0xNjAtXFx0XFx0VEVTVF9BU1NFUlRfVk1fVkNQVV9JT0NUTChyZXQgXFx1MDAyNlxcdTAwMjYgc2F2ZV9lcnJubyA9PSBFTk9FTlQsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jOjE2MTpcXHRcXHRcXHRcXHRcXHQgIEtWTV9QUkVfRkFVTFRfTUVNT1JZLCByZXQsIHZjcHUtXFx1MDAzZXZtKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmMtMTYyLX1cXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9NDQwNj1zdGF0aWMgbG9uZyBrdm1fdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDYzMi0jaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjQ2MzM6XFx0Y2FzZSBLVk1fUFJFX0ZBVUxUX01FTU9SWToge1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDYzNC1cXHRcXHRzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgcmFuZ2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjAzOjAyLjI0MTc3NDU0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMzE2MTM0NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgc25pcHBldCwgZnJhbWVkIGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gS1ZNJ3MgQ29yZSoqXG5cbk9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIEtWTSBpbnRlcmFjdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyB0aGUgdmlydHVhbCBDUFUgaXMgbWFuYWdlZC4gVGhlIGZpcnN0IHBsYWNlIEknbSBnb2luZyB0byBsb29rIGlzIHRoZSBga3ZtX3ZjcHVfaW9jdGxgIGZ1bmN0aW9uLiBJIHJlbWVtYmVyIHRoYXQncyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgY29udHJvbCBvcGVyYXRpb25zIG9uIHRoZSB2aXJ0dWFsIENQVS4gTm93LCB0aGUgaGludCBhbHNvIG1lbnRpb25zIHRoZSBmaWxlIGFuZCBsaW5lLCB3aGljaCBzaG91bGQgZXhwZWRpdGUgdGhpbmdzOyBpdCdzIGdvaW5nIHRvIGJlIGluIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCBhcm91bmQgbGluZSA0NjMzLiBLbm93aW5nIHRoZSBmaWxlIGxvY2F0aW9uIGlzIGtleSAtIGl0IHBsYWNlcyB0aGlzIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgS1ZNJ3MgY29yZSBhcmNoaXRlY3R1cmUuIFdpdGggdGhlIGxpbmUgbnVtYmVyLCBJIGNhbiBzdGFydCByaWdodCB3aGVyZSBJIG5lZWQgdG8gYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxNjQsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzowMzowNS40NzMzOTA0NzlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ0NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDYyNSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDYyNTpcXHRcXHRcXHRyID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfZnB1KHZjcHUsIGZwdSk7XFxuNDYyNjpcXHRcXHRcXHRicmVhaztcXG40NjI3OlxcdFxcdH1cXG40NjI4OlxcdFxcdGNhc2UgS1ZNX0dFVF9TVEFUU19GRDoge1xcbjQ2Mjk6XFx0XFx0XFx0ciA9IGt2bV92Y3B1X2lvY3RsX2dldF9zdGF0c19mZCh2Y3B1KTtcXG40NjMwOlxcdFxcdFxcdGJyZWFrO1xcbjQ2MzE6XFx0XFx0fVxcbjQ2MzI6XFx0I2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXFxuNDYzMzpcXHRcXHRjYXNlIEtWTV9QUkVfRkFVTFRfTUVNT1JZOiB7XFxuNDYzNDpcXHRcXHRcXHRzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgcmFuZ2U7XFxuNDYzNTpcXHRcXG40NjM2OlxcdFxcdFxcdHIgPSAtRUZBVUxUO1xcbjQ2Mzc6XFx0XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZyYW5nZSwgYXJncCwgc2l6ZW9mKHJhbmdlKSkpXFxuNDYzODpcXHRcXHRcXHRcXHRicmVhaztcXG40NjM5OlxcdFxcdFxcdHIgPSBrdm1fdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHZjcHUsIFxcdTAwMjZyYW5nZSk7XFxuNDY0MDpcXHRcXHRcXHQvKiBQYXNzIGJhY2sgbGVmdG92ZXIgcmFuZ2UuICovXFxuNDY0MTpcXHRcXHRcXHRpZiAoY29weV90b191c2VyKGFyZ3AsIFxcdTAwMjZyYW5nZSwgc2l6ZW9mKHJhbmdlKSkpXFxuNDY0MjpcXHRcXHRcXHRcXHRyID0gLUVGQVVMVDtcXG40NjQzOlxcdFxcdFxcdGJyZWFrO1xcbjQ2NDQ6XFx0XFx0fVxcbjQ2NDU6XFx0I2VuZGlmXFxuNDY0NjpcXHRcXHRkZWZhdWx0OlxcbjQ2NDc6XFx0XFx0XFx0ciA9IGt2bV9hcmNoX3ZjcHVfaW9jdGwoZmlscCwgaW9jdGwsIGFyZyk7XFxuNDY0ODpcXHRcXHR9XFxuNDY0OTpcXHRvdXQ6XFxuNDY1MDpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnZjcHUtXFx1MDAzZW11dGV4KTtcXG40NjUxOlxcdFxcdGtmcmVlKGZwdSk7XFxuNDY1MjpcXHRcXHRrZnJlZShrdm1fc3JlZ3MpO1xcbjQ2NTM6XFx0XFx0cmV0dXJuIHI7XFxuNDY1NDpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjAzOjA1LjQ3MzczNjg4OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTIyOTA5MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS1ZNIFByZS1GYXVsdCBNZW1vcnkgUHJvY2VzcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYEtWTV9QUkVfRkFVTFRfTUVNT1JZYCBvcGVyYXRpb24sIGFuZCBpdCBzZWVtcyBsaWtlIHRoZSBzZXF1ZW5jZSBvZiBldmVudHMgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBhdCBmaXJzdCBnbGFuY2UuIEl0IGNvcGllcyBhIG1lbW9yeSBgcmFuZ2VgIGZyb20gdXNlcnNwYWNlLCBjYWxscyBga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgd2l0aCB0aGF0IGByYW5nZWAsIGFuZCB0aGVuIGNvcGllcyB0aGUgcG90ZW50aWFsbHkgbW9kaWZpZWQgYHJhbmdlYCBiYWNrIHRvIHVzZXJzcGFjZS5cblxuQnV0IHdhaXQgYSBtaW51dGUuLi4gZG9lcyBga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgYWN0dWFsbHkgKm1vZGlmeSogdGhhdCBgcmFuZ2VgPyBUaGF0J3MgdGhlIGNydWNpYWwgZGV0YWlsIEkgbmVlZCB0byBuYWlsIGRvd24uIElmIGl0IGRvZXMsIGFuZCBob3cgaXQgaXMgbW9kaWZpZWQsIHRoYXQgd2lsbCBjaGFuZ2UgZXZlcnl0aGluZyBhYm91dCBob3cgSSBzZWUgdGhpcyBmdW5jdGlvbiFcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIHNvdXJjZSBjb2RlIHRvIGdldCB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLCBhbmQgZnJvbSBteSBleHBlcmllbmNlLCB0aGF0IGZ1bmN0aW9uIGlzIHByb2JhYmx5IGluIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYC4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBoYXBwZW5pbmcgdG8gdGhpcyBgcmFuZ2VgIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2lkZSBlZmZlY3RzIGlmIEknbSBnb2luZyB0byB1bmRlcnN0YW5kIHRoaXMgZnVuY3Rpb24gY29tcGxldGVseS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg3MiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjAzOjA5LjM5NjY0ODgxOVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzEyMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwidmlydC9rdm0va3ZtX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MzM0LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MzM0OlxcdHN0YXRpYyBpbnQga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuNDMzNTpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXFxuNDMzNjpcXHR7XFxuNDMzNzpcXHRcXHRpbnQgaWR4O1xcbjQzMzg6XFx0XFx0bG9uZyByO1xcbjQzMzk6XFx0XFx0dTY0IGZ1bGxfc2l6ZTtcXG40MzQwOlxcdFxcbjQzNDE6XFx0XFx0aWYgKHJhbmdlLVxcdTAwM2VmbGFncylcXG40MzQyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjQzNDM6XFx0XFxuNDM0NDpcXHRcXHRpZiAoIVBBR0VfQUxJR05FRChyYW5nZS1cXHUwMDNlZ3BhKSB8fFxcbjQzNDU6XFx0XFx0ICAgICFQQUdFX0FMSUdORUQocmFuZ2UtXFx1MDAzZXNpemUpIHx8XFxuNDM0NjpcXHRcXHQgICAgcmFuZ2UtXFx1MDAzZWdwYSArIHJhbmdlLVxcdTAwM2VzaXplIFxcdTAwM2M9IHJhbmdlLVxcdTAwM2VncGEpXFxuNDM0NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40MzQ4OlxcdFxcbjQzNDk6XFx0XFx0dmNwdV9sb2FkKHZjcHUpO1xcbjQzNTA6XFx0XFx0aWR4ID0gc3JjdV9yZWFkX2xvY2soXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlc3JjdSk7XFxuNDM1MTpcXHRcXG40MzUyOlxcdFxcdGZ1bGxfc2l6ZSA9IHJhbmdlLVxcdTAwM2VzaXplO1xcbjQzNTM6XFx0XFx0ZG8ge1xcbjQzNTQ6XFx0XFx0XFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XFxuNDM1NTpcXHRcXHRcXHRcXHRyID0gLUVJTlRSO1xcbjQzNTY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNDM1NzpcXHRcXHRcXHR9XFxuNDM1ODpcXHRcXG40MzU5OlxcdFxcdFxcdHIgPSBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkodmNwdSwgcmFuZ2UpO1xcbjQzNjA6XFx0XFx0XFx0aWYgKFdBUk5fT05fT05DRShyID09IDAgfHwgciA9PSAtRUlPKSlcXG40MzYxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjQzNjI6XFx0XFxuNDM2MzpcXHRcXHRcXHRpZiAociBcXHUwMDNjIDApXFxuNDM2NDpcXHRcXHRcXHRcXHRicmVhaztcXG40MzY1OlxcdFxcbjQzNjY6XFx0XFx0XFx0cmFuZ2UtXFx1MDAzZXNpemUgLT0gcjtcXG40MzY3OlxcdFxcdFxcdHJhbmdlLVxcdTAwM2VncGEgKz0gcjtcXG40MzY4OlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjQzNjk6XFx0XFx0fSB3aGlsZSAocmFuZ2UtXFx1MDAzZXNpemUpO1xcbjQzNzA6XFx0XFxuNDM3MTpcXHRcXHRzcmN1X3JlYWRfdW5sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZXNyY3UsIGlkeCk7XFxuNDM3MjpcXHRcXHR2Y3B1X3B1dCh2Y3B1KTtcXG40MzczOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzowMzowOS4zOTcxOTIxN1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDI2NDUwODczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgTWVtb3J5IExlYWtzIGFuZCBQYWRkaW5nIGluIGBrdm1fcHJlX2ZhdWx0X21lbW9yeWAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgd2hlcmUgYHJhbmdlYCBpcyBiZWluZyBtYW5pcHVsYXRlZC4gVGhlIHNpemUgYW5kIEdQQSBhcmUgYWRqdXN0ZWQgKGByYW5nZS1cdTAwM2VzaXplIC09IHI7IHJhbmdlLVx1MDAzZWdwYSArPSByO2ApIGFuZCB0aGVuIGNvcGllZCBiYWNrIHRvIHRoZSB1c2VyIHNwYWNlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBzY2FuIGZvciBhIHBvc3NpYmxlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWsuXG5cbkhvd2V2ZXIsIEkgcmVtZW1iZXIgdGhhdCB0aGUgYHJhbmdlYCB2YXJpYWJsZSBpcyAqZnVsbHkqIGluaXRpYWxpemVkIHJpZ2h0IGF0IHRoZSBiZWdpbm5pbmcgYnkgdGhlIGBjb3B5X2Zyb21fdXNlcmAgY2FsbC4gU28sIHRoYXQncyBnb29kLiBCdXQsIGFuZCB0aGlzIGlzIHdoZXJlIEkgbmVlZCB0byBiZSBjYXJlZnVsLCB3aGF0IGFib3V0IHBhZGRpbmc/IEkgbmVlZCB0byBjb25zaWRlciBpZiB0aGVyZSBtaWdodCBiZSBhbnkgcGFkZGluZyB3aXRoaW4gdGhlIGBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnlgIHN0cnVjdHVyZS4gVGhpcyBjb3VsZCBsZWFkIHRvIGlzc3VlcyBpZiBub3QgaGFuZGxlZCBwcm9wZXJseSBkdXJpbmcgdGhlIGNvcHkgb3BlcmF0aW9ucy5cblxuVG8gZW5zdXJlIHRoaXMgaXMgaGFuZGxlZCBzYWZlbHksIEkgc2hvdWxkIGltbWVkaWF0ZWx5IHJlZmVyZW5jZSB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5YCBpbiBgaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oYC4gVGhhdCdzIHdoZXJlIHRoZSBkZWZpbml0aXZlIGFuc3dlciB3aWxsIGJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDgyMSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjAzOjEzLjgyMzY0Nzg4M1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ5MjQzMjE1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgXFxcXHtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTY0ODI9RXJyb3JzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0OTctXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0OTg6ICBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkge1xcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDk5LVxcdC8qIGluL291dCAqL1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oPTE2NTg9c3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NjUtXFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oOjE2NjY6c3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5IHtcXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY2Ny1cXHRfX3U2NCBncGE7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg9MTY1OD1zdHJ1Y3Qga3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCB7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY2NS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6MTY2NjpzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkge1xcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjY3LVxcdF9fdTY0IGdwYTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MDM6MTYuMzE2MDg1NjQyWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MDA0NTQ5OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gS1ZNJ3MgTWVtb3J5IFJlZ2lvbiBEZWZpbml0aW9ucyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZiBLVk0ncyBtZW1vcnkgcmVnaW9uIG1hbmFnZW1lbnQuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBzdHJ1Y3R1cmVzIHRoYXQgZGVmaW5lIGhvdyBndWVzdCBwaHlzaWNhbCBtZW1vcnkgaXMgbWFwcGVkIHRvIGhvc3QgdmlydHVhbCBtZW1vcnksIHNvIEknbGwgYmUgaGVhZGluZyB0byBgaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oYC4gSSdtIGd1ZXNzaW5nIGFyb3VuZCBsaW5lIDE2NjYgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBmaW5kIHRoZSByZWxldmFudCBzdHJ1Y3RzLiBUaGlzIGlzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIG1lYXQgb2YgdGhlIG1lbW9yeSBtYXAgY29uZmlndXJhdGlvbi4gSSdtIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHRoZSBga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uYCBzdHJ1Y3R1cmUgYW5kIGl0cyByZWxhdGVkIGZpZWxkcy4gSSB3YW50IHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdXNlci1zcGFjZSBpbnRlcmFjdHMgd2l0aCB0aGUgS1ZNIGNvcmUgdG8gc2V0IHVwIG1lbW9yeSByZWdpb25zLCB0aGUgaW1wbGljYXRpb25zIG9mIGRpZmZlcmVudCBmbGFncyBhbmQgYXR0cmlidXRlcywgYW5kIGFueSBhbGlnbm1lbnQgY29uc3RyYWludHMuIEhvcGVmdWxseSwgdGhpcyB3aWxsIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1MDUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzowMzoxOS45MTY1NDMyNzZaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5ODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvdWFwaS9saW51eC9rdm0uaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxNjYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjYwOlxcdFxcdF9fdTY0IGZsYWdzO1xcbjE2NjE6XFx0XFx0X191NjQgcmVzZXJ2ZWRbNl07XFxuMTY2MjpcXHR9O1xcbjE2NjM6XFx0XFxuMTY2NDpcXHQjZGVmaW5lIEtWTV9QUkVfRkFVTFRfTUVNT1JZXFx0X0lPV1IoS1ZNSU8sIDB4ZDUsIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSlcXG4xNjY1OlxcdFxcbjE2NjY6XFx0c3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5IHtcXG4xNjY3OlxcdFxcdF9fdTY0IGdwYTtcXG4xNjY4OlxcdFxcdF9fdTY0IHNpemU7XFxuMTY2OTpcXHRcXHRfX3U2NCBmbGFncztcXG4xNjcwOlxcdFxcdF9fdTY0IHBhZGRpbmdbNV07XFxuMTY3MTpcXHR9O1xcbjE2NzI6XFx0XFxuMTY3MzpcXHQjZW5kaWYgLyogX19MSU5VWF9LVk1fSCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzowMzoxOS45MTY2ODU3NDZaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTYwODc2NjMzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYGt2bV9wcmVfZmF1bHRfbWVtb3J5YCBhbmQgUG90ZW50aWFsIEluZm9ybWF0aW9uIExlYWtzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5YCBhbmQgbm90aWNpbmcgdGhhdCBpdCBoYXMgc29tZSBwYWRkaW5nLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzLCBpZiB3ZSBjb3B5IHRoaXMgc3RydWN0IGZyb20gdXNlciBzcGFjZSB1c2luZyBgY29weV9mcm9tX3VzZXJgIGludG8gYSBgcmFuZ2VgIHZhcmlhYmxlLCB0aGVuIG1vZGlmeSBjZXJ0YWluIGZpZWxkcyBsaWtlIGByYW5nZS1cdTAwM2VzaXplYCBhbmQgYHJhbmdlLVx1MDAzZWdwYWAsIGFuZCB0aGVuIGBjb3B5X3RvX3VzZXJgIGl0IGJhY2ssIHRoZXJlIHNob3VsZG4ndCBiZSBhIHZ1bG5lcmFiaWxpdHkuIFRoZSBwYWRkaW5nIGZpZWxkcyBqdXN0IGVjaG8gYmFjayB3aGF0ZXZlciB0aGUgdXNlciBzZW50LiBUaGVyZSdzIG5vIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBiZWluZyBsZWFrZWQgaGVyZSwgYmVjYXVzZSB0aGUga2VybmVsIGlzIG1lcmVseSByZWZsZWN0aW5nIHRoZSB1c2VyJ3MgaW5wdXQuXG5cbkJ1dCwgaG9sZCBvbi4gV2hhdCBpZiBgY29weV9mcm9tX3VzZXJgIGZhaWxzPyBUaGVuIHRoZSBjb3B5LWJhY2sgZG9lc24ndCBoYXBwZW4uIFdoYXQgaWYgYGNvcHlfZnJvbV91c2VyYCAqc3VjY2VlZHMqIGJ1dCB0aGUga2VybmVsIHNvbWVob3cgZGlkbid0IGluaXRpYWxpemUgYHJhbmdlYCBmaXJzdD8gQWgsIGJ1dCB3YWl0LCB0aGUgZW50aXJlIGByYW5nZWAgc3RydWN0IGlzIGluaXRpYWxpemVkIGJ5IGBjb3B5X2Zyb21fdXNlcmAsIHNvIHRoYXQncyBhIG1vb3QgcG9pbnQuXG5cbkxldCBtZSByZXZpc2l0IHRoZSBjb3JlIGxvZ2ljIHdpdGhpbiBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YC4gSXQgbG9va3MgbGlrZSBpdCBpbml0aWFsaXplcyBhIGBrdm1fZ3N0YWdlX21hcHBpbmdgIHN0cnVjdCBjYWxsZWQgYG91dF9tYXBgIHRvIGFsbCB6ZXJvcy4gSXQgdGhlbiBjYWxscyBga3ZtX3Jpc2N2X21tdV9tYXBgIHRvIHBvcHVsYXRlIGl0LiBJIHNlZSB0aGF0IGBrdm1fcmlzY3ZfbW11X21hcGAgaXMgdGhlIGNydWNpYWwgcGFydCB0aGF0IGxpa2VseSBwb3B1bGF0ZXMgYG91dF9tYXBgLiBUaGF0J3MgdGhlIGZ1bmN0aW9uIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBpbiBgYXJjaC9yaXNjdi9rdm0vbW11LmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTk5NiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjAzOjI5LjUyNTQ1NDcwNFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzMwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9yaXNjdi9rdm0vbW11LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzMwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzMwOlxcdFxcdGlmICghbG9nZ2luZyBcXHUwMDI2XFx1MDAyNiAhaXNfaHVnZXRsYiBcXHUwMDI2XFx1MDAyNiB2bWFfcGFnZXNpemUgPT0gUEFHRV9TSVpFKVxcbiA3MzE6XFx0XFx0XFx0dm1hX3BhZ2VzaXplID0gdHJhbnNwYXJlbnRfaHVnZXBhZ2VfYWRqdXN0KGt2bSwgbWVtc2xvdCwgaHZhLCBcXHUwMDI2aGZuLCBcXHUwMDI2Z3BhKTtcXG4gNzMyOlxcdFxcbiA3MzM6XFx0XFx0aWYgKHdyaXRhYmxlKSB7XFxuIDczNDpcXHRcXHRcXHRtYXJrX3BhZ2VfZGlydHlfaW5fc2xvdChrdm0sIG1lbXNsb3QsIGdmbik7XFxuIDczNTpcXHRcXHRcXHRyZXQgPSBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKFxcdTAwMjZnc3RhZ2UsIHBjYWNoZSwgZ3BhLCBoZm4gXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCxcXG4gNzM2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHZtYV9wYWdlc2l6ZSwgZmFsc2UsIHRydWUsIG91dF9tYXApO1xcbiA3Mzc6XFx0XFx0fSBlbHNlIHtcXG4gNzM4OlxcdFxcdFxcdHJldCA9IGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2UoXFx1MDAyNmdzdGFnZSwgcGNhY2hlLCBncGEsIGhmbiBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZULFxcbiA3Mzk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0dm1hX3BhZ2VzaXplLCB0cnVlLCB0cnVlLCBvdXRfbWFwKTtcXG4gNzQwOlxcdFxcdH1cXG4gNzQxOlxcdFxcbiA3NDI6XFx0XFx0aWYgKHJldClcXG4gNzQzOlxcdFxcdFxcdGt2bV9lcnIoXFxcIkZhaWxlZCB0byBtYXAgaW4gRy1zdGFnZVxcXFxuXFxcIik7XFxuIDc0NDpcXHRcXG4gNzQ1OlxcdG91dF91bmxvY2s6XFxuIDc0NjpcXHRcXHRrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2Uoa3ZtLCBwYWdlLCByZXQgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FRVhJU1QsIHdyaXRhYmxlKTtcXG4gNzQ3OlxcdFxcdHdyaXRlX3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuIDc0ODpcXHRcXHRyZXR1cm4gcmV0O1xcbiA3NDk6XFx0fVxcbiA3NTA6XFx0XFxuIDc1MTpcXHRsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIDc1MjpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSlcXG4gNzUzOlxcdHtcXG4gNzU0OlxcdFxcdHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgb3V0X21hcCA9IHsgMCB9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzowMzoyOS41MjU1OTA4ODRaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE0NjIyNDk1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gS1ZNIGZvciBSSVNDLVY6IGdzdGFnZSBhbmQgUGFnZSBNYXBwaW5nKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBLVk0gaW50ZXJhY3RzIHdpdGggdGhlIFJJU0MtViBhcmNoaXRlY3R1cmUgYXQgYSBmdW5kYW1lbnRhbCBsZXZlbCwgcGFydGljdWxhcmx5IHJlZ2FyZGluZyBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gdGhlIGd1ZXN0IGVudmlyb25tZW50LiBUaGUgZnVuY3Rpb24gYGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2VgIGluIGBhcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuY2Agc2VlbXMgbGlrZSBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoYXQgcHV6emxlLiBJdCdzIHRpbWUgdG8gZGlzc2VjdCBpdHMgaW5uZXIgd29ya2luZ3MuIEkgc3VzcGVjdCB0aGlzIGZ1bmN0aW9uIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCB3aGVyZSB0aGUgZ3Vlc3QncyB2aXJ0dWFsIGFkZHJlc3NlcyBhcmUgdHJhbnNsYXRlZCBhbmQgbWFwcGVkIHRvIHRoZSBob3N0J3MgcGh5c2ljYWwgbWVtb3J5LCBwb3RlbnRpYWxseSB1c2luZyB0aGUgZ3N0YWdlIG1lY2hhbmlzbXMuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGhhbmRsZXMgcGFnZSB0YWJsZSB3YWxrcywgdGhlIGludGVyYWN0aW9uIHdpdGggUklTQy1WJ3MgcGFnZSB0YWJsZSBzdHJ1Y3R1cmVzLCBhbmQgYW55IHNwZWNpZmljIG9wdGltaXphdGlvbnMgZm9yIHRoZSBhcmNoaXRlY3R1cmUuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaG93IHRoZSBLVk0gbWFjaGluZXJ5IHRyYW5zbGF0ZXMgYSBndWVzdCB2aXJ0dWFsIGFkZHJlc3MgaW50byBhIHBoeXNpY2FsIGFkZHJlc3Mgb24gdGhlIGhvc3QuIFRoaXMgbGlrZWx5IGludm9sdmVzIHNvbWUgY2xldmVyIG1hbmlwdWxhdGlvbnMgYW5kIGNvbnNpZGVyYXRpb25zIGZvciBwZXJmb3JtYW5jZSwgdmlydHVhbCBtZW1vcnkgcHJvdGVjdGlvbiwgYW5kIGhvdyBpdCBhbGwgd29ya3MgdW5kZXIgdGhlIGhvb2QuIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTI4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzowMzozNS42NzE4MTc1NTZaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjcwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjcwOlxcdFxcdFxcdCAqXFxuIDI3MTpcXHRcXHRcXHQgKiBJdCBpcyBiZXR0ZXIgdG8gcmVjb3ZlciB0aGUgaHVnZSBwYWdlIG1hcHBpbmcgaW4gdGhlIGlvY3RsIGNvbnRleHQgd2hlblxcbiAyNzI6XFx0XFx0XFx0ICogZGlzYWJsaW5nIGRpcnR5IGxvZ2dpbmcuXFxuIDI3MzpcXHRcXHRcXHQgKlxcbiAyNzQ6XFx0XFx0XFx0ICogMykgcHRlcF9sZXZlbCA9PSBvdXRfbWFwLVxcdTAwM2VsZXZlbFxcbiAyNzU6XFx0XFx0XFx0ICogV2UgYWxyZWFkeSBoYXZlIHRoZSBwdGVwLCBqdXN0IHVwZGF0ZSB0aGUgcHRlIHByb3QgaWYgdGhlIHBmbiBub3QgY2hhbmdlLlxcbiAyNzY6XFx0XFx0XFx0ICogVGhlcmUgaXMgbm8gbmVlZCB0byBpbnZva2UgYGt2bV9yaXNjdl9nc3RhZ2Vfc2V0X3B0ZWAgYWdhaW4uXFxuIDI3NzpcXHRcXHRcXHQgKi9cXG4gMjc4OlxcdFxcdFxcdGlmIChwdGVwX2xldmVsIFxcdTAwM2Ugb3V0X21hcC1cXHUwMDNlbGV2ZWwpIHtcXG4gMjc5OlxcdFxcdFxcdFxcdGt2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZShnc3RhZ2UsIHBjYWNoZSwgZ3BhLFxcbiAyODA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIG91dF9tYXAtXFx1MDAzZWxldmVsLCB0cnVlKTtcXG4gMjgxOlxcdFxcdFxcdH0gZWxzZSBpZiAoQUxJR05fRE9XTihQRk5fUEhZUyhwdGVfcGZuKHB0ZXBfZ2V0KHB0ZXApKSksIHBhZ2Vfc2l6ZSkgPT0gaHBhKSB7XFxuIDI4MjpcXHRcXHRcXHRcXHRrdm1fcmlzY3ZfZ3N0YWdlX3VwZGF0ZV9wdGVfcHJvdChnc3RhZ2UsIHB0ZXBfbGV2ZWwsIGdwYSwgcHRlcCwgcHJvdCk7XFxuIDI4MzpcXHRcXHRcXHRcXHRvdXRfbWFwLVxcdTAwM2VhZGRyID0gQUxJR05fRE9XTihncGEsIHBhZ2Vfc2l6ZSk7XFxuIDI4NDpcXHRcXHRcXHRcXHRvdXRfbWFwLVxcdTAwM2VsZXZlbCA9IHB0ZXBfbGV2ZWw7XFxuIDI4NTpcXHRcXHRcXHRcXHRvdXRfbWFwLVxcdTAwM2VwdGUgPSBwdGVwX2dldChwdGVwKTtcXG4gMjg2OlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbiAyODc6XFx0XFx0XFx0fVxcbiAyODg6XFx0XFx0fVxcbiAyODk6XFx0XFxuIDI5MDpcXHRcXHRvdXRfbWFwLVxcdTAwM2VwdGUgPSBwZm5fcHRlKFBGTl9ET1dOKGhwYSksIHByb3QpO1xcbiAyOTE6XFx0XFx0b3V0X21hcC1cXHUwMDNlcHRlID0gcHRlX21rZGlydHkob3V0X21hcC1cXHUwMDNlcHRlKTtcXG4gMjkyOlxcdFxcbiAyOTM6XFx0XFx0cmV0dXJuIGt2bV9yaXNjdl9nc3RhZ2Vfc2V0X3B0ZShnc3RhZ2UsIHBjYWNoZSwgb3V0X21hcCk7XFxuIDI5NDpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjAzOjM1LjY3MTkxNTk1NloiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjcxNzQxMTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgb3V0X21hcGAgUGFyYW1ldGVyIGluIEtWTS1SSVNDViBHLVN0YWdlIE1hcHBpbmcqKlxuXG5Pa2F5LCBzbyBJIHNlZSBgb3V0X21hcGAgaXMgYmVpbmcgZmVkIGludG8gYGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2VgLiBUaGF0J3MgaW50ZXJlc3RpbmcuIFRoZSB3YXkgdGhlIGNvZGUncyBzdHJ1Y3R1cmVkLCBpdCBsb29rcyBsaWtlIGBvdXRfbWFwYCBpcyBhY3RpbmcgYXMgYm90aCBhbiBpbnB1dCAqYW5kKiBhbiBvdXRwdXQgcGFyYW1ldGVyIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBJIG5lZWQgdG8gY2xhcmlmeSB3aGF0J3MgYWN0dWFsbHkgaGFwcGVuaW5nIGhlcmUuIEdpdmVuIG15IGV4cGVyaWVuY2UsIHRoYXQncyBub3QgbmVjZXNzYXJpbHkgYSBiYWQgdGhpbmcsIGJ1dCBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgZ3Jhc3AgdGhlIGludGVudCBmdWxseS4gTGV0IG1lIHF1aWNrbHkgZXhhbWluZSB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIG9mIGBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlYCB0byB2ZXJpZnkgaG93IGl0IGhhbmRsZXMgYG91dF9tYXBgLiBUaGF0J2xsIGJlIGtleSB0byBmaWd1cmluZyBvdXQgaG93IHRoaXMgbWVtb3J5IG1hcHBpbmcgaXMgZnVuY3Rpb25pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzUyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzowMzozOS4zNDM2NjA2OTlaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMDIyODI3MDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaD01Nz1ib29sIGt2bV9yaXNjdl9nc3RhZ2VfdHJ5X3VwZGF0ZV9wdGUoc3RydWN0IGt2bV9nc3RhZ2UgKmdzdGFnZSwgdTMyIGxldmVsLFxcbi0tXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmgtNjAtXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmg6NjE6aW50IGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2Uoc3RydWN0IGt2bV9nc3RhZ2UgKmdzdGFnZSxcXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaC02Mi1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgKnBjYWNoZSxcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jPTE4Nj1zdGF0aWMgdm9pZCBrdm1fcmlzY3ZfZ3N0YWdlX3VwZGF0ZV9wdGVfcHJvdChzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLCB1MzIgbGV2ZWwsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYy0yMDYtXFxuYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmM6MjA3OmludCBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsXFxuYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmMtMjA4LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSAqcGNhY2hlLFxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vbW11LmM9NjIzPWludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03MzQtXFx0XFx0bWFya19wYWdlX2RpcnR5X2luX3Nsb3Qoa3ZtLCBtZW1zbG90LCBnZm4pO1xcbmFyY2gvcmlzY3Yva3ZtL21tdS5jOjczNTpcXHRcXHRyZXQgPSBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKFxcdTAwMjZnc3RhZ2UsIHBjYWNoZSwgZ3BhLCBoZm4gXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCxcXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03MzYtXFx0XFx0XFx0XFx0XFx0XFx0dm1hX3BhZ2VzaXplLCBmYWxzZSwgdHJ1ZSwgb3V0X21hcCk7XFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNzM3LVxcdH0gZWxzZSB7XFxuYXJjaC9yaXNjdi9rdm0vbW11LmM6NzM4OlxcdFxcdHJldCA9IGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2UoXFx1MDAyNmdzdGFnZSwgcGNhY2hlLCBncGEsIGhmbiBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZULFxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTczOS1cXHRcXHRcXHRcXHRcXHRcXHR2bWFfcGFnZXNpemUsIHRydWUsIHRydWUsIG91dF9tYXApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzowMzo0MS41NDU5NDgzNDFaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYyNzA1OTkyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSBnb2luZyB0byBwdWxsIHVwIGBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlYCBpbiBgYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNgLCBzcGVjaWZpY2FsbHkgc3RhcnRpbmcgYXQgbGluZSAyMDcuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGdzdGFnZSBtYXBwaW5nIHByb2Nlc3Mgd2l0aGluIHRoZSBLVk0vUklTQy1WIGFyY2hpdGVjdHVyZS4gSSdtIGludGVyZXN0ZWQgaW4gaG93IHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiBpcyBoYW5kbGluZyB0aGUgbWFwcGluZyBvZiBhIHBhZ2Ugd2l0aGluIHRoZSBndWVzdCBzdGFnZS4gTGV0J3Mgc2VlIHdoYXQncyBoYXBwZW5pbmcgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGxhcmdlciBjb250ZXh0IG9mIHZpcnR1YWwgbWVtb3J5IHRyYW5zbGF0aW9uIGFuZCB0aGUgZ3Vlc3QncyB2aWV3IG9mIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgZGV0YWlscyBhYm91dCBwYWdlIHRhYmxlIHdhbGtzLCBwZXJtaXNzaW9uIGNoZWNrcywgYW5kIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBob3N0J3MgcGh5c2ljYWwgbWVtb3J5LiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBSSVNDLVYgc3BlY2lmaWMgaW50cmljYWNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjM0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MDM6NDUuMTczMDEwODc1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwNyxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIwNzpcXHRpbnQga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLFxcbiAyMDg6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpwY2FjaGUsXFxuIDIwOTpcXHRcXHRcXHRcXHQgICAgICBncGFfdCBncGEsIHBoeXNfYWRkcl90IGhwYSwgdW5zaWduZWQgbG9uZyBwYWdlX3NpemUsXFxuIDIxMDpcXHRcXHRcXHRcXHQgICAgICBib29sIHBhZ2VfcmRvbmx5LCBib29sIHBhZ2VfZXhlYyxcXG4gMjExOlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgKm91dF9tYXApXFxuIDIxMjpcXHR7XFxuIDIxMzpcXHRcXHRib29sIGZvdW5kX2xlYWY7XFxuIDIxNDpcXHRcXHR1MzIgcHRlcF9sZXZlbDtcXG4gMjE1OlxcdFxcdHBncHJvdF90IHByb3Q7XFxuIDIxNjpcXHRcXHRwdGVfdCAqcHRlcDtcXG4gMjE3OlxcdFxcdGludCByZXQ7XFxuIDIxODpcXHRcXG4gMjE5OlxcdFxcdG91dF9tYXAtXFx1MDAzZWFkZHIgPSBncGE7XFxuIDIyMDpcXHRcXHRvdXRfbWFwLVxcdTAwM2VsZXZlbCA9IDA7XFxuIDIyMTpcXHRcXG4gMjIyOlxcdFxcdHJldCA9IGdzdGFnZV9wYWdlX3NpemVfdG9fbGV2ZWwoZ3N0YWdlLCBwYWdlX3NpemUsIFxcdTAwMjZvdXRfbWFwLVxcdTAwM2VsZXZlbCk7XFxuIDIyMzpcXHRcXHRpZiAocmV0KVxcbiAyMjQ6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMjI1OlxcdFxcbiAyMjY6XFx0XFx0LypcXG4gMjI3OlxcdFxcdCAqIEEgUklTQy1WIGltcGxlbWVudGF0aW9uIGNhbiBjaG9vc2UgdG8gZWl0aGVyOlxcbiAyMjg6XFx0XFx0ICogMSkgVXBkYXRlICdBJyBhbmQgJ0QnIFBURSBiaXRzIGluIGhhcmR3YXJlXFxuIDIyOTpcXHRcXHQgKiAyKSBHZW5lcmF0ZSBwYWdlIGZhdWx0IHdoZW4gJ0EnIGFuZC9vciAnRCcgYml0cyBhcmUgbm90IHNldFxcbiAyMzA6XFx0XFx0ICogICAgUFRFIHNvIHRoYXQgc29mdHdhcmUgY2FuIHVwZGF0ZSB0aGVzZSBiaXRzLlxcbiAyMzE6XFx0XFx0ICpcXG4gMjMyOlxcdFxcdCAqIFdlIHN1cHBvcnQgYm90aCBvcHRpb25zIG1lbnRpb25lZCBhYm92ZS4gVG8gYWNoaWV2ZSB0aGlzLCB3ZVxcbiAyMzM6XFx0XFx0ICogYWx3YXlzIHNldCAnQScgYW5kICdEJyBQVEUgYml0cyBhdCB0aW1lIG9mIGNyZWF0aW5nIEctc3RhZ2VcXG4gMjM0OlxcdFxcdCAqIG1hcHBpbmcuIFRvIHN1cHBvcnQgS1ZNIGRpcnR5IHBhZ2UgbG9nZ2luZyB3aXRoIGJvdGggb3B0aW9uc1xcbiAyMzU6XFx0XFx0ICogbWVudGlvbmVkIGFib3ZlLCB3ZSB3aWxsIHdyaXRlLXByb3RlY3QgRy1zdGFnZSBQVEVzIHRvIHRyYWNrXFxuIDIzNjpcXHRcXHQgKiBkaXJ0eSBwYWdlcy5cXG4gMjM3OlxcdFxcdCAqL1xcbiAyMzg6XFx0XFxuIDIzOTpcXHRcXHRpZiAocGFnZV9leGVjKSB7XFxuIDI0MDpcXHRcXHRcXHRpZiAocGFnZV9yZG9ubHkpXFxuIDI0MTpcXHRcXHRcXHRcXHRwcm90ID0gUEFHRV9SRUFEX0VYRUM7XFxuIDI0MjpcXHRcXHRcXHRlbHNlXFxuIDI0MzpcXHRcXHRcXHRcXHRwcm90ID0gUEFHRV9XUklURV9FWEVDO1xcbiAyNDQ6XFx0XFx0fSBlbHNlIHtcXG4gMjQ1OlxcdFxcdFxcdGlmIChwYWdlX3Jkb25seSlcXG4gMjQ2OlxcdFxcdFxcdFxcdHByb3QgPSBQQUdFX1JFQUQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjAzOjQ1LjE3MzA4ODM5NVoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTY1NDY5NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgYGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2VgIGZ1bmN0aW9uLCBmb2N1c2luZyBvbiB0aGUgbWFwcGluZyBzZXR1cDpcblxuKipNeSBQZXJzcGVjdGl2ZSBvbiB0aGUgTWFwcGluZyBQcm9jZXNzKipcblxuT2theSwgc28gSSBzZWUgdGhhdCB3ZSdyZSBpbml0aWFsbHkgc2V0dGluZyB1cCB0aGUgYWRkcmVzcyBtYXBwaW5nIHdpdGggYG91dF9tYXAtXHUwMDNlYWRkciA9IGdwYTtgIGFuZCBgb3V0X21hcC1cdTAwM2VsZXZlbCA9IDA7YC4gVGhpcyBzdWdnZXN0cyB3ZSdyZSBnZXR0aW5nIHRoZSBncm91bmQgcGh5c2ljYWwgYWRkcmVzcyAoR1BBKSBkaXJlY3RseSBhc3NvY2lhdGVkIHdpdGggYSBtYXAgZW50cnksIGFuZCBzdGFydGluZyBhdCB0aGUgdmVyeSBiYXNlIGxldmVsIG9mIHRoZSBwYWdlIHRhYmxlIGhpZXJhcmNoeS4gSSdkIGV4cGVjdCB0aGlzIGxldmVsIHRvIGJlIGEgYml0IGNvYXJzZSBhdCB0aGlzIHBvaW50LCBiZWZvcmUgYW55IG1vcmUgc3BlY2lmaWMgY29uZmlndXJhdGlvbi5cblxuVGhlbiwgdGhlIGNvZGUgY2FsbHMgYGdzdGFnZV9wYWdlX3NpemVfdG9fbGV2ZWxgLCBhbmQgKnRoYXQncyogd2hlcmUgdGhlIGNydWNpYWwgcGFydCBoYXBwZW5zLiBUaGlzIGltcGxpZXMgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGNvcnJlY3QgcGFnZSB0YWJsZSBsZXZlbCB0byB1c2UgYmFzZWQgb24gdGhlIHBhZ2Ugc2l6ZS4gSSdkIGJldCB0aGlzIGZ1bmN0aW9uIHRha2VzIGludG8gY29uc2lkZXJhdGlvbiBoYXJkd2FyZSBwYWdlIHRhYmxlIHN1cHBvcnQgKGUuZy4sIHNwZWNpZmljIHBhZ2Ugc2l6ZSBjYXBhYmlsaXRpZXMgb2YgdGhlIFJJU0MtViBhcmNoaXRlY3R1cmUpLCBhbmQgcG90ZW50aWFsbHkgYWxzbyBhbnkgZ3Vlc3QtY29uZmlndXJlZCBwYWdlIHNpemUgb3ZlcnJpZGVzIG9yIGNvbnN0cmFpbnRzLiBJbiBvdGhlciB3b3JkcywgaXQncyBtYWtpbmcgdGhlIGRlY2lzaW9uIG9uICpob3cqIGdyYW51bGFyIHRoZSBtYXBwaW5nIHNob3VsZCBiZSwgYW5kIHNldHMgdGhlIGFwcHJvcHJpYXRlIGBvdXRfbWFwLVx1MDAzZWxldmVsYC5cblxuRmluYWxseSwgYWZ0ZXIgYWxsIG9mIHRoYXQgbWFwcGluZyBzZXR1cCwgdGhlIGZ1bmN0aW9uIGNvbmNsdWRlcyB3aXRoIGFsbCB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHJlYWR5IHRvIGdvLiBJIHNlZSB0aGUgZmluYWwgY29uZmlndXJhdGlvbiBpcyBjb21wbGV0ZSBhdCB0aGlzIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjEyNCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MDM6NDkuMTM4NTYxOTU1WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMzMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDcsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNDc6XFx0XFx0XFx0ZWxzZVxcbiAyNDg6XFx0XFx0XFx0XFx0cHJvdCA9IFBBR0VfV1JJVEU7XFxuIDI0OTpcXHRcXHR9XFxuIDI1MDpcXHRcXG4gMjUxOlxcdFxcdGZvdW5kX2xlYWYgPSBrdm1fcmlzY3ZfZ3N0YWdlX2dldF9sZWFmKGdzdGFnZSwgZ3BhLCBcXHUwMDI2cHRlcCwgXFx1MDAyNnB0ZXBfbGV2ZWwpO1xcbiAyNTI6XFx0XFx0aWYgKGZvdW5kX2xlYWYpIHtcXG4gMjUzOlxcdFxcdFxcdC8qXFxuIDI1NDpcXHRcXHRcXHQgKiBwdGVwX2xldmVsIGlzIHRoZSBjdXJyZW50IGdzdGFnZSBtYXBwaW5nIGxldmVsIG9mIGFkZHIsIG91dF9tYXAtXFx1MDAzZWxldmVsXFxuIDI1NTpcXHRcXHRcXHQgKiBpcyB0aGUgcmVxdWlyZWQgbWFwcGluZyBsZXZlbCBkdXJpbmcgZmF1bHQgaGFuZGxpbmcuXFxuIDI1NjpcXHRcXHRcXHQgKlxcbiAyNTc6XFx0XFx0XFx0ICogMSkgcHRlcF9sZXZlbCBcXHUwMDNlIG91dF9tYXAtXFx1MDAzZWxldmVsXFxuIDI1ODpcXHRcXHRcXHQgKiBUaGlzIGhhcHBlbnMgd2hlbiBkaXJ0eSBsb2dnaW5nIGlzIGVuYWJsZWQgYW5kIGh1Z2UgcGFnZXMgYXJlIHVzZWQuXFxuIDI1OTpcXHRcXHRcXHQgKiBLVk0gbXVzdCB0cmFjayB0aGUgcGFnZXMgYXQgNEsgbGV2ZWwsIGFuZCBzcGxpdCB0aGUgaHVnZSBtYXBwaW5nXFxuIDI2MDpcXHRcXHRcXHQgKiBpbnRvIDRLIG1hcHBpbmdzLlxcbiAyNjE6XFx0XFx0XFx0ICpcXG4gMjYyOlxcdFxcdFxcdCAqIDIpIHB0ZXBfbGV2ZWwgXFx1MDAzYyBvdXRfbWFwLVxcdTAwM2VsZXZlbFxcbiAyNjM6XFx0XFx0XFx0ICogVGhpcyBoYXBwZW5zIHdoZW4gZGlydHkgbG9nZ2luZyBpcyBkaXNhYmxlZCBhbmQgaHVnZSBwYWdlcyBhcmUgdXNlZC5cXG4gMjY0OlxcdFxcdFxcdCAqIFRoZSBnc3RhZ2UgaXMgc3BsaXQgaW50byA0SyBtYXBwaW5ncywgYnV0IHRoZSBvdXRfbWFwIGxldmVsIGlzIG5vd1xcbiAyNjU6XFx0XFx0XFx0ICogYmFjayB0byB0aGUgaHVnZSBwYWdlIGxldmVsLiBJZ25vcmUgdGhlIG91dF9tYXAgbGV2ZWwgdGhpcyB0aW1lLCBhbmRcXG4gMjY2OlxcdFxcdFxcdCAqIGp1c3QgdXBkYXRlIHRoZSBwdGUgcHJvdCBoZXJlLiBPdGhlcndpc2UsIHdlIHdvdWxkIGZhbGwgYmFjayB0byBtYXBwaW5nXFxuIDI2NzpcXHRcXHRcXHQgKiB0aGUgZ3N0YWdlIGF0IGh1Z2UgcGFnZSBsZXZlbCBpbiBga3ZtX3Jpc2N2X2dzdGFnZV9zZXRfcHRlYCwgd2l0aCB0aGVcXG4gMjY4OlxcdFxcdFxcdCAqIG92ZXJoZWFkIG9mIGZyZWVpbmcgdGhlIHBhZ2UgdGFibGVzKG5vdCBzdXBwb3J0IG5vdyksIHdoaWNoIHdvdWxkIHNsb3dcXG4gMjY5OlxcdFxcdFxcdCAqIGRvd24gdGhlIHZDUFVzJyBwZXJmb3JtYW5jZS5cXG4gMjcwOlxcdFxcdFxcdCAqXFxuIDI3MTpcXHRcXHRcXHQgKiBJdCBpcyBiZXR0ZXIgdG8gcmVjb3ZlciB0aGUgaHVnZSBwYWdlIG1hcHBpbmcgaW4gdGhlIGlvY3RsIGNvbnRleHQgd2hlblxcbiAyNzI6XFx0XFx0XFx0ICogZGlzYWJsaW5nIGRpcnR5IGxvZ2dpbmcuXFxuIDI3MzpcXHRcXHRcXHQgKlxcbiAyNzQ6XFx0XFx0XFx0ICogMykgcHRlcF9sZXZlbCA9PSBvdXRfbWFwLVxcdTAwM2VsZXZlbFxcbiAyNzU6XFx0XFx0XFx0ICogV2UgYWxyZWFkeSBoYXZlIHRoZSBwdGVwLCBqdXN0IHVwZGF0ZSB0aGUgcHRlIHByb3QgaWYgdGhlIHBmbiBub3QgY2hhbmdlLlxcbiAyNzY6XFx0XFx0XFx0ICogVGhlcmUgaXMgbm8gbmVlZCB0byBpbnZva2UgYGt2bV9yaXNjdl9nc3RhZ2Vfc2V0X3B0ZWAgYWdhaW4uXFxuIDI3NzpcXHRcXHRcXHQgKi9cXG4gMjc4OlxcdFxcdFxcdGlmIChwdGVwX2xldmVsIFxcdTAwM2Ugb3V0X21hcC1cXHUwMDNlbGV2ZWwpIHtcXG4gMjc5OlxcdFxcdFxcdFxcdGt2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZShnc3RhZ2UsIHBjYWNoZSwgZ3BhLFxcbiAyODA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIG91dF9tYXAtXFx1MDAzZWxldmVsLCB0cnVlKTtcXG4gMjgxOlxcdFxcdFxcdH0gZWxzZSBpZiAoQUxJR05fRE9XTihQRk5fUEhZUyhwdGVfcGZuKHB0ZXBfZ2V0KHB0ZXApKSksIHBhZ2Vfc2l6ZSkgPT0gaHBhKSB7XFxuIDI4MjpcXHRcXHRcXHRcXHRrdm1fcmlzY3ZfZ3N0YWdlX3VwZGF0ZV9wdGVfcHJvdChnc3RhZ2UsIHB0ZXBfbGV2ZWwsIGdwYSwgcHRlcCwgcHJvdCk7XFxuIDI4MzpcXHRcXHRcXHRcXHRvdXRfbWFwLVxcdTAwM2VhZGRyID0gQUxJR05fRE9XTihncGEsIHBhZ2Vfc2l6ZSk7XFxuIDI4NDpcXHRcXHRcXHRcXHRvdXRfbWFwLVxcdTAwM2VsZXZlbCA9IHB0ZXBfbGV2ZWw7XFxuIDI4NTpcXHRcXHRcXHRcXHRvdXRfbWFwLVxcdTAwM2VwdGUgPSBwdGVwX2dldChwdGVwKTtcXG4gMjg2OlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbiAyODc6XFx0XFx0XFx0fVxcbiAyODg6XFx0XFx0fVxcbiAyODk6XFx0XFxuIDI5MDpcXHRcXHRvdXRfbWFwLVxcdTAwM2VwdGUgPSBwZm5fcHRlKFBGTl9ET1dOKGhwYSksIHByb3QpO1xcbiAyOTE6XFx0XFx0b3V0X21hcC1cXHUwMDNlcHRlID0gcHRlX21rZGlydHkob3V0X21hcC1cXHUwMDNlcHRlKTtcXG4gMjkyOlxcdFxcbiAyOTM6XFx0XFx0cmV0dXJuIGt2bV9yaXNjdl9nc3RhZ2Vfc2V0X3B0ZShnc3RhZ2UsIHBjYWNoZSwgb3V0X21hcCk7XFxuIDI5NDpcXHR9XFxuIDI5NTpcXHRcXG4gMjk2OlxcdHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtYWtlX2NoaWxkX3B0ZSh1bnNpZ25lZCBsb25nIGh1Z2VfcHRlLCBpbnQgaW5kZXgsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjAzOjQ5LjEzODc2ODYyNVoiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjI4MTMxNTIwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IElzc3VlcyBpbiBSSVNDLVYgS1ZNIFBSRV9GQVVMVF9NRU1PUlkgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gc3RlcHBpbmcgdGhyb3VnaCB0aGlzIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGZ1bmN0aW9uLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkFyZSB0aGVyZSBhbnkgdnVsbmVyYWJpbGl0aWVzIGhlcmUgY29uY2VybmluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIHRvIHVzZXIgc3BhY2U/XCIgSSBzZWUgYG91dF9tYXAtXHUwMDNlYWRkcmAsIGBvdXRfbWFwLVx1MDAzZWxldmVsYCwgYW5kIGBvdXRfbWFwLVx1MDAzZXB0ZWAgYmVpbmcgc2V0LCB3aGljaCBpbW1lZGlhdGVseSB0cmlnZ2VycyB0aGUgcXVlc3Rpb24sIFwiSXMgdGhpcyBwb3RlbnRpYWxseSBsZWFraW5nIGtlcm5lbCBpbmZvcm1hdGlvbj9cIlxuXG5CdXQgd2FpdC4gYG91dF9tYXBgIGlzIGEgbG9jYWwgdmFyaWFibGUgd2l0aGluIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLiBJdCdzIHVzZWQgaW50ZXJuYWxseSB0byBjYWxjdWxhdGUgYG1hcF9zaXplYCBhbmQgYGVuZGAuIFRoZSByZWxldmFudCBjb2RlIHNuaXBwZXQgbWFrZXMgdGhhdCBxdWl0ZSBjbGVhci4gSXQncyBub3QgY29waWVkIGJhY2sgdG8gdXNlciBzcGFjZSBkaXJlY3RseS4gVGhlIHJldHVybiB2YWx1ZSwgd2hpY2ggaXMgYSBsZW5ndGggY2FsY3VsYXRpb24gdXNpbmcgdGhvc2UgdmFsdWVzLCAqZG9lcyogbW9kaWZ5IGZpZWxkcyB3aXRoaW4gdGhlIGByYW5nZWAgc3RydWN0LCBzcGVjaWZpY2FsbHkgYHNpemVgIGFuZCBgZ3BhYCBpbiBga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAsIGJ1dCBpdCdzIGZ1bmRhbWVudGFsbHkganVzdCBhIGxlbmd0aC4gVGhlIGByYW5nZWAgc3RydWN0IGl0c2VsZiBpcyBoYW5kbGVkIGJ5IGBjb3B5X2Zyb21fdXNlcmAgaW4gdGhlIGNhbGxlci5cblxuU28sIEknbSB0aGlua2luZywgXCJObywgaXQgZG9lc24ndCBsb29rIGxpa2UgdGhlcmUncyBhbnkgZGlyZWN0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlIGZyb20gYG91dF9tYXBgIHRvIHVzZXIgc3BhY2UuXCIgVGhlIGByYW5nZWAgc3RydWN0IGNvbWVzIGZyb20gdXNlciBzcGFjZSwgYW5kIHdoaWxlIGl0cyBgc2l6ZWAgYW5kIGBncGFgIG1lbWJlcnMgYXJlIG1vZGlmaWVkLCB0aGUgcGFkZGluZyBpcyB1bnRvdWNoZWQsIGVjaG9pbmcgYmFjayB3aGF0IHRoZSB1c2VyIGluaXRpYWxseSBzdXBwbGllZC5cblxuSSBuZWVkIHRvIGJlIHRob3JvdWdoLCB0aG91Z2guIEkgYXNrIG15c2VsZiwgXCJJcyB0aGVyZSBhbm90aGVyIGxvY2F0aW9uIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGluIHBsYXk/XCIgSSBjb25zaWRlciBgb3V0X21hcGAgYWdhaW4uIEl0J3MgaW5pdGlhbGl6ZWQgdG8gYHsgMCB9YCwgYW5kIGBrdm1fcmlzY3ZfbW11X21hcGAgcG9wdWxhdGVzIGl0LiBFdmVuIGlmIHRoYXQgZnVuY3Rpb24gZGlkbid0IHBvcHVsYXRlIGV2ZXJ5IGZpZWxkLCB3aGljaCBzZWVtcyB1bmxpa2VseSwgaXQncyBpbml0aWFsaXplZCB0byB6ZXJvLCBhbmQgdGhlIHJldHVybiB2YWx1ZSBpcyB0aGUga2V5IGZhY3Rvci4gVGhlIGZ1bmN0aW9uJ3MgcmV0dXJuIHZhbHVlIGlzIHVzZWQgdG8gdXBkYXRlIGByYW5nZS1cdTAwM2VzaXplYCBhbmQgYHJhbmdlLVx1MDAzZWdwYWAsIGJ1dCB0aGF0J3MganVzdCBhIGxlbmd0aCwgZGVyaXZlZCBmcm9tIGludGVybmFsbHkgY2FsY3VsYXRlZCB2YWx1ZXMuXG5cbk5vdywgbGV0J3Mgd2lkZW4gdGhlIHNjb3BlLiBJIGxvb2sgYXQgYWxsIHRoZSBjaGFuZ2VkIGZpbGVzOiBgYXJjaC9yaXNjdi9rdm0vS2NvbmZpZ2AsIGBhcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuY2AsIGBhcmNoL3Jpc2N2L2t2bS9tbXUuY2AsIGBhcmNoL3Jpc2N2L2t2bS92bS5jYCwgYW5kIHRoZSByZWxldmFudCBzZWxmdGVzdHMuIFRoZSBjaGFuZ2VzIGFyZSBhbGwgcXVpdGUgdGFyZ2V0ZWQsIGZvY3VzaW5nIG9uIGltcGxlbWVudGluZyBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBzcGVjaWZpY2FsbHkgZm9yIFJJU0MtVi4gVGhlcmUgYXJlbid0IGFueSBuZXcgc3RydWN0cyBiZWluZyBpbnRyb2R1Y2VkIHRoYXQgYXJlICpjb3BpZWQqIHRvIHVzZXIgc3BhY2UuIFRoZSBgS1ZNX1BSRV9GQVVMVF9NRU1PUllgIGlvY3RsIGFscmVhZHkgaGFuZGxlcyB0aGUgdXNlciBzcGFjZSBjb3B5IGZvciB0aGUgZXhpc3RpbmcgYHJhbmdlYCBzdHJ1Y3QuIFRoZSBgcmFuZ2VgIHN0cnVjdCBpcyBmdWxseSBpbml0aWFsaXplZCBieSB0aGUgYGNvcHlfZnJvbV91c2VyYCBjYWxsLlxuXG5Pa2F5LCBsZXQncyBzdGVwIGJhY2sgYW5kIHN1bW1hcml6ZS4gYG91dF9tYXBgIGlzIGluaXRpYWxpemVkIHRvIHplcm8uIFRoZSBgcmFuZ2VgIHN0cnVjdCBpcyBjb3BpZWQgKmZyb20qIHVzZXIgc3BhY2UsIG5vdCB0aGUgb3RoZXIgd2F5IGFyb3VuZC4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgaW50cm9kdWNlZCB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gTm8gY29tcGxleCBhbGxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIHRoYXQgd291bGQgcG90ZW50aWFsbHkgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5UaGVyZWZvcmUsIG15IGFzc2Vzc21lbnQgaXMgdGhhdCBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGlzbid0IG5lY2Vzc2FyeSBoZXJlIHRvIGFkZHJlc3MgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBvdXQtb2YtYm91bmRzIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcywgdGhvdWdoIEknbSBub3Qgc2VlaW5nIGFueSBvYnZpb3VzIG9uZXMgYXQgdGhpcyBzdGFnZS4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgYGt2bV9yaXNjdl9nc3RhZ2VfbWFwcGluZ2Agc3RydWN0IGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQ4NywiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjA0OjAxLjQyMDA4NzYyOVoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU1MzQxMjgzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nIFxcXFx7XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2dzdGFnZS5oPTEyPXN0cnVjdCBrdm1fZ3N0YWdlIHtcXG4tLVxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2dzdGFnZS5oLTIwLVxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2dzdGFnZS5oOjIxOnN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcge1xcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2dzdGFnZS5oLTIyLVxcdGdwYV90IGFkZHI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjA0OjAzLjk3MzUwNjI0NloiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDMwMTI1NTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIHRob3VnaCB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmhgKipcblxuQWxyaWdodCwgSSdtIHRoaW5raW5nIGFib3V0IGRpZ2dpbmcgaW50byB0aGUgUklTQy1WIEtWTSBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSBga3ZtX2dzdGFnZS5oYCBoZWFkZXIgZmlsZS4gSXQncyBvZnRlbiB0aGUgcGxhY2UgdG8gZmluZCBjcnVjaWFsIGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gdGhlIGd1ZXN0IHN0YWdlLCBzbyB0aGF0J3Mgd2hlcmUgSSdtIGZvY3VzaW5nLiBMaW5lIDIxLCBpbiBwYXJ0aWN1bGFyLCBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludC4gSSdtIGhvcGluZyB0byBnZXQgYSBxdWljayBvdmVydmlldyBvZiBob3cgdGhlIEtWTSBoYW5kbGVzIGd1ZXN0IHN0YXRlLCBhZGRyZXNzIHRyYW5zbGF0aW9uLCBvciBwZXJoYXBzIHNvbWUgZnVuZGFtZW50YWwgZGF0YSBzdHJ1Y3R1cmVzIHJlbGF0ZWQgdG8gdGhlIGctc3RhZ2UuIERlcGVuZGluZyBvbiB0aGUgc29waGlzdGljYXRpb24gb2YgdGhlIFJJU0MtViBpbXBsZW1lbnRhdGlvbiwgaXQgY291bGQgYmUgYSBzaW1wbGUgc3RydWN0dXJlLCBhIGNvbXBsZXggc2V0IG9mIG1hY3Jvcywgb3IgcGVyaGFwcyBldmVuIGEgbm92ZWwgYXBwcm9hY2guIEknbGwgbmVlZCB0byBleGFtaW5lIHdoYXQncyBkZWNsYXJlZCB0aGVyZSB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIG92ZXJhbGwgZGVzaWduIGFuZCB3aGF0IGtpbmQgb2YgZGV0YWlscyBhcmUgaW1wb3J0YW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTM0MiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjA0OjA3LjQwMzYzNDQwM1oiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Nzg5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAyMCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyMDpcXHRcXG4gIDIxOlxcdHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcge1xcbiAgMjI6XFx0XFx0Z3BhX3QgYWRkcjtcXG4gIDIzOlxcdFxcdHB0ZV90IHB0ZTtcXG4gIDI0OlxcdFxcdHUzMiBsZXZlbDtcXG4gIDI1OlxcdH07XFxuICAyNjpcXHRcXG4gIDI3OlxcdCNpZmRlZiBDT05GSUdfNjRCSVRcXG4gIDI4OlxcdCNkZWZpbmUga3ZtX3Jpc2N2X2dzdGFnZV9pbmRleF9iaXRzXFx0OVxcbiAgMjk6XFx0I2Vsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MDQ6MDcuNDAzNzM0MjEzWiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMTQ1ODkxMjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgTWVtb3J5IFNhZmV0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBjb25jZXJuIHdhcywgYXMgYWx3YXlzLCB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzLCBwYXJ0aWN1bGFybHkgZ2l2ZW4gdGhlIGludGVyYWN0aW9uIHdpdGggdXNlciBzcGFjZS4gSSd2ZSBmb2N1c2VkIG9uIHR3byBrZXkgZGF0YSBzdHJ1Y3R1cmVzOiBga3ZtX2dzdGFnZV9tYXBwaW5nYCBhbmQgYGt2bV9wcmVfZmF1bHRfbWVtb3J5YC5cblxuRmlyc3QsIHRoZSBga3ZtX2dzdGFnZV9tYXBwaW5nYCBzdHJ1Y3QuIFRoaXMgaXMgdXNlZCBpbnRlcm5hbGx5IGluIHRoZSBSSVNDLVYgTU1VIGNvZGUuIEkgc2VlIHRoYXQgaXQncyBpbml0aWFsaXplZCB3aXRoIGB7IDAgfWAgd2l0aGluIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLiBTbywgYGFkZHJgLCBgcHRlYCwgYW5kIGBsZXZlbGAgYXJlIGFsbCB6ZXJvZWQgb3V0IGF0IHRoZSBzdGFydC4gVGhlbiwgYGt2bV9yaXNjdl9tbXVfbWFwYCBnZXRzIGEgY2hhbmNlIHRvIG1vZGlmeSB0aGVzZSwgYW5kIGV2ZW4gaWYgaXQgZGlkbid0LCB3ZSBhcmUgc3RhcnRpbmcgZnJvbSBhIGNsZWFuIHNsYXRlLiBObyByaXNrIHRoZXJlLlxuXG5OZXh0LCBJIGV4YW1pbmVkIGBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnlgLiBUaGlzIGlzIHdoZXJlIHRoZSB1c2VyIHNwYWNlIGludGVyYWN0aW9uIG9jY3VycywgdGhyb3VnaCB0aGUgYEtWTV9QUkVfRkFVTFRfTUVNT1JZYCBpb2N0bCBpbiBga3ZtX21haW4uY2AuIEhlcmUncyB0aGUgY3JpdGljYWwgYml0OiB0aGUgYHJhbmdlYCB2YXJpYWJsZSBvZiB0aGlzIHR5cGUgaXMgZnVsbHkgcG9wdWxhdGVkIGJ5IGBjb3B5X2Zyb21fdXNlcmAgZnJvbSB0aGUgdXNlci1wcm92aWRlZCBkYXRhLiBUaGUgY29kZSB0aGVuIG1vZGlmaWVzIGByYW5nZS5zaXplYCBhbmQgYHJhbmdlLmdwYWAgaW5zaWRlIGBrdm1fdmNwdV9wcmVfZmF1bHRfbWVtb3J5YC4gQW5kIGZpbmFsbHksIHRoZSBlbnRpcmUgYHJhbmdlYCBzdHJ1Y3QsIGluY2x1ZGluZyB0aGUgYHBhZGRpbmdgIGZpZWxkcywgaXMgY29waWVkIGJhY2sgdG8gdXNlciBzcGFjZSB1c2luZyBgY29weV90b191c2VyYC4gVGhlIHBhZGRpbmcgZmllbGRzIGFyZSBzaW1wbHkgZWNob2luZyB0aGUgdXNlcidzIGlucHV0LCB3aGljaCBpcyBhIGNvbW1vbiBhbmQgc2FmZSBwYXR0ZXJuIGZvciBpb2N0bHMuIFRoZXJlJ3Mgbm8ga2VybmVsIG1lbW9yeSBsZWFrIGhlcmUgYmVjYXVzZSB0aGUgY29udGVudHMgb2YgdGhlIHBhZGRpbmcgb3JpZ2luYXRlIGZyb20gdGhlIHVzZXIuXG5cbkxvb2tpbmcgYXQgdGhlIG92ZXJhbGwgY29udGV4dCwgdGhlIHBhdGNoIHNpbXBseSBlbmFibGVzIHRoZSBleGlzdGluZyBgS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZYCBmZWF0dXJlIGZvciBSSVNDLVYuIEl0IGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbiBwYXR0ZXJucyBvciBkYXRhIHN0cnVjdHVyZXMgdGhhdCB3b3VsZCByYWlzZSBhbGFybSBiZWxscy4gVGhlIHBhdGNoIGlzIHJlbGF0aXZlbHkgc2ltcGxlOyBpdCBpcyBqdXN0IHdpcmluZyB1cCBhbiBleGlzdGluZyBnZW5lcmljIEtWTSBmZWF0dXJlLlxuXG5CYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJJ20gY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnksIGluZm9ybWF0aW9uIGxlYWtzLCBvciBtZW1vcnkgY29ycnVwdGlvbi4gVGhlIGV4aXN0aW5nIEtBU0FOIGNoZWNrcyBhcmUgc3VmZmljaWVudCB0byBoYW5kbGUgYW55IHVuZm9yZXNlZW4gaXNzdWVzLiBTbywgSSB3aWxsIG1hcmsgdGhpcyBhcyBgTmVlZHNLTVNBTj1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NzU0LCJPdXRwdXRUb2tlbnMiOjI2MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjA0OjE5LjU0OTYyODM2OVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyB0aGUgYEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWWAgY2FwYWJpbGl0eSBmb3IgUklTQy1WIGJ5IGFkZGluZyBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBhbmQgd2lyaW5nIGl0IHVwIGluIHRoZSBNTVUuIFRoZSBvbmx5IGRhdGEgc3RydWN0dXJlIGludm9sdmVkIGluIHVzZXIgc3BhY2UgY29tbXVuaWNhdGlvbiBpcyBgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5YCwgd2hpY2ggaXMgaGFuZGxlZCBieSBnZW5lcmljIEtWTSBjb2RlIChgdmlydC9rdm0va3ZtX21haW4uY2ApLiBUaGUgZ2VuZXJpYyBjb2RlIGZ1bGx5IGluaXRpYWxpemVzIHRoZSBzdHJ1Y3QgdmlhIGBjb3B5X2Zyb21fdXNlcmAgYmVmb3JlIG1vZGlmeWluZyBpdHMgYHNpemVgIGFuZCBgZ3BhYCBmaWVsZHMgYW5kIGNvcHlpbmcgaXQgYmFjayB0byB1c2VyIHNwYWNlLiBBbnkgcGFkZGluZyBmaWVsZHMgc2ltcGx5IGVjaG8gYmFjayB0aGUgdXNlci1wcm92aWRlZCB2YWx1ZXMsIHByZXZlbnRpbmcgYW55IGtlcm5lbCBtZW1vcnkgaW5mby1sZWFrcy4gVGhlIGxvY2FsIHZhcmlhYmxlIGBvdXRfbWFwYCBvZiB0eXBlIGBzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nYCBpcyBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgKGA9IHsgMCB9YCkgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byBga3ZtX3Jpc2N2X21tdV9tYXBgLiBUaGVyZSBhcmUgbm8gbmV3IGNvbXBsZXggYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyB0aGUgYEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWWAgY2FwYWJpbGl0eSBmb3IgUklTQy1WIGJ5IGFkZGluZyBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBhbmQgd2lyaW5nIGl0IHVwIGluIHRoZSBNTVUuIFRoZSBvbmx5IGRhdGEgc3RydWN0dXJlIGludm9sdmVkIGluIHVzZXIgc3BhY2UgY29tbXVuaWNhdGlvbiBpcyBgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5YCwgd2hpY2ggaXMgaGFuZGxlZCBieSBnZW5lcmljIEtWTSBjb2RlIChgdmlydC9rdm0va3ZtX21haW4uY2ApLiBUaGUgZ2VuZXJpYyBjb2RlIGZ1bGx5IGluaXRpYWxpemVzIHRoZSBzdHJ1Y3QgdmlhIGBjb3B5X2Zyb21fdXNlcmAgYmVmb3JlIG1vZGlmeWluZyBpdHMgYHNpemVgIGFuZCBgZ3BhYCBmaWVsZHMgYW5kIGNvcHlpbmcgaXQgYmFjayB0byB1c2VyIHNwYWNlLiBBbnkgcGFkZGluZyBmaWVsZHMgc2ltcGx5IGVjaG8gYmFjayB0aGUgdXNlci1wcm92aWRlZCB2YWx1ZXMsIHByZXZlbnRpbmcgYW55IGtlcm5lbCBtZW1vcnkgaW5mby1sZWFrcy4gVGhlIGxvY2FsIHZhcmlhYmxlIGBvdXRfbWFwYCBvZiB0eXBlIGBzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nYCBpcyBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgKGA9IHsgMCB9YCkgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byBga3ZtX3Jpc2N2X21tdV9tYXBgLiBUaGVyZSBhcmUgbm8gbmV3IGNvbXBsZXggYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowgjcrb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-11 06:13:15 +0000 UTC FinishedAt: 2026-08-11 07:04:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "VIRTUALIZATION" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "VIRTUALIZATION" ], "series_id": "97eefc46-3553-43ac-be61-0262dcd6ce32" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_arch_vcpu_pre_fault_memory", "kvm_riscv_gstage_map_page" ], "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+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtWSVJUVUFMSVpBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyB0aGUgYEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWWAgY2FwYWJpbGl0eSBmb3IgUklTQy1WIGJ5IGFkZGluZyBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBhbmQgd2lyaW5nIGl0IHVwIGluIHRoZSBNTVUuIFRoZSBvbmx5IGRhdGEgc3RydWN0dXJlIGludm9sdmVkIGluIHVzZXIgc3BhY2UgY29tbXVuaWNhdGlvbiBpcyBgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5YCwgd2hpY2ggaXMgaGFuZGxlZCBieSBnZW5lcmljIEtWTSBjb2RlIChgdmlydC9rdm0va3ZtX21haW4uY2ApLiBUaGUgZ2VuZXJpYyBjb2RlIGZ1bGx5IGluaXRpYWxpemVzIHRoZSBzdHJ1Y3QgdmlhIGBjb3B5X2Zyb21fdXNlcmAgYmVmb3JlIG1vZGlmeWluZyBpdHMgYHNpemVgIGFuZCBgZ3BhYCBmaWVsZHMgYW5kIGNvcHlpbmcgaXQgYmFjayB0byB1c2VyIHNwYWNlLiBBbnkgcGFkZGluZyBmaWVsZHMgc2ltcGx5IGVjaG8gYmFjayB0aGUgdXNlci1wcm92aWRlZCB2YWx1ZXMsIHByZXZlbnRpbmcgYW55IGtlcm5lbCBtZW1vcnkgaW5mby1sZWFrcy4gVGhlIGxvY2FsIHZhcmlhYmxlIGBvdXRfbWFwYCBvZiB0eXBlIGBzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nYCBpcyBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgKGA9IHsgMCB9YCkgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byBga3ZtX3Jpc2N2X21tdV9tYXBgLiBUaGVyZSBhcmUgbm8gbmV3IGNvbXBsZXggYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGVuYWJsZXMgdGhlIEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWSBjYXBhYmlsaXR5IGFuZCBpdHMgY29ycmVzcG9uZGluZyBpb2N0bCAoS1ZNX1BSRV9GQVVMVF9NRU1PUlkpIGZvciBSSVNDLVYgS1ZNLiBJdCBpbXBsZW1lbnRzIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaGFuZGxlciBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBhbmQgbW9kaWZpZXMgYGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2VgIHRvIHJldHVybiBtYXBwaW5nIGluZm9ybWF0aW9uLiBUaGlzIGludHJvZHVjZXMgbmV3IHJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHRoZSBSSVNDLVYgS1ZNIHN1YnN5c3RlbSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBpb2N0bC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzowMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGIwYjYwYTBjNzlmM2MyMmY5YWY2ODc2ODg4MGQyNmNmYjI1MjI1MDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAwNzowMTo1OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnIGIvYXJjaC9yaXNjdi9rdm0vS2NvbmZpZ1xuaW5kZXggZWMyY2VlMGEzOWUwMS4uOGFjMjA5ZThhYzg3MCAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL0tjb25maWdcbkBAIC0yOCw2ICYjNDM7MjgsNyBAQCBjb25maWcgS1ZNXG4gXHRzZWxlY3QgS1ZNX0NPTU1PTlxuIFx0c2VsZWN0IEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxuIFx0c2VsZWN0IEtWTV9HRU5FUklDX0hBUkRXQVJFX0VOQUJMSU5HXG4mIzQzO1x0c2VsZWN0IEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcbiBcdHNlbGVjdCBLVk1fTU1JT1xuIFx0c2VsZWN0IFZJUlRfWEZFUl9UT19HVUVTVF9XT1JLXG4gXHRzZWxlY3QgU0NIRURfSU5GT1xuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jIGIvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNcbmluZGV4IGU1MDAyY2I5Y2JlZjEuLjZiZDhiOGZkNmNlYjIgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNcbkBAIC0yODAsNiAmIzQzOzI4MCw5IEBAIGludCBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsXG4gXHRcdFx0XHRcdFx0ICAgIG91dF9tYXAtXHUwMDNlbGV2ZWwsIHRydWUpO1xuIFx0XHR9IGVsc2UgaWYgKEFMSUdOX0RPV04oUEZOX1BIWVMocHRlX3BmbihwdGVwX2dldChwdGVwKSkpLCBwYWdlX3NpemUpID09IGhwYSkge1xuIFx0XHRcdGt2bV9yaXNjdl9nc3RhZ2VfdXBkYXRlX3B0ZV9wcm90KGdzdGFnZSwgcHRlcF9sZXZlbCwgZ3BhLCBwdGVwLCBwcm90KTtcbiYjNDM7XHRcdFx0b3V0X21hcC1cdTAwM2VhZGRyID0gQUxJR05fRE9XTihncGEsIHBhZ2Vfc2l6ZSk7XG4mIzQzO1x0XHRcdG91dF9tYXAtXHUwMDNlbGV2ZWwgPSBwdGVwX2xldmVsO1xuJiM0MztcdFx0XHRvdXRfbWFwLVx1MDAzZXB0ZSA9IHB0ZXBfZ2V0KHB0ZXApO1xuIFx0XHRcdHJldHVybiAwO1xuIFx0XHR9XG4gXHR9XG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vbW11LmMgYi9hcmNoL3Jpc2N2L2t2bS9tbXUuY1xuaW5kZXggNjAzNWI1ZWM5NTAzOS4uYzk2ZTIxNzQwYzkxMyAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL21tdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS9tbXUuY1xuQEAgLTc0OCw2ICYjNDM7NzQ4LDM5IEBAIGludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuJiM0MztcdFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyBvdXRfbWFwID0geyAwIH07XG4mIzQzO1x0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG1hcF9zaXplO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaHZhO1xuJiM0MztcdGdwYV90IGVuZDtcbiYjNDM7XHRnZm5fdCBnZm47XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0Z2ZuID0gZ3BhX3RvX2dmbihyYW5nZS1cdTAwM2VncGEpO1xuJiM0MztcdG1lbXNsb3QgPSBrdm1fdmNwdV9nZm5fdG9fbWVtc2xvdCh2Y3B1LCBnZm4pO1xuJiM0MztcdGlmICghbWVtc2xvdClcbiYjNDM7XHRcdHJldHVybiAtRU5PRU5UO1xuJiM0MztcbiYjNDM7XHRodmEgPSBnZm5fdG9faHZhX21lbXNsb3RfcHJvdChtZW1zbG90LCBnZm4sIE5VTEwpO1xuJiM0MztcdGlmIChrdm1faXNfZXJyb3JfaHZhKGh2YSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0VOVDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0ga3ZtX3Jpc2N2X21tdV9tYXAodmNwdSwgbWVtc2xvdCwgcmFuZ2UtXHUwMDNlZ3BhLCBodmEsIGZhbHNlLCBcdTAwMjZvdXRfbWFwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwdGVfdmFsKG91dF9tYXAucHRlKSlcbiYjNDM7XHRcdHJldHVybiAtRUFHQUlOO1xuJiM0MztcbiYjNDM7XHRtYXBfc2l6ZSA9IFBBR0VfU0laRSBcdTAwM2NcdTAwM2MgKG91dF9tYXAubGV2ZWwgKiBrdm1fcmlzY3ZfZ3N0YWdlX2luZGV4X2JpdHMpO1xuJiM0MztcdGVuZCA9IEFMSUdOX0RPV04ocmFuZ2UtXHUwMDNlZ3BhLCBtYXBfc2l6ZSkgJiM0MzsgbWFwX3NpemU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtaW5fdCh1NjQsIHJhbmdlLVx1MDAzZXNpemUsIGVuZCAtIHJhbmdlLVx1MDAzZWdwYSk7XG4mIzQzO31cbiYjNDM7XG4gaW50IGt2bV9yaXNjdl9tbXVfYWxsb2NfcGdkKHN0cnVjdCBrdm0gKmt2bSlcbiB7XG4gXHRzdHJ1Y3QgcGFnZSAqcGdkX3BhZ2U7XG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vdm0uYyBiL2FyY2gvcmlzY3Yva3ZtL3ZtLmNcbmluZGV4IGE5ZjA4M2ZlZWI3NjcuLjU4NTAwYTE5YjMzYmQgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS92bS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS92bS5jXG5AQCAtMTg3LDYgJiM0MzsxODcsNyBAQCBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxuIFx0Y2FzZSBLVk1fQ0FQX01QX1NUQVRFOlxuIFx0Y2FzZSBLVk1fQ0FQX0lNTUVESUFURV9FWElUOlxuIFx0Y2FzZSBLVk1fQ0FQX1NFVF9HVUVTVF9ERUJVRzpcbiYjNDM7XHRjYXNlIEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWTpcbiBcdFx0ciA9IDE7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBLVk1fQ0FQX05SX1ZDUFVTOlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG5pbmRleCA2ZmMzNGU5YmY4ZTFiLi5hYzY0YWM5MmZkNGIwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxuQEAgLTIyNSw2ICYjNDM7MjI1LDcgQEAgVEVTVF9HRU5fUFJPR1NfcmlzY3YgJiM0Mzs9IGNvYWxlc2NlZF9pb190ZXN0XG4gVEVTVF9HRU5fUFJPR1NfcmlzY3YgJiM0Mzs9IGRpcnR5X2xvZ19wZXJmX3Rlc3RcbiBURVNUX0dFTl9QUk9HU19yaXNjdiAmIzQzOz0gZ2V0LXJlZy1saXN0XG4gVEVTVF9HRU5fUFJPR1NfcmlzY3YgJiM0Mzs9IG1tdV9zdHJlc3NfdGVzdFxuJiM0MztURVNUX0dFTl9QUk9HU19yaXNjdiAmIzQzOz0gcHJlX2ZhdWx0X21lbW9yeV90ZXN0XG4gVEVTVF9HRU5fUFJPR1NfcmlzY3YgJiM0Mzs9IHJzZXFfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICYjNDM7PSBzdGVhbF90aW1lXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaFxuaW5kZXggZTNhY2YyYWU5ODgxZS4uNzA0ODdjOGVkMTU1MyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaFxuQEAgLTEyLDYgJiM0MzsxMiw5IEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3Zkc28vcHJvY2Vzc29yLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtrdm1fdXRpbC5oXCYjMzQ7XG4gXG4mIzQzOyNkZWZpbmUgUEFHRV9TSElGVFx0XHQxMlxuJiM0MzsjZGVmaW5lIFBBR0VfU0laRVx0XHRCSVRfVUxMKFBBR0VfU0hJRlQpXG4mIzQzO1xuICNkZWZpbmUgSU5TTl9PUENPREVfTUFTS1x0MHgwMDdjXG4gI2RlZmluZSBJTlNOX09QQ09ERV9TSElGVFx0MlxuICNkZWZpbmUgSU5TTl9PUENPREVfU1lTVEVNXHQyOFxuQEAgLTEyNyw2ICYjNDM7MTMwLDkgQEAgdm9pZCB2bV9pbnN0YWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHN0cnVjdCBrdm1fdm0gKnZtLCBpbnQgdmVjdG9yLCBleGNlcHRpb25faGFuZGxcbiBcbiB2b2lkIHZtX2luc3RhbGxfaW50ZXJydXB0X2hhbmRsZXIoc3RydWN0IGt2bV92bSAqdm0sIGV4Y2VwdGlvbl9oYW5kbGVyX2ZuIGhhbmRsZXIpO1xuIFxuJiM0MzsvKiBMNCBpbmRleCBCaXRbNTY6NDhdICovXG4mIzQzOyNkZWZpbmUgUEdUQkxfTDRfSU5ERVhfTUFTS1x0XHRcdDB4MDFGRjAwMDAwMDAwMDAwMFVMTFxuJiM0MzsjZGVmaW5lIFBHVEJMX0w0X0lOREVYX1NISUZUXHRcdFx0NDhcbiAvKiBMMyBpbmRleCBCaXRbNDc6MzldICovXG4gI2RlZmluZSBQR1RCTF9MM19JTkRFWF9NQVNLXHRcdFx0MHgwMDAwRkY4MDAwMDAwMDAwVUxMXG4gI2RlZmluZSBQR1RCTF9MM19JTkRFWF9TSElGVFx0XHRcdDM5XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmNcbmluZGV4IGRlZDU0MjlmMzQ0ODMuLmI0ZDQxYTQwNzU1MzYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXG5AQCAtNDMsNiAmIzQzOzQzLDcgQEAgc3RhdGljIHU2NCBwdGVfaW5kZXhfbWFza1tdID0ge1xuIFx0UEdUQkxfTDFfSU5ERVhfTUFTSyxcbiBcdFBHVEJMX0wyX0lOREVYX01BU0ssXG4gXHRQR1RCTF9MM19JTkRFWF9NQVNLLFxuJiM0MztcdFBHVEJMX0w0X0lOREVYX01BU0ssXG4gfTtcbiBcbiBzdGF0aWMgdTMyIHB0ZV9pbmRleF9zaGlmdFtdID0ge1xuQEAgLTUwLDYgJiM0Mzs1MSw3IEBAIHN0YXRpYyB1MzIgcHRlX2luZGV4X3NoaWZ0W10gPSB7XG4gXHRQR1RCTF9MMV9JTkRFWF9TSElGVCxcbiBcdFBHVEJMX0wyX0lOREVYX1NISUZULFxuIFx0UEdUQkxfTDNfSU5ERVhfU0hJRlQsXG4mIzQzO1x0UEdUQkxfTDRfSU5ERVhfU0hJRlQsXG4gfTtcbiBcbiBzdGF0aWMgdTY0IHB0ZV9pbmRleChzdHJ1Y3Qga3ZtX3ZtICp2bSwgZ3ZhX3QgZ3ZhLCBpbnQgbGV2ZWwpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jXG5pbmRleCBhMGZjYWUzY2I3YThiLi42ZWViZjA1MjQ2NzM2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmNcbkBAIC04LDYgJiM0Mzs4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zaXplcy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjdGVzdF91dGlsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZ3Vlc3RfbW9kZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2t2bV91dGlsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nwcm9jZXNzb3IuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuQEAgLTIxOSw2ICYjNDM7MjIwLDggQEAgc3RhdGljIHZvaWQgdGVzdF9wcmVfZmF1bHRfbWVtb3J5KHVuc2lnbmVkIGxvbmcgdm1fdHlwZSwgYm9vbCBwcml2YXRlKVxuIFxuIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4ge1xuJiM0MztcdGd1ZXN0X21vZGVzX2FwcGVuZF9kZWZhdWx0KCk7XG4mIzQzO1xuIFx0VEVTVF9SRVFVSVJFKGt2bV9jaGVja19jYXAoS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZKSk7XG4gXG4gXHR0ZXN0X3ByZV9mYXVsdF9tZW1vcnkoMCwgZmFsc2UpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjAyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7VklSVFVBTElaQVRJT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkmIzM0OywKICAgICYjMzQ7a3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBlbmFibGVzIHRoZSBLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUlkgY2FwYWJpbGl0eSBhbmQgaXRzIGNvcnJlc3BvbmRpbmcgaW9jdGwgKEtWTV9QUkVfRkFVTFRfTUVNT1JZKSBmb3IgUklTQy1WIEtWTS4gSXQgaW1wbGVtZW50cyB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGhhbmRsZXIgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgYW5kIG1vZGlmaWVzIGBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlYCB0byByZXR1cm4gbWFwcGluZyBpbmZvcm1hdGlvbi4gVGhpcyBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUgY29kZSBwYXRocyBpbiB0aGUgUklTQy1WIEtWTSBzdWJzeXN0ZW0gdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgaW9jdGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiMGI2MGEwYzc5ZjNjMjJmOWFmNjg3Njg4ODBkMjZjZmIyNTIyNTAyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTEgMDc6MDE6NTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnIGIvYXJjaC9yaXNjdi9rdm0vS2NvbmZpZwppbmRleCBlYzJjZWUwYTM5ZTAxLi44YWMyMDllOGFjODcwIDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL0tjb25maWcKQEAgLTI4LDYgJiM0MzsyOCw3IEBAIGNvbmZpZyBLVk0KIAlzZWxlY3QgS1ZNX0NPTU1PTgogCXNlbGVjdCBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1QKIAlzZWxlY3QgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkcKJiM0MzsJc2VsZWN0IEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUlkKIAlzZWxlY3QgS1ZNX01NSU8KIAlzZWxlY3QgVklSVF9YRkVSX1RPX0dVRVNUX1dPUksKIAlzZWxlY3QgU0NIRURfSU5GTwpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmMgYi9hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYwppbmRleCBlNTAwMmNiOWNiZWYxLi42YmQ4YjhmZDZjZWIyIDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYwpAQCAtMjgwLDYgJiM0MzsyODAsOSBAQCBpbnQga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLAogCQkJCQkJICAgIG91dF9tYXAtJmd0O2xldmVsLCB0cnVlKTsKIAkJfSBlbHNlIGlmIChBTElHTl9ET1dOKFBGTl9QSFlTKHB0ZV9wZm4ocHRlcF9nZXQocHRlcCkpKSwgcGFnZV9zaXplKSA9PSBocGEpIHsKIAkJCWt2bV9yaXNjdl9nc3RhZ2VfdXBkYXRlX3B0ZV9wcm90KGdzdGFnZSwgcHRlcF9sZXZlbCwgZ3BhLCBwdGVwLCBwcm90KTsKJiM0MzsJCQlvdXRfbWFwLSZndDthZGRyID0gQUxJR05fRE9XTihncGEsIHBhZ2Vfc2l6ZSk7CiYjNDM7CQkJb3V0X21hcC0mZ3Q7bGV2ZWwgPSBwdGVwX2xldmVsOwomIzQzOwkJCW91dF9tYXAtJmd0O3B0ZSA9IHB0ZXBfZ2V0KHB0ZXApOwogCQkJcmV0dXJuIDA7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9tbXUuYyBiL2FyY2gvcmlzY3Yva3ZtL21tdS5jCmluZGV4IDYwMzViNWVjOTUwMzkuLmM5NmUyMTc0MGM5MTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3Yva3ZtL21tdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL21tdS5jCkBAIC03NDgsNiAmIzQzOzc0OCwzOSBAQCBpbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LAogCXJldHVybiByZXQ7CiB9CiAKJiM0Mztsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiYjNDM7CQkJCSAgICBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyBvdXRfbWFwID0geyAwIH07CiYjNDM7CXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3Q7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbWFwX3NpemU7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaHZhOwomIzQzOwlncGFfdCBlbmQ7CiYjNDM7CWdmbl90IGdmbjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZ2ZuID0gZ3BhX3RvX2dmbihyYW5nZS0mZ3Q7Z3BhKTsKJiM0MzsJbWVtc2xvdCA9IGt2bV92Y3B1X2dmbl90b19tZW1zbG90KHZjcHUsIGdmbik7CiYjNDM7CWlmICghbWVtc2xvdCkKJiM0MzsJCXJldHVybiAtRU5PRU5UOwomIzQzOwomIzQzOwlodmEgPSBnZm5fdG9faHZhX21lbXNsb3RfcHJvdChtZW1zbG90LCBnZm4sIE5VTEwpOwomIzQzOwlpZiAoa3ZtX2lzX2Vycm9yX2h2YShodmEpKQomIzQzOwkJcmV0dXJuIC1FTk9FTlQ7CiYjNDM7CiYjNDM7CXJldCA9IGt2bV9yaXNjdl9tbXVfbWFwKHZjcHUsIG1lbXNsb3QsIHJhbmdlLSZndDtncGEsIGh2YSwgZmFsc2UsICZhbXA7b3V0X21hcCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAoIXB0ZV92YWwob3V0X21hcC5wdGUpKQomIzQzOwkJcmV0dXJuIC1FQUdBSU47CiYjNDM7CiYjNDM7CW1hcF9zaXplID0gUEFHRV9TSVpFICZsdDsmbHQ7IChvdXRfbWFwLmxldmVsICoga3ZtX3Jpc2N2X2dzdGFnZV9pbmRleF9iaXRzKTsKJiM0MzsJZW5kID0gQUxJR05fRE9XTihyYW5nZS0mZ3Q7Z3BhLCBtYXBfc2l6ZSkgJiM0MzsgbWFwX3NpemU7CiYjNDM7CiYjNDM7CXJldHVybiBtaW5fdCh1NjQsIHJhbmdlLSZndDtzaXplLCBlbmQgLSByYW5nZS0mZ3Q7Z3BhKTsKJiM0Mzt9CiYjNDM7CiBpbnQga3ZtX3Jpc2N2X21tdV9hbGxvY19wZ2Qoc3RydWN0IGt2bSAqa3ZtKQogewogCXN0cnVjdCBwYWdlICpwZ2RfcGFnZTsKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3ZtLmMgYi9hcmNoL3Jpc2N2L2t2bS92bS5jCmluZGV4IGE5ZjA4M2ZlZWI3NjcuLjU4NTAwYTE5YjMzYmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3Yva3ZtL3ZtLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rdm0vdm0uYwpAQCAtMTg3LDYgJiM0MzsxODcsNyBAQCBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KQogCWNhc2UgS1ZNX0NBUF9NUF9TVEFURToKIAljYXNlIEtWTV9DQVBfSU1NRURJQVRFX0VYSVQ6CiAJY2FzZSBLVk1fQ0FQX1NFVF9HVUVTVF9ERUJVRzoKJiM0MzsJY2FzZSBLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUlk6CiAJCXIgPSAxOwogCQlicmVhazsKIAljYXNlIEtWTV9DQVBfTlJfVkNQVVM6CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bQppbmRleCA2ZmMzNGU5YmY4ZTFiLi5hYzY0YWM5MmZkNGIwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0KQEAgLTIyNSw2ICYjNDM7MjI1LDcgQEAgVEVTVF9HRU5fUFJPR1NfcmlzY3YgJiM0Mzs9IGNvYWxlc2NlZF9pb190ZXN0CiBURVNUX0dFTl9QUk9HU19yaXNjdiAmIzQzOz0gZGlydHlfbG9nX3BlcmZfdGVzdAogVEVTVF9HRU5fUFJPR1NfcmlzY3YgJiM0Mzs9IGdldC1yZWctbGlzdAogVEVTVF9HRU5fUFJPR1NfcmlzY3YgJiM0Mzs9IG1tdV9zdHJlc3NfdGVzdAomIzQzO1RFU1RfR0VOX1BST0dTX3Jpc2N2ICYjNDM7PSBwcmVfZmF1bHRfbWVtb3J5X3Rlc3QKIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICYjNDM7PSByc2VxX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICYjNDM7PSBzdGVhbF90aW1lCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmgKaW5kZXggZTNhY2YyYWU5ODgxZS4uNzA0ODdjOGVkMTU1MyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmgKQEAgLTEyLDYgJiM0MzsxMiw5IEBACiAjaW5jbHVkZSAmbHQ7YXNtL3Zkc28vcHJvY2Vzc29yLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2t2bV91dGlsLmgmIzM0OwogCiYjNDM7I2RlZmluZSBQQUdFX1NISUZUCQkxMgomIzQzOyNkZWZpbmUgUEFHRV9TSVpFCQlCSVRfVUxMKFBBR0VfU0hJRlQpCiYjNDM7CiAjZGVmaW5lIElOU05fT1BDT0RFX01BU0sJMHgwMDdjCiAjZGVmaW5lIElOU05fT1BDT0RFX1NISUZUCTIKICNkZWZpbmUgSU5TTl9PUENPREVfU1lTVEVNCTI4CkBAIC0xMjcsNiAmIzQzOzEzMCw5IEBAIHZvaWQgdm1faW5zdGFsbF9leGNlcHRpb25faGFuZGxlcihzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IHZlY3RvciwgZXhjZXB0aW9uX2hhbmRsCiAKIHZvaWQgdm1faW5zdGFsbF9pbnRlcnJ1cHRfaGFuZGxlcihzdHJ1Y3Qga3ZtX3ZtICp2bSwgZXhjZXB0aW9uX2hhbmRsZXJfZm4gaGFuZGxlcik7CiAKJiM0MzsvKiBMNCBpbmRleCBCaXRbNTY6NDhdICovCiYjNDM7I2RlZmluZSBQR1RCTF9MNF9JTkRFWF9NQVNLCQkJMHgwMUZGMDAwMDAwMDAwMDAwVUxMCiYjNDM7I2RlZmluZSBQR1RCTF9MNF9JTkRFWF9TSElGVAkJCTQ4CiAvKiBMMyBpbmRleCBCaXRbNDc6MzldICovCiAjZGVmaW5lIFBHVEJMX0wzX0lOREVYX01BU0sJCQkweDAwMDBGRjgwMDAwMDAwMDBVTEwKICNkZWZpbmUgUEdUQkxfTDNfSU5ERVhfU0hJRlQJCQkzOQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmMKaW5kZXggZGVkNTQyOWYzNDQ4My4uYjRkNDFhNDA3NTUzNiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jCkBAIC00Myw2ICYjNDM7NDMsNyBAQCBzdGF0aWMgdTY0IHB0ZV9pbmRleF9tYXNrW10gPSB7CiAJUEdUQkxfTDFfSU5ERVhfTUFTSywKIAlQR1RCTF9MMl9JTkRFWF9NQVNLLAogCVBHVEJMX0wzX0lOREVYX01BU0ssCiYjNDM7CVBHVEJMX0w0X0lOREVYX01BU0ssCiB9OwogCiBzdGF0aWMgdTMyIHB0ZV9pbmRleF9zaGlmdFtdID0gewpAQCAtNTAsNiAmIzQzOzUxLDcgQEAgc3RhdGljIHUzMiBwdGVfaW5kZXhfc2hpZnRbXSA9IHsKIAlQR1RCTF9MMV9JTkRFWF9TSElGVCwKIAlQR1RCTF9MMl9JTkRFWF9TSElGVCwKIAlQR1RCTF9MM19JTkRFWF9TSElGVCwKJiM0MzsJUEdUQkxfTDRfSU5ERVhfU0hJRlQsCiB9OwogCiBzdGF0aWMgdTY0IHB0ZV9pbmRleChzdHJ1Y3Qga3ZtX3ZtICp2bSwgZ3ZhX3QgZ3ZhLCBpbnQgbGV2ZWwpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmMKaW5kZXggYTBmY2FlM2NiN2E4Yi4uNmVlYmYwNTI0NjczNiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuYwpAQCAtOCw2ICYjNDM7OCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc2l6ZXMuaCZndDsKIAogI2luY2x1ZGUgJmx0O3Rlc3RfdXRpbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtndWVzdF9tb2Rlcy5oJmd0OwogI2luY2x1ZGUgJmx0O2t2bV91dGlsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7cHJvY2Vzc29yLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7cHRocmVhZC5oJmd0OwpAQCAtMjE5LDYgJiM0MzsyMjAsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3ByZV9mYXVsdF9tZW1vcnkodW5zaWduZWQgbG9uZyB2bV90eXBlLCBib29sIHByaXZhdGUpCiAKIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7CiYjNDM7CWd1ZXN0X21vZGVzX2FwcGVuZF9kZWZhdWx0KCk7CiYjNDM7CiAJVEVTVF9SRVFVSVJFKGt2bV9jaGVja19jYXAoS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZKSk7CiAKIAl0ZXN0X3ByZV9mYXVsdF9tZW1vcnkoMCwgZmFsc2UpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzgwCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUklTQy1WIEtWTSBQcmUtRmF1bHQgTWVtb3J5IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBSSVNDLVYgS1ZNIHRoYXQmIzM5O3MgYWRkaW5nIHN1cHBvcnQgZm9yIGBLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUllgLiBJdCBsb29rcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9uIHRoZSBzdXJmYWNlLiBXZSYjMzk7cmUgbW9kaWZ5aW5nIGBLY29uZmlnYCB0byBzZWxlY3QgYEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllgLCB3aGljaCBtYWtlcyBzZW5zZTsgdGhpcyBlbmFibGVzIHRoZSBnZW5lcmljIHByZS1mYXVsdGluZyBtZWNoYW5pc20uIFRoZW4gdGhlcmUgYXJlIGNoYW5nZXMgaW4gYGdzdGFnZS5jYCB0byBoYW5kbGUgbWFwcGluZywgYG1tdS5jYCB3aGljaCBhY3R1YWxseSBhZGRzIHRoZSBjb3JlIGZ1bmN0aW9uIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLCBhbmQgYHZtLmNgIHRvIGFkdmVydGlzZSB0aGUgY2FwYWJpbGl0eS4gUGx1cywgdGhleSYjMzk7dmUgaW5jbHVkZWQgYSBzZWxmLXRlc3QuIFNvbGlkLgoKVGhpcyBjbGVhcmx5IGludHJvZHVjZXMgYSBuZXcgY2FwYWJpbGl0eSwgYEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWWAsIGFuZCB0aGUgYXNzb2NpYXRlZCBgS1ZNX1BSRV9GQVVMVF9NRU1PUllgIGlvY3RsIGZvciB0aGUgdkNQVS4gRnVuY3Rpb25hbGx5IHNvdW5kLCB0aGF0JiMzOTtzIGdvb2QuCgpUaGUgbmV4dCB0aG91Z2h0IGlzLCBjYW4gdGhpcyBiZSBlZmZlY3RpdmVseSB0ZXN0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzPyBPZiBjb3Vyc2UsIHRoaXMgaXMgS1ZNIGNvZGUuIFN5emthbGxlciBpcyB0aGUgcHJpbWFyeSBmdXp6aW5nIHRvb2wgdGhhdCBjb21lcyB0byBtaW5kLCBhbmQgd2hpbGUgaXQgaGVhdmlseSB0YXJnZXRzIHg4Nl82NCwgaXQgKmRvZXMqIGhhdmUgc29tZSBzdXBwb3J0IGZvciBBUk02NCBhbmQgUklTQy1WLiBXYWl0LCBpdCAqZG9lcyogc3VwcG9ydCBSSVNDLVY2NCwgZ3JlYXQuIE5vdywgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIEl0IGxvb2tzIGxpa2Ugd2UganVzdCBuZWVkIGBDT05GSUdfS1ZNYCwgd2hpY2ggaXMgc3RhbmRhcmQgZm9yIEtWTSBndWVzdHMuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZHJpbGwgZG93bi4gVGhlIGtleSBmdW5jdGlvbiBpcyBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IGl0IGluIGBhcmNoL3Jpc2N2L2t2bS9tbXUuY2AuIEl0IGxvb2tzIGxpa2UgaXQgY2FsbHMgYGt2bV9yaXNjdl9tbXVfbWFwYCB0byBkbyB0aGUgYWN0dWFsIG1hcHBpbmcuCgpUbyBiZSB0aG9yb3VnaCwgSSYjMzk7bSBnb2luZyB0byBsZXZlcmFnZSBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAgdG8gc2VlIGlmIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGlzIGV2ZXIgY2FsbGVkIGRpcmVjdGx5IGZyb20gZ2VuZXJpYyBLVk0gY29kZS4gVGhpcyB3aWxsIGhlbHAgY29uZmlybSB0aGlzIHNwZWNpZmljIFJJU0MtViBjb2RlIHBhdGguIEkgd2FudCB0byBzZWUgaG93IHRpZ2h0bHkgY291cGxlZCB0aGlzIGlzIHRvIGdlbmVyaWMgS1ZNIG9wZXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL21tdS5jPTYyMz1pbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxuLS1cbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTc1MC1cbmFyY2gvcmlzY3Yva3ZtL21tdS5jOjc1MTpsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03NTItXHRcdFx0XHQgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSlcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTc5Nz12b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTg0MC0vKipcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1ODQxOiAqIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSgpIC0tIHByZS1mYXVsdCBhbmQgbGluayBnbWFwIGRhdCB0YWJsZXNcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01ODQyLSAqIEB2Y3B1OiB0aGUgdmNwdSB0aGF0IHNoYWxsIGFwcGVhciB0byBoYXZlIGdlbmVyYXRlZCB0aGUgZmF1bHQtaW4uXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU4NTktICovXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTg2MDpsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTg2MS17XG4tLVxuYXJjaC94ODYva3ZtL21tdS9tbXUuYz00OTczPXN0YXRpYyBpbnQga3ZtX3RkcF9wYWdlX3ByZWZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLFxuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTAxNi1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM6NTAxNzpsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUwMTgtXHRcdFx0XHQgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTE3MDE9c3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVsLFxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMTcxMy1cdC8qXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjE3MTQ6XHQgKiBFbnN1cmUgcHJlX2ZhdWx0X2FsbG93ZWQgaXMgcmVhZCBieSBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoKVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0xNzE1LVx0ICogYmVmb3JlIGt2bV90ZHgtXHUwMDNlc3RhdGUuICBVc2Vyc3BhY2UgbXVzdCBub3QgYmUgYWxsb3dlZCB0byBwcmUtZmF1bHRcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MjYxMD12b2lkIGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpO1xuLS1cbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNjEzLSNpZmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjI2MTQ6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI2MTUtXHRcdFx0XHQgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSk7XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz00MzM0PXN0YXRpYyBpbnQga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy00MzU4LVxudmlydC9rdm0va3ZtX21haW4uYzo0MzU5Olx0XHRyID0ga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHZjcHUsIHJhbmdlKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDM2MC1cdFx0aWYgKFdBUk5fT05fT05DRShyID09IDAgfHwgciA9PSAtRUlPKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDEyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUklTQy1WIEtWTSBQcmUtRmF1bHQgTWVtb3J5IFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciB0aGUgYEtWTV9QUkVfRkFVTFRfTUVNT1JZYCBpb2N0bCBzcGVjaWZpY2FsbHkgZm9yIFJJU0MtVi4gSXQmIzM5O3MgY2FsbGVkIHRocm91Z2ggYGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGZyb20gYGt2bV9tYWluLmNgLCB0cmlnZ2VyZWQgYnkgdGhlIGlvY3RsIGl0c2VsZi4gIFNpbmNlIHRoaXMgaXMgYSBuZXcgaW9jdGwgaGFuZGxlciwgZnV6emluZyBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZDsgdGhhdCYjMzk7cyBhIHByaW1lIHRhcmdldCBmb3IgZmluZGluZyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLgoKVGhlIGNvcmUgaW1wbGVtZW50YXRpb24gc2VlbXMgdG8gcmVzaWRlIGluIGBhcmNoL3Jpc2N2L2t2bS9tbXUuY2AsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBtZW1vcnktcmVsYXRlZCBuYXR1cmUgb2YgdGhlIGlvY3RsLiBUaGUgbWFpbiBmdW5jdGlvbiBJIG5lZWQgdG8gZm9jdXMgb24gaXMgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAsIGFsdGhvdWdoIHRoZSBuYW1pbmcgaXMgYSBiaXQgbWlzbGVhZGluZyBzaW5jZSBpdCYjMzk7cyBkZWZpbmVkIHNwZWNpZmljYWxseSBmb3IgUklTQy1WLiBJdCYjMzk7cyBhY3R1YWxseSBpbiBgYXJjaC9yaXNjdi9rdm0vbW11LmNgLiBBbHNvIHdvcnRoIG5vdGluZyBpcyB0aGUgbW9kaWZpY2F0aW9uIHRvIGBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlYC4KCkkmIzM5O2xsIGNoZWNrIGBhcmNoL3Jpc2N2L2t2bS9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMgcmVxdWlyZWQgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eSB0byBiZSBlbmFibGVkIG9yIGlmIHRoZXJlIGFyZSBhbnkgaW50ZXJlc3Rpbmcgb3B0aW9ucyB0aGF0IGNvdWxkIGltcGFjdCBpdHMgYmVoYXZpb3IuIFRoaXMgY291bGQgcHJvdmlkZSB2YWx1YWJsZSBjb250ZXh0IGZvciB0ZXN0aW5nIGFuZCBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMTktXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMjEtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTAyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeToKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzOiBLVk0gYW5kIFZpcnR1YWxpemF0aW9uKioKCkFscmlnaHQsIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBrZXJuZWwgY29uZmlndXJhdGlvbiwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgYWJzb2x1dGUgcmVxdWlyZW1lbnQgZm9yIGBDT05GSUdfS1ZNYC4gVGhhdCYjMzk7cyBhIGdpdmVuIOKAkyBjYW4mIzM5O3QgZG8gYW55dGhpbmcgS1ZNLXJlbGF0ZWQgd2l0aG91dCB0aGF0IGVuYWJsZWQsIG9idmlvdXNseS4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHF1ZXN0aW9uIGlzOiBkb2VzIGVuYWJsaW5nIEtWTSBuZWNlc3NpdGF0ZSwgb3IgYXQgbGVhc3QgaGlnaGx5IHN1Z2dlc3QsIHRoYXQgd2UgYWxzbyBjb25zaWRlciBgQ09ORklHX1ZJUlRVQUxJWkFUSU9OYD8gVGhlIHJlbGF0aW9uc2hpcCB0aGVyZSBpcyBrZXkuIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWluIHRoYXQgdGhlIHVuZGVybHlpbmcgaHlwZXJ2aXNvciBzdXBwb3J0IHdpbGwgYmUgbmVlZGVkLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB3aGV0aGVyIGBWSVJUVUFMSVpBVElPTmAgaXMgKnN0cmljdGx5KiBhIHByZXJlcXVpc2l0ZSwgb3IgaWYgaXQmIzM5O3MgbW9yZSBvZiBhbiBhbmNpbGxhcnkgZmVhdHVyZSB0aGF0IGlzIGJlc3QgcHJhY3RpY2UgdG8gZW5hYmxlIHdoZW4gZW5hYmxpbmcgS1ZNLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGRlcGVuZGVuY3kgcGF0aCBjbGVhcmx5IHRvIG1ha2UgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24gZGVjaXNpb25zLiBJdCBkZXBlbmRzIG9uIHdoZXRoZXIgd2UgYXJlIGRlYWxpbmcgd2l0aCBhIHR5cGUgMSBvciB0eXBlIDIgaHlwZXJ2aXNvciwgYW5kIGhvdyBtdWNoIGlzIGJlaW5nIHZpcnR1YWxpemVkLCBvciBlbXVsYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVklSVFVBTElaQVRJT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL0tjb25maWc9Nj1zb3VyY2UgXCYjMzQ7dmlydC9rdm0vS2NvbmZpZ1wmIzM0O1xuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy03LVxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZzo4Om1lbnVjb25maWcgVklSVFVBTElaQVRJT05cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctOS1cdGJvb2wgXCYjMzQ7VmlydHVhbGl6YXRpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDg1CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIGFuZCBNTVUgRnVuY3Rpb24gUmV2aWV3KioKCkFscmlnaHQsIGZpcnN0IHRoaW5ncyBmaXJzdCwgc2VlbXMgbGlrZSB3ZSYjMzk7cmUgbG9va2luZyBhdCBLVk0gb24gUklTQy1WLiBUaGVyZWZvcmUsIGBDT05GSUdfS1ZNYCBhbmQgYENPTkZJR19WSVJUVUFMSVpBVElPTmAgYXJlIGRlZmluaXRlbHkgcHJlcmVxdWlzaXRlcy4gTm90aGluZyBzdXJwcmlzaW5nIHRoZXJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIGFyZSBlbmFibGVkLCBvYnZpb3VzbHkuCgpOZXh0LCBJJiMzOTttIHRoaW5raW5nIG9mIGRpdmluZyBpbnRvIHRoZSBNTVUtcmVsYXRlZCBjb2RlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBSSVNDLVYgS1ZNIGltcGxlbWVudGF0aW9uLiBUaGUgZnVuY3Rpb24gSSB3YW50IHRvIGxvb2sgYXQgaXMgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAg4oCTIEkmIzM5O20gYXNzdW1pbmcgdGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBwcmUtZmF1bHQgaGFuZGxpbmcgaGFwcGVucyBhbmQgbGlrZWx5IHdoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZm9yIHdoYXRldmVyIHRhc2sgSSYjMzk7dmUgZ290IGluIG1pbmQuIFRpbWUgdG8gZ2V0IGRpZ2dpbmcgaW4gYGFyY2gvcmlzY3Yva3ZtL21tdS5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vbW11LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vbW11LmM9NjIzPWludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXG4tLVxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNzUwLVxuYXJjaC9yaXNjdi9rdm0vbW11LmM6NzUxOmxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTc1Mi1cdFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTMyCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkZvY3VzaW5nIG9uIE1lbW9yeSBGYXVsdHMgaW4gS1ZNLVJJU0NWKioKCkFscmlnaHQsIHRoZSBjb3JlIG9mIHRoaXMgbWVtb3J5IGZhdWx0IGludmVzdGlnYXRpb24gc2VlbXMgdG8gbGllIHdpdGhpbiBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YC4gVGhhdCYjMzk7cyBkZWZpbml0ZWx5IHdoZXJlIEkgbmVlZCB0byBzdGFydCBkaWdnaW5nLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgdmlydHVhbCBDUFUgaXMgaW50ZXJjZXB0aW5nIHRoZSBtZW1vcnkgYWNjZXNzIGJlZm9yZSB0aGUgZmF1bHQgZXZlbiBvY2N1cnMsIGFsbG93aW5nIGZvciBvdXIgaW50ZXJ2ZW50aW9uLgoKQW5kLCBmcm9tIHRoZSBsb29rcyBvZiBpdCwgaXQgc2VlbXMgbGlrZSBga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZWAgaGFzIHNlZW4gc29tZSBtb2RpZmljYXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRob3NlIGNoYW5nZXMgaW4gYGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2VgIGFyZSBpbnRlcmFjdGluZyB3aXRoIHRoZSBmYXVsdCBoYW5kbGluZyBpbiBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YC4gR290dGEgZmlndXJlIG91dCB0aGUgaW50ZXJwbGF5LgoKRmlyc3QsIGxldCYjMzk7cyBwdWxsIHVwIHRoZSBzb3VyY2UgZm9yIGBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlYC4gSSYjMzk7bGwgZmluZCBpdCBpbiBgYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNgIGFuZCBzZWUgaG93IHRoaXMgaXMgYWZmZWN0aW5nIHRoZSBtYXBwaW5nIG9mIGd1ZXN0IHBoeXNpY2FsIHBhZ2VzIHdpdGhpbiB0aGUgZ2xvYmFsIHN0YWdlLiBJdCBzZWVtcyBsaWtlIHRoZSBtb2RpZmljYXRpb25zIHRoZXJlIGFyZSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgbWVtb3J5IGZhdWx0cyBhcmUgaGFuZGxlZCBpbiBSSVNDLVYuIFRoYXQmIzM5O3MgdGhlIHByaW9yaXR5IG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jPTE4Nj1zdGF0aWMgdm9pZCBrdm1fcmlzY3ZfZ3N0YWdlX3VwZGF0ZV9wdGVfcHJvdChzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLCB1MzIgbGV2ZWwsXG4tLVxuYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmMtMjA2LVxuYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmM6MjA3OmludCBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsXG5hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYy0yMDgtXHRcdFx0ICAgICAgc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpwY2FjaGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0ODEKCQkJCQkJCW91dHB1dDogMTgwCgkJCQkJCQl0aG91Z2h0czogMjU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFJJU0MtViBLVk0gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgUklTQy1WIEtWTSBwYXRjaCwgYW5kIGl0IHNlZW1zIGxpa2UgYGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2VgIGFuZCBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBhcmUgdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24uIFRoZXkgYXJlIHRoZSBwcmltYXJ5IHRhcmdldHMgaGVyZS4KCkxldCBtZSBqdXN0IHF1aWNrbHkgY2hlY2sgZm9yIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucy4gQWgsIHllcywgYEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllgIGlzIGluZGVlZCBzZWxlY3RlZCB3aGVuIGBLVk1gIGlzIGVuYWJsZWQgZm9yIFJJU0MtVi4gU28sIGp1c3QgZW5hYmxpbmcgYEtWTWAgc2hvdWxkIHN1ZmZpY2UuCgpOb3csIGxldCYjMzk7cyBmb3JtYXQgbXkgZmluZGluZ3MgZm9yIGVhc3kgY29uc3VtcHRpb24uCgpFc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBpcyBhZGRpbmcgdGhlIGBLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUllgIGNhcGFiaWxpdHkgYW5kIGl0cyBhc3NvY2lhdGVkIGlvY3RsLCBgS1ZNX1BSRV9GQVVMVF9NRU1PUllgLCBmb3IgUklTQy1WIEtWTS4gVGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBwcmUtZmF1bHQgaGFuZGxlciwgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAsIGlzIGJlaW5nIGludHJvZHVjZWQuIFBsdXMsIGBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlYCBpcyBiZWluZyB1cGRhdGVkIHRvIHJldHVybiBtYXBwaW5nIGluZm9ybWF0aW9uLgoKVGhpcyBtZWFucyBuZXcsIHBvdGVudGlhbGx5IHJlYWNoYWJsZSBjb2RlIHBhdGhzIGFyZSBiZWluZyBvcGVuZWQgdXAgaW4gdGhlIFJJU0MtViBLVk0gc3Vic3lzdGVtLCBhbmQgdXNlcnNwYWNlIGNhbiB0cmlnZ2VyIHRoZW0gdmlhIHRoaXMgbmV3IGlvY3RsLgoKSGVyZSYjMzk7cyB0aGUgZGF0YSBmb3IgbXkgcmVjb3JkczoKCiogICAqKldvcnRoRnV6emluZyoqOiBgdHJ1ZWAKKiAgICoqRm9jdXNTeW1ib2xzKio6CiAgICAqICAgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAKICAgICogICBga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZWAKKiAgICoqRW5hYmxlQ29uZmlncyoqOgogICAgKiAgIGBLVk1gCiAgICAqICAgYFZJUlRVQUxJWkFUSU9OYAoqICAgKipSZWFzb25pbmcqKjogVGhpcyBwYXRjaCBlbmFibGVzIHRoZSBLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUlkgY2FwYWJpbGl0eSBhbmQgaXRzIGNvcnJlc3BvbmRpbmcgaW9jdGwgKEtWTV9QUkVfRkFVTFRfTUVNT1JZKSBmb3IgUklTQy1WIEtWTS4gSXQgaW1wbGVtZW50cyB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGhhbmRsZXIgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgYW5kIG1vZGlmaWVzIGBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlYCB0byByZXR1cm4gbWFwcGluZyBpbmZvcm1hdGlvbi4gVGhpcyBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUgY29kZSBwYXRocyBpbiB0aGUgUklTQy1WIEtWTSBzdWJzeXN0ZW0gdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgaW9jdGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7VklSVFVBTElaQVRJT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkmIzM0OywKICAgICYjMzQ7a3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBlbmFibGVzIHRoZSBLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUlkgY2FwYWJpbGl0eSBhbmQgaXRzIGNvcnJlc3BvbmRpbmcgaW9jdGwgKEtWTV9QUkVfRkFVTFRfTUVNT1JZKSBmb3IgUklTQy1WIEtWTS4gSXQgaW1wbGVtZW50cyB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGhhbmRsZXIgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgYW5kIG1vZGlmaWVzIGBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlYCB0byByZXR1cm4gbWFwcGluZyBpbmZvcm1hdGlvbi4gVGhpcyBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUgY29kZSBwYXRocyBpbiB0aGUgUklTQy1WIEtWTSBzdWJzeXN0ZW0gdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgaW9jdGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtWSVJUVUFMSVpBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSYjMzQ7LAogICAgJiMzNDtrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGVuYWJsZXMgdGhlIEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWSBjYXBhYmlsaXR5IGFuZCBpdHMgY29ycmVzcG9uZGluZyBpb2N0bCAoS1ZNX1BSRV9GQVVMVF9NRU1PUlkpIGZvciBSSVNDLVYgS1ZNLiBJdCBpbXBsZW1lbnRzIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaGFuZGxlciBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBhbmQgbW9kaWZpZXMgYGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2VgIHRvIHJldHVybiBtYXBwaW5nIGluZm9ybWF0aW9uLiBUaGlzIGludHJvZHVjZXMgbmV3IHJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHRoZSBSSVNDLVYgS1ZNIHN1YnN5c3RlbSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBpb2N0bC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzowMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbXBsZW1lbnRzIHRoZSBgS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZYCBjYXBhYmlsaXR5IGZvciBSSVNDLVYgYnkgYWRkaW5nIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGFuZCB3aXJpbmcgaXQgdXAgaW4gdGhlIE1NVS4gVGhlIG9ubHkgZGF0YSBzdHJ1Y3R1cmUgaW52b2x2ZWQgaW4gdXNlciBzcGFjZSBjb21tdW5pY2F0aW9uIGlzIGBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnlgLCB3aGljaCBpcyBoYW5kbGVkIGJ5IGdlbmVyaWMgS1ZNIGNvZGUgKGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCkuIFRoZSBnZW5lcmljIGNvZGUgZnVsbHkgaW5pdGlhbGl6ZXMgdGhlIHN0cnVjdCB2aWEgYGNvcHlfZnJvbV91c2VyYCBiZWZvcmUgbW9kaWZ5aW5nIGl0cyBgc2l6ZWAgYW5kIGBncGFgIGZpZWxkcyBhbmQgY29weWluZyBpdCBiYWNrIHRvIHVzZXIgc3BhY2UuIEFueSBwYWRkaW5nIGZpZWxkcyBzaW1wbHkgZWNobyBiYWNrIHRoZSB1c2VyLXByb3ZpZGVkIHZhbHVlcywgcHJldmVudGluZyBhbnkga2VybmVsIG1lbW9yeSBpbmZvLWxlYWtzLiBUaGUgbG9jYWwgdmFyaWFibGUgYG91dF9tYXBgIG9mIHR5cGUgYHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmdgIGlzIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCAoYD0geyAwIH1gKSBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvIGBrdm1fcmlzY3ZfbW11X21hcGAuIFRoZXJlIGFyZSBubyBuZXcgY29tcGxleCBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjBiNjBhMGM3OWYzYzIyZjlhZjY4NzY4ODgwZDI2Y2ZiMjUyMjUwMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDExIDA3OjAxOjU5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vS2NvbmZpZyBiL2FyY2gvcmlzY3Yva3ZtL0tjb25maWcKaW5kZXggZWMyY2VlMGEzOWUwMS4uOGFjMjA5ZThhYzg3MCAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9rdm0vS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnCkBAIC0yOCw2ICYjNDM7MjgsNyBAQCBjb25maWcgS1ZNCiAJc2VsZWN0IEtWTV9DT01NT04KIAlzZWxlY3QgS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUCiAJc2VsZWN0IEtWTV9HRU5FUklDX0hBUkRXQVJFX0VOQUJMSU5HCiYjNDM7CXNlbGVjdCBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZCiAJc2VsZWN0IEtWTV9NTUlPCiAJc2VsZWN0IFZJUlRfWEZFUl9UT19HVUVTVF9XT1JLCiAJc2VsZWN0IFNDSEVEX0lORk8KZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jIGIvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmMKaW5kZXggZTUwMDJjYjljYmVmMS4uNmJkOGI4ZmQ2Y2ViMiAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmMKQEAgLTI4MCw2ICYjNDM7MjgwLDkgQEAgaW50IGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2Uoc3RydWN0IGt2bV9nc3RhZ2UgKmdzdGFnZSwKIAkJCQkJCSAgICBvdXRfbWFwLSZndDtsZXZlbCwgdHJ1ZSk7CiAJCX0gZWxzZSBpZiAoQUxJR05fRE9XTihQRk5fUEhZUyhwdGVfcGZuKHB0ZXBfZ2V0KHB0ZXApKSksIHBhZ2Vfc2l6ZSkgPT0gaHBhKSB7CiAJCQlrdm1fcmlzY3ZfZ3N0YWdlX3VwZGF0ZV9wdGVfcHJvdChnc3RhZ2UsIHB0ZXBfbGV2ZWwsIGdwYSwgcHRlcCwgcHJvdCk7CiYjNDM7CQkJb3V0X21hcC0mZ3Q7YWRkciA9IEFMSUdOX0RPV04oZ3BhLCBwYWdlX3NpemUpOwomIzQzOwkJCW91dF9tYXAtJmd0O2xldmVsID0gcHRlcF9sZXZlbDsKJiM0MzsJCQlvdXRfbWFwLSZndDtwdGUgPSBwdGVwX2dldChwdGVwKTsKIAkJCXJldHVybiAwOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vbW11LmMgYi9hcmNoL3Jpc2N2L2t2bS9tbXUuYwppbmRleCA2MDM1YjVlYzk1MDM5Li5jOTZlMjE3NDBjOTEzIDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2t2bS9tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS9tbXUuYwpAQCAtNzQ4LDYgJiM0Mzs3NDgsMzkgQEAgaW50IGt2bV9yaXNjdl9tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCwKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAomIzQzOwkJCQkgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgb3V0X21hcCA9IHsgMCB9OwomIzQzOwlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90OwomIzQzOwl1bnNpZ25lZCBsb25nIG1hcF9zaXplOwomIzQzOwl1bnNpZ25lZCBsb25nIGh2YTsKJiM0MzsJZ3BhX3QgZW5kOwomIzQzOwlnZm5fdCBnZm47CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWdmbiA9IGdwYV90b19nZm4ocmFuZ2UtJmd0O2dwYSk7CiYjNDM7CW1lbXNsb3QgPSBrdm1fdmNwdV9nZm5fdG9fbWVtc2xvdCh2Y3B1LCBnZm4pOwomIzQzOwlpZiAoIW1lbXNsb3QpCiYjNDM7CQlyZXR1cm4gLUVOT0VOVDsKJiM0MzsKJiM0MzsJaHZhID0gZ2ZuX3RvX2h2YV9tZW1zbG90X3Byb3QobWVtc2xvdCwgZ2ZuLCBOVUxMKTsKJiM0MzsJaWYgKGt2bV9pc19lcnJvcl9odmEoaHZhKSkKJiM0MzsJCXJldHVybiAtRU5PRU5UOwomIzQzOwomIzQzOwlyZXQgPSBrdm1fcmlzY3ZfbW11X21hcCh2Y3B1LCBtZW1zbG90LCByYW5nZS0mZ3Q7Z3BhLCBodmEsIGZhbHNlLCAmYW1wO291dF9tYXApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKCFwdGVfdmFsKG91dF9tYXAucHRlKSkKJiM0MzsJCXJldHVybiAtRUFHQUlOOwomIzQzOwomIzQzOwltYXBfc2l6ZSA9IFBBR0VfU0laRSAmbHQ7Jmx0OyAob3V0X21hcC5sZXZlbCAqIGt2bV9yaXNjdl9nc3RhZ2VfaW5kZXhfYml0cyk7CiYjNDM7CWVuZCA9IEFMSUdOX0RPV04ocmFuZ2UtJmd0O2dwYSwgbWFwX3NpemUpICYjNDM7IG1hcF9zaXplOwomIzQzOwomIzQzOwlyZXR1cm4gbWluX3QodTY0LCByYW5nZS0mZ3Q7c2l6ZSwgZW5kIC0gcmFuZ2UtJmd0O2dwYSk7CiYjNDM7fQomIzQzOwogaW50IGt2bV9yaXNjdl9tbXVfYWxsb2NfcGdkKHN0cnVjdCBrdm0gKmt2bSkKIHsKIAlzdHJ1Y3QgcGFnZSAqcGdkX3BhZ2U7CmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS92bS5jIGIvYXJjaC9yaXNjdi9rdm0vdm0uYwppbmRleCBhOWYwODNmZWViNzY3Li41ODUwMGExOWIzM2JkIDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2t2bS92bS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL3ZtLmMKQEAgLTE4Nyw2ICYjNDM7MTg3LDcgQEAgaW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dCkKIAljYXNlIEtWTV9DQVBfTVBfU1RBVEU6CiAJY2FzZSBLVk1fQ0FQX0lNTUVESUFURV9FWElUOgogCWNhc2UgS1ZNX0NBUF9TRVRfR1VFU1RfREVCVUc6CiYjNDM7CWNhc2UgS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZOgogCQlyID0gMTsKIAkJYnJlYWs7CiAJY2FzZSBLVk1fQ0FQX05SX1ZDUFVTOgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0KaW5kZXggNmZjMzRlOWJmOGUxYi4uYWM2NGFjOTJmZDRiMCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtCkBAIC0yMjUsNiAmIzQzOzIyNSw3IEBAIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICYjNDM7PSBjb2FsZXNjZWRfaW9fdGVzdAogVEVTVF9HRU5fUFJPR1NfcmlzY3YgJiM0Mzs9IGRpcnR5X2xvZ19wZXJmX3Rlc3QKIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICYjNDM7PSBnZXQtcmVnLWxpc3QKIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICYjNDM7PSBtbXVfc3RyZXNzX3Rlc3QKJiM0MztURVNUX0dFTl9QUk9HU19yaXNjdiAmIzQzOz0gcHJlX2ZhdWx0X21lbW9yeV90ZXN0CiBURVNUX0dFTl9QUk9HU19yaXNjdiAmIzQzOz0gcnNlcV90ZXN0CiBURVNUX0dFTl9QUk9HU19yaXNjdiAmIzQzOz0gc3RlYWxfdGltZQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oCmluZGV4IGUzYWNmMmFlOTg4MWUuLjcwNDg3YzhlZDE1NTMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oCkBAIC0xMiw2ICYjNDM7MTIsOSBAQAogI2luY2x1ZGUgJmx0O2FzbS92ZHNvL3Byb2Nlc3Nvci5oJmd0OwogI2luY2x1ZGUgJiMzNDtrdm1fdXRpbC5oJiMzNDsKIAomIzQzOyNkZWZpbmUgUEFHRV9TSElGVAkJMTIKJiM0MzsjZGVmaW5lIFBBR0VfU0laRQkJQklUX1VMTChQQUdFX1NISUZUKQomIzQzOwogI2RlZmluZSBJTlNOX09QQ09ERV9NQVNLCTB4MDA3YwogI2RlZmluZSBJTlNOX09QQ09ERV9TSElGVAkyCiAjZGVmaW5lIElOU05fT1BDT0RFX1NZU1RFTQkyOApAQCAtMTI3LDYgJiM0MzsxMzAsOSBAQCB2b2lkIHZtX2luc3RhbGxfZXhjZXB0aW9uX2hhbmRsZXIoc3RydWN0IGt2bV92bSAqdm0sIGludCB2ZWN0b3IsIGV4Y2VwdGlvbl9oYW5kbAogCiB2b2lkIHZtX2luc3RhbGxfaW50ZXJydXB0X2hhbmRsZXIoc3RydWN0IGt2bV92bSAqdm0sIGV4Y2VwdGlvbl9oYW5kbGVyX2ZuIGhhbmRsZXIpOwogCiYjNDM7LyogTDQgaW5kZXggQml0WzU2OjQ4XSAqLwomIzQzOyNkZWZpbmUgUEdUQkxfTDRfSU5ERVhfTUFTSwkJCTB4MDFGRjAwMDAwMDAwMDAwMFVMTAomIzQzOyNkZWZpbmUgUEdUQkxfTDRfSU5ERVhfU0hJRlQJCQk0OAogLyogTDMgaW5kZXggQml0WzQ3OjM5XSAqLwogI2RlZmluZSBQR1RCTF9MM19JTkRFWF9NQVNLCQkJMHgwMDAwRkY4MDAwMDAwMDAwVUxMCiAjZGVmaW5lIFBHVEJMX0wzX0lOREVYX1NISUZUCQkJMzkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jCmluZGV4IGRlZDU0MjlmMzQ0ODMuLmI0ZDQxYTQwNzU1MzYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuYwpAQCAtNDMsNiAmIzQzOzQzLDcgQEAgc3RhdGljIHU2NCBwdGVfaW5kZXhfbWFza1tdID0gewogCVBHVEJMX0wxX0lOREVYX01BU0ssCiAJUEdUQkxfTDJfSU5ERVhfTUFTSywKIAlQR1RCTF9MM19JTkRFWF9NQVNLLAomIzQzOwlQR1RCTF9MNF9JTkRFWF9NQVNLLAogfTsKIAogc3RhdGljIHUzMiBwdGVfaW5kZXhfc2hpZnRbXSA9IHsKQEAgLTUwLDYgJiM0Mzs1MSw3IEBAIHN0YXRpYyB1MzIgcHRlX2luZGV4X3NoaWZ0W10gPSB7CiAJUEdUQkxfTDFfSU5ERVhfU0hJRlQsCiAJUEdUQkxfTDJfSU5ERVhfU0hJRlQsCiAJUEdUQkxfTDNfSU5ERVhfU0hJRlQsCiYjNDM7CVBHVEJMX0w0X0lOREVYX1NISUZULAogfTsKIAogc3RhdGljIHU2NCBwdGVfaW5kZXgoc3RydWN0IGt2bV92bSAqdm0sIGd2YV90IGd2YSwgaW50IGxldmVsKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jCmluZGV4IGEwZmNhZTNjYjdhOGIuLjZlZWJmMDUyNDY3MzYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmMKQEAgLTgsNiAmIzQzOzgsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3NpemVzLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDt0ZXN0X3V0aWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7Z3Vlc3RfbW9kZXMuaCZndDsKICNpbmNsdWRlICZsdDtrdm1fdXRpbC5oJmd0OwogI2luY2x1ZGUgJmx0O3Byb2Nlc3Nvci5oJmd0OwogI2luY2x1ZGUgJmx0O3B0aHJlYWQuaCZndDsKQEAgLTIxOSw2ICYjNDM7MjIwLDggQEAgc3RhdGljIHZvaWQgdGVzdF9wcmVfZmF1bHRfbWVtb3J5KHVuc2lnbmVkIGxvbmcgdm1fdHlwZSwgYm9vbCBwcml2YXRlKQogCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogewomIzQzOwlndWVzdF9tb2Rlc19hcHBlbmRfZGVmYXVsdCgpOwomIzQzOwogCVRFU1RfUkVRVUlSRShrdm1fY2hlY2tfY2FwKEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWSkpOwogCiAJdGVzdF9wcmVfZmF1bHRfbWVtb3J5KDAsIGZhbHNlKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNzcKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA3MDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUklTQy1WIEtWTSBQcmUtRmF1bHQgTWVtb3J5IFN1cHBvcnQgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIFJJU0MtViBLVk0uIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGFib3V0IGFkZGluZyBzdXBwb3J0IGZvciBgS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZYC4gIEVzc2VudGlhbGx5LCBpdCYjMzk7cyBhYm91dCBwcm9hY3RpdmVseSBmYXVsdGluZyBpbiBtZW1vcnkgcmVnaW9ucywgd2hpY2ggY2FuIGltcHJvdmUgcGVyZm9ybWFuY2UgYnkgcmVkdWNpbmcgdGhlIGxhdGVuY3kgb2YgdGhlIGZpcnN0IGFjY2Vzcy4KClRoZSBmaXJzdCB0aGluZyBJIHNlZSBpcyB0aGUgYEtjb25maWdgIGNoYW5nZTsgaXQmIzM5O3Mgc2VsZWN0aW5nIGBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZYC4gR29vZCwgd2UgYXJlIHJldXNpbmcgdGhlIGdlbmVyaWMgZnJhbWV3b3JrIHdoZXJlIHBvc3NpYmxlLiBUaGVuIHRoZXJlIGFyZSB0aGUgbW9kaWZpY2F0aW9ucyB0byBgZ3N0YWdlLmNgIOKAkyBwcmVzdW1hYmx5IHBvcHVsYXRpbmcgYG91dF9tYXBgIGZpZWxkcyDigJMgYW5kIGBtbXUuY2AsIHdoaWNoIGltcGxlbWVudHMgdGhlIGtleSBmdW5jdGlvbjogYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAuIEZpbmFsbHksIGl0IHJlcG9ydHMgdGhlIG5ldyBjYXBhYmlsaXR5IGFzIHN1cHBvcnRlZCBhbmQgdXBkYXRlcyBzZWxmdGVzdHMuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBzbyBmYXIuCgpOb3cgbGV0JiMzOTtzIGRpdmUgaW50byB0aGF0IGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGZ1bmN0aW9uLiBJJiMzOTttIHNlZWluZyBhIGxvY2FsIGBzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nIG91dF9tYXAgPSB7IDAgfTtgIGJlaW5nIGluaXRpYWxpemVkIHRvIHplcm8uIEkgdGhlbiBzZWUgdGhhdCBga3ZtX3Jpc2N2X21tdV9tYXBgIGlzIGJlaW5nIGNhbGxlZCB3aXRoIGAmYW1wO291dF9tYXBgIGFzIGFuIGFyZ3VtZW50LiAgSSBzZWUgdGhhdCB0aGUgYG91dF9tYXBgIHN0cnVjdCBpcyB1c2VkIGxhdGVyIHRvIGNhbGN1bGF0ZSBgbWFwX3NpemVgIHdoaWNoLCBnaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwcmUtZmF1bHRpbmcgcHJvY2Vzcywgc2VlbXMgY29ycmVjdC4gV2UmIzM5O3JlIGVmZmVjdGl2ZWx5IGZpZ3VyaW5nIG91dCB0aGUgbWFwcGluZyYjMzk7cyBzaXplLCBiYXNlZCBvbiB0aGUgTU1VJiMzOTtzIHBhZ2UgdGFibGUgbGV2ZWwuIFRoZSBgZW5kYCBjYWxjdWxhdGlvbiB0aGVuIHVzZXMgdGhlIGBtYXBfc2l6ZWAgdG8gZmlndXJlIG91dCB0aGUgYWN0dWFsIGJ5dGVzIHRvIHByZS1mYXVsdC4gVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdlcmUgc3VjY2Vzc2Z1bGx5IHByZS1mYXVsdGVkLCBvciBhbiBlcnJvci4KClRoZSBpbXBvcnRhbnQgdGhpbmcgaXMgdGhpcyB6ZXJvIGluaXRpYWxpemF0aW9uIG9mIGBvdXRfbWFwYC4gSXMgdGhpcyBva2F5PyBJdCBjb3VsZCBjYXVzZSBwcm9ibGVtcywgaXQmIzM5O3Mgc29tZXRoaW5nIEkgbmVlZCB0byBsb29rIGludG8uCgpUaGUgbmV4dCBwb2ludCBJIG5lZWQgdG8gY2xhcmlmeSBpcyB3aGV0aGVyIHRoZSBgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5YCBpcyBiZWluZyBjb3BpZWQgdG8vZnJvbSB1c2Vyc3BhY2UuIEJlY2F1c2UgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBhcyBhbiBgaW9jdGxgIGFuZCwgZ2l2ZW4gbXkga25vd2xlZGdlIG9mIGhvdyB0aGlzIHR5cGljYWxseSB3b3JrcyB3aXRoIEtWTSwgSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGF0IHRoaXMgaXMgaW5kZWVkIHRoZSBjYXNlLiBUaGF0IG1lYW5zIHRoZXJlJiMzOTtzIGEgZ29vZCBjaGFuY2UgdGhpcyBpcyBhIHZ1bG5lcmFiaWxpdHkuICBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBnZW5lcmljIEtWTSBjb2RlIGZvciB0aGUgYEtWTV9QUkVfRkFVTFRfTUVNT1JZYCBpb2N0bCBpbXBsZW1lbnRhdGlvbi4gSSBjYW4gdXNlIGBncmVwcGVyYCB0byBmaW5kIG91dCB3aGVyZSBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBpcyBhY3R1YWxseSBjYWxsZWQuIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9tbXUuYz02MjM9aW50IGt2bV9yaXNjdl9tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcbi0tXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03NTAtXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYzo3NTE6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNzUyLVx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU3OTc9dm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU4NDAtLyoqXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTg0MTogKiBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoKSAtLSBwcmUtZmF1bHQgYW5kIGxpbmsgZ21hcCBkYXQgdGFibGVzXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTg0Mi0gKiBAdmNwdTogdGhlIHZjcHUgdGhhdCBzaGFsbCBhcHBlYXIgdG8gaGF2ZSBnZW5lcmF0ZWQgdGhlIGZhdWx0LWluLlxuLS1cbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01ODU5LSAqL1xuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU4NjA6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKVxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU4NjEte1xuLS1cbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NDk3Mz1zdGF0aWMgaW50IGt2bV90ZHBfcGFnZV9wcmVmYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSxcbi0tXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUwMTYtXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUwMTc6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYy01MDE4LVx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC90ZHguYz0xNzAxPXN0YXRpYyBpbnQgdGR4X3NlcHRfbWFwX2xlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgZW51bSBwZ19sZXZlbCBsZXZlbCxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTE3MTMtXHQvKlxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoxNzE0Olx0ICogRW5zdXJlIHByZV9mYXVsdF9hbGxvd2VkIGlzIHJlYWQgYnkga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KClcbmFyY2gveDg2L2t2bS92bXgvdGR4LmMtMTcxNS1cdCAqIGJlZm9yZSBrdm1fdGR4LVx1MDAzZXN0YXRlLiAgVXNlcnNwYWNlIG11c3Qgbm90IGJlIGFsbG93ZWQgdG8gcHJlLWZhdWx0XG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTI2MTA9dm9pZCBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGUoa3ZtX3Bmbl90IHN0YXJ0LCBrdm1fcGZuX3QgZW5kKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjYxMy0jaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoyNjE0Omxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNjE1LVx0XHRcdFx0ICAgIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpO1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9NDMzND1zdGF0aWMgaW50IGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNDM1OC1cbnZpcnQva3ZtL2t2bV9tYWluLmM6NDM1OTpcdFx0ciA9IGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSh2Y3B1LCByYW5nZSk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQzNjAtXHRcdGlmIChXQVJOX09OX09OQ0UociA9PSAwIHx8IHIgPT0gLUVJTykpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3NTcKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0YWNrbGluZyB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24sIGBrdm1fdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCwgZm91bmQgaW4gYHZpcnQva3ZtL2t2bV9tYWluLmNgOgoKKipEaXZpbmcgaW50byBga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAqKgoKQWxyaWdodCwgdGhlIG5leHQgc3RlcCBpbiB0aGlzIGludmVzdGlnYXRpb24gaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIGBrdm1fdmNwdV9wcmVfZmF1bHRfbWVtb3J5YC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgKmJlZm9yZSogYSBtZW1vcnkgZmF1bHQgb2NjdXJzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBLVk0gZW52aXJvbm1lbnQuIEdpdmVuIHRoZSBuYW1lLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhpcyBpcyBhIHByZS1mYXVsdCBoYW5kbGVyLCBsaWtlbHkgY3J1Y2lhbCBmb3IgS1ZNJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBleGNlcHRpb24gaGFuZGxpbmcuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgaW4gYGt2bV9tYWluLmNgIHN1Z2dlc3RzIGl0JiMzOTtzIGEgY2VudHJhbCBjb21wb25lbnQsIHByb2JhYmx5IGludm9sdmVkIGluIHRoZSBjb3JlIFZDUFUgbGlmZWN5Y2xlIGFuZCBtZW1vcnkgYWNjZXNzIG9wZXJhdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgS1ZNIGFyY2hpdGVjdHVyZSBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIHVuZGVybHlpbmcgaG9zdCBtZW1vcnkgYW5kIHRoZSBndWVzdCYjMzk7cyB2aXJ0dWFsIG1lbW9yeS4gSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhhdCB0aGlzIGlzIHdoZXJlIGNydWNpYWwgY2hlY2tzLCBwcmUtZW1wdGl2ZSBhY3Rpb25zIChsaWtlIGRpcnR5IGJpdCBoYW5kbGluZyksIG9yIG9wdGltaXphdGlvbnMgYXJlIGltcGxlbWVudGVkIHRvIHByZXZlbnQgdGhlIGZhdWx0IGl0c2VsZiBvciB0byBwcmVwYXJlIGZvciBpdHMgcmVzb2x1dGlvbi4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHN1Y2ggYXMgdGhlIFZDUFUmIzM5O3Mgc3RhdGUsIHRoZSBndWVzdCYjMzk7cyBwYWdlIHRhYmxlcywgYW5kIGFueSByZWxldmFudCBLVk0tc3BlY2lmaWMgbWVtb3J5IGRlc2NyaXB0b3JzLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgc3RhcnQgcmVhZGluZyBzb21lIGNvZGUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYz00MzA4PXN0YXRpYyBpbnQga3ZtX3ZjcHVfaW9jdGxfZ2V0X3N0YXRzX2ZkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQzMzMtI2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjQzMzQ6c3RhdGljIGludCBrdm1fdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDMzNS1cdFx0XHRcdCAgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSlcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTQ0MDY9c3RhdGljIGxvbmcga3ZtX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy00NjM4LVx0XHRcdGJyZWFrO1xudmlydC9rdm0va3ZtX21haW4uYzo0NjM5Olx0XHRyID0ga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSh2Y3B1LCBcdTAwMjZyYW5nZSk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ2NDAtXHRcdC8qIFBhc3MgYmFjayBsZWZ0b3ZlciByYW5nZS4gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQwOQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGt2bV92Y3B1X2lvY3RsYCBidXNpbmVzcywgc3BlY2lmaWNhbGx5IHRoZSBoYW5kbGluZyBvZiBgS1ZNX1BSRV9GQVVMVF9NRU1PUllgLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gaXQ6CgoqKkRpc3NlY3RpbmcgdGhlIEtWTV9QUkVfRkFVTFRfTUVNT1JZIGlvY3RsIGluIGt2bV92Y3B1X2lvY3RsKioKCkFscmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IHByZS1mYXVsdGluZyBtZW1vcnkuIFRoYXQgaW9jdGwgaXMga2V5LCBgS1ZNX1BSRV9GQVVMVF9NRU1PUllgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY29uc2lkZXIgdGhlIGNvbnRleHQ6IHdlJiMzOTtyZSBsaWtlbHkgdHJ5aW5nIHRvIG9wdGltaXplIG1lbW9yeSBhY2Nlc3MgaW4gdGhlIGd1ZXN0LCBieSBicmluZ2luZyBwYWdlcyBpbnRvIHRoZSBndWVzdCYjMzk7cyB3b3JraW5nIHNldCAqYmVmb3JlKiB0aGV5JiMzOTtyZSBhY3R1YWxseSBhY2Nlc3NlZC4gU21hcnQuIFRoaXMgc3VnZ2VzdHMgcHJlLWxvYWRpbmcgcGFnZXMgZm9yIGEgcmVhc29uLCBwZXJoYXBzIHBlcmZvcm1hbmNlIHByb2ZpbGluZyBkZXRlY3RlZCBzb21lIGxhdGVuY3kgaW4gdGhlIGFwcGxpY2F0aW9uLgoKTm93LCB3aXRoaW4gYGt2bV92Y3B1X2lvY3RsYCwgaXQmIzM5O3MgYWxsIGFib3V0IGhvdyBgS1ZNX1BSRV9GQVVMVF9NRU1PUllgIGlzICpoYW5kbGVkKi4gV2hhdCBhcmUgdGhlIHN0ZXBzPyBXaGVyZSBkb2VzIGl0IGZpdCBpbnRvIHRoZSBvdmVyYWxsIGlvY3RsIHN0cnVjdHVyZT8gSXMgaXQgYSBzaW1wbGUgJiMzNDtmYXVsdCB0aGlzIHJhbmdlJiMzNDsgb3IgYXJlIHRoZXJlIG1vcmUgY29tcGxleCBjb25zaWRlcmF0aW9ucywgbGlrZSBoYW5kbGluZyBwYWdlIGZhdWx0cyBhbmQgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIE1NVT8gR2l2ZW4gaXRzIG5hbWUsIGl04oCZcyBtb3N0IGxpa2VseSBzZXR0aW5nIHVwIHRoZSBwcmUtZmF1bHQgZm9yIGEgZ2l2ZW4gcmFuZ2Ugb2YgbWVtb3J5LiBIb3cgYXJlIHdlIGlkZW50aWZ5aW5nIHRoZSBtZW1vcnk/IFByb2JhYmx5IHNvbWUgc29ydCBvZiBhZGRyZXNzIHJhbmdlIHdpdGggc3RhcnQgYW5kIGVuZC4gQXJlIHdlIHVzaW5nIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3NlcyBvciB2aXJ0dWFsIGFkZHJlc3NlcyB3aXRoaW4gdGhlIFZNPyBXZSYjMzk7bGwgbmVlZCB0byB0cmFuc2xhdGUgYXMgbmVjZXNzYXJ5IHRvIHRoZSBob3N0LgoKSSYjMzk7ZCBleHBlY3QgdG8gc2VlIGEgY2hlY2sgZm9yIHZhbGlkaXR5IG9mIHRoZSByZXF1ZXN0ZWQgcmFuZ2UsIGVycm9yIGhhbmRsaW5nIGlmIHRoZSBvcGVyYXRpb24gZmFpbHMsIGFuZCBtb3N0IGltcG9ydGFudGx5LCB0aGUgYWN0dWFsIG1lY2hhbmlzbSBmb3IgYnJpbmdpbmcgdGhvc2UgcGFnZXMgaW50byBtZW1vcnkuIElzIEtWTSBsZXZlcmFnaW5nIHNvbWUgaG9zdCBzeXN0ZW0gY2FsbHMgb3IgdHJpY2tzIHRvIHByb2FjdGl2ZWx5IHRvdWNoIHRoZSBndWVzdCYjMzk7cyBtZW1vcnk/CgpJJiMzOTttIGN1cmlvdXM6IGFyZSB0aGVyZSBhbnkgZmxhZ3Mgb3Igb3B0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhpcyBpb2N0bD8gQXJlIHdlIGxvb2tpbmcgYXQgKmp1c3QqIHByZWZhdWx0aW5nIG9yIGlzIHRoZXJlIGEgd2F5IHRvIHByZS1wb3B1bGF0ZSBhbmQgcHJldmVudCBhIHJlYWwgcGFnZSBmYXVsdCBsYXRlcj8gSSB3b3VsZCBiZSBpbnRlcmVzdGVkIGluIHRoZSBtZWNoYW5pc21zIGluIHBsYWNlIHRoYXQgcHJldmVudCBhIHJhY2UgY29uZGl0aW9uIG9yIGNvbmZsaWN0LCBhbmQgaG93IHRoZXkgaGFuZGxlIHRoZSBWTeKAmXMgcGFnaW5nIHN0cnVjdHVyZXMuIEFsc28sIGhvdyBhcmUgd2UgZGVhbGluZyB3aXRoIHBvc3NpYmxlIE5VTUEgY29uc2lkZXJhdGlvbnMgaW4gdGhpcyBjb250ZXh0PwoKVWx0aW1hdGVseSwgbXkgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgZWZmaWNpZW5jeSBhbmQgc2FmZXR5IG9mIHRoaXMgcHJlLWZhdWx0aW5nIHByb2Nlc3MsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIFZNJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgaG93IHRoaXMgZml0cyBpbnRvIEtWTSYjMzk7cyBvdmVyYWxsIGFyY2hpdGVjdHVyZS4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyB0cmFuc2xhdGVzIGludG8gcmVhbC13b3JsZCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMsIG9yIGlmIHRoZXJlIGlzIGV2ZXIgYW55IHNjZW5hcmlvIHdoZXJlIGl0IGNvdWxkIGludHJvZHVjZSBhZGRpdGlvbmFsIG92ZXJoZWFkLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgaG93IGl0JiMzOTtzIGRvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0tWTV9QUkVfRkFVTFRfTUVNT1JZJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02NDcxPVNlZSBLVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTjIgZm9yIGFkZGl0aW9uYWwgZGV0YWlscy5cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDcyLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0NzM6NC4xNDMgS1ZNX1BSRV9GQVVMVF9NRU1PUllcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDc0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02NDgyPUVycm9yczpcbi0tXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjUwNi1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NTA3OktWTV9QUkVfRkFVTFRfTUVNT1JZIHBvcHVsYXRlcyBLVk0mIzM5O3Mgc3RhZ2UtMiBwYWdlIHRhYmxlcyB1c2VkIHRvIG1hcCBtZW1vcnlcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NTA4LWZvciB0aGUgY3VycmVudCB2Q1BVIHN0YXRlLiAgS1ZNIG1hcHMgbWVtb3J5IGFzIGlmIHRoZSB2Q1BVIGdlbmVyYXRlZCBhXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNTM5PXN0YXRpYyBpbnQgc25wX2xhdW5jaF9maW5pc2goc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNTk4LVx0ICogY2FuIGJlIGdpdmVuIHRvIHRoZSBndWVzdCBzaW1wbHkgYnkgbWFya2luZyB0aGUgUk1QIGVudHJ5IGFzIHByaXZhdGUuXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI1OTk6XHQgKiBUaGlzIGNhbiBoYXBwZW4gb24gZmlyc3QgYWNjZXNzIGFuZCBhbHNvIHdpdGggS1ZNX1BSRV9GQVVMVF9NRU1PUlkuXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI2MDAtXHQgKi9cbi0tXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg9MTY1OD1zdHJ1Y3Qga3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NjMtXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6MTY2NDojZGVmaW5lIEtWTV9QUkVfRkFVTFRfTUVNT1JZXHRfSU9XUihLVk1JTywgMHhkNSwgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5KVxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NjUtXG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oPTE2NTg9c3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQge1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjYzLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oOjE2NjQ6I2RlZmluZSBLVk1fUFJFX0ZBVUxUX01FTU9SWVx0X0lPV1IoS1ZNSU8sIDB4ZDUsIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSlcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjY1LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuYz02Nj1zdGF0aWMgdm9pZCBwcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGJhc2VfZ3BhLCB1NjQgb2Zmc2V0LFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuYy05Ni1cdFx0cHJldiA9IHJhbmdlLnNpemU7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmM6OTc6XHRcdHJldCA9IF9fdmNwdV9pb2N0bCh2Y3B1LCBLVk1fUFJFX0ZBVUxUX01FTU9SWSwgXHUwMDI2cmFuZ2UpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jLTk4LVx0XHRzYXZlX2Vycm5vID0gZXJybm87XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jLTE1Ny1cdGlmICghZXhwZWN0ZWRfbGVmdClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuYzoxNTg6XHRcdFRFU1RfQVNTRVJUX1ZNX1ZDUFVfSU9DVEwoIXJldCwgS1ZNX1BSRV9GQVVMVF9NRU1PUlksIHJldCwgdmNwdS1cdTAwM2V2bSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmMtMTU5LVx0ZWxzZVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jLTE2MC1cdFx0VEVTVF9BU1NFUlRfVk1fVkNQVV9JT0NUTChyZXQgXHUwMDI2XHUwMDI2IHNhdmVfZXJybm8gPT0gRU5PRU5ULFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jOjE2MTpcdFx0XHRcdFx0ICBLVk1fUFJFX0ZBVUxUX01FTU9SWSwgcmV0LCB2Y3B1LVx1MDAzZXZtKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuYy0xNjItfVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9NDQwNj1zdGF0aWMgbG9uZyBrdm1fdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ2MzItI2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjQ2MzM6XHRjYXNlIEtWTV9QUkVfRkFVTFRfTUVNT1JZOiB7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQ2MzQtXHRcdHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSByYW5nZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE2NAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBzbmlwcGV0LCBmcmFtZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gS1ZNJiMzOTtzIENvcmUqKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIEtWTSBpbnRlcmFjdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyB0aGUgdmlydHVhbCBDUFUgaXMgbWFuYWdlZC4gVGhlIGZpcnN0IHBsYWNlIEkmIzM5O20gZ29pbmcgdG8gbG9vayBpcyB0aGUgYGt2bV92Y3B1X2lvY3RsYCBmdW5jdGlvbi4gSSByZW1lbWJlciB0aGF0JiMzOTtzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciBjb250cm9sIG9wZXJhdGlvbnMgb24gdGhlIHZpcnR1YWwgQ1BVLiBOb3csIHRoZSBoaW50IGFsc28gbWVudGlvbnMgdGhlIGZpbGUgYW5kIGxpbmUsIHdoaWNoIHNob3VsZCBleHBlZGl0ZSB0aGluZ3M7IGl0JiMzOTtzIGdvaW5nIHRvIGJlIGluIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCBhcm91bmQgbGluZSA0NjMzLiBLbm93aW5nIHRoZSBmaWxlIGxvY2F0aW9uIGlzIGtleSAtIGl0IHBsYWNlcyB0aGlzIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgS1ZNJiMzOTtzIGNvcmUgYXJjaGl0ZWN0dXJlLiBXaXRoIHRoZSBsaW5lIG51bWJlciwgSSBjYW4gc3RhcnQgcmlnaHQgd2hlcmUgSSBuZWVkIHRvIGJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NjI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ2MjU6XHRcdFx0ciA9IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X2ZwdSh2Y3B1LCBmcHUpO1xuNDYyNjpcdFx0XHRicmVhaztcbjQ2Mjc6XHRcdH1cbjQ2Mjg6XHRcdGNhc2UgS1ZNX0dFVF9TVEFUU19GRDoge1xuNDYyOTpcdFx0XHRyID0ga3ZtX3ZjcHVfaW9jdGxfZ2V0X3N0YXRzX2ZkKHZjcHUpO1xuNDYzMDpcdFx0XHRicmVhaztcbjQ2MzE6XHRcdH1cbjQ2MzI6XHQjaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcbjQ2MzM6XHRcdGNhc2UgS1ZNX1BSRV9GQVVMVF9NRU1PUlk6IHtcbjQ2MzQ6XHRcdFx0c3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5IHJhbmdlO1xuNDYzNTpcdFxuNDYzNjpcdFx0XHRyID0gLUVGQVVMVDtcbjQ2Mzc6XHRcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnJhbmdlLCBhcmdwLCBzaXplb2YocmFuZ2UpKSlcbjQ2Mzg6XHRcdFx0XHRicmVhaztcbjQ2Mzk6XHRcdFx0ciA9IGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnkodmNwdSwgXHUwMDI2cmFuZ2UpO1xuNDY0MDpcdFx0XHQvKiBQYXNzIGJhY2sgbGVmdG92ZXIgcmFuZ2UuICovXG40NjQxOlx0XHRcdGlmIChjb3B5X3RvX3VzZXIoYXJncCwgXHUwMDI2cmFuZ2UsIHNpemVvZihyYW5nZSkpKVxuNDY0MjpcdFx0XHRcdHIgPSAtRUZBVUxUO1xuNDY0MzpcdFx0XHRicmVhaztcbjQ2NDQ6XHRcdH1cbjQ2NDU6XHQjZW5kaWZcbjQ2NDY6XHRcdGRlZmF1bHQ6XG40NjQ3Olx0XHRcdHIgPSBrdm1fYXJjaF92Y3B1X2lvY3RsKGZpbHAsIGlvY3RsLCBhcmcpO1xuNDY0ODpcdFx0fVxuNDY0OTpcdG91dDpcbjQ2NTA6XHRcdG11dGV4X3VubG9jayhcdTAwMjZ2Y3B1LVx1MDAzZW11dGV4KTtcbjQ2NTE6XHRcdGtmcmVlKGZwdSk7XG40NjUyOlx0XHRrZnJlZShrdm1fc3JlZ3MpO1xuNDY1MzpcdFx0cmV0dXJuIHI7XG40NjU0Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODcyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS1ZNIFByZS1GYXVsdCBNZW1vcnkgUHJvY2VzcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgS1ZNX1BSRV9GQVVMVF9NRU1PUllgIG9wZXJhdGlvbiwgYW5kIGl0IHNlZW1zIGxpa2UgdGhlIHNlcXVlbmNlIG9mIGV2ZW50cyBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGF0IGZpcnN0IGdsYW5jZS4gSXQgY29waWVzIGEgbWVtb3J5IGByYW5nZWAgZnJvbSB1c2Vyc3BhY2UsIGNhbGxzIGBrdm1fdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCB3aXRoIHRoYXQgYHJhbmdlYCwgYW5kIHRoZW4gY29waWVzIHRoZSBwb3RlbnRpYWxseSBtb2RpZmllZCBgcmFuZ2VgIGJhY2sgdG8gdXNlcnNwYWNlLgoKQnV0IHdhaXQgYSBtaW51dGUuLi4gZG9lcyBga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgYWN0dWFsbHkgKm1vZGlmeSogdGhhdCBgcmFuZ2VgPyBUaGF0JiMzOTtzIHRoZSBjcnVjaWFsIGRldGFpbCBJIG5lZWQgdG8gbmFpbCBkb3duLiBJZiBpdCBkb2VzLCBhbmQgaG93IGl0IGlzIG1vZGlmaWVkLCB0aGF0IHdpbGwgY2hhbmdlIGV2ZXJ5dGhpbmcgYWJvdXQgaG93IEkgc2VlIHRoaXMgZnVuY3Rpb24hCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgc291cmNlIGNvZGUgdG8gZ2V0IHRoZSBkZWZpbml0aXZlIGFuc3dlci4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLCBhbmQgZnJvbSBteSBleHBlcmllbmNlLCB0aGF0IGZ1bmN0aW9uIGlzIHByb2JhYmx5IGluIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZyB0byB0aGlzIGByYW5nZWAgd2l0aGluIHRoYXQgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzaWRlIGVmZmVjdHMgaWYgSSYjMzk7bSBnb2luZyB0byB1bmRlcnN0YW5kIHRoaXMgZnVuY3Rpb24gY29tcGxldGVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDMzNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MzM0Olx0c3RhdGljIGludCBrdm1fdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbjQzMzU6XHRcdFx0XHRcdCAgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSlcbjQzMzY6XHR7XG40MzM3Olx0XHRpbnQgaWR4O1xuNDMzODpcdFx0bG9uZyByO1xuNDMzOTpcdFx0dTY0IGZ1bGxfc2l6ZTtcbjQzNDA6XHRcbjQzNDE6XHRcdGlmIChyYW5nZS1cdTAwM2VmbGFncylcbjQzNDI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG40MzQzOlx0XG40MzQ0Olx0XHRpZiAoIVBBR0VfQUxJR05FRChyYW5nZS1cdTAwM2VncGEpIHx8XG40MzQ1Olx0XHQgICAgIVBBR0VfQUxJR05FRChyYW5nZS1cdTAwM2VzaXplKSB8fFxuNDM0NjpcdFx0ICAgIHJhbmdlLVx1MDAzZWdwYSAmIzQzOyByYW5nZS1cdTAwM2VzaXplIFx1MDAzYz0gcmFuZ2UtXHUwMDNlZ3BhKVxuNDM0NzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQzNDg6XHRcbjQzNDk6XHRcdHZjcHVfbG9hZCh2Y3B1KTtcbjQzNTA6XHRcdGlkeCA9IHNyY3VfcmVhZF9sb2NrKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZXNyY3UpO1xuNDM1MTpcdFxuNDM1MjpcdFx0ZnVsbF9zaXplID0gcmFuZ2UtXHUwMDNlc2l6ZTtcbjQzNTM6XHRcdGRvIHtcbjQzNTQ6XHRcdFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XG40MzU1Olx0XHRcdFx0ciA9IC1FSU5UUjtcbjQzNTY6XHRcdFx0XHRicmVhaztcbjQzNTc6XHRcdFx0fVxuNDM1ODpcdFxuNDM1OTpcdFx0XHRyID0ga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHZjcHUsIHJhbmdlKTtcbjQzNjA6XHRcdFx0aWYgKFdBUk5fT05fT05DRShyID09IDAgfHwgciA9PSAtRUlPKSlcbjQzNjE6XHRcdFx0XHRicmVhaztcbjQzNjI6XHRcbjQzNjM6XHRcdFx0aWYgKHIgXHUwMDNjIDApXG40MzY0Olx0XHRcdFx0YnJlYWs7XG40MzY1Olx0XG40MzY2Olx0XHRcdHJhbmdlLVx1MDAzZXNpemUgLT0gcjtcbjQzNjc6XHRcdFx0cmFuZ2UtXHUwMDNlZ3BhICYjNDM7PSByO1xuNDM2ODpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbjQzNjk6XHRcdH0gd2hpbGUgKHJhbmdlLVx1MDAzZXNpemUpO1xuNDM3MDpcdFxuNDM3MTpcdFx0c3JjdV9yZWFkX3VubG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VzcmN1LCBpZHgpO1xuNDM3MjpcdFx0dmNwdV9wdXQodmNwdSk7XG40MzczOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODIxCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgTWVtb3J5IExlYWtzIGFuZCBQYWRkaW5nIGluIGBrdm1fcHJlX2ZhdWx0X21lbW9yeWAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSB3aGVyZSBgcmFuZ2VgIGlzIGJlaW5nIG1hbmlwdWxhdGVkLiBUaGUgc2l6ZSBhbmQgR1BBIGFyZSBhZGp1c3RlZCAoYHJhbmdlLSZndDtzaXplIC09IHI7IHJhbmdlLSZndDtncGEgJiM0Mzs9IHI7YCkgYW5kIHRoZW4gY29waWVkIGJhY2sgdG8gdGhlIHVzZXIgc3BhY2UuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IHNjYW4gZm9yIGEgcG9zc2libGUgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVhay4KCkhvd2V2ZXIsIEkgcmVtZW1iZXIgdGhhdCB0aGUgYHJhbmdlYCB2YXJpYWJsZSBpcyAqZnVsbHkqIGluaXRpYWxpemVkIHJpZ2h0IGF0IHRoZSBiZWdpbm5pbmcgYnkgdGhlIGBjb3B5X2Zyb21fdXNlcmAgY2FsbC4gU28sIHRoYXQmIzM5O3MgZ29vZC4gQnV0LCBhbmQgdGhpcyBpcyB3aGVyZSBJIG5lZWQgdG8gYmUgY2FyZWZ1bCwgd2hhdCBhYm91dCBwYWRkaW5nPyBJIG5lZWQgdG8gY29uc2lkZXIgaWYgdGhlcmUgbWlnaHQgYmUgYW55IHBhZGRpbmcgd2l0aGluIHRoZSBgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5YCBzdHJ1Y3R1cmUuIFRoaXMgY291bGQgbGVhZCB0byBpc3N1ZXMgaWYgbm90IGhhbmRsZWQgcHJvcGVybHkgZHVyaW5nIHRoZSBjb3B5IG9wZXJhdGlvbnMuCgpUbyBlbnN1cmUgdGhpcyBpcyBoYW5kbGVkIHNhZmVseSwgSSBzaG91bGQgaW1tZWRpYXRlbHkgcmVmZXJlbmNlIHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnlgIGluIGBpbmNsdWRlL3VhcGkvbGludXgva3ZtLmhgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBkZWZpbml0aXZlIGFuc3dlciB3aWxsIGJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgXFx7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02NDgyPUVycm9yczpcbi0tXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQ5Ny1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NDk4OiAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5IHtcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDk5LVx0LyogaW4vb3V0ICovXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oPTE2NTg9c3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjY1LVxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oOjE2NjY6c3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5IHtcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjY3LVx0X191NjQgZ3BhO1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaD0xNjU4PXN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkIHtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY2NS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaDoxNjY2OnN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSB7XG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY2Ny1cdF9fdTY0IGdwYTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1MDUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIEtWTSYjMzk7cyBNZW1vcnkgUmVnaW9uIERlZmluaXRpb25zKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgS1ZNJiMzOTtzIG1lbW9yeSByZWdpb24gbWFuYWdlbWVudC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIHN0cnVjdHVyZXMgdGhhdCBkZWZpbmUgaG93IGd1ZXN0IHBoeXNpY2FsIG1lbW9yeSBpcyBtYXBwZWQgdG8gaG9zdCB2aXJ0dWFsIG1lbW9yeSwgc28gSSYjMzk7bGwgYmUgaGVhZGluZyB0byBgaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oYC4gSSYjMzk7bSBndWVzc2luZyBhcm91bmQgbGluZSAxNjY2IHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gZmluZCB0aGUgcmVsZXZhbnQgc3RydWN0cy4gVGhpcyBpcyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBtZWF0IG9mIHRoZSBtZW1vcnkgbWFwIGNvbmZpZ3VyYXRpb24uIEkmIzM5O20gbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgdGhlIGBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb25gIHN0cnVjdHVyZSBhbmQgaXRzIHJlbGF0ZWQgZmllbGRzLiBJIHdhbnQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB1c2VyLXNwYWNlIGludGVyYWN0cyB3aXRoIHRoZSBLVk0gY29yZSB0byBzZXQgdXAgbWVtb3J5IHJlZ2lvbnMsIHRoZSBpbXBsaWNhdGlvbnMgb2YgZGlmZmVyZW50IGZsYWdzIGFuZCBhdHRyaWJ1dGVzLCBhbmQgYW55IGFsaWdubWVudCBjb25zdHJhaW50cy4gSG9wZWZ1bGx5LCB0aGlzIHdpbGwgZ2l2ZSBtZSB0aGUgaW5mb3JtYXRpb24gSSBuZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTY2MDpcdFx0X191NjQgZmxhZ3M7XG4xNjYxOlx0XHRfX3U2NCByZXNlcnZlZFs2XTtcbjE2NjI6XHR9O1xuMTY2MzpcdFxuMTY2NDpcdCNkZWZpbmUgS1ZNX1BSRV9GQVVMVF9NRU1PUllcdF9JT1dSKEtWTUlPLCAweGQ1LCBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkpXG4xNjY1Olx0XG4xNjY2Olx0c3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5IHtcbjE2Njc6XHRcdF9fdTY0IGdwYTtcbjE2Njg6XHRcdF9fdTY0IHNpemU7XG4xNjY5Olx0XHRfX3U2NCBmbGFncztcbjE2NzA6XHRcdF9fdTY0IHBhZGRpbmdbNV07XG4xNjcxOlx0fTtcbjE2NzI6XHRcbjE2NzM6XHQjZW5kaWYgLyogX19MSU5VWF9LVk1fSCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk5NgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDY2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYGt2bV9wcmVfZmF1bHRfbWVtb3J5YCBhbmQgUG90ZW50aWFsIEluZm9ybWF0aW9uIExlYWtzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnlgIGFuZCBub3RpY2luZyB0aGF0IGl0IGhhcyBzb21lIHBhZGRpbmcuIE15IGluaXRpYWwgdGhvdWdodCB3YXMsIGlmIHdlIGNvcHkgdGhpcyBzdHJ1Y3QgZnJvbSB1c2VyIHNwYWNlIHVzaW5nIGBjb3B5X2Zyb21fdXNlcmAgaW50byBhIGByYW5nZWAgdmFyaWFibGUsIHRoZW4gbW9kaWZ5IGNlcnRhaW4gZmllbGRzIGxpa2UgYHJhbmdlLSZndDtzaXplYCBhbmQgYHJhbmdlLSZndDtncGFgLCBhbmQgdGhlbiBgY29weV90b191c2VyYCBpdCBiYWNrLCB0aGVyZSBzaG91bGRuJiMzOTt0IGJlIGEgdnVsbmVyYWJpbGl0eS4gVGhlIHBhZGRpbmcgZmllbGRzIGp1c3QgZWNobyBiYWNrIHdoYXRldmVyIHRoZSB1c2VyIHNlbnQuIFRoZXJlJiMzOTtzIG5vIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBiZWluZyBsZWFrZWQgaGVyZSwgYmVjYXVzZSB0aGUga2VybmVsIGlzIG1lcmVseSByZWZsZWN0aW5nIHRoZSB1c2VyJiMzOTtzIGlucHV0LgoKQnV0LCBob2xkIG9uLiBXaGF0IGlmIGBjb3B5X2Zyb21fdXNlcmAgZmFpbHM/IFRoZW4gdGhlIGNvcHktYmFjayBkb2VzbiYjMzk7dCBoYXBwZW4uIFdoYXQgaWYgYGNvcHlfZnJvbV91c2VyYCAqc3VjY2VlZHMqIGJ1dCB0aGUga2VybmVsIHNvbWVob3cgZGlkbiYjMzk7dCBpbml0aWFsaXplIGByYW5nZWAgZmlyc3Q/IEFoLCBidXQgd2FpdCwgdGhlIGVudGlyZSBgcmFuZ2VgIHN0cnVjdCBpcyBpbml0aWFsaXplZCBieSBgY29weV9mcm9tX3VzZXJgLCBzbyB0aGF0JiMzOTtzIGEgbW9vdCBwb2ludC4KCkxldCBtZSByZXZpc2l0IHRoZSBjb3JlIGxvZ2ljIHdpdGhpbiBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YC4gSXQgbG9va3MgbGlrZSBpdCBpbml0aWFsaXplcyBhIGBrdm1fZ3N0YWdlX21hcHBpbmdgIHN0cnVjdCBjYWxsZWQgYG91dF9tYXBgIHRvIGFsbCB6ZXJvcy4gSXQgdGhlbiBjYWxscyBga3ZtX3Jpc2N2X21tdV9tYXBgIHRvIHBvcHVsYXRlIGl0LiBJIHNlZSB0aGF0IGBrdm1fcmlzY3ZfbW11X21hcGAgaXMgdGhlIGNydWNpYWwgcGFydCB0aGF0IGxpa2VseSBwb3B1bGF0ZXMgYG91dF9tYXBgLiBUaGF0JiMzOTtzIHRoZSBmdW5jdGlvbiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgaW4gYGFyY2gvcmlzY3Yva3ZtL21tdS5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9tbXUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDczMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzMwOlx0XHRpZiAoIWxvZ2dpbmcgXHUwMDI2XHUwMDI2ICFpc19odWdldGxiIFx1MDAyNlx1MDAyNiB2bWFfcGFnZXNpemUgPT0gUEFHRV9TSVpFKVxuIDczMTpcdFx0XHR2bWFfcGFnZXNpemUgPSB0cmFuc3BhcmVudF9odWdlcGFnZV9hZGp1c3Qoa3ZtLCBtZW1zbG90LCBodmEsIFx1MDAyNmhmbiwgXHUwMDI2Z3BhKTtcbiA3MzI6XHRcbiA3MzM6XHRcdGlmICh3cml0YWJsZSkge1xuIDczNDpcdFx0XHRtYXJrX3BhZ2VfZGlydHlfaW5fc2xvdChrdm0sIG1lbXNsb3QsIGdmbik7XG4gNzM1Olx0XHRcdHJldCA9IGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2UoXHUwMDI2Z3N0YWdlLCBwY2FjaGUsIGdwYSwgaGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULFxuIDczNjpcdFx0XHRcdFx0XHRcdHZtYV9wYWdlc2l6ZSwgZmFsc2UsIHRydWUsIG91dF9tYXApO1xuIDczNzpcdFx0fSBlbHNlIHtcbiA3Mzg6XHRcdFx0cmV0ID0ga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZShcdTAwMjZnc3RhZ2UsIHBjYWNoZSwgZ3BhLCBoZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsXG4gNzM5Olx0XHRcdFx0XHRcdFx0dm1hX3BhZ2VzaXplLCB0cnVlLCB0cnVlLCBvdXRfbWFwKTtcbiA3NDA6XHRcdH1cbiA3NDE6XHRcbiA3NDI6XHRcdGlmIChyZXQpXG4gNzQzOlx0XHRcdGt2bV9lcnIoXCYjMzQ7RmFpbGVkIHRvIG1hcCBpbiBHLXN0YWdlXFxuXCYjMzQ7KTtcbiA3NDQ6XHRcbiA3NDU6XHRvdXRfdW5sb2NrOlxuIDc0NjpcdFx0a3ZtX3JlbGVhc2VfZmF1bHRpbl9wYWdlKGt2bSwgcGFnZSwgcmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVFWElTVCwgd3JpdGFibGUpO1xuIDc0NzpcdFx0d3JpdGVfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4gNzQ4Olx0XHRyZXR1cm4gcmV0O1xuIDc0OTpcdH1cbiA3NTA6XHRcbiA3NTE6XHRsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4gNzUyOlx0XHRcdFx0XHQgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSlcbiA3NTM6XHR7XG4gNzU0Olx0XHRzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nIG91dF9tYXAgPSB7IDAgfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1MjgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBLVk0gZm9yIFJJU0MtVjogZ3N0YWdlIGFuZCBQYWdlIE1hcHBpbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgS1ZNIGludGVyYWN0cyB3aXRoIHRoZSBSSVNDLVYgYXJjaGl0ZWN0dXJlIGF0IGEgZnVuZGFtZW50YWwgbGV2ZWwsIHBhcnRpY3VsYXJseSByZWdhcmRpbmcgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBndWVzdCBlbnZpcm9ubWVudC4gVGhlIGZ1bmN0aW9uIGBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlYCBpbiBgYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNgIHNlZW1zIGxpa2UgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGF0IHB1enpsZS4gSXQmIzM5O3MgdGltZSB0byBkaXNzZWN0IGl0cyBpbm5lciB3b3JraW5ncy4gSSBzdXNwZWN0IHRoaXMgZnVuY3Rpb24gaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIHdoZXJlIHRoZSBndWVzdCYjMzk7cyB2aXJ0dWFsIGFkZHJlc3NlcyBhcmUgdHJhbnNsYXRlZCBhbmQgbWFwcGVkIHRvIHRoZSBob3N0JiMzOTtzIHBoeXNpY2FsIG1lbW9yeSwgcG90ZW50aWFsbHkgdXNpbmcgdGhlIGdzdGFnZSBtZWNoYW5pc21zLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaGFuZGxlcyBwYWdlIHRhYmxlIHdhbGtzLCB0aGUgaW50ZXJhY3Rpb24gd2l0aCBSSVNDLVYmIzM5O3MgcGFnZSB0YWJsZSBzdHJ1Y3R1cmVzLCBhbmQgYW55IHNwZWNpZmljIG9wdGltaXphdGlvbnMgZm9yIHRoZSBhcmNoaXRlY3R1cmUuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaG93IHRoZSBLVk0gbWFjaGluZXJ5IHRyYW5zbGF0ZXMgYSBndWVzdCB2aXJ0dWFsIGFkZHJlc3MgaW50byBhIHBoeXNpY2FsIGFkZHJlc3Mgb24gdGhlIGhvc3QuIFRoaXMgbGlrZWx5IGludm9sdmVzIHNvbWUgY2xldmVyIG1hbmlwdWxhdGlvbnMgYW5kIGNvbnNpZGVyYXRpb25zIGZvciBwZXJmb3JtYW5jZSwgdmlydHVhbCBtZW1vcnkgcHJvdGVjdGlvbiwgYW5kIGhvdyBpdCBhbGwgd29ya3MgdW5kZXIgdGhlIGhvb2QuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjcwOlx0XHRcdCAqXG4gMjcxOlx0XHRcdCAqIEl0IGlzIGJldHRlciB0byByZWNvdmVyIHRoZSBodWdlIHBhZ2UgbWFwcGluZyBpbiB0aGUgaW9jdGwgY29udGV4dCB3aGVuXG4gMjcyOlx0XHRcdCAqIGRpc2FibGluZyBkaXJ0eSBsb2dnaW5nLlxuIDI3MzpcdFx0XHQgKlxuIDI3NDpcdFx0XHQgKiAzKSBwdGVwX2xldmVsID09IG91dF9tYXAtXHUwMDNlbGV2ZWxcbiAyNzU6XHRcdFx0ICogV2UgYWxyZWFkeSBoYXZlIHRoZSBwdGVwLCBqdXN0IHVwZGF0ZSB0aGUgcHRlIHByb3QgaWYgdGhlIHBmbiBub3QgY2hhbmdlLlxuIDI3NjpcdFx0XHQgKiBUaGVyZSBpcyBubyBuZWVkIHRvIGludm9rZSBga3ZtX3Jpc2N2X2dzdGFnZV9zZXRfcHRlYCBhZ2Fpbi5cbiAyNzc6XHRcdFx0ICovXG4gMjc4Olx0XHRcdGlmIChwdGVwX2xldmVsIFx1MDAzZSBvdXRfbWFwLVx1MDAzZWxldmVsKSB7XG4gMjc5Olx0XHRcdFx0a3ZtX3Jpc2N2X2dzdGFnZV9zcGxpdF9odWdlKGdzdGFnZSwgcGNhY2hlLCBncGEsXG4gMjgwOlx0XHRcdFx0XHRcdFx0ICAgIG91dF9tYXAtXHUwMDNlbGV2ZWwsIHRydWUpO1xuIDI4MTpcdFx0XHR9IGVsc2UgaWYgKEFMSUdOX0RPV04oUEZOX1BIWVMocHRlX3BmbihwdGVwX2dldChwdGVwKSkpLCBwYWdlX3NpemUpID09IGhwYSkge1xuIDI4MjpcdFx0XHRcdGt2bV9yaXNjdl9nc3RhZ2VfdXBkYXRlX3B0ZV9wcm90KGdzdGFnZSwgcHRlcF9sZXZlbCwgZ3BhLCBwdGVwLCBwcm90KTtcbiAyODM6XHRcdFx0XHRvdXRfbWFwLVx1MDAzZWFkZHIgPSBBTElHTl9ET1dOKGdwYSwgcGFnZV9zaXplKTtcbiAyODQ6XHRcdFx0XHRvdXRfbWFwLVx1MDAzZWxldmVsID0gcHRlcF9sZXZlbDtcbiAyODU6XHRcdFx0XHRvdXRfbWFwLVx1MDAzZXB0ZSA9IHB0ZXBfZ2V0KHB0ZXApO1xuIDI4NjpcdFx0XHRcdHJldHVybiAwO1xuIDI4NzpcdFx0XHR9XG4gMjg4Olx0XHR9XG4gMjg5Olx0XG4gMjkwOlx0XHRvdXRfbWFwLVx1MDAzZXB0ZSA9IHBmbl9wdGUoUEZOX0RPV04oaHBhKSwgcHJvdCk7XG4gMjkxOlx0XHRvdXRfbWFwLVx1MDAzZXB0ZSA9IHB0ZV9ta2RpcnR5KG91dF9tYXAtXHUwMDNlcHRlKTtcbiAyOTI6XHRcbiAyOTM6XHRcdHJldHVybiBrdm1fcmlzY3ZfZ3N0YWdlX3NldF9wdGUoZ3N0YWdlLCBwY2FjaGUsIG91dF9tYXApO1xuIDI5NDpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzNTIKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgb3V0X21hcGAgUGFyYW1ldGVyIGluIEtWTS1SSVNDViBHLVN0YWdlIE1hcHBpbmcqKgoKT2theSwgc28gSSBzZWUgYG91dF9tYXBgIGlzIGJlaW5nIGZlZCBpbnRvIGBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gVGhlIHdheSB0aGUgY29kZSYjMzk7cyBzdHJ1Y3R1cmVkLCBpdCBsb29rcyBsaWtlIGBvdXRfbWFwYCBpcyBhY3RpbmcgYXMgYm90aCBhbiBpbnB1dCAqYW5kKiBhbiBvdXRwdXQgcGFyYW1ldGVyIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBJIG5lZWQgdG8gY2xhcmlmeSB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZyBoZXJlLiBHaXZlbiBteSBleHBlcmllbmNlLCB0aGF0JiMzOTtzIG5vdCBuZWNlc3NhcmlseSBhIGJhZCB0aGluZywgYnV0IEkgd2FudCB0byBtYWtlIHN1cmUgSSBncmFzcCB0aGUgaW50ZW50IGZ1bGx5LiBMZXQgbWUgcXVpY2tseSBleGFtaW5lIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgb2YgYGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2VgIHRvIHZlcmlmeSBob3cgaXQgaGFuZGxlcyBgb3V0X21hcGAuIFRoYXQmIzM5O2xsIGJlIGtleSB0byBmaWd1cmluZyBvdXQgaG93IHRoaXMgbWVtb3J5IG1hcHBpbmcgaXMgZnVuY3Rpb25pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmg9NTc9Ym9vbCBrdm1fcmlzY3ZfZ3N0YWdlX3RyeV91cGRhdGVfcHRlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsIHUzMiBsZXZlbCxcbi0tXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaC02MC1cbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2dzdGFnZS5oOjYxOmludCBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaC02Mi1cdFx0XHQgICAgICBzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgKnBjYWNoZSxcbi0tXG5hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYz0xODY9c3RhdGljIHZvaWQga3ZtX3Jpc2N2X2dzdGFnZV91cGRhdGVfcHRlX3Byb3Qoc3RydWN0IGt2bV9nc3RhZ2UgKmdzdGFnZSwgdTMyIGxldmVsLFxuLS1cbmFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jLTIwNi1cbmFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jOjIwNzppbnQga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLFxuYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmMtMjA4LVx0XHRcdCAgICAgIHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSAqcGNhY2hlLFxuLS1cbmFyY2gvcmlzY3Yva3ZtL21tdS5jPTYyMz1pbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxuLS1cbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTczNC1cdFx0bWFya19wYWdlX2RpcnR5X2luX3Nsb3Qoa3ZtLCBtZW1zbG90LCBnZm4pO1xuYXJjaC9yaXNjdi9rdm0vbW11LmM6NzM1Olx0XHRyZXQgPSBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKFx1MDAyNmdzdGFnZSwgcGNhY2hlLCBncGEsIGhmbiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTczNi1cdFx0XHRcdFx0XHR2bWFfcGFnZXNpemUsIGZhbHNlLCB0cnVlLCBvdXRfbWFwKTtcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTczNy1cdH0gZWxzZSB7XG5hcmNoL3Jpc2N2L2t2bS9tbXUuYzo3Mzg6XHRcdHJldCA9IGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2UoXHUwMDI2Z3N0YWdlLCBwY2FjaGUsIGdwYSwgaGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNzM5LVx0XHRcdFx0XHRcdHZtYV9wYWdlc2l6ZSwgdHJ1ZSwgdHJ1ZSwgb3V0X21hcCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MjM0CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIGBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlYCBpbiBgYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNgLCBzcGVjaWZpY2FsbHkgc3RhcnRpbmcgYXQgbGluZSAyMDcuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGdzdGFnZSBtYXBwaW5nIHByb2Nlc3Mgd2l0aGluIHRoZSBLVk0vUklTQy1WIGFyY2hpdGVjdHVyZS4gSSYjMzk7bSBpbnRlcmVzdGVkIGluIGhvdyB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gaXMgaGFuZGxpbmcgdGhlIG1hcHBpbmcgb2YgYSBwYWdlIHdpdGhpbiB0aGUgZ3Vlc3Qgc3RhZ2UuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGxhcmdlciBjb250ZXh0IG9mIHZpcnR1YWwgbWVtb3J5IHRyYW5zbGF0aW9uIGFuZCB0aGUgZ3Vlc3QmIzM5O3MgdmlldyBvZiB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBkZXRhaWxzIGFib3V0IHBhZ2UgdGFibGUgd2Fsa3MsIHBlcm1pc3Npb24gY2hlY2tzLCBhbmQgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGhvc3QmIzM5O3MgcGh5c2ljYWwgbWVtb3J5LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgUklTQy1WIHNwZWNpZmljIGludHJpY2FjaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjA3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMDc6XHRpbnQga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLFxuIDIwODpcdFx0XHRcdCAgICAgIHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSAqcGNhY2hlLFxuIDIwOTpcdFx0XHRcdCAgICAgIGdwYV90IGdwYSwgcGh5c19hZGRyX3QgaHBhLCB1bnNpZ25lZCBsb25nIHBhZ2Vfc2l6ZSxcbiAyMTA6XHRcdFx0XHQgICAgICBib29sIHBhZ2VfcmRvbmx5LCBib29sIHBhZ2VfZXhlYyxcbiAyMTE6XHRcdFx0XHQgICAgICBzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nICpvdXRfbWFwKVxuIDIxMjpcdHtcbiAyMTM6XHRcdGJvb2wgZm91bmRfbGVhZjtcbiAyMTQ6XHRcdHUzMiBwdGVwX2xldmVsO1xuIDIxNTpcdFx0cGdwcm90X3QgcHJvdDtcbiAyMTY6XHRcdHB0ZV90ICpwdGVwO1xuIDIxNzpcdFx0aW50IHJldDtcbiAyMTg6XHRcbiAyMTk6XHRcdG91dF9tYXAtXHUwMDNlYWRkciA9IGdwYTtcbiAyMjA6XHRcdG91dF9tYXAtXHUwMDNlbGV2ZWwgPSAwO1xuIDIyMTpcdFxuIDIyMjpcdFx0cmV0ID0gZ3N0YWdlX3BhZ2Vfc2l6ZV90b19sZXZlbChnc3RhZ2UsIHBhZ2Vfc2l6ZSwgXHUwMDI2b3V0X21hcC1cdTAwM2VsZXZlbCk7XG4gMjIzOlx0XHRpZiAocmV0KVxuIDIyNDpcdFx0XHRyZXR1cm4gcmV0O1xuIDIyNTpcdFxuIDIyNjpcdFx0LypcbiAyMjc6XHRcdCAqIEEgUklTQy1WIGltcGxlbWVudGF0aW9uIGNhbiBjaG9vc2UgdG8gZWl0aGVyOlxuIDIyODpcdFx0ICogMSkgVXBkYXRlICYjMzk7QSYjMzk7IGFuZCAmIzM5O0QmIzM5OyBQVEUgYml0cyBpbiBoYXJkd2FyZVxuIDIyOTpcdFx0ICogMikgR2VuZXJhdGUgcGFnZSBmYXVsdCB3aGVuICYjMzk7QSYjMzk7IGFuZC9vciAmIzM5O0QmIzM5OyBiaXRzIGFyZSBub3Qgc2V0XG4gMjMwOlx0XHQgKiAgICBQVEUgc28gdGhhdCBzb2Z0d2FyZSBjYW4gdXBkYXRlIHRoZXNlIGJpdHMuXG4gMjMxOlx0XHQgKlxuIDIzMjpcdFx0ICogV2Ugc3VwcG9ydCBib3RoIG9wdGlvbnMgbWVudGlvbmVkIGFib3ZlLiBUbyBhY2hpZXZlIHRoaXMsIHdlXG4gMjMzOlx0XHQgKiBhbHdheXMgc2V0ICYjMzk7QSYjMzk7IGFuZCAmIzM5O0QmIzM5OyBQVEUgYml0cyBhdCB0aW1lIG9mIGNyZWF0aW5nIEctc3RhZ2VcbiAyMzQ6XHRcdCAqIG1hcHBpbmcuIFRvIHN1cHBvcnQgS1ZNIGRpcnR5IHBhZ2UgbG9nZ2luZyB3aXRoIGJvdGggb3B0aW9uc1xuIDIzNTpcdFx0ICogbWVudGlvbmVkIGFib3ZlLCB3ZSB3aWxsIHdyaXRlLXByb3RlY3QgRy1zdGFnZSBQVEVzIHRvIHRyYWNrXG4gMjM2Olx0XHQgKiBkaXJ0eSBwYWdlcy5cbiAyMzc6XHRcdCAqL1xuIDIzODpcdFxuIDIzOTpcdFx0aWYgKHBhZ2VfZXhlYykge1xuIDI0MDpcdFx0XHRpZiAocGFnZV9yZG9ubHkpXG4gMjQxOlx0XHRcdFx0cHJvdCA9IFBBR0VfUkVBRF9FWEVDO1xuIDI0MjpcdFx0XHRlbHNlXG4gMjQzOlx0XHRcdFx0cHJvdCA9IFBBR0VfV1JJVEVfRVhFQztcbiAyNDQ6XHRcdH0gZWxzZSB7XG4gMjQ1Olx0XHRcdGlmIChwYWdlX3Jkb25seSlcbiAyNDY6XHRcdFx0XHRwcm90ID0gUEFHRV9SRUFEO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjEyNAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlYCBmdW5jdGlvbiwgZm9jdXNpbmcgb24gdGhlIG1hcHBpbmcgc2V0dXA6CgoqKk15IFBlcnNwZWN0aXZlIG9uIHRoZSBNYXBwaW5nIFByb2Nlc3MqKgoKT2theSwgc28gSSBzZWUgdGhhdCB3ZSYjMzk7cmUgaW5pdGlhbGx5IHNldHRpbmcgdXAgdGhlIGFkZHJlc3MgbWFwcGluZyB3aXRoIGBvdXRfbWFwLSZndDthZGRyID0gZ3BhO2AgYW5kIGBvdXRfbWFwLSZndDtsZXZlbCA9IDA7YC4gVGhpcyBzdWdnZXN0cyB3ZSYjMzk7cmUgZ2V0dGluZyB0aGUgZ3JvdW5kIHBoeXNpY2FsIGFkZHJlc3MgKEdQQSkgZGlyZWN0bHkgYXNzb2NpYXRlZCB3aXRoIGEgbWFwIGVudHJ5LCBhbmQgc3RhcnRpbmcgYXQgdGhlIHZlcnkgYmFzZSBsZXZlbCBvZiB0aGUgcGFnZSB0YWJsZSBoaWVyYXJjaHkuIEkmIzM5O2QgZXhwZWN0IHRoaXMgbGV2ZWwgdG8gYmUgYSBiaXQgY29hcnNlIGF0IHRoaXMgcG9pbnQsIGJlZm9yZSBhbnkgbW9yZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uLgoKVGhlbiwgdGhlIGNvZGUgY2FsbHMgYGdzdGFnZV9wYWdlX3NpemVfdG9fbGV2ZWxgLCBhbmQgKnRoYXQmIzM5O3MqIHdoZXJlIHRoZSBjcnVjaWFsIHBhcnQgaGFwcGVucy4gVGhpcyBpbXBsaWVzIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBjb3JyZWN0IHBhZ2UgdGFibGUgbGV2ZWwgdG8gdXNlIGJhc2VkIG9uIHRoZSBwYWdlIHNpemUuIEkmIzM5O2QgYmV0IHRoaXMgZnVuY3Rpb24gdGFrZXMgaW50byBjb25zaWRlcmF0aW9uIGhhcmR3YXJlIHBhZ2UgdGFibGUgc3VwcG9ydCAoZS5nLiwgc3BlY2lmaWMgcGFnZSBzaXplIGNhcGFiaWxpdGllcyBvZiB0aGUgUklTQy1WIGFyY2hpdGVjdHVyZSksIGFuZCBwb3RlbnRpYWxseSBhbHNvIGFueSBndWVzdC1jb25maWd1cmVkIHBhZ2Ugc2l6ZSBvdmVycmlkZXMgb3IgY29uc3RyYWludHMuIEluIG90aGVyIHdvcmRzLCBpdCYjMzk7cyBtYWtpbmcgdGhlIGRlY2lzaW9uIG9uICpob3cqIGdyYW51bGFyIHRoZSBtYXBwaW5nIHNob3VsZCBiZSwgYW5kIHNldHMgdGhlIGFwcHJvcHJpYXRlIGBvdXRfbWFwLSZndDtsZXZlbGAuCgpGaW5hbGx5LCBhZnRlciBhbGwgb2YgdGhhdCBtYXBwaW5nIHNldHVwLCB0aGUgZnVuY3Rpb24gY29uY2x1ZGVzIHdpdGggYWxsIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gcmVhZHkgdG8gZ28uIEkgc2VlIHRoZSBmaW5hbCBjb25maWd1cmF0aW9uIGlzIGNvbXBsZXRlIGF0IHRoaXMgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI0NzpcdFx0XHRlbHNlXG4gMjQ4Olx0XHRcdFx0cHJvdCA9IFBBR0VfV1JJVEU7XG4gMjQ5Olx0XHR9XG4gMjUwOlx0XG4gMjUxOlx0XHRmb3VuZF9sZWFmID0ga3ZtX3Jpc2N2X2dzdGFnZV9nZXRfbGVhZihnc3RhZ2UsIGdwYSwgXHUwMDI2cHRlcCwgXHUwMDI2cHRlcF9sZXZlbCk7XG4gMjUyOlx0XHRpZiAoZm91bmRfbGVhZikge1xuIDI1MzpcdFx0XHQvKlxuIDI1NDpcdFx0XHQgKiBwdGVwX2xldmVsIGlzIHRoZSBjdXJyZW50IGdzdGFnZSBtYXBwaW5nIGxldmVsIG9mIGFkZHIsIG91dF9tYXAtXHUwMDNlbGV2ZWxcbiAyNTU6XHRcdFx0ICogaXMgdGhlIHJlcXVpcmVkIG1hcHBpbmcgbGV2ZWwgZHVyaW5nIGZhdWx0IGhhbmRsaW5nLlxuIDI1NjpcdFx0XHQgKlxuIDI1NzpcdFx0XHQgKiAxKSBwdGVwX2xldmVsIFx1MDAzZSBvdXRfbWFwLVx1MDAzZWxldmVsXG4gMjU4Olx0XHRcdCAqIFRoaXMgaGFwcGVucyB3aGVuIGRpcnR5IGxvZ2dpbmcgaXMgZW5hYmxlZCBhbmQgaHVnZSBwYWdlcyBhcmUgdXNlZC5cbiAyNTk6XHRcdFx0ICogS1ZNIG11c3QgdHJhY2sgdGhlIHBhZ2VzIGF0IDRLIGxldmVsLCBhbmQgc3BsaXQgdGhlIGh1Z2UgbWFwcGluZ1xuIDI2MDpcdFx0XHQgKiBpbnRvIDRLIG1hcHBpbmdzLlxuIDI2MTpcdFx0XHQgKlxuIDI2MjpcdFx0XHQgKiAyKSBwdGVwX2xldmVsIFx1MDAzYyBvdXRfbWFwLVx1MDAzZWxldmVsXG4gMjYzOlx0XHRcdCAqIFRoaXMgaGFwcGVucyB3aGVuIGRpcnR5IGxvZ2dpbmcgaXMgZGlzYWJsZWQgYW5kIGh1Z2UgcGFnZXMgYXJlIHVzZWQuXG4gMjY0Olx0XHRcdCAqIFRoZSBnc3RhZ2UgaXMgc3BsaXQgaW50byA0SyBtYXBwaW5ncywgYnV0IHRoZSBvdXRfbWFwIGxldmVsIGlzIG5vd1xuIDI2NTpcdFx0XHQgKiBiYWNrIHRvIHRoZSBodWdlIHBhZ2UgbGV2ZWwuIElnbm9yZSB0aGUgb3V0X21hcCBsZXZlbCB0aGlzIHRpbWUsIGFuZFxuIDI2NjpcdFx0XHQgKiBqdXN0IHVwZGF0ZSB0aGUgcHRlIHByb3QgaGVyZS4gT3RoZXJ3aXNlLCB3ZSB3b3VsZCBmYWxsIGJhY2sgdG8gbWFwcGluZ1xuIDI2NzpcdFx0XHQgKiB0aGUgZ3N0YWdlIGF0IGh1Z2UgcGFnZSBsZXZlbCBpbiBga3ZtX3Jpc2N2X2dzdGFnZV9zZXRfcHRlYCwgd2l0aCB0aGVcbiAyNjg6XHRcdFx0ICogb3ZlcmhlYWQgb2YgZnJlZWluZyB0aGUgcGFnZSB0YWJsZXMobm90IHN1cHBvcnQgbm93KSwgd2hpY2ggd291bGQgc2xvd1xuIDI2OTpcdFx0XHQgKiBkb3duIHRoZSB2Q1BVcyYjMzk7IHBlcmZvcm1hbmNlLlxuIDI3MDpcdFx0XHQgKlxuIDI3MTpcdFx0XHQgKiBJdCBpcyBiZXR0ZXIgdG8gcmVjb3ZlciB0aGUgaHVnZSBwYWdlIG1hcHBpbmcgaW4gdGhlIGlvY3RsIGNvbnRleHQgd2hlblxuIDI3MjpcdFx0XHQgKiBkaXNhYmxpbmcgZGlydHkgbG9nZ2luZy5cbiAyNzM6XHRcdFx0ICpcbiAyNzQ6XHRcdFx0ICogMykgcHRlcF9sZXZlbCA9PSBvdXRfbWFwLVx1MDAzZWxldmVsXG4gMjc1Olx0XHRcdCAqIFdlIGFscmVhZHkgaGF2ZSB0aGUgcHRlcCwganVzdCB1cGRhdGUgdGhlIHB0ZSBwcm90IGlmIHRoZSBwZm4gbm90IGNoYW5nZS5cbiAyNzY6XHRcdFx0ICogVGhlcmUgaXMgbm8gbmVlZCB0byBpbnZva2UgYGt2bV9yaXNjdl9nc3RhZ2Vfc2V0X3B0ZWAgYWdhaW4uXG4gMjc3Olx0XHRcdCAqL1xuIDI3ODpcdFx0XHRpZiAocHRlcF9sZXZlbCBcdTAwM2Ugb3V0X21hcC1cdTAwM2VsZXZlbCkge1xuIDI3OTpcdFx0XHRcdGt2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZShnc3RhZ2UsIHBjYWNoZSwgZ3BhLFxuIDI4MDpcdFx0XHRcdFx0XHRcdCAgICBvdXRfbWFwLVx1MDAzZWxldmVsLCB0cnVlKTtcbiAyODE6XHRcdFx0fSBlbHNlIGlmIChBTElHTl9ET1dOKFBGTl9QSFlTKHB0ZV9wZm4ocHRlcF9nZXQocHRlcCkpKSwgcGFnZV9zaXplKSA9PSBocGEpIHtcbiAyODI6XHRcdFx0XHRrdm1fcmlzY3ZfZ3N0YWdlX3VwZGF0ZV9wdGVfcHJvdChnc3RhZ2UsIHB0ZXBfbGV2ZWwsIGdwYSwgcHRlcCwgcHJvdCk7XG4gMjgzOlx0XHRcdFx0b3V0X21hcC1cdTAwM2VhZGRyID0gQUxJR05fRE9XTihncGEsIHBhZ2Vfc2l6ZSk7XG4gMjg0Olx0XHRcdFx0b3V0X21hcC1cdTAwM2VsZXZlbCA9IHB0ZXBfbGV2ZWw7XG4gMjg1Olx0XHRcdFx0b3V0X21hcC1cdTAwM2VwdGUgPSBwdGVwX2dldChwdGVwKTtcbiAyODY6XHRcdFx0XHRyZXR1cm4gMDtcbiAyODc6XHRcdFx0fVxuIDI4ODpcdFx0fVxuIDI4OTpcdFxuIDI5MDpcdFx0b3V0X21hcC1cdTAwM2VwdGUgPSBwZm5fcHRlKFBGTl9ET1dOKGhwYSksIHByb3QpO1xuIDI5MTpcdFx0b3V0X21hcC1cdTAwM2VwdGUgPSBwdGVfbWtkaXJ0eShvdXRfbWFwLVx1MDAzZXB0ZSk7XG4gMjkyOlx0XG4gMjkzOlx0XHRyZXR1cm4ga3ZtX3Jpc2N2X2dzdGFnZV9zZXRfcHRlKGdzdGFnZSwgcGNhY2hlLCBvdXRfbWFwKTtcbiAyOTQ6XHR9XG4gMjk1Olx0XG4gMjk2Olx0c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1ha2VfY2hpbGRfcHRlKHVuc2lnbmVkIGxvbmcgaHVnZV9wdGUsIGludCBpbmRleCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0ODcKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA5MTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBJc3N1ZXMgaW4gUklTQy1WIEtWTSBQUkVfRkFVTFRfTUVNT1JZIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gc3RlcHBpbmcgdGhyb3VnaCB0aGlzIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGZ1bmN0aW9uLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0FyZSB0aGVyZSBhbnkgdnVsbmVyYWJpbGl0aWVzIGhlcmUgY29uY2VybmluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIHRvIHVzZXIgc3BhY2U/JiMzNDsgSSBzZWUgYG91dF9tYXAtJmd0O2FkZHJgLCBgb3V0X21hcC0mZ3Q7bGV2ZWxgLCBhbmQgYG91dF9tYXAtJmd0O3B0ZWAgYmVpbmcgc2V0LCB3aGljaCBpbW1lZGlhdGVseSB0cmlnZ2VycyB0aGUgcXVlc3Rpb24sICYjMzQ7SXMgdGhpcyBwb3RlbnRpYWxseSBsZWFraW5nIGtlcm5lbCBpbmZvcm1hdGlvbj8mIzM0OwoKQnV0IHdhaXQuIGBvdXRfbWFwYCBpcyBhIGxvY2FsIHZhcmlhYmxlIHdpdGhpbiBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YC4gSXQmIzM5O3MgdXNlZCBpbnRlcm5hbGx5IHRvIGNhbGN1bGF0ZSBgbWFwX3NpemVgIGFuZCBgZW5kYC4gVGhlIHJlbGV2YW50IGNvZGUgc25pcHBldCBtYWtlcyB0aGF0IHF1aXRlIGNsZWFyLiBJdCYjMzk7cyBub3QgY29waWVkIGJhY2sgdG8gdXNlciBzcGFjZSBkaXJlY3RseS4gVGhlIHJldHVybiB2YWx1ZSwgd2hpY2ggaXMgYSBsZW5ndGggY2FsY3VsYXRpb24gdXNpbmcgdGhvc2UgdmFsdWVzLCAqZG9lcyogbW9kaWZ5IGZpZWxkcyB3aXRoaW4gdGhlIGByYW5nZWAgc3RydWN0LCBzcGVjaWZpY2FsbHkgYHNpemVgIGFuZCBgZ3BhYCBpbiBga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAsIGJ1dCBpdCYjMzk7cyBmdW5kYW1lbnRhbGx5IGp1c3QgYSBsZW5ndGguIFRoZSBgcmFuZ2VgIHN0cnVjdCBpdHNlbGYgaXMgaGFuZGxlZCBieSBgY29weV9mcm9tX3VzZXJgIGluIHRoZSBjYWxsZXIuCgpTbywgSSYjMzk7bSB0aGlua2luZywgJiMzNDtObywgaXQgZG9lc24mIzM5O3QgbG9vayBsaWtlIHRoZXJlJiMzOTtzIGFueSBkaXJlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgZnJvbSBgb3V0X21hcGAgdG8gdXNlciBzcGFjZS4mIzM0OyBUaGUgYHJhbmdlYCBzdHJ1Y3QgY29tZXMgZnJvbSB1c2VyIHNwYWNlLCBhbmQgd2hpbGUgaXRzIGBzaXplYCBhbmQgYGdwYWAgbWVtYmVycyBhcmUgbW9kaWZpZWQsIHRoZSBwYWRkaW5nIGlzIHVudG91Y2hlZCwgZWNob2luZyBiYWNrIHdoYXQgdGhlIHVzZXIgaW5pdGlhbGx5IHN1cHBsaWVkLgoKSSBuZWVkIHRvIGJlIHRob3JvdWdoLCB0aG91Z2guIEkgYXNrIG15c2VsZiwgJiMzNDtJcyB0aGVyZSBhbm90aGVyIGxvY2F0aW9uIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGluIHBsYXk/JiMzNDsgSSBjb25zaWRlciBgb3V0X21hcGAgYWdhaW4uIEl0JiMzOTtzIGluaXRpYWxpemVkIHRvIGB7IDAgfWAsIGFuZCBga3ZtX3Jpc2N2X21tdV9tYXBgIHBvcHVsYXRlcyBpdC4gRXZlbiBpZiB0aGF0IGZ1bmN0aW9uIGRpZG4mIzM5O3QgcG9wdWxhdGUgZXZlcnkgZmllbGQsIHdoaWNoIHNlZW1zIHVubGlrZWx5LCBpdCYjMzk7cyBpbml0aWFsaXplZCB0byB6ZXJvLCBhbmQgdGhlIHJldHVybiB2YWx1ZSBpcyB0aGUga2V5IGZhY3Rvci4gVGhlIGZ1bmN0aW9uJiMzOTtzIHJldHVybiB2YWx1ZSBpcyB1c2VkIHRvIHVwZGF0ZSBgcmFuZ2UtJmd0O3NpemVgIGFuZCBgcmFuZ2UtJmd0O2dwYWAsIGJ1dCB0aGF0JiMzOTtzIGp1c3QgYSBsZW5ndGgsIGRlcml2ZWQgZnJvbSBpbnRlcm5hbGx5IGNhbGN1bGF0ZWQgdmFsdWVzLgoKTm93LCBsZXQmIzM5O3Mgd2lkZW4gdGhlIHNjb3BlLiBJIGxvb2sgYXQgYWxsIHRoZSBjaGFuZ2VkIGZpbGVzOiBgYXJjaC9yaXNjdi9rdm0vS2NvbmZpZ2AsIGBhcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuY2AsIGBhcmNoL3Jpc2N2L2t2bS9tbXUuY2AsIGBhcmNoL3Jpc2N2L2t2bS92bS5jYCwgYW5kIHRoZSByZWxldmFudCBzZWxmdGVzdHMuIFRoZSBjaGFuZ2VzIGFyZSBhbGwgcXVpdGUgdGFyZ2V0ZWQsIGZvY3VzaW5nIG9uIGltcGxlbWVudGluZyBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBzcGVjaWZpY2FsbHkgZm9yIFJJU0MtVi4gVGhlcmUgYXJlbiYjMzk7dCBhbnkgbmV3IHN0cnVjdHMgYmVpbmcgaW50cm9kdWNlZCB0aGF0IGFyZSAqY29waWVkKiB0byB1c2VyIHNwYWNlLiBUaGUgYEtWTV9QUkVfRkFVTFRfTUVNT1JZYCBpb2N0bCBhbHJlYWR5IGhhbmRsZXMgdGhlIHVzZXIgc3BhY2UgY29weSBmb3IgdGhlIGV4aXN0aW5nIGByYW5nZWAgc3RydWN0LiBUaGUgYHJhbmdlYCBzdHJ1Y3QgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgdGhlIGBjb3B5X2Zyb21fdXNlcmAgY2FsbC4KCk9rYXksIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIHN1bW1hcml6ZS4gYG91dF9tYXBgIGlzIGluaXRpYWxpemVkIHRvIHplcm8uIFRoZSBgcmFuZ2VgIHN0cnVjdCBpcyBjb3BpZWQgKmZyb20qIHVzZXIgc3BhY2UsIG5vdCB0aGUgb3RoZXIgd2F5IGFyb3VuZC4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgaW50cm9kdWNlZCB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gTm8gY29tcGxleCBhbGxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIHRoYXQgd291bGQgcG90ZW50aWFsbHkgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKVGhlcmVmb3JlLCBteSBhc3Nlc3NtZW50IGlzIHRoYXQgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBpc24mIzM5O3QgbmVjZXNzYXJ5IGhlcmUgdG8gYWRkcmVzcyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG91dC1vZi1ib3VuZHMgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLCB0aG91Z2ggSSYjMzk7bSBub3Qgc2VlaW5nIGFueSBvYnZpb3VzIG9uZXMgYXQgdGhpcyBzdGFnZS4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGBrdm1fcmlzY3ZfZ3N0YWdlX21hcHBpbmdgIHN0cnVjdCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyBcXHsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmg9MTI9c3RydWN0IGt2bV9nc3RhZ2Uge1xuLS1cbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2dzdGFnZS5oLTIwLVxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmg6MjE6c3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyB7XG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaC0yMi1cdGdwYV90IGFkZHI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MzQyCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyB0aG91Z2ggdGhleSB3ZXJlIG15IG93bjoKCioqQW5hbHl6aW5nIGBhcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaGAqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBkaWdnaW5nIGludG8gdGhlIFJJU0MtViBLVk0gaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSB0aGUgYGt2bV9nc3RhZ2UuaGAgaGVhZGVyIGZpbGUuIEl0JiMzOTtzIG9mdGVuIHRoZSBwbGFjZSB0byBmaW5kIGNydWNpYWwgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byB0aGUgZ3Vlc3Qgc3RhZ2UsIHNvIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bSBmb2N1c2luZy4gTGluZSAyMSwgaW4gcGFydGljdWxhciwgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgc3RhcnRpbmcgcG9pbnQuIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3IG9mIGhvdyB0aGUgS1ZNIGhhbmRsZXMgZ3Vlc3Qgc3RhdGUsIGFkZHJlc3MgdHJhbnNsYXRpb24sIG9yIHBlcmhhcHMgc29tZSBmdW5kYW1lbnRhbCBkYXRhIHN0cnVjdHVyZXMgcmVsYXRlZCB0byB0aGUgZy1zdGFnZS4gRGVwZW5kaW5nIG9uIHRoZSBzb3BoaXN0aWNhdGlvbiBvZiB0aGUgUklTQy1WIGltcGxlbWVudGF0aW9uLCBpdCBjb3VsZCBiZSBhIHNpbXBsZSBzdHJ1Y3R1cmUsIGEgY29tcGxleCBzZXQgb2YgbWFjcm9zLCBvciBwZXJoYXBzIGV2ZW4gYSBub3ZlbCBhcHByb2FjaC4gSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIHdoYXQmIzM5O3MgZGVjbGFyZWQgdGhlcmUgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9mIHRoZSBvdmVyYWxsIGRlc2lnbiBhbmQgd2hhdCBraW5kIG9mIGRldGFpbHMgYXJlIGltcG9ydGFudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjA6XHRcbiAgMjE6XHRzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nIHtcbiAgMjI6XHRcdGdwYV90IGFkZHI7XG4gIDIzOlx0XHRwdGVfdCBwdGU7XG4gIDI0Olx0XHR1MzIgbGV2ZWw7XG4gIDI1Olx0fTtcbiAgMjY6XHRcbiAgMjc6XHQjaWZkZWYgQ09ORklHXzY0QklUXG4gIDI4Olx0I2RlZmluZSBrdm1fcmlzY3ZfZ3N0YWdlX2luZGV4X2JpdHNcdDlcbiAgMjk6XHQjZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTc1NAoJCQkJCQkJb3V0cHV0OiAyNjEKCQkJCQkJCXRob3VnaHRzOiA3NDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgTWVtb3J5IFNhZmV0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGNvbmNlcm4gd2FzLCBhcyBhbHdheXMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MsIHBhcnRpY3VsYXJseSBnaXZlbiB0aGUgaW50ZXJhY3Rpb24gd2l0aCB1c2VyIHNwYWNlLiBJJiMzOTt2ZSBmb2N1c2VkIG9uIHR3byBrZXkgZGF0YSBzdHJ1Y3R1cmVzOiBga3ZtX2dzdGFnZV9tYXBwaW5nYCBhbmQgYGt2bV9wcmVfZmF1bHRfbWVtb3J5YC4KCkZpcnN0LCB0aGUgYGt2bV9nc3RhZ2VfbWFwcGluZ2Agc3RydWN0LiBUaGlzIGlzIHVzZWQgaW50ZXJuYWxseSBpbiB0aGUgUklTQy1WIE1NVSBjb2RlLiBJIHNlZSB0aGF0IGl0JiMzOTtzIGluaXRpYWxpemVkIHdpdGggYHsgMCB9YCB3aXRoaW4gYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAuIFNvLCBgYWRkcmAsIGBwdGVgLCBhbmQgYGxldmVsYCBhcmUgYWxsIHplcm9lZCBvdXQgYXQgdGhlIHN0YXJ0LiBUaGVuLCBga3ZtX3Jpc2N2X21tdV9tYXBgIGdldHMgYSBjaGFuY2UgdG8gbW9kaWZ5IHRoZXNlLCBhbmQgZXZlbiBpZiBpdCBkaWRuJiMzOTt0LCB3ZSBhcmUgc3RhcnRpbmcgZnJvbSBhIGNsZWFuIHNsYXRlLiBObyByaXNrIHRoZXJlLgoKTmV4dCwgSSBleGFtaW5lZCBgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5YC4gVGhpcyBpcyB3aGVyZSB0aGUgdXNlciBzcGFjZSBpbnRlcmFjdGlvbiBvY2N1cnMsIHRocm91Z2ggdGhlIGBLVk1fUFJFX0ZBVUxUX01FTU9SWWAgaW9jdGwgaW4gYGt2bV9tYWluLmNgLiBIZXJlJiMzOTtzIHRoZSBjcml0aWNhbCBiaXQ6IHRoZSBgcmFuZ2VgIHZhcmlhYmxlIG9mIHRoaXMgdHlwZSBpcyBmdWxseSBwb3B1bGF0ZWQgYnkgYGNvcHlfZnJvbV91c2VyYCBmcm9tIHRoZSB1c2VyLXByb3ZpZGVkIGRhdGEuIFRoZSBjb2RlIHRoZW4gbW9kaWZpZXMgYHJhbmdlLnNpemVgIGFuZCBgcmFuZ2UuZ3BhYCBpbnNpZGUgYGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLiBBbmQgZmluYWxseSwgdGhlIGVudGlyZSBgcmFuZ2VgIHN0cnVjdCwgaW5jbHVkaW5nIHRoZSBgcGFkZGluZ2AgZmllbGRzLCBpcyBjb3BpZWQgYmFjayB0byB1c2VyIHNwYWNlIHVzaW5nIGBjb3B5X3RvX3VzZXJgLiBUaGUgcGFkZGluZyBmaWVsZHMgYXJlIHNpbXBseSBlY2hvaW5nIHRoZSB1c2VyJiMzOTtzIGlucHV0LCB3aGljaCBpcyBhIGNvbW1vbiBhbmQgc2FmZSBwYXR0ZXJuIGZvciBpb2N0bHMuIFRoZXJlJiMzOTtzIG5vIGtlcm5lbCBtZW1vcnkgbGVhayBoZXJlIGJlY2F1c2UgdGhlIGNvbnRlbnRzIG9mIHRoZSBwYWRkaW5nIG9yaWdpbmF0ZSBmcm9tIHRoZSB1c2VyLgoKTG9va2luZyBhdCB0aGUgb3ZlcmFsbCBjb250ZXh0LCB0aGUgcGF0Y2ggc2ltcGx5IGVuYWJsZXMgdGhlIGV4aXN0aW5nIGBLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUllgIGZlYXR1cmUgZm9yIFJJU0MtVi4gSXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbiBwYXR0ZXJucyBvciBkYXRhIHN0cnVjdHVyZXMgdGhhdCB3b3VsZCByYWlzZSBhbGFybSBiZWxscy4gVGhlIHBhdGNoIGlzIHJlbGF0aXZlbHkgc2ltcGxlOyBpdCBpcyBqdXN0IHdpcmluZyB1cCBhbiBleGlzdGluZyBnZW5lcmljIEtWTSBmZWF0dXJlLgoKQmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnksIGluZm9ybWF0aW9uIGxlYWtzLCBvciBtZW1vcnkgY29ycnVwdGlvbi4gVGhlIGV4aXN0aW5nIEtBU0FOIGNoZWNrcyBhcmUgc3VmZmljaWVudCB0byBoYW5kbGUgYW55IHVuZm9yZXNlZW4gaXNzdWVzLiBTbywgSSB3aWxsIG1hcmsgdGhpcyBhcyBgTmVlZHNLTVNBTj1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA3OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgdGhlIGBLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUllgIGNhcGFiaWxpdHkgZm9yIFJJU0MtViBieSBhZGRpbmcgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgYW5kIHdpcmluZyBpdCB1cCBpbiB0aGUgTU1VLiBUaGUgb25seSBkYXRhIHN0cnVjdHVyZSBpbnZvbHZlZCBpbiB1c2VyIHNwYWNlIGNvbW11bmljYXRpb24gaXMgYHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeWAsIHdoaWNoIGlzIGhhbmRsZWQgYnkgZ2VuZXJpYyBLVk0gY29kZSAoYHZpcnQva3ZtL2t2bV9tYWluLmNgKS4gVGhlIGdlbmVyaWMgY29kZSBmdWxseSBpbml0aWFsaXplcyB0aGUgc3RydWN0IHZpYSBgY29weV9mcm9tX3VzZXJgIGJlZm9yZSBtb2RpZnlpbmcgaXRzIGBzaXplYCBhbmQgYGdwYWAgZmllbGRzIGFuZCBjb3B5aW5nIGl0IGJhY2sgdG8gdXNlciBzcGFjZS4gQW55IHBhZGRpbmcgZmllbGRzIHNpbXBseSBlY2hvIGJhY2sgdGhlIHVzZXItcHJvdmlkZWQgdmFsdWVzLCBwcmV2ZW50aW5nIGFueSBrZXJuZWwgbWVtb3J5IGluZm8tbGVha3MuIFRoZSBsb2NhbCB2YXJpYWJsZSBgb3V0X21hcGAgb2YgdHlwZSBgc3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZ2AgaXMgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkIChgPSB7IDAgfWApIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gYGt2bV9yaXNjdl9tbXVfbWFwYC4gVGhlcmUgYXJlIG5vIG5ldyBjb21wbGV4IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyB0aGUgYEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWWAgY2FwYWJpbGl0eSBmb3IgUklTQy1WIGJ5IGFkZGluZyBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBhbmQgd2lyaW5nIGl0IHVwIGluIHRoZSBNTVUuIFRoZSBvbmx5IGRhdGEgc3RydWN0dXJlIGludm9sdmVkIGluIHVzZXIgc3BhY2UgY29tbXVuaWNhdGlvbiBpcyBgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5YCwgd2hpY2ggaXMgaGFuZGxlZCBieSBnZW5lcmljIEtWTSBjb2RlIChgdmlydC9rdm0va3ZtX21haW4uY2ApLiBUaGUgZ2VuZXJpYyBjb2RlIGZ1bGx5IGluaXRpYWxpemVzIHRoZSBzdHJ1Y3QgdmlhIGBjb3B5X2Zyb21fdXNlcmAgYmVmb3JlIG1vZGlmeWluZyBpdHMgYHNpemVgIGFuZCBgZ3BhYCBmaWVsZHMgYW5kIGNvcHlpbmcgaXQgYmFjayB0byB1c2VyIHNwYWNlLiBBbnkgcGFkZGluZyBmaWVsZHMgc2ltcGx5IGVjaG8gYmFjayB0aGUgdXNlci1wcm92aWRlZCB2YWx1ZXMsIHByZXZlbnRpbmcgYW55IGtlcm5lbCBtZW1vcnkgaW5mby1sZWFrcy4gVGhlIGxvY2FsIHZhcmlhYmxlIGBvdXRfbWFwYCBvZiB0eXBlIGBzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nYCBpcyBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgKGA9IHsgMCB9YCkgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byBga3ZtX3Jpc2N2X21tdV9tYXBgLiBUaGVyZSBhcmUgbm8gbmV3IGNvbXBsZXggYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjAyOjAxLjM4MDA0MjI0M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODE2OTYzMzk1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIlZJUlRVQUxJWkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5XCIsXG4gICAgXCJrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIHRoZSBgS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZYCBjYXBhYmlsaXR5IGZvciBSSVNDLVYgYnkgYWRkaW5nIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGFuZCB3aXJpbmcgaXQgdXAgaW4gdGhlIE1NVS4gVGhlIG9ubHkgZGF0YSBzdHJ1Y3R1cmUgaW52b2x2ZWQgaW4gdXNlciBzcGFjZSBjb21tdW5pY2F0aW9uIGlzIGBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnlgLCB3aGljaCBpcyBoYW5kbGVkIGJ5IGdlbmVyaWMgS1ZNIGNvZGUgKGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCkuIFRoZSBnZW5lcmljIGNvZGUgZnVsbHkgaW5pdGlhbGl6ZXMgdGhlIHN0cnVjdCB2aWEgYGNvcHlfZnJvbV91c2VyYCBiZWZvcmUgbW9kaWZ5aW5nIGl0cyBgc2l6ZWAgYW5kIGBncGFgIGZpZWxkcyBhbmQgY29weWluZyBpdCBiYWNrIHRvIHVzZXIgc3BhY2UuIEFueSBwYWRkaW5nIGZpZWxkcyBzaW1wbHkgZWNobyBiYWNrIHRoZSB1c2VyLXByb3ZpZGVkIHZhbHVlcywgcHJldmVudGluZyBhbnkga2VybmVsIG1lbW9yeSBpbmZvLWxlYWtzLiBUaGUgbG9jYWwgdmFyaWFibGUgYG91dF9tYXBgIG9mIHR5cGUgYHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmdgIGlzIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCAoYD0geyAwIH1gKSBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvIGBrdm1fcmlzY3ZfbW11X21hcGAuIFRoZXJlIGFyZSBubyBuZXcgY29tcGxleCBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBlbmFibGVzIHRoZSBLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUlkgY2FwYWJpbGl0eSBhbmQgaXRzIGNvcnJlc3BvbmRpbmcgaW9jdGwgKEtWTV9QUkVfRkFVTFRfTUVNT1JZKSBmb3IgUklTQy1WIEtWTS4gSXQgaW1wbGVtZW50cyB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGhhbmRsZXIgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgYW5kIG1vZGlmaWVzIGBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlYCB0byByZXR1cm4gbWFwcGluZyBpbmZvcm1hdGlvbi4gVGhpcyBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUgY29kZSBwYXRocyBpbiB0aGUgUklTQy1WIEtWTSBzdWJzeXN0ZW0gdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgaW9jdGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjAyOjAxLjM4MDA0NzUwM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3MjExODYxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGIwYjYwYTBjNzlmM2MyMmY5YWY2ODc2ODg4MGQyNmNmYjI1MjI1MDJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMDc6MDE6NTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vS2NvbmZpZyBiL2FyY2gvcmlzY3Yva3ZtL0tjb25maWdcXG5pbmRleCBlYzJjZWUwYTM5ZTAxLi44YWMyMDllOGFjODcwIDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL0tjb25maWdcXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnXFxuQEAgLTI4LDYgKzI4LDcgQEAgY29uZmlnIEtWTVxcbiBcXHRzZWxlY3QgS1ZNX0NPTU1PTlxcbiBcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUXFxuIFxcdHNlbGVjdCBLVk1fR0VORVJJQ19IQVJEV0FSRV9FTkFCTElOR1xcbitcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxcbiBcXHRzZWxlY3QgS1ZNX01NSU9cXG4gXFx0c2VsZWN0IFZJUlRfWEZFUl9UT19HVUVTVF9XT1JLXFxuIFxcdHNlbGVjdCBTQ0hFRF9JTkZPXFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jIGIvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNcXG5pbmRleCBlNTAwMmNiOWNiZWYxLi42YmQ4YjhmZDZjZWIyIDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jXFxuKysrIGIvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNcXG5AQCAtMjgwLDYgKzI4MCw5IEBAIGludCBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICBvdXRfbWFwLVxcdTAwM2VsZXZlbCwgdHJ1ZSk7XFxuIFxcdFxcdH0gZWxzZSBpZiAoQUxJR05fRE9XTihQRk5fUEhZUyhwdGVfcGZuKHB0ZXBfZ2V0KHB0ZXApKSksIHBhZ2Vfc2l6ZSkgPT0gaHBhKSB7XFxuIFxcdFxcdFxcdGt2bV9yaXNjdl9nc3RhZ2VfdXBkYXRlX3B0ZV9wcm90KGdzdGFnZSwgcHRlcF9sZXZlbCwgZ3BhLCBwdGVwLCBwcm90KTtcXG4rXFx0XFx0XFx0b3V0X21hcC1cXHUwMDNlYWRkciA9IEFMSUdOX0RPV04oZ3BhLCBwYWdlX3NpemUpO1xcbitcXHRcXHRcXHRvdXRfbWFwLVxcdTAwM2VsZXZlbCA9IHB0ZXBfbGV2ZWw7XFxuK1xcdFxcdFxcdG91dF9tYXAtXFx1MDAzZXB0ZSA9IHB0ZXBfZ2V0KHB0ZXApO1xcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL21tdS5jIGIvYXJjaC9yaXNjdi9rdm0vbW11LmNcXG5pbmRleCA2MDM1YjVlYzk1MDM5Li5jOTZlMjE3NDBjOTEzIDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL21tdS5jXFxuKysrIGIvYXJjaC9yaXNjdi9rdm0vbW11LmNcXG5AQCAtNzQ4LDYgKzc0OCwzOSBAQCBpbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbitsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKVxcbit7XFxuK1xcdHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgb3V0X21hcCA9IHsgMCB9O1xcbitcXHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90O1xcbitcXHR1bnNpZ25lZCBsb25nIG1hcF9zaXplO1xcbitcXHR1bnNpZ25lZCBsb25nIGh2YTtcXG4rXFx0Z3BhX3QgZW5kO1xcbitcXHRnZm5fdCBnZm47XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRnZm4gPSBncGFfdG9fZ2ZuKHJhbmdlLVxcdTAwM2VncGEpO1xcbitcXHRtZW1zbG90ID0ga3ZtX3ZjcHVfZ2ZuX3RvX21lbXNsb3QodmNwdSwgZ2ZuKTtcXG4rXFx0aWYgKCFtZW1zbG90KVxcbitcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4rXFxuK1xcdGh2YSA9IGdmbl90b19odmFfbWVtc2xvdF9wcm90KG1lbXNsb3QsIGdmbiwgTlVMTCk7XFxuK1xcdGlmIChrdm1faXNfZXJyb3JfaHZhKGh2YSkpXFxuK1xcdFxcdHJldHVybiAtRU5PRU5UO1xcbitcXG4rXFx0cmV0ID0ga3ZtX3Jpc2N2X21tdV9tYXAodmNwdSwgbWVtc2xvdCwgcmFuZ2UtXFx1MDAzZWdwYSwgaHZhLCBmYWxzZSwgXFx1MDAyNm91dF9tYXApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKCFwdGVfdmFsKG91dF9tYXAucHRlKSlcXG4rXFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuK1xcbitcXHRtYXBfc2l6ZSA9IFBBR0VfU0laRSBcXHUwMDNjXFx1MDAzYyAob3V0X21hcC5sZXZlbCAqIGt2bV9yaXNjdl9nc3RhZ2VfaW5kZXhfYml0cyk7XFxuK1xcdGVuZCA9IEFMSUdOX0RPV04ocmFuZ2UtXFx1MDAzZWdwYSwgbWFwX3NpemUpICsgbWFwX3NpemU7XFxuK1xcbitcXHRyZXR1cm4gbWluX3QodTY0LCByYW5nZS1cXHUwMDNlc2l6ZSwgZW5kIC0gcmFuZ2UtXFx1MDAzZWdwYSk7XFxuK31cXG4rXFxuIGludCBrdm1fcmlzY3ZfbW11X2FsbG9jX3BnZChzdHJ1Y3Qga3ZtICprdm0pXFxuIHtcXG4gXFx0c3RydWN0IHBhZ2UgKnBnZF9wYWdlO1xcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS92bS5jIGIvYXJjaC9yaXNjdi9rdm0vdm0uY1xcbmluZGV4IGE5ZjA4M2ZlZWI3NjcuLjU4NTAwYTE5YjMzYmQgMTAwNjQ0XFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vdm0uY1xcbisrKyBiL2FyY2gvcmlzY3Yva3ZtL3ZtLmNcXG5AQCAtMTg3LDYgKzE4Nyw3IEBAIGludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpXFxuIFxcdGNhc2UgS1ZNX0NBUF9NUF9TVEFURTpcXG4gXFx0Y2FzZSBLVk1fQ0FQX0lNTUVESUFURV9FWElUOlxcbiBcXHRjYXNlIEtWTV9DQVBfU0VUX0dVRVNUX0RFQlVHOlxcbitcXHRjYXNlIEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWTpcXG4gXFx0XFx0ciA9IDE7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIEtWTV9DQVBfTlJfVkNQVVM6XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm0gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXFxuaW5kZXggNmZjMzRlOWJmOGUxYi4uYWM2NGFjOTJmZDRiMCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bVxcbkBAIC0yMjUsNiArMjI1LDcgQEAgVEVTVF9HRU5fUFJPR1NfcmlzY3YgKz0gY29hbGVzY2VkX2lvX3Rlc3RcXG4gVEVTVF9HRU5fUFJPR1NfcmlzY3YgKz0gZGlydHlfbG9nX3BlcmZfdGVzdFxcbiBURVNUX0dFTl9QUk9HU19yaXNjdiArPSBnZXQtcmVnLWxpc3RcXG4gVEVTVF9HRU5fUFJPR1NfcmlzY3YgKz0gbW11X3N0cmVzc190ZXN0XFxuK1RFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IHByZV9mYXVsdF9tZW1vcnlfdGVzdFxcbiBURVNUX0dFTl9QUk9HU19yaXNjdiArPSByc2VxX3Rlc3RcXG4gVEVTVF9HRU5fUFJPR1NfcmlzY3YgKz0gc3RlYWxfdGltZVxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaFxcbmluZGV4IGUzYWNmMmFlOTg4MWUuLjcwNDg3YzhlZDE1NTMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaFxcbkBAIC0xMiw2ICsxMiw5IEBAXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vdmRzby9wcm9jZXNzb3IuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImt2bV91dGlsLmhcXFwiXFxuIFxcbisjZGVmaW5lIFBBR0VfU0hJRlRcXHRcXHQxMlxcbisjZGVmaW5lIFBBR0VfU0laRVxcdFxcdEJJVF9VTEwoUEFHRV9TSElGVClcXG4rXFxuICNkZWZpbmUgSU5TTl9PUENPREVfTUFTS1xcdDB4MDA3Y1xcbiAjZGVmaW5lIElOU05fT1BDT0RFX1NISUZUXFx0MlxcbiAjZGVmaW5lIElOU05fT1BDT0RFX1NZU1RFTVxcdDI4XFxuQEAgLTEyNyw2ICsxMzAsOSBAQCB2b2lkIHZtX2luc3RhbGxfZXhjZXB0aW9uX2hhbmRsZXIoc3RydWN0IGt2bV92bSAqdm0sIGludCB2ZWN0b3IsIGV4Y2VwdGlvbl9oYW5kbFxcbiBcXG4gdm9pZCB2bV9pbnN0YWxsX2ludGVycnVwdF9oYW5kbGVyKHN0cnVjdCBrdm1fdm0gKnZtLCBleGNlcHRpb25faGFuZGxlcl9mbiBoYW5kbGVyKTtcXG4gXFxuKy8qIEw0IGluZGV4IEJpdFs1Njo0OF0gKi9cXG4rI2RlZmluZSBQR1RCTF9MNF9JTkRFWF9NQVNLXFx0XFx0XFx0MHgwMUZGMDAwMDAwMDAwMDAwVUxMXFxuKyNkZWZpbmUgUEdUQkxfTDRfSU5ERVhfU0hJRlRcXHRcXHRcXHQ0OFxcbiAvKiBMMyBpbmRleCBCaXRbNDc6MzldICovXFxuICNkZWZpbmUgUEdUQkxfTDNfSU5ERVhfTUFTS1xcdFxcdFxcdDB4MDAwMEZGODAwMDAwMDAwMFVMTFxcbiAjZGVmaW5lIFBHVEJMX0wzX0lOREVYX1NISUZUXFx0XFx0XFx0MzlcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmNcXG5pbmRleCBkZWQ1NDI5ZjM0NDgzLi5iNGQ0MWE0MDc1NTM2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXFxuQEAgLTQzLDYgKzQzLDcgQEAgc3RhdGljIHU2NCBwdGVfaW5kZXhfbWFza1tdID0ge1xcbiBcXHRQR1RCTF9MMV9JTkRFWF9NQVNLLFxcbiBcXHRQR1RCTF9MMl9JTkRFWF9NQVNLLFxcbiBcXHRQR1RCTF9MM19JTkRFWF9NQVNLLFxcbitcXHRQR1RCTF9MNF9JTkRFWF9NQVNLLFxcbiB9O1xcbiBcXG4gc3RhdGljIHUzMiBwdGVfaW5kZXhfc2hpZnRbXSA9IHtcXG5AQCAtNTAsNiArNTEsNyBAQCBzdGF0aWMgdTMyIHB0ZV9pbmRleF9zaGlmdFtdID0ge1xcbiBcXHRQR1RCTF9MMV9JTkRFWF9TSElGVCxcXG4gXFx0UEdUQkxfTDJfSU5ERVhfU0hJRlQsXFxuIFxcdFBHVEJMX0wzX0lOREVYX1NISUZULFxcbitcXHRQR1RCTF9MNF9JTkRFWF9TSElGVCxcXG4gfTtcXG4gXFxuIHN0YXRpYyB1NjQgcHRlX2luZGV4KHN0cnVjdCBrdm1fdm0gKnZtLCBndmFfdCBndmEsIGludCBsZXZlbClcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jXFxuaW5kZXggYTBmY2FlM2NiN2E4Yi4uNmVlYmYwNTI0NjczNiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmNcXG5AQCAtOCw2ICs4LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NpemVzLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjdGVzdF91dGlsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NndWVzdF9tb2Rlcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNja3ZtX3V0aWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3Byb2Nlc3Nvci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjcHRocmVhZC5oXFx1MDAzZVxcbkBAIC0yMTksNiArMjIwLDggQEAgc3RhdGljIHZvaWQgdGVzdF9wcmVfZmF1bHRfbWVtb3J5KHVuc2lnbmVkIGxvbmcgdm1fdHlwZSwgYm9vbCBwcml2YXRlKVxcbiBcXG4gaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4ge1xcbitcXHRndWVzdF9tb2Rlc19hcHBlbmRfZGVmYXVsdCgpO1xcbitcXG4gXFx0VEVTVF9SRVFVSVJFKGt2bV9jaGVja19jYXAoS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZKSk7XFxuIFxcbiBcXHR0ZXN0X3ByZV9mYXVsdF9tZW1vcnkoMCwgZmFsc2UpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzowMjowMi44NTI3Njc3MjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozNTYyMTczOTEyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIlZJUlRVQUxJWkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5XCIsXG4gICAgXCJrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZW5hYmxlcyB0aGUgS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZIGNhcGFiaWxpdHkgYW5kIGl0cyBjb3JyZXNwb25kaW5nIGlvY3RsIChLVk1fUFJFX0ZBVUxUX01FTU9SWSkgZm9yIFJJU0MtViBLVk0uIEl0IGltcGxlbWVudHMgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBoYW5kbGVyIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGFuZCBtb2RpZmllcyBga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZWAgdG8gcmV0dXJuIG1hcHBpbmcgaW5mb3JtYXRpb24uIFRoaXMgaW50cm9kdWNlcyBuZXcgcmVhY2hhYmxlIGNvZGUgcGF0aHMgaW4gdGhlIFJJU0MtViBLVk0gc3Vic3lzdGVtIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGlvY3RsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiMGI2MGEwYzc5ZjNjMjJmOWFmNjg3Njg4ODBkMjZjZmIyNTIyNTAyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMDc6MDE6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnIGIvYXJjaC9yaXNjdi9rdm0vS2NvbmZpZ1xuaW5kZXggZWMyY2VlMGEzOWUwMS4uOGFjMjA5ZThhYzg3MCAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL0tjb25maWdcbisrKyBiL2FyY2gvcmlzY3Yva3ZtL0tjb25maWdcbkBAIC0yOCw2ICsyOCw3IEBAIGNvbmZpZyBLVk1cbiBcdHNlbGVjdCBLVk1fQ09NTU9OXG4gXHRzZWxlY3QgS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUXG4gXHRzZWxlY3QgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkdcbitcdHNlbGVjdCBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXG4gXHRzZWxlY3QgS1ZNX01NSU9cbiBcdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xuIFx0c2VsZWN0IFNDSEVEX0lORk9cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYyBiL2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jXG5pbmRleCBlNTAwMmNiOWNiZWYxLi42YmQ4YjhmZDZjZWIyIDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNcbisrKyBiL2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jXG5AQCAtMjgwLDYgKzI4MCw5IEBAIGludCBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsXG4gXHRcdFx0XHRcdFx0ICAgIG91dF9tYXAtXHUwMDNlbGV2ZWwsIHRydWUpO1xuIFx0XHR9IGVsc2UgaWYgKEFMSUdOX0RPV04oUEZOX1BIWVMocHRlX3BmbihwdGVwX2dldChwdGVwKSkpLCBwYWdlX3NpemUpID09IGhwYSkge1xuIFx0XHRcdGt2bV9yaXNjdl9nc3RhZ2VfdXBkYXRlX3B0ZV9wcm90KGdzdGFnZSwgcHRlcF9sZXZlbCwgZ3BhLCBwdGVwLCBwcm90KTtcbitcdFx0XHRvdXRfbWFwLVx1MDAzZWFkZHIgPSBBTElHTl9ET1dOKGdwYSwgcGFnZV9zaXplKTtcbitcdFx0XHRvdXRfbWFwLVx1MDAzZWxldmVsID0gcHRlcF9sZXZlbDtcbitcdFx0XHRvdXRfbWFwLVx1MDAzZXB0ZSA9IHB0ZXBfZ2V0KHB0ZXApO1xuIFx0XHRcdHJldHVybiAwO1xuIFx0XHR9XG4gXHR9XG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vbW11LmMgYi9hcmNoL3Jpc2N2L2t2bS9tbXUuY1xuaW5kZXggNjAzNWI1ZWM5NTAzOS4uYzk2ZTIxNzQwYzkxMyAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL21tdS5jXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS9tbXUuY1xuQEAgLTc0OCw2ICs3NDgsMzkgQEAgaW50IGt2bV9yaXNjdl9tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK2xvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbitcdFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKVxuK3tcbitcdHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgb3V0X21hcCA9IHsgMCB9O1xuK1x0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdDtcbitcdHVuc2lnbmVkIGxvbmcgbWFwX3NpemU7XG4rXHR1bnNpZ25lZCBsb25nIGh2YTtcbitcdGdwYV90IGVuZDtcbitcdGdmbl90IGdmbjtcbitcdGludCByZXQ7XG4rXG4rXHRnZm4gPSBncGFfdG9fZ2ZuKHJhbmdlLVx1MDAzZWdwYSk7XG4rXHRtZW1zbG90ID0ga3ZtX3ZjcHVfZ2ZuX3RvX21lbXNsb3QodmNwdSwgZ2ZuKTtcbitcdGlmICghbWVtc2xvdClcbitcdFx0cmV0dXJuIC1FTk9FTlQ7XG4rXG4rXHRodmEgPSBnZm5fdG9faHZhX21lbXNsb3RfcHJvdChtZW1zbG90LCBnZm4sIE5VTEwpO1xuK1x0aWYgKGt2bV9pc19lcnJvcl9odmEoaHZhKSlcbitcdFx0cmV0dXJuIC1FTk9FTlQ7XG4rXG4rXHRyZXQgPSBrdm1fcmlzY3ZfbW11X21hcCh2Y3B1LCBtZW1zbG90LCByYW5nZS1cdTAwM2VncGEsIGh2YSwgZmFsc2UsIFx1MDAyNm91dF9tYXApO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmICghcHRlX3ZhbChvdXRfbWFwLnB0ZSkpXG4rXHRcdHJldHVybiAtRUFHQUlOO1xuK1xuK1x0bWFwX3NpemUgPSBQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIChvdXRfbWFwLmxldmVsICoga3ZtX3Jpc2N2X2dzdGFnZV9pbmRleF9iaXRzKTtcbitcdGVuZCA9IEFMSUdOX0RPV04ocmFuZ2UtXHUwMDNlZ3BhLCBtYXBfc2l6ZSkgKyBtYXBfc2l6ZTtcbitcbitcdHJldHVybiBtaW5fdCh1NjQsIHJhbmdlLVx1MDAzZXNpemUsIGVuZCAtIHJhbmdlLVx1MDAzZWdwYSk7XG4rfVxuK1xuIGludCBrdm1fcmlzY3ZfbW11X2FsbG9jX3BnZChzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0c3RydWN0IHBhZ2UgKnBnZF9wYWdlO1xuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3ZtLmMgYi9hcmNoL3Jpc2N2L2t2bS92bS5jXG5pbmRleCBhOWYwODNmZWViNzY3Li41ODUwMGExOWIzM2JkIDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vdm0uY1xuKysrIGIvYXJjaC9yaXNjdi9rdm0vdm0uY1xuQEAgLTE4Nyw2ICsxODcsNyBAQCBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxuIFx0Y2FzZSBLVk1fQ0FQX01QX1NUQVRFOlxuIFx0Y2FzZSBLVk1fQ0FQX0lNTUVESUFURV9FWElUOlxuIFx0Y2FzZSBLVk1fQ0FQX1NFVF9HVUVTVF9ERUJVRzpcbitcdGNhc2UgS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZOlxuIFx0XHRyID0gMTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEtWTV9DQVBfTlJfVkNQVVM6XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbmluZGV4IDZmYzM0ZTliZjhlMWIuLmFjNjRhYzkyZmQ0YjAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG5AQCAtMjI1LDYgKzIyNSw3IEBAIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IGNvYWxlc2NlZF9pb190ZXN0XG4gVEVTVF9HRU5fUFJPR1NfcmlzY3YgKz0gZGlydHlfbG9nX3BlcmZfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IGdldC1yZWctbGlzdFxuIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IG1tdV9zdHJlc3NfdGVzdFxuK1RFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IHByZV9mYXVsdF9tZW1vcnlfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IHJzZXFfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IHN0ZWFsX3RpbWVcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oXG5pbmRleCBlM2FjZjJhZTk4ODFlLi43MDQ4N2M4ZWQxNTUzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oXG5AQCAtMTIsNiArMTIsOSBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS92ZHNvL3Byb2Nlc3Nvci5oXHUwMDNlXG4gI2luY2x1ZGUgXCJrdm1fdXRpbC5oXCJcbiBcbisjZGVmaW5lIFBBR0VfU0hJRlRcdFx0MTJcbisjZGVmaW5lIFBBR0VfU0laRVx0XHRCSVRfVUxMKFBBR0VfU0hJRlQpXG4rXG4gI2RlZmluZSBJTlNOX09QQ09ERV9NQVNLXHQweDAwN2NcbiAjZGVmaW5lIElOU05fT1BDT0RFX1NISUZUXHQyXG4gI2RlZmluZSBJTlNOX09QQ09ERV9TWVNURU1cdDI4XG5AQCAtMTI3LDYgKzEzMCw5IEBAIHZvaWQgdm1faW5zdGFsbF9leGNlcHRpb25faGFuZGxlcihzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IHZlY3RvciwgZXhjZXB0aW9uX2hhbmRsXG4gXG4gdm9pZCB2bV9pbnN0YWxsX2ludGVycnVwdF9oYW5kbGVyKHN0cnVjdCBrdm1fdm0gKnZtLCBleGNlcHRpb25faGFuZGxlcl9mbiBoYW5kbGVyKTtcbiBcbisvKiBMNCBpbmRleCBCaXRbNTY6NDhdICovXG4rI2RlZmluZSBQR1RCTF9MNF9JTkRFWF9NQVNLXHRcdFx0MHgwMUZGMDAwMDAwMDAwMDAwVUxMXG4rI2RlZmluZSBQR1RCTF9MNF9JTkRFWF9TSElGVFx0XHRcdDQ4XG4gLyogTDMgaW5kZXggQml0WzQ3OjM5XSAqL1xuICNkZWZpbmUgUEdUQkxfTDNfSU5ERVhfTUFTS1x0XHRcdDB4MDAwMEZGODAwMDAwMDAwMFVMTFxuICNkZWZpbmUgUEdUQkxfTDNfSU5ERVhfU0hJRlRcdFx0XHQzOVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXG5pbmRleCBkZWQ1NDI5ZjM0NDgzLi5iNGQ0MWE0MDc1NTM2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuY1xuQEAgLTQzLDYgKzQzLDcgQEAgc3RhdGljIHU2NCBwdGVfaW5kZXhfbWFza1tdID0ge1xuIFx0UEdUQkxfTDFfSU5ERVhfTUFTSyxcbiBcdFBHVEJMX0wyX0lOREVYX01BU0ssXG4gXHRQR1RCTF9MM19JTkRFWF9NQVNLLFxuK1x0UEdUQkxfTDRfSU5ERVhfTUFTSyxcbiB9O1xuIFxuIHN0YXRpYyB1MzIgcHRlX2luZGV4X3NoaWZ0W10gPSB7XG5AQCAtNTAsNiArNTEsNyBAQCBzdGF0aWMgdTMyIHB0ZV9pbmRleF9zaGlmdFtdID0ge1xuIFx0UEdUQkxfTDFfSU5ERVhfU0hJRlQsXG4gXHRQR1RCTF9MMl9JTkRFWF9TSElGVCxcbiBcdFBHVEJMX0wzX0lOREVYX1NISUZULFxuK1x0UEdUQkxfTDRfSU5ERVhfU0hJRlQsXG4gfTtcbiBcbiBzdGF0aWMgdTY0IHB0ZV9pbmRleChzdHJ1Y3Qga3ZtX3ZtICp2bSwgZ3ZhX3QgZ3ZhLCBpbnQgbGV2ZWwpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jXG5pbmRleCBhMGZjYWUzY2I3YThiLi42ZWViZjA1MjQ2NzM2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmNcbkBAIC04LDYgKzgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NpemVzLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2N0ZXN0X3V0aWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2d1ZXN0X21vZGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nrdm1fdXRpbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjcHJvY2Vzc29yLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NwdGhyZWFkLmhcdTAwM2VcbkBAIC0yMTksNiArMjIwLDggQEAgc3RhdGljIHZvaWQgdGVzdF9wcmVfZmF1bHRfbWVtb3J5KHVuc2lnbmVkIGxvbmcgdm1fdHlwZSwgYm9vbCBwcml2YXRlKVxuIFxuIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4ge1xuK1x0Z3Vlc3RfbW9kZXNfYXBwZW5kX2RlZmF1bHQoKTtcbitcbiBcdFRFU1RfUkVRVUlSRShrdm1fY2hlY2tfY2FwKEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWSkpO1xuIFxuIFx0dGVzdF9wcmVfZmF1bHRfbWVtb3J5KDAsIGZhbHNlKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjAyOjAyLjg1Mjc2OTAxNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMjIzODIxMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSSVNDLVYgS1ZNIFByZS1GYXVsdCBNZW1vcnkgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBSSVNDLVYgS1ZNIHRoYXQncyBhZGRpbmcgc3VwcG9ydCBmb3IgYEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWWAuIEl0IGxvb2tzIHByZXR0eSBzdHJhaWdodGZvcndhcmQgb24gdGhlIHN1cmZhY2UuIFdlJ3JlIG1vZGlmeWluZyBgS2NvbmZpZ2AgdG8gc2VsZWN0IGBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZYCwgd2hpY2ggbWFrZXMgc2Vuc2U7IHRoaXMgZW5hYmxlcyB0aGUgZ2VuZXJpYyBwcmUtZmF1bHRpbmcgbWVjaGFuaXNtLiBUaGVuIHRoZXJlIGFyZSBjaGFuZ2VzIGluIGBnc3RhZ2UuY2AgdG8gaGFuZGxlIG1hcHBpbmcsIGBtbXUuY2Agd2hpY2ggYWN0dWFsbHkgYWRkcyB0aGUgY29yZSBmdW5jdGlvbiBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCwgYW5kIGB2bS5jYCB0byBhZHZlcnRpc2UgdGhlIGNhcGFiaWxpdHkuIFBsdXMsIHRoZXkndmUgaW5jbHVkZWQgYSBzZWxmLXRlc3QuIFNvbGlkLlxuXG5UaGlzIGNsZWFybHkgaW50cm9kdWNlcyBhIG5ldyBjYXBhYmlsaXR5LCBgS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZYCwgYW5kIHRoZSBhc3NvY2lhdGVkIGBLVk1fUFJFX0ZBVUxUX01FTU9SWWAgaW9jdGwgZm9yIHRoZSB2Q1BVLiBGdW5jdGlvbmFsbHkgc291bmQsIHRoYXQncyBnb29kLlxuXG5UaGUgbmV4dCB0aG91Z2h0IGlzLCBjYW4gdGhpcyBiZSBlZmZlY3RpdmVseSB0ZXN0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzPyBPZiBjb3Vyc2UsIHRoaXMgaXMgS1ZNIGNvZGUuIFN5emthbGxlciBpcyB0aGUgcHJpbWFyeSBmdXp6aW5nIHRvb2wgdGhhdCBjb21lcyB0byBtaW5kLCBhbmQgd2hpbGUgaXQgaGVhdmlseSB0YXJnZXRzIHg4Nl82NCwgaXQgKmRvZXMqIGhhdmUgc29tZSBzdXBwb3J0IGZvciBBUk02NCBhbmQgUklTQy1WLiBXYWl0LCBpdCAqZG9lcyogc3VwcG9ydCBSSVNDLVY2NCwgZ3JlYXQuIE5vdywgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIEl0IGxvb2tzIGxpa2Ugd2UganVzdCBuZWVkIGBDT05GSUdfS1ZNYCwgd2hpY2ggaXMgc3RhbmRhcmQgZm9yIEtWTSBndWVzdHMuXG5cbkFscmlnaHQsIGxldCdzIGRyaWxsIGRvd24uIFRoZSBrZXkgZnVuY3Rpb24gaXMgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAuIEknbSBnb2luZyB0byBsb29rIGF0IGl0IGluIGBhcmNoL3Jpc2N2L2t2bS9tbXUuY2AuIEl0IGxvb2tzIGxpa2UgaXQgY2FsbHMgYGt2bV9yaXNjdl9tbXVfbWFwYCB0byBkbyB0aGUgYWN0dWFsIG1hcHBpbmcuXG5cblRvIGJlIHRob3JvdWdoLCBJJ20gZ29pbmcgdG8gbGV2ZXJhZ2UgYGRlZmF1bHRfYXBpOmdyZXBwZXJgIHRvIHNlZSBpZiBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBpcyBldmVyIGNhbGxlZCBkaXJlY3RseSBmcm9tIGdlbmVyaWMgS1ZNIGNvZGUuIFRoaXMgd2lsbCBoZWxwIGNvbmZpcm0gdGhpcyBzcGVjaWZpYyBSSVNDLVYgY29kZSBwYXRoLiBJIHdhbnQgdG8gc2VlIGhvdyB0aWdodGx5IGNvdXBsZWQgdGhpcyBpcyB0byBnZW5lcmljIEtWTSBvcGVyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzgwLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDM5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MDI6MTEuMDc1MTUzNTRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1OTEwMTMzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9rdm0vbW11LmM9NjIzPWludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03NTAtXFxuYXJjaC9yaXNjdi9rdm0vbW11LmM6NzUxOmxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03NTItXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM9NTc5Nz12b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01ODQwLS8qKlxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1ODQxOiAqIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSgpIC0tIHByZS1mYXVsdCBhbmQgbGluayBnbWFwIGRhdCB0YWJsZXNcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTg0Mi0gKiBAdmNwdTogdGhlIHZjcHUgdGhhdCBzaGFsbCBhcHBlYXIgdG8gaGF2ZSBnZW5lcmF0ZWQgdGhlIGZhdWx0LWluLlxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU4NTktICovXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jOjU4NjA6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01ODYxLXtcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmM9NDk3Mz1zdGF0aWMgaW50IGt2bV90ZHBfcGFnZV9wcmVmYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSxcXG4tLVxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTAxNi1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jOjUwMTc6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmFyY2gveDg2L2t2bS9tbXUvbW11LmMtNTAxOC1cXHRcXHRcXHRcXHQgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmM9MTcwMT1zdGF0aWMgaW50IHRkeF9zZXB0X21hcF9sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGVudW0gcGdfbGV2ZWwgbGV2ZWwsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTE3MTMtXFx0LypcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jOjE3MTQ6XFx0ICogRW5zdXJlIHByZV9mYXVsdF9hbGxvd2VkIGlzIHJlYWQgYnkga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KClcXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jLTE3MTUtXFx0ICogYmVmb3JlIGt2bV90ZHgtXFx1MDAzZXN0YXRlLiAgVXNlcnNwYWNlIG11c3Qgbm90IGJlIGFsbG93ZWQgdG8gcHJlLWZhdWx0XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg9MjYxMD12b2lkIGt2bV9hcmNoX2dtZW1faW52YWxpZGF0ZShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oLTI2MTMtI2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oOjI2MTQ6bG9uZyBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNjE1LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKTtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9NDMzND1zdGF0aWMgaW50IGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy00MzU4LVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6NDM1OTpcXHRcXHRyID0ga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHZjcHUsIHJhbmdlKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQzNjAtXFx0XFx0aWYgKFdBUk5fT05fT05DRShyID09IDAgfHwgciA9PSAtRUlPKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MDI6MTMuMzM0MjU5ODExWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA1NzE2NzQ0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFJJU0MtViBLVk0gUHJlLUZhdWx0IE1lbW9yeSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciB0aGUgYEtWTV9QUkVfRkFVTFRfTUVNT1JZYCBpb2N0bCBzcGVjaWZpY2FsbHkgZm9yIFJJU0MtVi4gSXQncyBjYWxsZWQgdGhyb3VnaCBga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgZnJvbSBga3ZtX21haW4uY2AsIHRyaWdnZXJlZCBieSB0aGUgaW9jdGwgaXRzZWxmLiAgU2luY2UgdGhpcyBpcyBhIG5ldyBpb2N0bCBoYW5kbGVyLCBmdXp6aW5nIGlzIGRlZmluaXRlbHkgd2FycmFudGVkOyB0aGF0J3MgYSBwcmltZSB0YXJnZXQgZm9yIGZpbmRpbmcgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy5cblxuVGhlIGNvcmUgaW1wbGVtZW50YXRpb24gc2VlbXMgdG8gcmVzaWRlIGluIGBhcmNoL3Jpc2N2L2t2bS9tbXUuY2AsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBtZW1vcnktcmVsYXRlZCBuYXR1cmUgb2YgdGhlIGlvY3RsLiBUaGUgbWFpbiBmdW5jdGlvbiBJIG5lZWQgdG8gZm9jdXMgb24gaXMgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAsIGFsdGhvdWdoIHRoZSBuYW1pbmcgaXMgYSBiaXQgbWlzbGVhZGluZyBzaW5jZSBpdCdzIGRlZmluZWQgc3BlY2lmaWNhbGx5IGZvciBSSVNDLVYuIEl0J3MgYWN0dWFsbHkgaW4gYGFyY2gvcmlzY3Yva3ZtL21tdS5jYC4gQWxzbyB3b3J0aCBub3RpbmcgaXMgdGhlIG1vZGlmaWNhdGlvbiB0byBga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZWAuXG5cbkknbGwgY2hlY2sgYGFyY2gvcmlzY3Yva3ZtL0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyByZXF1aXJlZCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5IHRvIGJlIGVuYWJsZWQgb3IgaWYgdGhlcmUgYXJlIGFueSBpbnRlcmVzdGluZyBvcHRpb25zIHRoYXQgY291bGQgaW1wYWN0IGl0cyBiZWhhdmlvci4gVGhpcyBjb3VsZCBwcm92aWRlIHZhbHVhYmxlIGNvbnRleHQgZm9yIHRlc3RpbmcgYW5kIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0MTIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MDI6MTguMzkxNDMxMjI3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMzU2OTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTIxLVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjAyOjE4LjQ3Mjc5MjUzNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MDg4ODc1OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llczogS1ZNIGFuZCBWaXJ0dWFsaXphdGlvbioqXG5cbkFscmlnaHQsIEknbSBkaXZpbmcgaW50byB0aGlzIGtlcm5lbCBjb25maWd1cmF0aW9uLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBhYnNvbHV0ZSByZXF1aXJlbWVudCBmb3IgYENPTkZJR19LVk1gLiBUaGF0J3MgYSBnaXZlbiDigJMgY2FuJ3QgZG8gYW55dGhpbmcgS1ZNLXJlbGF0ZWQgd2l0aG91dCB0aGF0IGVuYWJsZWQsIG9idmlvdXNseS4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHF1ZXN0aW9uIGlzOiBkb2VzIGVuYWJsaW5nIEtWTSBuZWNlc3NpdGF0ZSwgb3IgYXQgbGVhc3QgaGlnaGx5IHN1Z2dlc3QsIHRoYXQgd2UgYWxzbyBjb25zaWRlciBgQ09ORklHX1ZJUlRVQUxJWkFUSU9OYD8gVGhlIHJlbGF0aW9uc2hpcCB0aGVyZSBpcyBrZXkuIEl0J3MgYWxtb3N0IGNlcnRhaW4gdGhhdCB0aGUgdW5kZXJseWluZyBoeXBlcnZpc29yIHN1cHBvcnQgd2lsbCBiZSBuZWVkZWQsIGJ1dCBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHdoZXRoZXIgYFZJUlRVQUxJWkFUSU9OYCBpcyAqc3RyaWN0bHkqIGEgcHJlcmVxdWlzaXRlLCBvciBpZiBpdCdzIG1vcmUgb2YgYW4gYW5jaWxsYXJ5IGZlYXR1cmUgdGhhdCBpcyBiZXN0IHByYWN0aWNlIHRvIGVuYWJsZSB3aGVuIGVuYWJsaW5nIEtWTS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBkZXBlbmRlbmN5IHBhdGggY2xlYXJseSB0byBtYWtlIHRoZSByaWdodCBjb25maWd1cmF0aW9uIGRlY2lzaW9ucy4gSXQgZGVwZW5kcyBvbiB3aGV0aGVyIHdlIGFyZSBkZWFsaW5nIHdpdGggYSB0eXBlIDEgb3IgdHlwZSAyIGh5cGVydmlzb3IsIGFuZCBob3cgbXVjaCBpcyBiZWluZyB2aXJ0dWFsaXplZCwgb3IgZW11bGF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxMDIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzowMjoyMi4wODE2ODE5OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTYyMjM2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVklSVFVBTElaQVRJT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L2t2bS9LY29uZmlnPTY9c291cmNlIFxcXCJ2aXJ0L2t2bS9LY29uZmlnXFxcIlxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctNy1cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnOjg6bWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctOS1cXHRib29sIFxcXCJWaXJ0dWFsaXphdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MDI6MjIuMTU3MzA5NjI5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5Mzg1NDAwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIGFuZCBNTVUgRnVuY3Rpb24gUmV2aWV3KipcblxuQWxyaWdodCwgZmlyc3QgdGhpbmdzIGZpcnN0LCBzZWVtcyBsaWtlIHdlJ3JlIGxvb2tpbmcgYXQgS1ZNIG9uIFJJU0MtVi4gVGhlcmVmb3JlLCBgQ09ORklHX0tWTWAgYW5kIGBDT05GSUdfVklSVFVBTElaQVRJT05gIGFyZSBkZWZpbml0ZWx5IHByZXJlcXVpc2l0ZXMuIE5vdGhpbmcgc3VycHJpc2luZyB0aGVyZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aG9zZSBhcmUgZW5hYmxlZCwgb2J2aW91c2x5LlxuXG5OZXh0LCBJJ20gdGhpbmtpbmcgb2YgZGl2aW5nIGludG8gdGhlIE1NVS1yZWxhdGVkIGNvZGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIFJJU0MtViBLVk0gaW1wbGVtZW50YXRpb24uIFRoZSBmdW5jdGlvbiBJIHdhbnQgdG8gbG9vayBhdCBpcyBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCDigJMgSSdtIGFzc3VtaW5nIHRoYXQncyB3aGVyZSB0aGUgY29yZSBwcmUtZmF1bHQgaGFuZGxpbmcgaGFwcGVucyBhbmQgbGlrZWx5IHdoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZm9yIHdoYXRldmVyIHRhc2sgSSd2ZSBnb3QgaW4gbWluZC4gVGltZSB0byBnZXQgZGlnZ2luZyBpbiBgYXJjaC9yaXNjdi9rdm0vbW11LmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDg1LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MDI6MjUuNTUxMTY1Njk2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTgxMTk2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9rdm0vbW11LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9rdm0vbW11LmM9NjIzPWludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03NTAtXFxuYXJjaC9yaXNjdi9rdm0vbW11LmM6NzUxOmxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03NTItXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjAyOjI1LjYxMDk4MzIwNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzI0ODc1NDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipGb2N1c2luZyBvbiBNZW1vcnkgRmF1bHRzIGluIEtWTS1SSVNDVioqXG5cbkFscmlnaHQsIHRoZSBjb3JlIG9mIHRoaXMgbWVtb3J5IGZhdWx0IGludmVzdGlnYXRpb24gc2VlbXMgdG8gbGllIHdpdGhpbiBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YC4gVGhhdCdzIGRlZmluaXRlbHkgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0IGRpZ2dpbmcuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSB2aXJ0dWFsIENQVSBpcyBpbnRlcmNlcHRpbmcgdGhlIG1lbW9yeSBhY2Nlc3MgYmVmb3JlIHRoZSBmYXVsdCBldmVuIG9jY3VycywgYWxsb3dpbmcgZm9yIG91ciBpbnRlcnZlbnRpb24uXG5cbkFuZCwgZnJvbSB0aGUgbG9va3Mgb2YgaXQsIGl0IHNlZW1zIGxpa2UgYGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2VgIGhhcyBzZWVuIHNvbWUgbW9kaWZpY2F0aW9ucy4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRob3NlIGNoYW5nZXMgaW4gYGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2VgIGFyZSBpbnRlcmFjdGluZyB3aXRoIHRoZSBmYXVsdCBoYW5kbGluZyBpbiBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YC4gR290dGEgZmlndXJlIG91dCB0aGUgaW50ZXJwbGF5LlxuXG5GaXJzdCwgbGV0J3MgcHVsbCB1cCB0aGUgc291cmNlIGZvciBga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZWAuIEknbGwgZmluZCBpdCBpbiBgYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNgIGFuZCBzZWUgaG93IHRoaXMgaXMgYWZmZWN0aW5nIHRoZSBtYXBwaW5nIG9mIGd1ZXN0IHBoeXNpY2FsIHBhZ2VzIHdpdGhpbiB0aGUgZ2xvYmFsIHN0YWdlLiBJdCBzZWVtcyBsaWtlIHRoZSBtb2RpZmljYXRpb25zIHRoZXJlIGFyZSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgbWVtb3J5IGZhdWx0cyBhcmUgaGFuZGxlZCBpbiBSSVNDLVYuIFRoYXQncyB0aGUgcHJpb3JpdHkgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTMyLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MDI6MjkuMzM1ODYxMDQ4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTExMTQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jPTE4Nj1zdGF0aWMgdm9pZCBrdm1fcmlzY3ZfZ3N0YWdlX3VwZGF0ZV9wdGVfcHJvdChzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLCB1MzIgbGV2ZWwsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYy0yMDYtXFxuYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmM6MjA3OmludCBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsXFxuYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmMtMjA4LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSAqcGNhY2hlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzowMjoyOS4zOTA5NzgxODdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODk2NDMxOTEwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBSSVNDLVYgS1ZNIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBSSVNDLVYgS1ZNIHBhdGNoLCBhbmQgaXQgc2VlbXMgbGlrZSBga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZWAgYW5kIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbi4gVGhleSBhcmUgdGhlIHByaW1hcnkgdGFyZ2V0cyBoZXJlLlxuXG5MZXQgbWUganVzdCBxdWlja2x5IGNoZWNrIGZvciBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEFoLCB5ZXMsIGBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZYCBpcyBpbmRlZWQgc2VsZWN0ZWQgd2hlbiBgS1ZNYCBpcyBlbmFibGVkIGZvciBSSVNDLVYuIFNvLCBqdXN0IGVuYWJsaW5nIGBLVk1gIHNob3VsZCBzdWZmaWNlLlxuXG5Ob3csIGxldCdzIGZvcm1hdCBteSBmaW5kaW5ncyBmb3IgZWFzeSBjb25zdW1wdGlvbi5cblxuRXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggaXMgYWRkaW5nIHRoZSBgS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZYCBjYXBhYmlsaXR5IGFuZCBpdHMgYXNzb2NpYXRlZCBpb2N0bCwgYEtWTV9QUkVfRkFVTFRfTUVNT1JZYCwgZm9yIFJJU0MtViBLVk0uIFRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgcHJlLWZhdWx0IGhhbmRsZXIsIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLCBpcyBiZWluZyBpbnRyb2R1Y2VkLiBQbHVzLCBga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZWAgaXMgYmVpbmcgdXBkYXRlZCB0byByZXR1cm4gbWFwcGluZyBpbmZvcm1hdGlvbi5cblxuVGhpcyBtZWFucyBuZXcsIHBvdGVudGlhbGx5IHJlYWNoYWJsZSBjb2RlIHBhdGhzIGFyZSBiZWluZyBvcGVuZWQgdXAgaW4gdGhlIFJJU0MtViBLVk0gc3Vic3lzdGVtLCBhbmQgdXNlcnNwYWNlIGNhbiB0cmlnZ2VyIHRoZW0gdmlhIHRoaXMgbmV3IGlvY3RsLlxuXG5IZXJlJ3MgdGhlIGRhdGEgZm9yIG15IHJlY29yZHM6XG5cbiogICAqKldvcnRoRnV6emluZyoqOiBgdHJ1ZWBcbiogICAqKkZvY3VzU3ltYm9scyoqOlxuICAgICogICBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YFxuICAgICogICBga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZWBcbiogICAqKkVuYWJsZUNvbmZpZ3MqKjpcbiAgICAqICAgYEtWTWBcbiAgICAqICAgYFZJUlRVQUxJWkFUSU9OYFxuKiAgICoqUmVhc29uaW5nKio6IFRoaXMgcGF0Y2ggZW5hYmxlcyB0aGUgS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZIGNhcGFiaWxpdHkgYW5kIGl0cyBjb3JyZXNwb25kaW5nIGlvY3RsIChLVk1fUFJFX0ZBVUxUX01FTU9SWSkgZm9yIFJJU0MtViBLVk0uIEl0IGltcGxlbWVudHMgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBoYW5kbGVyIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGFuZCBtb2RpZmllcyBga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZWAgdG8gcmV0dXJuIG1hcHBpbmcgaW5mb3JtYXRpb24uIFRoaXMgaW50cm9kdWNlcyBuZXcgcmVhY2hhYmxlIGNvZGUgcGF0aHMgaW4gdGhlIFJJU0MtViBLVk0gc3Vic3lzdGVtIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGlvY3RsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDgxLCJPdXRwdXRUb2tlbnMiOjE4MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzowMjozOC4zNTUyOTk5NjRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkyMDQyOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiVklSVFVBTElaQVRJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlcIixcbiAgICBcImt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBlbmFibGVzIHRoZSBLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUlkgY2FwYWJpbGl0eSBhbmQgaXRzIGNvcnJlc3BvbmRpbmcgaW9jdGwgKEtWTV9QUkVfRkFVTFRfTUVNT1JZKSBmb3IgUklTQy1WIEtWTS4gSXQgaW1wbGVtZW50cyB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGhhbmRsZXIgYGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgYW5kIG1vZGlmaWVzIGBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlYCB0byByZXR1cm4gbWFwcGluZyBpbmZvcm1hdGlvbi4gVGhpcyBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUgY29kZSBwYXRocyBpbiB0aGUgUklTQy1WIEtWTSBzdWJzeXN0ZW0gdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgaW9jdGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJWSVJUVUFMSVpBVElPTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeVwiLFxuICAgIFwia3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGVuYWJsZXMgdGhlIEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWSBjYXBhYmlsaXR5IGFuZCBpdHMgY29ycmVzcG9uZGluZyBpb2N0bCAoS1ZNX1BSRV9GQVVMVF9NRU1PUlkpIGZvciBSSVNDLVYgS1ZNLiBJdCBpbXBsZW1lbnRzIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaGFuZGxlciBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBhbmQgbW9kaWZpZXMgYGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2VgIHRvIHJldHVybiBtYXBwaW5nIGluZm9ybWF0aW9uLiBUaGlzIGludHJvZHVjZXMgbmV3IHJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHRoZSBSSVNDLVYgS1ZNIHN1YnN5c3RlbSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBpb2N0bC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MDI6MzguNDc0NTEwNDAyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDEwNzUxNTAzNzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzowMjozOC40NzQ5Mzg1NDJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTAxMDc0NzE2ODA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIHRoZSBgS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZYCBjYXBhYmlsaXR5IGZvciBSSVNDLVYgYnkgYWRkaW5nIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGFuZCB3aXJpbmcgaXQgdXAgaW4gdGhlIE1NVS4gVGhlIG9ubHkgZGF0YSBzdHJ1Y3R1cmUgaW52b2x2ZWQgaW4gdXNlciBzcGFjZSBjb21tdW5pY2F0aW9uIGlzIGBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnlgLCB3aGljaCBpcyBoYW5kbGVkIGJ5IGdlbmVyaWMgS1ZNIGNvZGUgKGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCkuIFRoZSBnZW5lcmljIGNvZGUgZnVsbHkgaW5pdGlhbGl6ZXMgdGhlIHN0cnVjdCB2aWEgYGNvcHlfZnJvbV91c2VyYCBiZWZvcmUgbW9kaWZ5aW5nIGl0cyBgc2l6ZWAgYW5kIGBncGFgIGZpZWxkcyBhbmQgY29weWluZyBpdCBiYWNrIHRvIHVzZXIgc3BhY2UuIEFueSBwYWRkaW5nIGZpZWxkcyBzaW1wbHkgZWNobyBiYWNrIHRoZSB1c2VyLXByb3ZpZGVkIHZhbHVlcywgcHJldmVudGluZyBhbnkga2VybmVsIG1lbW9yeSBpbmZvLWxlYWtzLiBUaGUgbG9jYWwgdmFyaWFibGUgYG91dF9tYXBgIG9mIHR5cGUgYHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmdgIGlzIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCAoYD0geyAwIH1gKSBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvIGBrdm1fcmlzY3ZfbW11X21hcGAuIFRoZXJlIGFyZSBubyBuZXcgY29tcGxleCBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiMGI2MGEwYzc5ZjNjMjJmOWFmNjg3Njg4ODBkMjZjZmIyNTIyNTAyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMDc6MDE6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9LY29uZmlnIGIvYXJjaC9yaXNjdi9rdm0vS2NvbmZpZ1xuaW5kZXggZWMyY2VlMGEzOWUwMS4uOGFjMjA5ZThhYzg3MCAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL0tjb25maWdcbisrKyBiL2FyY2gvcmlzY3Yva3ZtL0tjb25maWdcbkBAIC0yOCw2ICsyOCw3IEBAIGNvbmZpZyBLVk1cbiBcdHNlbGVjdCBLVk1fQ09NTU9OXG4gXHRzZWxlY3QgS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUXG4gXHRzZWxlY3QgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkdcbitcdHNlbGVjdCBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXG4gXHRzZWxlY3QgS1ZNX01NSU9cbiBcdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xuIFx0c2VsZWN0IFNDSEVEX0lORk9cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYyBiL2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jXG5pbmRleCBlNTAwMmNiOWNiZWYxLi42YmQ4YjhmZDZjZWIyIDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNcbisrKyBiL2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jXG5AQCAtMjgwLDYgKzI4MCw5IEBAIGludCBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsXG4gXHRcdFx0XHRcdFx0ICAgIG91dF9tYXAtXHUwMDNlbGV2ZWwsIHRydWUpO1xuIFx0XHR9IGVsc2UgaWYgKEFMSUdOX0RPV04oUEZOX1BIWVMocHRlX3BmbihwdGVwX2dldChwdGVwKSkpLCBwYWdlX3NpemUpID09IGhwYSkge1xuIFx0XHRcdGt2bV9yaXNjdl9nc3RhZ2VfdXBkYXRlX3B0ZV9wcm90KGdzdGFnZSwgcHRlcF9sZXZlbCwgZ3BhLCBwdGVwLCBwcm90KTtcbitcdFx0XHRvdXRfbWFwLVx1MDAzZWFkZHIgPSBBTElHTl9ET1dOKGdwYSwgcGFnZV9zaXplKTtcbitcdFx0XHRvdXRfbWFwLVx1MDAzZWxldmVsID0gcHRlcF9sZXZlbDtcbitcdFx0XHRvdXRfbWFwLVx1MDAzZXB0ZSA9IHB0ZXBfZ2V0KHB0ZXApO1xuIFx0XHRcdHJldHVybiAwO1xuIFx0XHR9XG4gXHR9XG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vbW11LmMgYi9hcmNoL3Jpc2N2L2t2bS9tbXUuY1xuaW5kZXggNjAzNWI1ZWM5NTAzOS4uYzk2ZTIxNzQwYzkxMyAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL21tdS5jXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS9tbXUuY1xuQEAgLTc0OCw2ICs3NDgsMzkgQEAgaW50IGt2bV9yaXNjdl9tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK2xvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbitcdFx0XHRcdCAgICBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKVxuK3tcbitcdHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgb3V0X21hcCA9IHsgMCB9O1xuK1x0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdDtcbitcdHVuc2lnbmVkIGxvbmcgbWFwX3NpemU7XG4rXHR1bnNpZ25lZCBsb25nIGh2YTtcbitcdGdwYV90IGVuZDtcbitcdGdmbl90IGdmbjtcbitcdGludCByZXQ7XG4rXG4rXHRnZm4gPSBncGFfdG9fZ2ZuKHJhbmdlLVx1MDAzZWdwYSk7XG4rXHRtZW1zbG90ID0ga3ZtX3ZjcHVfZ2ZuX3RvX21lbXNsb3QodmNwdSwgZ2ZuKTtcbitcdGlmICghbWVtc2xvdClcbitcdFx0cmV0dXJuIC1FTk9FTlQ7XG4rXG4rXHRodmEgPSBnZm5fdG9faHZhX21lbXNsb3RfcHJvdChtZW1zbG90LCBnZm4sIE5VTEwpO1xuK1x0aWYgKGt2bV9pc19lcnJvcl9odmEoaHZhKSlcbitcdFx0cmV0dXJuIC1FTk9FTlQ7XG4rXG4rXHRyZXQgPSBrdm1fcmlzY3ZfbW11X21hcCh2Y3B1LCBtZW1zbG90LCByYW5nZS1cdTAwM2VncGEsIGh2YSwgZmFsc2UsIFx1MDAyNm91dF9tYXApO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmICghcHRlX3ZhbChvdXRfbWFwLnB0ZSkpXG4rXHRcdHJldHVybiAtRUFHQUlOO1xuK1xuK1x0bWFwX3NpemUgPSBQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIChvdXRfbWFwLmxldmVsICoga3ZtX3Jpc2N2X2dzdGFnZV9pbmRleF9iaXRzKTtcbitcdGVuZCA9IEFMSUdOX0RPV04ocmFuZ2UtXHUwMDNlZ3BhLCBtYXBfc2l6ZSkgKyBtYXBfc2l6ZTtcbitcbitcdHJldHVybiBtaW5fdCh1NjQsIHJhbmdlLVx1MDAzZXNpemUsIGVuZCAtIHJhbmdlLVx1MDAzZWdwYSk7XG4rfVxuK1xuIGludCBrdm1fcmlzY3ZfbW11X2FsbG9jX3BnZChzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0c3RydWN0IHBhZ2UgKnBnZF9wYWdlO1xuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3ZtLmMgYi9hcmNoL3Jpc2N2L2t2bS92bS5jXG5pbmRleCBhOWYwODNmZWViNzY3Li41ODUwMGExOWIzM2JkIDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vdm0uY1xuKysrIGIvYXJjaC9yaXNjdi9rdm0vdm0uY1xuQEAgLTE4Nyw2ICsxODcsNyBAQCBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxuIFx0Y2FzZSBLVk1fQ0FQX01QX1NUQVRFOlxuIFx0Y2FzZSBLVk1fQ0FQX0lNTUVESUFURV9FWElUOlxuIFx0Y2FzZSBLVk1fQ0FQX1NFVF9HVUVTVF9ERUJVRzpcbitcdGNhc2UgS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZOlxuIFx0XHRyID0gMTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEtWTV9DQVBfTlJfVkNQVVM6XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlLmt2bSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9NYWtlZmlsZS5rdm1cbmluZGV4IDZmYzM0ZTliZjhlMWIuLmFjNjRhYzkyZmQ0YjAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUua3ZtXG5AQCAtMjI1LDYgKzIyNSw3IEBAIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IGNvYWxlc2NlZF9pb190ZXN0XG4gVEVTVF9HRU5fUFJPR1NfcmlzY3YgKz0gZGlydHlfbG9nX3BlcmZfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IGdldC1yZWctbGlzdFxuIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IG1tdV9zdHJlc3NfdGVzdFxuK1RFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IHByZV9mYXVsdF9tZW1vcnlfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IHJzZXFfdGVzdFxuIFRFU1RfR0VOX1BST0dTX3Jpc2N2ICs9IHN0ZWFsX3RpbWVcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9yaXNjdi9wcm9jZXNzb3IuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oXG5pbmRleCBlM2FjZjJhZTk4ODFlLi43MDQ4N2M4ZWQxNTUzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUvcmlzY3YvcHJvY2Vzc29yLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3Jpc2N2L3Byb2Nlc3Nvci5oXG5AQCAtMTIsNiArMTIsOSBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS92ZHNvL3Byb2Nlc3Nvci5oXHUwMDNlXG4gI2luY2x1ZGUgXCJrdm1fdXRpbC5oXCJcbiBcbisjZGVmaW5lIFBBR0VfU0hJRlRcdFx0MTJcbisjZGVmaW5lIFBBR0VfU0laRVx0XHRCSVRfVUxMKFBBR0VfU0hJRlQpXG4rXG4gI2RlZmluZSBJTlNOX09QQ09ERV9NQVNLXHQweDAwN2NcbiAjZGVmaW5lIElOU05fT1BDT0RFX1NISUZUXHQyXG4gI2RlZmluZSBJTlNOX09QQ09ERV9TWVNURU1cdDI4XG5AQCAtMTI3LDYgKzEzMCw5IEBAIHZvaWQgdm1faW5zdGFsbF9leGNlcHRpb25faGFuZGxlcihzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IHZlY3RvciwgZXhjZXB0aW9uX2hhbmRsXG4gXG4gdm9pZCB2bV9pbnN0YWxsX2ludGVycnVwdF9oYW5kbGVyKHN0cnVjdCBrdm1fdm0gKnZtLCBleGNlcHRpb25faGFuZGxlcl9mbiBoYW5kbGVyKTtcbiBcbisvKiBMNCBpbmRleCBCaXRbNTY6NDhdICovXG4rI2RlZmluZSBQR1RCTF9MNF9JTkRFWF9NQVNLXHRcdFx0MHgwMUZGMDAwMDAwMDAwMDAwVUxMXG4rI2RlZmluZSBQR1RCTF9MNF9JTkRFWF9TSElGVFx0XHRcdDQ4XG4gLyogTDMgaW5kZXggQml0WzQ3OjM5XSAqL1xuICNkZWZpbmUgUEdUQkxfTDNfSU5ERVhfTUFTS1x0XHRcdDB4MDAwMEZGODAwMDAwMDAwMFVMTFxuICNkZWZpbmUgUEdUQkxfTDNfSU5ERVhfU0hJRlRcdFx0XHQzOVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXG5pbmRleCBkZWQ1NDI5ZjM0NDgzLi5iNGQ0MWE0MDc1NTM2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuY1xuQEAgLTQzLDYgKzQzLDcgQEAgc3RhdGljIHU2NCBwdGVfaW5kZXhfbWFza1tdID0ge1xuIFx0UEdUQkxfTDFfSU5ERVhfTUFTSyxcbiBcdFBHVEJMX0wyX0lOREVYX01BU0ssXG4gXHRQR1RCTF9MM19JTkRFWF9NQVNLLFxuK1x0UEdUQkxfTDRfSU5ERVhfTUFTSyxcbiB9O1xuIFxuIHN0YXRpYyB1MzIgcHRlX2luZGV4X3NoaWZ0W10gPSB7XG5AQCAtNTAsNiArNTEsNyBAQCBzdGF0aWMgdTMyIHB0ZV9pbmRleF9zaGlmdFtdID0ge1xuIFx0UEdUQkxfTDFfSU5ERVhfU0hJRlQsXG4gXHRQR1RCTF9MMl9JTkRFWF9TSElGVCxcbiBcdFBHVEJMX0wzX0lOREVYX1NISUZULFxuK1x0UEdUQkxfTDRfSU5ERVhfU0hJRlQsXG4gfTtcbiBcbiBzdGF0aWMgdTY0IHB0ZV9pbmRleChzdHJ1Y3Qga3ZtX3ZtICp2bSwgZ3ZhX3QgZ3ZhLCBpbnQgbGV2ZWwpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jXG5pbmRleCBhMGZjYWUzY2I3YThiLi42ZWViZjA1MjQ2NzM2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmNcbkBAIC04LDYgKzgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NpemVzLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2N0ZXN0X3V0aWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2d1ZXN0X21vZGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nrdm1fdXRpbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjcHJvY2Vzc29yLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NwdGhyZWFkLmhcdTAwM2VcbkBAIC0yMTksNiArMjIwLDggQEAgc3RhdGljIHZvaWQgdGVzdF9wcmVfZmF1bHRfbWVtb3J5KHVuc2lnbmVkIGxvbmcgdm1fdHlwZSwgYm9vbCBwcml2YXRlKVxuIFxuIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4ge1xuK1x0Z3Vlc3RfbW9kZXNfYXBwZW5kX2RlZmF1bHQoKTtcbitcbiBcdFRFU1RfUkVRVUlSRShrdm1fY2hlY2tfY2FwKEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWSkpO1xuIFxuIFx0dGVzdF9wcmVfZmF1bHRfbWVtb3J5KDAsIGZhbHNlKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjAyOjM4LjQ3NDkzOTQyMloiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MDQzMDg0ODA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJJU0MtViBLVk0gUHJlLUZhdWx0IE1lbW9yeSBTdXBwb3J0IEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgUklTQy1WIEtWTS4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgYWJvdXQgYWRkaW5nIHN1cHBvcnQgZm9yIGBLVk1fQ0FQX1BSRV9GQVVMVF9NRU1PUllgLiAgRXNzZW50aWFsbHksIGl0J3MgYWJvdXQgcHJvYWN0aXZlbHkgZmF1bHRpbmcgaW4gbWVtb3J5IHJlZ2lvbnMsIHdoaWNoIGNhbiBpbXByb3ZlIHBlcmZvcm1hbmNlIGJ5IHJlZHVjaW5nIHRoZSBsYXRlbmN5IG9mIHRoZSBmaXJzdCBhY2Nlc3MuXG5cblRoZSBmaXJzdCB0aGluZyBJIHNlZSBpcyB0aGUgYEtjb25maWdgIGNoYW5nZTsgaXQncyBzZWxlY3RpbmcgYEtWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllgLiBHb29kLCB3ZSBhcmUgcmV1c2luZyB0aGUgZ2VuZXJpYyBmcmFtZXdvcmsgd2hlcmUgcG9zc2libGUuIFRoZW4gdGhlcmUgYXJlIHRoZSBtb2RpZmljYXRpb25zIHRvIGBnc3RhZ2UuY2Ag4oCTIHByZXN1bWFibHkgcG9wdWxhdGluZyBgb3V0X21hcGAgZmllbGRzIOKAkyBhbmQgYG1tdS5jYCwgd2hpY2ggaW1wbGVtZW50cyB0aGUga2V5IGZ1bmN0aW9uOiBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YC4gRmluYWxseSwgaXQgcmVwb3J0cyB0aGUgbmV3IGNhcGFiaWxpdHkgYXMgc3VwcG9ydGVkIGFuZCB1cGRhdGVzIHNlbGZ0ZXN0cy4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIHNvIGZhci5cblxuTm93IGxldCdzIGRpdmUgaW50byB0aGF0IGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGZ1bmN0aW9uLiBJJ20gc2VlaW5nIGEgbG9jYWwgYHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgb3V0X21hcCA9IHsgMCB9O2AgYmVpbmcgaW5pdGlhbGl6ZWQgdG8gemVyby4gSSB0aGVuIHNlZSB0aGF0IGBrdm1fcmlzY3ZfbW11X21hcGAgaXMgYmVpbmcgY2FsbGVkIHdpdGggYFx1MDAyNm91dF9tYXBgIGFzIGFuIGFyZ3VtZW50LiAgSSBzZWUgdGhhdCB0aGUgYG91dF9tYXBgIHN0cnVjdCBpcyB1c2VkIGxhdGVyIHRvIGNhbGN1bGF0ZSBgbWFwX3NpemVgIHdoaWNoLCBnaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwcmUtZmF1bHRpbmcgcHJvY2Vzcywgc2VlbXMgY29ycmVjdC4gV2UncmUgZWZmZWN0aXZlbHkgZmlndXJpbmcgb3V0IHRoZSBtYXBwaW5nJ3Mgc2l6ZSwgYmFzZWQgb24gdGhlIE1NVSdzIHBhZ2UgdGFibGUgbGV2ZWwuIFRoZSBgZW5kYCBjYWxjdWxhdGlvbiB0aGVuIHVzZXMgdGhlIGBtYXBfc2l6ZWAgdG8gZmlndXJlIG91dCB0aGUgYWN0dWFsIGJ5dGVzIHRvIHByZS1mYXVsdC4gVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdlcmUgc3VjY2Vzc2Z1bGx5IHByZS1mYXVsdGVkLCBvciBhbiBlcnJvci5cblxuVGhlIGltcG9ydGFudCB0aGluZyBpcyB0aGlzIHplcm8gaW5pdGlhbGl6YXRpb24gb2YgYG91dF9tYXBgLiBJcyB0aGlzIG9rYXk/IEl0IGNvdWxkIGNhdXNlIHByb2JsZW1zLCBpdCdzIHNvbWV0aGluZyBJIG5lZWQgdG8gbG9vayBpbnRvLlxuXG5UaGUgbmV4dCBwb2ludCBJIG5lZWQgdG8gY2xhcmlmeSBpcyB3aGV0aGVyIHRoZSBgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5YCBpcyBiZWluZyBjb3BpZWQgdG8vZnJvbSB1c2Vyc3BhY2UuIEJlY2F1c2UgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBhcyBhbiBgaW9jdGxgIGFuZCwgZ2l2ZW4gbXkga25vd2xlZGdlIG9mIGhvdyB0aGlzIHR5cGljYWxseSB3b3JrcyB3aXRoIEtWTSwgSSdtIHByZXR0eSBzdXJlIHRoYXQgdGhpcyBpcyBpbmRlZWQgdGhlIGNhc2UuIFRoYXQgbWVhbnMgdGhlcmUncyBhIGdvb2QgY2hhbmNlIHRoaXMgaXMgYSB2dWxuZXJhYmlsaXR5LiAgSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBnZW5lcmljIEtWTSBjb2RlIGZvciB0aGUgYEtWTV9QUkVfRkFVTFRfTUVNT1JZYCBpb2N0bCBpbXBsZW1lbnRhdGlvbi4gSSBjYW4gdXNlIGBncmVwcGVyYCB0byBmaW5kIG91dCB3aGVyZSBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBpcyBhY3R1YWxseSBjYWxsZWQuIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNzcsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MDEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzowMjo0Ny41MTgwMjczNjdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyOTUwMjg2NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3Yva3ZtL21tdS5jPTYyMz1pbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNzUwLVxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jOjc1MTpsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNzUyLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jPTU3OTc9dm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTg0MC0vKipcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmM6NTg0MTogKiBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoKSAtLSBwcmUtZmF1bHQgYW5kIGxpbmsgZ21hcCBkYXQgdGFibGVzXFxuYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jLTU4NDItICogQHZjcHU6IHRoZSB2Y3B1IHRoYXQgc2hhbGwgYXBwZWFyIHRvIGhhdmUgZ2VuZXJhdGVkIHRoZSBmYXVsdC1pbi5cXG4tLVxcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYy01ODU5LSAqL1xcbmFyY2gvczM5MC9rdm0va3ZtLXMzOTAuYzo1ODYwOmxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSlcXG5hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMtNTg2MS17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jPTQ5NzM9c3RhdGljIGludCBrdm1fdGRwX3BhZ2VfcHJlZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUwMTYtXFxuYXJjaC94ODYva3ZtL21tdS9tbXUuYzo1MDE3Omxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3g4Ni9rdm0vbW11L21tdS5jLTUwMTgtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5jPTE3MDE9c3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVsLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0xNzEzLVxcdC8qXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYzoxNzE0OlxcdCAqIEVuc3VyZSBwcmVfZmF1bHRfYWxsb3dlZCBpcyByZWFkIGJ5IGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSgpXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguYy0xNzE1LVxcdCAqIGJlZm9yZSBrdm1fdGR4LVxcdTAwM2VzdGF0ZS4gIFVzZXJzcGFjZSBtdXN0IG5vdCBiZSBhbGxvd2VkIHRvIHByZS1mYXVsdFxcbi0tXFxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTI2MTA9dm9pZCBrdm1fYXJjaF9nbWVtX2ludmFsaWRhdGUoa3ZtX3Bmbl90IHN0YXJ0LCBrdm1fcGZuX3QgZW5kKTtcXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0yNjEzLSNpZmRlZiBDT05GSUdfS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaDoyNjE0Omxvbmcga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMjYxNS1cXHRcXHRcXHRcXHQgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSk7XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTQzMzQ9c3RhdGljIGludCBrdm1fdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDM1OC1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjQzNTk6XFx0XFx0ciA9IGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSh2Y3B1LCByYW5nZSk7XFxudmlydC9rdm0va3ZtX21haW4uYy00MzYwLVxcdFxcdGlmIChXQVJOX09OX09OQ0UociA9PSAwIHx8IHIgPT0gLUVJTykpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjAyOjQ5LjgxMzA3MTIyOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzg0NTkyNTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0YWNrbGluZyB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24sIGBrdm1fdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCwgZm91bmQgaW4gYHZpcnQva3ZtL2t2bV9tYWluLmNgOlxuXG4qKkRpdmluZyBpbnRvIGBrdm1fdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCoqXG5cbkFscmlnaHQsIHRoZSBuZXh0IHN0ZXAgaW4gdGhpcyBpbnZlc3RpZ2F0aW9uIGlzIHRvIGdldCBhIGhhbmRsZSBvbiBga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQncyBoYXBwZW5pbmcgKmJlZm9yZSogYSBtZW1vcnkgZmF1bHQgb2NjdXJzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBLVk0gZW52aXJvbm1lbnQuIEdpdmVuIHRoZSBuYW1lLCBpdCdzIHByZXR0eSBjbGVhciB0aGlzIGlzIGEgcHJlLWZhdWx0IGhhbmRsZXIsIGxpa2VseSBjcnVjaWFsIGZvciBLVk0ncyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZXhjZXB0aW9uIGhhbmRsaW5nLiBUaGUgZmFjdCB0aGF0IGl0J3MgaW4gYGt2bV9tYWluLmNgIHN1Z2dlc3RzIGl0J3MgYSBjZW50cmFsIGNvbXBvbmVudCwgcHJvYmFibHkgaW52b2x2ZWQgaW4gdGhlIGNvcmUgVkNQVSBsaWZlY3ljbGUgYW5kIG1lbW9yeSBhY2Nlc3Mgb3BlcmF0aW9ucy4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIEtWTSBhcmNoaXRlY3R1cmUgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSB1bmRlcmx5aW5nIGhvc3QgbWVtb3J5IGFuZCB0aGUgZ3Vlc3QncyB2aXJ0dWFsIG1lbW9yeS4gSSdtIGFudGljaXBhdGluZyB0aGF0IHRoaXMgaXMgd2hlcmUgY3J1Y2lhbCBjaGVja3MsIHByZS1lbXB0aXZlIGFjdGlvbnMgKGxpa2UgZGlydHkgYml0IGhhbmRsaW5nKSwgb3Igb3B0aW1pemF0aW9ucyBhcmUgaW1wbGVtZW50ZWQgdG8gcHJldmVudCB0aGUgZmF1bHQgaXRzZWxmIG9yIHRvIHByZXBhcmUgZm9yIGl0cyByZXNvbHV0aW9uLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBzdWNoIGFzIHRoZSBWQ1BVJ3Mgc3RhdGUsIHRoZSBndWVzdCdzIHBhZ2UgdGFibGVzLCBhbmQgYW55IHJlbGV2YW50IEtWTS1zcGVjaWZpYyBtZW1vcnkgZGVzY3JpcHRvcnMuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBzdGFydCByZWFkaW5nIHNvbWUgY29kZSFcblxuXG4iLCJJbnB1dFRva2VucyI6Njc1NywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjAyOjUzLjU5NzY2Njc4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDA4MjkyNzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidmlydC9rdm0va3ZtX21haW4uYz00MzA4PXN0YXRpYyBpbnQga3ZtX3ZjcHVfaW9jdGxfZ2V0X3N0YXRzX2ZkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDMzMy0jaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjQzMzQ6c3RhdGljIGludCBrdm1fdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTQzMzUtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgKnJhbmdlKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz00NDA2PXN0YXRpYyBsb25nIGt2bV92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy00NjM4LVxcdFxcdFxcdGJyZWFrO1xcbnZpcnQva3ZtL2t2bV9tYWluLmM6NDYzOTpcXHRcXHRyID0ga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSh2Y3B1LCBcXHUwMDI2cmFuZ2UpO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDY0MC1cXHRcXHQvKiBQYXNzIGJhY2sgbGVmdG92ZXIgcmFuZ2UuICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjAyOjU1LjYwNTk2NTUzNFoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjU0NTA0NjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBga3ZtX3ZjcHVfaW9jdGxgIGJ1c2luZXNzLCBzcGVjaWZpY2FsbHkgdGhlIGhhbmRsaW5nIG9mIGBLVk1fUFJFX0ZBVUxUX01FTU9SWWAuIEhlcmUncyBteSB0YWtlIG9uIGl0OlxuXG4qKkRpc3NlY3RpbmcgdGhlIEtWTV9QUkVfRkFVTFRfTUVNT1JZIGlvY3RsIGluIGt2bV92Y3B1X2lvY3RsKipcblxuQWxyaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBwcmUtZmF1bHRpbmcgbWVtb3J5LiBUaGF0IGlvY3RsIGlzIGtleSwgYEtWTV9QUkVfRkFVTFRfTUVNT1JZYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNvbnNpZGVyIHRoZSBjb250ZXh0OiB3ZSdyZSBsaWtlbHkgdHJ5aW5nIHRvIG9wdGltaXplIG1lbW9yeSBhY2Nlc3MgaW4gdGhlIGd1ZXN0LCBieSBicmluZ2luZyBwYWdlcyBpbnRvIHRoZSBndWVzdCdzIHdvcmtpbmcgc2V0ICpiZWZvcmUqIHRoZXkncmUgYWN0dWFsbHkgYWNjZXNzZWQuIFNtYXJ0LiBUaGlzIHN1Z2dlc3RzIHByZS1sb2FkaW5nIHBhZ2VzIGZvciBhIHJlYXNvbiwgcGVyaGFwcyBwZXJmb3JtYW5jZSBwcm9maWxpbmcgZGV0ZWN0ZWQgc29tZSBsYXRlbmN5IGluIHRoZSBhcHBsaWNhdGlvbi5cblxuTm93LCB3aXRoaW4gYGt2bV92Y3B1X2lvY3RsYCwgaXQncyBhbGwgYWJvdXQgaG93IGBLVk1fUFJFX0ZBVUxUX01FTU9SWWAgaXMgKmhhbmRsZWQqLiBXaGF0IGFyZSB0aGUgc3RlcHM/IFdoZXJlIGRvZXMgaXQgZml0IGludG8gdGhlIG92ZXJhbGwgaW9jdGwgc3RydWN0dXJlPyBJcyBpdCBhIHNpbXBsZSBcImZhdWx0IHRoaXMgcmFuZ2VcIiBvciBhcmUgdGhlcmUgbW9yZSBjb21wbGV4IGNvbnNpZGVyYXRpb25zLCBsaWtlIGhhbmRsaW5nIHBhZ2UgZmF1bHRzIGFuZCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgTU1VPyBHaXZlbiBpdHMgbmFtZSwgaXTigJlzIG1vc3QgbGlrZWx5IHNldHRpbmcgdXAgdGhlIHByZS1mYXVsdCBmb3IgYSBnaXZlbiByYW5nZSBvZiBtZW1vcnkuIEhvdyBhcmUgd2UgaWRlbnRpZnlpbmcgdGhlIG1lbW9yeT8gUHJvYmFibHkgc29tZSBzb3J0IG9mIGFkZHJlc3MgcmFuZ2Ugd2l0aCBzdGFydCBhbmQgZW5kLiBBcmUgd2UgdXNpbmcgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzc2VzIG9yIHZpcnR1YWwgYWRkcmVzc2VzIHdpdGhpbiB0aGUgVk0/IFdlJ2xsIG5lZWQgdG8gdHJhbnNsYXRlIGFzIG5lY2Vzc2FyeSB0byB0aGUgaG9zdC5cblxuSSdkIGV4cGVjdCB0byBzZWUgYSBjaGVjayBmb3IgdmFsaWRpdHkgb2YgdGhlIHJlcXVlc3RlZCByYW5nZSwgZXJyb3IgaGFuZGxpbmcgaWYgdGhlIG9wZXJhdGlvbiBmYWlscywgYW5kIG1vc3QgaW1wb3J0YW50bHksIHRoZSBhY3R1YWwgbWVjaGFuaXNtIGZvciBicmluZ2luZyB0aG9zZSBwYWdlcyBpbnRvIG1lbW9yeS4gSXMgS1ZNIGxldmVyYWdpbmcgc29tZSBob3N0IHN5c3RlbSBjYWxscyBvciB0cmlja3MgdG8gcHJvYWN0aXZlbHkgdG91Y2ggdGhlIGd1ZXN0J3MgbWVtb3J5P1xuXG5JJ20gY3VyaW91czogYXJlIHRoZXJlIGFueSBmbGFncyBvciBvcHRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGlvY3RsPyBBcmUgd2UgbG9va2luZyBhdCAqanVzdCogcHJlZmF1bHRpbmcgb3IgaXMgdGhlcmUgYSB3YXkgdG8gcHJlLXBvcHVsYXRlIGFuZCBwcmV2ZW50IGEgcmVhbCBwYWdlIGZhdWx0IGxhdGVyPyBJIHdvdWxkIGJlIGludGVyZXN0ZWQgaW4gdGhlIG1lY2hhbmlzbXMgaW4gcGxhY2UgdGhhdCBwcmV2ZW50IGEgcmFjZSBjb25kaXRpb24gb3IgY29uZmxpY3QsIGFuZCBob3cgdGhleSBoYW5kbGUgdGhlIFZN4oCZcyBwYWdpbmcgc3RydWN0dXJlcy4gQWxzbywgaG93IGFyZSB3ZSBkZWFsaW5nIHdpdGggcG9zc2libGUgTlVNQSBjb25zaWRlcmF0aW9ucyBpbiB0aGlzIGNvbnRleHQ/XG5cblVsdGltYXRlbHksIG15IGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGVmZmljaWVuY3kgYW5kIHNhZmV0eSBvZiB0aGlzIHByZS1mYXVsdGluZyBwcm9jZXNzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBWTSdzIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgaG93IHRoaXMgZml0cyBpbnRvIEtWTSdzIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIHRyYW5zbGF0ZXMgaW50byByZWFsLXdvcmxkIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cywgb3IgaWYgdGhlcmUgaXMgZXZlciBhbnkgc2NlbmFyaW8gd2hlcmUgaXQgY291bGQgaW50cm9kdWNlIGFkZGl0aW9uYWwgb3ZlcmhlYWQuIEl0J3MgdGltZSB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgc2VlIGhvdyBpdCdzIGRvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0MDksIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzowMjo1OS44NjA0NzIzNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM4MTI5NDc5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJLVk1fUFJFX0ZBVUxUX01FTU9SWVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjQ3MT1TZWUgS1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT04yIGZvciBhZGRpdGlvbmFsIGRldGFpbHMuXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0NzItXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0NzM6NC4xNDMgS1ZNX1BSRV9GQVVMVF9NRU1PUllcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjQ3NC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4tLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02NDgyPUVycm9yczpcXG4tLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NTA2LVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NTA3OktWTV9QUkVfRkFVTFRfTUVNT1JZIHBvcHVsYXRlcyBLVk0ncyBzdGFnZS0yIHBhZ2UgdGFibGVzIHVzZWQgdG8gbWFwIG1lbW9yeVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NTA4LWZvciB0aGUgY3VycmVudCB2Q1BVIHN0YXRlLiAgS1ZNIG1hcHMgbWVtb3J5IGFzIGlmIHRoZSB2Q1BVIGdlbmVyYXRlZCBhXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTI1Mzk9c3RhdGljIGludCBzbnBfbGF1bmNoX2ZpbmlzaChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjU5OC1cXHQgKiBjYW4gYmUgZ2l2ZW4gdG8gdGhlIGd1ZXN0IHNpbXBseSBieSBtYXJraW5nIHRoZSBSTVAgZW50cnkgYXMgcHJpdmF0ZS5cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI1OTk6XFx0ICogVGhpcyBjYW4gaGFwcGVuIG9uIGZpcnN0IGFjY2VzcyBhbmQgYWxzbyB3aXRoIEtWTV9QUkVfRkFVTFRfTUVNT1JZLlxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjYwMC1cXHQgKi9cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaD0xNjU4PXN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjYzLVxcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaDoxNjY0OiNkZWZpbmUgS1ZNX1BSRV9GQVVMVF9NRU1PUllcXHRfSU9XUihLVk1JTywgMHhkNSwgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5KVxcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjY1LVxcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oPTE2NTg9c3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQge1xcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NjMtXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oOjE2NjQ6I2RlZmluZSBLVk1fUFJFX0ZBVUxUX01FTU9SWVxcdF9JT1dSKEtWTUlPLCAweGQ1LCBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkpXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NjUtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmM9NjY9c3RhdGljIHZvaWQgcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBiYXNlX2dwYSwgdTY0IG9mZnNldCxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuYy05Ni1cXHRcXHRwcmV2ID0gcmFuZ2Uuc2l6ZTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmM6OTc6XFx0XFx0cmV0ID0gX192Y3B1X2lvY3RsKHZjcHUsIEtWTV9QUkVfRkFVTFRfTUVNT1JZLCBcXHUwMDI2cmFuZ2UpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuYy05OC1cXHRcXHRzYXZlX2Vycm5vID0gZXJybm87XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmMtMTU3LVxcdGlmICghZXhwZWN0ZWRfbGVmdClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmM6MTU4OlxcdFxcdFRFU1RfQVNTRVJUX1ZNX1ZDUFVfSU9DVEwoIXJldCwgS1ZNX1BSRV9GQVVMVF9NRU1PUlksIHJldCwgdmNwdS1cXHUwMDNldm0pO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuYy0xNTktXFx0ZWxzZVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9wcmVfZmF1bHRfbWVtb3J5X3Rlc3QuYy0xNjAtXFx0XFx0VEVTVF9BU1NFUlRfVk1fVkNQVV9JT0NUTChyZXQgXFx1MDAyNlxcdTAwMjYgc2F2ZV9lcnJubyA9PSBFTk9FTlQsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3ByZV9mYXVsdF9tZW1vcnlfdGVzdC5jOjE2MTpcXHRcXHRcXHRcXHRcXHQgIEtWTV9QUkVfRkFVTFRfTUVNT1JZLCByZXQsIHZjcHUtXFx1MDAzZXZtKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vcHJlX2ZhdWx0X21lbW9yeV90ZXN0LmMtMTYyLX1cXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9NDQwNj1zdGF0aWMgbG9uZyBrdm1fdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDYzMi0jaWZkZWYgQ09ORklHX0tWTV9HRU5FUklDX1BSRV9GQVVMVF9NRU1PUllcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjQ2MzM6XFx0Y2FzZSBLVk1fUFJFX0ZBVUxUX01FTU9SWToge1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtNDYzNC1cXHRcXHRzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgcmFuZ2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjAzOjAyLjI0MTc3NDU0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMzE2MTM0NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgc25pcHBldCwgZnJhbWVkIGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gS1ZNJ3MgQ29yZSoqXG5cbk9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIEtWTSBpbnRlcmFjdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyB0aGUgdmlydHVhbCBDUFUgaXMgbWFuYWdlZC4gVGhlIGZpcnN0IHBsYWNlIEknbSBnb2luZyB0byBsb29rIGlzIHRoZSBga3ZtX3ZjcHVfaW9jdGxgIGZ1bmN0aW9uLiBJIHJlbWVtYmVyIHRoYXQncyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgY29udHJvbCBvcGVyYXRpb25zIG9uIHRoZSB2aXJ0dWFsIENQVS4gTm93LCB0aGUgaGludCBhbHNvIG1lbnRpb25zIHRoZSBmaWxlIGFuZCBsaW5lLCB3aGljaCBzaG91bGQgZXhwZWRpdGUgdGhpbmdzOyBpdCdzIGdvaW5nIHRvIGJlIGluIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYCBhcm91bmQgbGluZSA0NjMzLiBLbm93aW5nIHRoZSBmaWxlIGxvY2F0aW9uIGlzIGtleSAtIGl0IHBsYWNlcyB0aGlzIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgS1ZNJ3MgY29yZSBhcmNoaXRlY3R1cmUuIFdpdGggdGhlIGxpbmUgbnVtYmVyLCBJIGNhbiBzdGFydCByaWdodCB3aGVyZSBJIG5lZWQgdG8gYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxNjQsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzowMzowNS40NzMzOTA0NzlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ0NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDYyNSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDYyNTpcXHRcXHRcXHRyID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfZnB1KHZjcHUsIGZwdSk7XFxuNDYyNjpcXHRcXHRcXHRicmVhaztcXG40NjI3OlxcdFxcdH1cXG40NjI4OlxcdFxcdGNhc2UgS1ZNX0dFVF9TVEFUU19GRDoge1xcbjQ2Mjk6XFx0XFx0XFx0ciA9IGt2bV92Y3B1X2lvY3RsX2dldF9zdGF0c19mZCh2Y3B1KTtcXG40NjMwOlxcdFxcdFxcdGJyZWFrO1xcbjQ2MzE6XFx0XFx0fVxcbjQ2MzI6XFx0I2lmZGVmIENPTkZJR19LVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXFxuNDYzMzpcXHRcXHRjYXNlIEtWTV9QUkVfRkFVTFRfTUVNT1JZOiB7XFxuNDYzNDpcXHRcXHRcXHRzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgcmFuZ2U7XFxuNDYzNTpcXHRcXG40NjM2OlxcdFxcdFxcdHIgPSAtRUZBVUxUO1xcbjQ2Mzc6XFx0XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZyYW5nZSwgYXJncCwgc2l6ZW9mKHJhbmdlKSkpXFxuNDYzODpcXHRcXHRcXHRcXHRicmVhaztcXG40NjM5OlxcdFxcdFxcdHIgPSBrdm1fdmNwdV9wcmVfZmF1bHRfbWVtb3J5KHZjcHUsIFxcdTAwMjZyYW5nZSk7XFxuNDY0MDpcXHRcXHRcXHQvKiBQYXNzIGJhY2sgbGVmdG92ZXIgcmFuZ2UuICovXFxuNDY0MTpcXHRcXHRcXHRpZiAoY29weV90b191c2VyKGFyZ3AsIFxcdTAwMjZyYW5nZSwgc2l6ZW9mKHJhbmdlKSkpXFxuNDY0MjpcXHRcXHRcXHRcXHRyID0gLUVGQVVMVDtcXG40NjQzOlxcdFxcdFxcdGJyZWFrO1xcbjQ2NDQ6XFx0XFx0fVxcbjQ2NDU6XFx0I2VuZGlmXFxuNDY0NjpcXHRcXHRkZWZhdWx0OlxcbjQ2NDc6XFx0XFx0XFx0ciA9IGt2bV9hcmNoX3ZjcHVfaW9jdGwoZmlscCwgaW9jdGwsIGFyZyk7XFxuNDY0ODpcXHRcXHR9XFxuNDY0OTpcXHRvdXQ6XFxuNDY1MDpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnZjcHUtXFx1MDAzZW11dGV4KTtcXG40NjUxOlxcdFxcdGtmcmVlKGZwdSk7XFxuNDY1MjpcXHRcXHRrZnJlZShrdm1fc3JlZ3MpO1xcbjQ2NTM6XFx0XFx0cmV0dXJuIHI7XFxuNDY1NDpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjAzOjA1LjQ3MzczNjg4OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTIyOTA5MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS1ZNIFByZS1GYXVsdCBNZW1vcnkgUHJvY2VzcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYEtWTV9QUkVfRkFVTFRfTUVNT1JZYCBvcGVyYXRpb24sIGFuZCBpdCBzZWVtcyBsaWtlIHRoZSBzZXF1ZW5jZSBvZiBldmVudHMgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBhdCBmaXJzdCBnbGFuY2UuIEl0IGNvcGllcyBhIG1lbW9yeSBgcmFuZ2VgIGZyb20gdXNlcnNwYWNlLCBjYWxscyBga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgd2l0aCB0aGF0IGByYW5nZWAsIGFuZCB0aGVuIGNvcGllcyB0aGUgcG90ZW50aWFsbHkgbW9kaWZpZWQgYHJhbmdlYCBiYWNrIHRvIHVzZXJzcGFjZS5cblxuQnV0IHdhaXQgYSBtaW51dGUuLi4gZG9lcyBga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAgYWN0dWFsbHkgKm1vZGlmeSogdGhhdCBgcmFuZ2VgPyBUaGF0J3MgdGhlIGNydWNpYWwgZGV0YWlsIEkgbmVlZCB0byBuYWlsIGRvd24uIElmIGl0IGRvZXMsIGFuZCBob3cgaXQgaXMgbW9kaWZpZWQsIHRoYXQgd2lsbCBjaGFuZ2UgZXZlcnl0aGluZyBhYm91dCBob3cgSSBzZWUgdGhpcyBmdW5jdGlvbiFcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIHNvdXJjZSBjb2RlIHRvIGdldCB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGt2bV92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLCBhbmQgZnJvbSBteSBleHBlcmllbmNlLCB0aGF0IGZ1bmN0aW9uIGlzIHByb2JhYmx5IGluIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYC4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBoYXBwZW5pbmcgdG8gdGhpcyBgcmFuZ2VgIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2lkZSBlZmZlY3RzIGlmIEknbSBnb2luZyB0byB1bmRlcnN0YW5kIHRoaXMgZnVuY3Rpb24gY29tcGxldGVseS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg3MiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjAzOjA5LjM5NjY0ODgxOVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzEyMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwidmlydC9rdm0va3ZtX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MzM0LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MzM0OlxcdHN0YXRpYyBpbnQga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuNDMzNTpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSAqcmFuZ2UpXFxuNDMzNjpcXHR7XFxuNDMzNzpcXHRcXHRpbnQgaWR4O1xcbjQzMzg6XFx0XFx0bG9uZyByO1xcbjQzMzk6XFx0XFx0dTY0IGZ1bGxfc2l6ZTtcXG40MzQwOlxcdFxcbjQzNDE6XFx0XFx0aWYgKHJhbmdlLVxcdTAwM2VmbGFncylcXG40MzQyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjQzNDM6XFx0XFxuNDM0NDpcXHRcXHRpZiAoIVBBR0VfQUxJR05FRChyYW5nZS1cXHUwMDNlZ3BhKSB8fFxcbjQzNDU6XFx0XFx0ICAgICFQQUdFX0FMSUdORUQocmFuZ2UtXFx1MDAzZXNpemUpIHx8XFxuNDM0NjpcXHRcXHQgICAgcmFuZ2UtXFx1MDAzZWdwYSArIHJhbmdlLVxcdTAwM2VzaXplIFxcdTAwM2M9IHJhbmdlLVxcdTAwM2VncGEpXFxuNDM0NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40MzQ4OlxcdFxcbjQzNDk6XFx0XFx0dmNwdV9sb2FkKHZjcHUpO1xcbjQzNTA6XFx0XFx0aWR4ID0gc3JjdV9yZWFkX2xvY2soXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlc3JjdSk7XFxuNDM1MTpcXHRcXG40MzUyOlxcdFxcdGZ1bGxfc2l6ZSA9IHJhbmdlLVxcdTAwM2VzaXplO1xcbjQzNTM6XFx0XFx0ZG8ge1xcbjQzNTQ6XFx0XFx0XFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XFxuNDM1NTpcXHRcXHRcXHRcXHRyID0gLUVJTlRSO1xcbjQzNTY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNDM1NzpcXHRcXHRcXHR9XFxuNDM1ODpcXHRcXG40MzU5OlxcdFxcdFxcdHIgPSBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkodmNwdSwgcmFuZ2UpO1xcbjQzNjA6XFx0XFx0XFx0aWYgKFdBUk5fT05fT05DRShyID09IDAgfHwgciA9PSAtRUlPKSlcXG40MzYxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjQzNjI6XFx0XFxuNDM2MzpcXHRcXHRcXHRpZiAociBcXHUwMDNjIDApXFxuNDM2NDpcXHRcXHRcXHRcXHRicmVhaztcXG40MzY1OlxcdFxcbjQzNjY6XFx0XFx0XFx0cmFuZ2UtXFx1MDAzZXNpemUgLT0gcjtcXG40MzY3OlxcdFxcdFxcdHJhbmdlLVxcdTAwM2VncGEgKz0gcjtcXG40MzY4OlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjQzNjk6XFx0XFx0fSB3aGlsZSAocmFuZ2UtXFx1MDAzZXNpemUpO1xcbjQzNzA6XFx0XFxuNDM3MTpcXHRcXHRzcmN1X3JlYWRfdW5sb2NrKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZXNyY3UsIGlkeCk7XFxuNDM3MjpcXHRcXHR2Y3B1X3B1dCh2Y3B1KTtcXG40MzczOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzowMzowOS4zOTcxOTIxN1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDI2NDUwODczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgTWVtb3J5IExlYWtzIGFuZCBQYWRkaW5nIGluIGBrdm1fcHJlX2ZhdWx0X21lbW9yeWAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgd2hlcmUgYHJhbmdlYCBpcyBiZWluZyBtYW5pcHVsYXRlZC4gVGhlIHNpemUgYW5kIEdQQSBhcmUgYWRqdXN0ZWQgKGByYW5nZS1cdTAwM2VzaXplIC09IHI7IHJhbmdlLVx1MDAzZWdwYSArPSByO2ApIGFuZCB0aGVuIGNvcGllZCBiYWNrIHRvIHRoZSB1c2VyIHNwYWNlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBzY2FuIGZvciBhIHBvc3NpYmxlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWsuXG5cbkhvd2V2ZXIsIEkgcmVtZW1iZXIgdGhhdCB0aGUgYHJhbmdlYCB2YXJpYWJsZSBpcyAqZnVsbHkqIGluaXRpYWxpemVkIHJpZ2h0IGF0IHRoZSBiZWdpbm5pbmcgYnkgdGhlIGBjb3B5X2Zyb21fdXNlcmAgY2FsbC4gU28sIHRoYXQncyBnb29kLiBCdXQsIGFuZCB0aGlzIGlzIHdoZXJlIEkgbmVlZCB0byBiZSBjYXJlZnVsLCB3aGF0IGFib3V0IHBhZGRpbmc/IEkgbmVlZCB0byBjb25zaWRlciBpZiB0aGVyZSBtaWdodCBiZSBhbnkgcGFkZGluZyB3aXRoaW4gdGhlIGBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnlgIHN0cnVjdHVyZS4gVGhpcyBjb3VsZCBsZWFkIHRvIGlzc3VlcyBpZiBub3QgaGFuZGxlZCBwcm9wZXJseSBkdXJpbmcgdGhlIGNvcHkgb3BlcmF0aW9ucy5cblxuVG8gZW5zdXJlIHRoaXMgaXMgaGFuZGxlZCBzYWZlbHksIEkgc2hvdWxkIGltbWVkaWF0ZWx5IHJlZmVyZW5jZSB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5YCBpbiBgaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oYC4gVGhhdCdzIHdoZXJlIHRoZSBkZWZpbml0aXZlIGFuc3dlciB3aWxsIGJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDgyMSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjAzOjEzLjgyMzY0Nzg4M1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ5MjQzMjE1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkgXFxcXHtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTY0ODI9RXJyb3JzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY0OTctXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY0OTg6ICBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkge1xcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NDk5LVxcdC8qIGluL291dCAqL1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oPTE2NTg9c3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2NjUtXFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oOjE2NjY6c3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5IHtcXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY2Ny1cXHRfX3U2NCBncGE7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg9MTY1OD1zdHJ1Y3Qga3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCB7XFxuLS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY2NS1cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6MTY2NjpzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkge1xcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNjY3LVxcdF9fdTY0IGdwYTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MDM6MTYuMzE2MDg1NjQyWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MDA0NTQ5OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gS1ZNJ3MgTWVtb3J5IFJlZ2lvbiBEZWZpbml0aW9ucyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZiBLVk0ncyBtZW1vcnkgcmVnaW9uIG1hbmFnZW1lbnQuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBzdHJ1Y3R1cmVzIHRoYXQgZGVmaW5lIGhvdyBndWVzdCBwaHlzaWNhbCBtZW1vcnkgaXMgbWFwcGVkIHRvIGhvc3QgdmlydHVhbCBtZW1vcnksIHNvIEknbGwgYmUgaGVhZGluZyB0byBgaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oYC4gSSdtIGd1ZXNzaW5nIGFyb3VuZCBsaW5lIDE2NjYgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBmaW5kIHRoZSByZWxldmFudCBzdHJ1Y3RzLiBUaGlzIGlzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIG1lYXQgb2YgdGhlIG1lbW9yeSBtYXAgY29uZmlndXJhdGlvbi4gSSdtIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHRoZSBga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uYCBzdHJ1Y3R1cmUgYW5kIGl0cyByZWxhdGVkIGZpZWxkcy4gSSB3YW50IHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdXNlci1zcGFjZSBpbnRlcmFjdHMgd2l0aCB0aGUgS1ZNIGNvcmUgdG8gc2V0IHVwIG1lbW9yeSByZWdpb25zLCB0aGUgaW1wbGljYXRpb25zIG9mIGRpZmZlcmVudCBmbGFncyBhbmQgYXR0cmlidXRlcywgYW5kIGFueSBhbGlnbm1lbnQgY29uc3RyYWludHMuIEhvcGVmdWxseSwgdGhpcyB3aWxsIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1MDUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzowMzoxOS45MTY1NDMyNzZaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5ODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvdWFwaS9saW51eC9rdm0uaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxNjYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjYwOlxcdFxcdF9fdTY0IGZsYWdzO1xcbjE2NjE6XFx0XFx0X191NjQgcmVzZXJ2ZWRbNl07XFxuMTY2MjpcXHR9O1xcbjE2NjM6XFx0XFxuMTY2NDpcXHQjZGVmaW5lIEtWTV9QUkVfRkFVTFRfTUVNT1JZXFx0X0lPV1IoS1ZNSU8sIDB4ZDUsIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSlcXG4xNjY1OlxcdFxcbjE2NjY6XFx0c3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5IHtcXG4xNjY3OlxcdFxcdF9fdTY0IGdwYTtcXG4xNjY4OlxcdFxcdF9fdTY0IHNpemU7XFxuMTY2OTpcXHRcXHRfX3U2NCBmbGFncztcXG4xNjcwOlxcdFxcdF9fdTY0IHBhZGRpbmdbNV07XFxuMTY3MTpcXHR9O1xcbjE2NzI6XFx0XFxuMTY3MzpcXHQjZW5kaWYgLyogX19MSU5VWF9LVk1fSCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzowMzoxOS45MTY2ODU3NDZaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTYwODc2NjMzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYGt2bV9wcmVfZmF1bHRfbWVtb3J5YCBhbmQgUG90ZW50aWFsIEluZm9ybWF0aW9uIExlYWtzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5YCBhbmQgbm90aWNpbmcgdGhhdCBpdCBoYXMgc29tZSBwYWRkaW5nLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzLCBpZiB3ZSBjb3B5IHRoaXMgc3RydWN0IGZyb20gdXNlciBzcGFjZSB1c2luZyBgY29weV9mcm9tX3VzZXJgIGludG8gYSBgcmFuZ2VgIHZhcmlhYmxlLCB0aGVuIG1vZGlmeSBjZXJ0YWluIGZpZWxkcyBsaWtlIGByYW5nZS1cdTAwM2VzaXplYCBhbmQgYHJhbmdlLVx1MDAzZWdwYWAsIGFuZCB0aGVuIGBjb3B5X3RvX3VzZXJgIGl0IGJhY2ssIHRoZXJlIHNob3VsZG4ndCBiZSBhIHZ1bG5lcmFiaWxpdHkuIFRoZSBwYWRkaW5nIGZpZWxkcyBqdXN0IGVjaG8gYmFjayB3aGF0ZXZlciB0aGUgdXNlciBzZW50LiBUaGVyZSdzIG5vIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBiZWluZyBsZWFrZWQgaGVyZSwgYmVjYXVzZSB0aGUga2VybmVsIGlzIG1lcmVseSByZWZsZWN0aW5nIHRoZSB1c2VyJ3MgaW5wdXQuXG5cbkJ1dCwgaG9sZCBvbi4gV2hhdCBpZiBgY29weV9mcm9tX3VzZXJgIGZhaWxzPyBUaGVuIHRoZSBjb3B5LWJhY2sgZG9lc24ndCBoYXBwZW4uIFdoYXQgaWYgYGNvcHlfZnJvbV91c2VyYCAqc3VjY2VlZHMqIGJ1dCB0aGUga2VybmVsIHNvbWVob3cgZGlkbid0IGluaXRpYWxpemUgYHJhbmdlYCBmaXJzdD8gQWgsIGJ1dCB3YWl0LCB0aGUgZW50aXJlIGByYW5nZWAgc3RydWN0IGlzIGluaXRpYWxpemVkIGJ5IGBjb3B5X2Zyb21fdXNlcmAsIHNvIHRoYXQncyBhIG1vb3QgcG9pbnQuXG5cbkxldCBtZSByZXZpc2l0IHRoZSBjb3JlIGxvZ2ljIHdpdGhpbiBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YC4gSXQgbG9va3MgbGlrZSBpdCBpbml0aWFsaXplcyBhIGBrdm1fZ3N0YWdlX21hcHBpbmdgIHN0cnVjdCBjYWxsZWQgYG91dF9tYXBgIHRvIGFsbCB6ZXJvcy4gSXQgdGhlbiBjYWxscyBga3ZtX3Jpc2N2X21tdV9tYXBgIHRvIHBvcHVsYXRlIGl0LiBJIHNlZSB0aGF0IGBrdm1fcmlzY3ZfbW11X21hcGAgaXMgdGhlIGNydWNpYWwgcGFydCB0aGF0IGxpa2VseSBwb3B1bGF0ZXMgYG91dF9tYXBgLiBUaGF0J3MgdGhlIGZ1bmN0aW9uIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBpbiBgYXJjaC9yaXNjdi9rdm0vbW11LmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTk5NiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjAzOjI5LjUyNTQ1NDcwNFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzMwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9yaXNjdi9rdm0vbW11LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzMwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzMwOlxcdFxcdGlmICghbG9nZ2luZyBcXHUwMDI2XFx1MDAyNiAhaXNfaHVnZXRsYiBcXHUwMDI2XFx1MDAyNiB2bWFfcGFnZXNpemUgPT0gUEFHRV9TSVpFKVxcbiA3MzE6XFx0XFx0XFx0dm1hX3BhZ2VzaXplID0gdHJhbnNwYXJlbnRfaHVnZXBhZ2VfYWRqdXN0KGt2bSwgbWVtc2xvdCwgaHZhLCBcXHUwMDI2aGZuLCBcXHUwMDI2Z3BhKTtcXG4gNzMyOlxcdFxcbiA3MzM6XFx0XFx0aWYgKHdyaXRhYmxlKSB7XFxuIDczNDpcXHRcXHRcXHRtYXJrX3BhZ2VfZGlydHlfaW5fc2xvdChrdm0sIG1lbXNsb3QsIGdmbik7XFxuIDczNTpcXHRcXHRcXHRyZXQgPSBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKFxcdTAwMjZnc3RhZ2UsIHBjYWNoZSwgZ3BhLCBoZm4gXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCxcXG4gNzM2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHZtYV9wYWdlc2l6ZSwgZmFsc2UsIHRydWUsIG91dF9tYXApO1xcbiA3Mzc6XFx0XFx0fSBlbHNlIHtcXG4gNzM4OlxcdFxcdFxcdHJldCA9IGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2UoXFx1MDAyNmdzdGFnZSwgcGNhY2hlLCBncGEsIGhmbiBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZULFxcbiA3Mzk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0dm1hX3BhZ2VzaXplLCB0cnVlLCB0cnVlLCBvdXRfbWFwKTtcXG4gNzQwOlxcdFxcdH1cXG4gNzQxOlxcdFxcbiA3NDI6XFx0XFx0aWYgKHJldClcXG4gNzQzOlxcdFxcdFxcdGt2bV9lcnIoXFxcIkZhaWxlZCB0byBtYXAgaW4gRy1zdGFnZVxcXFxuXFxcIik7XFxuIDc0NDpcXHRcXG4gNzQ1OlxcdG91dF91bmxvY2s6XFxuIDc0NjpcXHRcXHRrdm1fcmVsZWFzZV9mYXVsdGluX3BhZ2Uoa3ZtLCBwYWdlLCByZXQgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FRVhJU1QsIHdyaXRhYmxlKTtcXG4gNzQ3OlxcdFxcdHdyaXRlX3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuIDc0ODpcXHRcXHRyZXR1cm4gcmV0O1xcbiA3NDk6XFx0fVxcbiA3NTA6XFx0XFxuIDc1MTpcXHRsb25nIGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIDc1MjpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5ICpyYW5nZSlcXG4gNzUzOlxcdHtcXG4gNzU0OlxcdFxcdHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgb3V0X21hcCA9IHsgMCB9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzowMzoyOS41MjU1OTA4ODRaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE0NjIyNDk1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gS1ZNIGZvciBSSVNDLVY6IGdzdGFnZSBhbmQgUGFnZSBNYXBwaW5nKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBLVk0gaW50ZXJhY3RzIHdpdGggdGhlIFJJU0MtViBhcmNoaXRlY3R1cmUgYXQgYSBmdW5kYW1lbnRhbCBsZXZlbCwgcGFydGljdWxhcmx5IHJlZ2FyZGluZyBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gdGhlIGd1ZXN0IGVudmlyb25tZW50LiBUaGUgZnVuY3Rpb24gYGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2VgIGluIGBhcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuY2Agc2VlbXMgbGlrZSBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoYXQgcHV6emxlLiBJdCdzIHRpbWUgdG8gZGlzc2VjdCBpdHMgaW5uZXIgd29ya2luZ3MuIEkgc3VzcGVjdCB0aGlzIGZ1bmN0aW9uIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCB3aGVyZSB0aGUgZ3Vlc3QncyB2aXJ0dWFsIGFkZHJlc3NlcyBhcmUgdHJhbnNsYXRlZCBhbmQgbWFwcGVkIHRvIHRoZSBob3N0J3MgcGh5c2ljYWwgbWVtb3J5LCBwb3RlbnRpYWxseSB1c2luZyB0aGUgZ3N0YWdlIG1lY2hhbmlzbXMuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGhhbmRsZXMgcGFnZSB0YWJsZSB3YWxrcywgdGhlIGludGVyYWN0aW9uIHdpdGggUklTQy1WJ3MgcGFnZSB0YWJsZSBzdHJ1Y3R1cmVzLCBhbmQgYW55IHNwZWNpZmljIG9wdGltaXphdGlvbnMgZm9yIHRoZSBhcmNoaXRlY3R1cmUuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaG93IHRoZSBLVk0gbWFjaGluZXJ5IHRyYW5zbGF0ZXMgYSBndWVzdCB2aXJ0dWFsIGFkZHJlc3MgaW50byBhIHBoeXNpY2FsIGFkZHJlc3Mgb24gdGhlIGhvc3QuIFRoaXMgbGlrZWx5IGludm9sdmVzIHNvbWUgY2xldmVyIG1hbmlwdWxhdGlvbnMgYW5kIGNvbnNpZGVyYXRpb25zIGZvciBwZXJmb3JtYW5jZSwgdmlydHVhbCBtZW1vcnkgcHJvdGVjdGlvbiwgYW5kIGhvdyBpdCBhbGwgd29ya3MgdW5kZXIgdGhlIGhvb2QuIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTI4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzowMzozNS42NzE4MTc1NTZaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjcwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjcwOlxcdFxcdFxcdCAqXFxuIDI3MTpcXHRcXHRcXHQgKiBJdCBpcyBiZXR0ZXIgdG8gcmVjb3ZlciB0aGUgaHVnZSBwYWdlIG1hcHBpbmcgaW4gdGhlIGlvY3RsIGNvbnRleHQgd2hlblxcbiAyNzI6XFx0XFx0XFx0ICogZGlzYWJsaW5nIGRpcnR5IGxvZ2dpbmcuXFxuIDI3MzpcXHRcXHRcXHQgKlxcbiAyNzQ6XFx0XFx0XFx0ICogMykgcHRlcF9sZXZlbCA9PSBvdXRfbWFwLVxcdTAwM2VsZXZlbFxcbiAyNzU6XFx0XFx0XFx0ICogV2UgYWxyZWFkeSBoYXZlIHRoZSBwdGVwLCBqdXN0IHVwZGF0ZSB0aGUgcHRlIHByb3QgaWYgdGhlIHBmbiBub3QgY2hhbmdlLlxcbiAyNzY6XFx0XFx0XFx0ICogVGhlcmUgaXMgbm8gbmVlZCB0byBpbnZva2UgYGt2bV9yaXNjdl9nc3RhZ2Vfc2V0X3B0ZWAgYWdhaW4uXFxuIDI3NzpcXHRcXHRcXHQgKi9cXG4gMjc4OlxcdFxcdFxcdGlmIChwdGVwX2xldmVsIFxcdTAwM2Ugb3V0X21hcC1cXHUwMDNlbGV2ZWwpIHtcXG4gMjc5OlxcdFxcdFxcdFxcdGt2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZShnc3RhZ2UsIHBjYWNoZSwgZ3BhLFxcbiAyODA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIG91dF9tYXAtXFx1MDAzZWxldmVsLCB0cnVlKTtcXG4gMjgxOlxcdFxcdFxcdH0gZWxzZSBpZiAoQUxJR05fRE9XTihQRk5fUEhZUyhwdGVfcGZuKHB0ZXBfZ2V0KHB0ZXApKSksIHBhZ2Vfc2l6ZSkgPT0gaHBhKSB7XFxuIDI4MjpcXHRcXHRcXHRcXHRrdm1fcmlzY3ZfZ3N0YWdlX3VwZGF0ZV9wdGVfcHJvdChnc3RhZ2UsIHB0ZXBfbGV2ZWwsIGdwYSwgcHRlcCwgcHJvdCk7XFxuIDI4MzpcXHRcXHRcXHRcXHRvdXRfbWFwLVxcdTAwM2VhZGRyID0gQUxJR05fRE9XTihncGEsIHBhZ2Vfc2l6ZSk7XFxuIDI4NDpcXHRcXHRcXHRcXHRvdXRfbWFwLVxcdTAwM2VsZXZlbCA9IHB0ZXBfbGV2ZWw7XFxuIDI4NTpcXHRcXHRcXHRcXHRvdXRfbWFwLVxcdTAwM2VwdGUgPSBwdGVwX2dldChwdGVwKTtcXG4gMjg2OlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbiAyODc6XFx0XFx0XFx0fVxcbiAyODg6XFx0XFx0fVxcbiAyODk6XFx0XFxuIDI5MDpcXHRcXHRvdXRfbWFwLVxcdTAwM2VwdGUgPSBwZm5fcHRlKFBGTl9ET1dOKGhwYSksIHByb3QpO1xcbiAyOTE6XFx0XFx0b3V0X21hcC1cXHUwMDNlcHRlID0gcHRlX21rZGlydHkob3V0X21hcC1cXHUwMDNlcHRlKTtcXG4gMjkyOlxcdFxcbiAyOTM6XFx0XFx0cmV0dXJuIGt2bV9yaXNjdl9nc3RhZ2Vfc2V0X3B0ZShnc3RhZ2UsIHBjYWNoZSwgb3V0X21hcCk7XFxuIDI5NDpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjAzOjM1LjY3MTkxNTk1NloiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjcxNzQxMTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgb3V0X21hcGAgUGFyYW1ldGVyIGluIEtWTS1SSVNDViBHLVN0YWdlIE1hcHBpbmcqKlxuXG5Pa2F5LCBzbyBJIHNlZSBgb3V0X21hcGAgaXMgYmVpbmcgZmVkIGludG8gYGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2VgLiBUaGF0J3MgaW50ZXJlc3RpbmcuIFRoZSB3YXkgdGhlIGNvZGUncyBzdHJ1Y3R1cmVkLCBpdCBsb29rcyBsaWtlIGBvdXRfbWFwYCBpcyBhY3RpbmcgYXMgYm90aCBhbiBpbnB1dCAqYW5kKiBhbiBvdXRwdXQgcGFyYW1ldGVyIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBJIG5lZWQgdG8gY2xhcmlmeSB3aGF0J3MgYWN0dWFsbHkgaGFwcGVuaW5nIGhlcmUuIEdpdmVuIG15IGV4cGVyaWVuY2UsIHRoYXQncyBub3QgbmVjZXNzYXJpbHkgYSBiYWQgdGhpbmcsIGJ1dCBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgZ3Jhc3AgdGhlIGludGVudCBmdWxseS4gTGV0IG1lIHF1aWNrbHkgZXhhbWluZSB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIG9mIGBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlYCB0byB2ZXJpZnkgaG93IGl0IGhhbmRsZXMgYG91dF9tYXBgLiBUaGF0J2xsIGJlIGtleSB0byBmaWd1cmluZyBvdXQgaG93IHRoaXMgbWVtb3J5IG1hcHBpbmcgaXMgZnVuY3Rpb25pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzUyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzowMzozOS4zNDM2NjA2OTlaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMDIyODI3MDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaD01Nz1ib29sIGt2bV9yaXNjdl9nc3RhZ2VfdHJ5X3VwZGF0ZV9wdGUoc3RydWN0IGt2bV9nc3RhZ2UgKmdzdGFnZSwgdTMyIGxldmVsLFxcbi0tXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmgtNjAtXFxuYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmg6NjE6aW50IGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2Uoc3RydWN0IGt2bV9nc3RhZ2UgKmdzdGFnZSxcXG5hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaC02Mi1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgKnBjYWNoZSxcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jPTE4Nj1zdGF0aWMgdm9pZCBrdm1fcmlzY3ZfZ3N0YWdlX3VwZGF0ZV9wdGVfcHJvdChzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLCB1MzIgbGV2ZWwsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYy0yMDYtXFxuYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmM6MjA3OmludCBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsXFxuYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmMtMjA4LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSAqcGNhY2hlLFxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vbW11LmM9NjIzPWludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03MzQtXFx0XFx0bWFya19wYWdlX2RpcnR5X2luX3Nsb3Qoa3ZtLCBtZW1zbG90LCBnZm4pO1xcbmFyY2gvcmlzY3Yva3ZtL21tdS5jOjczNTpcXHRcXHRyZXQgPSBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKFxcdTAwMjZnc3RhZ2UsIHBjYWNoZSwgZ3BhLCBoZm4gXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCxcXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy03MzYtXFx0XFx0XFx0XFx0XFx0XFx0dm1hX3BhZ2VzaXplLCBmYWxzZSwgdHJ1ZSwgb3V0X21hcCk7XFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNzM3LVxcdH0gZWxzZSB7XFxuYXJjaC9yaXNjdi9rdm0vbW11LmM6NzM4OlxcdFxcdHJldCA9IGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2UoXFx1MDAyNmdzdGFnZSwgcGNhY2hlLCBncGEsIGhmbiBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZULFxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTczOS1cXHRcXHRcXHRcXHRcXHRcXHR2bWFfcGFnZXNpemUsIHRydWUsIHRydWUsIG91dF9tYXApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwNzowMzo0MS41NDU5NDgzNDFaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYyNzA1OTkyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSBnb2luZyB0byBwdWxsIHVwIGBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlYCBpbiBgYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNgLCBzcGVjaWZpY2FsbHkgc3RhcnRpbmcgYXQgbGluZSAyMDcuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGdzdGFnZSBtYXBwaW5nIHByb2Nlc3Mgd2l0aGluIHRoZSBLVk0vUklTQy1WIGFyY2hpdGVjdHVyZS4gSSdtIGludGVyZXN0ZWQgaW4gaG93IHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiBpcyBoYW5kbGluZyB0aGUgbWFwcGluZyBvZiBhIHBhZ2Ugd2l0aGluIHRoZSBndWVzdCBzdGFnZS4gTGV0J3Mgc2VlIHdoYXQncyBoYXBwZW5pbmcgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGxhcmdlciBjb250ZXh0IG9mIHZpcnR1YWwgbWVtb3J5IHRyYW5zbGF0aW9uIGFuZCB0aGUgZ3Vlc3QncyB2aWV3IG9mIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgZGV0YWlscyBhYm91dCBwYWdlIHRhYmxlIHdhbGtzLCBwZXJtaXNzaW9uIGNoZWNrcywgYW5kIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBob3N0J3MgcGh5c2ljYWwgbWVtb3J5LiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBSSVNDLVYgc3BlY2lmaWMgaW50cmljYWNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjM0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MDM6NDUuMTczMDEwODc1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwNyxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIwNzpcXHRpbnQga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLFxcbiAyMDg6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpwY2FjaGUsXFxuIDIwOTpcXHRcXHRcXHRcXHQgICAgICBncGFfdCBncGEsIHBoeXNfYWRkcl90IGhwYSwgdW5zaWduZWQgbG9uZyBwYWdlX3NpemUsXFxuIDIxMDpcXHRcXHRcXHRcXHQgICAgICBib29sIHBhZ2VfcmRvbmx5LCBib29sIHBhZ2VfZXhlYyxcXG4gMjExOlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgKm91dF9tYXApXFxuIDIxMjpcXHR7XFxuIDIxMzpcXHRcXHRib29sIGZvdW5kX2xlYWY7XFxuIDIxNDpcXHRcXHR1MzIgcHRlcF9sZXZlbDtcXG4gMjE1OlxcdFxcdHBncHJvdF90IHByb3Q7XFxuIDIxNjpcXHRcXHRwdGVfdCAqcHRlcDtcXG4gMjE3OlxcdFxcdGludCByZXQ7XFxuIDIxODpcXHRcXG4gMjE5OlxcdFxcdG91dF9tYXAtXFx1MDAzZWFkZHIgPSBncGE7XFxuIDIyMDpcXHRcXHRvdXRfbWFwLVxcdTAwM2VsZXZlbCA9IDA7XFxuIDIyMTpcXHRcXG4gMjIyOlxcdFxcdHJldCA9IGdzdGFnZV9wYWdlX3NpemVfdG9fbGV2ZWwoZ3N0YWdlLCBwYWdlX3NpemUsIFxcdTAwMjZvdXRfbWFwLVxcdTAwM2VsZXZlbCk7XFxuIDIyMzpcXHRcXHRpZiAocmV0KVxcbiAyMjQ6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMjI1OlxcdFxcbiAyMjY6XFx0XFx0LypcXG4gMjI3OlxcdFxcdCAqIEEgUklTQy1WIGltcGxlbWVudGF0aW9uIGNhbiBjaG9vc2UgdG8gZWl0aGVyOlxcbiAyMjg6XFx0XFx0ICogMSkgVXBkYXRlICdBJyBhbmQgJ0QnIFBURSBiaXRzIGluIGhhcmR3YXJlXFxuIDIyOTpcXHRcXHQgKiAyKSBHZW5lcmF0ZSBwYWdlIGZhdWx0IHdoZW4gJ0EnIGFuZC9vciAnRCcgYml0cyBhcmUgbm90IHNldFxcbiAyMzA6XFx0XFx0ICogICAgUFRFIHNvIHRoYXQgc29mdHdhcmUgY2FuIHVwZGF0ZSB0aGVzZSBiaXRzLlxcbiAyMzE6XFx0XFx0ICpcXG4gMjMyOlxcdFxcdCAqIFdlIHN1cHBvcnQgYm90aCBvcHRpb25zIG1lbnRpb25lZCBhYm92ZS4gVG8gYWNoaWV2ZSB0aGlzLCB3ZVxcbiAyMzM6XFx0XFx0ICogYWx3YXlzIHNldCAnQScgYW5kICdEJyBQVEUgYml0cyBhdCB0aW1lIG9mIGNyZWF0aW5nIEctc3RhZ2VcXG4gMjM0OlxcdFxcdCAqIG1hcHBpbmcuIFRvIHN1cHBvcnQgS1ZNIGRpcnR5IHBhZ2UgbG9nZ2luZyB3aXRoIGJvdGggb3B0aW9uc1xcbiAyMzU6XFx0XFx0ICogbWVudGlvbmVkIGFib3ZlLCB3ZSB3aWxsIHdyaXRlLXByb3RlY3QgRy1zdGFnZSBQVEVzIHRvIHRyYWNrXFxuIDIzNjpcXHRcXHQgKiBkaXJ0eSBwYWdlcy5cXG4gMjM3OlxcdFxcdCAqL1xcbiAyMzg6XFx0XFxuIDIzOTpcXHRcXHRpZiAocGFnZV9leGVjKSB7XFxuIDI0MDpcXHRcXHRcXHRpZiAocGFnZV9yZG9ubHkpXFxuIDI0MTpcXHRcXHRcXHRcXHRwcm90ID0gUEFHRV9SRUFEX0VYRUM7XFxuIDI0MjpcXHRcXHRcXHRlbHNlXFxuIDI0MzpcXHRcXHRcXHRcXHRwcm90ID0gUEFHRV9XUklURV9FWEVDO1xcbiAyNDQ6XFx0XFx0fSBlbHNlIHtcXG4gMjQ1OlxcdFxcdFxcdGlmIChwYWdlX3Jkb25seSlcXG4gMjQ2OlxcdFxcdFxcdFxcdHByb3QgPSBQQUdFX1JFQUQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjAzOjQ1LjE3MzA4ODM5NVoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTY1NDY5NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgYGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2VgIGZ1bmN0aW9uLCBmb2N1c2luZyBvbiB0aGUgbWFwcGluZyBzZXR1cDpcblxuKipNeSBQZXJzcGVjdGl2ZSBvbiB0aGUgTWFwcGluZyBQcm9jZXNzKipcblxuT2theSwgc28gSSBzZWUgdGhhdCB3ZSdyZSBpbml0aWFsbHkgc2V0dGluZyB1cCB0aGUgYWRkcmVzcyBtYXBwaW5nIHdpdGggYG91dF9tYXAtXHUwMDNlYWRkciA9IGdwYTtgIGFuZCBgb3V0X21hcC1cdTAwM2VsZXZlbCA9IDA7YC4gVGhpcyBzdWdnZXN0cyB3ZSdyZSBnZXR0aW5nIHRoZSBncm91bmQgcGh5c2ljYWwgYWRkcmVzcyAoR1BBKSBkaXJlY3RseSBhc3NvY2lhdGVkIHdpdGggYSBtYXAgZW50cnksIGFuZCBzdGFydGluZyBhdCB0aGUgdmVyeSBiYXNlIGxldmVsIG9mIHRoZSBwYWdlIHRhYmxlIGhpZXJhcmNoeS4gSSdkIGV4cGVjdCB0aGlzIGxldmVsIHRvIGJlIGEgYml0IGNvYXJzZSBhdCB0aGlzIHBvaW50LCBiZWZvcmUgYW55IG1vcmUgc3BlY2lmaWMgY29uZmlndXJhdGlvbi5cblxuVGhlbiwgdGhlIGNvZGUgY2FsbHMgYGdzdGFnZV9wYWdlX3NpemVfdG9fbGV2ZWxgLCBhbmQgKnRoYXQncyogd2hlcmUgdGhlIGNydWNpYWwgcGFydCBoYXBwZW5zLiBUaGlzIGltcGxpZXMgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGNvcnJlY3QgcGFnZSB0YWJsZSBsZXZlbCB0byB1c2UgYmFzZWQgb24gdGhlIHBhZ2Ugc2l6ZS4gSSdkIGJldCB0aGlzIGZ1bmN0aW9uIHRha2VzIGludG8gY29uc2lkZXJhdGlvbiBoYXJkd2FyZSBwYWdlIHRhYmxlIHN1cHBvcnQgKGUuZy4sIHNwZWNpZmljIHBhZ2Ugc2l6ZSBjYXBhYmlsaXRpZXMgb2YgdGhlIFJJU0MtViBhcmNoaXRlY3R1cmUpLCBhbmQgcG90ZW50aWFsbHkgYWxzbyBhbnkgZ3Vlc3QtY29uZmlndXJlZCBwYWdlIHNpemUgb3ZlcnJpZGVzIG9yIGNvbnN0cmFpbnRzLiBJbiBvdGhlciB3b3JkcywgaXQncyBtYWtpbmcgdGhlIGRlY2lzaW9uIG9uICpob3cqIGdyYW51bGFyIHRoZSBtYXBwaW5nIHNob3VsZCBiZSwgYW5kIHNldHMgdGhlIGFwcHJvcHJpYXRlIGBvdXRfbWFwLVx1MDAzZWxldmVsYC5cblxuRmluYWxseSwgYWZ0ZXIgYWxsIG9mIHRoYXQgbWFwcGluZyBzZXR1cCwgdGhlIGZ1bmN0aW9uIGNvbmNsdWRlcyB3aXRoIGFsbCB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHJlYWR5IHRvIGdvLiBJIHNlZSB0aGUgZmluYWwgY29uZmlndXJhdGlvbiBpcyBjb21wbGV0ZSBhdCB0aGlzIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjEyNCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MDM6NDkuMTM4NTYxOTU1WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMzMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDcsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNDc6XFx0XFx0XFx0ZWxzZVxcbiAyNDg6XFx0XFx0XFx0XFx0cHJvdCA9IFBBR0VfV1JJVEU7XFxuIDI0OTpcXHRcXHR9XFxuIDI1MDpcXHRcXG4gMjUxOlxcdFxcdGZvdW5kX2xlYWYgPSBrdm1fcmlzY3ZfZ3N0YWdlX2dldF9sZWFmKGdzdGFnZSwgZ3BhLCBcXHUwMDI2cHRlcCwgXFx1MDAyNnB0ZXBfbGV2ZWwpO1xcbiAyNTI6XFx0XFx0aWYgKGZvdW5kX2xlYWYpIHtcXG4gMjUzOlxcdFxcdFxcdC8qXFxuIDI1NDpcXHRcXHRcXHQgKiBwdGVwX2xldmVsIGlzIHRoZSBjdXJyZW50IGdzdGFnZSBtYXBwaW5nIGxldmVsIG9mIGFkZHIsIG91dF9tYXAtXFx1MDAzZWxldmVsXFxuIDI1NTpcXHRcXHRcXHQgKiBpcyB0aGUgcmVxdWlyZWQgbWFwcGluZyBsZXZlbCBkdXJpbmcgZmF1bHQgaGFuZGxpbmcuXFxuIDI1NjpcXHRcXHRcXHQgKlxcbiAyNTc6XFx0XFx0XFx0ICogMSkgcHRlcF9sZXZlbCBcXHUwMDNlIG91dF9tYXAtXFx1MDAzZWxldmVsXFxuIDI1ODpcXHRcXHRcXHQgKiBUaGlzIGhhcHBlbnMgd2hlbiBkaXJ0eSBsb2dnaW5nIGlzIGVuYWJsZWQgYW5kIGh1Z2UgcGFnZXMgYXJlIHVzZWQuXFxuIDI1OTpcXHRcXHRcXHQgKiBLVk0gbXVzdCB0cmFjayB0aGUgcGFnZXMgYXQgNEsgbGV2ZWwsIGFuZCBzcGxpdCB0aGUgaHVnZSBtYXBwaW5nXFxuIDI2MDpcXHRcXHRcXHQgKiBpbnRvIDRLIG1hcHBpbmdzLlxcbiAyNjE6XFx0XFx0XFx0ICpcXG4gMjYyOlxcdFxcdFxcdCAqIDIpIHB0ZXBfbGV2ZWwgXFx1MDAzYyBvdXRfbWFwLVxcdTAwM2VsZXZlbFxcbiAyNjM6XFx0XFx0XFx0ICogVGhpcyBoYXBwZW5zIHdoZW4gZGlydHkgbG9nZ2luZyBpcyBkaXNhYmxlZCBhbmQgaHVnZSBwYWdlcyBhcmUgdXNlZC5cXG4gMjY0OlxcdFxcdFxcdCAqIFRoZSBnc3RhZ2UgaXMgc3BsaXQgaW50byA0SyBtYXBwaW5ncywgYnV0IHRoZSBvdXRfbWFwIGxldmVsIGlzIG5vd1xcbiAyNjU6XFx0XFx0XFx0ICogYmFjayB0byB0aGUgaHVnZSBwYWdlIGxldmVsLiBJZ25vcmUgdGhlIG91dF9tYXAgbGV2ZWwgdGhpcyB0aW1lLCBhbmRcXG4gMjY2OlxcdFxcdFxcdCAqIGp1c3QgdXBkYXRlIHRoZSBwdGUgcHJvdCBoZXJlLiBPdGhlcndpc2UsIHdlIHdvdWxkIGZhbGwgYmFjayB0byBtYXBwaW5nXFxuIDI2NzpcXHRcXHRcXHQgKiB0aGUgZ3N0YWdlIGF0IGh1Z2UgcGFnZSBsZXZlbCBpbiBga3ZtX3Jpc2N2X2dzdGFnZV9zZXRfcHRlYCwgd2l0aCB0aGVcXG4gMjY4OlxcdFxcdFxcdCAqIG92ZXJoZWFkIG9mIGZyZWVpbmcgdGhlIHBhZ2UgdGFibGVzKG5vdCBzdXBwb3J0IG5vdyksIHdoaWNoIHdvdWxkIHNsb3dcXG4gMjY5OlxcdFxcdFxcdCAqIGRvd24gdGhlIHZDUFVzJyBwZXJmb3JtYW5jZS5cXG4gMjcwOlxcdFxcdFxcdCAqXFxuIDI3MTpcXHRcXHRcXHQgKiBJdCBpcyBiZXR0ZXIgdG8gcmVjb3ZlciB0aGUgaHVnZSBwYWdlIG1hcHBpbmcgaW4gdGhlIGlvY3RsIGNvbnRleHQgd2hlblxcbiAyNzI6XFx0XFx0XFx0ICogZGlzYWJsaW5nIGRpcnR5IGxvZ2dpbmcuXFxuIDI3MzpcXHRcXHRcXHQgKlxcbiAyNzQ6XFx0XFx0XFx0ICogMykgcHRlcF9sZXZlbCA9PSBvdXRfbWFwLVxcdTAwM2VsZXZlbFxcbiAyNzU6XFx0XFx0XFx0ICogV2UgYWxyZWFkeSBoYXZlIHRoZSBwdGVwLCBqdXN0IHVwZGF0ZSB0aGUgcHRlIHByb3QgaWYgdGhlIHBmbiBub3QgY2hhbmdlLlxcbiAyNzY6XFx0XFx0XFx0ICogVGhlcmUgaXMgbm8gbmVlZCB0byBpbnZva2UgYGt2bV9yaXNjdl9nc3RhZ2Vfc2V0X3B0ZWAgYWdhaW4uXFxuIDI3NzpcXHRcXHRcXHQgKi9cXG4gMjc4OlxcdFxcdFxcdGlmIChwdGVwX2xldmVsIFxcdTAwM2Ugb3V0X21hcC1cXHUwMDNlbGV2ZWwpIHtcXG4gMjc5OlxcdFxcdFxcdFxcdGt2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZShnc3RhZ2UsIHBjYWNoZSwgZ3BhLFxcbiAyODA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIG91dF9tYXAtXFx1MDAzZWxldmVsLCB0cnVlKTtcXG4gMjgxOlxcdFxcdFxcdH0gZWxzZSBpZiAoQUxJR05fRE9XTihQRk5fUEhZUyhwdGVfcGZuKHB0ZXBfZ2V0KHB0ZXApKSksIHBhZ2Vfc2l6ZSkgPT0gaHBhKSB7XFxuIDI4MjpcXHRcXHRcXHRcXHRrdm1fcmlzY3ZfZ3N0YWdlX3VwZGF0ZV9wdGVfcHJvdChnc3RhZ2UsIHB0ZXBfbGV2ZWwsIGdwYSwgcHRlcCwgcHJvdCk7XFxuIDI4MzpcXHRcXHRcXHRcXHRvdXRfbWFwLVxcdTAwM2VhZGRyID0gQUxJR05fRE9XTihncGEsIHBhZ2Vfc2l6ZSk7XFxuIDI4NDpcXHRcXHRcXHRcXHRvdXRfbWFwLVxcdTAwM2VsZXZlbCA9IHB0ZXBfbGV2ZWw7XFxuIDI4NTpcXHRcXHRcXHRcXHRvdXRfbWFwLVxcdTAwM2VwdGUgPSBwdGVwX2dldChwdGVwKTtcXG4gMjg2OlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbiAyODc6XFx0XFx0XFx0fVxcbiAyODg6XFx0XFx0fVxcbiAyODk6XFx0XFxuIDI5MDpcXHRcXHRvdXRfbWFwLVxcdTAwM2VwdGUgPSBwZm5fcHRlKFBGTl9ET1dOKGhwYSksIHByb3QpO1xcbiAyOTE6XFx0XFx0b3V0X21hcC1cXHUwMDNlcHRlID0gcHRlX21rZGlydHkob3V0X21hcC1cXHUwMDNlcHRlKTtcXG4gMjkyOlxcdFxcbiAyOTM6XFx0XFx0cmV0dXJuIGt2bV9yaXNjdl9nc3RhZ2Vfc2V0X3B0ZShnc3RhZ2UsIHBjYWNoZSwgb3V0X21hcCk7XFxuIDI5NDpcXHR9XFxuIDI5NTpcXHRcXG4gMjk2OlxcdHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtYWtlX2NoaWxkX3B0ZSh1bnNpZ25lZCBsb25nIGh1Z2VfcHRlLCBpbnQgaW5kZXgsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjAzOjQ5LjEzODc2ODYyNVoiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjI4MTMxNTIwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IElzc3VlcyBpbiBSSVNDLVYgS1ZNIFBSRV9GQVVMVF9NRU1PUlkgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gc3RlcHBpbmcgdGhyb3VnaCB0aGlzIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgIGZ1bmN0aW9uLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkFyZSB0aGVyZSBhbnkgdnVsbmVyYWJpbGl0aWVzIGhlcmUgY29uY2VybmluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIHRvIHVzZXIgc3BhY2U/XCIgSSBzZWUgYG91dF9tYXAtXHUwMDNlYWRkcmAsIGBvdXRfbWFwLVx1MDAzZWxldmVsYCwgYW5kIGBvdXRfbWFwLVx1MDAzZXB0ZWAgYmVpbmcgc2V0LCB3aGljaCBpbW1lZGlhdGVseSB0cmlnZ2VycyB0aGUgcXVlc3Rpb24sIFwiSXMgdGhpcyBwb3RlbnRpYWxseSBsZWFraW5nIGtlcm5lbCBpbmZvcm1hdGlvbj9cIlxuXG5CdXQgd2FpdC4gYG91dF9tYXBgIGlzIGEgbG9jYWwgdmFyaWFibGUgd2l0aGluIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLiBJdCdzIHVzZWQgaW50ZXJuYWxseSB0byBjYWxjdWxhdGUgYG1hcF9zaXplYCBhbmQgYGVuZGAuIFRoZSByZWxldmFudCBjb2RlIHNuaXBwZXQgbWFrZXMgdGhhdCBxdWl0ZSBjbGVhci4gSXQncyBub3QgY29waWVkIGJhY2sgdG8gdXNlciBzcGFjZSBkaXJlY3RseS4gVGhlIHJldHVybiB2YWx1ZSwgd2hpY2ggaXMgYSBsZW5ndGggY2FsY3VsYXRpb24gdXNpbmcgdGhvc2UgdmFsdWVzLCAqZG9lcyogbW9kaWZ5IGZpZWxkcyB3aXRoaW4gdGhlIGByYW5nZWAgc3RydWN0LCBzcGVjaWZpY2FsbHkgYHNpemVgIGFuZCBgZ3BhYCBpbiBga3ZtX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeWAsIGJ1dCBpdCdzIGZ1bmRhbWVudGFsbHkganVzdCBhIGxlbmd0aC4gVGhlIGByYW5nZWAgc3RydWN0IGl0c2VsZiBpcyBoYW5kbGVkIGJ5IGBjb3B5X2Zyb21fdXNlcmAgaW4gdGhlIGNhbGxlci5cblxuU28sIEknbSB0aGlua2luZywgXCJObywgaXQgZG9lc24ndCBsb29rIGxpa2UgdGhlcmUncyBhbnkgZGlyZWN0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlIGZyb20gYG91dF9tYXBgIHRvIHVzZXIgc3BhY2UuXCIgVGhlIGByYW5nZWAgc3RydWN0IGNvbWVzIGZyb20gdXNlciBzcGFjZSwgYW5kIHdoaWxlIGl0cyBgc2l6ZWAgYW5kIGBncGFgIG1lbWJlcnMgYXJlIG1vZGlmaWVkLCB0aGUgcGFkZGluZyBpcyB1bnRvdWNoZWQsIGVjaG9pbmcgYmFjayB3aGF0IHRoZSB1c2VyIGluaXRpYWxseSBzdXBwbGllZC5cblxuSSBuZWVkIHRvIGJlIHRob3JvdWdoLCB0aG91Z2guIEkgYXNrIG15c2VsZiwgXCJJcyB0aGVyZSBhbm90aGVyIGxvY2F0aW9uIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGluIHBsYXk/XCIgSSBjb25zaWRlciBgb3V0X21hcGAgYWdhaW4uIEl0J3MgaW5pdGlhbGl6ZWQgdG8gYHsgMCB9YCwgYW5kIGBrdm1fcmlzY3ZfbW11X21hcGAgcG9wdWxhdGVzIGl0LiBFdmVuIGlmIHRoYXQgZnVuY3Rpb24gZGlkbid0IHBvcHVsYXRlIGV2ZXJ5IGZpZWxkLCB3aGljaCBzZWVtcyB1bmxpa2VseSwgaXQncyBpbml0aWFsaXplZCB0byB6ZXJvLCBhbmQgdGhlIHJldHVybiB2YWx1ZSBpcyB0aGUga2V5IGZhY3Rvci4gVGhlIGZ1bmN0aW9uJ3MgcmV0dXJuIHZhbHVlIGlzIHVzZWQgdG8gdXBkYXRlIGByYW5nZS1cdTAwM2VzaXplYCBhbmQgYHJhbmdlLVx1MDAzZWdwYWAsIGJ1dCB0aGF0J3MganVzdCBhIGxlbmd0aCwgZGVyaXZlZCBmcm9tIGludGVybmFsbHkgY2FsY3VsYXRlZCB2YWx1ZXMuXG5cbk5vdywgbGV0J3Mgd2lkZW4gdGhlIHNjb3BlLiBJIGxvb2sgYXQgYWxsIHRoZSBjaGFuZ2VkIGZpbGVzOiBgYXJjaC9yaXNjdi9rdm0vS2NvbmZpZ2AsIGBhcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuY2AsIGBhcmNoL3Jpc2N2L2t2bS9tbXUuY2AsIGBhcmNoL3Jpc2N2L2t2bS92bS5jYCwgYW5kIHRoZSByZWxldmFudCBzZWxmdGVzdHMuIFRoZSBjaGFuZ2VzIGFyZSBhbGwgcXVpdGUgdGFyZ2V0ZWQsIGZvY3VzaW5nIG9uIGltcGxlbWVudGluZyBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBzcGVjaWZpY2FsbHkgZm9yIFJJU0MtVi4gVGhlcmUgYXJlbid0IGFueSBuZXcgc3RydWN0cyBiZWluZyBpbnRyb2R1Y2VkIHRoYXQgYXJlICpjb3BpZWQqIHRvIHVzZXIgc3BhY2UuIFRoZSBgS1ZNX1BSRV9GQVVMVF9NRU1PUllgIGlvY3RsIGFscmVhZHkgaGFuZGxlcyB0aGUgdXNlciBzcGFjZSBjb3B5IGZvciB0aGUgZXhpc3RpbmcgYHJhbmdlYCBzdHJ1Y3QuIFRoZSBgcmFuZ2VgIHN0cnVjdCBpcyBmdWxseSBpbml0aWFsaXplZCBieSB0aGUgYGNvcHlfZnJvbV91c2VyYCBjYWxsLlxuXG5Pa2F5LCBsZXQncyBzdGVwIGJhY2sgYW5kIHN1bW1hcml6ZS4gYG91dF9tYXBgIGlzIGluaXRpYWxpemVkIHRvIHplcm8uIFRoZSBgcmFuZ2VgIHN0cnVjdCBpcyBjb3BpZWQgKmZyb20qIHVzZXIgc3BhY2UsIG5vdCB0aGUgb3RoZXIgd2F5IGFyb3VuZC4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgaW50cm9kdWNlZCB0aGF0IGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gTm8gY29tcGxleCBhbGxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIHRoYXQgd291bGQgcG90ZW50aWFsbHkgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5UaGVyZWZvcmUsIG15IGFzc2Vzc21lbnQgaXMgdGhhdCBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGlzbid0IG5lY2Vzc2FyeSBoZXJlIHRvIGFkZHJlc3MgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBvdXQtb2YtYm91bmRzIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcywgdGhvdWdoIEknbSBub3Qgc2VlaW5nIGFueSBvYnZpb3VzIG9uZXMgYXQgdGhpcyBzdGFnZS4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgYGt2bV9yaXNjdl9nc3RhZ2VfbWFwcGluZ2Agc3RydWN0IGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQ4NywiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjA0OjAxLjQyMDA4NzYyOVoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU1MzQxMjgzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nIFxcXFx7XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2dzdGFnZS5oPTEyPXN0cnVjdCBrdm1fZ3N0YWdlIHtcXG4tLVxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2dzdGFnZS5oLTIwLVxcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2dzdGFnZS5oOjIxOnN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcge1xcbmFyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2dzdGFnZS5oLTIyLVxcdGdwYV90IGFkZHI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjA0OjAzLjk3MzUwNjI0NloiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDMwMTI1NTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIHRob3VnaCB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmhgKipcblxuQWxyaWdodCwgSSdtIHRoaW5raW5nIGFib3V0IGRpZ2dpbmcgaW50byB0aGUgUklTQy1WIEtWTSBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSBga3ZtX2dzdGFnZS5oYCBoZWFkZXIgZmlsZS4gSXQncyBvZnRlbiB0aGUgcGxhY2UgdG8gZmluZCBjcnVjaWFsIGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gdGhlIGd1ZXN0IHN0YWdlLCBzbyB0aGF0J3Mgd2hlcmUgSSdtIGZvY3VzaW5nLiBMaW5lIDIxLCBpbiBwYXJ0aWN1bGFyLCBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludC4gSSdtIGhvcGluZyB0byBnZXQgYSBxdWljayBvdmVydmlldyBvZiBob3cgdGhlIEtWTSBoYW5kbGVzIGd1ZXN0IHN0YXRlLCBhZGRyZXNzIHRyYW5zbGF0aW9uLCBvciBwZXJoYXBzIHNvbWUgZnVuZGFtZW50YWwgZGF0YSBzdHJ1Y3R1cmVzIHJlbGF0ZWQgdG8gdGhlIGctc3RhZ2UuIERlcGVuZGluZyBvbiB0aGUgc29waGlzdGljYXRpb24gb2YgdGhlIFJJU0MtViBpbXBsZW1lbnRhdGlvbiwgaXQgY291bGQgYmUgYSBzaW1wbGUgc3RydWN0dXJlLCBhIGNvbXBsZXggc2V0IG9mIG1hY3Jvcywgb3IgcGVyaGFwcyBldmVuIGEgbm92ZWwgYXBwcm9hY2guIEknbGwgbmVlZCB0byBleGFtaW5lIHdoYXQncyBkZWNsYXJlZCB0aGVyZSB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIG92ZXJhbGwgZGVzaWduIGFuZCB3aGF0IGtpbmQgb2YgZGV0YWlscyBhcmUgaW1wb3J0YW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTM0MiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjA0OjA3LjQwMzYzNDQwM1oiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Nzg5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAyMCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyMDpcXHRcXG4gIDIxOlxcdHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcge1xcbiAgMjI6XFx0XFx0Z3BhX3QgYWRkcjtcXG4gIDIzOlxcdFxcdHB0ZV90IHB0ZTtcXG4gIDI0OlxcdFxcdHUzMiBsZXZlbDtcXG4gIDI1OlxcdH07XFxuICAyNjpcXHRcXG4gIDI3OlxcdCNpZmRlZiBDT05GSUdfNjRCSVRcXG4gIDI4OlxcdCNkZWZpbmUga3ZtX3Jpc2N2X2dzdGFnZV9pbmRleF9iaXRzXFx0OVxcbiAgMjk6XFx0I2Vsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDc6MDQ6MDcuNDAzNzM0MjEzWiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMTQ1ODkxMjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgTWVtb3J5IFNhZmV0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBjb25jZXJuIHdhcywgYXMgYWx3YXlzLCB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzLCBwYXJ0aWN1bGFybHkgZ2l2ZW4gdGhlIGludGVyYWN0aW9uIHdpdGggdXNlciBzcGFjZS4gSSd2ZSBmb2N1c2VkIG9uIHR3byBrZXkgZGF0YSBzdHJ1Y3R1cmVzOiBga3ZtX2dzdGFnZV9tYXBwaW5nYCBhbmQgYGt2bV9wcmVfZmF1bHRfbWVtb3J5YC5cblxuRmlyc3QsIHRoZSBga3ZtX2dzdGFnZV9tYXBwaW5nYCBzdHJ1Y3QuIFRoaXMgaXMgdXNlZCBpbnRlcm5hbGx5IGluIHRoZSBSSVNDLVYgTU1VIGNvZGUuIEkgc2VlIHRoYXQgaXQncyBpbml0aWFsaXplZCB3aXRoIGB7IDAgfWAgd2l0aGluIGBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnlgLiBTbywgYGFkZHJgLCBgcHRlYCwgYW5kIGBsZXZlbGAgYXJlIGFsbCB6ZXJvZWQgb3V0IGF0IHRoZSBzdGFydC4gVGhlbiwgYGt2bV9yaXNjdl9tbXVfbWFwYCBnZXRzIGEgY2hhbmNlIHRvIG1vZGlmeSB0aGVzZSwgYW5kIGV2ZW4gaWYgaXQgZGlkbid0LCB3ZSBhcmUgc3RhcnRpbmcgZnJvbSBhIGNsZWFuIHNsYXRlLiBObyByaXNrIHRoZXJlLlxuXG5OZXh0LCBJIGV4YW1pbmVkIGBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnlgLiBUaGlzIGlzIHdoZXJlIHRoZSB1c2VyIHNwYWNlIGludGVyYWN0aW9uIG9jY3VycywgdGhyb3VnaCB0aGUgYEtWTV9QUkVfRkFVTFRfTUVNT1JZYCBpb2N0bCBpbiBga3ZtX21haW4uY2AuIEhlcmUncyB0aGUgY3JpdGljYWwgYml0OiB0aGUgYHJhbmdlYCB2YXJpYWJsZSBvZiB0aGlzIHR5cGUgaXMgZnVsbHkgcG9wdWxhdGVkIGJ5IGBjb3B5X2Zyb21fdXNlcmAgZnJvbSB0aGUgdXNlci1wcm92aWRlZCBkYXRhLiBUaGUgY29kZSB0aGVuIG1vZGlmaWVzIGByYW5nZS5zaXplYCBhbmQgYHJhbmdlLmdwYWAgaW5zaWRlIGBrdm1fdmNwdV9wcmVfZmF1bHRfbWVtb3J5YC4gQW5kIGZpbmFsbHksIHRoZSBlbnRpcmUgYHJhbmdlYCBzdHJ1Y3QsIGluY2x1ZGluZyB0aGUgYHBhZGRpbmdgIGZpZWxkcywgaXMgY29waWVkIGJhY2sgdG8gdXNlciBzcGFjZSB1c2luZyBgY29weV90b191c2VyYC4gVGhlIHBhZGRpbmcgZmllbGRzIGFyZSBzaW1wbHkgZWNob2luZyB0aGUgdXNlcidzIGlucHV0LCB3aGljaCBpcyBhIGNvbW1vbiBhbmQgc2FmZSBwYXR0ZXJuIGZvciBpb2N0bHMuIFRoZXJlJ3Mgbm8ga2VybmVsIG1lbW9yeSBsZWFrIGhlcmUgYmVjYXVzZSB0aGUgY29udGVudHMgb2YgdGhlIHBhZGRpbmcgb3JpZ2luYXRlIGZyb20gdGhlIHVzZXIuXG5cbkxvb2tpbmcgYXQgdGhlIG92ZXJhbGwgY29udGV4dCwgdGhlIHBhdGNoIHNpbXBseSBlbmFibGVzIHRoZSBleGlzdGluZyBgS1ZNX0NBUF9QUkVfRkFVTFRfTUVNT1JZYCBmZWF0dXJlIGZvciBSSVNDLVYuIEl0IGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbiBwYXR0ZXJucyBvciBkYXRhIHN0cnVjdHVyZXMgdGhhdCB3b3VsZCByYWlzZSBhbGFybSBiZWxscy4gVGhlIHBhdGNoIGlzIHJlbGF0aXZlbHkgc2ltcGxlOyBpdCBpcyBqdXN0IHdpcmluZyB1cCBhbiBleGlzdGluZyBnZW5lcmljIEtWTSBmZWF0dXJlLlxuXG5CYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJJ20gY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnksIGluZm9ybWF0aW9uIGxlYWtzLCBvciBtZW1vcnkgY29ycnVwdGlvbi4gVGhlIGV4aXN0aW5nIEtBU0FOIGNoZWNrcyBhcmUgc3VmZmljaWVudCB0byBoYW5kbGUgYW55IHVuZm9yZXNlZW4gaXNzdWVzLiBTbywgSSB3aWxsIG1hcmsgdGhpcyBhcyBgTmVlZHNLTVNBTj1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NzU0LCJPdXRwdXRUb2tlbnMiOjI2MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA3OjA0OjE5LjU0OTYyODM2OVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyB0aGUgYEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWWAgY2FwYWJpbGl0eSBmb3IgUklTQy1WIGJ5IGFkZGluZyBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBhbmQgd2lyaW5nIGl0IHVwIGluIHRoZSBNTVUuIFRoZSBvbmx5IGRhdGEgc3RydWN0dXJlIGludm9sdmVkIGluIHVzZXIgc3BhY2UgY29tbXVuaWNhdGlvbiBpcyBgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5YCwgd2hpY2ggaXMgaGFuZGxlZCBieSBnZW5lcmljIEtWTSBjb2RlIChgdmlydC9rdm0va3ZtX21haW4uY2ApLiBUaGUgZ2VuZXJpYyBjb2RlIGZ1bGx5IGluaXRpYWxpemVzIHRoZSBzdHJ1Y3QgdmlhIGBjb3B5X2Zyb21fdXNlcmAgYmVmb3JlIG1vZGlmeWluZyBpdHMgYHNpemVgIGFuZCBgZ3BhYCBmaWVsZHMgYW5kIGNvcHlpbmcgaXQgYmFjayB0byB1c2VyIHNwYWNlLiBBbnkgcGFkZGluZyBmaWVsZHMgc2ltcGx5IGVjaG8gYmFjayB0aGUgdXNlci1wcm92aWRlZCB2YWx1ZXMsIHByZXZlbnRpbmcgYW55IGtlcm5lbCBtZW1vcnkgaW5mby1sZWFrcy4gVGhlIGxvY2FsIHZhcmlhYmxlIGBvdXRfbWFwYCBvZiB0eXBlIGBzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nYCBpcyBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgKGA9IHsgMCB9YCkgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byBga3ZtX3Jpc2N2X21tdV9tYXBgLiBUaGVyZSBhcmUgbm8gbmV3IGNvbXBsZXggYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyB0aGUgYEtWTV9DQVBfUFJFX0ZBVUxUX01FTU9SWWAgY2FwYWJpbGl0eSBmb3IgUklTQy1WIGJ5IGFkZGluZyBga3ZtX2FyY2hfdmNwdV9wcmVfZmF1bHRfbWVtb3J5YCBhbmQgd2lyaW5nIGl0IHVwIGluIHRoZSBNTVUuIFRoZSBvbmx5IGRhdGEgc3RydWN0dXJlIGludm9sdmVkIGluIHVzZXIgc3BhY2UgY29tbXVuaWNhdGlvbiBpcyBgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5YCwgd2hpY2ggaXMgaGFuZGxlZCBieSBnZW5lcmljIEtWTSBjb2RlIChgdmlydC9rdm0va3ZtX21haW4uY2ApLiBUaGUgZ2VuZXJpYyBjb2RlIGZ1bGx5IGluaXRpYWxpemVzIHRoZSBzdHJ1Y3QgdmlhIGBjb3B5X2Zyb21fdXNlcmAgYmVmb3JlIG1vZGlmeWluZyBpdHMgYHNpemVgIGFuZCBgZ3BhYCBmaWVsZHMgYW5kIGNvcHlpbmcgaXQgYmFjayB0byB1c2VyIHNwYWNlLiBBbnkgcGFkZGluZyBmaWVsZHMgc2ltcGx5IGVjaG8gYmFjayB0aGUgdXNlci1wcm92aWRlZCB2YWx1ZXMsIHByZXZlbnRpbmcgYW55IGtlcm5lbCBtZW1vcnkgaW5mby1sZWFrcy4gVGhlIGxvY2FsIHZhcmlhYmxlIGBvdXRfbWFwYCBvZiB0eXBlIGBzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nYCBpcyBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgKGA9IHsgMCB9YCkgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byBga3ZtX3Jpc2N2X21tdV9tYXBgLiBUaGVyZSBhcmUgbm8gbmV3IGNvbXBsZXggYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaC4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowgjcrb[1] Phase: Succeeded StartedAt: 2026-08-11 07:04:31 +0000 UTC FinishedAt: 2026-08-11 07:04:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgjcrb[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-11 07:04:31 +0000 UTC FinishedAt: 2026-08-11 07:04:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgjcrb[2] Phase: Succeeded StartedAt: 2026-08-11 07:04:31 +0000 UTC FinishedAt: 2026-08-11 07:43:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgjcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"97eefc46-3553-43ac-be61-0262dcd6ce32","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-11 07:04:31 +0000 UTC FinishedAt: 2026-08-11 07:43:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"97eefc46-3553-43ac-be61-0262dcd6ce32","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowgjcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"97eefc46-3553-43ac-be61-0262dcd6ce32","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-11 07:04:31 +0000 UTC FinishedAt: 2026-08-11 07:04:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgjcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"97eefc46-3553-43ac-be61-0262dcd6ce32","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-11 07:04:31 +0000 UTC FinishedAt: 2026-08-11 07:04:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowgjcrb/series-workflowgjcrb-convert-artifact-1766587921/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgjcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"97eefc46-3553-43ac-be61-0262dcd6ce32","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-11 07:04:41 +0000 UTC FinishedAt: 2026-08-11 07:20:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgjcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"97eefc46-3553-43ac-be61-0262dcd6ce32","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-11 07:04:41 +0000 UTC FinishedAt: 2026-08-11 07:20:49 +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:*d9663dbe-7da1-40c0-b952-47f1fea769df,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-workflowgjcrb/series-workflowgjcrb-convert-artifact-1766587921/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": "737766f1-a7fa-4dcc-8d58-0f3856408209", "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-workflowgjcrb/series-workflowgjcrb-build-action-1987960767/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgjcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"97eefc46-3553-43ac-be61-0262dcd6ce32","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-11 07:04:41 +0000 UTC FinishedAt: 2026-08-11 07:20:39 +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:*d9663dbe-7da1-40c0-b952-47f1fea769df,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-workflowgjcrb/series-workflowgjcrb-convert-artifact-1766587921/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": "737766f1-a7fa-4dcc-8d58-0f3856408209", "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-workflowgjcrb/series-workflowgjcrb-build-action-1987960767/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgjcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"97eefc46-3553-43ac-be61-0262dcd6ce32","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-11 07:20:49 +0000 UTC FinishedAt: 2026-08-11 07:20:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgjcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"97eefc46-3553-43ac-be61-0262dcd6ce32","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-11 07:20:49 +0000 UTC FinishedAt: 2026-08-11 07:20:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgjcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"97eefc46-3553-43ac-be61-0262dcd6ce32","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-11 07:20:49 +0000 UTC FinishedAt: 2026-08-11 07:20:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgjcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"97eefc46-3553-43ac-be61-0262dcd6ce32","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-11 07:20:49 +0000 UTC FinishedAt: 2026-08-11 07:20:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"97eefc46-3553-43ac-be61-0262dcd6ce32","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowgjcrb/series-workflowgjcrb-convert-artifact-41680612/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgjcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"97eefc46-3553-43ac-be61-0262dcd6ce32","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-11 07:20:59 +0000 UTC FinishedAt: 2026-08-11 07:23:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgjcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"97eefc46-3553-43ac-be61-0262dcd6ce32","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-11 07:20:59 +0000 UTC FinishedAt: 2026-08-11 07:23:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*737766f1-a7fa-4dcc-8d58-0f3856408209,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-workflowgjcrb/series-workflowgjcrb-build-action-1987960767/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-workflowgjcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"97eefc46-3553-43ac-be61-0262dcd6ce32","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-11 07:23:36 +0000 UTC FinishedAt: 2026-08-11 07:23:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgjcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"97eefc46-3553-43ac-be61-0262dcd6ce32","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-11 07:23:36 +0000 UTC FinishedAt: 2026-08-11 07:23:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgjcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"97eefc46-3553-43ac-be61-0262dcd6ce32","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-11 07:23:36 +0000 UTC FinishedAt: 2026-08-11 07:39:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgjcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"97eefc46-3553-43ac-be61-0262dcd6ce32","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-11 07:23:36 +0000 UTC FinishedAt: 2026-08-11 07:39:46 +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:*d9663dbe-7da1-40c0-b952-47f1fea769df,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-workflowgjcrb/series-workflowgjcrb-convert-artifact-41680612/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": "489a41e8-0f62-4836-94a0-f1c3f2577883", "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-workflowgjcrb/series-workflowgjcrb-build-action-3782871152/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgjcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"97eefc46-3553-43ac-be61-0262dcd6ce32","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-11 07:23:36 +0000 UTC FinishedAt: 2026-08-11 07:39:36 +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:*d9663dbe-7da1-40c0-b952-47f1fea769df,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-workflowgjcrb/series-workflowgjcrb-convert-artifact-41680612/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": "489a41e8-0f62-4836-94a0-f1c3f2577883", "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-workflowgjcrb/series-workflowgjcrb-build-action-3782871152/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgjcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"97eefc46-3553-43ac-be61-0262dcd6ce32","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-11 07:39:46 +0000 UTC FinishedAt: 2026-08-11 07:39:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgjcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"97eefc46-3553-43ac-be61-0262dcd6ce32","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-11 07:39:46 +0000 UTC FinishedAt: 2026-08-11 07:39:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgjcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"97eefc46-3553-43ac-be61-0262dcd6ce32","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-11 07:39:46 +0000 UTC FinishedAt: 2026-08-11 07:41:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgjcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"97eefc46-3553-43ac-be61-0262dcd6ce32","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-11 07:39:46 +0000 UTC FinishedAt: 2026-08-11 07:41:36 +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:*489a41e8-0f62-4836-94a0-f1c3f2577883,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-workflowgjcrb/series-workflowgjcrb-build-action-3782871152/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-workflowgjcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"97eefc46-3553-43ac-be61-0262dcd6ce32","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-11 07:41:45 +0000 UTC FinishedAt: 2026-08-11 07:43:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgjcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"97eefc46-3553-43ac-be61-0262dcd6ce32","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-11 07:41:45 +0000 UTC FinishedAt: 2026-08-11 07:43:04 +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_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page"],"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:*737766f1-a7fa-4dcc-8d58-0f3856408209,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*489a41e8-0f62-4836-94a0-f1c3f2577883,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-workflowgjcrb/series-workflowgjcrb-build-action-1987960767/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-workflowgjcrb/series-workflowgjcrb-build-action-3782871152/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowgjcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"97eefc46-3553-43ac-be61-0262dcd6ce32","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-11 07:41:45 +0000 UTC FinishedAt: 2026-08-11 07:41:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgjcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"97eefc46-3553-43ac-be61-0262dcd6ce32","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-11 07:41:45 +0000 UTC FinishedAt: 2026-08-11 07:41:50 +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_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page"],"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-workflowgjcrb/series-workflowgjcrb-convert-artifact-649876845/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgjcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"97eefc46-3553-43ac-be61-0262dcd6ce32","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-11 07:41:45 +0000 UTC FinishedAt: 2026-08-11 07:41:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgjcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"97eefc46-3553-43ac-be61-0262dcd6ce32","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-11 07:41:45 +0000 UTC FinishedAt: 2026-08-11 07:41:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgjcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"97eefc46-3553-43ac-be61-0262dcd6ce32","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-11 07:41:45 +0000 UTC FinishedAt: 2026-08-11 07:41:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgjcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"97eefc46-3553-43ac-be61-0262dcd6ce32","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-11 07:41:55 +0000 UTC FinishedAt: 2026-08-11 07:43:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgjcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_arch_vcpu_pre_fault_memory","kvm_riscv_gstage_map_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dfdf1374fdeccb5b7e3d35186228e01ec5ea5f01","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","VIRTUALIZATION"],"series_id":"97eefc46-3553-43ac-be61-0262dcd6ce32","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-11 07:41:55 +0000 UTC FinishedAt: 2026-08-11 07:42:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*737766f1-a7fa-4dcc-8d58-0f3856408209,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*489a41e8-0f62-4836-94a0-f1c3f2577883,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-workflowgjcrb/series-workflowgjcrb-build-action-1987960767/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-workflowgjcrb/series-workflowgjcrb-build-action-3782871152/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-workflowgjcrb/series-workflowgjcrb-convert-artifact-649876845/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,}