Name: series-workflowxm8kf Phase: Succeeded StartedAt: 2026-09-08 15:49:43 +0000 UTC FinishedAt: 2026-09-08 19:52:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxm8kf[0] Phase: Succeeded StartedAt: 2026-09-08 15:49:43 +0000 UTC FinishedAt: 2026-09-08 16:10:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxm8kf[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 15:49:43 +0000 UTC FinishedAt: 2026-09-08 16:10:58 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "d4b7fb647204f0c81dfeae2d1a708e4d858e0c94", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "d4b7fb647204f0c81dfeae2d1a708e4d858e0c94", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL" ], "series_id": "793ba96f-4789-4722-9f98-d7ae853a2a85" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "__nested_vmx_vmexit", "vmx_leave_nested", "vmx_enter_smm", "nested_vmx_reflect_vmexit", "nested_vmx_free_vcpu" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX25lc3RlZF92bXhfdm1leGl0JiMzNDssCiAgICAmIzM0O3ZteF9sZWF2ZV9uZXN0ZWQmIzM0OywKICAgICYjMzQ7dm14X2VudGVyX3NtbSYjMzQ7LAogICAgJiMzNDtuZXN0ZWRfdm14X3JlZmxlY3Rfdm1leGl0JiMzNDssCiAgICAmIzM0O25lc3RlZF92bXhfZnJlZV92Y3B1JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbmVzdGVkIFZNWCBWTS1leGl0IGhhbmRsaW5nIGluIEtWTSAoYF9fbmVzdGVkX3ZteF92bWV4aXRgKSB0byBza2lwIGNhbGxpbmcgYG5lc3RlZF9mbHVzaF9jYWNoZWRfc2hhZG93X3ZtY3MxMigpYCB3aGVuIGB2bV9leGl0X3JlYXNvbiA9PSAtMWAgKGUuZy4sIGR1cmluZyB2Q1BVIHRlYXJkb3duIG9yIFNNTSBlbnRyeSkuIFRoaXMgcHJldmVudHMgaWxsZWdhbCBndWVzdCBtZW1vcnkgd3JpdGVzIG9uIGJvcnJvd2VkIGxhenkgVExCIG1tIGNvbnRleHRzIGR1cmluZyB0ZWFyZG93bi5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgbmV3IGJ1ZmZlcnMsIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnksIGV4cG9zZSB1bmluaXRpYWxpemVkIGZpZWxkcywgb3IgbGVhayBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFN0YW5kYXJkIEtBU0FOIGFuZCBnZW5lcmFsIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgYXJlIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIF9fbmVzdGVkX3ZteF92bWV4aXQoKSBpbiBLVk0gbmVzdGVkIFZNWCBzdXBwb3J0IChhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jKSB0byBwcmV2ZW50IGZsdXNoaW5nIGNhY2hlZCBzaGFkb3cgVk1DUzEyIHdoZW4gcGVyZm9ybWluZyBhIGZvcmNlZCBuZXN0ZWQgVk0tZXhpdCAodm1fZXhpdF9yZWFzb24gPT0gLTEsIGUuZy4gZHVyaW5nIHZDUFUgdGVhcmRvd24gb3IgU01NIGVudHJ5KS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzIGluIGNvcmUgS1ZNIHZpcnR1YWxpemF0aW9uIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2Ugb24gYW1kNjQsIHdhcnJhbnRpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNjowOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGMyNGMzOTg2ZDRkNTVkMDBlODA3MTY0OTNiYmMxMDlkM2FhYjZjMTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDE2OjA5OjQxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXG5pbmRleCAxNTE4NzM0MDdhYmQzLi4zM2RjOGEwNzAxOWY4IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xuQEAgLTUxMjEsMjEgJiM0Mzs1MTIxLDI4IEBAIHZvaWQgX19uZXN0ZWRfdm14X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2bV9leGl0X3JlYXNvbixcbiBcdGlmIChsaWtlbHkoIXZteC1cdTAwM2VmYWlsKSkge1xuIFx0XHRzeW5jX3ZtY3MwMl90b192bWNzMTIodmNwdSwgdm1jczEyKTtcbiBcbi1cdFx0aWYgKHZtX2V4aXRfcmVhc29uICE9IC0xKVxuJiM0MztcdFx0aWYgKHZtX2V4aXRfcmVhc29uICE9IC0xKSB7XG4gXHRcdFx0cHJlcGFyZV92bWNzMTIodmNwdSwgdm1jczEyLCB2bV9leGl0X3JlYXNvbixcbiBcdFx0XHRcdCAgICAgICBleGl0X2ludHJfaW5mbywgZXhpdF9xdWFsaWZpY2F0aW9uLFxuIFx0XHRcdFx0ICAgICAgIGV4aXRfaW5zbl9sZW4pO1xuIFxuLVx0XHQvKlxuLVx0XHQgKiBNdXN0IGhhcHBlbiBvdXRzaWRlIG9mIHN5bmNfdm1jczAyX3RvX3ZtY3MxMigpIGFzIGl0IHdpbGxcbi1cdFx0ICogYWxzbyBiZSB1c2VkIHRvIGNhcHR1cmUgdm1jczEyIGNhY2hlIGFzIHBhcnQgb2Zcbi1cdFx0ICogY2FwdHVyaW5nIG5WTVggc3RhdGUgZm9yIHNuYXBzaG90IChtaWdyYXRpb24pLlxuLVx0XHQgKlxuLVx0XHQgKiBPdGhlcndpc2UsIHRoaXMgZmx1c2ggd2lsbCBkaXJ0eSBndWVzdCBtZW1vcnkgYXQgYVxuLVx0XHQgKiBwb2ludCBpdCBpcyBhbHJlYWR5IGFzc3VtZWQgYnkgdXNlci1zcGFjZSB0byBiZVxuLVx0XHQgKiBpbW11dGFibGUuXG4tXHRcdCAqL1xuLVx0XHRuZXN0ZWRfZmx1c2hfY2FjaGVkX3NoYWRvd192bWNzMTIodmNwdSwgdm1jczEyKTtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogTXVzdCBoYXBwZW4gb3V0c2lkZSBvZiBzeW5jX3ZtY3MwMl90b192bWNzMTIoKSBhcyBpdCB3aWxsXG4mIzQzO1x0XHRcdCAqIGFsc28gYmUgdXNlZCB0byBjYXB0dXJlIHZtY3MxMiBjYWNoZSBhcyBwYXJ0IG9mXG4mIzQzO1x0XHRcdCAqIGNhcHR1cmluZyBuVk1YIHN0YXRlIGZvciBzbmFwc2hvdCAobWlncmF0aW9uKS5cbiYjNDM7XHRcdFx0ICpcbiYjNDM7XHRcdFx0ICogT3RoZXJ3aXNlLCB0aGlzIGZsdXNoIHdpbGwgZGlydHkgZ3Vlc3QgbWVtb3J5IGF0IGFcbiYjNDM7XHRcdFx0ICogcG9pbnQgaXQgaXMgYWxyZWFkeSBhc3N1bWVkIGJ5IHVzZXItc3BhY2UgdG8gYmVcbiYjNDM7XHRcdFx0ICogaW1tdXRhYmxlLlxuJiM0MztcdFx0XHQgKlxuJiM0MztcdFx0XHQgKiBEbyBub3QgZmx1c2ggd2hlbiB2bV9leGl0X3JlYXNvbiA9PSAtMSAoZS5nLiBmb3JjZWQgZXhpdFxuJiM0MztcdFx0XHQgKiBvbiB2Q1BVIHRlYXJkb3duIG9yIFNNTSBlbnRyeSkuIE9uIHRlYXJkb3duLCBLVk0gbWF5IHJ1blxuJiM0MztcdFx0XHQgKiB3aXRoIGN1cnJlbnQtXHUwMDNlbW0gPT0gTlVMTCBvbiBhIGJvcnJvd2VkIGxhenkgVExCIG1tLFxuJiM0MztcdFx0XHQgKiB3aGVyZSB3cml0aW5nIGd1ZXN0IG1lbW9yeSB3b3VsZCBjb3JydXB0IGFuIHVucmVsYXRlZFxuJiM0MztcdFx0XHQgKiB0YXNrLiBOb3RoaW5nIGNhbiBvYnNlcnZlIHRoZSBmbHVzaCBpbiB0aGF0IGNhc2UgYW55d2F5LlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0bmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyKHZjcHUsIHZtY3MxMik7XG4mIzQzO1x0XHR9XG4gXHR9IGVsc2Uge1xuIFx0XHQvKlxuIFx0XHQgKiBUaGUgb25seSBleHBlY3RlZCBWTS1pbnN0cnVjdGlvbiBlcnJvciBpcyBcJiMzNDtWTSBlbnRyeSB3aXRoXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6MDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fbmVzdGVkX3ZteF92bWV4aXQmIzM0OywKICAgICYjMzQ7dm14X2xlYXZlX25lc3RlZCYjMzQ7LAogICAgJiMzNDt2bXhfZW50ZXJfc21tJiMzNDssCiAgICAmIzM0O25lc3RlZF92bXhfcmVmbGVjdF92bWV4aXQmIzM0OywKICAgICYjMzQ7bmVzdGVkX3ZteF9mcmVlX3ZjcHUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgX19uZXN0ZWRfdm14X3ZtZXhpdCgpIGluIEtWTSBuZXN0ZWQgVk1YIHN1cHBvcnQgKGFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMpIHRvIHByZXZlbnQgZmx1c2hpbmcgY2FjaGVkIHNoYWRvdyBWTUNTMTIgd2hlbiBwZXJmb3JtaW5nIGEgZm9yY2VkIG5lc3RlZCBWTS1leGl0ICh2bV9leGl0X3JlYXNvbiA9PSAtMSwgZS5nLiBkdXJpbmcgdkNQVSB0ZWFyZG93biBvciBTTU0gZW50cnkpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMgaW4gY29yZSBLVk0gdmlydHVhbGl6YXRpb24gYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSBvbiBhbWQ2NCwgd2FycmFudGluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzI0YzM5ODZkNGQ1NWQwMGU4MDcxNjQ5M2JiYzEwOWQzYWFiNmMxNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMTY6MDk6NDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYwppbmRleCAxNTE4NzM0MDdhYmQzLi4zM2RjOGEwNzAxOWY4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMKQEAgLTUxMjEsMjEgJiM0Mzs1MTIxLDI4IEBAIHZvaWQgX19uZXN0ZWRfdm14X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2bV9leGl0X3JlYXNvbiwKIAlpZiAobGlrZWx5KCF2bXgtJmd0O2ZhaWwpKSB7CiAJCXN5bmNfdm1jczAyX3RvX3ZtY3MxMih2Y3B1LCB2bWNzMTIpOwogCi0JCWlmICh2bV9leGl0X3JlYXNvbiAhPSAtMSkKJiM0MzsJCWlmICh2bV9leGl0X3JlYXNvbiAhPSAtMSkgewogCQkJcHJlcGFyZV92bWNzMTIodmNwdSwgdm1jczEyLCB2bV9leGl0X3JlYXNvbiwKIAkJCQkgICAgICAgZXhpdF9pbnRyX2luZm8sIGV4aXRfcXVhbGlmaWNhdGlvbiwKIAkJCQkgICAgICAgZXhpdF9pbnNuX2xlbik7CiAKLQkJLyoKLQkJICogTXVzdCBoYXBwZW4gb3V0c2lkZSBvZiBzeW5jX3ZtY3MwMl90b192bWNzMTIoKSBhcyBpdCB3aWxsCi0JCSAqIGFsc28gYmUgdXNlZCB0byBjYXB0dXJlIHZtY3MxMiBjYWNoZSBhcyBwYXJ0IG9mCi0JCSAqIGNhcHR1cmluZyBuVk1YIHN0YXRlIGZvciBzbmFwc2hvdCAobWlncmF0aW9uKS4KLQkJICoKLQkJICogT3RoZXJ3aXNlLCB0aGlzIGZsdXNoIHdpbGwgZGlydHkgZ3Vlc3QgbWVtb3J5IGF0IGEKLQkJICogcG9pbnQgaXQgaXMgYWxyZWFkeSBhc3N1bWVkIGJ5IHVzZXItc3BhY2UgdG8gYmUKLQkJICogaW1tdXRhYmxlLgotCQkgKi8KLQkJbmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyKHZjcHUsIHZtY3MxMik7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBNdXN0IGhhcHBlbiBvdXRzaWRlIG9mIHN5bmNfdm1jczAyX3RvX3ZtY3MxMigpIGFzIGl0IHdpbGwKJiM0MzsJCQkgKiBhbHNvIGJlIHVzZWQgdG8gY2FwdHVyZSB2bWNzMTIgY2FjaGUgYXMgcGFydCBvZgomIzQzOwkJCSAqIGNhcHR1cmluZyBuVk1YIHN0YXRlIGZvciBzbmFwc2hvdCAobWlncmF0aW9uKS4KJiM0MzsJCQkgKgomIzQzOwkJCSAqIE90aGVyd2lzZSwgdGhpcyBmbHVzaCB3aWxsIGRpcnR5IGd1ZXN0IG1lbW9yeSBhdCBhCiYjNDM7CQkJICogcG9pbnQgaXQgaXMgYWxyZWFkeSBhc3N1bWVkIGJ5IHVzZXItc3BhY2UgdG8gYmUKJiM0MzsJCQkgKiBpbW11dGFibGUuCiYjNDM7CQkJICoKJiM0MzsJCQkgKiBEbyBub3QgZmx1c2ggd2hlbiB2bV9leGl0X3JlYXNvbiA9PSAtMSAoZS5nLiBmb3JjZWQgZXhpdAomIzQzOwkJCSAqIG9uIHZDUFUgdGVhcmRvd24gb3IgU01NIGVudHJ5KS4gT24gdGVhcmRvd24sIEtWTSBtYXkgcnVuCiYjNDM7CQkJICogd2l0aCBjdXJyZW50LSZndDttbSA9PSBOVUxMIG9uIGEgYm9ycm93ZWQgbGF6eSBUTEIgbW0sCiYjNDM7CQkJICogd2hlcmUgd3JpdGluZyBndWVzdCBtZW1vcnkgd291bGQgY29ycnVwdCBhbiB1bnJlbGF0ZWQKJiM0MzsJCQkgKiB0YXNrLiBOb3RoaW5nIGNhbiBvYnNlcnZlIHRoZSBmbHVzaCBpbiB0aGF0IGNhc2UgYW55d2F5LgomIzQzOwkJCSAqLwomIzQzOwkJCW5lc3RlZF9mbHVzaF9jYWNoZWRfc2hhZG93X3ZtY3MxMih2Y3B1LCB2bWNzMTIpOwomIzQzOwkJfQogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIFRoZSBvbmx5IGV4cGVjdGVkIFZNLWluc3RydWN0aW9uIGVycm9yIGlzICYjMzQ7Vk0gZW50cnkgd2l0aAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzE4CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGl2aW5nIGludG8gdGhlIE5lc3RlZCBWTSBDb2RlKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIHRvIHJldmlldywgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYnVyaWVkIGluIGBhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jYC4gTGV0JiMzOTtzIGdldCB0byBpdC4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgdGhlIHBhdGNoIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiB0aGF0IGZpbGUuIENvbnRleHQgaXMgZXZlcnl0aGluZyB3aGVuIGl0IGNvbWVzIHRvIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2UgaW4gcmVsYXRpb24gdG8gdGhlIGV4aXN0aW5nIGltcGxlbWVudGF0aW9uLiBJJiMzOTttIGdvaW5nIHRvIHplcm8gaW4gb24gdGhlIGFyZWEgYXJvdW5kIGxpbmUgNTEyMS4gSSYjMzk7bGwgbmVlZCB0byBzZWUgcHJlY2lzZWx5IHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlLCB1bmRlcnN0YW5kIHRoZSBsb2dpYyBmbG93LCBhbmQgaWRlbnRpZnkgdGhlIHNwZWNpZmljIGNvZGUgc2VnbWVudHMgdGhhdCBhcmUgYmVpbmcgbW9kaWZpZWQuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMsIHJpZ2h0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW50IGJlaGluZCB0aGlzIGNoYW5nZSwgd2h5IGl0JiMzOTtzIG5lY2Vzc2FyeSwgYW5kIHdoYXQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBpdCBtaWdodCBoYXZlIG9uIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTExMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MTEwOlx0XHRsZWF2ZV9ndWVzdF9tb2RlKHZjcHUpO1xuNTExMTpcdFxuNTExMjpcdFx0aWYgKG5lc3RlZF9jcHVfaGFzX3ByZWVtcHRpb25fdGltZXIodm1jczEyKSlcbjUxMTM6XHRcdFx0aHJ0aW1lcl9jYW5jZWwoXHUwMDI2dG9fdm14KHZjcHUpLVx1MDAzZW5lc3RlZC5wcmVlbXB0aW9uX3RpbWVyKTtcbjUxMTQ6XHRcbjUxMTU6XHRcdGlmIChuZXN0ZWRfY3B1X2hhcyh2bWNzMTIsIENQVV9CQVNFRF9VU0VfVFNDX09GRlNFVFRJTkcpKSB7XG41MTE2Olx0XHRcdHZjcHUtXHUwMDNlYXJjaC50c2Nfb2Zmc2V0ID0gdmNwdS1cdTAwM2VhcmNoLmwxX3RzY19vZmZzZXQ7XG41MTE3Olx0XHRcdGlmIChuZXN0ZWRfY3B1X2hhczIodm1jczEyLCBTRUNPTkRBUllfRVhFQ19UU0NfU0NBTElORykpXG41MTE4Olx0XHRcdFx0dmNwdS1cdTAwM2VhcmNoLnRzY19zY2FsaW5nX3JhdGlvID0gdmNwdS1cdTAwM2VhcmNoLmwxX3RzY19zY2FsaW5nX3JhdGlvO1xuNTExOTpcdFx0fVxuNTEyMDpcdFxuNTEyMTpcdFx0aWYgKGxpa2VseSghdm14LVx1MDAzZWZhaWwpKSB7XG41MTIyOlx0XHRcdHN5bmNfdm1jczAyX3RvX3ZtY3MxMih2Y3B1LCB2bWNzMTIpO1xuNTEyMzpcdFxuNTEyNDpcdFx0XHRpZiAodm1fZXhpdF9yZWFzb24gIT0gLTEpIHtcbjUxMjU6XHRcdFx0XHRwcmVwYXJlX3ZtY3MxMih2Y3B1LCB2bWNzMTIsIHZtX2V4aXRfcmVhc29uLFxuNTEyNjpcdFx0XHRcdFx0ICAgICAgIGV4aXRfaW50cl9pbmZvLCBleGl0X3F1YWxpZmljYXRpb24sXG41MTI3Olx0XHRcdFx0XHQgICAgICAgZXhpdF9pbnNuX2xlbik7XG41MTI4Olx0XG41MTI5Olx0XHRcdFx0LypcbjUxMzA6XHRcdFx0XHQgKiBNdXN0IGhhcHBlbiBvdXRzaWRlIG9mIHN5bmNfdm1jczAyX3RvX3ZtY3MxMigpIGFzIGl0IHdpbGxcbjUxMzE6XHRcdFx0XHQgKiBhbHNvIGJlIHVzZWQgdG8gY2FwdHVyZSB2bWNzMTIgY2FjaGUgYXMgcGFydCBvZlxuNTEzMjpcdFx0XHRcdCAqIGNhcHR1cmluZyBuVk1YIHN0YXRlIGZvciBzbmFwc2hvdCAobWlncmF0aW9uKS5cbjUxMzM6XHRcdFx0XHQgKlxuNTEzNDpcdFx0XHRcdCAqIE90aGVyd2lzZSwgdGhpcyBmbHVzaCB3aWxsIGRpcnR5IGd1ZXN0IG1lbW9yeSBhdCBhXG41MTM1Olx0XHRcdFx0ICogcG9pbnQgaXQgaXMgYWxyZWFkeSBhc3N1bWVkIGJ5IHVzZXItc3BhY2UgdG8gYmVcbjUxMzY6XHRcdFx0XHQgKiBpbW11dGFibGUuXG41MTM3Olx0XHRcdFx0ICpcbjUxMzg6XHRcdFx0XHQgKiBEbyBub3QgZmx1c2ggd2hlbiB2bV9leGl0X3JlYXNvbiA9PSAtMSAoZS5nLiBmb3JjZWQgZXhpdFxuNTEzOTpcdFx0XHRcdCAqIG9uIHZDUFUgdGVhcmRvd24gb3IgU01NIGVudHJ5KS4gT24gdGVhcmRvd24sIEtWTSBtYXkgcnVuXG41MTQwOlx0XHRcdFx0ICogd2l0aCBjdXJyZW50LVx1MDAzZW1tID09IE5VTEwgb24gYSBib3Jyb3dlZCBsYXp5IFRMQiBtbSxcbjUxNDE6XHRcdFx0XHQgKiB3aGVyZSB3cml0aW5nIGd1ZXN0IG1lbW9yeSB3b3VsZCBjb3JydXB0IGFuIHVucmVsYXRlZFxuNTE0MjpcdFx0XHRcdCAqIHRhc2suIE5vdGhpbmcgY2FuIG9ic2VydmUgdGhlIGZsdXNoIGluIHRoYXQgY2FzZSBhbnl3YXkuXG41MTQzOlx0XHRcdFx0ICovXG41MTQ0Olx0XHRcdFx0bmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyKHZjcHUsIHZtY3MxMik7XG41MTQ1Olx0XHRcdH1cbjUxNDY6XHRcdH0gZWxzZSB7XG41MTQ3Olx0XHRcdC8qXG41MTQ4Olx0XHRcdCAqIFRoZSBvbmx5IGV4cGVjdGVkIFZNLWluc3RydWN0aW9uIGVycm9yIGlzIFwmIzM0O1ZNIGVudHJ5IHdpdGhcbjUxNDk6XHRcdFx0ICogaW52YWxpZCBjb250cm9sIGZpZWxkKHMpLlwmIzM0OyBBbnl0aGluZyBlbHNlIGluZGljYXRlcyBhXG41MTUwOlx0XHRcdCAqIHByb2JsZW0gd2l0aCBMMC5cbjUxNTE6XHRcdFx0ICovXG41MTUyOlx0XHRcdFdBUk5fT05fT05DRSh2bWNzX3JlYWQzMihWTV9JTlNUUlVDVElPTl9FUlJPUikgIT1cbjUxNTM6XHRcdFx0XHQgICAgIFZNWEVSUl9FTlRSWV9JTlZBTElEX0NPTlRST0xfRklFTEQpO1xuNTE1NDpcdFxuNTE1NTpcdFx0XHQvKiBWTS1GYWlsIGF0IFZNLUVudHJ5IG1lYW5zIEtWTSBtaXNzZWQgYSBjb25zaXN0ZW5jeSBjaGVjay4gKi9cbjUxNTY6XHRcdFx0V0FSTl9PTl9PTkNFKHdhcm5fb25fbWlzc2VkX2NjKTtcbjUxNTc6XHRcdH1cbjUxNTg6XHRcbjUxNTk6XHRcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ5MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDExNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRhcmdldCBhbmQgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyB0d2Vha2luZyBgX19uZXN0ZWRfdm14X3ZtZXhpdGAgd2l0aGluIGBhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jYC4gIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBuZXN0ZWQgVk1YIHZtZXhpdHMg4oCTIGVmZmVjdGl2ZWx5LCBuZXN0ZWQgdmlydHVhbGl6YXRpb24sIHdoaWNoIGlzIHJlbGV2YW50IHRvIEludGVsL2FtZDY0IHBsYXRmb3Jtcy4gIFRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcyBhbHdheXMsICpjYW4qIHRoaXMgYmUgZWZmZWN0aXZlbHkgZnV6emVkIHRocm91Z2ggYSB0b29sIGxpa2Ugc3l6a2FsbGVyLCBydW5uaW5nIGluIGEgc3RhbmRhcmQgUUVNVSBzZXR1cD8gIEZvcnR1bmF0ZWx5LCB0aGUgYW5zd2VyIGxvb2tzIGxpa2UgYSByZXNvdW5kaW5nICYjMzQ7eWVzLiYjMzQ7IEtWTSwgYW5kIGJ5IGV4dGVuc2lvbiBuZXN0ZWQgVk1YLCB0aHJvdWdoIGAvZGV2L2t2bWAsIGlzIGFscmVhZHkgYSBwcmltZSB0YXJnZXQgZm9yIHN5emthbGxlciYjMzk7cyBmdXp6aW5nLiAgVGhlcmVmb3JlIEkgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgS1ZNIGFuZCBLVk1fSU5URUwgY29uZmlndXJhdGlvbnMgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgc2V0IHVwIHRvIGV4cGxvcmUgdGhpcyBwb3RlbnRpYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTIwPWNvbmZpZyBLVk1fWDg2XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTpcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyLVx0c2VsZWN0IEtWTV9DT01NT05cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz04Mz1jb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwOTogICAgICAgIGRlcGVuZHMgb24gS1ZNX0lOVEVMIFx1MDAyNlx1MDAyNiBFWFBFUlRcbmFyY2gveDg2L2t2bS9LY29uZmlnLTExMC0gICAgICAgIGhlbHBcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMjMtXHRib29sIFwmIzM0O1NvZnR3YXJlIEd1YXJkIGVYdGVuc2lvbnMgKFNHWCkgVmlydHVhbGl6YXRpb25cJiMzNDtcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEyNDpcdGRlcGVuZHMgb24gWDg2X1NHWCBcdTAwMjZcdTAwMjYgS1ZNX0lOVEVMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMjUtXHRoZWxwXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU9MjE9a3ZtLWludGVsLSQoQ09ORklHX0tWTV9IWVBFUlYpXHQmIzQzOz0gdm14L2h5cGVydi5vIHZteC9oeXBlcnZfZXZtY3Mub1xuYXJjaC94ODYva3ZtL01ha2VmaWxlOjIyOmt2bS1pbnRlbC0kKENPTkZJR19LVk1fSU5URUxfVERYKVx0JiM0Mzs9IHZteC90ZHgub1xuYXJjaC94ODYva3ZtL01ha2VmaWxlLTIzLVxuLS1cbmFyY2gveDg2L2t2bS9NYWtlZmlsZT0zNT1vYmotJChDT05GSUdfS1ZNX1g4NilcdCYjNDM7PSBrdm0ub1xuYXJjaC94ODYva3ZtL01ha2VmaWxlOjM2Om9iai0kKENPTkZJR19LVk1fSU5URUwpXHQmIzQzOz0ga3ZtLWludGVsLm9cbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0zNy1vYmotJChDT05GSUdfS1ZNX0FNRClcdCYjNDM7PSBrdm0tYW1kLm9cbi0tXG5hcmNoL3g4Ni9rdm0va3ZtLWFzbS1vZmZzZXRzLmM9MTM9c3RhdGljIHZvaWQgX191c2VkIGNvbW1vbih2b2lkKVxuLS1cbmFyY2gveDg2L2t2bS9rdm0tYXNtLW9mZnNldHMuYy0yNC1cbmFyY2gveDg2L2t2bS9rdm0tYXNtLW9mZnNldHMuYzoyNTpcdGlmIChJU19FTkFCTEVEKENPTkZJR19LVk1fSU5URUwpKSB7XG5hcmNoL3g4Ni9rdm0va3ZtLWFzbS1vZmZzZXRzLmMtMjYtXHRcdEJMQU5LKCk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaD0zMz1zdHJ1Y3QgdmNwdV92dCB7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaC01Ny1cbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmg6NTg6I2lmZGVmIENPTkZJR19LVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTU5LVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEyLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTM6I2lmZGVmIENPTkZJR19LVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xNC1zdGF0aWNfYXNzZXJ0KG9mZnNldG9mKHN0cnVjdCB2Y3B1X3ZteCwgdnQpID09IG9mZnNldG9mKHN0cnVjdCB2Y3B1X3RkeCwgdnQpKTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz04NjM9c3RhdGljIGludCB2dF9nbWVtX21heF9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbixcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04NzMtI2RlZmluZSB2dF9vcF90ZHhfb25seShuYW1lKSB2dF8jI25hbWVcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjg3NDojZWxzZSAvKiBDT05GSUdfS1ZNX0lOVEVMX1REWCAqL1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODc1LSNkZWZpbmUgdnRfb3AobmFtZSkgdm14XyMjbmFtZVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODc2LSNkZWZpbmUgdnRfb3BfdGR4X29ubHkobmFtZSkgTlVMTFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6ODc3OiNlbmRpZiAvKiBDT05GSUdfS1ZNX0lOVEVMX1REWCAqL1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODc4LVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmgtNi1cbmFyY2gveDg2L2t2bS92bXgvdGR4Lmg6NzojaWZkZWYgQ09ORklHX0tWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS92bXgvdGR4LmgtOC0jaW5jbHVkZSBcJiMzNDtjb21tb24uaFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9OTAyPXZvaWQgdm14X3VwZGF0ZV9leGNlcHRpb25fYml0bWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTkxMS1cdCAqL1xuYXJjaC94ODYva3ZtL3ZteC92bXguYzo5MTI6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfS1ZNX0lOVEVMX1BST1ZFX1ZFKSlcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtOTEzLVx0XHRlYiB8PSAxdSBcdTAwM2NcdTAwM2MgVkVfVkVDVE9SO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9Mjc0Nz1zdGF0aWMgaW50IHNldHVwX3ZtY3NfY29uZmlnKHN0cnVjdCB2bWNzX2NvbmZpZyAqdm1jc19jb25mLFxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtMjc5MC1cdH1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM6Mjc5MTpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfS1ZNX0lOVEVMX1BST1ZFX1ZFKSlcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtMjc5Mi1cdFx0X2NwdV9iYXNlZF8ybmRfZXhlY19jb250cm9sIFx1MDAyNj0gflNFQ09OREFSWV9FWEVDX0VQVF9WSU9MQVRJT05fVkU7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmg9MTI3PXZvaWQgdm14X3NldHVwX21jZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmgtMTI4LVxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmg6MTI5OiNpZmRlZiBDT05GSUdfS1ZNX0lOVEVMX1REWFxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmgtMTMwLXZvaWQgdGR4X2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuaD0zMTA9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGt2bV9yZXF1ZXN0X2wxdGZfZmx1c2hfbDFkKHZvaWQpXG5hcmNoL3g4Ni9rdm0veDg2LmgtMzExLXtcbmFyY2gveDg2L2t2bS94ODYuaDozMTI6I2lmIElTX0VOQUJMRUQoQ09ORklHX0NQVV9NSVRJR0FUSU9OUykgXHUwMDI2XHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0tWTV9JTlRFTClcbmFyY2gveDg2L2t2bS94ODYuaC0zMTMtXHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3ODYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktjb25maWcgRGl2ZSBmb3IgS1ZNICZhbXA7IEtWTV9JTlRFTCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgc29tZXRoaW5nIGFib3V0IHRoZSBLVk0gY29uZmlndXJhdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8ganVtcCBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZXMgYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggYEtWTWAgYW5kLCBzcGVjaWZpY2FsbHksIGBLVk1fSU5URUxgLiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgZm9yIGEgZGVwZW5kZW5jeSBvciBhIGRlZmF1bHQgc2V0dGluZyB0aGF0IEkgdmFndWVseSByZWNhbGwsIG1heWJlIGEgY29uZGl0aW9uYWwgYnVpbGQsIG9yIGEgc3BlY2lmaWMgZmVhdHVyZSBnYXRlIHRoYXQgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC4gS25vd2luZyB3aGVyZSB0aG9zZSBhcmUgZGVmaW5lZCB3aWxsIGVpdGhlciBjb25maXJtIG15IHN1c3BpY2lvbnMgb3IgaW1tZWRpYXRlbHkgc2hvdyBtZSB3aGVyZSB0byBiZWdpbiB0cm91Ymxlc2hvb3RpbmcuIEl0JiMzOTtzIGEgcXVpY2sgd2F5IHRvIGJhc2VsaW5lIHRoZSBleHBlY3RlZCBiZWhhdmlvciBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGEgY3JpdGljYWwgZGV0YWlsIHJlbGF0ZWQgdG8gdGhlIGhhcmR3YXJlIG9yIHRoZSBrZXJuZWwgdmVyc2lvbiBJJiMzOTttIGRlYWxpbmcgd2l0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAxNTpcdFxuICAxNjpcdFx0ICBJZiB5b3Ugc2F5IE4sIGFsbCBvcHRpb25zIGluIHRoaXMgc3VibWVudSB3aWxsIGJlIHNraXBwZWQgYW5kIGRpc2FibGVkLlxuICAxNzpcdFxuICAxODpcdGlmIFZJUlRVQUxJWkFUSU9OXG4gIDE5Olx0XG4gIDIwOlx0Y29uZmlnIEtWTV9YODZcbiAgMjE6XHRcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcbiAgMjI6XHRcdHNlbGVjdCBLVk1fQ09NTU9OXG4gIDIzOlx0XHRzZWxlY3QgS1ZNX0VMSURFX1RMQl9GTFVTSF9JRl9ZT1VOR1xuICAyNDpcdFx0c2VsZWN0IEtWTV9NTVVfTE9DS0xFU1NfQUdJTkdcbiAgMjU6XHRcdHNlbGVjdCBIQVZFX0tWTV9JUlFDSElQXG4gIDI2Olx0XHRzZWxlY3QgSEFWRV9LVk1fUEZOQ0FDSEVcbiAgMjc6XHRcdHNlbGVjdCBIQVZFX0tWTV9ESVJUWV9SSU5HX1RTT1xuICAyODpcdFx0c2VsZWN0IEhBVkVfS1ZNX0RJUlRZX1JJTkdfQUNRX1JFTFxuICAyOTpcdFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9CWVBBU1NcbiAgMzA6XHRcdHNlbGVjdCBIQVZFX0tWTV9JUlFfUk9VVElOR1xuICAzMTpcdFx0c2VsZWN0IEhBVkVfS1ZNX1JFQURPTkxZX01FTVxuICAzMjpcdFx0c2VsZWN0IFZIT1NUX1RBU0tcbiAgMzM6XHRcdHNlbGVjdCBLVk1fQVNZTkNfUEZcbiAgMzQ6XHRcdHNlbGVjdCBVU0VSX1JFVFVSTl9OT1RJRklFUlxuICAzNTpcdFx0c2VsZWN0IEtWTV9NTUlPXG4gIDM2Olx0XHRzZWxlY3QgU0NIRURfSU5GT1xuICAzNzpcdFx0c2VsZWN0IFBFUkZfRVZFTlRTXG4gIDM4Olx0XHRzZWxlY3QgR1VFU1RfUEVSRl9FVkVOVFNcbiAgMzk6XHRcdHNlbGVjdCBQRVJGX0dVRVNUX01FRElBVEVEX1BNVVxuICA0MDpcdFx0c2VsZWN0IEhBVkVfS1ZNX01TSVxuICA0MTpcdFx0c2VsZWN0IEhBVkVfS1ZNX0NQVV9SRUxBWF9JTlRFUkNFUFRcbiAgNDI6XHRcdHNlbGVjdCBIQVZFX0tWTV9OT19QT0xMXG4gIDQzOlx0XHRzZWxlY3QgVklSVF9YRkVSX1RPX0dVRVNUX1dPUktcbiAgNDQ6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1RcbiAgNDU6XHRcdHNlbGVjdCBLVk1fVkZJT1xuICA0NjpcdFx0c2VsZWN0IEhBVkVfS1ZNX1BNX05PVElGSUVSIGlmIFBNXG4gIDQ3Olx0XHRzZWxlY3QgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkdcbiAgNDg6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXG4gIDQ5Olx0XHRzZWxlY3QgS1ZNX1dFUlJPUiBpZiBXRVJST1JcbiAgNTA6XHRcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkQgaWYgWDg2XzY0XG4gIDUxOlx0XG4gIDUyOlx0Y29uZmlnIEtWTVxuICA1MzpcdFx0dHJpc3RhdGUgXCYjMzQ7S2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XCYjMzQ7XG4gIDU0Olx0XHRkZXBlbmRzIG9uIFg4Nl9MT0NBTF9BUElDXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY0MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgTGFuZHNjYXBlIG9mIGBfX25lc3RlZF92bXhfdm1leGl0YCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBgX19uZXN0ZWRfdm14X3ZtZXhpdGAgZnVuY3Rpb24uIEkgd2FudCB0byBzZWUgYSBmdWxsIHBpY3R1cmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doZXJlIGRvZXMgdGhpcyB0aGluZyBsaXZlIGluIHRoZSBjb2RlPyYjMzQ7IEkgbmVlZCBhIGNvbXByZWhlbnNpdmUgb3ZlcnZpZXcgb2YgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byBvdGhlciBjb21wb25lbnRzIHdpdGhpbiB0aGUgc3lzdGVtLgoKRmlyc3QgdGhpbmdzIGZpcnN0LCBJJiMzOTttIGdvaW5nIHRvIHRyYWNrIGRvd24gZXZlcnkgaW5zdGFuY2Ugd2hlcmUgYF9fbmVzdGVkX3ZteF92bWV4aXRgIGlzIGNhbGxlZC4gVGhhdCBtZWFucyBkaXZpbmcgaW50byB0aGUgY2FsbCBncmFwaCwgZmluZGluZyBhbGwgdGhlIGNhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbi4gSSBuZWVkIHRvIGlkZW50aWZ5IGJvdGggdGhlIGRpcmVjdCBjYWxscyBhbmQgYW55dGhpbmcgdGhhdCBtaWdodCBiZSBpbmRpcmVjdC4KClNlY29uZCwgSSBuZWVkIHRvIGxvb2sgYXQgYW55IHN5bWJvbCByZWxhdGluZyB0byB0aGUgc2FtZSB0b3BpYyB0aGF0JiMzOTtzICpub3QqIHN0YXRpYywgc28gSSBnZXQgYSBoYW5kbGUgb24gdGhlIGZ1bmN0aW9uJiMzOTtzIHNjb3BlLiBUaGlzIGlzIGNydWNpYWwgZm9yIGZ1bGx5IGdyYXNwaW5nIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4gSSYjMzk7bSBhZnRlciBhIGNsZWFyIG1hcCBvZiBhbGwgdGhlIHBvaW50cyBvZiBpbnRlcmFjdGlvbiwgc28gSSBjYW4gcHJlZGljdCBpdHMgYmVoYXZpb3IgYW5kIGFueSBwb3RlbnRpYWwgcGl0ZmFsbHMuIFRoaXMgY291bGQgZXhwb3NlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX25lc3RlZF92bXhfdm1leGl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NDk2MD1zdGF0aWMgdm9pZCBuZXN0ZWRfdm14X3Jlc3RvcmVfaG9zdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01MDcyLSAqL1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1MDczOnZvaWQgX19uZXN0ZWRfdm14X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2bV9leGl0X3JlYXNvbixcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTA3NC1cdFx0XHQgdTMyIGV4aXRfaW50cl9pbmZvLCB1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbixcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oPTI5PWJvb2wgbmVzdGVkX3ZteF9yZWZsZWN0X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaDozMDp2b2lkIF9fbmVzdGVkX3ZteF92bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdm1fZXhpdF9yZWFzb24sXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oLTMxLVx0XHRcdCB1MzIgZXhpdF9pbnRyX2luZm8sIHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uLFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmg9MzQ9c3RhdGljIGlubGluZSB2b2lkIG5lc3RlZF92bXhfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZtX2V4aXRfcmVhc29uLFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmgtNDUtXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oOjQ2Olx0X19uZXN0ZWRfdm14X3ZtZXhpdCh2Y3B1LCB2bV9leGl0X3JlYXNvbiwgZXhpdF9pbnRyX2luZm8sXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oLTQ3LVx0XHRcdCAgICBleGl0X3F1YWxpZmljYXRpb24sIGV4aXRfaW5zbl9sZW4pO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9ODE5MD1pbnQgdm14X2NoZWNrX2ludGVyY2VwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYy04MjgwLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo4MjgxOlx0X19uZXN0ZWRfdm14X3ZtZXhpdCh2Y3B1LCB2bV9leGl0X3JlYXNvbiwgMCwgZXhpdF9xdWFsaWZpY2F0aW9uLFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy04MjgyLVx0XHRcdCAgICBleGl0X2luc25fbGVuKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU0OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgdGhlIGBuZXN0ZWRfdm14X3ZtZXhpdGAgQ2FsbCBHcmFwaCBhbmQgUG90ZW50aWFsIEVycm9yIENvbmRpdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBgbmVzdGVkX3ZteF92bWV4aXRgIGlzIHVzZWQgd2l0aGluIHRoaXMgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGNvbnRleHQuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl04oCZcyBxdWl0ZSBjZW50cmFsIHRvIHRoZSB3aG9sZSB0aGluZy4gSSBzZWUgdGhhdCBgbmVzdGVkX3ZteF92bWV4aXRgIGlzLCBpbiBlc3NlbmNlLCB0aGUgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIFZNIGV4aXRzIHdoZW4gcnVubmluZyBuZXN0ZWQgVk1zLiBJdCBzZWVtcyB0byBiZSB0aGUgcHJpbWFyeSBoYW5kbGVyLiBJIGNhbiBzZWUgdGhhdCBgbmVzdGVkX3ZteF92bWV4aXRgIGdldHMgY2FsbGVkIGJ5IGBuZXN0ZWRfdm14X3ZtZXhpdGAgaXRzZWxmICh3aGljaCBpcyBsaWtlbHkgcmVsYXRlZCB0byByZWN1cnNpb24gb3IgbmVzdGVkIGV4aXRzIHdpdGhpbiBuZXN0ZWQgVk1zKSBhbmQgYWxzbyBhY3Jvc3MgYG5lc3RlZC5jYCBhbmQgYHZteC5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UgYXMgdGhlc2UgYXJlIGtleSBtb2R1bGVzIGZvciBuZXN0ZWQgVk1YIG9wZXJhdGlvbi4gSW1wb3J0YW50bHksIGl0JiMzOTtzIGFsc28gY2FsbGVkIGRpcmVjdGx5IGJ5IGB2bXhfY2hlY2tfaW50ZXJjZXB0YCwgcHJvYmFibHkgd2hlbiBjaGVja2luZyBmb3Igc3BlY2lmaWMgZXZlbnRzIHRoZSBndWVzdCBzaG91bGQgaGF2ZSBpbnRlcmNlcHRlZCBieSBkZWZhdWx0LCBhbmQgZHVyaW5nIGZvcmNlZCBleGl0cy4KCk5vdywgbXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdW5kZXJzdGFuZGluZyAqYWxsKiB0aGUgZW50cnkgcG9pbnRzIGludG8gdGhpcyBoYW5kbGVyIGFuZCBhbnkgcG90ZW50aWFsIGZhaWx1cmUgbW9kZXMuIEkgbmVlZCB0byBzcGVjaWZpY2FsbHkgdHJhY2UgYmFjayBhbGwgb2YgdGhlIGNhbGxlcnMgb2YgYG5lc3RlZF92bXhfdm1leGl0YCAod2hpY2ggbWF5IGluY2x1ZGUgbG9va2luZyBmb3IgY3Jvc3MtY2FsbHMpIG9yIGxvb2sgZm9yIHNpdHVhdGlvbnMgd2hlcmUgYHZtX2V4aXRfcmVhc29uID09IC0xYCBtaWdodCBiZSBwYXNzZWQuIFRoYXQgdmFsdWUgbG9va3MgbGlrZSBhbiB1bmluaXRpYWxpemVkIG9yIGVycm9yIHN0YXRlLiBUaGUgZmlyc3Qgc3RlcCB3aWxsIGJlIHRvIGNvbmZpcm0gdGhpcyBoeXBvdGhlc2lzOiBpZiBgLTFgIGlzIHBhc3NlZCBhdCBhbiBleGl0LCBpdOKAmXMgYWxtb3N0IGNlcnRhaW5seSBhbiBlcnJvciwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBwYXRoIHRoYXQgcmVzdWx0ZWQgaW4gdGhhdCBjb25kaXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25lc3RlZF92bXhfdm1leGl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmM9MjI3PXZvaWQgdm14X2h2X2luamVjdF9zeW50aGV0aWNfdm1leGl0X3Bvc3RfdGxiX2ZsdXNoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmMtMjI4LXtcbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmM6MjI5Olx0bmVzdGVkX3ZteF92bWV4aXQodmNwdSwgSFZfVk1YX1NZTlRIRVRJQ19FWElUX1JFQVNPTl9UUkFQX0FGVEVSX0ZMVVNILCAwLCAwKTtcbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmMtMjMwLX1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTQyMT1zdGF0aWMgdm9pZCBuZXN0ZWRfZXB0X2luamVjdF9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQ5Mi1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NDkzOlx0bmVzdGVkX3ZteF92bWV4aXQodmNwdSwgdm1fZXhpdF9yZWFzb24sIDAsIGV4aXRfcXVhbGlmaWNhdGlvbik7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQ5NC1cdHZtY3MxMi1cdTAwM2VndWVzdF9waHlzaWNhbF9hZGRyZXNzID0gZmF1bHQtXHUwMDNlYWRkcmVzcztcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTM2Mjk9ZW51bSBudm14X3ZtZW50cnlfc3RhdHVzIG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNzM3LVx0ICogRG8gbm90IHN0YXJ0IHRoZSBwcmVlbXB0aW9uIHRpbWVyIGhydGltZXIgdW50aWwgYWZ0ZXIgd2Uga25vd1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozNzM4Olx0ICogd2UgYXJlIHN1Y2Nlc3NmdWwsIHNvIHRoYXQgb25seSBuZXN0ZWRfdm14X3ZtZXhpdCBuZWVkcyB0byBjYW5jZWxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzczOS1cdCAqIHRoZSB0aW1lci5cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM3NTAtXHQgKiByZXR1cm5lZCBhcyBmYXIgYXMgTDEgaXMgY29uY2VybmVkLiBJdCB3aWxsIG9ubHkgcmV0dXJuIChhbmQgc2V0XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjM3NTE6XHQgKiB0aGUgc3VjY2VzcyBmbGFnKSB3aGVuIEwyIGV4aXRzIChzZWUgbmVzdGVkX3ZteF92bWV4aXQoKSkuXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM3NTItXHQgKi9cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTQwNzI9c3RhdGljIHZvaWQgbmVzdGVkX3ZteF9pbmplY3RfZXhjZXB0aW9uX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy00MTE4LVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo0MTE5Olx0bmVzdGVkX3ZteF92bWV4aXQodmNwdSwgRVhJVF9SRUFTT05fRVhDRVBUSU9OX05NSSwgaW50cl9pbmZvLCBleGl0X3F1YWwpO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy00MTIwLX1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTQzMDU9c3RhdGljIGludCB2bXhfY2hlY2tfbmVzdGVkX2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy00MzQyLVx0XHRpZiAodmNwdS1cdTAwM2VhcmNoLm1wX3N0YXRlICE9IEtWTV9NUF9TVEFURV9JTklUX1JFQ0VJVkVEKVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo0MzQzOlx0XHRcdG5lc3RlZF92bXhfdm1leGl0KHZjcHUsIEVYSVRfUkVBU09OX0lOSVRfU0lHTkFMLCAwLCAwKTtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNDM0NC1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQzNTYtXHRcdGlmICh2Y3B1LVx1MDAzZWFyY2gubXBfc3RhdGUgPT0gS1ZNX01QX1NUQVRFX0lOSVRfUkVDRUlWRUQpIHtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NDM1NzpcdFx0XHRuZXN0ZWRfdm14X3ZtZXhpdCh2Y3B1LCBFWElUX1JFQVNPTl9TSVBJX1NJR05BTCwgMCxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNDM1OC1cdFx0XHRcdFx0XHRhcGljLVx1MDAzZXNpcGlfdmVjdG9yIFx1MDAyNiAweEZGVUwpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNDM5My1cdFx0bmVzdGVkX3ZteF91cGRhdGVfcGVuZGluZ19kYmcodmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjQzOTQ6XHRcdG5lc3RlZF92bXhfdm1leGl0KHZjcHUsIEVYSVRfUkVBU09OX01PTklUT1JfVFJBUF9GTEFHLCAwLCAwKTtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNDM5NS1cdFx0cmV0dXJuIDA7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy00NDE0LVx0XHRcdHJldHVybiAtRUJVU1k7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjQ0MTU6XHRcdG5lc3RlZF92bXhfdm1leGl0KHZjcHUsIEVYSVRfUkVBU09OX1BSRUVNUFRJT05fVElNRVIsIDAsIDApO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy00NDE2LVx0XHRyZXR1cm4gMDtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQ0MzAtXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjQ0MzE6XHRcdG5lc3RlZF92bXhfdm1leGl0KHZjcHUsIEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUksXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQ0MzItXHRcdFx0XHQgIE5NSV9WRUNUT1IgfCBJTlRSX1RZUEVfTk1JX0lOVFIgfFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNDQ1Ni1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NDQ1NzpcdFx0XHRuZXN0ZWRfdm14X3ZtZXhpdCh2Y3B1LCBFWElUX1JFQVNPTl9FWFRFUk5BTF9JTlRFUlJVUFQsIDAsIDApO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy00NDU4LVx0XHRcdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNDQ2NS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NDQ2NjpcdFx0XHRuZXN0ZWRfdm14X3ZtZXhpdCh2Y3B1LCBFWElUX1JFQVNPTl9FWFRFUk5BTF9JTlRFUlJVUFQsXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQ0NjctXHRcdFx0XHRcdCAgSU5UUl9JTkZPX1ZBTElEX01BU0sgfCBJTlRSX1RZUEVfRVhUX0lOVFIgfCBpcnEsIDApO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNDUwMS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NDUwMjpcdFx0bmVzdGVkX3ZteF92bWV4aXQodmNwdSwgRVhJVF9SRUFTT05fRVhURVJOQUxfSU5URVJSVVBULFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy00NTAzLVx0XHRcdFx0ICBJTlRSX0lORk9fVkFMSURfTUFTSyB8IElOVFJfVFlQRV9FWFRfSU5UUiB8IGlycSwgMCk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz00OTYwPXN0YXRpYyB2b2lkIG5lc3RlZF92bXhfcmVzdG9yZV9ob3N0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTUwNzItICovXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjUwNzM6dm9pZCBfX25lc3RlZF92bXhfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZtX2V4aXRfcmVhc29uLFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01MDc0LVx0XHRcdCB1MzIgZXhpdF9pbnRyX2luZm8sIHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uLFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTIzOT1zdGF0aWMgdm9pZCBuZXN0ZWRfdm14X3RyaXBsZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01MjQxLVx0a3ZtX2NsZWFyX3JlcXVlc3QoS1ZNX1JFUV9UUklQTEVfRkFVTFQsIHZjcHUpO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1MjQyOlx0bmVzdGVkX3ZteF92bWV4aXQodmNwdSwgRVhJVF9SRUFTT05fVFJJUExFX0ZBVUxULCAwLCAwKTtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTI0My19XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz02MjAwPXN0YXRpYyBpbnQgaGFuZGxlX3ZtZnVuYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02MjQ0LVx0ICovXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjYyNDU6XHRuZXN0ZWRfdm14X3ZtZXhpdCh2Y3B1LCB2bXgtXHUwMDNldnQuZXhpdF9yZWFzb24uZnVsbCxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjI0Ni1cdFx0XHQgIHZteF9nZXRfaW50cl9pbmZvKHZjcHUpLFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NjcwOT1ib29sIG5lc3RlZF92bXhfcmVmbGVjdF92bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjc1Ni1yZWZsZWN0X3ZtZXhpdDpcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Njc1NzpcdG5lc3RlZF92bXhfdm1leGl0KHZjcHUsIGV4aXRfcmVhc29uLmZ1bGwsIGV4aXRfaW50cl9pbmZvLCBleGl0X3F1YWwpO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02NzU4LVx0cmV0dXJuIHRydWU7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz02ODg0PXZvaWQgdm14X2xlYXZlX25lc3RlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02ODg3LVx0XHR2Y3B1LVx1MDAzZWFyY2gubmVzdGVkX3J1bl9wZW5kaW5nID0gMDtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Njg4ODpcdFx0bmVzdGVkX3ZteF92bWV4aXQodmNwdSwgLTEsIDAsIDApO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02ODg5LVx0fVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmg9Mjk9Ym9vbCBuZXN0ZWRfdm14X3JlZmxlY3Rfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oOjMwOnZvaWQgX19uZXN0ZWRfdm14X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2bV9leGl0X3JlYXNvbixcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmgtMzEtXHRcdFx0IHUzMiBleGl0X2ludHJfaW5mbywgdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24sXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaC0zMy1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmg6MzQ6c3RhdGljIGlubGluZSB2b2lkIG5lc3RlZF92bXhfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZtX2V4aXRfcmVhc29uLFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaC0zNS1cdFx0XHRcdCAgICAgdTMyIGV4aXRfaW50cl9pbmZvLFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmgtNDUtXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oOjQ2Olx0X19uZXN0ZWRfdm14X3ZtZXhpdCh2Y3B1LCB2bV9leGl0X3JlYXNvbiwgZXhpdF9pbnRyX2luZm8sXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oLTQ3LVx0XHRcdCAgICBleGl0X3F1YWxpZmljYXRpb24sIGV4aXRfaW5zbl9sZW4pO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NjcwOD1zdGF0aWMgaW50IF9fdm14X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjc3MC1cdFx0aWYgKHZteC1cdTAwM2V2dC5lbXVsYXRpb25fcmVxdWlyZWQpIHtcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6Njc3MTpcdFx0XHRuZXN0ZWRfdm14X3ZtZXhpdCh2Y3B1LCBFWElUX1JFQVNPTl9UUklQTEVfRkFVTFQsIDAsIDApO1xuYXJjaC94ODYva3ZtL3ZteC92bXguYy02NzcyLVx0XHRcdHJldHVybiAxO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9ODE5MD1pbnQgdm14X2NoZWNrX2ludGVyY2VwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYy04MjgwLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo4MjgxOlx0X19uZXN0ZWRfdm14X3ZtZXhpdCh2Y3B1LCB2bV9leGl0X3JlYXNvbiwgMCwgZXhpdF9xdWFsaWZpY2F0aW9uLFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy04MjgyLVx0XHRcdCAgICBleGl0X2luc25fbGVuKTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTg0ODI9aW50IHZteF9lbnRlcl9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODQ5NC1cdGlmICh2bXgtXHUwMDNlbmVzdGVkLnNtbS5ndWVzdF9tb2RlKVxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo4NDk1Olx0XHRuZXN0ZWRfdm14X3ZtZXhpdCh2Y3B1LCAtMSwgMCwgMCk7XG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTg0OTYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzA4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNTczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBLVk0gVnVsbmVyYWJpbGl0eSBQYXRjaCoqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSBzZWVpbmcuIFRoaXMgcGF0Y2ggaXMgbWFraW5nIGEgdGFyZ2V0ZWQgY2hhbmdlIHdpdGhpbiB0aGUgS1ZNIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gYGFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNgLiAgSXQmIzM5O3MgYSBzdWJ0bGUgYnV0IHBvdGVudGlhbGx5IGltcG9ydGFudCBtb2RpZmljYXRpb24gdG8gdGhlIGBfX25lc3RlZF92bXhfdm1leGl0YCBmdW5jdGlvbi4gVGhlIG9yaWdpbmFsIGNvZGUgdW5jb25kaXRpb25hbGx5IGNhbGxlZCBgbmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyKHZjcHUsIHZtY3MxMilgIGFmdGVyIGNlcnRhaW4gY2hlY2tzIHJlbGF0ZWQgdG8gdGhlIGB2bV9leGl0X3JlYXNvbmAuICBUaGUgcGF0Y2ggY29uZGl0aW9uYWxpemVzIHRoaXMgY2FsbCwgbm93IG9ubHkgZXhlY3V0aW5nIGBuZXN0ZWRfZmx1c2hfY2FjaGVkX3NoYWRvd192bWNzMTJgIGlmIGB2bV9leGl0X3JlYXNvbmAgaXNuJiMzOTt0IC0xLiBUaGUgaW50ZXJlc3RpbmcgdGhpbmcgaXMgdGhhdCAgYHZteF9sZWF2ZV9uZXN0ZWQodmNwdSlgIGFuZCBgdm14X2VudGVyX3NtbSh2Y3B1LCBzbXJhbSlgIGJvdGggbGVhZCB0byBhIGNhbGwgdG8gYG5lc3RlZF92bXhfdm1leGl0YCB3aXRoIGB2bV9leGl0X3JlYXNvbmAgc2V0IHRvIC0xLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCB0aGlzIGNoYW5nZSAqY291bGQqIGJlIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBpc3N1ZSBpbiBob3cgdGhlIHNoYWRvdyBWTUNTMTIgaXMgaGFuZGxlZCBkdXJpbmcgdGhlc2Ugc3BlY2lmaWMgZXhpdHMuICBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIGNvbmRpdGlvbmFsIG5vdyBtYWtlcyBtZSB3b25kZXIgYWJvdXQgc29tZSBjb3JuZXIgY2FzZSBvciByYWNlIGNvbmRpdGlvbi4gIEl0JiMzOTtzIHZlcnkgbGlrZWx5IGV4ZWN1dGFibGUsIGFzIGl0IHRvdWNoZXMgdGhlIGNvcmUgb2YgS1ZNJiMzOTtzIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBpbXBsZW1lbnRhdGlvbiwgc29tZXRoaW5nIGFjdGl2ZWx5IHVzZWQgaW4gcHJvZHVjdGlvbiBlbnZpcm9ubWVudHMuICBTcGVjaWZpY2FsbHksIGl0IGRlYWxzIHdpdGggYHZteF9sZWF2ZV9uZXN0ZWRgIGFuZCBgdm14X2VudGVyX3NtbWAsIHR3byB2ZXJ5IGludGVyZXN0aW5nIGFyZWFzLgoKR2l2ZW4gbXkgZmllbGQsIFN5emthbGxlciYjMzk7cyBmdXp6aW5nIGZvY3VzIG9uIHRoaXMgYXJlYSBpcyBwYXJ0aWN1bGFybHkgcmVsZXZhbnQuICBJdCBleHRlbnNpdmVseSB0ZXN0cyBLVk0mIzM5O3MgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGZlYXR1cmVzLCBpbmNsdWRpbmcgYEtWTV9SVU5gLCBzdGF0ZSBtYW5hZ2VtZW50LCBhbmQgdGhlIGV4ZWN1dGlvbiBvZiBWTVggaW5zdHJ1Y3Rpb25zIGxpa2UgVk1MQVVOQ0gsIFZNUkVTVU1FLCBWTVdSSVRFIGFuZCBWTVJFQUQuIFRoZSBzcGVjaWZpZWQgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgKGBLVk1gIGFuZCBgS1ZNX0lOVEVMYCkgYXJlIGFsc28gbWV0LiBUaGUgbGlzdGVkIGZ1bmN0aW9ucywgbmFtZWx5IGBfX25lc3RlZF92bXhfdm1leGl0YCwgYG5lc3RlZF9mbHVzaF9jYWNoZWRfc2hhZG93X3ZtY3MxMmAsIGB2bXhfbGVhdmVfbmVzdGVkYCwgYW5kIGB2bXhfZW50ZXJfc21tYCwgbWFrZSBmb3IgZ3JlYXQgZm9jdXNlZCBmdXp6IHRhcmdldHMuIE5vdywgbGV0IG1lIGNoZWNrIGlmIGBuZXN0ZWRfZmx1c2hfY2FjaGVkX3NoYWRvd192bWNzMTJgIGlzIHN0YXRpYyBvciBub24tc3RhdGljIHdpdGhpbiBgYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY2AuIFRoYXQgd2lsbCBoZWxwIGRldGVybWluZSBob3cgcmVhY2hhYmxlIHRoaXMgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25lc3RlZF9mbHVzaF9jYWNoZWRfc2hhZG93X3ZtY3MxMiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTg1MT1zdGF0aWMgdm9pZCBuZXN0ZWRfY2FjaGVfc2hhZG93X3ZtY3MxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy04NjktXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjg3MDpzdGF0aWMgdm9pZCBuZXN0ZWRfZmx1c2hfY2FjaGVkX3NoYWRvd192bWNzMTIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy04NzEtXHRcdFx0XHRcdCAgICAgIHN0cnVjdCB2bWNzMTIgKnZtY3MxMilcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTUwNzM9dm9pZCBfX25lc3RlZF92bXhfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZtX2V4aXRfcmVhc29uLFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTE0My1cdFx0XHQgKi9cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTE0NDpcdFx0XHRuZXN0ZWRfZmx1c2hfY2FjaGVkX3NoYWRvd192bWNzMTIodmNwdSwgdm1jczEyKTtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTE0NS1cdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc0OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgSSBhbmFseXplIHRoaXM6CgoqKkFuYWx5emluZyBLVk0tSW50ZWwgTmVzdGluZyBhbmQgRXhpdCBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHNvbWUgS1ZNLUludGVsIGNvZGUgYW5kIEkmIzM5O3ZlIGdvdCBhIGZldyBrZXkgZnVuY3Rpb25zIGluIG1pbmQuIGBfX25lc3RlZF92bXhfdm1leGl0YCBpcyB0aGUgYmlnIG9uZSwgaXQmIzM5O3MgZ2xvYmFsLCBzbyBpdCYjMzk7cyBhIGNyaXRpY2FsIGVudHJ5IHBvaW50IGZvciBuZXN0ZWQgdmlydHVhbGl6YXRpb24gVk0gZXhpdHMgd2l0aGluIHRoZSBrdm0taW50ZWwgbW9kdWxlLiBUaGF0IG1lYW5zIGl0IGlzIHRoZSBmdW5jdGlvbiB0aGF0IHRoZSBuZXN0ZWQgVk0gdXNlcyB0byByZXR1cm4gY29udHJvbCB0byB0aGUgaG9zdC4KCk5vdywgSSYjMzk7bSB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGFyb3VuZCBpdC4gSSBzZWUgdGhhdCBgdm14X2xlYXZlX25lc3RlZGAgaXMgYW5vdGhlciBmdW5jdGlvbiB0aGF0IGlzbiYjMzk7dCBzdGF0aWMuIFRoYXQgdGVsbHMgbWUgaXQmIzM5O3MgbGlrZWx5IGNhbGxlZCBmcm9tIG91dHNpZGUgdGhlIGZpbGUgb3IgcG9zc2libHkgZXZlbiBhIGRpZmZlcmVudCBtb2R1bGUuIEl0JiMzOTtzIHJlbGF0ZWQgdG8gdGVhcmRvd24sIHJlc2V0cywgb3Igc29tZSBJT0NUTCBoYW5kbGluZyBvZiB0aGUgdkNQVS4gVGhhdCBzdWdnZXN0cyBpdCBtaWdodCBiZSBpbnZvbHZlZCBpbiBjbGVhbmluZyB1cCBhZnRlciBhIG5lc3RlZCBWTS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlbiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgYXJlLgoKVGhlbiB0aGVyZSYjMzk7cyBgdm14X2VudGVyX3NtbWAsIHdoaWNoIGlzIGFsc28gbm9uLXN0YXRpYy4gVGhlIG5hbWUgc3VnZ2VzdHMgdGhpcyBtaWdodCBiZSByZWxhdGVkIHRvIFN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgKFNNTSkuIEkgd29uZGVyIGhvdyB0aGlzIHJlbGF0ZXMgdG8gbmVzdGVkIHZpcnR1YWxpemF0aW9uLCBhbmQgaWYgaXQmIzM5O3MgcG90ZW50aWFsbHkgaW50ZXJhY3Rpbmcgd2l0aCBgdm14X2xlYXZlX25lc3RlZGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGFuZCBob3cgdGhhdCBpcyBjYWxsZWQgYXMgd2VsbC4KCk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgd2FudCB0byB0cmFjZSB0aGUgY2FsbHMgdG8gYHZteF9sZWF2ZV9uZXN0ZWRgLiBLbm93aW5nICp3aG8qIGNhbGxzIGl0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGl0cyByb2xlIGluIHRoZSBiaWdnZXIgcGljdHVyZSBvZiBuZXN0ZWQgdmlydHVhbGl6YXRpb24gYW5kIHRoZSB2Q1BVIGxpZmVjeWNsZS4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGUgY29kZSBpcyBzdHJ1Y3R1cmVkIGFyb3VuZCB0aGlzIGZ1bmN0aW9uIHRvIHNlZSB3aGVyZSBpdCBzaXRzIGluIHRoZSBsYXJnZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm14X2xlYXZlX25lc3RlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTM4Nj12b2lkIG5lc3RlZF92bXhfZnJlZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM4OC1cdHZjcHVfbG9hZCh2Y3B1KTtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Mzg5Olx0dm14X2xlYXZlX25lc3RlZCh2Y3B1KTtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzkwLVx0dmNwdV9wdXQodmNwdSk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz02NzYxPXN0YXRpYyBpbnQgdm14X2dldF9uZXN0ZWRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjg4My1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Njg4NDp2b2lkIHZteF9sZWF2ZV9uZXN0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02ODg1LXtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTY5MTU9c3RhdGljIGludCB2bXhfc2V0X25lc3RlZF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02OTg0LVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo2OTg1Olx0dm14X2xlYXZlX25lc3RlZCh2Y3B1KTtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjk4Ni1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTc1MDE9c3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyB2bXhfbmVzdGVkX29wcyBfX2luaXRkYXRhID0ge1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo3NTAyOlx0LmxlYXZlX25lc3RlZCA9IHZteF9sZWF2ZV9uZXN0ZWQsXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTc1MDMtXHQudHJhbnNsYXRlX25lc3RlZF9ncGEgPSB2bXhfdHJhbnNsYXRlX25lc3RlZF9ncGEsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaD0xMz1lbnVtIG52bXhfdm1lbnRyeV9zdGF0dXMge1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmgtMTktXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oOjIwOnZvaWQgdm14X2xlYXZlX25lc3RlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaC0yMS12b2lkIG5lc3RlZF92bXhfc2V0dXBfY3Rsc19tc3JzKHN0cnVjdCB2bWNzX2NvbmZpZyAqdm1jc19jb25mLCB1MzIgZXB0X2NhcHMpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9MjMzNT1pbnQgdm14X3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtMjUwMC1cdFx0aWYgKG1zcl9pbmZvLVx1MDAzZWhvc3RfaW5pdGlhdGVkIFx1MDAyNlx1MDAyNiBkYXRhID09IDApXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjI1MDE6XHRcdFx0dm14X2xlYXZlX25lc3RlZCh2Y3B1KTtcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtMjUwMi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwNTkKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBuZXN0ZWRfZmx1c2hfY2FjaGVkX3NoYWRvd192bWNzMTJgKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBkaXNzZWN0IHRoZSBgbmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyYCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGV4YWN0IGZ1bmN0aW9uLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBhbmQgdGhlIGludHJpY2FjaWVzIG9mIHNoYWRvdyBWTUNTLCBJIGNhbiBhbnRpY2lwYXRlIHdoYXQgaXQmIzM5O3MgbGlrZWx5IHJlc3BvbnNpYmxlIGZvcjogcHJvYmFibHkgZGVhbGluZyB3aXRoIGNhY2hlIGNvaGVyZW5jeSBpc3N1ZXMgcmVsYXRlZCB0byB0aGUgVk1DUzEyLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgbmVzdGVkIHZpcnR1YWwgbWFjaGluZSBwZXJmb3JtYW5jZSBhbmQgY29ycmVjdG5lc3MuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBleHBlY3RpbmcgaXQgd2lsbCBoYW5kbGUgdGhlIHByb2Nlc3MgdG8gaW52YWxpZGF0ZSBvciBzeW5jaHJvbml6ZSBzdGFsZSBWTUNTMTIgZGF0YSB3aGVuIHNvbWUgb3RoZXIgaHlwZXJ2aXNvciBjb21wb25lbnQgaGFzIGNoYW5nZWQgc29tZXRoaW5nIG9yIHBlcmhhcHMgd2hlbiBhIGd1ZXN0IGNoYW5nZXMgYSBWTUNTIGZpZWxkIHJlbGF0ZWQgdG8gdGhlIG5lc3RlZCBoeXBlcnZpc29yLiBUaGlzIGlzIGEgdmVyeSBjcml0aWNhbCBmdW5jdGlvbiBmb3IgZ3VhcmFudGVlaW5nIGNvcnJlY3QgYmVoYXZpb3IgaW4gYSBjb21wbGV4IG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBzeXN0ZW0uIEkmIzM5O2xsIGJlIGxvb2tpbmcgY2xvc2VseSBhdCBob3cgaXQgaGFuZGxlcyB0aGUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgYW5kIHdoYXQgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzIGl0JiMzOTtzIHRvdWNoaW5nLiBJJiMzOTttIGtlZW4gdG8gc3BvdCBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgbHVya2luZyBpbiB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NjA6XHRcbiA4NjE6XHRcdGlmIChnaGMtXHUwMDNlZ3BhICE9IHZtY3MxMi1cdTAwM2V2bWNzX2xpbmtfcG9pbnRlciBcdTAwMjZcdTAwMjZcbiA4NjI6XHRcdCAgICBrdm1fZ2ZuX3RvX2h2YV9jYWNoZV9pbml0KHZjcHUtXHUwMDNla3ZtLCBnaGMsXG4gODYzOlx0XHRcdFx0XHQgICAgICB2bWNzMTItXHUwMDNldm1jc19saW5rX3BvaW50ZXIsIFZNQ1MxMl9TSVpFKSlcbiA4NjQ6XHRcdFx0cmV0dXJuO1xuIDg2NTpcdFxuIDg2NjpcdFx0a3ZtX3JlYWRfZ3Vlc3RfY2FjaGVkKHZjcHUtXHUwMDNla3ZtLCBnaGMsIGdldF9zaGFkb3dfdm1jczEyKHZjcHUpLFxuIDg2NzpcdFx0XHRcdCAgICAgIFZNQ1MxMl9TSVpFKTtcbiA4Njg6XHR9XG4gODY5Olx0XG4gODcwOlx0c3RhdGljIHZvaWQgbmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiA4NzE6XHRcdFx0XHRcdFx0ICAgICAgc3RydWN0IHZtY3MxMiAqdm1jczEyKVxuIDg3MjpcdHtcbiA4NzM6XHRcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xuIDg3NDpcdFx0c3RydWN0IGdmbl90b19odmFfY2FjaGUgKmdoYyA9IFx1MDAyNnZteC1cdTAwM2VuZXN0ZWQuc2hhZG93X3ZtY3MxMl9jYWNoZTtcbiA4NzU6XHRcbiA4NzY6XHRcdGlmICghbmVzdGVkX2NwdV9oYXNfc2hhZG93X3ZtY3Modm1jczEyKSB8fFxuIDg3NzpcdFx0ICAgIHZtY3MxMi1cdTAwM2V2bWNzX2xpbmtfcG9pbnRlciA9PSBJTlZBTElEX0dQQSlcbiA4Nzg6XHRcdFx0cmV0dXJuO1xuIDg3OTpcdFxuIDg4MDpcdFx0aWYgKGdoYy1cdTAwM2VncGEgIT0gdm1jczEyLVx1MDAzZXZtY3NfbGlua19wb2ludGVyIFx1MDAyNlx1MDAyNlxuIDg4MTpcdFx0ICAgIGt2bV9nZm5fdG9faHZhX2NhY2hlX2luaXQodmNwdS1cdTAwM2Vrdm0sIGdoYyxcbiA4ODI6XHRcdFx0XHRcdCAgICAgIHZtY3MxMi1cdTAwM2V2bWNzX2xpbmtfcG9pbnRlciwgVk1DUzEyX1NJWkUpKVxuIDg4MzpcdFx0XHRyZXR1cm47XG4gODg0Olx0XG4gODg1Olx0XHRrdm1fd3JpdGVfZ3Vlc3RfY2FjaGVkKHZjcHUtXHUwMDNla3ZtLCBnaGMsIGdldF9zaGFkb3dfdm1jczEyKHZjcHUpLFxuIDg4NjpcdFx0XHRcdCAgICAgICBWTUNTMTJfU0laRSk7XG4gODg3Olx0fVxuIDg4ODpcdFxuIDg4OTpcdC8qXG4gODkwOlx0ICogSW4gbmVzdGVkIHZpcnR1YWxpemF0aW9uLCBjaGVjayBpZiBMMSBoYXMgc2V0XG4gODkxOlx0ICogVk1fRVhJVF9BQ0tfSU5UUl9PTl9FWElUXG4gODkyOlx0ICovXG4gODkzOlx0c3RhdGljIGJvb2wgbmVzdGVkX2V4aXRfaW50cl9hY2tfc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiA4OTQ6XHR7XG4gODk1Olx0XHRyZXR1cm4gZ2V0X3ZtY3MxMih2Y3B1KS1cdTAwM2V2bV9leGl0X2NvbnRyb2xzIFx1MDAyNlxuIDg5NjpcdFx0XHRWTV9FWElUX0FDS19JTlRSX09OX0VYSVQ7XG4gODk3Olx0fVxuIDg5ODpcdFxuIDg5OTpcdHN0YXRpYyBpbnQgbmVzdGVkX3ZteF9jaGVja19hcGljX2FjY2Vzc19jb250cm9scyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDkyCgkJCQkJCQlvdXRwdXQ6IDE5NwoJCQkJCQkJdGhvdWdodHM6IDQwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgS1ZNIE5lc3RlZCBWTVggUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB0aGUgaW5pdGlhbCBleGFtaW5hdGlvbiwgaXQmIzM5O3MgY2xlYXIgdGhlIHByaW1hcnkgZnVuY3Rpb24gb2YgaW50ZXJlc3QgaXMgYF9fbmVzdGVkX3ZteF92bWV4aXRgLiBJJiMzOTt2ZSBhbHNvIGlkZW50aWZpZWQgc2V2ZXJhbCBvdGhlciByZWxhdGVkIHN5bWJvbHMgdGhhdCBhcmUgbGlrZWx5IGltcGFjdGVkIGJ5IHRoaXMgY2hhbmdlOiBgbmVzdGVkX3ZteF9mcmVlX3ZjcHVgLCBgdm14X2xlYXZlX25lc3RlZGAsIGB2bXhfZW50ZXJfc21tYCwgYW5kIGBuZXN0ZWRfdm14X3JlZmxlY3Rfdm1leGl0YC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUga2V5IHBsYXllcnMgaW4gdGhpcyBuZXN0ZWQgVk1YIGNvbnRleHQuCgpOZXh0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWluIHRoaXMgaW52b2x2ZXMgYENPTkZJR19LVk1gIGFuZCBgQ09ORklHX0tWTV9JTlRFTGAuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgS2J1aWxkIGZpbGVzIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcy4gQWgsIHllcywgaW4gYGFyY2gveDg2L2t2bS9NYWtlZmlsZWAsIHRoZSBpbmNsdXNpb24gb2YgYGt2bS1pbnRlbC5vYCBhbmQgaXRzIG5lc3RlZCBjb21wb25lbnQgYHZteC9uZXN0ZWQub2AgYXJlIGdvdmVybmVkIGJ5IGBDT05GSUdfS1ZNX0lOVEVMYCwgd2hpY2ggaXRzZWxmIGRlcGVuZHMgb24gb3Igc2VsZWN0cyBgS1ZNYC4gU28sIHRoZSBwcmVyZXF1aXNpdGUgY29uZmlndXJhdGlvbnMgYXJlIGRlZmluaXRlbHkgYEtWTWAgYW5kIGBLVk1fSU5URUxgLCBhcyBJIHN1c3BlY3RlZC4KCk5vdywgbGV0JiMzOTtzIHN1bW1hcml6ZSB0aGUgZnV6emluZyBzdHJhdGVneS4gVGhlIGNoYW5nZSB0byBgX19uZXN0ZWRfdm14X3ZtZXhpdCgpYCBhcHBlYXJzIHRvIHNraXAgZmx1c2hpbmcgdGhlIHNoYWRvdyBWTUNTMTIgdW5kZXIgc3BlY2lmaWMgY29uZGl0aW9uczogd2hlbiBgdm1fZXhpdF9yZWFzb24gPT0gLTFgLiBUaGlzIHBhcnRpY3VsYXJseSBoYXBwZW5zIGR1cmluZyB2Q1BVIHRlYXJkb3duIG9yIHdoZW4gZW50ZXJpbmcgU01NIChTeXN0ZW0gTWFuYWdlbWVudCBNb2RlKS4gVGhlIGNvcmUgY29uY2VybiBpcyB0byBhdm9pZCBtZW1vcnkgY29ycnVwdGlvbiwgcGFydGljdWxhcmx5IHdoZW4gYGN1cnJlbnQtJmd0O21tYCBpcyBOVUxMLiBUaGlzIHBvaW50cyB0byBhIHZ1bG5lcmFiaWxpdHkgd2l0aGluIGNvcmUgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGxvZ2ljIG9uIHg4Ni9hbWQ2NC4gU28sIGl0IGRlZmluaXRlbHkgd2FycmFudHMgZnV6emluZy4KCk15IGNvbmNsdXNpb246IGdpdmVuIHRoZSBwYXRjaCYjMzk7cyBmb2N1cyBvbiBhIGNyaXRpY2FsIGFyZWEgb2YgbmVzdGVkIFZNWCwgd2l0aCBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gd2hlbiBzcGVjaWZpYyBjb25kaXRpb25zIChsaWtlIHZDUFUgdGVhcmRvd24pIG9jY3VyLCBmdXp6aW5nIGlzIGFuIGVmZmVjdGl2ZSBzdHJhdGVneS4gSXQmIzM5O3MgYSBoaWdoLWltcGFjdCBhcmVhIGFuZCB3b3J0aCBmb2N1c2luZyBvbi4gTGV0JiMzOTtzIHNldCB0aGUgcmVzdWx0cyBhbmQgbW92ZSBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fbmVzdGVkX3ZteF92bWV4aXQmIzM0OywKICAgICYjMzQ7dm14X2xlYXZlX25lc3RlZCYjMzQ7LAogICAgJiMzNDt2bXhfZW50ZXJfc21tJiMzNDssCiAgICAmIzM0O25lc3RlZF92bXhfcmVmbGVjdF92bWV4aXQmIzM0OywKICAgICYjMzQ7bmVzdGVkX3ZteF9mcmVlX3ZjcHUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgX19uZXN0ZWRfdm14X3ZtZXhpdCgpIGluIEtWTSBuZXN0ZWQgVk1YIHN1cHBvcnQgKGFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMpIHRvIHByZXZlbnQgZmx1c2hpbmcgY2FjaGVkIHNoYWRvdyBWTUNTMTIgd2hlbiBwZXJmb3JtaW5nIGEgZm9yY2VkIG5lc3RlZCBWTS1leGl0ICh2bV9leGl0X3JlYXNvbiA9PSAtMSwgZS5nLiBkdXJpbmcgdkNQVSB0ZWFyZG93biBvciBTTU0gZW50cnkpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMgaW4gY29yZSBLVk0gdmlydHVhbGl6YXRpb24gYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSBvbiBhbWQ2NCwgd2FycmFudGluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19uZXN0ZWRfdm14X3ZtZXhpdCYjMzQ7LAogICAgJiMzNDt2bXhfbGVhdmVfbmVzdGVkJiMzNDssCiAgICAmIzM0O3ZteF9lbnRlcl9zbW0mIzM0OywKICAgICYjMzQ7bmVzdGVkX3ZteF9yZWZsZWN0X3ZtZXhpdCYjMzQ7LAogICAgJiMzNDtuZXN0ZWRfdm14X2ZyZWVfdmNwdSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBfX25lc3RlZF92bXhfdm1leGl0KCkgaW4gS1ZNIG5lc3RlZCBWTVggc3VwcG9ydCAoYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYykgdG8gcHJldmVudCBmbHVzaGluZyBjYWNoZWQgc2hhZG93IFZNQ1MxMiB3aGVuIHBlcmZvcm1pbmcgYSBmb3JjZWQgbmVzdGVkIFZNLWV4aXQgKHZtX2V4aXRfcmVhc29uID09IC0xLCBlLmcuIGR1cmluZyB2Q1BVIHRlYXJkb3duIG9yIFNNTSBlbnRyeSkuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocyBpbiBjb3JlIEtWTSB2aXJ0dWFsaXphdGlvbiBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIG9uIGFtZDY0LCB3YXJyYW50aW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjEwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6MTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBuZXN0ZWQgVk1YIFZNLWV4aXQgaGFuZGxpbmcgaW4gS1ZNIChgX19uZXN0ZWRfdm14X3ZtZXhpdGApIHRvIHNraXAgY2FsbGluZyBgbmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyKClgIHdoZW4gYHZtX2V4aXRfcmVhc29uID09IC0xYCAoZS5nLiwgZHVyaW5nIHZDUFUgdGVhcmRvd24gb3IgU01NIGVudHJ5KS4gVGhpcyBwcmV2ZW50cyBpbGxlZ2FsIGd1ZXN0IG1lbW9yeSB3cml0ZXMgb24gYm9ycm93ZWQgbGF6eSBUTEIgbW0gY29udGV4dHMgZHVyaW5nIHRlYXJkb3duLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgYnVmZmVycywgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciBsZWFrIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gU3RhbmRhcmQgS0FTQU4gYW5kIGdlbmVyYWwga2VybmVsIGRlYnVnZ2luZyB0b29scyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGMyNGMzOTg2ZDRkNTVkMDBlODA3MTY0OTNiYmMxMDlkM2FhYjZjMTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDE2OjA5OjQxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMKaW5kZXggMTUxODczNDA3YWJkMy4uMzNkYzhhMDcwMTlmOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jCkBAIC01MTIxLDIxICYjNDM7NTEyMSwyOCBAQCB2b2lkIF9fbmVzdGVkX3ZteF92bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdm1fZXhpdF9yZWFzb24sCiAJaWYgKGxpa2VseSghdm14LSZndDtmYWlsKSkgewogCQlzeW5jX3ZtY3MwMl90b192bWNzMTIodmNwdSwgdm1jczEyKTsKIAotCQlpZiAodm1fZXhpdF9yZWFzb24gIT0gLTEpCiYjNDM7CQlpZiAodm1fZXhpdF9yZWFzb24gIT0gLTEpIHsKIAkJCXByZXBhcmVfdm1jczEyKHZjcHUsIHZtY3MxMiwgdm1fZXhpdF9yZWFzb24sCiAJCQkJICAgICAgIGV4aXRfaW50cl9pbmZvLCBleGl0X3F1YWxpZmljYXRpb24sCiAJCQkJICAgICAgIGV4aXRfaW5zbl9sZW4pOwogCi0JCS8qCi0JCSAqIE11c3QgaGFwcGVuIG91dHNpZGUgb2Ygc3luY192bWNzMDJfdG9fdm1jczEyKCkgYXMgaXQgd2lsbAotCQkgKiBhbHNvIGJlIHVzZWQgdG8gY2FwdHVyZSB2bWNzMTIgY2FjaGUgYXMgcGFydCBvZgotCQkgKiBjYXB0dXJpbmcgblZNWCBzdGF0ZSBmb3Igc25hcHNob3QgKG1pZ3JhdGlvbikuCi0JCSAqCi0JCSAqIE90aGVyd2lzZSwgdGhpcyBmbHVzaCB3aWxsIGRpcnR5IGd1ZXN0IG1lbW9yeSBhdCBhCi0JCSAqIHBvaW50IGl0IGlzIGFscmVhZHkgYXNzdW1lZCBieSB1c2VyLXNwYWNlIHRvIGJlCi0JCSAqIGltbXV0YWJsZS4KLQkJICovCi0JCW5lc3RlZF9mbHVzaF9jYWNoZWRfc2hhZG93X3ZtY3MxMih2Y3B1LCB2bWNzMTIpOwomIzQzOwkJCS8qCiYjNDM7CQkJICogTXVzdCBoYXBwZW4gb3V0c2lkZSBvZiBzeW5jX3ZtY3MwMl90b192bWNzMTIoKSBhcyBpdCB3aWxsCiYjNDM7CQkJICogYWxzbyBiZSB1c2VkIHRvIGNhcHR1cmUgdm1jczEyIGNhY2hlIGFzIHBhcnQgb2YKJiM0MzsJCQkgKiBjYXB0dXJpbmcgblZNWCBzdGF0ZSBmb3Igc25hcHNob3QgKG1pZ3JhdGlvbikuCiYjNDM7CQkJICoKJiM0MzsJCQkgKiBPdGhlcndpc2UsIHRoaXMgZmx1c2ggd2lsbCBkaXJ0eSBndWVzdCBtZW1vcnkgYXQgYQomIzQzOwkJCSAqIHBvaW50IGl0IGlzIGFscmVhZHkgYXNzdW1lZCBieSB1c2VyLXNwYWNlIHRvIGJlCiYjNDM7CQkJICogaW1tdXRhYmxlLgomIzQzOwkJCSAqCiYjNDM7CQkJICogRG8gbm90IGZsdXNoIHdoZW4gdm1fZXhpdF9yZWFzb24gPT0gLTEgKGUuZy4gZm9yY2VkIGV4aXQKJiM0MzsJCQkgKiBvbiB2Q1BVIHRlYXJkb3duIG9yIFNNTSBlbnRyeSkuIE9uIHRlYXJkb3duLCBLVk0gbWF5IHJ1bgomIzQzOwkJCSAqIHdpdGggY3VycmVudC0mZ3Q7bW0gPT0gTlVMTCBvbiBhIGJvcnJvd2VkIGxhenkgVExCIG1tLAomIzQzOwkJCSAqIHdoZXJlIHdyaXRpbmcgZ3Vlc3QgbWVtb3J5IHdvdWxkIGNvcnJ1cHQgYW4gdW5yZWxhdGVkCiYjNDM7CQkJICogdGFzay4gTm90aGluZyBjYW4gb2JzZXJ2ZSB0aGUgZmx1c2ggaW4gdGhhdCBjYXNlIGFueXdheS4KJiM0MzsJCQkgKi8KJiM0MzsJCQluZXN0ZWRfZmx1c2hfY2FjaGVkX3NoYWRvd192bWNzMTIodmNwdSwgdm1jczEyKTsKJiM0MzsJCX0KIAl9IGVsc2UgewogCQkvKgogCQkgKiBUaGUgb25seSBleHBlY3RlZCBWTS1pbnN0cnVjdGlvbiBlcnJvciBpcyAmIzM0O1ZNIGVudHJ5IHdpdGgKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MzAKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA3MTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTmVzdGVkIFZNWCBPcHRpbWl6YXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBGcm9tIHRoZSBkaWZmLCBJIGNhbiBzZWUgYSBjaGFuZ2Ugd2l0aGluIHRoZSBgX19uZXN0ZWRfdm14X3ZtZXhpdGAgZnVuY3Rpb24gaW4gYG5lc3RlZC5jYC4gVGhlIGNvcmUgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBoYW5kbGluZyB0aGUgVk1DUzEyIGNhY2hlIGZsdXNoIGFmdGVyIHN5bmNocm9uaXppbmcgYHZtY3MwMmAgdG8gYHZtY3MxMmAuIEkga25vdyB0aGF0IHRoaXMgaXMgaW1wb3J0YW50IGluIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBmb3IgdGhpbmdzIGxpa2Ugc25hcHNob3R0aW5nIGFuZCBtaWdyYXRpb24sIHdoZXJlIHdlIG5lZWQgdG8gZW5zdXJlIGd1ZXN0IG1lbW9yeSBpcyBjb25zaXN0ZW50LgoKSW5pdGlhbGx5LCB0aGUgZmx1c2ggaGFwcGVuZWQgdW5jb25kaXRpb25hbGx5IGFmdGVyIHRoZSBzeW5jLiBOb3cgSSYjMzk7bSBzZWVpbmcgYSBjb25kaXRpb25hbCBjaGVjayBoZXJlLiBUaGUgY3JpdGljYWwgcGFydCBpcyB0aGlzIGBpZiAodm1fZXhpdF9yZWFzb24gIT0gLTEpYCBjb25kaXRpb24uIEl0IGFwcGVhcnMgd2UmIzM5O3JlIG9wdGltaXppbmcgYnkgKm9ubHkqIGZsdXNoaW5nIHRoZSBjYWNoZSBpZiB0aGUgYHZtX2V4aXRfcmVhc29uYCBpc24mIzM5O3QgZXF1YWwgdG8gLTEuIFRoYXQgc3VnZ2VzdHMgd2UgZG9uJiMzOTt0IG5lZWQgdG8gZmx1c2ggaW4gY2VydGFpbiBWTSBleGl0IHNjZW5hcmlvcy4gVGhlIGNvbW1lbnQgY2xhcmlmaWVzIHRoaXM6IGEgVk0gZXhpdCByZWFzb24gb2YgLTEgc2lnbmlmaWVzIHZDUFUgdGVhcmRvd24gb3IgU01NIGVudHJ5LCBhbmQgaW4gdGhlc2UgY2FzZXMsIGZsdXNoaW5nIGlzbiYjMzk7dCBuZWNlc3NhcnkgYW5kIGNvdWxkIGV2ZW4gbGVhZCB0byBpc3N1ZXMgcmVsYXRlZCB0byBtZW1vcnkgY29ycnVwdGlvbi4gSW50ZXJlc3RpbmcgdG8gc2VlIHRoaXMgb3B0aW1pemF0aW9uIGJlaW5nIG1hZGUuCgpJdCBzZWVtcyBsaWtlIHdlJiMzOTtyZSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIGJ1ZyBvciBwZXJmb3JtYW5jZSBpbmVmZmljaWVuY3kuIFRoZSBuZXcgY29kZSBwcmV2ZW50cyBhIHBvdGVudGlhbGx5IHVubmVjZXNzYXJ5IHdyaXRlIHRvIGd1ZXN0IG1lbW9yeSB3aGVuIHRoZSBWTSBpcyBiZWluZyB0b3JuIGRvd24uIFRoaXMgbWFrZXMgc2Vuc2U7IGR1cmluZyB0ZWFyZG93biBvciBTTU0gZW50cnksIHRoZSBjdXJyZW50IHByb2Nlc3MgbWlnaHQgbm90IGhhdmUgYSB2YWxpZCBtZW1vcnkgbWFwcGluZywgYW5kIGF0dGVtcHRpbmcgYSBmbHVzaCBjb3VsZCBsZWFkIHRvIGJhZCB0aGluZ3MuIFRoZSBhZGRlZCBjaGVjayBzZWVtcyBsaWtlIGEgZ29vZCBzYWZldHkgbWVhc3VyZSBhbmQgcG90ZW50aWFsbHkgYSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudC4gSSYjMzk7bGwgbmVlZCB0byBrZWVwIHRoaXMgaW4gbWluZCB3aGVuIEkgZXhhbWluZSBwb3RlbnRpYWwgaXNzdWVzLCBwYXJ0aWN1bGFybHkgd2l0aCBtaWdyYXRpb24gYW5kIHN0YXRlIHNhdmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTEwNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MTA1Olx0XHQgKiB1cC10by1kYXRlIGJlZm9yZSBzd2l0Y2hpbmcgdG8gTDEuXG41MTA2Olx0XHQgKi9cbjUxMDc6XHRcdGlmIChlbmFibGVfZXB0IFx1MDAyNlx1MDAyNiBpc19wYWVfcGFnaW5nKHZjcHUpKVxuNTEwODpcdFx0XHR2bXhfZXB0X2xvYWRfcGRwdHJzKHZjcHUpO1xuNTEwOTpcdFxuNTExMDpcdFx0bGVhdmVfZ3Vlc3RfbW9kZSh2Y3B1KTtcbjUxMTE6XHRcbjUxMTI6XHRcdGlmIChuZXN0ZWRfY3B1X2hhc19wcmVlbXB0aW9uX3RpbWVyKHZtY3MxMikpXG41MTEzOlx0XHRcdGhydGltZXJfY2FuY2VsKFx1MDAyNnRvX3ZteCh2Y3B1KS1cdTAwM2VuZXN0ZWQucHJlZW1wdGlvbl90aW1lcik7XG41MTE0Olx0XG41MTE1Olx0XHRpZiAobmVzdGVkX2NwdV9oYXModm1jczEyLCBDUFVfQkFTRURfVVNFX1RTQ19PRkZTRVRUSU5HKSkge1xuNTExNjpcdFx0XHR2Y3B1LVx1MDAzZWFyY2gudHNjX29mZnNldCA9IHZjcHUtXHUwMDNlYXJjaC5sMV90c2Nfb2Zmc2V0O1xuNTExNzpcdFx0XHRpZiAobmVzdGVkX2NwdV9oYXMyKHZtY3MxMiwgU0VDT05EQVJZX0VYRUNfVFNDX1NDQUxJTkcpKVxuNTExODpcdFx0XHRcdHZjcHUtXHUwMDNlYXJjaC50c2Nfc2NhbGluZ19yYXRpbyA9IHZjcHUtXHUwMDNlYXJjaC5sMV90c2Nfc2NhbGluZ19yYXRpbztcbjUxMTk6XHRcdH1cbjUxMjA6XHRcbjUxMjE6XHRcdGlmIChsaWtlbHkoIXZteC1cdTAwM2VmYWlsKSkge1xuNTEyMjpcdFx0XHRzeW5jX3ZtY3MwMl90b192bWNzMTIodmNwdSwgdm1jczEyKTtcbjUxMjM6XHRcbjUxMjQ6XHRcdFx0aWYgKHZtX2V4aXRfcmVhc29uICE9IC0xKSB7XG41MTI1Olx0XHRcdFx0cHJlcGFyZV92bWNzMTIodmNwdSwgdm1jczEyLCB2bV9leGl0X3JlYXNvbixcbjUxMjY6XHRcdFx0XHRcdCAgICAgICBleGl0X2ludHJfaW5mbywgZXhpdF9xdWFsaWZpY2F0aW9uLFxuNTEyNzpcdFx0XHRcdFx0ICAgICAgIGV4aXRfaW5zbl9sZW4pO1xuNTEyODpcdFxuNTEyOTpcdFx0XHRcdC8qXG41MTMwOlx0XHRcdFx0ICogTXVzdCBoYXBwZW4gb3V0c2lkZSBvZiBzeW5jX3ZtY3MwMl90b192bWNzMTIoKSBhcyBpdCB3aWxsXG41MTMxOlx0XHRcdFx0ICogYWxzbyBiZSB1c2VkIHRvIGNhcHR1cmUgdm1jczEyIGNhY2hlIGFzIHBhcnQgb2ZcbjUxMzI6XHRcdFx0XHQgKiBjYXB0dXJpbmcgblZNWCBzdGF0ZSBmb3Igc25hcHNob3QgKG1pZ3JhdGlvbikuXG41MTMzOlx0XHRcdFx0ICpcbjUxMzQ6XHRcdFx0XHQgKiBPdGhlcndpc2UsIHRoaXMgZmx1c2ggd2lsbCBkaXJ0eSBndWVzdCBtZW1vcnkgYXQgYVxuNTEzNTpcdFx0XHRcdCAqIHBvaW50IGl0IGlzIGFscmVhZHkgYXNzdW1lZCBieSB1c2VyLXNwYWNlIHRvIGJlXG41MTM2Olx0XHRcdFx0ICogaW1tdXRhYmxlLlxuNTEzNzpcdFx0XHRcdCAqXG41MTM4Olx0XHRcdFx0ICogRG8gbm90IGZsdXNoIHdoZW4gdm1fZXhpdF9yZWFzb24gPT0gLTEgKGUuZy4gZm9yY2VkIGV4aXRcbjUxMzk6XHRcdFx0XHQgKiBvbiB2Q1BVIHRlYXJkb3duIG9yIFNNTSBlbnRyeSkuIE9uIHRlYXJkb3duLCBLVk0gbWF5IHJ1blxuNTE0MDpcdFx0XHRcdCAqIHdpdGggY3VycmVudC1cdTAwM2VtbSA9PSBOVUxMIG9uIGEgYm9ycm93ZWQgbGF6eSBUTEIgbW0sXG41MTQxOlx0XHRcdFx0ICogd2hlcmUgd3JpdGluZyBndWVzdCBtZW1vcnkgd291bGQgY29ycnVwdCBhbiB1bnJlbGF0ZWRcbjUxNDI6XHRcdFx0XHQgKiB0YXNrLiBOb3RoaW5nIGNhbiBvYnNlcnZlIHRoZSBmbHVzaCBpbiB0aGF0IGNhc2UgYW55d2F5LlxuNTE0MzpcdFx0XHRcdCAqL1xuNTE0NDpcdFx0XHRcdG5lc3RlZF9mbHVzaF9jYWNoZWRfc2hhZG93X3ZtY3MxMih2Y3B1LCB2bWNzMTIpO1xuNTE0NTpcdFx0XHR9XG41MTQ2Olx0XHR9IGVsc2Uge1xuNTE0NzpcdFx0XHQvKlxuNTE0ODpcdFx0XHQgKiBUaGUgb25seSBleHBlY3RlZCBWTS1pbnN0cnVjdGlvbiBlcnJvciBpcyBcJiMzNDtWTSBlbnRyeSB3aXRoXG41MTQ5Olx0XHRcdCAqIGludmFsaWQgY29udHJvbCBmaWVsZChzKS5cJiMzNDsgQW55dGhpbmcgZWxzZSBpbmRpY2F0ZXMgYVxuNTE1MDpcdFx0XHQgKiBwcm9ibGVtIHdpdGggTDAuXG41MTUxOlx0XHRcdCAqL1xuNTE1MjpcdFx0XHRXQVJOX09OX09OQ0Uodm1jc19yZWFkMzIoVk1fSU5TVFJVQ1RJT05fRVJST1IpICE9XG41MTUzOlx0XHRcdFx0ICAgICBWTVhFUlJfRU5UUllfSU5WQUxJRF9DT05UUk9MX0ZJRUxEKTtcbjUxNTQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDUxNQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHdoYXQgSSYjMzk7bSBsb29raW5nIGF0LCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqSW52ZXN0aWdhdGluZyBgbmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyYCBhbmQgdGhlIFNpZ25pZmljYW5jZSBvZiBgLTFgIFZNIEV4aXQgUmVhc29uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gYG5lc3RlZF9mbHVzaF9jYWNoZWRfc2hhZG93X3ZtY3MxMmAgYW5kIGltbWVkaWF0ZWx5IHdhbnQgdG8gdW5kZXJzdGFuZCBpdHMgZnVuY3Rpb24uIEdpdmVuIG15IGJhY2tncm91bmQgaW4gdmlydHVhbGl6YXRpb24sIG15IHByaW1hcnkgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZmxvdyBvZiBleGVjdXRpb24gYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgaW4gd2hpY2ggdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuIEkmIzM5O20gZXNwZWNpYWxseSBrZWVuIG9uIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgc2hhZG93IFZNQ1MgKFZpcnR1YWwgTWFjaGluZSBDb250cm9sIFN0cnVjdHVyZSksIGEgY3JpdGljYWwgYXJlYSBpbiBuZXN0ZWQgdmlydHVhbGl6YXRpb24sIEkgbmVlZCB0byBsb29rIGNsb3NlciB0byBzaGFkb3cgVk1DIGZvciB0aGUgcHVycG9zZSBvZiB2aXJ0dWFsaXppbmcgbmVzdGVkIFZNWCwgd2l0aCB0aGUgc3BlY2lmaWMgZW1waGFzaXMgb24gYHZtY3MxMmAgd2hpY2ggaXMgdXNlZCBmb3IgbmVzdGVkIHZpcnR1YWxpemF0aW9uLgoKVGhlIGtleSB0cmlnZ2VyIGZvciBteSBpbnZlc3RpZ2F0aW9uIGlzIHRoZSBgLTFgIHZhbHVlIGJlaW5nIHBhc3NlZCBhcyB0aGUgYHZtX2V4aXRfcmVhc29uYC4gVGhpcyBpbW1lZGlhdGVseSBzY3JlYW1zICYjMzQ7ZXJyb3IgY29uZGl0aW9uJiMzNDsgb3IgJiMzNDt1bmluaXRpYWxpemVkIHZhbHVlJiMzNDsgaW4gdGhpcyBkb21haW4uIEEgc3RhbmRhcmQgVk0gZXhpdCByZWFzb24gaXMgKm5ldmVyKiBuZWdhdGl2ZSwgYW5kIEkgYmV0IGl0JiMzOTtzIHNvbWV0aGluZyBzcGVjaWFsLCBub3QganVzdCBhIHJhbmRvbSB1bmRlZmluZWQgYml0IHBhdHRlcm4sIEkmIzM5O20gdGhpbmtpbmcgaXRzIHJlbGF0ZWQgdG8gYSBmYWlsdXJlIG9yIHVuZXhwZWN0ZWQgc3RhdGUgaW4gdGhlIFZNIGV4aXQgaGFuZGxpbmcgcHJvY2Vzcy4gSXQgaW1wbGllcyBhIHByb2JsZW0sIGxpa2VseSBhdCBhIHZlcnkgbG93IGxldmVsIGluIHRoZSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gc3RhY2suIFRoaXMgYHZtX2V4aXRfcmVhc29uYCBzaG91bGQgcHJvdmlkZSBjcml0aWNhbCBjbHVlcy4gSSYjMzk7bSBnb2luZyB0byBmb2xsb3cgdGhlc2UgY2x1ZXMsIEkga25vdyBpdHMgcmVsYXRlZCB0byB0aGUgVk0gZXhpdCByZWFzb24uCgpUaGVyZWZvcmUsIG15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgKndoeSogY2FsbGVycyBhcmUgcGFzc2luZyBgLTFgLiBJIG5lZWQgdG8gdHJhY2sgZG93biBhbGwgcmVmZXJlbmNlcyB0byB0aGlzIGZ1bmN0aW9uIGFuZCBtZXRpY3Vsb3VzbHkgZXhhbWluZSB0aGUgY29kZSB0aGF0JiMzOTtzIHN1cHBseWluZyB0aGlzIHZhbHVlLCBzbyBJIGNhbiBzZWUgd2hhdCBjb25kaXRpb25zIGxlYWQgdG8gdGhhdCBzdGF0ZS4gVGhpcyBpcyBsaWtlbHkgYSBrZXkgaW5kaWNhdG9yIG9mIGEgYnVnLCBvciBhbiB1bnVzdWFsIGVkZ2UgY2FzZSB0aGF0IG5lZWRzIHZlcnkgY2FyZWZ1bCBjb25zaWRlcmF0aW9uLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBjb2RlIHNlYXJjaCBhbmQgZ28gZnJvbSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9ODUxPXN0YXRpYyB2b2lkIG5lc3RlZF9jYWNoZV9zaGFkb3dfdm1jczEyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTg2OS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6ODcwOnN0YXRpYyB2b2lkIG5lc3RlZF9mbHVzaF9jYWNoZWRfc2hhZG93X3ZtY3MxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTg3MS1cdFx0XHRcdFx0ICAgICAgc3RydWN0IHZtY3MxMiAqdm1jczEyKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTA3Mz12b2lkIF9fbmVzdGVkX3ZteF92bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdm1fZXhpdF9yZWFzb24sXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01MTQzLVx0XHRcdCAqL1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1MTQ0Olx0XHRcdG5lc3RlZF9mbHVzaF9jYWNoZWRfc2hhZG93X3ZtY3MxMih2Y3B1LCB2bWNzMTIpO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01MTQ1LVx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNzUKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgbmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBuZXN0ZWRfZmx1c2hfY2FjaGVkX3NoYWRvd192bWNzMTJgLiBNeSBwcmltYXJ5IGludGVyZXN0IGhlcmUgaXMgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgaW50cmljYWNpZXMgb2YgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciBjYWNoaW5nIGFuZCBzaGFkb3cgVk1DUzEyIHN0cnVjdHVyZXMuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHVuZGVyc3RhbmQ6CgoqICAgKipUaGUgY29udGV4dDoqKiBXaGVyZSBkb2VzIHRoaXMgZnVuY3Rpb24gZml0IGludG8gdGhlIGJyb2FkZXIgaHlwZXJ2aXNvciBvcGVyYXRpb24sIGFuZCB3aGF0IHRyaWdnZXJzIGl0cyBleGVjdXRpb24/IElzIHRoaXMgcGFydCBvZiBhIFZNIGV4aXQgcGF0aCwgYW4gaW50ZXJydXB0IGhhbmRsZXIsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PwoqICAgKipTaGFkb3cgVk1DUzEyIG1hbmlwdWxhdGlvbjoqKiBJIGV4cGVjdCB0aGlzIGZ1bmN0aW9uIHRvIGFkZHJlc3MgcG90ZW50aWFsIGluY29uc2lzdGVuY2llcyBiZXR3ZWVuIHRoZSBwaHlzaWNhbCBWTUNTMTIgYW5kIHRoZSBzaGFkb3dlZCB2ZXJzaW9uIHVzZWQgYnkgdGhlIG5lc3RlZCBWTS4gQXJlIHRoZXJlIHNwZWNpZmljIHNjZW5hcmlvcyB3aGVyZSB0aGUgY2FjaGUgbmVlZHMgdG8gYmUgZmx1c2hlZCBvciB1cGRhdGVkLCBhbmQgd2hhdCBhcmUgdGhvc2UgdHJpZ2dlcnM/CiogICAqKlBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zOioqIENhY2hpbmcgaXMgdXN1YWxseSBkb25lIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLiBVbmRlcnN0YW5kaW5nIHRoZSB0cmFkZS1vZmZzIGJldHdlZW4gY2FjaGUgY29oZXJlbmNlIGFuZCB0aGUgb3ZlcmhlYWQgb2YgZmx1c2hpbmcgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBwZXJmb3JtYW5jZSBwcm9maWxlLiBXaGF0IGFyZSB0aGUgaGV1cmlzdGljcyBvciBwb2xpY2llcyBlbXBsb3llZCBmb3IgbWFraW5nIGZsdXNoaW5nIGRlY2lzaW9ucz8KKiAgICoqU2VjdXJpdHkgaW1wbGljYXRpb25zOioqIFNoYWRvd2luZyBjYW4gYmUgdXNlZCB0byBwcm90ZWN0IHRoZSBndWVzdCBPUyBmcm9tIGFjY2Vzc2luZyB0aGUgaHlwZXJ2aXNvciYjMzk7cyBzZW5zaXRpdmUgaW5mb3JtYXRpb24uIEFyZSB0aGVyZSBhbnkgc2VjdXJpdHktc2Vuc2l0aXZlIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGFuZCBob3cgYXJlIHRoZXkgYmVpbmcgcHJvdGVjdGVkIHRocm91Z2ggdGhpcyBvcGVyYXRpb24/CiogICAqKkhhcmR3YXJlIGFzc3VtcHRpb25zOioqIEFyZSB0aGVyZSBhbnkgaW1wbGljaXQgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgKGUuZy4sIHNwZWNpZmljIENQVSBmZWF0dXJlcywgY2FjaGUgY29oZXJlbmN5IG1lY2hhbmlzbXMpIHRoYXQgYXJlIHJlbGV2YW50IHRvIHRoaXMgZnVuY3Rpb24mIzM5O3MgbG9naWM/IEkgbmVlZCB0byBiZSBhd2FyZSBvZiBhbnkgaGFyZHdhcmUgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgYWZmZWN0IGl0cyBwb3J0YWJpbGl0eSBvciByb2J1c3RuZXNzLgoKRXNzZW50aWFsbHksIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gYmUgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlIGluIGVuc3VyaW5nIGNvcnJlY3QgYW5kIGVmZmljaWVudCBuZXN0ZWQgdmlydHVhbGl6YXRpb24uIEkmIzM5O20gaG9waW5nIHRvIHVuZGVyc3RhbmQgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBob3N0LCBndWVzdCwgYW5kIG5lc3RlZCB2aXJ0dWFsIG1hY2hpbmVzIGFzIHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgVk1DUzEyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg2MDpcdFxuIDg2MTpcdFx0aWYgKGdoYy1cdTAwM2VncGEgIT0gdm1jczEyLVx1MDAzZXZtY3NfbGlua19wb2ludGVyIFx1MDAyNlx1MDAyNlxuIDg2MjpcdFx0ICAgIGt2bV9nZm5fdG9faHZhX2NhY2hlX2luaXQodmNwdS1cdTAwM2Vrdm0sIGdoYyxcbiA4NjM6XHRcdFx0XHRcdCAgICAgIHZtY3MxMi1cdTAwM2V2bWNzX2xpbmtfcG9pbnRlciwgVk1DUzEyX1NJWkUpKVxuIDg2NDpcdFx0XHRyZXR1cm47XG4gODY1Olx0XG4gODY2Olx0XHRrdm1fcmVhZF9ndWVzdF9jYWNoZWQodmNwdS1cdTAwM2Vrdm0sIGdoYywgZ2V0X3NoYWRvd192bWNzMTIodmNwdSksXG4gODY3Olx0XHRcdFx0ICAgICAgVk1DUzEyX1NJWkUpO1xuIDg2ODpcdH1cbiA4Njk6XHRcbiA4NzA6XHRzdGF0aWMgdm9pZCBuZXN0ZWRfZmx1c2hfY2FjaGVkX3NoYWRvd192bWNzMTIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIDg3MTpcdFx0XHRcdFx0XHQgICAgICBzdHJ1Y3Qgdm1jczEyICp2bWNzMTIpXG4gODcyOlx0e1xuIDg3MzpcdFx0c3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7XG4gODc0Olx0XHRzdHJ1Y3QgZ2ZuX3RvX2h2YV9jYWNoZSAqZ2hjID0gXHUwMDI2dm14LVx1MDAzZW5lc3RlZC5zaGFkb3dfdm1jczEyX2NhY2hlO1xuIDg3NTpcdFxuIDg3NjpcdFx0aWYgKCFuZXN0ZWRfY3B1X2hhc19zaGFkb3dfdm1jcyh2bWNzMTIpIHx8XG4gODc3Olx0XHQgICAgdm1jczEyLVx1MDAzZXZtY3NfbGlua19wb2ludGVyID09IElOVkFMSURfR1BBKVxuIDg3ODpcdFx0XHRyZXR1cm47XG4gODc5Olx0XG4gODgwOlx0XHRpZiAoZ2hjLVx1MDAzZWdwYSAhPSB2bWNzMTItXHUwMDNldm1jc19saW5rX3BvaW50ZXIgXHUwMDI2XHUwMDI2XG4gODgxOlx0XHQgICAga3ZtX2dmbl90b19odmFfY2FjaGVfaW5pdCh2Y3B1LVx1MDAzZWt2bSwgZ2hjLFxuIDg4MjpcdFx0XHRcdFx0ICAgICAgdm1jczEyLVx1MDAzZXZtY3NfbGlua19wb2ludGVyLCBWTUNTMTJfU0laRSkpXG4gODgzOlx0XHRcdHJldHVybjtcbiA4ODQ6XHRcbiA4ODU6XHRcdGt2bV93cml0ZV9ndWVzdF9jYWNoZWQodmNwdS1cdTAwM2Vrdm0sIGdoYywgZ2V0X3NoYWRvd192bWNzMTIodmNwdSksXG4gODg2Olx0XHRcdFx0ICAgICAgIFZNQ1MxMl9TSVpFKTtcbiA4ODc6XHR9XG4gODg4Olx0XG4gODg5Olx0LypcbiA4OTA6XHQgKiBJbiBuZXN0ZWQgdmlydHVhbGl6YXRpb24sIGNoZWNrIGlmIEwxIGhhcyBzZXRcbiA4OTE6XHQgKiBWTV9FWElUX0FDS19JTlRSX09OX0VYSVRcbiA4OTI6XHQgKi9cbiA4OTM6XHRzdGF0aWMgYm9vbCBuZXN0ZWRfZXhpdF9pbnRyX2Fja19zZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIDg5NDpcdHtcbiA4OTU6XHRcdHJldHVybiBnZXRfdm1jczEyKHZjcHUpLVx1MDAzZXZtX2V4aXRfY29udHJvbHMgXHUwMDI2XG4gODk2Olx0XHRcdFZNX0VYSVRfQUNLX0lOVFJfT05fRVhJVDtcbiA4OTc6XHR9XG4gODk4Olx0XG4gODk5Olx0c3RhdGljIGludCBuZXN0ZWRfdm14X2NoZWNrX2FwaWNfYWNjZXNzX2NvbnRyb2xzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ3NAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbGx5IFVuaGFuZGxlZCBWTS1FeGl0IENvbmRpdGlvbnMqKgoKQWxyaWdodCwgSSYjMzk7bSBkaWdnaW5nIGludG8gc29tZSBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBWTS1leGl0cywgc3BlY2lmaWNhbGx5IHRob3NlIHdoZXJlIHRoZSBgdm1fZXhpdF9yZWFzb25gIGNvZGUgaXMgaW5kaWNhdGluZyBzb21ldGhpbmcgbGlrZSBgLTFgLCBvciBhbnl0aGluZyB0aGF0IGZsYWdzIGFzIGEgZ2VuZXJhbCwgdW5oYW5kbGVkIGNhc2UuIE15IGN1cnJlbnQgc3RyYXRlZ3kgaXMgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGxvY2F0aW9ucyBpbiB0aGUgY29kZSB0aGF0IGFyZSBpbnZva2luZyBgX19uZXN0ZWRfdm14X3ZtZXhpdGAgd2l0aCB0aGVzZSB1bmRlc2lyYWJsZSBleGl0IHJlYXNvbiB2YWx1ZXMuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mICp3aHkqIHdlJiMzOTtyZSBzZWVpbmcgdGhlc2UgJiMzNDtjYXRjaC1hbGwmIzM0OyBleGl0cy4gQXJlIHRoZXNlIGdlbnVpbmVseSB1bmhhbmRsZWQgY2FzZXMsIG9yIGFyZSB0aGVyZSBzdWJ0bGUgZXJyb3IgY29uZGl0aW9ucyBvciBlZGdlIGNhc2VzIHRoYXQgd2UgaGF2ZW4mIzM5O3QgYWNjb3VudGVkIGZvcj8gQXJlIHdlIG1pc3NpbmcgYSBzcGVjaWZpYyBgdm1fZXhpdF9oYW5kbGVyYCBvciBmYWlsaW5nIHRvIGNvcnJlY3RseSBpbnRlcnByZXQgY2VydGFpbiBmbGFncz8gSSBuZWVkIHRvIGFuYWx5emUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgY29udGV4dCB0byB1bmRlcnN0YW5kIHRoZSBzeXN0ZW0mIzM5O3Mgc3RhdGUgd2hlbiB0aGVzZSBleGl0cyBvY2N1ci4gV2hhdCByZWdpc3RlcnMgYXJlIHNldD8gV2hhdCBndWVzdCBpbnN0cnVjdGlvbnMgYXJlIHdlIGV4ZWN1dGluZz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSB1bmRlZmluZWQgZXhpdHMgb24gc3lzdGVtIHN0YWJpbGl0eSBhbmQgc2VjdXJpdHk/IFVsdGltYXRlbHksIEkgd2FudCB0byBpZGVudGlmeSBhbnkgZmxhd3MgaW4gb3VyIFZNTSYjMzk7cyBleGl0IGhhbmRsaW5nLCB3aXRoIHRoZSBnb2FsIG9mIG1pdGlnYXRpbmcgYW55IHBvdGVudGlhbCBleHBsb2l0cyBvciB1bmV4cGVjdGVkIGJlaGF2aW9ycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19uZXN0ZWRfdm14X3ZtZXhpdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTQ5NjA9c3RhdGljIHZvaWQgbmVzdGVkX3ZteF9yZXN0b3JlX2hvc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTA3Mi0gKi9cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTA3Mzp2b2lkIF9fbmVzdGVkX3ZteF92bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdm1fZXhpdF9yZWFzb24sXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTUwNzQtXHRcdFx0IHUzMiBleGl0X2ludHJfaW5mbywgdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24sXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaD0yOT1ib29sIG5lc3RlZF92bXhfcmVmbGVjdF92bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmg6MzA6dm9pZCBfX25lc3RlZF92bXhfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZtX2V4aXRfcmVhc29uLFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaC0zMS1cdFx0XHQgdTMyIGV4aXRfaW50cl9pbmZvLCB1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbixcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oPTM0PXN0YXRpYyBpbmxpbmUgdm9pZCBuZXN0ZWRfdm14X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2bV9leGl0X3JlYXNvbixcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oLTQ1LVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaDo0NjpcdF9fbmVzdGVkX3ZteF92bWV4aXQodmNwdSwgdm1fZXhpdF9yZWFzb24sIGV4aXRfaW50cl9pbmZvLFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaC00Ny1cdFx0XHQgICAgZXhpdF9xdWFsaWZpY2F0aW9uLCBleGl0X2luc25fbGVuKTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTgxOTA9aW50IHZteF9jaGVja19pbnRlcmNlcHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODI4MC1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM6ODI4MTpcdF9fbmVzdGVkX3ZteF92bWV4aXQodmNwdSwgdm1fZXhpdF9yZWFzb24sIDAsIGV4aXRfcXVhbGlmaWNhdGlvbixcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODI4Mi1cdFx0XHQgICAgZXhpdF9pbnNuX2xlbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczODQKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgRG93biAtMSBpbiBOZXN0ZWQgVk1YIFZNLUV4aXQgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgLTFgIHZhbHVlIGJlaW5nIHBhc3NlZCB0byBlaXRoZXIgYG5lc3RlZF92bXhfdm1leGl0YCBvciwgbW9yZSBnZW5lcmFsbHksIGBfX25lc3RlZF92bXhfdm1leGl0YC4gVGhlIGNvbnRleHQgaXMsIEkgc3VzcGVjdCwgcmVsYXRlZCB0byBzb21lIGtpbmQgb2YgVk0tZXhpdCBkdXJpbmcgbmVzdGVkIHZpcnR1YWxpemF0aW9uLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHVzZSBteSB0b29scyB0byBsb2NhdGUgdGhlc2Ugc3BlY2lmaWMgZnVuY3Rpb24gY2FsbHMuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGVpdGhlciBhIGRlYnVnZ2VyLCBvciBwZXJoYXBzIGEgZ3JlcCBjb21iaW5lZCB3aXRoIHNvbWUgc291cmNlIGNvZGUgbmF2aWdhdGlvbiwgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGNhbGwgc2l0ZXMgZm9yIHRob3NlIGZ1bmN0aW9ucywgZm9jdXNpbmcgb24gaG93IHRoaXMgYC0xYCBpcyBwcm9wYWdhdGVkLgoKVGhlIGNvcmUgcXVlc3Rpb24gaXMsIHdoZXJlIGRvZXMgdGhpcyB2YWx1ZSBvcmlnaW5hdGU/IEl0JiMzOTtzIHVubGlrZWx5IHRvIGJlIGEgYmVuaWduIHJldHVybiBjb2RlLiBJdCBsaWtlbHkgc2lnbmlmaWVzIGFuIGVycm9yLCBhIGZhaWx1cmUgdG8gaGFuZGxlIHRoZSBndWVzdCYjMzk7cyBpbnN0cnVjdGlvbiBhdCB0aGUgbmVzdGVkIGxldmVsLCBvciBtYXliZSBhbiBpc3N1ZSBkdXJpbmcgdGhlIHByb2Nlc3Mgb2YgcmV0dXJuaW5nIGNvbnRyb2wgdG8gdGhlIGhvc3QuIElzIHRoaXMgY29taW5nIGZyb20gdGhlIG5lc3RlZCBWTU0gaXRzZWxmPyBJcyBpdCBhbiBpbmRpY2F0aW9uIHRoYXQgdGhlIG5lc3RlZCBndWVzdCB0cmllZCB0byBkbyBzb21ldGhpbmcgaXQgc2hvdWxkbiYjMzk7dCBoYXZlPwoKSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHNvdXJjZXMgb2YgdGhlc2UgYC0xYCB2YWx1ZXMgYW5kIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gQXJlIHdlIHNlZWluZyB0aGlzIGFjcm9zcyBhIHdpZGUgcmFuZ2Ugb2YgaW5zdHJ1Y3Rpb25zL29wZXJhdGlvbnMgd2l0aGluIHRoZSBuZXN0ZWQgVk0sIG9yIGlzIGl0IGlzb2xhdGVkIHRvIHNwZWNpZmljIGluc3RydWN0aW9uIGNsYXNzZXMgb3Igc3lzdGVtIGV2ZW50cz8gTXkgc3VzcGljaW9uIGlzIGEgcG90ZW50aWFsIG1pc2NvbmZpZ3VyYXRpb24gb3IgYSByYWNlIGNvbmRpdGlvbiB3aXRoaW4gdGhlIG5lc3RlZCBWTU0sIG9yIG1heWJlIGV2ZW4gYSBidWcgaW4gdGhlIFZNLWV4aXQgaGFuZGxpbmcuIEZ1cnRoZXIgaW5zcGVjdGlvbiBvZiByZWdpc3RlciBzdGF0ZXMgYW5kIGNvbnRyb2wgc3RydWN0dXJlcyBhcm91bmQgdGhlIHRpbWUgb2YgdGhlIFZNLWV4aXQgd2lsbCBiZSBuZWNlc3NhcnkgdG8gaWRlbnRpZnkgdGhlIHJvb3QgY2F1c2UuIFRoaXMgYC0xYCBpcyBhIGJyaWdodCByZWQgZmxhZywgYW5kIEkgbmVlZCB0byByZXNvbHZlIHRoaXMgYXMgcXVpY2tseSBhcyBwb3NzaWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmVzdGVkX3ZteF92bWV4aXQuKi0xJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9Njg4ND12b2lkIHZteF9sZWF2ZV9uZXN0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjg4Ny1cdFx0dmNwdS1cdTAwM2VhcmNoLm5lc3RlZF9ydW5fcGVuZGluZyA9IDA7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjY4ODg6XHRcdG5lc3RlZF92bXhfdm1leGl0KHZjcHUsIC0xLCAwLCAwKTtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjg4OS1cdH1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTg0ODI9aW50IHZteF9lbnRlcl9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODQ5NC1cdGlmICh2bXgtXHUwMDNlbmVzdGVkLnNtbS5ndWVzdF9tb2RlKVxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo4NDk1Olx0XHRuZXN0ZWRfdm14X3ZtZXhpdCh2Y3B1LCAtMSwgMCwgMCk7XG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTg0OTYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxMTcKCQkJCQkJCW91dHB1dDogMTY4CgkJCQkJCQl0aG91Z2h0czogNjAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBOZXN0ZWQgVmlydHVhbGl6YXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUganVzdCByZXZpZXdlZCB0aGlzIHBhdGNoIGFuZCwgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZywgaXQgYWRkcmVzc2VzIGEgc3BlY2lmaWMgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWUgd2l0aGluIEtWTSYjMzk7cyBuZXN0ZWQgdmlydHVhbGl6YXRpb24gaW1wbGVtZW50YXRpb24uIFRoZSBjb3JlIHByb2JsZW0gaXMgdGhhdCBgbmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyKHZjcHUsIHZtY3MxMik7YCB3YXMgYmVpbmcgZXhlY3V0ZWQgZXZlbiB3aGVuIGEgVk0gZXhpdCB3YXMgZm9yY2VkIChpbmRpY2F0ZWQgYnkgYHZtX2V4aXRfcmVhc29uID09IC0xYCksIHN1Y2ggYXMgZHVyaW5nIHZDUFUgdGVhcmRvd24gb3Igd2hlbiBlbnRlcmluZyBTTU0uIER1cmluZyB0ZWFyZG93biwgS1ZNIHNvbWV0aW1lcyBvcGVyYXRlcyB3aXRoIGEgbGF6eSBUTEIgbW0gd2hlcmUgYGN1cnJlbnQtJmd0O21tYCBpcyBgTlVMTGAsIGFuZCBjYWxsaW5nIGBrdm1fd3JpdGVfZ3Vlc3RfY2FjaGVkYCBpbiB0aGF0IGNvbnRleHQgbGVhZHMgdG8gd3JpdGVzIHRvIG1lbW9yeSB0aGF0IGlzbiYjMzk7dCB2YWxpZCBmb3IgdGhlIGN1cnJlbnQgY29udGV4dC4gVGhpcyBpcyB3aGF0JiMzOTtzIGNhdXNpbmcgdGhlIHByb2JsZW0sIHdoaWNoIGhhcyB0aGUgcG90ZW50aWFsIHRvIGNvcnJ1cHQgc29tZSB1bnJlbGF0ZWQgdGFzayYjMzk7cyBtZW1vcnkuCgpUaGUgcGF0Y2gmIzM5O3Mgc29sdXRpb24gaXMgc3RyYWlnaHRmb3J3YXJkOiBpdCBtb3ZlcyB0aGUgY2FsbCB0byBgbmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyKHZjcHUsIHZtY3MxMik7YCBpbnNpZGUgdGhlIGV4aXN0aW5nIGBpZiAodm1fZXhpdF9yZWFzb24gIT0gLTEpYCBibG9jay4gVGhpcyB3YXksIHRoZSBmdW5jdGlvbiBpcyAqb25seSogY2FsbGVkIHdoZW4gdGhlcmUmIzM5O3MgYSB2YWxpZCBWTSBleGl0IHJlYXNvbiwgYXZvaWRpbmcgdGhlIHByb2JsZW1hdGljIGV4ZWN1dGlvbiBwYXRoIGR1cmluZyB0ZWFyZG93biBvciBTTU0gZW50cnkuCgpOb3csIG15IGV2YWx1YXRpb24gZm9jdXNlcyBvbiB3aGV0aGVyIHRoaXMgY2hhbmdlIHdhcnJhbnRzIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgYW5hbHlzaXMuIExldCYjMzk7cyBicmVhayBkb3duIG15IHJlYXNvbmluZzoKCkkmIzM5O3ZlIGV4YW1pbmVkIHRoZSBjb2RlIGZvcjoKCjEuICAqKkludGVyYWN0aW9uIHdpdGggdXNlcnNwYWNlOioqIEkgbG9va2VkIGZvciBhbnkgbW9kaWZpY2F0aW9ucyB0byBrZXJuZWwgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlcnNwYWNlIHZpYSBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluaywgaW9jdGwsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycy4gVGhlcmUgYXJlIG5vbmUuIFRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIG9yIGFsdGVyIGFueSBvZiB0aGVzZSBpbnRlcmFjdGlvbnMuCjIuICAqKlVuaW5pdGlhbGl6ZWQgdmFyaWFibGUvZmllbGQgdXNlOioqIEkgY2FyZWZ1bGx5IGNoZWNrZWQgZm9yIGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IG1pZ2h0IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzLCBhcyB3ZWxsIGFzIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXIuIEkgZm91bmQgbm8gZXZpZGVuY2Ugb2YgYW55LgozLiAgKipNZW1vcnkgYWNjZXNzIHBhdHRlcm5zOioqIEkgYW5hbHl6ZWQgdGhlIHBhdGNoIGZvciBhbnkgY2hhbmdlcyB0byBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0IGNvdWxkIGxlYWQgdG8gYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgaW4gZXhpc3RpbmcgYnVmZmVycy4gTm90aGluZyBoZXJlLgoKVGhlIGtleSBwb2ludCBoZXJlIGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBzb2xlbHkgZm9jdXNlZCBvbiAqcHJldmVudGluZyogYSBzcGVjaWZpYyB3cml0ZSBvcGVyYXRpb24gdW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzLiBJdCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgbmV3IHN0cnVjdHVyZXMsIG9yIGludGVyYWN0aW9ucyB3aXRoIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgbWVjaGFuaXNtcyB0aGF0IHdvdWxkIGJlIG9mIGNvbmNlcm4gZm9yIEtNU0FOLiBJdCYjMzk7cyBzdHJpY3RseSBhYm91dCBhIGNvbnRyb2wgZmxvdyBtb2RpZmljYXRpb24uCgpLTVNBTiBpcyBkZXNpZ25lZCB0byBkZXRlY3QgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIG9mIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBJbiB0aGlzIGNhc2UsIHRoZSBmaXggYWRkcmVzc2VzIGEgd3JpdGUgaXNzdWUsIG5vdCBhIHJlYWQgaXNzdWUuIEtNU0FOIHdvdWxkbiYjMzk7dCBiZSBwYXJ0aWN1bGFybHkgaGVscGZ1bCBoZXJlLiBSZWd1bGFyIEtBU0FOIGFuZCBzdGFuZGFyZCBkZWJ1Z2dpbmcga2VybmVscyBzaG91bGQgYmUgc3VmZmljaWVudC4gSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGlzIGNoYW5nZSBkb2VzICpub3QqIG5lZWQgS01TQU4sIGFuZCBzbyB0aGUgYE5lZWRzS01TQU5gIGZsYWcgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLgoKU28sIGZyb20gbXkgcGVyc3BlY3RpdmUsIHRoZSBwYXRjaCBzYWZlbHkgcHJldmVudHMgYSBndWVzdCBtZW1vcnkgd3JpdGUgd2hlbiBpdCBpcyBydW5uaW5nIHdpdGhvdXQgYSB2YWxpZCBNTSwgYW5kIGRvZXMgbm90IHJlcXVpcmUgYW55IHNwZWNpYWwgYW5hbHlzaXMgYmV5b25kIHN0YW5kYXJkIGRlYnVnZ2luZyBhbmQgdGVzdGluZy4gVGhpcyBpcyBhIG1lbW9yeSBjb3JydXB0aW9uIGZpeCB3aXRoaW4gdGhlIGxpZmVjeWNsZSBvZiB0aGUgZ3Vlc3QsIGFuZCB0aGVyZSBhcmUgbm8gaW5mby1sZWFrcyBpbnZvbHZlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbmVzdGVkIFZNWCBWTS1leGl0IGhhbmRsaW5nIGluIEtWTSAoYF9fbmVzdGVkX3ZteF92bWV4aXRgKSB0byBza2lwIGNhbGxpbmcgYG5lc3RlZF9mbHVzaF9jYWNoZWRfc2hhZG93X3ZtY3MxMigpYCB3aGVuIGB2bV9leGl0X3JlYXNvbiA9PSAtMWAgKGUuZy4sIGR1cmluZyB2Q1BVIHRlYXJkb3duIG9yIFNNTSBlbnRyeSkuIFRoaXMgcHJldmVudHMgaWxsZWdhbCBndWVzdCBtZW1vcnkgd3JpdGVzIG9uIGJvcnJvd2VkIGxhenkgVExCIG1tIGNvbnRleHRzIGR1cmluZyB0ZWFyZG93bi5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgbmV3IGJ1ZmZlcnMsIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnksIGV4cG9zZSB1bmluaXRpYWxpemVkIGZpZWxkcywgb3IgbGVhayBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFN0YW5kYXJkIEtBU0FOIGFuZCBnZW5lcmFsIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgYXJlIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBuZXN0ZWQgVk1YIFZNLWV4aXQgaGFuZGxpbmcgaW4gS1ZNIChgX19uZXN0ZWRfdm14X3ZtZXhpdGApIHRvIHNraXAgY2FsbGluZyBgbmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyKClgIHdoZW4gYHZtX2V4aXRfcmVhc29uID09IC0xYCAoZS5nLiwgZHVyaW5nIHZDUFUgdGVhcmRvd24gb3IgU01NIGVudHJ5KS4gVGhpcyBwcmV2ZW50cyBpbGxlZ2FsIGd1ZXN0IG1lbW9yeSB3cml0ZXMgb24gYm9ycm93ZWQgbGF6eSBUTEIgbW0gY29udGV4dHMgZHVyaW5nIHRlYXJkb3duLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgYnVmZmVycywgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciBsZWFrIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gU3RhbmRhcmQgS0FTQU4gYW5kIGdlbmVyYWwga2VybmVsIGRlYnVnZ2luZyB0b29scyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6MDk6NDIuNDU5MzA1NjA3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ4MjY3NjI2MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX25lc3RlZF92bXhfdm1leGl0XCIsXG4gICAgXCJ2bXhfbGVhdmVfbmVzdGVkXCIsXG4gICAgXCJ2bXhfZW50ZXJfc21tXCIsXG4gICAgXCJuZXN0ZWRfdm14X3JlZmxlY3Rfdm1leGl0XCIsXG4gICAgXCJuZXN0ZWRfdm14X2ZyZWVfdmNwdVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbmVzdGVkIFZNWCBWTS1leGl0IGhhbmRsaW5nIGluIEtWTSAoYF9fbmVzdGVkX3ZteF92bWV4aXRgKSB0byBza2lwIGNhbGxpbmcgYG5lc3RlZF9mbHVzaF9jYWNoZWRfc2hhZG93X3ZtY3MxMigpYCB3aGVuIGB2bV9leGl0X3JlYXNvbiA9PSAtMWAgKGUuZy4sIGR1cmluZyB2Q1BVIHRlYXJkb3duIG9yIFNNTSBlbnRyeSkuIFRoaXMgcHJldmVudHMgaWxsZWdhbCBndWVzdCBtZW1vcnkgd3JpdGVzIG9uIGJvcnJvd2VkIGxhenkgVExCIG1tIGNvbnRleHRzIGR1cmluZyB0ZWFyZG93bi5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgYnVmZmVycywgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciBsZWFrIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gU3RhbmRhcmQgS0FTQU4gYW5kIGdlbmVyYWwga2VybmVsIGRlYnVnZ2luZyB0b29scyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBfX25lc3RlZF92bXhfdm1leGl0KCkgaW4gS1ZNIG5lc3RlZCBWTVggc3VwcG9ydCAoYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYykgdG8gcHJldmVudCBmbHVzaGluZyBjYWNoZWQgc2hhZG93IFZNQ1MxMiB3aGVuIHBlcmZvcm1pbmcgYSBmb3JjZWQgbmVzdGVkIFZNLWV4aXQgKHZtX2V4aXRfcmVhc29uID09IC0xLCBlLmcuIGR1cmluZyB2Q1BVIHRlYXJkb3duIG9yIFNNTSBlbnRyeSkuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocyBpbiBjb3JlIEtWTSB2aXJ0dWFsaXphdGlvbiBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIG9uIGFtZDY0LCB3YXJyYW50aW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE2OjA5OjQyLjQ1OTMxMDk0N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk3MjczNjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzI0YzM5ODZkNGQ1NWQwMGU4MDcxNjQ5M2JiYzEwOWQzYWFiNmMxNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCA4IDE2OjA5OjQxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXFxuaW5kZXggMTUxODczNDA3YWJkMy4uMzNkYzhhMDcwMTlmOCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xcbkBAIC01MTIxLDIxICs1MTIxLDI4IEBAIHZvaWQgX19uZXN0ZWRfdm14X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2bV9leGl0X3JlYXNvbixcXG4gXFx0aWYgKGxpa2VseSghdm14LVxcdTAwM2VmYWlsKSkge1xcbiBcXHRcXHRzeW5jX3ZtY3MwMl90b192bWNzMTIodmNwdSwgdm1jczEyKTtcXG4gXFxuLVxcdFxcdGlmICh2bV9leGl0X3JlYXNvbiAhPSAtMSlcXG4rXFx0XFx0aWYgKHZtX2V4aXRfcmVhc29uICE9IC0xKSB7XFxuIFxcdFxcdFxcdHByZXBhcmVfdm1jczEyKHZjcHUsIHZtY3MxMiwgdm1fZXhpdF9yZWFzb24sXFxuIFxcdFxcdFxcdFxcdCAgICAgICBleGl0X2ludHJfaW5mbywgZXhpdF9xdWFsaWZpY2F0aW9uLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgZXhpdF9pbnNuX2xlbik7XFxuIFxcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBNdXN0IGhhcHBlbiBvdXRzaWRlIG9mIHN5bmNfdm1jczAyX3RvX3ZtY3MxMigpIGFzIGl0IHdpbGxcXG4tXFx0XFx0ICogYWxzbyBiZSB1c2VkIHRvIGNhcHR1cmUgdm1jczEyIGNhY2hlIGFzIHBhcnQgb2ZcXG4tXFx0XFx0ICogY2FwdHVyaW5nIG5WTVggc3RhdGUgZm9yIHNuYXBzaG90IChtaWdyYXRpb24pLlxcbi1cXHRcXHQgKlxcbi1cXHRcXHQgKiBPdGhlcndpc2UsIHRoaXMgZmx1c2ggd2lsbCBkaXJ0eSBndWVzdCBtZW1vcnkgYXQgYVxcbi1cXHRcXHQgKiBwb2ludCBpdCBpcyBhbHJlYWR5IGFzc3VtZWQgYnkgdXNlci1zcGFjZSB0byBiZVxcbi1cXHRcXHQgKiBpbW11dGFibGUuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRuZXN0ZWRfZmx1c2hfY2FjaGVkX3NoYWRvd192bWNzMTIodmNwdSwgdm1jczEyKTtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogTXVzdCBoYXBwZW4gb3V0c2lkZSBvZiBzeW5jX3ZtY3MwMl90b192bWNzMTIoKSBhcyBpdCB3aWxsXFxuK1xcdFxcdFxcdCAqIGFsc28gYmUgdXNlZCB0byBjYXB0dXJlIHZtY3MxMiBjYWNoZSBhcyBwYXJ0IG9mXFxuK1xcdFxcdFxcdCAqIGNhcHR1cmluZyBuVk1YIHN0YXRlIGZvciBzbmFwc2hvdCAobWlncmF0aW9uKS5cXG4rXFx0XFx0XFx0ICpcXG4rXFx0XFx0XFx0ICogT3RoZXJ3aXNlLCB0aGlzIGZsdXNoIHdpbGwgZGlydHkgZ3Vlc3QgbWVtb3J5IGF0IGFcXG4rXFx0XFx0XFx0ICogcG9pbnQgaXQgaXMgYWxyZWFkeSBhc3N1bWVkIGJ5IHVzZXItc3BhY2UgdG8gYmVcXG4rXFx0XFx0XFx0ICogaW1tdXRhYmxlLlxcbitcXHRcXHRcXHQgKlxcbitcXHRcXHRcXHQgKiBEbyBub3QgZmx1c2ggd2hlbiB2bV9leGl0X3JlYXNvbiA9PSAtMSAoZS5nLiBmb3JjZWQgZXhpdFxcbitcXHRcXHRcXHQgKiBvbiB2Q1BVIHRlYXJkb3duIG9yIFNNTSBlbnRyeSkuIE9uIHRlYXJkb3duLCBLVk0gbWF5IHJ1blxcbitcXHRcXHRcXHQgKiB3aXRoIGN1cnJlbnQtXFx1MDAzZW1tID09IE5VTEwgb24gYSBib3Jyb3dlZCBsYXp5IFRMQiBtbSxcXG4rXFx0XFx0XFx0ICogd2hlcmUgd3JpdGluZyBndWVzdCBtZW1vcnkgd291bGQgY29ycnVwdCBhbiB1bnJlbGF0ZWRcXG4rXFx0XFx0XFx0ICogdGFzay4gTm90aGluZyBjYW4gb2JzZXJ2ZSB0aGUgZmx1c2ggaW4gdGhhdCBjYXNlIGFueXdheS5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdG5lc3RlZF9mbHVzaF9jYWNoZWRfc2hhZG93X3ZtY3MxMih2Y3B1LCB2bWNzMTIpO1xcbitcXHRcXHR9XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFRoZSBvbmx5IGV4cGVjdGVkIFZNLWluc3RydWN0aW9uIGVycm9yIGlzIFxcXCJWTSBlbnRyeSB3aXRoXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE2OjA5OjQyLjk1NzMyODI1NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzUxMTM3MzY1NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX25lc3RlZF92bXhfdm1leGl0XCIsXG4gICAgXCJ2bXhfbGVhdmVfbmVzdGVkXCIsXG4gICAgXCJ2bXhfZW50ZXJfc21tXCIsXG4gICAgXCJuZXN0ZWRfdm14X3JlZmxlY3Rfdm1leGl0XCIsXG4gICAgXCJuZXN0ZWRfdm14X2ZyZWVfdmNwdVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIF9fbmVzdGVkX3ZteF92bWV4aXQoKSBpbiBLVk0gbmVzdGVkIFZNWCBzdXBwb3J0IChhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jKSB0byBwcmV2ZW50IGZsdXNoaW5nIGNhY2hlZCBzaGFkb3cgVk1DUzEyIHdoZW4gcGVyZm9ybWluZyBhIGZvcmNlZCBuZXN0ZWQgVk0tZXhpdCAodm1fZXhpdF9yZWFzb24gPT0gLTEsIGUuZy4gZHVyaW5nIHZDUFUgdGVhcmRvd24gb3IgU01NIGVudHJ5KS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzIGluIGNvcmUgS1ZNIHZpcnR1YWxpemF0aW9uIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2Ugb24gYW1kNjQsIHdhcnJhbnRpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjMjRjMzk4NmQ0ZDU1ZDAwZTgwNzE2NDkzYmJjMTA5ZDNhYWI2YzE0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAxNjowOTo0MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXG5pbmRleCAxNTE4NzM0MDdhYmQzLi4zM2RjOGEwNzAxOWY4IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xuQEAgLTUxMjEsMjEgKzUxMjEsMjggQEAgdm9pZCBfX25lc3RlZF92bXhfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZtX2V4aXRfcmVhc29uLFxuIFx0aWYgKGxpa2VseSghdm14LVx1MDAzZWZhaWwpKSB7XG4gXHRcdHN5bmNfdm1jczAyX3RvX3ZtY3MxMih2Y3B1LCB2bWNzMTIpO1xuIFxuLVx0XHRpZiAodm1fZXhpdF9yZWFzb24gIT0gLTEpXG4rXHRcdGlmICh2bV9leGl0X3JlYXNvbiAhPSAtMSkge1xuIFx0XHRcdHByZXBhcmVfdm1jczEyKHZjcHUsIHZtY3MxMiwgdm1fZXhpdF9yZWFzb24sXG4gXHRcdFx0XHQgICAgICAgZXhpdF9pbnRyX2luZm8sIGV4aXRfcXVhbGlmaWNhdGlvbixcbiBcdFx0XHRcdCAgICAgICBleGl0X2luc25fbGVuKTtcbiBcbi1cdFx0Lypcbi1cdFx0ICogTXVzdCBoYXBwZW4gb3V0c2lkZSBvZiBzeW5jX3ZtY3MwMl90b192bWNzMTIoKSBhcyBpdCB3aWxsXG4tXHRcdCAqIGFsc28gYmUgdXNlZCB0byBjYXB0dXJlIHZtY3MxMiBjYWNoZSBhcyBwYXJ0IG9mXG4tXHRcdCAqIGNhcHR1cmluZyBuVk1YIHN0YXRlIGZvciBzbmFwc2hvdCAobWlncmF0aW9uKS5cbi1cdFx0ICpcbi1cdFx0ICogT3RoZXJ3aXNlLCB0aGlzIGZsdXNoIHdpbGwgZGlydHkgZ3Vlc3QgbWVtb3J5IGF0IGFcbi1cdFx0ICogcG9pbnQgaXQgaXMgYWxyZWFkeSBhc3N1bWVkIGJ5IHVzZXItc3BhY2UgdG8gYmVcbi1cdFx0ICogaW1tdXRhYmxlLlxuLVx0XHQgKi9cbi1cdFx0bmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyKHZjcHUsIHZtY3MxMik7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBNdXN0IGhhcHBlbiBvdXRzaWRlIG9mIHN5bmNfdm1jczAyX3RvX3ZtY3MxMigpIGFzIGl0IHdpbGxcbitcdFx0XHQgKiBhbHNvIGJlIHVzZWQgdG8gY2FwdHVyZSB2bWNzMTIgY2FjaGUgYXMgcGFydCBvZlxuK1x0XHRcdCAqIGNhcHR1cmluZyBuVk1YIHN0YXRlIGZvciBzbmFwc2hvdCAobWlncmF0aW9uKS5cbitcdFx0XHQgKlxuK1x0XHRcdCAqIE90aGVyd2lzZSwgdGhpcyBmbHVzaCB3aWxsIGRpcnR5IGd1ZXN0IG1lbW9yeSBhdCBhXG4rXHRcdFx0ICogcG9pbnQgaXQgaXMgYWxyZWFkeSBhc3N1bWVkIGJ5IHVzZXItc3BhY2UgdG8gYmVcbitcdFx0XHQgKiBpbW11dGFibGUuXG4rXHRcdFx0ICpcbitcdFx0XHQgKiBEbyBub3QgZmx1c2ggd2hlbiB2bV9leGl0X3JlYXNvbiA9PSAtMSAoZS5nLiBmb3JjZWQgZXhpdFxuK1x0XHRcdCAqIG9uIHZDUFUgdGVhcmRvd24gb3IgU01NIGVudHJ5KS4gT24gdGVhcmRvd24sIEtWTSBtYXkgcnVuXG4rXHRcdFx0ICogd2l0aCBjdXJyZW50LVx1MDAzZW1tID09IE5VTEwgb24gYSBib3Jyb3dlZCBsYXp5IFRMQiBtbSxcbitcdFx0XHQgKiB3aGVyZSB3cml0aW5nIGd1ZXN0IG1lbW9yeSB3b3VsZCBjb3JydXB0IGFuIHVucmVsYXRlZFxuK1x0XHRcdCAqIHRhc2suIE5vdGhpbmcgY2FuIG9ic2VydmUgdGhlIGZsdXNoIGluIHRoYXQgY2FzZSBhbnl3YXkuXG4rXHRcdFx0ICovXG4rXHRcdFx0bmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyKHZjcHUsIHZtY3MxMik7XG4rXHRcdH1cbiBcdH0gZWxzZSB7XG4gXHRcdC8qXG4gXHRcdCAqIFRoZSBvbmx5IGV4cGVjdGVkIFZNLWluc3RydWN0aW9uIGVycm9yIGlzIFwiVk0gZW50cnkgd2l0aFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6MDk6NDIuOTU3MzI5NDk0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODczNTY2MDc5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgaW50byB0aGUgTmVzdGVkIFZNIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBhIHBhdGNoIHRvIHJldmlldywgYW5kIGl0IGxvb2tzIGxpa2UgaXQncyBidXJpZWQgaW4gYGFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNgLiBMZXQncyBnZXQgdG8gaXQuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSdtIGdvaW5nIHRvIHB1bGwgdXAgdGhlIHBhdGNoIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiB0aGF0IGZpbGUuIENvbnRleHQgaXMgZXZlcnl0aGluZyB3aGVuIGl0IGNvbWVzIHRvIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2UgaW4gcmVsYXRpb24gdG8gdGhlIGV4aXN0aW5nIGltcGxlbWVudGF0aW9uLiBJJ20gZ29pbmcgdG8gemVybyBpbiBvbiB0aGUgYXJlYSBhcm91bmQgbGluZSA1MTIxLiBJJ2xsIG5lZWQgdG8gc2VlIHByZWNpc2VseSB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlLCB1bmRlcnN0YW5kIHRoZSBsb2dpYyBmbG93LCBhbmQgaWRlbnRpZnkgdGhlIHNwZWNpZmljIGNvZGUgc2VnbWVudHMgdGhhdCBhcmUgYmVpbmcgbW9kaWZpZWQuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMsIHJpZ2h0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW50IGJlaGluZCB0aGlzIGNoYW5nZSwgd2h5IGl0J3MgbmVjZXNzYXJ5LCBhbmQgd2hhdCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGl0IG1pZ2h0IGhhdmUgb24gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMTgsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE2OjA5OjUxLjY5Mjk5MzQ1MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4OTcwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUxMTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUxMTA6XFx0XFx0bGVhdmVfZ3Vlc3RfbW9kZSh2Y3B1KTtcXG41MTExOlxcdFxcbjUxMTI6XFx0XFx0aWYgKG5lc3RlZF9jcHVfaGFzX3ByZWVtcHRpb25fdGltZXIodm1jczEyKSlcXG41MTEzOlxcdFxcdFxcdGhydGltZXJfY2FuY2VsKFxcdTAwMjZ0b192bXgodmNwdSktXFx1MDAzZW5lc3RlZC5wcmVlbXB0aW9uX3RpbWVyKTtcXG41MTE0OlxcdFxcbjUxMTU6XFx0XFx0aWYgKG5lc3RlZF9jcHVfaGFzKHZtY3MxMiwgQ1BVX0JBU0VEX1VTRV9UU0NfT0ZGU0VUVElORykpIHtcXG41MTE2OlxcdFxcdFxcdHZjcHUtXFx1MDAzZWFyY2gudHNjX29mZnNldCA9IHZjcHUtXFx1MDAzZWFyY2gubDFfdHNjX29mZnNldDtcXG41MTE3OlxcdFxcdFxcdGlmIChuZXN0ZWRfY3B1X2hhczIodm1jczEyLCBTRUNPTkRBUllfRVhFQ19UU0NfU0NBTElORykpXFxuNTExODpcXHRcXHRcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLnRzY19zY2FsaW5nX3JhdGlvID0gdmNwdS1cXHUwMDNlYXJjaC5sMV90c2Nfc2NhbGluZ19yYXRpbztcXG41MTE5OlxcdFxcdH1cXG41MTIwOlxcdFxcbjUxMjE6XFx0XFx0aWYgKGxpa2VseSghdm14LVxcdTAwM2VmYWlsKSkge1xcbjUxMjI6XFx0XFx0XFx0c3luY192bWNzMDJfdG9fdm1jczEyKHZjcHUsIHZtY3MxMik7XFxuNTEyMzpcXHRcXG41MTI0OlxcdFxcdFxcdGlmICh2bV9leGl0X3JlYXNvbiAhPSAtMSkge1xcbjUxMjU6XFx0XFx0XFx0XFx0cHJlcGFyZV92bWNzMTIodmNwdSwgdm1jczEyLCB2bV9leGl0X3JlYXNvbixcXG41MTI2OlxcdFxcdFxcdFxcdFxcdCAgICAgICBleGl0X2ludHJfaW5mbywgZXhpdF9xdWFsaWZpY2F0aW9uLFxcbjUxMjc6XFx0XFx0XFx0XFx0XFx0ICAgICAgIGV4aXRfaW5zbl9sZW4pO1xcbjUxMjg6XFx0XFxuNTEyOTpcXHRcXHRcXHRcXHQvKlxcbjUxMzA6XFx0XFx0XFx0XFx0ICogTXVzdCBoYXBwZW4gb3V0c2lkZSBvZiBzeW5jX3ZtY3MwMl90b192bWNzMTIoKSBhcyBpdCB3aWxsXFxuNTEzMTpcXHRcXHRcXHRcXHQgKiBhbHNvIGJlIHVzZWQgdG8gY2FwdHVyZSB2bWNzMTIgY2FjaGUgYXMgcGFydCBvZlxcbjUxMzI6XFx0XFx0XFx0XFx0ICogY2FwdHVyaW5nIG5WTVggc3RhdGUgZm9yIHNuYXBzaG90IChtaWdyYXRpb24pLlxcbjUxMzM6XFx0XFx0XFx0XFx0ICpcXG41MTM0OlxcdFxcdFxcdFxcdCAqIE90aGVyd2lzZSwgdGhpcyBmbHVzaCB3aWxsIGRpcnR5IGd1ZXN0IG1lbW9yeSBhdCBhXFxuNTEzNTpcXHRcXHRcXHRcXHQgKiBwb2ludCBpdCBpcyBhbHJlYWR5IGFzc3VtZWQgYnkgdXNlci1zcGFjZSB0byBiZVxcbjUxMzY6XFx0XFx0XFx0XFx0ICogaW1tdXRhYmxlLlxcbjUxMzc6XFx0XFx0XFx0XFx0ICpcXG41MTM4OlxcdFxcdFxcdFxcdCAqIERvIG5vdCBmbHVzaCB3aGVuIHZtX2V4aXRfcmVhc29uID09IC0xIChlLmcuIGZvcmNlZCBleGl0XFxuNTEzOTpcXHRcXHRcXHRcXHQgKiBvbiB2Q1BVIHRlYXJkb3duIG9yIFNNTSBlbnRyeSkuIE9uIHRlYXJkb3duLCBLVk0gbWF5IHJ1blxcbjUxNDA6XFx0XFx0XFx0XFx0ICogd2l0aCBjdXJyZW50LVxcdTAwM2VtbSA9PSBOVUxMIG9uIGEgYm9ycm93ZWQgbGF6eSBUTEIgbW0sXFxuNTE0MTpcXHRcXHRcXHRcXHQgKiB3aGVyZSB3cml0aW5nIGd1ZXN0IG1lbW9yeSB3b3VsZCBjb3JydXB0IGFuIHVucmVsYXRlZFxcbjUxNDI6XFx0XFx0XFx0XFx0ICogdGFzay4gTm90aGluZyBjYW4gb2JzZXJ2ZSB0aGUgZmx1c2ggaW4gdGhhdCBjYXNlIGFueXdheS5cXG41MTQzOlxcdFxcdFxcdFxcdCAqL1xcbjUxNDQ6XFx0XFx0XFx0XFx0bmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyKHZjcHUsIHZtY3MxMik7XFxuNTE0NTpcXHRcXHRcXHR9XFxuNTE0NjpcXHRcXHR9IGVsc2Uge1xcbjUxNDc6XFx0XFx0XFx0LypcXG41MTQ4OlxcdFxcdFxcdCAqIFRoZSBvbmx5IGV4cGVjdGVkIFZNLWluc3RydWN0aW9uIGVycm9yIGlzIFxcXCJWTSBlbnRyeSB3aXRoXFxuNTE0OTpcXHRcXHRcXHQgKiBpbnZhbGlkIGNvbnRyb2wgZmllbGQocykuXFxcIiBBbnl0aGluZyBlbHNlIGluZGljYXRlcyBhXFxuNTE1MDpcXHRcXHRcXHQgKiBwcm9ibGVtIHdpdGggTDAuXFxuNTE1MTpcXHRcXHRcXHQgKi9cXG41MTUyOlxcdFxcdFxcdFdBUk5fT05fT05DRSh2bWNzX3JlYWQzMihWTV9JTlNUUlVDVElPTl9FUlJPUikgIT1cXG41MTUzOlxcdFxcdFxcdFxcdCAgICAgVk1YRVJSX0VOVFJZX0lOVkFMSURfQ09OVFJPTF9GSUVMRCk7XFxuNTE1NDpcXHRcXG41MTU1OlxcdFxcdFxcdC8qIFZNLUZhaWwgYXQgVk0tRW50cnkgbWVhbnMgS1ZNIG1pc3NlZCBhIGNvbnNpc3RlbmN5IGNoZWNrLiAqL1xcbjUxNTY6XFx0XFx0XFx0V0FSTl9PTl9PTkNFKHdhcm5fb25fbWlzc2VkX2NjKTtcXG41MTU3OlxcdFxcdH1cXG41MTU4OlxcdFxcbjUxNTk6XFx0XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6MDk6NTEuNjkzMjg1NjYzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzY0NDA2NTQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRhcmdldCBhbmQgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyB0d2Vha2luZyBgX19uZXN0ZWRfdm14X3ZtZXhpdGAgd2l0aGluIGBhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jYC4gIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UncmUgZGVhbGluZyB3aXRoIG5lc3RlZCBWTVggdm1leGl0cyDigJMgZWZmZWN0aXZlbHksIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiwgd2hpY2ggaXMgcmVsZXZhbnQgdG8gSW50ZWwvYW1kNjQgcGxhdGZvcm1zLiAgVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzIGFsd2F5cywgKmNhbiogdGhpcyBiZSBlZmZlY3RpdmVseSBmdXp6ZWQgdGhyb3VnaCBhIHRvb2wgbGlrZSBzeXprYWxsZXIsIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBRRU1VIHNldHVwPyAgRm9ydHVuYXRlbHksIHRoZSBhbnN3ZXIgbG9va3MgbGlrZSBhIHJlc291bmRpbmcgXCJ5ZXMuXCIgS1ZNLCBhbmQgYnkgZXh0ZW5zaW9uIG5lc3RlZCBWTVgsIHRocm91Z2ggYC9kZXYva3ZtYCwgaXMgYWxyZWFkeSBhIHByaW1lIHRhcmdldCBmb3Igc3l6a2FsbGVyJ3MgZnV6emluZy4gIFRoZXJlZm9yZSBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IEtWTSBhbmQgS1ZNX0lOVEVMIGNvbmZpZ3VyYXRpb25zIHRvIGVuc3VyZSBldmVyeXRoaW5nIGlzIHNldCB1cCB0byBleHBsb3JlIHRoaXMgcG90ZW50aWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDkyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6MDk6NTUuMzM3MzU0MDUzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMDIwMTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIktWTV9JTlRFTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MjA9Y29uZmlnIEtWTV9YODZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTpcXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjItXFx0c2VsZWN0IEtWTV9DT01NT05cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTgzPWNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDgtICAgICAgICBib29sIFxcXCJDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1xcXCJcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDk6ICAgICAgICBkZXBlbmRzIG9uIEtWTV9JTlRFTCBcXHUwMDI2XFx1MDAyNiBFWFBFUlRcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMTAtICAgICAgICBoZWxwXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTIzLVxcdGJvb2wgXFxcIlNvZnR3YXJlIEd1YXJkIGVYdGVuc2lvbnMgKFNHWCkgVmlydHVhbGl6YXRpb25cXFwiXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTI0OlxcdGRlcGVuZHMgb24gWDg2X1NHWCBcXHUwMDI2XFx1MDAyNiBLVk1fSU5URUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMjUtXFx0aGVscFxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlPTIxPWt2bS1pbnRlbC0kKENPTkZJR19LVk1fSFlQRVJWKVxcdCs9IHZteC9oeXBlcnYubyB2bXgvaHlwZXJ2X2V2bWNzLm9cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6MjI6a3ZtLWludGVsLSQoQ09ORklHX0tWTV9JTlRFTF9URFgpXFx0Kz0gdm14L3RkeC5vXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlLTIzLVxcbi0tXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlPTM1PW9iai0kKENPTkZJR19LVk1fWDg2KVxcdCs9IGt2bS5vXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlOjM2Om9iai0kKENPTkZJR19LVk1fSU5URUwpXFx0Kz0ga3ZtLWludGVsLm9cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtMzctb2JqLSQoQ09ORklHX0tWTV9BTUQpXFx0Kz0ga3ZtLWFtZC5vXFxuLS1cXG5hcmNoL3g4Ni9rdm0va3ZtLWFzbS1vZmZzZXRzLmM9MTM9c3RhdGljIHZvaWQgX191c2VkIGNvbW1vbih2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL2t2bS1hc20tb2Zmc2V0cy5jLTI0LVxcbmFyY2gveDg2L2t2bS9rdm0tYXNtLW9mZnNldHMuYzoyNTpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfS1ZNX0lOVEVMKSkge1xcbmFyY2gveDg2L2t2bS9rdm0tYXNtLW9mZnNldHMuYy0yNi1cXHRcXHRCTEFOSygpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaD0zMz1zdHJ1Y3QgdmNwdV92dCB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTU3LVxcbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmg6NTg6I2lmZGVmIENPTkZJR19LVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaC01OS1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEyLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjEzOiNpZmRlZiBDT05GSUdfS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTE0LXN0YXRpY19hc3NlcnQob2Zmc2V0b2Yoc3RydWN0IHZjcHVfdm14LCB2dCkgPT0gb2Zmc2V0b2Yoc3RydWN0IHZjcHVfdGR4LCB2dCkpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9ODYzPXN0YXRpYyBpbnQgdnRfZ21lbV9tYXhfbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04NzMtI2RlZmluZSB2dF9vcF90ZHhfb25seShuYW1lKSB2dF8jI25hbWVcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo4NzQ6I2Vsc2UgLyogQ09ORklHX0tWTV9JTlRFTF9URFggKi9cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04NzUtI2RlZmluZSB2dF9vcChuYW1lKSB2bXhfIyNuYW1lXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODc2LSNkZWZpbmUgdnRfb3BfdGR4X29ubHkobmFtZSkgTlVMTFxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjg3NzojZW5kaWYgLyogQ09ORklHX0tWTV9JTlRFTF9URFggKi9cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04NzgtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oLTYtXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguaDo3OiNpZmRlZiBDT05GSUdfS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmgtOC0jaW5jbHVkZSBcXFwiY29tbW9uLmhcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTkwMj12b2lkIHZteF91cGRhdGVfZXhjZXB0aW9uX2JpdG1hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTkxMS1cXHQgKi9cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjkxMjpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfS1ZNX0lOVEVMX1BST1ZFX1ZFKSlcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTkxMy1cXHRcXHRlYiB8PSAxdSBcXHUwMDNjXFx1MDAzYyBWRV9WRUNUT1I7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTI3NDc9c3RhdGljIGludCBzZXR1cF92bWNzX2NvbmZpZyhzdHJ1Y3Qgdm1jc19jb25maWcgKnZtY3NfY29uZixcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtMjc5MC1cXHR9XFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzoyNzkxOlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfS1ZNX0lOVEVMX1BST1ZFX1ZFKSlcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTI3OTItXFx0XFx0X2NwdV9iYXNlZF8ybmRfZXhlY19jb250cm9sIFxcdTAwMjY9IH5TRUNPTkRBUllfRVhFQ19FUFRfVklPTEFUSU9OX1ZFO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmg9MTI3PXZvaWQgdm14X3NldHVwX21jZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oLTEyOC1cXG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaDoxMjk6I2lmZGVmIENPTkZJR19LVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmgtMTMwLXZvaWQgdGR4X2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5oPTMxMD1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQga3ZtX3JlcXVlc3RfbDF0Zl9mbHVzaF9sMWQodm9pZClcXG5hcmNoL3g4Ni9rdm0veDg2LmgtMzExLXtcXG5hcmNoL3g4Ni9rdm0veDg2Lmg6MzEyOiNpZiBJU19FTkFCTEVEKENPTkZJR19DUFVfTUlUSUdBVElPTlMpIFxcdTAwMjZcXHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0tWTV9JTlRFTClcXG5hcmNoL3g4Ni9rdm0veDg2LmgtMzEzLVxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE2OjA5OjU1LjM4NzM4MDA0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkwNDkzMzUwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLY29uZmlnIERpdmUgZm9yIEtWTSBcdTAwMjYgS1ZNX0lOVEVMKipcblxuT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHNvbWV0aGluZyBhYm91dCB0aGUgS1ZNIGNvbmZpZ3VyYXRpb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGp1bXAgaW50byB0aGUgYEtjb25maWdgIGZpbGVzIGFuZCBzZWUgd2hhdCdzIGdvaW5nIG9uIHdpdGggYEtWTWAgYW5kLCBzcGVjaWZpY2FsbHksIGBLVk1fSU5URUxgLiBJJ20gcHJvYmFibHkgbG9va2luZyBmb3IgYSBkZXBlbmRlbmN5IG9yIGEgZGVmYXVsdCBzZXR0aW5nIHRoYXQgSSB2YWd1ZWx5IHJlY2FsbCwgbWF5YmUgYSBjb25kaXRpb25hbCBidWlsZCwgb3IgYSBzcGVjaWZpYyBmZWF0dXJlIGdhdGUgdGhhdCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLiBLbm93aW5nIHdoZXJlIHRob3NlIGFyZSBkZWZpbmVkIHdpbGwgZWl0aGVyIGNvbmZpcm0gbXkgc3VzcGljaW9ucyBvciBpbW1lZGlhdGVseSBzaG93IG1lIHdoZXJlIHRvIGJlZ2luIHRyb3VibGVzaG9vdGluZy4gSXQncyBhIHF1aWNrIHdheSB0byBiYXNlbGluZSB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IgYW5kIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGEgY3JpdGljYWwgZGV0YWlsIHJlbGF0ZWQgdG8gdGhlIGhhcmR3YXJlIG9yIHRoZSBrZXJuZWwgdmVyc2lvbiBJJ20gZGVhbGluZyB3aXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Nzg2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6MDk6NTcuMjkyMzE2ODU3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg1MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMTU6XFx0XFxuICAxNjpcXHRcXHQgIElmIHlvdSBzYXkgTiwgYWxsIG9wdGlvbnMgaW4gdGhpcyBzdWJtZW51IHdpbGwgYmUgc2tpcHBlZCBhbmQgZGlzYWJsZWQuXFxuICAxNzpcXHRcXG4gIDE4OlxcdGlmIFZJUlRVQUxJWkFUSU9OXFxuICAxOTpcXHRcXG4gIDIwOlxcdGNvbmZpZyBLVk1fWDg2XFxuICAyMTpcXHRcXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXFxuICAyMjpcXHRcXHRzZWxlY3QgS1ZNX0NPTU1PTlxcbiAgMjM6XFx0XFx0c2VsZWN0IEtWTV9FTElERV9UTEJfRkxVU0hfSUZfWU9VTkdcXG4gIDI0OlxcdFxcdHNlbGVjdCBLVk1fTU1VX0xPQ0tMRVNTX0FHSU5HXFxuICAyNTpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fSVJRQ0hJUFxcbiAgMjY6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX1BGTkNBQ0hFXFxuICAyNzpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fRElSVFlfUklOR19UU09cXG4gIDI4OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9ESVJUWV9SSU5HX0FDUV9SRUxcXG4gIDI5OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9JUlFfQllQQVNTXFxuICAzMDpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fSVJRX1JPVVRJTkdcXG4gIDMxOlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9SRUFET05MWV9NRU1cXG4gIDMyOlxcdFxcdHNlbGVjdCBWSE9TVF9UQVNLXFxuICAzMzpcXHRcXHRzZWxlY3QgS1ZNX0FTWU5DX1BGXFxuICAzNDpcXHRcXHRzZWxlY3QgVVNFUl9SRVRVUk5fTk9USUZJRVJcXG4gIDM1OlxcdFxcdHNlbGVjdCBLVk1fTU1JT1xcbiAgMzY6XFx0XFx0c2VsZWN0IFNDSEVEX0lORk9cXG4gIDM3OlxcdFxcdHNlbGVjdCBQRVJGX0VWRU5UU1xcbiAgMzg6XFx0XFx0c2VsZWN0IEdVRVNUX1BFUkZfRVZFTlRTXFxuICAzOTpcXHRcXHRzZWxlY3QgUEVSRl9HVUVTVF9NRURJQVRFRF9QTVVcXG4gIDQwOlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9NU0lcXG4gIDQxOlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9DUFVfUkVMQVhfSU5URVJDRVBUXFxuICA0MjpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fTk9fUE9MTFxcbiAgNDM6XFx0XFx0c2VsZWN0IFZJUlRfWEZFUl9UT19HVUVTVF9XT1JLXFxuICA0NDpcXHRcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUXFxuICA0NTpcXHRcXHRzZWxlY3QgS1ZNX1ZGSU9cXG4gIDQ2OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9QTV9OT1RJRklFUiBpZiBQTVxcbiAgNDc6XFx0XFx0c2VsZWN0IEtWTV9HRU5FUklDX0hBUkRXQVJFX0VOQUJMSU5HXFxuICA0ODpcXHRcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxcbiAgNDk6XFx0XFx0c2VsZWN0IEtWTV9XRVJST1IgaWYgV0VSUk9SXFxuICA1MDpcXHRcXHRzZWxlY3QgS1ZNX0dVRVNUX01FTUZEIGlmIFg4Nl82NFxcbiAgNTE6XFx0XFxuICA1MjpcXHRjb25maWcgS1ZNXFxuICA1MzpcXHRcXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbiAgNTQ6XFx0XFx0ZGVwZW5kcyBvbiBYODZfTE9DQUxfQVBJQ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjowOTo1Ny4yOTI0MTc2OTdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjk0MTgwMDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIExhbmRzY2FwZSBvZiBgX19uZXN0ZWRfdm14X3ZtZXhpdGAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBgX19uZXN0ZWRfdm14X3ZtZXhpdGAgZnVuY3Rpb24uIEkgd2FudCB0byBzZWUgYSBmdWxsIHBpY3R1cmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoZXJlIGRvZXMgdGhpcyB0aGluZyBsaXZlIGluIHRoZSBjb2RlP1wiIEkgbmVlZCBhIGNvbXByZWhlbnNpdmUgb3ZlcnZpZXcgb2YgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byBvdGhlciBjb21wb25lbnRzIHdpdGhpbiB0aGUgc3lzdGVtLlxuXG5GaXJzdCB0aGluZ3MgZmlyc3QsIEknbSBnb2luZyB0byB0cmFjayBkb3duIGV2ZXJ5IGluc3RhbmNlIHdoZXJlIGBfX25lc3RlZF92bXhfdm1leGl0YCBpcyBjYWxsZWQuIFRoYXQgbWVhbnMgZGl2aW5nIGludG8gdGhlIGNhbGwgZ3JhcGgsIGZpbmRpbmcgYWxsIHRoZSBjYWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24uIEkgbmVlZCB0byBpZGVudGlmeSBib3RoIHRoZSBkaXJlY3QgY2FsbHMgYW5kIGFueXRoaW5nIHRoYXQgbWlnaHQgYmUgaW5kaXJlY3QuXG5cblNlY29uZCwgSSBuZWVkIHRvIGxvb2sgYXQgYW55IHN5bWJvbCByZWxhdGluZyB0byB0aGUgc2FtZSB0b3BpYyB0aGF0J3MgKm5vdCogc3RhdGljLCBzbyBJIGdldCBhIGhhbmRsZSBvbiB0aGUgZnVuY3Rpb24ncyBzY29wZS4gVGhpcyBpcyBjcnVjaWFsIGZvciBmdWxseSBncmFzcGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIEknbSBhZnRlciBhIGNsZWFyIG1hcCBvZiBhbGwgdGhlIHBvaW50cyBvZiBpbnRlcmFjdGlvbiwgc28gSSBjYW4gcHJlZGljdCBpdHMgYmVoYXZpb3IgYW5kIGFueSBwb3RlbnRpYWwgcGl0ZmFsbHMuIFRoaXMgY291bGQgZXhwb3NlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjQzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjowOTo1OS45ODY1OTk5MDZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMjExNTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbmVzdGVkX3ZteF92bWV4aXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NDk2MD1zdGF0aWMgdm9pZCBuZXN0ZWRfdm14X3Jlc3RvcmVfaG9zdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTUwNzItICovXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1MDczOnZvaWQgX19uZXN0ZWRfdm14X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2bV9leGl0X3JlYXNvbixcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTUwNzQtXFx0XFx0XFx0IHUzMiBleGl0X2ludHJfaW5mbywgdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oPTI5PWJvb2wgbmVzdGVkX3ZteF9yZWZsZWN0X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmg6MzA6dm9pZCBfX25lc3RlZF92bXhfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZtX2V4aXRfcmVhc29uLFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmgtMzEtXFx0XFx0XFx0IHUzMiBleGl0X2ludHJfaW5mbywgdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oPTM0PXN0YXRpYyBpbmxpbmUgdm9pZCBuZXN0ZWRfdm14X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2bV9leGl0X3JlYXNvbixcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmgtNDUtXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaDo0NjpcXHRfX25lc3RlZF92bXhfdm1leGl0KHZjcHUsIHZtX2V4aXRfcmVhc29uLCBleGl0X2ludHJfaW5mbyxcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oLTQ3LVxcdFxcdFxcdCAgICBleGl0X3F1YWxpZmljYXRpb24sIGV4aXRfaW5zbl9sZW4pO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYz04MTkwPWludCB2bXhfY2hlY2tfaW50ZXJjZXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODI4MC1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjgyODE6XFx0X19uZXN0ZWRfdm14X3ZtZXhpdCh2Y3B1LCB2bV9leGl0X3JlYXNvbiwgMCwgZXhpdF9xdWFsaWZpY2F0aW9uLFxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODI4Mi1cXHRcXHRcXHQgICAgZXhpdF9pbnNuX2xlbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE2OjEwOjAwLjAzODgyMTI2NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjMyNzMxNDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgbmVzdGVkX3ZteF92bWV4aXRgIENhbGwgR3JhcGggYW5kIFBvdGVudGlhbCBFcnJvciBDb25kaXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGBuZXN0ZWRfdm14X3ZtZXhpdGAgaXMgdXNlZCB3aXRoaW4gdGhpcyBuZXN0ZWQgdmlydHVhbGl6YXRpb24gY29udGV4dC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXTigJlzIHF1aXRlIGNlbnRyYWwgdG8gdGhlIHdob2xlIHRoaW5nLiBJIHNlZSB0aGF0IGBuZXN0ZWRfdm14X3ZtZXhpdGAgaXMsIGluIGVzc2VuY2UsIHRoZSBlbnRyeSBwb2ludCBmb3IgaGFuZGxpbmcgVk0gZXhpdHMgd2hlbiBydW5uaW5nIG5lc3RlZCBWTXMuIEl0IHNlZW1zIHRvIGJlIHRoZSBwcmltYXJ5IGhhbmRsZXIuIEkgY2FuIHNlZSB0aGF0IGBuZXN0ZWRfdm14X3ZtZXhpdGAgZ2V0cyBjYWxsZWQgYnkgYG5lc3RlZF92bXhfdm1leGl0YCBpdHNlbGYgKHdoaWNoIGlzIGxpa2VseSByZWxhdGVkIHRvIHJlY3Vyc2lvbiBvciBuZXN0ZWQgZXhpdHMgd2l0aGluIG5lc3RlZCBWTXMpIGFuZCBhbHNvIGFjcm9zcyBgbmVzdGVkLmNgIGFuZCBgdm14LmNgLCB3aGljaCBtYWtlcyBzZW5zZSBhcyB0aGVzZSBhcmUga2V5IG1vZHVsZXMgZm9yIG5lc3RlZCBWTVggb3BlcmF0aW9uLiBJbXBvcnRhbnRseSwgaXQncyBhbHNvIGNhbGxlZCBkaXJlY3RseSBieSBgdm14X2NoZWNrX2ludGVyY2VwdGAsIHByb2JhYmx5IHdoZW4gY2hlY2tpbmcgZm9yIHNwZWNpZmljIGV2ZW50cyB0aGUgZ3Vlc3Qgc2hvdWxkIGhhdmUgaW50ZXJjZXB0ZWQgYnkgZGVmYXVsdCwgYW5kIGR1cmluZyBmb3JjZWQgZXhpdHMuXG5cbk5vdywgbXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdW5kZXJzdGFuZGluZyAqYWxsKiB0aGUgZW50cnkgcG9pbnRzIGludG8gdGhpcyBoYW5kbGVyIGFuZCBhbnkgcG90ZW50aWFsIGZhaWx1cmUgbW9kZXMuIEkgbmVlZCB0byBzcGVjaWZpY2FsbHkgdHJhY2UgYmFjayBhbGwgb2YgdGhlIGNhbGxlcnMgb2YgYG5lc3RlZF92bXhfdm1leGl0YCAod2hpY2ggbWF5IGluY2x1ZGUgbG9va2luZyBmb3IgY3Jvc3MtY2FsbHMpIG9yIGxvb2sgZm9yIHNpdHVhdGlvbnMgd2hlcmUgYHZtX2V4aXRfcmVhc29uID09IC0xYCBtaWdodCBiZSBwYXNzZWQuIFRoYXQgdmFsdWUgbG9va3MgbGlrZSBhbiB1bmluaXRpYWxpemVkIG9yIGVycm9yIHN0YXRlLiBUaGUgZmlyc3Qgc3RlcCB3aWxsIGJlIHRvIGNvbmZpcm0gdGhpcyBoeXBvdGhlc2lzOiBpZiBgLTFgIGlzIHBhc3NlZCBhdCBhbiBleGl0LCBpdOKAmXMgYWxtb3N0IGNlcnRhaW5seSBhbiBlcnJvciwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBwYXRoIHRoYXQgcmVzdWx0ZWQgaW4gdGhhdCBjb25kaXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1NDksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjoxMDowMy4yNzE1NTUyNzlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNzQ2MTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5lc3RlZF92bXhfdm1leGl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5jPTIyNz12b2lkIHZteF9odl9pbmplY3Rfc3ludGhldGljX3ZtZXhpdF9wb3N0X3RsYl9mbHVzaChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuYy0yMjgte1xcbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmM6MjI5OlxcdG5lc3RlZF92bXhfdm1leGl0KHZjcHUsIEhWX1ZNWF9TWU5USEVUSUNfRVhJVF9SRUFTT05fVFJBUF9BRlRFUl9GTFVTSCwgMCwgMCk7XFxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuYy0yMzAtfVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz00MjE9c3RhdGljIHZvaWQgbmVzdGVkX2VwdF9pbmplY3RfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQ5Mi1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjQ5MzpcXHRuZXN0ZWRfdm14X3ZtZXhpdCh2Y3B1LCB2bV9leGl0X3JlYXNvbiwgMCwgZXhpdF9xdWFsaWZpY2F0aW9uKTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQ5NC1cXHR2bWNzMTItXFx1MDAzZWd1ZXN0X3BoeXNpY2FsX2FkZHJlc3MgPSBmYXVsdC1cXHUwMDNlYWRkcmVzcztcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MzYyOT1lbnVtIG52bXhfdm1lbnRyeV9zdGF0dXMgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzczNy1cXHQgKiBEbyBub3Qgc3RhcnQgdGhlIHByZWVtcHRpb24gdGltZXIgaHJ0aW1lciB1bnRpbCBhZnRlciB3ZSBrbm93XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozNzM4OlxcdCAqIHdlIGFyZSBzdWNjZXNzZnVsLCBzbyB0aGF0IG9ubHkgbmVzdGVkX3ZteF92bWV4aXQgbmVlZHMgdG8gY2FuY2VsXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNzM5LVxcdCAqIHRoZSB0aW1lci5cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzc1MC1cXHQgKiByZXR1cm5lZCBhcyBmYXIgYXMgTDEgaXMgY29uY2VybmVkLiBJdCB3aWxsIG9ubHkgcmV0dXJuIChhbmQgc2V0XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozNzUxOlxcdCAqIHRoZSBzdWNjZXNzIGZsYWcpIHdoZW4gTDIgZXhpdHMgKHNlZSBuZXN0ZWRfdm14X3ZtZXhpdCgpKS5cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM3NTItXFx0ICovXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTQwNzI9c3RhdGljIHZvaWQgbmVzdGVkX3ZteF9pbmplY3RfZXhjZXB0aW9uX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQxMTgtXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo0MTE5OlxcdG5lc3RlZF92bXhfdm1leGl0KHZjcHUsIEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUksIGludHJfaW5mbywgZXhpdF9xdWFsKTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQxMjAtfVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz00MzA1PXN0YXRpYyBpbnQgdm14X2NoZWNrX25lc3RlZF9ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy00MzQyLVxcdFxcdGlmICh2Y3B1LVxcdTAwM2VhcmNoLm1wX3N0YXRlICE9IEtWTV9NUF9TVEFURV9JTklUX1JFQ0VJVkVEKVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NDM0MzpcXHRcXHRcXHRuZXN0ZWRfdm14X3ZtZXhpdCh2Y3B1LCBFWElUX1JFQVNPTl9JTklUX1NJR05BTCwgMCwgMCk7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy00MzQ0LVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy00MzU2LVxcdFxcdGlmICh2Y3B1LVxcdTAwM2VhcmNoLm1wX3N0YXRlID09IEtWTV9NUF9TVEFURV9JTklUX1JFQ0VJVkVEKSB7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo0MzU3OlxcdFxcdFxcdG5lc3RlZF92bXhfdm1leGl0KHZjcHUsIEVYSVRfUkVBU09OX1NJUElfU0lHTkFMLCAwLFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNDM1OC1cXHRcXHRcXHRcXHRcXHRcXHRhcGljLVxcdTAwM2VzaXBpX3ZlY3RvciBcXHUwMDI2IDB4RkZVTCk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQzOTMtXFx0XFx0bmVzdGVkX3ZteF91cGRhdGVfcGVuZGluZ19kYmcodmNwdSk7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo0Mzk0OlxcdFxcdG5lc3RlZF92bXhfdm1leGl0KHZjcHUsIEVYSVRfUkVBU09OX01PTklUT1JfVFJBUF9GTEFHLCAwLCAwKTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQzOTUtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQ0MTQtXFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjQ0MTU6XFx0XFx0bmVzdGVkX3ZteF92bWV4aXQodmNwdSwgRVhJVF9SRUFTT05fUFJFRU1QVElPTl9USU1FUiwgMCwgMCk7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy00NDE2LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy00NDMwLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NDQzMTpcXHRcXHRuZXN0ZWRfdm14X3ZtZXhpdCh2Y3B1LCBFWElUX1JFQVNPTl9FWENFUFRJT05fTk1JLFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNDQzMi1cXHRcXHRcXHRcXHQgIE5NSV9WRUNUT1IgfCBJTlRSX1RZUEVfTk1JX0lOVFIgfFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy00NDU2LVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NDQ1NzpcXHRcXHRcXHRuZXN0ZWRfdm14X3ZtZXhpdCh2Y3B1LCBFWElUX1JFQVNPTl9FWFRFUk5BTF9JTlRFUlJVUFQsIDAsIDApO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNDQ1OC1cXHRcXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNDQ2NS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjQ0NjY6XFx0XFx0XFx0bmVzdGVkX3ZteF92bWV4aXQodmNwdSwgRVhJVF9SRUFTT05fRVhURVJOQUxfSU5URVJSVVBULFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNDQ2Ny1cXHRcXHRcXHRcXHRcXHQgIElOVFJfSU5GT19WQUxJRF9NQVNLIHwgSU5UUl9UWVBFX0VYVF9JTlRSIHwgaXJxLCAwKTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNDUwMS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjQ1MDI6XFx0XFx0bmVzdGVkX3ZteF92bWV4aXQodmNwdSwgRVhJVF9SRUFTT05fRVhURVJOQUxfSU5URVJSVVBULFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNDUwMy1cXHRcXHRcXHRcXHQgIElOVFJfSU5GT19WQUxJRF9NQVNLIHwgSU5UUl9UWVBFX0VYVF9JTlRSIHwgaXJxLCAwKTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NDk2MD1zdGF0aWMgdm9pZCBuZXN0ZWRfdm14X3Jlc3RvcmVfaG9zdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTUwNzItICovXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1MDczOnZvaWQgX19uZXN0ZWRfdm14X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2bV9leGl0X3JlYXNvbixcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTUwNzQtXFx0XFx0XFx0IHUzMiBleGl0X2ludHJfaW5mbywgdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTUyMzk9c3RhdGljIHZvaWQgbmVzdGVkX3ZteF90cmlwbGVfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01MjQxLVxcdGt2bV9jbGVhcl9yZXF1ZXN0KEtWTV9SRVFfVFJJUExFX0ZBVUxULCB2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjUyNDI6XFx0bmVzdGVkX3ZteF92bWV4aXQodmNwdSwgRVhJVF9SRUFTT05fVFJJUExFX0ZBVUxULCAwLCAwKTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTUyNDMtfVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz02MjAwPXN0YXRpYyBpbnQgaGFuZGxlX3ZtZnVuYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTYyNDQtXFx0ICovXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo2MjQ1OlxcdG5lc3RlZF92bXhfdm1leGl0KHZjcHUsIHZteC1cXHUwMDNldnQuZXhpdF9yZWFzb24uZnVsbCxcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTYyNDYtXFx0XFx0XFx0ICB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NjcwOT1ib29sIG5lc3RlZF92bXhfcmVmbGVjdF92bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02NzU2LXJlZmxlY3Rfdm1leGl0OlxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Njc1NzpcXHRuZXN0ZWRfdm14X3ZtZXhpdCh2Y3B1LCBleGl0X3JlYXNvbi5mdWxsLCBleGl0X2ludHJfaW5mbywgZXhpdF9xdWFsKTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTY3NTgtXFx0cmV0dXJuIHRydWU7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTY4ODQ9dm9pZCB2bXhfbGVhdmVfbmVzdGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjg4Ny1cXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLm5lc3RlZF9ydW5fcGVuZGluZyA9IDA7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo2ODg4OlxcdFxcdG5lc3RlZF92bXhfdm1leGl0KHZjcHUsIC0xLCAwLCAwKTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTY4ODktXFx0fVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaD0yOT1ib29sIG5lc3RlZF92bXhfcmVmbGVjdF92bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oOjMwOnZvaWQgX19uZXN0ZWRfdm14X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2bV9leGl0X3JlYXNvbixcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oLTMxLVxcdFxcdFxcdCB1MzIgZXhpdF9pbnRyX2luZm8sIHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaC0zMy1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oOjM0OnN0YXRpYyBpbmxpbmUgdm9pZCBuZXN0ZWRfdm14X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2bV9leGl0X3JlYXNvbixcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oLTM1LVxcdFxcdFxcdFxcdCAgICAgdTMyIGV4aXRfaW50cl9pbmZvLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaC00NS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oOjQ2OlxcdF9fbmVzdGVkX3ZteF92bWV4aXQodmNwdSwgdm1fZXhpdF9yZWFzb24sIGV4aXRfaW50cl9pbmZvLFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmgtNDctXFx0XFx0XFx0ICAgIGV4aXRfcXVhbGlmaWNhdGlvbiwgZXhpdF9pbnNuX2xlbik7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTY3MDg9c3RhdGljIGludCBfX3ZteF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjc3MC1cXHRcXHRpZiAodm14LVxcdTAwM2V2dC5lbXVsYXRpb25fcmVxdWlyZWQpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjY3NzE6XFx0XFx0XFx0bmVzdGVkX3ZteF92bWV4aXQodmNwdSwgRVhJVF9SRUFTT05fVFJJUExFX0ZBVUxULCAwLCAwKTtcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTY3NzItXFx0XFx0XFx0cmV0dXJuIDE7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTgxOTA9aW50IHZteF9jaGVja19pbnRlcmNlcHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy04MjgwLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6ODI4MTpcXHRfX25lc3RlZF92bXhfdm1leGl0KHZjcHUsIHZtX2V4aXRfcmVhc29uLCAwLCBleGl0X3F1YWxpZmljYXRpb24sXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy04MjgyLVxcdFxcdFxcdCAgICBleGl0X2luc25fbGVuKTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM9ODQ4Mj1pbnQgdm14X2VudGVyX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuaW9uIGt2bV9zbXJhbSAqc21yYW0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTg0OTQtXFx0aWYgKHZteC1cXHUwMDNlbmVzdGVkLnNtbS5ndWVzdF9tb2RlKVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6ODQ5NTpcXHRcXHRuZXN0ZWRfdm14X3ZtZXhpdCh2Y3B1LCAtMSwgMCwgMCk7XFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy04NDk2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjoxMDowMy4zMjMzMDYyMjdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDY2ODc4NTIzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgS1ZNIFZ1bG5lcmFiaWxpdHkgUGF0Y2gqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ20gc2VlaW5nLiBUaGlzIHBhdGNoIGlzIG1ha2luZyBhIHRhcmdldGVkIGNoYW5nZSB3aXRoaW4gdGhlIEtWTSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gY29kZSwgc3BlY2lmaWNhbGx5IGluIGBhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jYC4gIEl0J3MgYSBzdWJ0bGUgYnV0IHBvdGVudGlhbGx5IGltcG9ydGFudCBtb2RpZmljYXRpb24gdG8gdGhlIGBfX25lc3RlZF92bXhfdm1leGl0YCBmdW5jdGlvbi4gVGhlIG9yaWdpbmFsIGNvZGUgdW5jb25kaXRpb25hbGx5IGNhbGxlZCBgbmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyKHZjcHUsIHZtY3MxMilgIGFmdGVyIGNlcnRhaW4gY2hlY2tzIHJlbGF0ZWQgdG8gdGhlIGB2bV9leGl0X3JlYXNvbmAuICBUaGUgcGF0Y2ggY29uZGl0aW9uYWxpemVzIHRoaXMgY2FsbCwgbm93IG9ubHkgZXhlY3V0aW5nIGBuZXN0ZWRfZmx1c2hfY2FjaGVkX3NoYWRvd192bWNzMTJgIGlmIGB2bV9leGl0X3JlYXNvbmAgaXNuJ3QgLTEuIFRoZSBpbnRlcmVzdGluZyB0aGluZyBpcyB0aGF0ICBgdm14X2xlYXZlX25lc3RlZCh2Y3B1KWAgYW5kIGB2bXhfZW50ZXJfc21tKHZjcHUsIHNtcmFtKWAgYm90aCBsZWFkIHRvIGEgY2FsbCB0byBgbmVzdGVkX3ZteF92bWV4aXRgIHdpdGggYHZtX2V4aXRfcmVhc29uYCBzZXQgdG8gLTEuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgdGhpcyBjaGFuZ2UgKmNvdWxkKiBiZSByZWxhdGVkIHRvIGEgc3BlY2lmaWMgaXNzdWUgaW4gaG93IHRoZSBzaGFkb3cgVk1DUzEyIGlzIGhhbmRsZWQgZHVyaW5nIHRoZXNlIHNwZWNpZmljIGV4aXRzLiAgVGhlIGZhY3QgdGhhdCBpdCdzIGNvbmRpdGlvbmFsIG5vdyBtYWtlcyBtZSB3b25kZXIgYWJvdXQgc29tZSBjb3JuZXIgY2FzZSBvciByYWNlIGNvbmRpdGlvbi4gIEl0J3MgdmVyeSBsaWtlbHkgZXhlY3V0YWJsZSwgYXMgaXQgdG91Y2hlcyB0aGUgY29yZSBvZiBLVk0ncyBuZXN0ZWQgdmlydHVhbGl6YXRpb24gaW1wbGVtZW50YXRpb24sIHNvbWV0aGluZyBhY3RpdmVseSB1c2VkIGluIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRzLiAgU3BlY2lmaWNhbGx5LCBpdCBkZWFscyB3aXRoIGB2bXhfbGVhdmVfbmVzdGVkYCBhbmQgYHZteF9lbnRlcl9zbW1gLCB0d28gdmVyeSBpbnRlcmVzdGluZyBhcmVhcy5cblxuR2l2ZW4gbXkgZmllbGQsIFN5emthbGxlcidzIGZ1enppbmcgZm9jdXMgb24gdGhpcyBhcmVhIGlzIHBhcnRpY3VsYXJseSByZWxldmFudC4gIEl0IGV4dGVuc2l2ZWx5IHRlc3RzIEtWTSdzIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBmZWF0dXJlcywgaW5jbHVkaW5nIGBLVk1fUlVOYCwgc3RhdGUgbWFuYWdlbWVudCwgYW5kIHRoZSBleGVjdXRpb24gb2YgVk1YIGluc3RydWN0aW9ucyBsaWtlIFZNTEFVTkNILCBWTVJFU1VNRSwgVk1XUklURSBhbmQgVk1SRUFELiBUaGUgc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIChgS1ZNYCBhbmQgYEtWTV9JTlRFTGApIGFyZSBhbHNvIG1ldC4gVGhlIGxpc3RlZCBmdW5jdGlvbnMsIG5hbWVseSBgX19uZXN0ZWRfdm14X3ZtZXhpdGAsIGBuZXN0ZWRfZmx1c2hfY2FjaGVkX3NoYWRvd192bWNzMTJgLCBgdm14X2xlYXZlX25lc3RlZGAsIGFuZCBgdm14X2VudGVyX3NtbWAsIG1ha2UgZm9yIGdyZWF0IGZvY3VzZWQgZnV6eiB0YXJnZXRzLiBOb3csIGxldCBtZSBjaGVjayBpZiBgbmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyYCBpcyBzdGF0aWMgb3Igbm9uLXN0YXRpYyB3aXRoaW4gYGFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNgLiBUaGF0IHdpbGwgaGVscCBkZXRlcm1pbmUgaG93IHJlYWNoYWJsZSB0aGlzIGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjMwOCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjoxMDowNy45OTIwOTQ4NjlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMDMzNDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5lc3RlZF9mbHVzaF9jYWNoZWRfc2hhZG93X3ZtY3MxMlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz04NTE9c3RhdGljIHZvaWQgbmVzdGVkX2NhY2hlX3NoYWRvd192bWNzMTIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy04NjktXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo4NzA6c3RhdGljIHZvaWQgbmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTg3MS1cXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgdm1jczEyICp2bWNzMTIpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTUwNzM9dm9pZCBfX25lc3RlZF92bXhfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZtX2V4aXRfcmVhc29uLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01MTQzLVxcdFxcdFxcdCAqL1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTE0NDpcXHRcXHRcXHRuZXN0ZWRfZmx1c2hfY2FjaGVkX3NoYWRvd192bWNzMTIodmNwdSwgdm1jczEyKTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTUxNDUtXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjoxMDowOC4wNDMxMzYyNjdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg5NzI3NDc5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgSSBhbmFseXplIHRoaXM6XG5cbioqQW5hbHl6aW5nIEtWTS1JbnRlbCBOZXN0aW5nIGFuZCBFeGl0IEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHNvbWUgS1ZNLUludGVsIGNvZGUgYW5kIEkndmUgZ290IGEgZmV3IGtleSBmdW5jdGlvbnMgaW4gbWluZC4gYF9fbmVzdGVkX3ZteF92bWV4aXRgIGlzIHRoZSBiaWcgb25lLCBpdCdzIGdsb2JhbCwgc28gaXQncyBhIGNyaXRpY2FsIGVudHJ5IHBvaW50IGZvciBuZXN0ZWQgdmlydHVhbGl6YXRpb24gVk0gZXhpdHMgd2l0aGluIHRoZSBrdm0taW50ZWwgbW9kdWxlLiBUaGF0IG1lYW5zIGl0IGlzIHRoZSBmdW5jdGlvbiB0aGF0IHRoZSBuZXN0ZWQgVk0gdXNlcyB0byByZXR1cm4gY29udHJvbCB0byB0aGUgaG9zdC5cblxuTm93LCBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBhcm91bmQgaXQuIEkgc2VlIHRoYXQgYHZteF9sZWF2ZV9uZXN0ZWRgIGlzIGFub3RoZXIgZnVuY3Rpb24gdGhhdCBpc24ndCBzdGF0aWMuIFRoYXQgdGVsbHMgbWUgaXQncyBsaWtlbHkgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGUgZmlsZSBvciBwb3NzaWJseSBldmVuIGEgZGlmZmVyZW50IG1vZHVsZS4gSXQncyByZWxhdGVkIHRvIHRlYXJkb3duLCByZXNldHMsIG9yIHNvbWUgSU9DVEwgaGFuZGxpbmcgb2YgdGhlIHZDUFUuIFRoYXQgc3VnZ2VzdHMgaXQgbWlnaHQgYmUgaW52b2x2ZWQgaW4gY2xlYW5pbmcgdXAgYWZ0ZXIgYSBuZXN0ZWQgVk0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZW4gdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZS5cblxuVGhlbiB0aGVyZSdzIGB2bXhfZW50ZXJfc21tYCwgd2hpY2ggaXMgYWxzbyBub24tc3RhdGljLiBUaGUgbmFtZSBzdWdnZXN0cyB0aGlzIG1pZ2h0IGJlIHJlbGF0ZWQgdG8gU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSAoU01NKS4gSSB3b25kZXIgaG93IHRoaXMgcmVsYXRlcyB0byBuZXN0ZWQgdmlydHVhbGl6YXRpb24sIGFuZCBpZiBpdCdzIHBvdGVudGlhbGx5IGludGVyYWN0aW5nIHdpdGggYHZteF9sZWF2ZV9uZXN0ZWRgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBhbmQgaG93IHRoYXQgaXMgY2FsbGVkIGFzIHdlbGwuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgd2FudCB0byB0cmFjZSB0aGUgY2FsbHMgdG8gYHZteF9sZWF2ZV9uZXN0ZWRgLiBLbm93aW5nICp3aG8qIGNhbGxzIGl0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGl0cyByb2xlIGluIHRoZSBiaWdnZXIgcGljdHVyZSBvZiBuZXN0ZWQgdmlydHVhbGl6YXRpb24gYW5kIHRoZSB2Q1BVIGxpZmVjeWNsZS4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZSBjb2RlIGlzIHN0cnVjdHVyZWQgYXJvdW5kIHRoaXMgZnVuY3Rpb24gdG8gc2VlIHdoZXJlIGl0IHNpdHMgaW4gdGhlIGxhcmdlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzc0OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE2OjEwOjEwLjk0MDQxMzg1NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk5NzYwODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm14X2xlYXZlX25lc3RlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0zODY9dm9pZCBuZXN0ZWRfdm14X2ZyZWVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM4OC1cXHR2Y3B1X2xvYWQodmNwdSk7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozODk6XFx0dm14X2xlYXZlX25lc3RlZCh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM5MC1cXHR2Y3B1X3B1dCh2Y3B1KTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9Njc2MT1zdGF0aWMgaW50IHZteF9nZXRfbmVzdGVkX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjg4My1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjY4ODQ6dm9pZCB2bXhfbGVhdmVfbmVzdGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTY4ODUte1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz02OTE1PXN0YXRpYyBpbnQgdm14X3NldF9uZXN0ZWRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02OTg0LVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Njk4NTpcXHR2bXhfbGVhdmVfbmVzdGVkKHZjcHUpO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjk4Ni1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NzUwMT1zdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIHZteF9uZXN0ZWRfb3BzIF9faW5pdGRhdGEgPSB7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo3NTAyOlxcdC5sZWF2ZV9uZXN0ZWQgPSB2bXhfbGVhdmVfbmVzdGVkLFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzUwMy1cXHQudHJhbnNsYXRlX25lc3RlZF9ncGEgPSB2bXhfdHJhbnNsYXRlX25lc3RlZF9ncGEsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oPTEzPWVudW0gbnZteF92bWVudHJ5X3N0YXR1cyB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oLTE5LVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmg6MjA6dm9pZCB2bXhfbGVhdmVfbmVzdGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaC0yMS12b2lkIG5lc3RlZF92bXhfc2V0dXBfY3Rsc19tc3JzKHN0cnVjdCB2bWNzX2NvbmZpZyAqdm1jc19jb25mLCB1MzIgZXB0X2NhcHMpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYz0yMzM1PWludCB2bXhfc2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTI1MDAtXFx0XFx0aWYgKG1zcl9pbmZvLVxcdTAwM2Vob3N0X2luaXRpYXRlZCBcXHUwMDI2XFx1MDAyNiBkYXRhID09IDApXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzoyNTAxOlxcdFxcdFxcdHZteF9sZWF2ZV9uZXN0ZWQodmNwdSk7XFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy0yNTAyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjoxMDoxMC45OTAzOTQ4OTNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjUzODcwNzg4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgbmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBkaXNzZWN0IHRoZSBgbmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyYCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGV4YWN0IGZ1bmN0aW9uLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBhbmQgdGhlIGludHJpY2FjaWVzIG9mIHNoYWRvdyBWTUNTLCBJIGNhbiBhbnRpY2lwYXRlIHdoYXQgaXQncyBsaWtlbHkgcmVzcG9uc2libGUgZm9yOiBwcm9iYWJseSBkZWFsaW5nIHdpdGggY2FjaGUgY29oZXJlbmN5IGlzc3VlcyByZWxhdGVkIHRvIHRoZSBWTUNTMTIsIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBuZXN0ZWQgdmlydHVhbCBtYWNoaW5lIHBlcmZvcm1hbmNlIGFuZCBjb3JyZWN0bmVzcy4gU3BlY2lmaWNhbGx5LCBJJ20gZXhwZWN0aW5nIGl0IHdpbGwgaGFuZGxlIHRoZSBwcm9jZXNzIHRvIGludmFsaWRhdGUgb3Igc3luY2hyb25pemUgc3RhbGUgVk1DUzEyIGRhdGEgd2hlbiBzb21lIG90aGVyIGh5cGVydmlzb3IgY29tcG9uZW50IGhhcyBjaGFuZ2VkIHNvbWV0aGluZyBvciBwZXJoYXBzIHdoZW4gYSBndWVzdCBjaGFuZ2VzIGEgVk1DUyBmaWVsZCByZWxhdGVkIHRvIHRoZSBuZXN0ZWQgaHlwZXJ2aXNvci4gVGhpcyBpcyBhIHZlcnkgY3JpdGljYWwgZnVuY3Rpb24gZm9yIGd1YXJhbnRlZWluZyBjb3JyZWN0IGJlaGF2aW9yIGluIGEgY29tcGxleCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gc3lzdGVtLiBJJ2xsIGJlIGxvb2tpbmcgY2xvc2VseSBhdCBob3cgaXQgaGFuZGxlcyB0aGUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgYW5kIHdoYXQgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzIGl0J3MgdG91Y2hpbmcuIEknbSBrZWVuIHRvIHNwb3QgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIGx1cmtpbmcgaW4gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDU5LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6MTA6MTMuNTI5MTA0NTk1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NTA2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg2MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg2MDpcXHRcXG4gODYxOlxcdFxcdGlmIChnaGMtXFx1MDAzZWdwYSAhPSB2bWNzMTItXFx1MDAzZXZtY3NfbGlua19wb2ludGVyIFxcdTAwMjZcXHUwMDI2XFxuIDg2MjpcXHRcXHQgICAga3ZtX2dmbl90b19odmFfY2FjaGVfaW5pdCh2Y3B1LVxcdTAwM2Vrdm0sIGdoYyxcXG4gODYzOlxcdFxcdFxcdFxcdFxcdCAgICAgIHZtY3MxMi1cXHUwMDNldm1jc19saW5rX3BvaW50ZXIsIFZNQ1MxMl9TSVpFKSlcXG4gODY0OlxcdFxcdFxcdHJldHVybjtcXG4gODY1OlxcdFxcbiA4NjY6XFx0XFx0a3ZtX3JlYWRfZ3Vlc3RfY2FjaGVkKHZjcHUtXFx1MDAzZWt2bSwgZ2hjLCBnZXRfc2hhZG93X3ZtY3MxMih2Y3B1KSxcXG4gODY3OlxcdFxcdFxcdFxcdCAgICAgIFZNQ1MxMl9TSVpFKTtcXG4gODY4OlxcdH1cXG4gODY5OlxcdFxcbiA4NzA6XFx0c3RhdGljIHZvaWQgbmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gODcxOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB2bWNzMTIgKnZtY3MxMilcXG4gODcyOlxcdHtcXG4gODczOlxcdFxcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xcbiA4NzQ6XFx0XFx0c3RydWN0IGdmbl90b19odmFfY2FjaGUgKmdoYyA9IFxcdTAwMjZ2bXgtXFx1MDAzZW5lc3RlZC5zaGFkb3dfdm1jczEyX2NhY2hlO1xcbiA4NzU6XFx0XFxuIDg3NjpcXHRcXHRpZiAoIW5lc3RlZF9jcHVfaGFzX3NoYWRvd192bWNzKHZtY3MxMikgfHxcXG4gODc3OlxcdFxcdCAgICB2bWNzMTItXFx1MDAzZXZtY3NfbGlua19wb2ludGVyID09IElOVkFMSURfR1BBKVxcbiA4Nzg6XFx0XFx0XFx0cmV0dXJuO1xcbiA4Nzk6XFx0XFxuIDg4MDpcXHRcXHRpZiAoZ2hjLVxcdTAwM2VncGEgIT0gdm1jczEyLVxcdTAwM2V2bWNzX2xpbmtfcG9pbnRlciBcXHUwMDI2XFx1MDAyNlxcbiA4ODE6XFx0XFx0ICAgIGt2bV9nZm5fdG9faHZhX2NhY2hlX2luaXQodmNwdS1cXHUwMDNla3ZtLCBnaGMsXFxuIDg4MjpcXHRcXHRcXHRcXHRcXHQgICAgICB2bWNzMTItXFx1MDAzZXZtY3NfbGlua19wb2ludGVyLCBWTUNTMTJfU0laRSkpXFxuIDg4MzpcXHRcXHRcXHRyZXR1cm47XFxuIDg4NDpcXHRcXG4gODg1OlxcdFxcdGt2bV93cml0ZV9ndWVzdF9jYWNoZWQodmNwdS1cXHUwMDNla3ZtLCBnaGMsIGdldF9zaGFkb3dfdm1jczEyKHZjcHUpLFxcbiA4ODY6XFx0XFx0XFx0XFx0ICAgICAgIFZNQ1MxMl9TSVpFKTtcXG4gODg3OlxcdH1cXG4gODg4OlxcdFxcbiA4ODk6XFx0LypcXG4gODkwOlxcdCAqIEluIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiwgY2hlY2sgaWYgTDEgaGFzIHNldFxcbiA4OTE6XFx0ICogVk1fRVhJVF9BQ0tfSU5UUl9PTl9FWElUXFxuIDg5MjpcXHQgKi9cXG4gODkzOlxcdHN0YXRpYyBib29sIG5lc3RlZF9leGl0X2ludHJfYWNrX3NldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIDg5NDpcXHR7XFxuIDg5NTpcXHRcXHRyZXR1cm4gZ2V0X3ZtY3MxMih2Y3B1KS1cXHUwMDNldm1fZXhpdF9jb250cm9scyBcXHUwMDI2XFxuIDg5NjpcXHRcXHRcXHRWTV9FWElUX0FDS19JTlRSX09OX0VYSVQ7XFxuIDg5NzpcXHR9XFxuIDg5ODpcXHRcXG4gODk5OlxcdHN0YXRpYyBpbnQgbmVzdGVkX3ZteF9jaGVja19hcGljX2FjY2Vzc19jb250cm9scyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE2OjEwOjEzLjUyOTM4MTY5NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDU4MDIwMzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBLVk0gTmVzdGVkIFZNWCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB0aGUgaW5pdGlhbCBleGFtaW5hdGlvbiwgaXQncyBjbGVhciB0aGUgcHJpbWFyeSBmdW5jdGlvbiBvZiBpbnRlcmVzdCBpcyBgX19uZXN0ZWRfdm14X3ZtZXhpdGAuIEkndmUgYWxzbyBpZGVudGlmaWVkIHNldmVyYWwgb3RoZXIgcmVsYXRlZCBzeW1ib2xzIHRoYXQgYXJlIGxpa2VseSBpbXBhY3RlZCBieSB0aGlzIGNoYW5nZTogYG5lc3RlZF92bXhfZnJlZV92Y3B1YCwgYHZteF9sZWF2ZV9uZXN0ZWRgLCBgdm14X2VudGVyX3NtbWAsIGFuZCBgbmVzdGVkX3ZteF9yZWZsZWN0X3ZtZXhpdGAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGtleSBwbGF5ZXJzIGluIHRoaXMgbmVzdGVkIFZNWCBjb250ZXh0LlxuXG5OZXh0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEl0J3MgYWxtb3N0IGNlcnRhaW4gdGhpcyBpbnZvbHZlcyBgQ09ORklHX0tWTWAgYW5kIGBDT05GSUdfS1ZNX0lOVEVMYC4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBLYnVpbGQgZmlsZXMgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzLiBBaCwgeWVzLCBpbiBgYXJjaC94ODYva3ZtL01ha2VmaWxlYCwgdGhlIGluY2x1c2lvbiBvZiBga3ZtLWludGVsLm9gIGFuZCBpdHMgbmVzdGVkIGNvbXBvbmVudCBgdm14L25lc3RlZC5vYCBhcmUgZ292ZXJuZWQgYnkgYENPTkZJR19LVk1fSU5URUxgLCB3aGljaCBpdHNlbGYgZGVwZW5kcyBvbiBvciBzZWxlY3RzIGBLVk1gLiBTbywgdGhlIHByZXJlcXVpc2l0ZSBjb25maWd1cmF0aW9ucyBhcmUgZGVmaW5pdGVseSBgS1ZNYCBhbmQgYEtWTV9JTlRFTGAsIGFzIEkgc3VzcGVjdGVkLlxuXG5Ob3csIGxldCdzIHN1bW1hcml6ZSB0aGUgZnV6emluZyBzdHJhdGVneS4gVGhlIGNoYW5nZSB0byBgX19uZXN0ZWRfdm14X3ZtZXhpdCgpYCBhcHBlYXJzIHRvIHNraXAgZmx1c2hpbmcgdGhlIHNoYWRvdyBWTUNTMTIgdW5kZXIgc3BlY2lmaWMgY29uZGl0aW9uczogd2hlbiBgdm1fZXhpdF9yZWFzb24gPT0gLTFgLiBUaGlzIHBhcnRpY3VsYXJseSBoYXBwZW5zIGR1cmluZyB2Q1BVIHRlYXJkb3duIG9yIHdoZW4gZW50ZXJpbmcgU01NIChTeXN0ZW0gTWFuYWdlbWVudCBNb2RlKS4gVGhlIGNvcmUgY29uY2VybiBpcyB0byBhdm9pZCBtZW1vcnkgY29ycnVwdGlvbiwgcGFydGljdWxhcmx5IHdoZW4gYGN1cnJlbnQtXHUwMDNlbW1gIGlzIE5VTEwuIFRoaXMgcG9pbnRzIHRvIGEgdnVsbmVyYWJpbGl0eSB3aXRoaW4gY29yZSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gbG9naWMgb24geDg2L2FtZDY0LiBTbywgaXQgZGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nLlxuXG5NeSBjb25jbHVzaW9uOiBnaXZlbiB0aGUgcGF0Y2gncyBmb2N1cyBvbiBhIGNyaXRpY2FsIGFyZWEgb2YgbmVzdGVkIFZNWCwgd2l0aCBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gd2hlbiBzcGVjaWZpYyBjb25kaXRpb25zIChsaWtlIHZDUFUgdGVhcmRvd24pIG9jY3VyLCBmdXp6aW5nIGlzIGFuIGVmZmVjdGl2ZSBzdHJhdGVneS4gSXQncyBhIGhpZ2gtaW1wYWN0IGFyZWEgYW5kIHdvcnRoIGZvY3VzaW5nIG9uLiBMZXQncyBzZXQgdGhlIHJlc3VsdHMgYW5kIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwOTIsIk91dHB1dFRva2VucyI6MTk3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6MTA6MTcuOTg3NDA0NTc5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM2NTY3MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19uZXN0ZWRfdm14X3ZtZXhpdFwiLFxuICAgIFwidm14X2xlYXZlX25lc3RlZFwiLFxuICAgIFwidm14X2VudGVyX3NtbVwiLFxuICAgIFwibmVzdGVkX3ZteF9yZWZsZWN0X3ZtZXhpdFwiLFxuICAgIFwibmVzdGVkX3ZteF9mcmVlX3ZjcHVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBfX25lc3RlZF92bXhfdm1leGl0KCkgaW4gS1ZNIG5lc3RlZCBWTVggc3VwcG9ydCAoYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYykgdG8gcHJldmVudCBmbHVzaGluZyBjYWNoZWQgc2hhZG93IFZNQ1MxMiB3aGVuIHBlcmZvcm1pbmcgYSBmb3JjZWQgbmVzdGVkIFZNLWV4aXQgKHZtX2V4aXRfcmVhc29uID09IC0xLCBlLmcuIGR1cmluZyB2Q1BVIHRlYXJkb3duIG9yIFNNTSBlbnRyeSkuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocyBpbiBjb3JlIEtWTSB2aXJ0dWFsaXphdGlvbiBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIG9uIGFtZDY0LCB3YXJyYW50aW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX25lc3RlZF92bXhfdm1leGl0XCIsXG4gICAgXCJ2bXhfbGVhdmVfbmVzdGVkXCIsXG4gICAgXCJ2bXhfZW50ZXJfc21tXCIsXG4gICAgXCJuZXN0ZWRfdm14X3JlZmxlY3Rfdm1leGl0XCIsXG4gICAgXCJuZXN0ZWRfdm14X2ZyZWVfdmNwdVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIF9fbmVzdGVkX3ZteF92bWV4aXQoKSBpbiBLVk0gbmVzdGVkIFZNWCBzdXBwb3J0IChhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jKSB0byBwcmV2ZW50IGZsdXNoaW5nIGNhY2hlZCBzaGFkb3cgVk1DUzEyIHdoZW4gcGVyZm9ybWluZyBhIGZvcmNlZCBuZXN0ZWQgVk0tZXhpdCAodm1fZXhpdF9yZWFzb24gPT0gLTEsIGUuZy4gZHVyaW5nIHZDUFUgdGVhcmRvd24gb3IgU01NIGVudHJ5KS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzIGluIGNvcmUgS1ZNIHZpcnR1YWxpemF0aW9uIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2Ugb24gYW1kNjQsIHdhcnJhbnRpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6MTA6MTguMDcxMDY5ODI4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTIxNDk4ODIxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE2OjEwOjE4LjA3MTcxOTIyOFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI5MjE0MzM1NjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBuZXN0ZWQgVk1YIFZNLWV4aXQgaGFuZGxpbmcgaW4gS1ZNIChgX19uZXN0ZWRfdm14X3ZtZXhpdGApIHRvIHNraXAgY2FsbGluZyBgbmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyKClgIHdoZW4gYHZtX2V4aXRfcmVhc29uID09IC0xYCAoZS5nLiwgZHVyaW5nIHZDUFUgdGVhcmRvd24gb3IgU01NIGVudHJ5KS4gVGhpcyBwcmV2ZW50cyBpbGxlZ2FsIGd1ZXN0IG1lbW9yeSB3cml0ZXMgb24gYm9ycm93ZWQgbGF6eSBUTEIgbW0gY29udGV4dHMgZHVyaW5nIHRlYXJkb3duLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBidWZmZXJzLCByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBleHBvc2UgdW5pbml0aWFsaXplZCBmaWVsZHMsIG9yIGxlYWsga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBTdGFuZGFyZCBLQVNBTiBhbmQgZ2VuZXJhbCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGMyNGMzOTg2ZDRkNTVkMDBlODA3MTY0OTNiYmMxMDlkM2FhYjZjMTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDE2OjA5OjQxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbmluZGV4IDE1MTg3MzQwN2FiZDMuLjMzZGM4YTA3MDE5ZjggMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXG5AQCAtNTEyMSwyMSArNTEyMSwyOCBAQCB2b2lkIF9fbmVzdGVkX3ZteF92bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdm1fZXhpdF9yZWFzb24sXG4gXHRpZiAobGlrZWx5KCF2bXgtXHUwMDNlZmFpbCkpIHtcbiBcdFx0c3luY192bWNzMDJfdG9fdm1jczEyKHZjcHUsIHZtY3MxMik7XG4gXG4tXHRcdGlmICh2bV9leGl0X3JlYXNvbiAhPSAtMSlcbitcdFx0aWYgKHZtX2V4aXRfcmVhc29uICE9IC0xKSB7XG4gXHRcdFx0cHJlcGFyZV92bWNzMTIodmNwdSwgdm1jczEyLCB2bV9leGl0X3JlYXNvbixcbiBcdFx0XHRcdCAgICAgICBleGl0X2ludHJfaW5mbywgZXhpdF9xdWFsaWZpY2F0aW9uLFxuIFx0XHRcdFx0ICAgICAgIGV4aXRfaW5zbl9sZW4pO1xuIFxuLVx0XHQvKlxuLVx0XHQgKiBNdXN0IGhhcHBlbiBvdXRzaWRlIG9mIHN5bmNfdm1jczAyX3RvX3ZtY3MxMigpIGFzIGl0IHdpbGxcbi1cdFx0ICogYWxzbyBiZSB1c2VkIHRvIGNhcHR1cmUgdm1jczEyIGNhY2hlIGFzIHBhcnQgb2Zcbi1cdFx0ICogY2FwdHVyaW5nIG5WTVggc3RhdGUgZm9yIHNuYXBzaG90IChtaWdyYXRpb24pLlxuLVx0XHQgKlxuLVx0XHQgKiBPdGhlcndpc2UsIHRoaXMgZmx1c2ggd2lsbCBkaXJ0eSBndWVzdCBtZW1vcnkgYXQgYVxuLVx0XHQgKiBwb2ludCBpdCBpcyBhbHJlYWR5IGFzc3VtZWQgYnkgdXNlci1zcGFjZSB0byBiZVxuLVx0XHQgKiBpbW11dGFibGUuXG4tXHRcdCAqL1xuLVx0XHRuZXN0ZWRfZmx1c2hfY2FjaGVkX3NoYWRvd192bWNzMTIodmNwdSwgdm1jczEyKTtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIE11c3QgaGFwcGVuIG91dHNpZGUgb2Ygc3luY192bWNzMDJfdG9fdm1jczEyKCkgYXMgaXQgd2lsbFxuK1x0XHRcdCAqIGFsc28gYmUgdXNlZCB0byBjYXB0dXJlIHZtY3MxMiBjYWNoZSBhcyBwYXJ0IG9mXG4rXHRcdFx0ICogY2FwdHVyaW5nIG5WTVggc3RhdGUgZm9yIHNuYXBzaG90IChtaWdyYXRpb24pLlxuK1x0XHRcdCAqXG4rXHRcdFx0ICogT3RoZXJ3aXNlLCB0aGlzIGZsdXNoIHdpbGwgZGlydHkgZ3Vlc3QgbWVtb3J5IGF0IGFcbitcdFx0XHQgKiBwb2ludCBpdCBpcyBhbHJlYWR5IGFzc3VtZWQgYnkgdXNlci1zcGFjZSB0byBiZVxuK1x0XHRcdCAqIGltbXV0YWJsZS5cbitcdFx0XHQgKlxuK1x0XHRcdCAqIERvIG5vdCBmbHVzaCB3aGVuIHZtX2V4aXRfcmVhc29uID09IC0xIChlLmcuIGZvcmNlZCBleGl0XG4rXHRcdFx0ICogb24gdkNQVSB0ZWFyZG93biBvciBTTU0gZW50cnkpLiBPbiB0ZWFyZG93biwgS1ZNIG1heSBydW5cbitcdFx0XHQgKiB3aXRoIGN1cnJlbnQtXHUwMDNlbW0gPT0gTlVMTCBvbiBhIGJvcnJvd2VkIGxhenkgVExCIG1tLFxuK1x0XHRcdCAqIHdoZXJlIHdyaXRpbmcgZ3Vlc3QgbWVtb3J5IHdvdWxkIGNvcnJ1cHQgYW4gdW5yZWxhdGVkXG4rXHRcdFx0ICogdGFzay4gTm90aGluZyBjYW4gb2JzZXJ2ZSB0aGUgZmx1c2ggaW4gdGhhdCBjYXNlIGFueXdheS5cbitcdFx0XHQgKi9cbitcdFx0XHRuZXN0ZWRfZmx1c2hfY2FjaGVkX3NoYWRvd192bWNzMTIodmNwdSwgdm1jczEyKTtcbitcdFx0fVxuIFx0fSBlbHNlIHtcbiBcdFx0LypcbiBcdFx0ICogVGhlIG9ubHkgZXhwZWN0ZWQgVk0taW5zdHJ1Y3Rpb24gZXJyb3IgaXMgXCJWTSBlbnRyeSB3aXRoXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjoxMDoxOC4wNzE3MjA5MThaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTAwMDE0NTY1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXN0ZWQgVk1YIE9wdGltaXphdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBGcm9tIHRoZSBkaWZmLCBJIGNhbiBzZWUgYSBjaGFuZ2Ugd2l0aGluIHRoZSBgX19uZXN0ZWRfdm14X3ZtZXhpdGAgZnVuY3Rpb24gaW4gYG5lc3RlZC5jYC4gVGhlIGNvcmUgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBoYW5kbGluZyB0aGUgVk1DUzEyIGNhY2hlIGZsdXNoIGFmdGVyIHN5bmNocm9uaXppbmcgYHZtY3MwMmAgdG8gYHZtY3MxMmAuIEkga25vdyB0aGF0IHRoaXMgaXMgaW1wb3J0YW50IGluIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBmb3IgdGhpbmdzIGxpa2Ugc25hcHNob3R0aW5nIGFuZCBtaWdyYXRpb24sIHdoZXJlIHdlIG5lZWQgdG8gZW5zdXJlIGd1ZXN0IG1lbW9yeSBpcyBjb25zaXN0ZW50LlxuXG5Jbml0aWFsbHksIHRoZSBmbHVzaCBoYXBwZW5lZCB1bmNvbmRpdGlvbmFsbHkgYWZ0ZXIgdGhlIHN5bmMuIE5vdyBJJ20gc2VlaW5nIGEgY29uZGl0aW9uYWwgY2hlY2sgaGVyZS4gVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhpcyBgaWYgKHZtX2V4aXRfcmVhc29uICE9IC0xKWAgY29uZGl0aW9uLiBJdCBhcHBlYXJzIHdlJ3JlIG9wdGltaXppbmcgYnkgKm9ubHkqIGZsdXNoaW5nIHRoZSBjYWNoZSBpZiB0aGUgYHZtX2V4aXRfcmVhc29uYCBpc24ndCBlcXVhbCB0byAtMS4gVGhhdCBzdWdnZXN0cyB3ZSBkb24ndCBuZWVkIHRvIGZsdXNoIGluIGNlcnRhaW4gVk0gZXhpdCBzY2VuYXJpb3MuIFRoZSBjb21tZW50IGNsYXJpZmllcyB0aGlzOiBhIFZNIGV4aXQgcmVhc29uIG9mIC0xIHNpZ25pZmllcyB2Q1BVIHRlYXJkb3duIG9yIFNNTSBlbnRyeSwgYW5kIGluIHRoZXNlIGNhc2VzLCBmbHVzaGluZyBpc24ndCBuZWNlc3NhcnkgYW5kIGNvdWxkIGV2ZW4gbGVhZCB0byBpc3N1ZXMgcmVsYXRlZCB0byBtZW1vcnkgY29ycnVwdGlvbi4gSW50ZXJlc3RpbmcgdG8gc2VlIHRoaXMgb3B0aW1pemF0aW9uIGJlaW5nIG1hZGUuXG5cbkl0IHNlZW1zIGxpa2Ugd2UncmUgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBidWcgb3IgcGVyZm9ybWFuY2UgaW5lZmZpY2llbmN5LiBUaGUgbmV3IGNvZGUgcHJldmVudHMgYSBwb3RlbnRpYWxseSB1bm5lY2Vzc2FyeSB3cml0ZSB0byBndWVzdCBtZW1vcnkgd2hlbiB0aGUgVk0gaXMgYmVpbmcgdG9ybiBkb3duLiBUaGlzIG1ha2VzIHNlbnNlOyBkdXJpbmcgdGVhcmRvd24gb3IgU01NIGVudHJ5LCB0aGUgY3VycmVudCBwcm9jZXNzIG1pZ2h0IG5vdCBoYXZlIGEgdmFsaWQgbWVtb3J5IG1hcHBpbmcsIGFuZCBhdHRlbXB0aW5nIGEgZmx1c2ggY291bGQgbGVhZCB0byBiYWQgdGhpbmdzLiBUaGUgYWRkZWQgY2hlY2sgc2VlbXMgbGlrZSBhIGdvb2Qgc2FmZXR5IG1lYXN1cmUgYW5kIHBvdGVudGlhbGx5IGEgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQuIEknbGwgbmVlZCB0byBrZWVwIHRoaXMgaW4gbWluZCB3aGVuIEkgZXhhbWluZSBwb3RlbnRpYWwgaXNzdWVzLCBwYXJ0aWN1bGFybHkgd2l0aCBtaWdyYXRpb24gYW5kIHN0YXRlIHNhdmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUzMCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE2OjEwOjIzLjA3MTg2OTM2MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDc0NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MTA1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MTA1OlxcdFxcdCAqIHVwLXRvLWRhdGUgYmVmb3JlIHN3aXRjaGluZyB0byBMMS5cXG41MTA2OlxcdFxcdCAqL1xcbjUxMDc6XFx0XFx0aWYgKGVuYWJsZV9lcHQgXFx1MDAyNlxcdTAwMjYgaXNfcGFlX3BhZ2luZyh2Y3B1KSlcXG41MTA4OlxcdFxcdFxcdHZteF9lcHRfbG9hZF9wZHB0cnModmNwdSk7XFxuNTEwOTpcXHRcXG41MTEwOlxcdFxcdGxlYXZlX2d1ZXN0X21vZGUodmNwdSk7XFxuNTExMTpcXHRcXG41MTEyOlxcdFxcdGlmIChuZXN0ZWRfY3B1X2hhc19wcmVlbXB0aW9uX3RpbWVyKHZtY3MxMikpXFxuNTExMzpcXHRcXHRcXHRocnRpbWVyX2NhbmNlbChcXHUwMDI2dG9fdm14KHZjcHUpLVxcdTAwM2VuZXN0ZWQucHJlZW1wdGlvbl90aW1lcik7XFxuNTExNDpcXHRcXG41MTE1OlxcdFxcdGlmIChuZXN0ZWRfY3B1X2hhcyh2bWNzMTIsIENQVV9CQVNFRF9VU0VfVFNDX09GRlNFVFRJTkcpKSB7XFxuNTExNjpcXHRcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLnRzY19vZmZzZXQgPSB2Y3B1LVxcdTAwM2VhcmNoLmwxX3RzY19vZmZzZXQ7XFxuNTExNzpcXHRcXHRcXHRpZiAobmVzdGVkX2NwdV9oYXMyKHZtY3MxMiwgU0VDT05EQVJZX0VYRUNfVFNDX1NDQUxJTkcpKVxcbjUxMTg6XFx0XFx0XFx0XFx0dmNwdS1cXHUwMDNlYXJjaC50c2Nfc2NhbGluZ19yYXRpbyA9IHZjcHUtXFx1MDAzZWFyY2gubDFfdHNjX3NjYWxpbmdfcmF0aW87XFxuNTExOTpcXHRcXHR9XFxuNTEyMDpcXHRcXG41MTIxOlxcdFxcdGlmIChsaWtlbHkoIXZteC1cXHUwMDNlZmFpbCkpIHtcXG41MTIyOlxcdFxcdFxcdHN5bmNfdm1jczAyX3RvX3ZtY3MxMih2Y3B1LCB2bWNzMTIpO1xcbjUxMjM6XFx0XFxuNTEyNDpcXHRcXHRcXHRpZiAodm1fZXhpdF9yZWFzb24gIT0gLTEpIHtcXG41MTI1OlxcdFxcdFxcdFxcdHByZXBhcmVfdm1jczEyKHZjcHUsIHZtY3MxMiwgdm1fZXhpdF9yZWFzb24sXFxuNTEyNjpcXHRcXHRcXHRcXHRcXHQgICAgICAgZXhpdF9pbnRyX2luZm8sIGV4aXRfcXVhbGlmaWNhdGlvbixcXG41MTI3OlxcdFxcdFxcdFxcdFxcdCAgICAgICBleGl0X2luc25fbGVuKTtcXG41MTI4OlxcdFxcbjUxMjk6XFx0XFx0XFx0XFx0LypcXG41MTMwOlxcdFxcdFxcdFxcdCAqIE11c3QgaGFwcGVuIG91dHNpZGUgb2Ygc3luY192bWNzMDJfdG9fdm1jczEyKCkgYXMgaXQgd2lsbFxcbjUxMzE6XFx0XFx0XFx0XFx0ICogYWxzbyBiZSB1c2VkIHRvIGNhcHR1cmUgdm1jczEyIGNhY2hlIGFzIHBhcnQgb2ZcXG41MTMyOlxcdFxcdFxcdFxcdCAqIGNhcHR1cmluZyBuVk1YIHN0YXRlIGZvciBzbmFwc2hvdCAobWlncmF0aW9uKS5cXG41MTMzOlxcdFxcdFxcdFxcdCAqXFxuNTEzNDpcXHRcXHRcXHRcXHQgKiBPdGhlcndpc2UsIHRoaXMgZmx1c2ggd2lsbCBkaXJ0eSBndWVzdCBtZW1vcnkgYXQgYVxcbjUxMzU6XFx0XFx0XFx0XFx0ICogcG9pbnQgaXQgaXMgYWxyZWFkeSBhc3N1bWVkIGJ5IHVzZXItc3BhY2UgdG8gYmVcXG41MTM2OlxcdFxcdFxcdFxcdCAqIGltbXV0YWJsZS5cXG41MTM3OlxcdFxcdFxcdFxcdCAqXFxuNTEzODpcXHRcXHRcXHRcXHQgKiBEbyBub3QgZmx1c2ggd2hlbiB2bV9leGl0X3JlYXNvbiA9PSAtMSAoZS5nLiBmb3JjZWQgZXhpdFxcbjUxMzk6XFx0XFx0XFx0XFx0ICogb24gdkNQVSB0ZWFyZG93biBvciBTTU0gZW50cnkpLiBPbiB0ZWFyZG93biwgS1ZNIG1heSBydW5cXG41MTQwOlxcdFxcdFxcdFxcdCAqIHdpdGggY3VycmVudC1cXHUwMDNlbW0gPT0gTlVMTCBvbiBhIGJvcnJvd2VkIGxhenkgVExCIG1tLFxcbjUxNDE6XFx0XFx0XFx0XFx0ICogd2hlcmUgd3JpdGluZyBndWVzdCBtZW1vcnkgd291bGQgY29ycnVwdCBhbiB1bnJlbGF0ZWRcXG41MTQyOlxcdFxcdFxcdFxcdCAqIHRhc2suIE5vdGhpbmcgY2FuIG9ic2VydmUgdGhlIGZsdXNoIGluIHRoYXQgY2FzZSBhbnl3YXkuXFxuNTE0MzpcXHRcXHRcXHRcXHQgKi9cXG41MTQ0OlxcdFxcdFxcdFxcdG5lc3RlZF9mbHVzaF9jYWNoZWRfc2hhZG93X3ZtY3MxMih2Y3B1LCB2bWNzMTIpO1xcbjUxNDU6XFx0XFx0XFx0fVxcbjUxNDY6XFx0XFx0fSBlbHNlIHtcXG41MTQ3OlxcdFxcdFxcdC8qXFxuNTE0ODpcXHRcXHRcXHQgKiBUaGUgb25seSBleHBlY3RlZCBWTS1pbnN0cnVjdGlvbiBlcnJvciBpcyBcXFwiVk0gZW50cnkgd2l0aFxcbjUxNDk6XFx0XFx0XFx0ICogaW52YWxpZCBjb250cm9sIGZpZWxkKHMpLlxcXCIgQW55dGhpbmcgZWxzZSBpbmRpY2F0ZXMgYVxcbjUxNTA6XFx0XFx0XFx0ICogcHJvYmxlbSB3aXRoIEwwLlxcbjUxNTE6XFx0XFx0XFx0ICovXFxuNTE1MjpcXHRcXHRcXHRXQVJOX09OX09OQ0Uodm1jc19yZWFkMzIoVk1fSU5TVFJVQ1RJT05fRVJST1IpICE9XFxuNTE1MzpcXHRcXHRcXHRcXHQgICAgIFZNWEVSUl9FTlRSWV9JTlZBTElEX0NPTlRST0xfRklFTEQpO1xcbjUxNTQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE2OjEwOjIzLjA3MjMxODkwMloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTgxOTcxNjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2Ygd2hhdCBJJ20gbG9va2luZyBhdCwgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqSW52ZXN0aWdhdGluZyBgbmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyYCBhbmQgdGhlIFNpZ25pZmljYW5jZSBvZiBgLTFgIFZNIEV4aXQgUmVhc29uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIGBuZXN0ZWRfZmx1c2hfY2FjaGVkX3NoYWRvd192bWNzMTJgIGFuZCBpbW1lZGlhdGVseSB3YW50IHRvIHVuZGVyc3RhbmQgaXRzIGZ1bmN0aW9uLiBHaXZlbiBteSBiYWNrZ3JvdW5kIGluIHZpcnR1YWxpemF0aW9uLCBteSBwcmltYXJ5IHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGZsb3cgb2YgZXhlY3V0aW9uIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGluIHdoaWNoIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLiBJJ20gZXNwZWNpYWxseSBrZWVuIG9uIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgc2hhZG93IFZNQ1MgKFZpcnR1YWwgTWFjaGluZSBDb250cm9sIFN0cnVjdHVyZSksIGEgY3JpdGljYWwgYXJlYSBpbiBuZXN0ZWQgdmlydHVhbGl6YXRpb24sIEkgbmVlZCB0byBsb29rIGNsb3NlciB0byBzaGFkb3cgVk1DIGZvciB0aGUgcHVycG9zZSBvZiB2aXJ0dWFsaXppbmcgbmVzdGVkIFZNWCwgd2l0aCB0aGUgc3BlY2lmaWMgZW1waGFzaXMgb24gYHZtY3MxMmAgd2hpY2ggaXMgdXNlZCBmb3IgbmVzdGVkIHZpcnR1YWxpemF0aW9uLlxuXG5UaGUga2V5IHRyaWdnZXIgZm9yIG15IGludmVzdGlnYXRpb24gaXMgdGhlIGAtMWAgdmFsdWUgYmVpbmcgcGFzc2VkIGFzIHRoZSBgdm1fZXhpdF9yZWFzb25gLiBUaGlzIGltbWVkaWF0ZWx5IHNjcmVhbXMgXCJlcnJvciBjb25kaXRpb25cIiBvciBcInVuaW5pdGlhbGl6ZWQgdmFsdWVcIiBpbiB0aGlzIGRvbWFpbi4gQSBzdGFuZGFyZCBWTSBleGl0IHJlYXNvbiBpcyAqbmV2ZXIqIG5lZ2F0aXZlLCBhbmQgSSBiZXQgaXQncyBzb21ldGhpbmcgc3BlY2lhbCwgbm90IGp1c3QgYSByYW5kb20gdW5kZWZpbmVkIGJpdCBwYXR0ZXJuLCBJJ20gdGhpbmtpbmcgaXRzIHJlbGF0ZWQgdG8gYSBmYWlsdXJlIG9yIHVuZXhwZWN0ZWQgc3RhdGUgaW4gdGhlIFZNIGV4aXQgaGFuZGxpbmcgcHJvY2Vzcy4gSXQgaW1wbGllcyBhIHByb2JsZW0sIGxpa2VseSBhdCBhIHZlcnkgbG93IGxldmVsIGluIHRoZSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gc3RhY2suIFRoaXMgYHZtX2V4aXRfcmVhc29uYCBzaG91bGQgcHJvdmlkZSBjcml0aWNhbCBjbHVlcy4gSSdtIGdvaW5nIHRvIGZvbGxvdyB0aGVzZSBjbHVlcywgSSBrbm93IGl0cyByZWxhdGVkIHRvIHRoZSBWTSBleGl0IHJlYXNvbi5cblxuVGhlcmVmb3JlLCBteSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kICp3aHkqIGNhbGxlcnMgYXJlIHBhc3NpbmcgYC0xYC4gSSBuZWVkIHRvIHRyYWNrIGRvd24gYWxsIHJlZmVyZW5jZXMgdG8gdGhpcyBmdW5jdGlvbiBhbmQgbWV0aWN1bG91c2x5IGV4YW1pbmUgdGhlIGNvZGUgdGhhdCdzIHN1cHBseWluZyB0aGlzIHZhbHVlLCBzbyBJIGNhbiBzZWUgd2hhdCBjb25kaXRpb25zIGxlYWQgdG8gdGhhdCBzdGF0ZS4gVGhpcyBpcyBsaWtlbHkgYSBrZXkgaW5kaWNhdG9yIG9mIGEgYnVnLCBvciBhbiB1bnVzdWFsIGVkZ2UgY2FzZSB0aGF0IG5lZWRzIHZlcnkgY2FyZWZ1bCBjb25zaWRlcmF0aW9uLiBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIGNvZGUgc2VhcmNoIGFuZCBnbyBmcm9tIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTE1LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjoxMDoyNi4yNTQyOTMxNjhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NjEwMTEwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9ODUxPXN0YXRpYyB2b2lkIG5lc3RlZF9jYWNoZV9zaGFkb3dfdm1jczEyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtODY5LVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6ODcwOnN0YXRpYyB2b2lkIG5lc3RlZF9mbHVzaF9jYWNoZWRfc2hhZG93X3ZtY3MxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy04NzEtXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHZtY3MxMiAqdm1jczEyKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz01MDczPXZvaWQgX19uZXN0ZWRfdm14X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2bV9leGl0X3JlYXNvbixcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTE0My1cXHRcXHRcXHQgKi9cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjUxNDQ6XFx0XFx0XFx0bmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyKHZjcHUsIHZtY3MxMik7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01MTQ1LVxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6MTA6MjguMjE1MzEwMzM4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5Njg3NTI2NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBuZXN0ZWRfZmx1c2hfY2FjaGVkX3NoYWRvd192bWNzMTJgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIGBuZXN0ZWRfZmx1c2hfY2FjaGVkX3NoYWRvd192bWNzMTJgLiBNeSBwcmltYXJ5IGludGVyZXN0IGhlcmUgaXMgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgaW50cmljYWNpZXMgb2YgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciBjYWNoaW5nIGFuZCBzaGFkb3cgVk1DUzEyIHN0cnVjdHVyZXMuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHVuZGVyc3RhbmQ6XG5cbiogICAqKlRoZSBjb250ZXh0OioqIFdoZXJlIGRvZXMgdGhpcyBmdW5jdGlvbiBmaXQgaW50byB0aGUgYnJvYWRlciBoeXBlcnZpc29yIG9wZXJhdGlvbiwgYW5kIHdoYXQgdHJpZ2dlcnMgaXRzIGV4ZWN1dGlvbj8gSXMgdGhpcyBwYXJ0IG9mIGEgVk0gZXhpdCBwYXRoLCBhbiBpbnRlcnJ1cHQgaGFuZGxlciwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/XG4qICAgKipTaGFkb3cgVk1DUzEyIG1hbmlwdWxhdGlvbjoqKiBJIGV4cGVjdCB0aGlzIGZ1bmN0aW9uIHRvIGFkZHJlc3MgcG90ZW50aWFsIGluY29uc2lzdGVuY2llcyBiZXR3ZWVuIHRoZSBwaHlzaWNhbCBWTUNTMTIgYW5kIHRoZSBzaGFkb3dlZCB2ZXJzaW9uIHVzZWQgYnkgdGhlIG5lc3RlZCBWTS4gQXJlIHRoZXJlIHNwZWNpZmljIHNjZW5hcmlvcyB3aGVyZSB0aGUgY2FjaGUgbmVlZHMgdG8gYmUgZmx1c2hlZCBvciB1cGRhdGVkLCBhbmQgd2hhdCBhcmUgdGhvc2UgdHJpZ2dlcnM/XG4qICAgKipQZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9uczoqKiBDYWNoaW5nIGlzIHVzdWFsbHkgZG9uZSBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4gVW5kZXJzdGFuZGluZyB0aGUgdHJhZGUtb2ZmcyBiZXR3ZWVuIGNhY2hlIGNvaGVyZW5jZSBhbmQgdGhlIG92ZXJoZWFkIG9mIGZsdXNoaW5nIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgcGVyZm9ybWFuY2UgcHJvZmlsZS4gV2hhdCBhcmUgdGhlIGhldXJpc3RpY3Mgb3IgcG9saWNpZXMgZW1wbG95ZWQgZm9yIG1ha2luZyBmbHVzaGluZyBkZWNpc2lvbnM/XG4qICAgKipTZWN1cml0eSBpbXBsaWNhdGlvbnM6KiogU2hhZG93aW5nIGNhbiBiZSB1c2VkIHRvIHByb3RlY3QgdGhlIGd1ZXN0IE9TIGZyb20gYWNjZXNzaW5nIHRoZSBoeXBlcnZpc29yJ3Mgc2Vuc2l0aXZlIGluZm9ybWF0aW9uLiBBcmUgdGhlcmUgYW55IHNlY3VyaXR5LXNlbnNpdGl2ZSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBhbmQgaG93IGFyZSB0aGV5IGJlaW5nIHByb3RlY3RlZCB0aHJvdWdoIHRoaXMgb3BlcmF0aW9uP1xuKiAgICoqSGFyZHdhcmUgYXNzdW1wdGlvbnM6KiogQXJlIHRoZXJlIGFueSBpbXBsaWNpdCBhc3N1bXB0aW9ucyBhYm91dCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSAoZS5nLiwgc3BlY2lmaWMgQ1BVIGZlYXR1cmVzLCBjYWNoZSBjb2hlcmVuY3kgbWVjaGFuaXNtcykgdGhhdCBhcmUgcmVsZXZhbnQgdG8gdGhpcyBmdW5jdGlvbidzIGxvZ2ljPyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgYW55IGhhcmR3YXJlIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGFmZmVjdCBpdHMgcG9ydGFiaWxpdHkgb3Igcm9idXN0bmVzcy5cblxuRXNzZW50aWFsbHksIEknbSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUgaW4gZW5zdXJpbmcgY29ycmVjdCBhbmQgZWZmaWNpZW50IG5lc3RlZCB2aXJ0dWFsaXphdGlvbi4gSSdtIGhvcGluZyB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGUgaG9zdCwgZ3Vlc3QsIGFuZCBuZXN0ZWQgdmlydHVhbCBtYWNoaW5lcyBhcyB0aGV5IGludGVyYWN0IHdpdGggdGhlIFZNQ1MxMi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI3NSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE2OjEwOjMxLjE4NDA2NTYyNFoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjEzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NjA6XFx0XFxuIDg2MTpcXHRcXHRpZiAoZ2hjLVxcdTAwM2VncGEgIT0gdm1jczEyLVxcdTAwM2V2bWNzX2xpbmtfcG9pbnRlciBcXHUwMDI2XFx1MDAyNlxcbiA4NjI6XFx0XFx0ICAgIGt2bV9nZm5fdG9faHZhX2NhY2hlX2luaXQodmNwdS1cXHUwMDNla3ZtLCBnaGMsXFxuIDg2MzpcXHRcXHRcXHRcXHRcXHQgICAgICB2bWNzMTItXFx1MDAzZXZtY3NfbGlua19wb2ludGVyLCBWTUNTMTJfU0laRSkpXFxuIDg2NDpcXHRcXHRcXHRyZXR1cm47XFxuIDg2NTpcXHRcXG4gODY2OlxcdFxcdGt2bV9yZWFkX2d1ZXN0X2NhY2hlZCh2Y3B1LVxcdTAwM2Vrdm0sIGdoYywgZ2V0X3NoYWRvd192bWNzMTIodmNwdSksXFxuIDg2NzpcXHRcXHRcXHRcXHQgICAgICBWTUNTMTJfU0laRSk7XFxuIDg2ODpcXHR9XFxuIDg2OTpcXHRcXG4gODcwOlxcdHN0YXRpYyB2b2lkIG5lc3RlZF9mbHVzaF9jYWNoZWRfc2hhZG93X3ZtY3MxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIDg3MTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgdm1jczEyICp2bWNzMTIpXFxuIDg3MjpcXHR7XFxuIDg3MzpcXHRcXHRzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTtcXG4gODc0OlxcdFxcdHN0cnVjdCBnZm5fdG9faHZhX2NhY2hlICpnaGMgPSBcXHUwMDI2dm14LVxcdTAwM2VuZXN0ZWQuc2hhZG93X3ZtY3MxMl9jYWNoZTtcXG4gODc1OlxcdFxcbiA4NzY6XFx0XFx0aWYgKCFuZXN0ZWRfY3B1X2hhc19zaGFkb3dfdm1jcyh2bWNzMTIpIHx8XFxuIDg3NzpcXHRcXHQgICAgdm1jczEyLVxcdTAwM2V2bWNzX2xpbmtfcG9pbnRlciA9PSBJTlZBTElEX0dQQSlcXG4gODc4OlxcdFxcdFxcdHJldHVybjtcXG4gODc5OlxcdFxcbiA4ODA6XFx0XFx0aWYgKGdoYy1cXHUwMDNlZ3BhICE9IHZtY3MxMi1cXHUwMDNldm1jc19saW5rX3BvaW50ZXIgXFx1MDAyNlxcdTAwMjZcXG4gODgxOlxcdFxcdCAgICBrdm1fZ2ZuX3RvX2h2YV9jYWNoZV9pbml0KHZjcHUtXFx1MDAzZWt2bSwgZ2hjLFxcbiA4ODI6XFx0XFx0XFx0XFx0XFx0ICAgICAgdm1jczEyLVxcdTAwM2V2bWNzX2xpbmtfcG9pbnRlciwgVk1DUzEyX1NJWkUpKVxcbiA4ODM6XFx0XFx0XFx0cmV0dXJuO1xcbiA4ODQ6XFx0XFxuIDg4NTpcXHRcXHRrdm1fd3JpdGVfZ3Vlc3RfY2FjaGVkKHZjcHUtXFx1MDAzZWt2bSwgZ2hjLCBnZXRfc2hhZG93X3ZtY3MxMih2Y3B1KSxcXG4gODg2OlxcdFxcdFxcdFxcdCAgICAgICBWTUNTMTJfU0laRSk7XFxuIDg4NzpcXHR9XFxuIDg4ODpcXHRcXG4gODg5OlxcdC8qXFxuIDg5MDpcXHQgKiBJbiBuZXN0ZWQgdmlydHVhbGl6YXRpb24sIGNoZWNrIGlmIEwxIGhhcyBzZXRcXG4gODkxOlxcdCAqIFZNX0VYSVRfQUNLX0lOVFJfT05fRVhJVFxcbiA4OTI6XFx0ICovXFxuIDg5MzpcXHRzdGF0aWMgYm9vbCBuZXN0ZWRfZXhpdF9pbnRyX2Fja19zZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiA4OTQ6XFx0e1xcbiA4OTU6XFx0XFx0cmV0dXJuIGdldF92bWNzMTIodmNwdSktXFx1MDAzZXZtX2V4aXRfY29udHJvbHMgXFx1MDAyNlxcbiA4OTY6XFx0XFx0XFx0Vk1fRVhJVF9BQ0tfSU5UUl9PTl9FWElUO1xcbiA4OTc6XFx0fVxcbiA4OTg6XFx0XFxuIDg5OTpcXHRzdGF0aWMgaW50IG5lc3RlZF92bXhfY2hlY2tfYXBpY19hY2Nlc3NfY29udHJvbHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjoxMDozMS4xODQ0ODg3MjRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA3Mjk5ODY5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgUG90ZW50aWFsbHkgVW5oYW5kbGVkIFZNLUV4aXQgQ29uZGl0aW9ucyoqXG5cbkFscmlnaHQsIEknbSBkaWdnaW5nIGludG8gc29tZSBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBWTS1leGl0cywgc3BlY2lmaWNhbGx5IHRob3NlIHdoZXJlIHRoZSBgdm1fZXhpdF9yZWFzb25gIGNvZGUgaXMgaW5kaWNhdGluZyBzb21ldGhpbmcgbGlrZSBgLTFgLCBvciBhbnl0aGluZyB0aGF0IGZsYWdzIGFzIGEgZ2VuZXJhbCwgdW5oYW5kbGVkIGNhc2UuIE15IGN1cnJlbnQgc3RyYXRlZ3kgaXMgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGxvY2F0aW9ucyBpbiB0aGUgY29kZSB0aGF0IGFyZSBpbnZva2luZyBgX19uZXN0ZWRfdm14X3ZtZXhpdGAgd2l0aCB0aGVzZSB1bmRlc2lyYWJsZSBleGl0IHJlYXNvbiB2YWx1ZXMuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mICp3aHkqIHdlJ3JlIHNlZWluZyB0aGVzZSBcImNhdGNoLWFsbFwiIGV4aXRzLiBBcmUgdGhlc2UgZ2VudWluZWx5IHVuaGFuZGxlZCBjYXNlcywgb3IgYXJlIHRoZXJlIHN1YnRsZSBlcnJvciBjb25kaXRpb25zIG9yIGVkZ2UgY2FzZXMgdGhhdCB3ZSBoYXZlbid0IGFjY291bnRlZCBmb3I/IEFyZSB3ZSBtaXNzaW5nIGEgc3BlY2lmaWMgYHZtX2V4aXRfaGFuZGxlcmAgb3IgZmFpbGluZyB0byBjb3JyZWN0bHkgaW50ZXJwcmV0IGNlcnRhaW4gZmxhZ3M/IEkgbmVlZCB0byBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIGNvbnRleHQgdG8gdW5kZXJzdGFuZCB0aGUgc3lzdGVtJ3Mgc3RhdGUgd2hlbiB0aGVzZSBleGl0cyBvY2N1ci4gV2hhdCByZWdpc3RlcnMgYXJlIHNldD8gV2hhdCBndWVzdCBpbnN0cnVjdGlvbnMgYXJlIHdlIGV4ZWN1dGluZz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSB1bmRlZmluZWQgZXhpdHMgb24gc3lzdGVtIHN0YWJpbGl0eSBhbmQgc2VjdXJpdHk/IFVsdGltYXRlbHksIEkgd2FudCB0byBpZGVudGlmeSBhbnkgZmxhd3MgaW4gb3VyIFZNTSdzIGV4aXQgaGFuZGxpbmcsIHdpdGggdGhlIGdvYWwgb2YgbWl0aWdhdGluZyBhbnkgcG90ZW50aWFsIGV4cGxvaXRzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3JzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDc0LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjoxMDozMy4yNTc0OTA0OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk3MzU4NDQwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX25lc3RlZF92bXhfdm1leGl0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NDk2MD1zdGF0aWMgdm9pZCBuZXN0ZWRfdm14X3Jlc3RvcmVfaG9zdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTUwNzItICovXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1MDczOnZvaWQgX19uZXN0ZWRfdm14X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2bV9leGl0X3JlYXNvbixcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTUwNzQtXFx0XFx0XFx0IHUzMiBleGl0X2ludHJfaW5mbywgdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oPTI5PWJvb2wgbmVzdGVkX3ZteF9yZWZsZWN0X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmg6MzA6dm9pZCBfX25lc3RlZF92bXhfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZtX2V4aXRfcmVhc29uLFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmgtMzEtXFx0XFx0XFx0IHUzMiBleGl0X2ludHJfaW5mbywgdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oPTM0PXN0YXRpYyBpbmxpbmUgdm9pZCBuZXN0ZWRfdm14X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2bV9leGl0X3JlYXNvbixcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmgtNDUtXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaDo0NjpcXHRfX25lc3RlZF92bXhfdm1leGl0KHZjcHUsIHZtX2V4aXRfcmVhc29uLCBleGl0X2ludHJfaW5mbyxcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oLTQ3LVxcdFxcdFxcdCAgICBleGl0X3F1YWxpZmljYXRpb24sIGV4aXRfaW5zbl9sZW4pO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYz04MTkwPWludCB2bXhfY2hlY2tfaW50ZXJjZXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODI4MC1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjgyODE6XFx0X19uZXN0ZWRfdm14X3ZtZXhpdCh2Y3B1LCB2bV9leGl0X3JlYXNvbiwgMCwgZXhpdF9xdWFsaWZpY2F0aW9uLFxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODI4Mi1cXHRcXHRcXHQgICAgZXhpdF9pbnNuX2xlbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE2OjEwOjM1LjIzMTA4MTczMloiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTYzODQ4MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlRyYWNpbmcgRG93biAtMSBpbiBOZXN0ZWQgVk1YIFZNLUV4aXQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYC0xYCB2YWx1ZSBiZWluZyBwYXNzZWQgdG8gZWl0aGVyIGBuZXN0ZWRfdm14X3ZtZXhpdGAgb3IsIG1vcmUgZ2VuZXJhbGx5LCBgX19uZXN0ZWRfdm14X3ZtZXhpdGAuIFRoZSBjb250ZXh0IGlzLCBJIHN1c3BlY3QsIHJlbGF0ZWQgdG8gc29tZSBraW5kIG9mIFZNLWV4aXQgZHVyaW5nIG5lc3RlZCB2aXJ0dWFsaXphdGlvbi4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB1c2UgbXkgdG9vbHMgdG8gbG9jYXRlIHRoZXNlIHNwZWNpZmljIGZ1bmN0aW9uIGNhbGxzLiBJJ2xsIG5lZWQgdG8gdXNlIGVpdGhlciBhIGRlYnVnZ2VyLCBvciBwZXJoYXBzIGEgZ3JlcCBjb21iaW5lZCB3aXRoIHNvbWUgc291cmNlIGNvZGUgbmF2aWdhdGlvbiwgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGNhbGwgc2l0ZXMgZm9yIHRob3NlIGZ1bmN0aW9ucywgZm9jdXNpbmcgb24gaG93IHRoaXMgYC0xYCBpcyBwcm9wYWdhdGVkLlxuXG5UaGUgY29yZSBxdWVzdGlvbiBpcywgd2hlcmUgZG9lcyB0aGlzIHZhbHVlIG9yaWdpbmF0ZT8gSXQncyB1bmxpa2VseSB0byBiZSBhIGJlbmlnbiByZXR1cm4gY29kZS4gSXQgbGlrZWx5IHNpZ25pZmllcyBhbiBlcnJvciwgYSBmYWlsdXJlIHRvIGhhbmRsZSB0aGUgZ3Vlc3QncyBpbnN0cnVjdGlvbiBhdCB0aGUgbmVzdGVkIGxldmVsLCBvciBtYXliZSBhbiBpc3N1ZSBkdXJpbmcgdGhlIHByb2Nlc3Mgb2YgcmV0dXJuaW5nIGNvbnRyb2wgdG8gdGhlIGhvc3QuIElzIHRoaXMgY29taW5nIGZyb20gdGhlIG5lc3RlZCBWTU0gaXRzZWxmPyBJcyBpdCBhbiBpbmRpY2F0aW9uIHRoYXQgdGhlIG5lc3RlZCBndWVzdCB0cmllZCB0byBkbyBzb21ldGhpbmcgaXQgc2hvdWxkbid0IGhhdmU/XG5cbkkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBzb3VyY2VzIG9mIHRoZXNlIGAtMWAgdmFsdWVzIGFuZCB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIEFyZSB3ZSBzZWVpbmcgdGhpcyBhY3Jvc3MgYSB3aWRlIHJhbmdlIG9mIGluc3RydWN0aW9ucy9vcGVyYXRpb25zIHdpdGhpbiB0aGUgbmVzdGVkIFZNLCBvciBpcyBpdCBpc29sYXRlZCB0byBzcGVjaWZpYyBpbnN0cnVjdGlvbiBjbGFzc2VzIG9yIHN5c3RlbSBldmVudHM/IE15IHN1c3BpY2lvbiBpcyBhIHBvdGVudGlhbCBtaXNjb25maWd1cmF0aW9uIG9yIGEgcmFjZSBjb25kaXRpb24gd2l0aGluIHRoZSBuZXN0ZWQgVk1NLCBvciBtYXliZSBldmVuIGEgYnVnIGluIHRoZSBWTS1leGl0IGhhbmRsaW5nLiBGdXJ0aGVyIGluc3BlY3Rpb24gb2YgcmVnaXN0ZXIgc3RhdGVzIGFuZCBjb250cm9sIHN0cnVjdHVyZXMgYXJvdW5kIHRoZSB0aW1lIG9mIHRoZSBWTS1leGl0IHdpbGwgYmUgbmVjZXNzYXJ5IHRvIGlkZW50aWZ5IHRoZSByb290IGNhdXNlLiBUaGlzIGAtMWAgaXMgYSBicmlnaHQgcmVkIGZsYWcsIGFuZCBJIG5lZWQgdG8gcmVzb2x2ZSB0aGlzIGFzIHF1aWNrbHkgYXMgcG9zc2libGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczODQsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjoxMDozOC4zOTQ5MzI2MTFaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3OTMwNjY5MjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmVzdGVkX3ZteF92bWV4aXQuKi0xXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9Njg4ND12b2lkIHZteF9sZWF2ZV9uZXN0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02ODg3LVxcdFxcdHZjcHUtXFx1MDAzZWFyY2gubmVzdGVkX3J1bl9wZW5kaW5nID0gMDtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjY4ODg6XFx0XFx0bmVzdGVkX3ZteF92bWV4aXQodmNwdSwgLTEsIDAsIDApO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjg4OS1cXHR9XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTg0ODI9aW50IHZteF9lbnRlcl9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy04NDk0LVxcdGlmICh2bXgtXFx1MDAzZW5lc3RlZC5zbW0uZ3Vlc3RfbW9kZSlcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjg0OTU6XFx0XFx0bmVzdGVkX3ZteF92bWV4aXQodmNwdSwgLTEsIDAsIDApO1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODQ5Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6MTA6NDEuMTg4MDA0NjkzWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYwOTgwMzEwNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIE5lc3RlZCBWaXJ0dWFsaXphdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUganVzdCByZXZpZXdlZCB0aGlzIHBhdGNoIGFuZCwgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZywgaXQgYWRkcmVzc2VzIGEgc3BlY2lmaWMgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWUgd2l0aGluIEtWTSdzIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBpbXBsZW1lbnRhdGlvbi4gVGhlIGNvcmUgcHJvYmxlbSBpcyB0aGF0IGBuZXN0ZWRfZmx1c2hfY2FjaGVkX3NoYWRvd192bWNzMTIodmNwdSwgdm1jczEyKTtgIHdhcyBiZWluZyBleGVjdXRlZCBldmVuIHdoZW4gYSBWTSBleGl0IHdhcyBmb3JjZWQgKGluZGljYXRlZCBieSBgdm1fZXhpdF9yZWFzb24gPT0gLTFgKSwgc3VjaCBhcyBkdXJpbmcgdkNQVSB0ZWFyZG93biBvciB3aGVuIGVudGVyaW5nIFNNTS4gRHVyaW5nIHRlYXJkb3duLCBLVk0gc29tZXRpbWVzIG9wZXJhdGVzIHdpdGggYSBsYXp5IFRMQiBtbSB3aGVyZSBgY3VycmVudC1cdTAwM2VtbWAgaXMgYE5VTExgLCBhbmQgY2FsbGluZyBga3ZtX3dyaXRlX2d1ZXN0X2NhY2hlZGAgaW4gdGhhdCBjb250ZXh0IGxlYWRzIHRvIHdyaXRlcyB0byBtZW1vcnkgdGhhdCBpc24ndCB2YWxpZCBmb3IgdGhlIGN1cnJlbnQgY29udGV4dC4gVGhpcyBpcyB3aGF0J3MgY2F1c2luZyB0aGUgcHJvYmxlbSwgd2hpY2ggaGFzIHRoZSBwb3RlbnRpYWwgdG8gY29ycnVwdCBzb21lIHVucmVsYXRlZCB0YXNrJ3MgbWVtb3J5LlxuXG5UaGUgcGF0Y2gncyBzb2x1dGlvbiBpcyBzdHJhaWdodGZvcndhcmQ6IGl0IG1vdmVzIHRoZSBjYWxsIHRvIGBuZXN0ZWRfZmx1c2hfY2FjaGVkX3NoYWRvd192bWNzMTIodmNwdSwgdm1jczEyKTtgIGluc2lkZSB0aGUgZXhpc3RpbmcgYGlmICh2bV9leGl0X3JlYXNvbiAhPSAtMSlgIGJsb2NrLiBUaGlzIHdheSwgdGhlIGZ1bmN0aW9uIGlzICpvbmx5KiBjYWxsZWQgd2hlbiB0aGVyZSdzIGEgdmFsaWQgVk0gZXhpdCByZWFzb24sIGF2b2lkaW5nIHRoZSBwcm9ibGVtYXRpYyBleGVjdXRpb24gcGF0aCBkdXJpbmcgdGVhcmRvd24gb3IgU01NIGVudHJ5LlxuXG5Ob3csIG15IGV2YWx1YXRpb24gZm9jdXNlcyBvbiB3aGV0aGVyIHRoaXMgY2hhbmdlIHdhcnJhbnRzIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgYW5hbHlzaXMuIExldCdzIGJyZWFrIGRvd24gbXkgcmVhc29uaW5nOlxuXG5JJ3ZlIGV4YW1pbmVkIHRoZSBjb2RlIGZvcjpcblxuMS4gICoqSW50ZXJhY3Rpb24gd2l0aCB1c2Vyc3BhY2U6KiogSSBsb29rZWQgZm9yIGFueSBtb2RpZmljYXRpb25zIHRvIGtlcm5lbCBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2Vyc3BhY2UgdmlhIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBuZXRsaW5rLCBpb2N0bCwgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzLiBUaGVyZSBhcmUgbm9uZS4gVGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBvciBhbHRlciBhbnkgb2YgdGhlc2UgaW50ZXJhY3Rpb25zLlxuMi4gICoqVW5pbml0aWFsaXplZCB2YXJpYWJsZS9maWVsZCB1c2U6KiogSSBjYXJlZnVsbHkgY2hlY2tlZCBmb3IgY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgbWlnaHQgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMsIGFzIHdlbGwgYXMgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci4gSSBmb3VuZCBubyBldmlkZW5jZSBvZiBhbnkuXG4zLiAgKipNZW1vcnkgYWNjZXNzIHBhdHRlcm5zOioqIEkgYW5hbHl6ZWQgdGhlIHBhdGNoIGZvciBhbnkgY2hhbmdlcyB0byBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0IGNvdWxkIGxlYWQgdG8gYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgaW4gZXhpc3RpbmcgYnVmZmVycy4gTm90aGluZyBoZXJlLlxuXG5UaGUga2V5IHBvaW50IGhlcmUgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIHNvbGVseSBmb2N1c2VkIG9uICpwcmV2ZW50aW5nKiBhIHNwZWNpZmljIHdyaXRlIG9wZXJhdGlvbiB1bmRlciBjZXJ0YWluIGNpcmN1bXN0YW5jZXMuIEl0IGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIG5ldyBzdHJ1Y3R1cmVzLCBvciBpbnRlcmFjdGlvbnMgd2l0aCB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgbWVjaGFuaXNtcyB0aGF0IHdvdWxkIGJlIG9mIGNvbmNlcm4gZm9yIEtNU0FOLiBJdCdzIHN0cmljdGx5IGFib3V0IGEgY29udHJvbCBmbG93IG1vZGlmaWNhdGlvbi5cblxuS01TQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvcm1hdGlvbiBsZWFrcyBvZiBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZS4gSW4gdGhpcyBjYXNlLCB0aGUgZml4IGFkZHJlc3NlcyBhIHdyaXRlIGlzc3VlLCBub3QgYSByZWFkIGlzc3VlLiBLTVNBTiB3b3VsZG4ndCBiZSBwYXJ0aWN1bGFybHkgaGVscGZ1bCBoZXJlLiBSZWd1bGFyIEtBU0FOIGFuZCBzdGFuZGFyZCBkZWJ1Z2dpbmcga2VybmVscyBzaG91bGQgYmUgc3VmZmljaWVudC4gSSdtIGNvbmZpZGVudCB0aGF0IHRoaXMgY2hhbmdlIGRvZXMgKm5vdCogbmVlZCBLTVNBTiwgYW5kIHNvIHRoZSBgTmVlZHNLTVNBTmAgZmxhZyBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAuXG5cblNvLCBmcm9tIG15IHBlcnNwZWN0aXZlLCB0aGUgcGF0Y2ggc2FmZWx5IHByZXZlbnRzIGEgZ3Vlc3QgbWVtb3J5IHdyaXRlIHdoZW4gaXQgaXMgcnVubmluZyB3aXRob3V0IGEgdmFsaWQgTU0sIGFuZCBkb2VzIG5vdCByZXF1aXJlIGFueSBzcGVjaWFsIGFuYWx5c2lzIGJleW9uZCBzdGFuZGFyZCBkZWJ1Z2dpbmcgYW5kIHRlc3RpbmcuIFRoaXMgaXMgYSBtZW1vcnkgY29ycnVwdGlvbiBmaXggd2l0aGluIHRoZSBsaWZlY3ljbGUgb2YgdGhlIGd1ZXN0LCBhbmQgdGhlcmUgYXJlIG5vIGluZm8tbGVha3MgaW52b2x2ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxMTcsIk91dHB1dFRva2VucyI6MTY4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE2OjEwOjQ3LjI4NjAzODM4NloiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbmVzdGVkIFZNWCBWTS1leGl0IGhhbmRsaW5nIGluIEtWTSAoYF9fbmVzdGVkX3ZteF92bWV4aXRgKSB0byBza2lwIGNhbGxpbmcgYG5lc3RlZF9mbHVzaF9jYWNoZWRfc2hhZG93X3ZtY3MxMigpYCB3aGVuIGB2bV9leGl0X3JlYXNvbiA9PSAtMWAgKGUuZy4sIGR1cmluZyB2Q1BVIHRlYXJkb3duIG9yIFNNTSBlbnRyeSkuIFRoaXMgcHJldmVudHMgaWxsZWdhbCBndWVzdCBtZW1vcnkgd3JpdGVzIG9uIGJvcnJvd2VkIGxhenkgVExCIG1tIGNvbnRleHRzIGR1cmluZyB0ZWFyZG93bi5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgYnVmZmVycywgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciBsZWFrIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gU3RhbmRhcmQgS0FTQU4gYW5kIGdlbmVyYWwga2VybmVsIGRlYnVnZ2luZyB0b29scyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBuZXN0ZWQgVk1YIFZNLWV4aXQgaGFuZGxpbmcgaW4gS1ZNIChgX19uZXN0ZWRfdm14X3ZtZXhpdGApIHRvIHNraXAgY2FsbGluZyBgbmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyKClgIHdoZW4gYHZtX2V4aXRfcmVhc29uID09IC0xYCAoZS5nLiwgZHVyaW5nIHZDUFUgdGVhcmRvd24gb3IgU01NIGVudHJ5KS4gVGhpcyBwcmV2ZW50cyBpbGxlZ2FsIGd1ZXN0IG1lbW9yeSB3cml0ZXMgb24gYm9ycm93ZWQgbGF6eSBUTEIgbW0gY29udGV4dHMgZHVyaW5nIHRlYXJkb3duLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBidWZmZXJzLCByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBleHBvc2UgdW5pbml0aWFsaXplZCBmaWVsZHMsIG9yIGxlYWsga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBTdGFuZGFyZCBLQVNBTiBhbmQgZ2VuZXJhbCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxm8kf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 15:49:43 +0000 UTC FinishedAt: 2026-09-08 16:10:48 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "d4b7fb647204f0c81dfeae2d1a708e4d858e0c94", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "d4b7fb647204f0c81dfeae2d1a708e4d858e0c94", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_INTEL" ], "series_id": "793ba96f-4789-4722-9f98-d7ae853a2a85" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "__nested_vmx_vmexit", "vmx_leave_nested", "vmx_enter_smm", "nested_vmx_reflect_vmexit", "nested_vmx_free_vcpu" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSU5URUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX25lc3RlZF92bXhfdm1leGl0JiMzNDssCiAgICAmIzM0O3ZteF9sZWF2ZV9uZXN0ZWQmIzM0OywKICAgICYjMzQ7dm14X2VudGVyX3NtbSYjMzQ7LAogICAgJiMzNDtuZXN0ZWRfdm14X3JlZmxlY3Rfdm1leGl0JiMzNDssCiAgICAmIzM0O25lc3RlZF92bXhfZnJlZV92Y3B1JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbmVzdGVkIFZNWCBWTS1leGl0IGhhbmRsaW5nIGluIEtWTSAoYF9fbmVzdGVkX3ZteF92bWV4aXRgKSB0byBza2lwIGNhbGxpbmcgYG5lc3RlZF9mbHVzaF9jYWNoZWRfc2hhZG93X3ZtY3MxMigpYCB3aGVuIGB2bV9leGl0X3JlYXNvbiA9PSAtMWAgKGUuZy4sIGR1cmluZyB2Q1BVIHRlYXJkb3duIG9yIFNNTSBlbnRyeSkuIFRoaXMgcHJldmVudHMgaWxsZWdhbCBndWVzdCBtZW1vcnkgd3JpdGVzIG9uIGJvcnJvd2VkIGxhenkgVExCIG1tIGNvbnRleHRzIGR1cmluZyB0ZWFyZG93bi5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgbmV3IGJ1ZmZlcnMsIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnksIGV4cG9zZSB1bmluaXRpYWxpemVkIGZpZWxkcywgb3IgbGVhayBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFN0YW5kYXJkIEtBU0FOIGFuZCBnZW5lcmFsIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgYXJlIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIF9fbmVzdGVkX3ZteF92bWV4aXQoKSBpbiBLVk0gbmVzdGVkIFZNWCBzdXBwb3J0IChhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jKSB0byBwcmV2ZW50IGZsdXNoaW5nIGNhY2hlZCBzaGFkb3cgVk1DUzEyIHdoZW4gcGVyZm9ybWluZyBhIGZvcmNlZCBuZXN0ZWQgVk0tZXhpdCAodm1fZXhpdF9yZWFzb24gPT0gLTEsIGUuZy4gZHVyaW5nIHZDUFUgdGVhcmRvd24gb3IgU01NIGVudHJ5KS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzIGluIGNvcmUgS1ZNIHZpcnR1YWxpemF0aW9uIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2Ugb24gYW1kNjQsIHdhcnJhbnRpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNjowOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGMyNGMzOTg2ZDRkNTVkMDBlODA3MTY0OTNiYmMxMDlkM2FhYjZjMTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDE2OjA5OjQxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXG5pbmRleCAxNTE4NzM0MDdhYmQzLi4zM2RjOGEwNzAxOWY4IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xuQEAgLTUxMjEsMjEgJiM0Mzs1MTIxLDI4IEBAIHZvaWQgX19uZXN0ZWRfdm14X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2bV9leGl0X3JlYXNvbixcbiBcdGlmIChsaWtlbHkoIXZteC1cdTAwM2VmYWlsKSkge1xuIFx0XHRzeW5jX3ZtY3MwMl90b192bWNzMTIodmNwdSwgdm1jczEyKTtcbiBcbi1cdFx0aWYgKHZtX2V4aXRfcmVhc29uICE9IC0xKVxuJiM0MztcdFx0aWYgKHZtX2V4aXRfcmVhc29uICE9IC0xKSB7XG4gXHRcdFx0cHJlcGFyZV92bWNzMTIodmNwdSwgdm1jczEyLCB2bV9leGl0X3JlYXNvbixcbiBcdFx0XHRcdCAgICAgICBleGl0X2ludHJfaW5mbywgZXhpdF9xdWFsaWZpY2F0aW9uLFxuIFx0XHRcdFx0ICAgICAgIGV4aXRfaW5zbl9sZW4pO1xuIFxuLVx0XHQvKlxuLVx0XHQgKiBNdXN0IGhhcHBlbiBvdXRzaWRlIG9mIHN5bmNfdm1jczAyX3RvX3ZtY3MxMigpIGFzIGl0IHdpbGxcbi1cdFx0ICogYWxzbyBiZSB1c2VkIHRvIGNhcHR1cmUgdm1jczEyIGNhY2hlIGFzIHBhcnQgb2Zcbi1cdFx0ICogY2FwdHVyaW5nIG5WTVggc3RhdGUgZm9yIHNuYXBzaG90IChtaWdyYXRpb24pLlxuLVx0XHQgKlxuLVx0XHQgKiBPdGhlcndpc2UsIHRoaXMgZmx1c2ggd2lsbCBkaXJ0eSBndWVzdCBtZW1vcnkgYXQgYVxuLVx0XHQgKiBwb2ludCBpdCBpcyBhbHJlYWR5IGFzc3VtZWQgYnkgdXNlci1zcGFjZSB0byBiZVxuLVx0XHQgKiBpbW11dGFibGUuXG4tXHRcdCAqL1xuLVx0XHRuZXN0ZWRfZmx1c2hfY2FjaGVkX3NoYWRvd192bWNzMTIodmNwdSwgdm1jczEyKTtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogTXVzdCBoYXBwZW4gb3V0c2lkZSBvZiBzeW5jX3ZtY3MwMl90b192bWNzMTIoKSBhcyBpdCB3aWxsXG4mIzQzO1x0XHRcdCAqIGFsc28gYmUgdXNlZCB0byBjYXB0dXJlIHZtY3MxMiBjYWNoZSBhcyBwYXJ0IG9mXG4mIzQzO1x0XHRcdCAqIGNhcHR1cmluZyBuVk1YIHN0YXRlIGZvciBzbmFwc2hvdCAobWlncmF0aW9uKS5cbiYjNDM7XHRcdFx0ICpcbiYjNDM7XHRcdFx0ICogT3RoZXJ3aXNlLCB0aGlzIGZsdXNoIHdpbGwgZGlydHkgZ3Vlc3QgbWVtb3J5IGF0IGFcbiYjNDM7XHRcdFx0ICogcG9pbnQgaXQgaXMgYWxyZWFkeSBhc3N1bWVkIGJ5IHVzZXItc3BhY2UgdG8gYmVcbiYjNDM7XHRcdFx0ICogaW1tdXRhYmxlLlxuJiM0MztcdFx0XHQgKlxuJiM0MztcdFx0XHQgKiBEbyBub3QgZmx1c2ggd2hlbiB2bV9leGl0X3JlYXNvbiA9PSAtMSAoZS5nLiBmb3JjZWQgZXhpdFxuJiM0MztcdFx0XHQgKiBvbiB2Q1BVIHRlYXJkb3duIG9yIFNNTSBlbnRyeSkuIE9uIHRlYXJkb3duLCBLVk0gbWF5IHJ1blxuJiM0MztcdFx0XHQgKiB3aXRoIGN1cnJlbnQtXHUwMDNlbW0gPT0gTlVMTCBvbiBhIGJvcnJvd2VkIGxhenkgVExCIG1tLFxuJiM0MztcdFx0XHQgKiB3aGVyZSB3cml0aW5nIGd1ZXN0IG1lbW9yeSB3b3VsZCBjb3JydXB0IGFuIHVucmVsYXRlZFxuJiM0MztcdFx0XHQgKiB0YXNrLiBOb3RoaW5nIGNhbiBvYnNlcnZlIHRoZSBmbHVzaCBpbiB0aGF0IGNhc2UgYW55d2F5LlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0bmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyKHZjcHUsIHZtY3MxMik7XG4mIzQzO1x0XHR9XG4gXHR9IGVsc2Uge1xuIFx0XHQvKlxuIFx0XHQgKiBUaGUgb25seSBleHBlY3RlZCBWTS1pbnN0cnVjdGlvbiBlcnJvciBpcyBcJiMzNDtWTSBlbnRyeSB3aXRoXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6MDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fbmVzdGVkX3ZteF92bWV4aXQmIzM0OywKICAgICYjMzQ7dm14X2xlYXZlX25lc3RlZCYjMzQ7LAogICAgJiMzNDt2bXhfZW50ZXJfc21tJiMzNDssCiAgICAmIzM0O25lc3RlZF92bXhfcmVmbGVjdF92bWV4aXQmIzM0OywKICAgICYjMzQ7bmVzdGVkX3ZteF9mcmVlX3ZjcHUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgX19uZXN0ZWRfdm14X3ZtZXhpdCgpIGluIEtWTSBuZXN0ZWQgVk1YIHN1cHBvcnQgKGFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMpIHRvIHByZXZlbnQgZmx1c2hpbmcgY2FjaGVkIHNoYWRvdyBWTUNTMTIgd2hlbiBwZXJmb3JtaW5nIGEgZm9yY2VkIG5lc3RlZCBWTS1leGl0ICh2bV9leGl0X3JlYXNvbiA9PSAtMSwgZS5nLiBkdXJpbmcgdkNQVSB0ZWFyZG93biBvciBTTU0gZW50cnkpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMgaW4gY29yZSBLVk0gdmlydHVhbGl6YXRpb24gYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSBvbiBhbWQ2NCwgd2FycmFudGluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzI0YzM5ODZkNGQ1NWQwMGU4MDcxNjQ5M2JiYzEwOWQzYWFiNmMxNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMTY6MDk6NDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYwppbmRleCAxNTE4NzM0MDdhYmQzLi4zM2RjOGEwNzAxOWY4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMKQEAgLTUxMjEsMjEgJiM0Mzs1MTIxLDI4IEBAIHZvaWQgX19uZXN0ZWRfdm14X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2bV9leGl0X3JlYXNvbiwKIAlpZiAobGlrZWx5KCF2bXgtJmd0O2ZhaWwpKSB7CiAJCXN5bmNfdm1jczAyX3RvX3ZtY3MxMih2Y3B1LCB2bWNzMTIpOwogCi0JCWlmICh2bV9leGl0X3JlYXNvbiAhPSAtMSkKJiM0MzsJCWlmICh2bV9leGl0X3JlYXNvbiAhPSAtMSkgewogCQkJcHJlcGFyZV92bWNzMTIodmNwdSwgdm1jczEyLCB2bV9leGl0X3JlYXNvbiwKIAkJCQkgICAgICAgZXhpdF9pbnRyX2luZm8sIGV4aXRfcXVhbGlmaWNhdGlvbiwKIAkJCQkgICAgICAgZXhpdF9pbnNuX2xlbik7CiAKLQkJLyoKLQkJICogTXVzdCBoYXBwZW4gb3V0c2lkZSBvZiBzeW5jX3ZtY3MwMl90b192bWNzMTIoKSBhcyBpdCB3aWxsCi0JCSAqIGFsc28gYmUgdXNlZCB0byBjYXB0dXJlIHZtY3MxMiBjYWNoZSBhcyBwYXJ0IG9mCi0JCSAqIGNhcHR1cmluZyBuVk1YIHN0YXRlIGZvciBzbmFwc2hvdCAobWlncmF0aW9uKS4KLQkJICoKLQkJICogT3RoZXJ3aXNlLCB0aGlzIGZsdXNoIHdpbGwgZGlydHkgZ3Vlc3QgbWVtb3J5IGF0IGEKLQkJICogcG9pbnQgaXQgaXMgYWxyZWFkeSBhc3N1bWVkIGJ5IHVzZXItc3BhY2UgdG8gYmUKLQkJICogaW1tdXRhYmxlLgotCQkgKi8KLQkJbmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyKHZjcHUsIHZtY3MxMik7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBNdXN0IGhhcHBlbiBvdXRzaWRlIG9mIHN5bmNfdm1jczAyX3RvX3ZtY3MxMigpIGFzIGl0IHdpbGwKJiM0MzsJCQkgKiBhbHNvIGJlIHVzZWQgdG8gY2FwdHVyZSB2bWNzMTIgY2FjaGUgYXMgcGFydCBvZgomIzQzOwkJCSAqIGNhcHR1cmluZyBuVk1YIHN0YXRlIGZvciBzbmFwc2hvdCAobWlncmF0aW9uKS4KJiM0MzsJCQkgKgomIzQzOwkJCSAqIE90aGVyd2lzZSwgdGhpcyBmbHVzaCB3aWxsIGRpcnR5IGd1ZXN0IG1lbW9yeSBhdCBhCiYjNDM7CQkJICogcG9pbnQgaXQgaXMgYWxyZWFkeSBhc3N1bWVkIGJ5IHVzZXItc3BhY2UgdG8gYmUKJiM0MzsJCQkgKiBpbW11dGFibGUuCiYjNDM7CQkJICoKJiM0MzsJCQkgKiBEbyBub3QgZmx1c2ggd2hlbiB2bV9leGl0X3JlYXNvbiA9PSAtMSAoZS5nLiBmb3JjZWQgZXhpdAomIzQzOwkJCSAqIG9uIHZDUFUgdGVhcmRvd24gb3IgU01NIGVudHJ5KS4gT24gdGVhcmRvd24sIEtWTSBtYXkgcnVuCiYjNDM7CQkJICogd2l0aCBjdXJyZW50LSZndDttbSA9PSBOVUxMIG9uIGEgYm9ycm93ZWQgbGF6eSBUTEIgbW0sCiYjNDM7CQkJICogd2hlcmUgd3JpdGluZyBndWVzdCBtZW1vcnkgd291bGQgY29ycnVwdCBhbiB1bnJlbGF0ZWQKJiM0MzsJCQkgKiB0YXNrLiBOb3RoaW5nIGNhbiBvYnNlcnZlIHRoZSBmbHVzaCBpbiB0aGF0IGNhc2UgYW55d2F5LgomIzQzOwkJCSAqLwomIzQzOwkJCW5lc3RlZF9mbHVzaF9jYWNoZWRfc2hhZG93X3ZtY3MxMih2Y3B1LCB2bWNzMTIpOwomIzQzOwkJfQogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIFRoZSBvbmx5IGV4cGVjdGVkIFZNLWluc3RydWN0aW9uIGVycm9yIGlzICYjMzQ7Vk0gZW50cnkgd2l0aAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzE4CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGl2aW5nIGludG8gdGhlIE5lc3RlZCBWTSBDb2RlKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIHRvIHJldmlldywgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYnVyaWVkIGluIGBhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jYC4gTGV0JiMzOTtzIGdldCB0byBpdC4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgdGhlIHBhdGNoIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiB0aGF0IGZpbGUuIENvbnRleHQgaXMgZXZlcnl0aGluZyB3aGVuIGl0IGNvbWVzIHRvIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2UgaW4gcmVsYXRpb24gdG8gdGhlIGV4aXN0aW5nIGltcGxlbWVudGF0aW9uLiBJJiMzOTttIGdvaW5nIHRvIHplcm8gaW4gb24gdGhlIGFyZWEgYXJvdW5kIGxpbmUgNTEyMS4gSSYjMzk7bGwgbmVlZCB0byBzZWUgcHJlY2lzZWx5IHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlLCB1bmRlcnN0YW5kIHRoZSBsb2dpYyBmbG93LCBhbmQgaWRlbnRpZnkgdGhlIHNwZWNpZmljIGNvZGUgc2VnbWVudHMgdGhhdCBhcmUgYmVpbmcgbW9kaWZpZWQuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMsIHJpZ2h0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW50IGJlaGluZCB0aGlzIGNoYW5nZSwgd2h5IGl0JiMzOTtzIG5lY2Vzc2FyeSwgYW5kIHdoYXQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBpdCBtaWdodCBoYXZlIG9uIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTExMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MTEwOlx0XHRsZWF2ZV9ndWVzdF9tb2RlKHZjcHUpO1xuNTExMTpcdFxuNTExMjpcdFx0aWYgKG5lc3RlZF9jcHVfaGFzX3ByZWVtcHRpb25fdGltZXIodm1jczEyKSlcbjUxMTM6XHRcdFx0aHJ0aW1lcl9jYW5jZWwoXHUwMDI2dG9fdm14KHZjcHUpLVx1MDAzZW5lc3RlZC5wcmVlbXB0aW9uX3RpbWVyKTtcbjUxMTQ6XHRcbjUxMTU6XHRcdGlmIChuZXN0ZWRfY3B1X2hhcyh2bWNzMTIsIENQVV9CQVNFRF9VU0VfVFNDX09GRlNFVFRJTkcpKSB7XG41MTE2Olx0XHRcdHZjcHUtXHUwMDNlYXJjaC50c2Nfb2Zmc2V0ID0gdmNwdS1cdTAwM2VhcmNoLmwxX3RzY19vZmZzZXQ7XG41MTE3Olx0XHRcdGlmIChuZXN0ZWRfY3B1X2hhczIodm1jczEyLCBTRUNPTkRBUllfRVhFQ19UU0NfU0NBTElORykpXG41MTE4Olx0XHRcdFx0dmNwdS1cdTAwM2VhcmNoLnRzY19zY2FsaW5nX3JhdGlvID0gdmNwdS1cdTAwM2VhcmNoLmwxX3RzY19zY2FsaW5nX3JhdGlvO1xuNTExOTpcdFx0fVxuNTEyMDpcdFxuNTEyMTpcdFx0aWYgKGxpa2VseSghdm14LVx1MDAzZWZhaWwpKSB7XG41MTIyOlx0XHRcdHN5bmNfdm1jczAyX3RvX3ZtY3MxMih2Y3B1LCB2bWNzMTIpO1xuNTEyMzpcdFxuNTEyNDpcdFx0XHRpZiAodm1fZXhpdF9yZWFzb24gIT0gLTEpIHtcbjUxMjU6XHRcdFx0XHRwcmVwYXJlX3ZtY3MxMih2Y3B1LCB2bWNzMTIsIHZtX2V4aXRfcmVhc29uLFxuNTEyNjpcdFx0XHRcdFx0ICAgICAgIGV4aXRfaW50cl9pbmZvLCBleGl0X3F1YWxpZmljYXRpb24sXG41MTI3Olx0XHRcdFx0XHQgICAgICAgZXhpdF9pbnNuX2xlbik7XG41MTI4Olx0XG41MTI5Olx0XHRcdFx0LypcbjUxMzA6XHRcdFx0XHQgKiBNdXN0IGhhcHBlbiBvdXRzaWRlIG9mIHN5bmNfdm1jczAyX3RvX3ZtY3MxMigpIGFzIGl0IHdpbGxcbjUxMzE6XHRcdFx0XHQgKiBhbHNvIGJlIHVzZWQgdG8gY2FwdHVyZSB2bWNzMTIgY2FjaGUgYXMgcGFydCBvZlxuNTEzMjpcdFx0XHRcdCAqIGNhcHR1cmluZyBuVk1YIHN0YXRlIGZvciBzbmFwc2hvdCAobWlncmF0aW9uKS5cbjUxMzM6XHRcdFx0XHQgKlxuNTEzNDpcdFx0XHRcdCAqIE90aGVyd2lzZSwgdGhpcyBmbHVzaCB3aWxsIGRpcnR5IGd1ZXN0IG1lbW9yeSBhdCBhXG41MTM1Olx0XHRcdFx0ICogcG9pbnQgaXQgaXMgYWxyZWFkeSBhc3N1bWVkIGJ5IHVzZXItc3BhY2UgdG8gYmVcbjUxMzY6XHRcdFx0XHQgKiBpbW11dGFibGUuXG41MTM3Olx0XHRcdFx0ICpcbjUxMzg6XHRcdFx0XHQgKiBEbyBub3QgZmx1c2ggd2hlbiB2bV9leGl0X3JlYXNvbiA9PSAtMSAoZS5nLiBmb3JjZWQgZXhpdFxuNTEzOTpcdFx0XHRcdCAqIG9uIHZDUFUgdGVhcmRvd24gb3IgU01NIGVudHJ5KS4gT24gdGVhcmRvd24sIEtWTSBtYXkgcnVuXG41MTQwOlx0XHRcdFx0ICogd2l0aCBjdXJyZW50LVx1MDAzZW1tID09IE5VTEwgb24gYSBib3Jyb3dlZCBsYXp5IFRMQiBtbSxcbjUxNDE6XHRcdFx0XHQgKiB3aGVyZSB3cml0aW5nIGd1ZXN0IG1lbW9yeSB3b3VsZCBjb3JydXB0IGFuIHVucmVsYXRlZFxuNTE0MjpcdFx0XHRcdCAqIHRhc2suIE5vdGhpbmcgY2FuIG9ic2VydmUgdGhlIGZsdXNoIGluIHRoYXQgY2FzZSBhbnl3YXkuXG41MTQzOlx0XHRcdFx0ICovXG41MTQ0Olx0XHRcdFx0bmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyKHZjcHUsIHZtY3MxMik7XG41MTQ1Olx0XHRcdH1cbjUxNDY6XHRcdH0gZWxzZSB7XG41MTQ3Olx0XHRcdC8qXG41MTQ4Olx0XHRcdCAqIFRoZSBvbmx5IGV4cGVjdGVkIFZNLWluc3RydWN0aW9uIGVycm9yIGlzIFwmIzM0O1ZNIGVudHJ5IHdpdGhcbjUxNDk6XHRcdFx0ICogaW52YWxpZCBjb250cm9sIGZpZWxkKHMpLlwmIzM0OyBBbnl0aGluZyBlbHNlIGluZGljYXRlcyBhXG41MTUwOlx0XHRcdCAqIHByb2JsZW0gd2l0aCBMMC5cbjUxNTE6XHRcdFx0ICovXG41MTUyOlx0XHRcdFdBUk5fT05fT05DRSh2bWNzX3JlYWQzMihWTV9JTlNUUlVDVElPTl9FUlJPUikgIT1cbjUxNTM6XHRcdFx0XHQgICAgIFZNWEVSUl9FTlRSWV9JTlZBTElEX0NPTlRST0xfRklFTEQpO1xuNTE1NDpcdFxuNTE1NTpcdFx0XHQvKiBWTS1GYWlsIGF0IFZNLUVudHJ5IG1lYW5zIEtWTSBtaXNzZWQgYSBjb25zaXN0ZW5jeSBjaGVjay4gKi9cbjUxNTY6XHRcdFx0V0FSTl9PTl9PTkNFKHdhcm5fb25fbWlzc2VkX2NjKTtcbjUxNTc6XHRcdH1cbjUxNTg6XHRcbjUxNTk6XHRcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ5MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDExNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRhcmdldCBhbmQgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyB0d2Vha2luZyBgX19uZXN0ZWRfdm14X3ZtZXhpdGAgd2l0aGluIGBhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jYC4gIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBuZXN0ZWQgVk1YIHZtZXhpdHMg4oCTIGVmZmVjdGl2ZWx5LCBuZXN0ZWQgdmlydHVhbGl6YXRpb24sIHdoaWNoIGlzIHJlbGV2YW50IHRvIEludGVsL2FtZDY0IHBsYXRmb3Jtcy4gIFRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcyBhbHdheXMsICpjYW4qIHRoaXMgYmUgZWZmZWN0aXZlbHkgZnV6emVkIHRocm91Z2ggYSB0b29sIGxpa2Ugc3l6a2FsbGVyLCBydW5uaW5nIGluIGEgc3RhbmRhcmQgUUVNVSBzZXR1cD8gIEZvcnR1bmF0ZWx5LCB0aGUgYW5zd2VyIGxvb2tzIGxpa2UgYSByZXNvdW5kaW5nICYjMzQ7eWVzLiYjMzQ7IEtWTSwgYW5kIGJ5IGV4dGVuc2lvbiBuZXN0ZWQgVk1YLCB0aHJvdWdoIGAvZGV2L2t2bWAsIGlzIGFscmVhZHkgYSBwcmltZSB0YXJnZXQgZm9yIHN5emthbGxlciYjMzk7cyBmdXp6aW5nLiAgVGhlcmVmb3JlIEkgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgS1ZNIGFuZCBLVk1fSU5URUwgY29uZmlndXJhdGlvbnMgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgaXMgc2V0IHVwIHRvIGV4cGxvcmUgdGhpcyBwb3RlbnRpYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7S1ZNX0lOVEVMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTIwPWNvbmZpZyBLVk1fWDg2XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTpcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyLVx0c2VsZWN0IEtWTV9DT01NT05cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz04Mz1jb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwOTogICAgICAgIGRlcGVuZHMgb24gS1ZNX0lOVEVMIFx1MDAyNlx1MDAyNiBFWFBFUlRcbmFyY2gveDg2L2t2bS9LY29uZmlnLTExMC0gICAgICAgIGhlbHBcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMjMtXHRib29sIFwmIzM0O1NvZnR3YXJlIEd1YXJkIGVYdGVuc2lvbnMgKFNHWCkgVmlydHVhbGl6YXRpb25cJiMzNDtcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEyNDpcdGRlcGVuZHMgb24gWDg2X1NHWCBcdTAwMjZcdTAwMjYgS1ZNX0lOVEVMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMjUtXHRoZWxwXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU9MjE9a3ZtLWludGVsLSQoQ09ORklHX0tWTV9IWVBFUlYpXHQmIzQzOz0gdm14L2h5cGVydi5vIHZteC9oeXBlcnZfZXZtY3Mub1xuYXJjaC94ODYva3ZtL01ha2VmaWxlOjIyOmt2bS1pbnRlbC0kKENPTkZJR19LVk1fSU5URUxfVERYKVx0JiM0Mzs9IHZteC90ZHgub1xuYXJjaC94ODYva3ZtL01ha2VmaWxlLTIzLVxuLS1cbmFyY2gveDg2L2t2bS9NYWtlZmlsZT0zNT1vYmotJChDT05GSUdfS1ZNX1g4NilcdCYjNDM7PSBrdm0ub1xuYXJjaC94ODYva3ZtL01ha2VmaWxlOjM2Om9iai0kKENPTkZJR19LVk1fSU5URUwpXHQmIzQzOz0ga3ZtLWludGVsLm9cbmFyY2gveDg2L2t2bS9NYWtlZmlsZS0zNy1vYmotJChDT05GSUdfS1ZNX0FNRClcdCYjNDM7PSBrdm0tYW1kLm9cbi0tXG5hcmNoL3g4Ni9rdm0va3ZtLWFzbS1vZmZzZXRzLmM9MTM9c3RhdGljIHZvaWQgX191c2VkIGNvbW1vbih2b2lkKVxuLS1cbmFyY2gveDg2L2t2bS9rdm0tYXNtLW9mZnNldHMuYy0yNC1cbmFyY2gveDg2L2t2bS9rdm0tYXNtLW9mZnNldHMuYzoyNTpcdGlmIChJU19FTkFCTEVEKENPTkZJR19LVk1fSU5URUwpKSB7XG5hcmNoL3g4Ni9rdm0va3ZtLWFzbS1vZmZzZXRzLmMtMjYtXHRcdEJMQU5LKCk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaD0zMz1zdHJ1Y3QgdmNwdV92dCB7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaC01Ny1cbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmg6NTg6I2lmZGVmIENPTkZJR19LVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTU5LVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEyLVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6MTM6I2lmZGVmIENPTkZJR19LVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy0xNC1zdGF0aWNfYXNzZXJ0KG9mZnNldG9mKHN0cnVjdCB2Y3B1X3ZteCwgdnQpID09IG9mZnNldG9mKHN0cnVjdCB2Y3B1X3RkeCwgdnQpKTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYz04NjM9c3RhdGljIGludCB2dF9nbWVtX21heF9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbixcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04NzMtI2RlZmluZSB2dF9vcF90ZHhfb25seShuYW1lKSB2dF8jI25hbWVcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjg3NDojZWxzZSAvKiBDT05GSUdfS1ZNX0lOVEVMX1REWCAqL1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODc1LSNkZWZpbmUgdnRfb3AobmFtZSkgdm14XyMjbmFtZVxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODc2LSNkZWZpbmUgdnRfb3BfdGR4X29ubHkobmFtZSkgTlVMTFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM6ODc3OiNlbmRpZiAvKiBDT05GSUdfS1ZNX0lOVEVMX1REWCAqL1xuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODc4LVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdGR4LmgtNi1cbmFyY2gveDg2L2t2bS92bXgvdGR4Lmg6NzojaWZkZWYgQ09ORklHX0tWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS92bXgvdGR4LmgtOC0jaW5jbHVkZSBcJiMzNDtjb21tb24uaFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9OTAyPXZvaWQgdm14X3VwZGF0ZV9leGNlcHRpb25fYml0bWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTkxMS1cdCAqL1xuYXJjaC94ODYva3ZtL3ZteC92bXguYzo5MTI6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfS1ZNX0lOVEVMX1BST1ZFX1ZFKSlcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtOTEzLVx0XHRlYiB8PSAxdSBcdTAwM2NcdTAwM2MgVkVfVkVDVE9SO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9Mjc0Nz1zdGF0aWMgaW50IHNldHVwX3ZtY3NfY29uZmlnKHN0cnVjdCB2bWNzX2NvbmZpZyAqdm1jc19jb25mLFxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtMjc5MC1cdH1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM6Mjc5MTpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfS1ZNX0lOVEVMX1BST1ZFX1ZFKSlcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtMjc5Mi1cdFx0X2NwdV9iYXNlZF8ybmRfZXhlY19jb250cm9sIFx1MDAyNj0gflNFQ09OREFSWV9FWEVDX0VQVF9WSU9MQVRJT05fVkU7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmg9MTI3PXZvaWQgdm14X3NldHVwX21jZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmgtMTI4LVxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmg6MTI5OiNpZmRlZiBDT05GSUdfS1ZNX0lOVEVMX1REWFxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmgtMTMwLXZvaWQgdGR4X2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuaD0zMTA9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGt2bV9yZXF1ZXN0X2wxdGZfZmx1c2hfbDFkKHZvaWQpXG5hcmNoL3g4Ni9rdm0veDg2LmgtMzExLXtcbmFyY2gveDg2L2t2bS94ODYuaDozMTI6I2lmIElTX0VOQUJMRUQoQ09ORklHX0NQVV9NSVRJR0FUSU9OUykgXHUwMDI2XHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0tWTV9JTlRFTClcbmFyY2gveDg2L2t2bS94ODYuaC0zMTMtXHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3ODYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktjb25maWcgRGl2ZSBmb3IgS1ZNICZhbXA7IEtWTV9JTlRFTCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgc29tZXRoaW5nIGFib3V0IHRoZSBLVk0gY29uZmlndXJhdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8ganVtcCBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZXMgYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggYEtWTWAgYW5kLCBzcGVjaWZpY2FsbHksIGBLVk1fSU5URUxgLiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgZm9yIGEgZGVwZW5kZW5jeSBvciBhIGRlZmF1bHQgc2V0dGluZyB0aGF0IEkgdmFndWVseSByZWNhbGwsIG1heWJlIGEgY29uZGl0aW9uYWwgYnVpbGQsIG9yIGEgc3BlY2lmaWMgZmVhdHVyZSBnYXRlIHRoYXQgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC4gS25vd2luZyB3aGVyZSB0aG9zZSBhcmUgZGVmaW5lZCB3aWxsIGVpdGhlciBjb25maXJtIG15IHN1c3BpY2lvbnMgb3IgaW1tZWRpYXRlbHkgc2hvdyBtZSB3aGVyZSB0byBiZWdpbiB0cm91Ymxlc2hvb3RpbmcuIEl0JiMzOTtzIGEgcXVpY2sgd2F5IHRvIGJhc2VsaW5lIHRoZSBleHBlY3RlZCBiZWhhdmlvciBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGEgY3JpdGljYWwgZGV0YWlsIHJlbGF0ZWQgdG8gdGhlIGhhcmR3YXJlIG9yIHRoZSBrZXJuZWwgdmVyc2lvbiBJJiMzOTttIGRlYWxpbmcgd2l0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAxNTpcdFxuICAxNjpcdFx0ICBJZiB5b3Ugc2F5IE4sIGFsbCBvcHRpb25zIGluIHRoaXMgc3VibWVudSB3aWxsIGJlIHNraXBwZWQgYW5kIGRpc2FibGVkLlxuICAxNzpcdFxuICAxODpcdGlmIFZJUlRVQUxJWkFUSU9OXG4gIDE5Olx0XG4gIDIwOlx0Y29uZmlnIEtWTV9YODZcbiAgMjE6XHRcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcbiAgMjI6XHRcdHNlbGVjdCBLVk1fQ09NTU9OXG4gIDIzOlx0XHRzZWxlY3QgS1ZNX0VMSURFX1RMQl9GTFVTSF9JRl9ZT1VOR1xuICAyNDpcdFx0c2VsZWN0IEtWTV9NTVVfTE9DS0xFU1NfQUdJTkdcbiAgMjU6XHRcdHNlbGVjdCBIQVZFX0tWTV9JUlFDSElQXG4gIDI2Olx0XHRzZWxlY3QgSEFWRV9LVk1fUEZOQ0FDSEVcbiAgMjc6XHRcdHNlbGVjdCBIQVZFX0tWTV9ESVJUWV9SSU5HX1RTT1xuICAyODpcdFx0c2VsZWN0IEhBVkVfS1ZNX0RJUlRZX1JJTkdfQUNRX1JFTFxuICAyOTpcdFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9CWVBBU1NcbiAgMzA6XHRcdHNlbGVjdCBIQVZFX0tWTV9JUlFfUk9VVElOR1xuICAzMTpcdFx0c2VsZWN0IEhBVkVfS1ZNX1JFQURPTkxZX01FTVxuICAzMjpcdFx0c2VsZWN0IFZIT1NUX1RBU0tcbiAgMzM6XHRcdHNlbGVjdCBLVk1fQVNZTkNfUEZcbiAgMzQ6XHRcdHNlbGVjdCBVU0VSX1JFVFVSTl9OT1RJRklFUlxuICAzNTpcdFx0c2VsZWN0IEtWTV9NTUlPXG4gIDM2Olx0XHRzZWxlY3QgU0NIRURfSU5GT1xuICAzNzpcdFx0c2VsZWN0IFBFUkZfRVZFTlRTXG4gIDM4Olx0XHRzZWxlY3QgR1VFU1RfUEVSRl9FVkVOVFNcbiAgMzk6XHRcdHNlbGVjdCBQRVJGX0dVRVNUX01FRElBVEVEX1BNVVxuICA0MDpcdFx0c2VsZWN0IEhBVkVfS1ZNX01TSVxuICA0MTpcdFx0c2VsZWN0IEhBVkVfS1ZNX0NQVV9SRUxBWF9JTlRFUkNFUFRcbiAgNDI6XHRcdHNlbGVjdCBIQVZFX0tWTV9OT19QT0xMXG4gIDQzOlx0XHRzZWxlY3QgVklSVF9YRkVSX1RPX0dVRVNUX1dPUktcbiAgNDQ6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19ESVJUWUxPR19SRUFEX1BST1RFQ1RcbiAgNDU6XHRcdHNlbGVjdCBLVk1fVkZJT1xuICA0NjpcdFx0c2VsZWN0IEhBVkVfS1ZNX1BNX05PVElGSUVSIGlmIFBNXG4gIDQ3Olx0XHRzZWxlY3QgS1ZNX0dFTkVSSUNfSEFSRFdBUkVfRU5BQkxJTkdcbiAgNDg6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19QUkVfRkFVTFRfTUVNT1JZXG4gIDQ5Olx0XHRzZWxlY3QgS1ZNX1dFUlJPUiBpZiBXRVJST1JcbiAgNTA6XHRcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkQgaWYgWDg2XzY0XG4gIDUxOlx0XG4gIDUyOlx0Y29uZmlnIEtWTVxuICA1MzpcdFx0dHJpc3RhdGUgXCYjMzQ7S2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XCYjMzQ7XG4gIDU0Olx0XHRkZXBlbmRzIG9uIFg4Nl9MT0NBTF9BUElDXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY0MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgTGFuZHNjYXBlIG9mIGBfX25lc3RlZF92bXhfdm1leGl0YCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBgX19uZXN0ZWRfdm14X3ZtZXhpdGAgZnVuY3Rpb24uIEkgd2FudCB0byBzZWUgYSBmdWxsIHBpY3R1cmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doZXJlIGRvZXMgdGhpcyB0aGluZyBsaXZlIGluIHRoZSBjb2RlPyYjMzQ7IEkgbmVlZCBhIGNvbXByZWhlbnNpdmUgb3ZlcnZpZXcgb2YgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byBvdGhlciBjb21wb25lbnRzIHdpdGhpbiB0aGUgc3lzdGVtLgoKRmlyc3QgdGhpbmdzIGZpcnN0LCBJJiMzOTttIGdvaW5nIHRvIHRyYWNrIGRvd24gZXZlcnkgaW5zdGFuY2Ugd2hlcmUgYF9fbmVzdGVkX3ZteF92bWV4aXRgIGlzIGNhbGxlZC4gVGhhdCBtZWFucyBkaXZpbmcgaW50byB0aGUgY2FsbCBncmFwaCwgZmluZGluZyBhbGwgdGhlIGNhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbi4gSSBuZWVkIHRvIGlkZW50aWZ5IGJvdGggdGhlIGRpcmVjdCBjYWxscyBhbmQgYW55dGhpbmcgdGhhdCBtaWdodCBiZSBpbmRpcmVjdC4KClNlY29uZCwgSSBuZWVkIHRvIGxvb2sgYXQgYW55IHN5bWJvbCByZWxhdGluZyB0byB0aGUgc2FtZSB0b3BpYyB0aGF0JiMzOTtzICpub3QqIHN0YXRpYywgc28gSSBnZXQgYSBoYW5kbGUgb24gdGhlIGZ1bmN0aW9uJiMzOTtzIHNjb3BlLiBUaGlzIGlzIGNydWNpYWwgZm9yIGZ1bGx5IGdyYXNwaW5nIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4gSSYjMzk7bSBhZnRlciBhIGNsZWFyIG1hcCBvZiBhbGwgdGhlIHBvaW50cyBvZiBpbnRlcmFjdGlvbiwgc28gSSBjYW4gcHJlZGljdCBpdHMgYmVoYXZpb3IgYW5kIGFueSBwb3RlbnRpYWwgcGl0ZmFsbHMuIFRoaXMgY291bGQgZXhwb3NlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX25lc3RlZF92bXhfdm1leGl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NDk2MD1zdGF0aWMgdm9pZCBuZXN0ZWRfdm14X3Jlc3RvcmVfaG9zdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01MDcyLSAqL1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1MDczOnZvaWQgX19uZXN0ZWRfdm14X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2bV9leGl0X3JlYXNvbixcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTA3NC1cdFx0XHQgdTMyIGV4aXRfaW50cl9pbmZvLCB1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbixcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oPTI5PWJvb2wgbmVzdGVkX3ZteF9yZWZsZWN0X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaDozMDp2b2lkIF9fbmVzdGVkX3ZteF92bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdm1fZXhpdF9yZWFzb24sXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oLTMxLVx0XHRcdCB1MzIgZXhpdF9pbnRyX2luZm8sIHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uLFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmg9MzQ9c3RhdGljIGlubGluZSB2b2lkIG5lc3RlZF92bXhfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZtX2V4aXRfcmVhc29uLFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmgtNDUtXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oOjQ2Olx0X19uZXN0ZWRfdm14X3ZtZXhpdCh2Y3B1LCB2bV9leGl0X3JlYXNvbiwgZXhpdF9pbnRyX2luZm8sXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oLTQ3LVx0XHRcdCAgICBleGl0X3F1YWxpZmljYXRpb24sIGV4aXRfaW5zbl9sZW4pO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9ODE5MD1pbnQgdm14X2NoZWNrX2ludGVyY2VwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYy04MjgwLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo4MjgxOlx0X19uZXN0ZWRfdm14X3ZtZXhpdCh2Y3B1LCB2bV9leGl0X3JlYXNvbiwgMCwgZXhpdF9xdWFsaWZpY2F0aW9uLFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy04MjgyLVx0XHRcdCAgICBleGl0X2luc25fbGVuKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU0OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgdGhlIGBuZXN0ZWRfdm14X3ZtZXhpdGAgQ2FsbCBHcmFwaCBhbmQgUG90ZW50aWFsIEVycm9yIENvbmRpdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBgbmVzdGVkX3ZteF92bWV4aXRgIGlzIHVzZWQgd2l0aGluIHRoaXMgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGNvbnRleHQuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl04oCZcyBxdWl0ZSBjZW50cmFsIHRvIHRoZSB3aG9sZSB0aGluZy4gSSBzZWUgdGhhdCBgbmVzdGVkX3ZteF92bWV4aXRgIGlzLCBpbiBlc3NlbmNlLCB0aGUgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIFZNIGV4aXRzIHdoZW4gcnVubmluZyBuZXN0ZWQgVk1zLiBJdCBzZWVtcyB0byBiZSB0aGUgcHJpbWFyeSBoYW5kbGVyLiBJIGNhbiBzZWUgdGhhdCBgbmVzdGVkX3ZteF92bWV4aXRgIGdldHMgY2FsbGVkIGJ5IGBuZXN0ZWRfdm14X3ZtZXhpdGAgaXRzZWxmICh3aGljaCBpcyBsaWtlbHkgcmVsYXRlZCB0byByZWN1cnNpb24gb3IgbmVzdGVkIGV4aXRzIHdpdGhpbiBuZXN0ZWQgVk1zKSBhbmQgYWxzbyBhY3Jvc3MgYG5lc3RlZC5jYCBhbmQgYHZteC5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UgYXMgdGhlc2UgYXJlIGtleSBtb2R1bGVzIGZvciBuZXN0ZWQgVk1YIG9wZXJhdGlvbi4gSW1wb3J0YW50bHksIGl0JiMzOTtzIGFsc28gY2FsbGVkIGRpcmVjdGx5IGJ5IGB2bXhfY2hlY2tfaW50ZXJjZXB0YCwgcHJvYmFibHkgd2hlbiBjaGVja2luZyBmb3Igc3BlY2lmaWMgZXZlbnRzIHRoZSBndWVzdCBzaG91bGQgaGF2ZSBpbnRlcmNlcHRlZCBieSBkZWZhdWx0LCBhbmQgZHVyaW5nIGZvcmNlZCBleGl0cy4KCk5vdywgbXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdW5kZXJzdGFuZGluZyAqYWxsKiB0aGUgZW50cnkgcG9pbnRzIGludG8gdGhpcyBoYW5kbGVyIGFuZCBhbnkgcG90ZW50aWFsIGZhaWx1cmUgbW9kZXMuIEkgbmVlZCB0byBzcGVjaWZpY2FsbHkgdHJhY2UgYmFjayBhbGwgb2YgdGhlIGNhbGxlcnMgb2YgYG5lc3RlZF92bXhfdm1leGl0YCAod2hpY2ggbWF5IGluY2x1ZGUgbG9va2luZyBmb3IgY3Jvc3MtY2FsbHMpIG9yIGxvb2sgZm9yIHNpdHVhdGlvbnMgd2hlcmUgYHZtX2V4aXRfcmVhc29uID09IC0xYCBtaWdodCBiZSBwYXNzZWQuIFRoYXQgdmFsdWUgbG9va3MgbGlrZSBhbiB1bmluaXRpYWxpemVkIG9yIGVycm9yIHN0YXRlLiBUaGUgZmlyc3Qgc3RlcCB3aWxsIGJlIHRvIGNvbmZpcm0gdGhpcyBoeXBvdGhlc2lzOiBpZiBgLTFgIGlzIHBhc3NlZCBhdCBhbiBleGl0LCBpdOKAmXMgYWxtb3N0IGNlcnRhaW5seSBhbiBlcnJvciwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBwYXRoIHRoYXQgcmVzdWx0ZWQgaW4gdGhhdCBjb25kaXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25lc3RlZF92bXhfdm1leGl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmM9MjI3PXZvaWQgdm14X2h2X2luamVjdF9zeW50aGV0aWNfdm1leGl0X3Bvc3RfdGxiX2ZsdXNoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmMtMjI4LXtcbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmM6MjI5Olx0bmVzdGVkX3ZteF92bWV4aXQodmNwdSwgSFZfVk1YX1NZTlRIRVRJQ19FWElUX1JFQVNPTl9UUkFQX0FGVEVSX0ZMVVNILCAwLCAwKTtcbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmMtMjMwLX1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTQyMT1zdGF0aWMgdm9pZCBuZXN0ZWRfZXB0X2luamVjdF9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQ5Mi1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NDkzOlx0bmVzdGVkX3ZteF92bWV4aXQodmNwdSwgdm1fZXhpdF9yZWFzb24sIDAsIGV4aXRfcXVhbGlmaWNhdGlvbik7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQ5NC1cdHZtY3MxMi1cdTAwM2VndWVzdF9waHlzaWNhbF9hZGRyZXNzID0gZmF1bHQtXHUwMDNlYWRkcmVzcztcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTM2Mjk9ZW51bSBudm14X3ZtZW50cnlfc3RhdHVzIG5lc3RlZF92bXhfZW50ZXJfbm9uX3Jvb3RfbW9kZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNzM3LVx0ICogRG8gbm90IHN0YXJ0IHRoZSBwcmVlbXB0aW9uIHRpbWVyIGhydGltZXIgdW50aWwgYWZ0ZXIgd2Uga25vd1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozNzM4Olx0ICogd2UgYXJlIHN1Y2Nlc3NmdWwsIHNvIHRoYXQgb25seSBuZXN0ZWRfdm14X3ZtZXhpdCBuZWVkcyB0byBjYW5jZWxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzczOS1cdCAqIHRoZSB0aW1lci5cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM3NTAtXHQgKiByZXR1cm5lZCBhcyBmYXIgYXMgTDEgaXMgY29uY2VybmVkLiBJdCB3aWxsIG9ubHkgcmV0dXJuIChhbmQgc2V0XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjM3NTE6XHQgKiB0aGUgc3VjY2VzcyBmbGFnKSB3aGVuIEwyIGV4aXRzIChzZWUgbmVzdGVkX3ZteF92bWV4aXQoKSkuXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM3NTItXHQgKi9cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTQwNzI9c3RhdGljIHZvaWQgbmVzdGVkX3ZteF9pbmplY3RfZXhjZXB0aW9uX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy00MTE4LVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo0MTE5Olx0bmVzdGVkX3ZteF92bWV4aXQodmNwdSwgRVhJVF9SRUFTT05fRVhDRVBUSU9OX05NSSwgaW50cl9pbmZvLCBleGl0X3F1YWwpO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy00MTIwLX1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTQzMDU9c3RhdGljIGludCB2bXhfY2hlY2tfbmVzdGVkX2V2ZW50cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy00MzQyLVx0XHRpZiAodmNwdS1cdTAwM2VhcmNoLm1wX3N0YXRlICE9IEtWTV9NUF9TVEFURV9JTklUX1JFQ0VJVkVEKVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo0MzQzOlx0XHRcdG5lc3RlZF92bXhfdm1leGl0KHZjcHUsIEVYSVRfUkVBU09OX0lOSVRfU0lHTkFMLCAwLCAwKTtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNDM0NC1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQzNTYtXHRcdGlmICh2Y3B1LVx1MDAzZWFyY2gubXBfc3RhdGUgPT0gS1ZNX01QX1NUQVRFX0lOSVRfUkVDRUlWRUQpIHtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NDM1NzpcdFx0XHRuZXN0ZWRfdm14X3ZtZXhpdCh2Y3B1LCBFWElUX1JFQVNPTl9TSVBJX1NJR05BTCwgMCxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNDM1OC1cdFx0XHRcdFx0XHRhcGljLVx1MDAzZXNpcGlfdmVjdG9yIFx1MDAyNiAweEZGVUwpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNDM5My1cdFx0bmVzdGVkX3ZteF91cGRhdGVfcGVuZGluZ19kYmcodmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjQzOTQ6XHRcdG5lc3RlZF92bXhfdm1leGl0KHZjcHUsIEVYSVRfUkVBU09OX01PTklUT1JfVFJBUF9GTEFHLCAwLCAwKTtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNDM5NS1cdFx0cmV0dXJuIDA7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy00NDE0LVx0XHRcdHJldHVybiAtRUJVU1k7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjQ0MTU6XHRcdG5lc3RlZF92bXhfdm1leGl0KHZjcHUsIEVYSVRfUkVBU09OX1BSRUVNUFRJT05fVElNRVIsIDAsIDApO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy00NDE2LVx0XHRyZXR1cm4gMDtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQ0MzAtXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjQ0MzE6XHRcdG5lc3RlZF92bXhfdm1leGl0KHZjcHUsIEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUksXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQ0MzItXHRcdFx0XHQgIE5NSV9WRUNUT1IgfCBJTlRSX1RZUEVfTk1JX0lOVFIgfFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNDQ1Ni1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NDQ1NzpcdFx0XHRuZXN0ZWRfdm14X3ZtZXhpdCh2Y3B1LCBFWElUX1JFQVNPTl9FWFRFUk5BTF9JTlRFUlJVUFQsIDAsIDApO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy00NDU4LVx0XHRcdHJldHVybiAwO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNDQ2NS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NDQ2NjpcdFx0XHRuZXN0ZWRfdm14X3ZtZXhpdCh2Y3B1LCBFWElUX1JFQVNPTl9FWFRFUk5BTF9JTlRFUlJVUFQsXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQ0NjctXHRcdFx0XHRcdCAgSU5UUl9JTkZPX1ZBTElEX01BU0sgfCBJTlRSX1RZUEVfRVhUX0lOVFIgfCBpcnEsIDApO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNDUwMS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NDUwMjpcdFx0bmVzdGVkX3ZteF92bWV4aXQodmNwdSwgRVhJVF9SRUFTT05fRVhURVJOQUxfSU5URVJSVVBULFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy00NTAzLVx0XHRcdFx0ICBJTlRSX0lORk9fVkFMSURfTUFTSyB8IElOVFJfVFlQRV9FWFRfSU5UUiB8IGlycSwgMCk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz00OTYwPXN0YXRpYyB2b2lkIG5lc3RlZF92bXhfcmVzdG9yZV9ob3N0X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTUwNzItICovXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjUwNzM6dm9pZCBfX25lc3RlZF92bXhfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZtX2V4aXRfcmVhc29uLFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01MDc0LVx0XHRcdCB1MzIgZXhpdF9pbnRyX2luZm8sIHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uLFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTIzOT1zdGF0aWMgdm9pZCBuZXN0ZWRfdm14X3RyaXBsZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01MjQxLVx0a3ZtX2NsZWFyX3JlcXVlc3QoS1ZNX1JFUV9UUklQTEVfRkFVTFQsIHZjcHUpO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1MjQyOlx0bmVzdGVkX3ZteF92bWV4aXQodmNwdSwgRVhJVF9SRUFTT05fVFJJUExFX0ZBVUxULCAwLCAwKTtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTI0My19XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz02MjAwPXN0YXRpYyBpbnQgaGFuZGxlX3ZtZnVuYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02MjQ0LVx0ICovXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjYyNDU6XHRuZXN0ZWRfdm14X3ZtZXhpdCh2Y3B1LCB2bXgtXHUwMDNldnQuZXhpdF9yZWFzb24uZnVsbCxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjI0Ni1cdFx0XHQgIHZteF9nZXRfaW50cl9pbmZvKHZjcHUpLFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NjcwOT1ib29sIG5lc3RlZF92bXhfcmVmbGVjdF92bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjc1Ni1yZWZsZWN0X3ZtZXhpdDpcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Njc1NzpcdG5lc3RlZF92bXhfdm1leGl0KHZjcHUsIGV4aXRfcmVhc29uLmZ1bGwsIGV4aXRfaW50cl9pbmZvLCBleGl0X3F1YWwpO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02NzU4LVx0cmV0dXJuIHRydWU7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz02ODg0PXZvaWQgdm14X2xlYXZlX25lc3RlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02ODg3LVx0XHR2Y3B1LVx1MDAzZWFyY2gubmVzdGVkX3J1bl9wZW5kaW5nID0gMDtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Njg4ODpcdFx0bmVzdGVkX3ZteF92bWV4aXQodmNwdSwgLTEsIDAsIDApO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02ODg5LVx0fVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmg9Mjk9Ym9vbCBuZXN0ZWRfdm14X3JlZmxlY3Rfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oOjMwOnZvaWQgX19uZXN0ZWRfdm14X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2bV9leGl0X3JlYXNvbixcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmgtMzEtXHRcdFx0IHUzMiBleGl0X2ludHJfaW5mbywgdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24sXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaC0zMy1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmg6MzQ6c3RhdGljIGlubGluZSB2b2lkIG5lc3RlZF92bXhfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZtX2V4aXRfcmVhc29uLFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaC0zNS1cdFx0XHRcdCAgICAgdTMyIGV4aXRfaW50cl9pbmZvLFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmgtNDUtXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oOjQ2Olx0X19uZXN0ZWRfdm14X3ZtZXhpdCh2Y3B1LCB2bV9leGl0X3JlYXNvbiwgZXhpdF9pbnRyX2luZm8sXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oLTQ3LVx0XHRcdCAgICBleGl0X3F1YWxpZmljYXRpb24sIGV4aXRfaW5zbl9sZW4pO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9NjcwOD1zdGF0aWMgaW50IF9fdm14X2hhbmRsZV9leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZmFzdHBhdGhfdCBleGl0X2Zhc3RwYXRoKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjc3MC1cdFx0aWYgKHZteC1cdTAwM2V2dC5lbXVsYXRpb25fcmVxdWlyZWQpIHtcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6Njc3MTpcdFx0XHRuZXN0ZWRfdm14X3ZtZXhpdCh2Y3B1LCBFWElUX1JFQVNPTl9UUklQTEVfRkFVTFQsIDAsIDApO1xuYXJjaC94ODYva3ZtL3ZteC92bXguYy02NzcyLVx0XHRcdHJldHVybiAxO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9ODE5MD1pbnQgdm14X2NoZWNrX2ludGVyY2VwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYy04MjgwLVxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo4MjgxOlx0X19uZXN0ZWRfdm14X3ZtZXhpdCh2Y3B1LCB2bV9leGl0X3JlYXNvbiwgMCwgZXhpdF9xdWFsaWZpY2F0aW9uLFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy04MjgyLVx0XHRcdCAgICBleGl0X2luc25fbGVuKTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTg0ODI9aW50IHZteF9lbnRlcl9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODQ5NC1cdGlmICh2bXgtXHUwMDNlbmVzdGVkLnNtbS5ndWVzdF9tb2RlKVxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo4NDk1Olx0XHRuZXN0ZWRfdm14X3ZtZXhpdCh2Y3B1LCAtMSwgMCwgMCk7XG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTg0OTYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzA4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNTczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBLVk0gVnVsbmVyYWJpbGl0eSBQYXRjaCoqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSBzZWVpbmcuIFRoaXMgcGF0Y2ggaXMgbWFraW5nIGEgdGFyZ2V0ZWQgY2hhbmdlIHdpdGhpbiB0aGUgS1ZNIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gYGFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNgLiAgSXQmIzM5O3MgYSBzdWJ0bGUgYnV0IHBvdGVudGlhbGx5IGltcG9ydGFudCBtb2RpZmljYXRpb24gdG8gdGhlIGBfX25lc3RlZF92bXhfdm1leGl0YCBmdW5jdGlvbi4gVGhlIG9yaWdpbmFsIGNvZGUgdW5jb25kaXRpb25hbGx5IGNhbGxlZCBgbmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyKHZjcHUsIHZtY3MxMilgIGFmdGVyIGNlcnRhaW4gY2hlY2tzIHJlbGF0ZWQgdG8gdGhlIGB2bV9leGl0X3JlYXNvbmAuICBUaGUgcGF0Y2ggY29uZGl0aW9uYWxpemVzIHRoaXMgY2FsbCwgbm93IG9ubHkgZXhlY3V0aW5nIGBuZXN0ZWRfZmx1c2hfY2FjaGVkX3NoYWRvd192bWNzMTJgIGlmIGB2bV9leGl0X3JlYXNvbmAgaXNuJiMzOTt0IC0xLiBUaGUgaW50ZXJlc3RpbmcgdGhpbmcgaXMgdGhhdCAgYHZteF9sZWF2ZV9uZXN0ZWQodmNwdSlgIGFuZCBgdm14X2VudGVyX3NtbSh2Y3B1LCBzbXJhbSlgIGJvdGggbGVhZCB0byBhIGNhbGwgdG8gYG5lc3RlZF92bXhfdm1leGl0YCB3aXRoIGB2bV9leGl0X3JlYXNvbmAgc2V0IHRvIC0xLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCB0aGlzIGNoYW5nZSAqY291bGQqIGJlIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBpc3N1ZSBpbiBob3cgdGhlIHNoYWRvdyBWTUNTMTIgaXMgaGFuZGxlZCBkdXJpbmcgdGhlc2Ugc3BlY2lmaWMgZXhpdHMuICBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIGNvbmRpdGlvbmFsIG5vdyBtYWtlcyBtZSB3b25kZXIgYWJvdXQgc29tZSBjb3JuZXIgY2FzZSBvciByYWNlIGNvbmRpdGlvbi4gIEl0JiMzOTtzIHZlcnkgbGlrZWx5IGV4ZWN1dGFibGUsIGFzIGl0IHRvdWNoZXMgdGhlIGNvcmUgb2YgS1ZNJiMzOTtzIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBpbXBsZW1lbnRhdGlvbiwgc29tZXRoaW5nIGFjdGl2ZWx5IHVzZWQgaW4gcHJvZHVjdGlvbiBlbnZpcm9ubWVudHMuICBTcGVjaWZpY2FsbHksIGl0IGRlYWxzIHdpdGggYHZteF9sZWF2ZV9uZXN0ZWRgIGFuZCBgdm14X2VudGVyX3NtbWAsIHR3byB2ZXJ5IGludGVyZXN0aW5nIGFyZWFzLgoKR2l2ZW4gbXkgZmllbGQsIFN5emthbGxlciYjMzk7cyBmdXp6aW5nIGZvY3VzIG9uIHRoaXMgYXJlYSBpcyBwYXJ0aWN1bGFybHkgcmVsZXZhbnQuICBJdCBleHRlbnNpdmVseSB0ZXN0cyBLVk0mIzM5O3MgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGZlYXR1cmVzLCBpbmNsdWRpbmcgYEtWTV9SVU5gLCBzdGF0ZSBtYW5hZ2VtZW50LCBhbmQgdGhlIGV4ZWN1dGlvbiBvZiBWTVggaW5zdHJ1Y3Rpb25zIGxpa2UgVk1MQVVOQ0gsIFZNUkVTVU1FLCBWTVdSSVRFIGFuZCBWTVJFQUQuIFRoZSBzcGVjaWZpZWQgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgKGBLVk1gIGFuZCBgS1ZNX0lOVEVMYCkgYXJlIGFsc28gbWV0LiBUaGUgbGlzdGVkIGZ1bmN0aW9ucywgbmFtZWx5IGBfX25lc3RlZF92bXhfdm1leGl0YCwgYG5lc3RlZF9mbHVzaF9jYWNoZWRfc2hhZG93X3ZtY3MxMmAsIGB2bXhfbGVhdmVfbmVzdGVkYCwgYW5kIGB2bXhfZW50ZXJfc21tYCwgbWFrZSBmb3IgZ3JlYXQgZm9jdXNlZCBmdXp6IHRhcmdldHMuIE5vdywgbGV0IG1lIGNoZWNrIGlmIGBuZXN0ZWRfZmx1c2hfY2FjaGVkX3NoYWRvd192bWNzMTJgIGlzIHN0YXRpYyBvciBub24tc3RhdGljIHdpdGhpbiBgYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY2AuIFRoYXQgd2lsbCBoZWxwIGRldGVybWluZSBob3cgcmVhY2hhYmxlIHRoaXMgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25lc3RlZF9mbHVzaF9jYWNoZWRfc2hhZG93X3ZtY3MxMiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTg1MT1zdGF0aWMgdm9pZCBuZXN0ZWRfY2FjaGVfc2hhZG93X3ZtY3MxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy04NjktXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjg3MDpzdGF0aWMgdm9pZCBuZXN0ZWRfZmx1c2hfY2FjaGVkX3NoYWRvd192bWNzMTIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy04NzEtXHRcdFx0XHRcdCAgICAgIHN0cnVjdCB2bWNzMTIgKnZtY3MxMilcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTUwNzM9dm9pZCBfX25lc3RlZF92bXhfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZtX2V4aXRfcmVhc29uLFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTE0My1cdFx0XHQgKi9cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTE0NDpcdFx0XHRuZXN0ZWRfZmx1c2hfY2FjaGVkX3NoYWRvd192bWNzMTIodmNwdSwgdm1jczEyKTtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTE0NS1cdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc0OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgSSBhbmFseXplIHRoaXM6CgoqKkFuYWx5emluZyBLVk0tSW50ZWwgTmVzdGluZyBhbmQgRXhpdCBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHNvbWUgS1ZNLUludGVsIGNvZGUgYW5kIEkmIzM5O3ZlIGdvdCBhIGZldyBrZXkgZnVuY3Rpb25zIGluIG1pbmQuIGBfX25lc3RlZF92bXhfdm1leGl0YCBpcyB0aGUgYmlnIG9uZSwgaXQmIzM5O3MgZ2xvYmFsLCBzbyBpdCYjMzk7cyBhIGNyaXRpY2FsIGVudHJ5IHBvaW50IGZvciBuZXN0ZWQgdmlydHVhbGl6YXRpb24gVk0gZXhpdHMgd2l0aGluIHRoZSBrdm0taW50ZWwgbW9kdWxlLiBUaGF0IG1lYW5zIGl0IGlzIHRoZSBmdW5jdGlvbiB0aGF0IHRoZSBuZXN0ZWQgVk0gdXNlcyB0byByZXR1cm4gY29udHJvbCB0byB0aGUgaG9zdC4KCk5vdywgSSYjMzk7bSB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGFyb3VuZCBpdC4gSSBzZWUgdGhhdCBgdm14X2xlYXZlX25lc3RlZGAgaXMgYW5vdGhlciBmdW5jdGlvbiB0aGF0IGlzbiYjMzk7dCBzdGF0aWMuIFRoYXQgdGVsbHMgbWUgaXQmIzM5O3MgbGlrZWx5IGNhbGxlZCBmcm9tIG91dHNpZGUgdGhlIGZpbGUgb3IgcG9zc2libHkgZXZlbiBhIGRpZmZlcmVudCBtb2R1bGUuIEl0JiMzOTtzIHJlbGF0ZWQgdG8gdGVhcmRvd24sIHJlc2V0cywgb3Igc29tZSBJT0NUTCBoYW5kbGluZyBvZiB0aGUgdkNQVS4gVGhhdCBzdWdnZXN0cyBpdCBtaWdodCBiZSBpbnZvbHZlZCBpbiBjbGVhbmluZyB1cCBhZnRlciBhIG5lc3RlZCBWTS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlbiB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGFuZCB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgYXJlLgoKVGhlbiB0aGVyZSYjMzk7cyBgdm14X2VudGVyX3NtbWAsIHdoaWNoIGlzIGFsc28gbm9uLXN0YXRpYy4gVGhlIG5hbWUgc3VnZ2VzdHMgdGhpcyBtaWdodCBiZSByZWxhdGVkIHRvIFN5c3RlbSBNYW5hZ2VtZW50IE1vZGUgKFNNTSkuIEkgd29uZGVyIGhvdyB0aGlzIHJlbGF0ZXMgdG8gbmVzdGVkIHZpcnR1YWxpemF0aW9uLCBhbmQgaWYgaXQmIzM5O3MgcG90ZW50aWFsbHkgaW50ZXJhY3Rpbmcgd2l0aCBgdm14X2xlYXZlX25lc3RlZGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGFuZCBob3cgdGhhdCBpcyBjYWxsZWQgYXMgd2VsbC4KCk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgd2FudCB0byB0cmFjZSB0aGUgY2FsbHMgdG8gYHZteF9sZWF2ZV9uZXN0ZWRgLiBLbm93aW5nICp3aG8qIGNhbGxzIGl0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGl0cyByb2xlIGluIHRoZSBiaWdnZXIgcGljdHVyZSBvZiBuZXN0ZWQgdmlydHVhbGl6YXRpb24gYW5kIHRoZSB2Q1BVIGxpZmVjeWNsZS4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGUgY29kZSBpcyBzdHJ1Y3R1cmVkIGFyb3VuZCB0aGlzIGZ1bmN0aW9uIHRvIHNlZSB3aGVyZSBpdCBzaXRzIGluIHRoZSBsYXJnZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm14X2xlYXZlX25lc3RlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTM4Nj12b2lkIG5lc3RlZF92bXhfZnJlZV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM4OC1cdHZjcHVfbG9hZCh2Y3B1KTtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Mzg5Olx0dm14X2xlYXZlX25lc3RlZCh2Y3B1KTtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzkwLVx0dmNwdV9wdXQodmNwdSk7XG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz02NzYxPXN0YXRpYyBpbnQgdm14X2dldF9uZXN0ZWRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjg4My1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Njg4NDp2b2lkIHZteF9sZWF2ZV9uZXN0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02ODg1LXtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTY5MTU9c3RhdGljIGludCB2bXhfc2V0X25lc3RlZF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02OTg0LVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo2OTg1Olx0dm14X2xlYXZlX25lc3RlZCh2Y3B1KTtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjk4Ni1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTc1MDE9c3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyB2bXhfbmVzdGVkX29wcyBfX2luaXRkYXRhID0ge1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo3NTAyOlx0LmxlYXZlX25lc3RlZCA9IHZteF9sZWF2ZV9uZXN0ZWQsXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTc1MDMtXHQudHJhbnNsYXRlX25lc3RlZF9ncGEgPSB2bXhfdHJhbnNsYXRlX25lc3RlZF9ncGEsXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaD0xMz1lbnVtIG52bXhfdm1lbnRyeV9zdGF0dXMge1xuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmgtMTktXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oOjIwOnZvaWQgdm14X2xlYXZlX25lc3RlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaC0yMS12b2lkIG5lc3RlZF92bXhfc2V0dXBfY3Rsc19tc3JzKHN0cnVjdCB2bWNzX2NvbmZpZyAqdm1jc19jb25mLCB1MzIgZXB0X2NhcHMpO1xuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM9MjMzNT1pbnQgdm14X3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgbXNyX2RhdGEgKm1zcl9pbmZvKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtMjUwMC1cdFx0aWYgKG1zcl9pbmZvLVx1MDAzZWhvc3RfaW5pdGlhdGVkIFx1MDAyNlx1MDAyNiBkYXRhID09IDApXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjI1MDE6XHRcdFx0dm14X2xlYXZlX25lc3RlZCh2Y3B1KTtcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtMjUwMi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwNTkKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBuZXN0ZWRfZmx1c2hfY2FjaGVkX3NoYWRvd192bWNzMTJgKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBkaXNzZWN0IHRoZSBgbmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyYCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGV4YWN0IGZ1bmN0aW9uLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBhbmQgdGhlIGludHJpY2FjaWVzIG9mIHNoYWRvdyBWTUNTLCBJIGNhbiBhbnRpY2lwYXRlIHdoYXQgaXQmIzM5O3MgbGlrZWx5IHJlc3BvbnNpYmxlIGZvcjogcHJvYmFibHkgZGVhbGluZyB3aXRoIGNhY2hlIGNvaGVyZW5jeSBpc3N1ZXMgcmVsYXRlZCB0byB0aGUgVk1DUzEyLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgbmVzdGVkIHZpcnR1YWwgbWFjaGluZSBwZXJmb3JtYW5jZSBhbmQgY29ycmVjdG5lc3MuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBleHBlY3RpbmcgaXQgd2lsbCBoYW5kbGUgdGhlIHByb2Nlc3MgdG8gaW52YWxpZGF0ZSBvciBzeW5jaHJvbml6ZSBzdGFsZSBWTUNTMTIgZGF0YSB3aGVuIHNvbWUgb3RoZXIgaHlwZXJ2aXNvciBjb21wb25lbnQgaGFzIGNoYW5nZWQgc29tZXRoaW5nIG9yIHBlcmhhcHMgd2hlbiBhIGd1ZXN0IGNoYW5nZXMgYSBWTUNTIGZpZWxkIHJlbGF0ZWQgdG8gdGhlIG5lc3RlZCBoeXBlcnZpc29yLiBUaGlzIGlzIGEgdmVyeSBjcml0aWNhbCBmdW5jdGlvbiBmb3IgZ3VhcmFudGVlaW5nIGNvcnJlY3QgYmVoYXZpb3IgaW4gYSBjb21wbGV4IG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBzeXN0ZW0uIEkmIzM5O2xsIGJlIGxvb2tpbmcgY2xvc2VseSBhdCBob3cgaXQgaGFuZGxlcyB0aGUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgYW5kIHdoYXQgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzIGl0JiMzOTtzIHRvdWNoaW5nLiBJJiMzOTttIGtlZW4gdG8gc3BvdCBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgbHVya2luZyBpbiB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NjA6XHRcbiA4NjE6XHRcdGlmIChnaGMtXHUwMDNlZ3BhICE9IHZtY3MxMi1cdTAwM2V2bWNzX2xpbmtfcG9pbnRlciBcdTAwMjZcdTAwMjZcbiA4NjI6XHRcdCAgICBrdm1fZ2ZuX3RvX2h2YV9jYWNoZV9pbml0KHZjcHUtXHUwMDNla3ZtLCBnaGMsXG4gODYzOlx0XHRcdFx0XHQgICAgICB2bWNzMTItXHUwMDNldm1jc19saW5rX3BvaW50ZXIsIFZNQ1MxMl9TSVpFKSlcbiA4NjQ6XHRcdFx0cmV0dXJuO1xuIDg2NTpcdFxuIDg2NjpcdFx0a3ZtX3JlYWRfZ3Vlc3RfY2FjaGVkKHZjcHUtXHUwMDNla3ZtLCBnaGMsIGdldF9zaGFkb3dfdm1jczEyKHZjcHUpLFxuIDg2NzpcdFx0XHRcdCAgICAgIFZNQ1MxMl9TSVpFKTtcbiA4Njg6XHR9XG4gODY5Olx0XG4gODcwOlx0c3RhdGljIHZvaWQgbmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiA4NzE6XHRcdFx0XHRcdFx0ICAgICAgc3RydWN0IHZtY3MxMiAqdm1jczEyKVxuIDg3MjpcdHtcbiA4NzM6XHRcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xuIDg3NDpcdFx0c3RydWN0IGdmbl90b19odmFfY2FjaGUgKmdoYyA9IFx1MDAyNnZteC1cdTAwM2VuZXN0ZWQuc2hhZG93X3ZtY3MxMl9jYWNoZTtcbiA4NzU6XHRcbiA4NzY6XHRcdGlmICghbmVzdGVkX2NwdV9oYXNfc2hhZG93X3ZtY3Modm1jczEyKSB8fFxuIDg3NzpcdFx0ICAgIHZtY3MxMi1cdTAwM2V2bWNzX2xpbmtfcG9pbnRlciA9PSBJTlZBTElEX0dQQSlcbiA4Nzg6XHRcdFx0cmV0dXJuO1xuIDg3OTpcdFxuIDg4MDpcdFx0aWYgKGdoYy1cdTAwM2VncGEgIT0gdm1jczEyLVx1MDAzZXZtY3NfbGlua19wb2ludGVyIFx1MDAyNlx1MDAyNlxuIDg4MTpcdFx0ICAgIGt2bV9nZm5fdG9faHZhX2NhY2hlX2luaXQodmNwdS1cdTAwM2Vrdm0sIGdoYyxcbiA4ODI6XHRcdFx0XHRcdCAgICAgIHZtY3MxMi1cdTAwM2V2bWNzX2xpbmtfcG9pbnRlciwgVk1DUzEyX1NJWkUpKVxuIDg4MzpcdFx0XHRyZXR1cm47XG4gODg0Olx0XG4gODg1Olx0XHRrdm1fd3JpdGVfZ3Vlc3RfY2FjaGVkKHZjcHUtXHUwMDNla3ZtLCBnaGMsIGdldF9zaGFkb3dfdm1jczEyKHZjcHUpLFxuIDg4NjpcdFx0XHRcdCAgICAgICBWTUNTMTJfU0laRSk7XG4gODg3Olx0fVxuIDg4ODpcdFxuIDg4OTpcdC8qXG4gODkwOlx0ICogSW4gbmVzdGVkIHZpcnR1YWxpemF0aW9uLCBjaGVjayBpZiBMMSBoYXMgc2V0XG4gODkxOlx0ICogVk1fRVhJVF9BQ0tfSU5UUl9PTl9FWElUXG4gODkyOlx0ICovXG4gODkzOlx0c3RhdGljIGJvb2wgbmVzdGVkX2V4aXRfaW50cl9hY2tfc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiA4OTQ6XHR7XG4gODk1Olx0XHRyZXR1cm4gZ2V0X3ZtY3MxMih2Y3B1KS1cdTAwM2V2bV9leGl0X2NvbnRyb2xzIFx1MDAyNlxuIDg5NjpcdFx0XHRWTV9FWElUX0FDS19JTlRSX09OX0VYSVQ7XG4gODk3Olx0fVxuIDg5ODpcdFxuIDg5OTpcdHN0YXRpYyBpbnQgbmVzdGVkX3ZteF9jaGVja19hcGljX2FjY2Vzc19jb250cm9scyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDkyCgkJCQkJCQlvdXRwdXQ6IDE5NwoJCQkJCQkJdGhvdWdodHM6IDQwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgS1ZNIE5lc3RlZCBWTVggUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB0aGUgaW5pdGlhbCBleGFtaW5hdGlvbiwgaXQmIzM5O3MgY2xlYXIgdGhlIHByaW1hcnkgZnVuY3Rpb24gb2YgaW50ZXJlc3QgaXMgYF9fbmVzdGVkX3ZteF92bWV4aXRgLiBJJiMzOTt2ZSBhbHNvIGlkZW50aWZpZWQgc2V2ZXJhbCBvdGhlciByZWxhdGVkIHN5bWJvbHMgdGhhdCBhcmUgbGlrZWx5IGltcGFjdGVkIGJ5IHRoaXMgY2hhbmdlOiBgbmVzdGVkX3ZteF9mcmVlX3ZjcHVgLCBgdm14X2xlYXZlX25lc3RlZGAsIGB2bXhfZW50ZXJfc21tYCwgYW5kIGBuZXN0ZWRfdm14X3JlZmxlY3Rfdm1leGl0YC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUga2V5IHBsYXllcnMgaW4gdGhpcyBuZXN0ZWQgVk1YIGNvbnRleHQuCgpOZXh0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWluIHRoaXMgaW52b2x2ZXMgYENPTkZJR19LVk1gIGFuZCBgQ09ORklHX0tWTV9JTlRFTGAuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgS2J1aWxkIGZpbGVzIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcy4gQWgsIHllcywgaW4gYGFyY2gveDg2L2t2bS9NYWtlZmlsZWAsIHRoZSBpbmNsdXNpb24gb2YgYGt2bS1pbnRlbC5vYCBhbmQgaXRzIG5lc3RlZCBjb21wb25lbnQgYHZteC9uZXN0ZWQub2AgYXJlIGdvdmVybmVkIGJ5IGBDT05GSUdfS1ZNX0lOVEVMYCwgd2hpY2ggaXRzZWxmIGRlcGVuZHMgb24gb3Igc2VsZWN0cyBgS1ZNYC4gU28sIHRoZSBwcmVyZXF1aXNpdGUgY29uZmlndXJhdGlvbnMgYXJlIGRlZmluaXRlbHkgYEtWTWAgYW5kIGBLVk1fSU5URUxgLCBhcyBJIHN1c3BlY3RlZC4KCk5vdywgbGV0JiMzOTtzIHN1bW1hcml6ZSB0aGUgZnV6emluZyBzdHJhdGVneS4gVGhlIGNoYW5nZSB0byBgX19uZXN0ZWRfdm14X3ZtZXhpdCgpYCBhcHBlYXJzIHRvIHNraXAgZmx1c2hpbmcgdGhlIHNoYWRvdyBWTUNTMTIgdW5kZXIgc3BlY2lmaWMgY29uZGl0aW9uczogd2hlbiBgdm1fZXhpdF9yZWFzb24gPT0gLTFgLiBUaGlzIHBhcnRpY3VsYXJseSBoYXBwZW5zIGR1cmluZyB2Q1BVIHRlYXJkb3duIG9yIHdoZW4gZW50ZXJpbmcgU01NIChTeXN0ZW0gTWFuYWdlbWVudCBNb2RlKS4gVGhlIGNvcmUgY29uY2VybiBpcyB0byBhdm9pZCBtZW1vcnkgY29ycnVwdGlvbiwgcGFydGljdWxhcmx5IHdoZW4gYGN1cnJlbnQtJmd0O21tYCBpcyBOVUxMLiBUaGlzIHBvaW50cyB0byBhIHZ1bG5lcmFiaWxpdHkgd2l0aGluIGNvcmUgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGxvZ2ljIG9uIHg4Ni9hbWQ2NC4gU28sIGl0IGRlZmluaXRlbHkgd2FycmFudHMgZnV6emluZy4KCk15IGNvbmNsdXNpb246IGdpdmVuIHRoZSBwYXRjaCYjMzk7cyBmb2N1cyBvbiBhIGNyaXRpY2FsIGFyZWEgb2YgbmVzdGVkIFZNWCwgd2l0aCBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gd2hlbiBzcGVjaWZpYyBjb25kaXRpb25zIChsaWtlIHZDUFUgdGVhcmRvd24pIG9jY3VyLCBmdXp6aW5nIGlzIGFuIGVmZmVjdGl2ZSBzdHJhdGVneS4gSXQmIzM5O3MgYSBoaWdoLWltcGFjdCBhcmVhIGFuZCB3b3J0aCBmb2N1c2luZyBvbi4gTGV0JiMzOTtzIHNldCB0aGUgcmVzdWx0cyBhbmQgbW92ZSBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9JTlRFTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fbmVzdGVkX3ZteF92bWV4aXQmIzM0OywKICAgICYjMzQ7dm14X2xlYXZlX25lc3RlZCYjMzQ7LAogICAgJiMzNDt2bXhfZW50ZXJfc21tJiMzNDssCiAgICAmIzM0O25lc3RlZF92bXhfcmVmbGVjdF92bWV4aXQmIzM0OywKICAgICYjMzQ7bmVzdGVkX3ZteF9mcmVlX3ZjcHUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgX19uZXN0ZWRfdm14X3ZtZXhpdCgpIGluIEtWTSBuZXN0ZWQgVk1YIHN1cHBvcnQgKGFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMpIHRvIHByZXZlbnQgZmx1c2hpbmcgY2FjaGVkIHNoYWRvdyBWTUNTMTIgd2hlbiBwZXJmb3JtaW5nIGEgZm9yY2VkIG5lc3RlZCBWTS1leGl0ICh2bV9leGl0X3JlYXNvbiA9PSAtMSwgZS5nLiBkdXJpbmcgdkNQVSB0ZWFyZG93biBvciBTTU0gZW50cnkpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMgaW4gY29yZSBLVk0gdmlydHVhbGl6YXRpb24gYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSBvbiBhbWQ2NCwgd2FycmFudGluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0lOVEVMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19uZXN0ZWRfdm14X3ZtZXhpdCYjMzQ7LAogICAgJiMzNDt2bXhfbGVhdmVfbmVzdGVkJiMzNDssCiAgICAmIzM0O3ZteF9lbnRlcl9zbW0mIzM0OywKICAgICYjMzQ7bmVzdGVkX3ZteF9yZWZsZWN0X3ZtZXhpdCYjMzQ7LAogICAgJiMzNDtuZXN0ZWRfdm14X2ZyZWVfdmNwdSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBfX25lc3RlZF92bXhfdm1leGl0KCkgaW4gS1ZNIG5lc3RlZCBWTVggc3VwcG9ydCAoYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYykgdG8gcHJldmVudCBmbHVzaGluZyBjYWNoZWQgc2hhZG93IFZNQ1MxMiB3aGVuIHBlcmZvcm1pbmcgYSBmb3JjZWQgbmVzdGVkIFZNLWV4aXQgKHZtX2V4aXRfcmVhc29uID09IC0xLCBlLmcuIGR1cmluZyB2Q1BVIHRlYXJkb3duIG9yIFNNTSBlbnRyeSkuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocyBpbiBjb3JlIEtWTSB2aXJ0dWFsaXphdGlvbiBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIG9uIGFtZDY0LCB3YXJyYW50aW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjEwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6MTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBuZXN0ZWQgVk1YIFZNLWV4aXQgaGFuZGxpbmcgaW4gS1ZNIChgX19uZXN0ZWRfdm14X3ZtZXhpdGApIHRvIHNraXAgY2FsbGluZyBgbmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyKClgIHdoZW4gYHZtX2V4aXRfcmVhc29uID09IC0xYCAoZS5nLiwgZHVyaW5nIHZDUFUgdGVhcmRvd24gb3IgU01NIGVudHJ5KS4gVGhpcyBwcmV2ZW50cyBpbGxlZ2FsIGd1ZXN0IG1lbW9yeSB3cml0ZXMgb24gYm9ycm93ZWQgbGF6eSBUTEIgbW0gY29udGV4dHMgZHVyaW5nIHRlYXJkb3duLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgYnVmZmVycywgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciBsZWFrIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gU3RhbmRhcmQgS0FTQU4gYW5kIGdlbmVyYWwga2VybmVsIGRlYnVnZ2luZyB0b29scyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGMyNGMzOTg2ZDRkNTVkMDBlODA3MTY0OTNiYmMxMDlkM2FhYjZjMTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDE2OjA5OjQxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMKaW5kZXggMTUxODczNDA3YWJkMy4uMzNkYzhhMDcwMTlmOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jCkBAIC01MTIxLDIxICYjNDM7NTEyMSwyOCBAQCB2b2lkIF9fbmVzdGVkX3ZteF92bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdm1fZXhpdF9yZWFzb24sCiAJaWYgKGxpa2VseSghdm14LSZndDtmYWlsKSkgewogCQlzeW5jX3ZtY3MwMl90b192bWNzMTIodmNwdSwgdm1jczEyKTsKIAotCQlpZiAodm1fZXhpdF9yZWFzb24gIT0gLTEpCiYjNDM7CQlpZiAodm1fZXhpdF9yZWFzb24gIT0gLTEpIHsKIAkJCXByZXBhcmVfdm1jczEyKHZjcHUsIHZtY3MxMiwgdm1fZXhpdF9yZWFzb24sCiAJCQkJICAgICAgIGV4aXRfaW50cl9pbmZvLCBleGl0X3F1YWxpZmljYXRpb24sCiAJCQkJICAgICAgIGV4aXRfaW5zbl9sZW4pOwogCi0JCS8qCi0JCSAqIE11c3QgaGFwcGVuIG91dHNpZGUgb2Ygc3luY192bWNzMDJfdG9fdm1jczEyKCkgYXMgaXQgd2lsbAotCQkgKiBhbHNvIGJlIHVzZWQgdG8gY2FwdHVyZSB2bWNzMTIgY2FjaGUgYXMgcGFydCBvZgotCQkgKiBjYXB0dXJpbmcgblZNWCBzdGF0ZSBmb3Igc25hcHNob3QgKG1pZ3JhdGlvbikuCi0JCSAqCi0JCSAqIE90aGVyd2lzZSwgdGhpcyBmbHVzaCB3aWxsIGRpcnR5IGd1ZXN0IG1lbW9yeSBhdCBhCi0JCSAqIHBvaW50IGl0IGlzIGFscmVhZHkgYXNzdW1lZCBieSB1c2VyLXNwYWNlIHRvIGJlCi0JCSAqIGltbXV0YWJsZS4KLQkJICovCi0JCW5lc3RlZF9mbHVzaF9jYWNoZWRfc2hhZG93X3ZtY3MxMih2Y3B1LCB2bWNzMTIpOwomIzQzOwkJCS8qCiYjNDM7CQkJICogTXVzdCBoYXBwZW4gb3V0c2lkZSBvZiBzeW5jX3ZtY3MwMl90b192bWNzMTIoKSBhcyBpdCB3aWxsCiYjNDM7CQkJICogYWxzbyBiZSB1c2VkIHRvIGNhcHR1cmUgdm1jczEyIGNhY2hlIGFzIHBhcnQgb2YKJiM0MzsJCQkgKiBjYXB0dXJpbmcgblZNWCBzdGF0ZSBmb3Igc25hcHNob3QgKG1pZ3JhdGlvbikuCiYjNDM7CQkJICoKJiM0MzsJCQkgKiBPdGhlcndpc2UsIHRoaXMgZmx1c2ggd2lsbCBkaXJ0eSBndWVzdCBtZW1vcnkgYXQgYQomIzQzOwkJCSAqIHBvaW50IGl0IGlzIGFscmVhZHkgYXNzdW1lZCBieSB1c2VyLXNwYWNlIHRvIGJlCiYjNDM7CQkJICogaW1tdXRhYmxlLgomIzQzOwkJCSAqCiYjNDM7CQkJICogRG8gbm90IGZsdXNoIHdoZW4gdm1fZXhpdF9yZWFzb24gPT0gLTEgKGUuZy4gZm9yY2VkIGV4aXQKJiM0MzsJCQkgKiBvbiB2Q1BVIHRlYXJkb3duIG9yIFNNTSBlbnRyeSkuIE9uIHRlYXJkb3duLCBLVk0gbWF5IHJ1bgomIzQzOwkJCSAqIHdpdGggY3VycmVudC0mZ3Q7bW0gPT0gTlVMTCBvbiBhIGJvcnJvd2VkIGxhenkgVExCIG1tLAomIzQzOwkJCSAqIHdoZXJlIHdyaXRpbmcgZ3Vlc3QgbWVtb3J5IHdvdWxkIGNvcnJ1cHQgYW4gdW5yZWxhdGVkCiYjNDM7CQkJICogdGFzay4gTm90aGluZyBjYW4gb2JzZXJ2ZSB0aGUgZmx1c2ggaW4gdGhhdCBjYXNlIGFueXdheS4KJiM0MzsJCQkgKi8KJiM0MzsJCQluZXN0ZWRfZmx1c2hfY2FjaGVkX3NoYWRvd192bWNzMTIodmNwdSwgdm1jczEyKTsKJiM0MzsJCX0KIAl9IGVsc2UgewogCQkvKgogCQkgKiBUaGUgb25seSBleHBlY3RlZCBWTS1pbnN0cnVjdGlvbiBlcnJvciBpcyAmIzM0O1ZNIGVudHJ5IHdpdGgKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MzAKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA3MTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTmVzdGVkIFZNWCBPcHRpbWl6YXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBGcm9tIHRoZSBkaWZmLCBJIGNhbiBzZWUgYSBjaGFuZ2Ugd2l0aGluIHRoZSBgX19uZXN0ZWRfdm14X3ZtZXhpdGAgZnVuY3Rpb24gaW4gYG5lc3RlZC5jYC4gVGhlIGNvcmUgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBoYW5kbGluZyB0aGUgVk1DUzEyIGNhY2hlIGZsdXNoIGFmdGVyIHN5bmNocm9uaXppbmcgYHZtY3MwMmAgdG8gYHZtY3MxMmAuIEkga25vdyB0aGF0IHRoaXMgaXMgaW1wb3J0YW50IGluIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBmb3IgdGhpbmdzIGxpa2Ugc25hcHNob3R0aW5nIGFuZCBtaWdyYXRpb24sIHdoZXJlIHdlIG5lZWQgdG8gZW5zdXJlIGd1ZXN0IG1lbW9yeSBpcyBjb25zaXN0ZW50LgoKSW5pdGlhbGx5LCB0aGUgZmx1c2ggaGFwcGVuZWQgdW5jb25kaXRpb25hbGx5IGFmdGVyIHRoZSBzeW5jLiBOb3cgSSYjMzk7bSBzZWVpbmcgYSBjb25kaXRpb25hbCBjaGVjayBoZXJlLiBUaGUgY3JpdGljYWwgcGFydCBpcyB0aGlzIGBpZiAodm1fZXhpdF9yZWFzb24gIT0gLTEpYCBjb25kaXRpb24uIEl0IGFwcGVhcnMgd2UmIzM5O3JlIG9wdGltaXppbmcgYnkgKm9ubHkqIGZsdXNoaW5nIHRoZSBjYWNoZSBpZiB0aGUgYHZtX2V4aXRfcmVhc29uYCBpc24mIzM5O3QgZXF1YWwgdG8gLTEuIFRoYXQgc3VnZ2VzdHMgd2UgZG9uJiMzOTt0IG5lZWQgdG8gZmx1c2ggaW4gY2VydGFpbiBWTSBleGl0IHNjZW5hcmlvcy4gVGhlIGNvbW1lbnQgY2xhcmlmaWVzIHRoaXM6IGEgVk0gZXhpdCByZWFzb24gb2YgLTEgc2lnbmlmaWVzIHZDUFUgdGVhcmRvd24gb3IgU01NIGVudHJ5LCBhbmQgaW4gdGhlc2UgY2FzZXMsIGZsdXNoaW5nIGlzbiYjMzk7dCBuZWNlc3NhcnkgYW5kIGNvdWxkIGV2ZW4gbGVhZCB0byBpc3N1ZXMgcmVsYXRlZCB0byBtZW1vcnkgY29ycnVwdGlvbi4gSW50ZXJlc3RpbmcgdG8gc2VlIHRoaXMgb3B0aW1pemF0aW9uIGJlaW5nIG1hZGUuCgpJdCBzZWVtcyBsaWtlIHdlJiMzOTtyZSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIGJ1ZyBvciBwZXJmb3JtYW5jZSBpbmVmZmljaWVuY3kuIFRoZSBuZXcgY29kZSBwcmV2ZW50cyBhIHBvdGVudGlhbGx5IHVubmVjZXNzYXJ5IHdyaXRlIHRvIGd1ZXN0IG1lbW9yeSB3aGVuIHRoZSBWTSBpcyBiZWluZyB0b3JuIGRvd24uIFRoaXMgbWFrZXMgc2Vuc2U7IGR1cmluZyB0ZWFyZG93biBvciBTTU0gZW50cnksIHRoZSBjdXJyZW50IHByb2Nlc3MgbWlnaHQgbm90IGhhdmUgYSB2YWxpZCBtZW1vcnkgbWFwcGluZywgYW5kIGF0dGVtcHRpbmcgYSBmbHVzaCBjb3VsZCBsZWFkIHRvIGJhZCB0aGluZ3MuIFRoZSBhZGRlZCBjaGVjayBzZWVtcyBsaWtlIGEgZ29vZCBzYWZldHkgbWVhc3VyZSBhbmQgcG90ZW50aWFsbHkgYSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudC4gSSYjMzk7bGwgbmVlZCB0byBrZWVwIHRoaXMgaW4gbWluZCB3aGVuIEkgZXhhbWluZSBwb3RlbnRpYWwgaXNzdWVzLCBwYXJ0aWN1bGFybHkgd2l0aCBtaWdyYXRpb24gYW5kIHN0YXRlIHNhdmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTEwNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MTA1Olx0XHQgKiB1cC10by1kYXRlIGJlZm9yZSBzd2l0Y2hpbmcgdG8gTDEuXG41MTA2Olx0XHQgKi9cbjUxMDc6XHRcdGlmIChlbmFibGVfZXB0IFx1MDAyNlx1MDAyNiBpc19wYWVfcGFnaW5nKHZjcHUpKVxuNTEwODpcdFx0XHR2bXhfZXB0X2xvYWRfcGRwdHJzKHZjcHUpO1xuNTEwOTpcdFxuNTExMDpcdFx0bGVhdmVfZ3Vlc3RfbW9kZSh2Y3B1KTtcbjUxMTE6XHRcbjUxMTI6XHRcdGlmIChuZXN0ZWRfY3B1X2hhc19wcmVlbXB0aW9uX3RpbWVyKHZtY3MxMikpXG41MTEzOlx0XHRcdGhydGltZXJfY2FuY2VsKFx1MDAyNnRvX3ZteCh2Y3B1KS1cdTAwM2VuZXN0ZWQucHJlZW1wdGlvbl90aW1lcik7XG41MTE0Olx0XG41MTE1Olx0XHRpZiAobmVzdGVkX2NwdV9oYXModm1jczEyLCBDUFVfQkFTRURfVVNFX1RTQ19PRkZTRVRUSU5HKSkge1xuNTExNjpcdFx0XHR2Y3B1LVx1MDAzZWFyY2gudHNjX29mZnNldCA9IHZjcHUtXHUwMDNlYXJjaC5sMV90c2Nfb2Zmc2V0O1xuNTExNzpcdFx0XHRpZiAobmVzdGVkX2NwdV9oYXMyKHZtY3MxMiwgU0VDT05EQVJZX0VYRUNfVFNDX1NDQUxJTkcpKVxuNTExODpcdFx0XHRcdHZjcHUtXHUwMDNlYXJjaC50c2Nfc2NhbGluZ19yYXRpbyA9IHZjcHUtXHUwMDNlYXJjaC5sMV90c2Nfc2NhbGluZ19yYXRpbztcbjUxMTk6XHRcdH1cbjUxMjA6XHRcbjUxMjE6XHRcdGlmIChsaWtlbHkoIXZteC1cdTAwM2VmYWlsKSkge1xuNTEyMjpcdFx0XHRzeW5jX3ZtY3MwMl90b192bWNzMTIodmNwdSwgdm1jczEyKTtcbjUxMjM6XHRcbjUxMjQ6XHRcdFx0aWYgKHZtX2V4aXRfcmVhc29uICE9IC0xKSB7XG41MTI1Olx0XHRcdFx0cHJlcGFyZV92bWNzMTIodmNwdSwgdm1jczEyLCB2bV9leGl0X3JlYXNvbixcbjUxMjY6XHRcdFx0XHRcdCAgICAgICBleGl0X2ludHJfaW5mbywgZXhpdF9xdWFsaWZpY2F0aW9uLFxuNTEyNzpcdFx0XHRcdFx0ICAgICAgIGV4aXRfaW5zbl9sZW4pO1xuNTEyODpcdFxuNTEyOTpcdFx0XHRcdC8qXG41MTMwOlx0XHRcdFx0ICogTXVzdCBoYXBwZW4gb3V0c2lkZSBvZiBzeW5jX3ZtY3MwMl90b192bWNzMTIoKSBhcyBpdCB3aWxsXG41MTMxOlx0XHRcdFx0ICogYWxzbyBiZSB1c2VkIHRvIGNhcHR1cmUgdm1jczEyIGNhY2hlIGFzIHBhcnQgb2ZcbjUxMzI6XHRcdFx0XHQgKiBjYXB0dXJpbmcgblZNWCBzdGF0ZSBmb3Igc25hcHNob3QgKG1pZ3JhdGlvbikuXG41MTMzOlx0XHRcdFx0ICpcbjUxMzQ6XHRcdFx0XHQgKiBPdGhlcndpc2UsIHRoaXMgZmx1c2ggd2lsbCBkaXJ0eSBndWVzdCBtZW1vcnkgYXQgYVxuNTEzNTpcdFx0XHRcdCAqIHBvaW50IGl0IGlzIGFscmVhZHkgYXNzdW1lZCBieSB1c2VyLXNwYWNlIHRvIGJlXG41MTM2Olx0XHRcdFx0ICogaW1tdXRhYmxlLlxuNTEzNzpcdFx0XHRcdCAqXG41MTM4Olx0XHRcdFx0ICogRG8gbm90IGZsdXNoIHdoZW4gdm1fZXhpdF9yZWFzb24gPT0gLTEgKGUuZy4gZm9yY2VkIGV4aXRcbjUxMzk6XHRcdFx0XHQgKiBvbiB2Q1BVIHRlYXJkb3duIG9yIFNNTSBlbnRyeSkuIE9uIHRlYXJkb3duLCBLVk0gbWF5IHJ1blxuNTE0MDpcdFx0XHRcdCAqIHdpdGggY3VycmVudC1cdTAwM2VtbSA9PSBOVUxMIG9uIGEgYm9ycm93ZWQgbGF6eSBUTEIgbW0sXG41MTQxOlx0XHRcdFx0ICogd2hlcmUgd3JpdGluZyBndWVzdCBtZW1vcnkgd291bGQgY29ycnVwdCBhbiB1bnJlbGF0ZWRcbjUxNDI6XHRcdFx0XHQgKiB0YXNrLiBOb3RoaW5nIGNhbiBvYnNlcnZlIHRoZSBmbHVzaCBpbiB0aGF0IGNhc2UgYW55d2F5LlxuNTE0MzpcdFx0XHRcdCAqL1xuNTE0NDpcdFx0XHRcdG5lc3RlZF9mbHVzaF9jYWNoZWRfc2hhZG93X3ZtY3MxMih2Y3B1LCB2bWNzMTIpO1xuNTE0NTpcdFx0XHR9XG41MTQ2Olx0XHR9IGVsc2Uge1xuNTE0NzpcdFx0XHQvKlxuNTE0ODpcdFx0XHQgKiBUaGUgb25seSBleHBlY3RlZCBWTS1pbnN0cnVjdGlvbiBlcnJvciBpcyBcJiMzNDtWTSBlbnRyeSB3aXRoXG41MTQ5Olx0XHRcdCAqIGludmFsaWQgY29udHJvbCBmaWVsZChzKS5cJiMzNDsgQW55dGhpbmcgZWxzZSBpbmRpY2F0ZXMgYVxuNTE1MDpcdFx0XHQgKiBwcm9ibGVtIHdpdGggTDAuXG41MTUxOlx0XHRcdCAqL1xuNTE1MjpcdFx0XHRXQVJOX09OX09OQ0Uodm1jc19yZWFkMzIoVk1fSU5TVFJVQ1RJT05fRVJST1IpICE9XG41MTUzOlx0XHRcdFx0ICAgICBWTVhFUlJfRU5UUllfSU5WQUxJRF9DT05UUk9MX0ZJRUxEKTtcbjUxNTQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDUxNQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHdoYXQgSSYjMzk7bSBsb29raW5nIGF0LCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqSW52ZXN0aWdhdGluZyBgbmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyYCBhbmQgdGhlIFNpZ25pZmljYW5jZSBvZiBgLTFgIFZNIEV4aXQgUmVhc29uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gYG5lc3RlZF9mbHVzaF9jYWNoZWRfc2hhZG93X3ZtY3MxMmAgYW5kIGltbWVkaWF0ZWx5IHdhbnQgdG8gdW5kZXJzdGFuZCBpdHMgZnVuY3Rpb24uIEdpdmVuIG15IGJhY2tncm91bmQgaW4gdmlydHVhbGl6YXRpb24sIG15IHByaW1hcnkgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZmxvdyBvZiBleGVjdXRpb24gYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgaW4gd2hpY2ggdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuIEkmIzM5O20gZXNwZWNpYWxseSBrZWVuIG9uIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgc2hhZG93IFZNQ1MgKFZpcnR1YWwgTWFjaGluZSBDb250cm9sIFN0cnVjdHVyZSksIGEgY3JpdGljYWwgYXJlYSBpbiBuZXN0ZWQgdmlydHVhbGl6YXRpb24sIEkgbmVlZCB0byBsb29rIGNsb3NlciB0byBzaGFkb3cgVk1DIGZvciB0aGUgcHVycG9zZSBvZiB2aXJ0dWFsaXppbmcgbmVzdGVkIFZNWCwgd2l0aCB0aGUgc3BlY2lmaWMgZW1waGFzaXMgb24gYHZtY3MxMmAgd2hpY2ggaXMgdXNlZCBmb3IgbmVzdGVkIHZpcnR1YWxpemF0aW9uLgoKVGhlIGtleSB0cmlnZ2VyIGZvciBteSBpbnZlc3RpZ2F0aW9uIGlzIHRoZSBgLTFgIHZhbHVlIGJlaW5nIHBhc3NlZCBhcyB0aGUgYHZtX2V4aXRfcmVhc29uYC4gVGhpcyBpbW1lZGlhdGVseSBzY3JlYW1zICYjMzQ7ZXJyb3IgY29uZGl0aW9uJiMzNDsgb3IgJiMzNDt1bmluaXRpYWxpemVkIHZhbHVlJiMzNDsgaW4gdGhpcyBkb21haW4uIEEgc3RhbmRhcmQgVk0gZXhpdCByZWFzb24gaXMgKm5ldmVyKiBuZWdhdGl2ZSwgYW5kIEkgYmV0IGl0JiMzOTtzIHNvbWV0aGluZyBzcGVjaWFsLCBub3QganVzdCBhIHJhbmRvbSB1bmRlZmluZWQgYml0IHBhdHRlcm4sIEkmIzM5O20gdGhpbmtpbmcgaXRzIHJlbGF0ZWQgdG8gYSBmYWlsdXJlIG9yIHVuZXhwZWN0ZWQgc3RhdGUgaW4gdGhlIFZNIGV4aXQgaGFuZGxpbmcgcHJvY2Vzcy4gSXQgaW1wbGllcyBhIHByb2JsZW0sIGxpa2VseSBhdCBhIHZlcnkgbG93IGxldmVsIGluIHRoZSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gc3RhY2suIFRoaXMgYHZtX2V4aXRfcmVhc29uYCBzaG91bGQgcHJvdmlkZSBjcml0aWNhbCBjbHVlcy4gSSYjMzk7bSBnb2luZyB0byBmb2xsb3cgdGhlc2UgY2x1ZXMsIEkga25vdyBpdHMgcmVsYXRlZCB0byB0aGUgVk0gZXhpdCByZWFzb24uCgpUaGVyZWZvcmUsIG15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgKndoeSogY2FsbGVycyBhcmUgcGFzc2luZyBgLTFgLiBJIG5lZWQgdG8gdHJhY2sgZG93biBhbGwgcmVmZXJlbmNlcyB0byB0aGlzIGZ1bmN0aW9uIGFuZCBtZXRpY3Vsb3VzbHkgZXhhbWluZSB0aGUgY29kZSB0aGF0JiMzOTtzIHN1cHBseWluZyB0aGlzIHZhbHVlLCBzbyBJIGNhbiBzZWUgd2hhdCBjb25kaXRpb25zIGxlYWQgdG8gdGhhdCBzdGF0ZS4gVGhpcyBpcyBsaWtlbHkgYSBrZXkgaW5kaWNhdG9yIG9mIGEgYnVnLCBvciBhbiB1bnVzdWFsIGVkZ2UgY2FzZSB0aGF0IG5lZWRzIHZlcnkgY2FyZWZ1bCBjb25zaWRlcmF0aW9uLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBjb2RlIHNlYXJjaCBhbmQgZ28gZnJvbSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9ODUxPXN0YXRpYyB2b2lkIG5lc3RlZF9jYWNoZV9zaGFkb3dfdm1jczEyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTg2OS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6ODcwOnN0YXRpYyB2b2lkIG5lc3RlZF9mbHVzaF9jYWNoZWRfc2hhZG93X3ZtY3MxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTg3MS1cdFx0XHRcdFx0ICAgICAgc3RydWN0IHZtY3MxMiAqdm1jczEyKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NTA3Mz12b2lkIF9fbmVzdGVkX3ZteF92bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdm1fZXhpdF9yZWFzb24sXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01MTQzLVx0XHRcdCAqL1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1MTQ0Olx0XHRcdG5lc3RlZF9mbHVzaF9jYWNoZWRfc2hhZG93X3ZtY3MxMih2Y3B1LCB2bWNzMTIpO1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01MTQ1LVx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNzUKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgbmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBuZXN0ZWRfZmx1c2hfY2FjaGVkX3NoYWRvd192bWNzMTJgLiBNeSBwcmltYXJ5IGludGVyZXN0IGhlcmUgaXMgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgaW50cmljYWNpZXMgb2YgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciBjYWNoaW5nIGFuZCBzaGFkb3cgVk1DUzEyIHN0cnVjdHVyZXMuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHVuZGVyc3RhbmQ6CgoqICAgKipUaGUgY29udGV4dDoqKiBXaGVyZSBkb2VzIHRoaXMgZnVuY3Rpb24gZml0IGludG8gdGhlIGJyb2FkZXIgaHlwZXJ2aXNvciBvcGVyYXRpb24sIGFuZCB3aGF0IHRyaWdnZXJzIGl0cyBleGVjdXRpb24/IElzIHRoaXMgcGFydCBvZiBhIFZNIGV4aXQgcGF0aCwgYW4gaW50ZXJydXB0IGhhbmRsZXIsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PwoqICAgKipTaGFkb3cgVk1DUzEyIG1hbmlwdWxhdGlvbjoqKiBJIGV4cGVjdCB0aGlzIGZ1bmN0aW9uIHRvIGFkZHJlc3MgcG90ZW50aWFsIGluY29uc2lzdGVuY2llcyBiZXR3ZWVuIHRoZSBwaHlzaWNhbCBWTUNTMTIgYW5kIHRoZSBzaGFkb3dlZCB2ZXJzaW9uIHVzZWQgYnkgdGhlIG5lc3RlZCBWTS4gQXJlIHRoZXJlIHNwZWNpZmljIHNjZW5hcmlvcyB3aGVyZSB0aGUgY2FjaGUgbmVlZHMgdG8gYmUgZmx1c2hlZCBvciB1cGRhdGVkLCBhbmQgd2hhdCBhcmUgdGhvc2UgdHJpZ2dlcnM/CiogICAqKlBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zOioqIENhY2hpbmcgaXMgdXN1YWxseSBkb25lIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLiBVbmRlcnN0YW5kaW5nIHRoZSB0cmFkZS1vZmZzIGJldHdlZW4gY2FjaGUgY29oZXJlbmNlIGFuZCB0aGUgb3ZlcmhlYWQgb2YgZmx1c2hpbmcgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBwZXJmb3JtYW5jZSBwcm9maWxlLiBXaGF0IGFyZSB0aGUgaGV1cmlzdGljcyBvciBwb2xpY2llcyBlbXBsb3llZCBmb3IgbWFraW5nIGZsdXNoaW5nIGRlY2lzaW9ucz8KKiAgICoqU2VjdXJpdHkgaW1wbGljYXRpb25zOioqIFNoYWRvd2luZyBjYW4gYmUgdXNlZCB0byBwcm90ZWN0IHRoZSBndWVzdCBPUyBmcm9tIGFjY2Vzc2luZyB0aGUgaHlwZXJ2aXNvciYjMzk7cyBzZW5zaXRpdmUgaW5mb3JtYXRpb24uIEFyZSB0aGVyZSBhbnkgc2VjdXJpdHktc2Vuc2l0aXZlIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGFuZCBob3cgYXJlIHRoZXkgYmVpbmcgcHJvdGVjdGVkIHRocm91Z2ggdGhpcyBvcGVyYXRpb24/CiogICAqKkhhcmR3YXJlIGFzc3VtcHRpb25zOioqIEFyZSB0aGVyZSBhbnkgaW1wbGljaXQgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgKGUuZy4sIHNwZWNpZmljIENQVSBmZWF0dXJlcywgY2FjaGUgY29oZXJlbmN5IG1lY2hhbmlzbXMpIHRoYXQgYXJlIHJlbGV2YW50IHRvIHRoaXMgZnVuY3Rpb24mIzM5O3MgbG9naWM/IEkgbmVlZCB0byBiZSBhd2FyZSBvZiBhbnkgaGFyZHdhcmUgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgYWZmZWN0IGl0cyBwb3J0YWJpbGl0eSBvciByb2J1c3RuZXNzLgoKRXNzZW50aWFsbHksIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gYmUgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlIGluIGVuc3VyaW5nIGNvcnJlY3QgYW5kIGVmZmljaWVudCBuZXN0ZWQgdmlydHVhbGl6YXRpb24uIEkmIzM5O20gaG9waW5nIHRvIHVuZGVyc3RhbmQgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBob3N0LCBndWVzdCwgYW5kIG5lc3RlZCB2aXJ0dWFsIG1hY2hpbmVzIGFzIHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgVk1DUzEyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg2MDpcdFxuIDg2MTpcdFx0aWYgKGdoYy1cdTAwM2VncGEgIT0gdm1jczEyLVx1MDAzZXZtY3NfbGlua19wb2ludGVyIFx1MDAyNlx1MDAyNlxuIDg2MjpcdFx0ICAgIGt2bV9nZm5fdG9faHZhX2NhY2hlX2luaXQodmNwdS1cdTAwM2Vrdm0sIGdoYyxcbiA4NjM6XHRcdFx0XHRcdCAgICAgIHZtY3MxMi1cdTAwM2V2bWNzX2xpbmtfcG9pbnRlciwgVk1DUzEyX1NJWkUpKVxuIDg2NDpcdFx0XHRyZXR1cm47XG4gODY1Olx0XG4gODY2Olx0XHRrdm1fcmVhZF9ndWVzdF9jYWNoZWQodmNwdS1cdTAwM2Vrdm0sIGdoYywgZ2V0X3NoYWRvd192bWNzMTIodmNwdSksXG4gODY3Olx0XHRcdFx0ICAgICAgVk1DUzEyX1NJWkUpO1xuIDg2ODpcdH1cbiA4Njk6XHRcbiA4NzA6XHRzdGF0aWMgdm9pZCBuZXN0ZWRfZmx1c2hfY2FjaGVkX3NoYWRvd192bWNzMTIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIDg3MTpcdFx0XHRcdFx0XHQgICAgICBzdHJ1Y3Qgdm1jczEyICp2bWNzMTIpXG4gODcyOlx0e1xuIDg3MzpcdFx0c3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7XG4gODc0Olx0XHRzdHJ1Y3QgZ2ZuX3RvX2h2YV9jYWNoZSAqZ2hjID0gXHUwMDI2dm14LVx1MDAzZW5lc3RlZC5zaGFkb3dfdm1jczEyX2NhY2hlO1xuIDg3NTpcdFxuIDg3NjpcdFx0aWYgKCFuZXN0ZWRfY3B1X2hhc19zaGFkb3dfdm1jcyh2bWNzMTIpIHx8XG4gODc3Olx0XHQgICAgdm1jczEyLVx1MDAzZXZtY3NfbGlua19wb2ludGVyID09IElOVkFMSURfR1BBKVxuIDg3ODpcdFx0XHRyZXR1cm47XG4gODc5Olx0XG4gODgwOlx0XHRpZiAoZ2hjLVx1MDAzZWdwYSAhPSB2bWNzMTItXHUwMDNldm1jc19saW5rX3BvaW50ZXIgXHUwMDI2XHUwMDI2XG4gODgxOlx0XHQgICAga3ZtX2dmbl90b19odmFfY2FjaGVfaW5pdCh2Y3B1LVx1MDAzZWt2bSwgZ2hjLFxuIDg4MjpcdFx0XHRcdFx0ICAgICAgdm1jczEyLVx1MDAzZXZtY3NfbGlua19wb2ludGVyLCBWTUNTMTJfU0laRSkpXG4gODgzOlx0XHRcdHJldHVybjtcbiA4ODQ6XHRcbiA4ODU6XHRcdGt2bV93cml0ZV9ndWVzdF9jYWNoZWQodmNwdS1cdTAwM2Vrdm0sIGdoYywgZ2V0X3NoYWRvd192bWNzMTIodmNwdSksXG4gODg2Olx0XHRcdFx0ICAgICAgIFZNQ1MxMl9TSVpFKTtcbiA4ODc6XHR9XG4gODg4Olx0XG4gODg5Olx0LypcbiA4OTA6XHQgKiBJbiBuZXN0ZWQgdmlydHVhbGl6YXRpb24sIGNoZWNrIGlmIEwxIGhhcyBzZXRcbiA4OTE6XHQgKiBWTV9FWElUX0FDS19JTlRSX09OX0VYSVRcbiA4OTI6XHQgKi9cbiA4OTM6XHRzdGF0aWMgYm9vbCBuZXN0ZWRfZXhpdF9pbnRyX2Fja19zZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIDg5NDpcdHtcbiA4OTU6XHRcdHJldHVybiBnZXRfdm1jczEyKHZjcHUpLVx1MDAzZXZtX2V4aXRfY29udHJvbHMgXHUwMDI2XG4gODk2Olx0XHRcdFZNX0VYSVRfQUNLX0lOVFJfT05fRVhJVDtcbiA4OTc6XHR9XG4gODk4Olx0XG4gODk5Olx0c3RhdGljIGludCBuZXN0ZWRfdm14X2NoZWNrX2FwaWNfYWNjZXNzX2NvbnRyb2xzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ3NAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbGx5IFVuaGFuZGxlZCBWTS1FeGl0IENvbmRpdGlvbnMqKgoKQWxyaWdodCwgSSYjMzk7bSBkaWdnaW5nIGludG8gc29tZSBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBWTS1leGl0cywgc3BlY2lmaWNhbGx5IHRob3NlIHdoZXJlIHRoZSBgdm1fZXhpdF9yZWFzb25gIGNvZGUgaXMgaW5kaWNhdGluZyBzb21ldGhpbmcgbGlrZSBgLTFgLCBvciBhbnl0aGluZyB0aGF0IGZsYWdzIGFzIGEgZ2VuZXJhbCwgdW5oYW5kbGVkIGNhc2UuIE15IGN1cnJlbnQgc3RyYXRlZ3kgaXMgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGxvY2F0aW9ucyBpbiB0aGUgY29kZSB0aGF0IGFyZSBpbnZva2luZyBgX19uZXN0ZWRfdm14X3ZtZXhpdGAgd2l0aCB0aGVzZSB1bmRlc2lyYWJsZSBleGl0IHJlYXNvbiB2YWx1ZXMuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mICp3aHkqIHdlJiMzOTtyZSBzZWVpbmcgdGhlc2UgJiMzNDtjYXRjaC1hbGwmIzM0OyBleGl0cy4gQXJlIHRoZXNlIGdlbnVpbmVseSB1bmhhbmRsZWQgY2FzZXMsIG9yIGFyZSB0aGVyZSBzdWJ0bGUgZXJyb3IgY29uZGl0aW9ucyBvciBlZGdlIGNhc2VzIHRoYXQgd2UgaGF2ZW4mIzM5O3QgYWNjb3VudGVkIGZvcj8gQXJlIHdlIG1pc3NpbmcgYSBzcGVjaWZpYyBgdm1fZXhpdF9oYW5kbGVyYCBvciBmYWlsaW5nIHRvIGNvcnJlY3RseSBpbnRlcnByZXQgY2VydGFpbiBmbGFncz8gSSBuZWVkIHRvIGFuYWx5emUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgY29udGV4dCB0byB1bmRlcnN0YW5kIHRoZSBzeXN0ZW0mIzM5O3Mgc3RhdGUgd2hlbiB0aGVzZSBleGl0cyBvY2N1ci4gV2hhdCByZWdpc3RlcnMgYXJlIHNldD8gV2hhdCBndWVzdCBpbnN0cnVjdGlvbnMgYXJlIHdlIGV4ZWN1dGluZz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSB1bmRlZmluZWQgZXhpdHMgb24gc3lzdGVtIHN0YWJpbGl0eSBhbmQgc2VjdXJpdHk/IFVsdGltYXRlbHksIEkgd2FudCB0byBpZGVudGlmeSBhbnkgZmxhd3MgaW4gb3VyIFZNTSYjMzk7cyBleGl0IGhhbmRsaW5nLCB3aXRoIHRoZSBnb2FsIG9mIG1pdGlnYXRpbmcgYW55IHBvdGVudGlhbCBleHBsb2l0cyBvciB1bmV4cGVjdGVkIGJlaGF2aW9ycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19uZXN0ZWRfdm14X3ZtZXhpdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTQ5NjA9c3RhdGljIHZvaWQgbmVzdGVkX3ZteF9yZXN0b3JlX2hvc3Rfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTA3Mi0gKi9cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTA3Mzp2b2lkIF9fbmVzdGVkX3ZteF92bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdm1fZXhpdF9yZWFzb24sXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTUwNzQtXHRcdFx0IHUzMiBleGl0X2ludHJfaW5mbywgdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24sXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaD0yOT1ib29sIG5lc3RlZF92bXhfcmVmbGVjdF92bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmg6MzA6dm9pZCBfX25lc3RlZF92bXhfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZtX2V4aXRfcmVhc29uLFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaC0zMS1cdFx0XHQgdTMyIGV4aXRfaW50cl9pbmZvLCB1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbixcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oPTM0PXN0YXRpYyBpbmxpbmUgdm9pZCBuZXN0ZWRfdm14X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2bV9leGl0X3JlYXNvbixcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oLTQ1LVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaDo0NjpcdF9fbmVzdGVkX3ZteF92bWV4aXQodmNwdSwgdm1fZXhpdF9yZWFzb24sIGV4aXRfaW50cl9pbmZvLFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaC00Ny1cdFx0XHQgICAgZXhpdF9xdWFsaWZpY2F0aW9uLCBleGl0X2luc25fbGVuKTtcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTgxOTA9aW50IHZteF9jaGVja19pbnRlcmNlcHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODI4MC1cbmFyY2gveDg2L2t2bS92bXgvdm14LmM6ODI4MTpcdF9fbmVzdGVkX3ZteF92bWV4aXQodmNwdSwgdm1fZXhpdF9yZWFzb24sIDAsIGV4aXRfcXVhbGlmaWNhdGlvbixcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODI4Mi1cdFx0XHQgICAgZXhpdF9pbnNuX2xlbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczODQKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgRG93biAtMSBpbiBOZXN0ZWQgVk1YIFZNLUV4aXQgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgLTFgIHZhbHVlIGJlaW5nIHBhc3NlZCB0byBlaXRoZXIgYG5lc3RlZF92bXhfdm1leGl0YCBvciwgbW9yZSBnZW5lcmFsbHksIGBfX25lc3RlZF92bXhfdm1leGl0YC4gVGhlIGNvbnRleHQgaXMsIEkgc3VzcGVjdCwgcmVsYXRlZCB0byBzb21lIGtpbmQgb2YgVk0tZXhpdCBkdXJpbmcgbmVzdGVkIHZpcnR1YWxpemF0aW9uLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHVzZSBteSB0b29scyB0byBsb2NhdGUgdGhlc2Ugc3BlY2lmaWMgZnVuY3Rpb24gY2FsbHMuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGVpdGhlciBhIGRlYnVnZ2VyLCBvciBwZXJoYXBzIGEgZ3JlcCBjb21iaW5lZCB3aXRoIHNvbWUgc291cmNlIGNvZGUgbmF2aWdhdGlvbiwgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGNhbGwgc2l0ZXMgZm9yIHRob3NlIGZ1bmN0aW9ucywgZm9jdXNpbmcgb24gaG93IHRoaXMgYC0xYCBpcyBwcm9wYWdhdGVkLgoKVGhlIGNvcmUgcXVlc3Rpb24gaXMsIHdoZXJlIGRvZXMgdGhpcyB2YWx1ZSBvcmlnaW5hdGU/IEl0JiMzOTtzIHVubGlrZWx5IHRvIGJlIGEgYmVuaWduIHJldHVybiBjb2RlLiBJdCBsaWtlbHkgc2lnbmlmaWVzIGFuIGVycm9yLCBhIGZhaWx1cmUgdG8gaGFuZGxlIHRoZSBndWVzdCYjMzk7cyBpbnN0cnVjdGlvbiBhdCB0aGUgbmVzdGVkIGxldmVsLCBvciBtYXliZSBhbiBpc3N1ZSBkdXJpbmcgdGhlIHByb2Nlc3Mgb2YgcmV0dXJuaW5nIGNvbnRyb2wgdG8gdGhlIGhvc3QuIElzIHRoaXMgY29taW5nIGZyb20gdGhlIG5lc3RlZCBWTU0gaXRzZWxmPyBJcyBpdCBhbiBpbmRpY2F0aW9uIHRoYXQgdGhlIG5lc3RlZCBndWVzdCB0cmllZCB0byBkbyBzb21ldGhpbmcgaXQgc2hvdWxkbiYjMzk7dCBoYXZlPwoKSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHNvdXJjZXMgb2YgdGhlc2UgYC0xYCB2YWx1ZXMgYW5kIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gQXJlIHdlIHNlZWluZyB0aGlzIGFjcm9zcyBhIHdpZGUgcmFuZ2Ugb2YgaW5zdHJ1Y3Rpb25zL29wZXJhdGlvbnMgd2l0aGluIHRoZSBuZXN0ZWQgVk0sIG9yIGlzIGl0IGlzb2xhdGVkIHRvIHNwZWNpZmljIGluc3RydWN0aW9uIGNsYXNzZXMgb3Igc3lzdGVtIGV2ZW50cz8gTXkgc3VzcGljaW9uIGlzIGEgcG90ZW50aWFsIG1pc2NvbmZpZ3VyYXRpb24gb3IgYSByYWNlIGNvbmRpdGlvbiB3aXRoaW4gdGhlIG5lc3RlZCBWTU0sIG9yIG1heWJlIGV2ZW4gYSBidWcgaW4gdGhlIFZNLWV4aXQgaGFuZGxpbmcuIEZ1cnRoZXIgaW5zcGVjdGlvbiBvZiByZWdpc3RlciBzdGF0ZXMgYW5kIGNvbnRyb2wgc3RydWN0dXJlcyBhcm91bmQgdGhlIHRpbWUgb2YgdGhlIFZNLWV4aXQgd2lsbCBiZSBuZWNlc3NhcnkgdG8gaWRlbnRpZnkgdGhlIHJvb3QgY2F1c2UuIFRoaXMgYC0xYCBpcyBhIGJyaWdodCByZWQgZmxhZywgYW5kIEkgbmVlZCB0byByZXNvbHZlIHRoaXMgYXMgcXVpY2tseSBhcyBwb3NzaWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmVzdGVkX3ZteF92bWV4aXQuKi0xJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9Njg4ND12b2lkIHZteF9sZWF2ZV9uZXN0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjg4Ny1cdFx0dmNwdS1cdTAwM2VhcmNoLm5lc3RlZF9ydW5fcGVuZGluZyA9IDA7XG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjY4ODg6XHRcdG5lc3RlZF92bXhfdm1leGl0KHZjcHUsIC0xLCAwLCAwKTtcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjg4OS1cdH1cbi0tXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTg0ODI9aW50IHZteF9lbnRlcl9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKVxuLS1cbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODQ5NC1cdGlmICh2bXgtXHUwMDNlbmVzdGVkLnNtbS5ndWVzdF9tb2RlKVxuYXJjaC94ODYva3ZtL3ZteC92bXguYzo4NDk1Olx0XHRuZXN0ZWRfdm14X3ZtZXhpdCh2Y3B1LCAtMSwgMCwgMCk7XG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTg0OTYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE2OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxMTcKCQkJCQkJCW91dHB1dDogMTY4CgkJCQkJCQl0aG91Z2h0czogNjAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBOZXN0ZWQgVmlydHVhbGl6YXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUganVzdCByZXZpZXdlZCB0aGlzIHBhdGNoIGFuZCwgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZywgaXQgYWRkcmVzc2VzIGEgc3BlY2lmaWMgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWUgd2l0aGluIEtWTSYjMzk7cyBuZXN0ZWQgdmlydHVhbGl6YXRpb24gaW1wbGVtZW50YXRpb24uIFRoZSBjb3JlIHByb2JsZW0gaXMgdGhhdCBgbmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyKHZjcHUsIHZtY3MxMik7YCB3YXMgYmVpbmcgZXhlY3V0ZWQgZXZlbiB3aGVuIGEgVk0gZXhpdCB3YXMgZm9yY2VkIChpbmRpY2F0ZWQgYnkgYHZtX2V4aXRfcmVhc29uID09IC0xYCksIHN1Y2ggYXMgZHVyaW5nIHZDUFUgdGVhcmRvd24gb3Igd2hlbiBlbnRlcmluZyBTTU0uIER1cmluZyB0ZWFyZG93biwgS1ZNIHNvbWV0aW1lcyBvcGVyYXRlcyB3aXRoIGEgbGF6eSBUTEIgbW0gd2hlcmUgYGN1cnJlbnQtJmd0O21tYCBpcyBgTlVMTGAsIGFuZCBjYWxsaW5nIGBrdm1fd3JpdGVfZ3Vlc3RfY2FjaGVkYCBpbiB0aGF0IGNvbnRleHQgbGVhZHMgdG8gd3JpdGVzIHRvIG1lbW9yeSB0aGF0IGlzbiYjMzk7dCB2YWxpZCBmb3IgdGhlIGN1cnJlbnQgY29udGV4dC4gVGhpcyBpcyB3aGF0JiMzOTtzIGNhdXNpbmcgdGhlIHByb2JsZW0sIHdoaWNoIGhhcyB0aGUgcG90ZW50aWFsIHRvIGNvcnJ1cHQgc29tZSB1bnJlbGF0ZWQgdGFzayYjMzk7cyBtZW1vcnkuCgpUaGUgcGF0Y2gmIzM5O3Mgc29sdXRpb24gaXMgc3RyYWlnaHRmb3J3YXJkOiBpdCBtb3ZlcyB0aGUgY2FsbCB0byBgbmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyKHZjcHUsIHZtY3MxMik7YCBpbnNpZGUgdGhlIGV4aXN0aW5nIGBpZiAodm1fZXhpdF9yZWFzb24gIT0gLTEpYCBibG9jay4gVGhpcyB3YXksIHRoZSBmdW5jdGlvbiBpcyAqb25seSogY2FsbGVkIHdoZW4gdGhlcmUmIzM5O3MgYSB2YWxpZCBWTSBleGl0IHJlYXNvbiwgYXZvaWRpbmcgdGhlIHByb2JsZW1hdGljIGV4ZWN1dGlvbiBwYXRoIGR1cmluZyB0ZWFyZG93biBvciBTTU0gZW50cnkuCgpOb3csIG15IGV2YWx1YXRpb24gZm9jdXNlcyBvbiB3aGV0aGVyIHRoaXMgY2hhbmdlIHdhcnJhbnRzIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgYW5hbHlzaXMuIExldCYjMzk7cyBicmVhayBkb3duIG15IHJlYXNvbmluZzoKCkkmIzM5O3ZlIGV4YW1pbmVkIHRoZSBjb2RlIGZvcjoKCjEuICAqKkludGVyYWN0aW9uIHdpdGggdXNlcnNwYWNlOioqIEkgbG9va2VkIGZvciBhbnkgbW9kaWZpY2F0aW9ucyB0byBrZXJuZWwgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlcnNwYWNlIHZpYSBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluaywgaW9jdGwsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycy4gVGhlcmUgYXJlIG5vbmUuIFRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIG9yIGFsdGVyIGFueSBvZiB0aGVzZSBpbnRlcmFjdGlvbnMuCjIuICAqKlVuaW5pdGlhbGl6ZWQgdmFyaWFibGUvZmllbGQgdXNlOioqIEkgY2FyZWZ1bGx5IGNoZWNrZWQgZm9yIGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IG1pZ2h0IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzLCBhcyB3ZWxsIGFzIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXIuIEkgZm91bmQgbm8gZXZpZGVuY2Ugb2YgYW55LgozLiAgKipNZW1vcnkgYWNjZXNzIHBhdHRlcm5zOioqIEkgYW5hbHl6ZWQgdGhlIHBhdGNoIGZvciBhbnkgY2hhbmdlcyB0byBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0IGNvdWxkIGxlYWQgdG8gYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgaW4gZXhpc3RpbmcgYnVmZmVycy4gTm90aGluZyBoZXJlLgoKVGhlIGtleSBwb2ludCBoZXJlIGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBzb2xlbHkgZm9jdXNlZCBvbiAqcHJldmVudGluZyogYSBzcGVjaWZpYyB3cml0ZSBvcGVyYXRpb24gdW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzLiBJdCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgbmV3IHN0cnVjdHVyZXMsIG9yIGludGVyYWN0aW9ucyB3aXRoIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgbWVjaGFuaXNtcyB0aGF0IHdvdWxkIGJlIG9mIGNvbmNlcm4gZm9yIEtNU0FOLiBJdCYjMzk7cyBzdHJpY3RseSBhYm91dCBhIGNvbnRyb2wgZmxvdyBtb2RpZmljYXRpb24uCgpLTVNBTiBpcyBkZXNpZ25lZCB0byBkZXRlY3QgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIG9mIGtlcm5lbCBtZW1vcnkgdG8gdXNlcnNwYWNlLiBJbiB0aGlzIGNhc2UsIHRoZSBmaXggYWRkcmVzc2VzIGEgd3JpdGUgaXNzdWUsIG5vdCBhIHJlYWQgaXNzdWUuIEtNU0FOIHdvdWxkbiYjMzk7dCBiZSBwYXJ0aWN1bGFybHkgaGVscGZ1bCBoZXJlLiBSZWd1bGFyIEtBU0FOIGFuZCBzdGFuZGFyZCBkZWJ1Z2dpbmcga2VybmVscyBzaG91bGQgYmUgc3VmZmljaWVudC4gSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGlzIGNoYW5nZSBkb2VzICpub3QqIG5lZWQgS01TQU4sIGFuZCBzbyB0aGUgYE5lZWRzS01TQU5gIGZsYWcgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLgoKU28sIGZyb20gbXkgcGVyc3BlY3RpdmUsIHRoZSBwYXRjaCBzYWZlbHkgcHJldmVudHMgYSBndWVzdCBtZW1vcnkgd3JpdGUgd2hlbiBpdCBpcyBydW5uaW5nIHdpdGhvdXQgYSB2YWxpZCBNTSwgYW5kIGRvZXMgbm90IHJlcXVpcmUgYW55IHNwZWNpYWwgYW5hbHlzaXMgYmV5b25kIHN0YW5kYXJkIGRlYnVnZ2luZyBhbmQgdGVzdGluZy4gVGhpcyBpcyBhIG1lbW9yeSBjb3JydXB0aW9uIGZpeCB3aXRoaW4gdGhlIGxpZmVjeWNsZSBvZiB0aGUgZ3Vlc3QsIGFuZCB0aGVyZSBhcmUgbm8gaW5mby1sZWFrcyBpbnZvbHZlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbmVzdGVkIFZNWCBWTS1leGl0IGhhbmRsaW5nIGluIEtWTSAoYF9fbmVzdGVkX3ZteF92bWV4aXRgKSB0byBza2lwIGNhbGxpbmcgYG5lc3RlZF9mbHVzaF9jYWNoZWRfc2hhZG93X3ZtY3MxMigpYCB3aGVuIGB2bV9leGl0X3JlYXNvbiA9PSAtMWAgKGUuZy4sIGR1cmluZyB2Q1BVIHRlYXJkb3duIG9yIFNNTSBlbnRyeSkuIFRoaXMgcHJldmVudHMgaWxsZWdhbCBndWVzdCBtZW1vcnkgd3JpdGVzIG9uIGJvcnJvd2VkIGxhenkgVExCIG1tIGNvbnRleHRzIGR1cmluZyB0ZWFyZG93bi5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgbmV3IGJ1ZmZlcnMsIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnksIGV4cG9zZSB1bmluaXRpYWxpemVkIGZpZWxkcywgb3IgbGVhayBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFN0YW5kYXJkIEtBU0FOIGFuZCBnZW5lcmFsIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgYXJlIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBuZXN0ZWQgVk1YIFZNLWV4aXQgaGFuZGxpbmcgaW4gS1ZNIChgX19uZXN0ZWRfdm14X3ZtZXhpdGApIHRvIHNraXAgY2FsbGluZyBgbmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyKClgIHdoZW4gYHZtX2V4aXRfcmVhc29uID09IC0xYCAoZS5nLiwgZHVyaW5nIHZDUFUgdGVhcmRvd24gb3IgU01NIGVudHJ5KS4gVGhpcyBwcmV2ZW50cyBpbGxlZ2FsIGd1ZXN0IG1lbW9yeSB3cml0ZXMgb24gYm9ycm93ZWQgbGF6eSBUTEIgbW0gY29udGV4dHMgZHVyaW5nIHRlYXJkb3duLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgYnVmZmVycywgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciBsZWFrIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gU3RhbmRhcmQgS0FTQU4gYW5kIGdlbmVyYWwga2VybmVsIGRlYnVnZ2luZyB0b29scyBhcmUgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6MDk6NDIuNDU5MzA1NjA3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ4MjY3NjI2MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX25lc3RlZF92bXhfdm1leGl0XCIsXG4gICAgXCJ2bXhfbGVhdmVfbmVzdGVkXCIsXG4gICAgXCJ2bXhfZW50ZXJfc21tXCIsXG4gICAgXCJuZXN0ZWRfdm14X3JlZmxlY3Rfdm1leGl0XCIsXG4gICAgXCJuZXN0ZWRfdm14X2ZyZWVfdmNwdVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbmVzdGVkIFZNWCBWTS1leGl0IGhhbmRsaW5nIGluIEtWTSAoYF9fbmVzdGVkX3ZteF92bWV4aXRgKSB0byBza2lwIGNhbGxpbmcgYG5lc3RlZF9mbHVzaF9jYWNoZWRfc2hhZG93X3ZtY3MxMigpYCB3aGVuIGB2bV9leGl0X3JlYXNvbiA9PSAtMWAgKGUuZy4sIGR1cmluZyB2Q1BVIHRlYXJkb3duIG9yIFNNTSBlbnRyeSkuIFRoaXMgcHJldmVudHMgaWxsZWdhbCBndWVzdCBtZW1vcnkgd3JpdGVzIG9uIGJvcnJvd2VkIGxhenkgVExCIG1tIGNvbnRleHRzIGR1cmluZyB0ZWFyZG93bi5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgYnVmZmVycywgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciBsZWFrIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gU3RhbmRhcmQgS0FTQU4gYW5kIGdlbmVyYWwga2VybmVsIGRlYnVnZ2luZyB0b29scyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBfX25lc3RlZF92bXhfdm1leGl0KCkgaW4gS1ZNIG5lc3RlZCBWTVggc3VwcG9ydCAoYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYykgdG8gcHJldmVudCBmbHVzaGluZyBjYWNoZWQgc2hhZG93IFZNQ1MxMiB3aGVuIHBlcmZvcm1pbmcgYSBmb3JjZWQgbmVzdGVkIFZNLWV4aXQgKHZtX2V4aXRfcmVhc29uID09IC0xLCBlLmcuIGR1cmluZyB2Q1BVIHRlYXJkb3duIG9yIFNNTSBlbnRyeSkuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocyBpbiBjb3JlIEtWTSB2aXJ0dWFsaXphdGlvbiBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIG9uIGFtZDY0LCB3YXJyYW50aW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE2OjA5OjQyLjQ1OTMxMDk0N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk3MjczNjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzI0YzM5ODZkNGQ1NWQwMGU4MDcxNjQ5M2JiYzEwOWQzYWFiNmMxNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCA4IDE2OjA5OjQxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXFxuaW5kZXggMTUxODczNDA3YWJkMy4uMzNkYzhhMDcwMTlmOCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xcbkBAIC01MTIxLDIxICs1MTIxLDI4IEBAIHZvaWQgX19uZXN0ZWRfdm14X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2bV9leGl0X3JlYXNvbixcXG4gXFx0aWYgKGxpa2VseSghdm14LVxcdTAwM2VmYWlsKSkge1xcbiBcXHRcXHRzeW5jX3ZtY3MwMl90b192bWNzMTIodmNwdSwgdm1jczEyKTtcXG4gXFxuLVxcdFxcdGlmICh2bV9leGl0X3JlYXNvbiAhPSAtMSlcXG4rXFx0XFx0aWYgKHZtX2V4aXRfcmVhc29uICE9IC0xKSB7XFxuIFxcdFxcdFxcdHByZXBhcmVfdm1jczEyKHZjcHUsIHZtY3MxMiwgdm1fZXhpdF9yZWFzb24sXFxuIFxcdFxcdFxcdFxcdCAgICAgICBleGl0X2ludHJfaW5mbywgZXhpdF9xdWFsaWZpY2F0aW9uLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgZXhpdF9pbnNuX2xlbik7XFxuIFxcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBNdXN0IGhhcHBlbiBvdXRzaWRlIG9mIHN5bmNfdm1jczAyX3RvX3ZtY3MxMigpIGFzIGl0IHdpbGxcXG4tXFx0XFx0ICogYWxzbyBiZSB1c2VkIHRvIGNhcHR1cmUgdm1jczEyIGNhY2hlIGFzIHBhcnQgb2ZcXG4tXFx0XFx0ICogY2FwdHVyaW5nIG5WTVggc3RhdGUgZm9yIHNuYXBzaG90IChtaWdyYXRpb24pLlxcbi1cXHRcXHQgKlxcbi1cXHRcXHQgKiBPdGhlcndpc2UsIHRoaXMgZmx1c2ggd2lsbCBkaXJ0eSBndWVzdCBtZW1vcnkgYXQgYVxcbi1cXHRcXHQgKiBwb2ludCBpdCBpcyBhbHJlYWR5IGFzc3VtZWQgYnkgdXNlci1zcGFjZSB0byBiZVxcbi1cXHRcXHQgKiBpbW11dGFibGUuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRuZXN0ZWRfZmx1c2hfY2FjaGVkX3NoYWRvd192bWNzMTIodmNwdSwgdm1jczEyKTtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogTXVzdCBoYXBwZW4gb3V0c2lkZSBvZiBzeW5jX3ZtY3MwMl90b192bWNzMTIoKSBhcyBpdCB3aWxsXFxuK1xcdFxcdFxcdCAqIGFsc28gYmUgdXNlZCB0byBjYXB0dXJlIHZtY3MxMiBjYWNoZSBhcyBwYXJ0IG9mXFxuK1xcdFxcdFxcdCAqIGNhcHR1cmluZyBuVk1YIHN0YXRlIGZvciBzbmFwc2hvdCAobWlncmF0aW9uKS5cXG4rXFx0XFx0XFx0ICpcXG4rXFx0XFx0XFx0ICogT3RoZXJ3aXNlLCB0aGlzIGZsdXNoIHdpbGwgZGlydHkgZ3Vlc3QgbWVtb3J5IGF0IGFcXG4rXFx0XFx0XFx0ICogcG9pbnQgaXQgaXMgYWxyZWFkeSBhc3N1bWVkIGJ5IHVzZXItc3BhY2UgdG8gYmVcXG4rXFx0XFx0XFx0ICogaW1tdXRhYmxlLlxcbitcXHRcXHRcXHQgKlxcbitcXHRcXHRcXHQgKiBEbyBub3QgZmx1c2ggd2hlbiB2bV9leGl0X3JlYXNvbiA9PSAtMSAoZS5nLiBmb3JjZWQgZXhpdFxcbitcXHRcXHRcXHQgKiBvbiB2Q1BVIHRlYXJkb3duIG9yIFNNTSBlbnRyeSkuIE9uIHRlYXJkb3duLCBLVk0gbWF5IHJ1blxcbitcXHRcXHRcXHQgKiB3aXRoIGN1cnJlbnQtXFx1MDAzZW1tID09IE5VTEwgb24gYSBib3Jyb3dlZCBsYXp5IFRMQiBtbSxcXG4rXFx0XFx0XFx0ICogd2hlcmUgd3JpdGluZyBndWVzdCBtZW1vcnkgd291bGQgY29ycnVwdCBhbiB1bnJlbGF0ZWRcXG4rXFx0XFx0XFx0ICogdGFzay4gTm90aGluZyBjYW4gb2JzZXJ2ZSB0aGUgZmx1c2ggaW4gdGhhdCBjYXNlIGFueXdheS5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdG5lc3RlZF9mbHVzaF9jYWNoZWRfc2hhZG93X3ZtY3MxMih2Y3B1LCB2bWNzMTIpO1xcbitcXHRcXHR9XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFRoZSBvbmx5IGV4cGVjdGVkIFZNLWluc3RydWN0aW9uIGVycm9yIGlzIFxcXCJWTSBlbnRyeSB3aXRoXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE2OjA5OjQyLjk1NzMyODI1NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzUxMTM3MzY1NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX25lc3RlZF92bXhfdm1leGl0XCIsXG4gICAgXCJ2bXhfbGVhdmVfbmVzdGVkXCIsXG4gICAgXCJ2bXhfZW50ZXJfc21tXCIsXG4gICAgXCJuZXN0ZWRfdm14X3JlZmxlY3Rfdm1leGl0XCIsXG4gICAgXCJuZXN0ZWRfdm14X2ZyZWVfdmNwdVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIF9fbmVzdGVkX3ZteF92bWV4aXQoKSBpbiBLVk0gbmVzdGVkIFZNWCBzdXBwb3J0IChhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jKSB0byBwcmV2ZW50IGZsdXNoaW5nIGNhY2hlZCBzaGFkb3cgVk1DUzEyIHdoZW4gcGVyZm9ybWluZyBhIGZvcmNlZCBuZXN0ZWQgVk0tZXhpdCAodm1fZXhpdF9yZWFzb24gPT0gLTEsIGUuZy4gZHVyaW5nIHZDUFUgdGVhcmRvd24gb3IgU01NIGVudHJ5KS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzIGluIGNvcmUgS1ZNIHZpcnR1YWxpemF0aW9uIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2Ugb24gYW1kNjQsIHdhcnJhbnRpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjMjRjMzk4NmQ0ZDU1ZDAwZTgwNzE2NDkzYmJjMTA5ZDNhYWI2YzE0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAxNjowOTo0MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXG5pbmRleCAxNTE4NzM0MDdhYmQzLi4zM2RjOGEwNzAxOWY4IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xuKysrIGIvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1xuQEAgLTUxMjEsMjEgKzUxMjEsMjggQEAgdm9pZCBfX25lc3RlZF92bXhfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZtX2V4aXRfcmVhc29uLFxuIFx0aWYgKGxpa2VseSghdm14LVx1MDAzZWZhaWwpKSB7XG4gXHRcdHN5bmNfdm1jczAyX3RvX3ZtY3MxMih2Y3B1LCB2bWNzMTIpO1xuIFxuLVx0XHRpZiAodm1fZXhpdF9yZWFzb24gIT0gLTEpXG4rXHRcdGlmICh2bV9leGl0X3JlYXNvbiAhPSAtMSkge1xuIFx0XHRcdHByZXBhcmVfdm1jczEyKHZjcHUsIHZtY3MxMiwgdm1fZXhpdF9yZWFzb24sXG4gXHRcdFx0XHQgICAgICAgZXhpdF9pbnRyX2luZm8sIGV4aXRfcXVhbGlmaWNhdGlvbixcbiBcdFx0XHRcdCAgICAgICBleGl0X2luc25fbGVuKTtcbiBcbi1cdFx0Lypcbi1cdFx0ICogTXVzdCBoYXBwZW4gb3V0c2lkZSBvZiBzeW5jX3ZtY3MwMl90b192bWNzMTIoKSBhcyBpdCB3aWxsXG4tXHRcdCAqIGFsc28gYmUgdXNlZCB0byBjYXB0dXJlIHZtY3MxMiBjYWNoZSBhcyBwYXJ0IG9mXG4tXHRcdCAqIGNhcHR1cmluZyBuVk1YIHN0YXRlIGZvciBzbmFwc2hvdCAobWlncmF0aW9uKS5cbi1cdFx0ICpcbi1cdFx0ICogT3RoZXJ3aXNlLCB0aGlzIGZsdXNoIHdpbGwgZGlydHkgZ3Vlc3QgbWVtb3J5IGF0IGFcbi1cdFx0ICogcG9pbnQgaXQgaXMgYWxyZWFkeSBhc3N1bWVkIGJ5IHVzZXItc3BhY2UgdG8gYmVcbi1cdFx0ICogaW1tdXRhYmxlLlxuLVx0XHQgKi9cbi1cdFx0bmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyKHZjcHUsIHZtY3MxMik7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBNdXN0IGhhcHBlbiBvdXRzaWRlIG9mIHN5bmNfdm1jczAyX3RvX3ZtY3MxMigpIGFzIGl0IHdpbGxcbitcdFx0XHQgKiBhbHNvIGJlIHVzZWQgdG8gY2FwdHVyZSB2bWNzMTIgY2FjaGUgYXMgcGFydCBvZlxuK1x0XHRcdCAqIGNhcHR1cmluZyBuVk1YIHN0YXRlIGZvciBzbmFwc2hvdCAobWlncmF0aW9uKS5cbitcdFx0XHQgKlxuK1x0XHRcdCAqIE90aGVyd2lzZSwgdGhpcyBmbHVzaCB3aWxsIGRpcnR5IGd1ZXN0IG1lbW9yeSBhdCBhXG4rXHRcdFx0ICogcG9pbnQgaXQgaXMgYWxyZWFkeSBhc3N1bWVkIGJ5IHVzZXItc3BhY2UgdG8gYmVcbitcdFx0XHQgKiBpbW11dGFibGUuXG4rXHRcdFx0ICpcbitcdFx0XHQgKiBEbyBub3QgZmx1c2ggd2hlbiB2bV9leGl0X3JlYXNvbiA9PSAtMSAoZS5nLiBmb3JjZWQgZXhpdFxuK1x0XHRcdCAqIG9uIHZDUFUgdGVhcmRvd24gb3IgU01NIGVudHJ5KS4gT24gdGVhcmRvd24sIEtWTSBtYXkgcnVuXG4rXHRcdFx0ICogd2l0aCBjdXJyZW50LVx1MDAzZW1tID09IE5VTEwgb24gYSBib3Jyb3dlZCBsYXp5IFRMQiBtbSxcbitcdFx0XHQgKiB3aGVyZSB3cml0aW5nIGd1ZXN0IG1lbW9yeSB3b3VsZCBjb3JydXB0IGFuIHVucmVsYXRlZFxuK1x0XHRcdCAqIHRhc2suIE5vdGhpbmcgY2FuIG9ic2VydmUgdGhlIGZsdXNoIGluIHRoYXQgY2FzZSBhbnl3YXkuXG4rXHRcdFx0ICovXG4rXHRcdFx0bmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyKHZjcHUsIHZtY3MxMik7XG4rXHRcdH1cbiBcdH0gZWxzZSB7XG4gXHRcdC8qXG4gXHRcdCAqIFRoZSBvbmx5IGV4cGVjdGVkIFZNLWluc3RydWN0aW9uIGVycm9yIGlzIFwiVk0gZW50cnkgd2l0aFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6MDk6NDIuOTU3MzI5NDk0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODczNTY2MDc5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgaW50byB0aGUgTmVzdGVkIFZNIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBhIHBhdGNoIHRvIHJldmlldywgYW5kIGl0IGxvb2tzIGxpa2UgaXQncyBidXJpZWQgaW4gYGFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNgLiBMZXQncyBnZXQgdG8gaXQuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSdtIGdvaW5nIHRvIHB1bGwgdXAgdGhlIHBhdGNoIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiB0aGF0IGZpbGUuIENvbnRleHQgaXMgZXZlcnl0aGluZyB3aGVuIGl0IGNvbWVzIHRvIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2UgaW4gcmVsYXRpb24gdG8gdGhlIGV4aXN0aW5nIGltcGxlbWVudGF0aW9uLiBJJ20gZ29pbmcgdG8gemVybyBpbiBvbiB0aGUgYXJlYSBhcm91bmQgbGluZSA1MTIxLiBJJ2xsIG5lZWQgdG8gc2VlIHByZWNpc2VseSB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlLCB1bmRlcnN0YW5kIHRoZSBsb2dpYyBmbG93LCBhbmQgaWRlbnRpZnkgdGhlIHNwZWNpZmljIGNvZGUgc2VnbWVudHMgdGhhdCBhcmUgYmVpbmcgbW9kaWZpZWQuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMsIHJpZ2h0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW50IGJlaGluZCB0aGlzIGNoYW5nZSwgd2h5IGl0J3MgbmVjZXNzYXJ5LCBhbmQgd2hhdCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIGl0IG1pZ2h0IGhhdmUgb24gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMTgsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE2OjA5OjUxLjY5Mjk5MzQ1MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4OTcwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUxMTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUxMTA6XFx0XFx0bGVhdmVfZ3Vlc3RfbW9kZSh2Y3B1KTtcXG41MTExOlxcdFxcbjUxMTI6XFx0XFx0aWYgKG5lc3RlZF9jcHVfaGFzX3ByZWVtcHRpb25fdGltZXIodm1jczEyKSlcXG41MTEzOlxcdFxcdFxcdGhydGltZXJfY2FuY2VsKFxcdTAwMjZ0b192bXgodmNwdSktXFx1MDAzZW5lc3RlZC5wcmVlbXB0aW9uX3RpbWVyKTtcXG41MTE0OlxcdFxcbjUxMTU6XFx0XFx0aWYgKG5lc3RlZF9jcHVfaGFzKHZtY3MxMiwgQ1BVX0JBU0VEX1VTRV9UU0NfT0ZGU0VUVElORykpIHtcXG41MTE2OlxcdFxcdFxcdHZjcHUtXFx1MDAzZWFyY2gudHNjX29mZnNldCA9IHZjcHUtXFx1MDAzZWFyY2gubDFfdHNjX29mZnNldDtcXG41MTE3OlxcdFxcdFxcdGlmIChuZXN0ZWRfY3B1X2hhczIodm1jczEyLCBTRUNPTkRBUllfRVhFQ19UU0NfU0NBTElORykpXFxuNTExODpcXHRcXHRcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLnRzY19zY2FsaW5nX3JhdGlvID0gdmNwdS1cXHUwMDNlYXJjaC5sMV90c2Nfc2NhbGluZ19yYXRpbztcXG41MTE5OlxcdFxcdH1cXG41MTIwOlxcdFxcbjUxMjE6XFx0XFx0aWYgKGxpa2VseSghdm14LVxcdTAwM2VmYWlsKSkge1xcbjUxMjI6XFx0XFx0XFx0c3luY192bWNzMDJfdG9fdm1jczEyKHZjcHUsIHZtY3MxMik7XFxuNTEyMzpcXHRcXG41MTI0OlxcdFxcdFxcdGlmICh2bV9leGl0X3JlYXNvbiAhPSAtMSkge1xcbjUxMjU6XFx0XFx0XFx0XFx0cHJlcGFyZV92bWNzMTIodmNwdSwgdm1jczEyLCB2bV9leGl0X3JlYXNvbixcXG41MTI2OlxcdFxcdFxcdFxcdFxcdCAgICAgICBleGl0X2ludHJfaW5mbywgZXhpdF9xdWFsaWZpY2F0aW9uLFxcbjUxMjc6XFx0XFx0XFx0XFx0XFx0ICAgICAgIGV4aXRfaW5zbl9sZW4pO1xcbjUxMjg6XFx0XFxuNTEyOTpcXHRcXHRcXHRcXHQvKlxcbjUxMzA6XFx0XFx0XFx0XFx0ICogTXVzdCBoYXBwZW4gb3V0c2lkZSBvZiBzeW5jX3ZtY3MwMl90b192bWNzMTIoKSBhcyBpdCB3aWxsXFxuNTEzMTpcXHRcXHRcXHRcXHQgKiBhbHNvIGJlIHVzZWQgdG8gY2FwdHVyZSB2bWNzMTIgY2FjaGUgYXMgcGFydCBvZlxcbjUxMzI6XFx0XFx0XFx0XFx0ICogY2FwdHVyaW5nIG5WTVggc3RhdGUgZm9yIHNuYXBzaG90IChtaWdyYXRpb24pLlxcbjUxMzM6XFx0XFx0XFx0XFx0ICpcXG41MTM0OlxcdFxcdFxcdFxcdCAqIE90aGVyd2lzZSwgdGhpcyBmbHVzaCB3aWxsIGRpcnR5IGd1ZXN0IG1lbW9yeSBhdCBhXFxuNTEzNTpcXHRcXHRcXHRcXHQgKiBwb2ludCBpdCBpcyBhbHJlYWR5IGFzc3VtZWQgYnkgdXNlci1zcGFjZSB0byBiZVxcbjUxMzY6XFx0XFx0XFx0XFx0ICogaW1tdXRhYmxlLlxcbjUxMzc6XFx0XFx0XFx0XFx0ICpcXG41MTM4OlxcdFxcdFxcdFxcdCAqIERvIG5vdCBmbHVzaCB3aGVuIHZtX2V4aXRfcmVhc29uID09IC0xIChlLmcuIGZvcmNlZCBleGl0XFxuNTEzOTpcXHRcXHRcXHRcXHQgKiBvbiB2Q1BVIHRlYXJkb3duIG9yIFNNTSBlbnRyeSkuIE9uIHRlYXJkb3duLCBLVk0gbWF5IHJ1blxcbjUxNDA6XFx0XFx0XFx0XFx0ICogd2l0aCBjdXJyZW50LVxcdTAwM2VtbSA9PSBOVUxMIG9uIGEgYm9ycm93ZWQgbGF6eSBUTEIgbW0sXFxuNTE0MTpcXHRcXHRcXHRcXHQgKiB3aGVyZSB3cml0aW5nIGd1ZXN0IG1lbW9yeSB3b3VsZCBjb3JydXB0IGFuIHVucmVsYXRlZFxcbjUxNDI6XFx0XFx0XFx0XFx0ICogdGFzay4gTm90aGluZyBjYW4gb2JzZXJ2ZSB0aGUgZmx1c2ggaW4gdGhhdCBjYXNlIGFueXdheS5cXG41MTQzOlxcdFxcdFxcdFxcdCAqL1xcbjUxNDQ6XFx0XFx0XFx0XFx0bmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyKHZjcHUsIHZtY3MxMik7XFxuNTE0NTpcXHRcXHRcXHR9XFxuNTE0NjpcXHRcXHR9IGVsc2Uge1xcbjUxNDc6XFx0XFx0XFx0LypcXG41MTQ4OlxcdFxcdFxcdCAqIFRoZSBvbmx5IGV4cGVjdGVkIFZNLWluc3RydWN0aW9uIGVycm9yIGlzIFxcXCJWTSBlbnRyeSB3aXRoXFxuNTE0OTpcXHRcXHRcXHQgKiBpbnZhbGlkIGNvbnRyb2wgZmllbGQocykuXFxcIiBBbnl0aGluZyBlbHNlIGluZGljYXRlcyBhXFxuNTE1MDpcXHRcXHRcXHQgKiBwcm9ibGVtIHdpdGggTDAuXFxuNTE1MTpcXHRcXHRcXHQgKi9cXG41MTUyOlxcdFxcdFxcdFdBUk5fT05fT05DRSh2bWNzX3JlYWQzMihWTV9JTlNUUlVDVElPTl9FUlJPUikgIT1cXG41MTUzOlxcdFxcdFxcdFxcdCAgICAgVk1YRVJSX0VOVFJZX0lOVkFMSURfQ09OVFJPTF9GSUVMRCk7XFxuNTE1NDpcXHRcXG41MTU1OlxcdFxcdFxcdC8qIFZNLUZhaWwgYXQgVk0tRW50cnkgbWVhbnMgS1ZNIG1pc3NlZCBhIGNvbnNpc3RlbmN5IGNoZWNrLiAqL1xcbjUxNTY6XFx0XFx0XFx0V0FSTl9PTl9PTkNFKHdhcm5fb25fbWlzc2VkX2NjKTtcXG41MTU3OlxcdFxcdH1cXG41MTU4OlxcdFxcbjUxNTk6XFx0XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6MDk6NTEuNjkzMjg1NjYzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzY0NDA2NTQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRhcmdldCBhbmQgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyB0d2Vha2luZyBgX19uZXN0ZWRfdm14X3ZtZXhpdGAgd2l0aGluIGBhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jYC4gIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UncmUgZGVhbGluZyB3aXRoIG5lc3RlZCBWTVggdm1leGl0cyDigJMgZWZmZWN0aXZlbHksIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiwgd2hpY2ggaXMgcmVsZXZhbnQgdG8gSW50ZWwvYW1kNjQgcGxhdGZvcm1zLiAgVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzIGFsd2F5cywgKmNhbiogdGhpcyBiZSBlZmZlY3RpdmVseSBmdXp6ZWQgdGhyb3VnaCBhIHRvb2wgbGlrZSBzeXprYWxsZXIsIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBRRU1VIHNldHVwPyAgRm9ydHVuYXRlbHksIHRoZSBhbnN3ZXIgbG9va3MgbGlrZSBhIHJlc291bmRpbmcgXCJ5ZXMuXCIgS1ZNLCBhbmQgYnkgZXh0ZW5zaW9uIG5lc3RlZCBWTVgsIHRocm91Z2ggYC9kZXYva3ZtYCwgaXMgYWxyZWFkeSBhIHByaW1lIHRhcmdldCBmb3Igc3l6a2FsbGVyJ3MgZnV6emluZy4gIFRoZXJlZm9yZSBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IEtWTSBhbmQgS1ZNX0lOVEVMIGNvbmZpZ3VyYXRpb25zIHRvIGVuc3VyZSBldmVyeXRoaW5nIGlzIHNldCB1cCB0byBleHBsb3JlIHRoaXMgcG90ZW50aWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDkyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6MDk6NTUuMzM3MzU0MDUzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMDIwMTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIktWTV9JTlRFTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MjA9Y29uZmlnIEtWTV9YODZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTpcXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjItXFx0c2VsZWN0IEtWTV9DT01NT05cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTgzPWNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDgtICAgICAgICBib29sIFxcXCJDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1xcXCJcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDk6ICAgICAgICBkZXBlbmRzIG9uIEtWTV9JTlRFTCBcXHUwMDI2XFx1MDAyNiBFWFBFUlRcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMTAtICAgICAgICBoZWxwXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTIzLVxcdGJvb2wgXFxcIlNvZnR3YXJlIEd1YXJkIGVYdGVuc2lvbnMgKFNHWCkgVmlydHVhbGl6YXRpb25cXFwiXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTI0OlxcdGRlcGVuZHMgb24gWDg2X1NHWCBcXHUwMDI2XFx1MDAyNiBLVk1fSU5URUxcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMjUtXFx0aGVscFxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEzNDpjb25maWcgS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cXHRib29sIFxcXCJJbnRlbCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlPTIxPWt2bS1pbnRlbC0kKENPTkZJR19LVk1fSFlQRVJWKVxcdCs9IHZteC9oeXBlcnYubyB2bXgvaHlwZXJ2X2V2bWNzLm9cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGU6MjI6a3ZtLWludGVsLSQoQ09ORklHX0tWTV9JTlRFTF9URFgpXFx0Kz0gdm14L3RkeC5vXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlLTIzLVxcbi0tXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlPTM1PW9iai0kKENPTkZJR19LVk1fWDg2KVxcdCs9IGt2bS5vXFxuYXJjaC94ODYva3ZtL01ha2VmaWxlOjM2Om9iai0kKENPTkZJR19LVk1fSU5URUwpXFx0Kz0ga3ZtLWludGVsLm9cXG5hcmNoL3g4Ni9rdm0vTWFrZWZpbGUtMzctb2JqLSQoQ09ORklHX0tWTV9BTUQpXFx0Kz0ga3ZtLWFtZC5vXFxuLS1cXG5hcmNoL3g4Ni9rdm0va3ZtLWFzbS1vZmZzZXRzLmM9MTM9c3RhdGljIHZvaWQgX191c2VkIGNvbW1vbih2b2lkKVxcbi0tXFxuYXJjaC94ODYva3ZtL2t2bS1hc20tb2Zmc2V0cy5jLTI0LVxcbmFyY2gveDg2L2t2bS9rdm0tYXNtLW9mZnNldHMuYzoyNTpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfS1ZNX0lOVEVMKSkge1xcbmFyY2gveDg2L2t2bS9rdm0tYXNtLW9mZnNldHMuYy0yNi1cXHRcXHRCTEFOSygpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaD0zMz1zdHJ1Y3QgdmNwdV92dCB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L2NvbW1vbi5oLTU3LVxcbmFyY2gveDg2L2t2bS92bXgvY29tbW9uLmg6NTg6I2lmZGVmIENPTkZJR19LVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL3ZteC9jb21tb24uaC01OS1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTEyLVxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjEzOiNpZmRlZiBDT05GSUdfS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jLTE0LXN0YXRpY19hc3NlcnQob2Zmc2V0b2Yoc3RydWN0IHZjcHVfdm14LCB2dCkgPT0gb2Zmc2V0b2Yoc3RydWN0IHZjcHVfdGR4LCB2dCkpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmM9ODYzPXN0YXRpYyBpbnQgdnRfZ21lbV9tYXhfbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04NzMtI2RlZmluZSB2dF9vcF90ZHhfb25seShuYW1lKSB2dF8jI25hbWVcXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYzo4NzQ6I2Vsc2UgLyogQ09ORklHX0tWTV9JTlRFTF9URFggKi9cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04NzUtI2RlZmluZSB2dF9vcChuYW1lKSB2bXhfIyNuYW1lXFxuYXJjaC94ODYva3ZtL3ZteC9tYWluLmMtODc2LSNkZWZpbmUgdnRfb3BfdGR4X29ubHkobmFtZSkgTlVMTFxcbmFyY2gveDg2L2t2bS92bXgvbWFpbi5jOjg3NzojZW5kaWYgLyogQ09ORklHX0tWTV9JTlRFTF9URFggKi9cXG5hcmNoL3g4Ni9rdm0vdm14L21haW4uYy04NzgtXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3RkeC5oLTYtXFxuYXJjaC94ODYva3ZtL3ZteC90ZHguaDo3OiNpZmRlZiBDT05GSUdfS1ZNX0lOVEVMX1REWFxcbmFyY2gveDg2L2t2bS92bXgvdGR4LmgtOC0jaW5jbHVkZSBcXFwiY29tbW9uLmhcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTkwMj12b2lkIHZteF91cGRhdGVfZXhjZXB0aW9uX2JpdG1hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTkxMS1cXHQgKi9cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjkxMjpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfS1ZNX0lOVEVMX1BST1ZFX1ZFKSlcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTkxMy1cXHRcXHRlYiB8PSAxdSBcXHUwMDNjXFx1MDAzYyBWRV9WRUNUT1I7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTI3NDc9c3RhdGljIGludCBzZXR1cF92bWNzX2NvbmZpZyhzdHJ1Y3Qgdm1jc19jb25maWcgKnZtY3NfY29uZixcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtMjc5MC1cXHR9XFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzoyNzkxOlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfS1ZNX0lOVEVMX1BST1ZFX1ZFKSlcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTI3OTItXFx0XFx0X2NwdV9iYXNlZF8ybmRfZXhlY19jb250cm9sIFxcdTAwMjY9IH5TRUNPTkRBUllfRVhFQ19FUFRfVklPTEFUSU9OX1ZFO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmg9MTI3PXZvaWQgdm14X3NldHVwX21jZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gveDg2L2t2bS92bXgveDg2X29wcy5oLTEyOC1cXG5hcmNoL3g4Ni9rdm0vdm14L3g4Nl9vcHMuaDoxMjk6I2lmZGVmIENPTkZJR19LVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL3ZteC94ODZfb3BzLmgtMTMwLXZvaWQgdGR4X2Rpc2FibGVfdmlydHVhbGl6YXRpb25fY3B1KHZvaWQpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5oPTMxMD1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQga3ZtX3JlcXVlc3RfbDF0Zl9mbHVzaF9sMWQodm9pZClcXG5hcmNoL3g4Ni9rdm0veDg2LmgtMzExLXtcXG5hcmNoL3g4Ni9rdm0veDg2Lmg6MzEyOiNpZiBJU19FTkFCTEVEKENPTkZJR19DUFVfTUlUSUdBVElPTlMpIFxcdTAwMjZcXHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0tWTV9JTlRFTClcXG5hcmNoL3g4Ni9rdm0veDg2LmgtMzEzLVxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE2OjA5OjU1LjM4NzM4MDA0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkwNDkzMzUwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLY29uZmlnIERpdmUgZm9yIEtWTSBcdTAwMjYgS1ZNX0lOVEVMKipcblxuT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHNvbWV0aGluZyBhYm91dCB0aGUgS1ZNIGNvbmZpZ3VyYXRpb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGp1bXAgaW50byB0aGUgYEtjb25maWdgIGZpbGVzIGFuZCBzZWUgd2hhdCdzIGdvaW5nIG9uIHdpdGggYEtWTWAgYW5kLCBzcGVjaWZpY2FsbHksIGBLVk1fSU5URUxgLiBJJ20gcHJvYmFibHkgbG9va2luZyBmb3IgYSBkZXBlbmRlbmN5IG9yIGEgZGVmYXVsdCBzZXR0aW5nIHRoYXQgSSB2YWd1ZWx5IHJlY2FsbCwgbWF5YmUgYSBjb25kaXRpb25hbCBidWlsZCwgb3IgYSBzcGVjaWZpYyBmZWF0dXJlIGdhdGUgdGhhdCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLiBLbm93aW5nIHdoZXJlIHRob3NlIGFyZSBkZWZpbmVkIHdpbGwgZWl0aGVyIGNvbmZpcm0gbXkgc3VzcGljaW9ucyBvciBpbW1lZGlhdGVseSBzaG93IG1lIHdoZXJlIHRvIGJlZ2luIHRyb3VibGVzaG9vdGluZy4gSXQncyBhIHF1aWNrIHdheSB0byBiYXNlbGluZSB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IgYW5kIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGEgY3JpdGljYWwgZGV0YWlsIHJlbGF0ZWQgdG8gdGhlIGhhcmR3YXJlIG9yIHRoZSBrZXJuZWwgdmVyc2lvbiBJJ20gZGVhbGluZyB3aXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Nzg2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6MDk6NTcuMjkyMzE2ODU3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg1MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMTU6XFx0XFxuICAxNjpcXHRcXHQgIElmIHlvdSBzYXkgTiwgYWxsIG9wdGlvbnMgaW4gdGhpcyBzdWJtZW51IHdpbGwgYmUgc2tpcHBlZCBhbmQgZGlzYWJsZWQuXFxuICAxNzpcXHRcXG4gIDE4OlxcdGlmIFZJUlRVQUxJWkFUSU9OXFxuICAxOTpcXHRcXG4gIDIwOlxcdGNvbmZpZyBLVk1fWDg2XFxuICAyMTpcXHRcXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXFxuICAyMjpcXHRcXHRzZWxlY3QgS1ZNX0NPTU1PTlxcbiAgMjM6XFx0XFx0c2VsZWN0IEtWTV9FTElERV9UTEJfRkxVU0hfSUZfWU9VTkdcXG4gIDI0OlxcdFxcdHNlbGVjdCBLVk1fTU1VX0xPQ0tMRVNTX0FHSU5HXFxuICAyNTpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fSVJRQ0hJUFxcbiAgMjY6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX1BGTkNBQ0hFXFxuICAyNzpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fRElSVFlfUklOR19UU09cXG4gIDI4OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9ESVJUWV9SSU5HX0FDUV9SRUxcXG4gIDI5OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9JUlFfQllQQVNTXFxuICAzMDpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fSVJRX1JPVVRJTkdcXG4gIDMxOlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9SRUFET05MWV9NRU1cXG4gIDMyOlxcdFxcdHNlbGVjdCBWSE9TVF9UQVNLXFxuICAzMzpcXHRcXHRzZWxlY3QgS1ZNX0FTWU5DX1BGXFxuICAzNDpcXHRcXHRzZWxlY3QgVVNFUl9SRVRVUk5fTk9USUZJRVJcXG4gIDM1OlxcdFxcdHNlbGVjdCBLVk1fTU1JT1xcbiAgMzY6XFx0XFx0c2VsZWN0IFNDSEVEX0lORk9cXG4gIDM3OlxcdFxcdHNlbGVjdCBQRVJGX0VWRU5UU1xcbiAgMzg6XFx0XFx0c2VsZWN0IEdVRVNUX1BFUkZfRVZFTlRTXFxuICAzOTpcXHRcXHRzZWxlY3QgUEVSRl9HVUVTVF9NRURJQVRFRF9QTVVcXG4gIDQwOlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9NU0lcXG4gIDQxOlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9DUFVfUkVMQVhfSU5URVJDRVBUXFxuICA0MjpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fTk9fUE9MTFxcbiAgNDM6XFx0XFx0c2VsZWN0IFZJUlRfWEZFUl9UT19HVUVTVF9XT1JLXFxuICA0NDpcXHRcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUXFxuICA0NTpcXHRcXHRzZWxlY3QgS1ZNX1ZGSU9cXG4gIDQ2OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9QTV9OT1RJRklFUiBpZiBQTVxcbiAgNDc6XFx0XFx0c2VsZWN0IEtWTV9HRU5FUklDX0hBUkRXQVJFX0VOQUJMSU5HXFxuICA0ODpcXHRcXHRzZWxlY3QgS1ZNX0dFTkVSSUNfUFJFX0ZBVUxUX01FTU9SWVxcbiAgNDk6XFx0XFx0c2VsZWN0IEtWTV9XRVJST1IgaWYgV0VSUk9SXFxuICA1MDpcXHRcXHRzZWxlY3QgS1ZNX0dVRVNUX01FTUZEIGlmIFg4Nl82NFxcbiAgNTE6XFx0XFxuICA1MjpcXHRjb25maWcgS1ZNXFxuICA1MzpcXHRcXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbiAgNTQ6XFx0XFx0ZGVwZW5kcyBvbiBYODZfTE9DQUxfQVBJQ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjowOTo1Ny4yOTI0MTc2OTdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjk0MTgwMDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIExhbmRzY2FwZSBvZiBgX19uZXN0ZWRfdm14X3ZtZXhpdGAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBgX19uZXN0ZWRfdm14X3ZtZXhpdGAgZnVuY3Rpb24uIEkgd2FudCB0byBzZWUgYSBmdWxsIHBpY3R1cmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoZXJlIGRvZXMgdGhpcyB0aGluZyBsaXZlIGluIHRoZSBjb2RlP1wiIEkgbmVlZCBhIGNvbXByZWhlbnNpdmUgb3ZlcnZpZXcgb2YgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byBvdGhlciBjb21wb25lbnRzIHdpdGhpbiB0aGUgc3lzdGVtLlxuXG5GaXJzdCB0aGluZ3MgZmlyc3QsIEknbSBnb2luZyB0byB0cmFjayBkb3duIGV2ZXJ5IGluc3RhbmNlIHdoZXJlIGBfX25lc3RlZF92bXhfdm1leGl0YCBpcyBjYWxsZWQuIFRoYXQgbWVhbnMgZGl2aW5nIGludG8gdGhlIGNhbGwgZ3JhcGgsIGZpbmRpbmcgYWxsIHRoZSBjYWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24uIEkgbmVlZCB0byBpZGVudGlmeSBib3RoIHRoZSBkaXJlY3QgY2FsbHMgYW5kIGFueXRoaW5nIHRoYXQgbWlnaHQgYmUgaW5kaXJlY3QuXG5cblNlY29uZCwgSSBuZWVkIHRvIGxvb2sgYXQgYW55IHN5bWJvbCByZWxhdGluZyB0byB0aGUgc2FtZSB0b3BpYyB0aGF0J3MgKm5vdCogc3RhdGljLCBzbyBJIGdldCBhIGhhbmRsZSBvbiB0aGUgZnVuY3Rpb24ncyBzY29wZS4gVGhpcyBpcyBjcnVjaWFsIGZvciBmdWxseSBncmFzcGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIEknbSBhZnRlciBhIGNsZWFyIG1hcCBvZiBhbGwgdGhlIHBvaW50cyBvZiBpbnRlcmFjdGlvbiwgc28gSSBjYW4gcHJlZGljdCBpdHMgYmVoYXZpb3IgYW5kIGFueSBwb3RlbnRpYWwgcGl0ZmFsbHMuIFRoaXMgY291bGQgZXhwb3NlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjQzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjowOTo1OS45ODY1OTk5MDZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMjExNTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbmVzdGVkX3ZteF92bWV4aXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NDk2MD1zdGF0aWMgdm9pZCBuZXN0ZWRfdm14X3Jlc3RvcmVfaG9zdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTUwNzItICovXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1MDczOnZvaWQgX19uZXN0ZWRfdm14X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2bV9leGl0X3JlYXNvbixcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTUwNzQtXFx0XFx0XFx0IHUzMiBleGl0X2ludHJfaW5mbywgdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oPTI5PWJvb2wgbmVzdGVkX3ZteF9yZWZsZWN0X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmg6MzA6dm9pZCBfX25lc3RlZF92bXhfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZtX2V4aXRfcmVhc29uLFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmgtMzEtXFx0XFx0XFx0IHUzMiBleGl0X2ludHJfaW5mbywgdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oPTM0PXN0YXRpYyBpbmxpbmUgdm9pZCBuZXN0ZWRfdm14X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2bV9leGl0X3JlYXNvbixcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmgtNDUtXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaDo0NjpcXHRfX25lc3RlZF92bXhfdm1leGl0KHZjcHUsIHZtX2V4aXRfcmVhc29uLCBleGl0X2ludHJfaW5mbyxcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oLTQ3LVxcdFxcdFxcdCAgICBleGl0X3F1YWxpZmljYXRpb24sIGV4aXRfaW5zbl9sZW4pO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYz04MTkwPWludCB2bXhfY2hlY2tfaW50ZXJjZXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODI4MC1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjgyODE6XFx0X19uZXN0ZWRfdm14X3ZtZXhpdCh2Y3B1LCB2bV9leGl0X3JlYXNvbiwgMCwgZXhpdF9xdWFsaWZpY2F0aW9uLFxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODI4Mi1cXHRcXHRcXHQgICAgZXhpdF9pbnNuX2xlbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE2OjEwOjAwLjAzODgyMTI2NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjMyNzMxNDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgbmVzdGVkX3ZteF92bWV4aXRgIENhbGwgR3JhcGggYW5kIFBvdGVudGlhbCBFcnJvciBDb25kaXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGBuZXN0ZWRfdm14X3ZtZXhpdGAgaXMgdXNlZCB3aXRoaW4gdGhpcyBuZXN0ZWQgdmlydHVhbGl6YXRpb24gY29udGV4dC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXTigJlzIHF1aXRlIGNlbnRyYWwgdG8gdGhlIHdob2xlIHRoaW5nLiBJIHNlZSB0aGF0IGBuZXN0ZWRfdm14X3ZtZXhpdGAgaXMsIGluIGVzc2VuY2UsIHRoZSBlbnRyeSBwb2ludCBmb3IgaGFuZGxpbmcgVk0gZXhpdHMgd2hlbiBydW5uaW5nIG5lc3RlZCBWTXMuIEl0IHNlZW1zIHRvIGJlIHRoZSBwcmltYXJ5IGhhbmRsZXIuIEkgY2FuIHNlZSB0aGF0IGBuZXN0ZWRfdm14X3ZtZXhpdGAgZ2V0cyBjYWxsZWQgYnkgYG5lc3RlZF92bXhfdm1leGl0YCBpdHNlbGYgKHdoaWNoIGlzIGxpa2VseSByZWxhdGVkIHRvIHJlY3Vyc2lvbiBvciBuZXN0ZWQgZXhpdHMgd2l0aGluIG5lc3RlZCBWTXMpIGFuZCBhbHNvIGFjcm9zcyBgbmVzdGVkLmNgIGFuZCBgdm14LmNgLCB3aGljaCBtYWtlcyBzZW5zZSBhcyB0aGVzZSBhcmUga2V5IG1vZHVsZXMgZm9yIG5lc3RlZCBWTVggb3BlcmF0aW9uLiBJbXBvcnRhbnRseSwgaXQncyBhbHNvIGNhbGxlZCBkaXJlY3RseSBieSBgdm14X2NoZWNrX2ludGVyY2VwdGAsIHByb2JhYmx5IHdoZW4gY2hlY2tpbmcgZm9yIHNwZWNpZmljIGV2ZW50cyB0aGUgZ3Vlc3Qgc2hvdWxkIGhhdmUgaW50ZXJjZXB0ZWQgYnkgZGVmYXVsdCwgYW5kIGR1cmluZyBmb3JjZWQgZXhpdHMuXG5cbk5vdywgbXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdW5kZXJzdGFuZGluZyAqYWxsKiB0aGUgZW50cnkgcG9pbnRzIGludG8gdGhpcyBoYW5kbGVyIGFuZCBhbnkgcG90ZW50aWFsIGZhaWx1cmUgbW9kZXMuIEkgbmVlZCB0byBzcGVjaWZpY2FsbHkgdHJhY2UgYmFjayBhbGwgb2YgdGhlIGNhbGxlcnMgb2YgYG5lc3RlZF92bXhfdm1leGl0YCAod2hpY2ggbWF5IGluY2x1ZGUgbG9va2luZyBmb3IgY3Jvc3MtY2FsbHMpIG9yIGxvb2sgZm9yIHNpdHVhdGlvbnMgd2hlcmUgYHZtX2V4aXRfcmVhc29uID09IC0xYCBtaWdodCBiZSBwYXNzZWQuIFRoYXQgdmFsdWUgbG9va3MgbGlrZSBhbiB1bmluaXRpYWxpemVkIG9yIGVycm9yIHN0YXRlLiBUaGUgZmlyc3Qgc3RlcCB3aWxsIGJlIHRvIGNvbmZpcm0gdGhpcyBoeXBvdGhlc2lzOiBpZiBgLTFgIGlzIHBhc3NlZCBhdCBhbiBleGl0LCBpdOKAmXMgYWxtb3N0IGNlcnRhaW5seSBhbiBlcnJvciwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBwYXRoIHRoYXQgcmVzdWx0ZWQgaW4gdGhhdCBjb25kaXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1NDksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjoxMDowMy4yNzE1NTUyNzlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNzQ2MTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5lc3RlZF92bXhfdm1leGl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vdm14L2h5cGVydi5jPTIyNz12b2lkIHZteF9odl9pbmplY3Rfc3ludGhldGljX3ZtZXhpdF9wb3N0X3RsYl9mbHVzaChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuYy0yMjgte1xcbmFyY2gveDg2L2t2bS92bXgvaHlwZXJ2LmM6MjI5OlxcdG5lc3RlZF92bXhfdm1leGl0KHZjcHUsIEhWX1ZNWF9TWU5USEVUSUNfRVhJVF9SRUFTT05fVFJBUF9BRlRFUl9GTFVTSCwgMCwgMCk7XFxuYXJjaC94ODYva3ZtL3ZteC9oeXBlcnYuYy0yMzAtfVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz00MjE9c3RhdGljIHZvaWQgbmVzdGVkX2VwdF9pbmplY3RfcGFnZV9mYXVsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQ5Mi1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjQ5MzpcXHRuZXN0ZWRfdm14X3ZtZXhpdCh2Y3B1LCB2bV9leGl0X3JlYXNvbiwgMCwgZXhpdF9xdWFsaWZpY2F0aW9uKTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQ5NC1cXHR2bWNzMTItXFx1MDAzZWd1ZXN0X3BoeXNpY2FsX2FkZHJlc3MgPSBmYXVsdC1cXHUwMDNlYWRkcmVzcztcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9MzYyOT1lbnVtIG52bXhfdm1lbnRyeV9zdGF0dXMgbmVzdGVkX3ZteF9lbnRlcl9ub25fcm9vdF9tb2RlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzczNy1cXHQgKiBEbyBub3Qgc3RhcnQgdGhlIHByZWVtcHRpb24gdGltZXIgaHJ0aW1lciB1bnRpbCBhZnRlciB3ZSBrbm93XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozNzM4OlxcdCAqIHdlIGFyZSBzdWNjZXNzZnVsLCBzbyB0aGF0IG9ubHkgbmVzdGVkX3ZteF92bWV4aXQgbmVlZHMgdG8gY2FuY2VsXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy0zNzM5LVxcdCAqIHRoZSB0aW1lci5cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtMzc1MC1cXHQgKiByZXR1cm5lZCBhcyBmYXIgYXMgTDEgaXMgY29uY2VybmVkLiBJdCB3aWxsIG9ubHkgcmV0dXJuIChhbmQgc2V0XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozNzUxOlxcdCAqIHRoZSBzdWNjZXNzIGZsYWcpIHdoZW4gTDIgZXhpdHMgKHNlZSBuZXN0ZWRfdm14X3ZtZXhpdCgpKS5cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM3NTItXFx0ICovXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTQwNzI9c3RhdGljIHZvaWQgbmVzdGVkX3ZteF9pbmplY3RfZXhjZXB0aW9uX3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQxMTgtXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo0MTE5OlxcdG5lc3RlZF92bXhfdm1leGl0KHZjcHUsIEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUksIGludHJfaW5mbywgZXhpdF9xdWFsKTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQxMjAtfVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz00MzA1PXN0YXRpYyBpbnQgdm14X2NoZWNrX25lc3RlZF9ldmVudHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy00MzQyLVxcdFxcdGlmICh2Y3B1LVxcdTAwM2VhcmNoLm1wX3N0YXRlICE9IEtWTV9NUF9TVEFURV9JTklUX1JFQ0VJVkVEKVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NDM0MzpcXHRcXHRcXHRuZXN0ZWRfdm14X3ZtZXhpdCh2Y3B1LCBFWElUX1JFQVNPTl9JTklUX1NJR05BTCwgMCwgMCk7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy00MzQ0LVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy00MzU2LVxcdFxcdGlmICh2Y3B1LVxcdTAwM2VhcmNoLm1wX3N0YXRlID09IEtWTV9NUF9TVEFURV9JTklUX1JFQ0VJVkVEKSB7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo0MzU3OlxcdFxcdFxcdG5lc3RlZF92bXhfdm1leGl0KHZjcHUsIEVYSVRfUkVBU09OX1NJUElfU0lHTkFMLCAwLFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNDM1OC1cXHRcXHRcXHRcXHRcXHRcXHRhcGljLVxcdTAwM2VzaXBpX3ZlY3RvciBcXHUwMDI2IDB4RkZVTCk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQzOTMtXFx0XFx0bmVzdGVkX3ZteF91cGRhdGVfcGVuZGluZ19kYmcodmNwdSk7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo0Mzk0OlxcdFxcdG5lc3RlZF92bXhfdm1leGl0KHZjcHUsIEVYSVRfUkVBU09OX01PTklUT1JfVFJBUF9GTEFHLCAwLCAwKTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQzOTUtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTQ0MTQtXFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjQ0MTU6XFx0XFx0bmVzdGVkX3ZteF92bWV4aXQodmNwdSwgRVhJVF9SRUFTT05fUFJFRU1QVElPTl9USU1FUiwgMCwgMCk7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy00NDE2LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy00NDMwLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NDQzMTpcXHRcXHRuZXN0ZWRfdm14X3ZtZXhpdCh2Y3B1LCBFWElUX1JFQVNPTl9FWENFUFRJT05fTk1JLFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNDQzMi1cXHRcXHRcXHRcXHQgIE5NSV9WRUNUT1IgfCBJTlRSX1RZUEVfTk1JX0lOVFIgfFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy00NDU2LVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NDQ1NzpcXHRcXHRcXHRuZXN0ZWRfdm14X3ZtZXhpdCh2Y3B1LCBFWElUX1JFQVNPTl9FWFRFUk5BTF9JTlRFUlJVUFQsIDAsIDApO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNDQ1OC1cXHRcXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNDQ2NS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjQ0NjY6XFx0XFx0XFx0bmVzdGVkX3ZteF92bWV4aXQodmNwdSwgRVhJVF9SRUFTT05fRVhURVJOQUxfSU5URVJSVVBULFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNDQ2Ny1cXHRcXHRcXHRcXHRcXHQgIElOVFJfSU5GT19WQUxJRF9NQVNLIHwgSU5UUl9UWVBFX0VYVF9JTlRSIHwgaXJxLCAwKTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNDUwMS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjQ1MDI6XFx0XFx0bmVzdGVkX3ZteF92bWV4aXQodmNwdSwgRVhJVF9SRUFTT05fRVhURVJOQUxfSU5URVJSVVBULFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNDUwMy1cXHRcXHRcXHRcXHQgIElOVFJfSU5GT19WQUxJRF9NQVNLIHwgSU5UUl9UWVBFX0VYVF9JTlRSIHwgaXJxLCAwKTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NDk2MD1zdGF0aWMgdm9pZCBuZXN0ZWRfdm14X3Jlc3RvcmVfaG9zdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTUwNzItICovXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1MDczOnZvaWQgX19uZXN0ZWRfdm14X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2bV9leGl0X3JlYXNvbixcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTUwNzQtXFx0XFx0XFx0IHUzMiBleGl0X2ludHJfaW5mbywgdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTUyMzk9c3RhdGljIHZvaWQgbmVzdGVkX3ZteF90cmlwbGVfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01MjQxLVxcdGt2bV9jbGVhcl9yZXF1ZXN0KEtWTV9SRVFfVFJJUExFX0ZBVUxULCB2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjUyNDI6XFx0bmVzdGVkX3ZteF92bWV4aXQodmNwdSwgRVhJVF9SRUFTT05fVFJJUExFX0ZBVUxULCAwLCAwKTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTUyNDMtfVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz02MjAwPXN0YXRpYyBpbnQgaGFuZGxlX3ZtZnVuYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTYyNDQtXFx0ICovXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo2MjQ1OlxcdG5lc3RlZF92bXhfdm1leGl0KHZjcHUsIHZteC1cXHUwMDNldnQuZXhpdF9yZWFzb24uZnVsbCxcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTYyNDYtXFx0XFx0XFx0ICB2bXhfZ2V0X2ludHJfaW5mbyh2Y3B1KSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NjcwOT1ib29sIG5lc3RlZF92bXhfcmVmbGVjdF92bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02NzU2LXJlZmxlY3Rfdm1leGl0OlxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Njc1NzpcXHRuZXN0ZWRfdm14X3ZtZXhpdCh2Y3B1LCBleGl0X3JlYXNvbi5mdWxsLCBleGl0X2ludHJfaW5mbywgZXhpdF9xdWFsKTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTY3NTgtXFx0cmV0dXJuIHRydWU7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTY4ODQ9dm9pZCB2bXhfbGVhdmVfbmVzdGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjg4Ny1cXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLm5lc3RlZF9ydW5fcGVuZGluZyA9IDA7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo2ODg4OlxcdFxcdG5lc3RlZF92bXhfdm1leGl0KHZjcHUsIC0xLCAwLCAwKTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTY4ODktXFx0fVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaD0yOT1ib29sIG5lc3RlZF92bXhfcmVmbGVjdF92bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oOjMwOnZvaWQgX19uZXN0ZWRfdm14X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2bV9leGl0X3JlYXNvbixcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oLTMxLVxcdFxcdFxcdCB1MzIgZXhpdF9pbnRyX2luZm8sIHVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaC0zMy1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oOjM0OnN0YXRpYyBpbmxpbmUgdm9pZCBuZXN0ZWRfdm14X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2bV9leGl0X3JlYXNvbixcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oLTM1LVxcdFxcdFxcdFxcdCAgICAgdTMyIGV4aXRfaW50cl9pbmZvLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaC00NS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oOjQ2OlxcdF9fbmVzdGVkX3ZteF92bWV4aXQodmNwdSwgdm1fZXhpdF9yZWFzb24sIGV4aXRfaW50cl9pbmZvLFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmgtNDctXFx0XFx0XFx0ICAgIGV4aXRfcXVhbGlmaWNhdGlvbiwgZXhpdF9pbnNuX2xlbik7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTY3MDg9c3RhdGljIGludCBfX3ZteF9oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGZhc3RwYXRoX3QgZXhpdF9mYXN0cGF0aClcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtNjc3MC1cXHRcXHRpZiAodm14LVxcdTAwM2V2dC5lbXVsYXRpb25fcmVxdWlyZWQpIHtcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjY3NzE6XFx0XFx0XFx0bmVzdGVkX3ZteF92bWV4aXQodmNwdSwgRVhJVF9SRUFTT05fVFJJUExFX0ZBVUxULCAwLCAwKTtcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTY3NzItXFx0XFx0XFx0cmV0dXJuIDE7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTgxOTA9aW50IHZteF9jaGVja19pbnRlcmNlcHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy04MjgwLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6ODI4MTpcXHRfX25lc3RlZF92bXhfdm1leGl0KHZjcHUsIHZtX2V4aXRfcmVhc29uLCAwLCBleGl0X3F1YWxpZmljYXRpb24sXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy04MjgyLVxcdFxcdFxcdCAgICBleGl0X2luc25fbGVuKTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM9ODQ4Mj1pbnQgdm14X2VudGVyX3NtbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuaW9uIGt2bV9zbXJhbSAqc21yYW0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTg0OTQtXFx0aWYgKHZteC1cXHUwMDNlbmVzdGVkLnNtbS5ndWVzdF9tb2RlKVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmM6ODQ5NTpcXHRcXHRuZXN0ZWRfdm14X3ZtZXhpdCh2Y3B1LCAtMSwgMCwgMCk7XFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy04NDk2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjoxMDowMy4zMjMzMDYyMjdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDY2ODc4NTIzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgS1ZNIFZ1bG5lcmFiaWxpdHkgUGF0Y2gqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ20gc2VlaW5nLiBUaGlzIHBhdGNoIGlzIG1ha2luZyBhIHRhcmdldGVkIGNoYW5nZSB3aXRoaW4gdGhlIEtWTSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gY29kZSwgc3BlY2lmaWNhbGx5IGluIGBhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jYC4gIEl0J3MgYSBzdWJ0bGUgYnV0IHBvdGVudGlhbGx5IGltcG9ydGFudCBtb2RpZmljYXRpb24gdG8gdGhlIGBfX25lc3RlZF92bXhfdm1leGl0YCBmdW5jdGlvbi4gVGhlIG9yaWdpbmFsIGNvZGUgdW5jb25kaXRpb25hbGx5IGNhbGxlZCBgbmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyKHZjcHUsIHZtY3MxMilgIGFmdGVyIGNlcnRhaW4gY2hlY2tzIHJlbGF0ZWQgdG8gdGhlIGB2bV9leGl0X3JlYXNvbmAuICBUaGUgcGF0Y2ggY29uZGl0aW9uYWxpemVzIHRoaXMgY2FsbCwgbm93IG9ubHkgZXhlY3V0aW5nIGBuZXN0ZWRfZmx1c2hfY2FjaGVkX3NoYWRvd192bWNzMTJgIGlmIGB2bV9leGl0X3JlYXNvbmAgaXNuJ3QgLTEuIFRoZSBpbnRlcmVzdGluZyB0aGluZyBpcyB0aGF0ICBgdm14X2xlYXZlX25lc3RlZCh2Y3B1KWAgYW5kIGB2bXhfZW50ZXJfc21tKHZjcHUsIHNtcmFtKWAgYm90aCBsZWFkIHRvIGEgY2FsbCB0byBgbmVzdGVkX3ZteF92bWV4aXRgIHdpdGggYHZtX2V4aXRfcmVhc29uYCBzZXQgdG8gLTEuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgdGhpcyBjaGFuZ2UgKmNvdWxkKiBiZSByZWxhdGVkIHRvIGEgc3BlY2lmaWMgaXNzdWUgaW4gaG93IHRoZSBzaGFkb3cgVk1DUzEyIGlzIGhhbmRsZWQgZHVyaW5nIHRoZXNlIHNwZWNpZmljIGV4aXRzLiAgVGhlIGZhY3QgdGhhdCBpdCdzIGNvbmRpdGlvbmFsIG5vdyBtYWtlcyBtZSB3b25kZXIgYWJvdXQgc29tZSBjb3JuZXIgY2FzZSBvciByYWNlIGNvbmRpdGlvbi4gIEl0J3MgdmVyeSBsaWtlbHkgZXhlY3V0YWJsZSwgYXMgaXQgdG91Y2hlcyB0aGUgY29yZSBvZiBLVk0ncyBuZXN0ZWQgdmlydHVhbGl6YXRpb24gaW1wbGVtZW50YXRpb24sIHNvbWV0aGluZyBhY3RpdmVseSB1c2VkIGluIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRzLiAgU3BlY2lmaWNhbGx5LCBpdCBkZWFscyB3aXRoIGB2bXhfbGVhdmVfbmVzdGVkYCBhbmQgYHZteF9lbnRlcl9zbW1gLCB0d28gdmVyeSBpbnRlcmVzdGluZyBhcmVhcy5cblxuR2l2ZW4gbXkgZmllbGQsIFN5emthbGxlcidzIGZ1enppbmcgZm9jdXMgb24gdGhpcyBhcmVhIGlzIHBhcnRpY3VsYXJseSByZWxldmFudC4gIEl0IGV4dGVuc2l2ZWx5IHRlc3RzIEtWTSdzIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBmZWF0dXJlcywgaW5jbHVkaW5nIGBLVk1fUlVOYCwgc3RhdGUgbWFuYWdlbWVudCwgYW5kIHRoZSBleGVjdXRpb24gb2YgVk1YIGluc3RydWN0aW9ucyBsaWtlIFZNTEFVTkNILCBWTVJFU1VNRSwgVk1XUklURSBhbmQgVk1SRUFELiBUaGUgc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIChgS1ZNYCBhbmQgYEtWTV9JTlRFTGApIGFyZSBhbHNvIG1ldC4gVGhlIGxpc3RlZCBmdW5jdGlvbnMsIG5hbWVseSBgX19uZXN0ZWRfdm14X3ZtZXhpdGAsIGBuZXN0ZWRfZmx1c2hfY2FjaGVkX3NoYWRvd192bWNzMTJgLCBgdm14X2xlYXZlX25lc3RlZGAsIGFuZCBgdm14X2VudGVyX3NtbWAsIG1ha2UgZm9yIGdyZWF0IGZvY3VzZWQgZnV6eiB0YXJnZXRzLiBOb3csIGxldCBtZSBjaGVjayBpZiBgbmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyYCBpcyBzdGF0aWMgb3Igbm9uLXN0YXRpYyB3aXRoaW4gYGFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNgLiBUaGF0IHdpbGwgaGVscCBkZXRlcm1pbmUgaG93IHJlYWNoYWJsZSB0aGlzIGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjMwOCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjoxMDowNy45OTIwOTQ4NjlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMDMzNDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5lc3RlZF9mbHVzaF9jYWNoZWRfc2hhZG93X3ZtY3MxMlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz04NTE9c3RhdGljIHZvaWQgbmVzdGVkX2NhY2hlX3NoYWRvd192bWNzMTIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy04NjktXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo4NzA6c3RhdGljIHZvaWQgbmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTg3MS1cXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgdm1jczEyICp2bWNzMTIpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTUwNzM9dm9pZCBfX25lc3RlZF92bXhfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZtX2V4aXRfcmVhc29uLFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01MTQzLVxcdFxcdFxcdCAqL1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6NTE0NDpcXHRcXHRcXHRuZXN0ZWRfZmx1c2hfY2FjaGVkX3NoYWRvd192bWNzMTIodmNwdSwgdm1jczEyKTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTUxNDUtXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjoxMDowOC4wNDMxMzYyNjdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg5NzI3NDc5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgSSBhbmFseXplIHRoaXM6XG5cbioqQW5hbHl6aW5nIEtWTS1JbnRlbCBOZXN0aW5nIGFuZCBFeGl0IEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHNvbWUgS1ZNLUludGVsIGNvZGUgYW5kIEkndmUgZ290IGEgZmV3IGtleSBmdW5jdGlvbnMgaW4gbWluZC4gYF9fbmVzdGVkX3ZteF92bWV4aXRgIGlzIHRoZSBiaWcgb25lLCBpdCdzIGdsb2JhbCwgc28gaXQncyBhIGNyaXRpY2FsIGVudHJ5IHBvaW50IGZvciBuZXN0ZWQgdmlydHVhbGl6YXRpb24gVk0gZXhpdHMgd2l0aGluIHRoZSBrdm0taW50ZWwgbW9kdWxlLiBUaGF0IG1lYW5zIGl0IGlzIHRoZSBmdW5jdGlvbiB0aGF0IHRoZSBuZXN0ZWQgVk0gdXNlcyB0byByZXR1cm4gY29udHJvbCB0byB0aGUgaG9zdC5cblxuTm93LCBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBhcm91bmQgaXQuIEkgc2VlIHRoYXQgYHZteF9sZWF2ZV9uZXN0ZWRgIGlzIGFub3RoZXIgZnVuY3Rpb24gdGhhdCBpc24ndCBzdGF0aWMuIFRoYXQgdGVsbHMgbWUgaXQncyBsaWtlbHkgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGUgZmlsZSBvciBwb3NzaWJseSBldmVuIGEgZGlmZmVyZW50IG1vZHVsZS4gSXQncyByZWxhdGVkIHRvIHRlYXJkb3duLCByZXNldHMsIG9yIHNvbWUgSU9DVEwgaGFuZGxpbmcgb2YgdGhlIHZDUFUuIFRoYXQgc3VnZ2VzdHMgaXQgbWlnaHQgYmUgaW52b2x2ZWQgaW4gY2xlYW5pbmcgdXAgYWZ0ZXIgYSBuZXN0ZWQgVk0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZW4gdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhbmQgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZS5cblxuVGhlbiB0aGVyZSdzIGB2bXhfZW50ZXJfc21tYCwgd2hpY2ggaXMgYWxzbyBub24tc3RhdGljLiBUaGUgbmFtZSBzdWdnZXN0cyB0aGlzIG1pZ2h0IGJlIHJlbGF0ZWQgdG8gU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSAoU01NKS4gSSB3b25kZXIgaG93IHRoaXMgcmVsYXRlcyB0byBuZXN0ZWQgdmlydHVhbGl6YXRpb24sIGFuZCBpZiBpdCdzIHBvdGVudGlhbGx5IGludGVyYWN0aW5nIHdpdGggYHZteF9sZWF2ZV9uZXN0ZWRgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBhbmQgaG93IHRoYXQgaXMgY2FsbGVkIGFzIHdlbGwuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgd2FudCB0byB0cmFjZSB0aGUgY2FsbHMgdG8gYHZteF9sZWF2ZV9uZXN0ZWRgLiBLbm93aW5nICp3aG8qIGNhbGxzIGl0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGl0cyByb2xlIGluIHRoZSBiaWdnZXIgcGljdHVyZSBvZiBuZXN0ZWQgdmlydHVhbGl6YXRpb24gYW5kIHRoZSB2Q1BVIGxpZmVjeWNsZS4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZSBjb2RlIGlzIHN0cnVjdHVyZWQgYXJvdW5kIHRoaXMgZnVuY3Rpb24gdG8gc2VlIHdoZXJlIGl0IHNpdHMgaW4gdGhlIGxhcmdlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzc0OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE2OjEwOjEwLjk0MDQxMzg1NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk5NzYwODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm14X2xlYXZlX25lc3RlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz0zODY9dm9pZCBuZXN0ZWRfdm14X2ZyZWVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM4OC1cXHR2Y3B1X2xvYWQodmNwdSk7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzozODk6XFx0dm14X2xlYXZlX25lc3RlZCh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTM5MC1cXHR2Y3B1X3B1dCh2Y3B1KTtcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9Njc2MT1zdGF0aWMgaW50IHZteF9nZXRfbmVzdGVkX3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjg4My1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjY4ODQ6dm9pZCB2bXhfbGVhdmVfbmVzdGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTY4ODUte1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz02OTE1PXN0YXRpYyBpbnQgdm14X3NldF9uZXN0ZWRfc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02OTg0LVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6Njk4NTpcXHR2bXhfbGVhdmVfbmVzdGVkKHZjcHUpO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjk4Ni1cXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NzUwMT1zdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIHZteF9uZXN0ZWRfb3BzIF9faW5pdGRhdGEgPSB7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo3NTAyOlxcdC5sZWF2ZV9uZXN0ZWQgPSB2bXhfbGVhdmVfbmVzdGVkLFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNzUwMy1cXHQudHJhbnNsYXRlX25lc3RlZF9ncGEgPSB2bXhfdHJhbnNsYXRlX25lc3RlZF9ncGEsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oPTEzPWVudW0gbnZteF92bWVudHJ5X3N0YXR1cyB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oLTE5LVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmg6MjA6dm9pZCB2bXhfbGVhdmVfbmVzdGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaC0yMS12b2lkIG5lc3RlZF92bXhfc2V0dXBfY3Rsc19tc3JzKHN0cnVjdCB2bWNzX2NvbmZpZyAqdm1jc19jb25mLCB1MzIgZXB0X2NhcHMpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYz0yMzM1PWludCB2bXhfc2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBtc3JfZGF0YSAqbXNyX2luZm8pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jLTI1MDAtXFx0XFx0aWYgKG1zcl9pbmZvLVxcdTAwM2Vob3N0X2luaXRpYXRlZCBcXHUwMDI2XFx1MDAyNiBkYXRhID09IDApXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYzoyNTAxOlxcdFxcdFxcdHZteF9sZWF2ZV9uZXN0ZWQodmNwdSk7XFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy0yNTAyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjoxMDoxMC45OTAzOTQ4OTNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjUzODcwNzg4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgbmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBkaXNzZWN0IHRoZSBgbmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyYCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGV4YWN0IGZ1bmN0aW9uLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBhbmQgdGhlIGludHJpY2FjaWVzIG9mIHNoYWRvdyBWTUNTLCBJIGNhbiBhbnRpY2lwYXRlIHdoYXQgaXQncyBsaWtlbHkgcmVzcG9uc2libGUgZm9yOiBwcm9iYWJseSBkZWFsaW5nIHdpdGggY2FjaGUgY29oZXJlbmN5IGlzc3VlcyByZWxhdGVkIHRvIHRoZSBWTUNTMTIsIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBuZXN0ZWQgdmlydHVhbCBtYWNoaW5lIHBlcmZvcm1hbmNlIGFuZCBjb3JyZWN0bmVzcy4gU3BlY2lmaWNhbGx5LCBJJ20gZXhwZWN0aW5nIGl0IHdpbGwgaGFuZGxlIHRoZSBwcm9jZXNzIHRvIGludmFsaWRhdGUgb3Igc3luY2hyb25pemUgc3RhbGUgVk1DUzEyIGRhdGEgd2hlbiBzb21lIG90aGVyIGh5cGVydmlzb3IgY29tcG9uZW50IGhhcyBjaGFuZ2VkIHNvbWV0aGluZyBvciBwZXJoYXBzIHdoZW4gYSBndWVzdCBjaGFuZ2VzIGEgVk1DUyBmaWVsZCByZWxhdGVkIHRvIHRoZSBuZXN0ZWQgaHlwZXJ2aXNvci4gVGhpcyBpcyBhIHZlcnkgY3JpdGljYWwgZnVuY3Rpb24gZm9yIGd1YXJhbnRlZWluZyBjb3JyZWN0IGJlaGF2aW9yIGluIGEgY29tcGxleCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gc3lzdGVtLiBJJ2xsIGJlIGxvb2tpbmcgY2xvc2VseSBhdCBob3cgaXQgaGFuZGxlcyB0aGUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgYW5kIHdoYXQgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzIGl0J3MgdG91Y2hpbmcuIEknbSBrZWVuIHRvIHNwb3QgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIGx1cmtpbmcgaW4gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDU5LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6MTA6MTMuNTI5MTA0NTk1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NTA2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg2MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg2MDpcXHRcXG4gODYxOlxcdFxcdGlmIChnaGMtXFx1MDAzZWdwYSAhPSB2bWNzMTItXFx1MDAzZXZtY3NfbGlua19wb2ludGVyIFxcdTAwMjZcXHUwMDI2XFxuIDg2MjpcXHRcXHQgICAga3ZtX2dmbl90b19odmFfY2FjaGVfaW5pdCh2Y3B1LVxcdTAwM2Vrdm0sIGdoYyxcXG4gODYzOlxcdFxcdFxcdFxcdFxcdCAgICAgIHZtY3MxMi1cXHUwMDNldm1jc19saW5rX3BvaW50ZXIsIFZNQ1MxMl9TSVpFKSlcXG4gODY0OlxcdFxcdFxcdHJldHVybjtcXG4gODY1OlxcdFxcbiA4NjY6XFx0XFx0a3ZtX3JlYWRfZ3Vlc3RfY2FjaGVkKHZjcHUtXFx1MDAzZWt2bSwgZ2hjLCBnZXRfc2hhZG93X3ZtY3MxMih2Y3B1KSxcXG4gODY3OlxcdFxcdFxcdFxcdCAgICAgIFZNQ1MxMl9TSVpFKTtcXG4gODY4OlxcdH1cXG4gODY5OlxcdFxcbiA4NzA6XFx0c3RhdGljIHZvaWQgbmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4gODcxOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB2bWNzMTIgKnZtY3MxMilcXG4gODcyOlxcdHtcXG4gODczOlxcdFxcdHN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpO1xcbiA4NzQ6XFx0XFx0c3RydWN0IGdmbl90b19odmFfY2FjaGUgKmdoYyA9IFxcdTAwMjZ2bXgtXFx1MDAzZW5lc3RlZC5zaGFkb3dfdm1jczEyX2NhY2hlO1xcbiA4NzU6XFx0XFxuIDg3NjpcXHRcXHRpZiAoIW5lc3RlZF9jcHVfaGFzX3NoYWRvd192bWNzKHZtY3MxMikgfHxcXG4gODc3OlxcdFxcdCAgICB2bWNzMTItXFx1MDAzZXZtY3NfbGlua19wb2ludGVyID09IElOVkFMSURfR1BBKVxcbiA4Nzg6XFx0XFx0XFx0cmV0dXJuO1xcbiA4Nzk6XFx0XFxuIDg4MDpcXHRcXHRpZiAoZ2hjLVxcdTAwM2VncGEgIT0gdm1jczEyLVxcdTAwM2V2bWNzX2xpbmtfcG9pbnRlciBcXHUwMDI2XFx1MDAyNlxcbiA4ODE6XFx0XFx0ICAgIGt2bV9nZm5fdG9faHZhX2NhY2hlX2luaXQodmNwdS1cXHUwMDNla3ZtLCBnaGMsXFxuIDg4MjpcXHRcXHRcXHRcXHRcXHQgICAgICB2bWNzMTItXFx1MDAzZXZtY3NfbGlua19wb2ludGVyLCBWTUNTMTJfU0laRSkpXFxuIDg4MzpcXHRcXHRcXHRyZXR1cm47XFxuIDg4NDpcXHRcXG4gODg1OlxcdFxcdGt2bV93cml0ZV9ndWVzdF9jYWNoZWQodmNwdS1cXHUwMDNla3ZtLCBnaGMsIGdldF9zaGFkb3dfdm1jczEyKHZjcHUpLFxcbiA4ODY6XFx0XFx0XFx0XFx0ICAgICAgIFZNQ1MxMl9TSVpFKTtcXG4gODg3OlxcdH1cXG4gODg4OlxcdFxcbiA4ODk6XFx0LypcXG4gODkwOlxcdCAqIEluIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiwgY2hlY2sgaWYgTDEgaGFzIHNldFxcbiA4OTE6XFx0ICogVk1fRVhJVF9BQ0tfSU5UUl9PTl9FWElUXFxuIDg5MjpcXHQgKi9cXG4gODkzOlxcdHN0YXRpYyBib29sIG5lc3RlZF9leGl0X2ludHJfYWNrX3NldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIDg5NDpcXHR7XFxuIDg5NTpcXHRcXHRyZXR1cm4gZ2V0X3ZtY3MxMih2Y3B1KS1cXHUwMDNldm1fZXhpdF9jb250cm9scyBcXHUwMDI2XFxuIDg5NjpcXHRcXHRcXHRWTV9FWElUX0FDS19JTlRSX09OX0VYSVQ7XFxuIDg5NzpcXHR9XFxuIDg5ODpcXHRcXG4gODk5OlxcdHN0YXRpYyBpbnQgbmVzdGVkX3ZteF9jaGVja19hcGljX2FjY2Vzc19jb250cm9scyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE2OjEwOjEzLjUyOTM4MTY5NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDU4MDIwMzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBLVk0gTmVzdGVkIFZNWCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB0aGUgaW5pdGlhbCBleGFtaW5hdGlvbiwgaXQncyBjbGVhciB0aGUgcHJpbWFyeSBmdW5jdGlvbiBvZiBpbnRlcmVzdCBpcyBgX19uZXN0ZWRfdm14X3ZtZXhpdGAuIEkndmUgYWxzbyBpZGVudGlmaWVkIHNldmVyYWwgb3RoZXIgcmVsYXRlZCBzeW1ib2xzIHRoYXQgYXJlIGxpa2VseSBpbXBhY3RlZCBieSB0aGlzIGNoYW5nZTogYG5lc3RlZF92bXhfZnJlZV92Y3B1YCwgYHZteF9sZWF2ZV9uZXN0ZWRgLCBgdm14X2VudGVyX3NtbWAsIGFuZCBgbmVzdGVkX3ZteF9yZWZsZWN0X3ZtZXhpdGAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGtleSBwbGF5ZXJzIGluIHRoaXMgbmVzdGVkIFZNWCBjb250ZXh0LlxuXG5OZXh0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEl0J3MgYWxtb3N0IGNlcnRhaW4gdGhpcyBpbnZvbHZlcyBgQ09ORklHX0tWTWAgYW5kIGBDT05GSUdfS1ZNX0lOVEVMYC4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBLYnVpbGQgZmlsZXMgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzLiBBaCwgeWVzLCBpbiBgYXJjaC94ODYva3ZtL01ha2VmaWxlYCwgdGhlIGluY2x1c2lvbiBvZiBga3ZtLWludGVsLm9gIGFuZCBpdHMgbmVzdGVkIGNvbXBvbmVudCBgdm14L25lc3RlZC5vYCBhcmUgZ292ZXJuZWQgYnkgYENPTkZJR19LVk1fSU5URUxgLCB3aGljaCBpdHNlbGYgZGVwZW5kcyBvbiBvciBzZWxlY3RzIGBLVk1gLiBTbywgdGhlIHByZXJlcXVpc2l0ZSBjb25maWd1cmF0aW9ucyBhcmUgZGVmaW5pdGVseSBgS1ZNYCBhbmQgYEtWTV9JTlRFTGAsIGFzIEkgc3VzcGVjdGVkLlxuXG5Ob3csIGxldCdzIHN1bW1hcml6ZSB0aGUgZnV6emluZyBzdHJhdGVneS4gVGhlIGNoYW5nZSB0byBgX19uZXN0ZWRfdm14X3ZtZXhpdCgpYCBhcHBlYXJzIHRvIHNraXAgZmx1c2hpbmcgdGhlIHNoYWRvdyBWTUNTMTIgdW5kZXIgc3BlY2lmaWMgY29uZGl0aW9uczogd2hlbiBgdm1fZXhpdF9yZWFzb24gPT0gLTFgLiBUaGlzIHBhcnRpY3VsYXJseSBoYXBwZW5zIGR1cmluZyB2Q1BVIHRlYXJkb3duIG9yIHdoZW4gZW50ZXJpbmcgU01NIChTeXN0ZW0gTWFuYWdlbWVudCBNb2RlKS4gVGhlIGNvcmUgY29uY2VybiBpcyB0byBhdm9pZCBtZW1vcnkgY29ycnVwdGlvbiwgcGFydGljdWxhcmx5IHdoZW4gYGN1cnJlbnQtXHUwMDNlbW1gIGlzIE5VTEwuIFRoaXMgcG9pbnRzIHRvIGEgdnVsbmVyYWJpbGl0eSB3aXRoaW4gY29yZSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gbG9naWMgb24geDg2L2FtZDY0LiBTbywgaXQgZGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nLlxuXG5NeSBjb25jbHVzaW9uOiBnaXZlbiB0aGUgcGF0Y2gncyBmb2N1cyBvbiBhIGNyaXRpY2FsIGFyZWEgb2YgbmVzdGVkIFZNWCwgd2l0aCBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gd2hlbiBzcGVjaWZpYyBjb25kaXRpb25zIChsaWtlIHZDUFUgdGVhcmRvd24pIG9jY3VyLCBmdXp6aW5nIGlzIGFuIGVmZmVjdGl2ZSBzdHJhdGVneS4gSXQncyBhIGhpZ2gtaW1wYWN0IGFyZWEgYW5kIHdvcnRoIGZvY3VzaW5nIG9uLiBMZXQncyBzZXQgdGhlIHJlc3VsdHMgYW5kIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwOTIsIk91dHB1dFRva2VucyI6MTk3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6MTA6MTcuOTg3NDA0NTc5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM2NTY3MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0lOVEVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19uZXN0ZWRfdm14X3ZtZXhpdFwiLFxuICAgIFwidm14X2xlYXZlX25lc3RlZFwiLFxuICAgIFwidm14X2VudGVyX3NtbVwiLFxuICAgIFwibmVzdGVkX3ZteF9yZWZsZWN0X3ZtZXhpdFwiLFxuICAgIFwibmVzdGVkX3ZteF9mcmVlX3ZjcHVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBfX25lc3RlZF92bXhfdm1leGl0KCkgaW4gS1ZNIG5lc3RlZCBWTVggc3VwcG9ydCAoYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYykgdG8gcHJldmVudCBmbHVzaGluZyBjYWNoZWQgc2hhZG93IFZNQ1MxMiB3aGVuIHBlcmZvcm1pbmcgYSBmb3JjZWQgbmVzdGVkIFZNLWV4aXQgKHZtX2V4aXRfcmVhc29uID09IC0xLCBlLmcuIGR1cmluZyB2Q1BVIHRlYXJkb3duIG9yIFNNTSBlbnRyeSkuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocyBpbiBjb3JlIEtWTSB2aXJ0dWFsaXphdGlvbiBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIG9uIGFtZDY0LCB3YXJyYW50aW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSU5URUxcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX25lc3RlZF92bXhfdm1leGl0XCIsXG4gICAgXCJ2bXhfbGVhdmVfbmVzdGVkXCIsXG4gICAgXCJ2bXhfZW50ZXJfc21tXCIsXG4gICAgXCJuZXN0ZWRfdm14X3JlZmxlY3Rfdm1leGl0XCIsXG4gICAgXCJuZXN0ZWRfdm14X2ZyZWVfdmNwdVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIF9fbmVzdGVkX3ZteF92bWV4aXQoKSBpbiBLVk0gbmVzdGVkIFZNWCBzdXBwb3J0IChhcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jKSB0byBwcmV2ZW50IGZsdXNoaW5nIGNhY2hlZCBzaGFkb3cgVk1DUzEyIHdoZW4gcGVyZm9ybWluZyBhIGZvcmNlZCBuZXN0ZWQgVk0tZXhpdCAodm1fZXhpdF9yZWFzb24gPT0gLTEsIGUuZy4gZHVyaW5nIHZDUFUgdGVhcmRvd24gb3IgU01NIGVudHJ5KS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzIGluIGNvcmUgS1ZNIHZpcnR1YWxpemF0aW9uIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2Ugb24gYW1kNjQsIHdhcnJhbnRpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6MTA6MTguMDcxMDY5ODI4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTIxNDk4ODIxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE2OjEwOjE4LjA3MTcxOTIyOFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI5MjE0MzM1NjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBuZXN0ZWQgVk1YIFZNLWV4aXQgaGFuZGxpbmcgaW4gS1ZNIChgX19uZXN0ZWRfdm14X3ZtZXhpdGApIHRvIHNraXAgY2FsbGluZyBgbmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyKClgIHdoZW4gYHZtX2V4aXRfcmVhc29uID09IC0xYCAoZS5nLiwgZHVyaW5nIHZDUFUgdGVhcmRvd24gb3IgU01NIGVudHJ5KS4gVGhpcyBwcmV2ZW50cyBpbGxlZ2FsIGd1ZXN0IG1lbW9yeSB3cml0ZXMgb24gYm9ycm93ZWQgbGF6eSBUTEIgbW0gY29udGV4dHMgZHVyaW5nIHRlYXJkb3duLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBidWZmZXJzLCByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBleHBvc2UgdW5pbml0aWFsaXplZCBmaWVsZHMsIG9yIGxlYWsga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBTdGFuZGFyZCBLQVNBTiBhbmQgZ2VuZXJhbCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGMyNGMzOTg2ZDRkNTVkMDBlODA3MTY0OTNiYmMxMDlkM2FhYjZjMTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDE2OjA5OjQxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYyBiL2FyY2gveDg2L2t2bS92bXgvbmVzdGVkLmNcbmluZGV4IDE1MTg3MzQwN2FiZDMuLjMzZGM4YTA3MDE5ZjggMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jXG5AQCAtNTEyMSwyMSArNTEyMSwyOCBAQCB2b2lkIF9fbmVzdGVkX3ZteF92bWV4aXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdm1fZXhpdF9yZWFzb24sXG4gXHRpZiAobGlrZWx5KCF2bXgtXHUwMDNlZmFpbCkpIHtcbiBcdFx0c3luY192bWNzMDJfdG9fdm1jczEyKHZjcHUsIHZtY3MxMik7XG4gXG4tXHRcdGlmICh2bV9leGl0X3JlYXNvbiAhPSAtMSlcbitcdFx0aWYgKHZtX2V4aXRfcmVhc29uICE9IC0xKSB7XG4gXHRcdFx0cHJlcGFyZV92bWNzMTIodmNwdSwgdm1jczEyLCB2bV9leGl0X3JlYXNvbixcbiBcdFx0XHRcdCAgICAgICBleGl0X2ludHJfaW5mbywgZXhpdF9xdWFsaWZpY2F0aW9uLFxuIFx0XHRcdFx0ICAgICAgIGV4aXRfaW5zbl9sZW4pO1xuIFxuLVx0XHQvKlxuLVx0XHQgKiBNdXN0IGhhcHBlbiBvdXRzaWRlIG9mIHN5bmNfdm1jczAyX3RvX3ZtY3MxMigpIGFzIGl0IHdpbGxcbi1cdFx0ICogYWxzbyBiZSB1c2VkIHRvIGNhcHR1cmUgdm1jczEyIGNhY2hlIGFzIHBhcnQgb2Zcbi1cdFx0ICogY2FwdHVyaW5nIG5WTVggc3RhdGUgZm9yIHNuYXBzaG90IChtaWdyYXRpb24pLlxuLVx0XHQgKlxuLVx0XHQgKiBPdGhlcndpc2UsIHRoaXMgZmx1c2ggd2lsbCBkaXJ0eSBndWVzdCBtZW1vcnkgYXQgYVxuLVx0XHQgKiBwb2ludCBpdCBpcyBhbHJlYWR5IGFzc3VtZWQgYnkgdXNlci1zcGFjZSB0byBiZVxuLVx0XHQgKiBpbW11dGFibGUuXG4tXHRcdCAqL1xuLVx0XHRuZXN0ZWRfZmx1c2hfY2FjaGVkX3NoYWRvd192bWNzMTIodmNwdSwgdm1jczEyKTtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIE11c3QgaGFwcGVuIG91dHNpZGUgb2Ygc3luY192bWNzMDJfdG9fdm1jczEyKCkgYXMgaXQgd2lsbFxuK1x0XHRcdCAqIGFsc28gYmUgdXNlZCB0byBjYXB0dXJlIHZtY3MxMiBjYWNoZSBhcyBwYXJ0IG9mXG4rXHRcdFx0ICogY2FwdHVyaW5nIG5WTVggc3RhdGUgZm9yIHNuYXBzaG90IChtaWdyYXRpb24pLlxuK1x0XHRcdCAqXG4rXHRcdFx0ICogT3RoZXJ3aXNlLCB0aGlzIGZsdXNoIHdpbGwgZGlydHkgZ3Vlc3QgbWVtb3J5IGF0IGFcbitcdFx0XHQgKiBwb2ludCBpdCBpcyBhbHJlYWR5IGFzc3VtZWQgYnkgdXNlci1zcGFjZSB0byBiZVxuK1x0XHRcdCAqIGltbXV0YWJsZS5cbitcdFx0XHQgKlxuK1x0XHRcdCAqIERvIG5vdCBmbHVzaCB3aGVuIHZtX2V4aXRfcmVhc29uID09IC0xIChlLmcuIGZvcmNlZCBleGl0XG4rXHRcdFx0ICogb24gdkNQVSB0ZWFyZG93biBvciBTTU0gZW50cnkpLiBPbiB0ZWFyZG93biwgS1ZNIG1heSBydW5cbitcdFx0XHQgKiB3aXRoIGN1cnJlbnQtXHUwMDNlbW0gPT0gTlVMTCBvbiBhIGJvcnJvd2VkIGxhenkgVExCIG1tLFxuK1x0XHRcdCAqIHdoZXJlIHdyaXRpbmcgZ3Vlc3QgbWVtb3J5IHdvdWxkIGNvcnJ1cHQgYW4gdW5yZWxhdGVkXG4rXHRcdFx0ICogdGFzay4gTm90aGluZyBjYW4gb2JzZXJ2ZSB0aGUgZmx1c2ggaW4gdGhhdCBjYXNlIGFueXdheS5cbitcdFx0XHQgKi9cbitcdFx0XHRuZXN0ZWRfZmx1c2hfY2FjaGVkX3NoYWRvd192bWNzMTIodmNwdSwgdm1jczEyKTtcbitcdFx0fVxuIFx0fSBlbHNlIHtcbiBcdFx0LypcbiBcdFx0ICogVGhlIG9ubHkgZXhwZWN0ZWQgVk0taW5zdHJ1Y3Rpb24gZXJyb3IgaXMgXCJWTSBlbnRyeSB3aXRoXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjoxMDoxOC4wNzE3MjA5MThaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTAwMDE0NTY1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXN0ZWQgVk1YIE9wdGltaXphdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBGcm9tIHRoZSBkaWZmLCBJIGNhbiBzZWUgYSBjaGFuZ2Ugd2l0aGluIHRoZSBgX19uZXN0ZWRfdm14X3ZtZXhpdGAgZnVuY3Rpb24gaW4gYG5lc3RlZC5jYC4gVGhlIGNvcmUgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBoYW5kbGluZyB0aGUgVk1DUzEyIGNhY2hlIGZsdXNoIGFmdGVyIHN5bmNocm9uaXppbmcgYHZtY3MwMmAgdG8gYHZtY3MxMmAuIEkga25vdyB0aGF0IHRoaXMgaXMgaW1wb3J0YW50IGluIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBmb3IgdGhpbmdzIGxpa2Ugc25hcHNob3R0aW5nIGFuZCBtaWdyYXRpb24sIHdoZXJlIHdlIG5lZWQgdG8gZW5zdXJlIGd1ZXN0IG1lbW9yeSBpcyBjb25zaXN0ZW50LlxuXG5Jbml0aWFsbHksIHRoZSBmbHVzaCBoYXBwZW5lZCB1bmNvbmRpdGlvbmFsbHkgYWZ0ZXIgdGhlIHN5bmMuIE5vdyBJJ20gc2VlaW5nIGEgY29uZGl0aW9uYWwgY2hlY2sgaGVyZS4gVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhpcyBgaWYgKHZtX2V4aXRfcmVhc29uICE9IC0xKWAgY29uZGl0aW9uLiBJdCBhcHBlYXJzIHdlJ3JlIG9wdGltaXppbmcgYnkgKm9ubHkqIGZsdXNoaW5nIHRoZSBjYWNoZSBpZiB0aGUgYHZtX2V4aXRfcmVhc29uYCBpc24ndCBlcXVhbCB0byAtMS4gVGhhdCBzdWdnZXN0cyB3ZSBkb24ndCBuZWVkIHRvIGZsdXNoIGluIGNlcnRhaW4gVk0gZXhpdCBzY2VuYXJpb3MuIFRoZSBjb21tZW50IGNsYXJpZmllcyB0aGlzOiBhIFZNIGV4aXQgcmVhc29uIG9mIC0xIHNpZ25pZmllcyB2Q1BVIHRlYXJkb3duIG9yIFNNTSBlbnRyeSwgYW5kIGluIHRoZXNlIGNhc2VzLCBmbHVzaGluZyBpc24ndCBuZWNlc3NhcnkgYW5kIGNvdWxkIGV2ZW4gbGVhZCB0byBpc3N1ZXMgcmVsYXRlZCB0byBtZW1vcnkgY29ycnVwdGlvbi4gSW50ZXJlc3RpbmcgdG8gc2VlIHRoaXMgb3B0aW1pemF0aW9uIGJlaW5nIG1hZGUuXG5cbkl0IHNlZW1zIGxpa2Ugd2UncmUgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBidWcgb3IgcGVyZm9ybWFuY2UgaW5lZmZpY2llbmN5LiBUaGUgbmV3IGNvZGUgcHJldmVudHMgYSBwb3RlbnRpYWxseSB1bm5lY2Vzc2FyeSB3cml0ZSB0byBndWVzdCBtZW1vcnkgd2hlbiB0aGUgVk0gaXMgYmVpbmcgdG9ybiBkb3duLiBUaGlzIG1ha2VzIHNlbnNlOyBkdXJpbmcgdGVhcmRvd24gb3IgU01NIGVudHJ5LCB0aGUgY3VycmVudCBwcm9jZXNzIG1pZ2h0IG5vdCBoYXZlIGEgdmFsaWQgbWVtb3J5IG1hcHBpbmcsIGFuZCBhdHRlbXB0aW5nIGEgZmx1c2ggY291bGQgbGVhZCB0byBiYWQgdGhpbmdzLiBUaGUgYWRkZWQgY2hlY2sgc2VlbXMgbGlrZSBhIGdvb2Qgc2FmZXR5IG1lYXN1cmUgYW5kIHBvdGVudGlhbGx5IGEgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQuIEknbGwgbmVlZCB0byBrZWVwIHRoaXMgaW4gbWluZCB3aGVuIEkgZXhhbWluZSBwb3RlbnRpYWwgaXNzdWVzLCBwYXJ0aWN1bGFybHkgd2l0aCBtaWdyYXRpb24gYW5kIHN0YXRlIHNhdmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUzMCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE2OjEwOjIzLjA3MTg2OTM2MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDc0NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MTA1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MTA1OlxcdFxcdCAqIHVwLXRvLWRhdGUgYmVmb3JlIHN3aXRjaGluZyB0byBMMS5cXG41MTA2OlxcdFxcdCAqL1xcbjUxMDc6XFx0XFx0aWYgKGVuYWJsZV9lcHQgXFx1MDAyNlxcdTAwMjYgaXNfcGFlX3BhZ2luZyh2Y3B1KSlcXG41MTA4OlxcdFxcdFxcdHZteF9lcHRfbG9hZF9wZHB0cnModmNwdSk7XFxuNTEwOTpcXHRcXG41MTEwOlxcdFxcdGxlYXZlX2d1ZXN0X21vZGUodmNwdSk7XFxuNTExMTpcXHRcXG41MTEyOlxcdFxcdGlmIChuZXN0ZWRfY3B1X2hhc19wcmVlbXB0aW9uX3RpbWVyKHZtY3MxMikpXFxuNTExMzpcXHRcXHRcXHRocnRpbWVyX2NhbmNlbChcXHUwMDI2dG9fdm14KHZjcHUpLVxcdTAwM2VuZXN0ZWQucHJlZW1wdGlvbl90aW1lcik7XFxuNTExNDpcXHRcXG41MTE1OlxcdFxcdGlmIChuZXN0ZWRfY3B1X2hhcyh2bWNzMTIsIENQVV9CQVNFRF9VU0VfVFNDX09GRlNFVFRJTkcpKSB7XFxuNTExNjpcXHRcXHRcXHR2Y3B1LVxcdTAwM2VhcmNoLnRzY19vZmZzZXQgPSB2Y3B1LVxcdTAwM2VhcmNoLmwxX3RzY19vZmZzZXQ7XFxuNTExNzpcXHRcXHRcXHRpZiAobmVzdGVkX2NwdV9oYXMyKHZtY3MxMiwgU0VDT05EQVJZX0VYRUNfVFNDX1NDQUxJTkcpKVxcbjUxMTg6XFx0XFx0XFx0XFx0dmNwdS1cXHUwMDNlYXJjaC50c2Nfc2NhbGluZ19yYXRpbyA9IHZjcHUtXFx1MDAzZWFyY2gubDFfdHNjX3NjYWxpbmdfcmF0aW87XFxuNTExOTpcXHRcXHR9XFxuNTEyMDpcXHRcXG41MTIxOlxcdFxcdGlmIChsaWtlbHkoIXZteC1cXHUwMDNlZmFpbCkpIHtcXG41MTIyOlxcdFxcdFxcdHN5bmNfdm1jczAyX3RvX3ZtY3MxMih2Y3B1LCB2bWNzMTIpO1xcbjUxMjM6XFx0XFxuNTEyNDpcXHRcXHRcXHRpZiAodm1fZXhpdF9yZWFzb24gIT0gLTEpIHtcXG41MTI1OlxcdFxcdFxcdFxcdHByZXBhcmVfdm1jczEyKHZjcHUsIHZtY3MxMiwgdm1fZXhpdF9yZWFzb24sXFxuNTEyNjpcXHRcXHRcXHRcXHRcXHQgICAgICAgZXhpdF9pbnRyX2luZm8sIGV4aXRfcXVhbGlmaWNhdGlvbixcXG41MTI3OlxcdFxcdFxcdFxcdFxcdCAgICAgICBleGl0X2luc25fbGVuKTtcXG41MTI4OlxcdFxcbjUxMjk6XFx0XFx0XFx0XFx0LypcXG41MTMwOlxcdFxcdFxcdFxcdCAqIE11c3QgaGFwcGVuIG91dHNpZGUgb2Ygc3luY192bWNzMDJfdG9fdm1jczEyKCkgYXMgaXQgd2lsbFxcbjUxMzE6XFx0XFx0XFx0XFx0ICogYWxzbyBiZSB1c2VkIHRvIGNhcHR1cmUgdm1jczEyIGNhY2hlIGFzIHBhcnQgb2ZcXG41MTMyOlxcdFxcdFxcdFxcdCAqIGNhcHR1cmluZyBuVk1YIHN0YXRlIGZvciBzbmFwc2hvdCAobWlncmF0aW9uKS5cXG41MTMzOlxcdFxcdFxcdFxcdCAqXFxuNTEzNDpcXHRcXHRcXHRcXHQgKiBPdGhlcndpc2UsIHRoaXMgZmx1c2ggd2lsbCBkaXJ0eSBndWVzdCBtZW1vcnkgYXQgYVxcbjUxMzU6XFx0XFx0XFx0XFx0ICogcG9pbnQgaXQgaXMgYWxyZWFkeSBhc3N1bWVkIGJ5IHVzZXItc3BhY2UgdG8gYmVcXG41MTM2OlxcdFxcdFxcdFxcdCAqIGltbXV0YWJsZS5cXG41MTM3OlxcdFxcdFxcdFxcdCAqXFxuNTEzODpcXHRcXHRcXHRcXHQgKiBEbyBub3QgZmx1c2ggd2hlbiB2bV9leGl0X3JlYXNvbiA9PSAtMSAoZS5nLiBmb3JjZWQgZXhpdFxcbjUxMzk6XFx0XFx0XFx0XFx0ICogb24gdkNQVSB0ZWFyZG93biBvciBTTU0gZW50cnkpLiBPbiB0ZWFyZG93biwgS1ZNIG1heSBydW5cXG41MTQwOlxcdFxcdFxcdFxcdCAqIHdpdGggY3VycmVudC1cXHUwMDNlbW0gPT0gTlVMTCBvbiBhIGJvcnJvd2VkIGxhenkgVExCIG1tLFxcbjUxNDE6XFx0XFx0XFx0XFx0ICogd2hlcmUgd3JpdGluZyBndWVzdCBtZW1vcnkgd291bGQgY29ycnVwdCBhbiB1bnJlbGF0ZWRcXG41MTQyOlxcdFxcdFxcdFxcdCAqIHRhc2suIE5vdGhpbmcgY2FuIG9ic2VydmUgdGhlIGZsdXNoIGluIHRoYXQgY2FzZSBhbnl3YXkuXFxuNTE0MzpcXHRcXHRcXHRcXHQgKi9cXG41MTQ0OlxcdFxcdFxcdFxcdG5lc3RlZF9mbHVzaF9jYWNoZWRfc2hhZG93X3ZtY3MxMih2Y3B1LCB2bWNzMTIpO1xcbjUxNDU6XFx0XFx0XFx0fVxcbjUxNDY6XFx0XFx0fSBlbHNlIHtcXG41MTQ3OlxcdFxcdFxcdC8qXFxuNTE0ODpcXHRcXHRcXHQgKiBUaGUgb25seSBleHBlY3RlZCBWTS1pbnN0cnVjdGlvbiBlcnJvciBpcyBcXFwiVk0gZW50cnkgd2l0aFxcbjUxNDk6XFx0XFx0XFx0ICogaW52YWxpZCBjb250cm9sIGZpZWxkKHMpLlxcXCIgQW55dGhpbmcgZWxzZSBpbmRpY2F0ZXMgYVxcbjUxNTA6XFx0XFx0XFx0ICogcHJvYmxlbSB3aXRoIEwwLlxcbjUxNTE6XFx0XFx0XFx0ICovXFxuNTE1MjpcXHRcXHRcXHRXQVJOX09OX09OQ0Uodm1jc19yZWFkMzIoVk1fSU5TVFJVQ1RJT05fRVJST1IpICE9XFxuNTE1MzpcXHRcXHRcXHRcXHQgICAgIFZNWEVSUl9FTlRSWV9JTlZBTElEX0NPTlRST0xfRklFTEQpO1xcbjUxNTQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE2OjEwOjIzLjA3MjMxODkwMloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTgxOTcxNjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2Ygd2hhdCBJJ20gbG9va2luZyBhdCwgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqSW52ZXN0aWdhdGluZyBgbmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyYCBhbmQgdGhlIFNpZ25pZmljYW5jZSBvZiBgLTFgIFZNIEV4aXQgUmVhc29uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIGBuZXN0ZWRfZmx1c2hfY2FjaGVkX3NoYWRvd192bWNzMTJgIGFuZCBpbW1lZGlhdGVseSB3YW50IHRvIHVuZGVyc3RhbmQgaXRzIGZ1bmN0aW9uLiBHaXZlbiBteSBiYWNrZ3JvdW5kIGluIHZpcnR1YWxpemF0aW9uLCBteSBwcmltYXJ5IHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGZsb3cgb2YgZXhlY3V0aW9uIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGluIHdoaWNoIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLiBJJ20gZXNwZWNpYWxseSBrZWVuIG9uIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgc2hhZG93IFZNQ1MgKFZpcnR1YWwgTWFjaGluZSBDb250cm9sIFN0cnVjdHVyZSksIGEgY3JpdGljYWwgYXJlYSBpbiBuZXN0ZWQgdmlydHVhbGl6YXRpb24sIEkgbmVlZCB0byBsb29rIGNsb3NlciB0byBzaGFkb3cgVk1DIGZvciB0aGUgcHVycG9zZSBvZiB2aXJ0dWFsaXppbmcgbmVzdGVkIFZNWCwgd2l0aCB0aGUgc3BlY2lmaWMgZW1waGFzaXMgb24gYHZtY3MxMmAgd2hpY2ggaXMgdXNlZCBmb3IgbmVzdGVkIHZpcnR1YWxpemF0aW9uLlxuXG5UaGUga2V5IHRyaWdnZXIgZm9yIG15IGludmVzdGlnYXRpb24gaXMgdGhlIGAtMWAgdmFsdWUgYmVpbmcgcGFzc2VkIGFzIHRoZSBgdm1fZXhpdF9yZWFzb25gLiBUaGlzIGltbWVkaWF0ZWx5IHNjcmVhbXMgXCJlcnJvciBjb25kaXRpb25cIiBvciBcInVuaW5pdGlhbGl6ZWQgdmFsdWVcIiBpbiB0aGlzIGRvbWFpbi4gQSBzdGFuZGFyZCBWTSBleGl0IHJlYXNvbiBpcyAqbmV2ZXIqIG5lZ2F0aXZlLCBhbmQgSSBiZXQgaXQncyBzb21ldGhpbmcgc3BlY2lhbCwgbm90IGp1c3QgYSByYW5kb20gdW5kZWZpbmVkIGJpdCBwYXR0ZXJuLCBJJ20gdGhpbmtpbmcgaXRzIHJlbGF0ZWQgdG8gYSBmYWlsdXJlIG9yIHVuZXhwZWN0ZWQgc3RhdGUgaW4gdGhlIFZNIGV4aXQgaGFuZGxpbmcgcHJvY2Vzcy4gSXQgaW1wbGllcyBhIHByb2JsZW0sIGxpa2VseSBhdCBhIHZlcnkgbG93IGxldmVsIGluIHRoZSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gc3RhY2suIFRoaXMgYHZtX2V4aXRfcmVhc29uYCBzaG91bGQgcHJvdmlkZSBjcml0aWNhbCBjbHVlcy4gSSdtIGdvaW5nIHRvIGZvbGxvdyB0aGVzZSBjbHVlcywgSSBrbm93IGl0cyByZWxhdGVkIHRvIHRoZSBWTSBleGl0IHJlYXNvbi5cblxuVGhlcmVmb3JlLCBteSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kICp3aHkqIGNhbGxlcnMgYXJlIHBhc3NpbmcgYC0xYC4gSSBuZWVkIHRvIHRyYWNrIGRvd24gYWxsIHJlZmVyZW5jZXMgdG8gdGhpcyBmdW5jdGlvbiBhbmQgbWV0aWN1bG91c2x5IGV4YW1pbmUgdGhlIGNvZGUgdGhhdCdzIHN1cHBseWluZyB0aGlzIHZhbHVlLCBzbyBJIGNhbiBzZWUgd2hhdCBjb25kaXRpb25zIGxlYWQgdG8gdGhhdCBzdGF0ZS4gVGhpcyBpcyBsaWtlbHkgYSBrZXkgaW5kaWNhdG9yIG9mIGEgYnVnLCBvciBhbiB1bnVzdWFsIGVkZ2UgY2FzZSB0aGF0IG5lZWRzIHZlcnkgY2FyZWZ1bCBjb25zaWRlcmF0aW9uLiBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIGNvZGUgc2VhcmNoIGFuZCBnbyBmcm9tIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTE1LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjoxMDoyNi4yNTQyOTMxNjhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NjEwMTEwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9ODUxPXN0YXRpYyB2b2lkIG5lc3RlZF9jYWNoZV9zaGFkb3dfdm1jczEyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtODY5LVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM6ODcwOnN0YXRpYyB2b2lkIG5lc3RlZF9mbHVzaF9jYWNoZWRfc2hhZG93X3ZtY3MxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy04NzEtXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHZtY3MxMiAqdm1jczEyKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz01MDczPXZvaWQgX19uZXN0ZWRfdm14X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2bV9leGl0X3JlYXNvbixcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTE0My1cXHRcXHRcXHQgKi9cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjUxNDQ6XFx0XFx0XFx0bmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyKHZjcHUsIHZtY3MxMik7XFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01MTQ1LVxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6MTA6MjguMjE1MzEwMzM4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5Njg3NTI2NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBuZXN0ZWRfZmx1c2hfY2FjaGVkX3NoYWRvd192bWNzMTJgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIGBuZXN0ZWRfZmx1c2hfY2FjaGVkX3NoYWRvd192bWNzMTJgLiBNeSBwcmltYXJ5IGludGVyZXN0IGhlcmUgaXMgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgaW50cmljYWNpZXMgb2YgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciBjYWNoaW5nIGFuZCBzaGFkb3cgVk1DUzEyIHN0cnVjdHVyZXMuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHVuZGVyc3RhbmQ6XG5cbiogICAqKlRoZSBjb250ZXh0OioqIFdoZXJlIGRvZXMgdGhpcyBmdW5jdGlvbiBmaXQgaW50byB0aGUgYnJvYWRlciBoeXBlcnZpc29yIG9wZXJhdGlvbiwgYW5kIHdoYXQgdHJpZ2dlcnMgaXRzIGV4ZWN1dGlvbj8gSXMgdGhpcyBwYXJ0IG9mIGEgVk0gZXhpdCBwYXRoLCBhbiBpbnRlcnJ1cHQgaGFuZGxlciwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/XG4qICAgKipTaGFkb3cgVk1DUzEyIG1hbmlwdWxhdGlvbjoqKiBJIGV4cGVjdCB0aGlzIGZ1bmN0aW9uIHRvIGFkZHJlc3MgcG90ZW50aWFsIGluY29uc2lzdGVuY2llcyBiZXR3ZWVuIHRoZSBwaHlzaWNhbCBWTUNTMTIgYW5kIHRoZSBzaGFkb3dlZCB2ZXJzaW9uIHVzZWQgYnkgdGhlIG5lc3RlZCBWTS4gQXJlIHRoZXJlIHNwZWNpZmljIHNjZW5hcmlvcyB3aGVyZSB0aGUgY2FjaGUgbmVlZHMgdG8gYmUgZmx1c2hlZCBvciB1cGRhdGVkLCBhbmQgd2hhdCBhcmUgdGhvc2UgdHJpZ2dlcnM/XG4qICAgKipQZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9uczoqKiBDYWNoaW5nIGlzIHVzdWFsbHkgZG9uZSBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4gVW5kZXJzdGFuZGluZyB0aGUgdHJhZGUtb2ZmcyBiZXR3ZWVuIGNhY2hlIGNvaGVyZW5jZSBhbmQgdGhlIG92ZXJoZWFkIG9mIGZsdXNoaW5nIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgcGVyZm9ybWFuY2UgcHJvZmlsZS4gV2hhdCBhcmUgdGhlIGhldXJpc3RpY3Mgb3IgcG9saWNpZXMgZW1wbG95ZWQgZm9yIG1ha2luZyBmbHVzaGluZyBkZWNpc2lvbnM/XG4qICAgKipTZWN1cml0eSBpbXBsaWNhdGlvbnM6KiogU2hhZG93aW5nIGNhbiBiZSB1c2VkIHRvIHByb3RlY3QgdGhlIGd1ZXN0IE9TIGZyb20gYWNjZXNzaW5nIHRoZSBoeXBlcnZpc29yJ3Mgc2Vuc2l0aXZlIGluZm9ybWF0aW9uLiBBcmUgdGhlcmUgYW55IHNlY3VyaXR5LXNlbnNpdGl2ZSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBhbmQgaG93IGFyZSB0aGV5IGJlaW5nIHByb3RlY3RlZCB0aHJvdWdoIHRoaXMgb3BlcmF0aW9uP1xuKiAgICoqSGFyZHdhcmUgYXNzdW1wdGlvbnM6KiogQXJlIHRoZXJlIGFueSBpbXBsaWNpdCBhc3N1bXB0aW9ucyBhYm91dCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSAoZS5nLiwgc3BlY2lmaWMgQ1BVIGZlYXR1cmVzLCBjYWNoZSBjb2hlcmVuY3kgbWVjaGFuaXNtcykgdGhhdCBhcmUgcmVsZXZhbnQgdG8gdGhpcyBmdW5jdGlvbidzIGxvZ2ljPyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgYW55IGhhcmR3YXJlIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGFmZmVjdCBpdHMgcG9ydGFiaWxpdHkgb3Igcm9idXN0bmVzcy5cblxuRXNzZW50aWFsbHksIEknbSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUgaW4gZW5zdXJpbmcgY29ycmVjdCBhbmQgZWZmaWNpZW50IG5lc3RlZCB2aXJ0dWFsaXphdGlvbi4gSSdtIGhvcGluZyB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGUgaG9zdCwgZ3Vlc3QsIGFuZCBuZXN0ZWQgdmlydHVhbCBtYWNoaW5lcyBhcyB0aGV5IGludGVyYWN0IHdpdGggdGhlIFZNQ1MxMi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI3NSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE2OjEwOjMxLjE4NDA2NTYyNFoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjEzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NjA6XFx0XFxuIDg2MTpcXHRcXHRpZiAoZ2hjLVxcdTAwM2VncGEgIT0gdm1jczEyLVxcdTAwM2V2bWNzX2xpbmtfcG9pbnRlciBcXHUwMDI2XFx1MDAyNlxcbiA4NjI6XFx0XFx0ICAgIGt2bV9nZm5fdG9faHZhX2NhY2hlX2luaXQodmNwdS1cXHUwMDNla3ZtLCBnaGMsXFxuIDg2MzpcXHRcXHRcXHRcXHRcXHQgICAgICB2bWNzMTItXFx1MDAzZXZtY3NfbGlua19wb2ludGVyLCBWTUNTMTJfU0laRSkpXFxuIDg2NDpcXHRcXHRcXHRyZXR1cm47XFxuIDg2NTpcXHRcXG4gODY2OlxcdFxcdGt2bV9yZWFkX2d1ZXN0X2NhY2hlZCh2Y3B1LVxcdTAwM2Vrdm0sIGdoYywgZ2V0X3NoYWRvd192bWNzMTIodmNwdSksXFxuIDg2NzpcXHRcXHRcXHRcXHQgICAgICBWTUNTMTJfU0laRSk7XFxuIDg2ODpcXHR9XFxuIDg2OTpcXHRcXG4gODcwOlxcdHN0YXRpYyB2b2lkIG5lc3RlZF9mbHVzaF9jYWNoZWRfc2hhZG93X3ZtY3MxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuIDg3MTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgdm1jczEyICp2bWNzMTIpXFxuIDg3MjpcXHR7XFxuIDg3MzpcXHRcXHRzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTtcXG4gODc0OlxcdFxcdHN0cnVjdCBnZm5fdG9faHZhX2NhY2hlICpnaGMgPSBcXHUwMDI2dm14LVxcdTAwM2VuZXN0ZWQuc2hhZG93X3ZtY3MxMl9jYWNoZTtcXG4gODc1OlxcdFxcbiA4NzY6XFx0XFx0aWYgKCFuZXN0ZWRfY3B1X2hhc19zaGFkb3dfdm1jcyh2bWNzMTIpIHx8XFxuIDg3NzpcXHRcXHQgICAgdm1jczEyLVxcdTAwM2V2bWNzX2xpbmtfcG9pbnRlciA9PSBJTlZBTElEX0dQQSlcXG4gODc4OlxcdFxcdFxcdHJldHVybjtcXG4gODc5OlxcdFxcbiA4ODA6XFx0XFx0aWYgKGdoYy1cXHUwMDNlZ3BhICE9IHZtY3MxMi1cXHUwMDNldm1jc19saW5rX3BvaW50ZXIgXFx1MDAyNlxcdTAwMjZcXG4gODgxOlxcdFxcdCAgICBrdm1fZ2ZuX3RvX2h2YV9jYWNoZV9pbml0KHZjcHUtXFx1MDAzZWt2bSwgZ2hjLFxcbiA4ODI6XFx0XFx0XFx0XFx0XFx0ICAgICAgdm1jczEyLVxcdTAwM2V2bWNzX2xpbmtfcG9pbnRlciwgVk1DUzEyX1NJWkUpKVxcbiA4ODM6XFx0XFx0XFx0cmV0dXJuO1xcbiA4ODQ6XFx0XFxuIDg4NTpcXHRcXHRrdm1fd3JpdGVfZ3Vlc3RfY2FjaGVkKHZjcHUtXFx1MDAzZWt2bSwgZ2hjLCBnZXRfc2hhZG93X3ZtY3MxMih2Y3B1KSxcXG4gODg2OlxcdFxcdFxcdFxcdCAgICAgICBWTUNTMTJfU0laRSk7XFxuIDg4NzpcXHR9XFxuIDg4ODpcXHRcXG4gODg5OlxcdC8qXFxuIDg5MDpcXHQgKiBJbiBuZXN0ZWQgdmlydHVhbGl6YXRpb24sIGNoZWNrIGlmIEwxIGhhcyBzZXRcXG4gODkxOlxcdCAqIFZNX0VYSVRfQUNLX0lOVFJfT05fRVhJVFxcbiA4OTI6XFx0ICovXFxuIDg5MzpcXHRzdGF0aWMgYm9vbCBuZXN0ZWRfZXhpdF9pbnRyX2Fja19zZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiA4OTQ6XFx0e1xcbiA4OTU6XFx0XFx0cmV0dXJuIGdldF92bWNzMTIodmNwdSktXFx1MDAzZXZtX2V4aXRfY29udHJvbHMgXFx1MDAyNlxcbiA4OTY6XFx0XFx0XFx0Vk1fRVhJVF9BQ0tfSU5UUl9PTl9FWElUO1xcbiA4OTc6XFx0fVxcbiA4OTg6XFx0XFxuIDg5OTpcXHRzdGF0aWMgaW50IG5lc3RlZF92bXhfY2hlY2tfYXBpY19hY2Nlc3NfY29udHJvbHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjoxMDozMS4xODQ0ODg3MjRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA3Mjk5ODY5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgUG90ZW50aWFsbHkgVW5oYW5kbGVkIFZNLUV4aXQgQ29uZGl0aW9ucyoqXG5cbkFscmlnaHQsIEknbSBkaWdnaW5nIGludG8gc29tZSBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBWTS1leGl0cywgc3BlY2lmaWNhbGx5IHRob3NlIHdoZXJlIHRoZSBgdm1fZXhpdF9yZWFzb25gIGNvZGUgaXMgaW5kaWNhdGluZyBzb21ldGhpbmcgbGlrZSBgLTFgLCBvciBhbnl0aGluZyB0aGF0IGZsYWdzIGFzIGEgZ2VuZXJhbCwgdW5oYW5kbGVkIGNhc2UuIE15IGN1cnJlbnQgc3RyYXRlZ3kgaXMgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGxvY2F0aW9ucyBpbiB0aGUgY29kZSB0aGF0IGFyZSBpbnZva2luZyBgX19uZXN0ZWRfdm14X3ZtZXhpdGAgd2l0aCB0aGVzZSB1bmRlc2lyYWJsZSBleGl0IHJlYXNvbiB2YWx1ZXMuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mICp3aHkqIHdlJ3JlIHNlZWluZyB0aGVzZSBcImNhdGNoLWFsbFwiIGV4aXRzLiBBcmUgdGhlc2UgZ2VudWluZWx5IHVuaGFuZGxlZCBjYXNlcywgb3IgYXJlIHRoZXJlIHN1YnRsZSBlcnJvciBjb25kaXRpb25zIG9yIGVkZ2UgY2FzZXMgdGhhdCB3ZSBoYXZlbid0IGFjY291bnRlZCBmb3I/IEFyZSB3ZSBtaXNzaW5nIGEgc3BlY2lmaWMgYHZtX2V4aXRfaGFuZGxlcmAgb3IgZmFpbGluZyB0byBjb3JyZWN0bHkgaW50ZXJwcmV0IGNlcnRhaW4gZmxhZ3M/IEkgbmVlZCB0byBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIGNvbnRleHQgdG8gdW5kZXJzdGFuZCB0aGUgc3lzdGVtJ3Mgc3RhdGUgd2hlbiB0aGVzZSBleGl0cyBvY2N1ci4gV2hhdCByZWdpc3RlcnMgYXJlIHNldD8gV2hhdCBndWVzdCBpbnN0cnVjdGlvbnMgYXJlIHdlIGV4ZWN1dGluZz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSB1bmRlZmluZWQgZXhpdHMgb24gc3lzdGVtIHN0YWJpbGl0eSBhbmQgc2VjdXJpdHk/IFVsdGltYXRlbHksIEkgd2FudCB0byBpZGVudGlmeSBhbnkgZmxhd3MgaW4gb3VyIFZNTSdzIGV4aXQgaGFuZGxpbmcsIHdpdGggdGhlIGdvYWwgb2YgbWl0aWdhdGluZyBhbnkgcG90ZW50aWFsIGV4cGxvaXRzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3JzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDc0LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjoxMDozMy4yNTc0OTA0OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk3MzU4NDQwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX25lc3RlZF92bXhfdm1leGl0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9NDk2MD1zdGF0aWMgdm9pZCBuZXN0ZWRfdm14X3Jlc3RvcmVfaG9zdF9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTUwNzItICovXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1MDczOnZvaWQgX19uZXN0ZWRfdm14X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2bV9leGl0X3JlYXNvbixcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jLTUwNzQtXFx0XFx0XFx0IHUzMiBleGl0X2ludHJfaW5mbywgdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oPTI5PWJvb2wgbmVzdGVkX3ZteF9yZWZsZWN0X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmg6MzA6dm9pZCBfX25lc3RlZF92bXhfdm1leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZtX2V4aXRfcmVhc29uLFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmgtMzEtXFx0XFx0XFx0IHUzMiBleGl0X2ludHJfaW5mbywgdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24sXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oPTM0PXN0YXRpYyBpbmxpbmUgdm9pZCBuZXN0ZWRfdm14X3ZtZXhpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2bV9leGl0X3JlYXNvbixcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmgtNDUtXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuaDo0NjpcXHRfX25lc3RlZF92bXhfdm1leGl0KHZjcHUsIHZtX2V4aXRfcmVhc29uLCBleGl0X2ludHJfaW5mbyxcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5oLTQ3LVxcdFxcdFxcdCAgICBleGl0X3F1YWxpZmljYXRpb24sIGV4aXRfaW5zbl9sZW4pO1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYz04MTkwPWludCB2bXhfY2hlY2tfaW50ZXJjZXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODI4MC1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjgyODE6XFx0X19uZXN0ZWRfdm14X3ZtZXhpdCh2Y3B1LCB2bV9leGl0X3JlYXNvbiwgMCwgZXhpdF9xdWFsaWZpY2F0aW9uLFxcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODI4Mi1cXHRcXHRcXHQgICAgZXhpdF9pbnNuX2xlbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE2OjEwOjM1LjIzMTA4MTczMloiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTYzODQ4MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlRyYWNpbmcgRG93biAtMSBpbiBOZXN0ZWQgVk1YIFZNLUV4aXQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYC0xYCB2YWx1ZSBiZWluZyBwYXNzZWQgdG8gZWl0aGVyIGBuZXN0ZWRfdm14X3ZtZXhpdGAgb3IsIG1vcmUgZ2VuZXJhbGx5LCBgX19uZXN0ZWRfdm14X3ZtZXhpdGAuIFRoZSBjb250ZXh0IGlzLCBJIHN1c3BlY3QsIHJlbGF0ZWQgdG8gc29tZSBraW5kIG9mIFZNLWV4aXQgZHVyaW5nIG5lc3RlZCB2aXJ0dWFsaXphdGlvbi4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byB1c2UgbXkgdG9vbHMgdG8gbG9jYXRlIHRoZXNlIHNwZWNpZmljIGZ1bmN0aW9uIGNhbGxzLiBJJ2xsIG5lZWQgdG8gdXNlIGVpdGhlciBhIGRlYnVnZ2VyLCBvciBwZXJoYXBzIGEgZ3JlcCBjb21iaW5lZCB3aXRoIHNvbWUgc291cmNlIGNvZGUgbmF2aWdhdGlvbiwgdG8gcGlucG9pbnQgdGhlIGV4YWN0IGNhbGwgc2l0ZXMgZm9yIHRob3NlIGZ1bmN0aW9ucywgZm9jdXNpbmcgb24gaG93IHRoaXMgYC0xYCBpcyBwcm9wYWdhdGVkLlxuXG5UaGUgY29yZSBxdWVzdGlvbiBpcywgd2hlcmUgZG9lcyB0aGlzIHZhbHVlIG9yaWdpbmF0ZT8gSXQncyB1bmxpa2VseSB0byBiZSBhIGJlbmlnbiByZXR1cm4gY29kZS4gSXQgbGlrZWx5IHNpZ25pZmllcyBhbiBlcnJvciwgYSBmYWlsdXJlIHRvIGhhbmRsZSB0aGUgZ3Vlc3QncyBpbnN0cnVjdGlvbiBhdCB0aGUgbmVzdGVkIGxldmVsLCBvciBtYXliZSBhbiBpc3N1ZSBkdXJpbmcgdGhlIHByb2Nlc3Mgb2YgcmV0dXJuaW5nIGNvbnRyb2wgdG8gdGhlIGhvc3QuIElzIHRoaXMgY29taW5nIGZyb20gdGhlIG5lc3RlZCBWTU0gaXRzZWxmPyBJcyBpdCBhbiBpbmRpY2F0aW9uIHRoYXQgdGhlIG5lc3RlZCBndWVzdCB0cmllZCB0byBkbyBzb21ldGhpbmcgaXQgc2hvdWxkbid0IGhhdmU/XG5cbkkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBzb3VyY2VzIG9mIHRoZXNlIGAtMWAgdmFsdWVzIGFuZCB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIEFyZSB3ZSBzZWVpbmcgdGhpcyBhY3Jvc3MgYSB3aWRlIHJhbmdlIG9mIGluc3RydWN0aW9ucy9vcGVyYXRpb25zIHdpdGhpbiB0aGUgbmVzdGVkIFZNLCBvciBpcyBpdCBpc29sYXRlZCB0byBzcGVjaWZpYyBpbnN0cnVjdGlvbiBjbGFzc2VzIG9yIHN5c3RlbSBldmVudHM/IE15IHN1c3BpY2lvbiBpcyBhIHBvdGVudGlhbCBtaXNjb25maWd1cmF0aW9uIG9yIGEgcmFjZSBjb25kaXRpb24gd2l0aGluIHRoZSBuZXN0ZWQgVk1NLCBvciBtYXliZSBldmVuIGEgYnVnIGluIHRoZSBWTS1leGl0IGhhbmRsaW5nLiBGdXJ0aGVyIGluc3BlY3Rpb24gb2YgcmVnaXN0ZXIgc3RhdGVzIGFuZCBjb250cm9sIHN0cnVjdHVyZXMgYXJvdW5kIHRoZSB0aW1lIG9mIHRoZSBWTS1leGl0IHdpbGwgYmUgbmVjZXNzYXJ5IHRvIGlkZW50aWZ5IHRoZSByb290IGNhdXNlLiBUaGlzIGAtMWAgaXMgYSBicmlnaHQgcmVkIGZsYWcsIGFuZCBJIG5lZWQgdG8gcmVzb2x2ZSB0aGlzIGFzIHF1aWNrbHkgYXMgcG9zc2libGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczODQsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNjoxMDozOC4zOTQ5MzI2MTFaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3OTMwNjY5MjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmVzdGVkX3ZteF92bWV4aXQuKi0xXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmM9Njg4ND12b2lkIHZteF9sZWF2ZV9uZXN0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy02ODg3LVxcdFxcdHZjcHUtXFx1MDAzZWFyY2gubmVzdGVkX3J1bl9wZW5kaW5nID0gMDtcXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjY4ODg6XFx0XFx0bmVzdGVkX3ZteF92bWV4aXQodmNwdSwgLTEsIDAsIDApO1xcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNjg4OS1cXHR9XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jPTg0ODI9aW50IHZteF9lbnRlcl9zbW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bmlvbiBrdm1fc21yYW0gKnNtcmFtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC92bXguYy04NDk0LVxcdGlmICh2bXgtXFx1MDAzZW5lc3RlZC5zbW0uZ3Vlc3RfbW9kZSlcXG5hcmNoL3g4Ni9rdm0vdm14L3ZteC5jOjg0OTU6XFx0XFx0bmVzdGVkX3ZteF92bWV4aXQodmNwdSwgLTEsIDAsIDApO1xcbmFyY2gveDg2L2t2bS92bXgvdm14LmMtODQ5Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTY6MTA6NDEuMTg4MDA0NjkzWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYwOTgwMzEwNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIE5lc3RlZCBWaXJ0dWFsaXphdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUganVzdCByZXZpZXdlZCB0aGlzIHBhdGNoIGFuZCwgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZywgaXQgYWRkcmVzc2VzIGEgc3BlY2lmaWMgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWUgd2l0aGluIEtWTSdzIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBpbXBsZW1lbnRhdGlvbi4gVGhlIGNvcmUgcHJvYmxlbSBpcyB0aGF0IGBuZXN0ZWRfZmx1c2hfY2FjaGVkX3NoYWRvd192bWNzMTIodmNwdSwgdm1jczEyKTtgIHdhcyBiZWluZyBleGVjdXRlZCBldmVuIHdoZW4gYSBWTSBleGl0IHdhcyBmb3JjZWQgKGluZGljYXRlZCBieSBgdm1fZXhpdF9yZWFzb24gPT0gLTFgKSwgc3VjaCBhcyBkdXJpbmcgdkNQVSB0ZWFyZG93biBvciB3aGVuIGVudGVyaW5nIFNNTS4gRHVyaW5nIHRlYXJkb3duLCBLVk0gc29tZXRpbWVzIG9wZXJhdGVzIHdpdGggYSBsYXp5IFRMQiBtbSB3aGVyZSBgY3VycmVudC1cdTAwM2VtbWAgaXMgYE5VTExgLCBhbmQgY2FsbGluZyBga3ZtX3dyaXRlX2d1ZXN0X2NhY2hlZGAgaW4gdGhhdCBjb250ZXh0IGxlYWRzIHRvIHdyaXRlcyB0byBtZW1vcnkgdGhhdCBpc24ndCB2YWxpZCBmb3IgdGhlIGN1cnJlbnQgY29udGV4dC4gVGhpcyBpcyB3aGF0J3MgY2F1c2luZyB0aGUgcHJvYmxlbSwgd2hpY2ggaGFzIHRoZSBwb3RlbnRpYWwgdG8gY29ycnVwdCBzb21lIHVucmVsYXRlZCB0YXNrJ3MgbWVtb3J5LlxuXG5UaGUgcGF0Y2gncyBzb2x1dGlvbiBpcyBzdHJhaWdodGZvcndhcmQ6IGl0IG1vdmVzIHRoZSBjYWxsIHRvIGBuZXN0ZWRfZmx1c2hfY2FjaGVkX3NoYWRvd192bWNzMTIodmNwdSwgdm1jczEyKTtgIGluc2lkZSB0aGUgZXhpc3RpbmcgYGlmICh2bV9leGl0X3JlYXNvbiAhPSAtMSlgIGJsb2NrLiBUaGlzIHdheSwgdGhlIGZ1bmN0aW9uIGlzICpvbmx5KiBjYWxsZWQgd2hlbiB0aGVyZSdzIGEgdmFsaWQgVk0gZXhpdCByZWFzb24sIGF2b2lkaW5nIHRoZSBwcm9ibGVtYXRpYyBleGVjdXRpb24gcGF0aCBkdXJpbmcgdGVhcmRvd24gb3IgU01NIGVudHJ5LlxuXG5Ob3csIG15IGV2YWx1YXRpb24gZm9jdXNlcyBvbiB3aGV0aGVyIHRoaXMgY2hhbmdlIHdhcnJhbnRzIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgYW5hbHlzaXMuIExldCdzIGJyZWFrIGRvd24gbXkgcmVhc29uaW5nOlxuXG5JJ3ZlIGV4YW1pbmVkIHRoZSBjb2RlIGZvcjpcblxuMS4gICoqSW50ZXJhY3Rpb24gd2l0aCB1c2Vyc3BhY2U6KiogSSBsb29rZWQgZm9yIGFueSBtb2RpZmljYXRpb25zIHRvIGtlcm5lbCBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2Vyc3BhY2UgdmlhIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBuZXRsaW5rLCBpb2N0bCwgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzLiBUaGVyZSBhcmUgbm9uZS4gVGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBvciBhbHRlciBhbnkgb2YgdGhlc2UgaW50ZXJhY3Rpb25zLlxuMi4gICoqVW5pbml0aWFsaXplZCB2YXJpYWJsZS9maWVsZCB1c2U6KiogSSBjYXJlZnVsbHkgY2hlY2tlZCBmb3IgY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgbWlnaHQgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMsIGFzIHdlbGwgYXMgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci4gSSBmb3VuZCBubyBldmlkZW5jZSBvZiBhbnkuXG4zLiAgKipNZW1vcnkgYWNjZXNzIHBhdHRlcm5zOioqIEkgYW5hbHl6ZWQgdGhlIHBhdGNoIGZvciBhbnkgY2hhbmdlcyB0byBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0IGNvdWxkIGxlYWQgdG8gYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgaW4gZXhpc3RpbmcgYnVmZmVycy4gTm90aGluZyBoZXJlLlxuXG5UaGUga2V5IHBvaW50IGhlcmUgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIHNvbGVseSBmb2N1c2VkIG9uICpwcmV2ZW50aW5nKiBhIHNwZWNpZmljIHdyaXRlIG9wZXJhdGlvbiB1bmRlciBjZXJ0YWluIGNpcmN1bXN0YW5jZXMuIEl0IGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIG5ldyBzdHJ1Y3R1cmVzLCBvciBpbnRlcmFjdGlvbnMgd2l0aCB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgbWVjaGFuaXNtcyB0aGF0IHdvdWxkIGJlIG9mIGNvbmNlcm4gZm9yIEtNU0FOLiBJdCdzIHN0cmljdGx5IGFib3V0IGEgY29udHJvbCBmbG93IG1vZGlmaWNhdGlvbi5cblxuS01TQU4gaXMgZGVzaWduZWQgdG8gZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvcm1hdGlvbiBsZWFrcyBvZiBrZXJuZWwgbWVtb3J5IHRvIHVzZXJzcGFjZS4gSW4gdGhpcyBjYXNlLCB0aGUgZml4IGFkZHJlc3NlcyBhIHdyaXRlIGlzc3VlLCBub3QgYSByZWFkIGlzc3VlLiBLTVNBTiB3b3VsZG4ndCBiZSBwYXJ0aWN1bGFybHkgaGVscGZ1bCBoZXJlLiBSZWd1bGFyIEtBU0FOIGFuZCBzdGFuZGFyZCBkZWJ1Z2dpbmcga2VybmVscyBzaG91bGQgYmUgc3VmZmljaWVudC4gSSdtIGNvbmZpZGVudCB0aGF0IHRoaXMgY2hhbmdlIGRvZXMgKm5vdCogbmVlZCBLTVNBTiwgYW5kIHNvIHRoZSBgTmVlZHNLTVNBTmAgZmxhZyBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAuXG5cblNvLCBmcm9tIG15IHBlcnNwZWN0aXZlLCB0aGUgcGF0Y2ggc2FmZWx5IHByZXZlbnRzIGEgZ3Vlc3QgbWVtb3J5IHdyaXRlIHdoZW4gaXQgaXMgcnVubmluZyB3aXRob3V0IGEgdmFsaWQgTU0sIGFuZCBkb2VzIG5vdCByZXF1aXJlIGFueSBzcGVjaWFsIGFuYWx5c2lzIGJleW9uZCBzdGFuZGFyZCBkZWJ1Z2dpbmcgYW5kIHRlc3RpbmcuIFRoaXMgaXMgYSBtZW1vcnkgY29ycnVwdGlvbiBmaXggd2l0aGluIHRoZSBsaWZlY3ljbGUgb2YgdGhlIGd1ZXN0LCBhbmQgdGhlcmUgYXJlIG5vIGluZm8tbGVha3MgaW52b2x2ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxMTcsIk91dHB1dFRva2VucyI6MTY4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE2OjEwOjQ3LjI4NjAzODM4NloiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbmVzdGVkIFZNWCBWTS1leGl0IGhhbmRsaW5nIGluIEtWTSAoYF9fbmVzdGVkX3ZteF92bWV4aXRgKSB0byBza2lwIGNhbGxpbmcgYG5lc3RlZF9mbHVzaF9jYWNoZWRfc2hhZG93X3ZtY3MxMigpYCB3aGVuIGB2bV9leGl0X3JlYXNvbiA9PSAtMWAgKGUuZy4sIGR1cmluZyB2Q1BVIHRlYXJkb3duIG9yIFNNTSBlbnRyeSkuIFRoaXMgcHJldmVudHMgaWxsZWdhbCBndWVzdCBtZW1vcnkgd3JpdGVzIG9uIGJvcnJvd2VkIGxhenkgVExCIG1tIGNvbnRleHRzIGR1cmluZyB0ZWFyZG93bi5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgYnVmZmVycywgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciBsZWFrIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gU3RhbmRhcmQgS0FTQU4gYW5kIGdlbmVyYWwga2VybmVsIGRlYnVnZ2luZyB0b29scyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBuZXN0ZWQgVk1YIFZNLWV4aXQgaGFuZGxpbmcgaW4gS1ZNIChgX19uZXN0ZWRfdm14X3ZtZXhpdGApIHRvIHNraXAgY2FsbGluZyBgbmVzdGVkX2ZsdXNoX2NhY2hlZF9zaGFkb3dfdm1jczEyKClgIHdoZW4gYHZtX2V4aXRfcmVhc29uID09IC0xYCAoZS5nLiwgZHVyaW5nIHZDUFUgdGVhcmRvd24gb3IgU01NIGVudHJ5KS4gVGhpcyBwcmV2ZW50cyBpbGxlZ2FsIGd1ZXN0IG1lbW9yeSB3cml0ZXMgb24gYm9ycm93ZWQgbGF6eSBUTEIgbW0gY29udGV4dHMgZHVyaW5nIHRlYXJkb3duLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBidWZmZXJzLCByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBleHBvc2UgdW5pbml0aWFsaXplZCBmaWVsZHMsIG9yIGxlYWsga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBTdGFuZGFyZCBLQVNBTiBhbmQgZ2VuZXJhbCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGFyZSBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxm8kf[1] Phase: Succeeded StartedAt: 2026-09-08 16:10:58 +0000 UTC FinishedAt: 2026-09-08 16:10:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxm8kf[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-08 16:10:58 +0000 UTC FinishedAt: 2026-09-08 16:10:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxm8kf[2] Phase: Succeeded StartedAt: 2026-09-08 16:10:58 +0000 UTC FinishedAt: 2026-09-08 19:52:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxm8kf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__nested_vmx_vmexit","vmx_leave_nested","vmx_enter_smm","nested_vmx_reflect_vmexit","nested_vmx_free_vcpu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"793ba96f-4789-4722-9f98-d7ae853a2a85","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-08 16:10:58 +0000 UTC FinishedAt: 2026-09-08 19:52:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__nested_vmx_vmexit","vmx_leave_nested","vmx_enter_smm","nested_vmx_reflect_vmexit","nested_vmx_free_vcpu"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"793ba96f-4789-4722-9f98-d7ae853a2a85","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowxm8kf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__nested_vmx_vmexit","vmx_leave_nested","vmx_enter_smm","nested_vmx_reflect_vmexit","nested_vmx_free_vcpu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"793ba96f-4789-4722-9f98-d7ae853a2a85","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-08 16:10:58 +0000 UTC FinishedAt: 2026-09-08 16:11:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxm8kf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__nested_vmx_vmexit","vmx_leave_nested","vmx_enter_smm","nested_vmx_reflect_vmexit","nested_vmx_free_vcpu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"793ba96f-4789-4722-9f98-d7ae853a2a85","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-08 16:10:58 +0000 UTC FinishedAt: 2026-09-08 16:11:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflowxm8kf/series-workflowxm8kf-convert-artifact-1084657207/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxm8kf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__nested_vmx_vmexit","vmx_leave_nested","vmx_enter_smm","nested_vmx_reflect_vmexit","nested_vmx_free_vcpu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"793ba96f-4789-4722-9f98-d7ae853a2a85","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-08 16:11:08 +0000 UTC FinishedAt: 2026-09-08 16:28:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxm8kf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__nested_vmx_vmexit","vmx_leave_nested","vmx_enter_smm","nested_vmx_reflect_vmexit","nested_vmx_free_vcpu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"793ba96f-4789-4722-9f98-d7ae853a2a85","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-08 16:11:08 +0000 UTC FinishedAt: 2026-09-08 16:28:10 +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:*0d924056-48ff-45da-8e28-b9860cb7c5bf,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-workflowxm8kf/series-workflowxm8kf-convert-artifact-1084657207/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": "712df2b8-8596-4e8a-bfaa-d0e462c6fc7d", "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-workflowxm8kf/series-workflowxm8kf-build-action-1774972301/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxm8kf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__nested_vmx_vmexit","vmx_leave_nested","vmx_enter_smm","nested_vmx_reflect_vmexit","nested_vmx_free_vcpu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"793ba96f-4789-4722-9f98-d7ae853a2a85","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-08 16:11:08 +0000 UTC FinishedAt: 2026-09-08 16:28:00 +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:*0d924056-48ff-45da-8e28-b9860cb7c5bf,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-workflowxm8kf/series-workflowxm8kf-convert-artifact-1084657207/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": "712df2b8-8596-4e8a-bfaa-d0e462c6fc7d", "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-workflowxm8kf/series-workflowxm8kf-build-action-1774972301/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxm8kf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__nested_vmx_vmexit","vmx_leave_nested","vmx_enter_smm","nested_vmx_reflect_vmexit","nested_vmx_free_vcpu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"793ba96f-4789-4722-9f98-d7ae853a2a85","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-08 16:28:10 +0000 UTC FinishedAt: 2026-09-08 16:28:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxm8kf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__nested_vmx_vmexit","vmx_leave_nested","vmx_enter_smm","nested_vmx_reflect_vmexit","nested_vmx_free_vcpu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"793ba96f-4789-4722-9f98-d7ae853a2a85","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-08 16:28:10 +0000 UTC FinishedAt: 2026-09-08 16:28:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxm8kf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__nested_vmx_vmexit","vmx_leave_nested","vmx_enter_smm","nested_vmx_reflect_vmexit","nested_vmx_free_vcpu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"793ba96f-4789-4722-9f98-d7ae853a2a85","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-08 16:28:10 +0000 UTC FinishedAt: 2026-09-08 16:28:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxm8kf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__nested_vmx_vmexit","vmx_leave_nested","vmx_enter_smm","nested_vmx_reflect_vmexit","nested_vmx_free_vcpu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"793ba96f-4789-4722-9f98-d7ae853a2a85","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-08 16:28:10 +0000 UTC FinishedAt: 2026-09-08 16:28:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"793ba96f-4789-4722-9f98-d7ae853a2a85","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflowxm8kf/series-workflowxm8kf-convert-artifact-1129017446/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxm8kf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__nested_vmx_vmexit","vmx_leave_nested","vmx_enter_smm","nested_vmx_reflect_vmexit","nested_vmx_free_vcpu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"793ba96f-4789-4722-9f98-d7ae853a2a85","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-08 16:28:21 +0000 UTC FinishedAt: 2026-09-08 16:30:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxm8kf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__nested_vmx_vmexit","vmx_leave_nested","vmx_enter_smm","nested_vmx_reflect_vmexit","nested_vmx_free_vcpu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"793ba96f-4789-4722-9f98-d7ae853a2a85","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-08 16:28:21 +0000 UTC FinishedAt: 2026-09-08 16:30:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*712df2b8-8596-4e8a-bfaa-d0e462c6fc7d,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-workflowxm8kf/series-workflowxm8kf-build-action-1774972301/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-workflowxm8kf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__nested_vmx_vmexit","vmx_leave_nested","vmx_enter_smm","nested_vmx_reflect_vmexit","nested_vmx_free_vcpu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"793ba96f-4789-4722-9f98-d7ae853a2a85","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-08 16:30:16 +0000 UTC FinishedAt: 2026-09-08 16:30:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxm8kf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__nested_vmx_vmexit","vmx_leave_nested","vmx_enter_smm","nested_vmx_reflect_vmexit","nested_vmx_free_vcpu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"793ba96f-4789-4722-9f98-d7ae853a2a85","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-08 16:30:16 +0000 UTC FinishedAt: 2026-09-08 16:30:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxm8kf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__nested_vmx_vmexit","vmx_leave_nested","vmx_enter_smm","nested_vmx_reflect_vmexit","nested_vmx_free_vcpu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"793ba96f-4789-4722-9f98-d7ae853a2a85","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-08 16:30:16 +0000 UTC FinishedAt: 2026-09-08 16:47:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxm8kf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__nested_vmx_vmexit","vmx_leave_nested","vmx_enter_smm","nested_vmx_reflect_vmexit","nested_vmx_free_vcpu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"793ba96f-4789-4722-9f98-d7ae853a2a85","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-08 16:30:16 +0000 UTC FinishedAt: 2026-09-08 16:47:44 +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:*0d924056-48ff-45da-8e28-b9860cb7c5bf,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-workflowxm8kf/series-workflowxm8kf-convert-artifact-1129017446/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": "7e51b8a3-dc27-41be-95f8-e57e73b65507", "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-workflowxm8kf/series-workflowxm8kf-build-action-874784298/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxm8kf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__nested_vmx_vmexit","vmx_leave_nested","vmx_enter_smm","nested_vmx_reflect_vmexit","nested_vmx_free_vcpu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"793ba96f-4789-4722-9f98-d7ae853a2a85","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-08 16:30:16 +0000 UTC FinishedAt: 2026-09-08 16:47:34 +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:*0d924056-48ff-45da-8e28-b9860cb7c5bf,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-workflowxm8kf/series-workflowxm8kf-convert-artifact-1129017446/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": "7e51b8a3-dc27-41be-95f8-e57e73b65507", "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-workflowxm8kf/series-workflowxm8kf-build-action-874784298/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxm8kf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__nested_vmx_vmexit","vmx_leave_nested","vmx_enter_smm","nested_vmx_reflect_vmexit","nested_vmx_free_vcpu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"793ba96f-4789-4722-9f98-d7ae853a2a85","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-08 16:47:44 +0000 UTC FinishedAt: 2026-09-08 16:47:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxm8kf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__nested_vmx_vmexit","vmx_leave_nested","vmx_enter_smm","nested_vmx_reflect_vmexit","nested_vmx_free_vcpu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"793ba96f-4789-4722-9f98-d7ae853a2a85","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-08 16:47:44 +0000 UTC FinishedAt: 2026-09-08 16:47:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxm8kf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__nested_vmx_vmexit","vmx_leave_nested","vmx_enter_smm","nested_vmx_reflect_vmexit","nested_vmx_free_vcpu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"793ba96f-4789-4722-9f98-d7ae853a2a85","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-08 16:47:44 +0000 UTC FinishedAt: 2026-09-08 16:49:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxm8kf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__nested_vmx_vmexit","vmx_leave_nested","vmx_enter_smm","nested_vmx_reflect_vmexit","nested_vmx_free_vcpu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"793ba96f-4789-4722-9f98-d7ae853a2a85","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-08 16:47:44 +0000 UTC FinishedAt: 2026-09-08 16:49:29 +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:*7e51b8a3-dc27-41be-95f8-e57e73b65507,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-workflowxm8kf/series-workflowxm8kf-build-action-874784298/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-workflowxm8kf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__nested_vmx_vmexit","vmx_leave_nested","vmx_enter_smm","nested_vmx_reflect_vmexit","nested_vmx_free_vcpu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"793ba96f-4789-4722-9f98-d7ae853a2a85","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-08 16:49:39 +0000 UTC FinishedAt: 2026-09-08 19:52:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxm8kf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__nested_vmx_vmexit","vmx_leave_nested","vmx_enter_smm","nested_vmx_reflect_vmexit","nested_vmx_free_vcpu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"793ba96f-4789-4722-9f98-d7ae853a2a85","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-08 16:49:39 +0000 UTC FinishedAt: 2026-09-08 19:52:47 +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":["__nested_vmx_vmexit","vmx_leave_nested","vmx_enter_smm","nested_vmx_reflect_vmexit","nested_vmx_free_vcpu"],"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:*712df2b8-8596-4e8a-bfaa-d0e462c6fc7d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7e51b8a3-dc27-41be-95f8-e57e73b65507,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-workflowxm8kf/series-workflowxm8kf-build-action-1774972301/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-workflowxm8kf/series-workflowxm8kf-build-action-874784298/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowxm8kf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__nested_vmx_vmexit","vmx_leave_nested","vmx_enter_smm","nested_vmx_reflect_vmexit","nested_vmx_free_vcpu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"793ba96f-4789-4722-9f98-d7ae853a2a85","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-08 16:49:39 +0000 UTC FinishedAt: 2026-09-08 16:49:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxm8kf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__nested_vmx_vmexit","vmx_leave_nested","vmx_enter_smm","nested_vmx_reflect_vmexit","nested_vmx_free_vcpu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"793ba96f-4789-4722-9f98-d7ae853a2a85","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-08 16:49:39 +0000 UTC FinishedAt: 2026-09-08 16:49:43 +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":["__nested_vmx_vmexit","vmx_leave_nested","vmx_enter_smm","nested_vmx_reflect_vmexit","nested_vmx_free_vcpu"],"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-workflowxm8kf/series-workflowxm8kf-convert-artifact-1708713643/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxm8kf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__nested_vmx_vmexit","vmx_leave_nested","vmx_enter_smm","nested_vmx_reflect_vmexit","nested_vmx_free_vcpu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"793ba96f-4789-4722-9f98-d7ae853a2a85","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-08 16:49:39 +0000 UTC FinishedAt: 2026-09-08 16:49:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxm8kf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__nested_vmx_vmexit","vmx_leave_nested","vmx_enter_smm","nested_vmx_reflect_vmexit","nested_vmx_free_vcpu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"793ba96f-4789-4722-9f98-d7ae853a2a85","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-08 16:49:39 +0000 UTC FinishedAt: 2026-09-08 16:49:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxm8kf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__nested_vmx_vmexit","vmx_leave_nested","vmx_enter_smm","nested_vmx_reflect_vmexit","nested_vmx_free_vcpu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"793ba96f-4789-4722-9f98-d7ae853a2a85","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-08 16:49:39 +0000 UTC FinishedAt: 2026-09-08 16:49:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxm8kf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__nested_vmx_vmexit","vmx_leave_nested","vmx_enter_smm","nested_vmx_reflect_vmexit","nested_vmx_free_vcpu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"793ba96f-4789-4722-9f98-d7ae853a2a85","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-08 16:49:49 +0000 UTC FinishedAt: 2026-09-08 19:52:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxm8kf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["__nested_vmx_vmexit","vmx_leave_nested","vmx_enter_smm","nested_vmx_reflect_vmexit","nested_vmx_free_vcpu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d4b7fb647204f0c81dfeae2d1a708e4d858e0c94","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_INTEL"],"series_id":"793ba96f-4789-4722-9f98-d7ae853a2a85","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-08 16:49:49 +0000 UTC FinishedAt: 2026-09-08 19:52:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*712df2b8-8596-4e8a-bfaa-d0e462c6fc7d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7e51b8a3-dc27-41be-95f8-e57e73b65507,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-workflowxm8kf/series-workflowxm8kf-build-action-1774972301/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-workflowxm8kf/series-workflowxm8kf-build-action-874784298/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-workflowxm8kf/series-workflowxm8kf-convert-artifact-1708713643/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,}