Name: series-workflow2mfjq Phase: Failed StartedAt: 2026-09-10 23:41:22 +0000 UTC FinishedAt: 2026-09-10 23:59:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mfjq[0] Phase: Succeeded StartedAt: 2026-09-10 23:41:22 +0000 UTC FinishedAt: 2026-09-10 23:58:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mfjq[0].run-triage Phase: Succeeded StartedAt: 2026-09-10 23:41:22 +0000 UTC FinishedAt: 2026-09-10 23:58:57 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIzOjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdCBoYXJuZXNzZXMsIHNlbGZ0ZXN0IEJQRiB0ZXN0IHByb2dyYW1zLCBhbmQgYnVpbGQgaW5mcmFzdHJ1Y3R1cmUgd2l0aGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzLy4gTm9uZSBvZiB0aGUgY2hhbmdlcyBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMsIHNvIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjM6NTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjMDdiNGI1YmFmYmU2ZTFlZTgyNGM4MmQzYmFiYTAxZTg5ODk0MDAwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMjM6NTg6NDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvLmdpdGlnbm9yZVxuaW5kZXggOTUyZTQ0NDhiZjA3MC4uNTYxYTNlODkxYjk4YyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC8uZ2l0aWdub3JlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvLmdpdGlnbm9yZVxuQEAgLTYsNyAmIzQzOzYsMTUgQEAgdGVzdF9mcmVlemVyXG4gdGVzdF9odWdldGxiX21lbWNnXG4gdGVzdF9raWxsXG4gdGVzdF9rbWVtXG4mIzQzO3Rlc3RfbWVtY2dfc3RhdF9jcm9zc19jcHVcbiB0ZXN0X21lbWNvbnRyb2xcbiB0ZXN0X3BpZHNcbiB0ZXN0X3pzd2FwXG4gd2FpdF9pbm90aWZ5XG4mIzQzOyMgQXJ0aWZhY3RzIGdlbmVyYXRlZCBieSBsaWIuYnBmLm1rXG4mIzQzOy90b29sc1xuJiM0MzsvaG9zdC10b29sc1xuJiM0MzsqLmJwZi5vXG4mIzQzOyouYnBmLmRcbiYjNDM7Ki5saW5rZWQqLm9cbiYjNDM7Ki5za2VsLmhcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvTWFrZWZpbGVcbmluZGV4IGUwMTU4NGMyMTg5YWMuLmNiOTk5YmMyYzg3NWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9NYWtlZmlsZVxuQEAgLTIwLDkgJiM0MzsyMCw0NiBAQCBURVNUX0dFTl9QUk9HUyAmIzQzOz0gdGVzdF96c3dhcFxuIFxuIExPQ0FMX0hEUlMgJiM0Mzs9ICQoc2VsZmRpcikvY2xvbmUzL2Nsb25lM19zZWxmdGVzdHMuaCAkKHNlbGZkaXIpL3BpZGZkL3BpZGZkLmhcbiBcbiYjNDM7IyBSZXNvbHZlIENsYW5nIGVhcmx5IHNvIHRoZSBvcHRpb25hbCBCUEYgdGVzdCBjYW4gYmUgc2VsZWN0ZWQuXG4mIzQzO2lmbmVxICgkKGZpbHRlciAlLywkKExMVk0pKSwpXG4mIzQzO0NMQU5HID89ICQoTExWTSljbGFuZ1xuJiM0MztlbHNlXG4mIzQzO0NMQU5HID89IGNsYW5nJChmaWx0ZXIgLSUsJChMTFZNKSlcbiYjNDM7ZW5kaWZcbiYjNDM7UkVBREVMRiA/PSAkKENST1NTX0NPTVBJTEUpcmVhZGVsZlxuJiM0MztWTUxJTlVYX0JURl9QQVRIUyA/PSAkKGlmICQoTyksJChPKS92bWxpbnV4KVx0XHRcdFx0XFxcbiYjNDM7XHRcdCAgICAgJChpZiAkKEtCVUlMRF9PVVRQVVQpLCQoS0JVSUxEX09VVFBVVCkvdm1saW51eClcdFxcXG4mIzQzO1x0XHQgICAgIC4uLy4uLy4uLy4uL3ZtbGludXhcdFx0XHRcdFxcXG4mIzQzO1x0XHQgICAgIC9zeXMva2VybmVsL2J0Zi92bWxpbnV4XHRcdFx0XHRcXFxuJiM0MztcdFx0ICAgICAvYm9vdC92bWxpbnV4LSQoc2hlbGwgdW5hbWUgLXIpXG4mIzQzOyMgSWdub3JlIEVMRiBpbWFnZXMgd2l0aG91dCAuQlRGOyByYXcgc3lzZnMgQlRGIG5lZWRzIG5vIGNoZWNrLlxuJiM0MztWTUxJTlVYX0JURiA/PSAkKGFic3BhdGggJChmaXJzdHdvcmQgJChmb3JlYWNoIHYsJCh3aWxkY2FyZCAkKFZNTElOVVhfQlRGX1BBVEhTKSksXFxcbiYjNDM7XHRcdCAkKGlmICQoZmlsdGVyIC9zeXMva2VybmVsL2J0Zi8lLCQodikpLCQodiksXFxcbiYjNDM7XHRcdCAgICQoaWYgJChzaGVsbCAkKFJFQURFTEYpIC1TIFwmIzM0OyQodilcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbCB8IGdyZXAgLUYgLkJURiksJCh2KSkpKSkpXG4mIzQzOyMgQWNjZXB0IGVpdGhlciBhIHN1cHBsaWVkIGhlYWRlciBvciB1c2FibGUgQlRGLlxuJiM0MztIQVZFX0JQRiA6PSAkKGFuZCAkKG9yICQoVk1MSU5VWF9IKSwkKFZNTElOVVhfQlRGKSksXHRcdFx0XFxcbiYjNDM7XHRcdCAgJChzaGVsbCBjb21tYW5kIC12ICQoQ0xBTkcpIDJcdTAwM2UvZGV2L251bGwpKVxuJiM0MztcbiYjNDM7aWZuZXEgKCQoSEFWRV9CUEYpLClcbiYjNDM7VEVTVF9HRU5fUFJPR1MgJiM0Mzs9IHRlc3RfbWVtY2dfc3RhdF9jcm9zc19jcHVcbiYjNDM7QlBGX1NSQ1MgOj0gbWVtY2dfc3RhdF9jcm9zc19jcHUuYnBmLmNcbiYjNDM7IyBSZXBsYWNlIGxpYi5tayYjMzk7cyBsaW5rIHJ1bGUgYmVsb3cuXG4mIzQzO09WRVJSSURFX1RBUkdFVFMgOj0gMVxuJiM0MztlbmRpZlxuJiM0MztcbiBpbmNsdWRlIC4uL2xpYi5ta1xuIGluY2x1ZGUgbGliL2xpYmNncm91cC5ta1xuIFxuJiM0MztpZm5lcSAoJChIQVZFX0JQRiksKVxuJiM0MztpbmNsdWRlIC4uL2xpYi5icGYubWtcbiYjNDM7XG4mIzQzOyMgUmVzdG9yZSBsaWIubWsmIzM5O3MgcnVsZSBmb3Igbm9uLUJQRiB0ZXN0cy5cbiYjNDM7TE9DQUxfSERSUyAmIzQzOz0gJChzZWxmZGlyKS9rc2VsZnRlc3RfaGFybmVzcy5oICQoc2VsZmRpcikva3NlbGZ0ZXN0LmhcbiYjNDM7JChPVVRQVVQpLyU6ICUuYyAkKExPQ0FMX0hEUlMpXG4mIzQzO1x0JChjYWxsIG1zZyxDQywsJEApXG4mIzQzO1x0JChRKSQoTElOSy5jKSAkKGZpbHRlci1vdXQgJChMT0NBTF9IRFJTKSwkXikgJChMRExJQlMpIC1vICRAXG4mIzQzO2VuZGlmXG4mIzQzO1xuICQoT1VUUFVUKS90ZXN0X2NvcmU6ICQoTElCQ0dST1VQX08pXG4gJChPVVRQVVQpL3Rlc3RfY3B1OiAkKExJQkNHUk9VUF9PKVxuICQoT1VUUFVUKS90ZXN0X2NwdXNldDogJChMSUJDR1JPVVBfTylcbkBAIC0zMywzICYjNDM7NzAsMTIgQEAgJChPVVRQVVQpL3Rlc3Rfa21lbTogJChMSUJDR1JPVVBfTylcbiAkKE9VVFBVVCkvdGVzdF9tZW1jb250cm9sOiAkKExJQkNHUk9VUF9PKVxuICQoT1VUUFVUKS90ZXN0X3BpZHM6ICQoTElCQ0dST1VQX08pXG4gJChPVVRQVVQpL3Rlc3RfenN3YXA6ICQoTElCQ0dST1VQX08pXG4mIzQzO1xuJiM0MztpZm5lcSAoJChIQVZFX0JQRiksKVxuJiM0MzsjIEtlZXAgaW4tdHJlZSBVQVBJIGhlYWRlcnMgcHJpdmF0ZSB0byB0aGUgQlBGIHRlc3QuXG4mIzQzOyQoT1VUUFVUKS90ZXN0X21lbWNnX3N0YXRfY3Jvc3NfY3B1OiBwcml2YXRlIENGTEFHUyAmIzQzOz0gLUkkKHRvcF9zcmNkaXIpL3Rvb2xzL2luY2x1ZGUvdWFwaVxuJiM0MzsjIExpbmsgY2dyb3VwX3V0aWwgYW5kIHRoZSBza2VsZXRvbiBhZ2FpbnN0IHRoZSBpbi10cmVlIGxpYmJwZi5cbiYjNDM7JChPVVRQVVQpL3Rlc3RfbWVtY2dfc3RhdF9jcm9zc19jcHU6IHRlc3RfbWVtY2dfc3RhdF9jcm9zc19jcHUuYyBcXFxuJiM0MztcdFx0XHRcdFx0JChCUEZfU0tFTFMpICQoTElCQ0dST1VQX08pICQoQlBGT0JKKVxuJiM0MztcdCQoY2FsbCBicGZfbGluaywkQCwkXHUwMDNjICQoTElCQ0dST1VQX08pKVxuJiM0MztlbmRpZlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvY29uZmlnXG5pbmRleCAzOWY5Nzk2OTBkZDNiLi4xZjU4NWVkOWE1OTY3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2NvbmZpZ1xuQEAgLTQsMyAmIzQzOzQsOCBAQCBDT05GSUdfQ0dST1VQX0ZSRUVaRVI9eVxuIENPTkZJR19DR1JPVVBfU0NIRUQ9eVxuIENPTkZJR19NRU1DRz15XG4gQ09ORklHX1BBR0VfQ09VTlRFUj15XG4mIzQzO0NPTkZJR19CUEY9eVxuJiM0MztDT05GSUdfQlBGX1NZU0NBTEw9eVxuJiM0MztDT05GSUdfQlBGX0VWRU5UUz15XG4mIzQzO0NPTkZJR19ERUJVR19JTkZPX0JURj15XG4mIzQzO0NPTkZJR19ERUJVR19JTkZPX0RXQVJGND15XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9jZ3JvdXBfdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9jZ3JvdXBfdXRpbC5jXG5pbmRleCAyNTk2YzEyY2Q4NjQ1Li5jYTEyZDc5NGMwOTIxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9jZ3JvdXBfdXRpbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbGliL2Nncm91cF91dGlsLmNcbkBAIC01NCw2ICYjNDM7NTQsODggQEAgc3NpemVfdCB3cml0ZV90ZXh0KGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc3NpemVfdCBsZW4pXG4gXHRyZXR1cm4gbGVuIFx1MDAzYyAwID8gLWVycm5vIDogbGVuO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGNnX2dldF9pZCAtIHJldHVybiBhIGNncm91cCYjMzk7cyBrZXJuZnMgSURcbiYjNDM7ICogQGNncm91cDogYWJzb2x1dGUgY2dyb3VwIHBhdGhcbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBpcyBjZ3JwLVx1MDAzZWtuLVx1MDAzZWlkLCBub3Qgc3RfaW5vLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IElEIG9yIDAgb24gZmFpbHVyZS5cbiYjNDM7ICovXG4mIzQzO3Vuc2lnbmVkIGxvbmcgbG9uZyBjZ19nZXRfaWQoY29uc3QgY2hhciAqY2dyb3VwKVxuJiM0Mzt7XG4mIzQzO1x0dW5pb24ge1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBsb25nIGlkO1xuJiM0MztcdFx0dW5zaWduZWQgY2hhciByYXdbOF07XG4mIzQzO1x0fSBoYW5kbGU7XG4mIzQzO1x0c3RydWN0IGZpbGVfaGFuZGxlICpmaHAsICpmaHAyO1xuJiM0MztcdGludCBtb3VudF9pZCwgZmhzaXplLCBlcnI7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBsb25nIHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdGZoc2l6ZSA9IHNpemVvZigqZmhwKTtcbiYjNDM7XHRmaHAgPSBjYWxsb2MoMSwgZmhzaXplKTtcbiYjNDM7XHRpZiAoIWZocClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHQvKiBUaGUgZmFpbGVkIHByb2JlIHJlcG9ydHMgdGhlIGNncm91cGZzIGhhbmRsZSBzaXplLiAqL1xuJiM0MztcdGVyciA9IG5hbWVfdG9faGFuZGxlX2F0KEFUX0ZEQ1dELCBjZ3JvdXAsIGZocCwgXHUwMDI2bW91bnRfaWQsIDApO1xuJiM0MztcdGlmIChlcnIgXHUwMDNlPSAwIHx8IGZocC1cdTAwM2VoYW5kbGVfYnl0ZXMgIT0gOClcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRmaHNpemUgPSBzaXplb2YoKmZocCkgJiM0MzsgZmhwLVx1MDAzZWhhbmRsZV9ieXRlcztcbiYjNDM7XHRmaHAyID0gcmVhbGxvYyhmaHAsIGZoc2l6ZSk7XG4mIzQzO1x0aWYgKCFmaHAyKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0ZmhwID0gZmhwMjtcbiYjNDM7XG4mIzQzO1x0aWYgKG5hbWVfdG9faGFuZGxlX2F0KEFUX0ZEQ1dELCBjZ3JvdXAsIGZocCwgXHUwMDI2bW91bnRfaWQsIDApIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdG1lbWNweShoYW5kbGUucmF3LCBmaHAtXHUwMDNlZl9oYW5kbGUsIDgpO1xuJiM0MztcdHJldCA9IGhhbmRsZS5pZDtcbiYjNDM7b3V0OlxuJiM0MztcdGZyZWUoZmhwKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogY2dfdG91Y2hfcGFnZXMgLSBmYXVsdCBldmVyeSBwYWdlIGluIGEgcmVnaW9uXG4mIzQzOyAqIEBidWY6IHN0YXJ0IG9mIHRoZSByZWdpb25cbiYjNDM7ICogQHNpemU6IGxlbmd0aCBvZiB0aGUgcmVnaW9uIGluIGJ5dGVzXG4mIzQzOyAqXG4mIzQzOyAqIFBhZ2VzIGFyZSBjaGFyZ2VkIHRvIHRoZSBjYWxsZXImIzM5O3MgY2dyb3VwIG9uIGl0cyBjdXJyZW50IENQVS5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgY2dfdG91Y2hfcGFnZXMoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdGxvbmcgcGFnZV9zaXplID0gc3lzY29uZihfU0NfUEFHRVNJWkUpO1xuJiM0MztcdGNoYXIgKnB0cjtcbiYjNDM7XG4mIzQzO1x0aWYgKHBhZ2Vfc2l6ZSBcdTAwM2M9IDApXG4mIzQzO1x0XHRwYWdlX3NpemUgPSBCVUZfU0laRTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChwdHIgPSBidWY7IHB0ciBcdTAwM2MgYnVmICYjNDM7IHNpemU7IHB0ciAmIzQzOz0gcGFnZV9zaXplKVxuJiM0MztcdFx0KnB0ciA9IDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBjZ19hbGxvY19hbm9uIC0gYWxsb2NhdGUgYW5kIGZhdWx0IGFub255bW91cyBtZW1vcnlcbiYjNDM7ICogQHNpemU6IGJ5dGVzIHRvIGFsbG9jYXRlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogUmVnaW9uIHRvIGZyZWUoKSwgb3IgTlVMTC5cbiYjNDM7ICovXG4mIzQzO2NoYXIgKmNnX2FsbG9jX2Fub24oc2l6ZV90IHNpemUpXG4mIzQzO3tcbiYjNDM7XHRjaGFyICpidWYgPSBtYWxsb2Moc2l6ZSk7XG4mIzQzO1xuJiM0MztcdGlmICghYnVmKSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7bWFsbG9jKCkgZmFpbGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y2dfdG91Y2hfcGFnZXMoYnVmLCBzaXplKTtcbiYjNDM7XHRyZXR1cm4gYnVmO1xuJiM0Mzt9XG4mIzQzO1xuIGNoYXIgKmNnX25hbWUoY29uc3QgY2hhciAqcm9vdCwgY29uc3QgY2hhciAqbmFtZSlcbiB7XG4gXHRzaXplX3QgbGVuID0gc3RybGVuKHJvb3QpICYjNDM7IHN0cmxlbihuYW1lKSAmIzQzOyAyO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9saWIvaW5jbHVkZS9jZ3JvdXBfdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9pbmNsdWRlL2Nncm91cF91dGlsLmhcbmluZGV4IDhlYmIyYjRkNGVjMDcuLjY0MDc3ODAxODc4MDcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbGliL2luY2x1ZGUvY2dyb3VwX3V0aWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9pbmNsdWRlL2Nncm91cF91dGlsLmhcbkBAIC01NCw2ICYjNDM7NTQsOSBAQCBleHRlcm4gc3NpemVfdCB3cml0ZV90ZXh0KGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc3NpemVfdCBsZW4pO1xuIGV4dGVybiBpbnQgY2dfZmluZF9jb250cm9sbGVyX3Jvb3QoY2hhciAqcm9vdCwgc2l6ZV90IGxlbiwgY29uc3QgY2hhciAqY29udHJvbGxlcik7XG4gZXh0ZXJuIGludCBjZ19maW5kX3VuaWZpZWRfcm9vdChjaGFyICpyb290LCBzaXplX3QgbGVuLCBib29sICpuc2RlbGVnYXRlKTtcbiBleHRlcm4gY2hhciAqY2dfbmFtZShjb25zdCBjaGFyICpyb290LCBjb25zdCBjaGFyICpuYW1lKTtcbiYjNDM7ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBjZ19nZXRfaWQoY29uc3QgY2hhciAqY2dyb3VwKTtcbiYjNDM7ZXh0ZXJuIHZvaWQgY2dfdG91Y2hfcGFnZXMoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSk7XG4mIzQzO2V4dGVybiBjaGFyICpjZ19hbGxvY19hbm9uKHNpemVfdCBzaXplKTtcbiBleHRlcm4gY2hhciAqY2dfbmFtZV9pbmRleGVkKGNvbnN0IGNoYXIgKnJvb3QsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBpbmRleCk7XG4gZXh0ZXJuIGNoYXIgKmNnX2NvbnRyb2woY29uc3QgY2hhciAqY2dyb3VwLCBjb25zdCBjaGFyICpjb250cm9sKTtcbiBleHRlcm4gaW50IGNnX2NyZWF0ZShjb25zdCBjaGFyICpjZ3JvdXApO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9tZW1jZ19zdGF0X2Nyb3NzX2NwdS5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9tZW1jZ19zdGF0X2Nyb3NzX2NwdS5icGYuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmZmZjNiOTI1NmFhMzlcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9tZW1jZ19zdGF0X2Nyb3NzX2NwdS5icGYuY1xuQEAgLTAsMCAmIzQzOzEsMTAxIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbiYjNDM7I2RlZmluZSBCUEZfTk9fS0ZVTkNfUFJPVE9UWVBFU1xuJiM0MzsjaW5jbHVkZSBcdTAwM2N2bWxpbnV4LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9jb3JlX3JlYWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDttZW1jZ19zdGF0X2Nyb3NzX2NwdS5oXCYjMzQ7XG4mIzQzO1xuJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuJiM0MztcbiYjNDM7LyogRW5zdXJlIHRoZSB1cHBlci1ib3VuZCBjaGVja3MgYWxzbyByZWplY3QgbmVnYXRpdmUgQlBGIGFyZ3VtZW50cy4gKi9cbiYjNDM7X1N0YXRpY19hc3NlcnQoKGVudW0gdm1fZXZlbnRfaXRlbSktMSBcdTAwM2U9IE5SX1ZNX0VWRU5UX0lURU1TLFxuJiM0MztcdCAgICAgICBcJiMzNDtuZWdhdGl2ZSB2bV9ldmVudF9pdGVtIG11c3QgZmFpbCB0aGUgYm91bmRzIGNoZWNrXCYjMzQ7KTtcbiYjNDM7X1N0YXRpY19hc3NlcnQoKGVudW0gbWVtY2dfbWVtb3J5X2V2ZW50KS0xIFx1MDAzZT0gTUVNQ0dfTlJfTUVNT1JZX0VWRU5UUyxcbiYjNDM7XHQgICAgICAgXCYjMzQ7bmVnYXRpdmUgbWVtY2dfbWVtb3J5X2V2ZW50IG11c3QgZmFpbCB0aGUgYm91bmRzIGNoZWNrXCYjMzQ7KTtcbiYjNDM7XG4mIzQzOy8qIERlY2xhcmUga2Z1bmNzIHRoYXQgbWF5IGJlIGFic2VudCBmcm9tIHRoZSBidWlsZC10aW1lIHZtbGludXguaC4gKi9cbiYjNDM7c3RydWN0IG1lbV9jZ3JvdXAgKmJwZl9nZXRfbWVtX2Nncm91cChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKSBfX2tzeW07XG4mIzQzO3ZvaWQgYnBmX3B1dF9tZW1fY2dyb3VwKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykgX19rc3ltO1xuJiM0Mzt2b2lkIGJwZl9tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykgX19rc3ltO1xuJiM0Mzt1bnNpZ25lZCBsb25nIGJwZl9tZW1fY2dyb3VwX3BhZ2Vfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KSBfX2tzeW07XG4mIzQzO3Vuc2lnbmVkIGxvbmcgYnBmX21lbV9jZ3JvdXBfdm1fZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiYjNDM7XHRcdFx0XHQgICAgICAgZW51bSB2bV9ldmVudF9pdGVtIGV2ZW50KSBfX2tzeW07XG4mIzQzO1xuJiM0MzsvKiBVc2Vyc3BhY2UgcmVzaXplcyB0aGlzIGNncm91cC1JRCBtYXAgYmVmb3JlIGxvYWQuICovXG4mIzQzO3N0cnVjdCB7XG4mIzQzO1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9IQVNIKTtcbiYjNDM7XHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuJiM0MztcdF9fdHlwZShrZXksIF9fdTY0KTtcbiYjNDM7XHRfX3R5cGUodmFsdWUsIHN0cnVjdCBtZW1jZ19zdGF0X3NuYXBzaG90KTtcbiYjNDM7fSByZXN1bHRzIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4mIzQzO1xuJiM0MzsvKiBJc29sYXRlIGNhcGFiaWxpdHkgZmFpbHVyZXMgZnJvbSB2ZXJpZmllciBmYWlsdXJlcyBpbiB0aGUgdGVzdCBwcm9ncmFtLiAqL1xuJiM0MztTRUMoXCYjMzQ7aXRlci5zL2Nncm91cFwmIzM0OylcbiYjNDM7aW50IG1lbWNnX2tmdW5jc19wcm9iZShzdHJ1Y3QgYnBmX2l0ZXJfX2Nncm91cCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGNncm91cCAqY2dycCA9IGN0eC1cdTAwM2VjZ3JvdXA7XG4mIzQzO1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuJiM0MztcbiYjNDM7XHRpZiAoIWNncnApXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0bWVtY2cgPSBicGZfZ2V0X21lbV9jZ3JvdXAoXHUwMDI2Y2dycC1cdTAwM2VzZWxmKTtcbiYjNDM7XHRpZiAoIW1lbWNnKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGJwZl9tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKG1lbWNnKTtcbiYjNDM7XHRicGZfbWVtX2Nncm91cF9wYWdlX3N0YXRlKG1lbWNnLCAwKTtcbiYjNDM7XHRicGZfbWVtX2Nncm91cF92bV9ldmVudHMobWVtY2csIDApO1xuJiM0MztcdGJwZl9wdXRfbWVtX2Nncm91cChtZW1jZyk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFNsZWVwYWJsZSBpdGVyYXRvcjogZmx1c2ggdGhlIHJvb3Qgb25jZSwgdGhlbiBzbmFwc2hvdCBlYWNoIGNncm91cC4gKi9cbiYjNDM7U0VDKFwmIzM0O2l0ZXIucy9jZ3JvdXBcJiMzNDspXG4mIzQzO2ludCBjZ3JvdXBfbWVtY2dfc3RhdF9jcm9zc19jcHUoc3RydWN0IGJwZl9pdGVyX19jZ3JvdXAgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBjZ3JvdXAgKmNncnAgPSBjdHgtXHUwMDNlY2dyb3VwO1xuJiM0MztcdHN0cnVjdCBtZW1jZ19zdGF0X3NuYXBzaG90IHNuYXAgPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzO1xuJiM0MztcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiYjNDM7XHRpbnQgaWR4X2Fub24sIGlkeF9maWxlLCBpZHhfc2htZW0sIGlkeF9mbWFwcGVkLCBpZHhfcGdmYXVsdDtcbiYjNDM7XHRfX3U2NCBjZ19pZDtcbiYjNDM7XG4mIzQzO1x0LyogSWdub3JlIHRoZSBmaW5hbCBwb3N0LXByb2Nlc3NpbmcgY2FsbC4gKi9cbiYjNDM7XHRpZiAoIWNncnApXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0Y3NzID0gXHUwMDI2Y2dycC1cdTAwM2VzZWxmO1xuJiM0MztcdG1lbWNnID0gYnBmX2dldF9tZW1fY2dyb3VwKGNzcyk7XG4mIzQzO1x0aWYgKCFtZW1jZylcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHQvKiBERVNDRU5EQU5UU19QUkUgdmlzaXRzIHRoZSBzdWJ0cmVlIHJvb3QgZmlyc3QuICovXG4mIzQzO1x0aWYgKGN0eC1cdTAwM2VtZXRhLVx1MDAzZXNlcV9udW0gPT0gMClcbiYjNDM7XHRcdGJwZl9tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKG1lbWNnKTtcbiYjNDM7XG4mIzQzO1x0Y2dfaWQgPSBCUEZfQ09SRV9SRUFEKGNncnAsIGtuLCBpZCk7XG4mIzQzO1x0c25hcC5jZ3JvdXBfaWQgPSBjZ19pZDtcbiYjNDM7XG4mIzQzO1x0aWR4X2Fub24gPSBicGZfY29yZV9lbnVtX3ZhbHVlKGVudW0gbm9kZV9zdGF0X2l0ZW0sIE5SX0FOT05fTUFQUEVEKTtcbiYjNDM7XHRpZHhfZmlsZSA9IGJwZl9jb3JlX2VudW1fdmFsdWUoZW51bSBub2RlX3N0YXRfaXRlbSwgTlJfRklMRV9QQUdFUyk7XG4mIzQzO1x0aWR4X3NobWVtID0gYnBmX2NvcmVfZW51bV92YWx1ZShlbnVtIG5vZGVfc3RhdF9pdGVtLCBOUl9TSE1FTSk7XG4mIzQzO1x0aWR4X2ZtYXBwZWQgPSBicGZfY29yZV9lbnVtX3ZhbHVlKGVudW0gbm9kZV9zdGF0X2l0ZW0sIE5SX0ZJTEVfTUFQUEVEKTtcbiYjNDM7XHRpZHhfcGdmYXVsdCA9IGJwZl9jb3JlX2VudW1fdmFsdWUoZW51bSB2bV9ldmVudF9pdGVtLCBQR0ZBVUxUKTtcbiYjNDM7XG4mIzQzO1x0c25hcC5hbm9uID0gYnBmX21lbV9jZ3JvdXBfcGFnZV9zdGF0ZShtZW1jZywgaWR4X2Fub24pO1xuJiM0MztcdHNuYXAuZmlsZSA9IGJwZl9tZW1fY2dyb3VwX3BhZ2Vfc3RhdGUobWVtY2csIGlkeF9maWxlKTtcbiYjNDM7XHRzbmFwLnNobWVtID0gYnBmX21lbV9jZ3JvdXBfcGFnZV9zdGF0ZShtZW1jZywgaWR4X3NobWVtKTtcbiYjNDM7XHRzbmFwLmZpbGVfbWFwcGVkID0gYnBmX21lbV9jZ3JvdXBfcGFnZV9zdGF0ZShtZW1jZywgaWR4X2ZtYXBwZWQpO1xuJiM0MztcdHNuYXAucGdmYXVsdCA9IGJwZl9tZW1fY2dyb3VwX3ZtX2V2ZW50cyhtZW1jZywgaWR4X3BnZmF1bHQpO1xuJiM0MztcbiYjNDM7XHQvKiBSZWFkIHBhZ2UgY291bnRlcnMgZnJvbSB0aGUgdHJ1c3RlZCBwb2ludGVyLiAqL1xuJiM0MztcdHNuYXAudXNhZ2VfcGFnZXMgPSBCUEZfQ09SRV9SRUFEKG1lbWNnLCBtZW1vcnkudXNhZ2UuY291bnRlcik7XG4mIzQzO1x0c25hcC5tYXhfcGFnZXMgPSBCUEZfQ09SRV9SRUFEKG1lbWNnLCBtZW1vcnkubWF4KTtcbiYjNDM7XG4mIzQzO1x0YnBmX21hcF91cGRhdGVfZWxlbShcdTAwMjZyZXN1bHRzLCBcdTAwMjZjZ19pZCwgXHUwMDI2c25hcCwgQlBGX0FOWSk7XG4mIzQzO1xuJiM0MztcdGJwZl9wdXRfbWVtX2Nncm91cChtZW1jZyk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbWVtY2dfc3RhdF9jcm9zc19jcHUuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9tZW1jZ19zdGF0X2Nyb3NzX2NwdS5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZjc1ZTM0MWY4Y2I4M1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL21lbWNnX3N0YXRfY3Jvc3NfY3B1LmhcbkBAIC0wLDAgJiM0MzsxLDE4IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4mIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbiYjNDM7I2lmbmRlZiBfX01FTUNHX1NUQVRfQ1JPU1NfQ1BVX0hcbiYjNDM7I2RlZmluZSBfX01FTUNHX1NUQVRfQ1JPU1NfQ1BVX0hcbiYjNDM7XG4mIzQzOy8qIEZpeGVkLXdpZHRoIHNuYXBzaG90IHNoYXJlZCBieSBCUEYgYW5kIHVzZXJzcGFjZS4gKi9cbiYjNDM7c3RydWN0IG1lbWNnX3N0YXRfc25hcHNob3Qge1xuJiM0MztcdF9fdTY0IGNncm91cF9pZDtcbiYjNDM7XHRfX3U2NCBhbm9uO1x0XHQvKiBOUl9BTk9OX01BUFBFRCwgYnl0ZXMgKi9cbiYjNDM7XHRfX3U2NCBmaWxlO1x0XHQvKiBOUl9GSUxFX1BBR0VTLCBieXRlcyAqL1xuJiM0MztcdF9fdTY0IHNobWVtO1x0XHQvKiBOUl9TSE1FTSwgYnl0ZXMgKi9cbiYjNDM7XHRfX3U2NCBmaWxlX21hcHBlZDtcdC8qIE5SX0ZJTEVfTUFQUEVELCBieXRlcyAqL1xuJiM0MztcdF9fdTY0IHBnZmF1bHQ7XHRcdC8qIFBHRkFVTFQsIGNvdW50ICovXG4mIzQzO1x0X191NjQgdXNhZ2VfcGFnZXM7XHQvKiBwYWdlX2NvdW50ZXIgbWVtb3J5LnVzYWdlLCBpbiBQQUdFUyAqL1xuJiM0MztcdF9fdTY0IG1heF9wYWdlcztcdC8qIHBhZ2VfY291bnRlciBtZW1vcnkubWF4LCBpbiBQQUdFUyAqL1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2VuZGlmIC8qIF9fTUVNQ0dfU1RBVF9DUk9TU19DUFVfSCAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X21lbWNnX3N0YXRfY3Jvc3NfY3B1LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9tZW1jZ19zdGF0X2Nyb3NzX2NwdS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOTZlNGE0YTk1OGVkYVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfbWVtY2dfc3RhdF9jcm9zc19jcHUuY1xuQEAgLTAsMCAmIzQzOzEsNzU1IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIENvbXBhcmUgbWVtY2cgQlBGIGtmdW5jcyB3aXRoIG1lbW9yeS5zdGF0IG92ZXIgYSBjaGFyZ2VkIHN1YnRyZWUuIENoYXJnZXJzXG4mIzQzOyAqIHNwcmVhZCBhbm9ueW1vdXMgbWVtb3J5IGFjcm9zcyBDUFVzIGFuZCBob2xkIGl0LiBSZWFkIEJQRiBmaXJzdCBzbyBpdHMgZmx1c2hcbiYjNDM7ICogaXMgbm90IGNvbnN1bWVkIGJ5IG1lbW9yeS5zdGF0LCB0aGVuIHJlcXVpcmUgdHdvIGZpbGUgc2FtcGxlcyB0byBicmFja2V0IGVhY2hcbiYjNDM7ICogQlBGIHZhbHVlLiBFYWNoIGxlYWYgbXVzdCBjb3ZlciBpdHMgY2hhcmdlOyByb290IGFub24gbXVzdCBlcXVhbCB0aGUgbGVhZiBzdW0uXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpbWl0cy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGltaXRzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkaW50LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc2NoZWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy93YWl0LmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvbGliYnBmLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2J0Zi5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtjZ3JvdXBfdXRpbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O21lbWNnX3N0YXRfY3Jvc3NfY3B1LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bWVtY2dfc3RhdF9jcm9zc19jcHUuc2tlbC5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFNVQlRSRUVfTkFNRVx0XHRcJiMzNDttY2dfeGNwdVwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBNRU1DR19DSEFSR0VfQkFUQ0hcdDY0XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEZMVVNIX01BUkdJTlx0XHQyXG4mIzQzO1xuJiM0MzsvKiBCb3VuZCB0b3RhbCBjaGFyZ2Ugb24gbGFyZ2Ugc3lzdGVtcy4gKi9cbiYjNDM7I2RlZmluZSBNQVhfVE9UQUxfQ0hBUkdFXHQoMjU2VUwgXHUwMDNjXHUwMDNjIDIwKVxuJiM0MztcbiYjNDM7LyogQm91bmQgdGhlIENQVXMgdXNlZCBieSBlYWNoIGxlYWYuICovXG4mIzQzOyNkZWZpbmUgTUFYX0NQVVNfUEVSX0xFQUZcdDE2XG4mIzQzO1xuJiM0MzsjZGVmaW5lIENIQVJHRV9XQUlUX1JFVFJJRVNcdDUwMFxuJiM0MztcbiYjNDM7c3RhdGljIGNoYXIgcm9vdFtQQVRIX01BWF07XG4mIzQzO3N0YXRpYyBjaGFyICpzdWJ0cmVlX3Jvb3Q7XG4mIzQzO3N0YXRpYyBsb25nIHBhZ2Vfc2l6ZTtcbiYjNDM7XG4mIzQzOy8qIGNncm91cGZzIHZhbHVlcyBpbiBieXRlcy4gKi9cbiYjNDM7c3RydWN0IGZpbGVfc25hcCB7XG4mIzQzO1x0bG9uZyBhbm9uLCBmaWxlLCBzaG1lbSwgZmlsZV9tYXBwZWQsIHBnZmF1bHQ7XG4mIzQzO1x0bG9uZyBjdXJyZW50O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IGNnX25vZGUge1xuJiM0MztcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBsb25nIGlkO1xuJiM0MztcdGJvb2wgaXNfbGVhZjtcdFx0XHQvKiBob2xkcyBhIGNoYXJnZSBvZiBpdHMgb3duICovXG4mIzQzO1x0bG9uZyBwcmV2aW91c19jdXJyZW50O1x0XHQvKiBwcmV2aW91cyBtZW1vcnkuY3VycmVudCBwb2xsICovXG4mIzQzO1x0c3RydWN0IG1lbWNnX3N0YXRfc25hcHNob3QgYnBmO1x0LyogcmVhZCB0aHJvdWdoIHRoZSBrZnVuY3MgKi9cbiYjNDM7XHRzdHJ1Y3QgZmlsZV9zbmFwIGZpbGVbMl07XHQvKiBwb3N0LUJQRiBjZ3JvdXBmcyBzYW1wbGVzICovXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGNnX25vZGUgKm5vZGVzO1x0LyogREZTIG9yZGVyOiBhIHBhcmVudCBwcmVjZWRlcyBpdHMgY2hpbGRyZW4gKi9cbiYjNDM7c3RhdGljIGludCBuX25vZGVzO1xuJiM0MztzdGF0aWMgaW50IG5fbGVhdmVzO1xuJiM0MztcbiYjNDM7LyogLS0tLSBDUFVzIHRoaXMgdGVzdCBtYXkgcnVuIG9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4mIzQzO1xuJiM0MztzdGF0aWMgY3B1X3NldF90IGFsbG93ZWRfY3B1cztcbiYjNDM7c3RhdGljIGludCBuX2NwdTtcbiYjNDM7c3RhdGljIGxvbmcgbl9vbmxpbmVfY3B1O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBudGhfY3B1KGludCBuKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGksIHNlZW4gPSAwO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDUFVfU0VUU0laRTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmICghQ1BVX0lTU0VUKGksIFx1MDAyNmFsbG93ZWRfY3B1cykpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0aWYgKHNlZW4mIzQzOyYjNDM7ID09IG4gJSBuX2NwdSlcbiYjNDM7XHRcdFx0cmV0dXJuIGk7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAtMTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwaW5fY3B1KGludCBjcHUpXG4mIzQzO3tcbiYjNDM7XHRjcHVfc2V0X3Qgc2V0O1xuJiM0MztcbiYjNDM7XHRpZiAoY3B1IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRDUFVfWkVSTyhcdTAwMjZzZXQpO1xuJiM0MztcdENQVV9TRVQoY3B1LCBcdTAwMjZzZXQpO1xuJiM0MztcdHJldHVybiBzY2hlZF9zZXRhZmZpbml0eSgwLCBzaXplb2Yoc2V0KSwgXHUwMDI2c2V0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogLS0tLSB0cmVlIGNvbnN0cnVjdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBhZGRfbm9kZShjb25zdCBjaGFyICpwYXRoLCBib29sIGlzX2xlYWYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgY2dfbm9kZSAqbiA9IFx1MDAyNm5vZGVzW25fbm9kZXNdO1xuJiM0MztcbiYjNDM7XHRpZiAoY2dfY3JlYXRlKHBhdGgpKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRzdHJuY3B5KG4tXHUwMDNlcGF0aCwgcGF0aCwgc2l6ZW9mKG4tXHUwMDNlcGF0aCkgLSAxKTtcbiYjNDM7XHRuLVx1MDAzZWlkID0gY2dfZ2V0X2lkKHBhdGgpO1xuJiM0MztcdG4tXHUwMDNlaXNfbGVhZiA9IGlzX2xlYWY7XG4mIzQzO1x0bi1cdTAwM2VwcmV2aW91c19jdXJyZW50ID0gLTE7XG4mIzQzO1x0aWYgKGlzX2xlYWYpXG4mIzQzO1x0XHRuX2xlYXZlcyYjNDM7JiM0Mzs7XG4mIzQzO1x0bl9ub2RlcyYjNDM7JiM0Mzs7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEJ1aWxkIEBsZXZlbHMgYmVsb3cgQHBhdGg7IG9ubHkgbGVhdmVzIGFyZSBjaGFyZ2VkLiAqL1xuJiM0MztzdGF0aWMgaW50IGJ1aWxkX2NoaWxkcmVuKGNvbnN0IGNoYXIgKnBhdGgsIGludCBmYW5vdXQsIGludCBsZXZlbHMpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGNoaWxkW1BBVEhfTUFYXTtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKGxldmVscyA9PSAwKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdC8qIEdpdmUgY2hpbGQgY2dyb3VwcyBhIG1lbWNnLiAqL1xuJiM0MztcdGlmIChjZ193cml0ZShwYXRoLCBcJiMzNDtjZ3JvdXAuc3VidHJlZV9jb250cm9sXCYjMzQ7LCBcJiMzNDsmIzQzO21lbW9yeVwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGZhbm91dDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHNucHJpbnRmKGNoaWxkLCBzaXplb2YoY2hpbGQpLCBcJiMzNDslcy9jJWRcJiMzNDssIHBhdGgsIGkpO1xuJiM0MztcdFx0aWYgKGFkZF9ub2RlKGNoaWxkLCBsZXZlbHMgPT0gMSkpXG4mIzQzO1x0XHRcdHJldHVybiAtMTtcbiYjNDM7XHRcdGlmIChidWlsZF9jaGlsZHJlbihjaGlsZCwgZmFub3V0LCBsZXZlbHMgLSAxKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHNpemVfdCB0cmVlX2NhcGFjaXR5KGludCBmYW5vdXQsIGludCBkZXB0aClcbiYjNDM7e1xuJiM0MztcdHNpemVfdCB0b3RhbCA9IDEsIGxldmVsID0gMTtcbiYjNDM7XHRpbnQgZDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChkID0gMDsgZCBcdTAwM2MgZGVwdGg7IGQmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRsZXZlbCAqPSBmYW5vdXQ7XG4mIzQzO1x0XHR0b3RhbCAmIzQzOz0gbGV2ZWw7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiB0b3RhbDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBidWlsZF90cmVlKGludCBmYW5vdXQsIGludCBkZXB0aCwgaW50ICpyb290X2ZkKVxuJiM0Mzt7XG4mIzQzO1x0bl9ub2RlcyA9IDA7XG4mIzQzO1x0bl9sZWF2ZXMgPSAwO1xuJiM0MztcdG5vZGVzID0gY2FsbG9jKHRyZWVfY2FwYWNpdHkoZmFub3V0LCBkZXB0aCksIHNpemVvZigqbm9kZXMpKTtcbiYjNDM7XHRpZiAoIW5vZGVzKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRpZiAoYWRkX25vZGUoc3VidHJlZV9yb290LCBkZXB0aCA9PSAwKSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0KnJvb3RfZmQgPSBvcGVuKHN1YnRyZWVfcm9vdCwgT19SRE9OTFkpO1xuJiM0MztcdGlmICgqcm9vdF9mZCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGJ1aWxkX2NoaWxkcmVuKHN1YnRyZWVfcm9vdCwgZmFub3V0LCBkZXB0aCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIERlc3Ryb3kgY2hpbGRyZW4gYmVmb3JlIHBhcmVudHMsIHRoZW4gcmVhcCBjaGFyZ2Vycy4gKi9cbiYjNDM7c3RhdGljIHZvaWQgZGVzdHJveV90cmVlKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFub2RlcylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gbl9ub2RlcyAtIDE7IGkgXHUwMDNlPSAwOyBpLS0pXG4mIzQzO1x0XHRjZ19kZXN0cm95KG5vZGVzW2ldLnBhdGgpO1xuJiM0MztcdGZyZWUobm9kZXMpO1xuJiM0MztcdG5vZGVzID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKHdhaXRwaWQoLTEsIE5VTEwsIDApIFx1MDAzZSAwKVxuJiM0MztcdFx0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiAtLS0tIGNyb3NzLUNQVSBjaGFyZ2UgKG9uZSBjaGlsZCBwZXIgbGVhZikgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4mIzQzO1xuJiM0MztzdHJ1Y3QgY2hhcmdlX2FyZ3Mge1xuJiM0MztcdHNpemVfdCBieXRlcztcdC8qIGFub24gdGhpcyBsZWFmIGhvbGRzICovXG4mIzQzO1x0aW50IGJhc2U7XHQvKiBpbmRleCBvZiB0aGUgZmlyc3QgQ1BVIHRvIGZhdWx0IG9uICovXG4mIzQzO1x0aW50IGs7XHRcdC8qIENQVXMgdG8gc3ByZWFkIHRoZSBjaGFyZ2Ugb3ZlciAqL1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBjaGFyZ2VfbGVhZihjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZylcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBjaGFyZ2VfYXJncyAqY2EgPSBhcmc7XG4mIzQzO1x0aW50IHBwaWQgPSBnZXRwcGlkKCk7XG4mIzQzO1x0c2l6ZV90IHBlciwgb2ZmO1xuJiM0MztcdGNoYXIgKmJ1ZjtcbiYjNDM7XHRpbnQgajtcbiYjNDM7XG4mIzQzO1x0YnVmID0gbWFsbG9jKGNhLVx1MDAzZWJ5dGVzKTtcbiYjNDM7XHRpZiAoIWJ1Zikge1xuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O21hbGxvYygpIGZhaWxlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBLZWVwIGVhY2ggQ1BVJiMzOTtzIHNsaWNlIHBhZ2UtYWxpZ25lZC4gKi9cbiYjNDM7XHRwZXIgPSBjYS1cdTAwM2VieXRlcyAvIGNhLVx1MDAzZWsgLyBwYWdlX3NpemUgKiBwYWdlX3NpemU7XG4mIzQzO1xuJiM0MztcdGZvciAoaiA9IDA7IGogXHUwMDNjIGNhLVx1MDAzZWs7IGomIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRvZmYgPSAoc2l6ZV90KWogKiBwZXI7XG4mIzQzO1x0XHRpZiAocGluX2NwdShudGhfY3B1KGNhLVx1MDAzZWJhc2UgJiM0MzsgaikpKSB7XG4mIzQzO1x0XHRcdGZyZWUoYnVmKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0Y2dfdG91Y2hfcGFnZXMoYnVmICYjNDM7IG9mZixcbiYjNDM7XHRcdFx0ICAgICAgIGogPT0gY2EtXHUwMDNlayAtIDEgPyBjYS1cdTAwM2VieXRlcyAtIG9mZiA6IHBlcik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR3aGlsZSAoZ2V0cHBpZCgpID09IHBwaWQpXG4mIzQzO1x0XHRzbGVlcCgxKTtcbiYjNDM7XG4mIzQzO1x0ZnJlZShidWYpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGxlYWZfY2hhcmdlKHNpemVfdCB3YW50LCBpbnQgaywgc2l6ZV90ICpieXRlcylcbiYjNDM7e1xuJiM0MztcdHNpemVfdCBtaW5fcGFnZXMsIHBhZ2VzLCB3YW50X3BhZ2VzO1xuJiM0MztcbiYjNDM7XHRpZiAoKHNpemVfdCluX29ubGluZV9jcHUgXHUwMDNlIFNJWkVfTUFYIC8gRkxVU0hfTUFSR0lOIC9cbiYjNDM7XHRcdFx0XHRcdCBNRU1DR19DSEFSR0VfQkFUQ0gpXG4mIzQzO1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiYjNDM7XG4mIzQzO1x0LyogRm9yY2UgbW9yZSB0aGFuIG9uZSBwZW5kaW5nIGJhdGNoIHBlciBDUFUgYWNyb3NzIHRoZSBzdWJ0cmVlLiAqL1xuJiM0MztcdG1pbl9wYWdlcyA9IChzaXplX3QpRkxVU0hfTUFSR0lOICogTUVNQ0dfQ0hBUkdFX0JBVENIICogbl9vbmxpbmVfY3B1O1xuJiM0MztcdHBhZ2VzID0gbWluX3BhZ2VzIC8gbl9sZWF2ZXMgJiM0MzsgISEobWluX3BhZ2VzICUgbl9sZWF2ZXMpO1xuJiM0MztcdHdhbnRfcGFnZXMgPSB3YW50IC8gcGFnZV9zaXplICYjNDM7ICEhKHdhbnQgJSBwYWdlX3NpemUpO1xuJiM0MztcdGlmIChwYWdlcyBcdTAwM2Mgd2FudF9wYWdlcylcbiYjNDM7XHRcdHBhZ2VzID0gd2FudF9wYWdlcztcbiYjNDM7XHRpZiAocGFnZXMgXHUwMDNjIChzaXplX3QpaylcbiYjNDM7XHRcdHBhZ2VzID0gaztcbiYjNDM7XG4mIzQzO1x0aWYgKHBhZ2VzIFx1MDAzZSBNQVhfVE9UQUxfQ0hBUkdFIC8gKHNpemVfdCluX2xlYXZlcyAvIHBhZ2Vfc2l6ZSlcbiYjNDM7XHRcdHJldHVybiAtRTJCSUc7XG4mIzQzO1xuJiM0MztcdCpieXRlcyA9IHBhZ2VzICogcGFnZV9zaXplO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHN0YXJ0X2NoYXJnZXJzKGludCBrLCBzaXplX3QgYnl0ZXMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgY2hhcmdlX2FyZ3MgY2EgPSB7IC5ieXRlcyA9IGJ5dGVzLCAuayA9IGsgfTtcbiYjNDM7XHRsb25nIHByZXYsIGN1cjtcbiYjNDM7XHRib29sIHJlYWR5O1xuJiM0MztcdGludCBpLCByZXRyaWVzO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuX25vZGVzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKCFub2Rlc1tpXS5pc19sZWFmKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdGlmIChjZ19ydW5fbm93YWl0KG5vZGVzW2ldLnBhdGgsIGNoYXJnZV9sZWFmLCBcdTAwMjZjYSkgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7Y2Fubm90IHN0YXJ0IGEgY2hhcmdlciBvbiAlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgICAgbm9kZXNbaV0ucGF0aCk7XG4mIzQzO1x0XHRcdHJldHVybiAtMTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGNhLmJhc2UgJiM0Mzs9IGs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBXYWl0IHVudGlsIGV2ZXJ5IGxlYWYgaXMgZnVsbHkgY2hhcmdlZCBhbmQgc3RhYmxlLiAqL1xuJiM0MztcdGZvciAocmV0cmllcyA9IENIQVJHRV9XQUlUX1JFVFJJRVM7IHJldHJpZXM7IHJldHJpZXMtLSkge1xuJiM0MztcdFx0cmVhZHkgPSB0cnVlO1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgbl9ub2RlczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0aWYgKCFub2Rlc1tpXS5pc19sZWFmKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdFx0Y3VyID0gY2dfcmVhZF9sb25nKG5vZGVzW2ldLnBhdGgsIFwmIzM0O21lbW9yeS5jdXJyZW50XCYjMzQ7KTtcbiYjNDM7XHRcdFx0aWYgKGN1ciBcdTAwM2MgMCkge1xuJiM0MztcdFx0XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O2Nhbm5vdCByZWFkICVzL21lbW9yeS5jdXJyZW50OiAlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBub2Rlc1tpXS5wYXRoLCBzdHJlcnJvcihlcnJubykpO1xuJiM0MztcdFx0XHRcdHJldHVybiAtMTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0cHJldiA9IG5vZGVzW2ldLnByZXZpb3VzX2N1cnJlbnQ7XG4mIzQzO1x0XHRcdG5vZGVzW2ldLnByZXZpb3VzX2N1cnJlbnQgPSBjdXI7XG4mIzQzO1x0XHRcdGlmIChjdXIgXHUwMDNjIChsb25nKWJ5dGVzIHx8IGN1ciAhPSBwcmV2KVxuJiM0MztcdFx0XHRcdHJlYWR5ID0gZmFsc2U7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAocmVhZHkpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0dXNsZWVwKERFRkFVTFRfV0FJVF9JTlRFUlZBTF9VUyAvIDEwKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5fbm9kZXM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAobm9kZXNbaV0uaXNfbGVhZiBcdTAwMjZcdTAwMjYgbm9kZXNbaV0ucHJldmlvdXNfY3VycmVudCBcdTAwM2MgKGxvbmcpYnl0ZXMpIHtcbiYjNDM7XHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7JXMgcmVhY2hlZCBvbmx5ICVsZCBvZiAlenUgY2hhcmdlZCBieXRlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgICAgbm9kZXNbaV0ucGF0aCwgbm9kZXNbaV0ucHJldmlvdXNfY3VycmVudCxcbiYjNDM7XHRcdFx0XHQgICAgICAgYnl0ZXMpO1xuJiM0MztcdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O21lbW9yeS5jdXJyZW50IGRpZCBub3Qgc2V0dGxlIGJlZm9yZSB0aGUgdGltZW91dFxcblwmIzM0Oyk7XG4mIzQzO1x0cmV0dXJuIC0xO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiAtLS0tIHRoZSB0d28gcmVhZGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4mIzQzO1xuJiM0MzsvKiBGbHVzaCB0aGUgc3VidHJlZSBhbmQgY29sbGVjdCBlYWNoIGNncm91cCYjMzk7cyBrZnVuYyB2YWx1ZXMuICovXG4mIzQzO3N0YXRpYyBpbnQgcmVhZF9icGYoaW50IHJvb3RfZmQpXG4mIzQzO3tcbiYjNDM7XHRERUNMQVJFX0xJQkJQRl9PUFRTKGJwZl9pdGVyX2F0dGFjaF9vcHRzLCBvcHRzKTtcbiYjNDM7XHRzdHJ1Y3QgbWVtY2dfc3RhdF9jcm9zc19jcHUgKnNrZWwgPSBOVUxMO1xuJiM0MztcdHVuaW9uIGJwZl9pdGVyX2xpbmtfaW5mbyBsaW5mbyA9IHt9O1xuJiM0MztcdHN0cnVjdCBicGZfbGluayAqbGluayA9IE5VTEw7XG4mIzQzO1x0aW50IHJldCA9IC0xLCBlcnIsIGksIG1mZCwgZmQ7XG4mIzQzO1x0Y2hhciBidWZbNDA5Nl07XG4mIzQzO1x0c3NpemVfdCByO1xuJiM0MztcbiYjNDM7XHRza2VsID0gbWVtY2dfc3RhdF9jcm9zc19jcHVfX29wZW4oKTtcbiYjNDM7XHRpZiAoIXNrZWwpIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O3NrZWwgb3BlbiBmYWlsZWQ6ICVzICglZClcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgICBzdHJlcnJvcihlcnJubyksIGVycm5vKTtcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHR9XG4mIzQzO1x0ZXJyID0gYnBmX3Byb2dyYW1fX3NldF9hdXRvbG9hZChza2VsLVx1MDAzZXByb2dzLm1lbWNnX2tmdW5jc19wcm9iZSwgZmFsc2UpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O2Rpc2FibGluZyBjYXBhYmlsaXR5IHByb2JlIGZhaWxlZDogJXMgKCVkKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgIHN0cmVycm9yKC1lcnIpLCBlcnIpO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcdGVyciA9IGJwZl9tYXBfX3NldF9tYXhfZW50cmllcyhza2VsLVx1MDAzZW1hcHMucmVzdWx0cywgbl9ub2RlcyAmIzQzOyA4KTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtzZXQgbWF4X2VudHJpZXMgZmFpbGVkOiAlcyAoJWQpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICAgc3RyZXJyb3IoLWVyciksIGVycik7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1x0ZXJyID0gbWVtY2dfc3RhdF9jcm9zc19jcHVfX2xvYWQoc2tlbCk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7c2tlbCBsb2FkIGZhaWxlZDogJXMgKCVkKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgIHN0cmVycm9yKC1lcnIpLCBlcnIpO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRsaW5mby5jZ3JvdXAuY2dyb3VwX2ZkID0gcm9vdF9mZDtcbiYjNDM7XHRsaW5mby5jZ3JvdXAub3JkZXIgPSBCUEZfQ0dST1VQX0lURVJfREVTQ0VOREFOVFNfUFJFO1xuJiM0MztcdG9wdHMubGlua19pbmZvID0gXHUwMDI2bGluZm87XG4mIzQzO1x0b3B0cy5saW5rX2luZm9fbGVuID0gc2l6ZW9mKGxpbmZvKTtcbiYjNDM7XG4mIzQzO1x0bGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfaXRlcihza2VsLVx1MDAzZXByb2dzLmNncm91cF9tZW1jZ19zdGF0X2Nyb3NzX2NwdSxcbiYjNDM7XHRcdFx0XHRcdFx1MDAyNm9wdHMpO1xuJiM0MztcdGVyciA9IGxpYmJwZl9nZXRfZXJyb3IobGluayk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0bGluayA9IE5VTEw7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDthdHRhY2ggaXRlciBmYWlsZWQ6ICVzICglZClcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgICBzdHJlcnJvcigtZXJyKSwgZXJyKTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZmQgPSBicGZfaXRlcl9jcmVhdGUoYnBmX2xpbmtfX2ZkKGxpbmspKTtcbiYjNDM7XHRpZiAoZmQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O2JwZl9pdGVyX2NyZWF0ZSBmYWlsZWQ6ICVzICglZClcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgICBzdHJlcnJvcihlcnJubyksIGVycm5vKTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XHRkbyB7XG4mIzQzO1x0XHRyID0gcmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSk7XG4mIzQzO1x0fSB3aGlsZSAociBcdTAwM2UgMCB8fCAociBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVFIpKTtcbiYjNDM7XHRlcnIgPSBlcnJubztcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO1x0aWYgKHIgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O2JwZiB3YWxrIGZhaWxlZDogJXMgKCVkKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgIHN0cmVycm9yKGVyciksIGVycik7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG1mZCA9IGJwZl9tYXBfX2ZkKHNrZWwtXHUwMDNlbWFwcy5yZXN1bHRzKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuX25vZGVzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGlmIChicGZfbWFwX2xvb2t1cF9lbGVtKG1mZCwgXHUwMDI2bm9kZXNbaV0uaWQsIFx1MDAyNm5vZGVzW2ldLmJwZikpIHtcbiYjNDM7XHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7bm8gbWFwIGVudHJ5IGZvciAlczogJXMgKCVkKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgICAgbm9kZXNbaV0ucGF0aCwgc3RyZXJyb3IoZXJybm8pLCBlcnJubyk7XG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0fVxuJiM0MztcdHJldCA9IDA7XG4mIzQzO291dDpcbiYjNDM7XHRicGZfbGlua19fZGVzdHJveShsaW5rKTtcbiYjNDM7XHRtZW1jZ19zdGF0X2Nyb3NzX2NwdV9fZGVzdHJveShza2VsKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBSZWFkIG9uZSBjZ3JvdXBmcyBzbmFwc2hvdC4gKi9cbiYjNDM7c3RhdGljIGludCByZWFkX2ZpbGVzKGludCBzbG90KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5fbm9kZXM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRjb25zdCBjaGFyICpwYXRoID0gbm9kZXNbaV0ucGF0aDtcbiYjNDM7XHRcdHN0cnVjdCBmaWxlX3NuYXAgKmYgPSBcdTAwMjZub2Rlc1tpXS5maWxlW3Nsb3RdO1xuJiM0MztcbiYjNDM7XHRcdGYtXHUwMDNlYW5vbiA9IGNnX3JlYWRfa2V5X2xvbmcocGF0aCwgXCYjMzQ7bWVtb3J5LnN0YXRcJiMzNDssIFwmIzM0O2Fub24gXCYjMzQ7KTtcbiYjNDM7XHRcdGYtXHUwMDNlZmlsZSA9IGNnX3JlYWRfa2V5X2xvbmcocGF0aCwgXCYjMzQ7bWVtb3J5LnN0YXRcJiMzNDssIFwmIzM0O2ZpbGUgXCYjMzQ7KTtcbiYjNDM7XHRcdGYtXHUwMDNlc2htZW0gPSBjZ19yZWFkX2tleV9sb25nKHBhdGgsIFwmIzM0O21lbW9yeS5zdGF0XCYjMzQ7LCBcJiMzNDtzaG1lbSBcJiMzNDspO1xuJiM0MztcdFx0Zi1cdTAwM2VmaWxlX21hcHBlZCA9IGNnX3JlYWRfa2V5X2xvbmcocGF0aCwgXCYjMzQ7bWVtb3J5LnN0YXRcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRcdCAgXCYjMzQ7ZmlsZV9tYXBwZWQgXCYjMzQ7KTtcbiYjNDM7XHRcdGYtXHUwMDNlcGdmYXVsdCA9IGNnX3JlYWRfa2V5X2xvbmcocGF0aCwgXCYjMzQ7bWVtb3J5LnN0YXRcJiMzNDssIFwmIzM0O3BnZmF1bHQgXCYjMzQ7KTtcbiYjNDM7XHRcdGYtXHUwMDNlY3VycmVudCA9IGNnX3JlYWRfbG9uZyhwYXRoLCBcJiMzNDttZW1vcnkuY3VycmVudFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGYtXHUwMDNlYW5vbiBcdTAwM2MgMCB8fCBmLVx1MDAzZWZpbGUgXHUwMDNjIDAgfHwgZi1cdTAwM2VzaG1lbSBcdTAwM2MgMCB8fFxuJiM0MztcdFx0ICAgIGYtXHUwMDNlZmlsZV9tYXBwZWQgXHUwMDNjIDAgfHwgZi1cdTAwM2VwZ2ZhdWx0IFx1MDAzYyAwIHx8IGYtXHUwMDNlY3VycmVudCBcdTAwM2MgMCkge1xuJiM0MztcdFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtyZWFkaW5nIHRoZSBzdGF0cyBvZiAlcyBmYWlsZWRcXG5cJiMzNDssIHBhdGgpO1xuJiM0MztcdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiAtLS0tIGNvbXBhcmlzb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBkdW1wX25vZGUoY29uc3Qgc3RydWN0IGNnX25vZGUgKm4pXG4mIzQzO3tcbiYjNDM7XHRpbnQgcztcbiYjNDM7XG4mIzQzO1x0a3NmdF9wcmludF9tc2coXCYjMzQ7JXMgYnBmICAgOiBhbm9uPSVsbHUgZmlsZT0lbGx1IHNobWVtPSVsbHUgZm1hcHBlZD0lbGx1IHBnZmF1bHQ9JWxsdVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgICAgICBuLVx1MDAzZXBhdGgsIG4tXHUwMDNlYnBmLmFub24sIG4tXHUwMDNlYnBmLmZpbGUsIG4tXHUwMDNlYnBmLnNobWVtLFxuJiM0MztcdFx0ICAgICAgIG4tXHUwMDNlYnBmLmZpbGVfbWFwcGVkLCBuLVx1MDAzZWJwZi5wZ2ZhdWx0KTtcbiYjNDM7XHRmb3IgKHMgPSAwOyBzIFx1MDAzYyAyOyBzJiM0MzsmIzQzOylcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0OyVzIGZpbGUlZDogYW5vbj0lbGQgZmlsZT0lbGQgc2htZW09JWxkIGZtYXBwZWQ9JWxkIHBnZmF1bHQ9JWxkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICAgbi1cdTAwM2VwYXRoLCBzLCBuLVx1MDAzZWZpbGVbc10uYW5vbiwgbi1cdTAwM2VmaWxlW3NdLmZpbGUsXG4mIzQzO1x0XHRcdCAgICAgICBuLVx1MDAzZWZpbGVbc10uc2htZW0sIG4tXHUwMDNlZmlsZVtzXS5maWxlX21hcHBlZCxcbiYjNDM7XHRcdFx0ICAgICAgIG4tXHUwMDNlZmlsZVtzXS5wZ2ZhdWx0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogRXF1YWwgZmlsZSBzYW1wbGVzIHJlcXVpcmUgYW4gZXhhY3QgQlBGIG1hdGNoOyBvdGhlcndpc2UgYWNjZXB0IHRoZWlyIHJhbmdlLiAqL1xuJiM0MztzdGF0aWMgYm9vbCBicmFja2V0ZWQodW5zaWduZWQgbG9uZyBsb25nIHYsIGxvbmcgYSwgbG9uZyBiKVxuJiM0Mzt7XG4mIzQzO1x0bG9uZyBsbyA9IGEgXHUwMDNjIGIgPyBhIDogYjtcbiYjNDM7XHRsb25nIGhpID0gYSBcdTAwM2MgYiA/IGIgOiBhO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdiBcdTAwM2U9ICh1bnNpZ25lZCBsb25nIGxvbmcpbG8gXHUwMDI2XHUwMDI2IHYgXHUwMDNjPSAodW5zaWduZWQgbG9uZyBsb25nKWhpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGNoZWNrX3RyZWUoc2l6ZV90IGNoYXJnZWQpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGxvbmcgcm9vdF9hbm9uID0gMCwgbGVhZl9hbm9uID0gMDtcbiYjNDM7XHRpbnQgaSwgYmFkID0gMDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgbl9ub2RlczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBjZ19ub2RlICpuID0gXHUwMDI2bm9kZXNbaV07XG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgbWVtY2dfc3RhdF9zbmFwc2hvdCAqYiA9IFx1MDAyNm4tXHUwMDNlYnBmO1xuJiM0MztcdFx0Y29uc3Qgc3RydWN0IGZpbGVfc25hcCAqZjAgPSBcdTAwMjZuLVx1MDAzZWZpbGVbMF0sICpmMSA9IFx1MDAyNm4tXHUwMDNlZmlsZVsxXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWJyYWNrZXRlZChiLVx1MDAzZWFub24sIGYwLVx1MDAzZWFub24sIGYxLVx1MDAzZWFub24pIHx8XG4mIzQzO1x0XHQgICAgIWJyYWNrZXRlZChiLVx1MDAzZWZpbGUsIGYwLVx1MDAzZWZpbGUsIGYxLVx1MDAzZWZpbGUpIHx8XG4mIzQzO1x0XHQgICAgIWJyYWNrZXRlZChiLVx1MDAzZXNobWVtLCBmMC1cdTAwM2VzaG1lbSwgZjEtXHUwMDNlc2htZW0pIHx8XG4mIzQzO1x0XHQgICAgIWJyYWNrZXRlZChiLVx1MDAzZWZpbGVfbWFwcGVkLCBmMC1cdTAwM2VmaWxlX21hcHBlZCxcbiYjNDM7XHRcdFx0ICAgICAgIGYxLVx1MDAzZWZpbGVfbWFwcGVkKSB8fFxuJiM0MztcdFx0ICAgICFicmFja2V0ZWQoYi1cdTAwM2VwZ2ZhdWx0LCBmMC1cdTAwM2VwZ2ZhdWx0LCBmMS1cdTAwM2VwZ2ZhdWx0KSkge1xuJiM0MztcdFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtrZnVuY3MgZGlzYWdyZWUgd2l0aCBtZW1vcnkuc3RhdFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGR1bXBfbm9kZShuKTtcbiYjNDM7XHRcdFx0YmFkJiM0MzsmIzQzOztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHQvKiBMaXZlIHBhZ2UgY291bnRlcnMgYXJlIGJvdW5kcywgbm90IGZsdXNoZWQgc3RhdGlzdGljcy4gKi9cbiYjNDM7XHRcdGlmIChiLVx1MDAzZWFub24gXHUwMDNlIGItXHUwMDNldXNhZ2VfcGFnZXMgKiAodW5zaWduZWQgbG9uZyBsb25nKXBhZ2Vfc2l6ZSB8fFxuJiM0MztcdFx0ICAgIGYxLVx1MDAzZWFub24gXHUwMDNlIGYxLVx1MDAzZWN1cnJlbnQpIHtcbiYjNDM7XHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7JXM6IGFub24gYWJvdmUgdXNhZ2U6IGJwZiAlbGx1LyVsbHUgZmlsZSAlbGQvJWxkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgICBuLVx1MDAzZXBhdGgsIGItXHUwMDNlYW5vbixcbiYjNDM7XHRcdFx0XHQgICAgICAgYi1cdTAwM2V1c2FnZV9wYWdlcyAqICh1bnNpZ25lZCBsb25nIGxvbmcpcGFnZV9zaXplLFxuJiM0MztcdFx0XHRcdCAgICAgICBmMS1cdTAwM2Vhbm9uLCBmMS1cdTAwM2VjdXJyZW50KTtcbiYjNDM7XHRcdFx0YmFkJiM0MzsmIzQzOztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAobi1cdTAwM2Vpc19sZWFmKSB7XG4mIzQzO1x0XHRcdGlmIChiLVx1MDAzZWFub24gXHUwMDNjIGNoYXJnZWQpIHtcbiYjNDM7XHRcdFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDslczogZmx1c2hlZCBhbm9uICVsbHUsIGNoYXJnZWQgJXp1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIG4tXHUwMDNlcGF0aCwgYi1cdTAwM2Vhbm9uLCBjaGFyZ2VkKTtcbiYjNDM7XHRcdFx0XHRiYWQmIzQzOyYjNDM7O1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGxlYWZfYW5vbiAmIzQzOz0gYi1cdTAwM2Vhbm9uO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0aWYgKGkgPT0gMClcbiYjNDM7XHRcdFx0cm9vdF9hbm9uID0gYi1cdTAwM2Vhbm9uO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHJvb3RfYW5vbiAhPSBsZWFmX2Fub24pIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O3N1YnRyZWUgcm9vdCBhbm9uICVsbHUsIHN1bSBvZiB0aGUgbGVhdmVzICVsbHVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgICByb290X2Fub24sIGxlYWZfYW5vbik7XG4mIzQzO1x0XHRiYWQmIzQzOyYjNDM7O1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gYmFkID8gLTEgOiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBBY2NlcHQgUEFHRV9DT1VOVEVSX01BWCB2YWx1ZXMgZnJvbSBlaXRoZXIgMzItIG9yIDY0LWJpdCBrZXJuZWxzLiAqL1xuJiM0MztzdGF0aWMgaW50IGNoZWNrX3VubGltaXRlZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBsb25nIG1heDY0ID0gKHVuc2lnbmVkIGxvbmcgbG9uZylJTlQ2NF9NQVggLyBwYWdlX3NpemU7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBsb25nIG1heDMyID0gSU5UMzJfTUFYO1xuJiM0MztcbiYjNDM7XHRpZiAoY2dfcmVhZF9zdHJjbXAobm9kZXNbMF0ucGF0aCwgXCYjMzQ7bWVtb3J5Lm1heFwmIzM0OywgXCYjMzQ7bWF4XFxuXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAobm9kZXNbMF0uYnBmLm1heF9wYWdlcyAhPSBtYXg2NCBcdTAwMjZcdTAwMjYgbm9kZXNbMF0uYnBmLm1heF9wYWdlcyAhPSBtYXgzMikge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7bWVtb3J5Lm1heCByZWFkcyBtYXgsIGtmdW5jIHJlcG9ydHMgJWxsdSBwYWdlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgIG5vZGVzWzBdLmJwZi5tYXhfcGFnZXMpO1xuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogLS0tLSBvbmUgY2FzZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuJiM0MztcbiYjNDM7c3RydWN0IHRlc3RjYXNlIHtcbiYjNDM7XHRjb25zdCBjaGFyICpuYW1lO1xuJiM0MztcdGludCBmYW5vdXQ7XG4mIzQzO1x0aW50IGRlcHRoO1xuJiM0MztcdGludCBjcHVzX3Blcl9sZWFmO1x0LyogSywgb3IgMCBmb3IgdGhlIGJvdW5kZWQgY3Jvc3MtQ1BVIGNvdW50ICovXG4mIzQzO1x0c2l6ZV90IHJlc2lkZW50X2J5dGVzO1x0LyogYW5vbiBwZXIgbGVhZiwgcmFpc2VkIGlmIHRvbyBzbWFsbCAqL1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBydW5fY2FzZShjb25zdCBzdHJ1Y3QgdGVzdGNhc2UgKnRjKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJvb3RfZmQgPSAtMSwgcmV0ID0gS1NGVF9GQUlMLCBlcnIsIGs7XG4mIzQzO1x0c2l6ZV90IGNoYXJnZWQ7XG4mIzQzO1xuJiM0MztcdGlmIChidWlsZF90cmVlKHRjLVx1MDAzZWZhbm91dCwgdGMtXHUwMDNlZGVwdGgsIFx1MDAyNnJvb3RfZmQpKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtjYW5ub3QgYnVpbGQgdGhlIHRyZWVcXG5cJiMzNDspO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRrID0gdGMtXHUwMDNlY3B1c19wZXJfbGVhZjtcbiYjNDM7XHRpZiAoayBcdTAwM2M9IDApXG4mIzQzO1x0XHRrID0gbl9jcHUgXHUwMDNjIE1BWF9DUFVTX1BFUl9MRUFGID8gbl9jcHUgOiBNQVhfQ1BVU19QRVJfTEVBRjtcbiYjNDM7XHRlbHNlIGlmIChrIFx1MDAzZSBuX2NwdSlcbiYjNDM7XHRcdGsgPSBuX2NwdTtcbiYjNDM7XHRlcnIgPSBsZWFmX2NoYXJnZSh0Yy1cdTAwM2VyZXNpZGVudF9ieXRlcywgaywgXHUwMDI2Y2hhcmdlZCk7XG4mIzQzO1x0aWYgKGVyciA9PSAtRTJCSUcpIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0OyVzIG5lZWRzIG1vcmUgdGhhbiAlbHVNQiB0byB0cmlnZ2VyIGEgZmx1c2ggb24gJWxkIG9ubGluZSBDUFVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICAgdGMtXHUwMDNlbmFtZSwgTUFYX1RPVEFMX0NIQVJHRSBcdTAwM2VcdTAwM2UgMjAsIG5fb25saW5lX2NwdSk7XG4mIzQzO1x0XHRyZXQgPSBLU0ZUX1NLSVA7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7Y2Fubm90IGNhbGN1bGF0ZSB0aGUgY2hhcmdlIGZvciAlczogJXMgKCVkKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgIHRjLVx1MDAzZW5hbWUsIHN0cmVycm9yKC1lcnIpLCBlcnIpO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRrc2Z0X3ByaW50X21zZyhcJiMzNDslczogJWQgY2dyb3VwcywgJWQgbGVhdmVzLCAlZC8lZCBjcHVzLCAlenVLQiBwZXIgbGVhZlxcblwmIzM0OyxcbiYjNDM7XHRcdCAgICAgICB0Yy1cdTAwM2VuYW1lLCBuX25vZGVzLCBuX2xlYXZlcywgaywgbl9jcHUsIGNoYXJnZWQgXHUwMDNlXHUwMDNlIDEwKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHN0YXJ0X2NoYXJnZXJzKGssIGNoYXJnZWQpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdC8qIFJlYWQgQlBGIGZpcnN0OyBtZW1vcnkuc3RhdCB3b3VsZCBjb25zdW1lIHRoZSBwZW5kaW5nIGZsdXNoLiAqL1xuJiM0MztcdGlmIChyZWFkX2JwZihyb290X2ZkKSB8fCByZWFkX2ZpbGVzKDApIHx8IHJlYWRfZmlsZXMoMSkpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFjaGVja190cmVlKGNoYXJnZWQpIFx1MDAyNlx1MDAyNiAhY2hlY2tfdW5saW1pdGVkKCkpXG4mIzQzO1x0XHRyZXQgPSBLU0ZUX1BBU1M7XG4mIzQzO291dDpcbiYjNDM7XHRpZiAocm9vdF9mZCBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZShyb290X2ZkKTtcbiYjNDM7XHRkZXN0cm95X3RyZWUoKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHRlc3RjYXNlIGNhc2VzW10gPSB7XG4mIzQzO1x0LyogbmFtZSwgZmFub3V0LCBkZXB0aCwgSywgYW5vbiBwZXIgbGVhZiAqL1xuJiM0MztcdHsgXCYjMzQ7c2luZ2xlX2NwdV9zbWFsbF90cmVlXCYjMzQ7LCA0LCAyLCAxLCAyIFx1MDAzY1x1MDAzYyAyMCB9LFxuJiM0MztcdHsgXCYjMzQ7Y3Jvc3NfY3B1X3NtYWxsX3RyZWVcJiMzNDssIDQsIDIsIDAsIDIgXHUwMDNjXHUwMDNjIDIwIH0sXG4mIzQzO1x0eyBcJiMzNDtzaW5nbGVfY3B1X2xhcmdlX3RyZWVcJiMzNDssIDQsIDMsIDEsIDI1NiBcdTAwM2NcdTAwM2MgMTAgfSxcbiYjNDM7XHR7IFwmIzM0O2Nyb3NzX2NwdV9sYXJnZV90cmVlXCYjMzQ7LCA0LCAzLCAwLCAyNTYgXHUwMDNjXHUwMDNjIDEwIH0sXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBtZW1jZ19rZnVuY3NfYXZhaWxhYmxlKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qga2Z1bmNzW10gPSB7XG4mIzQzO1x0XHRcJiMzNDticGZfZ2V0X21lbV9jZ3JvdXBcJiMzNDssXG4mIzQzO1x0XHRcJiMzNDticGZfcHV0X21lbV9jZ3JvdXBcJiMzNDssXG4mIzQzO1x0XHRcJiMzNDticGZfbWVtX2Nncm91cF9mbHVzaF9zdGF0c1wmIzM0OyxcbiYjNDM7XHRcdFwmIzM0O2JwZl9tZW1fY2dyb3VwX3BhZ2Vfc3RhdGVcJiMzNDssXG4mIzQzO1x0XHRcJiMzNDticGZfbWVtX2Nncm91cF92bV9ldmVudHNcJiMzNDssXG4mIzQzO1x0fTtcbiYjNDM7XHRzdHJ1Y3QgYnRmICpidGY7XG4mIzQzO1x0aW50IGVyciwgaTtcbiYjNDM7XG4mIzQzO1x0YnRmID0gYnRmX19sb2FkX3ZtbGludXhfYnRmKCk7XG4mIzQzO1x0ZXJyID0gbGliYnBmX2dldF9lcnJvcihidGYpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O2Nhbm5vdCBsb2FkIHZtbGludXggQlRGOiAlcyAoJWQpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICAgc3RyZXJyb3IoLWVyciksIGVycik7XG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGtmdW5jcyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAoYnRmX19maW5kX2J5X25hbWVfa2luZChidGYsIGtmdW5jc1tpXSwgQlRGX0tJTkRfRlVOQykgXHUwMDNlIDApXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7cmVxdWlyZWQga2Z1bmMgJXMgaXMgbm90IGluIHZtbGludXggQlRGXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICAga2Z1bmNzW2ldKTtcbiYjNDM7XHRcdGJ0Zl9fZnJlZShidGYpO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoYnRmX19maW5kX2J5X25hbWVfa2luZChidGYsIFwmIzM0O2JwZl9pdGVyX2Nncm91cFwmIzM0OywgQlRGX0tJTkRfRlVOQykgXHUwMDNjPSAwKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtjZ3JvdXAgQlBGIGl0ZXJhdG9yIGlzIG5vdCBpbiB2bWxpbnV4IEJURlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRidGZfX2ZyZWUoYnRmKTtcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1x0YnRmX19mcmVlKGJ0Zik7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHVuc3VwcG9ydGVkX2JwZl9mZWF0dXJlX2Vycm9yKGludCBlcnIpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZXJyID09IC1FSU5WQUwgfHwgZXJyID09IC1FTk9FTlQgfHwgZXJyID09IC1FT1BOT1RTVVBQO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBSZXR1cm4gMSBpZiBzdXBwb3J0ZWQsIDAgaWYgdW5hdmFpbGFibGUsIG9yIGEgbmVnYXRpdmUgZXJyb3IuICovXG4mIzQzO3N0YXRpYyBpbnQgcHJvYmVfbWVtY2dfYnBmX2ZlYXR1cmVzKGludCByb290X2ZkKVxuJiM0Mzt7XG4mIzQzO1x0REVDTEFSRV9MSUJCUEZfT1BUUyhicGZfaXRlcl9hdHRhY2hfb3B0cywgb3B0cyk7XG4mIzQzO1x0c3RydWN0IG1lbWNnX3N0YXRfY3Jvc3NfY3B1ICpza2VsO1xuJiM0MztcdHVuaW9uIGJwZl9pdGVyX2xpbmtfaW5mbyBsaW5mbyA9IHt9O1xuJiM0MztcdHN0cnVjdCBicGZfbGluayAqbGluayA9IE5VTEw7XG4mIzQzO1x0aW50IHJldCwgZXJyLCBpdGVyX2ZkID0gLTE7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSBtZW1jZ19zdGF0X2Nyb3NzX2NwdV9fb3BlbigpO1xuJiM0MztcdGlmICghc2tlbCkge1xuJiM0MztcdFx0ZXJyID0gZXJybm8gPyAtZXJybm8gOiAtRUlOVkFMO1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7Y2FwYWJpbGl0eSBwcm9iZSBvcGVuIGZhaWxlZDogJXMgKCVkKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgIHN0cmVycm9yKC1lcnIpLCBlcnIpO1xuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IGJwZl9wcm9ncmFtX19zZXRfYXV0b2xvYWQoc2tlbC1cdTAwM2Vwcm9ncy5jZ3JvdXBfbWVtY2dfc3RhdF9jcm9zc19jcHUsXG4mIzQzO1x0XHRcdFx0XHRmYWxzZSk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7ZGlzYWJsaW5nIHRlc3QgcHJvZ3JhbSBmYWlsZWQ6ICVzICglZClcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgICBzdHJlcnJvcigtZXJyKSwgZXJyKTtcbiYjNDM7XHRcdHJldCA9IGVycjtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZXJyID0gbWVtY2dfc3RhdF9jcm9zc19jcHVfX2xvYWQoc2tlbCk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7QlBGIGNhcGFiaWxpdHkgcHJvYmUgbG9hZCBmYWlsZWQ6ICVzICglZClcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgICBzdHJlcnJvcigtZXJyKSwgZXJyKTtcbiYjNDM7XHRcdHJldCA9IHVuc3VwcG9ydGVkX2JwZl9mZWF0dXJlX2Vycm9yKGVycikgPyAwIDogZXJyO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRsaW5mby5jZ3JvdXAuY2dyb3VwX2ZkID0gcm9vdF9mZDtcbiYjNDM7XHRsaW5mby5jZ3JvdXAub3JkZXIgPSBCUEZfQ0dST1VQX0lURVJfU0VMRl9PTkxZO1xuJiM0MztcdG9wdHMubGlua19pbmZvID0gXHUwMDI2bGluZm87XG4mIzQzO1x0b3B0cy5saW5rX2luZm9fbGVuID0gc2l6ZW9mKGxpbmZvKTtcbiYjNDM7XHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9pdGVyKHNrZWwtXHUwMDNlcHJvZ3MubWVtY2dfa2Z1bmNzX3Byb2JlLCBcdTAwMjZvcHRzKTtcbiYjNDM7XHRlcnIgPSBsaWJicGZfZ2V0X2Vycm9yKGxpbmspO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdGxpbmsgPSBOVUxMO1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7QlBGIGNhcGFiaWxpdHkgcHJvYmUgYXR0YWNoIGZhaWxlZDogJXMgKCVkKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgIHN0cmVycm9yKC1lcnIpLCBlcnIpO1xuJiM0MztcdFx0cmV0ID0gdW5zdXBwb3J0ZWRfYnBmX2ZlYXR1cmVfZXJyb3IoZXJyKSA/IDAgOiBlcnI7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGl0ZXJfZmQgPSBicGZfaXRlcl9jcmVhdGUoYnBmX2xpbmtfX2ZkKGxpbmspKTtcbiYjNDM7XHRpZiAoaXRlcl9mZCBcdTAwM2MgMCkge1xuJiM0MztcdFx0ZXJyID0gLWVycm5vO1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7QlBGIGNhcGFiaWxpdHkgcHJvYmUgaXRlcmF0b3IgY3JlYXRpb24gZmFpbGVkOiAlcyAoJWQpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICAgc3RyZXJyb3IoLWVyciksIGVycik7XG4mIzQzO1x0XHRyZXQgPSB1bnN1cHBvcnRlZF9icGZfZmVhdHVyZV9lcnJvcihlcnIpID8gMCA6IGVycjtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gMTtcbiYjNDM7b3V0OlxuJiM0MztcdGlmIChpdGVyX2ZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGNsb3NlKGl0ZXJfZmQpO1xuJiM0MztcdGJwZl9saW5rX19kZXN0cm95KGxpbmspO1xuJiM0MztcdG1lbWNnX3N0YXRfY3Jvc3NfY3B1X19kZXN0cm95KHNrZWwpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiYjNDM7e1xuJiM0MztcdGludCBmZWF0dXJlX2ZkLCBpLCByZXQ7XG4mIzQzO1xuJiM0MztcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XG4mIzQzO1xuJiM0MztcdC8qIFByb2JlIEJURiBiZWZvcmUgb3BlcmF0aW9ucyB0aGF0IG1heSByZXF1aXJlIHByaXZpbGVnZXMuICovXG4mIzQzO1x0aWYgKCFtZW1jZ19rZnVuY3NfYXZhaWxhYmxlKCkpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfc2tpcChcJiMzNDttZW1jZyBCUEYga2Z1bmNzIGFyZSBub3QgYXZhaWxhYmxlXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWYgKGNnX2ZpbmRfdW5pZmllZF9yb290KHJvb3QsIHNpemVvZihyb290KSwgTlVMTCkpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfc2tpcChcJiMzNDtjZ3JvdXAgdjIgaXNuJiMzOTt0IG1vdW50ZWRcXG5cJiMzNDspO1xuJiM0MztcdGZlYXR1cmVfZmQgPSBvcGVuKHJvb3QsIE9fUkRPTkxZIHwgT19ESVJFQ1RPUlkpO1xuJiM0MztcdGlmIChmZWF0dXJlX2ZkIFx1MDAzYyAwKVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O2Nhbm5vdCBvcGVuIGNncm91cCByb290OiAlcyAoJWQpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIHN0cmVycm9yKGVycm5vKSwgZXJybm8pO1xuJiM0MztcdHJldCA9IHByb2JlX21lbWNnX2JwZl9mZWF0dXJlcyhmZWF0dXJlX2ZkKTtcbiYjNDM7XHRjbG9zZShmZWF0dXJlX2ZkKTtcbiYjNDM7XHRpZiAoIXJldClcbiYjNDM7XHRcdGtzZnRfZXhpdF9za2lwKFwmIzM0O3NsZWVwYWJsZSBjZ3JvdXAgaXRlcmF0b3Igb3IgbWVtY2cga2Z1bmNzIGFyZSBub3QgYXZhaWxhYmxlXFxuXCYjMzQ7KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O2Nhbm5vdCBwcm9iZSBCUEYgY2FwYWJpbGl0aWVzOiAlcyAoJWQpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIHN0cmVycm9yKC1yZXQpLCByZXQpO1xuJiM0MztcbiYjNDM7XHRpZiAoY2dfcmVhZF9zdHJzdHIocm9vdCwgXCYjMzQ7Y2dyb3VwLmNvbnRyb2xsZXJzXCYjMzQ7LCBcJiMzNDttZW1vcnlcJiMzNDspKVxuJiM0MztcdFx0a3NmdF9leGl0X3NraXAoXCYjMzQ7bWVtb3J5IGNvbnRyb2xsZXIgaXNuJiMzOTt0IGF2YWlsYWJsZVxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGlmIChjZ19yZWFkX3N0cnN0cihyb290LCBcJiMzNDtjZ3JvdXAuc3VidHJlZV9jb250cm9sXCYjMzQ7LCBcJiMzNDttZW1vcnlcJiMzNDspKVxuJiM0MztcdFx0aWYgKGNnX3dyaXRlKHJvb3QsIFwmIzM0O2Nncm91cC5zdWJ0cmVlX2NvbnRyb2xcJiMzNDssIFwmIzM0OyYjNDM7bWVtb3J5XCYjMzQ7KSlcbiYjNDM7XHRcdFx0a3NmdF9leGl0X3NraXAoXCYjMzQ7RmFpbGVkIHRvIHNldCBtZW1vcnkgY29udHJvbGxlclxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdENQVV9aRVJPKFx1MDAyNmFsbG93ZWRfY3B1cyk7XG4mIzQzO1x0aWYgKHNjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihhbGxvd2VkX2NwdXMpLCBcdTAwMjZhbGxvd2VkX2NwdXMpKVxuJiM0MztcdFx0a3NmdF9leGl0X3NraXAoXCYjMzQ7Y2Fubm90IHJlYWQgQ1BVIGFmZmluaXR5XFxuXCYjMzQ7KTtcbiYjNDM7XHRuX2NwdSA9IENQVV9DT1VOVChcdTAwMjZhbGxvd2VkX2NwdXMpO1xuJiM0MztcdGlmIChuX2NwdSBcdTAwM2M9IDApXG4mIzQzO1x0XHRrc2Z0X2V4aXRfc2tpcChcJiMzNDtubyBDUFUgdG8gcnVuIG9uXFxuXCYjMzQ7KTtcbiYjNDM7XHRuX29ubGluZV9jcHUgPSBzeXNjb25mKF9TQ19OUFJPQ0VTU09SU19PTkxOKTtcbiYjNDM7XHRpZiAobl9vbmxpbmVfY3B1IFx1MDAzYz0gMClcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtjYW5ub3QgZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2Ygb25saW5lIENQVXNcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRwYWdlX3NpemUgPSBzeXNjb25mKF9TQ19QQUdFU0laRSk7XG4mIzQzO1x0aWYgKHBhZ2Vfc2l6ZSBcdTAwM2M9IDApXG4mIzQzO1x0XHRwYWdlX3NpemUgPSBCVUZfU0laRTtcbiYjNDM7XG4mIzQzO1x0c3VidHJlZV9yb290ID0gY2dfbmFtZShyb290LCBTVUJUUkVFX05BTUUpO1xuJiM0MztcdGlmICghc3VidHJlZV9yb290KVxuJiM0MztcdFx0a3NmdF9leGl0X3NraXAoXCYjMzQ7Y2Fubm90IGJ1aWxkIHN1YnRyZWUgcm9vdCBwYXRoXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LyogU2V0IHRoZSBwbGFuIGFmdGVyIGFsbCBnbG9iYWwgc2tpcCBjaGVja3MuICovXG4mIzQzO1x0a3NmdF9zZXRfcGxhbihBUlJBWV9TSVpFKGNhc2VzKSk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoY2FzZXMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3dpdGNoIChydW5fY2FzZShcdTAwMjZjYXNlc1tpXSkpIHtcbiYjNDM7XHRcdGNhc2UgS1NGVF9QQVNTOlxuJiM0MztcdFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3Bhc3MoXCYjMzQ7JXNcXG5cJiMzNDssIGNhc2VzW2ldLm5hbWUpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgS1NGVF9TS0lQOlxuJiM0MztcdFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXCYjMzQ7JXNcXG5cJiMzNDssIGNhc2VzW2ldLm5hbWUpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGRlZmF1bHQ6XG4mIzQzO1x0XHRcdGtzZnRfdGVzdF9yZXN1bHRfZmFpbChcJiMzNDslc1xcblwmIzM0OywgY2FzZXNbaV0ubmFtZSk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZnJlZShzdWJ0cmVlX3Jvb3QpO1xuJiM0MztcdGtzZnRfZmluaXNoZWQoKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X21lbWNvbnRyb2wuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X21lbWNvbnRyb2wuY1xuaW5kZXggMGViZjc5NmYzY2ZmZS4uMTViYTQ2ODc5NTA0MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X21lbWNvbnRyb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfbWVtY29udHJvbC5jXG5AQCAtMjYsNyAmIzQzOzI2LDYgQEBcbiBcbiBzdGF0aWMgYm9vbCBoYXNfbG9jYWxldmVudHM7XG4gc3RhdGljIGJvb2wgaGFzX3JlY3Vyc2l2ZXByb3Q7XG4tc3RhdGljIGludCBwYWdlX3NpemU7XG4gXG4gaW50IGdldF90ZW1wX2ZkKHZvaWQpXG4ge1xuQEAgLTU2LDI4ICYjNDM7NTUsMTIgQEAgaW50IGFsbG9jX3BhZ2VjYWNoZShpbnQgZmQsIHNpemVfdCBzaXplKVxuIFx0cmV0dXJuIC0xO1xuIH1cbiBcbi1zdGF0aWMgY2hhciAqYWxsb2NfYW5kX3BvcHVsYXRlX2Fub24oc2l6ZV90IHNpemUpXG4te1xuLVx0Y2hhciAqYnVmLCAqcHRyO1xuLVxuLVx0YnVmID0gbWFsbG9jKHNpemUpO1xuLVx0aWYgKGJ1ZiA9PSBOVUxMKSB7XG4tXHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDttYWxsb2MoKSBmYWlsZWRcXG5cJiMzNDspO1xuLVx0XHRyZXR1cm4gTlVMTDtcbi1cdH1cbi1cbi1cdGZvciAocHRyID0gYnVmOyBwdHIgXHUwMDNjIGJ1ZiAmIzQzOyBzaXplOyBwdHIgJiM0Mzs9IHBhZ2Vfc2l6ZSlcbi1cdFx0KnB0ciA9IDA7XG4tXG4tXHRyZXR1cm4gYnVmO1xuLX1cbi1cbiBpbnQgYWxsb2NfYW5vbihjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZylcbiB7XG4gXHRzaXplX3Qgc2l6ZSA9ICh1bnNpZ25lZCBsb25nKWFyZztcbiBcdGNoYXIgKmJ1ZjtcbiBcbi1cdGJ1ZiA9IGFsbG9jX2FuZF9wb3B1bGF0ZV9hbm9uKHNpemUpO1xuJiM0MztcdGJ1ZiA9IGNnX2FsbG9jX2Fub24oc2l6ZSk7XG4gXHRpZiAoIWJ1ZilcbiBcdFx0cmV0dXJuIC0xO1xuIFxuQEAgLTE5NSw3ICYjNDM7MTc4LDcgQEAgc3RhdGljIGludCBhbGxvY19hbm9uXzUwTV9jaGVjayhjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZylcbiBcdGxvbmcgYW5vbiwgY3VycmVudDtcbiBcdGludCByZXQgPSAtMTtcbiBcbi1cdGJ1ZiA9IGFsbG9jX2FuZF9wb3B1bGF0ZV9hbm9uKHNpemUpO1xuJiM0MztcdGJ1ZiA9IGNnX2FsbG9jX2Fub24oc2l6ZSk7XG4gXHRpZiAoIWJ1ZilcbiBcdFx0cmV0dXJuIC0xO1xuIFxuQEAgLTQyMCw3ICYjNDM7NDAzLDcgQEAgc3RhdGljIGludCBhbGxvY19hbm9uX25vZXhpdChjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZylcbiBcdHNpemVfdCBzaXplID0gKHVuc2lnbmVkIGxvbmcpYXJnO1xuIFx0Y2hhciAqYnVmO1xuIFxuLVx0YnVmID0gYWxsb2NfYW5kX3BvcHVsYXRlX2Fub24oc2l6ZSk7XG4mIzQzO1x0YnVmID0gY2dfYWxsb2NfYW5vbihzaXplKTtcbiBcdGlmICghYnVmKVxuIFx0XHRyZXR1cm4gLTE7XG4gXG5AQCAtMTAwMSw3ICYjNDM7OTg0LDcgQEAgc3RhdGljIGludCBhbGxvY19hbm9uXzUwTV9jaGVja19zd2FwKGNvbnN0IGNoYXIgKmNncm91cCwgdm9pZCAqYXJnKVxuIFx0bG9uZyBtZW1fY3VycmVudCwgc3dhcF9jdXJyZW50O1xuIFx0aW50IHJldCA9IC0xO1xuIFxuLVx0YnVmID0gYWxsb2NfYW5kX3BvcHVsYXRlX2Fub24oc2l6ZSk7XG4mIzQzO1x0YnVmID0gY2dfYWxsb2NfYW5vbihzaXplKTtcbiBcdGlmICghYnVmKVxuIFx0XHRyZXR1cm4gLTE7XG4gXG5AQCAtMTc5MywxMCAmIzQzOzE3NzYsNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRjaGFyIHJvb3RbUEFUSF9NQVhdO1xuIFx0aW50IGksIHByb2Nfc3RhdHVzO1xuIFxuLVx0cGFnZV9zaXplID0gc3lzY29uZihfU0NfUEFHRV9TSVpFKTtcbi1cdGlmIChwYWdlX3NpemUgXHUwMDNjPSAwKVxuLVx0XHRwYWdlX3NpemUgPSBCVUZfU0laRTtcbi1cbiBcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XG4gXHRrc2Z0X3NldF9wbGFuKEFSUkFZX1NJWkUodGVzdHMpKTtcbiBcdGlmIChjZ19maW5kX3VuaWZpZWRfcm9vdChyb290LCBzaXplb2Yocm9vdCksIE5VTEwpKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC8uZ2l0aWdub3JlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvaGlkLy5naXRpZ25vcmVcbmluZGV4IDkzM2Y0ODM4MTViMmMuLjY5OTQzMzAxZGMxZDcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvLmdpdGlnbm9yZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvaGlkLy5naXRpZ25vcmVcbkBAIC0xLDUgJiM0MzsxLDYgQEBcbiBicGZ0b29sXG4gKi5za2VsLmhcbiYjNDM7Ki5icGYuZFxuIC9ob3N0LXRvb2xzXG4gL3Rvb2xzXG4gaGlkX2JwZlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC9NYWtlZmlsZVxuaW5kZXggMmY0MjNkZTgzMTQ3My4uMTE5MGE3NDcwMzZkYSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvaGlkL01ha2VmaWxlXG5AQCAtNDcsNyAmIzQzOzQ3LDYgQEAgbXNnID1cbiBlbHNlXG4gbXNnID0gQHByaW50ZiAmIzM5OyAgJS04cyVzICVzJXNcXG4mIzM5OyBcJiMzNDskKDEpXCYjMzQ7IFwmIzM0OyQoaWYgJCgyKSwgWyQoMildKVwmIzM0OyBcJiMzNDskKG5vdGRpciAkKDMpKVwmIzM0OyBcJiMzNDskKGlmICQoNCksICQoNCkpXCYjMzQ7O1xuIE1BS0VGTEFHUyAmIzQzOz0gLS1uby1wcmludC1kaXJlY3Rvcnlcbi1zdWJtYWtlX2V4dHJhcyA6PSBmZWF0dXJlX2Rpc3BsYXk9MFxuIGVuZGlmXG4gXG4gIyBvdmVycmlkZSBsaWIubWsmIzM5O3MgZGVmYXVsdCBydWxlc1xuQEAgLTU4LDE3MiAmIzQzOzU3LDI1IEBAIG92ZXJyaWRlIGRlZmluZSBDTEVBTlxuIFx0JChRKSQoUk0pIC1yICQoRVhUUkFfQ0xFQU4pXG4gZW5kZWZcbiBcbi1pbmNsdWRlIC4uL2xpYi5ta1xuLVxuLVRPT0xTRElSIDo9ICQodG9wX3NyY2RpcikvdG9vbHNcbi1MSUJESVIgOj0gJChUT09MU0RJUikvbGliXG4tQlBGRElSIDo9ICQoTElCRElSKS9icGZcbi1UT09MU0lOQ0RJUiA6PSAkKFRPT0xTRElSKS9pbmNsdWRlXG4tQlBGVE9PTERJUiA6PSAkKFRPT0xTRElSKS9icGYvYnBmdG9vbFxuLVNDUkFUQ0hfRElSIDo9ICQoT1VUUFVUKS90b29sc1xuLUJVSUxEX0RJUiA6PSAkKFNDUkFUQ0hfRElSKS9idWlsZFxuLUlOQ0xVREVfRElSIDo9ICQoU0NSQVRDSF9ESVIpL2luY2x1ZGVcbi1CUEZPQkogOj0gJChCVUlMRF9ESVIpL2xpYmJwZi9saWJicGYuYVxuLWlmbmVxICgkKENST1NTX0NPTVBJTEUpLClcbi1IT1NUX0JVSUxEX0RJUlx0XHQ6PSAkKEJVSUxEX0RJUikvaG9zdFxuLUhPU1RfU0NSQVRDSF9ESVJcdDo9ICQoT1VUUFVUKS9ob3N0LXRvb2xzXG4tSE9TVF9JTkNMVURFX0RJUlx0Oj0gJChIT1NUX1NDUkFUQ0hfRElSKS9pbmNsdWRlXG4tZWxzZVxuLUhPU1RfQlVJTERfRElSXHRcdDo9ICQoQlVJTERfRElSKVxuLUhPU1RfU0NSQVRDSF9ESVJcdDo9ICQoU0NSQVRDSF9ESVIpXG4tSE9TVF9JTkNMVURFX0RJUlx0Oj0gJChJTkNMVURFX0RJUilcbi1lbmRpZlxuLUhPU1RfQlBGT0JKIDo9ICQoSE9TVF9CVUlMRF9ESVIpL2xpYmJwZi9saWJicGYuYVxuLVJFU09MVkVfQlRGSURTIDo9ICQoSE9TVF9CVUlMRF9ESVIpL3Jlc29sdmVfYnRmaWRzL3Jlc29sdmVfYnRmaWRzXG4tXG4tVk1MSU5VWF9CVEZfUEFUSFMgPz0gJChpZiAkKE8pLCQoTykvdm1saW51eClcdFx0XHRcdFxcXG4tXHRcdCAgICAgJChpZiAkKEtCVUlMRF9PVVRQVVQpLCQoS0JVSUxEX09VVFBVVCkvdm1saW51eClcdFxcXG4tXHRcdCAgICAgLi4vLi4vLi4vLi4vdm1saW51eFx0XHRcdFx0XFxcbi1cdFx0ICAgICAvc3lzL2tlcm5lbC9idGYvdm1saW51eFx0XHRcdFx0XFxcbi1cdFx0ICAgICAvYm9vdC92bWxpbnV4LSQoc2hlbGwgdW5hbWUgLXIpXG4tVk1MSU5VWF9CVEYgPz0gJChhYnNwYXRoICQoZmlyc3R3b3JkICQod2lsZGNhcmQgJChWTUxJTlVYX0JURl9QQVRIUykpKSlcbi1pZmVxICgkKFZNTElOVVhfQlRGKSwpXG4tJChlcnJvciBDYW5ub3QgZmluZCBhIHZtbGludXggZm9yIFZNTElOVVhfQlRGIGF0IGFueSBvZiBcJiMzNDskKFZNTElOVVhfQlRGX1BBVEhTKVwmIzM0Oylcbi1lbmRpZlxuLVxuLSMgRGVmaW5lIHNpbXBsZSBhbmQgc2hvcnQgYG1ha2UgdGVzdF9wcm9nc2AsIGBtYWtlIHRlc3Rfc3lzY3RsYCwgZXRjIHRhcmdldHNcbi0jIHRvIGJ1aWxkIGluZGl2aWR1YWwgdGVzdHMuXG4tIyBOT1RFOiBTZW1pY29sb24gYXQgdGhlIGVuZCBpcyBjcml0aWNhbCB0byBvdmVycmlkZSBsaWIubWsmIzM5O3MgZGVmYXVsdCBzdGF0aWNcbi0jIHJ1bGUgZm9yIGJpbmFyaWVzLlxuLSQobm90ZGlyICQoVEVTVF9HRU5fUFJPR1MpKTogJTogJChPVVRQVVQpLyUgO1xuLVxuLSMgc29ydCByZW1vdmVzIGxpYmJwZiBkdXBsaWNhdGVzIHdoZW4gbm90IGNyb3NzLWJ1aWxkaW5nXG4tTUFLRV9ESVJTIDo9ICQoc29ydCAkKEJVSUxEX0RJUikvbGliYnBmICQoSE9TVF9CVUlMRF9ESVIpL2xpYmJwZlx0XHRcXFxuLVx0ICAgICAgICQoSE9TVF9CVUlMRF9ESVIpL2JwZnRvb2wgJChIT1NUX0JVSUxEX0RJUikvcmVzb2x2ZV9idGZpZHNcdFxcXG4tXHQgICAgICAgJChJTkNMVURFX0RJUikpXG4tJChNQUtFX0RJUlMpOlxuLVx0JChjYWxsIG1zZyxNS0RJUiwsJEApXG4tXHQkKFEpbWtkaXIgLXAgJEBcbiYjNDM7IyBCdWlsZCB0aGUgbGVnYWN5IHByb2dzLyouYyBsYXlvdXQgd2l0aCB0aGUgc2hhcmVkIEJQRiBydWxlcy5cbiYjNDM7QlBGX1NSQ1MgICAgICAgOj0gJCh3aWxkY2FyZCBwcm9ncy8qLmMpXG4mIzQzO0JQRl9QUk9HX0VYVCAgIDo9IC5jXG4mIzQzOyMgQlBGRElSIGlzIGRlZmluZWQgd2hlbiB0aGlzIHJlY3Vyc2l2ZSB2YXJpYWJsZSBpcyBleHBhbmRlZC5cbiYjNDM7QlBGX0VYVFJBX0hEUlMgID0gJCh3aWxkY2FyZCBwcm9ncy8qLmgpICQod2lsZGNhcmQgJChCUEZESVIpL2hpZF9icGZfKi5oKSBcXFxuJiM0MztcdFx0ICAkKHdpbGRjYXJkICQoQlBGRElSKS8qLmJwZi5oKVxuIFxuLURFRkFVTFRfQlBGVE9PTCA6PSAkKEhPU1RfU0NSQVRDSF9ESVIpL3NiaW4vYnBmdG9vbFxuJiM0MztpbmNsdWRlIC4uL2xpYi5ta1xuJiM0MztpbmNsdWRlIC4uL2xpYi5icGYubWtcbiBcbiYjNDM7IyBQcmVzZXJ2ZSB0aGUgZXhpc3RpbmcgaW5zdGFsbCBsaXN0LlxuJiM0MztURVNUX0dFTl9GSUxFUyAmIzQzOz0gJChCUEZfT0JKUylcbiBURVNUX0dFTl9QUk9HU19FWFRFTkRFRCAmIzQzOz0gJChERUZBVUxUX0JQRlRPT0wpXG4gXG4tJChURVNUX0dFTl9QUk9HUykgJChURVNUX0dFTl9QUk9HU19FWFRFTkRFRCk6ICQoQlBGT0JKKVxuLVxuLUJQRlRPT0wgPz0gJChERUZBVUxUX0JQRlRPT0wpXG4tJChERUZBVUxUX0JQRlRPT0wpOiAkKHdpbGRjYXJkICQoQlBGVE9PTERJUikvKi5bY2hdICQoQlBGVE9PTERJUikvTWFrZWZpbGUpICAgIFxcXG4tXHRcdCAgICAkKEhPU1RfQlBGT0JKKSB8ICQoSE9TVF9CVUlMRF9ESVIpL2JwZnRvb2xcbi1cdCQoUSkkKE1BS0UpICQoc3VibWFrZV9leHRyYXMpICAtQyAkKEJQRlRPT0xESVIpXHRcdFx0ICAgICAgIFxcXG4tXHRcdCAgICBBUkNIPSBDUk9TU19DT01QSUxFPSBDQz0kKEhPU1RDQykgTEQ9JChIT1NUTEQpIFx0ICAgICAgIFxcXG4tXHRcdCAgICBFWFRSQV9DRkxBR1M9JiMzOTstZyAtTzAmIzM5O1x0XHRcdFx0ICAgICAgIFxcXG4tXHRcdCAgICBPVVRQVVQ9JChIT1NUX0JVSUxEX0RJUikvYnBmdG9vbC9cdFx0XHQgICAgICAgXFxcbi1cdFx0ICAgIExJQkJQRl9PVVRQVVQ9JChIT1NUX0JVSUxEX0RJUikvbGliYnBmL1x0XHQgICAgICAgXFxcbi1cdFx0ICAgIExJQkJQRl9ERVNURElSPSQoSE9TVF9TQ1JBVENIX0RJUikvXHRcdFx0ICAgICAgIFxcXG4tXHRcdCAgICBwcmVmaXg9IERFU1RESVI9JChIT1NUX1NDUkFUQ0hfRElSKS8gaW5zdGFsbC1iaW5cbi1cbi0kKEJQRk9CSik6ICQod2lsZGNhcmQgJChCUEZESVIpLyouW2NoXSAkKEJQRkRJUikvTWFrZWZpbGUpXHRcdCAgICAgICBcXFxuLVx0ICAgfCAkKEJVSUxEX0RJUikvbGliYnBmXG4tXHQkKFEpJChNQUtFKSAkKHN1Ym1ha2VfZXh0cmFzKSAtQyAkKEJQRkRJUikgT1VUUFVUPSQoQlVJTERfRElSKS9saWJicGYvIFxcXG4tXHRcdCAgICBFWFRSQV9DRkxBR1M9JiMzOTstZyAtTzAmIzM5O1x0XHRcdFx0ICAgICAgIFxcXG4tXHRcdCAgICBERVNURElSPSQoU0NSQVRDSF9ESVIpIHByZWZpeD0gYWxsIGluc3RhbGxfaGVhZGVyc1xuLVxuLWlmbmVxICgkKEJQRk9CSiksJChIT1NUX0JQRk9CSikpXG4tJChIT1NUX0JQRk9CSik6ICQod2lsZGNhcmQgJChCUEZESVIpLyouW2NoXSAkKEJQRkRJUikvTWFrZWZpbGUpXHRcdCAgICAgICBcXFxuLVx0XHR8ICQoSE9TVF9CVUlMRF9ESVIpL2xpYmJwZlxuLVx0JChRKSQoTUFLRSkgJChzdWJtYWtlX2V4dHJhcykgLUMgJChCUEZESVIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuLVx0XHQgICAgRVhUUkFfQ0ZMQUdTPSYjMzk7LWcgLU8wJiMzOTsgQVJDSD0gQ1JPU1NfQ09NUElMRT1cdFx0ICAgICAgIFxcXG4tXHRcdCAgICBPVVRQVVQ9JChIT1NUX0JVSUxEX0RJUikvbGliYnBmLyBDQz0kKEhPU1RDQykgTEQ9JChIT1NUTEQpIFxcXG4tXHRcdCAgICBERVNURElSPSQoSE9TVF9TQ1JBVENIX0RJUikvIHByZWZpeD0gYWxsIGluc3RhbGxfaGVhZGVyc1xuLWVuZGlmXG4tXG4tJChJTkNMVURFX0RJUikvdm1saW51eC5oOiAkKFZNTElOVVhfQlRGKSAkKEJQRlRPT0wpIHwgJChJTkNMVURFX0RJUilcbi1pZmVxICgkKFZNTElOVVhfSCksKVxuLVx0JChjYWxsIG1zZyxHRU4sLCRAKVxuLVx0JChRKSQoQlBGVE9PTCkgYnRmIGR1bXAgZmlsZSAkKFZNTElOVVhfQlRGKSBmb3JtYXQgYyBcdTAwM2UgJEBcbi1lbHNlXG4tXHQkKGNhbGwgbXNnLENQLCwkQClcbi1cdCQoUSljcCBcJiMzNDskKFZNTElOVVhfSClcJiMzNDsgJEBcbi1lbmRpZlxuLVxuLSQoUkVTT0xWRV9CVEZJRFMpOiAkKEhPU1RfQlBGT0JKKSB8ICQoSE9TVF9CVUlMRF9ESVIpL3Jlc29sdmVfYnRmaWRzXHRcXFxuLVx0XHQgICAgICAgJChUT09MU0RJUikvYnBmL3Jlc29sdmVfYnRmaWRzL21haW4uY1x0XFxcbi1cdFx0ICAgICAgICQoVE9PTFNESVIpL2xpYi9yYnRyZWUuY1x0XHRcdFxcXG4tXHRcdCAgICAgICAkKFRPT0xTRElSKS9saWIvemFsbG9jLmNcdFx0XHRcXFxuLVx0XHQgICAgICAgJChUT09MU0RJUikvbGliL3N0cmluZy5jXHRcdFx0XFxcbi1cdFx0ICAgICAgICQoVE9PTFNESVIpL2xpYi9jdHlwZS5jXHRcdFx0XFxcbi1cdFx0ICAgICAgICQoVE9PTFNESVIpL2xpYi9zdHJfZXJyb3Jfci5jXG4tXHQkKFEpJChNQUtFKSAkKHN1Ym1ha2VfZXh0cmFzKSAtQyAkKFRPT0xTRElSKS9icGYvcmVzb2x2ZV9idGZpZHNcdFxcXG4tXHRcdENDPSQoSE9TVENDKSBMRD0kKEhPU1RMRCkgQVI9JChIT1NUQVIpIFxcXG4tXHRcdExJQkJQRl9JTkNMVURFPSQoSE9TVF9JTkNMVURFX0RJUikgXFxcbi1cdFx0T1VUUFVUPSQoSE9TVF9CVUlMRF9ESVIpL3Jlc29sdmVfYnRmaWRzLyBCUEZPQko9JChIT1NUX0JQRk9CSilcbi1cbi0jIEdldCBDbGFuZyYjMzk7cyBkZWZhdWx0IGluY2x1ZGVzIG9uIHRoaXMgc3lzdGVtLCBhcyBvcHBvc2VkIHRvIHRob3NlIHNlZW4gYnlcbi0jICYjMzk7LS10YXJnZXQ9YnBmJiMzOTsuIFRoaXMgZml4ZXMgXCYjMzQ7bWlzc2luZ1wmIzM0OyBmaWxlcyBvbiBzb21lIGFyY2hpdGVjdHVyZXMvZGlzdHJvcyxcbi0jIHN1Y2ggYXMgYXNtL2J5dGVvcmRlci5oLCBhc20vc29ja2V0LmgsIGFzbS9zb2NraW9zLmgsIHN5cy9jZGVmcy5oIGV0Yy5cbi0jXG4tIyBVc2UgJiMzOTstaWRpcmFmdGVyJiMzOTs6IERvbiYjMzk7dCBpbnRlcmZlcmUgd2l0aCBpbmNsdWRlIG1lY2hhbmljcyBleGNlcHQgd2hlcmUgdGhlXG4tIyBidWlsZCB3b3VsZCBoYXZlIGZhaWxlZCBhbnl3YXlzLlxuLWRlZmluZSBnZXRfc3lzX2luY2x1ZGVzXG4tJChzaGVsbCAkKDEpIC12IC1FIC0gXHUwMDNjL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxIFxcXG4tXHR8IHNlZCAtbiAmIzM5Oy9cdTAwM2MuLi5cdTAwM2Ugc2VhcmNoIHN0YXJ0cyBoZXJlOi8sL0VuZCBvZiBzZWFyY2ggbGlzdC4veyBzfCBcXCgvLipcXCl8LWlkaXJhZnRlciBcXDF8cCB9JiMzOTspIFxcXG4tJChzaGVsbCAkKDEpIC1kTSAtRSAtIFx1MDAzYy9kZXYvbnVsbCB8IGdyZXAgJiMzOTtfX3Jpc2N2X3hsZW4gJiMzOTsgfCBhd2sgJiMzOTt7cHJpbnRmKFwmIzM0Oy1EX19yaXNjdl94bGVuPSVkIC1EX19CSVRTX1BFUl9MT05HPSVkXCYjMzQ7LCAkJDMsICQkMyl9JiMzOTspXG4tZW5kZWZcbi1cbi0jIERldGVybWluZSB0YXJnZXQgZW5kaWFubmVzcy5cbi1JU19MSVRUTEVfRU5ESUFOID0gJChzaGVsbCAkKENDKSAtZE0gLUUgLSBcdTAwM2MvZGV2L251bGwgfCBcXFxuLVx0XHRcdGdyZXAgJiMzOTtkZWZpbmUgX19CWVRFX09SREVSX18gX19PUkRFUl9MSVRUTEVfRU5ESUFOX18mIzM5Oylcbi1NRU5ESUFOPSQoaWYgJChJU19MSVRUTEVfRU5ESUFOKSwtbWxpdHRsZS1lbmRpYW4sLW1iaWctZW5kaWFuKVxuLVxuLUNMQU5HX1NZU19JTkNMVURFUyA9ICQoY2FsbCBnZXRfc3lzX2luY2x1ZGVzLCQoQ0xBTkcpKVxuLUJQRl9DRkxBR1MgPSAtZyAtV2Vycm9yIC1EX19UQVJHRVRfQVJDSF8kKFNSQ0FSQ0gpICQoTUVORElBTikgXHRcdFxcXG4tXHQgICAgIC1Xbm8tbWljcm9zb2Z0LWFub24tdGFnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbi1cdCAgICAgLWZtcy1leHRlbnNpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuLVx0ICAgICAtSSQoSU5DTFVERV9ESVIpXG4tXG4tQ0xBTkdfQ0ZMQUdTID0gJChDTEFOR19TWVNfSU5DTFVERVMpIFxcXG4tXHQgICAgICAgLVduby1jb21wYXJlLWRpc3RpbmN0LXBvaW50ZXItdHlwZXNcbi1cbi0jIEJ1aWxkIEJQRiBvYmplY3QgdXNpbmcgQ2xhbmdcbi0jICQxIC0gaW5wdXQgLmMgZmlsZVxuLSMgJDIgLSBvdXRwdXQgLm8gZmlsZVxuLSMgJDMgLSBDRkxBR1Ncbi1kZWZpbmUgQ0xBTkdfQlBGX0JVSUxEX1JVTEVcbi1cdCQoY2FsbCBtc2csQ0xORy1CUEYsJChUUlVOTkVSX0JJTkFSWSksJDIpXG4tXHQkKFEpJChDTEFORykgJDMgLU8yIC0tdGFyZ2V0PWJwZiAtYyAkMSAtbWNwdT12MyAtbyAkMlxuLWVuZGVmXG4tIyBTaW1pbGFyIHRvIENMQU5HX0JQRl9CVUlMRF9SVUxFLCBidXQgd2l0aCBkaXNhYmxlZCBhbHUzMlxuLWRlZmluZSBDTEFOR19OT0FMVTMyX0JQRl9CVUlMRF9SVUxFXG4tXHQkKGNhbGwgbXNnLENMTkctQlBGLCQoVFJVTk5FUl9CSU5BUlkpLCQyKVxuLVx0JChRKSQoQ0xBTkcpICQzIC1PMiAtLXRhcmdldD1icGYgLWMgJDEgLW1jcHU9djIgLW8gJDJcbi1lbmRlZlxuLSMgQnVpbGQgQlBGIG9iamVjdCB1c2luZyBHQ0Ncbi1kZWZpbmUgR0NDX0JQRl9CVUlMRF9SVUxFXG4tXHQkKGNhbGwgbXNnLEdDQy1CUEYsJChUUlVOTkVSX0JJTkFSWSksJDIpXG4tXHQkKFEpJChCUEZfR0NDKSAkMyAtTzIgLWMgJDEgLW8gJDJcbi1lbmRlZlxuLVxuLUJQRl9QUk9HU19ESVIgOj0gcHJvZ3Ncbi1CUEZfQlVJTERfUlVMRSA6PSBDTEFOR19CUEZfQlVJTERfUlVMRVxuLUJQRl9TUkNTIDo9ICQobm90ZGlyICQod2lsZGNhcmQgJChCUEZfUFJPR1NfRElSKS8qLmMpKVxuLUJQRl9PQkpTIDo9ICQocGF0c3Vic3QgJS5jLCQoT1VUUFVUKS8lLmJwZi5vLCAkKEJQRl9TUkNTKSlcbi1CUEZfU0tFTFMgOj0gJChwYXRzdWJzdCAlLmMsJChPVVRQVVQpLyUuc2tlbC5oLCAkKEJQRl9TUkNTKSlcbi1URVNUX0dFTl9GSUxFUyAmIzQzOz0gJChCUEZfT0JKUylcbiYjNDM7IyBLZWVwIGFsaWFzZXMgc3VjaCBhcyBcJiMzNDttYWtlIGhpZF9icGZcJiMzNDsgZnJvbSBtYXRjaGluZyBsaWIubWsmIzM5O3MgYmluYXJ5IHJ1bGUuXG4mIzQzOyQobm90ZGlyICQoVEVTVF9HRU5fUFJPR1MpKTogJTogJChPVVRQVVQpLyUgO1xuIFxuLSQoQlBGX1BST0dTX0RJUiktYnBmb2JqcyA6PSB5XG4tJChCUEZfT0JKUyk6ICQoT1VUUFVUKS8lLmJwZi5vOlx0XHRcdFx0XFxcbi1cdCAgICAgJChCUEZfUFJPR1NfRElSKS8lLmNcdFx0XHRcXFxuLVx0ICAgICAkKHdpbGRjYXJkICQoQlBGX1BST0dTX0RJUikvKi5oKVx0XHRcXFxuLVx0ICAgICAkKElOQ0xVREVfRElSKS92bWxpbnV4LmhcdFx0XHRcdFxcXG4tXHQgICAgICQod2lsZGNhcmQgJChCUEZESVIpL2hpZF9icGZfKi5oKVx0XHRcdFxcXG4tXHQgICAgICQod2lsZGNhcmQgJChCUEZESVIpLyouYnBmLmgpXHRcdFx0XFxcbi1cdCAgICAgfCAkKE9VVFBVVCkgJChCUEZPQkopXG4tXHQkKGNhbGwgJChCUEZfQlVJTERfUlVMRSksJFx1MDAzYywkQCwgJChCUEZfQ0ZMQUdTKSlcbi1cbi0kKEJQRl9TS0VMUyk6ICUuc2tlbC5oOiAlLmJwZi5vICQoQlBGVE9PTCkgfCAkKE9VVFBVVClcbi1cdCQoY2FsbCBtc2csR0VOLVNLRUwsJChCSU5BUlkpLCRAKVxuLVx0JChRKSQoQlBGVE9PTCkgZ2VuIG9iamVjdCAkKFx1MDAzYzoubz0ubGlua2VkMS5vKSAkXHUwMDNjXG4tXHQkKFEpJChCUEZUT09MKSBnZW4gc2tlbGV0b24gJChcdTAwM2M6Lm89LmxpbmtlZDEubykgbmFtZSAkKG5vdGRpciAkKFx1MDAzYzouYnBmLm89KSkgXHUwMDNlICRAXG4mIzQzOyMgUmVsaW5rIHRlc3RzIHdoZW4gdGhlIGluLXRyZWUgbGliYnBmIGNoYW5nZXMuXG4mIzQzOyQoVEVTVF9HRU5fUFJPR1MpOiAkKEJQRk9CSilcbiBcbiAkKE9VVFBVVCkvJS5vOiAlLmMgJChCUEZfU0tFTFMpIGhpZF9jb21tb24uaFxuIFx0JChjYWxsIG1zZyxDQywsJEApXG5AQCAtMjMzLDUgJiM0Mzs4NSw0IEBAICQoT1VUUFVUKS8lOiAkKE9VVFBVVCkvJS5vXG4gXHQkKGNhbGwgbXNnLEJJTkFSWSwsJEApXG4gXHQkKFEpJChMSU5LLmMpICReICQoTERMSUJTKSAtbyAkQFxuIFxuLUVYVFJBX0NMRUFOIDo9ICQoU0NSQVRDSF9ESVIpICQoSE9TVF9TQ1JBVENIX0RJUikgZmVhdHVyZSBicGZ0b29sXHRcXFxuLVx0JChhZGRwcmVmaXggJChPVVRQVVQpLywqLm8gKi5za2VsLmggbm9fYWx1MzIpXG4mIzQzO0VYVFJBX0NMRUFOICYjNDM7PSAkKE9VVFBVVCkvKi5vXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvaGlkL3Byb2dzL2hpZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvaGlkL3Byb2dzL2hpZC5jXG5pbmRleCBiMjFmYmIxM2M5MjZmLi5lYzczNGUxOGQyM2FlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvaGlkL3Byb2dzL2hpZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvcHJvZ3MvaGlkLmNcbkBAIC0xMTEsNyAmIzQzOzExMSw3IEBAIGludCBoaWRfdXNlcl9yYXdfcmVxdWVzdChzdHJ1Y3QgaGlkX2h3X3JlcXVlc3Rfc3lzY2FsbF9hcmdzICphcmdzKVxuIHtcbiBcdHN0cnVjdCBoaWRfYnBmX2N0eCAqY3R4O1xuIFx0Y29uc3Qgc2l6ZV90IHNpemUgPSBhcmdzLVx1MDAzZXNpemU7XG4tXHRpbnQgaSwgcmV0ID0gMDtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiBcbiBcdGlmIChzaXplIFx1MDAzZSBzaXplb2YoYXJncy1cdTAwM2VkYXRhKSlcbiBcdFx0cmV0dXJuIC03OyAvKiAtRTJCSUcgKi9cbkBAIC0xMzcsNyAmIzQzOzEzNyw3IEBAIGludCBoaWRfdXNlcl9vdXRwdXRfcmVwb3J0KHN0cnVjdCBoaWRfaHdfcmVxdWVzdF9zeXNjYWxsX2FyZ3MgKmFyZ3MpXG4ge1xuIFx0c3RydWN0IGhpZF9icGZfY3R4ICpjdHg7XG4gXHRjb25zdCBzaXplX3Qgc2l6ZSA9IGFyZ3MtXHUwMDNlc2l6ZTtcbi1cdGludCBpLCByZXQgPSAwO1xuJiM0MztcdGludCByZXQgPSAwO1xuIFxuIFx0aWYgKHNpemUgXHUwMDNlIHNpemVvZihhcmdzLVx1MDAzZWRhdGEpKVxuIFx0XHRyZXR1cm4gLTc7IC8qIC1FMkJJRyAqL1xuQEAgLTE2MSw3ICYjNDM7MTYxLDcgQEAgaW50IGhpZF91c2VyX2lucHV0X3JlcG9ydChzdHJ1Y3QgaGlkX2h3X3JlcXVlc3Rfc3lzY2FsbF9hcmdzICphcmdzKVxuIHtcbiBcdHN0cnVjdCBoaWRfYnBmX2N0eCAqY3R4O1xuIFx0Y29uc3Qgc2l6ZV90IHNpemUgPSBhcmdzLVx1MDAzZXNpemU7XG4tXHRpbnQgaSwgcmV0ID0gMDtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiBcbiBcdGlmIChzaXplIFx1MDAzZSBzaXplb2YoYXJncy1cdTAwM2VkYXRhKSlcbiBcdFx0cmV0dXJuIC03OyAvKiAtRTJCSUcgKi9cbkBAIC00MTcsNyAmIzQzOzQxNyw2IEBAIFNFQyhcJiMzNDs/c3RydWN0X29wcy5zL2hpZF9od19vdXRwdXRfcmVwb3J0XCYjMzQ7KVxuIGludCBCUEZfUFJPRyhoaWRfdGVzdF9oaWRyYXdfb3V0cHV0X3JlcG9ydCwgc3RydWN0IGhpZF9icGZfY3R4ICpoY3R4LCBfX3U2NCBzb3VyY2UpXG4ge1xuIFx0X191OCAqZGF0YSA9IGhpZF9icGZfZ2V0X2RhdGEoaGN0eCwgMCAvKiBvZmZzZXQgKi8sIDMgLyogc2l6ZSAqLyk7XG4tXHRpbnQgcmV0O1xuIFxuIFx0aWYgKCFkYXRhKVxuIFx0XHRyZXR1cm4gMDsgLyogRVBFUk0gY2hlY2sgKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9saWIuYnBmLm1rIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbGliLmJwZi5ta1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjkyMzhjYmYxZGUwNjJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2xpYi5icGYubWtcbkBAIC0wLDAgJiM0MzsxLDMyMSBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOyNcbiYjNDM7IyBCdWlsZCBCUEYgcHJvZ3JhbXMgYW5kIHNrZWxldG9ucyBmb3Igc2VsZnRlc3RzLlxuJiM0MzsjXG4mIzQzOyMgVXNlIGl0IGZyb20gYSB0ZXN0IE1ha2VmaWxlIGxpa2UgdGhpczpcbiYjNDM7I1xuJiM0MzsjICAgICBCUEZfU1JDUyAgICAgICAgIDo9IGZvby5icGYuYyBiYXIuYnBmLmNcbiYjNDM7IyAgICAgVEVTVF9HRU5fUFJPR1MgICA6PSBmb29fdGVzdFxuJiM0MzsjICAgICBPVkVSUklERV9UQVJHRVRTIDo9IDEgICAgICAgICAgICAgICMgc2V0IGJlZm9yZSBsaWIubWtcbiYjNDM7IyAgICAgaW5jbHVkZSAuLi9saWIubWtcbiYjNDM7IyAgICAgaW5jbHVkZSAuLi9saWIuYnBmLm1rXG4mIzQzOyNcbiYjNDM7IyAgICAgJChPVVRQVVQpL2Zvb190ZXN0OiBmb29fdGVzdC5jICQoQlBGX1NLRUxTKSAkKEJQRk9CSilcbiYjNDM7IyAgICAgICAgICQoY2FsbCBicGZfbGluaywkQCwkXHUwMDNjKVxuJiM0MzsjXG4mIzQzOyMgRGVwZW5kIG9uICQoQlBGT0JKKSB0byByZWxpbmsgdGhlIHRlc3Qgd2hlbiBsaWJicGYuYSBjaGFuZ2VzLlxuJiM0MzsjXG4mIzQzOyMgT3B0aW9ucyB0byBzZXQgYmVmb3JlIGluY2x1ZGluZyBsaWIuYnBmLm1rOlxuJiM0MzsjICAgQlBGX1BST0dfRVhUICAgICAtIHNvdXJjZSBlbmRpbmc7IGRlZmF1bHQgLmJwZi5jLiBVc2UgLmMgZm9yIHByb2dzL2Zvby5jLlxuJiM0MzsjICAgQlBGX0VYVFJBX0hEUlMgICAtIG1vcmUgaGVhZGVycyBuZWVkZWQgYnkgdGhlIEJQRiBvYmplY3RzLlxuJiM0MzsjICAgQlBGX0VYVFJBX0NGTEFHUyAtIG1vcmUgZmxhZ3MgZm9yIGNvbXBpbGluZyBCUEYgcHJvZ3JhbXMuXG4mIzQzOyMgICBCUEZfU0tFTF9FWFQgICAgIC0gc2tlbGV0b24gaGVhZGVyIGVuZGluZzsgZGVmYXVsdCAuc2tlbC5oLiBNdXN0IGVuZCBpblxuJiM0MzsjICAgICAgICAgICAgICAgICAgICAgIHNrZWwuaC5cbiYjNDM7IyAgIEJQRl9HRU5fU1VCU0tFTCAgLSBhbHNvIGNyZWF0ZSBhIHN1YnNrZWxldG9uIGhlYWRlciB3aGVuIHNldC5cbiYjNDM7IyAgIEJQRl9PQkpfRElSICAgICAgLSBmb2xkZXIgZm9yIEJQRiBvYmplY3RzOyBkZWZhdWx0ICQoT1VUUFVUKS5cbiYjNDM7IyAgIEJQRl9TS0VMX0RJUiAgICAgLSBmb2xkZXIgZm9yIHNrZWxldG9uIGhlYWRlcnM7IGRlZmF1bHQgJChPVVRQVVQpLlxuJiM0MzsjXG4mIzQzOyMgU2V0IG91dHB1dCBkaXJlY3RvcmllcyB0aGF0IHVzZSAkKE9VVFBVVCkgYWZ0ZXIgaW5jbHVkaW5nIGxpYi5tay5cbiYjNDM7I1xuJiM0MzsjIEJQRl9DRkxBR1MgbWF5IGJlIHJlcGxhY2VkIGFmdGVyIHRoaXMgaW5jbHVkZS4gR2VuZXJhdGVkIG5hbWVzIHVzZSB0aGUgc291cmNlXG4mIzQzOyMgc3RlbSB3aXRob3V0IGl0cyBkaXJlY3RvcnkuXG4mIzQzOyNcbiYjNDM7IyBJbmNsdWRlIGxpYi5tayBmaXJzdC4gVGhpcyBmaWxlIGRlZmluZXMgdGhlIEJQRiBidWlsZCB2YXJpYWJsZXMgYW5kIGJwZl9saW5rLFxuJiM0MzsjIGV4dGVuZHMgYWxsLCBDRkxBR1MgYW5kIEVYVFJBX0NMRUFOLCBhbmQgZW5hYmxlcyAuREVMRVRFX09OX0VSUk9SLlxuJiM0MztcbiYjNDM7aW5jbHVkZSAkKHRvcF9zcmNkaXIpL3Rvb2xzL3NjcmlwdHMvTWFrZWZpbGUuYXJjaFx0IyBBUkNIIC8gU1JDQVJDSCAvIEhPU1RBUkNIXG4mIzQzO1xuJiM0MzsjIFJlbW92ZSBwYXJ0aWFsIGZpbGVzIHdyaXR0ZW4gZGlyZWN0bHkgdG8gJEAuXG4mIzQzOy5ERUxFVEVfT05fRVJST1I6XG4mIzQzO1xuJiM0MzsjIE1hdGNoIHRoZSBsaWJicGYgYW5kIGJwZnRvb2wgaG9zdCBjb21waWxlciB0byBMTFZNPS5cbiYjNDM7aWZuZXEgKCQoTExWTSksKVxuJiM0MztIT1NUQ0MgPz0gJChMTFZNX1BSRUZJWCljbGFuZyQoTExWTV9TVUZGSVgpXG4mIzQzO0hPU1RMRCA/PSAkKExMVk1fUFJFRklYKWxkLmxsZCQoTExWTV9TVUZGSVgpXG4mIzQzO2Vsc2VcbiYjNDM7SE9TVENDID89IGdjY1xuJiM0MztIT1NUTEQgPz0gbGRcbiYjNDM7ZW5kaWZcbiYjNDM7Q0xBTkcgID89IGNsYW5nXG4mIzQzO1xuJiM0MztpZm5lcSAoJChWKSwxKVxuJiM0MztsaWJfYnBmX3N1Ym1ha2VfZXh0cmFzIDo9IGZlYXR1cmVfZGlzcGxheT0wXG4mIzQzO2VuZGlmXG4mIzQzO1xuJiM0MzsjIE1hdGNoIHNlbGZ0ZXN0cy9icGYgZGVidWcgYW5kIHJlbGVhc2Ugb3B0aW1pemF0aW9uLlxuJiM0MztPUFRfRkxBR1MgPz0gJChpZiAkKFJFTEVBU0UpLC1PMiwtTzApXG4mIzQzO1xuJiM0MzsjIC0tLS0gZmlsZXMgYW5kIHRvb2xzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MzsjIFVzZSBvbmUgZnVsbCBwYXRoLiBEaWZmZXJlbnQgZm9ybXMgb2YgdGhlIHNhbWUgLUkgcGF0aCBjYW4gY2hhbmdlIEJURiBvcmRlci5cbiYjNDM7bGliX2JwZl90b29sc19kaXIgICAgICAgICA6PSAkKGFic3BhdGggJCh0b3Bfc3JjZGlyKS90b29scylcbiYjNDM7bGliX2JwZl9kaXIgICAgICAgICAgICAgICA6PSAkKGxpYl9icGZfdG9vbHNfZGlyKS9saWIvYnBmXG4mIzQzO2xpYl9icGZfdG9vbHNfaW5jbHVkZV9kaXIgOj0gJChsaWJfYnBmX3Rvb2xzX2RpcikvaW5jbHVkZVxuJiM0MztsaWJfYnBmX2JwZnRvb2xfZGlyICAgICAgIDo9ICQobGliX2JwZl90b29sc19kaXIpL2JwZi9icGZ0b29sXG4mIzQzO2xpYl9icGZfYXBpX2RpciAgICAgICAgICAgOj0gJChsaWJfYnBmX3Rvb2xzX2luY2x1ZGVfZGlyKS91YXBpXG4mIzQzO2xpYl9icGZfc291cmNlcyAgICAgICAgICAgOj0gJCh3aWxkY2FyZCAkKGxpYl9icGZfZGlyKS8qLltjaF0gXFxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICAkKGxpYl9icGZfZGlyKS9NYWtlZmlsZSlcbiYjNDM7bGliX2JwZl9oZWFkZXJfc291cmNlcyAgICA6PSAkKGZpbHRlciAlLmgsJChsaWJfYnBmX3NvdXJjZXMpKSBcXFxuJiM0MztcdFx0XHRcdCAgICAgJChsaWJfYnBmX2FwaV9kaXIpL2xpbnV4L2JwZi5oXG4mIzQzOyMgS2VlcCB0aGVzZSBuYW1lcyBmb3IgY2FsbGVycyB3aGljaCBhZGQgdGhlaXIgb3duIEJQRiBmbGFncyBvciBkZXBlbmRlbmNpZXMuXG4mIzQzO0JQRkRJUiAgICAgOj0gJChsaWJfYnBmX2RpcilcbiYjNDM7QVBJRElSICAgICA6PSAkKGxpYl9icGZfYXBpX2RpcilcbiYjNDM7XG4mIzQzOyMgS2VlcCBwcml2YXRlIGJ1aWxkIGZpbGVzIHVuZGVyICQoT1VUUFVUKSBmb3IgYm90aCBpbi10cmVlIGFuZCBPPSBidWlsZHMuXG4mIzQzO2xpYl9icGZfc2NyYXRjaF9kaXIgOj0gJChPVVRQVVQpL3Rvb2xzXG4mIzQzO2xpYl9icGZfYnVpbGRfZGlyICAgOj0gJChsaWJfYnBmX3NjcmF0Y2hfZGlyKS9idWlsZFxuJiM0MztsaWJfYnBmX2luY2x1ZGVfZGlyIDo9ICQobGliX2JwZl9zY3JhdGNoX2RpcikvaW5jbHVkZVxuJiM0MzsjIElOQ0xVREVfRElSIGlzIGFsc28gdXNlZCBieSBjYWxsZXJzIHRoYXQgcmVwbGFjZSBCUEZfQ0ZMQUdTLlxuJiM0MztJTkNMVURFX0RJUiA6PSAkKGxpYl9icGZfaW5jbHVkZV9kaXIpXG4mIzQzO0JQRk9CSiAgICAgIDo9ICQobGliX2JwZl9idWlsZF9kaXIpL2xpYmJwZi9saWJicGYuYVxuJiM0MztcbiYjNDM7IyBDcm9zcyBidWlsZHMgdXNlIGEgc2VwYXJhdGUgbmF0aXZlIGxpYmJwZiBmb3IgYnBmdG9vbC5cbiYjNDM7aWZuZXEgKCQoQ1JPU1NfQ09NUElMRSkkKGZpbHRlci1vdXQgJChIT1NUQVJDSCksJChTUkNBUkNIKSksKVxuJiM0MztsaWJfYnBmX2hvc3RfYnVpbGRfZGlyICAgOj0gJChsaWJfYnBmX2J1aWxkX2RpcikvaG9zdFxuJiM0MztsaWJfYnBmX2hvc3Rfc2NyYXRjaF9kaXIgOj0gJChPVVRQVVQpL2hvc3QtdG9vbHNcbiYjNDM7ZWxzZVxuJiM0MztsaWJfYnBmX2hvc3RfYnVpbGRfZGlyICAgOj0gJChsaWJfYnBmX2J1aWxkX2RpcilcbiYjNDM7bGliX2JwZl9ob3N0X3NjcmF0Y2hfZGlyIDo9ICQobGliX2JwZl9zY3JhdGNoX2RpcilcbiYjNDM7ZW5kaWZcbiYjNDM7bGliX2JwZl9ob3N0X29iaiA6PSAkKGxpYl9icGZfaG9zdF9idWlsZF9kaXIpL2xpYmJwZi9saWJicGYuYVxuJiM0MztERUZBVUxUX0JQRlRPT0wgIDo9ICQobGliX2JwZl9ob3N0X3NjcmF0Y2hfZGlyKS9zYmluL2JwZnRvb2xcbiYjNDM7QlBGVE9PTCAgICAgICAgICA/PSAkKERFRkFVTFRfQlBGVE9PTClcbiYjNDM7XG4mIzQzOyMgUmV1c2UgdGFyZ2V0IFVTRVJDRkxBR1Mgb25seSB3aGVuIGJwZnRvb2wgc2hhcmVzIHRoZSB0YXJnZXQgbGliYnBmLlxuJiM0MztpZmVxICgkKEJQRk9CSiksJChsaWJfYnBmX2hvc3Rfb2JqKSlcbiYjNDM7bGliX2JwZl9ob3N0X3VzZXJfY2ZsYWdzIDo9ICQoVVNFUkNGTEFHUylcbiYjNDM7ZW5kaWZcbiYjNDM7XG4mIzQzOyMgLS0tLSBmaW5kIHZtbGludXggQlRGIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzO1ZNTElOVVhfQlRGX1BBVEhTID89ICQoaWYgJChPKSwkKE8pL3ZtbGludXgpXHRcdFx0XHRcXFxuJiM0MztcdFx0ICAgICAkKGlmICQoS0JVSUxEX09VVFBVVCksJChLQlVJTERfT1VUUFVUKS92bWxpbnV4KVx0XFxcbiYjNDM7XHRcdCAgICAgJCh0b3Bfc3JjZGlyKS92bWxpbnV4XHRcdFx0XHRcXFxuJiM0MztcdFx0ICAgICAvc3lzL2tlcm5lbC9idGYvdm1saW51eFx0XHRcdFx0XFxcbiYjNDM7XHRcdCAgICAgL2Jvb3Qvdm1saW51eC0kKHNoZWxsIHVuYW1lIC1yKVxuJiM0MztWTUxJTlVYX0JURiA/PSAkKGFic3BhdGggJChmaXJzdHdvcmQgJCh3aWxkY2FyZCAkKFZNTElOVVhfQlRGX1BBVEhTKSkpKVxuJiM0MzsjIERlbGF5IG1pc3Npbmctdm1saW51eCBlcnJvcnMgc28gXCYjMzQ7bWFrZSBjbGVhblwmIzM0OyBzdGlsbCB3b3Jrcy5cbiYjNDM7bGliX2JwZl92bWxpbnV4X2RlcHMgOj0gJChpZiAkKFZNTElOVVhfSCksJChWTUxJTlVYX0gpLCQoVk1MSU5VWF9CVEYpICQoQlBGVE9PTCkpXG4mIzQzO1xuJiM0MzsjIC0tLS0gY29tcGlsZXIgZmxhZ3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MzsjIEZpbmQgdGhlIG5vcm1hbCBzeXN0ZW0gaGVhZGVycyB0aGF0IENsYW5nIG9taXRzIHdpdGggLS10YXJnZXQ9YnBmLiBQdXQgdGhlbVxuJiM0MzsjIGxhc3Qgd2l0aCAtaWRpcmFmdGVyIHNvIHRoZXkgY2Fubm90IHJlcGxhY2UgcHJvamVjdCBoZWFkZXJzLlxuJiM0MztkZWZpbmUgbGliX2JwZl9nZXRfc3lzX2luY2x1ZGVzXG4mIzQzOyQoc2hlbGwgJCgxKSAkKDIpIC12IC1FIC0gXHUwMDNjL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxIFxcXG4mIzQzO1x0fCBzZWQgLW4gJiMzOTsvXHUwMDNjLi4uXHUwMDNlIHNlYXJjaCBzdGFydHMgaGVyZTovLC9FbmQgb2Ygc2VhcmNoIGxpc3QuL3sgc3wgXFwoLy4qXFwpfC1pZGlyYWZ0ZXIgXFwxfHAgfSYjMzk7KSBcXFxuJiM0MzskKHNoZWxsICQoMSkgJCgyKSAtZE0gLUUgLSBcdTAwM2MvZGV2L251bGwgfCBncmVwICYjMzk7X19yaXNjdl94bGVuICYjMzk7IHwgYXdrICYjMzk7e3ByaW50ZihcJiMzNDstRF9fcmlzY3ZfeGxlbj0lZCAtRF9fQklUU19QRVJfTE9ORz0lZFwmIzM0OywgJCQzLCAkJDMpfSYjMzk7KSBcXFxuJiM0MzskKHNoZWxsICQoMSkgJCgyKSAtZE0gLUUgLSBcdTAwM2MvZGV2L251bGwgfCBncmVwICYjMzk7X19sb29uZ2FyY2hfZ3JsZW4gJiMzOTsgfCBhd2sgJiMzOTt7cHJpbnRmKFwmIzM0Oy1EX19CSVRTX1BFUl9MT05HPSVkXCYjMzQ7LCAkJDMpfSYjMzk7KSBcXFxuJiM0MzskKHNoZWxsICQoMSkgJCgyKSAtZE0gLUUgLSBcdTAwM2MvZGV2L251bGwgfCBncmVwIC1FICYjMzk7TUlQUyhFTHxFQil8X01JUFNfU1ooUFRSfExPTkcpIHxfTUlQU19TSU0gfF9BQkkoTzMyfE4zMnw2NCkgJiMzOTsgfCBhd2sgJiMzOTt7cHJpbnRmKFwmIzM0Oy1EJXM9JXMgXCYjMzQ7LCAkJDIsICQkMyl9JiMzOTspXG4mIzQzO2VuZGVmXG4mIzQzO2lmbmVxICgkKENST1NTX0NPTVBJTEUpLClcbiYjNDM7bGliX2JwZl9jbGFuZ190YXJnZXRfYXJjaCA9IC0tdGFyZ2V0PSQobm90ZGlyICQoQ1JPU1NfQ09NUElMRTolLT0lKSlcbiYjNDM7ZW5kaWZcbiYjNDM7IyBGaW5kIHRoZSBzeXN0ZW0gaW5jbHVkZSBmbGFncyBvbmNlIGFuZCByZXVzZSB0aGVtLlxuJiM0MztDTEFOR19TWVNfSU5DTFVERVMgOj0gJChjYWxsIGxpYl9icGZfZ2V0X3N5c19pbmNsdWRlcywkKENMQU5HKSwkKGxpYl9icGZfY2xhbmdfdGFyZ2V0X2FyY2gpKVxuJiM0MztcbiYjNDM7bGliX2JwZl9pc19saXR0bGVfZW5kaWFuIDo9ICQoc2hlbGwgJChDQykgLWRNIC1FIC0gXHUwMDNjL2Rldi9udWxsIHwgXFxcbiYjNDM7XHRcdFx0XHQgICAgZ3JlcCAmIzM5O2RlZmluZSBfX0JZVEVfT1JERVJfXyBfX09SREVSX0xJVFRMRV9FTkRJQU5fXyYjMzk7KVxuJiM0MztNRU5ESUFOIDo9ICQoaWYgJChsaWJfYnBmX2lzX2xpdHRsZV9lbmRpYW4pLC1tbGl0dGxlLWVuZGlhbiwtbWJpZy1lbmRpYW4pXG4mIzQzO1xuJiM0MzsjIFVzZSBCUEYgQ1BVIHYzIHdoZW4gQ2xhbmcgc3VwcG9ydHMgaXQuIE90aGVyd2lzZSB1c2UgdjIuXG4mIzQzO2xpYl9icGZfY2xhbmdfY3B1IDo9ICQoc2hlbGwgJChDTEFORykgLS10YXJnZXQ9YnBmIC1tY3B1PWhlbHAgMlx1MDAzZVx1MDAyNjEgfCBcXFxuJiM0MztcdFx0XHQgICAgIGdyZXAgLXEgJiMzOTt2MyYjMzk7IFx1MDAyNlx1MDAyNiBlY2hvIHYzIHx8IGVjaG8gdjIpXG4mIzQzO1xuJiM0MzsjIEFjY2VwdCBhbm9ueW1vdXMgc3RydWN0IGFuZCB1bmlvbiBtZW1iZXJzIGluIHZtbGludXguaC5cbiYjNDM7QlBGX0NGTEFHUyA9IC1nIC1XYWxsIC1XZXJyb3IgLURfX1RBUkdFVF9BUkNIXyQoU1JDQVJDSCkgJChNRU5ESUFOKVx0XFxcbiYjNDM7XHQgICAgIC1JJChJTkNMVURFX0RJUikgLUkkKEFQSURJUilcdFx0XHRcdFxcXG4mIzQzO1x0ICAgICAtc3RkPWdudTExXHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdCAgICAgLWZuby1zdHJpY3QtYWxpYXNpbmdcdFx0XHRcdFx0XFxcbiYjNDM7XHQgICAgIC1mbXMtZXh0ZW5zaW9ucyAtV25vLW1pY3Jvc29mdC1hbm9uLXRhZ1x0XHRcdFxcXG4mIzQzO1x0ICAgICAtV25vLWNvbXBhcmUtZGlzdGluY3QtcG9pbnRlci10eXBlc1x0XHRcdFxcXG4mIzQzO1x0ICAgICAkKENMQU5HX1NZU19JTkNMVURFUykgJChCUEZfRVhUUkFfQ0ZMQUdTKVxuJiM0MztcbiYjNDM7IyAkMSA9IHNvdXJjZSwgJDIgPSBvYmplY3QuIC1NTUQgLU1QIHRyYWNrcyBub24tc3lzdGVtIGhlYWRlcnMuXG4mIzQzO2RlZmluZSBsaWJfYnBmX2J1aWxkX3J1bGVcbiYjNDM7XHQkKGNhbGwgbXNnLENMTkctQlBGLCwkMilcbiYjNDM7XHQkKFEpJChDTEFORykgJChCUEZfQ0ZMQUdTKSAtTzIgLS10YXJnZXQ9YnBmIC1tY3B1PSQobGliX2JwZl9jbGFuZ19jcHUpIFxcXG4mIzQzO1x0XHQtTU1EIC1NUCAtYyAkMSAtbyAkMlxuJiM0MztlbmRlZlxuJiM0MztcbiYjNDM7IyAtLS0tIG91dHB1dCBmb2xkZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7QlBGX09CSl9ESVIgID89ICQoT1VUUFVUKVxuJiM0MztCUEZfU0tFTF9ESVIgPz0gJChPVVRQVVQpXG4mIzQzOyMgUmVqZWN0IGVtcHR5IGRpcmVjdG9yaWVzIGJlZm9yZSBjbGVhbnVwIGdsb2JzIGNhbiByZWFjaCB0aGUgZmlsZXN5c3RlbSByb290LlxuJiM0MztpZmVxICgkKHN0cmlwICQoQlBGX09CSl9ESVIpKSwpXG4mIzQzOyQoZXJyb3IgbGliLmJwZi5tazogQlBGX09CSl9ESVIgaXMgZW1wdHk7IHNldCBpdCBhZnRlciBcJiMzNDtpbmNsdWRlIC4uL2xpYi5ta1wmIzM0OylcbiYjNDM7ZW5kaWZcbiYjNDM7aWZlcSAoJChzdHJpcCAkKEJQRl9TS0VMX0RJUikpLClcbiYjNDM7JChlcnJvciBsaWIuYnBmLm1rOiBCUEZfU0tFTF9ESVIgaXMgZW1wdHk7IHNldCBpdCBhZnRlciBcJiMzNDtpbmNsdWRlIC4uL2xpYi5ta1wmIzM0OylcbiYjNDM7ZW5kaWZcbiYjNDM7XG4mIzQzOyMgLS0tLSBidWlsZCBmb2xkZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzO2xpYl9icGZfbWFrZV9kaXJzIDo9ICQoc29ydCAkKGxpYl9icGZfYnVpbGRfZGlyKS9saWJicGZcdFx0XHRcXFxuJiM0MztcdFx0XHQgICAgJChsaWJfYnBmX2hvc3RfYnVpbGRfZGlyKS9saWJicGZcdFx0XFxcbiYjNDM7XHRcdFx0ICAgICQobGliX2JwZl9ob3N0X2J1aWxkX2RpcikvYnBmdG9vbFx0XHRcXFxuJiM0MztcdFx0XHQgICAgJChsaWJfYnBmX2luY2x1ZGVfZGlyKVx0XHRcdFxcXG4mIzQzO1x0XHRcdCAgICAkKGZpbHRlci1vdXQgJChPVVRQVVQpLCQoQlBGX09CSl9ESVIpICQoQlBGX1NLRUxfRElSKSkpXG4mIzQzOyQobGliX2JwZl9tYWtlX2RpcnMpOlxuJiM0MztcdCQoY2FsbCBtc2csTUtESVIsLCRAKVxuJiM0MztcdCQoUSlta2RpciAtcCAkQFxuJiM0MztcbiYjNDM7IyAtLS0tIHRhcmdldCBsaWJicGYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7IyBQYXNzIHVuZXhwb3J0ZWQgdG9vbGNoYWluIHNldHRpbmdzIGFuZCBidWlsZCBQSUMgZm9yIFBJRSB0ZXN0IGJpbmFyaWVzLlxuJiM0MzsjIGxpYmJwZiBjb25zdW1lcyBVU0VSQ0ZMQUdTIHRocm91Z2ggRVhUUkFfQ0ZMQUdTLlxuJiM0MzskKEJQRk9CSik6ICQobGliX2JwZl9zb3VyY2VzKSAkKGxpYl9icGZfYXBpX2RpcikvbGludXgvYnBmLmggXFxcbiYjNDM7XHQgICB8ICQobGliX2JwZl9idWlsZF9kaXIpL2xpYmJwZlxuJiM0MztcdCQoUSkkKE1BS0UpICQobGliX2JwZl9zdWJtYWtlX2V4dHJhcykgLUMgJChsaWJfYnBmX2RpcikgXFxcbiYjNDM7XHRcdCAgICBPVVRQVVQ9JChsaWJfYnBmX2J1aWxkX2RpcikvbGliYnBmLyBcXFxuJiM0MztcdFx0ICAgIEFSQ0g9JChBUkNIKSBDUk9TU19DT01QSUxFPSQoQ1JPU1NfQ09NUElMRSkgQ0M9XCYjMzQ7JChDQylcJiMzNDsgICAgIFxcXG4mIzQzO1x0XHQgICAgRVhUUkFfQ0ZMQUdTPSYjMzk7LWcgJChPUFRfRkxBR1MpIC1mUElDICQoRVhUUkFfQ0ZMQUdTKSAkKFVTRVJDRkxBR1MpJiMzOTsgXFxcbiYjNDM7XHRcdCAgICBERVNURElSPSQobGliX2JwZl9zY3JhdGNoX2RpcikgcHJlZml4PSBhbGwgaW5zdGFsbF9oZWFkZXJzXG4mIzQzO1xuJiM0MzsjIC0tLS0gaG9zdCBsaWJicGYsIG9ubHkgd2hlbiB0aGUgdGFyZ2V0IGRpZmZlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MztpZm5lcSAoJChCUEZPQkopLCQobGliX2JwZl9ob3N0X29iaikpXG4mIzQzOyQobGliX2JwZl9ob3N0X29iaik6ICQobGliX2JwZl9zb3VyY2VzKSAkKGxpYl9icGZfYXBpX2RpcikvbGludXgvYnBmLmggXFxcbiYjNDM7XHRcdHwgJChsaWJfYnBmX2hvc3RfYnVpbGRfZGlyKS9saWJicGZcbiYjNDM7XHQkKFEpJChNQUtFKSAkKGxpYl9icGZfc3VibWFrZV9leHRyYXMpIC1DICQobGliX2JwZl9kaXIpIFxcXG4mIzQzO1x0XHQgICAgQVJDSD0gQ1JPU1NfQ09NUElMRT0gXFxcbiYjNDM7XHRcdCAgICBPVVRQVVQ9JChsaWJfYnBmX2hvc3RfYnVpbGRfZGlyKS9saWJicGYvIFxcXG4mIzQzO1x0XHQgICAgQ0M9XCYjMzQ7JChIT1NUQ0MpXCYjMzQ7IExEPVwmIzM0OyQoSE9TVExEKVwmIzM0OyBcXFxuJiM0MztcdFx0ICAgIEVYVFJBX0NGTEFHUz0mIzM5Oy1nICQoT1BUX0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykmIzM5OyBcXFxuJiM0MztcdFx0ICAgIERFU1RESVI9JChsaWJfYnBmX2hvc3Rfc2NyYXRjaF9kaXIpIHByZWZpeD0gYWxsIGluc3RhbGxfaGVhZGVyc1xuJiM0MztlbmRpZlxuJiM0MztcbiYjNDM7IyAtLS0tIGhvc3QgYnBmdG9vbCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7JChERUZBVUxUX0JQRlRPT0wpOiAkKHdpbGRjYXJkICQobGliX2JwZl9icGZ0b29sX2RpcikvKi5bY2hdIFxcXG4mIzQzO1x0XHRcdFx0ICQobGliX2JwZl9icGZ0b29sX2RpcikvTWFrZWZpbGUpIFxcXG4mIzQzO1x0XHQgICAgJChsaWJfYnBmX2hvc3Rfb2JqKSB8ICQobGliX2JwZl9ob3N0X2J1aWxkX2RpcikvYnBmdG9vbFxuJiM0MztcdCQoUSkkKE1BS0UpICQobGliX2JwZl9zdWJtYWtlX2V4dHJhcykgLUMgJChsaWJfYnBmX2JwZnRvb2xfZGlyKSBcXFxuJiM0MztcdFx0ICAgIEFSQ0g9IENST1NTX0NPTVBJTEU9IENDPVwmIzM0OyQoSE9TVENDKVwmIzM0OyBMRD1cJiMzNDskKEhPU1RMRClcJiMzNDsgXFxcbiYjNDM7XHRcdCAgICBFWFRSQV9DRkxBR1M9JiMzOTstZyAkKE9QVF9GTEFHUykgJChFWFRSQV9DRkxBR1MpICQobGliX2JwZl9ob3N0X3VzZXJfY2ZsYWdzKSYjMzk7IFxcXG4mIzQzO1x0XHQgICAgRVhUUkFfTERGTEFHUz0mIzM5OyQoRVhUUkFfTERGTEFHUykmIzM5O1x0XHQgIFxcXG4mIzQzO1x0XHQgICAgT1VUUFVUPSQobGliX2JwZl9ob3N0X2J1aWxkX2RpcikvYnBmdG9vbC9cdCAgXFxcbiYjNDM7XHRcdCAgICBMSUJCUEZfT1VUUFVUPSQobGliX2JwZl9ob3N0X2J1aWxkX2RpcikvbGliYnBmLyBcXFxuJiM0MztcdFx0ICAgIExJQkJQRl9ERVNURElSPSQobGliX2JwZl9ob3N0X3NjcmF0Y2hfZGlyKS9cdCAgXFxcbiYjNDM7XHRcdCAgICBwcmVmaXg9IERFU1RESVI9JChsaWJfYnBmX2hvc3Rfc2NyYXRjaF9kaXIpLyBpbnN0YWxsLWJpblxuJiM0MztcbiYjNDM7IyAtLS0tIGJ1aWxkIHZtbGludXguaCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7bGliX2JwZl92bWxpbnV4X2ggICAgIDo9ICQoSU5DTFVERV9ESVIpL3ZtbGludXguaFxuJiM0MztsaWJfYnBmX3ZtbGludXhfc3RhbXAgOj0gJChJTkNMVURFX0RJUikvdm1saW51eC5oLnN0YW1wXG4mIzQzO1xuJiM0MzsjIFByZXNlcnZlIHZtbGludXguaCYjMzk7cyB0aW1lc3RhbXAgd2hlbiBpdHMgY29udGVudHMgZG8gbm90IGNoYW5nZS5cbiYjNDM7aWZlcSAoJCh3aWxkY2FyZCAkKGxpYl9icGZfdm1saW51eF9oKSksKVxuJiM0MzsjIFJlZ2VuZXJhdGUgaWYgdGhlIGhlYWRlciBpcyBtaXNzaW5nIGJ1dCBpdHMgc3RhbXAgcmVtYWlucy5cbiYjNDM7LlBIT05ZOiAkKGxpYl9icGZfdm1saW51eF9zdGFtcClcbiYjNDM7ZW5kaWZcbiYjNDM7XG4mIzQzOyMgVXNlIGEgbm9ybWFsIGVkZ2Ugc28gZGVwZW5kZW50cyBzZWUgYSBjaGFuZ2VkIGhlYWRlciBpbiB0aGUgc2FtZSBtYWtlIHJ1bi5cbiYjNDM7JChsaWJfYnBmX3ZtbGludXhfaCk6ICQobGliX2JwZl92bWxpbnV4X3N0YW1wKSA7XG4mIzQzO1xuJiM0MzskKGxpYl9icGZfdm1saW51eF9zdGFtcCk6ICQobGliX2JwZl92bWxpbnV4X2RlcHMpIHwgJChJTkNMVURFX0RJUilcbiYjNDM7aWZlcSAoJChWTUxJTlVYX0gpLClcbiYjNDM7XHQkKGNhbGwgbXNnLEdFTiwsJChsaWJfYnBmX3ZtbGludXhfaCkpXG4mIzQzO1x0JChRKXRlc3QgLW4gXCYjMzQ7JChWTUxJTlVYX0JURilcJiMzNDsgfHwgeyBcXFxuJiM0MztcdFx0ZWNobyBcJiMzNDtsaWIuYnBmLm1rOiBubyB2bWxpbnV4IGF0IGFueSBvZiBcXFwmIzM0OyQoVk1MSU5VWF9CVEZfUEFUSFMpXFxcJiMzNDtcJiMzNDsgXHUwMDNlXHUwMDI2MjsgXFxcbiYjNDM7XHRcdGV4aXQgMTsgfVxuJiM0MztcdCQoUSkkKEJQRlRPT0wpIGJ0ZiBkdW1wIGZpbGUgJChWTUxJTlVYX0JURikgZm9ybWF0IGMgXHUwMDNlICRALnRtcFxuJiM0MztlbHNlXG4mIzQzO1x0JChjYWxsIG1zZyxDUCwsJChsaWJfYnBmX3ZtbGludXhfaCkpXG4mIzQzO1x0JChRKWNwIFwmIzM0OyQoVk1MSU5VWF9IKVwmIzM0OyAkQC50bXBcbiYjNDM7ZW5kaWZcbiYjNDM7XHQkKFEpY21wIC1zICRALnRtcCAkKGxpYl9icGZfdm1saW51eF9oKSB8fCBtdiAkQC50bXAgJChsaWJfYnBmX3ZtbGludXhfaClcbiYjNDM7XHQkKFEpcm0gLWYgJEAudG1wXG4mIzQzO1x0JChRKXRvdWNoICRAXG4mIzQzO1xuJiM0MzsjIC0tLS0gQlBGIG9iamVjdHMgYW5kIHNrZWxldG9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MztCUEZfUFJPR19FWFQgPz0gLmJwZi5jXG4mIzQzOyMgRWFjaCBzb3VyY2UgbXVzdCBlbmQgd2l0aCBCUEZfUFJPR19FWFQgc28gTWFrZSBjYW4gcmVtb3ZlIHRoYXQgZW5kaW5nLlxuJiM0MztsaWJfYnBmX2JhZF9zcmNzIDo9ICQoZmlsdGVyLW91dCAlJChCUEZfUFJPR19FWFQpLCQoQlBGX1NSQ1MpKVxuJiM0MztpZm5lcSAoJChsaWJfYnBmX2JhZF9zcmNzKSwpXG4mIzQzOyQoZXJyb3IgbGliLmJwZi5tazogQlBGX1NSQ1MgZW50cmllcyBtdXN0IGVuZCBpbiAkKEJQRl9QUk9HX0VYVCk6ICQobGliX2JwZl9iYWRfc3JjcykpXG4mIzQzO2VuZGlmXG4mIzQzO2xpYl9icGZfc3RlbXMgOj0gJChwYXRzdWJzdCAlJChCUEZfUFJPR19FWFQpLCUsJChub3RkaXIgJChCUEZfU1JDUykpKVxuJiM0MzsjIFRoZSBzdGVtIGJlY29tZXMgdGhlIHNrZWxldG9uJiMzOTtzIEMgbmFtZTsgcmVqZWN0IGRvdHMgYW5kIGh5cGhlbnMuXG4mIzQzO2xpYl9icGZfYmFkX3N0ZW1zIDo9ICQoc3RyaXAgJChmb3JlYWNoIHMsJChsaWJfYnBmX3N0ZW1zKSxcdFx0XHRcXFxuJiM0MztcdFx0XHQkKGlmICQoZmluZHN0cmluZyAuLCQocykpJChmaW5kc3RyaW5nIC0sJChzKSksJChzKSkpKVxuJiM0MztpZm5lcSAoJChsaWJfYnBmX2JhZF9zdGVtcyksKVxuJiM0MzskKGVycm9yIGxpYi5icGYubWs6IEJQRl9TUkNTIGJhc2VuYW1lcyBtdXN0IG5vdCBjb250YWluICYjMzk7LiYjMzk7IG9yICYjMzk7LSYjMzk7OiAkKGxpYl9icGZfYmFkX3N0ZW1zKSlcbiYjNDM7ZW5kaWZcbiYjNDM7IyBPdXRwdXQgbmFtZXMgb21pdCBkaXJlY3Rvcmllcywgc28gcmVqZWN0IGR1cGxpY2F0ZSBzdGVtcy5cbiYjNDM7aWZuZXEgKCQod29yZHMgJChsaWJfYnBmX3N0ZW1zKSksJCh3b3JkcyAkKHNvcnQgJChsaWJfYnBmX3N0ZW1zKSkpKVxuJiM0MzskKGVycm9yIGxpYi5icGYubWs6IEJQRl9TUkNTIGhhcyBjb2xsaWRpbmcgYmFzZW5hbWVzOiAkKEJQRl9TUkNTKSlcbiYjNDM7ZW5kaWZcbiYjNDM7QlBGX1NLRUxfRVhUICAgID89IC5za2VsLmhcbiYjNDM7bGliX2JwZl9zdWJza2VsX2V4dCA6PSAkKHBhdHN1YnN0ICVza2VsLmgsJXN1YnNrZWwuaCwkKEJQRl9TS0VMX0VYVCkpXG4mIzQzOyMgS2VlcCBza2VsZXRvbiBzdWZmaXhlcyBkaXN0aW5jdCBhbmQgY2xlYW51cCBnbG9icyBuYXJyb3cuXG4mIzQzO2lmZXEgKCQobGliX2JwZl9zdWJza2VsX2V4dCksJChCUEZfU0tFTF9FWFQpKVxuJiM0MzskKGVycm9yIGxpYi5icGYubWs6IEJQRl9TS0VMX0VYVCBtdXN0IGVuZCBpbiBza2VsLmg6ICQoQlBGX1NLRUxfRVhUKSlcbiYjNDM7ZW5kaWZcbiYjNDM7QlBGX09CSlMgIDo9ICQoYWRkcHJlZml4ICQoQlBGX09CSl9ESVIpLywkKGFkZHN1ZmZpeCAuYnBmLm8sJChsaWJfYnBmX3N0ZW1zKSkpXG4mIzQzO0JQRl9TS0VMUyA6PSAkKGFkZHByZWZpeCAkKEJQRl9TS0VMX0RJUikvLCQoYWRkc3VmZml4ICQoQlBGX1NLRUxfRVhUKSwkKGxpYl9icGZfc3RlbXMpKSlcbiYjNDM7aWZuZXEgKCQoQlBGX0dFTl9TVUJTS0VMKSwpXG4mIzQzO0JQRl9TVUJTS0VMUyA6PSAkKGFkZHByZWZpeCAkKEJQRl9TS0VMX0RJUikvLCQoYWRkc3VmZml4ICQobGliX2JwZl9zdWJza2VsX2V4dCksJChsaWJfYnBmX3N0ZW1zKSkpXG4mIzQzO2VuZGlmXG4mIzQzO1xuJiM0MzsjIFVzZSBwZXItc291cmNlIHJ1bGVzIHRvIGF2b2lkIGNoYW5naW5nIG5vcm1hbCAuYyBsb29rdXAuXG4mIzQzOyMgVHJhY2sgc291cmNlIGhlYWRlcnMgYmVmb3JlIEJQRk9CSiBpbnN0YWxscyB0aGVpciB1cGRhdGVkIGNvcGllcy5cbiYjNDM7ZGVmaW5lIGxpYl9icGZfb2JqX3J1bGVcbiYjNDM7JChCUEZfT0JKX0RJUikvJChwYXRzdWJzdCAlJChCUEZfUFJPR19FWFQpLCUsJChub3RkaXIgJCgxKSkpLmJwZi5vOiAkKDEpXHRcXFxuJiM0MztcdFx0JChCUEZfRVhUUkFfSERSUykgJChsaWJfYnBmX2hlYWRlcl9zb3VyY2VzKVx0XHRcdFxcXG4mIzQzO1x0XHQkKElOQ0xVREVfRElSKS92bWxpbnV4LmggfCAkKEJQRl9PQkpfRElSKSAkKEJQRk9CSilcbiYjNDM7XHQkJChjYWxsIGxpYl9icGZfYnVpbGRfcnVsZSwkJFx1MDAzYywkJEApXG4mIzQzO2VuZGVmXG4mIzQzOyQoZm9yZWFjaCBzcmMsJChCUEZfU1JDUyksJChldmFsICQoY2FsbCBsaWJfYnBmX29ial9ydWxlLCQoc3JjKSkpKVxuJiM0MztcbiYjNDM7IyBHZW5lcmF0ZSBib3RoIGhlYWRlcnMgdG9nZXRoZXIgc28gZWl0aGVyIG1pc3NpbmcgdGFyZ2V0IHJlYnVpbGRzIHRoZSBwYWlyLlxuJiM0MztsaWJfYnBmX3NrZWxfdGFyZ2V0cyA6PSAkKEJQRl9TS0VMX0RJUikvJSQoQlBGX1NLRUxfRVhUKVxuJiM0MztpZm5lcSAoJChCUEZfR0VOX1NVQlNLRUwpLClcbiYjNDM7bGliX2JwZl9za2VsX3RhcmdldHMgJiM0Mzs9ICQoQlBGX1NLRUxfRElSKS8lJChsaWJfYnBmX3N1YnNrZWxfZXh0KVxuJiM0MztlbmRpZlxuJiM0MztcbiYjNDM7IyBMaW5rIHRocmVlIHRpbWVzIGFuZCByZXF1aXJlIHRoZSBmaW5hbCB0d28gb2JqZWN0cyB0byBtYXRjaC5cbiYjNDM7JChsaWJfYnBmX3NrZWxfdGFyZ2V0cyk6ICQoQlBGX09CSl9ESVIpLyUuYnBmLm8gJChCUEZUT09MKSB8ICQoQlBGX1NLRUxfRElSKVxuJiM0MztcdCQoY2FsbCBtc2csR0VOLVNLRUwsLCQoQlBGX1NLRUxfRElSKS8kKiQoQlBGX1NLRUxfRVhUKSlcbiYjNDM7XHQkKFEpJChCUEZUT09MKSBnZW4gb2JqZWN0ICQoXHUwMDNjOi5vPS5saW5rZWQxLm8pICRcdTAwM2NcbiYjNDM7XHQkKFEpJChCUEZUT09MKSBnZW4gb2JqZWN0ICQoXHUwMDNjOi5vPS5saW5rZWQyLm8pICQoXHUwMDNjOi5vPS5saW5rZWQxLm8pXG4mIzQzO1x0JChRKSQoQlBGVE9PTCkgZ2VuIG9iamVjdCAkKFx1MDAzYzoubz0ubGlua2VkMy5vKSAkKFx1MDAzYzoubz0ubGlua2VkMi5vKVxuJiM0MztcdCQoUSlkaWZmICQoXHUwMDNjOi5vPS5saW5rZWQyLm8pICQoXHUwMDNjOi5vPS5saW5rZWQzLm8pXG4mIzQzO1x0JChRKSQoQlBGVE9PTCkgZ2VuIHNrZWxldG9uICQoXHUwMDNjOi5vPS5saW5rZWQzLm8pIG5hbWUgJCogXHUwMDNlICQoQlBGX1NLRUxfRElSKS8kKiQoQlBGX1NLRUxfRVhUKVxuJiM0MztpZm5lcSAoJChCUEZfR0VOX1NVQlNLRUwpLClcbiYjNDM7XHQkKFEpJChCUEZUT09MKSBnZW4gc3Vic2tlbGV0b24gJChcdTAwM2M6Lm89LmxpbmtlZDMubykgbmFtZSAkKiBcdTAwM2UgJChCUEZfU0tFTF9ESVIpLyQqJChsaWJfYnBmX3N1YnNrZWxfZXh0KVxuJiM0MztlbmRpZlxuJiM0MztcdCQoUSlybSAtZiAkKFx1MDAzYzoubz0ubGlua2VkMS5vKSAkKFx1MDAzYzoubz0ubGlua2VkMi5vKSAkKFx1MDAzYzoubz0ubGlua2VkMy5vKVxuJiM0MztcbiYjNDM7IyBSZWFkIHRoZSBoZWFkZXIgZGVwZW5kZW5jaWVzIHdyaXR0ZW4gYnkgLU1NRC5cbiYjNDM7LWluY2x1ZGUgJChCUEZfT0JKUzoubz0uZClcbiYjNDM7XG4mIzQzOyMgLS0tLSB2YWx1ZXMgZm9yIHRoZSB0ZXN0IE1ha2VmaWxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzOyMgQWRkIHRoZSBpbnN0YWxsZWQgbGliYnBmL3ZtbGludXguaCBkaXJlY3RvcnkgYW5kIHRoZSBza2VsZXRvbiBkaXJlY3RvcnkuXG4mIzQzO0NGTEFHUyAmIzQzOz0gLUkkKElOQ0xVREVfRElSKSAtSSQoQlBGX1NLRUxfRElSKVxuJiM0MztcbiYjNDM7IyBBZGQgdGFyZ2V0IHpzdGQgd2hlbiBmb3VuZCBieSB0aGUgdGFyZ2V0IHBrZy1jb25maWcuXG4mIzQzO1BLR19DT05GSUcgPz0gJChDUk9TU19DT01QSUxFKXBrZy1jb25maWdcbiYjNDM7QlBGX0xETElCUyA6PSAkKEJQRk9CSikgLWxlbGYgLWx6XG4mIzQzO2lmbmVxICgkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1leGlzdHMgbGlienN0ZCAyXHUwMDNlL2Rldi9udWxsIFx1MDAyNlx1MDAyNiBlY2hvIHkpLClcbiYjNDM7QlBGX0xETElCUyAmIzQzOz0gLWx6c3RkXG4mIzQzO2VuZGlmXG4mIzQzO1xuJiM0MzsjIEFkZCBza2VsZXRvbnMgYWZ0ZXIgbGliLm1rIGRlZmluZXMgYWxsLlxuJiM0MzthbGw6ICQoQlBGX1NLRUxTKSAkKEJQRl9TVUJTS0VMUylcbiYjNDM7XG4mIzQzOyMgVGhlIHNrZWxldG9uIGFscmVhZHkgZW1iZWRzIGVhY2ggQlBGIG9iamVjdCBpbiB0aGUgdGVzdCBiaW5hcnkuIFRvIGluc3RhbGwgdGhlXG4mIzQzOyMgb2JqZWN0cyBzZXBhcmF0ZWx5LCBhZGQgVEVTVF9HRU5fRklMRVMgJiM0Mzs9ICQoQlBGX09CSlMpLlxuJiM0MztcbiYjNDM7IyAkMSA9IGJpbmFyeSwgJDIgPSB0ZXN0IHNvdXJjZS4gVXNlIHRoZSBzYW1lIGNvbXBpbGUgYW5kIGxpbmsgZmxhZ3MgYXMgbGliLm1rLlxuJiM0MztkZWZpbmUgYnBmX2xpbmtcbiYjNDM7XHQkKGNhbGwgbXNnLEJJTkFSWSwsJDEpXG4mIzQzO1x0JChRKSQoQ0MpICQoQ0ZMQUdTKSAkKENQUEZMQUdTKSAkKExERkxBR1MpICQoVEFSR0VUX0FSQ0gpICQyIFxcXG4mIzQzO1x0XHQkKEJQRl9MRExJQlMpICQoTERMSUJTKSAtbyAkMVxuJiM0MztlbmRlZlxuJiM0MztcbiYjNDM7RVhUUkFfQ0xFQU4gJiM0Mzs9ICQoc29ydCAkKGxpYl9icGZfc2NyYXRjaF9kaXIpICQobGliX2JwZl9ob3N0X3NjcmF0Y2hfZGlyKSkgXFxcbiYjNDM7XHQgICAgICAgJChhZGRwcmVmaXggJChCUEZfT0JKX0RJUikvLCouYnBmLm8gKi5icGYuZCAqLmxpbmtlZCoubylcdFxcXG4mIzQzO1x0ICAgICAgICQoYWRkcHJlZml4ICQoQlBGX1NLRUxfRElSKS8sKiQoQlBGX1NLRUxfRVhUKSAqJChsaWJfYnBmX3N1YnNrZWxfZXh0KSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvTWFrZWZpbGVcbmluZGV4IDNjZmU5MGUwZjM0ZmEuLmRkM2Y1NTk0YWYyNDAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NjaGVkX2V4dC9NYWtlZmlsZVxuQEAgLTE0LDQ4ICYjNDM7MTQsMjkgQEAgQ1VSRElSIDo9ICQoYWJzcGF0aCAuKVxuIFJFUE9ST09UIDo9ICQoYWJzcGF0aCAuLi8uLi8uLi8uLilcbiBUT09MU0RJUiA6PSAkKFJFUE9ST09UKS90b29sc1xuIExJQkRJUiA6PSAkKFRPT0xTRElSKS9saWJcbi1CUEZESVIgOj0gJChMSUJESVIpL2JwZlxuIFRPT0xTSU5DRElSIDo9ICQoVE9PTFNESVIpL2luY2x1ZGVcbi1CUEZUT09MRElSIDo9ICQoVE9PTFNESVIpL2JwZi9icGZ0b29sXG4tQVBJRElSIDo9ICQoVE9PTFNJTkNESVIpL3VhcGlcbiBHRU5ESVIgOj0gJChSRVBPUk9PVCkvaW5jbHVkZS9nZW5lcmF0ZWRcbiBHRU5IRFIgOj0gJChHRU5ESVIpL2F1dG9jb25mLmhcbi1TQ1hUT09MU0RJUiA6PSAkKFRPT0xTRElSKS9zY2hlZF9leHRcbiBTQ1hUT09MU0lOQ0RJUiA6PSAkKFRPT0xTRElSKS9zY2hlZF9leHQvaW5jbHVkZVxuIFxuLU9VVFBVVF9ESVIgOj0gJChPVVRQVVQpL2J1aWxkXG4tT0JKX0RJUiA6PSAkKE9VVFBVVF9ESVIpL29ialxuLUlOQ0xVREVfRElSIDo9ICQoT1VUUFVUX0RJUikvaW5jbHVkZVxuLUJQRk9CSl9ESVIgOj0gJChPQkpfRElSKS9saWJicGZcbi1TQ1hPQkpfRElSIDo9ICQoT0JKX0RJUikvc2NoZWRfZXh0XG4tQlBGT0JKIDo9ICQoQlBGT0JKX0RJUikvbGliYnBmLmFcbi1MSUJCUEZfT1VUUFVUIDo9ICQoT0JKX0RJUikvbGliYnBmL2xpYmJwZi5hXG4tXG4tREVGQVVMVF9CUEZUT09MIDo9ICQoT1VUUFVUX0RJUikvaG9zdC9zYmluL2JwZnRvb2xcbi1IT1NUX09CSl9ESVIgOj0gJChPQkpfRElSKS9ob3N0L2JwZnRvb2xcbi1IT1NUX0xJQkJQRl9PVVRQVVQgOj0gJChPQkpfRElSKS9ob3N0L2xpYmJwZi9cbi1IT1NUX0xJQkJQRl9ERVNURElSIDo9ICQoT1VUUFVUX0RJUikvaG9zdC9cbi1IT1NUX0RFU1RESVIgOj0gJChPVVRQVVRfRElSKS9ob3N0L1xuLVxuLVZNTElOVVhfQlRGX1BBVEhTID89ICQoaWYgJChPKSwkKE8pL3ZtbGludXgpXHRcdFx0XHRcdFxcXG4tXHRcdCAgICAgJChpZiAkKEtCVUlMRF9PVVRQVVQpLCQoS0JVSUxEX09VVFBVVCkvdm1saW51eClcdFx0XFxcbi1cdFx0ICAgICAuLi8uLi8uLi8uLi92bWxpbnV4XHRcdFx0XHRcdFxcXG4tXHRcdCAgICAgL3N5cy9rZXJuZWwvYnRmL3ZtbGludXhcdFx0XHRcdFx0XFxcbi1cdFx0ICAgICAvYm9vdC92bWxpbnV4LSQoc2hlbGwgdW5hbWUgLXIpXG4tVk1MSU5VWF9CVEYgPz0gJChhYnNwYXRoICQoZmlyc3R3b3JkICQod2lsZGNhcmQgJChWTUxJTlVYX0JURl9QQVRIUykpKSlcbi1pZmVxICgkKFZNTElOVVhfQlRGKSwpXG4tJChlcnJvciBDYW5ub3QgZmluZCBhIHZtbGludXggZm9yIFZNTElOVVhfQlRGIGF0IGFueSBvZiBcJiMzNDskKFZNTElOVVhfQlRGX1BBVEhTKVwmIzM0Oylcbi1lbmRpZlxuJiM0MzsjIEJ1aWxkIHNjaGVkdWxlciBza2VsZXRvbnMgYW5kIHN1YnNrZWxldG9ucyB3aXRoIHRoZSBzaGFyZWQgQlBGIHJ1bGVzLlxuJiM0MztCUEZfU1JDUyAgICAgICAgOj0gJCh3aWxkY2FyZCAqLmJwZi5jKVxuJiM0MztCUEZfU0tFTF9FWFQgICAgOj0gLmJwZi5za2VsLmhcbiYjNDM7QlBGX0dFTl9TVUJTS0VMIDo9IDFcbiYjNDM7IyBQcmVzZXJ2ZSB0aGUgZXhpc3RpbmcgYnVpbGQvIGxheW91dC5cbiYjNDM7QlBGX09CSl9ESVIgIDo9ICQoT1VUUFVUKS9idWlsZC9vYmovc2NoZWRfZXh0XG4mIzQzO0JQRl9TS0VMX0RJUiA6PSAkKE9VVFBVVCkvYnVpbGQvaW5jbHVkZVxuJiM0MztTQ1hPQkpfRElSICAgOj0gJChCUEZfT0JKX0RJUilcbiBcbi1CUEZUT09MID89ICQoREVGQVVMVF9CUEZUT09MKVxuJiM0MztpbmNsdWRlIC4uL2xpYi5icGYubWtcbiBcbiBpZm5lcSAoJCh3aWxkY2FyZCAkKEdFTkhEUikpLClcbiAgIEdFTkZMQUdTIDo9IC1ESEFWRV9HRU5IRFJcbiBlbmRpZlxuIFxuIENGTEFHUyAmIzQzOz0gLWcgLU8yIC1yZHluYW1pYyAtcHRocmVhZCAtV2FsbCAtV2Vycm9yICQoR0VORkxBR1MpXHRcdFx0XFxcbi1cdCAgLUkkKElOQ0xVREVfRElSKSAtSSQoR0VORElSKSAtSSQoTElCRElSKVx0XHRcdFx0XFxcbi1cdCAgLUkkKFRPT0xTSU5DRElSKSAtSSQoQVBJRElSKSAtSSQoQ1VSRElSKS9pbmNsdWRlIC1JJChTQ1hUT09MU0lOQ0RJUilcbiYjNDM7XHQgIC1JJChHRU5ESVIpIC1JJChMSUJESVIpIC1JJChUT09MU0lOQ0RJUikgLUkkKEFQSURJUilcdFx0XHRcXFxuJiM0MztcdCAgLUkkKENVUkRJUikvaW5jbHVkZSAtSSQoU0NYVE9PTFNJTkNESVIpXG4gXG4gIyBTaWxlbmNlIHNvbWUgd2FybmluZ3Mgd2hlbiBjb21waWxlZCB3aXRoIGNsYW5nXG4gaWZuZXEgKCQoTExWTSksKVxuQEAgLTY0LDEwMiAmIzQzOzQ1LDI2IEBAIGVuZGlmXG4gXG4gTERGTEFHUyA9IC1sZWxmIC1seiAtbHB0aHJlYWQgLWx6c3RkXG4gXG4tSVNfTElUVExFX0VORElBTiA9ICQoc2hlbGwgJChDQykgLWRNIC1FIC0gXHUwMDNjL2Rldi9udWxsIHxcdFx0XHRcdFxcXG4tXHRcdFx0Z3JlcCAmIzM5O2RlZmluZSBfX0JZVEVfT1JERVJfXyBfX09SREVSX0xJVFRMRV9FTkRJQU5fXyYjMzk7KVxuLVxuLSMgR2V0IENsYW5nJiMzOTtzIGRlZmF1bHQgaW5jbHVkZXMgb24gdGhpcyBzeXN0ZW0sIGFzIG9wcG9zZWQgdG8gdGhvc2Ugc2VlbiBieVxuLSMgJiMzOTstdGFyZ2V0IGJwZiYjMzk7LiBUaGlzIGZpeGVzIFwmIzM0O21pc3NpbmdcJiMzNDsgZmlsZXMgb24gc29tZSBhcmNoaXRlY3R1cmVzL2Rpc3Ryb3MsXG4tIyBzdWNoIGFzIGFzbS9ieXRlb3JkZXIuaCwgYXNtL3NvY2tldC5oLCBhc20vc29ja2lvcy5oLCBzeXMvY2RlZnMuaCBldGMuXG4tI1xuLSMgVXNlICYjMzk7LWlkaXJhZnRlciYjMzk7OiBEb24mIzM5O3QgaW50ZXJmZXJlIHdpdGggaW5jbHVkZSBtZWNoYW5pY3MgZXhjZXB0IHdoZXJlIHRoZVxuLSMgYnVpbGQgd291bGQgaGF2ZSBmYWlsZWQgYW55d2F5cy5cbi1kZWZpbmUgZ2V0X3N5c19pbmNsdWRlc1xuLSQoc2hlbGwgJCgxKSAkKDIpIC12IC1FIC0gXHUwMDNjL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxIFxcXG4tXHR8IHNlZCAtbiAmIzM5Oy9cdTAwM2MuLi5cdTAwM2Ugc2VhcmNoIHN0YXJ0cyBoZXJlOi8sL0VuZCBvZiBzZWFyY2ggbGlzdC4veyBzfCBcXCgvLipcXCl8LWlkaXJhZnRlciBcXDF8cCB9JiMzOTspIFxcXG4tJChzaGVsbCAkKDEpICQoMikgLWRNIC1FIC0gXHUwMDNjL2Rldi9udWxsIHwgZ3JlcCAmIzM5O19fcmlzY3ZfeGxlbiAmIzM5OyB8IGF3ayAmIzM5O3twcmludGYoXCYjMzQ7LURfX3Jpc2N2X3hsZW49JWQgLURfX0JJVFNfUEVSX0xPTkc9JWRcJiMzNDssICQkMywgJCQzKX0mIzM5Oylcbi1lbmRlZlxuLVxuLWlmbmVxICgkKENST1NTX0NPTVBJTEUpLClcbi1DTEFOR19UQVJHRVRfQVJDSCA9IC0tdGFyZ2V0PSQobm90ZGlyICQoQ1JPU1NfQ09NUElMRTolLT0lKSlcbi1lbmRpZlxuLVxuLUNMQU5HX1NZU19JTkNMVURFUyA9ICQoY2FsbCBnZXRfc3lzX2luY2x1ZGVzLCQoQ0xBTkcpLCQoQ0xBTkdfVEFSR0VUX0FSQ0gpKVxuLVxuLUJQRl9DRkxBR1MgPSAtZyAtRF9fVEFSR0VUX0FSQ0hfJChTUkNBUkNIKVx0XHRcdFx0XHRcXFxuLVx0ICAgICAkKGlmICQoSVNfTElUVExFX0VORElBTiksLW1saXR0bGUtZW5kaWFuLC1tYmlnLWVuZGlhbilcdFx0XFxcbiYjNDM7IyBQcmVzZXJ2ZSB0aGUgc2NoZWR1bGVyLXNwZWNpZmljIGZsYWdzOyB0aGUgc2hhcmVkIHJlY2lwZSBhZGRzIHRhcmdldCBmbGFncy5cbiYjNDM7QlBGX0NGTEFHUyA9IC1nIC1EX19UQVJHRVRfQVJDSF8kKFNSQ0FSQ0gpICQoTUVORElBTilcdFx0XHRcdFxcXG4gXHQgICAgIC1JJChDVVJESVIpL2luY2x1ZGUgLUkkKENVUkRJUikvaW5jbHVkZS9icGYtY29tcGF0XHRcdFx0XFxcbiBcdCAgICAgLUkkKElOQ0xVREVfRElSKSAtSSQoQVBJRElSKSAtSSQoU0NYVE9PTFNJTkNESVIpXHRcdFx0XFxcbiBcdCAgICAgLUkkKFJFUE9ST09UKS9pbmNsdWRlXHRcdFx0XHRcdFx0XFxcbi1cdCAgICAgJChDTEFOR19TWVNfSU5DTFVERVMpIFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0ICAgICAkKENMQU5HX1NZU19JTkNMVURFUylcdFx0XHRcdFx0XHRcXFxuIFx0ICAgICAtV2FsbCAtV25vLWNvbXBhcmUtZGlzdGluY3QtcG9pbnRlci10eXBlc1x0XHRcdFx0XFxcbiBcdCAgICAgLVduby1pbmNvbXBhdGlibGUtZnVuY3Rpb24tcG9pbnRlci10eXBlc1x0XHRcdFx0XFxcbiBcdCAgICAgLVduby1taWNyb3NvZnQtYW5vbi10YWdcdFx0XHRcdFx0XHRcXFxuIFx0ICAgICAtZm1zLWV4dGVuc2lvbnNcdFx0XHRcdFx0XHRcdFxcXG4tXHQgICAgIC1PMiAtbWNwdT12M1xuLVxuLSMgc29ydCByZW1vdmVzIGxpYmJwZiBkdXBsaWNhdGVzIHdoZW4gbm90IGNyb3NzLWJ1aWxkaW5nXG4tTUFLRV9ESVJTIDo9ICQoc29ydCAkKE9CSl9ESVIpL2xpYmJwZiAkKE9CSl9ESVIpL2xpYmJwZlx0XHRcdFx0XFxcbi1cdCAgICAgICAkKE9CSl9ESVIpL2JwZnRvb2wgJChPQkpfRElSKS9yZXNvbHZlX2J0Zmlkc1x0XHRcdFxcXG4tXHQgICAgICAgJChIT1NUX09CSl9ESVIpICQoSU5DTFVERV9ESVIpICQoU0NYT0JKX0RJUikpXG4tXG4tJChNQUtFX0RJUlMpOlxuLVx0JChjYWxsIG1zZyxNS0RJUiwsJEApXG4tXHQkKFEpbWtkaXIgLXAgJEBcbi1cbi0kKEJQRk9CSik6ICQod2lsZGNhcmQgJChCUEZESVIpLyouW2NoXSAkKEJQRkRJUikvTWFrZWZpbGUpXHRcdFx0XFxcbi1cdCAgICQoQVBJRElSKS9saW51eC9icGYuaFx0XHRcdFx0XHRcdFxcXG4tXHQgICB8ICQoT0JKX0RJUikvbGliYnBmXG4tXHQkKFEpJChNQUtFKSAkKHN1Ym1ha2VfZXh0cmFzKSAtQyAkKEJQRkRJUikgT1VUUFVUPSQoT0JKX0RJUikvbGliYnBmL1x0XFxcbi1cdFx0ICAgIEFSQ0g9JChBUkNIKSBDQz1cJiMzNDskKENDKVwmIzM0OyBDUk9TU19DT01QSUxFPSQoQ1JPU1NfQ09NUElMRSlcdFxcXG4tXHRcdCAgICBFWFRSQV9DRkxBR1M9JiMzOTstZyAtTzAgLWZQSUMmIzM5O1x0XHRcdFx0XHRcXFxuLVx0XHQgICAgREVTVERJUj0kKE9VVFBVVF9ESVIpIHByZWZpeD0gYWxsIGluc3RhbGxfaGVhZGVyc1xuLVxuLSQoREVGQVVMVF9CUEZUT09MKTogJCh3aWxkY2FyZCAkKEJQRlRPT0xESVIpLyouW2NoXSAkKEJQRlRPT0xESVIpL01ha2VmaWxlKVx0XFxcbi1cdFx0ICAgICQoTElCQlBGX09VVFBVVCkgfCAkKEhPU1RfT0JKX0RJUilcbi1cdCQoUSkkKE1BS0UpICQoc3VibWFrZV9leHRyYXMpICAtQyAkKEJQRlRPT0xESVIpXHRcdFx0XHRcXFxuLVx0XHQgICAgQVJDSD0gQ1JPU1NfQ09NUElMRT0gQ0M9JChIT1NUQ0MpIExEPSQoSE9TVExEKVx0XHRcXFxuLVx0XHQgICAgRVhUUkFfQ0ZMQUdTPSYjMzk7LWcgLU8wJiMzOTtcdFx0XHRcdFx0XFxcbi1cdFx0ICAgIE9VVFBVVD0kKEhPU1RfT0JKX0RJUikvXHRcdFx0XHRcdFxcXG4tXHRcdCAgICBMSUJCUEZfT1VUUFVUPSQoSE9TVF9MSUJCUEZfT1VUUFVUKVx0XHRcdFx0XFxcbi1cdFx0ICAgIExJQkJQRl9ERVNURElSPSQoSE9TVF9MSUJCUEZfREVTVERJUilcdFx0XHRcXFxuLVx0XHQgICAgcHJlZml4PSBERVNURElSPSQoSE9TVF9ERVNURElSKSBpbnN0YWxsLWJpblxuLVxuLSQoSU5DTFVERV9ESVIpL3ZtbGludXguaDogJChWTUxJTlVYX0JURikgJChCUEZUT09MKSB8ICQoSU5DTFVERV9ESVIpXG4taWZlcSAoJChWTUxJTlVYX0gpLClcbi1cdCQoY2FsbCBtc2csR0VOLCwkQClcbi1cdCQoUSkkKEJQRlRPT0wpIGJ0ZiBkdW1wIGZpbGUgJChWTUxJTlVYX0JURikgZm9ybWF0IGMgXHUwMDNlICRAXG4tZWxzZVxuLVx0JChjYWxsIG1zZyxDUCwsJEApXG4tXHQkKFEpY3AgXCYjMzQ7JChWTUxJTlVYX0gpXCYjMzQ7ICRAXG4tZW5kaWZcbi1cbi0kKFNDWE9CSl9ESVIpLyUuYnBmLm86ICUuYnBmLmMgJChJTkNMVURFX0RJUikvdm1saW51eC5oXHR8ICQoQlBGT0JKKSAkKFNDWE9CSl9ESVIpXG4tXHQkKGNhbGwgbXNnLENMTkctQlBGLCwkKG5vdGRpciAkQCkpXG4tXHQkKFEpJChDTEFORykgJChCUEZfQ0ZMQUdTKSAtdGFyZ2V0IGJwZiAtYyAkXHUwMDNjIC1vICRAXG4mIzQzO1x0ICAgICAkKEJQRl9FWFRSQV9DRkxBR1MpXG4gXG4tJChJTkNMVURFX0RJUikvJS5icGYuc2tlbC5oOiAkKFNDWE9CSl9ESVIpLyUuYnBmLm8gJChJTkNMVURFX0RJUikvdm1saW51eC5oICQoQlBGVE9PTCkgfCAkKElOQ0xVREVfRElSKVxuLVx0JChldmFsIHNjaGVkPSQobm90ZGlyICRAKSlcbi1cdCQoY2FsbCBtc2csR0VOLVNLRUwsLCQoc2NoZWQpKVxuLVx0JChRKSQoQlBGVE9PTCkgZ2VuIG9iamVjdCAkKFx1MDAzYzoubz0ubGlua2VkMS5vKSAkXHUwMDNjXG4tXHQkKFEpJChCUEZUT09MKSBnZW4gb2JqZWN0ICQoXHUwMDNjOi5vPS5saW5rZWQyLm8pICQoXHUwMDNjOi5vPS5saW5rZWQxLm8pXG4tXHQkKFEpJChCUEZUT09MKSBnZW4gb2JqZWN0ICQoXHUwMDNjOi5vPS5saW5rZWQzLm8pICQoXHUwMDNjOi5vPS5saW5rZWQyLm8pXG4tXHQkKFEpZGlmZiAkKFx1MDAzYzoubz0ubGlua2VkMi5vKSAkKFx1MDAzYzoubz0ubGlua2VkMy5vKVxuLVx0JChRKSQoQlBGVE9PTCkgZ2VuIHNrZWxldG9uICQoXHUwMDNjOi5vPS5saW5rZWQzLm8pIG5hbWUgJChzdWJzdCAuYnBmLnNrZWwuaCwsJChzY2hlZCkpIFx1MDAzZSAkQFxuLVx0JChRKSQoQlBGVE9PTCkgZ2VuIHN1YnNrZWxldG9uICQoXHUwMDNjOi5vPS5saW5rZWQzLm8pIG5hbWUgJChzdWJzdCAuYnBmLnNrZWwuaCwsJChzY2hlZCkpIFx1MDAzZSAkKEA6LnNrZWwuaD0uc3Vic2tlbC5oKVxuJiM0MztFWFRSQV9DTEVBTiAmIzQzOz0gJChPVVRQVVQpL2J1aWxkXG4gXG4gIyMjIyMjIyMjIyMjIyMjI1xuICMgQyBzY2hlZHVsZXJzICNcbiAjIyMjIyMjIyMjIyMjIyMjXG4gXG4tb3ZlcnJpZGUgZGVmaW5lIENMRUFOXG4tXHRybSAtcmYgJChPVVRQVVRfRElSKVxuLVx0cm0gLWYgJChURVNUX0dFTl9QUk9HUylcbi1lbmRlZlxuLVxuLSMgRXZlcnkgdGVzdGNhc2UgdGFrZXMgYWxsIG9mIHRoZSBCUEYgcHJvZ3MgYXJlIGRlcGVuZGVuY2llcyBieSBkZWZhdWx0LiBUaGlzXG4tIyBhbGxvd3MgdGVzdGNhc2VzIHRvIGxvYWQgYW55IEJQRiBzY2hlZHVsZXIsIHdoaWNoIGlzIHVzZWZ1bCBmb3IgdGVzdGNhc2VzXG4tIyB0aGF0IGRvbiYjMzk7dCBuZWVkIHRoZWlyIG93biBwcm9nIHRvIHJ1biB0aGVpciB0ZXN0LlxuLWFsbF90ZXN0X2JwZnByb2dzIDo9ICQoZm9yZWFjaCBwcm9nLCQod2lsZGNhcmQgKi5icGYuYyksJChJTkNMVURFX0RJUikvJChwYXRzdWJzdCAlLmMsJS5za2VsLmgsJChwcm9nKSkpXG4mIzQzOyMgQnVpbGQgZXZlcnkgc2NoZWR1bGVyIGJlZm9yZSBlYWNoIHRlc3QuXG4mIzQzO2FsbF90ZXN0X2JwZnByb2dzIDo9ICQoQlBGX1NLRUxTKVxuIFxuIGF1dG8tdGVzdC10YXJnZXRzIDo9XHRcdFx0XFxcbiBcdGNyZWF0ZV9kc3FcdFx0XHRcXFxuQEAgLTE5NiwyNCAmIzQzOzEwMSwyMiBAQCBhdXRvLXRlc3QtdGFyZ2V0cyA6PVx0XHRcdFxcXG4gdGVzdGNhc2UtdGFyZ2V0cyA6PSAkKGFkZHN1ZmZpeCAubywkKGFkZHByZWZpeCAkKFNDWE9CSl9ESVIpLywkKGF1dG8tdGVzdC10YXJnZXRzKSkpXG4gXG4gJChTQ1hPQkpfRElSKS9ydW5uZXIubzogcnVubmVyLmMgfCAkKFNDWE9CSl9ESVIpICQoQlBGT0JKKVxuLVx0JChDQykgJChDRkxBR1MpIC1jICRcdTAwM2MgLW8gJEBcbiYjNDM7XHQkKGNhbGwgbXNnLENDLCwkQClcbiYjNDM7XHQkKFEpJChDQykgJChDRkxBR1MpIC1jICRcdTAwM2MgLW8gJEBcbiBcbiAjIENyZWF0ZSBhbGwgb2YgdGhlIHRlc3QgdGFyZ2V0cyBvYmplY3QgZmlsZXMsIHdob3NlIHRlc3RjYXNlIG9iamVjdHMgd2lsbCBiZVxuICMgcmVnaXN0ZXJlZCBpbnRvIHRoZSBydW5uZXIgaW4gRUxGIGNvbnN0cnVjdG9ycy5cbi0jXG4tIyBOb3RlIHRoYXQgd2UgbXVzdCBkbyBkb3VibGUgZXhwYW5zaW9uIGhlcmUgaW4gb3JkZXIgdG8gc3VwcG9ydCBjb25kaXRpb25hbGx5XG4tIyBjb21waWxpbmcgQlBGIG9iamVjdCBmaWxlcyBvbmx5IGlmIG9uZSBpcyBwcmVzZW50LCBhcyB0aGUgd2lsZGNhcmQgTWFrZVxuLSMgZnVuY3Rpb24gZG9lc24mIzM5O3Qgc3VwcG9ydCB1c2luZyBpbXBsaWNpdCBydWxlcyBvdGhlcndpc2UuXG4gJCh0ZXN0Y2FzZS10YXJnZXRzKTogJChTQ1hPQkpfRElSKS8lLm86ICUuYyAkKFNDWE9CSl9ESVIpL3J1bm5lci5vICQoYWxsX3Rlc3RfYnBmcHJvZ3MpIHwgJChTQ1hPQkpfRElSKVxuLVx0JChldmFsIHRlc3Q9JChwYXRzdWJzdCAlLm8sJS5jLCQobm90ZGlyICRAKSkpXG4tXHQkKENDKSAkKENGTEFHUykgLWMgJFx1MDAzYyAtbyAkQFxuJiM0MztcdCQoY2FsbCBtc2csQ0MsLCRAKVxuJiM0MztcdCQoUSkkKENDKSAkKENGTEFHUykgLWMgJFx1MDAzYyAtbyAkQFxuIFxuICQoU0NYT0JKX0RJUikvdXRpbC5vOiB1dGlsLmMgfCAkKFNDWE9CSl9ESVIpXG4tXHQkKENDKSAkKENGTEFHUykgLWMgJFx1MDAzYyAtbyAkQFxuJiM0MztcdCQoY2FsbCBtc2csQ0MsLCRAKVxuJiM0MztcdCQoUSkkKENDKSAkKENGTEFHUykgLWMgJFx1MDAzYyAtbyAkQFxuIFxuICQoT1VUUFVUKS9ydW5uZXI6ICQoU0NYT0JKX0RJUikvcnVubmVyLm8gJChTQ1hPQkpfRElSKS91dGlsLm8gJChCUEZPQkopICQodGVzdGNhc2UtdGFyZ2V0cylcbi1cdEBlY2hvIFwmIzM0OyQodGVzdGNhc2UtdGFyZ2V0cylcJiMzNDtcbi1cdCQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkXiAkKExERkxBR1MpXG4mIzQzO1x0JChjYWxsIG1zZyxCSU5BUlksLCRAKVxuJiM0MztcdCQoUSkkKENDKSAkKENGTEFHUykgLW8gJEAgJF4gJChMREZMQUdTKVxuIFxuIC5ERUZBVUxUX0dPQUwgOj0gYWxsXG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjM6NTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdCBoYXJuZXNzZXMsIHNlbGZ0ZXN0IEJQRiB0ZXN0IHByb2dyYW1zLCBhbmQgYnVpbGQgaW5mcmFzdHJ1Y3R1cmUgd2l0aGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzLy4gTm9uZSBvZiB0aGUgY2hhbmdlcyBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMsIHNvIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjMDdiNGI1YmFmYmU2ZTFlZTgyNGM4MmQzYmFiYTAxZTg5ODk0MDAwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMTAgMjM6NTg6NDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC8uZ2l0aWdub3JlCmluZGV4IDk1MmU0NDQ4YmYwNzAuLjU2MWEzZTg5MWI5OGMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC8uZ2l0aWdub3JlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC8uZ2l0aWdub3JlCkBAIC02LDcgJiM0Mzs2LDE1IEBAIHRlc3RfZnJlZXplcgogdGVzdF9odWdldGxiX21lbWNnCiB0ZXN0X2tpbGwKIHRlc3Rfa21lbQomIzQzO3Rlc3RfbWVtY2dfc3RhdF9jcm9zc19jcHUKIHRlc3RfbWVtY29udHJvbAogdGVzdF9waWRzCiB0ZXN0X3pzd2FwCiB3YWl0X2lub3RpZnkKJiM0MzsjIEFydGlmYWN0cyBnZW5lcmF0ZWQgYnkgbGliLmJwZi5tawomIzQzOy90b29scwomIzQzOy9ob3N0LXRvb2xzCiYjNDM7Ki5icGYubwomIzQzOyouYnBmLmQKJiM0MzsqLmxpbmtlZCoubwomIzQzOyouc2tlbC5oCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvTWFrZWZpbGUKaW5kZXggZTAxNTg0YzIxODlhYy4uY2I5OTliYzJjODc1ZSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9NYWtlZmlsZQpAQCAtMjAsOSAmIzQzOzIwLDQ2IEBAIFRFU1RfR0VOX1BST0dTICYjNDM7PSB0ZXN0X3pzd2FwCiAKIExPQ0FMX0hEUlMgJiM0Mzs9ICQoc2VsZmRpcikvY2xvbmUzL2Nsb25lM19zZWxmdGVzdHMuaCAkKHNlbGZkaXIpL3BpZGZkL3BpZGZkLmgKIAomIzQzOyMgUmVzb2x2ZSBDbGFuZyBlYXJseSBzbyB0aGUgb3B0aW9uYWwgQlBGIHRlc3QgY2FuIGJlIHNlbGVjdGVkLgomIzQzO2lmbmVxICgkKGZpbHRlciAlLywkKExMVk0pKSwpCiYjNDM7Q0xBTkcgPz0gJChMTFZNKWNsYW5nCiYjNDM7ZWxzZQomIzQzO0NMQU5HID89IGNsYW5nJChmaWx0ZXIgLSUsJChMTFZNKSkKJiM0MztlbmRpZgomIzQzO1JFQURFTEYgPz0gJChDUk9TU19DT01QSUxFKXJlYWRlbGYKJiM0MztWTUxJTlVYX0JURl9QQVRIUyA/PSAkKGlmICQoTyksJChPKS92bWxpbnV4KQkJCQlcCiYjNDM7CQkgICAgICQoaWYgJChLQlVJTERfT1VUUFVUKSwkKEtCVUlMRF9PVVRQVVQpL3ZtbGludXgpCVwKJiM0MzsJCSAgICAgLi4vLi4vLi4vLi4vdm1saW51eAkJCQlcCiYjNDM7CQkgICAgIC9zeXMva2VybmVsL2J0Zi92bWxpbnV4CQkJCVwKJiM0MzsJCSAgICAgL2Jvb3Qvdm1saW51eC0kKHNoZWxsIHVuYW1lIC1yKQomIzQzOyMgSWdub3JlIEVMRiBpbWFnZXMgd2l0aG91dCAuQlRGOyByYXcgc3lzZnMgQlRGIG5lZWRzIG5vIGNoZWNrLgomIzQzO1ZNTElOVVhfQlRGID89ICQoYWJzcGF0aCAkKGZpcnN0d29yZCAkKGZvcmVhY2ggdiwkKHdpbGRjYXJkICQoVk1MSU5VWF9CVEZfUEFUSFMpKSxcCiYjNDM7CQkgJChpZiAkKGZpbHRlciAvc3lzL2tlcm5lbC9idGYvJSwkKHYpKSwkKHYpLFwKJiM0MzsJCSAgICQoaWYgJChzaGVsbCAkKFJFQURFTEYpIC1TICYjMzQ7JCh2KSYjMzQ7IDImZ3Q7L2Rldi9udWxsIHwgZ3JlcCAtRiAuQlRGKSwkKHYpKSkpKSkKJiM0MzsjIEFjY2VwdCBlaXRoZXIgYSBzdXBwbGllZCBoZWFkZXIgb3IgdXNhYmxlIEJURi4KJiM0MztIQVZFX0JQRiA6PSAkKGFuZCAkKG9yICQoVk1MSU5VWF9IKSwkKFZNTElOVVhfQlRGKSksCQkJXAomIzQzOwkJICAkKHNoZWxsIGNvbW1hbmQgLXYgJChDTEFORykgMiZndDsvZGV2L251bGwpKQomIzQzOwomIzQzO2lmbmVxICgkKEhBVkVfQlBGKSwpCiYjNDM7VEVTVF9HRU5fUFJPR1MgJiM0Mzs9IHRlc3RfbWVtY2dfc3RhdF9jcm9zc19jcHUKJiM0MztCUEZfU1JDUyA6PSBtZW1jZ19zdGF0X2Nyb3NzX2NwdS5icGYuYwomIzQzOyMgUmVwbGFjZSBsaWIubWsmIzM5O3MgbGluayBydWxlIGJlbG93LgomIzQzO09WRVJSSURFX1RBUkdFVFMgOj0gMQomIzQzO2VuZGlmCiYjNDM7CiBpbmNsdWRlIC4uL2xpYi5tawogaW5jbHVkZSBsaWIvbGliY2dyb3VwLm1rCiAKJiM0MztpZm5lcSAoJChIQVZFX0JQRiksKQomIzQzO2luY2x1ZGUgLi4vbGliLmJwZi5tawomIzQzOwomIzQzOyMgUmVzdG9yZSBsaWIubWsmIzM5O3MgcnVsZSBmb3Igbm9uLUJQRiB0ZXN0cy4KJiM0MztMT0NBTF9IRFJTICYjNDM7PSAkKHNlbGZkaXIpL2tzZWxmdGVzdF9oYXJuZXNzLmggJChzZWxmZGlyKS9rc2VsZnRlc3QuaAomIzQzOyQoT1VUUFVUKS8lOiAlLmMgJChMT0NBTF9IRFJTKQomIzQzOwkkKGNhbGwgbXNnLENDLCwkQCkKJiM0MzsJJChRKSQoTElOSy5jKSAkKGZpbHRlci1vdXQgJChMT0NBTF9IRFJTKSwkXikgJChMRExJQlMpIC1vICRACiYjNDM7ZW5kaWYKJiM0MzsKICQoT1VUUFVUKS90ZXN0X2NvcmU6ICQoTElCQ0dST1VQX08pCiAkKE9VVFBVVCkvdGVzdF9jcHU6ICQoTElCQ0dST1VQX08pCiAkKE9VVFBVVCkvdGVzdF9jcHVzZXQ6ICQoTElCQ0dST1VQX08pCkBAIC0zMywzICYjNDM7NzAsMTIgQEAgJChPVVRQVVQpL3Rlc3Rfa21lbTogJChMSUJDR1JPVVBfTykKICQoT1VUUFVUKS90ZXN0X21lbWNvbnRyb2w6ICQoTElCQ0dST1VQX08pCiAkKE9VVFBVVCkvdGVzdF9waWRzOiAkKExJQkNHUk9VUF9PKQogJChPVVRQVVQpL3Rlc3RfenN3YXA6ICQoTElCQ0dST1VQX08pCiYjNDM7CiYjNDM7aWZuZXEgKCQoSEFWRV9CUEYpLCkKJiM0MzsjIEtlZXAgaW4tdHJlZSBVQVBJIGhlYWRlcnMgcHJpdmF0ZSB0byB0aGUgQlBGIHRlc3QuCiYjNDM7JChPVVRQVVQpL3Rlc3RfbWVtY2dfc3RhdF9jcm9zc19jcHU6IHByaXZhdGUgQ0ZMQUdTICYjNDM7PSAtSSQodG9wX3NyY2RpcikvdG9vbHMvaW5jbHVkZS91YXBpCiYjNDM7IyBMaW5rIGNncm91cF91dGlsIGFuZCB0aGUgc2tlbGV0b24gYWdhaW5zdCB0aGUgaW4tdHJlZSBsaWJicGYuCiYjNDM7JChPVVRQVVQpL3Rlc3RfbWVtY2dfc3RhdF9jcm9zc19jcHU6IHRlc3RfbWVtY2dfc3RhdF9jcm9zc19jcHUuYyBcCiYjNDM7CQkJCQkkKEJQRl9TS0VMUykgJChMSUJDR1JPVVBfTykgJChCUEZPQkopCiYjNDM7CSQoY2FsbCBicGZfbGluaywkQCwkJmx0OyAkKExJQkNHUk9VUF9PKSkKJiM0MztlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9jb25maWcKaW5kZXggMzlmOTc5NjkwZGQzYi4uMWY1ODVlZDlhNTk2NyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvY29uZmlnCkBAIC00LDMgJiM0Mzs0LDggQEAgQ09ORklHX0NHUk9VUF9GUkVFWkVSPXkKIENPTkZJR19DR1JPVVBfU0NIRUQ9eQogQ09ORklHX01FTUNHPXkKIENPTkZJR19QQUdFX0NPVU5URVI9eQomIzQzO0NPTkZJR19CUEY9eQomIzQzO0NPTkZJR19CUEZfU1lTQ0FMTD15CiYjNDM7Q09ORklHX0JQRl9FVkVOVFM9eQomIzQzO0NPTkZJR19ERUJVR19JTkZPX0JURj15CiYjNDM7Q09ORklHX0RFQlVHX0lORk9fRFdBUkY0PXkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9saWIvY2dyb3VwX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9saWIvY2dyb3VwX3V0aWwuYwppbmRleCAyNTk2YzEyY2Q4NjQ1Li5jYTEyZDc5NGMwOTIxIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbGliL2Nncm91cF91dGlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9jZ3JvdXBfdXRpbC5jCkBAIC01NCw2ICYjNDM7NTQsODggQEAgc3NpemVfdCB3cml0ZV90ZXh0KGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc3NpemVfdCBsZW4pCiAJcmV0dXJuIGxlbiAmbHQ7IDAgPyAtZXJybm8gOiBsZW47CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBjZ19nZXRfaWQgLSByZXR1cm4gYSBjZ3JvdXAmIzM5O3Mga2VybmZzIElECiYjNDM7ICogQGNncm91cDogYWJzb2x1dGUgY2dyb3VwIHBhdGgKJiM0MzsgKgomIzQzOyAqIFRoaXMgaXMgY2dycC0mZ3Q7a24tJmd0O2lkLCBub3Qgc3RfaW5vLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBJRCBvciAwIG9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7dW5zaWduZWQgbG9uZyBsb25nIGNnX2dldF9pZChjb25zdCBjaGFyICpjZ3JvdXApCiYjNDM7ewomIzQzOwl1bmlvbiB7CiYjNDM7CQl1bnNpZ25lZCBsb25nIGxvbmcgaWQ7CiYjNDM7CQl1bnNpZ25lZCBjaGFyIHJhd1s4XTsKJiM0MzsJfSBoYW5kbGU7CiYjNDM7CXN0cnVjdCBmaWxlX2hhbmRsZSAqZmhwLCAqZmhwMjsKJiM0MzsJaW50IG1vdW50X2lkLCBmaHNpemUsIGVycjsKJiM0MzsJdW5zaWduZWQgbG9uZyBsb25nIHJldCA9IDA7CiYjNDM7CiYjNDM7CWZoc2l6ZSA9IHNpemVvZigqZmhwKTsKJiM0MzsJZmhwID0gY2FsbG9jKDEsIGZoc2l6ZSk7CiYjNDM7CWlmICghZmhwKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qIFRoZSBmYWlsZWQgcHJvYmUgcmVwb3J0cyB0aGUgY2dyb3VwZnMgaGFuZGxlIHNpemUuICovCiYjNDM7CWVyciA9IG5hbWVfdG9faGFuZGxlX2F0KEFUX0ZEQ1dELCBjZ3JvdXAsIGZocCwgJmFtcDttb3VudF9pZCwgMCk7CiYjNDM7CWlmIChlcnIgJmd0Oz0gMCB8fCBmaHAtJmd0O2hhbmRsZV9ieXRlcyAhPSA4KQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWZoc2l6ZSA9IHNpemVvZigqZmhwKSAmIzQzOyBmaHAtJmd0O2hhbmRsZV9ieXRlczsKJiM0MzsJZmhwMiA9IHJlYWxsb2MoZmhwLCBmaHNpemUpOwomIzQzOwlpZiAoIWZocDIpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJZmhwID0gZmhwMjsKJiM0MzsKJiM0MzsJaWYgKG5hbWVfdG9faGFuZGxlX2F0KEFUX0ZEQ1dELCBjZ3JvdXAsIGZocCwgJmFtcDttb3VudF9pZCwgMCkgJmx0OyAwKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CW1lbWNweShoYW5kbGUucmF3LCBmaHAtJmd0O2ZfaGFuZGxlLCA4KTsKJiM0MzsJcmV0ID0gaGFuZGxlLmlkOwomIzQzO291dDoKJiM0MzsJZnJlZShmaHApOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBjZ190b3VjaF9wYWdlcyAtIGZhdWx0IGV2ZXJ5IHBhZ2UgaW4gYSByZWdpb24KJiM0MzsgKiBAYnVmOiBzdGFydCBvZiB0aGUgcmVnaW9uCiYjNDM7ICogQHNpemU6IGxlbmd0aCBvZiB0aGUgcmVnaW9uIGluIGJ5dGVzCiYjNDM7ICoKJiM0MzsgKiBQYWdlcyBhcmUgY2hhcmdlZCB0byB0aGUgY2FsbGVyJiMzOTtzIGNncm91cCBvbiBpdHMgY3VycmVudCBDUFUuCiYjNDM7ICovCiYjNDM7dm9pZCBjZ190b3VjaF9wYWdlcyhjaGFyICpidWYsIHNpemVfdCBzaXplKQomIzQzO3sKJiM0MzsJbG9uZyBwYWdlX3NpemUgPSBzeXNjb25mKF9TQ19QQUdFU0laRSk7CiYjNDM7CWNoYXIgKnB0cjsKJiM0MzsKJiM0MzsJaWYgKHBhZ2Vfc2l6ZSAmbHQ7PSAwKQomIzQzOwkJcGFnZV9zaXplID0gQlVGX1NJWkU7CiYjNDM7CiYjNDM7CWZvciAocHRyID0gYnVmOyBwdHIgJmx0OyBidWYgJiM0Mzsgc2l6ZTsgcHRyICYjNDM7PSBwYWdlX3NpemUpCiYjNDM7CQkqcHRyID0gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogY2dfYWxsb2NfYW5vbiAtIGFsbG9jYXRlIGFuZCBmYXVsdCBhbm9ueW1vdXMgbWVtb3J5CiYjNDM7ICogQHNpemU6IGJ5dGVzIHRvIGFsbG9jYXRlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IFJlZ2lvbiB0byBmcmVlKCksIG9yIE5VTEwuCiYjNDM7ICovCiYjNDM7Y2hhciAqY2dfYWxsb2NfYW5vbihzaXplX3Qgc2l6ZSkKJiM0Mzt7CiYjNDM7CWNoYXIgKmJ1ZiA9IG1hbGxvYyhzaXplKTsKJiM0MzsKJiM0MzsJaWYgKCFidWYpIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O21hbGxvYygpIGZhaWxlZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJY2dfdG91Y2hfcGFnZXMoYnVmLCBzaXplKTsKJiM0MzsJcmV0dXJuIGJ1ZjsKJiM0Mzt9CiYjNDM7CiBjaGFyICpjZ19uYW1lKGNvbnN0IGNoYXIgKnJvb3QsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJc2l6ZV90IGxlbiA9IHN0cmxlbihyb290KSAmIzQzOyBzdHJsZW4obmFtZSkgJiM0MzsgMjsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9saWIvaW5jbHVkZS9jZ3JvdXBfdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9pbmNsdWRlL2Nncm91cF91dGlsLmgKaW5kZXggOGViYjJiNGQ0ZWMwNy4uNjQwNzc4MDE4NzgwNyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9pbmNsdWRlL2Nncm91cF91dGlsLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9pbmNsdWRlL2Nncm91cF91dGlsLmgKQEAgLTU0LDYgJiM0Mzs1NCw5IEBAIGV4dGVybiBzc2l6ZV90IHdyaXRlX3RleHQoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzc2l6ZV90IGxlbik7CiBleHRlcm4gaW50IGNnX2ZpbmRfY29udHJvbGxlcl9yb290KGNoYXIgKnJvb3QsIHNpemVfdCBsZW4sIGNvbnN0IGNoYXIgKmNvbnRyb2xsZXIpOwogZXh0ZXJuIGludCBjZ19maW5kX3VuaWZpZWRfcm9vdChjaGFyICpyb290LCBzaXplX3QgbGVuLCBib29sICpuc2RlbGVnYXRlKTsKIGV4dGVybiBjaGFyICpjZ19uYW1lKGNvbnN0IGNoYXIgKnJvb3QsIGNvbnN0IGNoYXIgKm5hbWUpOwomIzQzO2V4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgY2dfZ2V0X2lkKGNvbnN0IGNoYXIgKmNncm91cCk7CiYjNDM7ZXh0ZXJuIHZvaWQgY2dfdG91Y2hfcGFnZXMoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSk7CiYjNDM7ZXh0ZXJuIGNoYXIgKmNnX2FsbG9jX2Fub24oc2l6ZV90IHNpemUpOwogZXh0ZXJuIGNoYXIgKmNnX25hbWVfaW5kZXhlZChjb25zdCBjaGFyICpyb290LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgaW5kZXgpOwogZXh0ZXJuIGNoYXIgKmNnX2NvbnRyb2woY29uc3QgY2hhciAqY2dyb3VwLCBjb25zdCBjaGFyICpjb250cm9sKTsKIGV4dGVybiBpbnQgY2dfY3JlYXRlKGNvbnN0IGNoYXIgKmNncm91cCk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbWVtY2dfc3RhdF9jcm9zc19jcHUuYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbWVtY2dfc3RhdF9jcm9zc19jcHUuYnBmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uZmZmM2I5MjU2YWEzOQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9tZW1jZ19zdGF0X2Nyb3NzX2NwdS5icGYuYwpAQCAtMCwwICYjNDM7MSwxMDEgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi8KJiM0MzsjZGVmaW5lIEJQRl9OT19LRlVOQ19QUk9UT1RZUEVTCiYjNDM7I2luY2x1ZGUgJmx0O3ZtbGludXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfY29yZV9yZWFkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDttZW1jZ19zdGF0X2Nyb3NzX2NwdS5oJiMzNDsKJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CiYjNDM7CiYjNDM7LyogRW5zdXJlIHRoZSB1cHBlci1ib3VuZCBjaGVja3MgYWxzbyByZWplY3QgbmVnYXRpdmUgQlBGIGFyZ3VtZW50cy4gKi8KJiM0MztfU3RhdGljX2Fzc2VydCgoZW51bSB2bV9ldmVudF9pdGVtKS0xICZndDs9IE5SX1ZNX0VWRU5UX0lURU1TLAomIzQzOwkgICAgICAgJiMzNDtuZWdhdGl2ZSB2bV9ldmVudF9pdGVtIG11c3QgZmFpbCB0aGUgYm91bmRzIGNoZWNrJiMzNDspOwomIzQzO19TdGF0aWNfYXNzZXJ0KChlbnVtIG1lbWNnX21lbW9yeV9ldmVudCktMSAmZ3Q7PSBNRU1DR19OUl9NRU1PUllfRVZFTlRTLAomIzQzOwkgICAgICAgJiMzNDtuZWdhdGl2ZSBtZW1jZ19tZW1vcnlfZXZlbnQgbXVzdCBmYWlsIHRoZSBib3VuZHMgY2hlY2smIzM0Oyk7CiYjNDM7CiYjNDM7LyogRGVjbGFyZSBrZnVuY3MgdGhhdCBtYXkgYmUgYWJzZW50IGZyb20gdGhlIGJ1aWxkLXRpbWUgdm1saW51eC5oLiAqLwomIzQzO3N0cnVjdCBtZW1fY2dyb3VwICpicGZfZ2V0X21lbV9jZ3JvdXAoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcykgX19rc3ltOwomIzQzO3ZvaWQgYnBmX3B1dF9tZW1fY2dyb3VwKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykgX19rc3ltOwomIzQzO3ZvaWQgYnBmX21lbV9jZ3JvdXBfZmx1c2hfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSBfX2tzeW07CiYjNDM7dW5zaWduZWQgbG9uZyBicGZfbWVtX2Nncm91cF9wYWdlX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGlkeCkgX19rc3ltOwomIzQzO3Vuc2lnbmVkIGxvbmcgYnBmX21lbV9jZ3JvdXBfdm1fZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKJiM0MzsJCQkJICAgICAgIGVudW0gdm1fZXZlbnRfaXRlbSBldmVudCkgX19rc3ltOwomIzQzOwomIzQzOy8qIFVzZXJzcGFjZSByZXNpemVzIHRoaXMgY2dyb3VwLUlEIG1hcCBiZWZvcmUgbG9hZC4gKi8KJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0hBU0gpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDEpOwomIzQzOwlfX3R5cGUoa2V5LCBfX3U2NCk7CiYjNDM7CV9fdHlwZSh2YWx1ZSwgc3RydWN0IG1lbWNnX3N0YXRfc25hcHNob3QpOwomIzQzO30gcmVzdWx0cyBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKJiM0MzsKJiM0MzsvKiBJc29sYXRlIGNhcGFiaWxpdHkgZmFpbHVyZXMgZnJvbSB2ZXJpZmllciBmYWlsdXJlcyBpbiB0aGUgdGVzdCBwcm9ncmFtLiAqLwomIzQzO1NFQygmIzM0O2l0ZXIucy9jZ3JvdXAmIzM0OykKJiM0MztpbnQgbWVtY2dfa2Z1bmNzX3Byb2JlKHN0cnVjdCBicGZfaXRlcl9fY2dyb3VwICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgY2dyb3VwICpjZ3JwID0gY3R4LSZndDtjZ3JvdXA7CiYjNDM7CXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKJiM0MzsKJiM0MzsJaWYgKCFjZ3JwKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CW1lbWNnID0gYnBmX2dldF9tZW1fY2dyb3VwKCZhbXA7Y2dycC0mZ3Q7c2VsZik7CiYjNDM7CWlmICghbWVtY2cpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJYnBmX21lbV9jZ3JvdXBfZmx1c2hfc3RhdHMobWVtY2cpOwomIzQzOwlicGZfbWVtX2Nncm91cF9wYWdlX3N0YXRlKG1lbWNnLCAwKTsKJiM0MzsJYnBmX21lbV9jZ3JvdXBfdm1fZXZlbnRzKG1lbWNnLCAwKTsKJiM0MzsJYnBmX3B1dF9tZW1fY2dyb3VwKG1lbWNnKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qIFNsZWVwYWJsZSBpdGVyYXRvcjogZmx1c2ggdGhlIHJvb3Qgb25jZSwgdGhlbiBzbmFwc2hvdCBlYWNoIGNncm91cC4gKi8KJiM0MztTRUMoJiMzNDtpdGVyLnMvY2dyb3VwJiMzNDspCiYjNDM7aW50IGNncm91cF9tZW1jZ19zdGF0X2Nyb3NzX2NwdShzdHJ1Y3QgYnBmX2l0ZXJfX2Nncm91cCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IGNncm91cCAqY2dycCA9IGN0eC0mZ3Q7Y2dyb3VwOwomIzQzOwlzdHJ1Y3QgbWVtY2dfc3RhdF9zbmFwc2hvdCBzbmFwID0ge307CiYjNDM7CXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3M7CiYjNDM7CXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKJiM0MzsJaW50IGlkeF9hbm9uLCBpZHhfZmlsZSwgaWR4X3NobWVtLCBpZHhfZm1hcHBlZCwgaWR4X3BnZmF1bHQ7CiYjNDM7CV9fdTY0IGNnX2lkOwomIzQzOwomIzQzOwkvKiBJZ25vcmUgdGhlIGZpbmFsIHBvc3QtcHJvY2Vzc2luZyBjYWxsLiAqLwomIzQzOwlpZiAoIWNncnApCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJY3NzID0gJmFtcDtjZ3JwLSZndDtzZWxmOwomIzQzOwltZW1jZyA9IGJwZl9nZXRfbWVtX2Nncm91cChjc3MpOwomIzQzOwlpZiAoIW1lbWNnKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qIERFU0NFTkRBTlRTX1BSRSB2aXNpdHMgdGhlIHN1YnRyZWUgcm9vdCBmaXJzdC4gKi8KJiM0MzsJaWYgKGN0eC0mZ3Q7bWV0YS0mZ3Q7c2VxX251bSA9PSAwKQomIzQzOwkJYnBmX21lbV9jZ3JvdXBfZmx1c2hfc3RhdHMobWVtY2cpOwomIzQzOwomIzQzOwljZ19pZCA9IEJQRl9DT1JFX1JFQUQoY2dycCwga24sIGlkKTsKJiM0MzsJc25hcC5jZ3JvdXBfaWQgPSBjZ19pZDsKJiM0MzsKJiM0MzsJaWR4X2Fub24gPSBicGZfY29yZV9lbnVtX3ZhbHVlKGVudW0gbm9kZV9zdGF0X2l0ZW0sIE5SX0FOT05fTUFQUEVEKTsKJiM0MzsJaWR4X2ZpbGUgPSBicGZfY29yZV9lbnVtX3ZhbHVlKGVudW0gbm9kZV9zdGF0X2l0ZW0sIE5SX0ZJTEVfUEFHRVMpOwomIzQzOwlpZHhfc2htZW0gPSBicGZfY29yZV9lbnVtX3ZhbHVlKGVudW0gbm9kZV9zdGF0X2l0ZW0sIE5SX1NITUVNKTsKJiM0MzsJaWR4X2ZtYXBwZWQgPSBicGZfY29yZV9lbnVtX3ZhbHVlKGVudW0gbm9kZV9zdGF0X2l0ZW0sIE5SX0ZJTEVfTUFQUEVEKTsKJiM0MzsJaWR4X3BnZmF1bHQgPSBicGZfY29yZV9lbnVtX3ZhbHVlKGVudW0gdm1fZXZlbnRfaXRlbSwgUEdGQVVMVCk7CiYjNDM7CiYjNDM7CXNuYXAuYW5vbiA9IGJwZl9tZW1fY2dyb3VwX3BhZ2Vfc3RhdGUobWVtY2csIGlkeF9hbm9uKTsKJiM0MzsJc25hcC5maWxlID0gYnBmX21lbV9jZ3JvdXBfcGFnZV9zdGF0ZShtZW1jZywgaWR4X2ZpbGUpOwomIzQzOwlzbmFwLnNobWVtID0gYnBmX21lbV9jZ3JvdXBfcGFnZV9zdGF0ZShtZW1jZywgaWR4X3NobWVtKTsKJiM0MzsJc25hcC5maWxlX21hcHBlZCA9IGJwZl9tZW1fY2dyb3VwX3BhZ2Vfc3RhdGUobWVtY2csIGlkeF9mbWFwcGVkKTsKJiM0MzsJc25hcC5wZ2ZhdWx0ID0gYnBmX21lbV9jZ3JvdXBfdm1fZXZlbnRzKG1lbWNnLCBpZHhfcGdmYXVsdCk7CiYjNDM7CiYjNDM7CS8qIFJlYWQgcGFnZSBjb3VudGVycyBmcm9tIHRoZSB0cnVzdGVkIHBvaW50ZXIuICovCiYjNDM7CXNuYXAudXNhZ2VfcGFnZXMgPSBCUEZfQ09SRV9SRUFEKG1lbWNnLCBtZW1vcnkudXNhZ2UuY291bnRlcik7CiYjNDM7CXNuYXAubWF4X3BhZ2VzID0gQlBGX0NPUkVfUkVBRChtZW1jZywgbWVtb3J5Lm1heCk7CiYjNDM7CiYjNDM7CWJwZl9tYXBfdXBkYXRlX2VsZW0oJmFtcDtyZXN1bHRzLCAmYW1wO2NnX2lkLCAmYW1wO3NuYXAsIEJQRl9BTlkpOwomIzQzOwomIzQzOwlicGZfcHV0X21lbV9jZ3JvdXAobWVtY2cpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbWVtY2dfc3RhdF9jcm9zc19jcHUuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9tZW1jZ19zdGF0X2Nyb3NzX2NwdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmY3NWUzNDFmOGNiODMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbWVtY2dfc3RhdF9jcm9zc19jcHUuaApAQCAtMCwwICYjNDM7MSwxOCBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqLwomIzQzOyNpZm5kZWYgX19NRU1DR19TVEFUX0NST1NTX0NQVV9ICiYjNDM7I2RlZmluZSBfX01FTUNHX1NUQVRfQ1JPU1NfQ1BVX0gKJiM0MzsKJiM0MzsvKiBGaXhlZC13aWR0aCBzbmFwc2hvdCBzaGFyZWQgYnkgQlBGIGFuZCB1c2Vyc3BhY2UuICovCiYjNDM7c3RydWN0IG1lbWNnX3N0YXRfc25hcHNob3QgewomIzQzOwlfX3U2NCBjZ3JvdXBfaWQ7CiYjNDM7CV9fdTY0IGFub247CQkvKiBOUl9BTk9OX01BUFBFRCwgYnl0ZXMgKi8KJiM0MzsJX191NjQgZmlsZTsJCS8qIE5SX0ZJTEVfUEFHRVMsIGJ5dGVzICovCiYjNDM7CV9fdTY0IHNobWVtOwkJLyogTlJfU0hNRU0sIGJ5dGVzICovCiYjNDM7CV9fdTY0IGZpbGVfbWFwcGVkOwkvKiBOUl9GSUxFX01BUFBFRCwgYnl0ZXMgKi8KJiM0MzsJX191NjQgcGdmYXVsdDsJCS8qIFBHRkFVTFQsIGNvdW50ICovCiYjNDM7CV9fdTY0IHVzYWdlX3BhZ2VzOwkvKiBwYWdlX2NvdW50ZXIgbWVtb3J5LnVzYWdlLCBpbiBQQUdFUyAqLwomIzQzOwlfX3U2NCBtYXhfcGFnZXM7CS8qIHBhZ2VfY291bnRlciBtZW1vcnkubWF4LCBpbiBQQUdFUyAqLwomIzQzO307CiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9fTUVNQ0dfU1RBVF9DUk9TU19DUFVfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfbWVtY2dfc3RhdF9jcm9zc19jcHUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X21lbWNnX3N0YXRfY3Jvc3NfY3B1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uOTZlNGE0YTk1OGVkYQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X21lbWNnX3N0YXRfY3Jvc3NfY3B1LmMKQEAgLTAsMCAmIzQzOzEsNzU1IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDb21wYXJlIG1lbWNnIEJQRiBrZnVuY3Mgd2l0aCBtZW1vcnkuc3RhdCBvdmVyIGEgY2hhcmdlZCBzdWJ0cmVlLiBDaGFyZ2VycwomIzQzOyAqIHNwcmVhZCBhbm9ueW1vdXMgbWVtb3J5IGFjcm9zcyBDUFVzIGFuZCBob2xkIGl0LiBSZWFkIEJQRiBmaXJzdCBzbyBpdHMgZmx1c2gKJiM0MzsgKiBpcyBub3QgY29uc3VtZWQgYnkgbWVtb3J5LnN0YXQsIHRoZW4gcmVxdWlyZSB0d28gZmlsZSBzYW1wbGVzIHRvIGJyYWNrZXQgZWFjaAomIzQzOyAqIEJQRiB2YWx1ZS4gRWFjaCBsZWFmIG11c3QgY292ZXIgaXRzIGNoYXJnZTsgcm9vdCBhbm9uIG11c3QgZXF1YWwgdGhlIGxlYWYgc3VtLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgX0dOVV9TT1VSQ0UKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbGltaXRzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2ZjbnRsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbWl0cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRpbnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c2NoZWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3dhaXQuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYnBmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2xpYmJwZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnRmLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtjZ3JvdXBfdXRpbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O21lbWNnX3N0YXRfY3Jvc3NfY3B1LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7bWVtY2dfc3RhdF9jcm9zc19jcHUuc2tlbC5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIFNVQlRSRUVfTkFNRQkJJiMzNDttY2dfeGNwdSYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBNRU1DR19DSEFSR0VfQkFUQ0gJNjQKJiM0MzsKJiM0MzsjZGVmaW5lIEZMVVNIX01BUkdJTgkJMgomIzQzOwomIzQzOy8qIEJvdW5kIHRvdGFsIGNoYXJnZSBvbiBsYXJnZSBzeXN0ZW1zLiAqLwomIzQzOyNkZWZpbmUgTUFYX1RPVEFMX0NIQVJHRQkoMjU2VUwgJmx0OyZsdDsgMjApCiYjNDM7CiYjNDM7LyogQm91bmQgdGhlIENQVXMgdXNlZCBieSBlYWNoIGxlYWYuICovCiYjNDM7I2RlZmluZSBNQVhfQ1BVU19QRVJfTEVBRgkxNgomIzQzOwomIzQzOyNkZWZpbmUgQ0hBUkdFX1dBSVRfUkVUUklFUwk1MDAKJiM0MzsKJiM0MztzdGF0aWMgY2hhciByb290W1BBVEhfTUFYXTsKJiM0MztzdGF0aWMgY2hhciAqc3VidHJlZV9yb290OwomIzQzO3N0YXRpYyBsb25nIHBhZ2Vfc2l6ZTsKJiM0MzsKJiM0MzsvKiBjZ3JvdXBmcyB2YWx1ZXMgaW4gYnl0ZXMuICovCiYjNDM7c3RydWN0IGZpbGVfc25hcCB7CiYjNDM7CWxvbmcgYW5vbiwgZmlsZSwgc2htZW0sIGZpbGVfbWFwcGVkLCBwZ2ZhdWx0OwomIzQzOwlsb25nIGN1cnJlbnQ7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgY2dfbm9kZSB7CiYjNDM7CWNoYXIgcGF0aFtQQVRIX01BWF07CiYjNDM7CXVuc2lnbmVkIGxvbmcgbG9uZyBpZDsKJiM0MzsJYm9vbCBpc19sZWFmOwkJCS8qIGhvbGRzIGEgY2hhcmdlIG9mIGl0cyBvd24gKi8KJiM0MzsJbG9uZyBwcmV2aW91c19jdXJyZW50OwkJLyogcHJldmlvdXMgbWVtb3J5LmN1cnJlbnQgcG9sbCAqLwomIzQzOwlzdHJ1Y3QgbWVtY2dfc3RhdF9zbmFwc2hvdCBicGY7CS8qIHJlYWQgdGhyb3VnaCB0aGUga2Z1bmNzICovCiYjNDM7CXN0cnVjdCBmaWxlX3NuYXAgZmlsZVsyXTsJLyogcG9zdC1CUEYgY2dyb3VwZnMgc2FtcGxlcyAqLwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBjZ19ub2RlICpub2RlczsJLyogREZTIG9yZGVyOiBhIHBhcmVudCBwcmVjZWRlcyBpdHMgY2hpbGRyZW4gKi8KJiM0MztzdGF0aWMgaW50IG5fbm9kZXM7CiYjNDM7c3RhdGljIGludCBuX2xlYXZlczsKJiM0MzsKJiM0MzsvKiAtLS0tIENQVXMgdGhpcyB0ZXN0IG1heSBydW4gb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KJiM0MzsKJiM0MztzdGF0aWMgY3B1X3NldF90IGFsbG93ZWRfY3B1czsKJiM0MztzdGF0aWMgaW50IG5fY3B1OwomIzQzO3N0YXRpYyBsb25nIG5fb25saW5lX2NwdTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IG50aF9jcHUoaW50IG4pCiYjNDM7ewomIzQzOwlpbnQgaSwgc2VlbiA9IDA7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBDUFVfU0VUU0laRTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICghQ1BVX0lTU0VUKGksICZhbXA7YWxsb3dlZF9jcHVzKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmIChzZWVuJiM0MzsmIzQzOyA9PSBuICUgbl9jcHUpCiYjNDM7CQkJcmV0dXJuIGk7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIC0xOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBpbl9jcHUoaW50IGNwdSkKJiM0Mzt7CiYjNDM7CWNwdV9zZXRfdCBzZXQ7CiYjNDM7CiYjNDM7CWlmIChjcHUgJmx0OyAwKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlDUFVfWkVSTygmYW1wO3NldCk7CiYjNDM7CUNQVV9TRVQoY3B1LCAmYW1wO3NldCk7CiYjNDM7CXJldHVybiBzY2hlZF9zZXRhZmZpbml0eSgwLCBzaXplb2Yoc2V0KSwgJmFtcDtzZXQpOwomIzQzO30KJiM0MzsKJiM0MzsvKiAtLS0tIHRyZWUgY29uc3RydWN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiYjNDM7CiYjNDM7c3RhdGljIGludCBhZGRfbm9kZShjb25zdCBjaGFyICpwYXRoLCBib29sIGlzX2xlYWYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgY2dfbm9kZSAqbiA9ICZhbXA7bm9kZXNbbl9ub2Rlc107CiYjNDM7CiYjNDM7CWlmIChjZ19jcmVhdGUocGF0aCkpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CXN0cm5jcHkobi0mZ3Q7cGF0aCwgcGF0aCwgc2l6ZW9mKG4tJmd0O3BhdGgpIC0gMSk7CiYjNDM7CW4tJmd0O2lkID0gY2dfZ2V0X2lkKHBhdGgpOwomIzQzOwluLSZndDtpc19sZWFmID0gaXNfbGVhZjsKJiM0MzsJbi0mZ3Q7cHJldmlvdXNfY3VycmVudCA9IC0xOwomIzQzOwlpZiAoaXNfbGVhZikKJiM0MzsJCW5fbGVhdmVzJiM0MzsmIzQzOzsKJiM0MzsJbl9ub2RlcyYjNDM7JiM0Mzs7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBCdWlsZCBAbGV2ZWxzIGJlbG93IEBwYXRoOyBvbmx5IGxlYXZlcyBhcmUgY2hhcmdlZC4gKi8KJiM0MztzdGF0aWMgaW50IGJ1aWxkX2NoaWxkcmVuKGNvbnN0IGNoYXIgKnBhdGgsIGludCBmYW5vdXQsIGludCBsZXZlbHMpCiYjNDM7ewomIzQzOwljaGFyIGNoaWxkW1BBVEhfTUFYXTsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWlmIChsZXZlbHMgPT0gMCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKiBHaXZlIGNoaWxkIGNncm91cHMgYSBtZW1jZy4gKi8KJiM0MzsJaWYgKGNnX3dyaXRlKHBhdGgsICYjMzQ7Y2dyb3VwLnN1YnRyZWVfY29udHJvbCYjMzQ7LCAmIzM0OyYjNDM7bWVtb3J5JiMzNDspKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgZmFub3V0OyBpJiM0MzsmIzQzOykgewomIzQzOwkJc25wcmludGYoY2hpbGQsIHNpemVvZihjaGlsZCksICYjMzQ7JXMvYyVkJiMzNDssIHBhdGgsIGkpOwomIzQzOwkJaWYgKGFkZF9ub2RlKGNoaWxkLCBsZXZlbHMgPT0gMSkpCiYjNDM7CQkJcmV0dXJuIC0xOwomIzQzOwkJaWYgKGJ1aWxkX2NoaWxkcmVuKGNoaWxkLCBmYW5vdXQsIGxldmVscyAtIDEpKQomIzQzOwkJCXJldHVybiAtMTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHNpemVfdCB0cmVlX2NhcGFjaXR5KGludCBmYW5vdXQsIGludCBkZXB0aCkKJiM0Mzt7CiYjNDM7CXNpemVfdCB0b3RhbCA9IDEsIGxldmVsID0gMTsKJiM0MzsJaW50IGQ7CiYjNDM7CiYjNDM7CWZvciAoZCA9IDA7IGQgJmx0OyBkZXB0aDsgZCYjNDM7JiM0MzspIHsKJiM0MzsJCWxldmVsICo9IGZhbm91dDsKJiM0MzsJCXRvdGFsICYjNDM7PSBsZXZlbDsKJiM0MzsJfQomIzQzOwlyZXR1cm4gdG90YWw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYnVpbGRfdHJlZShpbnQgZmFub3V0LCBpbnQgZGVwdGgsIGludCAqcm9vdF9mZCkKJiM0Mzt7CiYjNDM7CW5fbm9kZXMgPSAwOwomIzQzOwluX2xlYXZlcyA9IDA7CiYjNDM7CW5vZGVzID0gY2FsbG9jKHRyZWVfY2FwYWNpdHkoZmFub3V0LCBkZXB0aCksIHNpemVvZigqbm9kZXMpKTsKJiM0MzsJaWYgKCFub2RlcykKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJaWYgKGFkZF9ub2RlKHN1YnRyZWVfcm9vdCwgZGVwdGggPT0gMCkpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CSpyb290X2ZkID0gb3BlbihzdWJ0cmVlX3Jvb3QsIE9fUkRPTkxZKTsKJiM0MzsJaWYgKCpyb290X2ZkICZsdDsgMCkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJcmV0dXJuIGJ1aWxkX2NoaWxkcmVuKHN1YnRyZWVfcm9vdCwgZmFub3V0LCBkZXB0aCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIERlc3Ryb3kgY2hpbGRyZW4gYmVmb3JlIHBhcmVudHMsIHRoZW4gcmVhcCBjaGFyZ2Vycy4gKi8KJiM0MztzdGF0aWMgdm9pZCBkZXN0cm95X3RyZWUodm9pZCkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlpZiAoIW5vZGVzKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlmb3IgKGkgPSBuX25vZGVzIC0gMTsgaSAmZ3Q7PSAwOyBpLS0pCiYjNDM7CQljZ19kZXN0cm95KG5vZGVzW2ldLnBhdGgpOwomIzQzOwlmcmVlKG5vZGVzKTsKJiM0MzsJbm9kZXMgPSBOVUxMOwomIzQzOwomIzQzOwl3aGlsZSAod2FpdHBpZCgtMSwgTlVMTCwgMCkgJmd0OyAwKQomIzQzOwkJOwomIzQzO30KJiM0MzsKJiM0MzsvKiAtLS0tIGNyb3NzLUNQVSBjaGFyZ2UgKG9uZSBjaGlsZCBwZXIgbGVhZikgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiYjNDM7CiYjNDM7c3RydWN0IGNoYXJnZV9hcmdzIHsKJiM0MzsJc2l6ZV90IGJ5dGVzOwkvKiBhbm9uIHRoaXMgbGVhZiBob2xkcyAqLwomIzQzOwlpbnQgYmFzZTsJLyogaW5kZXggb2YgdGhlIGZpcnN0IENQVSB0byBmYXVsdCBvbiAqLwomIzQzOwlpbnQgazsJCS8qIENQVXMgdG8gc3ByZWFkIHRoZSBjaGFyZ2Ugb3ZlciAqLwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBjaGFyZ2VfbGVhZihjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBjaGFyZ2VfYXJncyAqY2EgPSBhcmc7CiYjNDM7CWludCBwcGlkID0gZ2V0cHBpZCgpOwomIzQzOwlzaXplX3QgcGVyLCBvZmY7CiYjNDM7CWNoYXIgKmJ1ZjsKJiM0MzsJaW50IGo7CiYjNDM7CiYjNDM7CWJ1ZiA9IG1hbGxvYyhjYS0mZ3Q7Ynl0ZXMpOwomIzQzOwlpZiAoIWJ1ZikgewomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7bWFsbG9jKCkgZmFpbGVkXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogS2VlcCBlYWNoIENQVSYjMzk7cyBzbGljZSBwYWdlLWFsaWduZWQuICovCiYjNDM7CXBlciA9IGNhLSZndDtieXRlcyAvIGNhLSZndDtrIC8gcGFnZV9zaXplICogcGFnZV9zaXplOwomIzQzOwomIzQzOwlmb3IgKGogPSAwOyBqICZsdDsgY2EtJmd0O2s7IGomIzQzOyYjNDM7KSB7CiYjNDM7CQlvZmYgPSAoc2l6ZV90KWogKiBwZXI7CiYjNDM7CQlpZiAocGluX2NwdShudGhfY3B1KGNhLSZndDtiYXNlICYjNDM7IGopKSkgewomIzQzOwkJCWZyZWUoYnVmKTsKJiM0MzsJCQlyZXR1cm4gLTE7CiYjNDM7CQl9CiYjNDM7CQljZ190b3VjaF9wYWdlcyhidWYgJiM0Mzsgb2ZmLAomIzQzOwkJCSAgICAgICBqID09IGNhLSZndDtrIC0gMSA/IGNhLSZndDtieXRlcyAtIG9mZiA6IHBlcik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJd2hpbGUgKGdldHBwaWQoKSA9PSBwcGlkKQomIzQzOwkJc2xlZXAoMSk7CiYjNDM7CiYjNDM7CWZyZWUoYnVmKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbGVhZl9jaGFyZ2Uoc2l6ZV90IHdhbnQsIGludCBrLCBzaXplX3QgKmJ5dGVzKQomIzQzO3sKJiM0MzsJc2l6ZV90IG1pbl9wYWdlcywgcGFnZXMsIHdhbnRfcGFnZXM7CiYjNDM7CiYjNDM7CWlmICgoc2l6ZV90KW5fb25saW5lX2NwdSAmZ3Q7IFNJWkVfTUFYIC8gRkxVU0hfTUFSR0lOIC8KJiM0MzsJCQkJCSBNRU1DR19DSEFSR0VfQkFUQ0gpCiYjNDM7CQlyZXR1cm4gLUVPVkVSRkxPVzsKJiM0MzsKJiM0MzsJLyogRm9yY2UgbW9yZSB0aGFuIG9uZSBwZW5kaW5nIGJhdGNoIHBlciBDUFUgYWNyb3NzIHRoZSBzdWJ0cmVlLiAqLwomIzQzOwltaW5fcGFnZXMgPSAoc2l6ZV90KUZMVVNIX01BUkdJTiAqIE1FTUNHX0NIQVJHRV9CQVRDSCAqIG5fb25saW5lX2NwdTsKJiM0MzsJcGFnZXMgPSBtaW5fcGFnZXMgLyBuX2xlYXZlcyAmIzQzOyAhIShtaW5fcGFnZXMgJSBuX2xlYXZlcyk7CiYjNDM7CXdhbnRfcGFnZXMgPSB3YW50IC8gcGFnZV9zaXplICYjNDM7ICEhKHdhbnQgJSBwYWdlX3NpemUpOwomIzQzOwlpZiAocGFnZXMgJmx0OyB3YW50X3BhZ2VzKQomIzQzOwkJcGFnZXMgPSB3YW50X3BhZ2VzOwomIzQzOwlpZiAocGFnZXMgJmx0OyAoc2l6ZV90KWspCiYjNDM7CQlwYWdlcyA9IGs7CiYjNDM7CiYjNDM7CWlmIChwYWdlcyAmZ3Q7IE1BWF9UT1RBTF9DSEFSR0UgLyAoc2l6ZV90KW5fbGVhdmVzIC8gcGFnZV9zaXplKQomIzQzOwkJcmV0dXJuIC1FMkJJRzsKJiM0MzsKJiM0MzsJKmJ5dGVzID0gcGFnZXMgKiBwYWdlX3NpemU7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHN0YXJ0X2NoYXJnZXJzKGludCBrLCBzaXplX3QgYnl0ZXMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgY2hhcmdlX2FyZ3MgY2EgPSB7IC5ieXRlcyA9IGJ5dGVzLCAuayA9IGsgfTsKJiM0MzsJbG9uZyBwcmV2LCBjdXI7CiYjNDM7CWJvb2wgcmVhZHk7CiYjNDM7CWludCBpLCByZXRyaWVzOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbl9ub2RlczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICghbm9kZXNbaV0uaXNfbGVhZikKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmIChjZ19ydW5fbm93YWl0KG5vZGVzW2ldLnBhdGgsIGNoYXJnZV9sZWFmLCAmYW1wO2NhKSAmbHQ7IDApIHsKJiM0MzsJCQlrc2Z0X3ByaW50X21zZygmIzM0O2Nhbm5vdCBzdGFydCBhIGNoYXJnZXIgb24gJXNcbiYjMzQ7LAomIzQzOwkJCQkgICAgICAgbm9kZXNbaV0ucGF0aCk7CiYjNDM7CQkJcmV0dXJuIC0xOwomIzQzOwkJfQomIzQzOwkJY2EuYmFzZSAmIzQzOz0gazsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBXYWl0IHVudGlsIGV2ZXJ5IGxlYWYgaXMgZnVsbHkgY2hhcmdlZCBhbmQgc3RhYmxlLiAqLwomIzQzOwlmb3IgKHJldHJpZXMgPSBDSEFSR0VfV0FJVF9SRVRSSUVTOyByZXRyaWVzOyByZXRyaWVzLS0pIHsKJiM0MzsJCXJlYWR5ID0gdHJ1ZTsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBuX25vZGVzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCWlmICghbm9kZXNbaV0uaXNfbGVhZikKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkJY3VyID0gY2dfcmVhZF9sb25nKG5vZGVzW2ldLnBhdGgsICYjMzQ7bWVtb3J5LmN1cnJlbnQmIzM0Oyk7CiYjNDM7CQkJaWYgKGN1ciAmbHQ7IDApIHsKJiM0MzsJCQkJa3NmdF9wcmludF9tc2coJiMzNDtjYW5ub3QgcmVhZCAlcy9tZW1vcnkuY3VycmVudDogJXNcbiYjMzQ7LAomIzQzOwkJCQkJICAgICAgIG5vZGVzW2ldLnBhdGgsIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CQkJCXJldHVybiAtMTsKJiM0MzsJCQl9CiYjNDM7CiYjNDM7CQkJcHJldiA9IG5vZGVzW2ldLnByZXZpb3VzX2N1cnJlbnQ7CiYjNDM7CQkJbm9kZXNbaV0ucHJldmlvdXNfY3VycmVudCA9IGN1cjsKJiM0MzsJCQlpZiAoY3VyICZsdDsgKGxvbmcpYnl0ZXMgfHwgY3VyICE9IHByZXYpCiYjNDM7CQkJCXJlYWR5ID0gZmFsc2U7CiYjNDM7CQl9CiYjNDM7CQlpZiAocmVhZHkpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CQl1c2xlZXAoREVGQVVMVF9XQUlUX0lOVEVSVkFMX1VTIC8gMTApOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBuX25vZGVzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKG5vZGVzW2ldLmlzX2xlYWYgJmFtcDsmYW1wOyBub2Rlc1tpXS5wcmV2aW91c19jdXJyZW50ICZsdDsgKGxvbmcpYnl0ZXMpIHsKJiM0MzsJCQlrc2Z0X3ByaW50X21zZygmIzM0OyVzIHJlYWNoZWQgb25seSAlbGQgb2YgJXp1IGNoYXJnZWQgYnl0ZXNcbiYjMzQ7LAomIzQzOwkJCQkgICAgICAgbm9kZXNbaV0ucGF0aCwgbm9kZXNbaV0ucHJldmlvdXNfY3VycmVudCwKJiM0MzsJCQkJICAgICAgIGJ5dGVzKTsKJiM0MzsJCQlyZXR1cm4gLTE7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJa3NmdF9wcmludF9tc2coJiMzNDttZW1vcnkuY3VycmVudCBkaWQgbm90IHNldHRsZSBiZWZvcmUgdGhlIHRpbWVvdXRcbiYjMzQ7KTsKJiM0MzsJcmV0dXJuIC0xOwomIzQzO30KJiM0MzsKJiM0MzsvKiAtLS0tIHRoZSB0d28gcmVhZGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiYjNDM7CiYjNDM7LyogRmx1c2ggdGhlIHN1YnRyZWUgYW5kIGNvbGxlY3QgZWFjaCBjZ3JvdXAmIzM5O3Mga2Z1bmMgdmFsdWVzLiAqLwomIzQzO3N0YXRpYyBpbnQgcmVhZF9icGYoaW50IHJvb3RfZmQpCiYjNDM7ewomIzQzOwlERUNMQVJFX0xJQkJQRl9PUFRTKGJwZl9pdGVyX2F0dGFjaF9vcHRzLCBvcHRzKTsKJiM0MzsJc3RydWN0IG1lbWNnX3N0YXRfY3Jvc3NfY3B1ICpza2VsID0gTlVMTDsKJiM0MzsJdW5pb24gYnBmX2l0ZXJfbGlua19pbmZvIGxpbmZvID0ge307CiYjNDM7CXN0cnVjdCBicGZfbGluayAqbGluayA9IE5VTEw7CiYjNDM7CWludCByZXQgPSAtMSwgZXJyLCBpLCBtZmQsIGZkOwomIzQzOwljaGFyIGJ1Zls0MDk2XTsKJiM0MzsJc3NpemVfdCByOwomIzQzOwomIzQzOwlza2VsID0gbWVtY2dfc3RhdF9jcm9zc19jcHVfX29wZW4oKTsKJiM0MzsJaWYgKCFza2VsKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O3NrZWwgb3BlbiBmYWlsZWQ6ICVzICglZClcbiYjMzQ7LAomIzQzOwkJCSAgICAgICBzdHJlcnJvcihlcnJubyksIGVycm5vKTsKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJfQomIzQzOwllcnIgPSBicGZfcHJvZ3JhbV9fc2V0X2F1dG9sb2FkKHNrZWwtJmd0O3Byb2dzLm1lbWNnX2tmdW5jc19wcm9iZSwgZmFsc2UpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O2Rpc2FibGluZyBjYXBhYmlsaXR5IHByb2JlIGZhaWxlZDogJXMgKCVkKVxuJiMzNDssCiYjNDM7CQkJICAgICAgIHN0cmVycm9yKC1lcnIpLCBlcnIpOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsJZXJyID0gYnBmX21hcF9fc2V0X21heF9lbnRyaWVzKHNrZWwtJmd0O21hcHMucmVzdWx0cywgbl9ub2RlcyAmIzQzOyA4KTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtzZXQgbWF4X2VudHJpZXMgZmFpbGVkOiAlcyAoJWQpXG4mIzM0OywKJiM0MzsJCQkgICAgICAgc3RyZXJyb3IoLWVyciksIGVycik7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwllcnIgPSBtZW1jZ19zdGF0X2Nyb3NzX2NwdV9fbG9hZChza2VsKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtza2VsIGxvYWQgZmFpbGVkOiAlcyAoJWQpXG4mIzM0OywKJiM0MzsJCQkgICAgICAgc3RyZXJyb3IoLWVyciksIGVycik7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlsaW5mby5jZ3JvdXAuY2dyb3VwX2ZkID0gcm9vdF9mZDsKJiM0MzsJbGluZm8uY2dyb3VwLm9yZGVyID0gQlBGX0NHUk9VUF9JVEVSX0RFU0NFTkRBTlRTX1BSRTsKJiM0MzsJb3B0cy5saW5rX2luZm8gPSAmYW1wO2xpbmZvOwomIzQzOwlvcHRzLmxpbmtfaW5mb19sZW4gPSBzaXplb2YobGluZm8pOwomIzQzOwomIzQzOwlsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9pdGVyKHNrZWwtJmd0O3Byb2dzLmNncm91cF9tZW1jZ19zdGF0X2Nyb3NzX2NwdSwKJiM0MzsJCQkJCSZhbXA7b3B0cyk7CiYjNDM7CWVyciA9IGxpYmJwZl9nZXRfZXJyb3IobGluayk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWxpbmsgPSBOVUxMOwomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDthdHRhY2ggaXRlciBmYWlsZWQ6ICVzICglZClcbiYjMzQ7LAomIzQzOwkJCSAgICAgICBzdHJlcnJvcigtZXJyKSwgZXJyKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWZkID0gYnBmX2l0ZXJfY3JlYXRlKGJwZl9saW5rX19mZChsaW5rKSk7CiYjNDM7CWlmIChmZCAmbHQ7IDApIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7YnBmX2l0ZXJfY3JlYXRlIGZhaWxlZDogJXMgKCVkKVxuJiMzNDssCiYjNDM7CQkJICAgICAgIHN0cmVycm9yKGVycm5vKSwgZXJybm8pOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsJZG8gewomIzQzOwkJciA9IHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwomIzQzOwl9IHdoaWxlIChyICZndDsgMCB8fCAociAmbHQ7IDAgJmFtcDsmYW1wOyBlcnJubyA9PSBFSU5UUikpOwomIzQzOwllcnIgPSBlcnJubzsKJiM0MzsJY2xvc2UoZmQpOwomIzQzOwlpZiAociAmbHQ7IDApIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7YnBmIHdhbGsgZmFpbGVkOiAlcyAoJWQpXG4mIzM0OywKJiM0MzsJCQkgICAgICAgc3RyZXJyb3IoZXJyKSwgZXJyKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CW1mZCA9IGJwZl9tYXBfX2ZkKHNrZWwtJmd0O21hcHMucmVzdWx0cyk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBuX25vZGVzOyBpJiM0MzsmIzQzOykKJiM0MzsJCWlmIChicGZfbWFwX2xvb2t1cF9lbGVtKG1mZCwgJmFtcDtub2Rlc1tpXS5pZCwgJmFtcDtub2Rlc1tpXS5icGYpKSB7CiYjNDM7CQkJa3NmdF9wcmludF9tc2coJiMzNDtubyBtYXAgZW50cnkgZm9yICVzOiAlcyAoJWQpXG4mIzM0OywKJiM0MzsJCQkJICAgICAgIG5vZGVzW2ldLnBhdGgsIHN0cmVycm9yKGVycm5vKSwgZXJybm8pOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQomIzQzOwlyZXQgPSAwOwomIzQzO291dDoKJiM0MzsJYnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7CiYjNDM7CW1lbWNnX3N0YXRfY3Jvc3NfY3B1X19kZXN0cm95KHNrZWwpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKiBSZWFkIG9uZSBjZ3JvdXBmcyBzbmFwc2hvdC4gKi8KJiM0MztzdGF0aWMgaW50IHJlYWRfZmlsZXMoaW50IHNsb3QpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5fbm9kZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQljb25zdCBjaGFyICpwYXRoID0gbm9kZXNbaV0ucGF0aDsKJiM0MzsJCXN0cnVjdCBmaWxlX3NuYXAgKmYgPSAmYW1wO25vZGVzW2ldLmZpbGVbc2xvdF07CiYjNDM7CiYjNDM7CQlmLSZndDthbm9uID0gY2dfcmVhZF9rZXlfbG9uZyhwYXRoLCAmIzM0O21lbW9yeS5zdGF0JiMzNDssICYjMzQ7YW5vbiAmIzM0Oyk7CiYjNDM7CQlmLSZndDtmaWxlID0gY2dfcmVhZF9rZXlfbG9uZyhwYXRoLCAmIzM0O21lbW9yeS5zdGF0JiMzNDssICYjMzQ7ZmlsZSAmIzM0Oyk7CiYjNDM7CQlmLSZndDtzaG1lbSA9IGNnX3JlYWRfa2V5X2xvbmcocGF0aCwgJiMzNDttZW1vcnkuc3RhdCYjMzQ7LCAmIzM0O3NobWVtICYjMzQ7KTsKJiM0MzsJCWYtJmd0O2ZpbGVfbWFwcGVkID0gY2dfcmVhZF9rZXlfbG9uZyhwYXRoLCAmIzM0O21lbW9yeS5zdGF0JiMzNDssCiYjNDM7CQkJCQkJICAmIzM0O2ZpbGVfbWFwcGVkICYjMzQ7KTsKJiM0MzsJCWYtJmd0O3BnZmF1bHQgPSBjZ19yZWFkX2tleV9sb25nKHBhdGgsICYjMzQ7bWVtb3J5LnN0YXQmIzM0OywgJiMzNDtwZ2ZhdWx0ICYjMzQ7KTsKJiM0MzsJCWYtJmd0O2N1cnJlbnQgPSBjZ19yZWFkX2xvbmcocGF0aCwgJiMzNDttZW1vcnkuY3VycmVudCYjMzQ7KTsKJiM0MzsKJiM0MzsJCWlmIChmLSZndDthbm9uICZsdDsgMCB8fCBmLSZndDtmaWxlICZsdDsgMCB8fCBmLSZndDtzaG1lbSAmbHQ7IDAgfHwKJiM0MzsJCSAgICBmLSZndDtmaWxlX21hcHBlZCAmbHQ7IDAgfHwgZi0mZ3Q7cGdmYXVsdCAmbHQ7IDAgfHwgZi0mZ3Q7Y3VycmVudCAmbHQ7IDApIHsKJiM0MzsJCQlrc2Z0X3ByaW50X21zZygmIzM0O3JlYWRpbmcgdGhlIHN0YXRzIG9mICVzIGZhaWxlZFxuJiMzNDssIHBhdGgpOwomIzQzOwkJCXJldHVybiAtMTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogLS0tLSBjb21wYXJpc29uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGR1bXBfbm9kZShjb25zdCBzdHJ1Y3QgY2dfbm9kZSAqbikKJiM0Mzt7CiYjNDM7CWludCBzOwomIzQzOwomIzQzOwlrc2Z0X3ByaW50X21zZygmIzM0OyVzIGJwZiAgIDogYW5vbj0lbGx1IGZpbGU9JWxsdSBzaG1lbT0lbGx1IGZtYXBwZWQ9JWxsdSBwZ2ZhdWx0PSVsbHVcbiYjMzQ7LAomIzQzOwkJICAgICAgIG4tJmd0O3BhdGgsIG4tJmd0O2JwZi5hbm9uLCBuLSZndDticGYuZmlsZSwgbi0mZ3Q7YnBmLnNobWVtLAomIzQzOwkJICAgICAgIG4tJmd0O2JwZi5maWxlX21hcHBlZCwgbi0mZ3Q7YnBmLnBnZmF1bHQpOwomIzQzOwlmb3IgKHMgPSAwOyBzICZsdDsgMjsgcyYjNDM7JiM0MzspCiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0OyVzIGZpbGUlZDogYW5vbj0lbGQgZmlsZT0lbGQgc2htZW09JWxkIGZtYXBwZWQ9JWxkIHBnZmF1bHQ9JWxkXG4mIzM0OywKJiM0MzsJCQkgICAgICAgbi0mZ3Q7cGF0aCwgcywgbi0mZ3Q7ZmlsZVtzXS5hbm9uLCBuLSZndDtmaWxlW3NdLmZpbGUsCiYjNDM7CQkJICAgICAgIG4tJmd0O2ZpbGVbc10uc2htZW0sIG4tJmd0O2ZpbGVbc10uZmlsZV9tYXBwZWQsCiYjNDM7CQkJICAgICAgIG4tJmd0O2ZpbGVbc10ucGdmYXVsdCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIEVxdWFsIGZpbGUgc2FtcGxlcyByZXF1aXJlIGFuIGV4YWN0IEJQRiBtYXRjaDsgb3RoZXJ3aXNlIGFjY2VwdCB0aGVpciByYW5nZS4gKi8KJiM0MztzdGF0aWMgYm9vbCBicmFja2V0ZWQodW5zaWduZWQgbG9uZyBsb25nIHYsIGxvbmcgYSwgbG9uZyBiKQomIzQzO3sKJiM0MzsJbG9uZyBsbyA9IGEgJmx0OyBiID8gYSA6IGI7CiYjNDM7CWxvbmcgaGkgPSBhICZsdDsgYiA/IGIgOiBhOwomIzQzOwomIzQzOwlyZXR1cm4gdiAmZ3Q7PSAodW5zaWduZWQgbG9uZyBsb25nKWxvICZhbXA7JmFtcDsgdiAmbHQ7PSAodW5zaWduZWQgbG9uZyBsb25nKWhpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGNoZWNrX3RyZWUoc2l6ZV90IGNoYXJnZWQpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGxvbmcgcm9vdF9hbm9uID0gMCwgbGVhZl9hbm9uID0gMDsKJiM0MzsJaW50IGksIGJhZCA9IDA7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBuX25vZGVzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJY29uc3Qgc3RydWN0IGNnX25vZGUgKm4gPSAmYW1wO25vZGVzW2ldOwomIzQzOwkJY29uc3Qgc3RydWN0IG1lbWNnX3N0YXRfc25hcHNob3QgKmIgPSAmYW1wO24tJmd0O2JwZjsKJiM0MzsJCWNvbnN0IHN0cnVjdCBmaWxlX3NuYXAgKmYwID0gJmFtcDtuLSZndDtmaWxlWzBdLCAqZjEgPSAmYW1wO24tJmd0O2ZpbGVbMV07CiYjNDM7CiYjNDM7CQlpZiAoIWJyYWNrZXRlZChiLSZndDthbm9uLCBmMC0mZ3Q7YW5vbiwgZjEtJmd0O2Fub24pIHx8CiYjNDM7CQkgICAgIWJyYWNrZXRlZChiLSZndDtmaWxlLCBmMC0mZ3Q7ZmlsZSwgZjEtJmd0O2ZpbGUpIHx8CiYjNDM7CQkgICAgIWJyYWNrZXRlZChiLSZndDtzaG1lbSwgZjAtJmd0O3NobWVtLCBmMS0mZ3Q7c2htZW0pIHx8CiYjNDM7CQkgICAgIWJyYWNrZXRlZChiLSZndDtmaWxlX21hcHBlZCwgZjAtJmd0O2ZpbGVfbWFwcGVkLAomIzQzOwkJCSAgICAgICBmMS0mZ3Q7ZmlsZV9tYXBwZWQpIHx8CiYjNDM7CQkgICAgIWJyYWNrZXRlZChiLSZndDtwZ2ZhdWx0LCBmMC0mZ3Q7cGdmYXVsdCwgZjEtJmd0O3BnZmF1bHQpKSB7CiYjNDM7CQkJa3NmdF9wcmludF9tc2coJiMzNDtrZnVuY3MgZGlzYWdyZWUgd2l0aCBtZW1vcnkuc3RhdFxuJiMzNDspOwomIzQzOwkJCWR1bXBfbm9kZShuKTsKJiM0MzsJCQliYWQmIzQzOyYjNDM7OwomIzQzOwkJfQomIzQzOwomIzQzOwkJLyogTGl2ZSBwYWdlIGNvdW50ZXJzIGFyZSBib3VuZHMsIG5vdCBmbHVzaGVkIHN0YXRpc3RpY3MuICovCiYjNDM7CQlpZiAoYi0mZ3Q7YW5vbiAmZ3Q7IGItJmd0O3VzYWdlX3BhZ2VzICogKHVuc2lnbmVkIGxvbmcgbG9uZylwYWdlX3NpemUgfHwKJiM0MzsJCSAgICBmMS0mZ3Q7YW5vbiAmZ3Q7IGYxLSZndDtjdXJyZW50KSB7CiYjNDM7CQkJa3NmdF9wcmludF9tc2coJiMzNDslczogYW5vbiBhYm92ZSB1c2FnZTogYnBmICVsbHUvJWxsdSBmaWxlICVsZC8lbGRcbiYjMzQ7LAomIzQzOwkJCQkgICAgICAgbi0mZ3Q7cGF0aCwgYi0mZ3Q7YW5vbiwKJiM0MzsJCQkJICAgICAgIGItJmd0O3VzYWdlX3BhZ2VzICogKHVuc2lnbmVkIGxvbmcgbG9uZylwYWdlX3NpemUsCiYjNDM7CQkJCSAgICAgICBmMS0mZ3Q7YW5vbiwgZjEtJmd0O2N1cnJlbnQpOwomIzQzOwkJCWJhZCYjNDM7JiM0Mzs7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAobi0mZ3Q7aXNfbGVhZikgewomIzQzOwkJCWlmIChiLSZndDthbm9uICZsdDsgY2hhcmdlZCkgewomIzQzOwkJCQlrc2Z0X3ByaW50X21zZygmIzM0OyVzOiBmbHVzaGVkIGFub24gJWxsdSwgY2hhcmdlZCAlenVcbiYjMzQ7LAomIzQzOwkJCQkJICAgICAgIG4tJmd0O3BhdGgsIGItJmd0O2Fub24sIGNoYXJnZWQpOwomIzQzOwkJCQliYWQmIzQzOyYjNDM7OwomIzQzOwkJCX0KJiM0MzsJCQlsZWFmX2Fub24gJiM0Mzs9IGItJmd0O2Fub247CiYjNDM7CQl9CiYjNDM7CQlpZiAoaSA9PSAwKQomIzQzOwkJCXJvb3RfYW5vbiA9IGItJmd0O2Fub247CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHJvb3RfYW5vbiAhPSBsZWFmX2Fub24pIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7c3VidHJlZSByb290IGFub24gJWxsdSwgc3VtIG9mIHRoZSBsZWF2ZXMgJWxsdVxuJiMzNDssCiYjNDM7CQkJICAgICAgIHJvb3RfYW5vbiwgbGVhZl9hbm9uKTsKJiM0MzsJCWJhZCYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIGJhZCA/IC0xIDogMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogQWNjZXB0IFBBR0VfQ09VTlRFUl9NQVggdmFsdWVzIGZyb20gZWl0aGVyIDMyLSBvciA2NC1iaXQga2VybmVscy4gKi8KJiM0MztzdGF0aWMgaW50IGNoZWNrX3VubGltaXRlZCh2b2lkKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBsb25nIG1heDY0ID0gKHVuc2lnbmVkIGxvbmcgbG9uZylJTlQ2NF9NQVggLyBwYWdlX3NpemU7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbG9uZyBtYXgzMiA9IElOVDMyX01BWDsKJiM0MzsKJiM0MzsJaWYgKGNnX3JlYWRfc3RyY21wKG5vZGVzWzBdLnBhdGgsICYjMzQ7bWVtb3J5Lm1heCYjMzQ7LCAmIzM0O21heFxuJiMzNDspKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChub2Rlc1swXS5icGYubWF4X3BhZ2VzICE9IG1heDY0ICZhbXA7JmFtcDsgbm9kZXNbMF0uYnBmLm1heF9wYWdlcyAhPSBtYXgzMikgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDttZW1vcnkubWF4IHJlYWRzIG1heCwga2Z1bmMgcmVwb3J0cyAlbGx1IHBhZ2VzXG4mIzM0OywKJiM0MzsJCQkgICAgICAgbm9kZXNbMF0uYnBmLm1heF9wYWdlcyk7CiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qIC0tLS0gb25lIGNhc2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KJiM0MzsKJiM0MztzdHJ1Y3QgdGVzdGNhc2UgewomIzQzOwljb25zdCBjaGFyICpuYW1lOwomIzQzOwlpbnQgZmFub3V0OwomIzQzOwlpbnQgZGVwdGg7CiYjNDM7CWludCBjcHVzX3Blcl9sZWFmOwkvKiBLLCBvciAwIGZvciB0aGUgYm91bmRlZCBjcm9zcy1DUFUgY291bnQgKi8KJiM0MzsJc2l6ZV90IHJlc2lkZW50X2J5dGVzOwkvKiBhbm9uIHBlciBsZWFmLCByYWlzZWQgaWYgdG9vIHNtYWxsICovCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ1bl9jYXNlKGNvbnN0IHN0cnVjdCB0ZXN0Y2FzZSAqdGMpCiYjNDM7ewomIzQzOwlpbnQgcm9vdF9mZCA9IC0xLCByZXQgPSBLU0ZUX0ZBSUwsIGVyciwgazsKJiM0MzsJc2l6ZV90IGNoYXJnZWQ7CiYjNDM7CiYjNDM7CWlmIChidWlsZF90cmVlKHRjLSZndDtmYW5vdXQsIHRjLSZndDtkZXB0aCwgJmFtcDtyb290X2ZkKSkgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtjYW5ub3QgYnVpbGQgdGhlIHRyZWVcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWsgPSB0Yy0mZ3Q7Y3B1c19wZXJfbGVhZjsKJiM0MzsJaWYgKGsgJmx0Oz0gMCkKJiM0MzsJCWsgPSBuX2NwdSAmbHQ7IE1BWF9DUFVTX1BFUl9MRUFGID8gbl9jcHUgOiBNQVhfQ1BVU19QRVJfTEVBRjsKJiM0MzsJZWxzZSBpZiAoayAmZ3Q7IG5fY3B1KQomIzQzOwkJayA9IG5fY3B1OwomIzQzOwllcnIgPSBsZWFmX2NoYXJnZSh0Yy0mZ3Q7cmVzaWRlbnRfYnl0ZXMsIGssICZhbXA7Y2hhcmdlZCk7CiYjNDM7CWlmIChlcnIgPT0gLUUyQklHKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0OyVzIG5lZWRzIG1vcmUgdGhhbiAlbHVNQiB0byB0cmlnZ2VyIGEgZmx1c2ggb24gJWxkIG9ubGluZSBDUFVzXG4mIzM0OywKJiM0MzsJCQkgICAgICAgdGMtJmd0O25hbWUsIE1BWF9UT1RBTF9DSEFSR0UgJmd0OyZndDsgMjAsIG5fb25saW5lX2NwdSk7CiYjNDM7CQlyZXQgPSBLU0ZUX1NLSVA7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O2Nhbm5vdCBjYWxjdWxhdGUgdGhlIGNoYXJnZSBmb3IgJXM6ICVzICglZClcbiYjMzQ7LAomIzQzOwkJCSAgICAgICB0Yy0mZ3Q7bmFtZSwgc3RyZXJyb3IoLWVyciksIGVycik7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlrc2Z0X3ByaW50X21zZygmIzM0OyVzOiAlZCBjZ3JvdXBzLCAlZCBsZWF2ZXMsICVkLyVkIGNwdXMsICV6dUtCIHBlciBsZWFmXG4mIzM0OywKJiM0MzsJCSAgICAgICB0Yy0mZ3Q7bmFtZSwgbl9ub2Rlcywgbl9sZWF2ZXMsIGssIG5fY3B1LCBjaGFyZ2VkICZndDsmZ3Q7IDEwKTsKJiM0MzsKJiM0MzsJaWYgKHN0YXJ0X2NoYXJnZXJzKGssIGNoYXJnZWQpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CS8qIFJlYWQgQlBGIGZpcnN0OyBtZW1vcnkuc3RhdCB3b3VsZCBjb25zdW1lIHRoZSBwZW5kaW5nIGZsdXNoLiAqLwomIzQzOwlpZiAocmVhZF9icGYocm9vdF9mZCkgfHwgcmVhZF9maWxlcygwKSB8fCByZWFkX2ZpbGVzKDEpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWlmICghY2hlY2tfdHJlZShjaGFyZ2VkKSAmYW1wOyZhbXA7ICFjaGVja191bmxpbWl0ZWQoKSkKJiM0MzsJCXJldCA9IEtTRlRfUEFTUzsKJiM0MztvdXQ6CiYjNDM7CWlmIChyb290X2ZkICZndDs9IDApCiYjNDM7CQljbG9zZShyb290X2ZkKTsKJiM0MzsJZGVzdHJveV90cmVlKCk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGVzdGNhc2UgY2FzZXNbXSA9IHsKJiM0MzsJLyogbmFtZSwgZmFub3V0LCBkZXB0aCwgSywgYW5vbiBwZXIgbGVhZiAqLwomIzQzOwl7ICYjMzQ7c2luZ2xlX2NwdV9zbWFsbF90cmVlJiMzNDssIDQsIDIsIDEsIDIgJmx0OyZsdDsgMjAgfSwKJiM0MzsJeyAmIzM0O2Nyb3NzX2NwdV9zbWFsbF90cmVlJiMzNDssIDQsIDIsIDAsIDIgJmx0OyZsdDsgMjAgfSwKJiM0MzsJeyAmIzM0O3NpbmdsZV9jcHVfbGFyZ2VfdHJlZSYjMzQ7LCA0LCAzLCAxLCAyNTYgJmx0OyZsdDsgMTAgfSwKJiM0MzsJeyAmIzM0O2Nyb3NzX2NwdV9sYXJnZV90cmVlJiMzNDssIDQsIDMsIDAsIDI1NiAmbHQ7Jmx0OyAxMCB9LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgbWVtY2dfa2Z1bmNzX2F2YWlsYWJsZSh2b2lkKQomIzQzO3sKJiM0MzsJc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGtmdW5jc1tdID0gewomIzQzOwkJJiMzNDticGZfZ2V0X21lbV9jZ3JvdXAmIzM0OywKJiM0MzsJCSYjMzQ7YnBmX3B1dF9tZW1fY2dyb3VwJiMzNDssCiYjNDM7CQkmIzM0O2JwZl9tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzJiMzNDssCiYjNDM7CQkmIzM0O2JwZl9tZW1fY2dyb3VwX3BhZ2Vfc3RhdGUmIzM0OywKJiM0MzsJCSYjMzQ7YnBmX21lbV9jZ3JvdXBfdm1fZXZlbnRzJiMzNDssCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBidGYgKmJ0ZjsKJiM0MzsJaW50IGVyciwgaTsKJiM0MzsKJiM0MzsJYnRmID0gYnRmX19sb2FkX3ZtbGludXhfYnRmKCk7CiYjNDM7CWVyciA9IGxpYmJwZl9nZXRfZXJyb3IoYnRmKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtjYW5ub3QgbG9hZCB2bWxpbnV4IEJURjogJXMgKCVkKVxuJiMzNDssCiYjNDM7CQkJICAgICAgIHN0cmVycm9yKC1lcnIpLCBlcnIpOwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKGtmdW5jcyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAoYnRmX19maW5kX2J5X25hbWVfa2luZChidGYsIGtmdW5jc1tpXSwgQlRGX0tJTkRfRlVOQykgJmd0OyAwKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtyZXF1aXJlZCBrZnVuYyAlcyBpcyBub3QgaW4gdm1saW51eCBCVEZcbiYjMzQ7LAomIzQzOwkJCSAgICAgICBrZnVuY3NbaV0pOwomIzQzOwkJYnRmX19mcmVlKGJ0Zik7CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsJaWYgKGJ0Zl9fZmluZF9ieV9uYW1lX2tpbmQoYnRmLCAmIzM0O2JwZl9pdGVyX2Nncm91cCYjMzQ7LCBCVEZfS0lORF9GVU5DKSAmbHQ7PSAwKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O2Nncm91cCBCUEYgaXRlcmF0b3IgaXMgbm90IGluIHZtbGludXggQlRGXG4mIzM0Oyk7CiYjNDM7CQlidGZfX2ZyZWUoYnRmKTsKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzOwlidGZfX2ZyZWUoYnRmKTsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHVuc3VwcG9ydGVkX2JwZl9mZWF0dXJlX2Vycm9yKGludCBlcnIpCiYjNDM7ewomIzQzOwlyZXR1cm4gZXJyID09IC1FSU5WQUwgfHwgZXJyID09IC1FTk9FTlQgfHwgZXJyID09IC1FT1BOT1RTVVBQOwomIzQzO30KJiM0MzsKJiM0MzsvKiBSZXR1cm4gMSBpZiBzdXBwb3J0ZWQsIDAgaWYgdW5hdmFpbGFibGUsIG9yIGEgbmVnYXRpdmUgZXJyb3IuICovCiYjNDM7c3RhdGljIGludCBwcm9iZV9tZW1jZ19icGZfZmVhdHVyZXMoaW50IHJvb3RfZmQpCiYjNDM7ewomIzQzOwlERUNMQVJFX0xJQkJQRl9PUFRTKGJwZl9pdGVyX2F0dGFjaF9vcHRzLCBvcHRzKTsKJiM0MzsJc3RydWN0IG1lbWNnX3N0YXRfY3Jvc3NfY3B1ICpza2VsOwomIzQzOwl1bmlvbiBicGZfaXRlcl9saW5rX2luZm8gbGluZm8gPSB7fTsKJiM0MzsJc3RydWN0IGJwZl9saW5rICpsaW5rID0gTlVMTDsKJiM0MzsJaW50IHJldCwgZXJyLCBpdGVyX2ZkID0gLTE7CiYjNDM7CiYjNDM7CXNrZWwgPSBtZW1jZ19zdGF0X2Nyb3NzX2NwdV9fb3BlbigpOwomIzQzOwlpZiAoIXNrZWwpIHsKJiM0MzsJCWVyciA9IGVycm5vID8gLWVycm5vIDogLUVJTlZBTDsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7Y2FwYWJpbGl0eSBwcm9iZSBvcGVuIGZhaWxlZDogJXMgKCVkKVxuJiMzNDssCiYjNDM7CQkJICAgICAgIHN0cmVycm9yKC1lcnIpLCBlcnIpOwomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSBicGZfcHJvZ3JhbV9fc2V0X2F1dG9sb2FkKHNrZWwtJmd0O3Byb2dzLmNncm91cF9tZW1jZ19zdGF0X2Nyb3NzX2NwdSwKJiM0MzsJCQkJCWZhbHNlKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtkaXNhYmxpbmcgdGVzdCBwcm9ncmFtIGZhaWxlZDogJXMgKCVkKVxuJiMzNDssCiYjNDM7CQkJICAgICAgIHN0cmVycm9yKC1lcnIpLCBlcnIpOwomIzQzOwkJcmV0ID0gZXJyOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXJyID0gbWVtY2dfc3RhdF9jcm9zc19jcHVfX2xvYWQoc2tlbCk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7QlBGIGNhcGFiaWxpdHkgcHJvYmUgbG9hZCBmYWlsZWQ6ICVzICglZClcbiYjMzQ7LAomIzQzOwkJCSAgICAgICBzdHJlcnJvcigtZXJyKSwgZXJyKTsKJiM0MzsJCXJldCA9IHVuc3VwcG9ydGVkX2JwZl9mZWF0dXJlX2Vycm9yKGVycikgPyAwIDogZXJyOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbGluZm8uY2dyb3VwLmNncm91cF9mZCA9IHJvb3RfZmQ7CiYjNDM7CWxpbmZvLmNncm91cC5vcmRlciA9IEJQRl9DR1JPVVBfSVRFUl9TRUxGX09OTFk7CiYjNDM7CW9wdHMubGlua19pbmZvID0gJmFtcDtsaW5mbzsKJiM0MzsJb3B0cy5saW5rX2luZm9fbGVuID0gc2l6ZW9mKGxpbmZvKTsKJiM0MzsJbGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfaXRlcihza2VsLSZndDtwcm9ncy5tZW1jZ19rZnVuY3NfcHJvYmUsICZhbXA7b3B0cyk7CiYjNDM7CWVyciA9IGxpYmJwZl9nZXRfZXJyb3IobGluayk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWxpbmsgPSBOVUxMOwomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtCUEYgY2FwYWJpbGl0eSBwcm9iZSBhdHRhY2ggZmFpbGVkOiAlcyAoJWQpXG4mIzM0OywKJiM0MzsJCQkgICAgICAgc3RyZXJyb3IoLWVyciksIGVycik7CiYjNDM7CQlyZXQgPSB1bnN1cHBvcnRlZF9icGZfZmVhdHVyZV9lcnJvcihlcnIpID8gMCA6IGVycjsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWl0ZXJfZmQgPSBicGZfaXRlcl9jcmVhdGUoYnBmX2xpbmtfX2ZkKGxpbmspKTsKJiM0MzsJaWYgKGl0ZXJfZmQgJmx0OyAwKSB7CiYjNDM7CQllcnIgPSAtZXJybm87CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O0JQRiBjYXBhYmlsaXR5IHByb2JlIGl0ZXJhdG9yIGNyZWF0aW9uIGZhaWxlZDogJXMgKCVkKVxuJiMzNDssCiYjNDM7CQkJICAgICAgIHN0cmVycm9yKC1lcnIpLCBlcnIpOwomIzQzOwkJcmV0ID0gdW5zdXBwb3J0ZWRfYnBmX2ZlYXR1cmVfZXJyb3IoZXJyKSA/IDAgOiBlcnI7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSAxOwomIzQzO291dDoKJiM0MzsJaWYgKGl0ZXJfZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGl0ZXJfZmQpOwomIzQzOwlicGZfbGlua19fZGVzdHJveShsaW5rKTsKJiM0MzsJbWVtY2dfc3RhdF9jcm9zc19jcHVfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKJiM0Mzt7CiYjNDM7CWludCBmZWF0dXJlX2ZkLCBpLCByZXQ7CiYjNDM7CiYjNDM7CWtzZnRfcHJpbnRfaGVhZGVyKCk7CiYjNDM7CiYjNDM7CS8qIFByb2JlIEJURiBiZWZvcmUgb3BlcmF0aW9ucyB0aGF0IG1heSByZXF1aXJlIHByaXZpbGVnZXMuICovCiYjNDM7CWlmICghbWVtY2dfa2Z1bmNzX2F2YWlsYWJsZSgpKQomIzQzOwkJa3NmdF9leGl0X3NraXAoJiMzNDttZW1jZyBCUEYga2Z1bmNzIGFyZSBub3QgYXZhaWxhYmxlXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWlmIChjZ19maW5kX3VuaWZpZWRfcm9vdChyb290LCBzaXplb2Yocm9vdCksIE5VTEwpKQomIzQzOwkJa3NmdF9leGl0X3NraXAoJiMzNDtjZ3JvdXAgdjIgaXNuJiMzOTt0IG1vdW50ZWRcbiYjMzQ7KTsKJiM0MzsJZmVhdHVyZV9mZCA9IG9wZW4ocm9vdCwgT19SRE9OTFkgfCBPX0RJUkVDVE9SWSk7CiYjNDM7CWlmIChmZWF0dXJlX2ZkICZsdDsgMCkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O2Nhbm5vdCBvcGVuIGNncm91cCByb290OiAlcyAoJWQpXG4mIzM0OywKJiM0MzsJCQkJICAgc3RyZXJyb3IoZXJybm8pLCBlcnJubyk7CiYjNDM7CXJldCA9IHByb2JlX21lbWNnX2JwZl9mZWF0dXJlcyhmZWF0dXJlX2ZkKTsKJiM0MzsJY2xvc2UoZmVhdHVyZV9mZCk7CiYjNDM7CWlmICghcmV0KQomIzQzOwkJa3NmdF9leGl0X3NraXAoJiMzNDtzbGVlcGFibGUgY2dyb3VwIGl0ZXJhdG9yIG9yIG1lbWNnIGtmdW5jcyBhcmUgbm90IGF2YWlsYWJsZVxuJiMzNDspOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O2Nhbm5vdCBwcm9iZSBCUEYgY2FwYWJpbGl0aWVzOiAlcyAoJWQpXG4mIzM0OywKJiM0MzsJCQkJICAgc3RyZXJyb3IoLXJldCksIHJldCk7CiYjNDM7CiYjNDM7CWlmIChjZ19yZWFkX3N0cnN0cihyb290LCAmIzM0O2Nncm91cC5jb250cm9sbGVycyYjMzQ7LCAmIzM0O21lbW9yeSYjMzQ7KSkKJiM0MzsJCWtzZnRfZXhpdF9za2lwKCYjMzQ7bWVtb3J5IGNvbnRyb2xsZXIgaXNuJiMzOTt0IGF2YWlsYWJsZVxuJiMzNDspOwomIzQzOwomIzQzOwlpZiAoY2dfcmVhZF9zdHJzdHIocm9vdCwgJiMzNDtjZ3JvdXAuc3VidHJlZV9jb250cm9sJiMzNDssICYjMzQ7bWVtb3J5JiMzNDspKQomIzQzOwkJaWYgKGNnX3dyaXRlKHJvb3QsICYjMzQ7Y2dyb3VwLnN1YnRyZWVfY29udHJvbCYjMzQ7LCAmIzM0OyYjNDM7bWVtb3J5JiMzNDspKQomIzQzOwkJCWtzZnRfZXhpdF9za2lwKCYjMzQ7RmFpbGVkIHRvIHNldCBtZW1vcnkgY29udHJvbGxlclxuJiMzNDspOwomIzQzOwomIzQzOwlDUFVfWkVSTygmYW1wO2FsbG93ZWRfY3B1cyk7CiYjNDM7CWlmIChzY2hlZF9nZXRhZmZpbml0eSgwLCBzaXplb2YoYWxsb3dlZF9jcHVzKSwgJmFtcDthbGxvd2VkX2NwdXMpKQomIzQzOwkJa3NmdF9leGl0X3NraXAoJiMzNDtjYW5ub3QgcmVhZCBDUFUgYWZmaW5pdHlcbiYjMzQ7KTsKJiM0MzsJbl9jcHUgPSBDUFVfQ09VTlQoJmFtcDthbGxvd2VkX2NwdXMpOwomIzQzOwlpZiAobl9jcHUgJmx0Oz0gMCkKJiM0MzsJCWtzZnRfZXhpdF9za2lwKCYjMzQ7bm8gQ1BVIHRvIHJ1biBvblxuJiMzNDspOwomIzQzOwluX29ubGluZV9jcHUgPSBzeXNjb25mKF9TQ19OUFJPQ0VTU09SU19PTkxOKTsKJiM0MzsJaWYgKG5fb25saW5lX2NwdSAmbHQ7PSAwKQomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7Y2Fubm90IGRldGVybWluZSB0aGUgbnVtYmVyIG9mIG9ubGluZSBDUFVzXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CXBhZ2Vfc2l6ZSA9IHN5c2NvbmYoX1NDX1BBR0VTSVpFKTsKJiM0MzsJaWYgKHBhZ2Vfc2l6ZSAmbHQ7PSAwKQomIzQzOwkJcGFnZV9zaXplID0gQlVGX1NJWkU7CiYjNDM7CiYjNDM7CXN1YnRyZWVfcm9vdCA9IGNnX25hbWUocm9vdCwgU1VCVFJFRV9OQU1FKTsKJiM0MzsJaWYgKCFzdWJ0cmVlX3Jvb3QpCiYjNDM7CQlrc2Z0X2V4aXRfc2tpcCgmIzM0O2Nhbm5vdCBidWlsZCBzdWJ0cmVlIHJvb3QgcGF0aFxuJiMzNDspOwomIzQzOwomIzQzOwkvKiBTZXQgdGhlIHBsYW4gYWZ0ZXIgYWxsIGdsb2JhbCBza2lwIGNoZWNrcy4gKi8KJiM0MzsJa3NmdF9zZXRfcGxhbihBUlJBWV9TSVpFKGNhc2VzKSk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKGNhc2VzKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN3aXRjaCAocnVuX2Nhc2UoJmFtcDtjYXNlc1tpXSkpIHsKJiM0MzsJCWNhc2UgS1NGVF9QQVNTOgomIzQzOwkJCWtzZnRfdGVzdF9yZXN1bHRfcGFzcygmIzM0OyVzXG4mIzM0OywgY2FzZXNbaV0ubmFtZSk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlIEtTRlRfU0tJUDoKJiM0MzsJCQlrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoJiMzNDslc1xuJiMzNDssIGNhc2VzW2ldLm5hbWUpOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJZGVmYXVsdDoKJiM0MzsJCQlrc2Z0X3Rlc3RfcmVzdWx0X2ZhaWwoJiMzNDslc1xuJiMzNDssIGNhc2VzW2ldLm5hbWUpOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWZyZWUoc3VidHJlZV9yb290KTsKJiM0MzsJa3NmdF9maW5pc2hlZCgpOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X21lbWNvbnRyb2wuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X21lbWNvbnRyb2wuYwppbmRleCAwZWJmNzk2ZjNjZmZlLi4xNWJhNDY4Nzk1MDQyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfbWVtY29udHJvbC5jCkBAIC0yNiw3ICYjNDM7MjYsNiBAQAogCiBzdGF0aWMgYm9vbCBoYXNfbG9jYWxldmVudHM7CiBzdGF0aWMgYm9vbCBoYXNfcmVjdXJzaXZlcHJvdDsKLXN0YXRpYyBpbnQgcGFnZV9zaXplOwogCiBpbnQgZ2V0X3RlbXBfZmQodm9pZCkKIHsKQEAgLTU2LDI4ICYjNDM7NTUsMTIgQEAgaW50IGFsbG9jX3BhZ2VjYWNoZShpbnQgZmQsIHNpemVfdCBzaXplKQogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIGNoYXIgKmFsbG9jX2FuZF9wb3B1bGF0ZV9hbm9uKHNpemVfdCBzaXplKQotewotCWNoYXIgKmJ1ZiwgKnB0cjsKLQotCWJ1ZiA9IG1hbGxvYyhzaXplKTsKLQlpZiAoYnVmID09IE5VTEwpIHsKLQkJZnByaW50ZihzdGRlcnIsICYjMzQ7bWFsbG9jKCkgZmFpbGVkXG4mIzM0Oyk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCWZvciAocHRyID0gYnVmOyBwdHIgJmx0OyBidWYgJiM0Mzsgc2l6ZTsgcHRyICYjNDM7PSBwYWdlX3NpemUpCi0JCSpwdHIgPSAwOwotCi0JcmV0dXJuIGJ1ZjsKLX0KLQogaW50IGFsbG9jX2Fub24oY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpCiB7CiAJc2l6ZV90IHNpemUgPSAodW5zaWduZWQgbG9uZylhcmc7CiAJY2hhciAqYnVmOwogCi0JYnVmID0gYWxsb2NfYW5kX3BvcHVsYXRlX2Fub24oc2l6ZSk7CiYjNDM7CWJ1ZiA9IGNnX2FsbG9jX2Fub24oc2l6ZSk7CiAJaWYgKCFidWYpCiAJCXJldHVybiAtMTsKIApAQCAtMTk1LDcgJiM0MzsxNzgsNyBAQCBzdGF0aWMgaW50IGFsbG9jX2Fub25fNTBNX2NoZWNrKGNvbnN0IGNoYXIgKmNncm91cCwgdm9pZCAqYXJnKQogCWxvbmcgYW5vbiwgY3VycmVudDsKIAlpbnQgcmV0ID0gLTE7CiAKLQlidWYgPSBhbGxvY19hbmRfcG9wdWxhdGVfYW5vbihzaXplKTsKJiM0MzsJYnVmID0gY2dfYWxsb2NfYW5vbihzaXplKTsKIAlpZiAoIWJ1ZikKIAkJcmV0dXJuIC0xOwogCkBAIC00MjAsNyAmIzQzOzQwMyw3IEBAIHN0YXRpYyBpbnQgYWxsb2NfYW5vbl9ub2V4aXQoY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpCiAJc2l6ZV90IHNpemUgPSAodW5zaWduZWQgbG9uZylhcmc7CiAJY2hhciAqYnVmOwogCi0JYnVmID0gYWxsb2NfYW5kX3BvcHVsYXRlX2Fub24oc2l6ZSk7CiYjNDM7CWJ1ZiA9IGNnX2FsbG9jX2Fub24oc2l6ZSk7CiAJaWYgKCFidWYpCiAJCXJldHVybiAtMTsKIApAQCAtMTAwMSw3ICYjNDM7OTg0LDcgQEAgc3RhdGljIGludCBhbGxvY19hbm9uXzUwTV9jaGVja19zd2FwKGNvbnN0IGNoYXIgKmNncm91cCwgdm9pZCAqYXJnKQogCWxvbmcgbWVtX2N1cnJlbnQsIHN3YXBfY3VycmVudDsKIAlpbnQgcmV0ID0gLTE7CiAKLQlidWYgPSBhbGxvY19hbmRfcG9wdWxhdGVfYW5vbihzaXplKTsKJiM0MzsJYnVmID0gY2dfYWxsb2NfYW5vbihzaXplKTsKIAlpZiAoIWJ1ZikKIAkJcmV0dXJuIC0xOwogCkBAIC0xNzkzLDEwICYjNDM7MTc3Niw2IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAljaGFyIHJvb3RbUEFUSF9NQVhdOwogCWludCBpLCBwcm9jX3N0YXR1czsKIAotCXBhZ2Vfc2l6ZSA9IHN5c2NvbmYoX1NDX1BBR0VfU0laRSk7Ci0JaWYgKHBhZ2Vfc2l6ZSAmbHQ7PSAwKQotCQlwYWdlX3NpemUgPSBCVUZfU0laRTsKLQogCWtzZnRfcHJpbnRfaGVhZGVyKCk7CiAJa3NmdF9zZXRfcGxhbihBUlJBWV9TSVpFKHRlc3RzKSk7CiAJaWYgKGNnX2ZpbmRfdW5pZmllZF9yb290KHJvb3QsIHNpemVvZihyb290KSwgTlVMTCkpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC8uZ2l0aWdub3JlCmluZGV4IDkzM2Y0ODM4MTViMmMuLjY5OTQzMzAxZGMxZDcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC8uZ2l0aWdub3JlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC8uZ2l0aWdub3JlCkBAIC0xLDUgJiM0MzsxLDYgQEAKIGJwZnRvb2wKICouc2tlbC5oCiYjNDM7Ki5icGYuZAogL2hvc3QtdG9vbHMKIC90b29scwogaGlkX2JwZgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvaGlkL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvaGlkL01ha2VmaWxlCmluZGV4IDJmNDIzZGU4MzE0NzMuLjExOTBhNzQ3MDM2ZGEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvTWFrZWZpbGUKQEAgLTQ3LDcgJiM0Mzs0Nyw2IEBAIG1zZyA9CiBlbHNlCiBtc2cgPSBAcHJpbnRmICYjMzk7ICAlLThzJXMgJXMlc1xuJiMzOTsgJiMzNDskKDEpJiMzNDsgJiMzNDskKGlmICQoMiksIFskKDIpXSkmIzM0OyAmIzM0OyQobm90ZGlyICQoMykpJiMzNDsgJiMzNDskKGlmICQoNCksICQoNCkpJiMzNDs7CiBNQUtFRkxBR1MgJiM0Mzs9IC0tbm8tcHJpbnQtZGlyZWN0b3J5Ci1zdWJtYWtlX2V4dHJhcyA6PSBmZWF0dXJlX2Rpc3BsYXk9MAogZW5kaWYKIAogIyBvdmVycmlkZSBsaWIubWsmIzM5O3MgZGVmYXVsdCBydWxlcwpAQCAtNTgsMTcyICYjNDM7NTcsMjUgQEAgb3ZlcnJpZGUgZGVmaW5lIENMRUFOCiAJJChRKSQoUk0pIC1yICQoRVhUUkFfQ0xFQU4pCiBlbmRlZgogCi1pbmNsdWRlIC4uL2xpYi5tawotCi1UT09MU0RJUiA6PSAkKHRvcF9zcmNkaXIpL3Rvb2xzCi1MSUJESVIgOj0gJChUT09MU0RJUikvbGliCi1CUEZESVIgOj0gJChMSUJESVIpL2JwZgotVE9PTFNJTkNESVIgOj0gJChUT09MU0RJUikvaW5jbHVkZQotQlBGVE9PTERJUiA6PSAkKFRPT0xTRElSKS9icGYvYnBmdG9vbAotU0NSQVRDSF9ESVIgOj0gJChPVVRQVVQpL3Rvb2xzCi1CVUlMRF9ESVIgOj0gJChTQ1JBVENIX0RJUikvYnVpbGQKLUlOQ0xVREVfRElSIDo9ICQoU0NSQVRDSF9ESVIpL2luY2x1ZGUKLUJQRk9CSiA6PSAkKEJVSUxEX0RJUikvbGliYnBmL2xpYmJwZi5hCi1pZm5lcSAoJChDUk9TU19DT01QSUxFKSwpCi1IT1NUX0JVSUxEX0RJUgkJOj0gJChCVUlMRF9ESVIpL2hvc3QKLUhPU1RfU0NSQVRDSF9ESVIJOj0gJChPVVRQVVQpL2hvc3QtdG9vbHMKLUhPU1RfSU5DTFVERV9ESVIJOj0gJChIT1NUX1NDUkFUQ0hfRElSKS9pbmNsdWRlCi1lbHNlCi1IT1NUX0JVSUxEX0RJUgkJOj0gJChCVUlMRF9ESVIpCi1IT1NUX1NDUkFUQ0hfRElSCTo9ICQoU0NSQVRDSF9ESVIpCi1IT1NUX0lOQ0xVREVfRElSCTo9ICQoSU5DTFVERV9ESVIpCi1lbmRpZgotSE9TVF9CUEZPQkogOj0gJChIT1NUX0JVSUxEX0RJUikvbGliYnBmL2xpYmJwZi5hCi1SRVNPTFZFX0JURklEUyA6PSAkKEhPU1RfQlVJTERfRElSKS9yZXNvbHZlX2J0Zmlkcy9yZXNvbHZlX2J0ZmlkcwotCi1WTUxJTlVYX0JURl9QQVRIUyA/PSAkKGlmICQoTyksJChPKS92bWxpbnV4KQkJCQlcCi0JCSAgICAgJChpZiAkKEtCVUlMRF9PVVRQVVQpLCQoS0JVSUxEX09VVFBVVCkvdm1saW51eCkJXAotCQkgICAgIC4uLy4uLy4uLy4uL3ZtbGludXgJCQkJXAotCQkgICAgIC9zeXMva2VybmVsL2J0Zi92bWxpbnV4CQkJCVwKLQkJICAgICAvYm9vdC92bWxpbnV4LSQoc2hlbGwgdW5hbWUgLXIpCi1WTUxJTlVYX0JURiA/PSAkKGFic3BhdGggJChmaXJzdHdvcmQgJCh3aWxkY2FyZCAkKFZNTElOVVhfQlRGX1BBVEhTKSkpKQotaWZlcSAoJChWTUxJTlVYX0JURiksKQotJChlcnJvciBDYW5ub3QgZmluZCBhIHZtbGludXggZm9yIFZNTElOVVhfQlRGIGF0IGFueSBvZiAmIzM0OyQoVk1MSU5VWF9CVEZfUEFUSFMpJiMzNDspCi1lbmRpZgotCi0jIERlZmluZSBzaW1wbGUgYW5kIHNob3J0IGBtYWtlIHRlc3RfcHJvZ3NgLCBgbWFrZSB0ZXN0X3N5c2N0bGAsIGV0YyB0YXJnZXRzCi0jIHRvIGJ1aWxkIGluZGl2aWR1YWwgdGVzdHMuCi0jIE5PVEU6IFNlbWljb2xvbiBhdCB0aGUgZW5kIGlzIGNyaXRpY2FsIHRvIG92ZXJyaWRlIGxpYi5tayYjMzk7cyBkZWZhdWx0IHN0YXRpYwotIyBydWxlIGZvciBiaW5hcmllcy4KLSQobm90ZGlyICQoVEVTVF9HRU5fUFJPR1MpKTogJTogJChPVVRQVVQpLyUgOwotCi0jIHNvcnQgcmVtb3ZlcyBsaWJicGYgZHVwbGljYXRlcyB3aGVuIG5vdCBjcm9zcy1idWlsZGluZwotTUFLRV9ESVJTIDo9ICQoc29ydCAkKEJVSUxEX0RJUikvbGliYnBmICQoSE9TVF9CVUlMRF9ESVIpL2xpYmJwZgkJXAotCSAgICAgICAkKEhPU1RfQlVJTERfRElSKS9icGZ0b29sICQoSE9TVF9CVUlMRF9ESVIpL3Jlc29sdmVfYnRmaWRzCVwKLQkgICAgICAgJChJTkNMVURFX0RJUikpCi0kKE1BS0VfRElSUyk6Ci0JJChjYWxsIG1zZyxNS0RJUiwsJEApCi0JJChRKW1rZGlyIC1wICRACiYjNDM7IyBCdWlsZCB0aGUgbGVnYWN5IHByb2dzLyouYyBsYXlvdXQgd2l0aCB0aGUgc2hhcmVkIEJQRiBydWxlcy4KJiM0MztCUEZfU1JDUyAgICAgICA6PSAkKHdpbGRjYXJkIHByb2dzLyouYykKJiM0MztCUEZfUFJPR19FWFQgICA6PSAuYwomIzQzOyMgQlBGRElSIGlzIGRlZmluZWQgd2hlbiB0aGlzIHJlY3Vyc2l2ZSB2YXJpYWJsZSBpcyBleHBhbmRlZC4KJiM0MztCUEZfRVhUUkFfSERSUyAgPSAkKHdpbGRjYXJkIHByb2dzLyouaCkgJCh3aWxkY2FyZCAkKEJQRkRJUikvaGlkX2JwZl8qLmgpIFwKJiM0MzsJCSAgJCh3aWxkY2FyZCAkKEJQRkRJUikvKi5icGYuaCkKIAotREVGQVVMVF9CUEZUT09MIDo9ICQoSE9TVF9TQ1JBVENIX0RJUikvc2Jpbi9icGZ0b29sCiYjNDM7aW5jbHVkZSAuLi9saWIubWsKJiM0MztpbmNsdWRlIC4uL2xpYi5icGYubWsKIAomIzQzOyMgUHJlc2VydmUgdGhlIGV4aXN0aW5nIGluc3RhbGwgbGlzdC4KJiM0MztURVNUX0dFTl9GSUxFUyAmIzQzOz0gJChCUEZfT0JKUykKIFRFU1RfR0VOX1BST0dTX0VYVEVOREVEICYjNDM7PSAkKERFRkFVTFRfQlBGVE9PTCkKIAotJChURVNUX0dFTl9QUk9HUykgJChURVNUX0dFTl9QUk9HU19FWFRFTkRFRCk6ICQoQlBGT0JKKQotCi1CUEZUT09MID89ICQoREVGQVVMVF9CUEZUT09MKQotJChERUZBVUxUX0JQRlRPT0wpOiAkKHdpbGRjYXJkICQoQlBGVE9PTERJUikvKi5bY2hdICQoQlBGVE9PTERJUikvTWFrZWZpbGUpICAgIFwKLQkJICAgICQoSE9TVF9CUEZPQkopIHwgJChIT1NUX0JVSUxEX0RJUikvYnBmdG9vbAotCSQoUSkkKE1BS0UpICQoc3VibWFrZV9leHRyYXMpICAtQyAkKEJQRlRPT0xESVIpCQkJICAgICAgIFwKLQkJICAgIEFSQ0g9IENST1NTX0NPTVBJTEU9IENDPSQoSE9TVENDKSBMRD0kKEhPU1RMRCkgCSAgICAgICBcCi0JCSAgICBFWFRSQV9DRkxBR1M9JiMzOTstZyAtTzAmIzM5OwkJCQkgICAgICAgXAotCQkgICAgT1VUUFVUPSQoSE9TVF9CVUlMRF9ESVIpL2JwZnRvb2wvCQkJICAgICAgIFwKLQkJICAgIExJQkJQRl9PVVRQVVQ9JChIT1NUX0JVSUxEX0RJUikvbGliYnBmLwkJICAgICAgIFwKLQkJICAgIExJQkJQRl9ERVNURElSPSQoSE9TVF9TQ1JBVENIX0RJUikvCQkJICAgICAgIFwKLQkJICAgIHByZWZpeD0gREVTVERJUj0kKEhPU1RfU0NSQVRDSF9ESVIpLyBpbnN0YWxsLWJpbgotCi0kKEJQRk9CSik6ICQod2lsZGNhcmQgJChCUEZESVIpLyouW2NoXSAkKEJQRkRJUikvTWFrZWZpbGUpCQkgICAgICAgXAotCSAgIHwgJChCVUlMRF9ESVIpL2xpYmJwZgotCSQoUSkkKE1BS0UpICQoc3VibWFrZV9leHRyYXMpIC1DICQoQlBGRElSKSBPVVRQVVQ9JChCVUlMRF9ESVIpL2xpYmJwZi8gXAotCQkgICAgRVhUUkFfQ0ZMQUdTPSYjMzk7LWcgLU8wJiMzOTsJCQkJICAgICAgIFwKLQkJICAgIERFU1RESVI9JChTQ1JBVENIX0RJUikgcHJlZml4PSBhbGwgaW5zdGFsbF9oZWFkZXJzCi0KLWlmbmVxICgkKEJQRk9CSiksJChIT1NUX0JQRk9CSikpCi0kKEhPU1RfQlBGT0JKKTogJCh3aWxkY2FyZCAkKEJQRkRJUikvKi5bY2hdICQoQlBGRElSKS9NYWtlZmlsZSkJCSAgICAgICBcCi0JCXwgJChIT1NUX0JVSUxEX0RJUikvbGliYnBmCi0JJChRKSQoTUFLRSkgJChzdWJtYWtlX2V4dHJhcykgLUMgJChCUEZESVIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCSAgICBFWFRSQV9DRkxBR1M9JiMzOTstZyAtTzAmIzM5OyBBUkNIPSBDUk9TU19DT01QSUxFPQkJICAgICAgIFwKLQkJICAgIE9VVFBVVD0kKEhPU1RfQlVJTERfRElSKS9saWJicGYvIENDPSQoSE9TVENDKSBMRD0kKEhPU1RMRCkgXAotCQkgICAgREVTVERJUj0kKEhPU1RfU0NSQVRDSF9ESVIpLyBwcmVmaXg9IGFsbCBpbnN0YWxsX2hlYWRlcnMKLWVuZGlmCi0KLSQoSU5DTFVERV9ESVIpL3ZtbGludXguaDogJChWTUxJTlVYX0JURikgJChCUEZUT09MKSB8ICQoSU5DTFVERV9ESVIpCi1pZmVxICgkKFZNTElOVVhfSCksKQotCSQoY2FsbCBtc2csR0VOLCwkQCkKLQkkKFEpJChCUEZUT09MKSBidGYgZHVtcCBmaWxlICQoVk1MSU5VWF9CVEYpIGZvcm1hdCBjICZndDsgJEAKLWVsc2UKLQkkKGNhbGwgbXNnLENQLCwkQCkKLQkkKFEpY3AgJiMzNDskKFZNTElOVVhfSCkmIzM0OyAkQAotZW5kaWYKLQotJChSRVNPTFZFX0JURklEUyk6ICQoSE9TVF9CUEZPQkopIHwgJChIT1NUX0JVSUxEX0RJUikvcmVzb2x2ZV9idGZpZHMJXAotCQkgICAgICAgJChUT09MU0RJUikvYnBmL3Jlc29sdmVfYnRmaWRzL21haW4uYwlcCi0JCSAgICAgICAkKFRPT0xTRElSKS9saWIvcmJ0cmVlLmMJCQlcCi0JCSAgICAgICAkKFRPT0xTRElSKS9saWIvemFsbG9jLmMJCQlcCi0JCSAgICAgICAkKFRPT0xTRElSKS9saWIvc3RyaW5nLmMJCQlcCi0JCSAgICAgICAkKFRPT0xTRElSKS9saWIvY3R5cGUuYwkJCVwKLQkJICAgICAgICQoVE9PTFNESVIpL2xpYi9zdHJfZXJyb3Jfci5jCi0JJChRKSQoTUFLRSkgJChzdWJtYWtlX2V4dHJhcykgLUMgJChUT09MU0RJUikvYnBmL3Jlc29sdmVfYnRmaWRzCVwKLQkJQ0M9JChIT1NUQ0MpIExEPSQoSE9TVExEKSBBUj0kKEhPU1RBUikgXAotCQlMSUJCUEZfSU5DTFVERT0kKEhPU1RfSU5DTFVERV9ESVIpIFwKLQkJT1VUUFVUPSQoSE9TVF9CVUlMRF9ESVIpL3Jlc29sdmVfYnRmaWRzLyBCUEZPQko9JChIT1NUX0JQRk9CSikKLQotIyBHZXQgQ2xhbmcmIzM5O3MgZGVmYXVsdCBpbmNsdWRlcyBvbiB0aGlzIHN5c3RlbSwgYXMgb3Bwb3NlZCB0byB0aG9zZSBzZWVuIGJ5Ci0jICYjMzk7LS10YXJnZXQ9YnBmJiMzOTsuIFRoaXMgZml4ZXMgJiMzNDttaXNzaW5nJiMzNDsgZmlsZXMgb24gc29tZSBhcmNoaXRlY3R1cmVzL2Rpc3Ryb3MsCi0jIHN1Y2ggYXMgYXNtL2J5dGVvcmRlci5oLCBhc20vc29ja2V0LmgsIGFzbS9zb2NraW9zLmgsIHN5cy9jZGVmcy5oIGV0Yy4KLSMKLSMgVXNlICYjMzk7LWlkaXJhZnRlciYjMzk7OiBEb24mIzM5O3QgaW50ZXJmZXJlIHdpdGggaW5jbHVkZSBtZWNoYW5pY3MgZXhjZXB0IHdoZXJlIHRoZQotIyBidWlsZCB3b3VsZCBoYXZlIGZhaWxlZCBhbnl3YXlzLgotZGVmaW5lIGdldF9zeXNfaW5jbHVkZXMKLSQoc2hlbGwgJCgxKSAtdiAtRSAtICZsdDsvZGV2L251bGwgMiZndDsmYW1wOzEgXAotCXwgc2VkIC1uICYjMzk7LyZsdDsuLi4mZ3Q7IHNlYXJjaCBzdGFydHMgaGVyZTovLC9FbmQgb2Ygc2VhcmNoIGxpc3QuL3sgc3wgXCgvLipcKXwtaWRpcmFmdGVyIFwxfHAgfSYjMzk7KSBcCi0kKHNoZWxsICQoMSkgLWRNIC1FIC0gJmx0Oy9kZXYvbnVsbCB8IGdyZXAgJiMzOTtfX3Jpc2N2X3hsZW4gJiMzOTsgfCBhd2sgJiMzOTt7cHJpbnRmKCYjMzQ7LURfX3Jpc2N2X3hsZW49JWQgLURfX0JJVFNfUEVSX0xPTkc9JWQmIzM0OywgJCQzLCAkJDMpfSYjMzk7KQotZW5kZWYKLQotIyBEZXRlcm1pbmUgdGFyZ2V0IGVuZGlhbm5lc3MuCi1JU19MSVRUTEVfRU5ESUFOID0gJChzaGVsbCAkKENDKSAtZE0gLUUgLSAmbHQ7L2Rldi9udWxsIHwgXAotCQkJZ3JlcCAmIzM5O2RlZmluZSBfX0JZVEVfT1JERVJfXyBfX09SREVSX0xJVFRMRV9FTkRJQU5fXyYjMzk7KQotTUVORElBTj0kKGlmICQoSVNfTElUVExFX0VORElBTiksLW1saXR0bGUtZW5kaWFuLC1tYmlnLWVuZGlhbikKLQotQ0xBTkdfU1lTX0lOQ0xVREVTID0gJChjYWxsIGdldF9zeXNfaW5jbHVkZXMsJChDTEFORykpCi1CUEZfQ0ZMQUdTID0gLWcgLVdlcnJvciAtRF9fVEFSR0VUX0FSQ0hfJChTUkNBUkNIKSAkKE1FTkRJQU4pIAkJXAotCSAgICAgLVduby1taWNyb3NvZnQtYW5vbi10YWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JICAgICAtZm1zLWV4dGVuc2lvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkgICAgIC1JJChJTkNMVURFX0RJUikKLQotQ0xBTkdfQ0ZMQUdTID0gJChDTEFOR19TWVNfSU5DTFVERVMpIFwKLQkgICAgICAgLVduby1jb21wYXJlLWRpc3RpbmN0LXBvaW50ZXItdHlwZXMKLQotIyBCdWlsZCBCUEYgb2JqZWN0IHVzaW5nIENsYW5nCi0jICQxIC0gaW5wdXQgLmMgZmlsZQotIyAkMiAtIG91dHB1dCAubyBmaWxlCi0jICQzIC0gQ0ZMQUdTCi1kZWZpbmUgQ0xBTkdfQlBGX0JVSUxEX1JVTEUKLQkkKGNhbGwgbXNnLENMTkctQlBGLCQoVFJVTk5FUl9CSU5BUlkpLCQyKQotCSQoUSkkKENMQU5HKSAkMyAtTzIgLS10YXJnZXQ9YnBmIC1jICQxIC1tY3B1PXYzIC1vICQyCi1lbmRlZgotIyBTaW1pbGFyIHRvIENMQU5HX0JQRl9CVUlMRF9SVUxFLCBidXQgd2l0aCBkaXNhYmxlZCBhbHUzMgotZGVmaW5lIENMQU5HX05PQUxVMzJfQlBGX0JVSUxEX1JVTEUKLQkkKGNhbGwgbXNnLENMTkctQlBGLCQoVFJVTk5FUl9CSU5BUlkpLCQyKQotCSQoUSkkKENMQU5HKSAkMyAtTzIgLS10YXJnZXQ9YnBmIC1jICQxIC1tY3B1PXYyIC1vICQyCi1lbmRlZgotIyBCdWlsZCBCUEYgb2JqZWN0IHVzaW5nIEdDQwotZGVmaW5lIEdDQ19CUEZfQlVJTERfUlVMRQotCSQoY2FsbCBtc2csR0NDLUJQRiwkKFRSVU5ORVJfQklOQVJZKSwkMikKLQkkKFEpJChCUEZfR0NDKSAkMyAtTzIgLWMgJDEgLW8gJDIKLWVuZGVmCi0KLUJQRl9QUk9HU19ESVIgOj0gcHJvZ3MKLUJQRl9CVUlMRF9SVUxFIDo9IENMQU5HX0JQRl9CVUlMRF9SVUxFCi1CUEZfU1JDUyA6PSAkKG5vdGRpciAkKHdpbGRjYXJkICQoQlBGX1BST0dTX0RJUikvKi5jKSkKLUJQRl9PQkpTIDo9ICQocGF0c3Vic3QgJS5jLCQoT1VUUFVUKS8lLmJwZi5vLCAkKEJQRl9TUkNTKSkKLUJQRl9TS0VMUyA6PSAkKHBhdHN1YnN0ICUuYywkKE9VVFBVVCkvJS5za2VsLmgsICQoQlBGX1NSQ1MpKQotVEVTVF9HRU5fRklMRVMgJiM0Mzs9ICQoQlBGX09CSlMpCiYjNDM7IyBLZWVwIGFsaWFzZXMgc3VjaCBhcyAmIzM0O21ha2UgaGlkX2JwZiYjMzQ7IGZyb20gbWF0Y2hpbmcgbGliLm1rJiMzOTtzIGJpbmFyeSBydWxlLgomIzQzOyQobm90ZGlyICQoVEVTVF9HRU5fUFJPR1MpKTogJTogJChPVVRQVVQpLyUgOwogCi0kKEJQRl9QUk9HU19ESVIpLWJwZm9ianMgOj0geQotJChCUEZfT0JKUyk6ICQoT1VUUFVUKS8lLmJwZi5vOgkJCQlcCi0JICAgICAkKEJQRl9QUk9HU19ESVIpLyUuYwkJCVwKLQkgICAgICQod2lsZGNhcmQgJChCUEZfUFJPR1NfRElSKS8qLmgpCQlcCi0JICAgICAkKElOQ0xVREVfRElSKS92bWxpbnV4LmgJCQkJXAotCSAgICAgJCh3aWxkY2FyZCAkKEJQRkRJUikvaGlkX2JwZl8qLmgpCQkJXAotCSAgICAgJCh3aWxkY2FyZCAkKEJQRkRJUikvKi5icGYuaCkJCQlcCi0JICAgICB8ICQoT1VUUFVUKSAkKEJQRk9CSikKLQkkKGNhbGwgJChCUEZfQlVJTERfUlVMRSksJCZsdDssJEAsICQoQlBGX0NGTEFHUykpCi0KLSQoQlBGX1NLRUxTKTogJS5za2VsLmg6ICUuYnBmLm8gJChCUEZUT09MKSB8ICQoT1VUUFVUKQotCSQoY2FsbCBtc2csR0VOLVNLRUwsJChCSU5BUlkpLCRAKQotCSQoUSkkKEJQRlRPT0wpIGdlbiBvYmplY3QgJCgmbHQ7Oi5vPS5saW5rZWQxLm8pICQmbHQ7Ci0JJChRKSQoQlBGVE9PTCkgZ2VuIHNrZWxldG9uICQoJmx0Ozoubz0ubGlua2VkMS5vKSBuYW1lICQobm90ZGlyICQoJmx0OzouYnBmLm89KSkgJmd0OyAkQAomIzQzOyMgUmVsaW5rIHRlc3RzIHdoZW4gdGhlIGluLXRyZWUgbGliYnBmIGNoYW5nZXMuCiYjNDM7JChURVNUX0dFTl9QUk9HUyk6ICQoQlBGT0JKKQogCiAkKE9VVFBVVCkvJS5vOiAlLmMgJChCUEZfU0tFTFMpIGhpZF9jb21tb24uaAogCSQoY2FsbCBtc2csQ0MsLCRAKQpAQCAtMjMzLDUgJiM0Mzs4NSw0IEBAICQoT1VUUFVUKS8lOiAkKE9VVFBVVCkvJS5vCiAJJChjYWxsIG1zZyxCSU5BUlksLCRAKQogCSQoUSkkKExJTksuYykgJF4gJChMRExJQlMpIC1vICRACiAKLUVYVFJBX0NMRUFOIDo9ICQoU0NSQVRDSF9ESVIpICQoSE9TVF9TQ1JBVENIX0RJUikgZmVhdHVyZSBicGZ0b29sCVwKLQkkKGFkZHByZWZpeCAkKE9VVFBVVCkvLCoubyAqLnNrZWwuaCBub19hbHUzMikKJiM0MztFWFRSQV9DTEVBTiAmIzQzOz0gJChPVVRQVVQpLyoubwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvaGlkL3Byb2dzL2hpZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvaGlkL3Byb2dzL2hpZC5jCmluZGV4IGIyMWZiYjEzYzkyNmYuLmVjNzM0ZTE4ZDIzYWUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC9wcm9ncy9oaWQuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvcHJvZ3MvaGlkLmMKQEAgLTExMSw3ICYjNDM7MTExLDcgQEAgaW50IGhpZF91c2VyX3Jhd19yZXF1ZXN0KHN0cnVjdCBoaWRfaHdfcmVxdWVzdF9zeXNjYWxsX2FyZ3MgKmFyZ3MpCiB7CiAJc3RydWN0IGhpZF9icGZfY3R4ICpjdHg7CiAJY29uc3Qgc2l6ZV90IHNpemUgPSBhcmdzLSZndDtzaXplOwotCWludCBpLCByZXQgPSAwOwomIzQzOwlpbnQgcmV0ID0gMDsKIAogCWlmIChzaXplICZndDsgc2l6ZW9mKGFyZ3MtJmd0O2RhdGEpKQogCQlyZXR1cm4gLTc7IC8qIC1FMkJJRyAqLwpAQCAtMTM3LDcgJiM0MzsxMzcsNyBAQCBpbnQgaGlkX3VzZXJfb3V0cHV0X3JlcG9ydChzdHJ1Y3QgaGlkX2h3X3JlcXVlc3Rfc3lzY2FsbF9hcmdzICphcmdzKQogewogCXN0cnVjdCBoaWRfYnBmX2N0eCAqY3R4OwogCWNvbnN0IHNpemVfdCBzaXplID0gYXJncy0mZ3Q7c2l6ZTsKLQlpbnQgaSwgcmV0ID0gMDsKJiM0MzsJaW50IHJldCA9IDA7CiAKIAlpZiAoc2l6ZSAmZ3Q7IHNpemVvZihhcmdzLSZndDtkYXRhKSkKIAkJcmV0dXJuIC03OyAvKiAtRTJCSUcgKi8KQEAgLTE2MSw3ICYjNDM7MTYxLDcgQEAgaW50IGhpZF91c2VyX2lucHV0X3JlcG9ydChzdHJ1Y3QgaGlkX2h3X3JlcXVlc3Rfc3lzY2FsbF9hcmdzICphcmdzKQogewogCXN0cnVjdCBoaWRfYnBmX2N0eCAqY3R4OwogCWNvbnN0IHNpemVfdCBzaXplID0gYXJncy0mZ3Q7c2l6ZTsKLQlpbnQgaSwgcmV0ID0gMDsKJiM0MzsJaW50IHJldCA9IDA7CiAKIAlpZiAoc2l6ZSAmZ3Q7IHNpemVvZihhcmdzLSZndDtkYXRhKSkKIAkJcmV0dXJuIC03OyAvKiAtRTJCSUcgKi8KQEAgLTQxNyw3ICYjNDM7NDE3LDYgQEAgU0VDKCYjMzQ7P3N0cnVjdF9vcHMucy9oaWRfaHdfb3V0cHV0X3JlcG9ydCYjMzQ7KQogaW50IEJQRl9QUk9HKGhpZF90ZXN0X2hpZHJhd19vdXRwdXRfcmVwb3J0LCBzdHJ1Y3QgaGlkX2JwZl9jdHggKmhjdHgsIF9fdTY0IHNvdXJjZSkKIHsKIAlfX3U4ICpkYXRhID0gaGlkX2JwZl9nZXRfZGF0YShoY3R4LCAwIC8qIG9mZnNldCAqLywgMyAvKiBzaXplICovKTsKLQlpbnQgcmV0OwogCiAJaWYgKCFkYXRhKQogCQlyZXR1cm4gMDsgLyogRVBFUk0gY2hlY2sgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2xpYi5icGYubWsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9saWIuYnBmLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjkyMzhjYmYxZGUwNjIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9saWIuYnBmLm1rCkBAIC0wLDAgJiM0MzsxLDMyMSBAQAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjCiYjNDM7IyBCdWlsZCBCUEYgcHJvZ3JhbXMgYW5kIHNrZWxldG9ucyBmb3Igc2VsZnRlc3RzLgomIzQzOyMKJiM0MzsjIFVzZSBpdCBmcm9tIGEgdGVzdCBNYWtlZmlsZSBsaWtlIHRoaXM6CiYjNDM7IwomIzQzOyMgICAgIEJQRl9TUkNTICAgICAgICAgOj0gZm9vLmJwZi5jIGJhci5icGYuYwomIzQzOyMgICAgIFRFU1RfR0VOX1BST0dTICAgOj0gZm9vX3Rlc3QKJiM0MzsjICAgICBPVkVSUklERV9UQVJHRVRTIDo9IDEgICAgICAgICAgICAgICMgc2V0IGJlZm9yZSBsaWIubWsKJiM0MzsjICAgICBpbmNsdWRlIC4uL2xpYi5tawomIzQzOyMgICAgIGluY2x1ZGUgLi4vbGliLmJwZi5tawomIzQzOyMKJiM0MzsjICAgICAkKE9VVFBVVCkvZm9vX3Rlc3Q6IGZvb190ZXN0LmMgJChCUEZfU0tFTFMpICQoQlBGT0JKKQomIzQzOyMgICAgICAgICAkKGNhbGwgYnBmX2xpbmssJEAsJCZsdDspCiYjNDM7IwomIzQzOyMgRGVwZW5kIG9uICQoQlBGT0JKKSB0byByZWxpbmsgdGhlIHRlc3Qgd2hlbiBsaWJicGYuYSBjaGFuZ2VzLgomIzQzOyMKJiM0MzsjIE9wdGlvbnMgdG8gc2V0IGJlZm9yZSBpbmNsdWRpbmcgbGliLmJwZi5tazoKJiM0MzsjICAgQlBGX1BST0dfRVhUICAgICAtIHNvdXJjZSBlbmRpbmc7IGRlZmF1bHQgLmJwZi5jLiBVc2UgLmMgZm9yIHByb2dzL2Zvby5jLgomIzQzOyMgICBCUEZfRVhUUkFfSERSUyAgIC0gbW9yZSBoZWFkZXJzIG5lZWRlZCBieSB0aGUgQlBGIG9iamVjdHMuCiYjNDM7IyAgIEJQRl9FWFRSQV9DRkxBR1MgLSBtb3JlIGZsYWdzIGZvciBjb21waWxpbmcgQlBGIHByb2dyYW1zLgomIzQzOyMgICBCUEZfU0tFTF9FWFQgICAgIC0gc2tlbGV0b24gaGVhZGVyIGVuZGluZzsgZGVmYXVsdCAuc2tlbC5oLiBNdXN0IGVuZCBpbgomIzQzOyMgICAgICAgICAgICAgICAgICAgICAgc2tlbC5oLgomIzQzOyMgICBCUEZfR0VOX1NVQlNLRUwgIC0gYWxzbyBjcmVhdGUgYSBzdWJza2VsZXRvbiBoZWFkZXIgd2hlbiBzZXQuCiYjNDM7IyAgIEJQRl9PQkpfRElSICAgICAgLSBmb2xkZXIgZm9yIEJQRiBvYmplY3RzOyBkZWZhdWx0ICQoT1VUUFVUKS4KJiM0MzsjICAgQlBGX1NLRUxfRElSICAgICAtIGZvbGRlciBmb3Igc2tlbGV0b24gaGVhZGVyczsgZGVmYXVsdCAkKE9VVFBVVCkuCiYjNDM7IwomIzQzOyMgU2V0IG91dHB1dCBkaXJlY3RvcmllcyB0aGF0IHVzZSAkKE9VVFBVVCkgYWZ0ZXIgaW5jbHVkaW5nIGxpYi5tay4KJiM0MzsjCiYjNDM7IyBCUEZfQ0ZMQUdTIG1heSBiZSByZXBsYWNlZCBhZnRlciB0aGlzIGluY2x1ZGUuIEdlbmVyYXRlZCBuYW1lcyB1c2UgdGhlIHNvdXJjZQomIzQzOyMgc3RlbSB3aXRob3V0IGl0cyBkaXJlY3RvcnkuCiYjNDM7IwomIzQzOyMgSW5jbHVkZSBsaWIubWsgZmlyc3QuIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBCUEYgYnVpbGQgdmFyaWFibGVzIGFuZCBicGZfbGluaywKJiM0MzsjIGV4dGVuZHMgYWxsLCBDRkxBR1MgYW5kIEVYVFJBX0NMRUFOLCBhbmQgZW5hYmxlcyAuREVMRVRFX09OX0VSUk9SLgomIzQzOwomIzQzO2luY2x1ZGUgJCh0b3Bfc3JjZGlyKS90b29scy9zY3JpcHRzL01ha2VmaWxlLmFyY2gJIyBBUkNIIC8gU1JDQVJDSCAvIEhPU1RBUkNICiYjNDM7CiYjNDM7IyBSZW1vdmUgcGFydGlhbCBmaWxlcyB3cml0dGVuIGRpcmVjdGx5IHRvICRALgomIzQzOy5ERUxFVEVfT05fRVJST1I6CiYjNDM7CiYjNDM7IyBNYXRjaCB0aGUgbGliYnBmIGFuZCBicGZ0b29sIGhvc3QgY29tcGlsZXIgdG8gTExWTT0uCiYjNDM7aWZuZXEgKCQoTExWTSksKQomIzQzO0hPU1RDQyA/PSAkKExMVk1fUFJFRklYKWNsYW5nJChMTFZNX1NVRkZJWCkKJiM0MztIT1NUTEQgPz0gJChMTFZNX1BSRUZJWClsZC5sbGQkKExMVk1fU1VGRklYKQomIzQzO2Vsc2UKJiM0MztIT1NUQ0MgPz0gZ2NjCiYjNDM7SE9TVExEID89IGxkCiYjNDM7ZW5kaWYKJiM0MztDTEFORyAgPz0gY2xhbmcKJiM0MzsKJiM0MztpZm5lcSAoJChWKSwxKQomIzQzO2xpYl9icGZfc3VibWFrZV9leHRyYXMgOj0gZmVhdHVyZV9kaXNwbGF5PTAKJiM0MztlbmRpZgomIzQzOwomIzQzOyMgTWF0Y2ggc2VsZnRlc3RzL2JwZiBkZWJ1ZyBhbmQgcmVsZWFzZSBvcHRpbWl6YXRpb24uCiYjNDM7T1BUX0ZMQUdTID89ICQoaWYgJChSRUxFQVNFKSwtTzIsLU8wKQomIzQzOwomIzQzOyMgLS0tLSBmaWxlcyBhbmQgdG9vbHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7IyBVc2Ugb25lIGZ1bGwgcGF0aC4gRGlmZmVyZW50IGZvcm1zIG9mIHRoZSBzYW1lIC1JIHBhdGggY2FuIGNoYW5nZSBCVEYgb3JkZXIuCiYjNDM7bGliX2JwZl90b29sc19kaXIgICAgICAgICA6PSAkKGFic3BhdGggJCh0b3Bfc3JjZGlyKS90b29scykKJiM0MztsaWJfYnBmX2RpciAgICAgICAgICAgICAgIDo9ICQobGliX2JwZl90b29sc19kaXIpL2xpYi9icGYKJiM0MztsaWJfYnBmX3Rvb2xzX2luY2x1ZGVfZGlyIDo9ICQobGliX2JwZl90b29sc19kaXIpL2luY2x1ZGUKJiM0MztsaWJfYnBmX2JwZnRvb2xfZGlyICAgICAgIDo9ICQobGliX2JwZl90b29sc19kaXIpL2JwZi9icGZ0b29sCiYjNDM7bGliX2JwZl9hcGlfZGlyICAgICAgICAgICA6PSAkKGxpYl9icGZfdG9vbHNfaW5jbHVkZV9kaXIpL3VhcGkKJiM0MztsaWJfYnBmX3NvdXJjZXMgICAgICAgICAgIDo9ICQod2lsZGNhcmQgJChsaWJfYnBmX2RpcikvKi5bY2hdIFwKJiM0MzsJCQkJCSAgICAgICAkKGxpYl9icGZfZGlyKS9NYWtlZmlsZSkKJiM0MztsaWJfYnBmX2hlYWRlcl9zb3VyY2VzICAgIDo9ICQoZmlsdGVyICUuaCwkKGxpYl9icGZfc291cmNlcykpIFwKJiM0MzsJCQkJICAgICAkKGxpYl9icGZfYXBpX2RpcikvbGludXgvYnBmLmgKJiM0MzsjIEtlZXAgdGhlc2UgbmFtZXMgZm9yIGNhbGxlcnMgd2hpY2ggYWRkIHRoZWlyIG93biBCUEYgZmxhZ3Mgb3IgZGVwZW5kZW5jaWVzLgomIzQzO0JQRkRJUiAgICAgOj0gJChsaWJfYnBmX2RpcikKJiM0MztBUElESVIgICAgIDo9ICQobGliX2JwZl9hcGlfZGlyKQomIzQzOwomIzQzOyMgS2VlcCBwcml2YXRlIGJ1aWxkIGZpbGVzIHVuZGVyICQoT1VUUFVUKSBmb3IgYm90aCBpbi10cmVlIGFuZCBPPSBidWlsZHMuCiYjNDM7bGliX2JwZl9zY3JhdGNoX2RpciA6PSAkKE9VVFBVVCkvdG9vbHMKJiM0MztsaWJfYnBmX2J1aWxkX2RpciAgIDo9ICQobGliX2JwZl9zY3JhdGNoX2RpcikvYnVpbGQKJiM0MztsaWJfYnBmX2luY2x1ZGVfZGlyIDo9ICQobGliX2JwZl9zY3JhdGNoX2RpcikvaW5jbHVkZQomIzQzOyMgSU5DTFVERV9ESVIgaXMgYWxzbyB1c2VkIGJ5IGNhbGxlcnMgdGhhdCByZXBsYWNlIEJQRl9DRkxBR1MuCiYjNDM7SU5DTFVERV9ESVIgOj0gJChsaWJfYnBmX2luY2x1ZGVfZGlyKQomIzQzO0JQRk9CSiAgICAgIDo9ICQobGliX2JwZl9idWlsZF9kaXIpL2xpYmJwZi9saWJicGYuYQomIzQzOwomIzQzOyMgQ3Jvc3MgYnVpbGRzIHVzZSBhIHNlcGFyYXRlIG5hdGl2ZSBsaWJicGYgZm9yIGJwZnRvb2wuCiYjNDM7aWZuZXEgKCQoQ1JPU1NfQ09NUElMRSkkKGZpbHRlci1vdXQgJChIT1NUQVJDSCksJChTUkNBUkNIKSksKQomIzQzO2xpYl9icGZfaG9zdF9idWlsZF9kaXIgICA6PSAkKGxpYl9icGZfYnVpbGRfZGlyKS9ob3N0CiYjNDM7bGliX2JwZl9ob3N0X3NjcmF0Y2hfZGlyIDo9ICQoT1VUUFVUKS9ob3N0LXRvb2xzCiYjNDM7ZWxzZQomIzQzO2xpYl9icGZfaG9zdF9idWlsZF9kaXIgICA6PSAkKGxpYl9icGZfYnVpbGRfZGlyKQomIzQzO2xpYl9icGZfaG9zdF9zY3JhdGNoX2RpciA6PSAkKGxpYl9icGZfc2NyYXRjaF9kaXIpCiYjNDM7ZW5kaWYKJiM0MztsaWJfYnBmX2hvc3Rfb2JqIDo9ICQobGliX2JwZl9ob3N0X2J1aWxkX2RpcikvbGliYnBmL2xpYmJwZi5hCiYjNDM7REVGQVVMVF9CUEZUT09MICA6PSAkKGxpYl9icGZfaG9zdF9zY3JhdGNoX2Rpcikvc2Jpbi9icGZ0b29sCiYjNDM7QlBGVE9PTCAgICAgICAgICA/PSAkKERFRkFVTFRfQlBGVE9PTCkKJiM0MzsKJiM0MzsjIFJldXNlIHRhcmdldCBVU0VSQ0ZMQUdTIG9ubHkgd2hlbiBicGZ0b29sIHNoYXJlcyB0aGUgdGFyZ2V0IGxpYmJwZi4KJiM0MztpZmVxICgkKEJQRk9CSiksJChsaWJfYnBmX2hvc3Rfb2JqKSkKJiM0MztsaWJfYnBmX2hvc3RfdXNlcl9jZmxhZ3MgOj0gJChVU0VSQ0ZMQUdTKQomIzQzO2VuZGlmCiYjNDM7CiYjNDM7IyAtLS0tIGZpbmQgdm1saW51eCBCVEYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJiM0MztWTUxJTlVYX0JURl9QQVRIUyA/PSAkKGlmICQoTyksJChPKS92bWxpbnV4KQkJCQlcCiYjNDM7CQkgICAgICQoaWYgJChLQlVJTERfT1VUUFVUKSwkKEtCVUlMRF9PVVRQVVQpL3ZtbGludXgpCVwKJiM0MzsJCSAgICAgJCh0b3Bfc3JjZGlyKS92bWxpbnV4CQkJCVwKJiM0MzsJCSAgICAgL3N5cy9rZXJuZWwvYnRmL3ZtbGludXgJCQkJXAomIzQzOwkJICAgICAvYm9vdC92bWxpbnV4LSQoc2hlbGwgdW5hbWUgLXIpCiYjNDM7Vk1MSU5VWF9CVEYgPz0gJChhYnNwYXRoICQoZmlyc3R3b3JkICQod2lsZGNhcmQgJChWTUxJTlVYX0JURl9QQVRIUykpKSkKJiM0MzsjIERlbGF5IG1pc3Npbmctdm1saW51eCBlcnJvcnMgc28gJiMzNDttYWtlIGNsZWFuJiMzNDsgc3RpbGwgd29ya3MuCiYjNDM7bGliX2JwZl92bWxpbnV4X2RlcHMgOj0gJChpZiAkKFZNTElOVVhfSCksJChWTUxJTlVYX0gpLCQoVk1MSU5VWF9CVEYpICQoQlBGVE9PTCkpCiYjNDM7CiYjNDM7IyAtLS0tIGNvbXBpbGVyIGZsYWdzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJiM0MzsjIEZpbmQgdGhlIG5vcm1hbCBzeXN0ZW0gaGVhZGVycyB0aGF0IENsYW5nIG9taXRzIHdpdGggLS10YXJnZXQ9YnBmLiBQdXQgdGhlbQomIzQzOyMgbGFzdCB3aXRoIC1pZGlyYWZ0ZXIgc28gdGhleSBjYW5ub3QgcmVwbGFjZSBwcm9qZWN0IGhlYWRlcnMuCiYjNDM7ZGVmaW5lIGxpYl9icGZfZ2V0X3N5c19pbmNsdWRlcwomIzQzOyQoc2hlbGwgJCgxKSAkKDIpIC12IC1FIC0gJmx0Oy9kZXYvbnVsbCAyJmd0OyZhbXA7MSBcCiYjNDM7CXwgc2VkIC1uICYjMzk7LyZsdDsuLi4mZ3Q7IHNlYXJjaCBzdGFydHMgaGVyZTovLC9FbmQgb2Ygc2VhcmNoIGxpc3QuL3sgc3wgXCgvLipcKXwtaWRpcmFmdGVyIFwxfHAgfSYjMzk7KSBcCiYjNDM7JChzaGVsbCAkKDEpICQoMikgLWRNIC1FIC0gJmx0Oy9kZXYvbnVsbCB8IGdyZXAgJiMzOTtfX3Jpc2N2X3hsZW4gJiMzOTsgfCBhd2sgJiMzOTt7cHJpbnRmKCYjMzQ7LURfX3Jpc2N2X3hsZW49JWQgLURfX0JJVFNfUEVSX0xPTkc9JWQmIzM0OywgJCQzLCAkJDMpfSYjMzk7KSBcCiYjNDM7JChzaGVsbCAkKDEpICQoMikgLWRNIC1FIC0gJmx0Oy9kZXYvbnVsbCB8IGdyZXAgJiMzOTtfX2xvb25nYXJjaF9ncmxlbiAmIzM5OyB8IGF3ayAmIzM5O3twcmludGYoJiMzNDstRF9fQklUU19QRVJfTE9ORz0lZCYjMzQ7LCAkJDMpfSYjMzk7KSBcCiYjNDM7JChzaGVsbCAkKDEpICQoMikgLWRNIC1FIC0gJmx0Oy9kZXYvbnVsbCB8IGdyZXAgLUUgJiMzOTtNSVBTKEVMfEVCKXxfTUlQU19TWihQVFJ8TE9ORykgfF9NSVBTX1NJTSB8X0FCSShPMzJ8TjMyfDY0KSAmIzM5OyB8IGF3ayAmIzM5O3twcmludGYoJiMzNDstRCVzPSVzICYjMzQ7LCAkJDIsICQkMyl9JiMzOTspCiYjNDM7ZW5kZWYKJiM0MztpZm5lcSAoJChDUk9TU19DT01QSUxFKSwpCiYjNDM7bGliX2JwZl9jbGFuZ190YXJnZXRfYXJjaCA9IC0tdGFyZ2V0PSQobm90ZGlyICQoQ1JPU1NfQ09NUElMRTolLT0lKSkKJiM0MztlbmRpZgomIzQzOyMgRmluZCB0aGUgc3lzdGVtIGluY2x1ZGUgZmxhZ3Mgb25jZSBhbmQgcmV1c2UgdGhlbS4KJiM0MztDTEFOR19TWVNfSU5DTFVERVMgOj0gJChjYWxsIGxpYl9icGZfZ2V0X3N5c19pbmNsdWRlcywkKENMQU5HKSwkKGxpYl9icGZfY2xhbmdfdGFyZ2V0X2FyY2gpKQomIzQzOwomIzQzO2xpYl9icGZfaXNfbGl0dGxlX2VuZGlhbiA6PSAkKHNoZWxsICQoQ0MpIC1kTSAtRSAtICZsdDsvZGV2L251bGwgfCBcCiYjNDM7CQkJCSAgICBncmVwICYjMzk7ZGVmaW5lIF9fQllURV9PUkRFUl9fIF9fT1JERVJfTElUVExFX0VORElBTl9fJiMzOTspCiYjNDM7TUVORElBTiA6PSAkKGlmICQobGliX2JwZl9pc19saXR0bGVfZW5kaWFuKSwtbWxpdHRsZS1lbmRpYW4sLW1iaWctZW5kaWFuKQomIzQzOwomIzQzOyMgVXNlIEJQRiBDUFUgdjMgd2hlbiBDbGFuZyBzdXBwb3J0cyBpdC4gT3RoZXJ3aXNlIHVzZSB2Mi4KJiM0MztsaWJfYnBmX2NsYW5nX2NwdSA6PSAkKHNoZWxsICQoQ0xBTkcpIC0tdGFyZ2V0PWJwZiAtbWNwdT1oZWxwIDImZ3Q7JmFtcDsxIHwgXAomIzQzOwkJCSAgICAgZ3JlcCAtcSAmIzM5O3YzJiMzOTsgJmFtcDsmYW1wOyBlY2hvIHYzIHx8IGVjaG8gdjIpCiYjNDM7CiYjNDM7IyBBY2NlcHQgYW5vbnltb3VzIHN0cnVjdCBhbmQgdW5pb24gbWVtYmVycyBpbiB2bWxpbnV4LmguCiYjNDM7QlBGX0NGTEFHUyA9IC1nIC1XYWxsIC1XZXJyb3IgLURfX1RBUkdFVF9BUkNIXyQoU1JDQVJDSCkgJChNRU5ESUFOKQlcCiYjNDM7CSAgICAgLUkkKElOQ0xVREVfRElSKSAtSSQoQVBJRElSKQkJCQlcCiYjNDM7CSAgICAgLXN0ZD1nbnUxMQkJCQkJCQlcCiYjNDM7CSAgICAgLWZuby1zdHJpY3QtYWxpYXNpbmcJCQkJCVwKJiM0MzsJICAgICAtZm1zLWV4dGVuc2lvbnMgLVduby1taWNyb3NvZnQtYW5vbi10YWcJCQlcCiYjNDM7CSAgICAgLVduby1jb21wYXJlLWRpc3RpbmN0LXBvaW50ZXItdHlwZXMJCQlcCiYjNDM7CSAgICAgJChDTEFOR19TWVNfSU5DTFVERVMpICQoQlBGX0VYVFJBX0NGTEFHUykKJiM0MzsKJiM0MzsjICQxID0gc291cmNlLCAkMiA9IG9iamVjdC4gLU1NRCAtTVAgdHJhY2tzIG5vbi1zeXN0ZW0gaGVhZGVycy4KJiM0MztkZWZpbmUgbGliX2JwZl9idWlsZF9ydWxlCiYjNDM7CSQoY2FsbCBtc2csQ0xORy1CUEYsLCQyKQomIzQzOwkkKFEpJChDTEFORykgJChCUEZfQ0ZMQUdTKSAtTzIgLS10YXJnZXQ9YnBmIC1tY3B1PSQobGliX2JwZl9jbGFuZ19jcHUpIFwKJiM0MzsJCS1NTUQgLU1QIC1jICQxIC1vICQyCiYjNDM7ZW5kZWYKJiM0MzsKJiM0MzsjIC0tLS0gb3V0cHV0IGZvbGRlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzO0JQRl9PQkpfRElSICA/PSAkKE9VVFBVVCkKJiM0MztCUEZfU0tFTF9ESVIgPz0gJChPVVRQVVQpCiYjNDM7IyBSZWplY3QgZW1wdHkgZGlyZWN0b3JpZXMgYmVmb3JlIGNsZWFudXAgZ2xvYnMgY2FuIHJlYWNoIHRoZSBmaWxlc3lzdGVtIHJvb3QuCiYjNDM7aWZlcSAoJChzdHJpcCAkKEJQRl9PQkpfRElSKSksKQomIzQzOyQoZXJyb3IgbGliLmJwZi5tazogQlBGX09CSl9ESVIgaXMgZW1wdHk7IHNldCBpdCBhZnRlciAmIzM0O2luY2x1ZGUgLi4vbGliLm1rJiMzNDspCiYjNDM7ZW5kaWYKJiM0MztpZmVxICgkKHN0cmlwICQoQlBGX1NLRUxfRElSKSksKQomIzQzOyQoZXJyb3IgbGliLmJwZi5tazogQlBGX1NLRUxfRElSIGlzIGVtcHR5OyBzZXQgaXQgYWZ0ZXIgJiMzNDtpbmNsdWRlIC4uL2xpYi5tayYjMzQ7KQomIzQzO2VuZGlmCiYjNDM7CiYjNDM7IyAtLS0tIGJ1aWxkIGZvbGRlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJiM0MztsaWJfYnBmX21ha2VfZGlycyA6PSAkKHNvcnQgJChsaWJfYnBmX2J1aWxkX2RpcikvbGliYnBmCQkJXAomIzQzOwkJCSAgICAkKGxpYl9icGZfaG9zdF9idWlsZF9kaXIpL2xpYmJwZgkJXAomIzQzOwkJCSAgICAkKGxpYl9icGZfaG9zdF9idWlsZF9kaXIpL2JwZnRvb2wJCVwKJiM0MzsJCQkgICAgJChsaWJfYnBmX2luY2x1ZGVfZGlyKQkJCVwKJiM0MzsJCQkgICAgJChmaWx0ZXItb3V0ICQoT1VUUFVUKSwkKEJQRl9PQkpfRElSKSAkKEJQRl9TS0VMX0RJUikpKQomIzQzOyQobGliX2JwZl9tYWtlX2RpcnMpOgomIzQzOwkkKGNhbGwgbXNnLE1LRElSLCwkQCkKJiM0MzsJJChRKW1rZGlyIC1wICRACiYjNDM7CiYjNDM7IyAtLS0tIHRhcmdldCBsaWJicGYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJiM0MzsjIFBhc3MgdW5leHBvcnRlZCB0b29sY2hhaW4gc2V0dGluZ3MgYW5kIGJ1aWxkIFBJQyBmb3IgUElFIHRlc3QgYmluYXJpZXMuCiYjNDM7IyBsaWJicGYgY29uc3VtZXMgVVNFUkNGTEFHUyB0aHJvdWdoIEVYVFJBX0NGTEFHUy4KJiM0MzskKEJQRk9CSik6ICQobGliX2JwZl9zb3VyY2VzKSAkKGxpYl9icGZfYXBpX2RpcikvbGludXgvYnBmLmggXAomIzQzOwkgICB8ICQobGliX2JwZl9idWlsZF9kaXIpL2xpYmJwZgomIzQzOwkkKFEpJChNQUtFKSAkKGxpYl9icGZfc3VibWFrZV9leHRyYXMpIC1DICQobGliX2JwZl9kaXIpIFwKJiM0MzsJCSAgICBPVVRQVVQ9JChsaWJfYnBmX2J1aWxkX2RpcikvbGliYnBmLyBcCiYjNDM7CQkgICAgQVJDSD0kKEFSQ0gpIENST1NTX0NPTVBJTEU9JChDUk9TU19DT01QSUxFKSBDQz0mIzM0OyQoQ0MpJiMzNDsgICAgIFwKJiM0MzsJCSAgICBFWFRSQV9DRkxBR1M9JiMzOTstZyAkKE9QVF9GTEFHUykgLWZQSUMgJChFWFRSQV9DRkxBR1MpICQoVVNFUkNGTEFHUykmIzM5OyBcCiYjNDM7CQkgICAgREVTVERJUj0kKGxpYl9icGZfc2NyYXRjaF9kaXIpIHByZWZpeD0gYWxsIGluc3RhbGxfaGVhZGVycwomIzQzOwomIzQzOyMgLS0tLSBob3N0IGxpYmJwZiwgb25seSB3aGVuIHRoZSB0YXJnZXQgZGlmZmVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7aWZuZXEgKCQoQlBGT0JKKSwkKGxpYl9icGZfaG9zdF9vYmopKQomIzQzOyQobGliX2JwZl9ob3N0X29iaik6ICQobGliX2JwZl9zb3VyY2VzKSAkKGxpYl9icGZfYXBpX2RpcikvbGludXgvYnBmLmggXAomIzQzOwkJfCAkKGxpYl9icGZfaG9zdF9idWlsZF9kaXIpL2xpYmJwZgomIzQzOwkkKFEpJChNQUtFKSAkKGxpYl9icGZfc3VibWFrZV9leHRyYXMpIC1DICQobGliX2JwZl9kaXIpIFwKJiM0MzsJCSAgICBBUkNIPSBDUk9TU19DT01QSUxFPSBcCiYjNDM7CQkgICAgT1VUUFVUPSQobGliX2JwZl9ob3N0X2J1aWxkX2RpcikvbGliYnBmLyBcCiYjNDM7CQkgICAgQ0M9JiMzNDskKEhPU1RDQykmIzM0OyBMRD0mIzM0OyQoSE9TVExEKSYjMzQ7IFwKJiM0MzsJCSAgICBFWFRSQV9DRkxBR1M9JiMzOTstZyAkKE9QVF9GTEFHUykgJChFWFRSQV9DRkxBR1MpJiMzOTsgXAomIzQzOwkJICAgIERFU1RESVI9JChsaWJfYnBmX2hvc3Rfc2NyYXRjaF9kaXIpIHByZWZpeD0gYWxsIGluc3RhbGxfaGVhZGVycwomIzQzO2VuZGlmCiYjNDM7CiYjNDM7IyAtLS0tIGhvc3QgYnBmdG9vbCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJiM0MzskKERFRkFVTFRfQlBGVE9PTCk6ICQod2lsZGNhcmQgJChsaWJfYnBmX2JwZnRvb2xfZGlyKS8qLltjaF0gXAomIzQzOwkJCQkgJChsaWJfYnBmX2JwZnRvb2xfZGlyKS9NYWtlZmlsZSkgXAomIzQzOwkJICAgICQobGliX2JwZl9ob3N0X29iaikgfCAkKGxpYl9icGZfaG9zdF9idWlsZF9kaXIpL2JwZnRvb2wKJiM0MzsJJChRKSQoTUFLRSkgJChsaWJfYnBmX3N1Ym1ha2VfZXh0cmFzKSAtQyAkKGxpYl9icGZfYnBmdG9vbF9kaXIpIFwKJiM0MzsJCSAgICBBUkNIPSBDUk9TU19DT01QSUxFPSBDQz0mIzM0OyQoSE9TVENDKSYjMzQ7IExEPSYjMzQ7JChIT1NUTEQpJiMzNDsgXAomIzQzOwkJICAgIEVYVFJBX0NGTEFHUz0mIzM5Oy1nICQoT1BUX0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykgJChsaWJfYnBmX2hvc3RfdXNlcl9jZmxhZ3MpJiMzOTsgXAomIzQzOwkJICAgIEVYVFJBX0xERkxBR1M9JiMzOTskKEVYVFJBX0xERkxBR1MpJiMzOTsJCSAgXAomIzQzOwkJICAgIE9VVFBVVD0kKGxpYl9icGZfaG9zdF9idWlsZF9kaXIpL2JwZnRvb2wvCSAgXAomIzQzOwkJICAgIExJQkJQRl9PVVRQVVQ9JChsaWJfYnBmX2hvc3RfYnVpbGRfZGlyKS9saWJicGYvIFwKJiM0MzsJCSAgICBMSUJCUEZfREVTVERJUj0kKGxpYl9icGZfaG9zdF9zY3JhdGNoX2RpcikvCSAgXAomIzQzOwkJICAgIHByZWZpeD0gREVTVERJUj0kKGxpYl9icGZfaG9zdF9zY3JhdGNoX2RpcikvIGluc3RhbGwtYmluCiYjNDM7CiYjNDM7IyAtLS0tIGJ1aWxkIHZtbGludXguaCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJiM0MztsaWJfYnBmX3ZtbGludXhfaCAgICAgOj0gJChJTkNMVURFX0RJUikvdm1saW51eC5oCiYjNDM7bGliX2JwZl92bWxpbnV4X3N0YW1wIDo9ICQoSU5DTFVERV9ESVIpL3ZtbGludXguaC5zdGFtcAomIzQzOwomIzQzOyMgUHJlc2VydmUgdm1saW51eC5oJiMzOTtzIHRpbWVzdGFtcCB3aGVuIGl0cyBjb250ZW50cyBkbyBub3QgY2hhbmdlLgomIzQzO2lmZXEgKCQod2lsZGNhcmQgJChsaWJfYnBmX3ZtbGludXhfaCkpLCkKJiM0MzsjIFJlZ2VuZXJhdGUgaWYgdGhlIGhlYWRlciBpcyBtaXNzaW5nIGJ1dCBpdHMgc3RhbXAgcmVtYWlucy4KJiM0MzsuUEhPTlk6ICQobGliX2JwZl92bWxpbnV4X3N0YW1wKQomIzQzO2VuZGlmCiYjNDM7CiYjNDM7IyBVc2UgYSBub3JtYWwgZWRnZSBzbyBkZXBlbmRlbnRzIHNlZSBhIGNoYW5nZWQgaGVhZGVyIGluIHRoZSBzYW1lIG1ha2UgcnVuLgomIzQzOyQobGliX2JwZl92bWxpbnV4X2gpOiAkKGxpYl9icGZfdm1saW51eF9zdGFtcCkgOwomIzQzOwomIzQzOyQobGliX2JwZl92bWxpbnV4X3N0YW1wKTogJChsaWJfYnBmX3ZtbGludXhfZGVwcykgfCAkKElOQ0xVREVfRElSKQomIzQzO2lmZXEgKCQoVk1MSU5VWF9IKSwpCiYjNDM7CSQoY2FsbCBtc2csR0VOLCwkKGxpYl9icGZfdm1saW51eF9oKSkKJiM0MzsJJChRKXRlc3QgLW4gJiMzNDskKFZNTElOVVhfQlRGKSYjMzQ7IHx8IHsgXAomIzQzOwkJZWNobyAmIzM0O2xpYi5icGYubWs6IG5vIHZtbGludXggYXQgYW55IG9mIFwmIzM0OyQoVk1MSU5VWF9CVEZfUEFUSFMpXCYjMzQ7JiMzNDsgJmd0OyZhbXA7MjsgXAomIzQzOwkJZXhpdCAxOyB9CiYjNDM7CSQoUSkkKEJQRlRPT0wpIGJ0ZiBkdW1wIGZpbGUgJChWTUxJTlVYX0JURikgZm9ybWF0IGMgJmd0OyAkQC50bXAKJiM0MztlbHNlCiYjNDM7CSQoY2FsbCBtc2csQ1AsLCQobGliX2JwZl92bWxpbnV4X2gpKQomIzQzOwkkKFEpY3AgJiMzNDskKFZNTElOVVhfSCkmIzM0OyAkQC50bXAKJiM0MztlbmRpZgomIzQzOwkkKFEpY21wIC1zICRALnRtcCAkKGxpYl9icGZfdm1saW51eF9oKSB8fCBtdiAkQC50bXAgJChsaWJfYnBmX3ZtbGludXhfaCkKJiM0MzsJJChRKXJtIC1mICRALnRtcAomIzQzOwkkKFEpdG91Y2ggJEAKJiM0MzsKJiM0MzsjIC0tLS0gQlBGIG9iamVjdHMgYW5kIHNrZWxldG9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzO0JQRl9QUk9HX0VYVCA/PSAuYnBmLmMKJiM0MzsjIEVhY2ggc291cmNlIG11c3QgZW5kIHdpdGggQlBGX1BST0dfRVhUIHNvIE1ha2UgY2FuIHJlbW92ZSB0aGF0IGVuZGluZy4KJiM0MztsaWJfYnBmX2JhZF9zcmNzIDo9ICQoZmlsdGVyLW91dCAlJChCUEZfUFJPR19FWFQpLCQoQlBGX1NSQ1MpKQomIzQzO2lmbmVxICgkKGxpYl9icGZfYmFkX3NyY3MpLCkKJiM0MzskKGVycm9yIGxpYi5icGYubWs6IEJQRl9TUkNTIGVudHJpZXMgbXVzdCBlbmQgaW4gJChCUEZfUFJPR19FWFQpOiAkKGxpYl9icGZfYmFkX3NyY3MpKQomIzQzO2VuZGlmCiYjNDM7bGliX2JwZl9zdGVtcyA6PSAkKHBhdHN1YnN0ICUkKEJQRl9QUk9HX0VYVCksJSwkKG5vdGRpciAkKEJQRl9TUkNTKSkpCiYjNDM7IyBUaGUgc3RlbSBiZWNvbWVzIHRoZSBza2VsZXRvbiYjMzk7cyBDIG5hbWU7IHJlamVjdCBkb3RzIGFuZCBoeXBoZW5zLgomIzQzO2xpYl9icGZfYmFkX3N0ZW1zIDo9ICQoc3RyaXAgJChmb3JlYWNoIHMsJChsaWJfYnBmX3N0ZW1zKSwJCQlcCiYjNDM7CQkJJChpZiAkKGZpbmRzdHJpbmcgLiwkKHMpKSQoZmluZHN0cmluZyAtLCQocykpLCQocykpKSkKJiM0MztpZm5lcSAoJChsaWJfYnBmX2JhZF9zdGVtcyksKQomIzQzOyQoZXJyb3IgbGliLmJwZi5tazogQlBGX1NSQ1MgYmFzZW5hbWVzIG11c3Qgbm90IGNvbnRhaW4gJiMzOTsuJiMzOTsgb3IgJiMzOTstJiMzOTs6ICQobGliX2JwZl9iYWRfc3RlbXMpKQomIzQzO2VuZGlmCiYjNDM7IyBPdXRwdXQgbmFtZXMgb21pdCBkaXJlY3Rvcmllcywgc28gcmVqZWN0IGR1cGxpY2F0ZSBzdGVtcy4KJiM0MztpZm5lcSAoJCh3b3JkcyAkKGxpYl9icGZfc3RlbXMpKSwkKHdvcmRzICQoc29ydCAkKGxpYl9icGZfc3RlbXMpKSkpCiYjNDM7JChlcnJvciBsaWIuYnBmLm1rOiBCUEZfU1JDUyBoYXMgY29sbGlkaW5nIGJhc2VuYW1lczogJChCUEZfU1JDUykpCiYjNDM7ZW5kaWYKJiM0MztCUEZfU0tFTF9FWFQgICAgPz0gLnNrZWwuaAomIzQzO2xpYl9icGZfc3Vic2tlbF9leHQgOj0gJChwYXRzdWJzdCAlc2tlbC5oLCVzdWJza2VsLmgsJChCUEZfU0tFTF9FWFQpKQomIzQzOyMgS2VlcCBza2VsZXRvbiBzdWZmaXhlcyBkaXN0aW5jdCBhbmQgY2xlYW51cCBnbG9icyBuYXJyb3cuCiYjNDM7aWZlcSAoJChsaWJfYnBmX3N1YnNrZWxfZXh0KSwkKEJQRl9TS0VMX0VYVCkpCiYjNDM7JChlcnJvciBsaWIuYnBmLm1rOiBCUEZfU0tFTF9FWFQgbXVzdCBlbmQgaW4gc2tlbC5oOiAkKEJQRl9TS0VMX0VYVCkpCiYjNDM7ZW5kaWYKJiM0MztCUEZfT0JKUyAgOj0gJChhZGRwcmVmaXggJChCUEZfT0JKX0RJUikvLCQoYWRkc3VmZml4IC5icGYubywkKGxpYl9icGZfc3RlbXMpKSkKJiM0MztCUEZfU0tFTFMgOj0gJChhZGRwcmVmaXggJChCUEZfU0tFTF9ESVIpLywkKGFkZHN1ZmZpeCAkKEJQRl9TS0VMX0VYVCksJChsaWJfYnBmX3N0ZW1zKSkpCiYjNDM7aWZuZXEgKCQoQlBGX0dFTl9TVUJTS0VMKSwpCiYjNDM7QlBGX1NVQlNLRUxTIDo9ICQoYWRkcHJlZml4ICQoQlBGX1NLRUxfRElSKS8sJChhZGRzdWZmaXggJChsaWJfYnBmX3N1YnNrZWxfZXh0KSwkKGxpYl9icGZfc3RlbXMpKSkKJiM0MztlbmRpZgomIzQzOwomIzQzOyMgVXNlIHBlci1zb3VyY2UgcnVsZXMgdG8gYXZvaWQgY2hhbmdpbmcgbm9ybWFsIC5jIGxvb2t1cC4KJiM0MzsjIFRyYWNrIHNvdXJjZSBoZWFkZXJzIGJlZm9yZSBCUEZPQkogaW5zdGFsbHMgdGhlaXIgdXBkYXRlZCBjb3BpZXMuCiYjNDM7ZGVmaW5lIGxpYl9icGZfb2JqX3J1bGUKJiM0MzskKEJQRl9PQkpfRElSKS8kKHBhdHN1YnN0ICUkKEJQRl9QUk9HX0VYVCksJSwkKG5vdGRpciAkKDEpKSkuYnBmLm86ICQoMSkJXAomIzQzOwkJJChCUEZfRVhUUkFfSERSUykgJChsaWJfYnBmX2hlYWRlcl9zb3VyY2VzKQkJCVwKJiM0MzsJCSQoSU5DTFVERV9ESVIpL3ZtbGludXguaCB8ICQoQlBGX09CSl9ESVIpICQoQlBGT0JKKQomIzQzOwkkJChjYWxsIGxpYl9icGZfYnVpbGRfcnVsZSwkJCZsdDssJCRAKQomIzQzO2VuZGVmCiYjNDM7JChmb3JlYWNoIHNyYywkKEJQRl9TUkNTKSwkKGV2YWwgJChjYWxsIGxpYl9icGZfb2JqX3J1bGUsJChzcmMpKSkpCiYjNDM7CiYjNDM7IyBHZW5lcmF0ZSBib3RoIGhlYWRlcnMgdG9nZXRoZXIgc28gZWl0aGVyIG1pc3NpbmcgdGFyZ2V0IHJlYnVpbGRzIHRoZSBwYWlyLgomIzQzO2xpYl9icGZfc2tlbF90YXJnZXRzIDo9ICQoQlBGX1NLRUxfRElSKS8lJChCUEZfU0tFTF9FWFQpCiYjNDM7aWZuZXEgKCQoQlBGX0dFTl9TVUJTS0VMKSwpCiYjNDM7bGliX2JwZl9za2VsX3RhcmdldHMgJiM0Mzs9ICQoQlBGX1NLRUxfRElSKS8lJChsaWJfYnBmX3N1YnNrZWxfZXh0KQomIzQzO2VuZGlmCiYjNDM7CiYjNDM7IyBMaW5rIHRocmVlIHRpbWVzIGFuZCByZXF1aXJlIHRoZSBmaW5hbCB0d28gb2JqZWN0cyB0byBtYXRjaC4KJiM0MzskKGxpYl9icGZfc2tlbF90YXJnZXRzKTogJChCUEZfT0JKX0RJUikvJS5icGYubyAkKEJQRlRPT0wpIHwgJChCUEZfU0tFTF9ESVIpCiYjNDM7CSQoY2FsbCBtc2csR0VOLVNLRUwsLCQoQlBGX1NLRUxfRElSKS8kKiQoQlBGX1NLRUxfRVhUKSkKJiM0MzsJJChRKSQoQlBGVE9PTCkgZ2VuIG9iamVjdCAkKCZsdDs6Lm89LmxpbmtlZDEubykgJCZsdDsKJiM0MzsJJChRKSQoQlBGVE9PTCkgZ2VuIG9iamVjdCAkKCZsdDs6Lm89LmxpbmtlZDIubykgJCgmbHQ7Oi5vPS5saW5rZWQxLm8pCiYjNDM7CSQoUSkkKEJQRlRPT0wpIGdlbiBvYmplY3QgJCgmbHQ7Oi5vPS5saW5rZWQzLm8pICQoJmx0Ozoubz0ubGlua2VkMi5vKQomIzQzOwkkKFEpZGlmZiAkKCZsdDs6Lm89LmxpbmtlZDIubykgJCgmbHQ7Oi5vPS5saW5rZWQzLm8pCiYjNDM7CSQoUSkkKEJQRlRPT0wpIGdlbiBza2VsZXRvbiAkKCZsdDs6Lm89LmxpbmtlZDMubykgbmFtZSAkKiAmZ3Q7ICQoQlBGX1NLRUxfRElSKS8kKiQoQlBGX1NLRUxfRVhUKQomIzQzO2lmbmVxICgkKEJQRl9HRU5fU1VCU0tFTCksKQomIzQzOwkkKFEpJChCUEZUT09MKSBnZW4gc3Vic2tlbGV0b24gJCgmbHQ7Oi5vPS5saW5rZWQzLm8pIG5hbWUgJCogJmd0OyAkKEJQRl9TS0VMX0RJUikvJCokKGxpYl9icGZfc3Vic2tlbF9leHQpCiYjNDM7ZW5kaWYKJiM0MzsJJChRKXJtIC1mICQoJmx0Ozoubz0ubGlua2VkMS5vKSAkKCZsdDs6Lm89LmxpbmtlZDIubykgJCgmbHQ7Oi5vPS5saW5rZWQzLm8pCiYjNDM7CiYjNDM7IyBSZWFkIHRoZSBoZWFkZXIgZGVwZW5kZW5jaWVzIHdyaXR0ZW4gYnkgLU1NRC4KJiM0MzstaW5jbHVkZSAkKEJQRl9PQkpTOi5vPS5kKQomIzQzOwomIzQzOyMgLS0tLSB2YWx1ZXMgZm9yIHRoZSB0ZXN0IE1ha2VmaWxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7IyBBZGQgdGhlIGluc3RhbGxlZCBsaWJicGYvdm1saW51eC5oIGRpcmVjdG9yeSBhbmQgdGhlIHNrZWxldG9uIGRpcmVjdG9yeS4KJiM0MztDRkxBR1MgJiM0Mzs9IC1JJChJTkNMVURFX0RJUikgLUkkKEJQRl9TS0VMX0RJUikKJiM0MzsKJiM0MzsjIEFkZCB0YXJnZXQgenN0ZCB3aGVuIGZvdW5kIGJ5IHRoZSB0YXJnZXQgcGtnLWNvbmZpZy4KJiM0MztQS0dfQ09ORklHID89ICQoQ1JPU1NfQ09NUElMRSlwa2ctY29uZmlnCiYjNDM7QlBGX0xETElCUyA6PSAkKEJQRk9CSikgLWxlbGYgLWx6CiYjNDM7aWZuZXEgKCQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWV4aXN0cyBsaWJ6c3RkIDImZ3Q7L2Rldi9udWxsICZhbXA7JmFtcDsgZWNobyB5KSwpCiYjNDM7QlBGX0xETElCUyAmIzQzOz0gLWx6c3RkCiYjNDM7ZW5kaWYKJiM0MzsKJiM0MzsjIEFkZCBza2VsZXRvbnMgYWZ0ZXIgbGliLm1rIGRlZmluZXMgYWxsLgomIzQzO2FsbDogJChCUEZfU0tFTFMpICQoQlBGX1NVQlNLRUxTKQomIzQzOwomIzQzOyMgVGhlIHNrZWxldG9uIGFscmVhZHkgZW1iZWRzIGVhY2ggQlBGIG9iamVjdCBpbiB0aGUgdGVzdCBiaW5hcnkuIFRvIGluc3RhbGwgdGhlCiYjNDM7IyBvYmplY3RzIHNlcGFyYXRlbHksIGFkZCBURVNUX0dFTl9GSUxFUyAmIzQzOz0gJChCUEZfT0JKUykuCiYjNDM7CiYjNDM7IyAkMSA9IGJpbmFyeSwgJDIgPSB0ZXN0IHNvdXJjZS4gVXNlIHRoZSBzYW1lIGNvbXBpbGUgYW5kIGxpbmsgZmxhZ3MgYXMgbGliLm1rLgomIzQzO2RlZmluZSBicGZfbGluawomIzQzOwkkKGNhbGwgbXNnLEJJTkFSWSwsJDEpCiYjNDM7CSQoUSkkKENDKSAkKENGTEFHUykgJChDUFBGTEFHUykgJChMREZMQUdTKSAkKFRBUkdFVF9BUkNIKSAkMiBcCiYjNDM7CQkkKEJQRl9MRExJQlMpICQoTERMSUJTKSAtbyAkMQomIzQzO2VuZGVmCiYjNDM7CiYjNDM7RVhUUkFfQ0xFQU4gJiM0Mzs9ICQoc29ydCAkKGxpYl9icGZfc2NyYXRjaF9kaXIpICQobGliX2JwZl9ob3N0X3NjcmF0Y2hfZGlyKSkgXAomIzQzOwkgICAgICAgJChhZGRwcmVmaXggJChCUEZfT0JKX0RJUikvLCouYnBmLm8gKi5icGYuZCAqLmxpbmtlZCoubykJXAomIzQzOwkgICAgICAgJChhZGRwcmVmaXggJChCUEZfU0tFTF9ESVIpLywqJChCUEZfU0tFTF9FWFQpICokKGxpYl9icGZfc3Vic2tlbF9leHQpKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L01ha2VmaWxlCmluZGV4IDNjZmU5MGUwZjM0ZmEuLmRkM2Y1NTk0YWYyNDAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NjaGVkX2V4dC9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvTWFrZWZpbGUKQEAgLTE0LDQ4ICYjNDM7MTQsMjkgQEAgQ1VSRElSIDo9ICQoYWJzcGF0aCAuKQogUkVQT1JPT1QgOj0gJChhYnNwYXRoIC4uLy4uLy4uLy4uKQogVE9PTFNESVIgOj0gJChSRVBPUk9PVCkvdG9vbHMKIExJQkRJUiA6PSAkKFRPT0xTRElSKS9saWIKLUJQRkRJUiA6PSAkKExJQkRJUikvYnBmCiBUT09MU0lOQ0RJUiA6PSAkKFRPT0xTRElSKS9pbmNsdWRlCi1CUEZUT09MRElSIDo9ICQoVE9PTFNESVIpL2JwZi9icGZ0b29sCi1BUElESVIgOj0gJChUT09MU0lOQ0RJUikvdWFwaQogR0VORElSIDo9ICQoUkVQT1JPT1QpL2luY2x1ZGUvZ2VuZXJhdGVkCiBHRU5IRFIgOj0gJChHRU5ESVIpL2F1dG9jb25mLmgKLVNDWFRPT0xTRElSIDo9ICQoVE9PTFNESVIpL3NjaGVkX2V4dAogU0NYVE9PTFNJTkNESVIgOj0gJChUT09MU0RJUikvc2NoZWRfZXh0L2luY2x1ZGUKIAotT1VUUFVUX0RJUiA6PSAkKE9VVFBVVCkvYnVpbGQKLU9CSl9ESVIgOj0gJChPVVRQVVRfRElSKS9vYmoKLUlOQ0xVREVfRElSIDo9ICQoT1VUUFVUX0RJUikvaW5jbHVkZQotQlBGT0JKX0RJUiA6PSAkKE9CSl9ESVIpL2xpYmJwZgotU0NYT0JKX0RJUiA6PSAkKE9CSl9ESVIpL3NjaGVkX2V4dAotQlBGT0JKIDo9ICQoQlBGT0JKX0RJUikvbGliYnBmLmEKLUxJQkJQRl9PVVRQVVQgOj0gJChPQkpfRElSKS9saWJicGYvbGliYnBmLmEKLQotREVGQVVMVF9CUEZUT09MIDo9ICQoT1VUUFVUX0RJUikvaG9zdC9zYmluL2JwZnRvb2wKLUhPU1RfT0JKX0RJUiA6PSAkKE9CSl9ESVIpL2hvc3QvYnBmdG9vbAotSE9TVF9MSUJCUEZfT1VUUFVUIDo9ICQoT0JKX0RJUikvaG9zdC9saWJicGYvCi1IT1NUX0xJQkJQRl9ERVNURElSIDo9ICQoT1VUUFVUX0RJUikvaG9zdC8KLUhPU1RfREVTVERJUiA6PSAkKE9VVFBVVF9ESVIpL2hvc3QvCi0KLVZNTElOVVhfQlRGX1BBVEhTID89ICQoaWYgJChPKSwkKE8pL3ZtbGludXgpCQkJCQlcCi0JCSAgICAgJChpZiAkKEtCVUlMRF9PVVRQVVQpLCQoS0JVSUxEX09VVFBVVCkvdm1saW51eCkJCVwKLQkJICAgICAuLi8uLi8uLi8uLi92bWxpbnV4CQkJCQlcCi0JCSAgICAgL3N5cy9rZXJuZWwvYnRmL3ZtbGludXgJCQkJCVwKLQkJICAgICAvYm9vdC92bWxpbnV4LSQoc2hlbGwgdW5hbWUgLXIpCi1WTUxJTlVYX0JURiA/PSAkKGFic3BhdGggJChmaXJzdHdvcmQgJCh3aWxkY2FyZCAkKFZNTElOVVhfQlRGX1BBVEhTKSkpKQotaWZlcSAoJChWTUxJTlVYX0JURiksKQotJChlcnJvciBDYW5ub3QgZmluZCBhIHZtbGludXggZm9yIFZNTElOVVhfQlRGIGF0IGFueSBvZiAmIzM0OyQoVk1MSU5VWF9CVEZfUEFUSFMpJiMzNDspCi1lbmRpZgomIzQzOyMgQnVpbGQgc2NoZWR1bGVyIHNrZWxldG9ucyBhbmQgc3Vic2tlbGV0b25zIHdpdGggdGhlIHNoYXJlZCBCUEYgcnVsZXMuCiYjNDM7QlBGX1NSQ1MgICAgICAgIDo9ICQod2lsZGNhcmQgKi5icGYuYykKJiM0MztCUEZfU0tFTF9FWFQgICAgOj0gLmJwZi5za2VsLmgKJiM0MztCUEZfR0VOX1NVQlNLRUwgOj0gMQomIzQzOyMgUHJlc2VydmUgdGhlIGV4aXN0aW5nIGJ1aWxkLyBsYXlvdXQuCiYjNDM7QlBGX09CSl9ESVIgIDo9ICQoT1VUUFVUKS9idWlsZC9vYmovc2NoZWRfZXh0CiYjNDM7QlBGX1NLRUxfRElSIDo9ICQoT1VUUFVUKS9idWlsZC9pbmNsdWRlCiYjNDM7U0NYT0JKX0RJUiAgIDo9ICQoQlBGX09CSl9ESVIpCiAKLUJQRlRPT0wgPz0gJChERUZBVUxUX0JQRlRPT0wpCiYjNDM7aW5jbHVkZSAuLi9saWIuYnBmLm1rCiAKIGlmbmVxICgkKHdpbGRjYXJkICQoR0VOSERSKSksKQogICBHRU5GTEFHUyA6PSAtREhBVkVfR0VOSERSCiBlbmRpZgogCiBDRkxBR1MgJiM0Mzs9IC1nIC1PMiAtcmR5bmFtaWMgLXB0aHJlYWQgLVdhbGwgLVdlcnJvciAkKEdFTkZMQUdTKQkJCVwKLQkgIC1JJChJTkNMVURFX0RJUikgLUkkKEdFTkRJUikgLUkkKExJQkRJUikJCQkJXAotCSAgLUkkKFRPT0xTSU5DRElSKSAtSSQoQVBJRElSKSAtSSQoQ1VSRElSKS9pbmNsdWRlIC1JJChTQ1hUT09MU0lOQ0RJUikKJiM0MzsJICAtSSQoR0VORElSKSAtSSQoTElCRElSKSAtSSQoVE9PTFNJTkNESVIpIC1JJChBUElESVIpCQkJXAomIzQzOwkgIC1JJChDVVJESVIpL2luY2x1ZGUgLUkkKFNDWFRPT0xTSU5DRElSKQogCiAjIFNpbGVuY2Ugc29tZSB3YXJuaW5ncyB3aGVuIGNvbXBpbGVkIHdpdGggY2xhbmcKIGlmbmVxICgkKExMVk0pLCkKQEAgLTY0LDEwMiAmIzQzOzQ1LDI2IEBAIGVuZGlmCiAKIExERkxBR1MgPSAtbGVsZiAtbHogLWxwdGhyZWFkIC1senN0ZAogCi1JU19MSVRUTEVfRU5ESUFOID0gJChzaGVsbCAkKENDKSAtZE0gLUUgLSAmbHQ7L2Rldi9udWxsIHwJCQkJXAotCQkJZ3JlcCAmIzM5O2RlZmluZSBfX0JZVEVfT1JERVJfXyBfX09SREVSX0xJVFRMRV9FTkRJQU5fXyYjMzk7KQotCi0jIEdldCBDbGFuZyYjMzk7cyBkZWZhdWx0IGluY2x1ZGVzIG9uIHRoaXMgc3lzdGVtLCBhcyBvcHBvc2VkIHRvIHRob3NlIHNlZW4gYnkKLSMgJiMzOTstdGFyZ2V0IGJwZiYjMzk7LiBUaGlzIGZpeGVzICYjMzQ7bWlzc2luZyYjMzQ7IGZpbGVzIG9uIHNvbWUgYXJjaGl0ZWN0dXJlcy9kaXN0cm9zLAotIyBzdWNoIGFzIGFzbS9ieXRlb3JkZXIuaCwgYXNtL3NvY2tldC5oLCBhc20vc29ja2lvcy5oLCBzeXMvY2RlZnMuaCBldGMuCi0jCi0jIFVzZSAmIzM5Oy1pZGlyYWZ0ZXImIzM5OzogRG9uJiMzOTt0IGludGVyZmVyZSB3aXRoIGluY2x1ZGUgbWVjaGFuaWNzIGV4Y2VwdCB3aGVyZSB0aGUKLSMgYnVpbGQgd291bGQgaGF2ZSBmYWlsZWQgYW55d2F5cy4KLWRlZmluZSBnZXRfc3lzX2luY2x1ZGVzCi0kKHNoZWxsICQoMSkgJCgyKSAtdiAtRSAtICZsdDsvZGV2L251bGwgMiZndDsmYW1wOzEgXAotCXwgc2VkIC1uICYjMzk7LyZsdDsuLi4mZ3Q7IHNlYXJjaCBzdGFydHMgaGVyZTovLC9FbmQgb2Ygc2VhcmNoIGxpc3QuL3sgc3wgXCgvLipcKXwtaWRpcmFmdGVyIFwxfHAgfSYjMzk7KSBcCi0kKHNoZWxsICQoMSkgJCgyKSAtZE0gLUUgLSAmbHQ7L2Rldi9udWxsIHwgZ3JlcCAmIzM5O19fcmlzY3ZfeGxlbiAmIzM5OyB8IGF3ayAmIzM5O3twcmludGYoJiMzNDstRF9fcmlzY3ZfeGxlbj0lZCAtRF9fQklUU19QRVJfTE9ORz0lZCYjMzQ7LCAkJDMsICQkMyl9JiMzOTspCi1lbmRlZgotCi1pZm5lcSAoJChDUk9TU19DT01QSUxFKSwpCi1DTEFOR19UQVJHRVRfQVJDSCA9IC0tdGFyZ2V0PSQobm90ZGlyICQoQ1JPU1NfQ09NUElMRTolLT0lKSkKLWVuZGlmCi0KLUNMQU5HX1NZU19JTkNMVURFUyA9ICQoY2FsbCBnZXRfc3lzX2luY2x1ZGVzLCQoQ0xBTkcpLCQoQ0xBTkdfVEFSR0VUX0FSQ0gpKQotCi1CUEZfQ0ZMQUdTID0gLWcgLURfX1RBUkdFVF9BUkNIXyQoU1JDQVJDSCkJCQkJCVwKLQkgICAgICQoaWYgJChJU19MSVRUTEVfRU5ESUFOKSwtbWxpdHRsZS1lbmRpYW4sLW1iaWctZW5kaWFuKQkJXAomIzQzOyMgUHJlc2VydmUgdGhlIHNjaGVkdWxlci1zcGVjaWZpYyBmbGFnczsgdGhlIHNoYXJlZCByZWNpcGUgYWRkcyB0YXJnZXQgZmxhZ3MuCiYjNDM7QlBGX0NGTEFHUyA9IC1nIC1EX19UQVJHRVRfQVJDSF8kKFNSQ0FSQ0gpICQoTUVORElBTikJCQkJXAogCSAgICAgLUkkKENVUkRJUikvaW5jbHVkZSAtSSQoQ1VSRElSKS9pbmNsdWRlL2JwZi1jb21wYXQJCQlcCiAJICAgICAtSSQoSU5DTFVERV9ESVIpIC1JJChBUElESVIpIC1JJChTQ1hUT09MU0lOQ0RJUikJCQlcCiAJICAgICAtSSQoUkVQT1JPT1QpL2luY2x1ZGUJCQkJCQlcCi0JICAgICAkKENMQU5HX1NZU19JTkNMVURFUykgCQkJCQkJXAomIzQzOwkgICAgICQoQ0xBTkdfU1lTX0lOQ0xVREVTKQkJCQkJCVwKIAkgICAgIC1XYWxsIC1Xbm8tY29tcGFyZS1kaXN0aW5jdC1wb2ludGVyLXR5cGVzCQkJCVwKIAkgICAgIC1Xbm8taW5jb21wYXRpYmxlLWZ1bmN0aW9uLXBvaW50ZXItdHlwZXMJCQkJXAogCSAgICAgLVduby1taWNyb3NvZnQtYW5vbi10YWcJCQkJCQlcCiAJICAgICAtZm1zLWV4dGVuc2lvbnMJCQkJCQkJXAotCSAgICAgLU8yIC1tY3B1PXYzCi0KLSMgc29ydCByZW1vdmVzIGxpYmJwZiBkdXBsaWNhdGVzIHdoZW4gbm90IGNyb3NzLWJ1aWxkaW5nCi1NQUtFX0RJUlMgOj0gJChzb3J0ICQoT0JKX0RJUikvbGliYnBmICQoT0JKX0RJUikvbGliYnBmCQkJCVwKLQkgICAgICAgJChPQkpfRElSKS9icGZ0b29sICQoT0JKX0RJUikvcmVzb2x2ZV9idGZpZHMJCQlcCi0JICAgICAgICQoSE9TVF9PQkpfRElSKSAkKElOQ0xVREVfRElSKSAkKFNDWE9CSl9ESVIpKQotCi0kKE1BS0VfRElSUyk6Ci0JJChjYWxsIG1zZyxNS0RJUiwsJEApCi0JJChRKW1rZGlyIC1wICRACi0KLSQoQlBGT0JKKTogJCh3aWxkY2FyZCAkKEJQRkRJUikvKi5bY2hdICQoQlBGRElSKS9NYWtlZmlsZSkJCQlcCi0JICAgJChBUElESVIpL2xpbnV4L2JwZi5oCQkJCQkJXAotCSAgIHwgJChPQkpfRElSKS9saWJicGYKLQkkKFEpJChNQUtFKSAkKHN1Ym1ha2VfZXh0cmFzKSAtQyAkKEJQRkRJUikgT1VUUFVUPSQoT0JKX0RJUikvbGliYnBmLwlcCi0JCSAgICBBUkNIPSQoQVJDSCkgQ0M9JiMzNDskKENDKSYjMzQ7IENST1NTX0NPTVBJTEU9JChDUk9TU19DT01QSUxFKQlcCi0JCSAgICBFWFRSQV9DRkxBR1M9JiMzOTstZyAtTzAgLWZQSUMmIzM5OwkJCQkJXAotCQkgICAgREVTVERJUj0kKE9VVFBVVF9ESVIpIHByZWZpeD0gYWxsIGluc3RhbGxfaGVhZGVycwotCi0kKERFRkFVTFRfQlBGVE9PTCk6ICQod2lsZGNhcmQgJChCUEZUT09MRElSKS8qLltjaF0gJChCUEZUT09MRElSKS9NYWtlZmlsZSkJXAotCQkgICAgJChMSUJCUEZfT1VUUFVUKSB8ICQoSE9TVF9PQkpfRElSKQotCSQoUSkkKE1BS0UpICQoc3VibWFrZV9leHRyYXMpICAtQyAkKEJQRlRPT0xESVIpCQkJCVwKLQkJICAgIEFSQ0g9IENST1NTX0NPTVBJTEU9IENDPSQoSE9TVENDKSBMRD0kKEhPU1RMRCkJCVwKLQkJICAgIEVYVFJBX0NGTEFHUz0mIzM5Oy1nIC1PMCYjMzk7CQkJCQlcCi0JCSAgICBPVVRQVVQ9JChIT1NUX09CSl9ESVIpLwkJCQkJXAotCQkgICAgTElCQlBGX09VVFBVVD0kKEhPU1RfTElCQlBGX09VVFBVVCkJCQkJXAotCQkgICAgTElCQlBGX0RFU1RESVI9JChIT1NUX0xJQkJQRl9ERVNURElSKQkJCVwKLQkJICAgIHByZWZpeD0gREVTVERJUj0kKEhPU1RfREVTVERJUikgaW5zdGFsbC1iaW4KLQotJChJTkNMVURFX0RJUikvdm1saW51eC5oOiAkKFZNTElOVVhfQlRGKSAkKEJQRlRPT0wpIHwgJChJTkNMVURFX0RJUikKLWlmZXEgKCQoVk1MSU5VWF9IKSwpCi0JJChjYWxsIG1zZyxHRU4sLCRAKQotCSQoUSkkKEJQRlRPT0wpIGJ0ZiBkdW1wIGZpbGUgJChWTUxJTlVYX0JURikgZm9ybWF0IGMgJmd0OyAkQAotZWxzZQotCSQoY2FsbCBtc2csQ1AsLCRAKQotCSQoUSljcCAmIzM0OyQoVk1MSU5VWF9IKSYjMzQ7ICRACi1lbmRpZgotCi0kKFNDWE9CSl9ESVIpLyUuYnBmLm86ICUuYnBmLmMgJChJTkNMVURFX0RJUikvdm1saW51eC5oCXwgJChCUEZPQkopICQoU0NYT0JKX0RJUikKLQkkKGNhbGwgbXNnLENMTkctQlBGLCwkKG5vdGRpciAkQCkpCi0JJChRKSQoQ0xBTkcpICQoQlBGX0NGTEFHUykgLXRhcmdldCBicGYgLWMgJCZsdDsgLW8gJEAKJiM0MzsJICAgICAkKEJQRl9FWFRSQV9DRkxBR1MpCiAKLSQoSU5DTFVERV9ESVIpLyUuYnBmLnNrZWwuaDogJChTQ1hPQkpfRElSKS8lLmJwZi5vICQoSU5DTFVERV9ESVIpL3ZtbGludXguaCAkKEJQRlRPT0wpIHwgJChJTkNMVURFX0RJUikKLQkkKGV2YWwgc2NoZWQ9JChub3RkaXIgJEApKQotCSQoY2FsbCBtc2csR0VOLVNLRUwsLCQoc2NoZWQpKQotCSQoUSkkKEJQRlRPT0wpIGdlbiBvYmplY3QgJCgmbHQ7Oi5vPS5saW5rZWQxLm8pICQmbHQ7Ci0JJChRKSQoQlBGVE9PTCkgZ2VuIG9iamVjdCAkKCZsdDs6Lm89LmxpbmtlZDIubykgJCgmbHQ7Oi5vPS5saW5rZWQxLm8pCi0JJChRKSQoQlBGVE9PTCkgZ2VuIG9iamVjdCAkKCZsdDs6Lm89LmxpbmtlZDMubykgJCgmbHQ7Oi5vPS5saW5rZWQyLm8pCi0JJChRKWRpZmYgJCgmbHQ7Oi5vPS5saW5rZWQyLm8pICQoJmx0Ozoubz0ubGlua2VkMy5vKQotCSQoUSkkKEJQRlRPT0wpIGdlbiBza2VsZXRvbiAkKCZsdDs6Lm89LmxpbmtlZDMubykgbmFtZSAkKHN1YnN0IC5icGYuc2tlbC5oLCwkKHNjaGVkKSkgJmd0OyAkQAotCSQoUSkkKEJQRlRPT0wpIGdlbiBzdWJza2VsZXRvbiAkKCZsdDs6Lm89LmxpbmtlZDMubykgbmFtZSAkKHN1YnN0IC5icGYuc2tlbC5oLCwkKHNjaGVkKSkgJmd0OyAkKEA6LnNrZWwuaD0uc3Vic2tlbC5oKQomIzQzO0VYVFJBX0NMRUFOICYjNDM7PSAkKE9VVFBVVCkvYnVpbGQKIAogIyMjIyMjIyMjIyMjIyMjIwogIyBDIHNjaGVkdWxlcnMgIwogIyMjIyMjIyMjIyMjIyMjIwogCi1vdmVycmlkZSBkZWZpbmUgQ0xFQU4KLQlybSAtcmYgJChPVVRQVVRfRElSKQotCXJtIC1mICQoVEVTVF9HRU5fUFJPR1MpCi1lbmRlZgotCi0jIEV2ZXJ5IHRlc3RjYXNlIHRha2VzIGFsbCBvZiB0aGUgQlBGIHByb2dzIGFyZSBkZXBlbmRlbmNpZXMgYnkgZGVmYXVsdC4gVGhpcwotIyBhbGxvd3MgdGVzdGNhc2VzIHRvIGxvYWQgYW55IEJQRiBzY2hlZHVsZXIsIHdoaWNoIGlzIHVzZWZ1bCBmb3IgdGVzdGNhc2VzCi0jIHRoYXQgZG9uJiMzOTt0IG5lZWQgdGhlaXIgb3duIHByb2cgdG8gcnVuIHRoZWlyIHRlc3QuCi1hbGxfdGVzdF9icGZwcm9ncyA6PSAkKGZvcmVhY2ggcHJvZywkKHdpbGRjYXJkICouYnBmLmMpLCQoSU5DTFVERV9ESVIpLyQocGF0c3Vic3QgJS5jLCUuc2tlbC5oLCQocHJvZykpKQomIzQzOyMgQnVpbGQgZXZlcnkgc2NoZWR1bGVyIGJlZm9yZSBlYWNoIHRlc3QuCiYjNDM7YWxsX3Rlc3RfYnBmcHJvZ3MgOj0gJChCUEZfU0tFTFMpCiAKIGF1dG8tdGVzdC10YXJnZXRzIDo9CQkJXAogCWNyZWF0ZV9kc3EJCQlcCkBAIC0xOTYsMjQgJiM0MzsxMDEsMjIgQEAgYXV0by10ZXN0LXRhcmdldHMgOj0JCQlcCiB0ZXN0Y2FzZS10YXJnZXRzIDo9ICQoYWRkc3VmZml4IC5vLCQoYWRkcHJlZml4ICQoU0NYT0JKX0RJUikvLCQoYXV0by10ZXN0LXRhcmdldHMpKSkKIAogJChTQ1hPQkpfRElSKS9ydW5uZXIubzogcnVubmVyLmMgfCAkKFNDWE9CSl9ESVIpICQoQlBGT0JKKQotCSQoQ0MpICQoQ0ZMQUdTKSAtYyAkJmx0OyAtbyAkQAomIzQzOwkkKGNhbGwgbXNnLENDLCwkQCkKJiM0MzsJJChRKSQoQ0MpICQoQ0ZMQUdTKSAtYyAkJmx0OyAtbyAkQAogCiAjIENyZWF0ZSBhbGwgb2YgdGhlIHRlc3QgdGFyZ2V0cyBvYmplY3QgZmlsZXMsIHdob3NlIHRlc3RjYXNlIG9iamVjdHMgd2lsbCBiZQogIyByZWdpc3RlcmVkIGludG8gdGhlIHJ1bm5lciBpbiBFTEYgY29uc3RydWN0b3JzLgotIwotIyBOb3RlIHRoYXQgd2UgbXVzdCBkbyBkb3VibGUgZXhwYW5zaW9uIGhlcmUgaW4gb3JkZXIgdG8gc3VwcG9ydCBjb25kaXRpb25hbGx5Ci0jIGNvbXBpbGluZyBCUEYgb2JqZWN0IGZpbGVzIG9ubHkgaWYgb25lIGlzIHByZXNlbnQsIGFzIHRoZSB3aWxkY2FyZCBNYWtlCi0jIGZ1bmN0aW9uIGRvZXNuJiMzOTt0IHN1cHBvcnQgdXNpbmcgaW1wbGljaXQgcnVsZXMgb3RoZXJ3aXNlLgogJCh0ZXN0Y2FzZS10YXJnZXRzKTogJChTQ1hPQkpfRElSKS8lLm86ICUuYyAkKFNDWE9CSl9ESVIpL3J1bm5lci5vICQoYWxsX3Rlc3RfYnBmcHJvZ3MpIHwgJChTQ1hPQkpfRElSKQotCSQoZXZhbCB0ZXN0PSQocGF0c3Vic3QgJS5vLCUuYywkKG5vdGRpciAkQCkpKQotCSQoQ0MpICQoQ0ZMQUdTKSAtYyAkJmx0OyAtbyAkQAomIzQzOwkkKGNhbGwgbXNnLENDLCwkQCkKJiM0MzsJJChRKSQoQ0MpICQoQ0ZMQUdTKSAtYyAkJmx0OyAtbyAkQAogCiAkKFNDWE9CSl9ESVIpL3V0aWwubzogdXRpbC5jIHwgJChTQ1hPQkpfRElSKQotCSQoQ0MpICQoQ0ZMQUdTKSAtYyAkJmx0OyAtbyAkQAomIzQzOwkkKGNhbGwgbXNnLENDLCwkQCkKJiM0MzsJJChRKSQoQ0MpICQoQ0ZMQUdTKSAtYyAkJmx0OyAtbyAkQAogCiAkKE9VVFBVVCkvcnVubmVyOiAkKFNDWE9CSl9ESVIpL3J1bm5lci5vICQoU0NYT0JKX0RJUikvdXRpbC5vICQoQlBGT0JKKSAkKHRlc3RjYXNlLXRhcmdldHMpCi0JQGVjaG8gJiMzNDskKHRlc3RjYXNlLXRhcmdldHMpJiMzNDsKLQkkKENDKSAkKENGTEFHUykgLW8gJEAgJF4gJChMREZMQUdTKQomIzQzOwkkKGNhbGwgbXNnLEJJTkFSWSwsJEApCiYjNDM7CSQoUSkkKENDKSAkKENGTEFHUykgLW8gJEAgJF4gJChMREZMQUdTKQogCiAuREVGQVVMVF9HT0FMIDo9IGFsbAogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5OTQxCgkJCQkJCQlvdXRwdXQ6IDg2CgkJCQkJCQl0aG91Z2h0czogMTAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBwYXRjaCBhbmQgZGV0ZXJtaW5lIGlmIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIEZpcnN0LCBJJiMzOTtsbCBleGFtaW5lIHRoZSBkaWZmIHRvIHNlZSB3aGF0JiMzOTtzIGJlZW4gY2hhbmdlZC4gVGhlIHBhdGNoIHRvdWNoZXMgYSBudW1iZXIgb2YgZmlsZXM6ICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwLy5naXRpZ25vcmVgLCBgTWFrZWZpbGVgLCBgY29uZmlnYCwgc2V2ZXJhbCBgLmNgIGFuZCBgLmhgIGZpbGVzIHdpdGhpbiB0aGUgYGNncm91cGAgZGlyZWN0b3J5LCBpbmNsdWRpbmcgQlBGLXJlbGF0ZWQgZmlsZXMsIGB0ZXN0X21lbWNvbnRyb2wuY2AsIGFuZCBzaW1pbGFyIGBNYWtlZmlsZWAgYW5kIGAuZ2l0aWdub3JlYCBmaWxlcyB3aXRoaW4gYGhpZGAsIGBsaWIuYnBmLm1rYCBhbmQgYHNjaGVkX2V4dGAuCgpUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoZXNlIGNoYW5nZXMgaW1wYWN0IHRoZSBrZXJuZWwgcHJvcGVyIG9yIGFyZSBjb25maW5lZCB0byB1c2VyLXNwYWNlIHRvb2xzIGFuZCB0ZXN0cy4gIEkgc2VlIHRoYXQgYWxsIHRoZSBtb2RpZmllZCBmaWxlcyBhcmUgc3RyaWN0bHkgd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvLi4uYCBoaWVyYXJjaHkuICBJIGtub3cgdGhhdCYjMzk7cyBhIGtleSBpbmRpY2F0b3IuICBOb3csIGxldCBtZSByZWZlcmVuY2UgdGhlIGd1aWRlbGluZXM6IHNlY3Rpb24gMiBkaWN0YXRlcyB3aGVuIHdlIGNhbiBzYWZlbHkgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcmVsZXZhbnQgY3JpdGVyaWEgaXM6ICAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6IC4uLiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLiYjMzQ7CgpHaXZlbiB0aGlzLCBJIGhhdmUgdG8gY29uY2x1ZGUgdGhhdCBgV29ydGhGdXp6aW5nYCBpcyBgZmFsc2VgLiAgVGhlIG1vZGlmaWVkIGZpbGVzIGFyZSBhbGwgY29udGFpbmVkIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9gLCBhbmQgaXQmIzM5O3MgY2xlYXIgbm9uZSBvZiB0aGVtIHRvdWNoIHRoZSBrZXJuZWwgY29kZS4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgbGlzdCBvZiBmaWxlcyBhZ2FpbjogSSBzY2FuIHRocm91Z2ggdGhlIGZpbGVuYW1lczogYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC8uZ2l0aWdub3JlYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9NYWtlZmlsZWAsIGFuZCBzbyBvbiwgcmlnaHQgZG93biB0byB0aGUgbGFzdCBmaWxlLCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L01ha2VmaWxlYC4gWWVwLCBldmVyeSBzaW5nbGUgZmlsZSBpcyBpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2AgZGlyZWN0b3J5LiBObyBrZXJuZWwgY29kZSBpcyBtb2RpZmllZC4gTm8gY29kZSBhZmZlY3RpbmcgYW55IG9mIHRoZSBjb3JlIGtlcm5lbCBjb21wb25lbnRzIChsaWtlIGBtbS9gLCBga2VybmVsL2AsIGBkcml2ZXJzL2AsIGBmcy9gLCBgbmV0L2AsIG9yIGBpbmNsdWRlL2ApIGlzIHRvdWNoZWQuCgpUaGVyZWZvcmUsIGJlY2F1c2UgYWxsIHRoZSBtb2RpZmljYXRpb25zIGFyZSBsaW1pdGVkIHRvIHVzZXItc3BhY2Ugc2VsZnRlc3RzIGFuZCB0aGVpciBidWlsZCBpbmZyYXN0cnVjdHVyZSwgYW5kIHRoZXkgZG9uJiMzOTt0IGFmZmVjdCB0aGUga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBtb2R1bGVzLCB0aGUgYXBwcm9wcmlhdGUgcmVzcG9uc2UgaXM6CgotICAgYFdvcnRoRnV6emluZzogZmFsc2VgCi0gICBgUmVhc29uaW5nOiBBbGwgY2hhbmdlcyBhcmUgcmVzdHJpY3RlZCB0byB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyBhbmQgc2VsZnRlc3QgYnVpbGQgaW5mcmFzdHJ1Y3R1cmUgdW5kZXIgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvLCB3aGljaCBkbyBub3QgbW9kaWZ5IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLmAKLSAgIGBGb2N1c1N5bWJvbHM6IFtdYAotICAgYEVuYWJsZUNvbmZpZ3M6IFtdYAoKSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2Agbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdCBoYXJuZXNzZXMsIHNlbGZ0ZXN0IEJQRiB0ZXN0IHByb2dyYW1zLCBhbmQgYnVpbGQgaW5mcmFzdHJ1Y3R1cmUgd2l0aGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzLy4gTm9uZSBvZiB0aGUgY2hhbmdlcyBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMsIHNvIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3QgaGFybmVzc2VzLCBzZWxmdGVzdCBCUEYgdGVzdCBwcm9ncmFtcywgYW5kIGJ1aWxkIGluZnJhc3RydWN0dXJlIHdpdGhpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8uIE5vbmUgb2YgdGhlIGNoYW5nZXMgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLCBzbyBmdXp6aW5nIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIzOjU4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMzo1ODo0NC44ODEwNzk2NTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTk2NjY5ODc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdCBoYXJuZXNzZXMsIHNlbGZ0ZXN0IEJQRiB0ZXN0IHByb2dyYW1zLCBhbmQgYnVpbGQgaW5mcmFzdHJ1Y3R1cmUgd2l0aGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzLy4gTm9uZSBvZiB0aGUgY2hhbmdlcyBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMsIHNvIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIzOjU4OjQ0Ljg4MTA4NzgyNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA0ODYyMzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzA3YjRiNWJhZmJlNmUxZWU4MjRjODJkM2JhYmEwMWU4OTg5NDAwMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAxMCAyMzo1ODo0NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC8uZ2l0aWdub3JlXFxuaW5kZXggOTUyZTQ0NDhiZjA3MC4uNTYxYTNlODkxYjk4YyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvLmdpdGlnbm9yZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC8uZ2l0aWdub3JlXFxuQEAgLTYsNyArNiwxNSBAQCB0ZXN0X2ZyZWV6ZXJcXG4gdGVzdF9odWdldGxiX21lbWNnXFxuIHRlc3Rfa2lsbFxcbiB0ZXN0X2ttZW1cXG4rdGVzdF9tZW1jZ19zdGF0X2Nyb3NzX2NwdVxcbiB0ZXN0X21lbWNvbnRyb2xcXG4gdGVzdF9waWRzXFxuIHRlc3RfenN3YXBcXG4gd2FpdF9pbm90aWZ5XFxuKyMgQXJ0aWZhY3RzIGdlbmVyYXRlZCBieSBsaWIuYnBmLm1rXFxuKy90b29sc1xcbisvaG9zdC10b29sc1xcbisqLmJwZi5vXFxuKyouYnBmLmRcXG4rKi5saW5rZWQqLm9cXG4rKi5za2VsLmhcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL01ha2VmaWxlXFxuaW5kZXggZTAxNTg0YzIxODlhYy4uY2I5OTliYzJjODc1ZSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvTWFrZWZpbGVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvTWFrZWZpbGVcXG5AQCAtMjAsOSArMjAsNDYgQEAgVEVTVF9HRU5fUFJPR1MgKz0gdGVzdF96c3dhcFxcbiBcXG4gTE9DQUxfSERSUyArPSAkKHNlbGZkaXIpL2Nsb25lMy9jbG9uZTNfc2VsZnRlc3RzLmggJChzZWxmZGlyKS9waWRmZC9waWRmZC5oXFxuIFxcbisjIFJlc29sdmUgQ2xhbmcgZWFybHkgc28gdGhlIG9wdGlvbmFsIEJQRiB0ZXN0IGNhbiBiZSBzZWxlY3RlZC5cXG4raWZuZXEgKCQoZmlsdGVyICUvLCQoTExWTSkpLClcXG4rQ0xBTkcgPz0gJChMTFZNKWNsYW5nXFxuK2Vsc2VcXG4rQ0xBTkcgPz0gY2xhbmckKGZpbHRlciAtJSwkKExMVk0pKVxcbitlbmRpZlxcbitSRUFERUxGID89ICQoQ1JPU1NfQ09NUElMRSlyZWFkZWxmXFxuK1ZNTElOVVhfQlRGX1BBVEhTID89ICQoaWYgJChPKSwkKE8pL3ZtbGludXgpXFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHQgICAgICQoaWYgJChLQlVJTERfT1VUUFVUKSwkKEtCVUlMRF9PVVRQVVQpL3ZtbGludXgpXFx0XFxcXFxcbitcXHRcXHQgICAgIC4uLy4uLy4uLy4uL3ZtbGludXhcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdCAgICAgL3N5cy9rZXJuZWwvYnRmL3ZtbGludXhcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdCAgICAgL2Jvb3Qvdm1saW51eC0kKHNoZWxsIHVuYW1lIC1yKVxcbisjIElnbm9yZSBFTEYgaW1hZ2VzIHdpdGhvdXQgLkJURjsgcmF3IHN5c2ZzIEJURiBuZWVkcyBubyBjaGVjay5cXG4rVk1MSU5VWF9CVEYgPz0gJChhYnNwYXRoICQoZmlyc3R3b3JkICQoZm9yZWFjaCB2LCQod2lsZGNhcmQgJChWTUxJTlVYX0JURl9QQVRIUykpLFxcXFxcXG4rXFx0XFx0ICQoaWYgJChmaWx0ZXIgL3N5cy9rZXJuZWwvYnRmLyUsJCh2KSksJCh2KSxcXFxcXFxuK1xcdFxcdCAgICQoaWYgJChzaGVsbCAkKFJFQURFTEYpIC1TIFxcXCIkKHYpXFxcIiAyXFx1MDAzZS9kZXYvbnVsbCB8IGdyZXAgLUYgLkJURiksJCh2KSkpKSkpXFxuKyMgQWNjZXB0IGVpdGhlciBhIHN1cHBsaWVkIGhlYWRlciBvciB1c2FibGUgQlRGLlxcbitIQVZFX0JQRiA6PSAkKGFuZCAkKG9yICQoVk1MSU5VWF9IKSwkKFZNTElOVVhfQlRGKSksXFx0XFx0XFx0XFxcXFxcbitcXHRcXHQgICQoc2hlbGwgY29tbWFuZCAtdiAkKENMQU5HKSAyXFx1MDAzZS9kZXYvbnVsbCkpXFxuK1xcbitpZm5lcSAoJChIQVZFX0JQRiksKVxcbitURVNUX0dFTl9QUk9HUyArPSB0ZXN0X21lbWNnX3N0YXRfY3Jvc3NfY3B1XFxuK0JQRl9TUkNTIDo9IG1lbWNnX3N0YXRfY3Jvc3NfY3B1LmJwZi5jXFxuKyMgUmVwbGFjZSBsaWIubWsncyBsaW5rIHJ1bGUgYmVsb3cuXFxuK09WRVJSSURFX1RBUkdFVFMgOj0gMVxcbitlbmRpZlxcbitcXG4gaW5jbHVkZSAuLi9saWIubWtcXG4gaW5jbHVkZSBsaWIvbGliY2dyb3VwLm1rXFxuIFxcbitpZm5lcSAoJChIQVZFX0JQRiksKVxcbitpbmNsdWRlIC4uL2xpYi5icGYubWtcXG4rXFxuKyMgUmVzdG9yZSBsaWIubWsncyBydWxlIGZvciBub24tQlBGIHRlc3RzLlxcbitMT0NBTF9IRFJTICs9ICQoc2VsZmRpcikva3NlbGZ0ZXN0X2hhcm5lc3MuaCAkKHNlbGZkaXIpL2tzZWxmdGVzdC5oXFxuKyQoT1VUUFVUKS8lOiAlLmMgJChMT0NBTF9IRFJTKVxcbitcXHQkKGNhbGwgbXNnLENDLCwkQClcXG4rXFx0JChRKSQoTElOSy5jKSAkKGZpbHRlci1vdXQgJChMT0NBTF9IRFJTKSwkXikgJChMRExJQlMpIC1vICRAXFxuK2VuZGlmXFxuK1xcbiAkKE9VVFBVVCkvdGVzdF9jb3JlOiAkKExJQkNHUk9VUF9PKVxcbiAkKE9VVFBVVCkvdGVzdF9jcHU6ICQoTElCQ0dST1VQX08pXFxuICQoT1VUUFVUKS90ZXN0X2NwdXNldDogJChMSUJDR1JPVVBfTylcXG5AQCAtMzMsMyArNzAsMTIgQEAgJChPVVRQVVQpL3Rlc3Rfa21lbTogJChMSUJDR1JPVVBfTylcXG4gJChPVVRQVVQpL3Rlc3RfbWVtY29udHJvbDogJChMSUJDR1JPVVBfTylcXG4gJChPVVRQVVQpL3Rlc3RfcGlkczogJChMSUJDR1JPVVBfTylcXG4gJChPVVRQVVQpL3Rlc3RfenN3YXA6ICQoTElCQ0dST1VQX08pXFxuK1xcbitpZm5lcSAoJChIQVZFX0JQRiksKVxcbisjIEtlZXAgaW4tdHJlZSBVQVBJIGhlYWRlcnMgcHJpdmF0ZSB0byB0aGUgQlBGIHRlc3QuXFxuKyQoT1VUUFVUKS90ZXN0X21lbWNnX3N0YXRfY3Jvc3NfY3B1OiBwcml2YXRlIENGTEFHUyArPSAtSSQodG9wX3NyY2RpcikvdG9vbHMvaW5jbHVkZS91YXBpXFxuKyMgTGluayBjZ3JvdXBfdXRpbCBhbmQgdGhlIHNrZWxldG9uIGFnYWluc3QgdGhlIGluLXRyZWUgbGliYnBmLlxcbiskKE9VVFBVVCkvdGVzdF9tZW1jZ19zdGF0X2Nyb3NzX2NwdTogdGVzdF9tZW1jZ19zdGF0X2Nyb3NzX2NwdS5jIFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0JChCUEZfU0tFTFMpICQoTElCQ0dST1VQX08pICQoQlBGT0JKKVxcbitcXHQkKGNhbGwgYnBmX2xpbmssJEAsJFxcdTAwM2MgJChMSUJDR1JPVVBfTykpXFxuK2VuZGlmXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvY29uZmlnXFxuaW5kZXggMzlmOTc5NjkwZGQzYi4uMWY1ODVlZDlhNTk2NyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvY29uZmlnXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2NvbmZpZ1xcbkBAIC00LDMgKzQsOCBAQCBDT05GSUdfQ0dST1VQX0ZSRUVaRVI9eVxcbiBDT05GSUdfQ0dST1VQX1NDSEVEPXlcXG4gQ09ORklHX01FTUNHPXlcXG4gQ09ORklHX1BBR0VfQ09VTlRFUj15XFxuK0NPTkZJR19CUEY9eVxcbitDT05GSUdfQlBGX1NZU0NBTEw9eVxcbitDT05GSUdfQlBGX0VWRU5UUz15XFxuK0NPTkZJR19ERUJVR19JTkZPX0JURj15XFxuK0NPTkZJR19ERUJVR19JTkZPX0RXQVJGND15XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9saWIvY2dyb3VwX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9saWIvY2dyb3VwX3V0aWwuY1xcbmluZGV4IDI1OTZjMTJjZDg2NDUuLmNhMTJkNzk0YzA5MjEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9jZ3JvdXBfdXRpbC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9jZ3JvdXBfdXRpbC5jXFxuQEAgLTU0LDYgKzU0LDg4IEBAIHNzaXplX3Qgd3JpdGVfdGV4dChjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNzaXplX3QgbGVuKVxcbiBcXHRyZXR1cm4gbGVuIFxcdTAwM2MgMCA/IC1lcnJubyA6IGxlbjtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGNnX2dldF9pZCAtIHJldHVybiBhIGNncm91cCdzIGtlcm5mcyBJRFxcbisgKiBAY2dyb3VwOiBhYnNvbHV0ZSBjZ3JvdXAgcGF0aFxcbisgKlxcbisgKiBUaGlzIGlzIGNncnAtXFx1MDAzZWtuLVxcdTAwM2VpZCwgbm90IHN0X2luby5cXG4rICpcXG4rICogUmV0dXJuOiBJRCBvciAwIG9uIGZhaWx1cmUuXFxuKyAqL1xcbit1bnNpZ25lZCBsb25nIGxvbmcgY2dfZ2V0X2lkKGNvbnN0IGNoYXIgKmNncm91cClcXG4re1xcbitcXHR1bmlvbiB7XFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgbG9uZyBpZDtcXG4rXFx0XFx0dW5zaWduZWQgY2hhciByYXdbOF07XFxuK1xcdH0gaGFuZGxlO1xcbitcXHRzdHJ1Y3QgZmlsZV9oYW5kbGUgKmZocCwgKmZocDI7XFxuK1xcdGludCBtb3VudF9pZCwgZmhzaXplLCBlcnI7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbG9uZyByZXQgPSAwO1xcbitcXG4rXFx0ZmhzaXplID0gc2l6ZW9mKCpmaHApO1xcbitcXHRmaHAgPSBjYWxsb2MoMSwgZmhzaXplKTtcXG4rXFx0aWYgKCFmaHApXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0LyogVGhlIGZhaWxlZCBwcm9iZSByZXBvcnRzIHRoZSBjZ3JvdXBmcyBoYW5kbGUgc2l6ZS4gKi9cXG4rXFx0ZXJyID0gbmFtZV90b19oYW5kbGVfYXQoQVRfRkRDV0QsIGNncm91cCwgZmhwLCBcXHUwMDI2bW91bnRfaWQsIDApO1xcbitcXHRpZiAoZXJyIFxcdTAwM2U9IDAgfHwgZmhwLVxcdTAwM2VoYW5kbGVfYnl0ZXMgIT0gOClcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRmaHNpemUgPSBzaXplb2YoKmZocCkgKyBmaHAtXFx1MDAzZWhhbmRsZV9ieXRlcztcXG4rXFx0ZmhwMiA9IHJlYWxsb2MoZmhwLCBmaHNpemUpO1xcbitcXHRpZiAoIWZocDIpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRmaHAgPSBmaHAyO1xcbitcXG4rXFx0aWYgKG5hbWVfdG9faGFuZGxlX2F0KEFUX0ZEQ1dELCBjZ3JvdXAsIGZocCwgXFx1MDAyNm1vdW50X2lkLCAwKSBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0bWVtY3B5KGhhbmRsZS5yYXcsIGZocC1cXHUwMDNlZl9oYW5kbGUsIDgpO1xcbitcXHRyZXQgPSBoYW5kbGUuaWQ7XFxuK291dDpcXG4rXFx0ZnJlZShmaHApO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisvKipcXG4rICogY2dfdG91Y2hfcGFnZXMgLSBmYXVsdCBldmVyeSBwYWdlIGluIGEgcmVnaW9uXFxuKyAqIEBidWY6IHN0YXJ0IG9mIHRoZSByZWdpb25cXG4rICogQHNpemU6IGxlbmd0aCBvZiB0aGUgcmVnaW9uIGluIGJ5dGVzXFxuKyAqXFxuKyAqIFBhZ2VzIGFyZSBjaGFyZ2VkIHRvIHRoZSBjYWxsZXIncyBjZ3JvdXAgb24gaXRzIGN1cnJlbnQgQ1BVLlxcbisgKi9cXG4rdm9pZCBjZ190b3VjaF9wYWdlcyhjaGFyICpidWYsIHNpemVfdCBzaXplKVxcbit7XFxuK1xcdGxvbmcgcGFnZV9zaXplID0gc3lzY29uZihfU0NfUEFHRVNJWkUpO1xcbitcXHRjaGFyICpwdHI7XFxuK1xcbitcXHRpZiAocGFnZV9zaXplIFxcdTAwM2M9IDApXFxuK1xcdFxcdHBhZ2Vfc2l6ZSA9IEJVRl9TSVpFO1xcbitcXG4rXFx0Zm9yIChwdHIgPSBidWY7IHB0ciBcXHUwMDNjIGJ1ZiArIHNpemU7IHB0ciArPSBwYWdlX3NpemUpXFxuK1xcdFxcdCpwdHIgPSAwO1xcbit9XFxuK1xcbisvKipcXG4rICogY2dfYWxsb2NfYW5vbiAtIGFsbG9jYXRlIGFuZCBmYXVsdCBhbm9ueW1vdXMgbWVtb3J5XFxuKyAqIEBzaXplOiBieXRlcyB0byBhbGxvY2F0ZVxcbisgKlxcbisgKiBSZXR1cm46IFJlZ2lvbiB0byBmcmVlKCksIG9yIE5VTEwuXFxuKyAqL1xcbitjaGFyICpjZ19hbGxvY19hbm9uKHNpemVfdCBzaXplKVxcbit7XFxuK1xcdGNoYXIgKmJ1ZiA9IG1hbGxvYyhzaXplKTtcXG4rXFxuK1xcdGlmICghYnVmKSB7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwibWFsbG9jKCkgZmFpbGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdGNnX3RvdWNoX3BhZ2VzKGJ1Ziwgc2l6ZSk7XFxuK1xcdHJldHVybiBidWY7XFxuK31cXG4rXFxuIGNoYXIgKmNnX25hbWUoY29uc3QgY2hhciAqcm9vdCwgY29uc3QgY2hhciAqbmFtZSlcXG4ge1xcbiBcXHRzaXplX3QgbGVuID0gc3RybGVuKHJvb3QpICsgc3RybGVuKG5hbWUpICsgMjtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9pbmNsdWRlL2Nncm91cF91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbGliL2luY2x1ZGUvY2dyb3VwX3V0aWwuaFxcbmluZGV4IDhlYmIyYjRkNGVjMDcuLjY0MDc3ODAxODc4MDcgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9pbmNsdWRlL2Nncm91cF91dGlsLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbGliL2luY2x1ZGUvY2dyb3VwX3V0aWwuaFxcbkBAIC01NCw2ICs1NCw5IEBAIGV4dGVybiBzc2l6ZV90IHdyaXRlX3RleHQoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzc2l6ZV90IGxlbik7XFxuIGV4dGVybiBpbnQgY2dfZmluZF9jb250cm9sbGVyX3Jvb3QoY2hhciAqcm9vdCwgc2l6ZV90IGxlbiwgY29uc3QgY2hhciAqY29udHJvbGxlcik7XFxuIGV4dGVybiBpbnQgY2dfZmluZF91bmlmaWVkX3Jvb3QoY2hhciAqcm9vdCwgc2l6ZV90IGxlbiwgYm9vbCAqbnNkZWxlZ2F0ZSk7XFxuIGV4dGVybiBjaGFyICpjZ19uYW1lKGNvbnN0IGNoYXIgKnJvb3QsIGNvbnN0IGNoYXIgKm5hbWUpO1xcbitleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGNnX2dldF9pZChjb25zdCBjaGFyICpjZ3JvdXApO1xcbitleHRlcm4gdm9pZCBjZ190b3VjaF9wYWdlcyhjaGFyICpidWYsIHNpemVfdCBzaXplKTtcXG4rZXh0ZXJuIGNoYXIgKmNnX2FsbG9jX2Fub24oc2l6ZV90IHNpemUpO1xcbiBleHRlcm4gY2hhciAqY2dfbmFtZV9pbmRleGVkKGNvbnN0IGNoYXIgKnJvb3QsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBpbmRleCk7XFxuIGV4dGVybiBjaGFyICpjZ19jb250cm9sKGNvbnN0IGNoYXIgKmNncm91cCwgY29uc3QgY2hhciAqY29udHJvbCk7XFxuIGV4dGVybiBpbnQgY2dfY3JlYXRlKGNvbnN0IGNoYXIgKmNncm91cCk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9tZW1jZ19zdGF0X2Nyb3NzX2NwdS5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9tZW1jZ19zdGF0X2Nyb3NzX2NwdS5icGYuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZmZmM2I5MjU2YWEzOVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbWVtY2dfc3RhdF9jcm9zc19jcHUuYnBmLmNcXG5AQCAtMCwwICsxLDEwMSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXFxuKyNkZWZpbmUgQlBGX05PX0tGVU5DX1BST1RPVFlQRVNcXG4rI2luY2x1ZGUgXFx1MDAzY3ZtbGludXguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9jb3JlX3JlYWQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcIm1lbWNnX3N0YXRfY3Jvc3NfY3B1LmhcXFwiXFxuK1xcbitjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG4rXFxuKy8qIEVuc3VyZSB0aGUgdXBwZXItYm91bmQgY2hlY2tzIGFsc28gcmVqZWN0IG5lZ2F0aXZlIEJQRiBhcmd1bWVudHMuICovXFxuK19TdGF0aWNfYXNzZXJ0KChlbnVtIHZtX2V2ZW50X2l0ZW0pLTEgXFx1MDAzZT0gTlJfVk1fRVZFTlRfSVRFTVMsXFxuK1xcdCAgICAgICBcXFwibmVnYXRpdmUgdm1fZXZlbnRfaXRlbSBtdXN0IGZhaWwgdGhlIGJvdW5kcyBjaGVja1xcXCIpO1xcbitfU3RhdGljX2Fzc2VydCgoZW51bSBtZW1jZ19tZW1vcnlfZXZlbnQpLTEgXFx1MDAzZT0gTUVNQ0dfTlJfTUVNT1JZX0VWRU5UUyxcXG4rXFx0ICAgICAgIFxcXCJuZWdhdGl2ZSBtZW1jZ19tZW1vcnlfZXZlbnQgbXVzdCBmYWlsIHRoZSBib3VuZHMgY2hlY2tcXFwiKTtcXG4rXFxuKy8qIERlY2xhcmUga2Z1bmNzIHRoYXQgbWF5IGJlIGFic2VudCBmcm9tIHRoZSBidWlsZC10aW1lIHZtbGludXguaC4gKi9cXG4rc3RydWN0IG1lbV9jZ3JvdXAgKmJwZl9nZXRfbWVtX2Nncm91cChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKSBfX2tzeW07XFxuK3ZvaWQgYnBmX3B1dF9tZW1fY2dyb3VwKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykgX19rc3ltO1xcbit2b2lkIGJwZl9tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykgX19rc3ltO1xcbit1bnNpZ25lZCBsb25nIGJwZl9tZW1fY2dyb3VwX3BhZ2Vfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KSBfX2tzeW07XFxuK3Vuc2lnbmVkIGxvbmcgYnBmX21lbV9jZ3JvdXBfdm1fZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGVudW0gdm1fZXZlbnRfaXRlbSBldmVudCkgX19rc3ltO1xcbitcXG4rLyogVXNlcnNwYWNlIHJlc2l6ZXMgdGhpcyBjZ3JvdXAtSUQgbWFwIGJlZm9yZSBsb2FkLiAqL1xcbitzdHJ1Y3Qge1xcbitcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0hBU0gpO1xcbitcXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xcbitcXHRfX3R5cGUoa2V5LCBfX3U2NCk7XFxuK1xcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IG1lbWNnX3N0YXRfc25hcHNob3QpO1xcbit9IHJlc3VsdHMgU0VDKFxcXCIubWFwc1xcXCIpO1xcbitcXG4rLyogSXNvbGF0ZSBjYXBhYmlsaXR5IGZhaWx1cmVzIGZyb20gdmVyaWZpZXIgZmFpbHVyZXMgaW4gdGhlIHRlc3QgcHJvZ3JhbS4gKi9cXG4rU0VDKFxcXCJpdGVyLnMvY2dyb3VwXFxcIilcXG4raW50IG1lbWNnX2tmdW5jc19wcm9iZShzdHJ1Y3QgYnBmX2l0ZXJfX2Nncm91cCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBjZ3JvdXAgKmNncnAgPSBjdHgtXFx1MDAzZWNncm91cDtcXG4rXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbitcXG4rXFx0aWYgKCFjZ3JwKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdG1lbWNnID0gYnBmX2dldF9tZW1fY2dyb3VwKFxcdTAwMjZjZ3JwLVxcdTAwM2VzZWxmKTtcXG4rXFx0aWYgKCFtZW1jZylcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRicGZfbWVtX2Nncm91cF9mbHVzaF9zdGF0cyhtZW1jZyk7XFxuK1xcdGJwZl9tZW1fY2dyb3VwX3BhZ2Vfc3RhdGUobWVtY2csIDApO1xcbitcXHRicGZfbWVtX2Nncm91cF92bV9ldmVudHMobWVtY2csIDApO1xcbitcXHRicGZfcHV0X21lbV9jZ3JvdXAobWVtY2cpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyogU2xlZXBhYmxlIGl0ZXJhdG9yOiBmbHVzaCB0aGUgcm9vdCBvbmNlLCB0aGVuIHNuYXBzaG90IGVhY2ggY2dyb3VwLiAqL1xcbitTRUMoXFxcIml0ZXIucy9jZ3JvdXBcXFwiKVxcbitpbnQgY2dyb3VwX21lbWNnX3N0YXRfY3Jvc3NfY3B1KHN0cnVjdCBicGZfaXRlcl9fY2dyb3VwICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IGNncm91cCAqY2dycCA9IGN0eC1cXHUwMDNlY2dyb3VwO1xcbitcXHRzdHJ1Y3QgbWVtY2dfc3RhdF9zbmFwc2hvdCBzbmFwID0ge307XFxuK1xcdHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3M7XFxuK1xcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG4rXFx0aW50IGlkeF9hbm9uLCBpZHhfZmlsZSwgaWR4X3NobWVtLCBpZHhfZm1hcHBlZCwgaWR4X3BnZmF1bHQ7XFxuK1xcdF9fdTY0IGNnX2lkO1xcbitcXG4rXFx0LyogSWdub3JlIHRoZSBmaW5hbCBwb3N0LXByb2Nlc3NpbmcgY2FsbC4gKi9cXG4rXFx0aWYgKCFjZ3JwKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGNzcyA9IFxcdTAwMjZjZ3JwLVxcdTAwM2VzZWxmO1xcbitcXHRtZW1jZyA9IGJwZl9nZXRfbWVtX2Nncm91cChjc3MpO1xcbitcXHRpZiAoIW1lbWNnKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdC8qIERFU0NFTkRBTlRTX1BSRSB2aXNpdHMgdGhlIHN1YnRyZWUgcm9vdCBmaXJzdC4gKi9cXG4rXFx0aWYgKGN0eC1cXHUwMDNlbWV0YS1cXHUwMDNlc2VxX251bSA9PSAwKVxcbitcXHRcXHRicGZfbWVtX2Nncm91cF9mbHVzaF9zdGF0cyhtZW1jZyk7XFxuK1xcbitcXHRjZ19pZCA9IEJQRl9DT1JFX1JFQUQoY2dycCwga24sIGlkKTtcXG4rXFx0c25hcC5jZ3JvdXBfaWQgPSBjZ19pZDtcXG4rXFxuK1xcdGlkeF9hbm9uID0gYnBmX2NvcmVfZW51bV92YWx1ZShlbnVtIG5vZGVfc3RhdF9pdGVtLCBOUl9BTk9OX01BUFBFRCk7XFxuK1xcdGlkeF9maWxlID0gYnBmX2NvcmVfZW51bV92YWx1ZShlbnVtIG5vZGVfc3RhdF9pdGVtLCBOUl9GSUxFX1BBR0VTKTtcXG4rXFx0aWR4X3NobWVtID0gYnBmX2NvcmVfZW51bV92YWx1ZShlbnVtIG5vZGVfc3RhdF9pdGVtLCBOUl9TSE1FTSk7XFxuK1xcdGlkeF9mbWFwcGVkID0gYnBmX2NvcmVfZW51bV92YWx1ZShlbnVtIG5vZGVfc3RhdF9pdGVtLCBOUl9GSUxFX01BUFBFRCk7XFxuK1xcdGlkeF9wZ2ZhdWx0ID0gYnBmX2NvcmVfZW51bV92YWx1ZShlbnVtIHZtX2V2ZW50X2l0ZW0sIFBHRkFVTFQpO1xcbitcXG4rXFx0c25hcC5hbm9uID0gYnBmX21lbV9jZ3JvdXBfcGFnZV9zdGF0ZShtZW1jZywgaWR4X2Fub24pO1xcbitcXHRzbmFwLmZpbGUgPSBicGZfbWVtX2Nncm91cF9wYWdlX3N0YXRlKG1lbWNnLCBpZHhfZmlsZSk7XFxuK1xcdHNuYXAuc2htZW0gPSBicGZfbWVtX2Nncm91cF9wYWdlX3N0YXRlKG1lbWNnLCBpZHhfc2htZW0pO1xcbitcXHRzbmFwLmZpbGVfbWFwcGVkID0gYnBmX21lbV9jZ3JvdXBfcGFnZV9zdGF0ZShtZW1jZywgaWR4X2ZtYXBwZWQpO1xcbitcXHRzbmFwLnBnZmF1bHQgPSBicGZfbWVtX2Nncm91cF92bV9ldmVudHMobWVtY2csIGlkeF9wZ2ZhdWx0KTtcXG4rXFxuK1xcdC8qIFJlYWQgcGFnZSBjb3VudGVycyBmcm9tIHRoZSB0cnVzdGVkIHBvaW50ZXIuICovXFxuK1xcdHNuYXAudXNhZ2VfcGFnZXMgPSBCUEZfQ09SRV9SRUFEKG1lbWNnLCBtZW1vcnkudXNhZ2UuY291bnRlcik7XFxuK1xcdHNuYXAubWF4X3BhZ2VzID0gQlBGX0NPUkVfUkVBRChtZW1jZywgbWVtb3J5Lm1heCk7XFxuK1xcbitcXHRicGZfbWFwX3VwZGF0ZV9lbGVtKFxcdTAwMjZyZXN1bHRzLCBcXHUwMDI2Y2dfaWQsIFxcdTAwMjZzbmFwLCBCUEZfQU5ZKTtcXG4rXFxuK1xcdGJwZl9wdXRfbWVtX2Nncm91cChtZW1jZyk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9tZW1jZ19zdGF0X2Nyb3NzX2NwdS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL21lbWNnX3N0YXRfY3Jvc3NfY3B1LmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmY3NWUzNDFmOGNiODNcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL21lbWNnX3N0YXRfY3Jvc3NfY3B1LmhcXG5AQCAtMCwwICsxLDE4IEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cXG4rI2lmbmRlZiBfX01FTUNHX1NUQVRfQ1JPU1NfQ1BVX0hcXG4rI2RlZmluZSBfX01FTUNHX1NUQVRfQ1JPU1NfQ1BVX0hcXG4rXFxuKy8qIEZpeGVkLXdpZHRoIHNuYXBzaG90IHNoYXJlZCBieSBCUEYgYW5kIHVzZXJzcGFjZS4gKi9cXG4rc3RydWN0IG1lbWNnX3N0YXRfc25hcHNob3Qge1xcbitcXHRfX3U2NCBjZ3JvdXBfaWQ7XFxuK1xcdF9fdTY0IGFub247XFx0XFx0LyogTlJfQU5PTl9NQVBQRUQsIGJ5dGVzICovXFxuK1xcdF9fdTY0IGZpbGU7XFx0XFx0LyogTlJfRklMRV9QQUdFUywgYnl0ZXMgKi9cXG4rXFx0X191NjQgc2htZW07XFx0XFx0LyogTlJfU0hNRU0sIGJ5dGVzICovXFxuK1xcdF9fdTY0IGZpbGVfbWFwcGVkO1xcdC8qIE5SX0ZJTEVfTUFQUEVELCBieXRlcyAqL1xcbitcXHRfX3U2NCBwZ2ZhdWx0O1xcdFxcdC8qIFBHRkFVTFQsIGNvdW50ICovXFxuK1xcdF9fdTY0IHVzYWdlX3BhZ2VzO1xcdC8qIHBhZ2VfY291bnRlciBtZW1vcnkudXNhZ2UsIGluIFBBR0VTICovXFxuK1xcdF9fdTY0IG1heF9wYWdlcztcXHQvKiBwYWdlX2NvdW50ZXIgbWVtb3J5Lm1heCwgaW4gUEFHRVMgKi9cXG4rfTtcXG4rXFxuKyNlbmRpZiAvKiBfX01FTUNHX1NUQVRfQ1JPU1NfQ1BVX0ggKi9cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfbWVtY2dfc3RhdF9jcm9zc19jcHUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X21lbWNnX3N0YXRfY3Jvc3NfY3B1LmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjk2ZTRhNGE5NThlZGFcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfbWVtY2dfc3RhdF9jcm9zc19jcHUuY1xcbkBAIC0wLDAgKzEsNzU1IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cXG4rXFxuKy8qXFxuKyAqIENvbXBhcmUgbWVtY2cgQlBGIGtmdW5jcyB3aXRoIG1lbW9yeS5zdGF0IG92ZXIgYSBjaGFyZ2VkIHN1YnRyZWUuIENoYXJnZXJzXFxuKyAqIHNwcmVhZCBhbm9ueW1vdXMgbWVtb3J5IGFjcm9zcyBDUFVzIGFuZCBob2xkIGl0LiBSZWFkIEJQRiBmaXJzdCBzbyBpdHMgZmx1c2hcXG4rICogaXMgbm90IGNvbnN1bWVkIGJ5IG1lbW9yeS5zdGF0LCB0aGVuIHJlcXVpcmUgdHdvIGZpbGUgc2FtcGxlcyB0byBicmFja2V0IGVhY2hcXG4rICogQlBGIHZhbHVlLiBFYWNoIGxlYWYgbXVzdCBjb3ZlciBpdHMgY2hhcmdlOyByb290IGFub24gbXVzdCBlcXVhbCB0aGUgbGVhZiBzdW0uXFxuKyAqL1xcbisjZGVmaW5lIF9HTlVfU09VUkNFXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpbWl0cy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZmNudGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbWl0cy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW50LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzY2hlZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGxpYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy93YWl0LmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvbGliYnBmLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnRmLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJjZ3JvdXBfdXRpbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwibWVtY2dfc3RhdF9jcm9zc19jcHUuaFxcXCJcXG4rI2luY2x1ZGUgXFxcIm1lbWNnX3N0YXRfY3Jvc3NfY3B1LnNrZWwuaFxcXCJcXG4rXFxuKyNkZWZpbmUgU1VCVFJFRV9OQU1FXFx0XFx0XFxcIm1jZ194Y3B1XFxcIlxcbitcXG4rI2RlZmluZSBNRU1DR19DSEFSR0VfQkFUQ0hcXHQ2NFxcbitcXG4rI2RlZmluZSBGTFVTSF9NQVJHSU5cXHRcXHQyXFxuK1xcbisvKiBCb3VuZCB0b3RhbCBjaGFyZ2Ugb24gbGFyZ2Ugc3lzdGVtcy4gKi9cXG4rI2RlZmluZSBNQVhfVE9UQUxfQ0hBUkdFXFx0KDI1NlVMIFxcdTAwM2NcXHUwMDNjIDIwKVxcbitcXG4rLyogQm91bmQgdGhlIENQVXMgdXNlZCBieSBlYWNoIGxlYWYuICovXFxuKyNkZWZpbmUgTUFYX0NQVVNfUEVSX0xFQUZcXHQxNlxcbitcXG4rI2RlZmluZSBDSEFSR0VfV0FJVF9SRVRSSUVTXFx0NTAwXFxuK1xcbitzdGF0aWMgY2hhciByb290W1BBVEhfTUFYXTtcXG4rc3RhdGljIGNoYXIgKnN1YnRyZWVfcm9vdDtcXG4rc3RhdGljIGxvbmcgcGFnZV9zaXplO1xcbitcXG4rLyogY2dyb3VwZnMgdmFsdWVzIGluIGJ5dGVzLiAqL1xcbitzdHJ1Y3QgZmlsZV9zbmFwIHtcXG4rXFx0bG9uZyBhbm9uLCBmaWxlLCBzaG1lbSwgZmlsZV9tYXBwZWQsIHBnZmF1bHQ7XFxuK1xcdGxvbmcgY3VycmVudDtcXG4rfTtcXG4rXFxuK3N0cnVjdCBjZ19ub2RlIHtcXG4rXFx0Y2hhciBwYXRoW1BBVEhfTUFYXTtcXG4rXFx0dW5zaWduZWQgbG9uZyBsb25nIGlkO1xcbitcXHRib29sIGlzX2xlYWY7XFx0XFx0XFx0LyogaG9sZHMgYSBjaGFyZ2Ugb2YgaXRzIG93biAqL1xcbitcXHRsb25nIHByZXZpb3VzX2N1cnJlbnQ7XFx0XFx0LyogcHJldmlvdXMgbWVtb3J5LmN1cnJlbnQgcG9sbCAqL1xcbitcXHRzdHJ1Y3QgbWVtY2dfc3RhdF9zbmFwc2hvdCBicGY7XFx0LyogcmVhZCB0aHJvdWdoIHRoZSBrZnVuY3MgKi9cXG4rXFx0c3RydWN0IGZpbGVfc25hcCBmaWxlWzJdO1xcdC8qIHBvc3QtQlBGIGNncm91cGZzIHNhbXBsZXMgKi9cXG4rfTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgY2dfbm9kZSAqbm9kZXM7XFx0LyogREZTIG9yZGVyOiBhIHBhcmVudCBwcmVjZWRlcyBpdHMgY2hpbGRyZW4gKi9cXG4rc3RhdGljIGludCBuX25vZGVzO1xcbitzdGF0aWMgaW50IG5fbGVhdmVzO1xcbitcXG4rLyogLS0tLSBDUFVzIHRoaXMgdGVzdCBtYXkgcnVuIG9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXFxuK1xcbitzdGF0aWMgY3B1X3NldF90IGFsbG93ZWRfY3B1cztcXG4rc3RhdGljIGludCBuX2NwdTtcXG4rc3RhdGljIGxvbmcgbl9vbmxpbmVfY3B1O1xcbitcXG4rc3RhdGljIGludCBudGhfY3B1KGludCBuKVxcbit7XFxuK1xcdGludCBpLCBzZWVuID0gMDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBDUFVfU0VUU0laRTsgaSsrKSB7XFxuK1xcdFxcdGlmICghQ1BVX0lTU0VUKGksIFxcdTAwMjZhbGxvd2VkX2NwdXMpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0aWYgKHNlZW4rKyA9PSBuICUgbl9jcHUpXFxuK1xcdFxcdFxcdHJldHVybiBpO1xcbitcXHR9XFxuK1xcdHJldHVybiAtMTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBwaW5fY3B1KGludCBjcHUpXFxuK3tcXG4rXFx0Y3B1X3NldF90IHNldDtcXG4rXFxuK1xcdGlmIChjcHUgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHRDUFVfWkVSTyhcXHUwMDI2c2V0KTtcXG4rXFx0Q1BVX1NFVChjcHUsIFxcdTAwMjZzZXQpO1xcbitcXHRyZXR1cm4gc2NoZWRfc2V0YWZmaW5pdHkoMCwgc2l6ZW9mKHNldCksIFxcdTAwMjZzZXQpO1xcbit9XFxuK1xcbisvKiAtLS0tIHRyZWUgY29uc3RydWN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXFxuK1xcbitzdGF0aWMgaW50IGFkZF9ub2RlKGNvbnN0IGNoYXIgKnBhdGgsIGJvb2wgaXNfbGVhZilcXG4re1xcbitcXHRzdHJ1Y3QgY2dfbm9kZSAqbiA9IFxcdTAwMjZub2Rlc1tuX25vZGVzXTtcXG4rXFxuK1xcdGlmIChjZ19jcmVhdGUocGF0aCkpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdHN0cm5jcHkobi1cXHUwMDNlcGF0aCwgcGF0aCwgc2l6ZW9mKG4tXFx1MDAzZXBhdGgpIC0gMSk7XFxuK1xcdG4tXFx1MDAzZWlkID0gY2dfZ2V0X2lkKHBhdGgpO1xcbitcXHRuLVxcdTAwM2Vpc19sZWFmID0gaXNfbGVhZjtcXG4rXFx0bi1cXHUwMDNlcHJldmlvdXNfY3VycmVudCA9IC0xO1xcbitcXHRpZiAoaXNfbGVhZilcXG4rXFx0XFx0bl9sZWF2ZXMrKztcXG4rXFx0bl9ub2RlcysrO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyogQnVpbGQgQGxldmVscyBiZWxvdyBAcGF0aDsgb25seSBsZWF2ZXMgYXJlIGNoYXJnZWQuICovXFxuK3N0YXRpYyBpbnQgYnVpbGRfY2hpbGRyZW4oY29uc3QgY2hhciAqcGF0aCwgaW50IGZhbm91dCwgaW50IGxldmVscylcXG4re1xcbitcXHRjaGFyIGNoaWxkW1BBVEhfTUFYXTtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRpZiAobGV2ZWxzID09IDApXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0LyogR2l2ZSBjaGlsZCBjZ3JvdXBzIGEgbWVtY2cuICovXFxuK1xcdGlmIChjZ193cml0ZShwYXRoLCBcXFwiY2dyb3VwLnN1YnRyZWVfY29udHJvbFxcXCIsIFxcXCIrbWVtb3J5XFxcIikpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBmYW5vdXQ7IGkrKykge1xcbitcXHRcXHRzbnByaW50ZihjaGlsZCwgc2l6ZW9mKGNoaWxkKSwgXFxcIiVzL2MlZFxcXCIsIHBhdGgsIGkpO1xcbitcXHRcXHRpZiAoYWRkX25vZGUoY2hpbGQsIGxldmVscyA9PSAxKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXHRcXHRpZiAoYnVpbGRfY2hpbGRyZW4oY2hpbGQsIGZhbm91dCwgbGV2ZWxzIC0gMSkpXFxuK1xcdFxcdFxcdHJldHVybiAtMTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHNpemVfdCB0cmVlX2NhcGFjaXR5KGludCBmYW5vdXQsIGludCBkZXB0aClcXG4re1xcbitcXHRzaXplX3QgdG90YWwgPSAxLCBsZXZlbCA9IDE7XFxuK1xcdGludCBkO1xcbitcXG4rXFx0Zm9yIChkID0gMDsgZCBcXHUwMDNjIGRlcHRoOyBkKyspIHtcXG4rXFx0XFx0bGV2ZWwgKj0gZmFub3V0O1xcbitcXHRcXHR0b3RhbCArPSBsZXZlbDtcXG4rXFx0fVxcbitcXHRyZXR1cm4gdG90YWw7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYnVpbGRfdHJlZShpbnQgZmFub3V0LCBpbnQgZGVwdGgsIGludCAqcm9vdF9mZClcXG4re1xcbitcXHRuX25vZGVzID0gMDtcXG4rXFx0bl9sZWF2ZXMgPSAwO1xcbitcXHRub2RlcyA9IGNhbGxvYyh0cmVlX2NhcGFjaXR5KGZhbm91dCwgZGVwdGgpLCBzaXplb2YoKm5vZGVzKSk7XFxuK1xcdGlmICghbm9kZXMpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdGlmIChhZGRfbm9kZShzdWJ0cmVlX3Jvb3QsIGRlcHRoID09IDApKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHQqcm9vdF9mZCA9IG9wZW4oc3VidHJlZV9yb290LCBPX1JET05MWSk7XFxuK1xcdGlmICgqcm9vdF9mZCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdHJldHVybiBidWlsZF9jaGlsZHJlbihzdWJ0cmVlX3Jvb3QsIGZhbm91dCwgZGVwdGgpO1xcbit9XFxuK1xcbisvKiBEZXN0cm95IGNoaWxkcmVuIGJlZm9yZSBwYXJlbnRzLCB0aGVuIHJlYXAgY2hhcmdlcnMuICovXFxuK3N0YXRpYyB2b2lkIGRlc3Ryb3lfdHJlZSh2b2lkKVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0aWYgKCFub2RlcylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Zm9yIChpID0gbl9ub2RlcyAtIDE7IGkgXFx1MDAzZT0gMDsgaS0tKVxcbitcXHRcXHRjZ19kZXN0cm95KG5vZGVzW2ldLnBhdGgpO1xcbitcXHRmcmVlKG5vZGVzKTtcXG4rXFx0bm9kZXMgPSBOVUxMO1xcbitcXG4rXFx0d2hpbGUgKHdhaXRwaWQoLTEsIE5VTEwsIDApIFxcdTAwM2UgMClcXG4rXFx0XFx0O1xcbit9XFxuK1xcbisvKiAtLS0tIGNyb3NzLUNQVSBjaGFyZ2UgKG9uZSBjaGlsZCBwZXIgbGVhZikgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXFxuK1xcbitzdHJ1Y3QgY2hhcmdlX2FyZ3Mge1xcbitcXHRzaXplX3QgYnl0ZXM7XFx0LyogYW5vbiB0aGlzIGxlYWYgaG9sZHMgKi9cXG4rXFx0aW50IGJhc2U7XFx0LyogaW5kZXggb2YgdGhlIGZpcnN0IENQVSB0byBmYXVsdCBvbiAqL1xcbitcXHRpbnQgaztcXHRcXHQvKiBDUFVzIHRvIHNwcmVhZCB0aGUgY2hhcmdlIG92ZXIgKi9cXG4rfTtcXG4rXFxuK3N0YXRpYyBpbnQgY2hhcmdlX2xlYWYoY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IGNoYXJnZV9hcmdzICpjYSA9IGFyZztcXG4rXFx0aW50IHBwaWQgPSBnZXRwcGlkKCk7XFxuK1xcdHNpemVfdCBwZXIsIG9mZjtcXG4rXFx0Y2hhciAqYnVmO1xcbitcXHRpbnQgajtcXG4rXFxuK1xcdGJ1ZiA9IG1hbGxvYyhjYS1cXHUwMDNlYnl0ZXMpO1xcbitcXHRpZiAoIWJ1Zikge1xcbitcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIm1hbGxvYygpIGZhaWxlZFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0fVxcbitcXG4rXFx0LyogS2VlcCBlYWNoIENQVSdzIHNsaWNlIHBhZ2UtYWxpZ25lZC4gKi9cXG4rXFx0cGVyID0gY2EtXFx1MDAzZWJ5dGVzIC8gY2EtXFx1MDAzZWsgLyBwYWdlX3NpemUgKiBwYWdlX3NpemU7XFxuK1xcbitcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgY2EtXFx1MDAzZWs7IGorKykge1xcbitcXHRcXHRvZmYgPSAoc2l6ZV90KWogKiBwZXI7XFxuK1xcdFxcdGlmIChwaW5fY3B1KG50aF9jcHUoY2EtXFx1MDAzZWJhc2UgKyBqKSkpIHtcXG4rXFx0XFx0XFx0ZnJlZShidWYpO1xcbitcXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdH1cXG4rXFx0XFx0Y2dfdG91Y2hfcGFnZXMoYnVmICsgb2ZmLFxcbitcXHRcXHRcXHQgICAgICAgaiA9PSBjYS1cXHUwMDNlayAtIDEgPyBjYS1cXHUwMDNlYnl0ZXMgLSBvZmYgOiBwZXIpO1xcbitcXHR9XFxuK1xcbitcXHR3aGlsZSAoZ2V0cHBpZCgpID09IHBwaWQpXFxuK1xcdFxcdHNsZWVwKDEpO1xcbitcXG4rXFx0ZnJlZShidWYpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBsZWFmX2NoYXJnZShzaXplX3Qgd2FudCwgaW50IGssIHNpemVfdCAqYnl0ZXMpXFxuK3tcXG4rXFx0c2l6ZV90IG1pbl9wYWdlcywgcGFnZXMsIHdhbnRfcGFnZXM7XFxuK1xcbitcXHRpZiAoKHNpemVfdCluX29ubGluZV9jcHUgXFx1MDAzZSBTSVpFX01BWCAvIEZMVVNIX01BUkdJTiAvXFxuK1xcdFxcdFxcdFxcdFxcdCBNRU1DR19DSEFSR0VfQkFUQ0gpXFxuK1xcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbitcXG4rXFx0LyogRm9yY2UgbW9yZSB0aGFuIG9uZSBwZW5kaW5nIGJhdGNoIHBlciBDUFUgYWNyb3NzIHRoZSBzdWJ0cmVlLiAqL1xcbitcXHRtaW5fcGFnZXMgPSAoc2l6ZV90KUZMVVNIX01BUkdJTiAqIE1FTUNHX0NIQVJHRV9CQVRDSCAqIG5fb25saW5lX2NwdTtcXG4rXFx0cGFnZXMgPSBtaW5fcGFnZXMgLyBuX2xlYXZlcyArICEhKG1pbl9wYWdlcyAlIG5fbGVhdmVzKTtcXG4rXFx0d2FudF9wYWdlcyA9IHdhbnQgLyBwYWdlX3NpemUgKyAhISh3YW50ICUgcGFnZV9zaXplKTtcXG4rXFx0aWYgKHBhZ2VzIFxcdTAwM2Mgd2FudF9wYWdlcylcXG4rXFx0XFx0cGFnZXMgPSB3YW50X3BhZ2VzO1xcbitcXHRpZiAocGFnZXMgXFx1MDAzYyAoc2l6ZV90KWspXFxuK1xcdFxcdHBhZ2VzID0gaztcXG4rXFxuK1xcdGlmIChwYWdlcyBcXHUwMDNlIE1BWF9UT1RBTF9DSEFSR0UgLyAoc2l6ZV90KW5fbGVhdmVzIC8gcGFnZV9zaXplKVxcbitcXHRcXHRyZXR1cm4gLUUyQklHO1xcbitcXG4rXFx0KmJ5dGVzID0gcGFnZXMgKiBwYWdlX3NpemU7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHN0YXJ0X2NoYXJnZXJzKGludCBrLCBzaXplX3QgYnl0ZXMpXFxuK3tcXG4rXFx0c3RydWN0IGNoYXJnZV9hcmdzIGNhID0geyAuYnl0ZXMgPSBieXRlcywgLmsgPSBrIH07XFxuK1xcdGxvbmcgcHJldiwgY3VyO1xcbitcXHRib29sIHJlYWR5O1xcbitcXHRpbnQgaSwgcmV0cmllcztcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuX25vZGVzOyBpKyspIHtcXG4rXFx0XFx0aWYgKCFub2Rlc1tpXS5pc19sZWFmKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0aWYgKGNnX3J1bl9ub3dhaXQobm9kZXNbaV0ucGF0aCwgY2hhcmdlX2xlYWYsIFxcdTAwMjZjYSkgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJjYW5ub3Qgc3RhcnQgYSBjaGFyZ2VyIG9uICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgICAgbm9kZXNbaV0ucGF0aCk7XFxuK1xcdFxcdFxcdHJldHVybiAtMTtcXG4rXFx0XFx0fVxcbitcXHRcXHRjYS5iYXNlICs9IGs7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFdhaXQgdW50aWwgZXZlcnkgbGVhZiBpcyBmdWxseSBjaGFyZ2VkIGFuZCBzdGFibGUuICovXFxuK1xcdGZvciAocmV0cmllcyA9IENIQVJHRV9XQUlUX1JFVFJJRVM7IHJldHJpZXM7IHJldHJpZXMtLSkge1xcbitcXHRcXHRyZWFkeSA9IHRydWU7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuX25vZGVzOyBpKyspIHtcXG4rXFx0XFx0XFx0aWYgKCFub2Rlc1tpXS5pc19sZWFmKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdFxcdGN1ciA9IGNnX3JlYWRfbG9uZyhub2Rlc1tpXS5wYXRoLCBcXFwibWVtb3J5LmN1cnJlbnRcXFwiKTtcXG4rXFx0XFx0XFx0aWYgKGN1ciBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0XFx0a3NmdF9wcmludF9tc2coXFxcImNhbm5vdCByZWFkICVzL21lbW9yeS5jdXJyZW50OiAlc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIG5vZGVzW2ldLnBhdGgsIHN0cmVycm9yKGVycm5vKSk7XFxuK1xcdFxcdFxcdFxcdHJldHVybiAtMTtcXG4rXFx0XFx0XFx0fVxcbitcXG4rXFx0XFx0XFx0cHJldiA9IG5vZGVzW2ldLnByZXZpb3VzX2N1cnJlbnQ7XFxuK1xcdFxcdFxcdG5vZGVzW2ldLnByZXZpb3VzX2N1cnJlbnQgPSBjdXI7XFxuK1xcdFxcdFxcdGlmIChjdXIgXFx1MDAzYyAobG9uZylieXRlcyB8fCBjdXIgIT0gcHJldilcXG4rXFx0XFx0XFx0XFx0cmVhZHkgPSBmYWxzZTtcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAocmVhZHkpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHR1c2xlZXAoREVGQVVMVF9XQUlUX0lOVEVSVkFMX1VTIC8gMTApO1xcbitcXHR9XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgbl9ub2RlczsgaSsrKSB7XFxuK1xcdFxcdGlmIChub2Rlc1tpXS5pc19sZWFmIFxcdTAwMjZcXHUwMDI2IG5vZGVzW2ldLnByZXZpb3VzX2N1cnJlbnQgXFx1MDAzYyAobG9uZylieXRlcykge1xcbitcXHRcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiJXMgcmVhY2hlZCBvbmx5ICVsZCBvZiAlenUgY2hhcmdlZCBieXRlc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIG5vZGVzW2ldLnBhdGgsIG5vZGVzW2ldLnByZXZpb3VzX2N1cnJlbnQsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBieXRlcyk7XFxuK1xcdFxcdFxcdHJldHVybiAtMTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdGtzZnRfcHJpbnRfbXNnKFxcXCJtZW1vcnkuY3VycmVudCBkaWQgbm90IHNldHRsZSBiZWZvcmUgdGhlIHRpbWVvdXRcXFxcblxcXCIpO1xcbitcXHRyZXR1cm4gLTE7XFxuK31cXG4rXFxuKy8qIC0tLS0gdGhlIHR3byByZWFkZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cXG4rXFxuKy8qIEZsdXNoIHRoZSBzdWJ0cmVlIGFuZCBjb2xsZWN0IGVhY2ggY2dyb3VwJ3Mga2Z1bmMgdmFsdWVzLiAqL1xcbitzdGF0aWMgaW50IHJlYWRfYnBmKGludCByb290X2ZkKVxcbit7XFxuK1xcdERFQ0xBUkVfTElCQlBGX09QVFMoYnBmX2l0ZXJfYXR0YWNoX29wdHMsIG9wdHMpO1xcbitcXHRzdHJ1Y3QgbWVtY2dfc3RhdF9jcm9zc19jcHUgKnNrZWwgPSBOVUxMO1xcbitcXHR1bmlvbiBicGZfaXRlcl9saW5rX2luZm8gbGluZm8gPSB7fTtcXG4rXFx0c3RydWN0IGJwZl9saW5rICpsaW5rID0gTlVMTDtcXG4rXFx0aW50IHJldCA9IC0xLCBlcnIsIGksIG1mZCwgZmQ7XFxuK1xcdGNoYXIgYnVmWzQwOTZdO1xcbitcXHRzc2l6ZV90IHI7XFxuK1xcbitcXHRza2VsID0gbWVtY2dfc3RhdF9jcm9zc19jcHVfX29wZW4oKTtcXG4rXFx0aWYgKCFza2VsKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJza2VsIG9wZW4gZmFpbGVkOiAlcyAoJWQpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgICAgc3RyZXJyb3IoZXJybm8pLCBlcnJubyk7XFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0fVxcbitcXHRlcnIgPSBicGZfcHJvZ3JhbV9fc2V0X2F1dG9sb2FkKHNrZWwtXFx1MDAzZXByb2dzLm1lbWNnX2tmdW5jc19wcm9iZSwgZmFsc2UpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJkaXNhYmxpbmcgY2FwYWJpbGl0eSBwcm9iZSBmYWlsZWQ6ICVzICglZClcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJlcnJvcigtZXJyKSwgZXJyKTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFx0ZXJyID0gYnBmX21hcF9fc2V0X21heF9lbnRyaWVzKHNrZWwtXFx1MDAzZW1hcHMucmVzdWx0cywgbl9ub2RlcyArIDgpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJzZXQgbWF4X2VudHJpZXMgZmFpbGVkOiAlcyAoJWQpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgICAgc3RyZXJyb3IoLWVyciksIGVycik7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcdGVyciA9IG1lbWNnX3N0YXRfY3Jvc3NfY3B1X19sb2FkKHNrZWwpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJza2VsIGxvYWQgZmFpbGVkOiAlcyAoJWQpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgICAgc3RyZXJyb3IoLWVyciksIGVycik7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRsaW5mby5jZ3JvdXAuY2dyb3VwX2ZkID0gcm9vdF9mZDtcXG4rXFx0bGluZm8uY2dyb3VwLm9yZGVyID0gQlBGX0NHUk9VUF9JVEVSX0RFU0NFTkRBTlRTX1BSRTtcXG4rXFx0b3B0cy5saW5rX2luZm8gPSBcXHUwMDI2bGluZm87XFxuK1xcdG9wdHMubGlua19pbmZvX2xlbiA9IHNpemVvZihsaW5mbyk7XFxuK1xcbitcXHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9pdGVyKHNrZWwtXFx1MDAzZXByb2dzLmNncm91cF9tZW1jZ19zdGF0X2Nyb3NzX2NwdSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx1MDAyNm9wdHMpO1xcbitcXHRlcnIgPSBsaWJicGZfZ2V0X2Vycm9yKGxpbmspO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGxpbmsgPSBOVUxMO1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiYXR0YWNoIGl0ZXIgZmFpbGVkOiAlcyAoJWQpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgICAgc3RyZXJyb3IoLWVyciksIGVycik7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRmZCA9IGJwZl9pdGVyX2NyZWF0ZShicGZfbGlua19fZmQobGluaykpO1xcbitcXHRpZiAoZmQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJicGZfaXRlcl9jcmVhdGUgZmFpbGVkOiAlcyAoJWQpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgICAgc3RyZXJyb3IoZXJybm8pLCBlcnJubyk7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcdGRvIHtcXG4rXFx0XFx0ciA9IHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xcbitcXHR9IHdoaWxlIChyIFxcdTAwM2UgMCB8fCAociBcXHUwMDNjIDAgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUlOVFIpKTtcXG4rXFx0ZXJyID0gZXJybm87XFxuK1xcdGNsb3NlKGZkKTtcXG4rXFx0aWYgKHIgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJicGYgd2FsayBmYWlsZWQ6ICVzICglZClcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJlcnJvcihlcnIpLCBlcnIpO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0bWZkID0gYnBmX21hcF9fZmQoc2tlbC1cXHUwMDNlbWFwcy5yZXN1bHRzKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5fbm9kZXM7IGkrKylcXG4rXFx0XFx0aWYgKGJwZl9tYXBfbG9va3VwX2VsZW0obWZkLCBcXHUwMDI2bm9kZXNbaV0uaWQsIFxcdTAwMjZub2Rlc1tpXS5icGYpKSB7XFxuK1xcdFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJubyBtYXAgZW50cnkgZm9yICVzOiAlcyAoJWQpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgICAgbm9kZXNbaV0ucGF0aCwgc3RyZXJyb3IoZXJybm8pLCBlcnJubyk7XFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHR9XFxuK1xcdHJldCA9IDA7XFxuK291dDpcXG4rXFx0YnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7XFxuK1xcdG1lbWNnX3N0YXRfY3Jvc3NfY3B1X19kZXN0cm95KHNrZWwpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisvKiBSZWFkIG9uZSBjZ3JvdXBmcyBzbmFwc2hvdC4gKi9cXG4rc3RhdGljIGludCByZWFkX2ZpbGVzKGludCBzbG90KVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5fbm9kZXM7IGkrKykge1xcbitcXHRcXHRjb25zdCBjaGFyICpwYXRoID0gbm9kZXNbaV0ucGF0aDtcXG4rXFx0XFx0c3RydWN0IGZpbGVfc25hcCAqZiA9IFxcdTAwMjZub2Rlc1tpXS5maWxlW3Nsb3RdO1xcbitcXG4rXFx0XFx0Zi1cXHUwMDNlYW5vbiA9IGNnX3JlYWRfa2V5X2xvbmcocGF0aCwgXFxcIm1lbW9yeS5zdGF0XFxcIiwgXFxcImFub24gXFxcIik7XFxuK1xcdFxcdGYtXFx1MDAzZWZpbGUgPSBjZ19yZWFkX2tleV9sb25nKHBhdGgsIFxcXCJtZW1vcnkuc3RhdFxcXCIsIFxcXCJmaWxlIFxcXCIpO1xcbitcXHRcXHRmLVxcdTAwM2VzaG1lbSA9IGNnX3JlYWRfa2V5X2xvbmcocGF0aCwgXFxcIm1lbW9yeS5zdGF0XFxcIiwgXFxcInNobWVtIFxcXCIpO1xcbitcXHRcXHRmLVxcdTAwM2VmaWxlX21hcHBlZCA9IGNnX3JlYWRfa2V5X2xvbmcocGF0aCwgXFxcIm1lbW9yeS5zdGF0XFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBcXFwiZmlsZV9tYXBwZWQgXFxcIik7XFxuK1xcdFxcdGYtXFx1MDAzZXBnZmF1bHQgPSBjZ19yZWFkX2tleV9sb25nKHBhdGgsIFxcXCJtZW1vcnkuc3RhdFxcXCIsIFxcXCJwZ2ZhdWx0IFxcXCIpO1xcbitcXHRcXHRmLVxcdTAwM2VjdXJyZW50ID0gY2dfcmVhZF9sb25nKHBhdGgsIFxcXCJtZW1vcnkuY3VycmVudFxcXCIpO1xcbitcXG4rXFx0XFx0aWYgKGYtXFx1MDAzZWFub24gXFx1MDAzYyAwIHx8IGYtXFx1MDAzZWZpbGUgXFx1MDAzYyAwIHx8IGYtXFx1MDAzZXNobWVtIFxcdTAwM2MgMCB8fFxcbitcXHRcXHQgICAgZi1cXHUwMDNlZmlsZV9tYXBwZWQgXFx1MDAzYyAwIHx8IGYtXFx1MDAzZXBnZmF1bHQgXFx1MDAzYyAwIHx8IGYtXFx1MDAzZWN1cnJlbnQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJyZWFkaW5nIHRoZSBzdGF0cyBvZiAlcyBmYWlsZWRcXFxcblxcXCIsIHBhdGgpO1xcbitcXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyogLS0tLSBjb21wYXJpc29uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xcbitcXG4rc3RhdGljIHZvaWQgZHVtcF9ub2RlKGNvbnN0IHN0cnVjdCBjZ19ub2RlICpuKVxcbit7XFxuK1xcdGludCBzO1xcbitcXG4rXFx0a3NmdF9wcmludF9tc2coXFxcIiVzIGJwZiAgIDogYW5vbj0lbGx1IGZpbGU9JWxsdSBzaG1lbT0lbGx1IGZtYXBwZWQ9JWxsdSBwZ2ZhdWx0PSVsbHVcXFxcblxcXCIsXFxuK1xcdFxcdCAgICAgICBuLVxcdTAwM2VwYXRoLCBuLVxcdTAwM2VicGYuYW5vbiwgbi1cXHUwMDNlYnBmLmZpbGUsIG4tXFx1MDAzZWJwZi5zaG1lbSxcXG4rXFx0XFx0ICAgICAgIG4tXFx1MDAzZWJwZi5maWxlX21hcHBlZCwgbi1cXHUwMDNlYnBmLnBnZmF1bHQpO1xcbitcXHRmb3IgKHMgPSAwOyBzIFxcdTAwM2MgMjsgcysrKVxcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiJXMgZmlsZSVkOiBhbm9uPSVsZCBmaWxlPSVsZCBzaG1lbT0lbGQgZm1hcHBlZD0lbGQgcGdmYXVsdD0lbGRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgICBuLVxcdTAwM2VwYXRoLCBzLCBuLVxcdTAwM2VmaWxlW3NdLmFub24sIG4tXFx1MDAzZWZpbGVbc10uZmlsZSxcXG4rXFx0XFx0XFx0ICAgICAgIG4tXFx1MDAzZWZpbGVbc10uc2htZW0sIG4tXFx1MDAzZWZpbGVbc10uZmlsZV9tYXBwZWQsXFxuK1xcdFxcdFxcdCAgICAgICBuLVxcdTAwM2VmaWxlW3NdLnBnZmF1bHQpO1xcbit9XFxuK1xcbisvKiBFcXVhbCBmaWxlIHNhbXBsZXMgcmVxdWlyZSBhbiBleGFjdCBCUEYgbWF0Y2g7IG90aGVyd2lzZSBhY2NlcHQgdGhlaXIgcmFuZ2UuICovXFxuK3N0YXRpYyBib29sIGJyYWNrZXRlZCh1bnNpZ25lZCBsb25nIGxvbmcgdiwgbG9uZyBhLCBsb25nIGIpXFxuK3tcXG4rXFx0bG9uZyBsbyA9IGEgXFx1MDAzYyBiID8gYSA6IGI7XFxuK1xcdGxvbmcgaGkgPSBhIFxcdTAwM2MgYiA/IGIgOiBhO1xcbitcXG4rXFx0cmV0dXJuIHYgXFx1MDAzZT0gKHVuc2lnbmVkIGxvbmcgbG9uZylsbyBcXHUwMDI2XFx1MDAyNiB2IFxcdTAwM2M9ICh1bnNpZ25lZCBsb25nIGxvbmcpaGk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgY2hlY2tfdHJlZShzaXplX3QgY2hhcmdlZClcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIGxvbmcgcm9vdF9hbm9uID0gMCwgbGVhZl9hbm9uID0gMDtcXG4rXFx0aW50IGksIGJhZCA9IDA7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgbl9ub2RlczsgaSsrKSB7XFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBjZ19ub2RlICpuID0gXFx1MDAyNm5vZGVzW2ldO1xcbitcXHRcXHRjb25zdCBzdHJ1Y3QgbWVtY2dfc3RhdF9zbmFwc2hvdCAqYiA9IFxcdTAwMjZuLVxcdTAwM2VicGY7XFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBmaWxlX3NuYXAgKmYwID0gXFx1MDAyNm4tXFx1MDAzZWZpbGVbMF0sICpmMSA9IFxcdTAwMjZuLVxcdTAwM2VmaWxlWzFdO1xcbitcXG4rXFx0XFx0aWYgKCFicmFja2V0ZWQoYi1cXHUwMDNlYW5vbiwgZjAtXFx1MDAzZWFub24sIGYxLVxcdTAwM2Vhbm9uKSB8fFxcbitcXHRcXHQgICAgIWJyYWNrZXRlZChiLVxcdTAwM2VmaWxlLCBmMC1cXHUwMDNlZmlsZSwgZjEtXFx1MDAzZWZpbGUpIHx8XFxuK1xcdFxcdCAgICAhYnJhY2tldGVkKGItXFx1MDAzZXNobWVtLCBmMC1cXHUwMDNlc2htZW0sIGYxLVxcdTAwM2VzaG1lbSkgfHxcXG4rXFx0XFx0ICAgICFicmFja2V0ZWQoYi1cXHUwMDNlZmlsZV9tYXBwZWQsIGYwLVxcdTAwM2VmaWxlX21hcHBlZCxcXG4rXFx0XFx0XFx0ICAgICAgIGYxLVxcdTAwM2VmaWxlX21hcHBlZCkgfHxcXG4rXFx0XFx0ICAgICFicmFja2V0ZWQoYi1cXHUwMDNlcGdmYXVsdCwgZjAtXFx1MDAzZXBnZmF1bHQsIGYxLVxcdTAwM2VwZ2ZhdWx0KSkge1xcbitcXHRcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwia2Z1bmNzIGRpc2FncmVlIHdpdGggbWVtb3J5LnN0YXRcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRkdW1wX25vZGUobik7XFxuK1xcdFxcdFxcdGJhZCsrO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHQvKiBMaXZlIHBhZ2UgY291bnRlcnMgYXJlIGJvdW5kcywgbm90IGZsdXNoZWQgc3RhdGlzdGljcy4gKi9cXG4rXFx0XFx0aWYgKGItXFx1MDAzZWFub24gXFx1MDAzZSBiLVxcdTAwM2V1c2FnZV9wYWdlcyAqICh1bnNpZ25lZCBsb25nIGxvbmcpcGFnZV9zaXplIHx8XFxuK1xcdFxcdCAgICBmMS1cXHUwMDNlYW5vbiBcXHUwMDNlIGYxLVxcdTAwM2VjdXJyZW50KSB7XFxuK1xcdFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCIlczogYW5vbiBhYm92ZSB1c2FnZTogYnBmICVsbHUvJWxsdSBmaWxlICVsZC8lbGRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBuLVxcdTAwM2VwYXRoLCBiLVxcdTAwM2Vhbm9uLFxcbitcXHRcXHRcXHRcXHQgICAgICAgYi1cXHUwMDNldXNhZ2VfcGFnZXMgKiAodW5zaWduZWQgbG9uZyBsb25nKXBhZ2Vfc2l6ZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGYxLVxcdTAwM2Vhbm9uLCBmMS1cXHUwMDNlY3VycmVudCk7XFxuK1xcdFxcdFxcdGJhZCsrO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAobi1cXHUwMDNlaXNfbGVhZikge1xcbitcXHRcXHRcXHRpZiAoYi1cXHUwMDNlYW5vbiBcXHUwMDNjIGNoYXJnZWQpIHtcXG4rXFx0XFx0XFx0XFx0a3NmdF9wcmludF9tc2coXFxcIiVzOiBmbHVzaGVkIGFub24gJWxsdSwgY2hhcmdlZCAlenVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBuLVxcdTAwM2VwYXRoLCBiLVxcdTAwM2Vhbm9uLCBjaGFyZ2VkKTtcXG4rXFx0XFx0XFx0XFx0YmFkKys7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0bGVhZl9hbm9uICs9IGItXFx1MDAzZWFub247XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKGkgPT0gMClcXG4rXFx0XFx0XFx0cm9vdF9hbm9uID0gYi1cXHUwMDNlYW5vbjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHJvb3RfYW5vbiAhPSBsZWFmX2Fub24pIHtcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxcInN1YnRyZWUgcm9vdCBhbm9uICVsbHUsIHN1bSBvZiB0aGUgbGVhdmVzICVsbHVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgICByb290X2Fub24sIGxlYWZfYW5vbik7XFxuK1xcdFxcdGJhZCsrO1xcbitcXHR9XFxuK1xcdHJldHVybiBiYWQgPyAtMSA6IDA7XFxuK31cXG4rXFxuKy8qIEFjY2VwdCBQQUdFX0NPVU5URVJfTUFYIHZhbHVlcyBmcm9tIGVpdGhlciAzMi0gb3IgNjQtYml0IGtlcm5lbHMuICovXFxuK3N0YXRpYyBpbnQgY2hlY2tfdW5saW1pdGVkKHZvaWQpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBsb25nIG1heDY0ID0gKHVuc2lnbmVkIGxvbmcgbG9uZylJTlQ2NF9NQVggLyBwYWdlX3NpemU7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbG9uZyBtYXgzMiA9IElOVDMyX01BWDtcXG4rXFxuK1xcdGlmIChjZ19yZWFkX3N0cmNtcChub2Rlc1swXS5wYXRoLCBcXFwibWVtb3J5Lm1heFxcXCIsIFxcXCJtYXhcXFxcblxcXCIpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChub2Rlc1swXS5icGYubWF4X3BhZ2VzICE9IG1heDY0IFxcdTAwMjZcXHUwMDI2IG5vZGVzWzBdLmJwZi5tYXhfcGFnZXMgIT0gbWF4MzIpIHtcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxcIm1lbW9yeS5tYXggcmVhZHMgbWF4LCBrZnVuYyByZXBvcnRzICVsbHUgcGFnZXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgICBub2Rlc1swXS5icGYubWF4X3BhZ2VzKTtcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKiAtLS0tIG9uZSBjYXNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXFxuK1xcbitzdHJ1Y3QgdGVzdGNhc2Uge1xcbitcXHRjb25zdCBjaGFyICpuYW1lO1xcbitcXHRpbnQgZmFub3V0O1xcbitcXHRpbnQgZGVwdGg7XFxuK1xcdGludCBjcHVzX3Blcl9sZWFmO1xcdC8qIEssIG9yIDAgZm9yIHRoZSBib3VuZGVkIGNyb3NzLUNQVSBjb3VudCAqL1xcbitcXHRzaXplX3QgcmVzaWRlbnRfYnl0ZXM7XFx0LyogYW5vbiBwZXIgbGVhZiwgcmFpc2VkIGlmIHRvbyBzbWFsbCAqL1xcbit9O1xcbitcXG4rc3RhdGljIGludCBydW5fY2FzZShjb25zdCBzdHJ1Y3QgdGVzdGNhc2UgKnRjKVxcbit7XFxuK1xcdGludCByb290X2ZkID0gLTEsIHJldCA9IEtTRlRfRkFJTCwgZXJyLCBrO1xcbitcXHRzaXplX3QgY2hhcmdlZDtcXG4rXFxuK1xcdGlmIChidWlsZF90cmVlKHRjLVxcdTAwM2VmYW5vdXQsIHRjLVxcdTAwM2VkZXB0aCwgXFx1MDAyNnJvb3RfZmQpKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJjYW5ub3QgYnVpbGQgdGhlIHRyZWVcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0ayA9IHRjLVxcdTAwM2VjcHVzX3Blcl9sZWFmO1xcbitcXHRpZiAoayBcXHUwMDNjPSAwKVxcbitcXHRcXHRrID0gbl9jcHUgXFx1MDAzYyBNQVhfQ1BVU19QRVJfTEVBRiA/IG5fY3B1IDogTUFYX0NQVVNfUEVSX0xFQUY7XFxuK1xcdGVsc2UgaWYgKGsgXFx1MDAzZSBuX2NwdSlcXG4rXFx0XFx0ayA9IG5fY3B1O1xcbitcXHRlcnIgPSBsZWFmX2NoYXJnZSh0Yy1cXHUwMDNlcmVzaWRlbnRfYnl0ZXMsIGssIFxcdTAwMjZjaGFyZ2VkKTtcXG4rXFx0aWYgKGVyciA9PSAtRTJCSUcpIHtcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxcIiVzIG5lZWRzIG1vcmUgdGhhbiAlbHVNQiB0byB0cmlnZ2VyIGEgZmx1c2ggb24gJWxkIG9ubGluZSBDUFVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgICAgdGMtXFx1MDAzZW5hbWUsIE1BWF9UT1RBTF9DSEFSR0UgXFx1MDAzZVxcdTAwM2UgMjAsIG5fb25saW5lX2NwdSk7XFxuK1xcdFxcdHJldCA9IEtTRlRfU0tJUDtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiY2Fubm90IGNhbGN1bGF0ZSB0aGUgY2hhcmdlIGZvciAlczogJXMgKCVkKVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgICAgIHRjLVxcdTAwM2VuYW1lLCBzdHJlcnJvcigtZXJyKSwgZXJyKTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGtzZnRfcHJpbnRfbXNnKFxcXCIlczogJWQgY2dyb3VwcywgJWQgbGVhdmVzLCAlZC8lZCBjcHVzLCAlenVLQiBwZXIgbGVhZlxcXFxuXFxcIixcXG4rXFx0XFx0ICAgICAgIHRjLVxcdTAwM2VuYW1lLCBuX25vZGVzLCBuX2xlYXZlcywgaywgbl9jcHUsIGNoYXJnZWQgXFx1MDAzZVxcdTAwM2UgMTApO1xcbitcXG4rXFx0aWYgKHN0YXJ0X2NoYXJnZXJzKGssIGNoYXJnZWQpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdC8qIFJlYWQgQlBGIGZpcnN0OyBtZW1vcnkuc3RhdCB3b3VsZCBjb25zdW1lIHRoZSBwZW5kaW5nIGZsdXNoLiAqL1xcbitcXHRpZiAocmVhZF9icGYocm9vdF9mZCkgfHwgcmVhZF9maWxlcygwKSB8fCByZWFkX2ZpbGVzKDEpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGlmICghY2hlY2tfdHJlZShjaGFyZ2VkKSBcXHUwMDI2XFx1MDAyNiAhY2hlY2tfdW5saW1pdGVkKCkpXFxuK1xcdFxcdHJldCA9IEtTRlRfUEFTUztcXG4rb3V0OlxcbitcXHRpZiAocm9vdF9mZCBcXHUwMDNlPSAwKVxcbitcXHRcXHRjbG9zZShyb290X2ZkKTtcXG4rXFx0ZGVzdHJveV90cmVlKCk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGVzdGNhc2UgY2FzZXNbXSA9IHtcXG4rXFx0LyogbmFtZSwgZmFub3V0LCBkZXB0aCwgSywgYW5vbiBwZXIgbGVhZiAqL1xcbitcXHR7IFxcXCJzaW5nbGVfY3B1X3NtYWxsX3RyZWVcXFwiLCA0LCAyLCAxLCAyIFxcdTAwM2NcXHUwMDNjIDIwIH0sXFxuK1xcdHsgXFxcImNyb3NzX2NwdV9zbWFsbF90cmVlXFxcIiwgNCwgMiwgMCwgMiBcXHUwMDNjXFx1MDAzYyAyMCB9LFxcbitcXHR7IFxcXCJzaW5nbGVfY3B1X2xhcmdlX3RyZWVcXFwiLCA0LCAzLCAxLCAyNTYgXFx1MDAzY1xcdTAwM2MgMTAgfSxcXG4rXFx0eyBcXFwiY3Jvc3NfY3B1X2xhcmdlX3RyZWVcXFwiLCA0LCAzLCAwLCAyNTYgXFx1MDAzY1xcdTAwM2MgMTAgfSxcXG4rfTtcXG4rXFxuK3N0YXRpYyBib29sIG1lbWNnX2tmdW5jc19hdmFpbGFibGUodm9pZClcXG4re1xcbitcXHRzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qga2Z1bmNzW10gPSB7XFxuK1xcdFxcdFxcXCJicGZfZ2V0X21lbV9jZ3JvdXBcXFwiLFxcbitcXHRcXHRcXFwiYnBmX3B1dF9tZW1fY2dyb3VwXFxcIixcXG4rXFx0XFx0XFxcImJwZl9tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzXFxcIixcXG4rXFx0XFx0XFxcImJwZl9tZW1fY2dyb3VwX3BhZ2Vfc3RhdGVcXFwiLFxcbitcXHRcXHRcXFwiYnBmX21lbV9jZ3JvdXBfdm1fZXZlbnRzXFxcIixcXG4rXFx0fTtcXG4rXFx0c3RydWN0IGJ0ZiAqYnRmO1xcbitcXHRpbnQgZXJyLCBpO1xcbitcXG4rXFx0YnRmID0gYnRmX19sb2FkX3ZtbGludXhfYnRmKCk7XFxuK1xcdGVyciA9IGxpYmJwZl9nZXRfZXJyb3IoYnRmKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiY2Fubm90IGxvYWQgdm1saW51eCBCVEY6ICVzICglZClcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJlcnJvcigtZXJyKSwgZXJyKTtcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShrZnVuY3MpOyBpKyspIHtcXG4rXFx0XFx0aWYgKGJ0Zl9fZmluZF9ieV9uYW1lX2tpbmQoYnRmLCBrZnVuY3NbaV0sIEJURl9LSU5EX0ZVTkMpIFxcdTAwM2UgMClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJyZXF1aXJlZCBrZnVuYyAlcyBpcyBub3QgaW4gdm1saW51eCBCVEZcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgICBrZnVuY3NbaV0pO1xcbitcXHRcXHRidGZfX2ZyZWUoYnRmKTtcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcdGlmIChidGZfX2ZpbmRfYnlfbmFtZV9raW5kKGJ0ZiwgXFxcImJwZl9pdGVyX2Nncm91cFxcXCIsIEJURl9LSU5EX0ZVTkMpIFxcdTAwM2M9IDApIHtcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxcImNncm91cCBCUEYgaXRlcmF0b3IgaXMgbm90IGluIHZtbGludXggQlRGXFxcXG5cXFwiKTtcXG4rXFx0XFx0YnRmX19mcmVlKGJ0Zik7XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbitcXHRidGZfX2ZyZWUoYnRmKTtcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIHVuc3VwcG9ydGVkX2JwZl9mZWF0dXJlX2Vycm9yKGludCBlcnIpXFxuK3tcXG4rXFx0cmV0dXJuIGVyciA9PSAtRUlOVkFMIHx8IGVyciA9PSAtRU5PRU5UIHx8IGVyciA9PSAtRU9QTk9UU1VQUDtcXG4rfVxcbitcXG4rLyogUmV0dXJuIDEgaWYgc3VwcG9ydGVkLCAwIGlmIHVuYXZhaWxhYmxlLCBvciBhIG5lZ2F0aXZlIGVycm9yLiAqL1xcbitzdGF0aWMgaW50IHByb2JlX21lbWNnX2JwZl9mZWF0dXJlcyhpbnQgcm9vdF9mZClcXG4re1xcbitcXHRERUNMQVJFX0xJQkJQRl9PUFRTKGJwZl9pdGVyX2F0dGFjaF9vcHRzLCBvcHRzKTtcXG4rXFx0c3RydWN0IG1lbWNnX3N0YXRfY3Jvc3NfY3B1ICpza2VsO1xcbitcXHR1bmlvbiBicGZfaXRlcl9saW5rX2luZm8gbGluZm8gPSB7fTtcXG4rXFx0c3RydWN0IGJwZl9saW5rICpsaW5rID0gTlVMTDtcXG4rXFx0aW50IHJldCwgZXJyLCBpdGVyX2ZkID0gLTE7XFxuK1xcbitcXHRza2VsID0gbWVtY2dfc3RhdF9jcm9zc19jcHVfX29wZW4oKTtcXG4rXFx0aWYgKCFza2VsKSB7XFxuK1xcdFxcdGVyciA9IGVycm5vID8gLWVycm5vIDogLUVJTlZBTDtcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxcImNhcGFiaWxpdHkgcHJvYmUgb3BlbiBmYWlsZWQ6ICVzICglZClcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJlcnJvcigtZXJyKSwgZXJyKTtcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gYnBmX3Byb2dyYW1fX3NldF9hdXRvbG9hZChza2VsLVxcdTAwM2Vwcm9ncy5jZ3JvdXBfbWVtY2dfc3RhdF9jcm9zc19jcHUsXFxuK1xcdFxcdFxcdFxcdFxcdGZhbHNlKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiZGlzYWJsaW5nIHRlc3QgcHJvZ3JhbSBmYWlsZWQ6ICVzICglZClcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJlcnJvcigtZXJyKSwgZXJyKTtcXG4rXFx0XFx0cmV0ID0gZXJyO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gbWVtY2dfc3RhdF9jcm9zc19jcHVfX2xvYWQoc2tlbCk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxcIkJQRiBjYXBhYmlsaXR5IHByb2JlIGxvYWQgZmFpbGVkOiAlcyAoJWQpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgICAgc3RyZXJyb3IoLWVyciksIGVycik7XFxuK1xcdFxcdHJldCA9IHVuc3VwcG9ydGVkX2JwZl9mZWF0dXJlX2Vycm9yKGVycikgPyAwIDogZXJyO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0bGluZm8uY2dyb3VwLmNncm91cF9mZCA9IHJvb3RfZmQ7XFxuK1xcdGxpbmZvLmNncm91cC5vcmRlciA9IEJQRl9DR1JPVVBfSVRFUl9TRUxGX09OTFk7XFxuK1xcdG9wdHMubGlua19pbmZvID0gXFx1MDAyNmxpbmZvO1xcbitcXHRvcHRzLmxpbmtfaW5mb19sZW4gPSBzaXplb2YobGluZm8pO1xcbitcXHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9pdGVyKHNrZWwtXFx1MDAzZXByb2dzLm1lbWNnX2tmdW5jc19wcm9iZSwgXFx1MDAyNm9wdHMpO1xcbitcXHRlcnIgPSBsaWJicGZfZ2V0X2Vycm9yKGxpbmspO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGxpbmsgPSBOVUxMO1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiQlBGIGNhcGFiaWxpdHkgcHJvYmUgYXR0YWNoIGZhaWxlZDogJXMgKCVkKVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgICAgIHN0cmVycm9yKC1lcnIpLCBlcnIpO1xcbitcXHRcXHRyZXQgPSB1bnN1cHBvcnRlZF9icGZfZmVhdHVyZV9lcnJvcihlcnIpID8gMCA6IGVycjtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGl0ZXJfZmQgPSBicGZfaXRlcl9jcmVhdGUoYnBmX2xpbmtfX2ZkKGxpbmspKTtcXG4rXFx0aWYgKGl0ZXJfZmQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGVyciA9IC1lcnJubztcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxcIkJQRiBjYXBhYmlsaXR5IHByb2JlIGl0ZXJhdG9yIGNyZWF0aW9uIGZhaWxlZDogJXMgKCVkKVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgICAgIHN0cmVycm9yKC1lcnIpLCBlcnIpO1xcbitcXHRcXHRyZXQgPSB1bnN1cHBvcnRlZF9icGZfZmVhdHVyZV9lcnJvcihlcnIpID8gMCA6IGVycjtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IDE7XFxuK291dDpcXG4rXFx0aWYgKGl0ZXJfZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2UoaXRlcl9mZCk7XFxuK1xcdGJwZl9saW5rX19kZXN0cm95KGxpbmspO1xcbitcXHRtZW1jZ19zdGF0X2Nyb3NzX2NwdV9fZGVzdHJveShza2VsKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbit7XFxuK1xcdGludCBmZWF0dXJlX2ZkLCBpLCByZXQ7XFxuK1xcbitcXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xcbitcXG4rXFx0LyogUHJvYmUgQlRGIGJlZm9yZSBvcGVyYXRpb25zIHRoYXQgbWF5IHJlcXVpcmUgcHJpdmlsZWdlcy4gKi9cXG4rXFx0aWYgKCFtZW1jZ19rZnVuY3NfYXZhaWxhYmxlKCkpXFxuK1xcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJtZW1jZyBCUEYga2Z1bmNzIGFyZSBub3QgYXZhaWxhYmxlXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGlmIChjZ19maW5kX3VuaWZpZWRfcm9vdChyb290LCBzaXplb2Yocm9vdCksIE5VTEwpKVxcbitcXHRcXHRrc2Z0X2V4aXRfc2tpcChcXFwiY2dyb3VwIHYyIGlzbid0IG1vdW50ZWRcXFxcblxcXCIpO1xcbitcXHRmZWF0dXJlX2ZkID0gb3Blbihyb290LCBPX1JET05MWSB8IE9fRElSRUNUT1JZKTtcXG4rXFx0aWYgKGZlYXR1cmVfZmQgXFx1MDAzYyAwKVxcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcImNhbm5vdCBvcGVuIGNncm91cCByb290OiAlcyAoJWQpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBzdHJlcnJvcihlcnJubyksIGVycm5vKTtcXG4rXFx0cmV0ID0gcHJvYmVfbWVtY2dfYnBmX2ZlYXR1cmVzKGZlYXR1cmVfZmQpO1xcbitcXHRjbG9zZShmZWF0dXJlX2ZkKTtcXG4rXFx0aWYgKCFyZXQpXFxuK1xcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJzbGVlcGFibGUgY2dyb3VwIGl0ZXJhdG9yIG9yIG1lbWNnIGtmdW5jcyBhcmUgbm90IGF2YWlsYWJsZVxcXFxuXFxcIik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcImNhbm5vdCBwcm9iZSBCUEYgY2FwYWJpbGl0aWVzOiAlcyAoJWQpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBzdHJlcnJvcigtcmV0KSwgcmV0KTtcXG4rXFxuK1xcdGlmIChjZ19yZWFkX3N0cnN0cihyb290LCBcXFwiY2dyb3VwLmNvbnRyb2xsZXJzXFxcIiwgXFxcIm1lbW9yeVxcXCIpKVxcbitcXHRcXHRrc2Z0X2V4aXRfc2tpcChcXFwibWVtb3J5IGNvbnRyb2xsZXIgaXNuJ3QgYXZhaWxhYmxlXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGlmIChjZ19yZWFkX3N0cnN0cihyb290LCBcXFwiY2dyb3VwLnN1YnRyZWVfY29udHJvbFxcXCIsIFxcXCJtZW1vcnlcXFwiKSlcXG4rXFx0XFx0aWYgKGNnX3dyaXRlKHJvb3QsIFxcXCJjZ3JvdXAuc3VidHJlZV9jb250cm9sXFxcIiwgXFxcIittZW1vcnlcXFwiKSlcXG4rXFx0XFx0XFx0a3NmdF9leGl0X3NraXAoXFxcIkZhaWxlZCB0byBzZXQgbWVtb3J5IGNvbnRyb2xsZXJcXFxcblxcXCIpO1xcbitcXG4rXFx0Q1BVX1pFUk8oXFx1MDAyNmFsbG93ZWRfY3B1cyk7XFxuK1xcdGlmIChzY2hlZF9nZXRhZmZpbml0eSgwLCBzaXplb2YoYWxsb3dlZF9jcHVzKSwgXFx1MDAyNmFsbG93ZWRfY3B1cykpXFxuK1xcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJjYW5ub3QgcmVhZCBDUFUgYWZmaW5pdHlcXFxcblxcXCIpO1xcbitcXHRuX2NwdSA9IENQVV9DT1VOVChcXHUwMDI2YWxsb3dlZF9jcHVzKTtcXG4rXFx0aWYgKG5fY3B1IFxcdTAwM2M9IDApXFxuK1xcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJubyBDUFUgdG8gcnVuIG9uXFxcXG5cXFwiKTtcXG4rXFx0bl9vbmxpbmVfY3B1ID0gc3lzY29uZihfU0NfTlBST0NFU1NPUlNfT05MTik7XFxuK1xcdGlmIChuX29ubGluZV9jcHUgXFx1MDAzYz0gMClcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJjYW5ub3QgZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2Ygb25saW5lIENQVXNcXFxcblxcXCIpO1xcbitcXG4rXFx0cGFnZV9zaXplID0gc3lzY29uZihfU0NfUEFHRVNJWkUpO1xcbitcXHRpZiAocGFnZV9zaXplIFxcdTAwM2M9IDApXFxuK1xcdFxcdHBhZ2Vfc2l6ZSA9IEJVRl9TSVpFO1xcbitcXG4rXFx0c3VidHJlZV9yb290ID0gY2dfbmFtZShyb290LCBTVUJUUkVFX05BTUUpO1xcbitcXHRpZiAoIXN1YnRyZWVfcm9vdClcXG4rXFx0XFx0a3NmdF9leGl0X3NraXAoXFxcImNhbm5vdCBidWlsZCBzdWJ0cmVlIHJvb3QgcGF0aFxcXFxuXFxcIik7XFxuK1xcbitcXHQvKiBTZXQgdGhlIHBsYW4gYWZ0ZXIgYWxsIGdsb2JhbCBza2lwIGNoZWNrcy4gKi9cXG4rXFx0a3NmdF9zZXRfcGxhbihBUlJBWV9TSVpFKGNhc2VzKSk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShjYXNlcyk7IGkrKykge1xcbitcXHRcXHRzd2l0Y2ggKHJ1bl9jYXNlKFxcdTAwMjZjYXNlc1tpXSkpIHtcXG4rXFx0XFx0Y2FzZSBLU0ZUX1BBU1M6XFxuK1xcdFxcdFxcdGtzZnRfdGVzdF9yZXN1bHRfcGFzcyhcXFwiJXNcXFxcblxcXCIsIGNhc2VzW2ldLm5hbWUpO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSBLU0ZUX1NLSVA6XFxuK1xcdFxcdFxcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcXFwiJXNcXFxcblxcXCIsIGNhc2VzW2ldLm5hbWUpO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0ZGVmYXVsdDpcXG4rXFx0XFx0XFx0a3NmdF90ZXN0X3Jlc3VsdF9mYWlsKFxcXCIlc1xcXFxuXFxcIiwgY2FzZXNbaV0ubmFtZSk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdGZyZWUoc3VidHJlZV9yb290KTtcXG4rXFx0a3NmdF9maW5pc2hlZCgpO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X21lbWNvbnRyb2wuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X21lbWNvbnRyb2wuY1xcbmluZGV4IDBlYmY3OTZmM2NmZmUuLjE1YmE0Njg3OTUwNDIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfbWVtY29udHJvbC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfbWVtY29udHJvbC5jXFxuQEAgLTI2LDcgKzI2LDYgQEBcXG4gXFxuIHN0YXRpYyBib29sIGhhc19sb2NhbGV2ZW50cztcXG4gc3RhdGljIGJvb2wgaGFzX3JlY3Vyc2l2ZXByb3Q7XFxuLXN0YXRpYyBpbnQgcGFnZV9zaXplO1xcbiBcXG4gaW50IGdldF90ZW1wX2ZkKHZvaWQpXFxuIHtcXG5AQCAtNTYsMjggKzU1LDEyIEBAIGludCBhbGxvY19wYWdlY2FjaGUoaW50IGZkLCBzaXplX3Qgc2l6ZSlcXG4gXFx0cmV0dXJuIC0xO1xcbiB9XFxuIFxcbi1zdGF0aWMgY2hhciAqYWxsb2NfYW5kX3BvcHVsYXRlX2Fub24oc2l6ZV90IHNpemUpXFxuLXtcXG4tXFx0Y2hhciAqYnVmLCAqcHRyO1xcbi1cXG4tXFx0YnVmID0gbWFsbG9jKHNpemUpO1xcbi1cXHRpZiAoYnVmID09IE5VTEwpIHtcXG4tXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJtYWxsb2MoKSBmYWlsZWRcXFxcblxcXCIpO1xcbi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFx0fVxcbi1cXG4tXFx0Zm9yIChwdHIgPSBidWY7IHB0ciBcXHUwMDNjIGJ1ZiArIHNpemU7IHB0ciArPSBwYWdlX3NpemUpXFxuLVxcdFxcdCpwdHIgPSAwO1xcbi1cXG4tXFx0cmV0dXJuIGJ1ZjtcXG4tfVxcbi1cXG4gaW50IGFsbG9jX2Fub24oY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpXFxuIHtcXG4gXFx0c2l6ZV90IHNpemUgPSAodW5zaWduZWQgbG9uZylhcmc7XFxuIFxcdGNoYXIgKmJ1ZjtcXG4gXFxuLVxcdGJ1ZiA9IGFsbG9jX2FuZF9wb3B1bGF0ZV9hbm9uKHNpemUpO1xcbitcXHRidWYgPSBjZ19hbGxvY19hbm9uKHNpemUpO1xcbiBcXHRpZiAoIWJ1ZilcXG4gXFx0XFx0cmV0dXJuIC0xO1xcbiBcXG5AQCAtMTk1LDcgKzE3OCw3IEBAIHN0YXRpYyBpbnQgYWxsb2NfYW5vbl81ME1fY2hlY2soY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpXFxuIFxcdGxvbmcgYW5vbiwgY3VycmVudDtcXG4gXFx0aW50IHJldCA9IC0xO1xcbiBcXG4tXFx0YnVmID0gYWxsb2NfYW5kX3BvcHVsYXRlX2Fub24oc2l6ZSk7XFxuK1xcdGJ1ZiA9IGNnX2FsbG9jX2Fub24oc2l6ZSk7XFxuIFxcdGlmICghYnVmKVxcbiBcXHRcXHRyZXR1cm4gLTE7XFxuIFxcbkBAIC00MjAsNyArNDAzLDcgQEAgc3RhdGljIGludCBhbGxvY19hbm9uX25vZXhpdChjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZylcXG4gXFx0c2l6ZV90IHNpemUgPSAodW5zaWduZWQgbG9uZylhcmc7XFxuIFxcdGNoYXIgKmJ1ZjtcXG4gXFxuLVxcdGJ1ZiA9IGFsbG9jX2FuZF9wb3B1bGF0ZV9hbm9uKHNpemUpO1xcbitcXHRidWYgPSBjZ19hbGxvY19hbm9uKHNpemUpO1xcbiBcXHRpZiAoIWJ1ZilcXG4gXFx0XFx0cmV0dXJuIC0xO1xcbiBcXG5AQCAtMTAwMSw3ICs5ODQsNyBAQCBzdGF0aWMgaW50IGFsbG9jX2Fub25fNTBNX2NoZWNrX3N3YXAoY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpXFxuIFxcdGxvbmcgbWVtX2N1cnJlbnQsIHN3YXBfY3VycmVudDtcXG4gXFx0aW50IHJldCA9IC0xO1xcbiBcXG4tXFx0YnVmID0gYWxsb2NfYW5kX3BvcHVsYXRlX2Fub24oc2l6ZSk7XFxuK1xcdGJ1ZiA9IGNnX2FsbG9jX2Fub24oc2l6ZSk7XFxuIFxcdGlmICghYnVmKVxcbiBcXHRcXHRyZXR1cm4gLTE7XFxuIFxcbkBAIC0xNzkzLDEwICsxNzc2LDYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHRjaGFyIHJvb3RbUEFUSF9NQVhdO1xcbiBcXHRpbnQgaSwgcHJvY19zdGF0dXM7XFxuIFxcbi1cXHRwYWdlX3NpemUgPSBzeXNjb25mKF9TQ19QQUdFX1NJWkUpO1xcbi1cXHRpZiAocGFnZV9zaXplIFxcdTAwM2M9IDApXFxuLVxcdFxcdHBhZ2Vfc2l6ZSA9IEJVRl9TSVpFO1xcbi1cXG4gXFx0a3NmdF9wcmludF9oZWFkZXIoKTtcXG4gXFx0a3NmdF9zZXRfcGxhbihBUlJBWV9TSVpFKHRlc3RzKSk7XFxuIFxcdGlmIChjZ19maW5kX3VuaWZpZWRfcm9vdChyb290LCBzaXplb2Yocm9vdCksIE5VTEwpKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC8uZ2l0aWdub3JlXFxuaW5kZXggOTMzZjQ4MzgxNWIyYy4uNjk5NDMzMDFkYzFkNyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvLmdpdGlnbm9yZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC8uZ2l0aWdub3JlXFxuQEAgLTEsNSArMSw2IEBAXFxuIGJwZnRvb2xcXG4gKi5za2VsLmhcXG4rKi5icGYuZFxcbiAvaG9zdC10b29sc1xcbiAvdG9vbHNcXG4gaGlkX2JwZlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvTWFrZWZpbGVcXG5pbmRleCAyZjQyM2RlODMxNDczLi4xMTkwYTc0NzAzNmRhIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC9NYWtlZmlsZVxcbkBAIC00Nyw3ICs0Nyw2IEBAIG1zZyA9XFxuIGVsc2VcXG4gbXNnID0gQHByaW50ZiAnICAlLThzJXMgJXMlc1xcXFxuJyBcXFwiJCgxKVxcXCIgXFxcIiQoaWYgJCgyKSwgWyQoMildKVxcXCIgXFxcIiQobm90ZGlyICQoMykpXFxcIiBcXFwiJChpZiAkKDQpLCAkKDQpKVxcXCI7XFxuIE1BS0VGTEFHUyArPSAtLW5vLXByaW50LWRpcmVjdG9yeVxcbi1zdWJtYWtlX2V4dHJhcyA6PSBmZWF0dXJlX2Rpc3BsYXk9MFxcbiBlbmRpZlxcbiBcXG4gIyBvdmVycmlkZSBsaWIubWsncyBkZWZhdWx0IHJ1bGVzXFxuQEAgLTU4LDE3MiArNTcsMjUgQEAgb3ZlcnJpZGUgZGVmaW5lIENMRUFOXFxuIFxcdCQoUSkkKFJNKSAtciAkKEVYVFJBX0NMRUFOKVxcbiBlbmRlZlxcbiBcXG4taW5jbHVkZSAuLi9saWIubWtcXG4tXFxuLVRPT0xTRElSIDo9ICQodG9wX3NyY2RpcikvdG9vbHNcXG4tTElCRElSIDo9ICQoVE9PTFNESVIpL2xpYlxcbi1CUEZESVIgOj0gJChMSUJESVIpL2JwZlxcbi1UT09MU0lOQ0RJUiA6PSAkKFRPT0xTRElSKS9pbmNsdWRlXFxuLUJQRlRPT0xESVIgOj0gJChUT09MU0RJUikvYnBmL2JwZnRvb2xcXG4tU0NSQVRDSF9ESVIgOj0gJChPVVRQVVQpL3Rvb2xzXFxuLUJVSUxEX0RJUiA6PSAkKFNDUkFUQ0hfRElSKS9idWlsZFxcbi1JTkNMVURFX0RJUiA6PSAkKFNDUkFUQ0hfRElSKS9pbmNsdWRlXFxuLUJQRk9CSiA6PSAkKEJVSUxEX0RJUikvbGliYnBmL2xpYmJwZi5hXFxuLWlmbmVxICgkKENST1NTX0NPTVBJTEUpLClcXG4tSE9TVF9CVUlMRF9ESVJcXHRcXHQ6PSAkKEJVSUxEX0RJUikvaG9zdFxcbi1IT1NUX1NDUkFUQ0hfRElSXFx0Oj0gJChPVVRQVVQpL2hvc3QtdG9vbHNcXG4tSE9TVF9JTkNMVURFX0RJUlxcdDo9ICQoSE9TVF9TQ1JBVENIX0RJUikvaW5jbHVkZVxcbi1lbHNlXFxuLUhPU1RfQlVJTERfRElSXFx0XFx0Oj0gJChCVUlMRF9ESVIpXFxuLUhPU1RfU0NSQVRDSF9ESVJcXHQ6PSAkKFNDUkFUQ0hfRElSKVxcbi1IT1NUX0lOQ0xVREVfRElSXFx0Oj0gJChJTkNMVURFX0RJUilcXG4tZW5kaWZcXG4tSE9TVF9CUEZPQkogOj0gJChIT1NUX0JVSUxEX0RJUikvbGliYnBmL2xpYmJwZi5hXFxuLVJFU09MVkVfQlRGSURTIDo9ICQoSE9TVF9CVUlMRF9ESVIpL3Jlc29sdmVfYnRmaWRzL3Jlc29sdmVfYnRmaWRzXFxuLVxcbi1WTUxJTlVYX0JURl9QQVRIUyA/PSAkKGlmICQoTyksJChPKS92bWxpbnV4KVxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0XFx0ICAgICAkKGlmICQoS0JVSUxEX09VVFBVVCksJChLQlVJTERfT1VUUFVUKS92bWxpbnV4KVxcdFxcXFxcXG4tXFx0XFx0ICAgICAuLi8uLi8uLi8uLi92bWxpbnV4XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHRcXHQgICAgIC9zeXMva2VybmVsL2J0Zi92bWxpbnV4XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHRcXHQgICAgIC9ib290L3ZtbGludXgtJChzaGVsbCB1bmFtZSAtcilcXG4tVk1MSU5VWF9CVEYgPz0gJChhYnNwYXRoICQoZmlyc3R3b3JkICQod2lsZGNhcmQgJChWTUxJTlVYX0JURl9QQVRIUykpKSlcXG4taWZlcSAoJChWTUxJTlVYX0JURiksKVxcbi0kKGVycm9yIENhbm5vdCBmaW5kIGEgdm1saW51eCBmb3IgVk1MSU5VWF9CVEYgYXQgYW55IG9mIFxcXCIkKFZNTElOVVhfQlRGX1BBVEhTKVxcXCIpXFxuLWVuZGlmXFxuLVxcbi0jIERlZmluZSBzaW1wbGUgYW5kIHNob3J0IGBtYWtlIHRlc3RfcHJvZ3NgLCBgbWFrZSB0ZXN0X3N5c2N0bGAsIGV0YyB0YXJnZXRzXFxuLSMgdG8gYnVpbGQgaW5kaXZpZHVhbCB0ZXN0cy5cXG4tIyBOT1RFOiBTZW1pY29sb24gYXQgdGhlIGVuZCBpcyBjcml0aWNhbCB0byBvdmVycmlkZSBsaWIubWsncyBkZWZhdWx0IHN0YXRpY1xcbi0jIHJ1bGUgZm9yIGJpbmFyaWVzLlxcbi0kKG5vdGRpciAkKFRFU1RfR0VOX1BST0dTKSk6ICU6ICQoT1VUUFVUKS8lIDtcXG4tXFxuLSMgc29ydCByZW1vdmVzIGxpYmJwZiBkdXBsaWNhdGVzIHdoZW4gbm90IGNyb3NzLWJ1aWxkaW5nXFxuLU1BS0VfRElSUyA6PSAkKHNvcnQgJChCVUlMRF9ESVIpL2xpYmJwZiAkKEhPU1RfQlVJTERfRElSKS9saWJicGZcXHRcXHRcXFxcXFxuLVxcdCAgICAgICAkKEhPU1RfQlVJTERfRElSKS9icGZ0b29sICQoSE9TVF9CVUlMRF9ESVIpL3Jlc29sdmVfYnRmaWRzXFx0XFxcXFxcbi1cXHQgICAgICAgJChJTkNMVURFX0RJUikpXFxuLSQoTUFLRV9ESVJTKTpcXG4tXFx0JChjYWxsIG1zZyxNS0RJUiwsJEApXFxuLVxcdCQoUSlta2RpciAtcCAkQFxcbisjIEJ1aWxkIHRoZSBsZWdhY3kgcHJvZ3MvKi5jIGxheW91dCB3aXRoIHRoZSBzaGFyZWQgQlBGIHJ1bGVzLlxcbitCUEZfU1JDUyAgICAgICA6PSAkKHdpbGRjYXJkIHByb2dzLyouYylcXG4rQlBGX1BST0dfRVhUICAgOj0gLmNcXG4rIyBCUEZESVIgaXMgZGVmaW5lZCB3aGVuIHRoaXMgcmVjdXJzaXZlIHZhcmlhYmxlIGlzIGV4cGFuZGVkLlxcbitCUEZfRVhUUkFfSERSUyAgPSAkKHdpbGRjYXJkIHByb2dzLyouaCkgJCh3aWxkY2FyZCAkKEJQRkRJUikvaGlkX2JwZl8qLmgpIFxcXFxcXG4rXFx0XFx0ICAkKHdpbGRjYXJkICQoQlBGRElSKS8qLmJwZi5oKVxcbiBcXG4tREVGQVVMVF9CUEZUT09MIDo9ICQoSE9TVF9TQ1JBVENIX0RJUikvc2Jpbi9icGZ0b29sXFxuK2luY2x1ZGUgLi4vbGliLm1rXFxuK2luY2x1ZGUgLi4vbGliLmJwZi5ta1xcbiBcXG4rIyBQcmVzZXJ2ZSB0aGUgZXhpc3RpbmcgaW5zdGFsbCBsaXN0LlxcbitURVNUX0dFTl9GSUxFUyArPSAkKEJQRl9PQkpTKVxcbiBURVNUX0dFTl9QUk9HU19FWFRFTkRFRCArPSAkKERFRkFVTFRfQlBGVE9PTClcXG4gXFxuLSQoVEVTVF9HRU5fUFJPR1MpICQoVEVTVF9HRU5fUFJPR1NfRVhURU5ERUQpOiAkKEJQRk9CSilcXG4tXFxuLUJQRlRPT0wgPz0gJChERUZBVUxUX0JQRlRPT0wpXFxuLSQoREVGQVVMVF9CUEZUT09MKTogJCh3aWxkY2FyZCAkKEJQRlRPT0xESVIpLyouW2NoXSAkKEJQRlRPT0xESVIpL01ha2VmaWxlKSAgICBcXFxcXFxuLVxcdFxcdCAgICAkKEhPU1RfQlBGT0JKKSB8ICQoSE9TVF9CVUlMRF9ESVIpL2JwZnRvb2xcXG4tXFx0JChRKSQoTUFLRSkgJChzdWJtYWtlX2V4dHJhcykgIC1DICQoQlBGVE9PTERJUilcXHRcXHRcXHQgICAgICAgXFxcXFxcbi1cXHRcXHQgICAgQVJDSD0gQ1JPU1NfQ09NUElMRT0gQ0M9JChIT1NUQ0MpIExEPSQoSE9TVExEKSBcXHQgICAgICAgXFxcXFxcbi1cXHRcXHQgICAgRVhUUkFfQ0ZMQUdTPSctZyAtTzAnXFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG4tXFx0XFx0ICAgIE9VVFBVVD0kKEhPU1RfQlVJTERfRElSKS9icGZ0b29sL1xcdFxcdFxcdCAgICAgICBcXFxcXFxuLVxcdFxcdCAgICBMSUJCUEZfT1VUUFVUPSQoSE9TVF9CVUlMRF9ESVIpL2xpYmJwZi9cXHRcXHQgICAgICAgXFxcXFxcbi1cXHRcXHQgICAgTElCQlBGX0RFU1RESVI9JChIT1NUX1NDUkFUQ0hfRElSKS9cXHRcXHRcXHQgICAgICAgXFxcXFxcbi1cXHRcXHQgICAgcHJlZml4PSBERVNURElSPSQoSE9TVF9TQ1JBVENIX0RJUikvIGluc3RhbGwtYmluXFxuLVxcbi0kKEJQRk9CSik6ICQod2lsZGNhcmQgJChCUEZESVIpLyouW2NoXSAkKEJQRkRJUikvTWFrZWZpbGUpXFx0XFx0ICAgICAgIFxcXFxcXG4tXFx0ICAgfCAkKEJVSUxEX0RJUikvbGliYnBmXFxuLVxcdCQoUSkkKE1BS0UpICQoc3VibWFrZV9leHRyYXMpIC1DICQoQlBGRElSKSBPVVRQVVQ9JChCVUlMRF9ESVIpL2xpYmJwZi8gXFxcXFxcbi1cXHRcXHQgICAgRVhUUkFfQ0ZMQUdTPSctZyAtTzAnXFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG4tXFx0XFx0ICAgIERFU1RESVI9JChTQ1JBVENIX0RJUikgcHJlZml4PSBhbGwgaW5zdGFsbF9oZWFkZXJzXFxuLVxcbi1pZm5lcSAoJChCUEZPQkopLCQoSE9TVF9CUEZPQkopKVxcbi0kKEhPU1RfQlBGT0JKKTogJCh3aWxkY2FyZCAkKEJQRkRJUikvKi5bY2hdICQoQlBGRElSKS9NYWtlZmlsZSlcXHRcXHQgICAgICAgXFxcXFxcbi1cXHRcXHR8ICQoSE9TVF9CVUlMRF9ESVIpL2xpYmJwZlxcbi1cXHQkKFEpJChNQUtFKSAkKHN1Ym1ha2VfZXh0cmFzKSAtQyAkKEJQRkRJUikgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG4tXFx0XFx0ICAgIEVYVFJBX0NGTEFHUz0nLWcgLU8wJyBBUkNIPSBDUk9TU19DT01QSUxFPVxcdFxcdCAgICAgICBcXFxcXFxuLVxcdFxcdCAgICBPVVRQVVQ9JChIT1NUX0JVSUxEX0RJUikvbGliYnBmLyBDQz0kKEhPU1RDQykgTEQ9JChIT1NUTEQpIFxcXFxcXG4tXFx0XFx0ICAgIERFU1RESVI9JChIT1NUX1NDUkFUQ0hfRElSKS8gcHJlZml4PSBhbGwgaW5zdGFsbF9oZWFkZXJzXFxuLWVuZGlmXFxuLVxcbi0kKElOQ0xVREVfRElSKS92bWxpbnV4Lmg6ICQoVk1MSU5VWF9CVEYpICQoQlBGVE9PTCkgfCAkKElOQ0xVREVfRElSKVxcbi1pZmVxICgkKFZNTElOVVhfSCksKVxcbi1cXHQkKGNhbGwgbXNnLEdFTiwsJEApXFxuLVxcdCQoUSkkKEJQRlRPT0wpIGJ0ZiBkdW1wIGZpbGUgJChWTUxJTlVYX0JURikgZm9ybWF0IGMgXFx1MDAzZSAkQFxcbi1lbHNlXFxuLVxcdCQoY2FsbCBtc2csQ1AsLCRAKVxcbi1cXHQkKFEpY3AgXFxcIiQoVk1MSU5VWF9IKVxcXCIgJEBcXG4tZW5kaWZcXG4tXFxuLSQoUkVTT0xWRV9CVEZJRFMpOiAkKEhPU1RfQlBGT0JKKSB8ICQoSE9TVF9CVUlMRF9ESVIpL3Jlc29sdmVfYnRmaWRzXFx0XFxcXFxcbi1cXHRcXHQgICAgICAgJChUT09MU0RJUikvYnBmL3Jlc29sdmVfYnRmaWRzL21haW4uY1xcdFxcXFxcXG4tXFx0XFx0ICAgICAgICQoVE9PTFNESVIpL2xpYi9yYnRyZWUuY1xcdFxcdFxcdFxcXFxcXG4tXFx0XFx0ICAgICAgICQoVE9PTFNESVIpL2xpYi96YWxsb2MuY1xcdFxcdFxcdFxcXFxcXG4tXFx0XFx0ICAgICAgICQoVE9PTFNESVIpL2xpYi9zdHJpbmcuY1xcdFxcdFxcdFxcXFxcXG4tXFx0XFx0ICAgICAgICQoVE9PTFNESVIpL2xpYi9jdHlwZS5jXFx0XFx0XFx0XFxcXFxcbi1cXHRcXHQgICAgICAgJChUT09MU0RJUikvbGliL3N0cl9lcnJvcl9yLmNcXG4tXFx0JChRKSQoTUFLRSkgJChzdWJtYWtlX2V4dHJhcykgLUMgJChUT09MU0RJUikvYnBmL3Jlc29sdmVfYnRmaWRzXFx0XFxcXFxcbi1cXHRcXHRDQz0kKEhPU1RDQykgTEQ9JChIT1NUTEQpIEFSPSQoSE9TVEFSKSBcXFxcXFxuLVxcdFxcdExJQkJQRl9JTkNMVURFPSQoSE9TVF9JTkNMVURFX0RJUikgXFxcXFxcbi1cXHRcXHRPVVRQVVQ9JChIT1NUX0JVSUxEX0RJUikvcmVzb2x2ZV9idGZpZHMvIEJQRk9CSj0kKEhPU1RfQlBGT0JKKVxcbi1cXG4tIyBHZXQgQ2xhbmcncyBkZWZhdWx0IGluY2x1ZGVzIG9uIHRoaXMgc3lzdGVtLCBhcyBvcHBvc2VkIHRvIHRob3NlIHNlZW4gYnlcXG4tIyAnLS10YXJnZXQ9YnBmJy4gVGhpcyBmaXhlcyBcXFwibWlzc2luZ1xcXCIgZmlsZXMgb24gc29tZSBhcmNoaXRlY3R1cmVzL2Rpc3Ryb3MsXFxuLSMgc3VjaCBhcyBhc20vYnl0ZW9yZGVyLmgsIGFzbS9zb2NrZXQuaCwgYXNtL3NvY2tpb3MuaCwgc3lzL2NkZWZzLmggZXRjLlxcbi0jXFxuLSMgVXNlICctaWRpcmFmdGVyJzogRG9uJ3QgaW50ZXJmZXJlIHdpdGggaW5jbHVkZSBtZWNoYW5pY3MgZXhjZXB0IHdoZXJlIHRoZVxcbi0jIGJ1aWxkIHdvdWxkIGhhdmUgZmFpbGVkIGFueXdheXMuXFxuLWRlZmluZSBnZXRfc3lzX2luY2x1ZGVzXFxuLSQoc2hlbGwgJCgxKSAtdiAtRSAtIFxcdTAwM2MvZGV2L251bGwgMlxcdTAwM2VcXHUwMDI2MSBcXFxcXFxuLVxcdHwgc2VkIC1uICcvXFx1MDAzYy4uLlxcdTAwM2Ugc2VhcmNoIHN0YXJ0cyBoZXJlOi8sL0VuZCBvZiBzZWFyY2ggbGlzdC4veyBzfCBcXFxcKC8uKlxcXFwpfC1pZGlyYWZ0ZXIgXFxcXDF8cCB9JykgXFxcXFxcbi0kKHNoZWxsICQoMSkgLWRNIC1FIC0gXFx1MDAzYy9kZXYvbnVsbCB8IGdyZXAgJ19fcmlzY3ZfeGxlbiAnIHwgYXdrICd7cHJpbnRmKFxcXCItRF9fcmlzY3ZfeGxlbj0lZCAtRF9fQklUU19QRVJfTE9ORz0lZFxcXCIsICQkMywgJCQzKX0nKVxcbi1lbmRlZlxcbi1cXG4tIyBEZXRlcm1pbmUgdGFyZ2V0IGVuZGlhbm5lc3MuXFxuLUlTX0xJVFRMRV9FTkRJQU4gPSAkKHNoZWxsICQoQ0MpIC1kTSAtRSAtIFxcdTAwM2MvZGV2L251bGwgfCBcXFxcXFxuLVxcdFxcdFxcdGdyZXAgJ2RlZmluZSBfX0JZVEVfT1JERVJfXyBfX09SREVSX0xJVFRMRV9FTkRJQU5fXycpXFxuLU1FTkRJQU49JChpZiAkKElTX0xJVFRMRV9FTkRJQU4pLC1tbGl0dGxlLWVuZGlhbiwtbWJpZy1lbmRpYW4pXFxuLVxcbi1DTEFOR19TWVNfSU5DTFVERVMgPSAkKGNhbGwgZ2V0X3N5c19pbmNsdWRlcywkKENMQU5HKSlcXG4tQlBGX0NGTEFHUyA9IC1nIC1XZXJyb3IgLURfX1RBUkdFVF9BUkNIXyQoU1JDQVJDSCkgJChNRU5ESUFOKSBcXHRcXHRcXFxcXFxuLVxcdCAgICAgLVduby1taWNyb3NvZnQtYW5vbi10YWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxuLVxcdCAgICAgLWZtcy1leHRlbnNpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxuLVxcdCAgICAgLUkkKElOQ0xVREVfRElSKVxcbi1cXG4tQ0xBTkdfQ0ZMQUdTID0gJChDTEFOR19TWVNfSU5DTFVERVMpIFxcXFxcXG4tXFx0ICAgICAgIC1Xbm8tY29tcGFyZS1kaXN0aW5jdC1wb2ludGVyLXR5cGVzXFxuLVxcbi0jIEJ1aWxkIEJQRiBvYmplY3QgdXNpbmcgQ2xhbmdcXG4tIyAkMSAtIGlucHV0IC5jIGZpbGVcXG4tIyAkMiAtIG91dHB1dCAubyBmaWxlXFxuLSMgJDMgLSBDRkxBR1NcXG4tZGVmaW5lIENMQU5HX0JQRl9CVUlMRF9SVUxFXFxuLVxcdCQoY2FsbCBtc2csQ0xORy1CUEYsJChUUlVOTkVSX0JJTkFSWSksJDIpXFxuLVxcdCQoUSkkKENMQU5HKSAkMyAtTzIgLS10YXJnZXQ9YnBmIC1jICQxIC1tY3B1PXYzIC1vICQyXFxuLWVuZGVmXFxuLSMgU2ltaWxhciB0byBDTEFOR19CUEZfQlVJTERfUlVMRSwgYnV0IHdpdGggZGlzYWJsZWQgYWx1MzJcXG4tZGVmaW5lIENMQU5HX05PQUxVMzJfQlBGX0JVSUxEX1JVTEVcXG4tXFx0JChjYWxsIG1zZyxDTE5HLUJQRiwkKFRSVU5ORVJfQklOQVJZKSwkMilcXG4tXFx0JChRKSQoQ0xBTkcpICQzIC1PMiAtLXRhcmdldD1icGYgLWMgJDEgLW1jcHU9djIgLW8gJDJcXG4tZW5kZWZcXG4tIyBCdWlsZCBCUEYgb2JqZWN0IHVzaW5nIEdDQ1xcbi1kZWZpbmUgR0NDX0JQRl9CVUlMRF9SVUxFXFxuLVxcdCQoY2FsbCBtc2csR0NDLUJQRiwkKFRSVU5ORVJfQklOQVJZKSwkMilcXG4tXFx0JChRKSQoQlBGX0dDQykgJDMgLU8yIC1jICQxIC1vICQyXFxuLWVuZGVmXFxuLVxcbi1CUEZfUFJPR1NfRElSIDo9IHByb2dzXFxuLUJQRl9CVUlMRF9SVUxFIDo9IENMQU5HX0JQRl9CVUlMRF9SVUxFXFxuLUJQRl9TUkNTIDo9ICQobm90ZGlyICQod2lsZGNhcmQgJChCUEZfUFJPR1NfRElSKS8qLmMpKVxcbi1CUEZfT0JKUyA6PSAkKHBhdHN1YnN0ICUuYywkKE9VVFBVVCkvJS5icGYubywgJChCUEZfU1JDUykpXFxuLUJQRl9TS0VMUyA6PSAkKHBhdHN1YnN0ICUuYywkKE9VVFBVVCkvJS5za2VsLmgsICQoQlBGX1NSQ1MpKVxcbi1URVNUX0dFTl9GSUxFUyArPSAkKEJQRl9PQkpTKVxcbisjIEtlZXAgYWxpYXNlcyBzdWNoIGFzIFxcXCJtYWtlIGhpZF9icGZcXFwiIGZyb20gbWF0Y2hpbmcgbGliLm1rJ3MgYmluYXJ5IHJ1bGUuXFxuKyQobm90ZGlyICQoVEVTVF9HRU5fUFJPR1MpKTogJTogJChPVVRQVVQpLyUgO1xcbiBcXG4tJChCUEZfUFJPR1NfRElSKS1icGZvYmpzIDo9IHlcXG4tJChCUEZfT0JKUyk6ICQoT1VUUFVUKS8lLmJwZi5vOlxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0ICAgICAkKEJQRl9QUk9HU19ESVIpLyUuY1xcdFxcdFxcdFxcXFxcXG4tXFx0ICAgICAkKHdpbGRjYXJkICQoQlBGX1BST0dTX0RJUikvKi5oKVxcdFxcdFxcXFxcXG4tXFx0ICAgICAkKElOQ0xVREVfRElSKS92bWxpbnV4LmhcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdCAgICAgJCh3aWxkY2FyZCAkKEJQRkRJUikvaGlkX2JwZl8qLmgpXFx0XFx0XFx0XFxcXFxcbi1cXHQgICAgICQod2lsZGNhcmQgJChCUEZESVIpLyouYnBmLmgpXFx0XFx0XFx0XFxcXFxcbi1cXHQgICAgIHwgJChPVVRQVVQpICQoQlBGT0JKKVxcbi1cXHQkKGNhbGwgJChCUEZfQlVJTERfUlVMRSksJFxcdTAwM2MsJEAsICQoQlBGX0NGTEFHUykpXFxuLVxcbi0kKEJQRl9TS0VMUyk6ICUuc2tlbC5oOiAlLmJwZi5vICQoQlBGVE9PTCkgfCAkKE9VVFBVVClcXG4tXFx0JChjYWxsIG1zZyxHRU4tU0tFTCwkKEJJTkFSWSksJEApXFxuLVxcdCQoUSkkKEJQRlRPT0wpIGdlbiBvYmplY3QgJChcXHUwMDNjOi5vPS5saW5rZWQxLm8pICRcXHUwMDNjXFxuLVxcdCQoUSkkKEJQRlRPT0wpIGdlbiBza2VsZXRvbiAkKFxcdTAwM2M6Lm89LmxpbmtlZDEubykgbmFtZSAkKG5vdGRpciAkKFxcdTAwM2M6LmJwZi5vPSkpIFxcdTAwM2UgJEBcXG4rIyBSZWxpbmsgdGVzdHMgd2hlbiB0aGUgaW4tdHJlZSBsaWJicGYgY2hhbmdlcy5cXG4rJChURVNUX0dFTl9QUk9HUyk6ICQoQlBGT0JKKVxcbiBcXG4gJChPVVRQVVQpLyUubzogJS5jICQoQlBGX1NLRUxTKSBoaWRfY29tbW9uLmhcXG4gXFx0JChjYWxsIG1zZyxDQywsJEApXFxuQEAgLTIzMyw1ICs4NSw0IEBAICQoT1VUUFVUKS8lOiAkKE9VVFBVVCkvJS5vXFxuIFxcdCQoY2FsbCBtc2csQklOQVJZLCwkQClcXG4gXFx0JChRKSQoTElOSy5jKSAkXiAkKExETElCUykgLW8gJEBcXG4gXFxuLUVYVFJBX0NMRUFOIDo9ICQoU0NSQVRDSF9ESVIpICQoSE9TVF9TQ1JBVENIX0RJUikgZmVhdHVyZSBicGZ0b29sXFx0XFxcXFxcbi1cXHQkKGFkZHByZWZpeCAkKE9VVFBVVCkvLCoubyAqLnNrZWwuaCBub19hbHUzMilcXG4rRVhUUkFfQ0xFQU4gKz0gJChPVVRQVVQpLyoub1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvcHJvZ3MvaGlkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvcHJvZ3MvaGlkLmNcXG5pbmRleCBiMjFmYmIxM2M5MjZmLi5lYzczNGUxOGQyM2FlIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC9wcm9ncy9oaWQuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC9wcm9ncy9oaWQuY1xcbkBAIC0xMTEsNyArMTExLDcgQEAgaW50IGhpZF91c2VyX3Jhd19yZXF1ZXN0KHN0cnVjdCBoaWRfaHdfcmVxdWVzdF9zeXNjYWxsX2FyZ3MgKmFyZ3MpXFxuIHtcXG4gXFx0c3RydWN0IGhpZF9icGZfY3R4ICpjdHg7XFxuIFxcdGNvbnN0IHNpemVfdCBzaXplID0gYXJncy1cXHUwMDNlc2l6ZTtcXG4tXFx0aW50IGksIHJldCA9IDA7XFxuK1xcdGludCByZXQgPSAwO1xcbiBcXG4gXFx0aWYgKHNpemUgXFx1MDAzZSBzaXplb2YoYXJncy1cXHUwMDNlZGF0YSkpXFxuIFxcdFxcdHJldHVybiAtNzsgLyogLUUyQklHICovXFxuQEAgLTEzNyw3ICsxMzcsNyBAQCBpbnQgaGlkX3VzZXJfb3V0cHV0X3JlcG9ydChzdHJ1Y3QgaGlkX2h3X3JlcXVlc3Rfc3lzY2FsbF9hcmdzICphcmdzKVxcbiB7XFxuIFxcdHN0cnVjdCBoaWRfYnBmX2N0eCAqY3R4O1xcbiBcXHRjb25zdCBzaXplX3Qgc2l6ZSA9IGFyZ3MtXFx1MDAzZXNpemU7XFxuLVxcdGludCBpLCByZXQgPSAwO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4gXFxuIFxcdGlmIChzaXplIFxcdTAwM2Ugc2l6ZW9mKGFyZ3MtXFx1MDAzZWRhdGEpKVxcbiBcXHRcXHRyZXR1cm4gLTc7IC8qIC1FMkJJRyAqL1xcbkBAIC0xNjEsNyArMTYxLDcgQEAgaW50IGhpZF91c2VyX2lucHV0X3JlcG9ydChzdHJ1Y3QgaGlkX2h3X3JlcXVlc3Rfc3lzY2FsbF9hcmdzICphcmdzKVxcbiB7XFxuIFxcdHN0cnVjdCBoaWRfYnBmX2N0eCAqY3R4O1xcbiBcXHRjb25zdCBzaXplX3Qgc2l6ZSA9IGFyZ3MtXFx1MDAzZXNpemU7XFxuLVxcdGludCBpLCByZXQgPSAwO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4gXFxuIFxcdGlmIChzaXplIFxcdTAwM2Ugc2l6ZW9mKGFyZ3MtXFx1MDAzZWRhdGEpKVxcbiBcXHRcXHRyZXR1cm4gLTc7IC8qIC1FMkJJRyAqL1xcbkBAIC00MTcsNyArNDE3LDYgQEAgU0VDKFxcXCI/c3RydWN0X29wcy5zL2hpZF9od19vdXRwdXRfcmVwb3J0XFxcIilcXG4gaW50IEJQRl9QUk9HKGhpZF90ZXN0X2hpZHJhd19vdXRwdXRfcmVwb3J0LCBzdHJ1Y3QgaGlkX2JwZl9jdHggKmhjdHgsIF9fdTY0IHNvdXJjZSlcXG4ge1xcbiBcXHRfX3U4ICpkYXRhID0gaGlkX2JwZl9nZXRfZGF0YShoY3R4LCAwIC8qIG9mZnNldCAqLywgMyAvKiBzaXplICovKTtcXG4tXFx0aW50IHJldDtcXG4gXFxuIFxcdGlmICghZGF0YSlcXG4gXFx0XFx0cmV0dXJuIDA7IC8qIEVQRVJNIGNoZWNrICovXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2xpYi5icGYubWsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9saWIuYnBmLm1rXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi45MjM4Y2JmMWRlMDYyXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2xpYi5icGYubWtcXG5AQCAtMCwwICsxLDMyMSBAQFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNcXG4rIyBCdWlsZCBCUEYgcHJvZ3JhbXMgYW5kIHNrZWxldG9ucyBmb3Igc2VsZnRlc3RzLlxcbisjXFxuKyMgVXNlIGl0IGZyb20gYSB0ZXN0IE1ha2VmaWxlIGxpa2UgdGhpczpcXG4rI1xcbisjICAgICBCUEZfU1JDUyAgICAgICAgIDo9IGZvby5icGYuYyBiYXIuYnBmLmNcXG4rIyAgICAgVEVTVF9HRU5fUFJPR1MgICA6PSBmb29fdGVzdFxcbisjICAgICBPVkVSUklERV9UQVJHRVRTIDo9IDEgICAgICAgICAgICAgICMgc2V0IGJlZm9yZSBsaWIubWtcXG4rIyAgICAgaW5jbHVkZSAuLi9saWIubWtcXG4rIyAgICAgaW5jbHVkZSAuLi9saWIuYnBmLm1rXFxuKyNcXG4rIyAgICAgJChPVVRQVVQpL2Zvb190ZXN0OiBmb29fdGVzdC5jICQoQlBGX1NLRUxTKSAkKEJQRk9CSilcXG4rIyAgICAgICAgICQoY2FsbCBicGZfbGluaywkQCwkXFx1MDAzYylcXG4rI1xcbisjIERlcGVuZCBvbiAkKEJQRk9CSikgdG8gcmVsaW5rIHRoZSB0ZXN0IHdoZW4gbGliYnBmLmEgY2hhbmdlcy5cXG4rI1xcbisjIE9wdGlvbnMgdG8gc2V0IGJlZm9yZSBpbmNsdWRpbmcgbGliLmJwZi5tazpcXG4rIyAgIEJQRl9QUk9HX0VYVCAgICAgLSBzb3VyY2UgZW5kaW5nOyBkZWZhdWx0IC5icGYuYy4gVXNlIC5jIGZvciBwcm9ncy9mb28uYy5cXG4rIyAgIEJQRl9FWFRSQV9IRFJTICAgLSBtb3JlIGhlYWRlcnMgbmVlZGVkIGJ5IHRoZSBCUEYgb2JqZWN0cy5cXG4rIyAgIEJQRl9FWFRSQV9DRkxBR1MgLSBtb3JlIGZsYWdzIGZvciBjb21waWxpbmcgQlBGIHByb2dyYW1zLlxcbisjICAgQlBGX1NLRUxfRVhUICAgICAtIHNrZWxldG9uIGhlYWRlciBlbmRpbmc7IGRlZmF1bHQgLnNrZWwuaC4gTXVzdCBlbmQgaW5cXG4rIyAgICAgICAgICAgICAgICAgICAgICBza2VsLmguXFxuKyMgICBCUEZfR0VOX1NVQlNLRUwgIC0gYWxzbyBjcmVhdGUgYSBzdWJza2VsZXRvbiBoZWFkZXIgd2hlbiBzZXQuXFxuKyMgICBCUEZfT0JKX0RJUiAgICAgIC0gZm9sZGVyIGZvciBCUEYgb2JqZWN0czsgZGVmYXVsdCAkKE9VVFBVVCkuXFxuKyMgICBCUEZfU0tFTF9ESVIgICAgIC0gZm9sZGVyIGZvciBza2VsZXRvbiBoZWFkZXJzOyBkZWZhdWx0ICQoT1VUUFVUKS5cXG4rI1xcbisjIFNldCBvdXRwdXQgZGlyZWN0b3JpZXMgdGhhdCB1c2UgJChPVVRQVVQpIGFmdGVyIGluY2x1ZGluZyBsaWIubWsuXFxuKyNcXG4rIyBCUEZfQ0ZMQUdTIG1heSBiZSByZXBsYWNlZCBhZnRlciB0aGlzIGluY2x1ZGUuIEdlbmVyYXRlZCBuYW1lcyB1c2UgdGhlIHNvdXJjZVxcbisjIHN0ZW0gd2l0aG91dCBpdHMgZGlyZWN0b3J5LlxcbisjXFxuKyMgSW5jbHVkZSBsaWIubWsgZmlyc3QuIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBCUEYgYnVpbGQgdmFyaWFibGVzIGFuZCBicGZfbGluayxcXG4rIyBleHRlbmRzIGFsbCwgQ0ZMQUdTIGFuZCBFWFRSQV9DTEVBTiwgYW5kIGVuYWJsZXMgLkRFTEVURV9PTl9FUlJPUi5cXG4rXFxuK2luY2x1ZGUgJCh0b3Bfc3JjZGlyKS90b29scy9zY3JpcHRzL01ha2VmaWxlLmFyY2hcXHQjIEFSQ0ggLyBTUkNBUkNIIC8gSE9TVEFSQ0hcXG4rXFxuKyMgUmVtb3ZlIHBhcnRpYWwgZmlsZXMgd3JpdHRlbiBkaXJlY3RseSB0byAkQC5cXG4rLkRFTEVURV9PTl9FUlJPUjpcXG4rXFxuKyMgTWF0Y2ggdGhlIGxpYmJwZiBhbmQgYnBmdG9vbCBob3N0IGNvbXBpbGVyIHRvIExMVk09LlxcbitpZm5lcSAoJChMTFZNKSwpXFxuK0hPU1RDQyA/PSAkKExMVk1fUFJFRklYKWNsYW5nJChMTFZNX1NVRkZJWClcXG4rSE9TVExEID89ICQoTExWTV9QUkVGSVgpbGQubGxkJChMTFZNX1NVRkZJWClcXG4rZWxzZVxcbitIT1NUQ0MgPz0gZ2NjXFxuK0hPU1RMRCA/PSBsZFxcbitlbmRpZlxcbitDTEFORyAgPz0gY2xhbmdcXG4rXFxuK2lmbmVxICgkKFYpLDEpXFxuK2xpYl9icGZfc3VibWFrZV9leHRyYXMgOj0gZmVhdHVyZV9kaXNwbGF5PTBcXG4rZW5kaWZcXG4rXFxuKyMgTWF0Y2ggc2VsZnRlc3RzL2JwZiBkZWJ1ZyBhbmQgcmVsZWFzZSBvcHRpbWl6YXRpb24uXFxuK09QVF9GTEFHUyA/PSAkKGlmICQoUkVMRUFTRSksLU8yLC1PMClcXG4rXFxuKyMgLS0tLSBmaWxlcyBhbmQgdG9vbHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuKyMgVXNlIG9uZSBmdWxsIHBhdGguIERpZmZlcmVudCBmb3JtcyBvZiB0aGUgc2FtZSAtSSBwYXRoIGNhbiBjaGFuZ2UgQlRGIG9yZGVyLlxcbitsaWJfYnBmX3Rvb2xzX2RpciAgICAgICAgIDo9ICQoYWJzcGF0aCAkKHRvcF9zcmNkaXIpL3Rvb2xzKVxcbitsaWJfYnBmX2RpciAgICAgICAgICAgICAgIDo9ICQobGliX2JwZl90b29sc19kaXIpL2xpYi9icGZcXG4rbGliX2JwZl90b29sc19pbmNsdWRlX2RpciA6PSAkKGxpYl9icGZfdG9vbHNfZGlyKS9pbmNsdWRlXFxuK2xpYl9icGZfYnBmdG9vbF9kaXIgICAgICAgOj0gJChsaWJfYnBmX3Rvb2xzX2RpcikvYnBmL2JwZnRvb2xcXG4rbGliX2JwZl9hcGlfZGlyICAgICAgICAgICA6PSAkKGxpYl9icGZfdG9vbHNfaW5jbHVkZV9kaXIpL3VhcGlcXG4rbGliX2JwZl9zb3VyY2VzICAgICAgICAgICA6PSAkKHdpbGRjYXJkICQobGliX2JwZl9kaXIpLyouW2NoXSBcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICAkKGxpYl9icGZfZGlyKS9NYWtlZmlsZSlcXG4rbGliX2JwZl9oZWFkZXJfc291cmNlcyAgICA6PSAkKGZpbHRlciAlLmgsJChsaWJfYnBmX3NvdXJjZXMpKSBcXFxcXFxuK1xcdFxcdFxcdFxcdCAgICAgJChsaWJfYnBmX2FwaV9kaXIpL2xpbnV4L2JwZi5oXFxuKyMgS2VlcCB0aGVzZSBuYW1lcyBmb3IgY2FsbGVycyB3aGljaCBhZGQgdGhlaXIgb3duIEJQRiBmbGFncyBvciBkZXBlbmRlbmNpZXMuXFxuK0JQRkRJUiAgICAgOj0gJChsaWJfYnBmX2RpcilcXG4rQVBJRElSICAgICA6PSAkKGxpYl9icGZfYXBpX2RpcilcXG4rXFxuKyMgS2VlcCBwcml2YXRlIGJ1aWxkIGZpbGVzIHVuZGVyICQoT1VUUFVUKSBmb3IgYm90aCBpbi10cmVlIGFuZCBPPSBidWlsZHMuXFxuK2xpYl9icGZfc2NyYXRjaF9kaXIgOj0gJChPVVRQVVQpL3Rvb2xzXFxuK2xpYl9icGZfYnVpbGRfZGlyICAgOj0gJChsaWJfYnBmX3NjcmF0Y2hfZGlyKS9idWlsZFxcbitsaWJfYnBmX2luY2x1ZGVfZGlyIDo9ICQobGliX2JwZl9zY3JhdGNoX2RpcikvaW5jbHVkZVxcbisjIElOQ0xVREVfRElSIGlzIGFsc28gdXNlZCBieSBjYWxsZXJzIHRoYXQgcmVwbGFjZSBCUEZfQ0ZMQUdTLlxcbitJTkNMVURFX0RJUiA6PSAkKGxpYl9icGZfaW5jbHVkZV9kaXIpXFxuK0JQRk9CSiAgICAgIDo9ICQobGliX2JwZl9idWlsZF9kaXIpL2xpYmJwZi9saWJicGYuYVxcbitcXG4rIyBDcm9zcyBidWlsZHMgdXNlIGEgc2VwYXJhdGUgbmF0aXZlIGxpYmJwZiBmb3IgYnBmdG9vbC5cXG4raWZuZXEgKCQoQ1JPU1NfQ09NUElMRSkkKGZpbHRlci1vdXQgJChIT1NUQVJDSCksJChTUkNBUkNIKSksKVxcbitsaWJfYnBmX2hvc3RfYnVpbGRfZGlyICAgOj0gJChsaWJfYnBmX2J1aWxkX2RpcikvaG9zdFxcbitsaWJfYnBmX2hvc3Rfc2NyYXRjaF9kaXIgOj0gJChPVVRQVVQpL2hvc3QtdG9vbHNcXG4rZWxzZVxcbitsaWJfYnBmX2hvc3RfYnVpbGRfZGlyICAgOj0gJChsaWJfYnBmX2J1aWxkX2RpcilcXG4rbGliX2JwZl9ob3N0X3NjcmF0Y2hfZGlyIDo9ICQobGliX2JwZl9zY3JhdGNoX2RpcilcXG4rZW5kaWZcXG4rbGliX2JwZl9ob3N0X29iaiA6PSAkKGxpYl9icGZfaG9zdF9idWlsZF9kaXIpL2xpYmJwZi9saWJicGYuYVxcbitERUZBVUxUX0JQRlRPT0wgIDo9ICQobGliX2JwZl9ob3N0X3NjcmF0Y2hfZGlyKS9zYmluL2JwZnRvb2xcXG4rQlBGVE9PTCAgICAgICAgICA/PSAkKERFRkFVTFRfQlBGVE9PTClcXG4rXFxuKyMgUmV1c2UgdGFyZ2V0IFVTRVJDRkxBR1Mgb25seSB3aGVuIGJwZnRvb2wgc2hhcmVzIHRoZSB0YXJnZXQgbGliYnBmLlxcbitpZmVxICgkKEJQRk9CSiksJChsaWJfYnBmX2hvc3Rfb2JqKSlcXG4rbGliX2JwZl9ob3N0X3VzZXJfY2ZsYWdzIDo9ICQoVVNFUkNGTEFHUylcXG4rZW5kaWZcXG4rXFxuKyMgLS0tLSBmaW5kIHZtbGludXggQlRGIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuK1ZNTElOVVhfQlRGX1BBVEhTID89ICQoaWYgJChPKSwkKE8pL3ZtbGludXgpXFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHQgICAgICQoaWYgJChLQlVJTERfT1VUUFVUKSwkKEtCVUlMRF9PVVRQVVQpL3ZtbGludXgpXFx0XFxcXFxcbitcXHRcXHQgICAgICQodG9wX3NyY2Rpcikvdm1saW51eFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0ICAgICAvc3lzL2tlcm5lbC9idGYvdm1saW51eFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0ICAgICAvYm9vdC92bWxpbnV4LSQoc2hlbGwgdW5hbWUgLXIpXFxuK1ZNTElOVVhfQlRGID89ICQoYWJzcGF0aCAkKGZpcnN0d29yZCAkKHdpbGRjYXJkICQoVk1MSU5VWF9CVEZfUEFUSFMpKSkpXFxuKyMgRGVsYXkgbWlzc2luZy12bWxpbnV4IGVycm9ycyBzbyBcXFwibWFrZSBjbGVhblxcXCIgc3RpbGwgd29ya3MuXFxuK2xpYl9icGZfdm1saW51eF9kZXBzIDo9ICQoaWYgJChWTUxJTlVYX0gpLCQoVk1MSU5VWF9IKSwkKFZNTElOVVhfQlRGKSAkKEJQRlRPT0wpKVxcbitcXG4rIyAtLS0tIGNvbXBpbGVyIGZsYWdzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rIyBGaW5kIHRoZSBub3JtYWwgc3lzdGVtIGhlYWRlcnMgdGhhdCBDbGFuZyBvbWl0cyB3aXRoIC0tdGFyZ2V0PWJwZi4gUHV0IHRoZW1cXG4rIyBsYXN0IHdpdGggLWlkaXJhZnRlciBzbyB0aGV5IGNhbm5vdCByZXBsYWNlIHByb2plY3QgaGVhZGVycy5cXG4rZGVmaW5lIGxpYl9icGZfZ2V0X3N5c19pbmNsdWRlc1xcbiskKHNoZWxsICQoMSkgJCgyKSAtdiAtRSAtIFxcdTAwM2MvZGV2L251bGwgMlxcdTAwM2VcXHUwMDI2MSBcXFxcXFxuK1xcdHwgc2VkIC1uICcvXFx1MDAzYy4uLlxcdTAwM2Ugc2VhcmNoIHN0YXJ0cyBoZXJlOi8sL0VuZCBvZiBzZWFyY2ggbGlzdC4veyBzfCBcXFxcKC8uKlxcXFwpfC1pZGlyYWZ0ZXIgXFxcXDF8cCB9JykgXFxcXFxcbiskKHNoZWxsICQoMSkgJCgyKSAtZE0gLUUgLSBcXHUwMDNjL2Rldi9udWxsIHwgZ3JlcCAnX19yaXNjdl94bGVuICcgfCBhd2sgJ3twcmludGYoXFxcIi1EX19yaXNjdl94bGVuPSVkIC1EX19CSVRTX1BFUl9MT05HPSVkXFxcIiwgJCQzLCAkJDMpfScpIFxcXFxcXG4rJChzaGVsbCAkKDEpICQoMikgLWRNIC1FIC0gXFx1MDAzYy9kZXYvbnVsbCB8IGdyZXAgJ19fbG9vbmdhcmNoX2dybGVuICcgfCBhd2sgJ3twcmludGYoXFxcIi1EX19CSVRTX1BFUl9MT05HPSVkXFxcIiwgJCQzKX0nKSBcXFxcXFxuKyQoc2hlbGwgJCgxKSAkKDIpIC1kTSAtRSAtIFxcdTAwM2MvZGV2L251bGwgfCBncmVwIC1FICdNSVBTKEVMfEVCKXxfTUlQU19TWihQVFJ8TE9ORykgfF9NSVBTX1NJTSB8X0FCSShPMzJ8TjMyfDY0KSAnIHwgYXdrICd7cHJpbnRmKFxcXCItRCVzPSVzIFxcXCIsICQkMiwgJCQzKX0nKVxcbitlbmRlZlxcbitpZm5lcSAoJChDUk9TU19DT01QSUxFKSwpXFxuK2xpYl9icGZfY2xhbmdfdGFyZ2V0X2FyY2ggPSAtLXRhcmdldD0kKG5vdGRpciAkKENST1NTX0NPTVBJTEU6JS09JSkpXFxuK2VuZGlmXFxuKyMgRmluZCB0aGUgc3lzdGVtIGluY2x1ZGUgZmxhZ3Mgb25jZSBhbmQgcmV1c2UgdGhlbS5cXG4rQ0xBTkdfU1lTX0lOQ0xVREVTIDo9ICQoY2FsbCBsaWJfYnBmX2dldF9zeXNfaW5jbHVkZXMsJChDTEFORyksJChsaWJfYnBmX2NsYW5nX3RhcmdldF9hcmNoKSlcXG4rXFxuK2xpYl9icGZfaXNfbGl0dGxlX2VuZGlhbiA6PSAkKHNoZWxsICQoQ0MpIC1kTSAtRSAtIFxcdTAwM2MvZGV2L251bGwgfCBcXFxcXFxuK1xcdFxcdFxcdFxcdCAgICBncmVwICdkZWZpbmUgX19CWVRFX09SREVSX18gX19PUkRFUl9MSVRUTEVfRU5ESUFOX18nKVxcbitNRU5ESUFOIDo9ICQoaWYgJChsaWJfYnBmX2lzX2xpdHRsZV9lbmRpYW4pLC1tbGl0dGxlLWVuZGlhbiwtbWJpZy1lbmRpYW4pXFxuK1xcbisjIFVzZSBCUEYgQ1BVIHYzIHdoZW4gQ2xhbmcgc3VwcG9ydHMgaXQuIE90aGVyd2lzZSB1c2UgdjIuXFxuK2xpYl9icGZfY2xhbmdfY3B1IDo9ICQoc2hlbGwgJChDTEFORykgLS10YXJnZXQ9YnBmIC1tY3B1PWhlbHAgMlxcdTAwM2VcXHUwMDI2MSB8IFxcXFxcXG4rXFx0XFx0XFx0ICAgICBncmVwIC1xICd2MycgXFx1MDAyNlxcdTAwMjYgZWNobyB2MyB8fCBlY2hvIHYyKVxcbitcXG4rIyBBY2NlcHQgYW5vbnltb3VzIHN0cnVjdCBhbmQgdW5pb24gbWVtYmVycyBpbiB2bWxpbnV4LmguXFxuK0JQRl9DRkxBR1MgPSAtZyAtV2FsbCAtV2Vycm9yIC1EX19UQVJHRVRfQVJDSF8kKFNSQ0FSQ0gpICQoTUVORElBTilcXHRcXFxcXFxuK1xcdCAgICAgLUkkKElOQ0xVREVfRElSKSAtSSQoQVBJRElSKVxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0ICAgICAtc3RkPWdudTExXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQgICAgIC1mbm8tc3RyaWN0LWFsaWFzaW5nXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQgICAgIC1mbXMtZXh0ZW5zaW9ucyAtV25vLW1pY3Jvc29mdC1hbm9uLXRhZ1xcdFxcdFxcdFxcXFxcXG4rXFx0ICAgICAtV25vLWNvbXBhcmUtZGlzdGluY3QtcG9pbnRlci10eXBlc1xcdFxcdFxcdFxcXFxcXG4rXFx0ICAgICAkKENMQU5HX1NZU19JTkNMVURFUykgJChCUEZfRVhUUkFfQ0ZMQUdTKVxcbitcXG4rIyAkMSA9IHNvdXJjZSwgJDIgPSBvYmplY3QuIC1NTUQgLU1QIHRyYWNrcyBub24tc3lzdGVtIGhlYWRlcnMuXFxuK2RlZmluZSBsaWJfYnBmX2J1aWxkX3J1bGVcXG4rXFx0JChjYWxsIG1zZyxDTE5HLUJQRiwsJDIpXFxuK1xcdCQoUSkkKENMQU5HKSAkKEJQRl9DRkxBR1MpIC1PMiAtLXRhcmdldD1icGYgLW1jcHU9JChsaWJfYnBmX2NsYW5nX2NwdSkgXFxcXFxcbitcXHRcXHQtTU1EIC1NUCAtYyAkMSAtbyAkMlxcbitlbmRlZlxcbitcXG4rIyAtLS0tIG91dHB1dCBmb2xkZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rQlBGX09CSl9ESVIgID89ICQoT1VUUFVUKVxcbitCUEZfU0tFTF9ESVIgPz0gJChPVVRQVVQpXFxuKyMgUmVqZWN0IGVtcHR5IGRpcmVjdG9yaWVzIGJlZm9yZSBjbGVhbnVwIGdsb2JzIGNhbiByZWFjaCB0aGUgZmlsZXN5c3RlbSByb290LlxcbitpZmVxICgkKHN0cmlwICQoQlBGX09CSl9ESVIpKSwpXFxuKyQoZXJyb3IgbGliLmJwZi5tazogQlBGX09CSl9ESVIgaXMgZW1wdHk7IHNldCBpdCBhZnRlciBcXFwiaW5jbHVkZSAuLi9saWIubWtcXFwiKVxcbitlbmRpZlxcbitpZmVxICgkKHN0cmlwICQoQlBGX1NLRUxfRElSKSksKVxcbiskKGVycm9yIGxpYi5icGYubWs6IEJQRl9TS0VMX0RJUiBpcyBlbXB0eTsgc2V0IGl0IGFmdGVyIFxcXCJpbmNsdWRlIC4uL2xpYi5ta1xcXCIpXFxuK2VuZGlmXFxuK1xcbisjIC0tLS0gYnVpbGQgZm9sZGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbitsaWJfYnBmX21ha2VfZGlycyA6PSAkKHNvcnQgJChsaWJfYnBmX2J1aWxkX2RpcikvbGliYnBmXFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHQgICAgJChsaWJfYnBmX2hvc3RfYnVpbGRfZGlyKS9saWJicGZcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdCAgICAkKGxpYl9icGZfaG9zdF9idWlsZF9kaXIpL2JwZnRvb2xcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdCAgICAkKGxpYl9icGZfaW5jbHVkZV9kaXIpXFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHQgICAgJChmaWx0ZXItb3V0ICQoT1VUUFVUKSwkKEJQRl9PQkpfRElSKSAkKEJQRl9TS0VMX0RJUikpKVxcbiskKGxpYl9icGZfbWFrZV9kaXJzKTpcXG4rXFx0JChjYWxsIG1zZyxNS0RJUiwsJEApXFxuK1xcdCQoUSlta2RpciAtcCAkQFxcbitcXG4rIyAtLS0tIHRhcmdldCBsaWJicGYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rIyBQYXNzIHVuZXhwb3J0ZWQgdG9vbGNoYWluIHNldHRpbmdzIGFuZCBidWlsZCBQSUMgZm9yIFBJRSB0ZXN0IGJpbmFyaWVzLlxcbisjIGxpYmJwZiBjb25zdW1lcyBVU0VSQ0ZMQUdTIHRocm91Z2ggRVhUUkFfQ0ZMQUdTLlxcbiskKEJQRk9CSik6ICQobGliX2JwZl9zb3VyY2VzKSAkKGxpYl9icGZfYXBpX2RpcikvbGludXgvYnBmLmggXFxcXFxcbitcXHQgICB8ICQobGliX2JwZl9idWlsZF9kaXIpL2xpYmJwZlxcbitcXHQkKFEpJChNQUtFKSAkKGxpYl9icGZfc3VibWFrZV9leHRyYXMpIC1DICQobGliX2JwZl9kaXIpIFxcXFxcXG4rXFx0XFx0ICAgIE9VVFBVVD0kKGxpYl9icGZfYnVpbGRfZGlyKS9saWJicGYvIFxcXFxcXG4rXFx0XFx0ICAgIEFSQ0g9JChBUkNIKSBDUk9TU19DT01QSUxFPSQoQ1JPU1NfQ09NUElMRSkgQ0M9XFxcIiQoQ0MpXFxcIiAgICAgXFxcXFxcbitcXHRcXHQgICAgRVhUUkFfQ0ZMQUdTPSctZyAkKE9QVF9GTEFHUykgLWZQSUMgJChFWFRSQV9DRkxBR1MpICQoVVNFUkNGTEFHUyknIFxcXFxcXG4rXFx0XFx0ICAgIERFU1RESVI9JChsaWJfYnBmX3NjcmF0Y2hfZGlyKSBwcmVmaXg9IGFsbCBpbnN0YWxsX2hlYWRlcnNcXG4rXFxuKyMgLS0tLSBob3N0IGxpYmJwZiwgb25seSB3aGVuIHRoZSB0YXJnZXQgZGlmZmVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuK2lmbmVxICgkKEJQRk9CSiksJChsaWJfYnBmX2hvc3Rfb2JqKSlcXG4rJChsaWJfYnBmX2hvc3Rfb2JqKTogJChsaWJfYnBmX3NvdXJjZXMpICQobGliX2JwZl9hcGlfZGlyKS9saW51eC9icGYuaCBcXFxcXFxuK1xcdFxcdHwgJChsaWJfYnBmX2hvc3RfYnVpbGRfZGlyKS9saWJicGZcXG4rXFx0JChRKSQoTUFLRSkgJChsaWJfYnBmX3N1Ym1ha2VfZXh0cmFzKSAtQyAkKGxpYl9icGZfZGlyKSBcXFxcXFxuK1xcdFxcdCAgICBBUkNIPSBDUk9TU19DT01QSUxFPSBcXFxcXFxuK1xcdFxcdCAgICBPVVRQVVQ9JChsaWJfYnBmX2hvc3RfYnVpbGRfZGlyKS9saWJicGYvIFxcXFxcXG4rXFx0XFx0ICAgIENDPVxcXCIkKEhPU1RDQylcXFwiIExEPVxcXCIkKEhPU1RMRClcXFwiIFxcXFxcXG4rXFx0XFx0ICAgIEVYVFJBX0NGTEFHUz0nLWcgJChPUFRfRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKScgXFxcXFxcbitcXHRcXHQgICAgREVTVERJUj0kKGxpYl9icGZfaG9zdF9zY3JhdGNoX2RpcikgcHJlZml4PSBhbGwgaW5zdGFsbF9oZWFkZXJzXFxuK2VuZGlmXFxuK1xcbisjIC0tLS0gaG9zdCBicGZ0b29sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbiskKERFRkFVTFRfQlBGVE9PTCk6ICQod2lsZGNhcmQgJChsaWJfYnBmX2JwZnRvb2xfZGlyKS8qLltjaF0gXFxcXFxcbitcXHRcXHRcXHRcXHQgJChsaWJfYnBmX2JwZnRvb2xfZGlyKS9NYWtlZmlsZSkgXFxcXFxcbitcXHRcXHQgICAgJChsaWJfYnBmX2hvc3Rfb2JqKSB8ICQobGliX2JwZl9ob3N0X2J1aWxkX2RpcikvYnBmdG9vbFxcbitcXHQkKFEpJChNQUtFKSAkKGxpYl9icGZfc3VibWFrZV9leHRyYXMpIC1DICQobGliX2JwZl9icGZ0b29sX2RpcikgXFxcXFxcbitcXHRcXHQgICAgQVJDSD0gQ1JPU1NfQ09NUElMRT0gQ0M9XFxcIiQoSE9TVENDKVxcXCIgTEQ9XFxcIiQoSE9TVExEKVxcXCIgXFxcXFxcbitcXHRcXHQgICAgRVhUUkFfQ0ZMQUdTPSctZyAkKE9QVF9GTEFHUykgJChFWFRSQV9DRkxBR1MpICQobGliX2JwZl9ob3N0X3VzZXJfY2ZsYWdzKScgXFxcXFxcbitcXHRcXHQgICAgRVhUUkFfTERGTEFHUz0nJChFWFRSQV9MREZMQUdTKSdcXHRcXHQgIFxcXFxcXG4rXFx0XFx0ICAgIE9VVFBVVD0kKGxpYl9icGZfaG9zdF9idWlsZF9kaXIpL2JwZnRvb2wvXFx0ICBcXFxcXFxuK1xcdFxcdCAgICBMSUJCUEZfT1VUUFVUPSQobGliX2JwZl9ob3N0X2J1aWxkX2RpcikvbGliYnBmLyBcXFxcXFxuK1xcdFxcdCAgICBMSUJCUEZfREVTVERJUj0kKGxpYl9icGZfaG9zdF9zY3JhdGNoX2RpcikvXFx0ICBcXFxcXFxuK1xcdFxcdCAgICBwcmVmaXg9IERFU1RESVI9JChsaWJfYnBmX2hvc3Rfc2NyYXRjaF9kaXIpLyBpbnN0YWxsLWJpblxcbitcXG4rIyAtLS0tIGJ1aWxkIHZtbGludXguaCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rbGliX2JwZl92bWxpbnV4X2ggICAgIDo9ICQoSU5DTFVERV9ESVIpL3ZtbGludXguaFxcbitsaWJfYnBmX3ZtbGludXhfc3RhbXAgOj0gJChJTkNMVURFX0RJUikvdm1saW51eC5oLnN0YW1wXFxuK1xcbisjIFByZXNlcnZlIHZtbGludXguaCdzIHRpbWVzdGFtcCB3aGVuIGl0cyBjb250ZW50cyBkbyBub3QgY2hhbmdlLlxcbitpZmVxICgkKHdpbGRjYXJkICQobGliX2JwZl92bWxpbnV4X2gpKSwpXFxuKyMgUmVnZW5lcmF0ZSBpZiB0aGUgaGVhZGVyIGlzIG1pc3NpbmcgYnV0IGl0cyBzdGFtcCByZW1haW5zLlxcbisuUEhPTlk6ICQobGliX2JwZl92bWxpbnV4X3N0YW1wKVxcbitlbmRpZlxcbitcXG4rIyBVc2UgYSBub3JtYWwgZWRnZSBzbyBkZXBlbmRlbnRzIHNlZSBhIGNoYW5nZWQgaGVhZGVyIGluIHRoZSBzYW1lIG1ha2UgcnVuLlxcbiskKGxpYl9icGZfdm1saW51eF9oKTogJChsaWJfYnBmX3ZtbGludXhfc3RhbXApIDtcXG4rXFxuKyQobGliX2JwZl92bWxpbnV4X3N0YW1wKTogJChsaWJfYnBmX3ZtbGludXhfZGVwcykgfCAkKElOQ0xVREVfRElSKVxcbitpZmVxICgkKFZNTElOVVhfSCksKVxcbitcXHQkKGNhbGwgbXNnLEdFTiwsJChsaWJfYnBmX3ZtbGludXhfaCkpXFxuK1xcdCQoUSl0ZXN0IC1uIFxcXCIkKFZNTElOVVhfQlRGKVxcXCIgfHwgeyBcXFxcXFxuK1xcdFxcdGVjaG8gXFxcImxpYi5icGYubWs6IG5vIHZtbGludXggYXQgYW55IG9mIFxcXFxcXFwiJChWTUxJTlVYX0JURl9QQVRIUylcXFxcXFxcIlxcXCIgXFx1MDAzZVxcdTAwMjYyOyBcXFxcXFxuK1xcdFxcdGV4aXQgMTsgfVxcbitcXHQkKFEpJChCUEZUT09MKSBidGYgZHVtcCBmaWxlICQoVk1MSU5VWF9CVEYpIGZvcm1hdCBjIFxcdTAwM2UgJEAudG1wXFxuK2Vsc2VcXG4rXFx0JChjYWxsIG1zZyxDUCwsJChsaWJfYnBmX3ZtbGludXhfaCkpXFxuK1xcdCQoUSljcCBcXFwiJChWTUxJTlVYX0gpXFxcIiAkQC50bXBcXG4rZW5kaWZcXG4rXFx0JChRKWNtcCAtcyAkQC50bXAgJChsaWJfYnBmX3ZtbGludXhfaCkgfHwgbXYgJEAudG1wICQobGliX2JwZl92bWxpbnV4X2gpXFxuK1xcdCQoUSlybSAtZiAkQC50bXBcXG4rXFx0JChRKXRvdWNoICRAXFxuK1xcbisjIC0tLS0gQlBGIG9iamVjdHMgYW5kIHNrZWxldG9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbitCUEZfUFJPR19FWFQgPz0gLmJwZi5jXFxuKyMgRWFjaCBzb3VyY2UgbXVzdCBlbmQgd2l0aCBCUEZfUFJPR19FWFQgc28gTWFrZSBjYW4gcmVtb3ZlIHRoYXQgZW5kaW5nLlxcbitsaWJfYnBmX2JhZF9zcmNzIDo9ICQoZmlsdGVyLW91dCAlJChCUEZfUFJPR19FWFQpLCQoQlBGX1NSQ1MpKVxcbitpZm5lcSAoJChsaWJfYnBmX2JhZF9zcmNzKSwpXFxuKyQoZXJyb3IgbGliLmJwZi5tazogQlBGX1NSQ1MgZW50cmllcyBtdXN0IGVuZCBpbiAkKEJQRl9QUk9HX0VYVCk6ICQobGliX2JwZl9iYWRfc3JjcykpXFxuK2VuZGlmXFxuK2xpYl9icGZfc3RlbXMgOj0gJChwYXRzdWJzdCAlJChCUEZfUFJPR19FWFQpLCUsJChub3RkaXIgJChCUEZfU1JDUykpKVxcbisjIFRoZSBzdGVtIGJlY29tZXMgdGhlIHNrZWxldG9uJ3MgQyBuYW1lOyByZWplY3QgZG90cyBhbmQgaHlwaGVucy5cXG4rbGliX2JwZl9iYWRfc3RlbXMgOj0gJChzdHJpcCAkKGZvcmVhY2ggcywkKGxpYl9icGZfc3RlbXMpLFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0JChpZiAkKGZpbmRzdHJpbmcgLiwkKHMpKSQoZmluZHN0cmluZyAtLCQocykpLCQocykpKSlcXG4raWZuZXEgKCQobGliX2JwZl9iYWRfc3RlbXMpLClcXG4rJChlcnJvciBsaWIuYnBmLm1rOiBCUEZfU1JDUyBiYXNlbmFtZXMgbXVzdCBub3QgY29udGFpbiAnLicgb3IgJy0nOiAkKGxpYl9icGZfYmFkX3N0ZW1zKSlcXG4rZW5kaWZcXG4rIyBPdXRwdXQgbmFtZXMgb21pdCBkaXJlY3Rvcmllcywgc28gcmVqZWN0IGR1cGxpY2F0ZSBzdGVtcy5cXG4raWZuZXEgKCQod29yZHMgJChsaWJfYnBmX3N0ZW1zKSksJCh3b3JkcyAkKHNvcnQgJChsaWJfYnBmX3N0ZW1zKSkpKVxcbiskKGVycm9yIGxpYi5icGYubWs6IEJQRl9TUkNTIGhhcyBjb2xsaWRpbmcgYmFzZW5hbWVzOiAkKEJQRl9TUkNTKSlcXG4rZW5kaWZcXG4rQlBGX1NLRUxfRVhUICAgID89IC5za2VsLmhcXG4rbGliX2JwZl9zdWJza2VsX2V4dCA6PSAkKHBhdHN1YnN0ICVza2VsLmgsJXN1YnNrZWwuaCwkKEJQRl9TS0VMX0VYVCkpXFxuKyMgS2VlcCBza2VsZXRvbiBzdWZmaXhlcyBkaXN0aW5jdCBhbmQgY2xlYW51cCBnbG9icyBuYXJyb3cuXFxuK2lmZXEgKCQobGliX2JwZl9zdWJza2VsX2V4dCksJChCUEZfU0tFTF9FWFQpKVxcbiskKGVycm9yIGxpYi5icGYubWs6IEJQRl9TS0VMX0VYVCBtdXN0IGVuZCBpbiBza2VsLmg6ICQoQlBGX1NLRUxfRVhUKSlcXG4rZW5kaWZcXG4rQlBGX09CSlMgIDo9ICQoYWRkcHJlZml4ICQoQlBGX09CSl9ESVIpLywkKGFkZHN1ZmZpeCAuYnBmLm8sJChsaWJfYnBmX3N0ZW1zKSkpXFxuK0JQRl9TS0VMUyA6PSAkKGFkZHByZWZpeCAkKEJQRl9TS0VMX0RJUikvLCQoYWRkc3VmZml4ICQoQlBGX1NLRUxfRVhUKSwkKGxpYl9icGZfc3RlbXMpKSlcXG4raWZuZXEgKCQoQlBGX0dFTl9TVUJTS0VMKSwpXFxuK0JQRl9TVUJTS0VMUyA6PSAkKGFkZHByZWZpeCAkKEJQRl9TS0VMX0RJUikvLCQoYWRkc3VmZml4ICQobGliX2JwZl9zdWJza2VsX2V4dCksJChsaWJfYnBmX3N0ZW1zKSkpXFxuK2VuZGlmXFxuK1xcbisjIFVzZSBwZXItc291cmNlIHJ1bGVzIHRvIGF2b2lkIGNoYW5naW5nIG5vcm1hbCAuYyBsb29rdXAuXFxuKyMgVHJhY2sgc291cmNlIGhlYWRlcnMgYmVmb3JlIEJQRk9CSiBpbnN0YWxscyB0aGVpciB1cGRhdGVkIGNvcGllcy5cXG4rZGVmaW5lIGxpYl9icGZfb2JqX3J1bGVcXG4rJChCUEZfT0JKX0RJUikvJChwYXRzdWJzdCAlJChCUEZfUFJPR19FWFQpLCUsJChub3RkaXIgJCgxKSkpLmJwZi5vOiAkKDEpXFx0XFxcXFxcbitcXHRcXHQkKEJQRl9FWFRSQV9IRFJTKSAkKGxpYl9icGZfaGVhZGVyX3NvdXJjZXMpXFx0XFx0XFx0XFxcXFxcbitcXHRcXHQkKElOQ0xVREVfRElSKS92bWxpbnV4LmggfCAkKEJQRl9PQkpfRElSKSAkKEJQRk9CSilcXG4rXFx0JCQoY2FsbCBsaWJfYnBmX2J1aWxkX3J1bGUsJCRcXHUwMDNjLCQkQClcXG4rZW5kZWZcXG4rJChmb3JlYWNoIHNyYywkKEJQRl9TUkNTKSwkKGV2YWwgJChjYWxsIGxpYl9icGZfb2JqX3J1bGUsJChzcmMpKSkpXFxuK1xcbisjIEdlbmVyYXRlIGJvdGggaGVhZGVycyB0b2dldGhlciBzbyBlaXRoZXIgbWlzc2luZyB0YXJnZXQgcmVidWlsZHMgdGhlIHBhaXIuXFxuK2xpYl9icGZfc2tlbF90YXJnZXRzIDo9ICQoQlBGX1NLRUxfRElSKS8lJChCUEZfU0tFTF9FWFQpXFxuK2lmbmVxICgkKEJQRl9HRU5fU1VCU0tFTCksKVxcbitsaWJfYnBmX3NrZWxfdGFyZ2V0cyArPSAkKEJQRl9TS0VMX0RJUikvJSQobGliX2JwZl9zdWJza2VsX2V4dClcXG4rZW5kaWZcXG4rXFxuKyMgTGluayB0aHJlZSB0aW1lcyBhbmQgcmVxdWlyZSB0aGUgZmluYWwgdHdvIG9iamVjdHMgdG8gbWF0Y2guXFxuKyQobGliX2JwZl9za2VsX3RhcmdldHMpOiAkKEJQRl9PQkpfRElSKS8lLmJwZi5vICQoQlBGVE9PTCkgfCAkKEJQRl9TS0VMX0RJUilcXG4rXFx0JChjYWxsIG1zZyxHRU4tU0tFTCwsJChCUEZfU0tFTF9ESVIpLyQqJChCUEZfU0tFTF9FWFQpKVxcbitcXHQkKFEpJChCUEZUT09MKSBnZW4gb2JqZWN0ICQoXFx1MDAzYzoubz0ubGlua2VkMS5vKSAkXFx1MDAzY1xcbitcXHQkKFEpJChCUEZUT09MKSBnZW4gb2JqZWN0ICQoXFx1MDAzYzoubz0ubGlua2VkMi5vKSAkKFxcdTAwM2M6Lm89LmxpbmtlZDEubylcXG4rXFx0JChRKSQoQlBGVE9PTCkgZ2VuIG9iamVjdCAkKFxcdTAwM2M6Lm89LmxpbmtlZDMubykgJChcXHUwMDNjOi5vPS5saW5rZWQyLm8pXFxuK1xcdCQoUSlkaWZmICQoXFx1MDAzYzoubz0ubGlua2VkMi5vKSAkKFxcdTAwM2M6Lm89LmxpbmtlZDMubylcXG4rXFx0JChRKSQoQlBGVE9PTCkgZ2VuIHNrZWxldG9uICQoXFx1MDAzYzoubz0ubGlua2VkMy5vKSBuYW1lICQqIFxcdTAwM2UgJChCUEZfU0tFTF9ESVIpLyQqJChCUEZfU0tFTF9FWFQpXFxuK2lmbmVxICgkKEJQRl9HRU5fU1VCU0tFTCksKVxcbitcXHQkKFEpJChCUEZUT09MKSBnZW4gc3Vic2tlbGV0b24gJChcXHUwMDNjOi5vPS5saW5rZWQzLm8pIG5hbWUgJCogXFx1MDAzZSAkKEJQRl9TS0VMX0RJUikvJCokKGxpYl9icGZfc3Vic2tlbF9leHQpXFxuK2VuZGlmXFxuK1xcdCQoUSlybSAtZiAkKFxcdTAwM2M6Lm89LmxpbmtlZDEubykgJChcXHUwMDNjOi5vPS5saW5rZWQyLm8pICQoXFx1MDAzYzoubz0ubGlua2VkMy5vKVxcbitcXG4rIyBSZWFkIHRoZSBoZWFkZXIgZGVwZW5kZW5jaWVzIHdyaXR0ZW4gYnkgLU1NRC5cXG4rLWluY2x1ZGUgJChCUEZfT0JKUzoubz0uZClcXG4rXFxuKyMgLS0tLSB2YWx1ZXMgZm9yIHRoZSB0ZXN0IE1ha2VmaWxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuKyMgQWRkIHRoZSBpbnN0YWxsZWQgbGliYnBmL3ZtbGludXguaCBkaXJlY3RvcnkgYW5kIHRoZSBza2VsZXRvbiBkaXJlY3RvcnkuXFxuK0NGTEFHUyArPSAtSSQoSU5DTFVERV9ESVIpIC1JJChCUEZfU0tFTF9ESVIpXFxuK1xcbisjIEFkZCB0YXJnZXQgenN0ZCB3aGVuIGZvdW5kIGJ5IHRoZSB0YXJnZXQgcGtnLWNvbmZpZy5cXG4rUEtHX0NPTkZJRyA/PSAkKENST1NTX0NPTVBJTEUpcGtnLWNvbmZpZ1xcbitCUEZfTERMSUJTIDo9ICQoQlBGT0JKKSAtbGVsZiAtbHpcXG4raWZuZXEgKCQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWV4aXN0cyBsaWJ6c3RkIDJcXHUwMDNlL2Rldi9udWxsIFxcdTAwMjZcXHUwMDI2IGVjaG8geSksKVxcbitCUEZfTERMSUJTICs9IC1senN0ZFxcbitlbmRpZlxcbitcXG4rIyBBZGQgc2tlbGV0b25zIGFmdGVyIGxpYi5tayBkZWZpbmVzIGFsbC5cXG4rYWxsOiAkKEJQRl9TS0VMUykgJChCUEZfU1VCU0tFTFMpXFxuK1xcbisjIFRoZSBza2VsZXRvbiBhbHJlYWR5IGVtYmVkcyBlYWNoIEJQRiBvYmplY3QgaW4gdGhlIHRlc3QgYmluYXJ5LiBUbyBpbnN0YWxsIHRoZVxcbisjIG9iamVjdHMgc2VwYXJhdGVseSwgYWRkIFRFU1RfR0VOX0ZJTEVTICs9ICQoQlBGX09CSlMpLlxcbitcXG4rIyAkMSA9IGJpbmFyeSwgJDIgPSB0ZXN0IHNvdXJjZS4gVXNlIHRoZSBzYW1lIGNvbXBpbGUgYW5kIGxpbmsgZmxhZ3MgYXMgbGliLm1rLlxcbitkZWZpbmUgYnBmX2xpbmtcXG4rXFx0JChjYWxsIG1zZyxCSU5BUlksLCQxKVxcbitcXHQkKFEpJChDQykgJChDRkxBR1MpICQoQ1BQRkxBR1MpICQoTERGTEFHUykgJChUQVJHRVRfQVJDSCkgJDIgXFxcXFxcbitcXHRcXHQkKEJQRl9MRExJQlMpICQoTERMSUJTKSAtbyAkMVxcbitlbmRlZlxcbitcXG4rRVhUUkFfQ0xFQU4gKz0gJChzb3J0ICQobGliX2JwZl9zY3JhdGNoX2RpcikgJChsaWJfYnBmX2hvc3Rfc2NyYXRjaF9kaXIpKSBcXFxcXFxuK1xcdCAgICAgICAkKGFkZHByZWZpeCAkKEJQRl9PQkpfRElSKS8sKi5icGYubyAqLmJwZi5kICoubGlua2VkKi5vKVxcdFxcXFxcXG4rXFx0ICAgICAgICQoYWRkcHJlZml4ICQoQlBGX1NLRUxfRElSKS8sKiQoQlBGX1NLRUxfRVhUKSAqJChsaWJfYnBmX3N1YnNrZWxfZXh0KSlcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L01ha2VmaWxlXFxuaW5kZXggM2NmZTkwZTBmMzRmYS4uZGQzZjU1OTRhZjI0MCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvTWFrZWZpbGVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvTWFrZWZpbGVcXG5AQCAtMTQsNDggKzE0LDI5IEBAIENVUkRJUiA6PSAkKGFic3BhdGggLilcXG4gUkVQT1JPT1QgOj0gJChhYnNwYXRoIC4uLy4uLy4uLy4uKVxcbiBUT09MU0RJUiA6PSAkKFJFUE9ST09UKS90b29sc1xcbiBMSUJESVIgOj0gJChUT09MU0RJUikvbGliXFxuLUJQRkRJUiA6PSAkKExJQkRJUikvYnBmXFxuIFRPT0xTSU5DRElSIDo9ICQoVE9PTFNESVIpL2luY2x1ZGVcXG4tQlBGVE9PTERJUiA6PSAkKFRPT0xTRElSKS9icGYvYnBmdG9vbFxcbi1BUElESVIgOj0gJChUT09MU0lOQ0RJUikvdWFwaVxcbiBHRU5ESVIgOj0gJChSRVBPUk9PVCkvaW5jbHVkZS9nZW5lcmF0ZWRcXG4gR0VOSERSIDo9ICQoR0VORElSKS9hdXRvY29uZi5oXFxuLVNDWFRPT0xTRElSIDo9ICQoVE9PTFNESVIpL3NjaGVkX2V4dFxcbiBTQ1hUT09MU0lOQ0RJUiA6PSAkKFRPT0xTRElSKS9zY2hlZF9leHQvaW5jbHVkZVxcbiBcXG4tT1VUUFVUX0RJUiA6PSAkKE9VVFBVVCkvYnVpbGRcXG4tT0JKX0RJUiA6PSAkKE9VVFBVVF9ESVIpL29ialxcbi1JTkNMVURFX0RJUiA6PSAkKE9VVFBVVF9ESVIpL2luY2x1ZGVcXG4tQlBGT0JKX0RJUiA6PSAkKE9CSl9ESVIpL2xpYmJwZlxcbi1TQ1hPQkpfRElSIDo9ICQoT0JKX0RJUikvc2NoZWRfZXh0XFxuLUJQRk9CSiA6PSAkKEJQRk9CSl9ESVIpL2xpYmJwZi5hXFxuLUxJQkJQRl9PVVRQVVQgOj0gJChPQkpfRElSKS9saWJicGYvbGliYnBmLmFcXG4tXFxuLURFRkFVTFRfQlBGVE9PTCA6PSAkKE9VVFBVVF9ESVIpL2hvc3Qvc2Jpbi9icGZ0b29sXFxuLUhPU1RfT0JKX0RJUiA6PSAkKE9CSl9ESVIpL2hvc3QvYnBmdG9vbFxcbi1IT1NUX0xJQkJQRl9PVVRQVVQgOj0gJChPQkpfRElSKS9ob3N0L2xpYmJwZi9cXG4tSE9TVF9MSUJCUEZfREVTVERJUiA6PSAkKE9VVFBVVF9ESVIpL2hvc3QvXFxuLUhPU1RfREVTVERJUiA6PSAkKE9VVFBVVF9ESVIpL2hvc3QvXFxuLVxcbi1WTUxJTlVYX0JURl9QQVRIUyA/PSAkKGlmICQoTyksJChPKS92bWxpbnV4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0XFx0ICAgICAkKGlmICQoS0JVSUxEX09VVFBVVCksJChLQlVJTERfT1VUUFVUKS92bWxpbnV4KVxcdFxcdFxcXFxcXG4tXFx0XFx0ICAgICAuLi8uLi8uLi8uLi92bWxpbnV4XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHRcXHQgICAgIC9zeXMva2VybmVsL2J0Zi92bWxpbnV4XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHRcXHQgICAgIC9ib290L3ZtbGludXgtJChzaGVsbCB1bmFtZSAtcilcXG4tVk1MSU5VWF9CVEYgPz0gJChhYnNwYXRoICQoZmlyc3R3b3JkICQod2lsZGNhcmQgJChWTUxJTlVYX0JURl9QQVRIUykpKSlcXG4taWZlcSAoJChWTUxJTlVYX0JURiksKVxcbi0kKGVycm9yIENhbm5vdCBmaW5kIGEgdm1saW51eCBmb3IgVk1MSU5VWF9CVEYgYXQgYW55IG9mIFxcXCIkKFZNTElOVVhfQlRGX1BBVEhTKVxcXCIpXFxuLWVuZGlmXFxuKyMgQnVpbGQgc2NoZWR1bGVyIHNrZWxldG9ucyBhbmQgc3Vic2tlbGV0b25zIHdpdGggdGhlIHNoYXJlZCBCUEYgcnVsZXMuXFxuK0JQRl9TUkNTICAgICAgICA6PSAkKHdpbGRjYXJkICouYnBmLmMpXFxuK0JQRl9TS0VMX0VYVCAgICA6PSAuYnBmLnNrZWwuaFxcbitCUEZfR0VOX1NVQlNLRUwgOj0gMVxcbisjIFByZXNlcnZlIHRoZSBleGlzdGluZyBidWlsZC8gbGF5b3V0LlxcbitCUEZfT0JKX0RJUiAgOj0gJChPVVRQVVQpL2J1aWxkL29iai9zY2hlZF9leHRcXG4rQlBGX1NLRUxfRElSIDo9ICQoT1VUUFVUKS9idWlsZC9pbmNsdWRlXFxuK1NDWE9CSl9ESVIgICA6PSAkKEJQRl9PQkpfRElSKVxcbiBcXG4tQlBGVE9PTCA/PSAkKERFRkFVTFRfQlBGVE9PTClcXG4raW5jbHVkZSAuLi9saWIuYnBmLm1rXFxuIFxcbiBpZm5lcSAoJCh3aWxkY2FyZCAkKEdFTkhEUikpLClcXG4gICBHRU5GTEFHUyA6PSAtREhBVkVfR0VOSERSXFxuIGVuZGlmXFxuIFxcbiBDRkxBR1MgKz0gLWcgLU8yIC1yZHluYW1pYyAtcHRocmVhZCAtV2FsbCAtV2Vycm9yICQoR0VORkxBR1MpXFx0XFx0XFx0XFxcXFxcbi1cXHQgIC1JJChJTkNMVURFX0RJUikgLUkkKEdFTkRJUikgLUkkKExJQkRJUilcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdCAgLUkkKFRPT0xTSU5DRElSKSAtSSQoQVBJRElSKSAtSSQoQ1VSRElSKS9pbmNsdWRlIC1JJChTQ1hUT09MU0lOQ0RJUilcXG4rXFx0ICAtSSQoR0VORElSKSAtSSQoTElCRElSKSAtSSQoVE9PTFNJTkNESVIpIC1JJChBUElESVIpXFx0XFx0XFx0XFxcXFxcbitcXHQgIC1JJChDVVJESVIpL2luY2x1ZGUgLUkkKFNDWFRPT0xTSU5DRElSKVxcbiBcXG4gIyBTaWxlbmNlIHNvbWUgd2FybmluZ3Mgd2hlbiBjb21waWxlZCB3aXRoIGNsYW5nXFxuIGlmbmVxICgkKExMVk0pLClcXG5AQCAtNjQsMTAyICs0NSwyNiBAQCBlbmRpZlxcbiBcXG4gTERGTEFHUyA9IC1sZWxmIC1seiAtbHB0aHJlYWQgLWx6c3RkXFxuIFxcbi1JU19MSVRUTEVfRU5ESUFOID0gJChzaGVsbCAkKENDKSAtZE0gLUUgLSBcXHUwMDNjL2Rldi9udWxsIHxcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdFxcdFxcdGdyZXAgJ2RlZmluZSBfX0JZVEVfT1JERVJfXyBfX09SREVSX0xJVFRMRV9FTkRJQU5fXycpXFxuLVxcbi0jIEdldCBDbGFuZydzIGRlZmF1bHQgaW5jbHVkZXMgb24gdGhpcyBzeXN0ZW0sIGFzIG9wcG9zZWQgdG8gdGhvc2Ugc2VlbiBieVxcbi0jICctdGFyZ2V0IGJwZicuIFRoaXMgZml4ZXMgXFxcIm1pc3NpbmdcXFwiIGZpbGVzIG9uIHNvbWUgYXJjaGl0ZWN0dXJlcy9kaXN0cm9zLFxcbi0jIHN1Y2ggYXMgYXNtL2J5dGVvcmRlci5oLCBhc20vc29ja2V0LmgsIGFzbS9zb2NraW9zLmgsIHN5cy9jZGVmcy5oIGV0Yy5cXG4tI1xcbi0jIFVzZSAnLWlkaXJhZnRlcic6IERvbid0IGludGVyZmVyZSB3aXRoIGluY2x1ZGUgbWVjaGFuaWNzIGV4Y2VwdCB3aGVyZSB0aGVcXG4tIyBidWlsZCB3b3VsZCBoYXZlIGZhaWxlZCBhbnl3YXlzLlxcbi1kZWZpbmUgZ2V0X3N5c19pbmNsdWRlc1xcbi0kKHNoZWxsICQoMSkgJCgyKSAtdiAtRSAtIFxcdTAwM2MvZGV2L251bGwgMlxcdTAwM2VcXHUwMDI2MSBcXFxcXFxuLVxcdHwgc2VkIC1uICcvXFx1MDAzYy4uLlxcdTAwM2Ugc2VhcmNoIHN0YXJ0cyBoZXJlOi8sL0VuZCBvZiBzZWFyY2ggbGlzdC4veyBzfCBcXFxcKC8uKlxcXFwpfC1pZGlyYWZ0ZXIgXFxcXDF8cCB9JykgXFxcXFxcbi0kKHNoZWxsICQoMSkgJCgyKSAtZE0gLUUgLSBcXHUwMDNjL2Rldi9udWxsIHwgZ3JlcCAnX19yaXNjdl94bGVuICcgfCBhd2sgJ3twcmludGYoXFxcIi1EX19yaXNjdl94bGVuPSVkIC1EX19CSVRTX1BFUl9MT05HPSVkXFxcIiwgJCQzLCAkJDMpfScpXFxuLWVuZGVmXFxuLVxcbi1pZm5lcSAoJChDUk9TU19DT01QSUxFKSwpXFxuLUNMQU5HX1RBUkdFVF9BUkNIID0gLS10YXJnZXQ9JChub3RkaXIgJChDUk9TU19DT01QSUxFOiUtPSUpKVxcbi1lbmRpZlxcbi1cXG4tQ0xBTkdfU1lTX0lOQ0xVREVTID0gJChjYWxsIGdldF9zeXNfaW5jbHVkZXMsJChDTEFORyksJChDTEFOR19UQVJHRVRfQVJDSCkpXFxuLVxcbi1CUEZfQ0ZMQUdTID0gLWcgLURfX1RBUkdFVF9BUkNIXyQoU1JDQVJDSClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdCAgICAgJChpZiAkKElTX0xJVFRMRV9FTkRJQU4pLC1tbGl0dGxlLWVuZGlhbiwtbWJpZy1lbmRpYW4pXFx0XFx0XFxcXFxcbisjIFByZXNlcnZlIHRoZSBzY2hlZHVsZXItc3BlY2lmaWMgZmxhZ3M7IHRoZSBzaGFyZWQgcmVjaXBlIGFkZHMgdGFyZ2V0IGZsYWdzLlxcbitCUEZfQ0ZMQUdTID0gLWcgLURfX1RBUkdFVF9BUkNIXyQoU1JDQVJDSCkgJChNRU5ESUFOKVxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0ICAgICAtSSQoQ1VSRElSKS9pbmNsdWRlIC1JJChDVVJESVIpL2luY2x1ZGUvYnBmLWNvbXBhdFxcdFxcdFxcdFxcXFxcXG4gXFx0ICAgICAtSSQoSU5DTFVERV9ESVIpIC1JJChBUElESVIpIC1JJChTQ1hUT09MU0lOQ0RJUilcXHRcXHRcXHRcXFxcXFxuIFxcdCAgICAgLUkkKFJFUE9ST09UKS9pbmNsdWRlXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHQgICAgICQoQ0xBTkdfU1lTX0lOQ0xVREVTKSBcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdCAgICAgJChDTEFOR19TWVNfSU5DTFVERVMpXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHQgICAgIC1XYWxsIC1Xbm8tY29tcGFyZS1kaXN0aW5jdC1wb2ludGVyLXR5cGVzXFx0XFx0XFx0XFx0XFxcXFxcbiBcXHQgICAgIC1Xbm8taW5jb21wYXRpYmxlLWZ1bmN0aW9uLXBvaW50ZXItdHlwZXNcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdCAgICAgLVduby1taWNyb3NvZnQtYW5vbi10YWdcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdCAgICAgLWZtcy1leHRlbnNpb25zXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHQgICAgIC1PMiAtbWNwdT12M1xcbi1cXG4tIyBzb3J0IHJlbW92ZXMgbGliYnBmIGR1cGxpY2F0ZXMgd2hlbiBub3QgY3Jvc3MtYnVpbGRpbmdcXG4tTUFLRV9ESVJTIDo9ICQoc29ydCAkKE9CSl9ESVIpL2xpYmJwZiAkKE9CSl9ESVIpL2xpYmJwZlxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0ICAgICAgICQoT0JKX0RJUikvYnBmdG9vbCAkKE9CSl9ESVIpL3Jlc29sdmVfYnRmaWRzXFx0XFx0XFx0XFxcXFxcbi1cXHQgICAgICAgJChIT1NUX09CSl9ESVIpICQoSU5DTFVERV9ESVIpICQoU0NYT0JKX0RJUikpXFxuLVxcbi0kKE1BS0VfRElSUyk6XFxuLVxcdCQoY2FsbCBtc2csTUtESVIsLCRAKVxcbi1cXHQkKFEpbWtkaXIgLXAgJEBcXG4tXFxuLSQoQlBGT0JKKTogJCh3aWxkY2FyZCAkKEJQRkRJUikvKi5bY2hdICQoQlBGRElSKS9NYWtlZmlsZSlcXHRcXHRcXHRcXFxcXFxuLVxcdCAgICQoQVBJRElSKS9saW51eC9icGYuaFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0ICAgfCAkKE9CSl9ESVIpL2xpYmJwZlxcbi1cXHQkKFEpJChNQUtFKSAkKHN1Ym1ha2VfZXh0cmFzKSAtQyAkKEJQRkRJUikgT1VUUFVUPSQoT0JKX0RJUikvbGliYnBmL1xcdFxcXFxcXG4tXFx0XFx0ICAgIEFSQ0g9JChBUkNIKSBDQz1cXFwiJChDQylcXFwiIENST1NTX0NPTVBJTEU9JChDUk9TU19DT01QSUxFKVxcdFxcXFxcXG4tXFx0XFx0ICAgIEVYVFJBX0NGTEFHUz0nLWcgLU8wIC1mUElDJ1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0XFx0ICAgIERFU1RESVI9JChPVVRQVVRfRElSKSBwcmVmaXg9IGFsbCBpbnN0YWxsX2hlYWRlcnNcXG4tXFxuLSQoREVGQVVMVF9CUEZUT09MKTogJCh3aWxkY2FyZCAkKEJQRlRPT0xESVIpLyouW2NoXSAkKEJQRlRPT0xESVIpL01ha2VmaWxlKVxcdFxcXFxcXG4tXFx0XFx0ICAgICQoTElCQlBGX09VVFBVVCkgfCAkKEhPU1RfT0JKX0RJUilcXG4tXFx0JChRKSQoTUFLRSkgJChzdWJtYWtlX2V4dHJhcykgIC1DICQoQlBGVE9PTERJUilcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdFxcdCAgICBBUkNIPSBDUk9TU19DT01QSUxFPSBDQz0kKEhPU1RDQykgTEQ9JChIT1NUTEQpXFx0XFx0XFxcXFxcbi1cXHRcXHQgICAgRVhUUkFfQ0ZMQUdTPSctZyAtTzAnXFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHRcXHQgICAgT1VUUFVUPSQoSE9TVF9PQkpfRElSKS9cXHRcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdFxcdCAgICBMSUJCUEZfT1VUUFVUPSQoSE9TVF9MSUJCUEZfT1VUUFVUKVxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0XFx0ICAgIExJQkJQRl9ERVNURElSPSQoSE9TVF9MSUJCUEZfREVTVERJUilcXHRcXHRcXHRcXFxcXFxuLVxcdFxcdCAgICBwcmVmaXg9IERFU1RESVI9JChIT1NUX0RFU1RESVIpIGluc3RhbGwtYmluXFxuLVxcbi0kKElOQ0xVREVfRElSKS92bWxpbnV4Lmg6ICQoVk1MSU5VWF9CVEYpICQoQlBGVE9PTCkgfCAkKElOQ0xVREVfRElSKVxcbi1pZmVxICgkKFZNTElOVVhfSCksKVxcbi1cXHQkKGNhbGwgbXNnLEdFTiwsJEApXFxuLVxcdCQoUSkkKEJQRlRPT0wpIGJ0ZiBkdW1wIGZpbGUgJChWTUxJTlVYX0JURikgZm9ybWF0IGMgXFx1MDAzZSAkQFxcbi1lbHNlXFxuLVxcdCQoY2FsbCBtc2csQ1AsLCRAKVxcbi1cXHQkKFEpY3AgXFxcIiQoVk1MSU5VWF9IKVxcXCIgJEBcXG4tZW5kaWZcXG4tXFxuLSQoU0NYT0JKX0RJUikvJS5icGYubzogJS5icGYuYyAkKElOQ0xVREVfRElSKS92bWxpbnV4LmhcXHR8ICQoQlBGT0JKKSAkKFNDWE9CSl9ESVIpXFxuLVxcdCQoY2FsbCBtc2csQ0xORy1CUEYsLCQobm90ZGlyICRAKSlcXG4tXFx0JChRKSQoQ0xBTkcpICQoQlBGX0NGTEFHUykgLXRhcmdldCBicGYgLWMgJFxcdTAwM2MgLW8gJEBcXG4rXFx0ICAgICAkKEJQRl9FWFRSQV9DRkxBR1MpXFxuIFxcbi0kKElOQ0xVREVfRElSKS8lLmJwZi5za2VsLmg6ICQoU0NYT0JKX0RJUikvJS5icGYubyAkKElOQ0xVREVfRElSKS92bWxpbnV4LmggJChCUEZUT09MKSB8ICQoSU5DTFVERV9ESVIpXFxuLVxcdCQoZXZhbCBzY2hlZD0kKG5vdGRpciAkQCkpXFxuLVxcdCQoY2FsbCBtc2csR0VOLVNLRUwsLCQoc2NoZWQpKVxcbi1cXHQkKFEpJChCUEZUT09MKSBnZW4gb2JqZWN0ICQoXFx1MDAzYzoubz0ubGlua2VkMS5vKSAkXFx1MDAzY1xcbi1cXHQkKFEpJChCUEZUT09MKSBnZW4gb2JqZWN0ICQoXFx1MDAzYzoubz0ubGlua2VkMi5vKSAkKFxcdTAwM2M6Lm89LmxpbmtlZDEubylcXG4tXFx0JChRKSQoQlBGVE9PTCkgZ2VuIG9iamVjdCAkKFxcdTAwM2M6Lm89LmxpbmtlZDMubykgJChcXHUwMDNjOi5vPS5saW5rZWQyLm8pXFxuLVxcdCQoUSlkaWZmICQoXFx1MDAzYzoubz0ubGlua2VkMi5vKSAkKFxcdTAwM2M6Lm89LmxpbmtlZDMubylcXG4tXFx0JChRKSQoQlBGVE9PTCkgZ2VuIHNrZWxldG9uICQoXFx1MDAzYzoubz0ubGlua2VkMy5vKSBuYW1lICQoc3Vic3QgLmJwZi5za2VsLmgsLCQoc2NoZWQpKSBcXHUwMDNlICRAXFxuLVxcdCQoUSkkKEJQRlRPT0wpIGdlbiBzdWJza2VsZXRvbiAkKFxcdTAwM2M6Lm89LmxpbmtlZDMubykgbmFtZSAkKHN1YnN0IC5icGYuc2tlbC5oLCwkKHNjaGVkKSkgXFx1MDAzZSAkKEA6LnNrZWwuaD0uc3Vic2tlbC5oKVxcbitFWFRSQV9DTEVBTiArPSAkKE9VVFBVVCkvYnVpbGRcXG4gXFxuICMjIyMjIyMjIyMjIyMjIyNcXG4gIyBDIHNjaGVkdWxlcnMgI1xcbiAjIyMjIyMjIyMjIyMjIyMjXFxuIFxcbi1vdmVycmlkZSBkZWZpbmUgQ0xFQU5cXG4tXFx0cm0gLXJmICQoT1VUUFVUX0RJUilcXG4tXFx0cm0gLWYgJChURVNUX0dFTl9QUk9HUylcXG4tZW5kZWZcXG4tXFxuLSMgRXZlcnkgdGVzdGNhc2UgdGFrZXMgYWxsIG9mIHRoZSBCUEYgcHJvZ3MgYXJlIGRlcGVuZGVuY2llcyBieSBkZWZhdWx0LiBUaGlzXFxuLSMgYWxsb3dzIHRlc3RjYXNlcyB0byBsb2FkIGFueSBCUEYgc2NoZWR1bGVyLCB3aGljaCBpcyB1c2VmdWwgZm9yIHRlc3RjYXNlc1xcbi0jIHRoYXQgZG9uJ3QgbmVlZCB0aGVpciBvd24gcHJvZyB0byBydW4gdGhlaXIgdGVzdC5cXG4tYWxsX3Rlc3RfYnBmcHJvZ3MgOj0gJChmb3JlYWNoIHByb2csJCh3aWxkY2FyZCAqLmJwZi5jKSwkKElOQ0xVREVfRElSKS8kKHBhdHN1YnN0ICUuYywlLnNrZWwuaCwkKHByb2cpKSlcXG4rIyBCdWlsZCBldmVyeSBzY2hlZHVsZXIgYmVmb3JlIGVhY2ggdGVzdC5cXG4rYWxsX3Rlc3RfYnBmcHJvZ3MgOj0gJChCUEZfU0tFTFMpXFxuIFxcbiBhdXRvLXRlc3QtdGFyZ2V0cyA6PVxcdFxcdFxcdFxcXFxcXG4gXFx0Y3JlYXRlX2RzcVxcdFxcdFxcdFxcXFxcXG5AQCAtMTk2LDI0ICsxMDEsMjIgQEAgYXV0by10ZXN0LXRhcmdldHMgOj1cXHRcXHRcXHRcXFxcXFxuIHRlc3RjYXNlLXRhcmdldHMgOj0gJChhZGRzdWZmaXggLm8sJChhZGRwcmVmaXggJChTQ1hPQkpfRElSKS8sJChhdXRvLXRlc3QtdGFyZ2V0cykpKVxcbiBcXG4gJChTQ1hPQkpfRElSKS9ydW5uZXIubzogcnVubmVyLmMgfCAkKFNDWE9CSl9ESVIpICQoQlBGT0JKKVxcbi1cXHQkKENDKSAkKENGTEFHUykgLWMgJFxcdTAwM2MgLW8gJEBcXG4rXFx0JChjYWxsIG1zZyxDQywsJEApXFxuK1xcdCQoUSkkKENDKSAkKENGTEFHUykgLWMgJFxcdTAwM2MgLW8gJEBcXG4gXFxuICMgQ3JlYXRlIGFsbCBvZiB0aGUgdGVzdCB0YXJnZXRzIG9iamVjdCBmaWxlcywgd2hvc2UgdGVzdGNhc2Ugb2JqZWN0cyB3aWxsIGJlXFxuICMgcmVnaXN0ZXJlZCBpbnRvIHRoZSBydW5uZXIgaW4gRUxGIGNvbnN0cnVjdG9ycy5cXG4tI1xcbi0jIE5vdGUgdGhhdCB3ZSBtdXN0IGRvIGRvdWJsZSBleHBhbnNpb24gaGVyZSBpbiBvcmRlciB0byBzdXBwb3J0IGNvbmRpdGlvbmFsbHlcXG4tIyBjb21waWxpbmcgQlBGIG9iamVjdCBmaWxlcyBvbmx5IGlmIG9uZSBpcyBwcmVzZW50LCBhcyB0aGUgd2lsZGNhcmQgTWFrZVxcbi0jIGZ1bmN0aW9uIGRvZXNuJ3Qgc3VwcG9ydCB1c2luZyBpbXBsaWNpdCBydWxlcyBvdGhlcndpc2UuXFxuICQodGVzdGNhc2UtdGFyZ2V0cyk6ICQoU0NYT0JKX0RJUikvJS5vOiAlLmMgJChTQ1hPQkpfRElSKS9ydW5uZXIubyAkKGFsbF90ZXN0X2JwZnByb2dzKSB8ICQoU0NYT0JKX0RJUilcXG4tXFx0JChldmFsIHRlc3Q9JChwYXRzdWJzdCAlLm8sJS5jLCQobm90ZGlyICRAKSkpXFxuLVxcdCQoQ0MpICQoQ0ZMQUdTKSAtYyAkXFx1MDAzYyAtbyAkQFxcbitcXHQkKGNhbGwgbXNnLENDLCwkQClcXG4rXFx0JChRKSQoQ0MpICQoQ0ZMQUdTKSAtYyAkXFx1MDAzYyAtbyAkQFxcbiBcXG4gJChTQ1hPQkpfRElSKS91dGlsLm86IHV0aWwuYyB8ICQoU0NYT0JKX0RJUilcXG4tXFx0JChDQykgJChDRkxBR1MpIC1jICRcXHUwMDNjIC1vICRAXFxuK1xcdCQoY2FsbCBtc2csQ0MsLCRAKVxcbitcXHQkKFEpJChDQykgJChDRkxBR1MpIC1jICRcXHUwMDNjIC1vICRAXFxuIFxcbiAkKE9VVFBVVCkvcnVubmVyOiAkKFNDWE9CSl9ESVIpL3J1bm5lci5vICQoU0NYT0JKX0RJUikvdXRpbC5vICQoQlBGT0JKKSAkKHRlc3RjYXNlLXRhcmdldHMpXFxuLVxcdEBlY2hvIFxcXCIkKHRlc3RjYXNlLXRhcmdldHMpXFxcIlxcbi1cXHQkKENDKSAkKENGTEFHUykgLW8gJEAgJF4gJChMREZMQUdTKVxcbitcXHQkKGNhbGwgbXNnLEJJTkFSWSwsJEApXFxuK1xcdCQoUSkkKENDKSAkKENGTEFHUykgLW8gJEAgJF4gJChMREZMQUdTKVxcbiBcXG4gLkRFRkFVTFRfR09BTCA6PSBhbGxcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIzOjU4OjQ1LjM4NjY5ODM1N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6ODA5MTA0MTE2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdCBoYXJuZXNzZXMsIHNlbGZ0ZXN0IEJQRiB0ZXN0IHByb2dyYW1zLCBhbmQgYnVpbGQgaW5mcmFzdHJ1Y3R1cmUgd2l0aGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzLy4gTm9uZSBvZiB0aGUgY2hhbmdlcyBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMsIHNvIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzA3YjRiNWJhZmJlNmUxZWU4MjRjODJkM2JhYmEwMWU4OTg5NDAwMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDEwIDIzOjU4OjQ0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvLmdpdGlnbm9yZVxuaW5kZXggOTUyZTQ0NDhiZjA3MC4uNTYxYTNlODkxYjk4YyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC8uZ2l0aWdub3JlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvLmdpdGlnbm9yZVxuQEAgLTYsNyArNiwxNSBAQCB0ZXN0X2ZyZWV6ZXJcbiB0ZXN0X2h1Z2V0bGJfbWVtY2dcbiB0ZXN0X2tpbGxcbiB0ZXN0X2ttZW1cbit0ZXN0X21lbWNnX3N0YXRfY3Jvc3NfY3B1XG4gdGVzdF9tZW1jb250cm9sXG4gdGVzdF9waWRzXG4gdGVzdF96c3dhcFxuIHdhaXRfaW5vdGlmeVxuKyMgQXJ0aWZhY3RzIGdlbmVyYXRlZCBieSBsaWIuYnBmLm1rXG4rL3Rvb2xzXG4rL2hvc3QtdG9vbHNcbisqLmJwZi5vXG4rKi5icGYuZFxuKyoubGlua2VkKi5vXG4rKi5za2VsLmhcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvTWFrZWZpbGVcbmluZGV4IGUwMTU4NGMyMTg5YWMuLmNiOTk5YmMyYzg3NWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9NYWtlZmlsZVxuQEAgLTIwLDkgKzIwLDQ2IEBAIFRFU1RfR0VOX1BST0dTICs9IHRlc3RfenN3YXBcbiBcbiBMT0NBTF9IRFJTICs9ICQoc2VsZmRpcikvY2xvbmUzL2Nsb25lM19zZWxmdGVzdHMuaCAkKHNlbGZkaXIpL3BpZGZkL3BpZGZkLmhcbiBcbisjIFJlc29sdmUgQ2xhbmcgZWFybHkgc28gdGhlIG9wdGlvbmFsIEJQRiB0ZXN0IGNhbiBiZSBzZWxlY3RlZC5cbitpZm5lcSAoJChmaWx0ZXIgJS8sJChMTFZNKSksKVxuK0NMQU5HID89ICQoTExWTSljbGFuZ1xuK2Vsc2VcbitDTEFORyA/PSBjbGFuZyQoZmlsdGVyIC0lLCQoTExWTSkpXG4rZW5kaWZcbitSRUFERUxGID89ICQoQ1JPU1NfQ09NUElMRSlyZWFkZWxmXG4rVk1MSU5VWF9CVEZfUEFUSFMgPz0gJChpZiAkKE8pLCQoTykvdm1saW51eClcdFx0XHRcdFxcXG4rXHRcdCAgICAgJChpZiAkKEtCVUlMRF9PVVRQVVQpLCQoS0JVSUxEX09VVFBVVCkvdm1saW51eClcdFxcXG4rXHRcdCAgICAgLi4vLi4vLi4vLi4vdm1saW51eFx0XHRcdFx0XFxcbitcdFx0ICAgICAvc3lzL2tlcm5lbC9idGYvdm1saW51eFx0XHRcdFx0XFxcbitcdFx0ICAgICAvYm9vdC92bWxpbnV4LSQoc2hlbGwgdW5hbWUgLXIpXG4rIyBJZ25vcmUgRUxGIGltYWdlcyB3aXRob3V0IC5CVEY7IHJhdyBzeXNmcyBCVEYgbmVlZHMgbm8gY2hlY2suXG4rVk1MSU5VWF9CVEYgPz0gJChhYnNwYXRoICQoZmlyc3R3b3JkICQoZm9yZWFjaCB2LCQod2lsZGNhcmQgJChWTUxJTlVYX0JURl9QQVRIUykpLFxcXG4rXHRcdCAkKGlmICQoZmlsdGVyIC9zeXMva2VybmVsL2J0Zi8lLCQodikpLCQodiksXFxcbitcdFx0ICAgJChpZiAkKHNoZWxsICQoUkVBREVMRikgLVMgXCIkKHYpXCIgMlx1MDAzZS9kZXYvbnVsbCB8IGdyZXAgLUYgLkJURiksJCh2KSkpKSkpXG4rIyBBY2NlcHQgZWl0aGVyIGEgc3VwcGxpZWQgaGVhZGVyIG9yIHVzYWJsZSBCVEYuXG4rSEFWRV9CUEYgOj0gJChhbmQgJChvciAkKFZNTElOVVhfSCksJChWTUxJTlVYX0JURikpLFx0XHRcdFxcXG4rXHRcdCAgJChzaGVsbCBjb21tYW5kIC12ICQoQ0xBTkcpIDJcdTAwM2UvZGV2L251bGwpKVxuK1xuK2lmbmVxICgkKEhBVkVfQlBGKSwpXG4rVEVTVF9HRU5fUFJPR1MgKz0gdGVzdF9tZW1jZ19zdGF0X2Nyb3NzX2NwdVxuK0JQRl9TUkNTIDo9IG1lbWNnX3N0YXRfY3Jvc3NfY3B1LmJwZi5jXG4rIyBSZXBsYWNlIGxpYi5taydzIGxpbmsgcnVsZSBiZWxvdy5cbitPVkVSUklERV9UQVJHRVRTIDo9IDFcbitlbmRpZlxuK1xuIGluY2x1ZGUgLi4vbGliLm1rXG4gaW5jbHVkZSBsaWIvbGliY2dyb3VwLm1rXG4gXG4raWZuZXEgKCQoSEFWRV9CUEYpLClcbitpbmNsdWRlIC4uL2xpYi5icGYubWtcbitcbisjIFJlc3RvcmUgbGliLm1rJ3MgcnVsZSBmb3Igbm9uLUJQRiB0ZXN0cy5cbitMT0NBTF9IRFJTICs9ICQoc2VsZmRpcikva3NlbGZ0ZXN0X2hhcm5lc3MuaCAkKHNlbGZkaXIpL2tzZWxmdGVzdC5oXG4rJChPVVRQVVQpLyU6ICUuYyAkKExPQ0FMX0hEUlMpXG4rXHQkKGNhbGwgbXNnLENDLCwkQClcbitcdCQoUSkkKExJTksuYykgJChmaWx0ZXItb3V0ICQoTE9DQUxfSERSUyksJF4pICQoTERMSUJTKSAtbyAkQFxuK2VuZGlmXG4rXG4gJChPVVRQVVQpL3Rlc3RfY29yZTogJChMSUJDR1JPVVBfTylcbiAkKE9VVFBVVCkvdGVzdF9jcHU6ICQoTElCQ0dST1VQX08pXG4gJChPVVRQVVQpL3Rlc3RfY3B1c2V0OiAkKExJQkNHUk9VUF9PKVxuQEAgLTMzLDMgKzcwLDEyIEBAICQoT1VUUFVUKS90ZXN0X2ttZW06ICQoTElCQ0dST1VQX08pXG4gJChPVVRQVVQpL3Rlc3RfbWVtY29udHJvbDogJChMSUJDR1JPVVBfTylcbiAkKE9VVFBVVCkvdGVzdF9waWRzOiAkKExJQkNHUk9VUF9PKVxuICQoT1VUUFVUKS90ZXN0X3pzd2FwOiAkKExJQkNHUk9VUF9PKVxuK1xuK2lmbmVxICgkKEhBVkVfQlBGKSwpXG4rIyBLZWVwIGluLXRyZWUgVUFQSSBoZWFkZXJzIHByaXZhdGUgdG8gdGhlIEJQRiB0ZXN0LlxuKyQoT1VUUFVUKS90ZXN0X21lbWNnX3N0YXRfY3Jvc3NfY3B1OiBwcml2YXRlIENGTEFHUyArPSAtSSQodG9wX3NyY2RpcikvdG9vbHMvaW5jbHVkZS91YXBpXG4rIyBMaW5rIGNncm91cF91dGlsIGFuZCB0aGUgc2tlbGV0b24gYWdhaW5zdCB0aGUgaW4tdHJlZSBsaWJicGYuXG4rJChPVVRQVVQpL3Rlc3RfbWVtY2dfc3RhdF9jcm9zc19jcHU6IHRlc3RfbWVtY2dfc3RhdF9jcm9zc19jcHUuYyBcXFxuK1x0XHRcdFx0XHQkKEJQRl9TS0VMUykgJChMSUJDR1JPVVBfTykgJChCUEZPQkopXG4rXHQkKGNhbGwgYnBmX2xpbmssJEAsJFx1MDAzYyAkKExJQkNHUk9VUF9PKSlcbitlbmRpZlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvY29uZmlnXG5pbmRleCAzOWY5Nzk2OTBkZDNiLi4xZjU4NWVkOWE1OTY3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2NvbmZpZ1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2NvbmZpZ1xuQEAgLTQsMyArNCw4IEBAIENPTkZJR19DR1JPVVBfRlJFRVpFUj15XG4gQ09ORklHX0NHUk9VUF9TQ0hFRD15XG4gQ09ORklHX01FTUNHPXlcbiBDT05GSUdfUEFHRV9DT1VOVEVSPXlcbitDT05GSUdfQlBGPXlcbitDT05GSUdfQlBGX1NZU0NBTEw9eVxuK0NPTkZJR19CUEZfRVZFTlRTPXlcbitDT05GSUdfREVCVUdfSU5GT19CVEY9eVxuK0NPTkZJR19ERUJVR19JTkZPX0RXQVJGND15XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9jZ3JvdXBfdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9jZ3JvdXBfdXRpbC5jXG5pbmRleCAyNTk2YzEyY2Q4NjQ1Li5jYTEyZDc5NGMwOTIxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9jZ3JvdXBfdXRpbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbGliL2Nncm91cF91dGlsLmNcbkBAIC01NCw2ICs1NCw4OCBAQCBzc2l6ZV90IHdyaXRlX3RleHQoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzc2l6ZV90IGxlbilcbiBcdHJldHVybiBsZW4gXHUwMDNjIDAgPyAtZXJybm8gOiBsZW47XG4gfVxuIFxuKy8qKlxuKyAqIGNnX2dldF9pZCAtIHJldHVybiBhIGNncm91cCdzIGtlcm5mcyBJRFxuKyAqIEBjZ3JvdXA6IGFic29sdXRlIGNncm91cCBwYXRoXG4rICpcbisgKiBUaGlzIGlzIGNncnAtXHUwMDNla24tXHUwMDNlaWQsIG5vdCBzdF9pbm8uXG4rICpcbisgKiBSZXR1cm46IElEIG9yIDAgb24gZmFpbHVyZS5cbisgKi9cbit1bnNpZ25lZCBsb25nIGxvbmcgY2dfZ2V0X2lkKGNvbnN0IGNoYXIgKmNncm91cClcbit7XG4rXHR1bmlvbiB7XG4rXHRcdHVuc2lnbmVkIGxvbmcgbG9uZyBpZDtcbitcdFx0dW5zaWduZWQgY2hhciByYXdbOF07XG4rXHR9IGhhbmRsZTtcbitcdHN0cnVjdCBmaWxlX2hhbmRsZSAqZmhwLCAqZmhwMjtcbitcdGludCBtb3VudF9pZCwgZmhzaXplLCBlcnI7XG4rXHR1bnNpZ25lZCBsb25nIGxvbmcgcmV0ID0gMDtcbitcbitcdGZoc2l6ZSA9IHNpemVvZigqZmhwKTtcbitcdGZocCA9IGNhbGxvYygxLCBmaHNpemUpO1xuK1x0aWYgKCFmaHApXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0LyogVGhlIGZhaWxlZCBwcm9iZSByZXBvcnRzIHRoZSBjZ3JvdXBmcyBoYW5kbGUgc2l6ZS4gKi9cbitcdGVyciA9IG5hbWVfdG9faGFuZGxlX2F0KEFUX0ZEQ1dELCBjZ3JvdXAsIGZocCwgXHUwMDI2bW91bnRfaWQsIDApO1xuK1x0aWYgKGVyciBcdTAwM2U9IDAgfHwgZmhwLVx1MDAzZWhhbmRsZV9ieXRlcyAhPSA4KVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGZoc2l6ZSA9IHNpemVvZigqZmhwKSArIGZocC1cdTAwM2VoYW5kbGVfYnl0ZXM7XG4rXHRmaHAyID0gcmVhbGxvYyhmaHAsIGZoc2l6ZSk7XG4rXHRpZiAoIWZocDIpXG4rXHRcdGdvdG8gb3V0O1xuK1x0ZmhwID0gZmhwMjtcbitcbitcdGlmIChuYW1lX3RvX2hhbmRsZV9hdChBVF9GRENXRCwgY2dyb3VwLCBmaHAsIFx1MDAyNm1vdW50X2lkLCAwKSBcdTAwM2MgMClcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRtZW1jcHkoaGFuZGxlLnJhdywgZmhwLVx1MDAzZWZfaGFuZGxlLCA4KTtcbitcdHJldCA9IGhhbmRsZS5pZDtcbitvdXQ6XG4rXHRmcmVlKGZocCk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiBjZ190b3VjaF9wYWdlcyAtIGZhdWx0IGV2ZXJ5IHBhZ2UgaW4gYSByZWdpb25cbisgKiBAYnVmOiBzdGFydCBvZiB0aGUgcmVnaW9uXG4rICogQHNpemU6IGxlbmd0aCBvZiB0aGUgcmVnaW9uIGluIGJ5dGVzXG4rICpcbisgKiBQYWdlcyBhcmUgY2hhcmdlZCB0byB0aGUgY2FsbGVyJ3MgY2dyb3VwIG9uIGl0cyBjdXJyZW50IENQVS5cbisgKi9cbit2b2lkIGNnX3RvdWNoX3BhZ2VzKGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpXG4re1xuK1x0bG9uZyBwYWdlX3NpemUgPSBzeXNjb25mKF9TQ19QQUdFU0laRSk7XG4rXHRjaGFyICpwdHI7XG4rXG4rXHRpZiAocGFnZV9zaXplIFx1MDAzYz0gMClcbitcdFx0cGFnZV9zaXplID0gQlVGX1NJWkU7XG4rXG4rXHRmb3IgKHB0ciA9IGJ1ZjsgcHRyIFx1MDAzYyBidWYgKyBzaXplOyBwdHIgKz0gcGFnZV9zaXplKVxuK1x0XHQqcHRyID0gMDtcbit9XG4rXG4rLyoqXG4rICogY2dfYWxsb2NfYW5vbiAtIGFsbG9jYXRlIGFuZCBmYXVsdCBhbm9ueW1vdXMgbWVtb3J5XG4rICogQHNpemU6IGJ5dGVzIHRvIGFsbG9jYXRlXG4rICpcbisgKiBSZXR1cm46IFJlZ2lvbiB0byBmcmVlKCksIG9yIE5VTEwuXG4rICovXG4rY2hhciAqY2dfYWxsb2NfYW5vbihzaXplX3Qgc2l6ZSlcbit7XG4rXHRjaGFyICpidWYgPSBtYWxsb2Moc2l6ZSk7XG4rXG4rXHRpZiAoIWJ1Zikge1xuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCJtYWxsb2MoKSBmYWlsZWRcXG5cIik7XG4rXHRcdHJldHVybiBOVUxMO1xuK1x0fVxuK1xuK1x0Y2dfdG91Y2hfcGFnZXMoYnVmLCBzaXplKTtcbitcdHJldHVybiBidWY7XG4rfVxuK1xuIGNoYXIgKmNnX25hbWUoY29uc3QgY2hhciAqcm9vdCwgY29uc3QgY2hhciAqbmFtZSlcbiB7XG4gXHRzaXplX3QgbGVuID0gc3RybGVuKHJvb3QpICsgc3RybGVuKG5hbWUpICsgMjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbGliL2luY2x1ZGUvY2dyb3VwX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9saWIvaW5jbHVkZS9jZ3JvdXBfdXRpbC5oXG5pbmRleCA4ZWJiMmI0ZDRlYzA3Li42NDA3NzgwMTg3ODA3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9pbmNsdWRlL2Nncm91cF91dGlsLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9saWIvaW5jbHVkZS9jZ3JvdXBfdXRpbC5oXG5AQCAtNTQsNiArNTQsOSBAQCBleHRlcm4gc3NpemVfdCB3cml0ZV90ZXh0KGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc3NpemVfdCBsZW4pO1xuIGV4dGVybiBpbnQgY2dfZmluZF9jb250cm9sbGVyX3Jvb3QoY2hhciAqcm9vdCwgc2l6ZV90IGxlbiwgY29uc3QgY2hhciAqY29udHJvbGxlcik7XG4gZXh0ZXJuIGludCBjZ19maW5kX3VuaWZpZWRfcm9vdChjaGFyICpyb290LCBzaXplX3QgbGVuLCBib29sICpuc2RlbGVnYXRlKTtcbiBleHRlcm4gY2hhciAqY2dfbmFtZShjb25zdCBjaGFyICpyb290LCBjb25zdCBjaGFyICpuYW1lKTtcbitleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGNnX2dldF9pZChjb25zdCBjaGFyICpjZ3JvdXApO1xuK2V4dGVybiB2b2lkIGNnX3RvdWNoX3BhZ2VzKGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpO1xuK2V4dGVybiBjaGFyICpjZ19hbGxvY19hbm9uKHNpemVfdCBzaXplKTtcbiBleHRlcm4gY2hhciAqY2dfbmFtZV9pbmRleGVkKGNvbnN0IGNoYXIgKnJvb3QsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBpbmRleCk7XG4gZXh0ZXJuIGNoYXIgKmNnX2NvbnRyb2woY29uc3QgY2hhciAqY2dyb3VwLCBjb25zdCBjaGFyICpjb250cm9sKTtcbiBleHRlcm4gaW50IGNnX2NyZWF0ZShjb25zdCBjaGFyICpjZ3JvdXApO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9tZW1jZ19zdGF0X2Nyb3NzX2NwdS5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9tZW1jZ19zdGF0X2Nyb3NzX2NwdS5icGYuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmZmZjNiOTI1NmFhMzlcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9tZW1jZ19zdGF0X2Nyb3NzX2NwdS5icGYuY1xuQEAgLTAsMCArMSwxMDEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbisjZGVmaW5lIEJQRl9OT19LRlVOQ19QUk9UT1RZUEVTXG4rI2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2NvcmVfcmVhZC5oXHUwMDNlXG4rI2luY2x1ZGUgXCJtZW1jZ19zdGF0X2Nyb3NzX2NwdS5oXCJcbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4rXG4rLyogRW5zdXJlIHRoZSB1cHBlci1ib3VuZCBjaGVja3MgYWxzbyByZWplY3QgbmVnYXRpdmUgQlBGIGFyZ3VtZW50cy4gKi9cbitfU3RhdGljX2Fzc2VydCgoZW51bSB2bV9ldmVudF9pdGVtKS0xIFx1MDAzZT0gTlJfVk1fRVZFTlRfSVRFTVMsXG4rXHQgICAgICAgXCJuZWdhdGl2ZSB2bV9ldmVudF9pdGVtIG11c3QgZmFpbCB0aGUgYm91bmRzIGNoZWNrXCIpO1xuK19TdGF0aWNfYXNzZXJ0KChlbnVtIG1lbWNnX21lbW9yeV9ldmVudCktMSBcdTAwM2U9IE1FTUNHX05SX01FTU9SWV9FVkVOVFMsXG4rXHQgICAgICAgXCJuZWdhdGl2ZSBtZW1jZ19tZW1vcnlfZXZlbnQgbXVzdCBmYWlsIHRoZSBib3VuZHMgY2hlY2tcIik7XG4rXG4rLyogRGVjbGFyZSBrZnVuY3MgdGhhdCBtYXkgYmUgYWJzZW50IGZyb20gdGhlIGJ1aWxkLXRpbWUgdm1saW51eC5oLiAqL1xuK3N0cnVjdCBtZW1fY2dyb3VwICpicGZfZ2V0X21lbV9jZ3JvdXAoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcykgX19rc3ltO1xuK3ZvaWQgYnBmX3B1dF9tZW1fY2dyb3VwKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykgX19rc3ltO1xuK3ZvaWQgYnBmX21lbV9jZ3JvdXBfZmx1c2hfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSBfX2tzeW07XG4rdW5zaWduZWQgbG9uZyBicGZfbWVtX2Nncm91cF9wYWdlX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGlkeCkgX19rc3ltO1xuK3Vuc2lnbmVkIGxvbmcgYnBmX21lbV9jZ3JvdXBfdm1fZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbitcdFx0XHRcdCAgICAgICBlbnVtIHZtX2V2ZW50X2l0ZW0gZXZlbnQpIF9fa3N5bTtcbitcbisvKiBVc2Vyc3BhY2UgcmVzaXplcyB0aGlzIGNncm91cC1JRCBtYXAgYmVmb3JlIGxvYWQuICovXG4rc3RydWN0IHtcbitcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfSEFTSCk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuK1x0X190eXBlKGtleSwgX191NjQpO1xuK1x0X190eXBlKHZhbHVlLCBzdHJ1Y3QgbWVtY2dfc3RhdF9zbmFwc2hvdCk7XG4rfSByZXN1bHRzIFNFQyhcIi5tYXBzXCIpO1xuK1xuKy8qIElzb2xhdGUgY2FwYWJpbGl0eSBmYWlsdXJlcyBmcm9tIHZlcmlmaWVyIGZhaWx1cmVzIGluIHRoZSB0ZXN0IHByb2dyYW0uICovXG4rU0VDKFwiaXRlci5zL2Nncm91cFwiKVxuK2ludCBtZW1jZ19rZnVuY3NfcHJvYmUoc3RydWN0IGJwZl9pdGVyX19jZ3JvdXAgKmN0eClcbit7XG4rXHRzdHJ1Y3QgY2dyb3VwICpjZ3JwID0gY3R4LVx1MDAzZWNncm91cDtcbitcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbitcbitcdGlmICghY2dycClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRtZW1jZyA9IGJwZl9nZXRfbWVtX2Nncm91cChcdTAwMjZjZ3JwLVx1MDAzZXNlbGYpO1xuK1x0aWYgKCFtZW1jZylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRicGZfbWVtX2Nncm91cF9mbHVzaF9zdGF0cyhtZW1jZyk7XG4rXHRicGZfbWVtX2Nncm91cF9wYWdlX3N0YXRlKG1lbWNnLCAwKTtcbitcdGJwZl9tZW1fY2dyb3VwX3ZtX2V2ZW50cyhtZW1jZywgMCk7XG4rXHRicGZfcHV0X21lbV9jZ3JvdXAobWVtY2cpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qIFNsZWVwYWJsZSBpdGVyYXRvcjogZmx1c2ggdGhlIHJvb3Qgb25jZSwgdGhlbiBzbmFwc2hvdCBlYWNoIGNncm91cC4gKi9cbitTRUMoXCJpdGVyLnMvY2dyb3VwXCIpXG4raW50IGNncm91cF9tZW1jZ19zdGF0X2Nyb3NzX2NwdShzdHJ1Y3QgYnBmX2l0ZXJfX2Nncm91cCAqY3R4KVxuK3tcbitcdHN0cnVjdCBjZ3JvdXAgKmNncnAgPSBjdHgtXHUwMDNlY2dyb3VwO1xuK1x0c3RydWN0IG1lbWNnX3N0YXRfc25hcHNob3Qgc25hcCA9IHt9O1xuK1x0c3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcztcbitcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbitcdGludCBpZHhfYW5vbiwgaWR4X2ZpbGUsIGlkeF9zaG1lbSwgaWR4X2ZtYXBwZWQsIGlkeF9wZ2ZhdWx0O1xuK1x0X191NjQgY2dfaWQ7XG4rXG4rXHQvKiBJZ25vcmUgdGhlIGZpbmFsIHBvc3QtcHJvY2Vzc2luZyBjYWxsLiAqL1xuK1x0aWYgKCFjZ3JwKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGNzcyA9IFx1MDAyNmNncnAtXHUwMDNlc2VsZjtcbitcdG1lbWNnID0gYnBmX2dldF9tZW1fY2dyb3VwKGNzcyk7XG4rXHRpZiAoIW1lbWNnKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qIERFU0NFTkRBTlRTX1BSRSB2aXNpdHMgdGhlIHN1YnRyZWUgcm9vdCBmaXJzdC4gKi9cbitcdGlmIChjdHgtXHUwMDNlbWV0YS1cdTAwM2VzZXFfbnVtID09IDApXG4rXHRcdGJwZl9tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKG1lbWNnKTtcbitcbitcdGNnX2lkID0gQlBGX0NPUkVfUkVBRChjZ3JwLCBrbiwgaWQpO1xuK1x0c25hcC5jZ3JvdXBfaWQgPSBjZ19pZDtcbitcbitcdGlkeF9hbm9uID0gYnBmX2NvcmVfZW51bV92YWx1ZShlbnVtIG5vZGVfc3RhdF9pdGVtLCBOUl9BTk9OX01BUFBFRCk7XG4rXHRpZHhfZmlsZSA9IGJwZl9jb3JlX2VudW1fdmFsdWUoZW51bSBub2RlX3N0YXRfaXRlbSwgTlJfRklMRV9QQUdFUyk7XG4rXHRpZHhfc2htZW0gPSBicGZfY29yZV9lbnVtX3ZhbHVlKGVudW0gbm9kZV9zdGF0X2l0ZW0sIE5SX1NITUVNKTtcbitcdGlkeF9mbWFwcGVkID0gYnBmX2NvcmVfZW51bV92YWx1ZShlbnVtIG5vZGVfc3RhdF9pdGVtLCBOUl9GSUxFX01BUFBFRCk7XG4rXHRpZHhfcGdmYXVsdCA9IGJwZl9jb3JlX2VudW1fdmFsdWUoZW51bSB2bV9ldmVudF9pdGVtLCBQR0ZBVUxUKTtcbitcbitcdHNuYXAuYW5vbiA9IGJwZl9tZW1fY2dyb3VwX3BhZ2Vfc3RhdGUobWVtY2csIGlkeF9hbm9uKTtcbitcdHNuYXAuZmlsZSA9IGJwZl9tZW1fY2dyb3VwX3BhZ2Vfc3RhdGUobWVtY2csIGlkeF9maWxlKTtcbitcdHNuYXAuc2htZW0gPSBicGZfbWVtX2Nncm91cF9wYWdlX3N0YXRlKG1lbWNnLCBpZHhfc2htZW0pO1xuK1x0c25hcC5maWxlX21hcHBlZCA9IGJwZl9tZW1fY2dyb3VwX3BhZ2Vfc3RhdGUobWVtY2csIGlkeF9mbWFwcGVkKTtcbitcdHNuYXAucGdmYXVsdCA9IGJwZl9tZW1fY2dyb3VwX3ZtX2V2ZW50cyhtZW1jZywgaWR4X3BnZmF1bHQpO1xuK1xuK1x0LyogUmVhZCBwYWdlIGNvdW50ZXJzIGZyb20gdGhlIHRydXN0ZWQgcG9pbnRlci4gKi9cbitcdHNuYXAudXNhZ2VfcGFnZXMgPSBCUEZfQ09SRV9SRUFEKG1lbWNnLCBtZW1vcnkudXNhZ2UuY291bnRlcik7XG4rXHRzbmFwLm1heF9wYWdlcyA9IEJQRl9DT1JFX1JFQUQobWVtY2csIG1lbW9yeS5tYXgpO1xuK1xuK1x0YnBmX21hcF91cGRhdGVfZWxlbShcdTAwMjZyZXN1bHRzLCBcdTAwMjZjZ19pZCwgXHUwMDI2c25hcCwgQlBGX0FOWSk7XG4rXG4rXHRicGZfcHV0X21lbV9jZ3JvdXAobWVtY2cpO1xuK1x0cmV0dXJuIDA7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9tZW1jZ19zdGF0X2Nyb3NzX2NwdS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL21lbWNnX3N0YXRfY3Jvc3NfY3B1Lmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5mNzVlMzQxZjhjYjgzXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbWVtY2dfc3RhdF9jcm9zc19jcHUuaFxuQEAgLTAsMCArMSwxOCBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuKyNpZm5kZWYgX19NRU1DR19TVEFUX0NST1NTX0NQVV9IXG4rI2RlZmluZSBfX01FTUNHX1NUQVRfQ1JPU1NfQ1BVX0hcbitcbisvKiBGaXhlZC13aWR0aCBzbmFwc2hvdCBzaGFyZWQgYnkgQlBGIGFuZCB1c2Vyc3BhY2UuICovXG4rc3RydWN0IG1lbWNnX3N0YXRfc25hcHNob3Qge1xuK1x0X191NjQgY2dyb3VwX2lkO1xuK1x0X191NjQgYW5vbjtcdFx0LyogTlJfQU5PTl9NQVBQRUQsIGJ5dGVzICovXG4rXHRfX3U2NCBmaWxlO1x0XHQvKiBOUl9GSUxFX1BBR0VTLCBieXRlcyAqL1xuK1x0X191NjQgc2htZW07XHRcdC8qIE5SX1NITUVNLCBieXRlcyAqL1xuK1x0X191NjQgZmlsZV9tYXBwZWQ7XHQvKiBOUl9GSUxFX01BUFBFRCwgYnl0ZXMgKi9cbitcdF9fdTY0IHBnZmF1bHQ7XHRcdC8qIFBHRkFVTFQsIGNvdW50ICovXG4rXHRfX3U2NCB1c2FnZV9wYWdlcztcdC8qIHBhZ2VfY291bnRlciBtZW1vcnkudXNhZ2UsIGluIFBBR0VTICovXG4rXHRfX3U2NCBtYXhfcGFnZXM7XHQvKiBwYWdlX2NvdW50ZXIgbWVtb3J5Lm1heCwgaW4gUEFHRVMgKi9cbit9O1xuK1xuKyNlbmRpZiAvKiBfX01FTUNHX1NUQVRfQ1JPU1NfQ1BVX0ggKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9tZW1jZ19zdGF0X2Nyb3NzX2NwdS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfbWVtY2dfc3RhdF9jcm9zc19jcHUuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjk2ZTRhNGE5NThlZGFcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X21lbWNnX3N0YXRfY3Jvc3NfY3B1LmNcbkBAIC0wLDAgKzEsNzU1IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXG4rXG4rLypcbisgKiBDb21wYXJlIG1lbWNnIEJQRiBrZnVuY3Mgd2l0aCBtZW1vcnkuc3RhdCBvdmVyIGEgY2hhcmdlZCBzdWJ0cmVlLiBDaGFyZ2Vyc1xuKyAqIHNwcmVhZCBhbm9ueW1vdXMgbWVtb3J5IGFjcm9zcyBDUFVzIGFuZCBob2xkIGl0LiBSZWFkIEJQRiBmaXJzdCBzbyBpdHMgZmx1c2hcbisgKiBpcyBub3QgY29uc3VtZWQgYnkgbWVtb3J5LnN0YXQsIHRoZW4gcmVxdWlyZSB0d28gZmlsZSBzYW1wbGVzIHRvIGJyYWNrZXQgZWFjaFxuKyAqIEJQRiB2YWx1ZS4gRWFjaCBsZWFmIG11c3QgY292ZXIgaXRzIGNoYXJnZTsgcm9vdCBhbm9uIG11c3QgZXF1YWwgdGhlIGxlYWYgc3VtLlxuKyAqL1xuKyNkZWZpbmUgX0dOVV9TT1VSQ0VcbitcbisjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbGltaXRzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGltaXRzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRpbnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3NjaGVkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3dhaXQuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2xpYmJwZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2J0Zi5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJrc2VsZnRlc3QuaFwiXG4rI2luY2x1ZGUgXCJjZ3JvdXBfdXRpbC5oXCJcbisjaW5jbHVkZSBcIm1lbWNnX3N0YXRfY3Jvc3NfY3B1LmhcIlxuKyNpbmNsdWRlIFwibWVtY2dfc3RhdF9jcm9zc19jcHUuc2tlbC5oXCJcbitcbisjZGVmaW5lIFNVQlRSRUVfTkFNRVx0XHRcIm1jZ194Y3B1XCJcbitcbisjZGVmaW5lIE1FTUNHX0NIQVJHRV9CQVRDSFx0NjRcbitcbisjZGVmaW5lIEZMVVNIX01BUkdJTlx0XHQyXG4rXG4rLyogQm91bmQgdG90YWwgY2hhcmdlIG9uIGxhcmdlIHN5c3RlbXMuICovXG4rI2RlZmluZSBNQVhfVE9UQUxfQ0hBUkdFXHQoMjU2VUwgXHUwMDNjXHUwMDNjIDIwKVxuK1xuKy8qIEJvdW5kIHRoZSBDUFVzIHVzZWQgYnkgZWFjaCBsZWFmLiAqL1xuKyNkZWZpbmUgTUFYX0NQVVNfUEVSX0xFQUZcdDE2XG4rXG4rI2RlZmluZSBDSEFSR0VfV0FJVF9SRVRSSUVTXHQ1MDBcbitcbitzdGF0aWMgY2hhciByb290W1BBVEhfTUFYXTtcbitzdGF0aWMgY2hhciAqc3VidHJlZV9yb290O1xuK3N0YXRpYyBsb25nIHBhZ2Vfc2l6ZTtcbitcbisvKiBjZ3JvdXBmcyB2YWx1ZXMgaW4gYnl0ZXMuICovXG4rc3RydWN0IGZpbGVfc25hcCB7XG4rXHRsb25nIGFub24sIGZpbGUsIHNobWVtLCBmaWxlX21hcHBlZCwgcGdmYXVsdDtcbitcdGxvbmcgY3VycmVudDtcbit9O1xuK1xuK3N0cnVjdCBjZ19ub2RlIHtcbitcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4rXHR1bnNpZ25lZCBsb25nIGxvbmcgaWQ7XG4rXHRib29sIGlzX2xlYWY7XHRcdFx0LyogaG9sZHMgYSBjaGFyZ2Ugb2YgaXRzIG93biAqL1xuK1x0bG9uZyBwcmV2aW91c19jdXJyZW50O1x0XHQvKiBwcmV2aW91cyBtZW1vcnkuY3VycmVudCBwb2xsICovXG4rXHRzdHJ1Y3QgbWVtY2dfc3RhdF9zbmFwc2hvdCBicGY7XHQvKiByZWFkIHRocm91Z2ggdGhlIGtmdW5jcyAqL1xuK1x0c3RydWN0IGZpbGVfc25hcCBmaWxlWzJdO1x0LyogcG9zdC1CUEYgY2dyb3VwZnMgc2FtcGxlcyAqL1xuK307XG4rXG4rc3RhdGljIHN0cnVjdCBjZ19ub2RlICpub2RlcztcdC8qIERGUyBvcmRlcjogYSBwYXJlbnQgcHJlY2VkZXMgaXRzIGNoaWxkcmVuICovXG4rc3RhdGljIGludCBuX25vZGVzO1xuK3N0YXRpYyBpbnQgbl9sZWF2ZXM7XG4rXG4rLyogLS0tLSBDUFVzIHRoaXMgdGVzdCBtYXkgcnVuIG9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4rXG4rc3RhdGljIGNwdV9zZXRfdCBhbGxvd2VkX2NwdXM7XG4rc3RhdGljIGludCBuX2NwdTtcbitzdGF0aWMgbG9uZyBuX29ubGluZV9jcHU7XG4rXG4rc3RhdGljIGludCBudGhfY3B1KGludCBuKVxuK3tcbitcdGludCBpLCBzZWVuID0gMDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIENQVV9TRVRTSVpFOyBpKyspIHtcbitcdFx0aWYgKCFDUFVfSVNTRVQoaSwgXHUwMDI2YWxsb3dlZF9jcHVzKSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKHNlZW4rKyA9PSBuICUgbl9jcHUpXG4rXHRcdFx0cmV0dXJuIGk7XG4rXHR9XG4rXHRyZXR1cm4gLTE7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGluX2NwdShpbnQgY3B1KVxuK3tcbitcdGNwdV9zZXRfdCBzZXQ7XG4rXG4rXHRpZiAoY3B1IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRDUFVfWkVSTyhcdTAwMjZzZXQpO1xuK1x0Q1BVX1NFVChjcHUsIFx1MDAyNnNldCk7XG4rXHRyZXR1cm4gc2NoZWRfc2V0YWZmaW5pdHkoMCwgc2l6ZW9mKHNldCksIFx1MDAyNnNldCk7XG4rfVxuK1xuKy8qIC0tLS0gdHJlZSBjb25zdHJ1Y3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbitcbitzdGF0aWMgaW50IGFkZF9ub2RlKGNvbnN0IGNoYXIgKnBhdGgsIGJvb2wgaXNfbGVhZilcbit7XG4rXHRzdHJ1Y3QgY2dfbm9kZSAqbiA9IFx1MDAyNm5vZGVzW25fbm9kZXNdO1xuK1xuK1x0aWYgKGNnX2NyZWF0ZShwYXRoKSlcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0c3RybmNweShuLVx1MDAzZXBhdGgsIHBhdGgsIHNpemVvZihuLVx1MDAzZXBhdGgpIC0gMSk7XG4rXHRuLVx1MDAzZWlkID0gY2dfZ2V0X2lkKHBhdGgpO1xuK1x0bi1cdTAwM2Vpc19sZWFmID0gaXNfbGVhZjtcbitcdG4tXHUwMDNlcHJldmlvdXNfY3VycmVudCA9IC0xO1xuK1x0aWYgKGlzX2xlYWYpXG4rXHRcdG5fbGVhdmVzKys7XG4rXHRuX25vZGVzKys7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyogQnVpbGQgQGxldmVscyBiZWxvdyBAcGF0aDsgb25seSBsZWF2ZXMgYXJlIGNoYXJnZWQuICovXG4rc3RhdGljIGludCBidWlsZF9jaGlsZHJlbihjb25zdCBjaGFyICpwYXRoLCBpbnQgZmFub3V0LCBpbnQgbGV2ZWxzKVxuK3tcbitcdGNoYXIgY2hpbGRbUEFUSF9NQVhdO1xuK1x0aW50IGk7XG4rXG4rXHRpZiAobGV2ZWxzID09IDApXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0LyogR2l2ZSBjaGlsZCBjZ3JvdXBzIGEgbWVtY2cuICovXG4rXHRpZiAoY2dfd3JpdGUocGF0aCwgXCJjZ3JvdXAuc3VidHJlZV9jb250cm9sXCIsIFwiK21lbW9yeVwiKSlcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZmFub3V0OyBpKyspIHtcbitcdFx0c25wcmludGYoY2hpbGQsIHNpemVvZihjaGlsZCksIFwiJXMvYyVkXCIsIHBhdGgsIGkpO1xuK1x0XHRpZiAoYWRkX25vZGUoY2hpbGQsIGxldmVscyA9PSAxKSlcbitcdFx0XHRyZXR1cm4gLTE7XG4rXHRcdGlmIChidWlsZF9jaGlsZHJlbihjaGlsZCwgZmFub3V0LCBsZXZlbHMgLSAxKSlcbitcdFx0XHRyZXR1cm4gLTE7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHNpemVfdCB0cmVlX2NhcGFjaXR5KGludCBmYW5vdXQsIGludCBkZXB0aClcbit7XG4rXHRzaXplX3QgdG90YWwgPSAxLCBsZXZlbCA9IDE7XG4rXHRpbnQgZDtcbitcbitcdGZvciAoZCA9IDA7IGQgXHUwMDNjIGRlcHRoOyBkKyspIHtcbitcdFx0bGV2ZWwgKj0gZmFub3V0O1xuK1x0XHR0b3RhbCArPSBsZXZlbDtcbitcdH1cbitcdHJldHVybiB0b3RhbDtcbit9XG4rXG4rc3RhdGljIGludCBidWlsZF90cmVlKGludCBmYW5vdXQsIGludCBkZXB0aCwgaW50ICpyb290X2ZkKVxuK3tcbitcdG5fbm9kZXMgPSAwO1xuK1x0bl9sZWF2ZXMgPSAwO1xuK1x0bm9kZXMgPSBjYWxsb2ModHJlZV9jYXBhY2l0eShmYW5vdXQsIGRlcHRoKSwgc2l6ZW9mKCpub2RlcykpO1xuK1x0aWYgKCFub2RlcylcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0aWYgKGFkZF9ub2RlKHN1YnRyZWVfcm9vdCwgZGVwdGggPT0gMCkpXG4rXHRcdHJldHVybiAtMTtcbitcbitcdCpyb290X2ZkID0gb3BlbihzdWJ0cmVlX3Jvb3QsIE9fUkRPTkxZKTtcbitcdGlmICgqcm9vdF9mZCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0cmV0dXJuIGJ1aWxkX2NoaWxkcmVuKHN1YnRyZWVfcm9vdCwgZmFub3V0LCBkZXB0aCk7XG4rfVxuK1xuKy8qIERlc3Ryb3kgY2hpbGRyZW4gYmVmb3JlIHBhcmVudHMsIHRoZW4gcmVhcCBjaGFyZ2Vycy4gKi9cbitzdGF0aWMgdm9pZCBkZXN0cm95X3RyZWUodm9pZClcbit7XG4rXHRpbnQgaTtcbitcbitcdGlmICghbm9kZXMpXG4rXHRcdHJldHVybjtcbitcbitcdGZvciAoaSA9IG5fbm9kZXMgLSAxOyBpIFx1MDAzZT0gMDsgaS0tKVxuK1x0XHRjZ19kZXN0cm95KG5vZGVzW2ldLnBhdGgpO1xuK1x0ZnJlZShub2Rlcyk7XG4rXHRub2RlcyA9IE5VTEw7XG4rXG4rXHR3aGlsZSAod2FpdHBpZCgtMSwgTlVMTCwgMCkgXHUwMDNlIDApXG4rXHRcdDtcbit9XG4rXG4rLyogLS0tLSBjcm9zcy1DUFUgY2hhcmdlIChvbmUgY2hpbGQgcGVyIGxlYWYpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuK1xuK3N0cnVjdCBjaGFyZ2VfYXJncyB7XG4rXHRzaXplX3QgYnl0ZXM7XHQvKiBhbm9uIHRoaXMgbGVhZiBob2xkcyAqL1xuK1x0aW50IGJhc2U7XHQvKiBpbmRleCBvZiB0aGUgZmlyc3QgQ1BVIHRvIGZhdWx0IG9uICovXG4rXHRpbnQgaztcdFx0LyogQ1BVcyB0byBzcHJlYWQgdGhlIGNoYXJnZSBvdmVyICovXG4rfTtcbitcbitzdGF0aWMgaW50IGNoYXJnZV9sZWFmKGNvbnN0IGNoYXIgKmNncm91cCwgdm9pZCAqYXJnKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBjaGFyZ2VfYXJncyAqY2EgPSBhcmc7XG4rXHRpbnQgcHBpZCA9IGdldHBwaWQoKTtcbitcdHNpemVfdCBwZXIsIG9mZjtcbitcdGNoYXIgKmJ1ZjtcbitcdGludCBqO1xuK1xuK1x0YnVmID0gbWFsbG9jKGNhLVx1MDAzZWJ5dGVzKTtcbitcdGlmICghYnVmKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIm1hbGxvYygpIGZhaWxlZFxcblwiKTtcbitcdFx0cmV0dXJuIC0xO1xuK1x0fVxuK1xuK1x0LyogS2VlcCBlYWNoIENQVSdzIHNsaWNlIHBhZ2UtYWxpZ25lZC4gKi9cbitcdHBlciA9IGNhLVx1MDAzZWJ5dGVzIC8gY2EtXHUwMDNlayAvIHBhZ2Vfc2l6ZSAqIHBhZ2Vfc2l6ZTtcbitcbitcdGZvciAoaiA9IDA7IGogXHUwMDNjIGNhLVx1MDAzZWs7IGorKykge1xuK1x0XHRvZmYgPSAoc2l6ZV90KWogKiBwZXI7XG4rXHRcdGlmIChwaW5fY3B1KG50aF9jcHUoY2EtXHUwMDNlYmFzZSArIGopKSkge1xuK1x0XHRcdGZyZWUoYnVmKTtcbitcdFx0XHRyZXR1cm4gLTE7XG4rXHRcdH1cbitcdFx0Y2dfdG91Y2hfcGFnZXMoYnVmICsgb2ZmLFxuK1x0XHRcdCAgICAgICBqID09IGNhLVx1MDAzZWsgLSAxID8gY2EtXHUwMDNlYnl0ZXMgLSBvZmYgOiBwZXIpO1xuK1x0fVxuK1xuK1x0d2hpbGUgKGdldHBwaWQoKSA9PSBwcGlkKVxuK1x0XHRzbGVlcCgxKTtcbitcbitcdGZyZWUoYnVmKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGxlYWZfY2hhcmdlKHNpemVfdCB3YW50LCBpbnQgaywgc2l6ZV90ICpieXRlcylcbit7XG4rXHRzaXplX3QgbWluX3BhZ2VzLCBwYWdlcywgd2FudF9wYWdlcztcbitcbitcdGlmICgoc2l6ZV90KW5fb25saW5lX2NwdSBcdTAwM2UgU0laRV9NQVggLyBGTFVTSF9NQVJHSU4gL1xuK1x0XHRcdFx0XHQgTUVNQ0dfQ0hBUkdFX0JBVENIKVxuK1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbitcbitcdC8qIEZvcmNlIG1vcmUgdGhhbiBvbmUgcGVuZGluZyBiYXRjaCBwZXIgQ1BVIGFjcm9zcyB0aGUgc3VidHJlZS4gKi9cbitcdG1pbl9wYWdlcyA9IChzaXplX3QpRkxVU0hfTUFSR0lOICogTUVNQ0dfQ0hBUkdFX0JBVENIICogbl9vbmxpbmVfY3B1O1xuK1x0cGFnZXMgPSBtaW5fcGFnZXMgLyBuX2xlYXZlcyArICEhKG1pbl9wYWdlcyAlIG5fbGVhdmVzKTtcbitcdHdhbnRfcGFnZXMgPSB3YW50IC8gcGFnZV9zaXplICsgISEod2FudCAlIHBhZ2Vfc2l6ZSk7XG4rXHRpZiAocGFnZXMgXHUwMDNjIHdhbnRfcGFnZXMpXG4rXHRcdHBhZ2VzID0gd2FudF9wYWdlcztcbitcdGlmIChwYWdlcyBcdTAwM2MgKHNpemVfdClrKVxuK1x0XHRwYWdlcyA9IGs7XG4rXG4rXHRpZiAocGFnZXMgXHUwMDNlIE1BWF9UT1RBTF9DSEFSR0UgLyAoc2l6ZV90KW5fbGVhdmVzIC8gcGFnZV9zaXplKVxuK1x0XHRyZXR1cm4gLUUyQklHO1xuK1xuK1x0KmJ5dGVzID0gcGFnZXMgKiBwYWdlX3NpemU7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBzdGFydF9jaGFyZ2VycyhpbnQgaywgc2l6ZV90IGJ5dGVzKVxuK3tcbitcdHN0cnVjdCBjaGFyZ2VfYXJncyBjYSA9IHsgLmJ5dGVzID0gYnl0ZXMsIC5rID0gayB9O1xuK1x0bG9uZyBwcmV2LCBjdXI7XG4rXHRib29sIHJlYWR5O1xuK1x0aW50IGksIHJldHJpZXM7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuX25vZGVzOyBpKyspIHtcbitcdFx0aWYgKCFub2Rlc1tpXS5pc19sZWFmKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRpZiAoY2dfcnVuX25vd2FpdChub2Rlc1tpXS5wYXRoLCBjaGFyZ2VfbGVhZiwgXHUwMDI2Y2EpIFx1MDAzYyAwKSB7XG4rXHRcdFx0a3NmdF9wcmludF9tc2coXCJjYW5ub3Qgc3RhcnQgYSBjaGFyZ2VyIG9uICVzXFxuXCIsXG4rXHRcdFx0XHQgICAgICAgbm9kZXNbaV0ucGF0aCk7XG4rXHRcdFx0cmV0dXJuIC0xO1xuK1x0XHR9XG4rXHRcdGNhLmJhc2UgKz0gaztcbitcdH1cbitcbitcdC8qIFdhaXQgdW50aWwgZXZlcnkgbGVhZiBpcyBmdWxseSBjaGFyZ2VkIGFuZCBzdGFibGUuICovXG4rXHRmb3IgKHJldHJpZXMgPSBDSEFSR0VfV0FJVF9SRVRSSUVTOyByZXRyaWVzOyByZXRyaWVzLS0pIHtcbitcdFx0cmVhZHkgPSB0cnVlO1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuX25vZGVzOyBpKyspIHtcbitcdFx0XHRpZiAoIW5vZGVzW2ldLmlzX2xlYWYpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcbitcdFx0XHRjdXIgPSBjZ19yZWFkX2xvbmcobm9kZXNbaV0ucGF0aCwgXCJtZW1vcnkuY3VycmVudFwiKTtcbitcdFx0XHRpZiAoY3VyIFx1MDAzYyAwKSB7XG4rXHRcdFx0XHRrc2Z0X3ByaW50X21zZyhcImNhbm5vdCByZWFkICVzL21lbW9yeS5jdXJyZW50OiAlc1xcblwiLFxuK1x0XHRcdFx0XHQgICAgICAgbm9kZXNbaV0ucGF0aCwgc3RyZXJyb3IoZXJybm8pKTtcbitcdFx0XHRcdHJldHVybiAtMTtcbitcdFx0XHR9XG4rXG4rXHRcdFx0cHJldiA9IG5vZGVzW2ldLnByZXZpb3VzX2N1cnJlbnQ7XG4rXHRcdFx0bm9kZXNbaV0ucHJldmlvdXNfY3VycmVudCA9IGN1cjtcbitcdFx0XHRpZiAoY3VyIFx1MDAzYyAobG9uZylieXRlcyB8fCBjdXIgIT0gcHJldilcbitcdFx0XHRcdHJlYWR5ID0gZmFsc2U7XG4rXHRcdH1cbitcdFx0aWYgKHJlYWR5KVxuK1x0XHRcdHJldHVybiAwO1xuK1x0XHR1c2xlZXAoREVGQVVMVF9XQUlUX0lOVEVSVkFMX1VTIC8gMTApO1xuK1x0fVxuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgbl9ub2RlczsgaSsrKSB7XG4rXHRcdGlmIChub2Rlc1tpXS5pc19sZWFmIFx1MDAyNlx1MDAyNiBub2Rlc1tpXS5wcmV2aW91c19jdXJyZW50IFx1MDAzYyAobG9uZylieXRlcykge1xuK1x0XHRcdGtzZnRfcHJpbnRfbXNnKFwiJXMgcmVhY2hlZCBvbmx5ICVsZCBvZiAlenUgY2hhcmdlZCBieXRlc1xcblwiLFxuK1x0XHRcdFx0ICAgICAgIG5vZGVzW2ldLnBhdGgsIG5vZGVzW2ldLnByZXZpb3VzX2N1cnJlbnQsXG4rXHRcdFx0XHQgICAgICAgYnl0ZXMpO1xuK1x0XHRcdHJldHVybiAtMTtcbitcdFx0fVxuK1x0fVxuK1x0a3NmdF9wcmludF9tc2coXCJtZW1vcnkuY3VycmVudCBkaWQgbm90IHNldHRsZSBiZWZvcmUgdGhlIHRpbWVvdXRcXG5cIik7XG4rXHRyZXR1cm4gLTE7XG4rfVxuK1xuKy8qIC0tLS0gdGhlIHR3byByZWFkZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbitcbisvKiBGbHVzaCB0aGUgc3VidHJlZSBhbmQgY29sbGVjdCBlYWNoIGNncm91cCdzIGtmdW5jIHZhbHVlcy4gKi9cbitzdGF0aWMgaW50IHJlYWRfYnBmKGludCByb290X2ZkKVxuK3tcbitcdERFQ0xBUkVfTElCQlBGX09QVFMoYnBmX2l0ZXJfYXR0YWNoX29wdHMsIG9wdHMpO1xuK1x0c3RydWN0IG1lbWNnX3N0YXRfY3Jvc3NfY3B1ICpza2VsID0gTlVMTDtcbitcdHVuaW9uIGJwZl9pdGVyX2xpbmtfaW5mbyBsaW5mbyA9IHt9O1xuK1x0c3RydWN0IGJwZl9saW5rICpsaW5rID0gTlVMTDtcbitcdGludCByZXQgPSAtMSwgZXJyLCBpLCBtZmQsIGZkO1xuK1x0Y2hhciBidWZbNDA5Nl07XG4rXHRzc2l6ZV90IHI7XG4rXG4rXHRza2VsID0gbWVtY2dfc3RhdF9jcm9zc19jcHVfX29wZW4oKTtcbitcdGlmICghc2tlbCkge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcInNrZWwgb3BlbiBmYWlsZWQ6ICVzICglZClcXG5cIixcbitcdFx0XHQgICAgICAgc3RyZXJyb3IoZXJybm8pLCBlcnJubyk7XG4rXHRcdHJldHVybiAtMTtcbitcdH1cbitcdGVyciA9IGJwZl9wcm9ncmFtX19zZXRfYXV0b2xvYWQoc2tlbC1cdTAwM2Vwcm9ncy5tZW1jZ19rZnVuY3NfcHJvYmUsIGZhbHNlKTtcbitcdGlmIChlcnIpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJkaXNhYmxpbmcgY2FwYWJpbGl0eSBwcm9iZSBmYWlsZWQ6ICVzICglZClcXG5cIixcbitcdFx0XHQgICAgICAgc3RyZXJyb3IoLWVyciksIGVycik7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1x0ZXJyID0gYnBmX21hcF9fc2V0X21heF9lbnRyaWVzKHNrZWwtXHUwMDNlbWFwcy5yZXN1bHRzLCBuX25vZGVzICsgOCk7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwic2V0IG1heF9lbnRyaWVzIGZhaWxlZDogJXMgKCVkKVxcblwiLFxuK1x0XHRcdCAgICAgICBzdHJlcnJvcigtZXJyKSwgZXJyKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXHRlcnIgPSBtZW1jZ19zdGF0X2Nyb3NzX2NwdV9fbG9hZChza2VsKTtcbitcdGlmIChlcnIpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJza2VsIGxvYWQgZmFpbGVkOiAlcyAoJWQpXFxuXCIsXG4rXHRcdFx0ICAgICAgIHN0cmVycm9yKC1lcnIpLCBlcnIpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGxpbmZvLmNncm91cC5jZ3JvdXBfZmQgPSByb290X2ZkO1xuK1x0bGluZm8uY2dyb3VwLm9yZGVyID0gQlBGX0NHUk9VUF9JVEVSX0RFU0NFTkRBTlRTX1BSRTtcbitcdG9wdHMubGlua19pbmZvID0gXHUwMDI2bGluZm87XG4rXHRvcHRzLmxpbmtfaW5mb19sZW4gPSBzaXplb2YobGluZm8pO1xuK1xuK1x0bGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfaXRlcihza2VsLVx1MDAzZXByb2dzLmNncm91cF9tZW1jZ19zdGF0X2Nyb3NzX2NwdSxcbitcdFx0XHRcdFx0XHUwMDI2b3B0cyk7XG4rXHRlcnIgPSBsaWJicGZfZ2V0X2Vycm9yKGxpbmspO1xuK1x0aWYgKGVycikge1xuK1x0XHRsaW5rID0gTlVMTDtcbitcdFx0a3NmdF9wcmludF9tc2coXCJhdHRhY2ggaXRlciBmYWlsZWQ6ICVzICglZClcXG5cIixcbitcdFx0XHQgICAgICAgc3RyZXJyb3IoLWVyciksIGVycik7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0ZmQgPSBicGZfaXRlcl9jcmVhdGUoYnBmX2xpbmtfX2ZkKGxpbmspKTtcbitcdGlmIChmZCBcdTAwM2MgMCkge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcImJwZl9pdGVyX2NyZWF0ZSBmYWlsZWQ6ICVzICglZClcXG5cIixcbitcdFx0XHQgICAgICAgc3RyZXJyb3IoZXJybm8pLCBlcnJubyk7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1x0ZG8ge1xuK1x0XHRyID0gcmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSk7XG4rXHR9IHdoaWxlIChyIFx1MDAzZSAwIHx8IChyIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFSU5UUikpO1xuK1x0ZXJyID0gZXJybm87XG4rXHRjbG9zZShmZCk7XG4rXHRpZiAociBcdTAwM2MgMCkge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcImJwZiB3YWxrIGZhaWxlZDogJXMgKCVkKVxcblwiLFxuK1x0XHRcdCAgICAgICBzdHJlcnJvcihlcnIpLCBlcnIpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdG1mZCA9IGJwZl9tYXBfX2ZkKHNrZWwtXHUwMDNlbWFwcy5yZXN1bHRzKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5fbm9kZXM7IGkrKylcbitcdFx0aWYgKGJwZl9tYXBfbG9va3VwX2VsZW0obWZkLCBcdTAwMjZub2Rlc1tpXS5pZCwgXHUwMDI2bm9kZXNbaV0uYnBmKSkge1xuK1x0XHRcdGtzZnRfcHJpbnRfbXNnKFwibm8gbWFwIGVudHJ5IGZvciAlczogJXMgKCVkKVxcblwiLFxuK1x0XHRcdFx0ICAgICAgIG5vZGVzW2ldLnBhdGgsIHN0cmVycm9yKGVycm5vKSwgZXJybm8pO1xuK1x0XHRcdGdvdG8gb3V0O1xuK1x0XHR9XG4rXHRyZXQgPSAwO1xuK291dDpcbitcdGJwZl9saW5rX19kZXN0cm95KGxpbmspO1xuK1x0bWVtY2dfc3RhdF9jcm9zc19jcHVfX2Rlc3Ryb3koc2tlbCk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKiBSZWFkIG9uZSBjZ3JvdXBmcyBzbmFwc2hvdC4gKi9cbitzdGF0aWMgaW50IHJlYWRfZmlsZXMoaW50IHNsb3QpXG4re1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuX25vZGVzOyBpKyspIHtcbitcdFx0Y29uc3QgY2hhciAqcGF0aCA9IG5vZGVzW2ldLnBhdGg7XG4rXHRcdHN0cnVjdCBmaWxlX3NuYXAgKmYgPSBcdTAwMjZub2Rlc1tpXS5maWxlW3Nsb3RdO1xuK1xuK1x0XHRmLVx1MDAzZWFub24gPSBjZ19yZWFkX2tleV9sb25nKHBhdGgsIFwibWVtb3J5LnN0YXRcIiwgXCJhbm9uIFwiKTtcbitcdFx0Zi1cdTAwM2VmaWxlID0gY2dfcmVhZF9rZXlfbG9uZyhwYXRoLCBcIm1lbW9yeS5zdGF0XCIsIFwiZmlsZSBcIik7XG4rXHRcdGYtXHUwMDNlc2htZW0gPSBjZ19yZWFkX2tleV9sb25nKHBhdGgsIFwibWVtb3J5LnN0YXRcIiwgXCJzaG1lbSBcIik7XG4rXHRcdGYtXHUwMDNlZmlsZV9tYXBwZWQgPSBjZ19yZWFkX2tleV9sb25nKHBhdGgsIFwibWVtb3J5LnN0YXRcIixcbitcdFx0XHRcdFx0XHQgIFwiZmlsZV9tYXBwZWQgXCIpO1xuK1x0XHRmLVx1MDAzZXBnZmF1bHQgPSBjZ19yZWFkX2tleV9sb25nKHBhdGgsIFwibWVtb3J5LnN0YXRcIiwgXCJwZ2ZhdWx0IFwiKTtcbitcdFx0Zi1cdTAwM2VjdXJyZW50ID0gY2dfcmVhZF9sb25nKHBhdGgsIFwibWVtb3J5LmN1cnJlbnRcIik7XG4rXG4rXHRcdGlmIChmLVx1MDAzZWFub24gXHUwMDNjIDAgfHwgZi1cdTAwM2VmaWxlIFx1MDAzYyAwIHx8IGYtXHUwMDNlc2htZW0gXHUwMDNjIDAgfHxcbitcdFx0ICAgIGYtXHUwMDNlZmlsZV9tYXBwZWQgXHUwMDNjIDAgfHwgZi1cdTAwM2VwZ2ZhdWx0IFx1MDAzYyAwIHx8IGYtXHUwMDNlY3VycmVudCBcdTAwM2MgMCkge1xuK1x0XHRcdGtzZnRfcHJpbnRfbXNnKFwicmVhZGluZyB0aGUgc3RhdHMgb2YgJXMgZmFpbGVkXFxuXCIsIHBhdGgpO1xuK1x0XHRcdHJldHVybiAtMTtcbitcdFx0fVxuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qIC0tLS0gY29tcGFyaXNvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbitcbitzdGF0aWMgdm9pZCBkdW1wX25vZGUoY29uc3Qgc3RydWN0IGNnX25vZGUgKm4pXG4re1xuK1x0aW50IHM7XG4rXG4rXHRrc2Z0X3ByaW50X21zZyhcIiVzIGJwZiAgIDogYW5vbj0lbGx1IGZpbGU9JWxsdSBzaG1lbT0lbGx1IGZtYXBwZWQ9JWxsdSBwZ2ZhdWx0PSVsbHVcXG5cIixcbitcdFx0ICAgICAgIG4tXHUwMDNlcGF0aCwgbi1cdTAwM2VicGYuYW5vbiwgbi1cdTAwM2VicGYuZmlsZSwgbi1cdTAwM2VicGYuc2htZW0sXG4rXHRcdCAgICAgICBuLVx1MDAzZWJwZi5maWxlX21hcHBlZCwgbi1cdTAwM2VicGYucGdmYXVsdCk7XG4rXHRmb3IgKHMgPSAwOyBzIFx1MDAzYyAyOyBzKyspXG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwiJXMgZmlsZSVkOiBhbm9uPSVsZCBmaWxlPSVsZCBzaG1lbT0lbGQgZm1hcHBlZD0lbGQgcGdmYXVsdD0lbGRcXG5cIixcbitcdFx0XHQgICAgICAgbi1cdTAwM2VwYXRoLCBzLCBuLVx1MDAzZWZpbGVbc10uYW5vbiwgbi1cdTAwM2VmaWxlW3NdLmZpbGUsXG4rXHRcdFx0ICAgICAgIG4tXHUwMDNlZmlsZVtzXS5zaG1lbSwgbi1cdTAwM2VmaWxlW3NdLmZpbGVfbWFwcGVkLFxuK1x0XHRcdCAgICAgICBuLVx1MDAzZWZpbGVbc10ucGdmYXVsdCk7XG4rfVxuK1xuKy8qIEVxdWFsIGZpbGUgc2FtcGxlcyByZXF1aXJlIGFuIGV4YWN0IEJQRiBtYXRjaDsgb3RoZXJ3aXNlIGFjY2VwdCB0aGVpciByYW5nZS4gKi9cbitzdGF0aWMgYm9vbCBicmFja2V0ZWQodW5zaWduZWQgbG9uZyBsb25nIHYsIGxvbmcgYSwgbG9uZyBiKVxuK3tcbitcdGxvbmcgbG8gPSBhIFx1MDAzYyBiID8gYSA6IGI7XG4rXHRsb25nIGhpID0gYSBcdTAwM2MgYiA/IGIgOiBhO1xuK1xuK1x0cmV0dXJuIHYgXHUwMDNlPSAodW5zaWduZWQgbG9uZyBsb25nKWxvIFx1MDAyNlx1MDAyNiB2IFx1MDAzYz0gKHVuc2lnbmVkIGxvbmcgbG9uZyloaTtcbit9XG4rXG4rc3RhdGljIGludCBjaGVja190cmVlKHNpemVfdCBjaGFyZ2VkKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgbG9uZyByb290X2Fub24gPSAwLCBsZWFmX2Fub24gPSAwO1xuK1x0aW50IGksIGJhZCA9IDA7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuX25vZGVzOyBpKyspIHtcbitcdFx0Y29uc3Qgc3RydWN0IGNnX25vZGUgKm4gPSBcdTAwMjZub2Rlc1tpXTtcbitcdFx0Y29uc3Qgc3RydWN0IG1lbWNnX3N0YXRfc25hcHNob3QgKmIgPSBcdTAwMjZuLVx1MDAzZWJwZjtcbitcdFx0Y29uc3Qgc3RydWN0IGZpbGVfc25hcCAqZjAgPSBcdTAwMjZuLVx1MDAzZWZpbGVbMF0sICpmMSA9IFx1MDAyNm4tXHUwMDNlZmlsZVsxXTtcbitcbitcdFx0aWYgKCFicmFja2V0ZWQoYi1cdTAwM2Vhbm9uLCBmMC1cdTAwM2Vhbm9uLCBmMS1cdTAwM2Vhbm9uKSB8fFxuK1x0XHQgICAgIWJyYWNrZXRlZChiLVx1MDAzZWZpbGUsIGYwLVx1MDAzZWZpbGUsIGYxLVx1MDAzZWZpbGUpIHx8XG4rXHRcdCAgICAhYnJhY2tldGVkKGItXHUwMDNlc2htZW0sIGYwLVx1MDAzZXNobWVtLCBmMS1cdTAwM2VzaG1lbSkgfHxcbitcdFx0ICAgICFicmFja2V0ZWQoYi1cdTAwM2VmaWxlX21hcHBlZCwgZjAtXHUwMDNlZmlsZV9tYXBwZWQsXG4rXHRcdFx0ICAgICAgIGYxLVx1MDAzZWZpbGVfbWFwcGVkKSB8fFxuK1x0XHQgICAgIWJyYWNrZXRlZChiLVx1MDAzZXBnZmF1bHQsIGYwLVx1MDAzZXBnZmF1bHQsIGYxLVx1MDAzZXBnZmF1bHQpKSB7XG4rXHRcdFx0a3NmdF9wcmludF9tc2coXCJrZnVuY3MgZGlzYWdyZWUgd2l0aCBtZW1vcnkuc3RhdFxcblwiKTtcbitcdFx0XHRkdW1wX25vZGUobik7XG4rXHRcdFx0YmFkKys7XG4rXHRcdH1cbitcbitcdFx0LyogTGl2ZSBwYWdlIGNvdW50ZXJzIGFyZSBib3VuZHMsIG5vdCBmbHVzaGVkIHN0YXRpc3RpY3MuICovXG4rXHRcdGlmIChiLVx1MDAzZWFub24gXHUwMDNlIGItXHUwMDNldXNhZ2VfcGFnZXMgKiAodW5zaWduZWQgbG9uZyBsb25nKXBhZ2Vfc2l6ZSB8fFxuK1x0XHQgICAgZjEtXHUwMDNlYW5vbiBcdTAwM2UgZjEtXHUwMDNlY3VycmVudCkge1xuK1x0XHRcdGtzZnRfcHJpbnRfbXNnKFwiJXM6IGFub24gYWJvdmUgdXNhZ2U6IGJwZiAlbGx1LyVsbHUgZmlsZSAlbGQvJWxkXFxuXCIsXG4rXHRcdFx0XHQgICAgICAgbi1cdTAwM2VwYXRoLCBiLVx1MDAzZWFub24sXG4rXHRcdFx0XHQgICAgICAgYi1cdTAwM2V1c2FnZV9wYWdlcyAqICh1bnNpZ25lZCBsb25nIGxvbmcpcGFnZV9zaXplLFxuK1x0XHRcdFx0ICAgICAgIGYxLVx1MDAzZWFub24sIGYxLVx1MDAzZWN1cnJlbnQpO1xuK1x0XHRcdGJhZCsrO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChuLVx1MDAzZWlzX2xlYWYpIHtcbitcdFx0XHRpZiAoYi1cdTAwM2Vhbm9uIFx1MDAzYyBjaGFyZ2VkKSB7XG4rXHRcdFx0XHRrc2Z0X3ByaW50X21zZyhcIiVzOiBmbHVzaGVkIGFub24gJWxsdSwgY2hhcmdlZCAlenVcXG5cIixcbitcdFx0XHRcdFx0ICAgICAgIG4tXHUwMDNlcGF0aCwgYi1cdTAwM2Vhbm9uLCBjaGFyZ2VkKTtcbitcdFx0XHRcdGJhZCsrO1xuK1x0XHRcdH1cbitcdFx0XHRsZWFmX2Fub24gKz0gYi1cdTAwM2Vhbm9uO1xuK1x0XHR9XG4rXHRcdGlmIChpID09IDApXG4rXHRcdFx0cm9vdF9hbm9uID0gYi1cdTAwM2Vhbm9uO1xuK1x0fVxuK1xuK1x0aWYgKHJvb3RfYW5vbiAhPSBsZWFmX2Fub24pIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJzdWJ0cmVlIHJvb3QgYW5vbiAlbGx1LCBzdW0gb2YgdGhlIGxlYXZlcyAlbGx1XFxuXCIsXG4rXHRcdFx0ICAgICAgIHJvb3RfYW5vbiwgbGVhZl9hbm9uKTtcbitcdFx0YmFkKys7XG4rXHR9XG4rXHRyZXR1cm4gYmFkID8gLTEgOiAwO1xuK31cbitcbisvKiBBY2NlcHQgUEFHRV9DT1VOVEVSX01BWCB2YWx1ZXMgZnJvbSBlaXRoZXIgMzItIG9yIDY0LWJpdCBrZXJuZWxzLiAqL1xuK3N0YXRpYyBpbnQgY2hlY2tfdW5saW1pdGVkKHZvaWQpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBsb25nIG1heDY0ID0gKHVuc2lnbmVkIGxvbmcgbG9uZylJTlQ2NF9NQVggLyBwYWdlX3NpemU7XG4rXHR1bnNpZ25lZCBsb25nIGxvbmcgbWF4MzIgPSBJTlQzMl9NQVg7XG4rXG4rXHRpZiAoY2dfcmVhZF9zdHJjbXAobm9kZXNbMF0ucGF0aCwgXCJtZW1vcnkubWF4XCIsIFwibWF4XFxuXCIpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChub2Rlc1swXS5icGYubWF4X3BhZ2VzICE9IG1heDY0IFx1MDAyNlx1MDAyNiBub2Rlc1swXS5icGYubWF4X3BhZ2VzICE9IG1heDMyKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwibWVtb3J5Lm1heCByZWFkcyBtYXgsIGtmdW5jIHJlcG9ydHMgJWxsdSBwYWdlc1xcblwiLFxuK1x0XHRcdCAgICAgICBub2Rlc1swXS5icGYubWF4X3BhZ2VzKTtcbitcdFx0cmV0dXJuIC0xO1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qIC0tLS0gb25lIGNhc2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbitcbitzdHJ1Y3QgdGVzdGNhc2Uge1xuK1x0Y29uc3QgY2hhciAqbmFtZTtcbitcdGludCBmYW5vdXQ7XG4rXHRpbnQgZGVwdGg7XG4rXHRpbnQgY3B1c19wZXJfbGVhZjtcdC8qIEssIG9yIDAgZm9yIHRoZSBib3VuZGVkIGNyb3NzLUNQVSBjb3VudCAqL1xuK1x0c2l6ZV90IHJlc2lkZW50X2J5dGVzO1x0LyogYW5vbiBwZXIgbGVhZiwgcmFpc2VkIGlmIHRvbyBzbWFsbCAqL1xuK307XG4rXG4rc3RhdGljIGludCBydW5fY2FzZShjb25zdCBzdHJ1Y3QgdGVzdGNhc2UgKnRjKVxuK3tcbitcdGludCByb290X2ZkID0gLTEsIHJldCA9IEtTRlRfRkFJTCwgZXJyLCBrO1xuK1x0c2l6ZV90IGNoYXJnZWQ7XG4rXG4rXHRpZiAoYnVpbGRfdHJlZSh0Yy1cdTAwM2VmYW5vdXQsIHRjLVx1MDAzZWRlcHRoLCBcdTAwMjZyb290X2ZkKSkge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcImNhbm5vdCBidWlsZCB0aGUgdHJlZVxcblwiKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRrID0gdGMtXHUwMDNlY3B1c19wZXJfbGVhZjtcbitcdGlmIChrIFx1MDAzYz0gMClcbitcdFx0ayA9IG5fY3B1IFx1MDAzYyBNQVhfQ1BVU19QRVJfTEVBRiA/IG5fY3B1IDogTUFYX0NQVVNfUEVSX0xFQUY7XG4rXHRlbHNlIGlmIChrIFx1MDAzZSBuX2NwdSlcbitcdFx0ayA9IG5fY3B1O1xuK1x0ZXJyID0gbGVhZl9jaGFyZ2UodGMtXHUwMDNlcmVzaWRlbnRfYnl0ZXMsIGssIFx1MDAyNmNoYXJnZWQpO1xuK1x0aWYgKGVyciA9PSAtRTJCSUcpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCIlcyBuZWVkcyBtb3JlIHRoYW4gJWx1TUIgdG8gdHJpZ2dlciBhIGZsdXNoIG9uICVsZCBvbmxpbmUgQ1BVc1xcblwiLFxuK1x0XHRcdCAgICAgICB0Yy1cdTAwM2VuYW1lLCBNQVhfVE9UQUxfQ0hBUkdFIFx1MDAzZVx1MDAzZSAyMCwgbl9vbmxpbmVfY3B1KTtcbitcdFx0cmV0ID0gS1NGVF9TS0lQO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcdGlmIChlcnIpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJjYW5ub3QgY2FsY3VsYXRlIHRoZSBjaGFyZ2UgZm9yICVzOiAlcyAoJWQpXFxuXCIsXG4rXHRcdFx0ICAgICAgIHRjLVx1MDAzZW5hbWUsIHN0cmVycm9yKC1lcnIpLCBlcnIpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGtzZnRfcHJpbnRfbXNnKFwiJXM6ICVkIGNncm91cHMsICVkIGxlYXZlcywgJWQvJWQgY3B1cywgJXp1S0IgcGVyIGxlYWZcXG5cIixcbitcdFx0ICAgICAgIHRjLVx1MDAzZW5hbWUsIG5fbm9kZXMsIG5fbGVhdmVzLCBrLCBuX2NwdSwgY2hhcmdlZCBcdTAwM2VcdTAwM2UgMTApO1xuK1xuK1x0aWYgKHN0YXJ0X2NoYXJnZXJzKGssIGNoYXJnZWQpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdC8qIFJlYWQgQlBGIGZpcnN0OyBtZW1vcnkuc3RhdCB3b3VsZCBjb25zdW1lIHRoZSBwZW5kaW5nIGZsdXNoLiAqL1xuK1x0aWYgKHJlYWRfYnBmKHJvb3RfZmQpIHx8IHJlYWRfZmlsZXMoMCkgfHwgcmVhZF9maWxlcygxKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRpZiAoIWNoZWNrX3RyZWUoY2hhcmdlZCkgXHUwMDI2XHUwMDI2ICFjaGVja191bmxpbWl0ZWQoKSlcbitcdFx0cmV0ID0gS1NGVF9QQVNTO1xuK291dDpcbitcdGlmIChyb290X2ZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2Uocm9vdF9mZCk7XG4rXHRkZXN0cm95X3RyZWUoKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGVzdGNhc2UgY2FzZXNbXSA9IHtcbitcdC8qIG5hbWUsIGZhbm91dCwgZGVwdGgsIEssIGFub24gcGVyIGxlYWYgKi9cbitcdHsgXCJzaW5nbGVfY3B1X3NtYWxsX3RyZWVcIiwgNCwgMiwgMSwgMiBcdTAwM2NcdTAwM2MgMjAgfSxcbitcdHsgXCJjcm9zc19jcHVfc21hbGxfdHJlZVwiLCA0LCAyLCAwLCAyIFx1MDAzY1x1MDAzYyAyMCB9LFxuK1x0eyBcInNpbmdsZV9jcHVfbGFyZ2VfdHJlZVwiLCA0LCAzLCAxLCAyNTYgXHUwMDNjXHUwMDNjIDEwIH0sXG4rXHR7IFwiY3Jvc3NfY3B1X2xhcmdlX3RyZWVcIiwgNCwgMywgMCwgMjU2IFx1MDAzY1x1MDAzYyAxMCB9LFxuK307XG4rXG4rc3RhdGljIGJvb2wgbWVtY2dfa2Z1bmNzX2F2YWlsYWJsZSh2b2lkKVxuK3tcbitcdHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBrZnVuY3NbXSA9IHtcbitcdFx0XCJicGZfZ2V0X21lbV9jZ3JvdXBcIixcbitcdFx0XCJicGZfcHV0X21lbV9jZ3JvdXBcIixcbitcdFx0XCJicGZfbWVtX2Nncm91cF9mbHVzaF9zdGF0c1wiLFxuK1x0XHRcImJwZl9tZW1fY2dyb3VwX3BhZ2Vfc3RhdGVcIixcbitcdFx0XCJicGZfbWVtX2Nncm91cF92bV9ldmVudHNcIixcbitcdH07XG4rXHRzdHJ1Y3QgYnRmICpidGY7XG4rXHRpbnQgZXJyLCBpO1xuK1xuK1x0YnRmID0gYnRmX19sb2FkX3ZtbGludXhfYnRmKCk7XG4rXHRlcnIgPSBsaWJicGZfZ2V0X2Vycm9yKGJ0Zik7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwiY2Fubm90IGxvYWQgdm1saW51eCBCVEY6ICVzICglZClcXG5cIixcbitcdFx0XHQgICAgICAgc3RyZXJyb3IoLWVyciksIGVycik7XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoa2Z1bmNzKTsgaSsrKSB7XG4rXHRcdGlmIChidGZfX2ZpbmRfYnlfbmFtZV9raW5kKGJ0Ziwga2Z1bmNzW2ldLCBCVEZfS0lORF9GVU5DKSBcdTAwM2UgMClcbitcdFx0XHRjb250aW51ZTtcbitcdFx0a3NmdF9wcmludF9tc2coXCJyZXF1aXJlZCBrZnVuYyAlcyBpcyBub3QgaW4gdm1saW51eCBCVEZcXG5cIixcbitcdFx0XHQgICAgICAga2Z1bmNzW2ldKTtcbitcdFx0YnRmX19mcmVlKGJ0Zik7XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcdGlmIChidGZfX2ZpbmRfYnlfbmFtZV9raW5kKGJ0ZiwgXCJicGZfaXRlcl9jZ3JvdXBcIiwgQlRGX0tJTkRfRlVOQykgXHUwMDNjPSAwKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwiY2dyb3VwIEJQRiBpdGVyYXRvciBpcyBub3QgaW4gdm1saW51eCBCVEZcXG5cIik7XG4rXHRcdGJ0Zl9fZnJlZShidGYpO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4rXHRidGZfX2ZyZWUoYnRmKTtcbitcdHJldHVybiB0cnVlO1xuK31cbitcbitzdGF0aWMgYm9vbCB1bnN1cHBvcnRlZF9icGZfZmVhdHVyZV9lcnJvcihpbnQgZXJyKVxuK3tcbitcdHJldHVybiBlcnIgPT0gLUVJTlZBTCB8fCBlcnIgPT0gLUVOT0VOVCB8fCBlcnIgPT0gLUVPUE5PVFNVUFA7XG4rfVxuK1xuKy8qIFJldHVybiAxIGlmIHN1cHBvcnRlZCwgMCBpZiB1bmF2YWlsYWJsZSwgb3IgYSBuZWdhdGl2ZSBlcnJvci4gKi9cbitzdGF0aWMgaW50IHByb2JlX21lbWNnX2JwZl9mZWF0dXJlcyhpbnQgcm9vdF9mZClcbit7XG4rXHRERUNMQVJFX0xJQkJQRl9PUFRTKGJwZl9pdGVyX2F0dGFjaF9vcHRzLCBvcHRzKTtcbitcdHN0cnVjdCBtZW1jZ19zdGF0X2Nyb3NzX2NwdSAqc2tlbDtcbitcdHVuaW9uIGJwZl9pdGVyX2xpbmtfaW5mbyBsaW5mbyA9IHt9O1xuK1x0c3RydWN0IGJwZl9saW5rICpsaW5rID0gTlVMTDtcbitcdGludCByZXQsIGVyciwgaXRlcl9mZCA9IC0xO1xuK1xuK1x0c2tlbCA9IG1lbWNnX3N0YXRfY3Jvc3NfY3B1X19vcGVuKCk7XG4rXHRpZiAoIXNrZWwpIHtcbitcdFx0ZXJyID0gZXJybm8gPyAtZXJybm8gOiAtRUlOVkFMO1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcImNhcGFiaWxpdHkgcHJvYmUgb3BlbiBmYWlsZWQ6ICVzICglZClcXG5cIixcbitcdFx0XHQgICAgICAgc3RyZXJyb3IoLWVyciksIGVycik7XG4rXHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rXHRlcnIgPSBicGZfcHJvZ3JhbV9fc2V0X2F1dG9sb2FkKHNrZWwtXHUwMDNlcHJvZ3MuY2dyb3VwX21lbWNnX3N0YXRfY3Jvc3NfY3B1LFxuK1x0XHRcdFx0XHRmYWxzZSk7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwiZGlzYWJsaW5nIHRlc3QgcHJvZ3JhbSBmYWlsZWQ6ICVzICglZClcXG5cIixcbitcdFx0XHQgICAgICAgc3RyZXJyb3IoLWVyciksIGVycik7XG4rXHRcdHJldCA9IGVycjtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRlcnIgPSBtZW1jZ19zdGF0X2Nyb3NzX2NwdV9fbG9hZChza2VsKTtcbitcdGlmIChlcnIpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJCUEYgY2FwYWJpbGl0eSBwcm9iZSBsb2FkIGZhaWxlZDogJXMgKCVkKVxcblwiLFxuK1x0XHRcdCAgICAgICBzdHJlcnJvcigtZXJyKSwgZXJyKTtcbitcdFx0cmV0ID0gdW5zdXBwb3J0ZWRfYnBmX2ZlYXR1cmVfZXJyb3IoZXJyKSA/IDAgOiBlcnI7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0bGluZm8uY2dyb3VwLmNncm91cF9mZCA9IHJvb3RfZmQ7XG4rXHRsaW5mby5jZ3JvdXAub3JkZXIgPSBCUEZfQ0dST1VQX0lURVJfU0VMRl9PTkxZO1xuK1x0b3B0cy5saW5rX2luZm8gPSBcdTAwMjZsaW5mbztcbitcdG9wdHMubGlua19pbmZvX2xlbiA9IHNpemVvZihsaW5mbyk7XG4rXHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9pdGVyKHNrZWwtXHUwMDNlcHJvZ3MubWVtY2dfa2Z1bmNzX3Byb2JlLCBcdTAwMjZvcHRzKTtcbitcdGVyciA9IGxpYmJwZl9nZXRfZXJyb3IobGluayk7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdGxpbmsgPSBOVUxMO1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcIkJQRiBjYXBhYmlsaXR5IHByb2JlIGF0dGFjaCBmYWlsZWQ6ICVzICglZClcXG5cIixcbitcdFx0XHQgICAgICAgc3RyZXJyb3IoLWVyciksIGVycik7XG4rXHRcdHJldCA9IHVuc3VwcG9ydGVkX2JwZl9mZWF0dXJlX2Vycm9yKGVycikgPyAwIDogZXJyO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGl0ZXJfZmQgPSBicGZfaXRlcl9jcmVhdGUoYnBmX2xpbmtfX2ZkKGxpbmspKTtcbitcdGlmIChpdGVyX2ZkIFx1MDAzYyAwKSB7XG4rXHRcdGVyciA9IC1lcnJubztcbitcdFx0a3NmdF9wcmludF9tc2coXCJCUEYgY2FwYWJpbGl0eSBwcm9iZSBpdGVyYXRvciBjcmVhdGlvbiBmYWlsZWQ6ICVzICglZClcXG5cIixcbitcdFx0XHQgICAgICAgc3RyZXJyb3IoLWVyciksIGVycik7XG4rXHRcdHJldCA9IHVuc3VwcG9ydGVkX2JwZl9mZWF0dXJlX2Vycm9yKGVycikgPyAwIDogZXJyO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdHJldCA9IDE7XG4rb3V0OlxuK1x0aWYgKGl0ZXJfZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShpdGVyX2ZkKTtcbitcdGJwZl9saW5rX19kZXN0cm95KGxpbmspO1xuK1x0bWVtY2dfc3RhdF9jcm9zc19jcHVfX2Rlc3Ryb3koc2tlbCk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4re1xuK1x0aW50IGZlYXR1cmVfZmQsIGksIHJldDtcbitcbitcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XG4rXG4rXHQvKiBQcm9iZSBCVEYgYmVmb3JlIG9wZXJhdGlvbnMgdGhhdCBtYXkgcmVxdWlyZSBwcml2aWxlZ2VzLiAqL1xuK1x0aWYgKCFtZW1jZ19rZnVuY3NfYXZhaWxhYmxlKCkpXG4rXHRcdGtzZnRfZXhpdF9za2lwKFwibWVtY2cgQlBGIGtmdW5jcyBhcmUgbm90IGF2YWlsYWJsZVxcblwiKTtcbitcbitcdGlmIChjZ19maW5kX3VuaWZpZWRfcm9vdChyb290LCBzaXplb2Yocm9vdCksIE5VTEwpKVxuK1x0XHRrc2Z0X2V4aXRfc2tpcChcImNncm91cCB2MiBpc24ndCBtb3VudGVkXFxuXCIpO1xuK1x0ZmVhdHVyZV9mZCA9IG9wZW4ocm9vdCwgT19SRE9OTFkgfCBPX0RJUkVDVE9SWSk7XG4rXHRpZiAoZmVhdHVyZV9mZCBcdTAwM2MgMClcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiY2Fubm90IG9wZW4gY2dyb3VwIHJvb3Q6ICVzICglZClcXG5cIixcbitcdFx0XHRcdCAgIHN0cmVycm9yKGVycm5vKSwgZXJybm8pO1xuK1x0cmV0ID0gcHJvYmVfbWVtY2dfYnBmX2ZlYXR1cmVzKGZlYXR1cmVfZmQpO1xuK1x0Y2xvc2UoZmVhdHVyZV9mZCk7XG4rXHRpZiAoIXJldClcbitcdFx0a3NmdF9leGl0X3NraXAoXCJzbGVlcGFibGUgY2dyb3VwIGl0ZXJhdG9yIG9yIG1lbWNnIGtmdW5jcyBhcmUgbm90IGF2YWlsYWJsZVxcblwiKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcImNhbm5vdCBwcm9iZSBCUEYgY2FwYWJpbGl0aWVzOiAlcyAoJWQpXFxuXCIsXG4rXHRcdFx0XHQgICBzdHJlcnJvcigtcmV0KSwgcmV0KTtcbitcbitcdGlmIChjZ19yZWFkX3N0cnN0cihyb290LCBcImNncm91cC5jb250cm9sbGVyc1wiLCBcIm1lbW9yeVwiKSlcbitcdFx0a3NmdF9leGl0X3NraXAoXCJtZW1vcnkgY29udHJvbGxlciBpc24ndCBhdmFpbGFibGVcXG5cIik7XG4rXG4rXHRpZiAoY2dfcmVhZF9zdHJzdHIocm9vdCwgXCJjZ3JvdXAuc3VidHJlZV9jb250cm9sXCIsIFwibWVtb3J5XCIpKVxuK1x0XHRpZiAoY2dfd3JpdGUocm9vdCwgXCJjZ3JvdXAuc3VidHJlZV9jb250cm9sXCIsIFwiK21lbW9yeVwiKSlcbitcdFx0XHRrc2Z0X2V4aXRfc2tpcChcIkZhaWxlZCB0byBzZXQgbWVtb3J5IGNvbnRyb2xsZXJcXG5cIik7XG4rXG4rXHRDUFVfWkVSTyhcdTAwMjZhbGxvd2VkX2NwdXMpO1xuK1x0aWYgKHNjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihhbGxvd2VkX2NwdXMpLCBcdTAwMjZhbGxvd2VkX2NwdXMpKVxuK1x0XHRrc2Z0X2V4aXRfc2tpcChcImNhbm5vdCByZWFkIENQVSBhZmZpbml0eVxcblwiKTtcbitcdG5fY3B1ID0gQ1BVX0NPVU5UKFx1MDAyNmFsbG93ZWRfY3B1cyk7XG4rXHRpZiAobl9jcHUgXHUwMDNjPSAwKVxuK1x0XHRrc2Z0X2V4aXRfc2tpcChcIm5vIENQVSB0byBydW4gb25cXG5cIik7XG4rXHRuX29ubGluZV9jcHUgPSBzeXNjb25mKF9TQ19OUFJPQ0VTU09SU19PTkxOKTtcbitcdGlmIChuX29ubGluZV9jcHUgXHUwMDNjPSAwKVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJjYW5ub3QgZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2Ygb25saW5lIENQVXNcXG5cIik7XG4rXG4rXHRwYWdlX3NpemUgPSBzeXNjb25mKF9TQ19QQUdFU0laRSk7XG4rXHRpZiAocGFnZV9zaXplIFx1MDAzYz0gMClcbitcdFx0cGFnZV9zaXplID0gQlVGX1NJWkU7XG4rXG4rXHRzdWJ0cmVlX3Jvb3QgPSBjZ19uYW1lKHJvb3QsIFNVQlRSRUVfTkFNRSk7XG4rXHRpZiAoIXN1YnRyZWVfcm9vdClcbitcdFx0a3NmdF9leGl0X3NraXAoXCJjYW5ub3QgYnVpbGQgc3VidHJlZSByb290IHBhdGhcXG5cIik7XG4rXG4rXHQvKiBTZXQgdGhlIHBsYW4gYWZ0ZXIgYWxsIGdsb2JhbCBza2lwIGNoZWNrcy4gKi9cbitcdGtzZnRfc2V0X3BsYW4oQVJSQVlfU0laRShjYXNlcykpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShjYXNlcyk7IGkrKykge1xuK1x0XHRzd2l0Y2ggKHJ1bl9jYXNlKFx1MDAyNmNhc2VzW2ldKSkge1xuK1x0XHRjYXNlIEtTRlRfUEFTUzpcbitcdFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3Bhc3MoXCIlc1xcblwiLCBjYXNlc1tpXS5uYW1lKTtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBLU0ZUX1NLSVA6XG4rXHRcdFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFwiJXNcXG5cIiwgY2FzZXNbaV0ubmFtZSk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGRlZmF1bHQ6XG4rXHRcdFx0a3NmdF90ZXN0X3Jlc3VsdF9mYWlsKFwiJXNcXG5cIiwgY2FzZXNbaV0ubmFtZSk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdH1cbitcbitcdGZyZWUoc3VidHJlZV9yb290KTtcbitcdGtzZnRfZmluaXNoZWQoKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfbWVtY29udHJvbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfbWVtY29udHJvbC5jXG5pbmRleCAwZWJmNzk2ZjNjZmZlLi4xNWJhNDY4Nzk1MDQyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfbWVtY29udHJvbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9tZW1jb250cm9sLmNcbkBAIC0yNiw3ICsyNiw2IEBAXG4gXG4gc3RhdGljIGJvb2wgaGFzX2xvY2FsZXZlbnRzO1xuIHN0YXRpYyBib29sIGhhc19yZWN1cnNpdmVwcm90O1xuLXN0YXRpYyBpbnQgcGFnZV9zaXplO1xuIFxuIGludCBnZXRfdGVtcF9mZCh2b2lkKVxuIHtcbkBAIC01NiwyOCArNTUsMTIgQEAgaW50IGFsbG9jX3BhZ2VjYWNoZShpbnQgZmQsIHNpemVfdCBzaXplKVxuIFx0cmV0dXJuIC0xO1xuIH1cbiBcbi1zdGF0aWMgY2hhciAqYWxsb2NfYW5kX3BvcHVsYXRlX2Fub24oc2l6ZV90IHNpemUpXG4te1xuLVx0Y2hhciAqYnVmLCAqcHRyO1xuLVxuLVx0YnVmID0gbWFsbG9jKHNpemUpO1xuLVx0aWYgKGJ1ZiA9PSBOVUxMKSB7XG4tXHRcdGZwcmludGYoc3RkZXJyLCBcIm1hbGxvYygpIGZhaWxlZFxcblwiKTtcbi1cdFx0cmV0dXJuIE5VTEw7XG4tXHR9XG4tXG4tXHRmb3IgKHB0ciA9IGJ1ZjsgcHRyIFx1MDAzYyBidWYgKyBzaXplOyBwdHIgKz0gcGFnZV9zaXplKVxuLVx0XHQqcHRyID0gMDtcbi1cbi1cdHJldHVybiBidWY7XG4tfVxuLVxuIGludCBhbGxvY19hbm9uKGNvbnN0IGNoYXIgKmNncm91cCwgdm9pZCAqYXJnKVxuIHtcbiBcdHNpemVfdCBzaXplID0gKHVuc2lnbmVkIGxvbmcpYXJnO1xuIFx0Y2hhciAqYnVmO1xuIFxuLVx0YnVmID0gYWxsb2NfYW5kX3BvcHVsYXRlX2Fub24oc2l6ZSk7XG4rXHRidWYgPSBjZ19hbGxvY19hbm9uKHNpemUpO1xuIFx0aWYgKCFidWYpXG4gXHRcdHJldHVybiAtMTtcbiBcbkBAIC0xOTUsNyArMTc4LDcgQEAgc3RhdGljIGludCBhbGxvY19hbm9uXzUwTV9jaGVjayhjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZylcbiBcdGxvbmcgYW5vbiwgY3VycmVudDtcbiBcdGludCByZXQgPSAtMTtcbiBcbi1cdGJ1ZiA9IGFsbG9jX2FuZF9wb3B1bGF0ZV9hbm9uKHNpemUpO1xuK1x0YnVmID0gY2dfYWxsb2NfYW5vbihzaXplKTtcbiBcdGlmICghYnVmKVxuIFx0XHRyZXR1cm4gLTE7XG4gXG5AQCAtNDIwLDcgKzQwMyw3IEBAIHN0YXRpYyBpbnQgYWxsb2NfYW5vbl9ub2V4aXQoY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpXG4gXHRzaXplX3Qgc2l6ZSA9ICh1bnNpZ25lZCBsb25nKWFyZztcbiBcdGNoYXIgKmJ1ZjtcbiBcbi1cdGJ1ZiA9IGFsbG9jX2FuZF9wb3B1bGF0ZV9hbm9uKHNpemUpO1xuK1x0YnVmID0gY2dfYWxsb2NfYW5vbihzaXplKTtcbiBcdGlmICghYnVmKVxuIFx0XHRyZXR1cm4gLTE7XG4gXG5AQCAtMTAwMSw3ICs5ODQsNyBAQCBzdGF0aWMgaW50IGFsbG9jX2Fub25fNTBNX2NoZWNrX3N3YXAoY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpXG4gXHRsb25nIG1lbV9jdXJyZW50LCBzd2FwX2N1cnJlbnQ7XG4gXHRpbnQgcmV0ID0gLTE7XG4gXG4tXHRidWYgPSBhbGxvY19hbmRfcG9wdWxhdGVfYW5vbihzaXplKTtcbitcdGJ1ZiA9IGNnX2FsbG9jX2Fub24oc2l6ZSk7XG4gXHRpZiAoIWJ1ZilcbiBcdFx0cmV0dXJuIC0xO1xuIFxuQEAgLTE3OTMsMTAgKzE3NzYsNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRjaGFyIHJvb3RbUEFUSF9NQVhdO1xuIFx0aW50IGksIHByb2Nfc3RhdHVzO1xuIFxuLVx0cGFnZV9zaXplID0gc3lzY29uZihfU0NfUEFHRV9TSVpFKTtcbi1cdGlmIChwYWdlX3NpemUgXHUwMDNjPSAwKVxuLVx0XHRwYWdlX3NpemUgPSBCVUZfU0laRTtcbi1cbiBcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XG4gXHRrc2Z0X3NldF9wbGFuKEFSUkFZX1NJWkUodGVzdHMpKTtcbiBcdGlmIChjZ19maW5kX3VuaWZpZWRfcm9vdChyb290LCBzaXplb2Yocm9vdCksIE5VTEwpKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC8uZ2l0aWdub3JlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvaGlkLy5naXRpZ25vcmVcbmluZGV4IDkzM2Y0ODM4MTViMmMuLjY5OTQzMzAxZGMxZDcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvLmdpdGlnbm9yZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvaGlkLy5naXRpZ25vcmVcbkBAIC0xLDUgKzEsNiBAQFxuIGJwZnRvb2xcbiAqLnNrZWwuaFxuKyouYnBmLmRcbiAvaG9zdC10b29sc1xuIC90b29sc1xuIGhpZF9icGZcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvTWFrZWZpbGVcbmluZGV4IDJmNDIzZGU4MzE0NzMuLjExOTBhNzQ3MDM2ZGEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC9NYWtlZmlsZVxuQEAgLTQ3LDcgKzQ3LDYgQEAgbXNnID1cbiBlbHNlXG4gbXNnID0gQHByaW50ZiAnICAlLThzJXMgJXMlc1xcbicgXCIkKDEpXCIgXCIkKGlmICQoMiksIFskKDIpXSlcIiBcIiQobm90ZGlyICQoMykpXCIgXCIkKGlmICQoNCksICQoNCkpXCI7XG4gTUFLRUZMQUdTICs9IC0tbm8tcHJpbnQtZGlyZWN0b3J5XG4tc3VibWFrZV9leHRyYXMgOj0gZmVhdHVyZV9kaXNwbGF5PTBcbiBlbmRpZlxuIFxuICMgb3ZlcnJpZGUgbGliLm1rJ3MgZGVmYXVsdCBydWxlc1xuQEAgLTU4LDE3MiArNTcsMjUgQEAgb3ZlcnJpZGUgZGVmaW5lIENMRUFOXG4gXHQkKFEpJChSTSkgLXIgJChFWFRSQV9DTEVBTilcbiBlbmRlZlxuIFxuLWluY2x1ZGUgLi4vbGliLm1rXG4tXG4tVE9PTFNESVIgOj0gJCh0b3Bfc3JjZGlyKS90b29sc1xuLUxJQkRJUiA6PSAkKFRPT0xTRElSKS9saWJcbi1CUEZESVIgOj0gJChMSUJESVIpL2JwZlxuLVRPT0xTSU5DRElSIDo9ICQoVE9PTFNESVIpL2luY2x1ZGVcbi1CUEZUT09MRElSIDo9ICQoVE9PTFNESVIpL2JwZi9icGZ0b29sXG4tU0NSQVRDSF9ESVIgOj0gJChPVVRQVVQpL3Rvb2xzXG4tQlVJTERfRElSIDo9ICQoU0NSQVRDSF9ESVIpL2J1aWxkXG4tSU5DTFVERV9ESVIgOj0gJChTQ1JBVENIX0RJUikvaW5jbHVkZVxuLUJQRk9CSiA6PSAkKEJVSUxEX0RJUikvbGliYnBmL2xpYmJwZi5hXG4taWZuZXEgKCQoQ1JPU1NfQ09NUElMRSksKVxuLUhPU1RfQlVJTERfRElSXHRcdDo9ICQoQlVJTERfRElSKS9ob3N0XG4tSE9TVF9TQ1JBVENIX0RJUlx0Oj0gJChPVVRQVVQpL2hvc3QtdG9vbHNcbi1IT1NUX0lOQ0xVREVfRElSXHQ6PSAkKEhPU1RfU0NSQVRDSF9ESVIpL2luY2x1ZGVcbi1lbHNlXG4tSE9TVF9CVUlMRF9ESVJcdFx0Oj0gJChCVUlMRF9ESVIpXG4tSE9TVF9TQ1JBVENIX0RJUlx0Oj0gJChTQ1JBVENIX0RJUilcbi1IT1NUX0lOQ0xVREVfRElSXHQ6PSAkKElOQ0xVREVfRElSKVxuLWVuZGlmXG4tSE9TVF9CUEZPQkogOj0gJChIT1NUX0JVSUxEX0RJUikvbGliYnBmL2xpYmJwZi5hXG4tUkVTT0xWRV9CVEZJRFMgOj0gJChIT1NUX0JVSUxEX0RJUikvcmVzb2x2ZV9idGZpZHMvcmVzb2x2ZV9idGZpZHNcbi1cbi1WTUxJTlVYX0JURl9QQVRIUyA/PSAkKGlmICQoTyksJChPKS92bWxpbnV4KVx0XHRcdFx0XFxcbi1cdFx0ICAgICAkKGlmICQoS0JVSUxEX09VVFBVVCksJChLQlVJTERfT1VUUFVUKS92bWxpbnV4KVx0XFxcbi1cdFx0ICAgICAuLi8uLi8uLi8uLi92bWxpbnV4XHRcdFx0XHRcXFxuLVx0XHQgICAgIC9zeXMva2VybmVsL2J0Zi92bWxpbnV4XHRcdFx0XHRcXFxuLVx0XHQgICAgIC9ib290L3ZtbGludXgtJChzaGVsbCB1bmFtZSAtcilcbi1WTUxJTlVYX0JURiA/PSAkKGFic3BhdGggJChmaXJzdHdvcmQgJCh3aWxkY2FyZCAkKFZNTElOVVhfQlRGX1BBVEhTKSkpKVxuLWlmZXEgKCQoVk1MSU5VWF9CVEYpLClcbi0kKGVycm9yIENhbm5vdCBmaW5kIGEgdm1saW51eCBmb3IgVk1MSU5VWF9CVEYgYXQgYW55IG9mIFwiJChWTUxJTlVYX0JURl9QQVRIUylcIilcbi1lbmRpZlxuLVxuLSMgRGVmaW5lIHNpbXBsZSBhbmQgc2hvcnQgYG1ha2UgdGVzdF9wcm9nc2AsIGBtYWtlIHRlc3Rfc3lzY3RsYCwgZXRjIHRhcmdldHNcbi0jIHRvIGJ1aWxkIGluZGl2aWR1YWwgdGVzdHMuXG4tIyBOT1RFOiBTZW1pY29sb24gYXQgdGhlIGVuZCBpcyBjcml0aWNhbCB0byBvdmVycmlkZSBsaWIubWsncyBkZWZhdWx0IHN0YXRpY1xuLSMgcnVsZSBmb3IgYmluYXJpZXMuXG4tJChub3RkaXIgJChURVNUX0dFTl9QUk9HUykpOiAlOiAkKE9VVFBVVCkvJSA7XG4tXG4tIyBzb3J0IHJlbW92ZXMgbGliYnBmIGR1cGxpY2F0ZXMgd2hlbiBub3QgY3Jvc3MtYnVpbGRpbmdcbi1NQUtFX0RJUlMgOj0gJChzb3J0ICQoQlVJTERfRElSKS9saWJicGYgJChIT1NUX0JVSUxEX0RJUikvbGliYnBmXHRcdFxcXG4tXHQgICAgICAgJChIT1NUX0JVSUxEX0RJUikvYnBmdG9vbCAkKEhPU1RfQlVJTERfRElSKS9yZXNvbHZlX2J0Zmlkc1x0XFxcbi1cdCAgICAgICAkKElOQ0xVREVfRElSKSlcbi0kKE1BS0VfRElSUyk6XG4tXHQkKGNhbGwgbXNnLE1LRElSLCwkQClcbi1cdCQoUSlta2RpciAtcCAkQFxuKyMgQnVpbGQgdGhlIGxlZ2FjeSBwcm9ncy8qLmMgbGF5b3V0IHdpdGggdGhlIHNoYXJlZCBCUEYgcnVsZXMuXG4rQlBGX1NSQ1MgICAgICAgOj0gJCh3aWxkY2FyZCBwcm9ncy8qLmMpXG4rQlBGX1BST0dfRVhUICAgOj0gLmNcbisjIEJQRkRJUiBpcyBkZWZpbmVkIHdoZW4gdGhpcyByZWN1cnNpdmUgdmFyaWFibGUgaXMgZXhwYW5kZWQuXG4rQlBGX0VYVFJBX0hEUlMgID0gJCh3aWxkY2FyZCBwcm9ncy8qLmgpICQod2lsZGNhcmQgJChCUEZESVIpL2hpZF9icGZfKi5oKSBcXFxuK1x0XHQgICQod2lsZGNhcmQgJChCUEZESVIpLyouYnBmLmgpXG4gXG4tREVGQVVMVF9CUEZUT09MIDo9ICQoSE9TVF9TQ1JBVENIX0RJUikvc2Jpbi9icGZ0b29sXG4raW5jbHVkZSAuLi9saWIubWtcbitpbmNsdWRlIC4uL2xpYi5icGYubWtcbiBcbisjIFByZXNlcnZlIHRoZSBleGlzdGluZyBpbnN0YWxsIGxpc3QuXG4rVEVTVF9HRU5fRklMRVMgKz0gJChCUEZfT0JKUylcbiBURVNUX0dFTl9QUk9HU19FWFRFTkRFRCArPSAkKERFRkFVTFRfQlBGVE9PTClcbiBcbi0kKFRFU1RfR0VOX1BST0dTKSAkKFRFU1RfR0VOX1BST0dTX0VYVEVOREVEKTogJChCUEZPQkopXG4tXG4tQlBGVE9PTCA/PSAkKERFRkFVTFRfQlBGVE9PTClcbi0kKERFRkFVTFRfQlBGVE9PTCk6ICQod2lsZGNhcmQgJChCUEZUT09MRElSKS8qLltjaF0gJChCUEZUT09MRElSKS9NYWtlZmlsZSkgICAgXFxcbi1cdFx0ICAgICQoSE9TVF9CUEZPQkopIHwgJChIT1NUX0JVSUxEX0RJUikvYnBmdG9vbFxuLVx0JChRKSQoTUFLRSkgJChzdWJtYWtlX2V4dHJhcykgIC1DICQoQlBGVE9PTERJUilcdFx0XHQgICAgICAgXFxcbi1cdFx0ICAgIEFSQ0g9IENST1NTX0NPTVBJTEU9IENDPSQoSE9TVENDKSBMRD0kKEhPU1RMRCkgXHQgICAgICAgXFxcbi1cdFx0ICAgIEVYVFJBX0NGTEFHUz0nLWcgLU8wJ1x0XHRcdFx0ICAgICAgIFxcXG4tXHRcdCAgICBPVVRQVVQ9JChIT1NUX0JVSUxEX0RJUikvYnBmdG9vbC9cdFx0XHQgICAgICAgXFxcbi1cdFx0ICAgIExJQkJQRl9PVVRQVVQ9JChIT1NUX0JVSUxEX0RJUikvbGliYnBmL1x0XHQgICAgICAgXFxcbi1cdFx0ICAgIExJQkJQRl9ERVNURElSPSQoSE9TVF9TQ1JBVENIX0RJUikvXHRcdFx0ICAgICAgIFxcXG4tXHRcdCAgICBwcmVmaXg9IERFU1RESVI9JChIT1NUX1NDUkFUQ0hfRElSKS8gaW5zdGFsbC1iaW5cbi1cbi0kKEJQRk9CSik6ICQod2lsZGNhcmQgJChCUEZESVIpLyouW2NoXSAkKEJQRkRJUikvTWFrZWZpbGUpXHRcdCAgICAgICBcXFxuLVx0ICAgfCAkKEJVSUxEX0RJUikvbGliYnBmXG4tXHQkKFEpJChNQUtFKSAkKHN1Ym1ha2VfZXh0cmFzKSAtQyAkKEJQRkRJUikgT1VUUFVUPSQoQlVJTERfRElSKS9saWJicGYvIFxcXG4tXHRcdCAgICBFWFRSQV9DRkxBR1M9Jy1nIC1PMCdcdFx0XHRcdCAgICAgICBcXFxuLVx0XHQgICAgREVTVERJUj0kKFNDUkFUQ0hfRElSKSBwcmVmaXg9IGFsbCBpbnN0YWxsX2hlYWRlcnNcbi1cbi1pZm5lcSAoJChCUEZPQkopLCQoSE9TVF9CUEZPQkopKVxuLSQoSE9TVF9CUEZPQkopOiAkKHdpbGRjYXJkICQoQlBGRElSKS8qLltjaF0gJChCUEZESVIpL01ha2VmaWxlKVx0XHQgICAgICAgXFxcbi1cdFx0fCAkKEhPU1RfQlVJTERfRElSKS9saWJicGZcbi1cdCQoUSkkKE1BS0UpICQoc3VibWFrZV9leHRyYXMpIC1DICQoQlBGRElSKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbi1cdFx0ICAgIEVYVFJBX0NGTEFHUz0nLWcgLU8wJyBBUkNIPSBDUk9TU19DT01QSUxFPVx0XHQgICAgICAgXFxcbi1cdFx0ICAgIE9VVFBVVD0kKEhPU1RfQlVJTERfRElSKS9saWJicGYvIENDPSQoSE9TVENDKSBMRD0kKEhPU1RMRCkgXFxcbi1cdFx0ICAgIERFU1RESVI9JChIT1NUX1NDUkFUQ0hfRElSKS8gcHJlZml4PSBhbGwgaW5zdGFsbF9oZWFkZXJzXG4tZW5kaWZcbi1cbi0kKElOQ0xVREVfRElSKS92bWxpbnV4Lmg6ICQoVk1MSU5VWF9CVEYpICQoQlBGVE9PTCkgfCAkKElOQ0xVREVfRElSKVxuLWlmZXEgKCQoVk1MSU5VWF9IKSwpXG4tXHQkKGNhbGwgbXNnLEdFTiwsJEApXG4tXHQkKFEpJChCUEZUT09MKSBidGYgZHVtcCBmaWxlICQoVk1MSU5VWF9CVEYpIGZvcm1hdCBjIFx1MDAzZSAkQFxuLWVsc2Vcbi1cdCQoY2FsbCBtc2csQ1AsLCRAKVxuLVx0JChRKWNwIFwiJChWTUxJTlVYX0gpXCIgJEBcbi1lbmRpZlxuLVxuLSQoUkVTT0xWRV9CVEZJRFMpOiAkKEhPU1RfQlBGT0JKKSB8ICQoSE9TVF9CVUlMRF9ESVIpL3Jlc29sdmVfYnRmaWRzXHRcXFxuLVx0XHQgICAgICAgJChUT09MU0RJUikvYnBmL3Jlc29sdmVfYnRmaWRzL21haW4uY1x0XFxcbi1cdFx0ICAgICAgICQoVE9PTFNESVIpL2xpYi9yYnRyZWUuY1x0XHRcdFxcXG4tXHRcdCAgICAgICAkKFRPT0xTRElSKS9saWIvemFsbG9jLmNcdFx0XHRcXFxuLVx0XHQgICAgICAgJChUT09MU0RJUikvbGliL3N0cmluZy5jXHRcdFx0XFxcbi1cdFx0ICAgICAgICQoVE9PTFNESVIpL2xpYi9jdHlwZS5jXHRcdFx0XFxcbi1cdFx0ICAgICAgICQoVE9PTFNESVIpL2xpYi9zdHJfZXJyb3Jfci5jXG4tXHQkKFEpJChNQUtFKSAkKHN1Ym1ha2VfZXh0cmFzKSAtQyAkKFRPT0xTRElSKS9icGYvcmVzb2x2ZV9idGZpZHNcdFxcXG4tXHRcdENDPSQoSE9TVENDKSBMRD0kKEhPU1RMRCkgQVI9JChIT1NUQVIpIFxcXG4tXHRcdExJQkJQRl9JTkNMVURFPSQoSE9TVF9JTkNMVURFX0RJUikgXFxcbi1cdFx0T1VUUFVUPSQoSE9TVF9CVUlMRF9ESVIpL3Jlc29sdmVfYnRmaWRzLyBCUEZPQko9JChIT1NUX0JQRk9CSilcbi1cbi0jIEdldCBDbGFuZydzIGRlZmF1bHQgaW5jbHVkZXMgb24gdGhpcyBzeXN0ZW0sIGFzIG9wcG9zZWQgdG8gdGhvc2Ugc2VlbiBieVxuLSMgJy0tdGFyZ2V0PWJwZicuIFRoaXMgZml4ZXMgXCJtaXNzaW5nXCIgZmlsZXMgb24gc29tZSBhcmNoaXRlY3R1cmVzL2Rpc3Ryb3MsXG4tIyBzdWNoIGFzIGFzbS9ieXRlb3JkZXIuaCwgYXNtL3NvY2tldC5oLCBhc20vc29ja2lvcy5oLCBzeXMvY2RlZnMuaCBldGMuXG4tI1xuLSMgVXNlICctaWRpcmFmdGVyJzogRG9uJ3QgaW50ZXJmZXJlIHdpdGggaW5jbHVkZSBtZWNoYW5pY3MgZXhjZXB0IHdoZXJlIHRoZVxuLSMgYnVpbGQgd291bGQgaGF2ZSBmYWlsZWQgYW55d2F5cy5cbi1kZWZpbmUgZ2V0X3N5c19pbmNsdWRlc1xuLSQoc2hlbGwgJCgxKSAtdiAtRSAtIFx1MDAzYy9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MSBcXFxuLVx0fCBzZWQgLW4gJy9cdTAwM2MuLi5cdTAwM2Ugc2VhcmNoIHN0YXJ0cyBoZXJlOi8sL0VuZCBvZiBzZWFyY2ggbGlzdC4veyBzfCBcXCgvLipcXCl8LWlkaXJhZnRlciBcXDF8cCB9JykgXFxcbi0kKHNoZWxsICQoMSkgLWRNIC1FIC0gXHUwMDNjL2Rldi9udWxsIHwgZ3JlcCAnX19yaXNjdl94bGVuICcgfCBhd2sgJ3twcmludGYoXCItRF9fcmlzY3ZfeGxlbj0lZCAtRF9fQklUU19QRVJfTE9ORz0lZFwiLCAkJDMsICQkMyl9Jylcbi1lbmRlZlxuLVxuLSMgRGV0ZXJtaW5lIHRhcmdldCBlbmRpYW5uZXNzLlxuLUlTX0xJVFRMRV9FTkRJQU4gPSAkKHNoZWxsICQoQ0MpIC1kTSAtRSAtIFx1MDAzYy9kZXYvbnVsbCB8IFxcXG4tXHRcdFx0Z3JlcCAnZGVmaW5lIF9fQllURV9PUkRFUl9fIF9fT1JERVJfTElUVExFX0VORElBTl9fJylcbi1NRU5ESUFOPSQoaWYgJChJU19MSVRUTEVfRU5ESUFOKSwtbWxpdHRsZS1lbmRpYW4sLW1iaWctZW5kaWFuKVxuLVxuLUNMQU5HX1NZU19JTkNMVURFUyA9ICQoY2FsbCBnZXRfc3lzX2luY2x1ZGVzLCQoQ0xBTkcpKVxuLUJQRl9DRkxBR1MgPSAtZyAtV2Vycm9yIC1EX19UQVJHRVRfQVJDSF8kKFNSQ0FSQ0gpICQoTUVORElBTikgXHRcdFxcXG4tXHQgICAgIC1Xbm8tbWljcm9zb2Z0LWFub24tdGFnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbi1cdCAgICAgLWZtcy1leHRlbnNpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuLVx0ICAgICAtSSQoSU5DTFVERV9ESVIpXG4tXG4tQ0xBTkdfQ0ZMQUdTID0gJChDTEFOR19TWVNfSU5DTFVERVMpIFxcXG4tXHQgICAgICAgLVduby1jb21wYXJlLWRpc3RpbmN0LXBvaW50ZXItdHlwZXNcbi1cbi0jIEJ1aWxkIEJQRiBvYmplY3QgdXNpbmcgQ2xhbmdcbi0jICQxIC0gaW5wdXQgLmMgZmlsZVxuLSMgJDIgLSBvdXRwdXQgLm8gZmlsZVxuLSMgJDMgLSBDRkxBR1Ncbi1kZWZpbmUgQ0xBTkdfQlBGX0JVSUxEX1JVTEVcbi1cdCQoY2FsbCBtc2csQ0xORy1CUEYsJChUUlVOTkVSX0JJTkFSWSksJDIpXG4tXHQkKFEpJChDTEFORykgJDMgLU8yIC0tdGFyZ2V0PWJwZiAtYyAkMSAtbWNwdT12MyAtbyAkMlxuLWVuZGVmXG4tIyBTaW1pbGFyIHRvIENMQU5HX0JQRl9CVUlMRF9SVUxFLCBidXQgd2l0aCBkaXNhYmxlZCBhbHUzMlxuLWRlZmluZSBDTEFOR19OT0FMVTMyX0JQRl9CVUlMRF9SVUxFXG4tXHQkKGNhbGwgbXNnLENMTkctQlBGLCQoVFJVTk5FUl9CSU5BUlkpLCQyKVxuLVx0JChRKSQoQ0xBTkcpICQzIC1PMiAtLXRhcmdldD1icGYgLWMgJDEgLW1jcHU9djIgLW8gJDJcbi1lbmRlZlxuLSMgQnVpbGQgQlBGIG9iamVjdCB1c2luZyBHQ0Ncbi1kZWZpbmUgR0NDX0JQRl9CVUlMRF9SVUxFXG4tXHQkKGNhbGwgbXNnLEdDQy1CUEYsJChUUlVOTkVSX0JJTkFSWSksJDIpXG4tXHQkKFEpJChCUEZfR0NDKSAkMyAtTzIgLWMgJDEgLW8gJDJcbi1lbmRlZlxuLVxuLUJQRl9QUk9HU19ESVIgOj0gcHJvZ3Ncbi1CUEZfQlVJTERfUlVMRSA6PSBDTEFOR19CUEZfQlVJTERfUlVMRVxuLUJQRl9TUkNTIDo9ICQobm90ZGlyICQod2lsZGNhcmQgJChCUEZfUFJPR1NfRElSKS8qLmMpKVxuLUJQRl9PQkpTIDo9ICQocGF0c3Vic3QgJS5jLCQoT1VUUFVUKS8lLmJwZi5vLCAkKEJQRl9TUkNTKSlcbi1CUEZfU0tFTFMgOj0gJChwYXRzdWJzdCAlLmMsJChPVVRQVVQpLyUuc2tlbC5oLCAkKEJQRl9TUkNTKSlcbi1URVNUX0dFTl9GSUxFUyArPSAkKEJQRl9PQkpTKVxuKyMgS2VlcCBhbGlhc2VzIHN1Y2ggYXMgXCJtYWtlIGhpZF9icGZcIiBmcm9tIG1hdGNoaW5nIGxpYi5taydzIGJpbmFyeSBydWxlLlxuKyQobm90ZGlyICQoVEVTVF9HRU5fUFJPR1MpKTogJTogJChPVVRQVVQpLyUgO1xuIFxuLSQoQlBGX1BST0dTX0RJUiktYnBmb2JqcyA6PSB5XG4tJChCUEZfT0JKUyk6ICQoT1VUUFVUKS8lLmJwZi5vOlx0XHRcdFx0XFxcbi1cdCAgICAgJChCUEZfUFJPR1NfRElSKS8lLmNcdFx0XHRcXFxuLVx0ICAgICAkKHdpbGRjYXJkICQoQlBGX1BST0dTX0RJUikvKi5oKVx0XHRcXFxuLVx0ICAgICAkKElOQ0xVREVfRElSKS92bWxpbnV4LmhcdFx0XHRcdFxcXG4tXHQgICAgICQod2lsZGNhcmQgJChCUEZESVIpL2hpZF9icGZfKi5oKVx0XHRcdFxcXG4tXHQgICAgICQod2lsZGNhcmQgJChCUEZESVIpLyouYnBmLmgpXHRcdFx0XFxcbi1cdCAgICAgfCAkKE9VVFBVVCkgJChCUEZPQkopXG4tXHQkKGNhbGwgJChCUEZfQlVJTERfUlVMRSksJFx1MDAzYywkQCwgJChCUEZfQ0ZMQUdTKSlcbi1cbi0kKEJQRl9TS0VMUyk6ICUuc2tlbC5oOiAlLmJwZi5vICQoQlBGVE9PTCkgfCAkKE9VVFBVVClcbi1cdCQoY2FsbCBtc2csR0VOLVNLRUwsJChCSU5BUlkpLCRAKVxuLVx0JChRKSQoQlBGVE9PTCkgZ2VuIG9iamVjdCAkKFx1MDAzYzoubz0ubGlua2VkMS5vKSAkXHUwMDNjXG4tXHQkKFEpJChCUEZUT09MKSBnZW4gc2tlbGV0b24gJChcdTAwM2M6Lm89LmxpbmtlZDEubykgbmFtZSAkKG5vdGRpciAkKFx1MDAzYzouYnBmLm89KSkgXHUwMDNlICRAXG4rIyBSZWxpbmsgdGVzdHMgd2hlbiB0aGUgaW4tdHJlZSBsaWJicGYgY2hhbmdlcy5cbiskKFRFU1RfR0VOX1BST0dTKTogJChCUEZPQkopXG4gXG4gJChPVVRQVVQpLyUubzogJS5jICQoQlBGX1NLRUxTKSBoaWRfY29tbW9uLmhcbiBcdCQoY2FsbCBtc2csQ0MsLCRAKVxuQEAgLTIzMyw1ICs4NSw0IEBAICQoT1VUUFVUKS8lOiAkKE9VVFBVVCkvJS5vXG4gXHQkKGNhbGwgbXNnLEJJTkFSWSwsJEApXG4gXHQkKFEpJChMSU5LLmMpICReICQoTERMSUJTKSAtbyAkQFxuIFxuLUVYVFJBX0NMRUFOIDo9ICQoU0NSQVRDSF9ESVIpICQoSE9TVF9TQ1JBVENIX0RJUikgZmVhdHVyZSBicGZ0b29sXHRcXFxuLVx0JChhZGRwcmVmaXggJChPVVRQVVQpLywqLm8gKi5za2VsLmggbm9fYWx1MzIpXG4rRVhUUkFfQ0xFQU4gKz0gJChPVVRQVVQpLyoub1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC9wcm9ncy9oaWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC9wcm9ncy9oaWQuY1xuaW5kZXggYjIxZmJiMTNjOTI2Zi4uZWM3MzRlMThkMjNhZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC9wcm9ncy9oaWQuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvaGlkL3Byb2dzL2hpZC5jXG5AQCAtMTExLDcgKzExMSw3IEBAIGludCBoaWRfdXNlcl9yYXdfcmVxdWVzdChzdHJ1Y3QgaGlkX2h3X3JlcXVlc3Rfc3lzY2FsbF9hcmdzICphcmdzKVxuIHtcbiBcdHN0cnVjdCBoaWRfYnBmX2N0eCAqY3R4O1xuIFx0Y29uc3Qgc2l6ZV90IHNpemUgPSBhcmdzLVx1MDAzZXNpemU7XG4tXHRpbnQgaSwgcmV0ID0gMDtcbitcdGludCByZXQgPSAwO1xuIFxuIFx0aWYgKHNpemUgXHUwMDNlIHNpemVvZihhcmdzLVx1MDAzZWRhdGEpKVxuIFx0XHRyZXR1cm4gLTc7IC8qIC1FMkJJRyAqL1xuQEAgLTEzNyw3ICsxMzcsNyBAQCBpbnQgaGlkX3VzZXJfb3V0cHV0X3JlcG9ydChzdHJ1Y3QgaGlkX2h3X3JlcXVlc3Rfc3lzY2FsbF9hcmdzICphcmdzKVxuIHtcbiBcdHN0cnVjdCBoaWRfYnBmX2N0eCAqY3R4O1xuIFx0Y29uc3Qgc2l6ZV90IHNpemUgPSBhcmdzLVx1MDAzZXNpemU7XG4tXHRpbnQgaSwgcmV0ID0gMDtcbitcdGludCByZXQgPSAwO1xuIFxuIFx0aWYgKHNpemUgXHUwMDNlIHNpemVvZihhcmdzLVx1MDAzZWRhdGEpKVxuIFx0XHRyZXR1cm4gLTc7IC8qIC1FMkJJRyAqL1xuQEAgLTE2MSw3ICsxNjEsNyBAQCBpbnQgaGlkX3VzZXJfaW5wdXRfcmVwb3J0KHN0cnVjdCBoaWRfaHdfcmVxdWVzdF9zeXNjYWxsX2FyZ3MgKmFyZ3MpXG4ge1xuIFx0c3RydWN0IGhpZF9icGZfY3R4ICpjdHg7XG4gXHRjb25zdCBzaXplX3Qgc2l6ZSA9IGFyZ3MtXHUwMDNlc2l6ZTtcbi1cdGludCBpLCByZXQgPSAwO1xuK1x0aW50IHJldCA9IDA7XG4gXG4gXHRpZiAoc2l6ZSBcdTAwM2Ugc2l6ZW9mKGFyZ3MtXHUwMDNlZGF0YSkpXG4gXHRcdHJldHVybiAtNzsgLyogLUUyQklHICovXG5AQCAtNDE3LDcgKzQxNyw2IEBAIFNFQyhcIj9zdHJ1Y3Rfb3BzLnMvaGlkX2h3X291dHB1dF9yZXBvcnRcIilcbiBpbnQgQlBGX1BST0coaGlkX3Rlc3RfaGlkcmF3X291dHB1dF9yZXBvcnQsIHN0cnVjdCBoaWRfYnBmX2N0eCAqaGN0eCwgX191NjQgc291cmNlKVxuIHtcbiBcdF9fdTggKmRhdGEgPSBoaWRfYnBmX2dldF9kYXRhKGhjdHgsIDAgLyogb2Zmc2V0ICovLCAzIC8qIHNpemUgKi8pO1xuLVx0aW50IHJldDtcbiBcbiBcdGlmICghZGF0YSlcbiBcdFx0cmV0dXJuIDA7IC8qIEVQRVJNIGNoZWNrICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbGliLmJwZi5tayBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2xpYi5icGYubWtcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi45MjM4Y2JmMWRlMDYyXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9saWIuYnBmLm1rXG5AQCAtMCwwICsxLDMyMSBAQFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjXG4rIyBCdWlsZCBCUEYgcHJvZ3JhbXMgYW5kIHNrZWxldG9ucyBmb3Igc2VsZnRlc3RzLlxuKyNcbisjIFVzZSBpdCBmcm9tIGEgdGVzdCBNYWtlZmlsZSBsaWtlIHRoaXM6XG4rI1xuKyMgICAgIEJQRl9TUkNTICAgICAgICAgOj0gZm9vLmJwZi5jIGJhci5icGYuY1xuKyMgICAgIFRFU1RfR0VOX1BST0dTICAgOj0gZm9vX3Rlc3RcbisjICAgICBPVkVSUklERV9UQVJHRVRTIDo9IDEgICAgICAgICAgICAgICMgc2V0IGJlZm9yZSBsaWIubWtcbisjICAgICBpbmNsdWRlIC4uL2xpYi5ta1xuKyMgICAgIGluY2x1ZGUgLi4vbGliLmJwZi5ta1xuKyNcbisjICAgICAkKE9VVFBVVCkvZm9vX3Rlc3Q6IGZvb190ZXN0LmMgJChCUEZfU0tFTFMpICQoQlBGT0JKKVxuKyMgICAgICAgICAkKGNhbGwgYnBmX2xpbmssJEAsJFx1MDAzYylcbisjXG4rIyBEZXBlbmQgb24gJChCUEZPQkopIHRvIHJlbGluayB0aGUgdGVzdCB3aGVuIGxpYmJwZi5hIGNoYW5nZXMuXG4rI1xuKyMgT3B0aW9ucyB0byBzZXQgYmVmb3JlIGluY2x1ZGluZyBsaWIuYnBmLm1rOlxuKyMgICBCUEZfUFJPR19FWFQgICAgIC0gc291cmNlIGVuZGluZzsgZGVmYXVsdCAuYnBmLmMuIFVzZSAuYyBmb3IgcHJvZ3MvZm9vLmMuXG4rIyAgIEJQRl9FWFRSQV9IRFJTICAgLSBtb3JlIGhlYWRlcnMgbmVlZGVkIGJ5IHRoZSBCUEYgb2JqZWN0cy5cbisjICAgQlBGX0VYVFJBX0NGTEFHUyAtIG1vcmUgZmxhZ3MgZm9yIGNvbXBpbGluZyBCUEYgcHJvZ3JhbXMuXG4rIyAgIEJQRl9TS0VMX0VYVCAgICAgLSBza2VsZXRvbiBoZWFkZXIgZW5kaW5nOyBkZWZhdWx0IC5za2VsLmguIE11c3QgZW5kIGluXG4rIyAgICAgICAgICAgICAgICAgICAgICBza2VsLmguXG4rIyAgIEJQRl9HRU5fU1VCU0tFTCAgLSBhbHNvIGNyZWF0ZSBhIHN1YnNrZWxldG9uIGhlYWRlciB3aGVuIHNldC5cbisjICAgQlBGX09CSl9ESVIgICAgICAtIGZvbGRlciBmb3IgQlBGIG9iamVjdHM7IGRlZmF1bHQgJChPVVRQVVQpLlxuKyMgICBCUEZfU0tFTF9ESVIgICAgIC0gZm9sZGVyIGZvciBza2VsZXRvbiBoZWFkZXJzOyBkZWZhdWx0ICQoT1VUUFVUKS5cbisjXG4rIyBTZXQgb3V0cHV0IGRpcmVjdG9yaWVzIHRoYXQgdXNlICQoT1VUUFVUKSBhZnRlciBpbmNsdWRpbmcgbGliLm1rLlxuKyNcbisjIEJQRl9DRkxBR1MgbWF5IGJlIHJlcGxhY2VkIGFmdGVyIHRoaXMgaW5jbHVkZS4gR2VuZXJhdGVkIG5hbWVzIHVzZSB0aGUgc291cmNlXG4rIyBzdGVtIHdpdGhvdXQgaXRzIGRpcmVjdG9yeS5cbisjXG4rIyBJbmNsdWRlIGxpYi5tayBmaXJzdC4gVGhpcyBmaWxlIGRlZmluZXMgdGhlIEJQRiBidWlsZCB2YXJpYWJsZXMgYW5kIGJwZl9saW5rLFxuKyMgZXh0ZW5kcyBhbGwsIENGTEFHUyBhbmQgRVhUUkFfQ0xFQU4sIGFuZCBlbmFibGVzIC5ERUxFVEVfT05fRVJST1IuXG4rXG4raW5jbHVkZSAkKHRvcF9zcmNkaXIpL3Rvb2xzL3NjcmlwdHMvTWFrZWZpbGUuYXJjaFx0IyBBUkNIIC8gU1JDQVJDSCAvIEhPU1RBUkNIXG4rXG4rIyBSZW1vdmUgcGFydGlhbCBmaWxlcyB3cml0dGVuIGRpcmVjdGx5IHRvICRALlxuKy5ERUxFVEVfT05fRVJST1I6XG4rXG4rIyBNYXRjaCB0aGUgbGliYnBmIGFuZCBicGZ0b29sIGhvc3QgY29tcGlsZXIgdG8gTExWTT0uXG4raWZuZXEgKCQoTExWTSksKVxuK0hPU1RDQyA/PSAkKExMVk1fUFJFRklYKWNsYW5nJChMTFZNX1NVRkZJWClcbitIT1NUTEQgPz0gJChMTFZNX1BSRUZJWClsZC5sbGQkKExMVk1fU1VGRklYKVxuK2Vsc2VcbitIT1NUQ0MgPz0gZ2NjXG4rSE9TVExEID89IGxkXG4rZW5kaWZcbitDTEFORyAgPz0gY2xhbmdcbitcbitpZm5lcSAoJChWKSwxKVxuK2xpYl9icGZfc3VibWFrZV9leHRyYXMgOj0gZmVhdHVyZV9kaXNwbGF5PTBcbitlbmRpZlxuK1xuKyMgTWF0Y2ggc2VsZnRlc3RzL2JwZiBkZWJ1ZyBhbmQgcmVsZWFzZSBvcHRpbWl6YXRpb24uXG4rT1BUX0ZMQUdTID89ICQoaWYgJChSRUxFQVNFKSwtTzIsLU8wKVxuK1xuKyMgLS0tLSBmaWxlcyBhbmQgdG9vbHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4rIyBVc2Ugb25lIGZ1bGwgcGF0aC4gRGlmZmVyZW50IGZvcm1zIG9mIHRoZSBzYW1lIC1JIHBhdGggY2FuIGNoYW5nZSBCVEYgb3JkZXIuXG4rbGliX2JwZl90b29sc19kaXIgICAgICAgICA6PSAkKGFic3BhdGggJCh0b3Bfc3JjZGlyKS90b29scylcbitsaWJfYnBmX2RpciAgICAgICAgICAgICAgIDo9ICQobGliX2JwZl90b29sc19kaXIpL2xpYi9icGZcbitsaWJfYnBmX3Rvb2xzX2luY2x1ZGVfZGlyIDo9ICQobGliX2JwZl90b29sc19kaXIpL2luY2x1ZGVcbitsaWJfYnBmX2JwZnRvb2xfZGlyICAgICAgIDo9ICQobGliX2JwZl90b29sc19kaXIpL2JwZi9icGZ0b29sXG4rbGliX2JwZl9hcGlfZGlyICAgICAgICAgICA6PSAkKGxpYl9icGZfdG9vbHNfaW5jbHVkZV9kaXIpL3VhcGlcbitsaWJfYnBmX3NvdXJjZXMgICAgICAgICAgIDo9ICQod2lsZGNhcmQgJChsaWJfYnBmX2RpcikvKi5bY2hdIFxcXG4rXHRcdFx0XHRcdCAgICAgICAkKGxpYl9icGZfZGlyKS9NYWtlZmlsZSlcbitsaWJfYnBmX2hlYWRlcl9zb3VyY2VzICAgIDo9ICQoZmlsdGVyICUuaCwkKGxpYl9icGZfc291cmNlcykpIFxcXG4rXHRcdFx0XHQgICAgICQobGliX2JwZl9hcGlfZGlyKS9saW51eC9icGYuaFxuKyMgS2VlcCB0aGVzZSBuYW1lcyBmb3IgY2FsbGVycyB3aGljaCBhZGQgdGhlaXIgb3duIEJQRiBmbGFncyBvciBkZXBlbmRlbmNpZXMuXG4rQlBGRElSICAgICA6PSAkKGxpYl9icGZfZGlyKVxuK0FQSURJUiAgICAgOj0gJChsaWJfYnBmX2FwaV9kaXIpXG4rXG4rIyBLZWVwIHByaXZhdGUgYnVpbGQgZmlsZXMgdW5kZXIgJChPVVRQVVQpIGZvciBib3RoIGluLXRyZWUgYW5kIE89IGJ1aWxkcy5cbitsaWJfYnBmX3NjcmF0Y2hfZGlyIDo9ICQoT1VUUFVUKS90b29sc1xuK2xpYl9icGZfYnVpbGRfZGlyICAgOj0gJChsaWJfYnBmX3NjcmF0Y2hfZGlyKS9idWlsZFxuK2xpYl9icGZfaW5jbHVkZV9kaXIgOj0gJChsaWJfYnBmX3NjcmF0Y2hfZGlyKS9pbmNsdWRlXG4rIyBJTkNMVURFX0RJUiBpcyBhbHNvIHVzZWQgYnkgY2FsbGVycyB0aGF0IHJlcGxhY2UgQlBGX0NGTEFHUy5cbitJTkNMVURFX0RJUiA6PSAkKGxpYl9icGZfaW5jbHVkZV9kaXIpXG4rQlBGT0JKICAgICAgOj0gJChsaWJfYnBmX2J1aWxkX2RpcikvbGliYnBmL2xpYmJwZi5hXG4rXG4rIyBDcm9zcyBidWlsZHMgdXNlIGEgc2VwYXJhdGUgbmF0aXZlIGxpYmJwZiBmb3IgYnBmdG9vbC5cbitpZm5lcSAoJChDUk9TU19DT01QSUxFKSQoZmlsdGVyLW91dCAkKEhPU1RBUkNIKSwkKFNSQ0FSQ0gpKSwpXG4rbGliX2JwZl9ob3N0X2J1aWxkX2RpciAgIDo9ICQobGliX2JwZl9idWlsZF9kaXIpL2hvc3RcbitsaWJfYnBmX2hvc3Rfc2NyYXRjaF9kaXIgOj0gJChPVVRQVVQpL2hvc3QtdG9vbHNcbitlbHNlXG4rbGliX2JwZl9ob3N0X2J1aWxkX2RpciAgIDo9ICQobGliX2JwZl9idWlsZF9kaXIpXG4rbGliX2JwZl9ob3N0X3NjcmF0Y2hfZGlyIDo9ICQobGliX2JwZl9zY3JhdGNoX2RpcilcbitlbmRpZlxuK2xpYl9icGZfaG9zdF9vYmogOj0gJChsaWJfYnBmX2hvc3RfYnVpbGRfZGlyKS9saWJicGYvbGliYnBmLmFcbitERUZBVUxUX0JQRlRPT0wgIDo9ICQobGliX2JwZl9ob3N0X3NjcmF0Y2hfZGlyKS9zYmluL2JwZnRvb2xcbitCUEZUT09MICAgICAgICAgID89ICQoREVGQVVMVF9CUEZUT09MKVxuK1xuKyMgUmV1c2UgdGFyZ2V0IFVTRVJDRkxBR1Mgb25seSB3aGVuIGJwZnRvb2wgc2hhcmVzIHRoZSB0YXJnZXQgbGliYnBmLlxuK2lmZXEgKCQoQlBGT0JKKSwkKGxpYl9icGZfaG9zdF9vYmopKVxuK2xpYl9icGZfaG9zdF91c2VyX2NmbGFncyA6PSAkKFVTRVJDRkxBR1MpXG4rZW5kaWZcbitcbisjIC0tLS0gZmluZCB2bWxpbnV4IEJURiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuK1ZNTElOVVhfQlRGX1BBVEhTID89ICQoaWYgJChPKSwkKE8pL3ZtbGludXgpXHRcdFx0XHRcXFxuK1x0XHQgICAgICQoaWYgJChLQlVJTERfT1VUUFVUKSwkKEtCVUlMRF9PVVRQVVQpL3ZtbGludXgpXHRcXFxuK1x0XHQgICAgICQodG9wX3NyY2Rpcikvdm1saW51eFx0XHRcdFx0XFxcbitcdFx0ICAgICAvc3lzL2tlcm5lbC9idGYvdm1saW51eFx0XHRcdFx0XFxcbitcdFx0ICAgICAvYm9vdC92bWxpbnV4LSQoc2hlbGwgdW5hbWUgLXIpXG4rVk1MSU5VWF9CVEYgPz0gJChhYnNwYXRoICQoZmlyc3R3b3JkICQod2lsZGNhcmQgJChWTUxJTlVYX0JURl9QQVRIUykpKSlcbisjIERlbGF5IG1pc3Npbmctdm1saW51eCBlcnJvcnMgc28gXCJtYWtlIGNsZWFuXCIgc3RpbGwgd29ya3MuXG4rbGliX2JwZl92bWxpbnV4X2RlcHMgOj0gJChpZiAkKFZNTElOVVhfSCksJChWTUxJTlVYX0gpLCQoVk1MSU5VWF9CVEYpICQoQlBGVE9PTCkpXG4rXG4rIyAtLS0tIGNvbXBpbGVyIGZsYWdzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbisjIEZpbmQgdGhlIG5vcm1hbCBzeXN0ZW0gaGVhZGVycyB0aGF0IENsYW5nIG9taXRzIHdpdGggLS10YXJnZXQ9YnBmLiBQdXQgdGhlbVxuKyMgbGFzdCB3aXRoIC1pZGlyYWZ0ZXIgc28gdGhleSBjYW5ub3QgcmVwbGFjZSBwcm9qZWN0IGhlYWRlcnMuXG4rZGVmaW5lIGxpYl9icGZfZ2V0X3N5c19pbmNsdWRlc1xuKyQoc2hlbGwgJCgxKSAkKDIpIC12IC1FIC0gXHUwMDNjL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxIFxcXG4rXHR8IHNlZCAtbiAnL1x1MDAzYy4uLlx1MDAzZSBzZWFyY2ggc3RhcnRzIGhlcmU6LywvRW5kIG9mIHNlYXJjaCBsaXN0Li97IHN8IFxcKC8uKlxcKXwtaWRpcmFmdGVyIFxcMXxwIH0nKSBcXFxuKyQoc2hlbGwgJCgxKSAkKDIpIC1kTSAtRSAtIFx1MDAzYy9kZXYvbnVsbCB8IGdyZXAgJ19fcmlzY3ZfeGxlbiAnIHwgYXdrICd7cHJpbnRmKFwiLURfX3Jpc2N2X3hsZW49JWQgLURfX0JJVFNfUEVSX0xPTkc9JWRcIiwgJCQzLCAkJDMpfScpIFxcXG4rJChzaGVsbCAkKDEpICQoMikgLWRNIC1FIC0gXHUwMDNjL2Rldi9udWxsIHwgZ3JlcCAnX19sb29uZ2FyY2hfZ3JsZW4gJyB8IGF3ayAne3ByaW50ZihcIi1EX19CSVRTX1BFUl9MT05HPSVkXCIsICQkMyl9JykgXFxcbiskKHNoZWxsICQoMSkgJCgyKSAtZE0gLUUgLSBcdTAwM2MvZGV2L251bGwgfCBncmVwIC1FICdNSVBTKEVMfEVCKXxfTUlQU19TWihQVFJ8TE9ORykgfF9NSVBTX1NJTSB8X0FCSShPMzJ8TjMyfDY0KSAnIHwgYXdrICd7cHJpbnRmKFwiLUQlcz0lcyBcIiwgJCQyLCAkJDMpfScpXG4rZW5kZWZcbitpZm5lcSAoJChDUk9TU19DT01QSUxFKSwpXG4rbGliX2JwZl9jbGFuZ190YXJnZXRfYXJjaCA9IC0tdGFyZ2V0PSQobm90ZGlyICQoQ1JPU1NfQ09NUElMRTolLT0lKSlcbitlbmRpZlxuKyMgRmluZCB0aGUgc3lzdGVtIGluY2x1ZGUgZmxhZ3Mgb25jZSBhbmQgcmV1c2UgdGhlbS5cbitDTEFOR19TWVNfSU5DTFVERVMgOj0gJChjYWxsIGxpYl9icGZfZ2V0X3N5c19pbmNsdWRlcywkKENMQU5HKSwkKGxpYl9icGZfY2xhbmdfdGFyZ2V0X2FyY2gpKVxuK1xuK2xpYl9icGZfaXNfbGl0dGxlX2VuZGlhbiA6PSAkKHNoZWxsICQoQ0MpIC1kTSAtRSAtIFx1MDAzYy9kZXYvbnVsbCB8IFxcXG4rXHRcdFx0XHQgICAgZ3JlcCAnZGVmaW5lIF9fQllURV9PUkRFUl9fIF9fT1JERVJfTElUVExFX0VORElBTl9fJylcbitNRU5ESUFOIDo9ICQoaWYgJChsaWJfYnBmX2lzX2xpdHRsZV9lbmRpYW4pLC1tbGl0dGxlLWVuZGlhbiwtbWJpZy1lbmRpYW4pXG4rXG4rIyBVc2UgQlBGIENQVSB2MyB3aGVuIENsYW5nIHN1cHBvcnRzIGl0LiBPdGhlcndpc2UgdXNlIHYyLlxuK2xpYl9icGZfY2xhbmdfY3B1IDo9ICQoc2hlbGwgJChDTEFORykgLS10YXJnZXQ9YnBmIC1tY3B1PWhlbHAgMlx1MDAzZVx1MDAyNjEgfCBcXFxuK1x0XHRcdCAgICAgZ3JlcCAtcSAndjMnIFx1MDAyNlx1MDAyNiBlY2hvIHYzIHx8IGVjaG8gdjIpXG4rXG4rIyBBY2NlcHQgYW5vbnltb3VzIHN0cnVjdCBhbmQgdW5pb24gbWVtYmVycyBpbiB2bWxpbnV4LmguXG4rQlBGX0NGTEFHUyA9IC1nIC1XYWxsIC1XZXJyb3IgLURfX1RBUkdFVF9BUkNIXyQoU1JDQVJDSCkgJChNRU5ESUFOKVx0XFxcbitcdCAgICAgLUkkKElOQ0xVREVfRElSKSAtSSQoQVBJRElSKVx0XHRcdFx0XFxcbitcdCAgICAgLXN0ZD1nbnUxMVx0XHRcdFx0XHRcdFx0XFxcbitcdCAgICAgLWZuby1zdHJpY3QtYWxpYXNpbmdcdFx0XHRcdFx0XFxcbitcdCAgICAgLWZtcy1leHRlbnNpb25zIC1Xbm8tbWljcm9zb2Z0LWFub24tdGFnXHRcdFx0XFxcbitcdCAgICAgLVduby1jb21wYXJlLWRpc3RpbmN0LXBvaW50ZXItdHlwZXNcdFx0XHRcXFxuK1x0ICAgICAkKENMQU5HX1NZU19JTkNMVURFUykgJChCUEZfRVhUUkFfQ0ZMQUdTKVxuK1xuKyMgJDEgPSBzb3VyY2UsICQyID0gb2JqZWN0LiAtTU1EIC1NUCB0cmFja3Mgbm9uLXN5c3RlbSBoZWFkZXJzLlxuK2RlZmluZSBsaWJfYnBmX2J1aWxkX3J1bGVcbitcdCQoY2FsbCBtc2csQ0xORy1CUEYsLCQyKVxuK1x0JChRKSQoQ0xBTkcpICQoQlBGX0NGTEFHUykgLU8yIC0tdGFyZ2V0PWJwZiAtbWNwdT0kKGxpYl9icGZfY2xhbmdfY3B1KSBcXFxuK1x0XHQtTU1EIC1NUCAtYyAkMSAtbyAkMlxuK2VuZGVmXG4rXG4rIyAtLS0tIG91dHB1dCBmb2xkZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbitCUEZfT0JKX0RJUiAgPz0gJChPVVRQVVQpXG4rQlBGX1NLRUxfRElSID89ICQoT1VUUFVUKVxuKyMgUmVqZWN0IGVtcHR5IGRpcmVjdG9yaWVzIGJlZm9yZSBjbGVhbnVwIGdsb2JzIGNhbiByZWFjaCB0aGUgZmlsZXN5c3RlbSByb290LlxuK2lmZXEgKCQoc3RyaXAgJChCUEZfT0JKX0RJUikpLClcbiskKGVycm9yIGxpYi5icGYubWs6IEJQRl9PQkpfRElSIGlzIGVtcHR5OyBzZXQgaXQgYWZ0ZXIgXCJpbmNsdWRlIC4uL2xpYi5ta1wiKVxuK2VuZGlmXG4raWZlcSAoJChzdHJpcCAkKEJQRl9TS0VMX0RJUikpLClcbiskKGVycm9yIGxpYi5icGYubWs6IEJQRl9TS0VMX0RJUiBpcyBlbXB0eTsgc2V0IGl0IGFmdGVyIFwiaW5jbHVkZSAuLi9saWIubWtcIilcbitlbmRpZlxuK1xuKyMgLS0tLSBidWlsZCBmb2xkZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4rbGliX2JwZl9tYWtlX2RpcnMgOj0gJChzb3J0ICQobGliX2JwZl9idWlsZF9kaXIpL2xpYmJwZlx0XHRcdFxcXG4rXHRcdFx0ICAgICQobGliX2JwZl9ob3N0X2J1aWxkX2RpcikvbGliYnBmXHRcdFxcXG4rXHRcdFx0ICAgICQobGliX2JwZl9ob3N0X2J1aWxkX2RpcikvYnBmdG9vbFx0XHRcXFxuK1x0XHRcdCAgICAkKGxpYl9icGZfaW5jbHVkZV9kaXIpXHRcdFx0XFxcbitcdFx0XHQgICAgJChmaWx0ZXItb3V0ICQoT1VUUFVUKSwkKEJQRl9PQkpfRElSKSAkKEJQRl9TS0VMX0RJUikpKVxuKyQobGliX2JwZl9tYWtlX2RpcnMpOlxuK1x0JChjYWxsIG1zZyxNS0RJUiwsJEApXG4rXHQkKFEpbWtkaXIgLXAgJEBcbitcbisjIC0tLS0gdGFyZ2V0IGxpYmJwZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKyMgUGFzcyB1bmV4cG9ydGVkIHRvb2xjaGFpbiBzZXR0aW5ncyBhbmQgYnVpbGQgUElDIGZvciBQSUUgdGVzdCBiaW5hcmllcy5cbisjIGxpYmJwZiBjb25zdW1lcyBVU0VSQ0ZMQUdTIHRocm91Z2ggRVhUUkFfQ0ZMQUdTLlxuKyQoQlBGT0JKKTogJChsaWJfYnBmX3NvdXJjZXMpICQobGliX2JwZl9hcGlfZGlyKS9saW51eC9icGYuaCBcXFxuK1x0ICAgfCAkKGxpYl9icGZfYnVpbGRfZGlyKS9saWJicGZcbitcdCQoUSkkKE1BS0UpICQobGliX2JwZl9zdWJtYWtlX2V4dHJhcykgLUMgJChsaWJfYnBmX2RpcikgXFxcbitcdFx0ICAgIE9VVFBVVD0kKGxpYl9icGZfYnVpbGRfZGlyKS9saWJicGYvIFxcXG4rXHRcdCAgICBBUkNIPSQoQVJDSCkgQ1JPU1NfQ09NUElMRT0kKENST1NTX0NPTVBJTEUpIENDPVwiJChDQylcIiAgICAgXFxcbitcdFx0ICAgIEVYVFJBX0NGTEFHUz0nLWcgJChPUFRfRkxBR1MpIC1mUElDICQoRVhUUkFfQ0ZMQUdTKSAkKFVTRVJDRkxBR1MpJyBcXFxuK1x0XHQgICAgREVTVERJUj0kKGxpYl9icGZfc2NyYXRjaF9kaXIpIHByZWZpeD0gYWxsIGluc3RhbGxfaGVhZGVyc1xuK1xuKyMgLS0tLSBob3N0IGxpYmJwZiwgb25seSB3aGVuIHRoZSB0YXJnZXQgZGlmZmVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4raWZuZXEgKCQoQlBGT0JKKSwkKGxpYl9icGZfaG9zdF9vYmopKVxuKyQobGliX2JwZl9ob3N0X29iaik6ICQobGliX2JwZl9zb3VyY2VzKSAkKGxpYl9icGZfYXBpX2RpcikvbGludXgvYnBmLmggXFxcbitcdFx0fCAkKGxpYl9icGZfaG9zdF9idWlsZF9kaXIpL2xpYmJwZlxuK1x0JChRKSQoTUFLRSkgJChsaWJfYnBmX3N1Ym1ha2VfZXh0cmFzKSAtQyAkKGxpYl9icGZfZGlyKSBcXFxuK1x0XHQgICAgQVJDSD0gQ1JPU1NfQ09NUElMRT0gXFxcbitcdFx0ICAgIE9VVFBVVD0kKGxpYl9icGZfaG9zdF9idWlsZF9kaXIpL2xpYmJwZi8gXFxcbitcdFx0ICAgIENDPVwiJChIT1NUQ0MpXCIgTEQ9XCIkKEhPU1RMRClcIiBcXFxuK1x0XHQgICAgRVhUUkFfQ0ZMQUdTPSctZyAkKE9QVF9GTEFHUykgJChFWFRSQV9DRkxBR1MpJyBcXFxuK1x0XHQgICAgREVTVERJUj0kKGxpYl9icGZfaG9zdF9zY3JhdGNoX2RpcikgcHJlZml4PSBhbGwgaW5zdGFsbF9oZWFkZXJzXG4rZW5kaWZcbitcbisjIC0tLS0gaG9zdCBicGZ0b29sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKyQoREVGQVVMVF9CUEZUT09MKTogJCh3aWxkY2FyZCAkKGxpYl9icGZfYnBmdG9vbF9kaXIpLyouW2NoXSBcXFxuK1x0XHRcdFx0ICQobGliX2JwZl9icGZ0b29sX2RpcikvTWFrZWZpbGUpIFxcXG4rXHRcdCAgICAkKGxpYl9icGZfaG9zdF9vYmopIHwgJChsaWJfYnBmX2hvc3RfYnVpbGRfZGlyKS9icGZ0b29sXG4rXHQkKFEpJChNQUtFKSAkKGxpYl9icGZfc3VibWFrZV9leHRyYXMpIC1DICQobGliX2JwZl9icGZ0b29sX2RpcikgXFxcbitcdFx0ICAgIEFSQ0g9IENST1NTX0NPTVBJTEU9IENDPVwiJChIT1NUQ0MpXCIgTEQ9XCIkKEhPU1RMRClcIiBcXFxuK1x0XHQgICAgRVhUUkFfQ0ZMQUdTPSctZyAkKE9QVF9GTEFHUykgJChFWFRSQV9DRkxBR1MpICQobGliX2JwZl9ob3N0X3VzZXJfY2ZsYWdzKScgXFxcbitcdFx0ICAgIEVYVFJBX0xERkxBR1M9JyQoRVhUUkFfTERGTEFHUyknXHRcdCAgXFxcbitcdFx0ICAgIE9VVFBVVD0kKGxpYl9icGZfaG9zdF9idWlsZF9kaXIpL2JwZnRvb2wvXHQgIFxcXG4rXHRcdCAgICBMSUJCUEZfT1VUUFVUPSQobGliX2JwZl9ob3N0X2J1aWxkX2RpcikvbGliYnBmLyBcXFxuK1x0XHQgICAgTElCQlBGX0RFU1RESVI9JChsaWJfYnBmX2hvc3Rfc2NyYXRjaF9kaXIpL1x0ICBcXFxuK1x0XHQgICAgcHJlZml4PSBERVNURElSPSQobGliX2JwZl9ob3N0X3NjcmF0Y2hfZGlyKS8gaW5zdGFsbC1iaW5cbitcbisjIC0tLS0gYnVpbGQgdm1saW51eC5oIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuK2xpYl9icGZfdm1saW51eF9oICAgICA6PSAkKElOQ0xVREVfRElSKS92bWxpbnV4LmhcbitsaWJfYnBmX3ZtbGludXhfc3RhbXAgOj0gJChJTkNMVURFX0RJUikvdm1saW51eC5oLnN0YW1wXG4rXG4rIyBQcmVzZXJ2ZSB2bWxpbnV4LmgncyB0aW1lc3RhbXAgd2hlbiBpdHMgY29udGVudHMgZG8gbm90IGNoYW5nZS5cbitpZmVxICgkKHdpbGRjYXJkICQobGliX2JwZl92bWxpbnV4X2gpKSwpXG4rIyBSZWdlbmVyYXRlIGlmIHRoZSBoZWFkZXIgaXMgbWlzc2luZyBidXQgaXRzIHN0YW1wIHJlbWFpbnMuXG4rLlBIT05ZOiAkKGxpYl9icGZfdm1saW51eF9zdGFtcClcbitlbmRpZlxuK1xuKyMgVXNlIGEgbm9ybWFsIGVkZ2Ugc28gZGVwZW5kZW50cyBzZWUgYSBjaGFuZ2VkIGhlYWRlciBpbiB0aGUgc2FtZSBtYWtlIHJ1bi5cbiskKGxpYl9icGZfdm1saW51eF9oKTogJChsaWJfYnBmX3ZtbGludXhfc3RhbXApIDtcbitcbiskKGxpYl9icGZfdm1saW51eF9zdGFtcCk6ICQobGliX2JwZl92bWxpbnV4X2RlcHMpIHwgJChJTkNMVURFX0RJUilcbitpZmVxICgkKFZNTElOVVhfSCksKVxuK1x0JChjYWxsIG1zZyxHRU4sLCQobGliX2JwZl92bWxpbnV4X2gpKVxuK1x0JChRKXRlc3QgLW4gXCIkKFZNTElOVVhfQlRGKVwiIHx8IHsgXFxcbitcdFx0ZWNobyBcImxpYi5icGYubWs6IG5vIHZtbGludXggYXQgYW55IG9mIFxcXCIkKFZNTElOVVhfQlRGX1BBVEhTKVxcXCJcIiBcdTAwM2VcdTAwMjYyOyBcXFxuK1x0XHRleGl0IDE7IH1cbitcdCQoUSkkKEJQRlRPT0wpIGJ0ZiBkdW1wIGZpbGUgJChWTUxJTlVYX0JURikgZm9ybWF0IGMgXHUwMDNlICRALnRtcFxuK2Vsc2VcbitcdCQoY2FsbCBtc2csQ1AsLCQobGliX2JwZl92bWxpbnV4X2gpKVxuK1x0JChRKWNwIFwiJChWTUxJTlVYX0gpXCIgJEAudG1wXG4rZW5kaWZcbitcdCQoUSljbXAgLXMgJEAudG1wICQobGliX2JwZl92bWxpbnV4X2gpIHx8IG12ICRALnRtcCAkKGxpYl9icGZfdm1saW51eF9oKVxuK1x0JChRKXJtIC1mICRALnRtcFxuK1x0JChRKXRvdWNoICRAXG4rXG4rIyAtLS0tIEJQRiBvYmplY3RzIGFuZCBza2VsZXRvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbitCUEZfUFJPR19FWFQgPz0gLmJwZi5jXG4rIyBFYWNoIHNvdXJjZSBtdXN0IGVuZCB3aXRoIEJQRl9QUk9HX0VYVCBzbyBNYWtlIGNhbiByZW1vdmUgdGhhdCBlbmRpbmcuXG4rbGliX2JwZl9iYWRfc3JjcyA6PSAkKGZpbHRlci1vdXQgJSQoQlBGX1BST0dfRVhUKSwkKEJQRl9TUkNTKSlcbitpZm5lcSAoJChsaWJfYnBmX2JhZF9zcmNzKSwpXG4rJChlcnJvciBsaWIuYnBmLm1rOiBCUEZfU1JDUyBlbnRyaWVzIG11c3QgZW5kIGluICQoQlBGX1BST0dfRVhUKTogJChsaWJfYnBmX2JhZF9zcmNzKSlcbitlbmRpZlxuK2xpYl9icGZfc3RlbXMgOj0gJChwYXRzdWJzdCAlJChCUEZfUFJPR19FWFQpLCUsJChub3RkaXIgJChCUEZfU1JDUykpKVxuKyMgVGhlIHN0ZW0gYmVjb21lcyB0aGUgc2tlbGV0b24ncyBDIG5hbWU7IHJlamVjdCBkb3RzIGFuZCBoeXBoZW5zLlxuK2xpYl9icGZfYmFkX3N0ZW1zIDo9ICQoc3RyaXAgJChmb3JlYWNoIHMsJChsaWJfYnBmX3N0ZW1zKSxcdFx0XHRcXFxuK1x0XHRcdCQoaWYgJChmaW5kc3RyaW5nIC4sJChzKSkkKGZpbmRzdHJpbmcgLSwkKHMpKSwkKHMpKSkpXG4raWZuZXEgKCQobGliX2JwZl9iYWRfc3RlbXMpLClcbiskKGVycm9yIGxpYi5icGYubWs6IEJQRl9TUkNTIGJhc2VuYW1lcyBtdXN0IG5vdCBjb250YWluICcuJyBvciAnLSc6ICQobGliX2JwZl9iYWRfc3RlbXMpKVxuK2VuZGlmXG4rIyBPdXRwdXQgbmFtZXMgb21pdCBkaXJlY3Rvcmllcywgc28gcmVqZWN0IGR1cGxpY2F0ZSBzdGVtcy5cbitpZm5lcSAoJCh3b3JkcyAkKGxpYl9icGZfc3RlbXMpKSwkKHdvcmRzICQoc29ydCAkKGxpYl9icGZfc3RlbXMpKSkpXG4rJChlcnJvciBsaWIuYnBmLm1rOiBCUEZfU1JDUyBoYXMgY29sbGlkaW5nIGJhc2VuYW1lczogJChCUEZfU1JDUykpXG4rZW5kaWZcbitCUEZfU0tFTF9FWFQgICAgPz0gLnNrZWwuaFxuK2xpYl9icGZfc3Vic2tlbF9leHQgOj0gJChwYXRzdWJzdCAlc2tlbC5oLCVzdWJza2VsLmgsJChCUEZfU0tFTF9FWFQpKVxuKyMgS2VlcCBza2VsZXRvbiBzdWZmaXhlcyBkaXN0aW5jdCBhbmQgY2xlYW51cCBnbG9icyBuYXJyb3cuXG4raWZlcSAoJChsaWJfYnBmX3N1YnNrZWxfZXh0KSwkKEJQRl9TS0VMX0VYVCkpXG4rJChlcnJvciBsaWIuYnBmLm1rOiBCUEZfU0tFTF9FWFQgbXVzdCBlbmQgaW4gc2tlbC5oOiAkKEJQRl9TS0VMX0VYVCkpXG4rZW5kaWZcbitCUEZfT0JKUyAgOj0gJChhZGRwcmVmaXggJChCUEZfT0JKX0RJUikvLCQoYWRkc3VmZml4IC5icGYubywkKGxpYl9icGZfc3RlbXMpKSlcbitCUEZfU0tFTFMgOj0gJChhZGRwcmVmaXggJChCUEZfU0tFTF9ESVIpLywkKGFkZHN1ZmZpeCAkKEJQRl9TS0VMX0VYVCksJChsaWJfYnBmX3N0ZW1zKSkpXG4raWZuZXEgKCQoQlBGX0dFTl9TVUJTS0VMKSwpXG4rQlBGX1NVQlNLRUxTIDo9ICQoYWRkcHJlZml4ICQoQlBGX1NLRUxfRElSKS8sJChhZGRzdWZmaXggJChsaWJfYnBmX3N1YnNrZWxfZXh0KSwkKGxpYl9icGZfc3RlbXMpKSlcbitlbmRpZlxuK1xuKyMgVXNlIHBlci1zb3VyY2UgcnVsZXMgdG8gYXZvaWQgY2hhbmdpbmcgbm9ybWFsIC5jIGxvb2t1cC5cbisjIFRyYWNrIHNvdXJjZSBoZWFkZXJzIGJlZm9yZSBCUEZPQkogaW5zdGFsbHMgdGhlaXIgdXBkYXRlZCBjb3BpZXMuXG4rZGVmaW5lIGxpYl9icGZfb2JqX3J1bGVcbiskKEJQRl9PQkpfRElSKS8kKHBhdHN1YnN0ICUkKEJQRl9QUk9HX0VYVCksJSwkKG5vdGRpciAkKDEpKSkuYnBmLm86ICQoMSlcdFxcXG4rXHRcdCQoQlBGX0VYVFJBX0hEUlMpICQobGliX2JwZl9oZWFkZXJfc291cmNlcylcdFx0XHRcXFxuK1x0XHQkKElOQ0xVREVfRElSKS92bWxpbnV4LmggfCAkKEJQRl9PQkpfRElSKSAkKEJQRk9CSilcbitcdCQkKGNhbGwgbGliX2JwZl9idWlsZF9ydWxlLCQkXHUwMDNjLCQkQClcbitlbmRlZlxuKyQoZm9yZWFjaCBzcmMsJChCUEZfU1JDUyksJChldmFsICQoY2FsbCBsaWJfYnBmX29ial9ydWxlLCQoc3JjKSkpKVxuK1xuKyMgR2VuZXJhdGUgYm90aCBoZWFkZXJzIHRvZ2V0aGVyIHNvIGVpdGhlciBtaXNzaW5nIHRhcmdldCByZWJ1aWxkcyB0aGUgcGFpci5cbitsaWJfYnBmX3NrZWxfdGFyZ2V0cyA6PSAkKEJQRl9TS0VMX0RJUikvJSQoQlBGX1NLRUxfRVhUKVxuK2lmbmVxICgkKEJQRl9HRU5fU1VCU0tFTCksKVxuK2xpYl9icGZfc2tlbF90YXJnZXRzICs9ICQoQlBGX1NLRUxfRElSKS8lJChsaWJfYnBmX3N1YnNrZWxfZXh0KVxuK2VuZGlmXG4rXG4rIyBMaW5rIHRocmVlIHRpbWVzIGFuZCByZXF1aXJlIHRoZSBmaW5hbCB0d28gb2JqZWN0cyB0byBtYXRjaC5cbiskKGxpYl9icGZfc2tlbF90YXJnZXRzKTogJChCUEZfT0JKX0RJUikvJS5icGYubyAkKEJQRlRPT0wpIHwgJChCUEZfU0tFTF9ESVIpXG4rXHQkKGNhbGwgbXNnLEdFTi1TS0VMLCwkKEJQRl9TS0VMX0RJUikvJCokKEJQRl9TS0VMX0VYVCkpXG4rXHQkKFEpJChCUEZUT09MKSBnZW4gb2JqZWN0ICQoXHUwMDNjOi5vPS5saW5rZWQxLm8pICRcdTAwM2NcbitcdCQoUSkkKEJQRlRPT0wpIGdlbiBvYmplY3QgJChcdTAwM2M6Lm89LmxpbmtlZDIubykgJChcdTAwM2M6Lm89LmxpbmtlZDEubylcbitcdCQoUSkkKEJQRlRPT0wpIGdlbiBvYmplY3QgJChcdTAwM2M6Lm89LmxpbmtlZDMubykgJChcdTAwM2M6Lm89LmxpbmtlZDIubylcbitcdCQoUSlkaWZmICQoXHUwMDNjOi5vPS5saW5rZWQyLm8pICQoXHUwMDNjOi5vPS5saW5rZWQzLm8pXG4rXHQkKFEpJChCUEZUT09MKSBnZW4gc2tlbGV0b24gJChcdTAwM2M6Lm89LmxpbmtlZDMubykgbmFtZSAkKiBcdTAwM2UgJChCUEZfU0tFTF9ESVIpLyQqJChCUEZfU0tFTF9FWFQpXG4raWZuZXEgKCQoQlBGX0dFTl9TVUJTS0VMKSwpXG4rXHQkKFEpJChCUEZUT09MKSBnZW4gc3Vic2tlbGV0b24gJChcdTAwM2M6Lm89LmxpbmtlZDMubykgbmFtZSAkKiBcdTAwM2UgJChCUEZfU0tFTF9ESVIpLyQqJChsaWJfYnBmX3N1YnNrZWxfZXh0KVxuK2VuZGlmXG4rXHQkKFEpcm0gLWYgJChcdTAwM2M6Lm89LmxpbmtlZDEubykgJChcdTAwM2M6Lm89LmxpbmtlZDIubykgJChcdTAwM2M6Lm89LmxpbmtlZDMubylcbitcbisjIFJlYWQgdGhlIGhlYWRlciBkZXBlbmRlbmNpZXMgd3JpdHRlbiBieSAtTU1ELlxuKy1pbmNsdWRlICQoQlBGX09CSlM6Lm89LmQpXG4rXG4rIyAtLS0tIHZhbHVlcyBmb3IgdGhlIHRlc3QgTWFrZWZpbGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbisjIEFkZCB0aGUgaW5zdGFsbGVkIGxpYmJwZi92bWxpbnV4LmggZGlyZWN0b3J5IGFuZCB0aGUgc2tlbGV0b24gZGlyZWN0b3J5LlxuK0NGTEFHUyArPSAtSSQoSU5DTFVERV9ESVIpIC1JJChCUEZfU0tFTF9ESVIpXG4rXG4rIyBBZGQgdGFyZ2V0IHpzdGQgd2hlbiBmb3VuZCBieSB0aGUgdGFyZ2V0IHBrZy1jb25maWcuXG4rUEtHX0NPTkZJRyA/PSAkKENST1NTX0NPTVBJTEUpcGtnLWNvbmZpZ1xuK0JQRl9MRExJQlMgOj0gJChCUEZPQkopIC1sZWxmIC1selxuK2lmbmVxICgkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1leGlzdHMgbGlienN0ZCAyXHUwMDNlL2Rldi9udWxsIFx1MDAyNlx1MDAyNiBlY2hvIHkpLClcbitCUEZfTERMSUJTICs9IC1senN0ZFxuK2VuZGlmXG4rXG4rIyBBZGQgc2tlbGV0b25zIGFmdGVyIGxpYi5tayBkZWZpbmVzIGFsbC5cbithbGw6ICQoQlBGX1NLRUxTKSAkKEJQRl9TVUJTS0VMUylcbitcbisjIFRoZSBza2VsZXRvbiBhbHJlYWR5IGVtYmVkcyBlYWNoIEJQRiBvYmplY3QgaW4gdGhlIHRlc3QgYmluYXJ5LiBUbyBpbnN0YWxsIHRoZVxuKyMgb2JqZWN0cyBzZXBhcmF0ZWx5LCBhZGQgVEVTVF9HRU5fRklMRVMgKz0gJChCUEZfT0JKUykuXG4rXG4rIyAkMSA9IGJpbmFyeSwgJDIgPSB0ZXN0IHNvdXJjZS4gVXNlIHRoZSBzYW1lIGNvbXBpbGUgYW5kIGxpbmsgZmxhZ3MgYXMgbGliLm1rLlxuK2RlZmluZSBicGZfbGlua1xuK1x0JChjYWxsIG1zZyxCSU5BUlksLCQxKVxuK1x0JChRKSQoQ0MpICQoQ0ZMQUdTKSAkKENQUEZMQUdTKSAkKExERkxBR1MpICQoVEFSR0VUX0FSQ0gpICQyIFxcXG4rXHRcdCQoQlBGX0xETElCUykgJChMRExJQlMpIC1vICQxXG4rZW5kZWZcbitcbitFWFRSQV9DTEVBTiArPSAkKHNvcnQgJChsaWJfYnBmX3NjcmF0Y2hfZGlyKSAkKGxpYl9icGZfaG9zdF9zY3JhdGNoX2RpcikpIFxcXG4rXHQgICAgICAgJChhZGRwcmVmaXggJChCUEZfT0JKX0RJUikvLCouYnBmLm8gKi5icGYuZCAqLmxpbmtlZCoubylcdFxcXG4rXHQgICAgICAgJChhZGRwcmVmaXggJChCUEZfU0tFTF9ESVIpLywqJChCUEZfU0tFTF9FWFQpICokKGxpYl9icGZfc3Vic2tlbF9leHQpKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NjaGVkX2V4dC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NjaGVkX2V4dC9NYWtlZmlsZVxuaW5kZXggM2NmZTkwZTBmMzRmYS4uZGQzZjU1OTRhZjI0MCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NjaGVkX2V4dC9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L01ha2VmaWxlXG5AQCAtMTQsNDggKzE0LDI5IEBAIENVUkRJUiA6PSAkKGFic3BhdGggLilcbiBSRVBPUk9PVCA6PSAkKGFic3BhdGggLi4vLi4vLi4vLi4pXG4gVE9PTFNESVIgOj0gJChSRVBPUk9PVCkvdG9vbHNcbiBMSUJESVIgOj0gJChUT09MU0RJUikvbGliXG4tQlBGRElSIDo9ICQoTElCRElSKS9icGZcbiBUT09MU0lOQ0RJUiA6PSAkKFRPT0xTRElSKS9pbmNsdWRlXG4tQlBGVE9PTERJUiA6PSAkKFRPT0xTRElSKS9icGYvYnBmdG9vbFxuLUFQSURJUiA6PSAkKFRPT0xTSU5DRElSKS91YXBpXG4gR0VORElSIDo9ICQoUkVQT1JPT1QpL2luY2x1ZGUvZ2VuZXJhdGVkXG4gR0VOSERSIDo9ICQoR0VORElSKS9hdXRvY29uZi5oXG4tU0NYVE9PTFNESVIgOj0gJChUT09MU0RJUikvc2NoZWRfZXh0XG4gU0NYVE9PTFNJTkNESVIgOj0gJChUT09MU0RJUikvc2NoZWRfZXh0L2luY2x1ZGVcbiBcbi1PVVRQVVRfRElSIDo9ICQoT1VUUFVUKS9idWlsZFxuLU9CSl9ESVIgOj0gJChPVVRQVVRfRElSKS9vYmpcbi1JTkNMVURFX0RJUiA6PSAkKE9VVFBVVF9ESVIpL2luY2x1ZGVcbi1CUEZPQkpfRElSIDo9ICQoT0JKX0RJUikvbGliYnBmXG4tU0NYT0JKX0RJUiA6PSAkKE9CSl9ESVIpL3NjaGVkX2V4dFxuLUJQRk9CSiA6PSAkKEJQRk9CSl9ESVIpL2xpYmJwZi5hXG4tTElCQlBGX09VVFBVVCA6PSAkKE9CSl9ESVIpL2xpYmJwZi9saWJicGYuYVxuLVxuLURFRkFVTFRfQlBGVE9PTCA6PSAkKE9VVFBVVF9ESVIpL2hvc3Qvc2Jpbi9icGZ0b29sXG4tSE9TVF9PQkpfRElSIDo9ICQoT0JKX0RJUikvaG9zdC9icGZ0b29sXG4tSE9TVF9MSUJCUEZfT1VUUFVUIDo9ICQoT0JKX0RJUikvaG9zdC9saWJicGYvXG4tSE9TVF9MSUJCUEZfREVTVERJUiA6PSAkKE9VVFBVVF9ESVIpL2hvc3QvXG4tSE9TVF9ERVNURElSIDo9ICQoT1VUUFVUX0RJUikvaG9zdC9cbi1cbi1WTUxJTlVYX0JURl9QQVRIUyA/PSAkKGlmICQoTyksJChPKS92bWxpbnV4KVx0XHRcdFx0XHRcXFxuLVx0XHQgICAgICQoaWYgJChLQlVJTERfT1VUUFVUKSwkKEtCVUlMRF9PVVRQVVQpL3ZtbGludXgpXHRcdFxcXG4tXHRcdCAgICAgLi4vLi4vLi4vLi4vdm1saW51eFx0XHRcdFx0XHRcXFxuLVx0XHQgICAgIC9zeXMva2VybmVsL2J0Zi92bWxpbnV4XHRcdFx0XHRcdFxcXG4tXHRcdCAgICAgL2Jvb3Qvdm1saW51eC0kKHNoZWxsIHVuYW1lIC1yKVxuLVZNTElOVVhfQlRGID89ICQoYWJzcGF0aCAkKGZpcnN0d29yZCAkKHdpbGRjYXJkICQoVk1MSU5VWF9CVEZfUEFUSFMpKSkpXG4taWZlcSAoJChWTUxJTlVYX0JURiksKVxuLSQoZXJyb3IgQ2Fubm90IGZpbmQgYSB2bWxpbnV4IGZvciBWTUxJTlVYX0JURiBhdCBhbnkgb2YgXCIkKFZNTElOVVhfQlRGX1BBVEhTKVwiKVxuLWVuZGlmXG4rIyBCdWlsZCBzY2hlZHVsZXIgc2tlbGV0b25zIGFuZCBzdWJza2VsZXRvbnMgd2l0aCB0aGUgc2hhcmVkIEJQRiBydWxlcy5cbitCUEZfU1JDUyAgICAgICAgOj0gJCh3aWxkY2FyZCAqLmJwZi5jKVxuK0JQRl9TS0VMX0VYVCAgICA6PSAuYnBmLnNrZWwuaFxuK0JQRl9HRU5fU1VCU0tFTCA6PSAxXG4rIyBQcmVzZXJ2ZSB0aGUgZXhpc3RpbmcgYnVpbGQvIGxheW91dC5cbitCUEZfT0JKX0RJUiAgOj0gJChPVVRQVVQpL2J1aWxkL29iai9zY2hlZF9leHRcbitCUEZfU0tFTF9ESVIgOj0gJChPVVRQVVQpL2J1aWxkL2luY2x1ZGVcbitTQ1hPQkpfRElSICAgOj0gJChCUEZfT0JKX0RJUilcbiBcbi1CUEZUT09MID89ICQoREVGQVVMVF9CUEZUT09MKVxuK2luY2x1ZGUgLi4vbGliLmJwZi5ta1xuIFxuIGlmbmVxICgkKHdpbGRjYXJkICQoR0VOSERSKSksKVxuICAgR0VORkxBR1MgOj0gLURIQVZFX0dFTkhEUlxuIGVuZGlmXG4gXG4gQ0ZMQUdTICs9IC1nIC1PMiAtcmR5bmFtaWMgLXB0aHJlYWQgLVdhbGwgLVdlcnJvciAkKEdFTkZMQUdTKVx0XHRcdFxcXG4tXHQgIC1JJChJTkNMVURFX0RJUikgLUkkKEdFTkRJUikgLUkkKExJQkRJUilcdFx0XHRcdFxcXG4tXHQgIC1JJChUT09MU0lOQ0RJUikgLUkkKEFQSURJUikgLUkkKENVUkRJUikvaW5jbHVkZSAtSSQoU0NYVE9PTFNJTkNESVIpXG4rXHQgIC1JJChHRU5ESVIpIC1JJChMSUJESVIpIC1JJChUT09MU0lOQ0RJUikgLUkkKEFQSURJUilcdFx0XHRcXFxuK1x0ICAtSSQoQ1VSRElSKS9pbmNsdWRlIC1JJChTQ1hUT09MU0lOQ0RJUilcbiBcbiAjIFNpbGVuY2Ugc29tZSB3YXJuaW5ncyB3aGVuIGNvbXBpbGVkIHdpdGggY2xhbmdcbiBpZm5lcSAoJChMTFZNKSwpXG5AQCAtNjQsMTAyICs0NSwyNiBAQCBlbmRpZlxuIFxuIExERkxBR1MgPSAtbGVsZiAtbHogLWxwdGhyZWFkIC1senN0ZFxuIFxuLUlTX0xJVFRMRV9FTkRJQU4gPSAkKHNoZWxsICQoQ0MpIC1kTSAtRSAtIFx1MDAzYy9kZXYvbnVsbCB8XHRcdFx0XHRcXFxuLVx0XHRcdGdyZXAgJ2RlZmluZSBfX0JZVEVfT1JERVJfXyBfX09SREVSX0xJVFRMRV9FTkRJQU5fXycpXG4tXG4tIyBHZXQgQ2xhbmcncyBkZWZhdWx0IGluY2x1ZGVzIG9uIHRoaXMgc3lzdGVtLCBhcyBvcHBvc2VkIHRvIHRob3NlIHNlZW4gYnlcbi0jICctdGFyZ2V0IGJwZicuIFRoaXMgZml4ZXMgXCJtaXNzaW5nXCIgZmlsZXMgb24gc29tZSBhcmNoaXRlY3R1cmVzL2Rpc3Ryb3MsXG4tIyBzdWNoIGFzIGFzbS9ieXRlb3JkZXIuaCwgYXNtL3NvY2tldC5oLCBhc20vc29ja2lvcy5oLCBzeXMvY2RlZnMuaCBldGMuXG4tI1xuLSMgVXNlICctaWRpcmFmdGVyJzogRG9uJ3QgaW50ZXJmZXJlIHdpdGggaW5jbHVkZSBtZWNoYW5pY3MgZXhjZXB0IHdoZXJlIHRoZVxuLSMgYnVpbGQgd291bGQgaGF2ZSBmYWlsZWQgYW55d2F5cy5cbi1kZWZpbmUgZ2V0X3N5c19pbmNsdWRlc1xuLSQoc2hlbGwgJCgxKSAkKDIpIC12IC1FIC0gXHUwMDNjL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxIFxcXG4tXHR8IHNlZCAtbiAnL1x1MDAzYy4uLlx1MDAzZSBzZWFyY2ggc3RhcnRzIGhlcmU6LywvRW5kIG9mIHNlYXJjaCBsaXN0Li97IHN8IFxcKC8uKlxcKXwtaWRpcmFmdGVyIFxcMXxwIH0nKSBcXFxuLSQoc2hlbGwgJCgxKSAkKDIpIC1kTSAtRSAtIFx1MDAzYy9kZXYvbnVsbCB8IGdyZXAgJ19fcmlzY3ZfeGxlbiAnIHwgYXdrICd7cHJpbnRmKFwiLURfX3Jpc2N2X3hsZW49JWQgLURfX0JJVFNfUEVSX0xPTkc9JWRcIiwgJCQzLCAkJDMpfScpXG4tZW5kZWZcbi1cbi1pZm5lcSAoJChDUk9TU19DT01QSUxFKSwpXG4tQ0xBTkdfVEFSR0VUX0FSQ0ggPSAtLXRhcmdldD0kKG5vdGRpciAkKENST1NTX0NPTVBJTEU6JS09JSkpXG4tZW5kaWZcbi1cbi1DTEFOR19TWVNfSU5DTFVERVMgPSAkKGNhbGwgZ2V0X3N5c19pbmNsdWRlcywkKENMQU5HKSwkKENMQU5HX1RBUkdFVF9BUkNIKSlcbi1cbi1CUEZfQ0ZMQUdTID0gLWcgLURfX1RBUkdFVF9BUkNIXyQoU1JDQVJDSClcdFx0XHRcdFx0XFxcbi1cdCAgICAgJChpZiAkKElTX0xJVFRMRV9FTkRJQU4pLC1tbGl0dGxlLWVuZGlhbiwtbWJpZy1lbmRpYW4pXHRcdFxcXG4rIyBQcmVzZXJ2ZSB0aGUgc2NoZWR1bGVyLXNwZWNpZmljIGZsYWdzOyB0aGUgc2hhcmVkIHJlY2lwZSBhZGRzIHRhcmdldCBmbGFncy5cbitCUEZfQ0ZMQUdTID0gLWcgLURfX1RBUkdFVF9BUkNIXyQoU1JDQVJDSCkgJChNRU5ESUFOKVx0XHRcdFx0XFxcbiBcdCAgICAgLUkkKENVUkRJUikvaW5jbHVkZSAtSSQoQ1VSRElSKS9pbmNsdWRlL2JwZi1jb21wYXRcdFx0XHRcXFxuIFx0ICAgICAtSSQoSU5DTFVERV9ESVIpIC1JJChBUElESVIpIC1JJChTQ1hUT09MU0lOQ0RJUilcdFx0XHRcXFxuIFx0ICAgICAtSSQoUkVQT1JPT1QpL2luY2x1ZGVcdFx0XHRcdFx0XHRcXFxuLVx0ICAgICAkKENMQU5HX1NZU19JTkNMVURFUykgXHRcdFx0XHRcdFx0XFxcbitcdCAgICAgJChDTEFOR19TWVNfSU5DTFVERVMpXHRcdFx0XHRcdFx0XFxcbiBcdCAgICAgLVdhbGwgLVduby1jb21wYXJlLWRpc3RpbmN0LXBvaW50ZXItdHlwZXNcdFx0XHRcdFxcXG4gXHQgICAgIC1Xbm8taW5jb21wYXRpYmxlLWZ1bmN0aW9uLXBvaW50ZXItdHlwZXNcdFx0XHRcdFxcXG4gXHQgICAgIC1Xbm8tbWljcm9zb2Z0LWFub24tdGFnXHRcdFx0XHRcdFx0XFxcbiBcdCAgICAgLWZtcy1leHRlbnNpb25zXHRcdFx0XHRcdFx0XHRcXFxuLVx0ICAgICAtTzIgLW1jcHU9djNcbi1cbi0jIHNvcnQgcmVtb3ZlcyBsaWJicGYgZHVwbGljYXRlcyB3aGVuIG5vdCBjcm9zcy1idWlsZGluZ1xuLU1BS0VfRElSUyA6PSAkKHNvcnQgJChPQkpfRElSKS9saWJicGYgJChPQkpfRElSKS9saWJicGZcdFx0XHRcdFxcXG4tXHQgICAgICAgJChPQkpfRElSKS9icGZ0b29sICQoT0JKX0RJUikvcmVzb2x2ZV9idGZpZHNcdFx0XHRcXFxuLVx0ICAgICAgICQoSE9TVF9PQkpfRElSKSAkKElOQ0xVREVfRElSKSAkKFNDWE9CSl9ESVIpKVxuLVxuLSQoTUFLRV9ESVJTKTpcbi1cdCQoY2FsbCBtc2csTUtESVIsLCRAKVxuLVx0JChRKW1rZGlyIC1wICRAXG4tXG4tJChCUEZPQkopOiAkKHdpbGRjYXJkICQoQlBGRElSKS8qLltjaF0gJChCUEZESVIpL01ha2VmaWxlKVx0XHRcdFxcXG4tXHQgICAkKEFQSURJUikvbGludXgvYnBmLmhcdFx0XHRcdFx0XHRcXFxuLVx0ICAgfCAkKE9CSl9ESVIpL2xpYmJwZlxuLVx0JChRKSQoTUFLRSkgJChzdWJtYWtlX2V4dHJhcykgLUMgJChCUEZESVIpIE9VVFBVVD0kKE9CSl9ESVIpL2xpYmJwZi9cdFxcXG4tXHRcdCAgICBBUkNIPSQoQVJDSCkgQ0M9XCIkKENDKVwiIENST1NTX0NPTVBJTEU9JChDUk9TU19DT01QSUxFKVx0XFxcbi1cdFx0ICAgIEVYVFJBX0NGTEFHUz0nLWcgLU8wIC1mUElDJ1x0XHRcdFx0XHRcXFxuLVx0XHQgICAgREVTVERJUj0kKE9VVFBVVF9ESVIpIHByZWZpeD0gYWxsIGluc3RhbGxfaGVhZGVyc1xuLVxuLSQoREVGQVVMVF9CUEZUT09MKTogJCh3aWxkY2FyZCAkKEJQRlRPT0xESVIpLyouW2NoXSAkKEJQRlRPT0xESVIpL01ha2VmaWxlKVx0XFxcbi1cdFx0ICAgICQoTElCQlBGX09VVFBVVCkgfCAkKEhPU1RfT0JKX0RJUilcbi1cdCQoUSkkKE1BS0UpICQoc3VibWFrZV9leHRyYXMpICAtQyAkKEJQRlRPT0xESVIpXHRcdFx0XHRcXFxuLVx0XHQgICAgQVJDSD0gQ1JPU1NfQ09NUElMRT0gQ0M9JChIT1NUQ0MpIExEPSQoSE9TVExEKVx0XHRcXFxuLVx0XHQgICAgRVhUUkFfQ0ZMQUdTPSctZyAtTzAnXHRcdFx0XHRcdFxcXG4tXHRcdCAgICBPVVRQVVQ9JChIT1NUX09CSl9ESVIpL1x0XHRcdFx0XHRcXFxuLVx0XHQgICAgTElCQlBGX09VVFBVVD0kKEhPU1RfTElCQlBGX09VVFBVVClcdFx0XHRcdFxcXG4tXHRcdCAgICBMSUJCUEZfREVTVERJUj0kKEhPU1RfTElCQlBGX0RFU1RESVIpXHRcdFx0XFxcbi1cdFx0ICAgIHByZWZpeD0gREVTVERJUj0kKEhPU1RfREVTVERJUikgaW5zdGFsbC1iaW5cbi1cbi0kKElOQ0xVREVfRElSKS92bWxpbnV4Lmg6ICQoVk1MSU5VWF9CVEYpICQoQlBGVE9PTCkgfCAkKElOQ0xVREVfRElSKVxuLWlmZXEgKCQoVk1MSU5VWF9IKSwpXG4tXHQkKGNhbGwgbXNnLEdFTiwsJEApXG4tXHQkKFEpJChCUEZUT09MKSBidGYgZHVtcCBmaWxlICQoVk1MSU5VWF9CVEYpIGZvcm1hdCBjIFx1MDAzZSAkQFxuLWVsc2Vcbi1cdCQoY2FsbCBtc2csQ1AsLCRAKVxuLVx0JChRKWNwIFwiJChWTUxJTlVYX0gpXCIgJEBcbi1lbmRpZlxuLVxuLSQoU0NYT0JKX0RJUikvJS5icGYubzogJS5icGYuYyAkKElOQ0xVREVfRElSKS92bWxpbnV4LmhcdHwgJChCUEZPQkopICQoU0NYT0JKX0RJUilcbi1cdCQoY2FsbCBtc2csQ0xORy1CUEYsLCQobm90ZGlyICRAKSlcbi1cdCQoUSkkKENMQU5HKSAkKEJQRl9DRkxBR1MpIC10YXJnZXQgYnBmIC1jICRcdTAwM2MgLW8gJEBcbitcdCAgICAgJChCUEZfRVhUUkFfQ0ZMQUdTKVxuIFxuLSQoSU5DTFVERV9ESVIpLyUuYnBmLnNrZWwuaDogJChTQ1hPQkpfRElSKS8lLmJwZi5vICQoSU5DTFVERV9ESVIpL3ZtbGludXguaCAkKEJQRlRPT0wpIHwgJChJTkNMVURFX0RJUilcbi1cdCQoZXZhbCBzY2hlZD0kKG5vdGRpciAkQCkpXG4tXHQkKGNhbGwgbXNnLEdFTi1TS0VMLCwkKHNjaGVkKSlcbi1cdCQoUSkkKEJQRlRPT0wpIGdlbiBvYmplY3QgJChcdTAwM2M6Lm89LmxpbmtlZDEubykgJFx1MDAzY1xuLVx0JChRKSQoQlBGVE9PTCkgZ2VuIG9iamVjdCAkKFx1MDAzYzoubz0ubGlua2VkMi5vKSAkKFx1MDAzYzoubz0ubGlua2VkMS5vKVxuLVx0JChRKSQoQlBGVE9PTCkgZ2VuIG9iamVjdCAkKFx1MDAzYzoubz0ubGlua2VkMy5vKSAkKFx1MDAzYzoubz0ubGlua2VkMi5vKVxuLVx0JChRKWRpZmYgJChcdTAwM2M6Lm89LmxpbmtlZDIubykgJChcdTAwM2M6Lm89LmxpbmtlZDMubylcbi1cdCQoUSkkKEJQRlRPT0wpIGdlbiBza2VsZXRvbiAkKFx1MDAzYzoubz0ubGlua2VkMy5vKSBuYW1lICQoc3Vic3QgLmJwZi5za2VsLmgsLCQoc2NoZWQpKSBcdTAwM2UgJEBcbi1cdCQoUSkkKEJQRlRPT0wpIGdlbiBzdWJza2VsZXRvbiAkKFx1MDAzYzoubz0ubGlua2VkMy5vKSBuYW1lICQoc3Vic3QgLmJwZi5za2VsLmgsLCQoc2NoZWQpKSBcdTAwM2UgJChAOi5za2VsLmg9LnN1YnNrZWwuaClcbitFWFRSQV9DTEVBTiArPSAkKE9VVFBVVCkvYnVpbGRcbiBcbiAjIyMjIyMjIyMjIyMjIyMjXG4gIyBDIHNjaGVkdWxlcnMgI1xuICMjIyMjIyMjIyMjIyMjIyNcbiBcbi1vdmVycmlkZSBkZWZpbmUgQ0xFQU5cbi1cdHJtIC1yZiAkKE9VVFBVVF9ESVIpXG4tXHRybSAtZiAkKFRFU1RfR0VOX1BST0dTKVxuLWVuZGVmXG4tXG4tIyBFdmVyeSB0ZXN0Y2FzZSB0YWtlcyBhbGwgb2YgdGhlIEJQRiBwcm9ncyBhcmUgZGVwZW5kZW5jaWVzIGJ5IGRlZmF1bHQuIFRoaXNcbi0jIGFsbG93cyB0ZXN0Y2FzZXMgdG8gbG9hZCBhbnkgQlBGIHNjaGVkdWxlciwgd2hpY2ggaXMgdXNlZnVsIGZvciB0ZXN0Y2FzZXNcbi0jIHRoYXQgZG9uJ3QgbmVlZCB0aGVpciBvd24gcHJvZyB0byBydW4gdGhlaXIgdGVzdC5cbi1hbGxfdGVzdF9icGZwcm9ncyA6PSAkKGZvcmVhY2ggcHJvZywkKHdpbGRjYXJkICouYnBmLmMpLCQoSU5DTFVERV9ESVIpLyQocGF0c3Vic3QgJS5jLCUuc2tlbC5oLCQocHJvZykpKVxuKyMgQnVpbGQgZXZlcnkgc2NoZWR1bGVyIGJlZm9yZSBlYWNoIHRlc3QuXG4rYWxsX3Rlc3RfYnBmcHJvZ3MgOj0gJChCUEZfU0tFTFMpXG4gXG4gYXV0by10ZXN0LXRhcmdldHMgOj1cdFx0XHRcXFxuIFx0Y3JlYXRlX2RzcVx0XHRcdFxcXG5AQCAtMTk2LDI0ICsxMDEsMjIgQEAgYXV0by10ZXN0LXRhcmdldHMgOj1cdFx0XHRcXFxuIHRlc3RjYXNlLXRhcmdldHMgOj0gJChhZGRzdWZmaXggLm8sJChhZGRwcmVmaXggJChTQ1hPQkpfRElSKS8sJChhdXRvLXRlc3QtdGFyZ2V0cykpKVxuIFxuICQoU0NYT0JKX0RJUikvcnVubmVyLm86IHJ1bm5lci5jIHwgJChTQ1hPQkpfRElSKSAkKEJQRk9CSilcbi1cdCQoQ0MpICQoQ0ZMQUdTKSAtYyAkXHUwMDNjIC1vICRAXG4rXHQkKGNhbGwgbXNnLENDLCwkQClcbitcdCQoUSkkKENDKSAkKENGTEFHUykgLWMgJFx1MDAzYyAtbyAkQFxuIFxuICMgQ3JlYXRlIGFsbCBvZiB0aGUgdGVzdCB0YXJnZXRzIG9iamVjdCBmaWxlcywgd2hvc2UgdGVzdGNhc2Ugb2JqZWN0cyB3aWxsIGJlXG4gIyByZWdpc3RlcmVkIGludG8gdGhlIHJ1bm5lciBpbiBFTEYgY29uc3RydWN0b3JzLlxuLSNcbi0jIE5vdGUgdGhhdCB3ZSBtdXN0IGRvIGRvdWJsZSBleHBhbnNpb24gaGVyZSBpbiBvcmRlciB0byBzdXBwb3J0IGNvbmRpdGlvbmFsbHlcbi0jIGNvbXBpbGluZyBCUEYgb2JqZWN0IGZpbGVzIG9ubHkgaWYgb25lIGlzIHByZXNlbnQsIGFzIHRoZSB3aWxkY2FyZCBNYWtlXG4tIyBmdW5jdGlvbiBkb2Vzbid0IHN1cHBvcnQgdXNpbmcgaW1wbGljaXQgcnVsZXMgb3RoZXJ3aXNlLlxuICQodGVzdGNhc2UtdGFyZ2V0cyk6ICQoU0NYT0JKX0RJUikvJS5vOiAlLmMgJChTQ1hPQkpfRElSKS9ydW5uZXIubyAkKGFsbF90ZXN0X2JwZnByb2dzKSB8ICQoU0NYT0JKX0RJUilcbi1cdCQoZXZhbCB0ZXN0PSQocGF0c3Vic3QgJS5vLCUuYywkKG5vdGRpciAkQCkpKVxuLVx0JChDQykgJChDRkxBR1MpIC1jICRcdTAwM2MgLW8gJEBcbitcdCQoY2FsbCBtc2csQ0MsLCRAKVxuK1x0JChRKSQoQ0MpICQoQ0ZMQUdTKSAtYyAkXHUwMDNjIC1vICRAXG4gXG4gJChTQ1hPQkpfRElSKS91dGlsLm86IHV0aWwuYyB8ICQoU0NYT0JKX0RJUilcbi1cdCQoQ0MpICQoQ0ZMQUdTKSAtYyAkXHUwMDNjIC1vICRAXG4rXHQkKGNhbGwgbXNnLENDLCwkQClcbitcdCQoUSkkKENDKSAkKENGTEFHUykgLWMgJFx1MDAzYyAtbyAkQFxuIFxuICQoT1VUUFVUKS9ydW5uZXI6ICQoU0NYT0JKX0RJUikvcnVubmVyLm8gJChTQ1hPQkpfRElSKS91dGlsLm8gJChCUEZPQkopICQodGVzdGNhc2UtdGFyZ2V0cylcbi1cdEBlY2hvIFwiJCh0ZXN0Y2FzZS10YXJnZXRzKVwiXG4tXHQkKENDKSAkKENGTEFHUykgLW8gJEAgJF4gJChMREZMQUdTKVxuK1x0JChjYWxsIG1zZyxCSU5BUlksLCRAKVxuK1x0JChRKSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkXiAkKExERkxBR1MpXG4gXG4gLkRFRkFVTFRfR09BTCA6PSBhbGxcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIzOjU4OjQ1LjM4NjcwMTMxN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgwOTEwMTczODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoIGFuZCBkZXRlcm1pbmUgaWYgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4gRmlyc3QsIEknbGwgZXhhbWluZSB0aGUgZGlmZiB0byBzZWUgd2hhdCdzIGJlZW4gY2hhbmdlZC4gVGhlIHBhdGNoIHRvdWNoZXMgYSBudW1iZXIgb2YgZmlsZXM6ICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwLy5naXRpZ25vcmVgLCBgTWFrZWZpbGVgLCBgY29uZmlnYCwgc2V2ZXJhbCBgLmNgIGFuZCBgLmhgIGZpbGVzIHdpdGhpbiB0aGUgYGNncm91cGAgZGlyZWN0b3J5LCBpbmNsdWRpbmcgQlBGLXJlbGF0ZWQgZmlsZXMsIGB0ZXN0X21lbWNvbnRyb2wuY2AsIGFuZCBzaW1pbGFyIGBNYWtlZmlsZWAgYW5kIGAuZ2l0aWdub3JlYCBmaWxlcyB3aXRoaW4gYGhpZGAsIGBsaWIuYnBmLm1rYCBhbmQgYHNjaGVkX2V4dGAuXG5cblRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlc2UgY2hhbmdlcyBpbXBhY3QgdGhlIGtlcm5lbCBwcm9wZXIgb3IgYXJlIGNvbmZpbmVkIHRvIHVzZXItc3BhY2UgdG9vbHMgYW5kIHRlc3RzLiAgSSBzZWUgdGhhdCBhbGwgdGhlIG1vZGlmaWVkIGZpbGVzIGFyZSBzdHJpY3RseSB3aXRoaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8uLi5gIGhpZXJhcmNoeS4gIEkga25vdyB0aGF0J3MgYSBrZXkgaW5kaWNhdG9yLiAgTm93LCBsZXQgbWUgcmVmZXJlbmNlIHRoZSBndWlkZWxpbmVzOiBzZWN0aW9uIDIgZGljdGF0ZXMgd2hlbiB3ZSBjYW4gc2FmZWx5IHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJlbGV2YW50IGNyaXRlcmlhIGlzOiAgXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOiAuLi4gVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cIlxuXG5HaXZlbiB0aGlzLCBJIGhhdmUgdG8gY29uY2x1ZGUgdGhhdCBgV29ydGhGdXp6aW5nYCBpcyBgZmFsc2VgLiAgVGhlIG1vZGlmaWVkIGZpbGVzIGFyZSBhbGwgY29udGFpbmVkIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9gLCBhbmQgaXQncyBjbGVhciBub25lIG9mIHRoZW0gdG91Y2ggdGhlIGtlcm5lbCBjb2RlLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGxpc3Qgb2YgZmlsZXMgYWdhaW46IEkgc2NhbiB0aHJvdWdoIHRoZSBmaWxlbmFtZXM6IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvLmdpdGlnbm9yZWAsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvTWFrZWZpbGVgLCBhbmQgc28gb24sIHJpZ2h0IGRvd24gdG8gdGhlIGxhc3QgZmlsZSwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NjaGVkX2V4dC9NYWtlZmlsZWAuIFllcCwgZXZlcnkgc2luZ2xlIGZpbGUgaXMgaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9gIGRpcmVjdG9yeS4gTm8ga2VybmVsIGNvZGUgaXMgbW9kaWZpZWQuIE5vIGNvZGUgYWZmZWN0aW5nIGFueSBvZiB0aGUgY29yZSBrZXJuZWwgY29tcG9uZW50cyAobGlrZSBgbW0vYCwgYGtlcm5lbC9gLCBgZHJpdmVycy9gLCBgZnMvYCwgYG5ldC9gLCBvciBgaW5jbHVkZS9gKSBpcyB0b3VjaGVkLlxuXG5UaGVyZWZvcmUsIGJlY2F1c2UgYWxsIHRoZSBtb2RpZmljYXRpb25zIGFyZSBsaW1pdGVkIHRvIHVzZXItc3BhY2Ugc2VsZnRlc3RzIGFuZCB0aGVpciBidWlsZCBpbmZyYXN0cnVjdHVyZSwgYW5kIHRoZXkgZG9uJ3QgYWZmZWN0IHRoZSBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIG1vZHVsZXMsIHRoZSBhcHByb3ByaWF0ZSByZXNwb25zZSBpczpcblxuLSAgIGBXb3J0aEZ1enppbmc6IGZhbHNlYFxuLSAgIGBSZWFzb25pbmc6IEFsbCBjaGFuZ2VzIGFyZSByZXN0cmljdGVkIHRvIHVzZXItc3BhY2Ugc2VsZnRlc3RzIGFuZCBzZWxmdGVzdCBidWlsZCBpbmZyYXN0cnVjdHVyZSB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8sIHdoaWNoIGRvIG5vdCBtb2RpZnkgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuYFxuLSAgIGBGb2N1c1N5bWJvbHM6IFtdYFxuLSAgIGBFbmFibGVDb25maWdzOiBbXWBcblxuSSdtIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYCBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5OTQxLCJPdXRwdXRUb2tlbnMiOjg2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIzOjU4OjUzLjQ3NzcyMTY0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBleGNsdXNpdmVseSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0IGhhcm5lc3Nlcywgc2VsZnRlc3QgQlBGIHRlc3QgcHJvZ3JhbXMsIGFuZCBidWlsZCBpbmZyYXN0cnVjdHVyZSB3aXRoaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvLiBOb25lIG9mIHRoZSBjaGFuZ2VzIGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcywgc28gZnV6emluZyBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdCBoYXJuZXNzZXMsIHNlbGZ0ZXN0IEJQRiB0ZXN0IHByb2dyYW1zLCBhbmQgYnVpbGQgaW5mcmFzdHJ1Y3R1cmUgd2l0aGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzLy4gTm9uZSBvZiB0aGUgY2hhbmdlcyBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMsIHNvIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIzOjU4OjUzLjQ3Nzc0MDk4WiIsIlNlcSI6NSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2mfjq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-10 23:41:22 +0000 UTC FinishedAt: 2026-09-10 23:58:54 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIzOjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdCBoYXJuZXNzZXMsIHNlbGZ0ZXN0IEJQRiB0ZXN0IHByb2dyYW1zLCBhbmQgYnVpbGQgaW5mcmFzdHJ1Y3R1cmUgd2l0aGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzLy4gTm9uZSBvZiB0aGUgY2hhbmdlcyBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMsIHNvIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjM6NTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjMDdiNGI1YmFmYmU2ZTFlZTgyNGM4MmQzYmFiYTAxZTg5ODk0MDAwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMjM6NTg6NDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvLmdpdGlnbm9yZVxuaW5kZXggOTUyZTQ0NDhiZjA3MC4uNTYxYTNlODkxYjk4YyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC8uZ2l0aWdub3JlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvLmdpdGlnbm9yZVxuQEAgLTYsNyAmIzQzOzYsMTUgQEAgdGVzdF9mcmVlemVyXG4gdGVzdF9odWdldGxiX21lbWNnXG4gdGVzdF9raWxsXG4gdGVzdF9rbWVtXG4mIzQzO3Rlc3RfbWVtY2dfc3RhdF9jcm9zc19jcHVcbiB0ZXN0X21lbWNvbnRyb2xcbiB0ZXN0X3BpZHNcbiB0ZXN0X3pzd2FwXG4gd2FpdF9pbm90aWZ5XG4mIzQzOyMgQXJ0aWZhY3RzIGdlbmVyYXRlZCBieSBsaWIuYnBmLm1rXG4mIzQzOy90b29sc1xuJiM0MzsvaG9zdC10b29sc1xuJiM0MzsqLmJwZi5vXG4mIzQzOyouYnBmLmRcbiYjNDM7Ki5saW5rZWQqLm9cbiYjNDM7Ki5za2VsLmhcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvTWFrZWZpbGVcbmluZGV4IGUwMTU4NGMyMTg5YWMuLmNiOTk5YmMyYzg3NWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9NYWtlZmlsZVxuQEAgLTIwLDkgJiM0MzsyMCw0NiBAQCBURVNUX0dFTl9QUk9HUyAmIzQzOz0gdGVzdF96c3dhcFxuIFxuIExPQ0FMX0hEUlMgJiM0Mzs9ICQoc2VsZmRpcikvY2xvbmUzL2Nsb25lM19zZWxmdGVzdHMuaCAkKHNlbGZkaXIpL3BpZGZkL3BpZGZkLmhcbiBcbiYjNDM7IyBSZXNvbHZlIENsYW5nIGVhcmx5IHNvIHRoZSBvcHRpb25hbCBCUEYgdGVzdCBjYW4gYmUgc2VsZWN0ZWQuXG4mIzQzO2lmbmVxICgkKGZpbHRlciAlLywkKExMVk0pKSwpXG4mIzQzO0NMQU5HID89ICQoTExWTSljbGFuZ1xuJiM0MztlbHNlXG4mIzQzO0NMQU5HID89IGNsYW5nJChmaWx0ZXIgLSUsJChMTFZNKSlcbiYjNDM7ZW5kaWZcbiYjNDM7UkVBREVMRiA/PSAkKENST1NTX0NPTVBJTEUpcmVhZGVsZlxuJiM0MztWTUxJTlVYX0JURl9QQVRIUyA/PSAkKGlmICQoTyksJChPKS92bWxpbnV4KVx0XHRcdFx0XFxcbiYjNDM7XHRcdCAgICAgJChpZiAkKEtCVUlMRF9PVVRQVVQpLCQoS0JVSUxEX09VVFBVVCkvdm1saW51eClcdFxcXG4mIzQzO1x0XHQgICAgIC4uLy4uLy4uLy4uL3ZtbGludXhcdFx0XHRcdFxcXG4mIzQzO1x0XHQgICAgIC9zeXMva2VybmVsL2J0Zi92bWxpbnV4XHRcdFx0XHRcXFxuJiM0MztcdFx0ICAgICAvYm9vdC92bWxpbnV4LSQoc2hlbGwgdW5hbWUgLXIpXG4mIzQzOyMgSWdub3JlIEVMRiBpbWFnZXMgd2l0aG91dCAuQlRGOyByYXcgc3lzZnMgQlRGIG5lZWRzIG5vIGNoZWNrLlxuJiM0MztWTUxJTlVYX0JURiA/PSAkKGFic3BhdGggJChmaXJzdHdvcmQgJChmb3JlYWNoIHYsJCh3aWxkY2FyZCAkKFZNTElOVVhfQlRGX1BBVEhTKSksXFxcbiYjNDM7XHRcdCAkKGlmICQoZmlsdGVyIC9zeXMva2VybmVsL2J0Zi8lLCQodikpLCQodiksXFxcbiYjNDM7XHRcdCAgICQoaWYgJChzaGVsbCAkKFJFQURFTEYpIC1TIFwmIzM0OyQodilcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbCB8IGdyZXAgLUYgLkJURiksJCh2KSkpKSkpXG4mIzQzOyMgQWNjZXB0IGVpdGhlciBhIHN1cHBsaWVkIGhlYWRlciBvciB1c2FibGUgQlRGLlxuJiM0MztIQVZFX0JQRiA6PSAkKGFuZCAkKG9yICQoVk1MSU5VWF9IKSwkKFZNTElOVVhfQlRGKSksXHRcdFx0XFxcbiYjNDM7XHRcdCAgJChzaGVsbCBjb21tYW5kIC12ICQoQ0xBTkcpIDJcdTAwM2UvZGV2L251bGwpKVxuJiM0MztcbiYjNDM7aWZuZXEgKCQoSEFWRV9CUEYpLClcbiYjNDM7VEVTVF9HRU5fUFJPR1MgJiM0Mzs9IHRlc3RfbWVtY2dfc3RhdF9jcm9zc19jcHVcbiYjNDM7QlBGX1NSQ1MgOj0gbWVtY2dfc3RhdF9jcm9zc19jcHUuYnBmLmNcbiYjNDM7IyBSZXBsYWNlIGxpYi5tayYjMzk7cyBsaW5rIHJ1bGUgYmVsb3cuXG4mIzQzO09WRVJSSURFX1RBUkdFVFMgOj0gMVxuJiM0MztlbmRpZlxuJiM0MztcbiBpbmNsdWRlIC4uL2xpYi5ta1xuIGluY2x1ZGUgbGliL2xpYmNncm91cC5ta1xuIFxuJiM0MztpZm5lcSAoJChIQVZFX0JQRiksKVxuJiM0MztpbmNsdWRlIC4uL2xpYi5icGYubWtcbiYjNDM7XG4mIzQzOyMgUmVzdG9yZSBsaWIubWsmIzM5O3MgcnVsZSBmb3Igbm9uLUJQRiB0ZXN0cy5cbiYjNDM7TE9DQUxfSERSUyAmIzQzOz0gJChzZWxmZGlyKS9rc2VsZnRlc3RfaGFybmVzcy5oICQoc2VsZmRpcikva3NlbGZ0ZXN0LmhcbiYjNDM7JChPVVRQVVQpLyU6ICUuYyAkKExPQ0FMX0hEUlMpXG4mIzQzO1x0JChjYWxsIG1zZyxDQywsJEApXG4mIzQzO1x0JChRKSQoTElOSy5jKSAkKGZpbHRlci1vdXQgJChMT0NBTF9IRFJTKSwkXikgJChMRExJQlMpIC1vICRAXG4mIzQzO2VuZGlmXG4mIzQzO1xuICQoT1VUUFVUKS90ZXN0X2NvcmU6ICQoTElCQ0dST1VQX08pXG4gJChPVVRQVVQpL3Rlc3RfY3B1OiAkKExJQkNHUk9VUF9PKVxuICQoT1VUUFVUKS90ZXN0X2NwdXNldDogJChMSUJDR1JPVVBfTylcbkBAIC0zMywzICYjNDM7NzAsMTIgQEAgJChPVVRQVVQpL3Rlc3Rfa21lbTogJChMSUJDR1JPVVBfTylcbiAkKE9VVFBVVCkvdGVzdF9tZW1jb250cm9sOiAkKExJQkNHUk9VUF9PKVxuICQoT1VUUFVUKS90ZXN0X3BpZHM6ICQoTElCQ0dST1VQX08pXG4gJChPVVRQVVQpL3Rlc3RfenN3YXA6ICQoTElCQ0dST1VQX08pXG4mIzQzO1xuJiM0MztpZm5lcSAoJChIQVZFX0JQRiksKVxuJiM0MzsjIEtlZXAgaW4tdHJlZSBVQVBJIGhlYWRlcnMgcHJpdmF0ZSB0byB0aGUgQlBGIHRlc3QuXG4mIzQzOyQoT1VUUFVUKS90ZXN0X21lbWNnX3N0YXRfY3Jvc3NfY3B1OiBwcml2YXRlIENGTEFHUyAmIzQzOz0gLUkkKHRvcF9zcmNkaXIpL3Rvb2xzL2luY2x1ZGUvdWFwaVxuJiM0MzsjIExpbmsgY2dyb3VwX3V0aWwgYW5kIHRoZSBza2VsZXRvbiBhZ2FpbnN0IHRoZSBpbi10cmVlIGxpYmJwZi5cbiYjNDM7JChPVVRQVVQpL3Rlc3RfbWVtY2dfc3RhdF9jcm9zc19jcHU6IHRlc3RfbWVtY2dfc3RhdF9jcm9zc19jcHUuYyBcXFxuJiM0MztcdFx0XHRcdFx0JChCUEZfU0tFTFMpICQoTElCQ0dST1VQX08pICQoQlBGT0JKKVxuJiM0MztcdCQoY2FsbCBicGZfbGluaywkQCwkXHUwMDNjICQoTElCQ0dST1VQX08pKVxuJiM0MztlbmRpZlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvY29uZmlnXG5pbmRleCAzOWY5Nzk2OTBkZDNiLi4xZjU4NWVkOWE1OTY3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2NvbmZpZ1xuQEAgLTQsMyAmIzQzOzQsOCBAQCBDT05GSUdfQ0dST1VQX0ZSRUVaRVI9eVxuIENPTkZJR19DR1JPVVBfU0NIRUQ9eVxuIENPTkZJR19NRU1DRz15XG4gQ09ORklHX1BBR0VfQ09VTlRFUj15XG4mIzQzO0NPTkZJR19CUEY9eVxuJiM0MztDT05GSUdfQlBGX1NZU0NBTEw9eVxuJiM0MztDT05GSUdfQlBGX0VWRU5UUz15XG4mIzQzO0NPTkZJR19ERUJVR19JTkZPX0JURj15XG4mIzQzO0NPTkZJR19ERUJVR19JTkZPX0RXQVJGND15XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9jZ3JvdXBfdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9jZ3JvdXBfdXRpbC5jXG5pbmRleCAyNTk2YzEyY2Q4NjQ1Li5jYTEyZDc5NGMwOTIxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9jZ3JvdXBfdXRpbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbGliL2Nncm91cF91dGlsLmNcbkBAIC01NCw2ICYjNDM7NTQsODggQEAgc3NpemVfdCB3cml0ZV90ZXh0KGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc3NpemVfdCBsZW4pXG4gXHRyZXR1cm4gbGVuIFx1MDAzYyAwID8gLWVycm5vIDogbGVuO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGNnX2dldF9pZCAtIHJldHVybiBhIGNncm91cCYjMzk7cyBrZXJuZnMgSURcbiYjNDM7ICogQGNncm91cDogYWJzb2x1dGUgY2dyb3VwIHBhdGhcbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBpcyBjZ3JwLVx1MDAzZWtuLVx1MDAzZWlkLCBub3Qgc3RfaW5vLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IElEIG9yIDAgb24gZmFpbHVyZS5cbiYjNDM7ICovXG4mIzQzO3Vuc2lnbmVkIGxvbmcgbG9uZyBjZ19nZXRfaWQoY29uc3QgY2hhciAqY2dyb3VwKVxuJiM0Mzt7XG4mIzQzO1x0dW5pb24ge1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBsb25nIGlkO1xuJiM0MztcdFx0dW5zaWduZWQgY2hhciByYXdbOF07XG4mIzQzO1x0fSBoYW5kbGU7XG4mIzQzO1x0c3RydWN0IGZpbGVfaGFuZGxlICpmaHAsICpmaHAyO1xuJiM0MztcdGludCBtb3VudF9pZCwgZmhzaXplLCBlcnI7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBsb25nIHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdGZoc2l6ZSA9IHNpemVvZigqZmhwKTtcbiYjNDM7XHRmaHAgPSBjYWxsb2MoMSwgZmhzaXplKTtcbiYjNDM7XHRpZiAoIWZocClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHQvKiBUaGUgZmFpbGVkIHByb2JlIHJlcG9ydHMgdGhlIGNncm91cGZzIGhhbmRsZSBzaXplLiAqL1xuJiM0MztcdGVyciA9IG5hbWVfdG9faGFuZGxlX2F0KEFUX0ZEQ1dELCBjZ3JvdXAsIGZocCwgXHUwMDI2bW91bnRfaWQsIDApO1xuJiM0MztcdGlmIChlcnIgXHUwMDNlPSAwIHx8IGZocC1cdTAwM2VoYW5kbGVfYnl0ZXMgIT0gOClcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRmaHNpemUgPSBzaXplb2YoKmZocCkgJiM0MzsgZmhwLVx1MDAzZWhhbmRsZV9ieXRlcztcbiYjNDM7XHRmaHAyID0gcmVhbGxvYyhmaHAsIGZoc2l6ZSk7XG4mIzQzO1x0aWYgKCFmaHAyKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0ZmhwID0gZmhwMjtcbiYjNDM7XG4mIzQzO1x0aWYgKG5hbWVfdG9faGFuZGxlX2F0KEFUX0ZEQ1dELCBjZ3JvdXAsIGZocCwgXHUwMDI2bW91bnRfaWQsIDApIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdG1lbWNweShoYW5kbGUucmF3LCBmaHAtXHUwMDNlZl9oYW5kbGUsIDgpO1xuJiM0MztcdHJldCA9IGhhbmRsZS5pZDtcbiYjNDM7b3V0OlxuJiM0MztcdGZyZWUoZmhwKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogY2dfdG91Y2hfcGFnZXMgLSBmYXVsdCBldmVyeSBwYWdlIGluIGEgcmVnaW9uXG4mIzQzOyAqIEBidWY6IHN0YXJ0IG9mIHRoZSByZWdpb25cbiYjNDM7ICogQHNpemU6IGxlbmd0aCBvZiB0aGUgcmVnaW9uIGluIGJ5dGVzXG4mIzQzOyAqXG4mIzQzOyAqIFBhZ2VzIGFyZSBjaGFyZ2VkIHRvIHRoZSBjYWxsZXImIzM5O3MgY2dyb3VwIG9uIGl0cyBjdXJyZW50IENQVS5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgY2dfdG91Y2hfcGFnZXMoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdGxvbmcgcGFnZV9zaXplID0gc3lzY29uZihfU0NfUEFHRVNJWkUpO1xuJiM0MztcdGNoYXIgKnB0cjtcbiYjNDM7XG4mIzQzO1x0aWYgKHBhZ2Vfc2l6ZSBcdTAwM2M9IDApXG4mIzQzO1x0XHRwYWdlX3NpemUgPSBCVUZfU0laRTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChwdHIgPSBidWY7IHB0ciBcdTAwM2MgYnVmICYjNDM7IHNpemU7IHB0ciAmIzQzOz0gcGFnZV9zaXplKVxuJiM0MztcdFx0KnB0ciA9IDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBjZ19hbGxvY19hbm9uIC0gYWxsb2NhdGUgYW5kIGZhdWx0IGFub255bW91cyBtZW1vcnlcbiYjNDM7ICogQHNpemU6IGJ5dGVzIHRvIGFsbG9jYXRlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogUmVnaW9uIHRvIGZyZWUoKSwgb3IgTlVMTC5cbiYjNDM7ICovXG4mIzQzO2NoYXIgKmNnX2FsbG9jX2Fub24oc2l6ZV90IHNpemUpXG4mIzQzO3tcbiYjNDM7XHRjaGFyICpidWYgPSBtYWxsb2Moc2l6ZSk7XG4mIzQzO1xuJiM0MztcdGlmICghYnVmKSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7bWFsbG9jKCkgZmFpbGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y2dfdG91Y2hfcGFnZXMoYnVmLCBzaXplKTtcbiYjNDM7XHRyZXR1cm4gYnVmO1xuJiM0Mzt9XG4mIzQzO1xuIGNoYXIgKmNnX25hbWUoY29uc3QgY2hhciAqcm9vdCwgY29uc3QgY2hhciAqbmFtZSlcbiB7XG4gXHRzaXplX3QgbGVuID0gc3RybGVuKHJvb3QpICYjNDM7IHN0cmxlbihuYW1lKSAmIzQzOyAyO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9saWIvaW5jbHVkZS9jZ3JvdXBfdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9pbmNsdWRlL2Nncm91cF91dGlsLmhcbmluZGV4IDhlYmIyYjRkNGVjMDcuLjY0MDc3ODAxODc4MDcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbGliL2luY2x1ZGUvY2dyb3VwX3V0aWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9pbmNsdWRlL2Nncm91cF91dGlsLmhcbkBAIC01NCw2ICYjNDM7NTQsOSBAQCBleHRlcm4gc3NpemVfdCB3cml0ZV90ZXh0KGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc3NpemVfdCBsZW4pO1xuIGV4dGVybiBpbnQgY2dfZmluZF9jb250cm9sbGVyX3Jvb3QoY2hhciAqcm9vdCwgc2l6ZV90IGxlbiwgY29uc3QgY2hhciAqY29udHJvbGxlcik7XG4gZXh0ZXJuIGludCBjZ19maW5kX3VuaWZpZWRfcm9vdChjaGFyICpyb290LCBzaXplX3QgbGVuLCBib29sICpuc2RlbGVnYXRlKTtcbiBleHRlcm4gY2hhciAqY2dfbmFtZShjb25zdCBjaGFyICpyb290LCBjb25zdCBjaGFyICpuYW1lKTtcbiYjNDM7ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBjZ19nZXRfaWQoY29uc3QgY2hhciAqY2dyb3VwKTtcbiYjNDM7ZXh0ZXJuIHZvaWQgY2dfdG91Y2hfcGFnZXMoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSk7XG4mIzQzO2V4dGVybiBjaGFyICpjZ19hbGxvY19hbm9uKHNpemVfdCBzaXplKTtcbiBleHRlcm4gY2hhciAqY2dfbmFtZV9pbmRleGVkKGNvbnN0IGNoYXIgKnJvb3QsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBpbmRleCk7XG4gZXh0ZXJuIGNoYXIgKmNnX2NvbnRyb2woY29uc3QgY2hhciAqY2dyb3VwLCBjb25zdCBjaGFyICpjb250cm9sKTtcbiBleHRlcm4gaW50IGNnX2NyZWF0ZShjb25zdCBjaGFyICpjZ3JvdXApO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9tZW1jZ19zdGF0X2Nyb3NzX2NwdS5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9tZW1jZ19zdGF0X2Nyb3NzX2NwdS5icGYuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmZmZjNiOTI1NmFhMzlcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9tZW1jZ19zdGF0X2Nyb3NzX2NwdS5icGYuY1xuQEAgLTAsMCAmIzQzOzEsMTAxIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbiYjNDM7I2RlZmluZSBCUEZfTk9fS0ZVTkNfUFJPVE9UWVBFU1xuJiM0MzsjaW5jbHVkZSBcdTAwM2N2bWxpbnV4LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9jb3JlX3JlYWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDttZW1jZ19zdGF0X2Nyb3NzX2NwdS5oXCYjMzQ7XG4mIzQzO1xuJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuJiM0MztcbiYjNDM7LyogRW5zdXJlIHRoZSB1cHBlci1ib3VuZCBjaGVja3MgYWxzbyByZWplY3QgbmVnYXRpdmUgQlBGIGFyZ3VtZW50cy4gKi9cbiYjNDM7X1N0YXRpY19hc3NlcnQoKGVudW0gdm1fZXZlbnRfaXRlbSktMSBcdTAwM2U9IE5SX1ZNX0VWRU5UX0lURU1TLFxuJiM0MztcdCAgICAgICBcJiMzNDtuZWdhdGl2ZSB2bV9ldmVudF9pdGVtIG11c3QgZmFpbCB0aGUgYm91bmRzIGNoZWNrXCYjMzQ7KTtcbiYjNDM7X1N0YXRpY19hc3NlcnQoKGVudW0gbWVtY2dfbWVtb3J5X2V2ZW50KS0xIFx1MDAzZT0gTUVNQ0dfTlJfTUVNT1JZX0VWRU5UUyxcbiYjNDM7XHQgICAgICAgXCYjMzQ7bmVnYXRpdmUgbWVtY2dfbWVtb3J5X2V2ZW50IG11c3QgZmFpbCB0aGUgYm91bmRzIGNoZWNrXCYjMzQ7KTtcbiYjNDM7XG4mIzQzOy8qIERlY2xhcmUga2Z1bmNzIHRoYXQgbWF5IGJlIGFic2VudCBmcm9tIHRoZSBidWlsZC10aW1lIHZtbGludXguaC4gKi9cbiYjNDM7c3RydWN0IG1lbV9jZ3JvdXAgKmJwZl9nZXRfbWVtX2Nncm91cChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKSBfX2tzeW07XG4mIzQzO3ZvaWQgYnBmX3B1dF9tZW1fY2dyb3VwKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykgX19rc3ltO1xuJiM0Mzt2b2lkIGJwZl9tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykgX19rc3ltO1xuJiM0Mzt1bnNpZ25lZCBsb25nIGJwZl9tZW1fY2dyb3VwX3BhZ2Vfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KSBfX2tzeW07XG4mIzQzO3Vuc2lnbmVkIGxvbmcgYnBmX21lbV9jZ3JvdXBfdm1fZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiYjNDM7XHRcdFx0XHQgICAgICAgZW51bSB2bV9ldmVudF9pdGVtIGV2ZW50KSBfX2tzeW07XG4mIzQzO1xuJiM0MzsvKiBVc2Vyc3BhY2UgcmVzaXplcyB0aGlzIGNncm91cC1JRCBtYXAgYmVmb3JlIGxvYWQuICovXG4mIzQzO3N0cnVjdCB7XG4mIzQzO1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9IQVNIKTtcbiYjNDM7XHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuJiM0MztcdF9fdHlwZShrZXksIF9fdTY0KTtcbiYjNDM7XHRfX3R5cGUodmFsdWUsIHN0cnVjdCBtZW1jZ19zdGF0X3NuYXBzaG90KTtcbiYjNDM7fSByZXN1bHRzIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4mIzQzO1xuJiM0MzsvKiBJc29sYXRlIGNhcGFiaWxpdHkgZmFpbHVyZXMgZnJvbSB2ZXJpZmllciBmYWlsdXJlcyBpbiB0aGUgdGVzdCBwcm9ncmFtLiAqL1xuJiM0MztTRUMoXCYjMzQ7aXRlci5zL2Nncm91cFwmIzM0OylcbiYjNDM7aW50IG1lbWNnX2tmdW5jc19wcm9iZShzdHJ1Y3QgYnBmX2l0ZXJfX2Nncm91cCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGNncm91cCAqY2dycCA9IGN0eC1cdTAwM2VjZ3JvdXA7XG4mIzQzO1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuJiM0MztcbiYjNDM7XHRpZiAoIWNncnApXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0bWVtY2cgPSBicGZfZ2V0X21lbV9jZ3JvdXAoXHUwMDI2Y2dycC1cdTAwM2VzZWxmKTtcbiYjNDM7XHRpZiAoIW1lbWNnKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGJwZl9tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKG1lbWNnKTtcbiYjNDM7XHRicGZfbWVtX2Nncm91cF9wYWdlX3N0YXRlKG1lbWNnLCAwKTtcbiYjNDM7XHRicGZfbWVtX2Nncm91cF92bV9ldmVudHMobWVtY2csIDApO1xuJiM0MztcdGJwZl9wdXRfbWVtX2Nncm91cChtZW1jZyk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFNsZWVwYWJsZSBpdGVyYXRvcjogZmx1c2ggdGhlIHJvb3Qgb25jZSwgdGhlbiBzbmFwc2hvdCBlYWNoIGNncm91cC4gKi9cbiYjNDM7U0VDKFwmIzM0O2l0ZXIucy9jZ3JvdXBcJiMzNDspXG4mIzQzO2ludCBjZ3JvdXBfbWVtY2dfc3RhdF9jcm9zc19jcHUoc3RydWN0IGJwZl9pdGVyX19jZ3JvdXAgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBjZ3JvdXAgKmNncnAgPSBjdHgtXHUwMDNlY2dyb3VwO1xuJiM0MztcdHN0cnVjdCBtZW1jZ19zdGF0X3NuYXBzaG90IHNuYXAgPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzO1xuJiM0MztcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiYjNDM7XHRpbnQgaWR4X2Fub24sIGlkeF9maWxlLCBpZHhfc2htZW0sIGlkeF9mbWFwcGVkLCBpZHhfcGdmYXVsdDtcbiYjNDM7XHRfX3U2NCBjZ19pZDtcbiYjNDM7XG4mIzQzO1x0LyogSWdub3JlIHRoZSBmaW5hbCBwb3N0LXByb2Nlc3NpbmcgY2FsbC4gKi9cbiYjNDM7XHRpZiAoIWNncnApXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0Y3NzID0gXHUwMDI2Y2dycC1cdTAwM2VzZWxmO1xuJiM0MztcdG1lbWNnID0gYnBmX2dldF9tZW1fY2dyb3VwKGNzcyk7XG4mIzQzO1x0aWYgKCFtZW1jZylcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHQvKiBERVNDRU5EQU5UU19QUkUgdmlzaXRzIHRoZSBzdWJ0cmVlIHJvb3QgZmlyc3QuICovXG4mIzQzO1x0aWYgKGN0eC1cdTAwM2VtZXRhLVx1MDAzZXNlcV9udW0gPT0gMClcbiYjNDM7XHRcdGJwZl9tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKG1lbWNnKTtcbiYjNDM7XG4mIzQzO1x0Y2dfaWQgPSBCUEZfQ09SRV9SRUFEKGNncnAsIGtuLCBpZCk7XG4mIzQzO1x0c25hcC5jZ3JvdXBfaWQgPSBjZ19pZDtcbiYjNDM7XG4mIzQzO1x0aWR4X2Fub24gPSBicGZfY29yZV9lbnVtX3ZhbHVlKGVudW0gbm9kZV9zdGF0X2l0ZW0sIE5SX0FOT05fTUFQUEVEKTtcbiYjNDM7XHRpZHhfZmlsZSA9IGJwZl9jb3JlX2VudW1fdmFsdWUoZW51bSBub2RlX3N0YXRfaXRlbSwgTlJfRklMRV9QQUdFUyk7XG4mIzQzO1x0aWR4X3NobWVtID0gYnBmX2NvcmVfZW51bV92YWx1ZShlbnVtIG5vZGVfc3RhdF9pdGVtLCBOUl9TSE1FTSk7XG4mIzQzO1x0aWR4X2ZtYXBwZWQgPSBicGZfY29yZV9lbnVtX3ZhbHVlKGVudW0gbm9kZV9zdGF0X2l0ZW0sIE5SX0ZJTEVfTUFQUEVEKTtcbiYjNDM7XHRpZHhfcGdmYXVsdCA9IGJwZl9jb3JlX2VudW1fdmFsdWUoZW51bSB2bV9ldmVudF9pdGVtLCBQR0ZBVUxUKTtcbiYjNDM7XG4mIzQzO1x0c25hcC5hbm9uID0gYnBmX21lbV9jZ3JvdXBfcGFnZV9zdGF0ZShtZW1jZywgaWR4X2Fub24pO1xuJiM0MztcdHNuYXAuZmlsZSA9IGJwZl9tZW1fY2dyb3VwX3BhZ2Vfc3RhdGUobWVtY2csIGlkeF9maWxlKTtcbiYjNDM7XHRzbmFwLnNobWVtID0gYnBmX21lbV9jZ3JvdXBfcGFnZV9zdGF0ZShtZW1jZywgaWR4X3NobWVtKTtcbiYjNDM7XHRzbmFwLmZpbGVfbWFwcGVkID0gYnBmX21lbV9jZ3JvdXBfcGFnZV9zdGF0ZShtZW1jZywgaWR4X2ZtYXBwZWQpO1xuJiM0MztcdHNuYXAucGdmYXVsdCA9IGJwZl9tZW1fY2dyb3VwX3ZtX2V2ZW50cyhtZW1jZywgaWR4X3BnZmF1bHQpO1xuJiM0MztcbiYjNDM7XHQvKiBSZWFkIHBhZ2UgY291bnRlcnMgZnJvbSB0aGUgdHJ1c3RlZCBwb2ludGVyLiAqL1xuJiM0MztcdHNuYXAudXNhZ2VfcGFnZXMgPSBCUEZfQ09SRV9SRUFEKG1lbWNnLCBtZW1vcnkudXNhZ2UuY291bnRlcik7XG4mIzQzO1x0c25hcC5tYXhfcGFnZXMgPSBCUEZfQ09SRV9SRUFEKG1lbWNnLCBtZW1vcnkubWF4KTtcbiYjNDM7XG4mIzQzO1x0YnBmX21hcF91cGRhdGVfZWxlbShcdTAwMjZyZXN1bHRzLCBcdTAwMjZjZ19pZCwgXHUwMDI2c25hcCwgQlBGX0FOWSk7XG4mIzQzO1xuJiM0MztcdGJwZl9wdXRfbWVtX2Nncm91cChtZW1jZyk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbWVtY2dfc3RhdF9jcm9zc19jcHUuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9tZW1jZ19zdGF0X2Nyb3NzX2NwdS5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZjc1ZTM0MWY4Y2I4M1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL21lbWNnX3N0YXRfY3Jvc3NfY3B1LmhcbkBAIC0wLDAgJiM0MzsxLDE4IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4mIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbiYjNDM7I2lmbmRlZiBfX01FTUNHX1NUQVRfQ1JPU1NfQ1BVX0hcbiYjNDM7I2RlZmluZSBfX01FTUNHX1NUQVRfQ1JPU1NfQ1BVX0hcbiYjNDM7XG4mIzQzOy8qIEZpeGVkLXdpZHRoIHNuYXBzaG90IHNoYXJlZCBieSBCUEYgYW5kIHVzZXJzcGFjZS4gKi9cbiYjNDM7c3RydWN0IG1lbWNnX3N0YXRfc25hcHNob3Qge1xuJiM0MztcdF9fdTY0IGNncm91cF9pZDtcbiYjNDM7XHRfX3U2NCBhbm9uO1x0XHQvKiBOUl9BTk9OX01BUFBFRCwgYnl0ZXMgKi9cbiYjNDM7XHRfX3U2NCBmaWxlO1x0XHQvKiBOUl9GSUxFX1BBR0VTLCBieXRlcyAqL1xuJiM0MztcdF9fdTY0IHNobWVtO1x0XHQvKiBOUl9TSE1FTSwgYnl0ZXMgKi9cbiYjNDM7XHRfX3U2NCBmaWxlX21hcHBlZDtcdC8qIE5SX0ZJTEVfTUFQUEVELCBieXRlcyAqL1xuJiM0MztcdF9fdTY0IHBnZmF1bHQ7XHRcdC8qIFBHRkFVTFQsIGNvdW50ICovXG4mIzQzO1x0X191NjQgdXNhZ2VfcGFnZXM7XHQvKiBwYWdlX2NvdW50ZXIgbWVtb3J5LnVzYWdlLCBpbiBQQUdFUyAqL1xuJiM0MztcdF9fdTY0IG1heF9wYWdlcztcdC8qIHBhZ2VfY291bnRlciBtZW1vcnkubWF4LCBpbiBQQUdFUyAqL1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2VuZGlmIC8qIF9fTUVNQ0dfU1RBVF9DUk9TU19DUFVfSCAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X21lbWNnX3N0YXRfY3Jvc3NfY3B1LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9tZW1jZ19zdGF0X2Nyb3NzX2NwdS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOTZlNGE0YTk1OGVkYVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfbWVtY2dfc3RhdF9jcm9zc19jcHUuY1xuQEAgLTAsMCAmIzQzOzEsNzU1IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIENvbXBhcmUgbWVtY2cgQlBGIGtmdW5jcyB3aXRoIG1lbW9yeS5zdGF0IG92ZXIgYSBjaGFyZ2VkIHN1YnRyZWUuIENoYXJnZXJzXG4mIzQzOyAqIHNwcmVhZCBhbm9ueW1vdXMgbWVtb3J5IGFjcm9zcyBDUFVzIGFuZCBob2xkIGl0LiBSZWFkIEJQRiBmaXJzdCBzbyBpdHMgZmx1c2hcbiYjNDM7ICogaXMgbm90IGNvbnN1bWVkIGJ5IG1lbW9yeS5zdGF0LCB0aGVuIHJlcXVpcmUgdHdvIGZpbGUgc2FtcGxlcyB0byBicmFja2V0IGVhY2hcbiYjNDM7ICogQlBGIHZhbHVlLiBFYWNoIGxlYWYgbXVzdCBjb3ZlciBpdHMgY2hhcmdlOyByb290IGFub24gbXVzdCBlcXVhbCB0aGUgbGVhZiBzdW0uXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpbWl0cy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGltaXRzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkaW50LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc2NoZWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy93YWl0LmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvbGliYnBmLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2J0Zi5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtrc2VsZnRlc3QuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtjZ3JvdXBfdXRpbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O21lbWNnX3N0YXRfY3Jvc3NfY3B1LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bWVtY2dfc3RhdF9jcm9zc19jcHUuc2tlbC5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFNVQlRSRUVfTkFNRVx0XHRcJiMzNDttY2dfeGNwdVwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBNRU1DR19DSEFSR0VfQkFUQ0hcdDY0XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEZMVVNIX01BUkdJTlx0XHQyXG4mIzQzO1xuJiM0MzsvKiBCb3VuZCB0b3RhbCBjaGFyZ2Ugb24gbGFyZ2Ugc3lzdGVtcy4gKi9cbiYjNDM7I2RlZmluZSBNQVhfVE9UQUxfQ0hBUkdFXHQoMjU2VUwgXHUwMDNjXHUwMDNjIDIwKVxuJiM0MztcbiYjNDM7LyogQm91bmQgdGhlIENQVXMgdXNlZCBieSBlYWNoIGxlYWYuICovXG4mIzQzOyNkZWZpbmUgTUFYX0NQVVNfUEVSX0xFQUZcdDE2XG4mIzQzO1xuJiM0MzsjZGVmaW5lIENIQVJHRV9XQUlUX1JFVFJJRVNcdDUwMFxuJiM0MztcbiYjNDM7c3RhdGljIGNoYXIgcm9vdFtQQVRIX01BWF07XG4mIzQzO3N0YXRpYyBjaGFyICpzdWJ0cmVlX3Jvb3Q7XG4mIzQzO3N0YXRpYyBsb25nIHBhZ2Vfc2l6ZTtcbiYjNDM7XG4mIzQzOy8qIGNncm91cGZzIHZhbHVlcyBpbiBieXRlcy4gKi9cbiYjNDM7c3RydWN0IGZpbGVfc25hcCB7XG4mIzQzO1x0bG9uZyBhbm9uLCBmaWxlLCBzaG1lbSwgZmlsZV9tYXBwZWQsIHBnZmF1bHQ7XG4mIzQzO1x0bG9uZyBjdXJyZW50O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IGNnX25vZGUge1xuJiM0MztcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBsb25nIGlkO1xuJiM0MztcdGJvb2wgaXNfbGVhZjtcdFx0XHQvKiBob2xkcyBhIGNoYXJnZSBvZiBpdHMgb3duICovXG4mIzQzO1x0bG9uZyBwcmV2aW91c19jdXJyZW50O1x0XHQvKiBwcmV2aW91cyBtZW1vcnkuY3VycmVudCBwb2xsICovXG4mIzQzO1x0c3RydWN0IG1lbWNnX3N0YXRfc25hcHNob3QgYnBmO1x0LyogcmVhZCB0aHJvdWdoIHRoZSBrZnVuY3MgKi9cbiYjNDM7XHRzdHJ1Y3QgZmlsZV9zbmFwIGZpbGVbMl07XHQvKiBwb3N0LUJQRiBjZ3JvdXBmcyBzYW1wbGVzICovXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGNnX25vZGUgKm5vZGVzO1x0LyogREZTIG9yZGVyOiBhIHBhcmVudCBwcmVjZWRlcyBpdHMgY2hpbGRyZW4gKi9cbiYjNDM7c3RhdGljIGludCBuX25vZGVzO1xuJiM0MztzdGF0aWMgaW50IG5fbGVhdmVzO1xuJiM0MztcbiYjNDM7LyogLS0tLSBDUFVzIHRoaXMgdGVzdCBtYXkgcnVuIG9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4mIzQzO1xuJiM0MztzdGF0aWMgY3B1X3NldF90IGFsbG93ZWRfY3B1cztcbiYjNDM7c3RhdGljIGludCBuX2NwdTtcbiYjNDM7c3RhdGljIGxvbmcgbl9vbmxpbmVfY3B1O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBudGhfY3B1KGludCBuKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGksIHNlZW4gPSAwO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDUFVfU0VUU0laRTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmICghQ1BVX0lTU0VUKGksIFx1MDAyNmFsbG93ZWRfY3B1cykpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0aWYgKHNlZW4mIzQzOyYjNDM7ID09IG4gJSBuX2NwdSlcbiYjNDM7XHRcdFx0cmV0dXJuIGk7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAtMTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwaW5fY3B1KGludCBjcHUpXG4mIzQzO3tcbiYjNDM7XHRjcHVfc2V0X3Qgc2V0O1xuJiM0MztcbiYjNDM7XHRpZiAoY3B1IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRDUFVfWkVSTyhcdTAwMjZzZXQpO1xuJiM0MztcdENQVV9TRVQoY3B1LCBcdTAwMjZzZXQpO1xuJiM0MztcdHJldHVybiBzY2hlZF9zZXRhZmZpbml0eSgwLCBzaXplb2Yoc2V0KSwgXHUwMDI2c2V0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogLS0tLSB0cmVlIGNvbnN0cnVjdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBhZGRfbm9kZShjb25zdCBjaGFyICpwYXRoLCBib29sIGlzX2xlYWYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgY2dfbm9kZSAqbiA9IFx1MDAyNm5vZGVzW25fbm9kZXNdO1xuJiM0MztcbiYjNDM7XHRpZiAoY2dfY3JlYXRlKHBhdGgpKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRzdHJuY3B5KG4tXHUwMDNlcGF0aCwgcGF0aCwgc2l6ZW9mKG4tXHUwMDNlcGF0aCkgLSAxKTtcbiYjNDM7XHRuLVx1MDAzZWlkID0gY2dfZ2V0X2lkKHBhdGgpO1xuJiM0MztcdG4tXHUwMDNlaXNfbGVhZiA9IGlzX2xlYWY7XG4mIzQzO1x0bi1cdTAwM2VwcmV2aW91c19jdXJyZW50ID0gLTE7XG4mIzQzO1x0aWYgKGlzX2xlYWYpXG4mIzQzO1x0XHRuX2xlYXZlcyYjNDM7JiM0Mzs7XG4mIzQzO1x0bl9ub2RlcyYjNDM7JiM0Mzs7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEJ1aWxkIEBsZXZlbHMgYmVsb3cgQHBhdGg7IG9ubHkgbGVhdmVzIGFyZSBjaGFyZ2VkLiAqL1xuJiM0MztzdGF0aWMgaW50IGJ1aWxkX2NoaWxkcmVuKGNvbnN0IGNoYXIgKnBhdGgsIGludCBmYW5vdXQsIGludCBsZXZlbHMpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGNoaWxkW1BBVEhfTUFYXTtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKGxldmVscyA9PSAwKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdC8qIEdpdmUgY2hpbGQgY2dyb3VwcyBhIG1lbWNnLiAqL1xuJiM0MztcdGlmIChjZ193cml0ZShwYXRoLCBcJiMzNDtjZ3JvdXAuc3VidHJlZV9jb250cm9sXCYjMzQ7LCBcJiMzNDsmIzQzO21lbW9yeVwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGZhbm91dDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHNucHJpbnRmKGNoaWxkLCBzaXplb2YoY2hpbGQpLCBcJiMzNDslcy9jJWRcJiMzNDssIHBhdGgsIGkpO1xuJiM0MztcdFx0aWYgKGFkZF9ub2RlKGNoaWxkLCBsZXZlbHMgPT0gMSkpXG4mIzQzO1x0XHRcdHJldHVybiAtMTtcbiYjNDM7XHRcdGlmIChidWlsZF9jaGlsZHJlbihjaGlsZCwgZmFub3V0LCBsZXZlbHMgLSAxKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHNpemVfdCB0cmVlX2NhcGFjaXR5KGludCBmYW5vdXQsIGludCBkZXB0aClcbiYjNDM7e1xuJiM0MztcdHNpemVfdCB0b3RhbCA9IDEsIGxldmVsID0gMTtcbiYjNDM7XHRpbnQgZDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChkID0gMDsgZCBcdTAwM2MgZGVwdGg7IGQmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRsZXZlbCAqPSBmYW5vdXQ7XG4mIzQzO1x0XHR0b3RhbCAmIzQzOz0gbGV2ZWw7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiB0b3RhbDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBidWlsZF90cmVlKGludCBmYW5vdXQsIGludCBkZXB0aCwgaW50ICpyb290X2ZkKVxuJiM0Mzt7XG4mIzQzO1x0bl9ub2RlcyA9IDA7XG4mIzQzO1x0bl9sZWF2ZXMgPSAwO1xuJiM0MztcdG5vZGVzID0gY2FsbG9jKHRyZWVfY2FwYWNpdHkoZmFub3V0LCBkZXB0aCksIHNpemVvZigqbm9kZXMpKTtcbiYjNDM7XHRpZiAoIW5vZGVzKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRpZiAoYWRkX25vZGUoc3VidHJlZV9yb290LCBkZXB0aCA9PSAwKSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0KnJvb3RfZmQgPSBvcGVuKHN1YnRyZWVfcm9vdCwgT19SRE9OTFkpO1xuJiM0MztcdGlmICgqcm9vdF9mZCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGJ1aWxkX2NoaWxkcmVuKHN1YnRyZWVfcm9vdCwgZmFub3V0LCBkZXB0aCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIERlc3Ryb3kgY2hpbGRyZW4gYmVmb3JlIHBhcmVudHMsIHRoZW4gcmVhcCBjaGFyZ2Vycy4gKi9cbiYjNDM7c3RhdGljIHZvaWQgZGVzdHJveV90cmVlKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFub2RlcylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gbl9ub2RlcyAtIDE7IGkgXHUwMDNlPSAwOyBpLS0pXG4mIzQzO1x0XHRjZ19kZXN0cm95KG5vZGVzW2ldLnBhdGgpO1xuJiM0MztcdGZyZWUobm9kZXMpO1xuJiM0MztcdG5vZGVzID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKHdhaXRwaWQoLTEsIE5VTEwsIDApIFx1MDAzZSAwKVxuJiM0MztcdFx0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiAtLS0tIGNyb3NzLUNQVSBjaGFyZ2UgKG9uZSBjaGlsZCBwZXIgbGVhZikgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4mIzQzO1xuJiM0MztzdHJ1Y3QgY2hhcmdlX2FyZ3Mge1xuJiM0MztcdHNpemVfdCBieXRlcztcdC8qIGFub24gdGhpcyBsZWFmIGhvbGRzICovXG4mIzQzO1x0aW50IGJhc2U7XHQvKiBpbmRleCBvZiB0aGUgZmlyc3QgQ1BVIHRvIGZhdWx0IG9uICovXG4mIzQzO1x0aW50IGs7XHRcdC8qIENQVXMgdG8gc3ByZWFkIHRoZSBjaGFyZ2Ugb3ZlciAqL1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBjaGFyZ2VfbGVhZihjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZylcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBjaGFyZ2VfYXJncyAqY2EgPSBhcmc7XG4mIzQzO1x0aW50IHBwaWQgPSBnZXRwcGlkKCk7XG4mIzQzO1x0c2l6ZV90IHBlciwgb2ZmO1xuJiM0MztcdGNoYXIgKmJ1ZjtcbiYjNDM7XHRpbnQgajtcbiYjNDM7XG4mIzQzO1x0YnVmID0gbWFsbG9jKGNhLVx1MDAzZWJ5dGVzKTtcbiYjNDM7XHRpZiAoIWJ1Zikge1xuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O21hbGxvYygpIGZhaWxlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBLZWVwIGVhY2ggQ1BVJiMzOTtzIHNsaWNlIHBhZ2UtYWxpZ25lZC4gKi9cbiYjNDM7XHRwZXIgPSBjYS1cdTAwM2VieXRlcyAvIGNhLVx1MDAzZWsgLyBwYWdlX3NpemUgKiBwYWdlX3NpemU7XG4mIzQzO1xuJiM0MztcdGZvciAoaiA9IDA7IGogXHUwMDNjIGNhLVx1MDAzZWs7IGomIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRvZmYgPSAoc2l6ZV90KWogKiBwZXI7XG4mIzQzO1x0XHRpZiAocGluX2NwdShudGhfY3B1KGNhLVx1MDAzZWJhc2UgJiM0MzsgaikpKSB7XG4mIzQzO1x0XHRcdGZyZWUoYnVmKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0Y2dfdG91Y2hfcGFnZXMoYnVmICYjNDM7IG9mZixcbiYjNDM7XHRcdFx0ICAgICAgIGogPT0gY2EtXHUwMDNlayAtIDEgPyBjYS1cdTAwM2VieXRlcyAtIG9mZiA6IHBlcik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR3aGlsZSAoZ2V0cHBpZCgpID09IHBwaWQpXG4mIzQzO1x0XHRzbGVlcCgxKTtcbiYjNDM7XG4mIzQzO1x0ZnJlZShidWYpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGxlYWZfY2hhcmdlKHNpemVfdCB3YW50LCBpbnQgaywgc2l6ZV90ICpieXRlcylcbiYjNDM7e1xuJiM0MztcdHNpemVfdCBtaW5fcGFnZXMsIHBhZ2VzLCB3YW50X3BhZ2VzO1xuJiM0MztcbiYjNDM7XHRpZiAoKHNpemVfdCluX29ubGluZV9jcHUgXHUwMDNlIFNJWkVfTUFYIC8gRkxVU0hfTUFSR0lOIC9cbiYjNDM7XHRcdFx0XHRcdCBNRU1DR19DSEFSR0VfQkFUQ0gpXG4mIzQzO1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiYjNDM7XG4mIzQzO1x0LyogRm9yY2UgbW9yZSB0aGFuIG9uZSBwZW5kaW5nIGJhdGNoIHBlciBDUFUgYWNyb3NzIHRoZSBzdWJ0cmVlLiAqL1xuJiM0MztcdG1pbl9wYWdlcyA9IChzaXplX3QpRkxVU0hfTUFSR0lOICogTUVNQ0dfQ0hBUkdFX0JBVENIICogbl9vbmxpbmVfY3B1O1xuJiM0MztcdHBhZ2VzID0gbWluX3BhZ2VzIC8gbl9sZWF2ZXMgJiM0MzsgISEobWluX3BhZ2VzICUgbl9sZWF2ZXMpO1xuJiM0MztcdHdhbnRfcGFnZXMgPSB3YW50IC8gcGFnZV9zaXplICYjNDM7ICEhKHdhbnQgJSBwYWdlX3NpemUpO1xuJiM0MztcdGlmIChwYWdlcyBcdTAwM2Mgd2FudF9wYWdlcylcbiYjNDM7XHRcdHBhZ2VzID0gd2FudF9wYWdlcztcbiYjNDM7XHRpZiAocGFnZXMgXHUwMDNjIChzaXplX3QpaylcbiYjNDM7XHRcdHBhZ2VzID0gaztcbiYjNDM7XG4mIzQzO1x0aWYgKHBhZ2VzIFx1MDAzZSBNQVhfVE9UQUxfQ0hBUkdFIC8gKHNpemVfdCluX2xlYXZlcyAvIHBhZ2Vfc2l6ZSlcbiYjNDM7XHRcdHJldHVybiAtRTJCSUc7XG4mIzQzO1xuJiM0MztcdCpieXRlcyA9IHBhZ2VzICogcGFnZV9zaXplO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHN0YXJ0X2NoYXJnZXJzKGludCBrLCBzaXplX3QgYnl0ZXMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgY2hhcmdlX2FyZ3MgY2EgPSB7IC5ieXRlcyA9IGJ5dGVzLCAuayA9IGsgfTtcbiYjNDM7XHRsb25nIHByZXYsIGN1cjtcbiYjNDM7XHRib29sIHJlYWR5O1xuJiM0MztcdGludCBpLCByZXRyaWVzO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuX25vZGVzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKCFub2Rlc1tpXS5pc19sZWFmKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdGlmIChjZ19ydW5fbm93YWl0KG5vZGVzW2ldLnBhdGgsIGNoYXJnZV9sZWFmLCBcdTAwMjZjYSkgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7Y2Fubm90IHN0YXJ0IGEgY2hhcmdlciBvbiAlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgICAgbm9kZXNbaV0ucGF0aCk7XG4mIzQzO1x0XHRcdHJldHVybiAtMTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGNhLmJhc2UgJiM0Mzs9IGs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBXYWl0IHVudGlsIGV2ZXJ5IGxlYWYgaXMgZnVsbHkgY2hhcmdlZCBhbmQgc3RhYmxlLiAqL1xuJiM0MztcdGZvciAocmV0cmllcyA9IENIQVJHRV9XQUlUX1JFVFJJRVM7IHJldHJpZXM7IHJldHJpZXMtLSkge1xuJiM0MztcdFx0cmVhZHkgPSB0cnVlO1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgbl9ub2RlczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0aWYgKCFub2Rlc1tpXS5pc19sZWFmKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdFx0Y3VyID0gY2dfcmVhZF9sb25nKG5vZGVzW2ldLnBhdGgsIFwmIzM0O21lbW9yeS5jdXJyZW50XCYjMzQ7KTtcbiYjNDM7XHRcdFx0aWYgKGN1ciBcdTAwM2MgMCkge1xuJiM0MztcdFx0XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O2Nhbm5vdCByZWFkICVzL21lbW9yeS5jdXJyZW50OiAlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBub2Rlc1tpXS5wYXRoLCBzdHJlcnJvcihlcnJubykpO1xuJiM0MztcdFx0XHRcdHJldHVybiAtMTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0cHJldiA9IG5vZGVzW2ldLnByZXZpb3VzX2N1cnJlbnQ7XG4mIzQzO1x0XHRcdG5vZGVzW2ldLnByZXZpb3VzX2N1cnJlbnQgPSBjdXI7XG4mIzQzO1x0XHRcdGlmIChjdXIgXHUwMDNjIChsb25nKWJ5dGVzIHx8IGN1ciAhPSBwcmV2KVxuJiM0MztcdFx0XHRcdHJlYWR5ID0gZmFsc2U7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAocmVhZHkpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0dXNsZWVwKERFRkFVTFRfV0FJVF9JTlRFUlZBTF9VUyAvIDEwKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5fbm9kZXM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAobm9kZXNbaV0uaXNfbGVhZiBcdTAwMjZcdTAwMjYgbm9kZXNbaV0ucHJldmlvdXNfY3VycmVudCBcdTAwM2MgKGxvbmcpYnl0ZXMpIHtcbiYjNDM7XHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7JXMgcmVhY2hlZCBvbmx5ICVsZCBvZiAlenUgY2hhcmdlZCBieXRlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgICAgbm9kZXNbaV0ucGF0aCwgbm9kZXNbaV0ucHJldmlvdXNfY3VycmVudCxcbiYjNDM7XHRcdFx0XHQgICAgICAgYnl0ZXMpO1xuJiM0MztcdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O21lbW9yeS5jdXJyZW50IGRpZCBub3Qgc2V0dGxlIGJlZm9yZSB0aGUgdGltZW91dFxcblwmIzM0Oyk7XG4mIzQzO1x0cmV0dXJuIC0xO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiAtLS0tIHRoZSB0d28gcmVhZGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4mIzQzO1xuJiM0MzsvKiBGbHVzaCB0aGUgc3VidHJlZSBhbmQgY29sbGVjdCBlYWNoIGNncm91cCYjMzk7cyBrZnVuYyB2YWx1ZXMuICovXG4mIzQzO3N0YXRpYyBpbnQgcmVhZF9icGYoaW50IHJvb3RfZmQpXG4mIzQzO3tcbiYjNDM7XHRERUNMQVJFX0xJQkJQRl9PUFRTKGJwZl9pdGVyX2F0dGFjaF9vcHRzLCBvcHRzKTtcbiYjNDM7XHRzdHJ1Y3QgbWVtY2dfc3RhdF9jcm9zc19jcHUgKnNrZWwgPSBOVUxMO1xuJiM0MztcdHVuaW9uIGJwZl9pdGVyX2xpbmtfaW5mbyBsaW5mbyA9IHt9O1xuJiM0MztcdHN0cnVjdCBicGZfbGluayAqbGluayA9IE5VTEw7XG4mIzQzO1x0aW50IHJldCA9IC0xLCBlcnIsIGksIG1mZCwgZmQ7XG4mIzQzO1x0Y2hhciBidWZbNDA5Nl07XG4mIzQzO1x0c3NpemVfdCByO1xuJiM0MztcbiYjNDM7XHRza2VsID0gbWVtY2dfc3RhdF9jcm9zc19jcHVfX29wZW4oKTtcbiYjNDM7XHRpZiAoIXNrZWwpIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O3NrZWwgb3BlbiBmYWlsZWQ6ICVzICglZClcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgICBzdHJlcnJvcihlcnJubyksIGVycm5vKTtcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHR9XG4mIzQzO1x0ZXJyID0gYnBmX3Byb2dyYW1fX3NldF9hdXRvbG9hZChza2VsLVx1MDAzZXByb2dzLm1lbWNnX2tmdW5jc19wcm9iZSwgZmFsc2UpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O2Rpc2FibGluZyBjYXBhYmlsaXR5IHByb2JlIGZhaWxlZDogJXMgKCVkKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgIHN0cmVycm9yKC1lcnIpLCBlcnIpO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcdGVyciA9IGJwZl9tYXBfX3NldF9tYXhfZW50cmllcyhza2VsLVx1MDAzZW1hcHMucmVzdWx0cywgbl9ub2RlcyAmIzQzOyA4KTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtzZXQgbWF4X2VudHJpZXMgZmFpbGVkOiAlcyAoJWQpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICAgc3RyZXJyb3IoLWVyciksIGVycik7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1x0ZXJyID0gbWVtY2dfc3RhdF9jcm9zc19jcHVfX2xvYWQoc2tlbCk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7c2tlbCBsb2FkIGZhaWxlZDogJXMgKCVkKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgIHN0cmVycm9yKC1lcnIpLCBlcnIpO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRsaW5mby5jZ3JvdXAuY2dyb3VwX2ZkID0gcm9vdF9mZDtcbiYjNDM7XHRsaW5mby5jZ3JvdXAub3JkZXIgPSBCUEZfQ0dST1VQX0lURVJfREVTQ0VOREFOVFNfUFJFO1xuJiM0MztcdG9wdHMubGlua19pbmZvID0gXHUwMDI2bGluZm87XG4mIzQzO1x0b3B0cy5saW5rX2luZm9fbGVuID0gc2l6ZW9mKGxpbmZvKTtcbiYjNDM7XG4mIzQzO1x0bGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfaXRlcihza2VsLVx1MDAzZXByb2dzLmNncm91cF9tZW1jZ19zdGF0X2Nyb3NzX2NwdSxcbiYjNDM7XHRcdFx0XHRcdFx1MDAyNm9wdHMpO1xuJiM0MztcdGVyciA9IGxpYmJwZl9nZXRfZXJyb3IobGluayk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0bGluayA9IE5VTEw7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDthdHRhY2ggaXRlciBmYWlsZWQ6ICVzICglZClcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgICBzdHJlcnJvcigtZXJyKSwgZXJyKTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZmQgPSBicGZfaXRlcl9jcmVhdGUoYnBmX2xpbmtfX2ZkKGxpbmspKTtcbiYjNDM7XHRpZiAoZmQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O2JwZl9pdGVyX2NyZWF0ZSBmYWlsZWQ6ICVzICglZClcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgICBzdHJlcnJvcihlcnJubyksIGVycm5vKTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XHRkbyB7XG4mIzQzO1x0XHRyID0gcmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSk7XG4mIzQzO1x0fSB3aGlsZSAociBcdTAwM2UgMCB8fCAociBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgZXJybm8gPT0gRUlOVFIpKTtcbiYjNDM7XHRlcnIgPSBlcnJubztcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO1x0aWYgKHIgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O2JwZiB3YWxrIGZhaWxlZDogJXMgKCVkKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgIHN0cmVycm9yKGVyciksIGVycik7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG1mZCA9IGJwZl9tYXBfX2ZkKHNrZWwtXHUwMDNlbWFwcy5yZXN1bHRzKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuX25vZGVzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGlmIChicGZfbWFwX2xvb2t1cF9lbGVtKG1mZCwgXHUwMDI2bm9kZXNbaV0uaWQsIFx1MDAyNm5vZGVzW2ldLmJwZikpIHtcbiYjNDM7XHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7bm8gbWFwIGVudHJ5IGZvciAlczogJXMgKCVkKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgICAgbm9kZXNbaV0ucGF0aCwgc3RyZXJyb3IoZXJybm8pLCBlcnJubyk7XG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0fVxuJiM0MztcdHJldCA9IDA7XG4mIzQzO291dDpcbiYjNDM7XHRicGZfbGlua19fZGVzdHJveShsaW5rKTtcbiYjNDM7XHRtZW1jZ19zdGF0X2Nyb3NzX2NwdV9fZGVzdHJveShza2VsKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBSZWFkIG9uZSBjZ3JvdXBmcyBzbmFwc2hvdC4gKi9cbiYjNDM7c3RhdGljIGludCByZWFkX2ZpbGVzKGludCBzbG90KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5fbm9kZXM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRjb25zdCBjaGFyICpwYXRoID0gbm9kZXNbaV0ucGF0aDtcbiYjNDM7XHRcdHN0cnVjdCBmaWxlX3NuYXAgKmYgPSBcdTAwMjZub2Rlc1tpXS5maWxlW3Nsb3RdO1xuJiM0MztcbiYjNDM7XHRcdGYtXHUwMDNlYW5vbiA9IGNnX3JlYWRfa2V5X2xvbmcocGF0aCwgXCYjMzQ7bWVtb3J5LnN0YXRcJiMzNDssIFwmIzM0O2Fub24gXCYjMzQ7KTtcbiYjNDM7XHRcdGYtXHUwMDNlZmlsZSA9IGNnX3JlYWRfa2V5X2xvbmcocGF0aCwgXCYjMzQ7bWVtb3J5LnN0YXRcJiMzNDssIFwmIzM0O2ZpbGUgXCYjMzQ7KTtcbiYjNDM7XHRcdGYtXHUwMDNlc2htZW0gPSBjZ19yZWFkX2tleV9sb25nKHBhdGgsIFwmIzM0O21lbW9yeS5zdGF0XCYjMzQ7LCBcJiMzNDtzaG1lbSBcJiMzNDspO1xuJiM0MztcdFx0Zi1cdTAwM2VmaWxlX21hcHBlZCA9IGNnX3JlYWRfa2V5X2xvbmcocGF0aCwgXCYjMzQ7bWVtb3J5LnN0YXRcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRcdCAgXCYjMzQ7ZmlsZV9tYXBwZWQgXCYjMzQ7KTtcbiYjNDM7XHRcdGYtXHUwMDNlcGdmYXVsdCA9IGNnX3JlYWRfa2V5X2xvbmcocGF0aCwgXCYjMzQ7bWVtb3J5LnN0YXRcJiMzNDssIFwmIzM0O3BnZmF1bHQgXCYjMzQ7KTtcbiYjNDM7XHRcdGYtXHUwMDNlY3VycmVudCA9IGNnX3JlYWRfbG9uZyhwYXRoLCBcJiMzNDttZW1vcnkuY3VycmVudFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGYtXHUwMDNlYW5vbiBcdTAwM2MgMCB8fCBmLVx1MDAzZWZpbGUgXHUwMDNjIDAgfHwgZi1cdTAwM2VzaG1lbSBcdTAwM2MgMCB8fFxuJiM0MztcdFx0ICAgIGYtXHUwMDNlZmlsZV9tYXBwZWQgXHUwMDNjIDAgfHwgZi1cdTAwM2VwZ2ZhdWx0IFx1MDAzYyAwIHx8IGYtXHUwMDNlY3VycmVudCBcdTAwM2MgMCkge1xuJiM0MztcdFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtyZWFkaW5nIHRoZSBzdGF0cyBvZiAlcyBmYWlsZWRcXG5cJiMzNDssIHBhdGgpO1xuJiM0MztcdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiAtLS0tIGNvbXBhcmlzb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBkdW1wX25vZGUoY29uc3Qgc3RydWN0IGNnX25vZGUgKm4pXG4mIzQzO3tcbiYjNDM7XHRpbnQgcztcbiYjNDM7XG4mIzQzO1x0a3NmdF9wcmludF9tc2coXCYjMzQ7JXMgYnBmICAgOiBhbm9uPSVsbHUgZmlsZT0lbGx1IHNobWVtPSVsbHUgZm1hcHBlZD0lbGx1IHBnZmF1bHQ9JWxsdVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgICAgICBuLVx1MDAzZXBhdGgsIG4tXHUwMDNlYnBmLmFub24sIG4tXHUwMDNlYnBmLmZpbGUsIG4tXHUwMDNlYnBmLnNobWVtLFxuJiM0MztcdFx0ICAgICAgIG4tXHUwMDNlYnBmLmZpbGVfbWFwcGVkLCBuLVx1MDAzZWJwZi5wZ2ZhdWx0KTtcbiYjNDM7XHRmb3IgKHMgPSAwOyBzIFx1MDAzYyAyOyBzJiM0MzsmIzQzOylcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0OyVzIGZpbGUlZDogYW5vbj0lbGQgZmlsZT0lbGQgc2htZW09JWxkIGZtYXBwZWQ9JWxkIHBnZmF1bHQ9JWxkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICAgbi1cdTAwM2VwYXRoLCBzLCBuLVx1MDAzZWZpbGVbc10uYW5vbiwgbi1cdTAwM2VmaWxlW3NdLmZpbGUsXG4mIzQzO1x0XHRcdCAgICAgICBuLVx1MDAzZWZpbGVbc10uc2htZW0sIG4tXHUwMDNlZmlsZVtzXS5maWxlX21hcHBlZCxcbiYjNDM7XHRcdFx0ICAgICAgIG4tXHUwMDNlZmlsZVtzXS5wZ2ZhdWx0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogRXF1YWwgZmlsZSBzYW1wbGVzIHJlcXVpcmUgYW4gZXhhY3QgQlBGIG1hdGNoOyBvdGhlcndpc2UgYWNjZXB0IHRoZWlyIHJhbmdlLiAqL1xuJiM0MztzdGF0aWMgYm9vbCBicmFja2V0ZWQodW5zaWduZWQgbG9uZyBsb25nIHYsIGxvbmcgYSwgbG9uZyBiKVxuJiM0Mzt7XG4mIzQzO1x0bG9uZyBsbyA9IGEgXHUwMDNjIGIgPyBhIDogYjtcbiYjNDM7XHRsb25nIGhpID0gYSBcdTAwM2MgYiA/IGIgOiBhO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdiBcdTAwM2U9ICh1bnNpZ25lZCBsb25nIGxvbmcpbG8gXHUwMDI2XHUwMDI2IHYgXHUwMDNjPSAodW5zaWduZWQgbG9uZyBsb25nKWhpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGNoZWNrX3RyZWUoc2l6ZV90IGNoYXJnZWQpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGxvbmcgcm9vdF9hbm9uID0gMCwgbGVhZl9hbm9uID0gMDtcbiYjNDM7XHRpbnQgaSwgYmFkID0gMDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgbl9ub2RlczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBjZ19ub2RlICpuID0gXHUwMDI2bm9kZXNbaV07XG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgbWVtY2dfc3RhdF9zbmFwc2hvdCAqYiA9IFx1MDAyNm4tXHUwMDNlYnBmO1xuJiM0MztcdFx0Y29uc3Qgc3RydWN0IGZpbGVfc25hcCAqZjAgPSBcdTAwMjZuLVx1MDAzZWZpbGVbMF0sICpmMSA9IFx1MDAyNm4tXHUwMDNlZmlsZVsxXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWJyYWNrZXRlZChiLVx1MDAzZWFub24sIGYwLVx1MDAzZWFub24sIGYxLVx1MDAzZWFub24pIHx8XG4mIzQzO1x0XHQgICAgIWJyYWNrZXRlZChiLVx1MDAzZWZpbGUsIGYwLVx1MDAzZWZpbGUsIGYxLVx1MDAzZWZpbGUpIHx8XG4mIzQzO1x0XHQgICAgIWJyYWNrZXRlZChiLVx1MDAzZXNobWVtLCBmMC1cdTAwM2VzaG1lbSwgZjEtXHUwMDNlc2htZW0pIHx8XG4mIzQzO1x0XHQgICAgIWJyYWNrZXRlZChiLVx1MDAzZWZpbGVfbWFwcGVkLCBmMC1cdTAwM2VmaWxlX21hcHBlZCxcbiYjNDM7XHRcdFx0ICAgICAgIGYxLVx1MDAzZWZpbGVfbWFwcGVkKSB8fFxuJiM0MztcdFx0ICAgICFicmFja2V0ZWQoYi1cdTAwM2VwZ2ZhdWx0LCBmMC1cdTAwM2VwZ2ZhdWx0LCBmMS1cdTAwM2VwZ2ZhdWx0KSkge1xuJiM0MztcdFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtrZnVuY3MgZGlzYWdyZWUgd2l0aCBtZW1vcnkuc3RhdFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGR1bXBfbm9kZShuKTtcbiYjNDM7XHRcdFx0YmFkJiM0MzsmIzQzOztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHQvKiBMaXZlIHBhZ2UgY291bnRlcnMgYXJlIGJvdW5kcywgbm90IGZsdXNoZWQgc3RhdGlzdGljcy4gKi9cbiYjNDM7XHRcdGlmIChiLVx1MDAzZWFub24gXHUwMDNlIGItXHUwMDNldXNhZ2VfcGFnZXMgKiAodW5zaWduZWQgbG9uZyBsb25nKXBhZ2Vfc2l6ZSB8fFxuJiM0MztcdFx0ICAgIGYxLVx1MDAzZWFub24gXHUwMDNlIGYxLVx1MDAzZWN1cnJlbnQpIHtcbiYjNDM7XHRcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7JXM6IGFub24gYWJvdmUgdXNhZ2U6IGJwZiAlbGx1LyVsbHUgZmlsZSAlbGQvJWxkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgICBuLVx1MDAzZXBhdGgsIGItXHUwMDNlYW5vbixcbiYjNDM7XHRcdFx0XHQgICAgICAgYi1cdTAwM2V1c2FnZV9wYWdlcyAqICh1bnNpZ25lZCBsb25nIGxvbmcpcGFnZV9zaXplLFxuJiM0MztcdFx0XHRcdCAgICAgICBmMS1cdTAwM2Vhbm9uLCBmMS1cdTAwM2VjdXJyZW50KTtcbiYjNDM7XHRcdFx0YmFkJiM0MzsmIzQzOztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAobi1cdTAwM2Vpc19sZWFmKSB7XG4mIzQzO1x0XHRcdGlmIChiLVx1MDAzZWFub24gXHUwMDNjIGNoYXJnZWQpIHtcbiYjNDM7XHRcdFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDslczogZmx1c2hlZCBhbm9uICVsbHUsIGNoYXJnZWQgJXp1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIG4tXHUwMDNlcGF0aCwgYi1cdTAwM2Vhbm9uLCBjaGFyZ2VkKTtcbiYjNDM7XHRcdFx0XHRiYWQmIzQzOyYjNDM7O1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGxlYWZfYW5vbiAmIzQzOz0gYi1cdTAwM2Vhbm9uO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0aWYgKGkgPT0gMClcbiYjNDM7XHRcdFx0cm9vdF9hbm9uID0gYi1cdTAwM2Vhbm9uO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHJvb3RfYW5vbiAhPSBsZWFmX2Fub24pIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O3N1YnRyZWUgcm9vdCBhbm9uICVsbHUsIHN1bSBvZiB0aGUgbGVhdmVzICVsbHVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgICByb290X2Fub24sIGxlYWZfYW5vbik7XG4mIzQzO1x0XHRiYWQmIzQzOyYjNDM7O1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gYmFkID8gLTEgOiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBBY2NlcHQgUEFHRV9DT1VOVEVSX01BWCB2YWx1ZXMgZnJvbSBlaXRoZXIgMzItIG9yIDY0LWJpdCBrZXJuZWxzLiAqL1xuJiM0MztzdGF0aWMgaW50IGNoZWNrX3VubGltaXRlZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBsb25nIG1heDY0ID0gKHVuc2lnbmVkIGxvbmcgbG9uZylJTlQ2NF9NQVggLyBwYWdlX3NpemU7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBsb25nIG1heDMyID0gSU5UMzJfTUFYO1xuJiM0MztcbiYjNDM7XHRpZiAoY2dfcmVhZF9zdHJjbXAobm9kZXNbMF0ucGF0aCwgXCYjMzQ7bWVtb3J5Lm1heFwmIzM0OywgXCYjMzQ7bWF4XFxuXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAobm9kZXNbMF0uYnBmLm1heF9wYWdlcyAhPSBtYXg2NCBcdTAwMjZcdTAwMjYgbm9kZXNbMF0uYnBmLm1heF9wYWdlcyAhPSBtYXgzMikge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7bWVtb3J5Lm1heCByZWFkcyBtYXgsIGtmdW5jIHJlcG9ydHMgJWxsdSBwYWdlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgIG5vZGVzWzBdLmJwZi5tYXhfcGFnZXMpO1xuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogLS0tLSBvbmUgY2FzZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuJiM0MztcbiYjNDM7c3RydWN0IHRlc3RjYXNlIHtcbiYjNDM7XHRjb25zdCBjaGFyICpuYW1lO1xuJiM0MztcdGludCBmYW5vdXQ7XG4mIzQzO1x0aW50IGRlcHRoO1xuJiM0MztcdGludCBjcHVzX3Blcl9sZWFmO1x0LyogSywgb3IgMCBmb3IgdGhlIGJvdW5kZWQgY3Jvc3MtQ1BVIGNvdW50ICovXG4mIzQzO1x0c2l6ZV90IHJlc2lkZW50X2J5dGVzO1x0LyogYW5vbiBwZXIgbGVhZiwgcmFpc2VkIGlmIHRvbyBzbWFsbCAqL1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBydW5fY2FzZShjb25zdCBzdHJ1Y3QgdGVzdGNhc2UgKnRjKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJvb3RfZmQgPSAtMSwgcmV0ID0gS1NGVF9GQUlMLCBlcnIsIGs7XG4mIzQzO1x0c2l6ZV90IGNoYXJnZWQ7XG4mIzQzO1xuJiM0MztcdGlmIChidWlsZF90cmVlKHRjLVx1MDAzZWZhbm91dCwgdGMtXHUwMDNlZGVwdGgsIFx1MDAyNnJvb3RfZmQpKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtjYW5ub3QgYnVpbGQgdGhlIHRyZWVcXG5cJiMzNDspO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRrID0gdGMtXHUwMDNlY3B1c19wZXJfbGVhZjtcbiYjNDM7XHRpZiAoayBcdTAwM2M9IDApXG4mIzQzO1x0XHRrID0gbl9jcHUgXHUwMDNjIE1BWF9DUFVTX1BFUl9MRUFGID8gbl9jcHUgOiBNQVhfQ1BVU19QRVJfTEVBRjtcbiYjNDM7XHRlbHNlIGlmIChrIFx1MDAzZSBuX2NwdSlcbiYjNDM7XHRcdGsgPSBuX2NwdTtcbiYjNDM7XHRlcnIgPSBsZWFmX2NoYXJnZSh0Yy1cdTAwM2VyZXNpZGVudF9ieXRlcywgaywgXHUwMDI2Y2hhcmdlZCk7XG4mIzQzO1x0aWYgKGVyciA9PSAtRTJCSUcpIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0OyVzIG5lZWRzIG1vcmUgdGhhbiAlbHVNQiB0byB0cmlnZ2VyIGEgZmx1c2ggb24gJWxkIG9ubGluZSBDUFVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICAgdGMtXHUwMDNlbmFtZSwgTUFYX1RPVEFMX0NIQVJHRSBcdTAwM2VcdTAwM2UgMjAsIG5fb25saW5lX2NwdSk7XG4mIzQzO1x0XHRyZXQgPSBLU0ZUX1NLSVA7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7Y2Fubm90IGNhbGN1bGF0ZSB0aGUgY2hhcmdlIGZvciAlczogJXMgKCVkKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgIHRjLVx1MDAzZW5hbWUsIHN0cmVycm9yKC1lcnIpLCBlcnIpO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRrc2Z0X3ByaW50X21zZyhcJiMzNDslczogJWQgY2dyb3VwcywgJWQgbGVhdmVzLCAlZC8lZCBjcHVzLCAlenVLQiBwZXIgbGVhZlxcblwmIzM0OyxcbiYjNDM7XHRcdCAgICAgICB0Yy1cdTAwM2VuYW1lLCBuX25vZGVzLCBuX2xlYXZlcywgaywgbl9jcHUsIGNoYXJnZWQgXHUwMDNlXHUwMDNlIDEwKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHN0YXJ0X2NoYXJnZXJzKGssIGNoYXJnZWQpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdC8qIFJlYWQgQlBGIGZpcnN0OyBtZW1vcnkuc3RhdCB3b3VsZCBjb25zdW1lIHRoZSBwZW5kaW5nIGZsdXNoLiAqL1xuJiM0MztcdGlmIChyZWFkX2JwZihyb290X2ZkKSB8fCByZWFkX2ZpbGVzKDApIHx8IHJlYWRfZmlsZXMoMSkpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFjaGVja190cmVlKGNoYXJnZWQpIFx1MDAyNlx1MDAyNiAhY2hlY2tfdW5saW1pdGVkKCkpXG4mIzQzO1x0XHRyZXQgPSBLU0ZUX1BBU1M7XG4mIzQzO291dDpcbiYjNDM7XHRpZiAocm9vdF9mZCBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZShyb290X2ZkKTtcbiYjNDM7XHRkZXN0cm95X3RyZWUoKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHRlc3RjYXNlIGNhc2VzW10gPSB7XG4mIzQzO1x0LyogbmFtZSwgZmFub3V0LCBkZXB0aCwgSywgYW5vbiBwZXIgbGVhZiAqL1xuJiM0MztcdHsgXCYjMzQ7c2luZ2xlX2NwdV9zbWFsbF90cmVlXCYjMzQ7LCA0LCAyLCAxLCAyIFx1MDAzY1x1MDAzYyAyMCB9LFxuJiM0MztcdHsgXCYjMzQ7Y3Jvc3NfY3B1X3NtYWxsX3RyZWVcJiMzNDssIDQsIDIsIDAsIDIgXHUwMDNjXHUwMDNjIDIwIH0sXG4mIzQzO1x0eyBcJiMzNDtzaW5nbGVfY3B1X2xhcmdlX3RyZWVcJiMzNDssIDQsIDMsIDEsIDI1NiBcdTAwM2NcdTAwM2MgMTAgfSxcbiYjNDM7XHR7IFwmIzM0O2Nyb3NzX2NwdV9sYXJnZV90cmVlXCYjMzQ7LCA0LCAzLCAwLCAyNTYgXHUwMDNjXHUwMDNjIDEwIH0sXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBtZW1jZ19rZnVuY3NfYXZhaWxhYmxlKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qga2Z1bmNzW10gPSB7XG4mIzQzO1x0XHRcJiMzNDticGZfZ2V0X21lbV9jZ3JvdXBcJiMzNDssXG4mIzQzO1x0XHRcJiMzNDticGZfcHV0X21lbV9jZ3JvdXBcJiMzNDssXG4mIzQzO1x0XHRcJiMzNDticGZfbWVtX2Nncm91cF9mbHVzaF9zdGF0c1wmIzM0OyxcbiYjNDM7XHRcdFwmIzM0O2JwZl9tZW1fY2dyb3VwX3BhZ2Vfc3RhdGVcJiMzNDssXG4mIzQzO1x0XHRcJiMzNDticGZfbWVtX2Nncm91cF92bV9ldmVudHNcJiMzNDssXG4mIzQzO1x0fTtcbiYjNDM7XHRzdHJ1Y3QgYnRmICpidGY7XG4mIzQzO1x0aW50IGVyciwgaTtcbiYjNDM7XG4mIzQzO1x0YnRmID0gYnRmX19sb2FkX3ZtbGludXhfYnRmKCk7XG4mIzQzO1x0ZXJyID0gbGliYnBmX2dldF9lcnJvcihidGYpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdGtzZnRfcHJpbnRfbXNnKFwmIzM0O2Nhbm5vdCBsb2FkIHZtbGludXggQlRGOiAlcyAoJWQpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICAgc3RyZXJyb3IoLWVyciksIGVycik7XG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGtmdW5jcyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAoYnRmX19maW5kX2J5X25hbWVfa2luZChidGYsIGtmdW5jc1tpXSwgQlRGX0tJTkRfRlVOQykgXHUwMDNlIDApXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7cmVxdWlyZWQga2Z1bmMgJXMgaXMgbm90IGluIHZtbGludXggQlRGXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICAga2Z1bmNzW2ldKTtcbiYjNDM7XHRcdGJ0Zl9fZnJlZShidGYpO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoYnRmX19maW5kX2J5X25hbWVfa2luZChidGYsIFwmIzM0O2JwZl9pdGVyX2Nncm91cFwmIzM0OywgQlRGX0tJTkRfRlVOQykgXHUwMDNjPSAwKSB7XG4mIzQzO1x0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtjZ3JvdXAgQlBGIGl0ZXJhdG9yIGlzIG5vdCBpbiB2bWxpbnV4IEJURlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRidGZfX2ZyZWUoYnRmKTtcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1x0YnRmX19mcmVlKGJ0Zik7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHVuc3VwcG9ydGVkX2JwZl9mZWF0dXJlX2Vycm9yKGludCBlcnIpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZXJyID09IC1FSU5WQUwgfHwgZXJyID09IC1FTk9FTlQgfHwgZXJyID09IC1FT1BOT1RTVVBQO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBSZXR1cm4gMSBpZiBzdXBwb3J0ZWQsIDAgaWYgdW5hdmFpbGFibGUsIG9yIGEgbmVnYXRpdmUgZXJyb3IuICovXG4mIzQzO3N0YXRpYyBpbnQgcHJvYmVfbWVtY2dfYnBmX2ZlYXR1cmVzKGludCByb290X2ZkKVxuJiM0Mzt7XG4mIzQzO1x0REVDTEFSRV9MSUJCUEZfT1BUUyhicGZfaXRlcl9hdHRhY2hfb3B0cywgb3B0cyk7XG4mIzQzO1x0c3RydWN0IG1lbWNnX3N0YXRfY3Jvc3NfY3B1ICpza2VsO1xuJiM0MztcdHVuaW9uIGJwZl9pdGVyX2xpbmtfaW5mbyBsaW5mbyA9IHt9O1xuJiM0MztcdHN0cnVjdCBicGZfbGluayAqbGluayA9IE5VTEw7XG4mIzQzO1x0aW50IHJldCwgZXJyLCBpdGVyX2ZkID0gLTE7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSBtZW1jZ19zdGF0X2Nyb3NzX2NwdV9fb3BlbigpO1xuJiM0MztcdGlmICghc2tlbCkge1xuJiM0MztcdFx0ZXJyID0gZXJybm8gPyAtZXJybm8gOiAtRUlOVkFMO1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7Y2FwYWJpbGl0eSBwcm9iZSBvcGVuIGZhaWxlZDogJXMgKCVkKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgIHN0cmVycm9yKC1lcnIpLCBlcnIpO1xuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IGJwZl9wcm9ncmFtX19zZXRfYXV0b2xvYWQoc2tlbC1cdTAwM2Vwcm9ncy5jZ3JvdXBfbWVtY2dfc3RhdF9jcm9zc19jcHUsXG4mIzQzO1x0XHRcdFx0XHRmYWxzZSk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7ZGlzYWJsaW5nIHRlc3QgcHJvZ3JhbSBmYWlsZWQ6ICVzICglZClcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgICBzdHJlcnJvcigtZXJyKSwgZXJyKTtcbiYjNDM7XHRcdHJldCA9IGVycjtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZXJyID0gbWVtY2dfc3RhdF9jcm9zc19jcHVfX2xvYWQoc2tlbCk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7QlBGIGNhcGFiaWxpdHkgcHJvYmUgbG9hZCBmYWlsZWQ6ICVzICglZClcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgICBzdHJlcnJvcigtZXJyKSwgZXJyKTtcbiYjNDM7XHRcdHJldCA9IHVuc3VwcG9ydGVkX2JwZl9mZWF0dXJlX2Vycm9yKGVycikgPyAwIDogZXJyO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRsaW5mby5jZ3JvdXAuY2dyb3VwX2ZkID0gcm9vdF9mZDtcbiYjNDM7XHRsaW5mby5jZ3JvdXAub3JkZXIgPSBCUEZfQ0dST1VQX0lURVJfU0VMRl9PTkxZO1xuJiM0MztcdG9wdHMubGlua19pbmZvID0gXHUwMDI2bGluZm87XG4mIzQzO1x0b3B0cy5saW5rX2luZm9fbGVuID0gc2l6ZW9mKGxpbmZvKTtcbiYjNDM7XHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9pdGVyKHNrZWwtXHUwMDNlcHJvZ3MubWVtY2dfa2Z1bmNzX3Byb2JlLCBcdTAwMjZvcHRzKTtcbiYjNDM7XHRlcnIgPSBsaWJicGZfZ2V0X2Vycm9yKGxpbmspO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdGxpbmsgPSBOVUxMO1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7QlBGIGNhcGFiaWxpdHkgcHJvYmUgYXR0YWNoIGZhaWxlZDogJXMgKCVkKVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgIHN0cmVycm9yKC1lcnIpLCBlcnIpO1xuJiM0MztcdFx0cmV0ID0gdW5zdXBwb3J0ZWRfYnBmX2ZlYXR1cmVfZXJyb3IoZXJyKSA/IDAgOiBlcnI7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGl0ZXJfZmQgPSBicGZfaXRlcl9jcmVhdGUoYnBmX2xpbmtfX2ZkKGxpbmspKTtcbiYjNDM7XHRpZiAoaXRlcl9mZCBcdTAwM2MgMCkge1xuJiM0MztcdFx0ZXJyID0gLWVycm5vO1xuJiM0MztcdFx0a3NmdF9wcmludF9tc2coXCYjMzQ7QlBGIGNhcGFiaWxpdHkgcHJvYmUgaXRlcmF0b3IgY3JlYXRpb24gZmFpbGVkOiAlcyAoJWQpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICAgc3RyZXJyb3IoLWVyciksIGVycik7XG4mIzQzO1x0XHRyZXQgPSB1bnN1cHBvcnRlZF9icGZfZmVhdHVyZV9lcnJvcihlcnIpID8gMCA6IGVycjtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gMTtcbiYjNDM7b3V0OlxuJiM0MztcdGlmIChpdGVyX2ZkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGNsb3NlKGl0ZXJfZmQpO1xuJiM0MztcdGJwZl9saW5rX19kZXN0cm95KGxpbmspO1xuJiM0MztcdG1lbWNnX3N0YXRfY3Jvc3NfY3B1X19kZXN0cm95KHNrZWwpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbiYjNDM7e1xuJiM0MztcdGludCBmZWF0dXJlX2ZkLCBpLCByZXQ7XG4mIzQzO1xuJiM0MztcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XG4mIzQzO1xuJiM0MztcdC8qIFByb2JlIEJURiBiZWZvcmUgb3BlcmF0aW9ucyB0aGF0IG1heSByZXF1aXJlIHByaXZpbGVnZXMuICovXG4mIzQzO1x0aWYgKCFtZW1jZ19rZnVuY3NfYXZhaWxhYmxlKCkpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfc2tpcChcJiMzNDttZW1jZyBCUEYga2Z1bmNzIGFyZSBub3QgYXZhaWxhYmxlXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWYgKGNnX2ZpbmRfdW5pZmllZF9yb290KHJvb3QsIHNpemVvZihyb290KSwgTlVMTCkpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfc2tpcChcJiMzNDtjZ3JvdXAgdjIgaXNuJiMzOTt0IG1vdW50ZWRcXG5cJiMzNDspO1xuJiM0MztcdGZlYXR1cmVfZmQgPSBvcGVuKHJvb3QsIE9fUkRPTkxZIHwgT19ESVJFQ1RPUlkpO1xuJiM0MztcdGlmIChmZWF0dXJlX2ZkIFx1MDAzYyAwKVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O2Nhbm5vdCBvcGVuIGNncm91cCByb290OiAlcyAoJWQpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIHN0cmVycm9yKGVycm5vKSwgZXJybm8pO1xuJiM0MztcdHJldCA9IHByb2JlX21lbWNnX2JwZl9mZWF0dXJlcyhmZWF0dXJlX2ZkKTtcbiYjNDM7XHRjbG9zZShmZWF0dXJlX2ZkKTtcbiYjNDM7XHRpZiAoIXJldClcbiYjNDM7XHRcdGtzZnRfZXhpdF9za2lwKFwmIzM0O3NsZWVwYWJsZSBjZ3JvdXAgaXRlcmF0b3Igb3IgbWVtY2cga2Z1bmNzIGFyZSBub3QgYXZhaWxhYmxlXFxuXCYjMzQ7KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwmIzM0O2Nhbm5vdCBwcm9iZSBCUEYgY2FwYWJpbGl0aWVzOiAlcyAoJWQpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIHN0cmVycm9yKC1yZXQpLCByZXQpO1xuJiM0MztcbiYjNDM7XHRpZiAoY2dfcmVhZF9zdHJzdHIocm9vdCwgXCYjMzQ7Y2dyb3VwLmNvbnRyb2xsZXJzXCYjMzQ7LCBcJiMzNDttZW1vcnlcJiMzNDspKVxuJiM0MztcdFx0a3NmdF9leGl0X3NraXAoXCYjMzQ7bWVtb3J5IGNvbnRyb2xsZXIgaXNuJiMzOTt0IGF2YWlsYWJsZVxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGlmIChjZ19yZWFkX3N0cnN0cihyb290LCBcJiMzNDtjZ3JvdXAuc3VidHJlZV9jb250cm9sXCYjMzQ7LCBcJiMzNDttZW1vcnlcJiMzNDspKVxuJiM0MztcdFx0aWYgKGNnX3dyaXRlKHJvb3QsIFwmIzM0O2Nncm91cC5zdWJ0cmVlX2NvbnRyb2xcJiMzNDssIFwmIzM0OyYjNDM7bWVtb3J5XCYjMzQ7KSlcbiYjNDM7XHRcdFx0a3NmdF9leGl0X3NraXAoXCYjMzQ7RmFpbGVkIHRvIHNldCBtZW1vcnkgY29udHJvbGxlclxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdENQVV9aRVJPKFx1MDAyNmFsbG93ZWRfY3B1cyk7XG4mIzQzO1x0aWYgKHNjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihhbGxvd2VkX2NwdXMpLCBcdTAwMjZhbGxvd2VkX2NwdXMpKVxuJiM0MztcdFx0a3NmdF9leGl0X3NraXAoXCYjMzQ7Y2Fubm90IHJlYWQgQ1BVIGFmZmluaXR5XFxuXCYjMzQ7KTtcbiYjNDM7XHRuX2NwdSA9IENQVV9DT1VOVChcdTAwMjZhbGxvd2VkX2NwdXMpO1xuJiM0MztcdGlmIChuX2NwdSBcdTAwM2M9IDApXG4mIzQzO1x0XHRrc2Z0X2V4aXRfc2tpcChcJiMzNDtubyBDUFUgdG8gcnVuIG9uXFxuXCYjMzQ7KTtcbiYjNDM7XHRuX29ubGluZV9jcHUgPSBzeXNjb25mKF9TQ19OUFJPQ0VTU09SU19PTkxOKTtcbiYjNDM7XHRpZiAobl9vbmxpbmVfY3B1IFx1MDAzYz0gMClcbiYjNDM7XHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtjYW5ub3QgZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2Ygb25saW5lIENQVXNcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRwYWdlX3NpemUgPSBzeXNjb25mKF9TQ19QQUdFU0laRSk7XG4mIzQzO1x0aWYgKHBhZ2Vfc2l6ZSBcdTAwM2M9IDApXG4mIzQzO1x0XHRwYWdlX3NpemUgPSBCVUZfU0laRTtcbiYjNDM7XG4mIzQzO1x0c3VidHJlZV9yb290ID0gY2dfbmFtZShyb290LCBTVUJUUkVFX05BTUUpO1xuJiM0MztcdGlmICghc3VidHJlZV9yb290KVxuJiM0MztcdFx0a3NmdF9leGl0X3NraXAoXCYjMzQ7Y2Fubm90IGJ1aWxkIHN1YnRyZWUgcm9vdCBwYXRoXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LyogU2V0IHRoZSBwbGFuIGFmdGVyIGFsbCBnbG9iYWwgc2tpcCBjaGVja3MuICovXG4mIzQzO1x0a3NmdF9zZXRfcGxhbihBUlJBWV9TSVpFKGNhc2VzKSk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoY2FzZXMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3dpdGNoIChydW5fY2FzZShcdTAwMjZjYXNlc1tpXSkpIHtcbiYjNDM7XHRcdGNhc2UgS1NGVF9QQVNTOlxuJiM0MztcdFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3Bhc3MoXCYjMzQ7JXNcXG5cJiMzNDssIGNhc2VzW2ldLm5hbWUpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgS1NGVF9TS0lQOlxuJiM0MztcdFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoXCYjMzQ7JXNcXG5cJiMzNDssIGNhc2VzW2ldLm5hbWUpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGRlZmF1bHQ6XG4mIzQzO1x0XHRcdGtzZnRfdGVzdF9yZXN1bHRfZmFpbChcJiMzNDslc1xcblwmIzM0OywgY2FzZXNbaV0ubmFtZSk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZnJlZShzdWJ0cmVlX3Jvb3QpO1xuJiM0MztcdGtzZnRfZmluaXNoZWQoKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X21lbWNvbnRyb2wuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X21lbWNvbnRyb2wuY1xuaW5kZXggMGViZjc5NmYzY2ZmZS4uMTViYTQ2ODc5NTA0MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X21lbWNvbnRyb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfbWVtY29udHJvbC5jXG5AQCAtMjYsNyAmIzQzOzI2LDYgQEBcbiBcbiBzdGF0aWMgYm9vbCBoYXNfbG9jYWxldmVudHM7XG4gc3RhdGljIGJvb2wgaGFzX3JlY3Vyc2l2ZXByb3Q7XG4tc3RhdGljIGludCBwYWdlX3NpemU7XG4gXG4gaW50IGdldF90ZW1wX2ZkKHZvaWQpXG4ge1xuQEAgLTU2LDI4ICYjNDM7NTUsMTIgQEAgaW50IGFsbG9jX3BhZ2VjYWNoZShpbnQgZmQsIHNpemVfdCBzaXplKVxuIFx0cmV0dXJuIC0xO1xuIH1cbiBcbi1zdGF0aWMgY2hhciAqYWxsb2NfYW5kX3BvcHVsYXRlX2Fub24oc2l6ZV90IHNpemUpXG4te1xuLVx0Y2hhciAqYnVmLCAqcHRyO1xuLVxuLVx0YnVmID0gbWFsbG9jKHNpemUpO1xuLVx0aWYgKGJ1ZiA9PSBOVUxMKSB7XG4tXHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDttYWxsb2MoKSBmYWlsZWRcXG5cJiMzNDspO1xuLVx0XHRyZXR1cm4gTlVMTDtcbi1cdH1cbi1cbi1cdGZvciAocHRyID0gYnVmOyBwdHIgXHUwMDNjIGJ1ZiAmIzQzOyBzaXplOyBwdHIgJiM0Mzs9IHBhZ2Vfc2l6ZSlcbi1cdFx0KnB0ciA9IDA7XG4tXG4tXHRyZXR1cm4gYnVmO1xuLX1cbi1cbiBpbnQgYWxsb2NfYW5vbihjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZylcbiB7XG4gXHRzaXplX3Qgc2l6ZSA9ICh1bnNpZ25lZCBsb25nKWFyZztcbiBcdGNoYXIgKmJ1ZjtcbiBcbi1cdGJ1ZiA9IGFsbG9jX2FuZF9wb3B1bGF0ZV9hbm9uKHNpemUpO1xuJiM0MztcdGJ1ZiA9IGNnX2FsbG9jX2Fub24oc2l6ZSk7XG4gXHRpZiAoIWJ1ZilcbiBcdFx0cmV0dXJuIC0xO1xuIFxuQEAgLTE5NSw3ICYjNDM7MTc4LDcgQEAgc3RhdGljIGludCBhbGxvY19hbm9uXzUwTV9jaGVjayhjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZylcbiBcdGxvbmcgYW5vbiwgY3VycmVudDtcbiBcdGludCByZXQgPSAtMTtcbiBcbi1cdGJ1ZiA9IGFsbG9jX2FuZF9wb3B1bGF0ZV9hbm9uKHNpemUpO1xuJiM0MztcdGJ1ZiA9IGNnX2FsbG9jX2Fub24oc2l6ZSk7XG4gXHRpZiAoIWJ1ZilcbiBcdFx0cmV0dXJuIC0xO1xuIFxuQEAgLTQyMCw3ICYjNDM7NDAzLDcgQEAgc3RhdGljIGludCBhbGxvY19hbm9uX25vZXhpdChjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZylcbiBcdHNpemVfdCBzaXplID0gKHVuc2lnbmVkIGxvbmcpYXJnO1xuIFx0Y2hhciAqYnVmO1xuIFxuLVx0YnVmID0gYWxsb2NfYW5kX3BvcHVsYXRlX2Fub24oc2l6ZSk7XG4mIzQzO1x0YnVmID0gY2dfYWxsb2NfYW5vbihzaXplKTtcbiBcdGlmICghYnVmKVxuIFx0XHRyZXR1cm4gLTE7XG4gXG5AQCAtMTAwMSw3ICYjNDM7OTg0LDcgQEAgc3RhdGljIGludCBhbGxvY19hbm9uXzUwTV9jaGVja19zd2FwKGNvbnN0IGNoYXIgKmNncm91cCwgdm9pZCAqYXJnKVxuIFx0bG9uZyBtZW1fY3VycmVudCwgc3dhcF9jdXJyZW50O1xuIFx0aW50IHJldCA9IC0xO1xuIFxuLVx0YnVmID0gYWxsb2NfYW5kX3BvcHVsYXRlX2Fub24oc2l6ZSk7XG4mIzQzO1x0YnVmID0gY2dfYWxsb2NfYW5vbihzaXplKTtcbiBcdGlmICghYnVmKVxuIFx0XHRyZXR1cm4gLTE7XG4gXG5AQCAtMTc5MywxMCAmIzQzOzE3NzYsNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRjaGFyIHJvb3RbUEFUSF9NQVhdO1xuIFx0aW50IGksIHByb2Nfc3RhdHVzO1xuIFxuLVx0cGFnZV9zaXplID0gc3lzY29uZihfU0NfUEFHRV9TSVpFKTtcbi1cdGlmIChwYWdlX3NpemUgXHUwMDNjPSAwKVxuLVx0XHRwYWdlX3NpemUgPSBCVUZfU0laRTtcbi1cbiBcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XG4gXHRrc2Z0X3NldF9wbGFuKEFSUkFZX1NJWkUodGVzdHMpKTtcbiBcdGlmIChjZ19maW5kX3VuaWZpZWRfcm9vdChyb290LCBzaXplb2Yocm9vdCksIE5VTEwpKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC8uZ2l0aWdub3JlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvaGlkLy5naXRpZ25vcmVcbmluZGV4IDkzM2Y0ODM4MTViMmMuLjY5OTQzMzAxZGMxZDcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvLmdpdGlnbm9yZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvaGlkLy5naXRpZ25vcmVcbkBAIC0xLDUgJiM0MzsxLDYgQEBcbiBicGZ0b29sXG4gKi5za2VsLmhcbiYjNDM7Ki5icGYuZFxuIC9ob3N0LXRvb2xzXG4gL3Rvb2xzXG4gaGlkX2JwZlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC9NYWtlZmlsZVxuaW5kZXggMmY0MjNkZTgzMTQ3My4uMTE5MGE3NDcwMzZkYSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvaGlkL01ha2VmaWxlXG5AQCAtNDcsNyAmIzQzOzQ3LDYgQEAgbXNnID1cbiBlbHNlXG4gbXNnID0gQHByaW50ZiAmIzM5OyAgJS04cyVzICVzJXNcXG4mIzM5OyBcJiMzNDskKDEpXCYjMzQ7IFwmIzM0OyQoaWYgJCgyKSwgWyQoMildKVwmIzM0OyBcJiMzNDskKG5vdGRpciAkKDMpKVwmIzM0OyBcJiMzNDskKGlmICQoNCksICQoNCkpXCYjMzQ7O1xuIE1BS0VGTEFHUyAmIzQzOz0gLS1uby1wcmludC1kaXJlY3Rvcnlcbi1zdWJtYWtlX2V4dHJhcyA6PSBmZWF0dXJlX2Rpc3BsYXk9MFxuIGVuZGlmXG4gXG4gIyBvdmVycmlkZSBsaWIubWsmIzM5O3MgZGVmYXVsdCBydWxlc1xuQEAgLTU4LDE3MiAmIzQzOzU3LDI1IEBAIG92ZXJyaWRlIGRlZmluZSBDTEVBTlxuIFx0JChRKSQoUk0pIC1yICQoRVhUUkFfQ0xFQU4pXG4gZW5kZWZcbiBcbi1pbmNsdWRlIC4uL2xpYi5ta1xuLVxuLVRPT0xTRElSIDo9ICQodG9wX3NyY2RpcikvdG9vbHNcbi1MSUJESVIgOj0gJChUT09MU0RJUikvbGliXG4tQlBGRElSIDo9ICQoTElCRElSKS9icGZcbi1UT09MU0lOQ0RJUiA6PSAkKFRPT0xTRElSKS9pbmNsdWRlXG4tQlBGVE9PTERJUiA6PSAkKFRPT0xTRElSKS9icGYvYnBmdG9vbFxuLVNDUkFUQ0hfRElSIDo9ICQoT1VUUFVUKS90b29sc1xuLUJVSUxEX0RJUiA6PSAkKFNDUkFUQ0hfRElSKS9idWlsZFxuLUlOQ0xVREVfRElSIDo9ICQoU0NSQVRDSF9ESVIpL2luY2x1ZGVcbi1CUEZPQkogOj0gJChCVUlMRF9ESVIpL2xpYmJwZi9saWJicGYuYVxuLWlmbmVxICgkKENST1NTX0NPTVBJTEUpLClcbi1IT1NUX0JVSUxEX0RJUlx0XHQ6PSAkKEJVSUxEX0RJUikvaG9zdFxuLUhPU1RfU0NSQVRDSF9ESVJcdDo9ICQoT1VUUFVUKS9ob3N0LXRvb2xzXG4tSE9TVF9JTkNMVURFX0RJUlx0Oj0gJChIT1NUX1NDUkFUQ0hfRElSKS9pbmNsdWRlXG4tZWxzZVxuLUhPU1RfQlVJTERfRElSXHRcdDo9ICQoQlVJTERfRElSKVxuLUhPU1RfU0NSQVRDSF9ESVJcdDo9ICQoU0NSQVRDSF9ESVIpXG4tSE9TVF9JTkNMVURFX0RJUlx0Oj0gJChJTkNMVURFX0RJUilcbi1lbmRpZlxuLUhPU1RfQlBGT0JKIDo9ICQoSE9TVF9CVUlMRF9ESVIpL2xpYmJwZi9saWJicGYuYVxuLVJFU09MVkVfQlRGSURTIDo9ICQoSE9TVF9CVUlMRF9ESVIpL3Jlc29sdmVfYnRmaWRzL3Jlc29sdmVfYnRmaWRzXG4tXG4tVk1MSU5VWF9CVEZfUEFUSFMgPz0gJChpZiAkKE8pLCQoTykvdm1saW51eClcdFx0XHRcdFxcXG4tXHRcdCAgICAgJChpZiAkKEtCVUlMRF9PVVRQVVQpLCQoS0JVSUxEX09VVFBVVCkvdm1saW51eClcdFxcXG4tXHRcdCAgICAgLi4vLi4vLi4vLi4vdm1saW51eFx0XHRcdFx0XFxcbi1cdFx0ICAgICAvc3lzL2tlcm5lbC9idGYvdm1saW51eFx0XHRcdFx0XFxcbi1cdFx0ICAgICAvYm9vdC92bWxpbnV4LSQoc2hlbGwgdW5hbWUgLXIpXG4tVk1MSU5VWF9CVEYgPz0gJChhYnNwYXRoICQoZmlyc3R3b3JkICQod2lsZGNhcmQgJChWTUxJTlVYX0JURl9QQVRIUykpKSlcbi1pZmVxICgkKFZNTElOVVhfQlRGKSwpXG4tJChlcnJvciBDYW5ub3QgZmluZCBhIHZtbGludXggZm9yIFZNTElOVVhfQlRGIGF0IGFueSBvZiBcJiMzNDskKFZNTElOVVhfQlRGX1BBVEhTKVwmIzM0Oylcbi1lbmRpZlxuLVxuLSMgRGVmaW5lIHNpbXBsZSBhbmQgc2hvcnQgYG1ha2UgdGVzdF9wcm9nc2AsIGBtYWtlIHRlc3Rfc3lzY3RsYCwgZXRjIHRhcmdldHNcbi0jIHRvIGJ1aWxkIGluZGl2aWR1YWwgdGVzdHMuXG4tIyBOT1RFOiBTZW1pY29sb24gYXQgdGhlIGVuZCBpcyBjcml0aWNhbCB0byBvdmVycmlkZSBsaWIubWsmIzM5O3MgZGVmYXVsdCBzdGF0aWNcbi0jIHJ1bGUgZm9yIGJpbmFyaWVzLlxuLSQobm90ZGlyICQoVEVTVF9HRU5fUFJPR1MpKTogJTogJChPVVRQVVQpLyUgO1xuLVxuLSMgc29ydCByZW1vdmVzIGxpYmJwZiBkdXBsaWNhdGVzIHdoZW4gbm90IGNyb3NzLWJ1aWxkaW5nXG4tTUFLRV9ESVJTIDo9ICQoc29ydCAkKEJVSUxEX0RJUikvbGliYnBmICQoSE9TVF9CVUlMRF9ESVIpL2xpYmJwZlx0XHRcXFxuLVx0ICAgICAgICQoSE9TVF9CVUlMRF9ESVIpL2JwZnRvb2wgJChIT1NUX0JVSUxEX0RJUikvcmVzb2x2ZV9idGZpZHNcdFxcXG4tXHQgICAgICAgJChJTkNMVURFX0RJUikpXG4tJChNQUtFX0RJUlMpOlxuLVx0JChjYWxsIG1zZyxNS0RJUiwsJEApXG4tXHQkKFEpbWtkaXIgLXAgJEBcbiYjNDM7IyBCdWlsZCB0aGUgbGVnYWN5IHByb2dzLyouYyBsYXlvdXQgd2l0aCB0aGUgc2hhcmVkIEJQRiBydWxlcy5cbiYjNDM7QlBGX1NSQ1MgICAgICAgOj0gJCh3aWxkY2FyZCBwcm9ncy8qLmMpXG4mIzQzO0JQRl9QUk9HX0VYVCAgIDo9IC5jXG4mIzQzOyMgQlBGRElSIGlzIGRlZmluZWQgd2hlbiB0aGlzIHJlY3Vyc2l2ZSB2YXJpYWJsZSBpcyBleHBhbmRlZC5cbiYjNDM7QlBGX0VYVFJBX0hEUlMgID0gJCh3aWxkY2FyZCBwcm9ncy8qLmgpICQod2lsZGNhcmQgJChCUEZESVIpL2hpZF9icGZfKi5oKSBcXFxuJiM0MztcdFx0ICAkKHdpbGRjYXJkICQoQlBGRElSKS8qLmJwZi5oKVxuIFxuLURFRkFVTFRfQlBGVE9PTCA6PSAkKEhPU1RfU0NSQVRDSF9ESVIpL3NiaW4vYnBmdG9vbFxuJiM0MztpbmNsdWRlIC4uL2xpYi5ta1xuJiM0MztpbmNsdWRlIC4uL2xpYi5icGYubWtcbiBcbiYjNDM7IyBQcmVzZXJ2ZSB0aGUgZXhpc3RpbmcgaW5zdGFsbCBsaXN0LlxuJiM0MztURVNUX0dFTl9GSUxFUyAmIzQzOz0gJChCUEZfT0JKUylcbiBURVNUX0dFTl9QUk9HU19FWFRFTkRFRCAmIzQzOz0gJChERUZBVUxUX0JQRlRPT0wpXG4gXG4tJChURVNUX0dFTl9QUk9HUykgJChURVNUX0dFTl9QUk9HU19FWFRFTkRFRCk6ICQoQlBGT0JKKVxuLVxuLUJQRlRPT0wgPz0gJChERUZBVUxUX0JQRlRPT0wpXG4tJChERUZBVUxUX0JQRlRPT0wpOiAkKHdpbGRjYXJkICQoQlBGVE9PTERJUikvKi5bY2hdICQoQlBGVE9PTERJUikvTWFrZWZpbGUpICAgIFxcXG4tXHRcdCAgICAkKEhPU1RfQlBGT0JKKSB8ICQoSE9TVF9CVUlMRF9ESVIpL2JwZnRvb2xcbi1cdCQoUSkkKE1BS0UpICQoc3VibWFrZV9leHRyYXMpICAtQyAkKEJQRlRPT0xESVIpXHRcdFx0ICAgICAgIFxcXG4tXHRcdCAgICBBUkNIPSBDUk9TU19DT01QSUxFPSBDQz0kKEhPU1RDQykgTEQ9JChIT1NUTEQpIFx0ICAgICAgIFxcXG4tXHRcdCAgICBFWFRSQV9DRkxBR1M9JiMzOTstZyAtTzAmIzM5O1x0XHRcdFx0ICAgICAgIFxcXG4tXHRcdCAgICBPVVRQVVQ9JChIT1NUX0JVSUxEX0RJUikvYnBmdG9vbC9cdFx0XHQgICAgICAgXFxcbi1cdFx0ICAgIExJQkJQRl9PVVRQVVQ9JChIT1NUX0JVSUxEX0RJUikvbGliYnBmL1x0XHQgICAgICAgXFxcbi1cdFx0ICAgIExJQkJQRl9ERVNURElSPSQoSE9TVF9TQ1JBVENIX0RJUikvXHRcdFx0ICAgICAgIFxcXG4tXHRcdCAgICBwcmVmaXg9IERFU1RESVI9JChIT1NUX1NDUkFUQ0hfRElSKS8gaW5zdGFsbC1iaW5cbi1cbi0kKEJQRk9CSik6ICQod2lsZGNhcmQgJChCUEZESVIpLyouW2NoXSAkKEJQRkRJUikvTWFrZWZpbGUpXHRcdCAgICAgICBcXFxuLVx0ICAgfCAkKEJVSUxEX0RJUikvbGliYnBmXG4tXHQkKFEpJChNQUtFKSAkKHN1Ym1ha2VfZXh0cmFzKSAtQyAkKEJQRkRJUikgT1VUUFVUPSQoQlVJTERfRElSKS9saWJicGYvIFxcXG4tXHRcdCAgICBFWFRSQV9DRkxBR1M9JiMzOTstZyAtTzAmIzM5O1x0XHRcdFx0ICAgICAgIFxcXG4tXHRcdCAgICBERVNURElSPSQoU0NSQVRDSF9ESVIpIHByZWZpeD0gYWxsIGluc3RhbGxfaGVhZGVyc1xuLVxuLWlmbmVxICgkKEJQRk9CSiksJChIT1NUX0JQRk9CSikpXG4tJChIT1NUX0JQRk9CSik6ICQod2lsZGNhcmQgJChCUEZESVIpLyouW2NoXSAkKEJQRkRJUikvTWFrZWZpbGUpXHRcdCAgICAgICBcXFxuLVx0XHR8ICQoSE9TVF9CVUlMRF9ESVIpL2xpYmJwZlxuLVx0JChRKSQoTUFLRSkgJChzdWJtYWtlX2V4dHJhcykgLUMgJChCUEZESVIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuLVx0XHQgICAgRVhUUkFfQ0ZMQUdTPSYjMzk7LWcgLU8wJiMzOTsgQVJDSD0gQ1JPU1NfQ09NUElMRT1cdFx0ICAgICAgIFxcXG4tXHRcdCAgICBPVVRQVVQ9JChIT1NUX0JVSUxEX0RJUikvbGliYnBmLyBDQz0kKEhPU1RDQykgTEQ9JChIT1NUTEQpIFxcXG4tXHRcdCAgICBERVNURElSPSQoSE9TVF9TQ1JBVENIX0RJUikvIHByZWZpeD0gYWxsIGluc3RhbGxfaGVhZGVyc1xuLWVuZGlmXG4tXG4tJChJTkNMVURFX0RJUikvdm1saW51eC5oOiAkKFZNTElOVVhfQlRGKSAkKEJQRlRPT0wpIHwgJChJTkNMVURFX0RJUilcbi1pZmVxICgkKFZNTElOVVhfSCksKVxuLVx0JChjYWxsIG1zZyxHRU4sLCRAKVxuLVx0JChRKSQoQlBGVE9PTCkgYnRmIGR1bXAgZmlsZSAkKFZNTElOVVhfQlRGKSBmb3JtYXQgYyBcdTAwM2UgJEBcbi1lbHNlXG4tXHQkKGNhbGwgbXNnLENQLCwkQClcbi1cdCQoUSljcCBcJiMzNDskKFZNTElOVVhfSClcJiMzNDsgJEBcbi1lbmRpZlxuLVxuLSQoUkVTT0xWRV9CVEZJRFMpOiAkKEhPU1RfQlBGT0JKKSB8ICQoSE9TVF9CVUlMRF9ESVIpL3Jlc29sdmVfYnRmaWRzXHRcXFxuLVx0XHQgICAgICAgJChUT09MU0RJUikvYnBmL3Jlc29sdmVfYnRmaWRzL21haW4uY1x0XFxcbi1cdFx0ICAgICAgICQoVE9PTFNESVIpL2xpYi9yYnRyZWUuY1x0XHRcdFxcXG4tXHRcdCAgICAgICAkKFRPT0xTRElSKS9saWIvemFsbG9jLmNcdFx0XHRcXFxuLVx0XHQgICAgICAgJChUT09MU0RJUikvbGliL3N0cmluZy5jXHRcdFx0XFxcbi1cdFx0ICAgICAgICQoVE9PTFNESVIpL2xpYi9jdHlwZS5jXHRcdFx0XFxcbi1cdFx0ICAgICAgICQoVE9PTFNESVIpL2xpYi9zdHJfZXJyb3Jfci5jXG4tXHQkKFEpJChNQUtFKSAkKHN1Ym1ha2VfZXh0cmFzKSAtQyAkKFRPT0xTRElSKS9icGYvcmVzb2x2ZV9idGZpZHNcdFxcXG4tXHRcdENDPSQoSE9TVENDKSBMRD0kKEhPU1RMRCkgQVI9JChIT1NUQVIpIFxcXG4tXHRcdExJQkJQRl9JTkNMVURFPSQoSE9TVF9JTkNMVURFX0RJUikgXFxcbi1cdFx0T1VUUFVUPSQoSE9TVF9CVUlMRF9ESVIpL3Jlc29sdmVfYnRmaWRzLyBCUEZPQko9JChIT1NUX0JQRk9CSilcbi1cbi0jIEdldCBDbGFuZyYjMzk7cyBkZWZhdWx0IGluY2x1ZGVzIG9uIHRoaXMgc3lzdGVtLCBhcyBvcHBvc2VkIHRvIHRob3NlIHNlZW4gYnlcbi0jICYjMzk7LS10YXJnZXQ9YnBmJiMzOTsuIFRoaXMgZml4ZXMgXCYjMzQ7bWlzc2luZ1wmIzM0OyBmaWxlcyBvbiBzb21lIGFyY2hpdGVjdHVyZXMvZGlzdHJvcyxcbi0jIHN1Y2ggYXMgYXNtL2J5dGVvcmRlci5oLCBhc20vc29ja2V0LmgsIGFzbS9zb2NraW9zLmgsIHN5cy9jZGVmcy5oIGV0Yy5cbi0jXG4tIyBVc2UgJiMzOTstaWRpcmFmdGVyJiMzOTs6IERvbiYjMzk7dCBpbnRlcmZlcmUgd2l0aCBpbmNsdWRlIG1lY2hhbmljcyBleGNlcHQgd2hlcmUgdGhlXG4tIyBidWlsZCB3b3VsZCBoYXZlIGZhaWxlZCBhbnl3YXlzLlxuLWRlZmluZSBnZXRfc3lzX2luY2x1ZGVzXG4tJChzaGVsbCAkKDEpIC12IC1FIC0gXHUwMDNjL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxIFxcXG4tXHR8IHNlZCAtbiAmIzM5Oy9cdTAwM2MuLi5cdTAwM2Ugc2VhcmNoIHN0YXJ0cyBoZXJlOi8sL0VuZCBvZiBzZWFyY2ggbGlzdC4veyBzfCBcXCgvLipcXCl8LWlkaXJhZnRlciBcXDF8cCB9JiMzOTspIFxcXG4tJChzaGVsbCAkKDEpIC1kTSAtRSAtIFx1MDAzYy9kZXYvbnVsbCB8IGdyZXAgJiMzOTtfX3Jpc2N2X3hsZW4gJiMzOTsgfCBhd2sgJiMzOTt7cHJpbnRmKFwmIzM0Oy1EX19yaXNjdl94bGVuPSVkIC1EX19CSVRTX1BFUl9MT05HPSVkXCYjMzQ7LCAkJDMsICQkMyl9JiMzOTspXG4tZW5kZWZcbi1cbi0jIERldGVybWluZSB0YXJnZXQgZW5kaWFubmVzcy5cbi1JU19MSVRUTEVfRU5ESUFOID0gJChzaGVsbCAkKENDKSAtZE0gLUUgLSBcdTAwM2MvZGV2L251bGwgfCBcXFxuLVx0XHRcdGdyZXAgJiMzOTtkZWZpbmUgX19CWVRFX09SREVSX18gX19PUkRFUl9MSVRUTEVfRU5ESUFOX18mIzM5Oylcbi1NRU5ESUFOPSQoaWYgJChJU19MSVRUTEVfRU5ESUFOKSwtbWxpdHRsZS1lbmRpYW4sLW1iaWctZW5kaWFuKVxuLVxuLUNMQU5HX1NZU19JTkNMVURFUyA9ICQoY2FsbCBnZXRfc3lzX2luY2x1ZGVzLCQoQ0xBTkcpKVxuLUJQRl9DRkxBR1MgPSAtZyAtV2Vycm9yIC1EX19UQVJHRVRfQVJDSF8kKFNSQ0FSQ0gpICQoTUVORElBTikgXHRcdFxcXG4tXHQgICAgIC1Xbm8tbWljcm9zb2Z0LWFub24tdGFnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbi1cdCAgICAgLWZtcy1leHRlbnNpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuLVx0ICAgICAtSSQoSU5DTFVERV9ESVIpXG4tXG4tQ0xBTkdfQ0ZMQUdTID0gJChDTEFOR19TWVNfSU5DTFVERVMpIFxcXG4tXHQgICAgICAgLVduby1jb21wYXJlLWRpc3RpbmN0LXBvaW50ZXItdHlwZXNcbi1cbi0jIEJ1aWxkIEJQRiBvYmplY3QgdXNpbmcgQ2xhbmdcbi0jICQxIC0gaW5wdXQgLmMgZmlsZVxuLSMgJDIgLSBvdXRwdXQgLm8gZmlsZVxuLSMgJDMgLSBDRkxBR1Ncbi1kZWZpbmUgQ0xBTkdfQlBGX0JVSUxEX1JVTEVcbi1cdCQoY2FsbCBtc2csQ0xORy1CUEYsJChUUlVOTkVSX0JJTkFSWSksJDIpXG4tXHQkKFEpJChDTEFORykgJDMgLU8yIC0tdGFyZ2V0PWJwZiAtYyAkMSAtbWNwdT12MyAtbyAkMlxuLWVuZGVmXG4tIyBTaW1pbGFyIHRvIENMQU5HX0JQRl9CVUlMRF9SVUxFLCBidXQgd2l0aCBkaXNhYmxlZCBhbHUzMlxuLWRlZmluZSBDTEFOR19OT0FMVTMyX0JQRl9CVUlMRF9SVUxFXG4tXHQkKGNhbGwgbXNnLENMTkctQlBGLCQoVFJVTk5FUl9CSU5BUlkpLCQyKVxuLVx0JChRKSQoQ0xBTkcpICQzIC1PMiAtLXRhcmdldD1icGYgLWMgJDEgLW1jcHU9djIgLW8gJDJcbi1lbmRlZlxuLSMgQnVpbGQgQlBGIG9iamVjdCB1c2luZyBHQ0Ncbi1kZWZpbmUgR0NDX0JQRl9CVUlMRF9SVUxFXG4tXHQkKGNhbGwgbXNnLEdDQy1CUEYsJChUUlVOTkVSX0JJTkFSWSksJDIpXG4tXHQkKFEpJChCUEZfR0NDKSAkMyAtTzIgLWMgJDEgLW8gJDJcbi1lbmRlZlxuLVxuLUJQRl9QUk9HU19ESVIgOj0gcHJvZ3Ncbi1CUEZfQlVJTERfUlVMRSA6PSBDTEFOR19CUEZfQlVJTERfUlVMRVxuLUJQRl9TUkNTIDo9ICQobm90ZGlyICQod2lsZGNhcmQgJChCUEZfUFJPR1NfRElSKS8qLmMpKVxuLUJQRl9PQkpTIDo9ICQocGF0c3Vic3QgJS5jLCQoT1VUUFVUKS8lLmJwZi5vLCAkKEJQRl9TUkNTKSlcbi1CUEZfU0tFTFMgOj0gJChwYXRzdWJzdCAlLmMsJChPVVRQVVQpLyUuc2tlbC5oLCAkKEJQRl9TUkNTKSlcbi1URVNUX0dFTl9GSUxFUyAmIzQzOz0gJChCUEZfT0JKUylcbiYjNDM7IyBLZWVwIGFsaWFzZXMgc3VjaCBhcyBcJiMzNDttYWtlIGhpZF9icGZcJiMzNDsgZnJvbSBtYXRjaGluZyBsaWIubWsmIzM5O3MgYmluYXJ5IHJ1bGUuXG4mIzQzOyQobm90ZGlyICQoVEVTVF9HRU5fUFJPR1MpKTogJTogJChPVVRQVVQpLyUgO1xuIFxuLSQoQlBGX1BST0dTX0RJUiktYnBmb2JqcyA6PSB5XG4tJChCUEZfT0JKUyk6ICQoT1VUUFVUKS8lLmJwZi5vOlx0XHRcdFx0XFxcbi1cdCAgICAgJChCUEZfUFJPR1NfRElSKS8lLmNcdFx0XHRcXFxuLVx0ICAgICAkKHdpbGRjYXJkICQoQlBGX1BST0dTX0RJUikvKi5oKVx0XHRcXFxuLVx0ICAgICAkKElOQ0xVREVfRElSKS92bWxpbnV4LmhcdFx0XHRcdFxcXG4tXHQgICAgICQod2lsZGNhcmQgJChCUEZESVIpL2hpZF9icGZfKi5oKVx0XHRcdFxcXG4tXHQgICAgICQod2lsZGNhcmQgJChCUEZESVIpLyouYnBmLmgpXHRcdFx0XFxcbi1cdCAgICAgfCAkKE9VVFBVVCkgJChCUEZPQkopXG4tXHQkKGNhbGwgJChCUEZfQlVJTERfUlVMRSksJFx1MDAzYywkQCwgJChCUEZfQ0ZMQUdTKSlcbi1cbi0kKEJQRl9TS0VMUyk6ICUuc2tlbC5oOiAlLmJwZi5vICQoQlBGVE9PTCkgfCAkKE9VVFBVVClcbi1cdCQoY2FsbCBtc2csR0VOLVNLRUwsJChCSU5BUlkpLCRAKVxuLVx0JChRKSQoQlBGVE9PTCkgZ2VuIG9iamVjdCAkKFx1MDAzYzoubz0ubGlua2VkMS5vKSAkXHUwMDNjXG4tXHQkKFEpJChCUEZUT09MKSBnZW4gc2tlbGV0b24gJChcdTAwM2M6Lm89LmxpbmtlZDEubykgbmFtZSAkKG5vdGRpciAkKFx1MDAzYzouYnBmLm89KSkgXHUwMDNlICRAXG4mIzQzOyMgUmVsaW5rIHRlc3RzIHdoZW4gdGhlIGluLXRyZWUgbGliYnBmIGNoYW5nZXMuXG4mIzQzOyQoVEVTVF9HRU5fUFJPR1MpOiAkKEJQRk9CSilcbiBcbiAkKE9VVFBVVCkvJS5vOiAlLmMgJChCUEZfU0tFTFMpIGhpZF9jb21tb24uaFxuIFx0JChjYWxsIG1zZyxDQywsJEApXG5AQCAtMjMzLDUgJiM0Mzs4NSw0IEBAICQoT1VUUFVUKS8lOiAkKE9VVFBVVCkvJS5vXG4gXHQkKGNhbGwgbXNnLEJJTkFSWSwsJEApXG4gXHQkKFEpJChMSU5LLmMpICReICQoTERMSUJTKSAtbyAkQFxuIFxuLUVYVFJBX0NMRUFOIDo9ICQoU0NSQVRDSF9ESVIpICQoSE9TVF9TQ1JBVENIX0RJUikgZmVhdHVyZSBicGZ0b29sXHRcXFxuLVx0JChhZGRwcmVmaXggJChPVVRQVVQpLywqLm8gKi5za2VsLmggbm9fYWx1MzIpXG4mIzQzO0VYVFJBX0NMRUFOICYjNDM7PSAkKE9VVFBVVCkvKi5vXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvaGlkL3Byb2dzL2hpZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvaGlkL3Byb2dzL2hpZC5jXG5pbmRleCBiMjFmYmIxM2M5MjZmLi5lYzczNGUxOGQyM2FlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvaGlkL3Byb2dzL2hpZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvcHJvZ3MvaGlkLmNcbkBAIC0xMTEsNyAmIzQzOzExMSw3IEBAIGludCBoaWRfdXNlcl9yYXdfcmVxdWVzdChzdHJ1Y3QgaGlkX2h3X3JlcXVlc3Rfc3lzY2FsbF9hcmdzICphcmdzKVxuIHtcbiBcdHN0cnVjdCBoaWRfYnBmX2N0eCAqY3R4O1xuIFx0Y29uc3Qgc2l6ZV90IHNpemUgPSBhcmdzLVx1MDAzZXNpemU7XG4tXHRpbnQgaSwgcmV0ID0gMDtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiBcbiBcdGlmIChzaXplIFx1MDAzZSBzaXplb2YoYXJncy1cdTAwM2VkYXRhKSlcbiBcdFx0cmV0dXJuIC03OyAvKiAtRTJCSUcgKi9cbkBAIC0xMzcsNyAmIzQzOzEzNyw3IEBAIGludCBoaWRfdXNlcl9vdXRwdXRfcmVwb3J0KHN0cnVjdCBoaWRfaHdfcmVxdWVzdF9zeXNjYWxsX2FyZ3MgKmFyZ3MpXG4ge1xuIFx0c3RydWN0IGhpZF9icGZfY3R4ICpjdHg7XG4gXHRjb25zdCBzaXplX3Qgc2l6ZSA9IGFyZ3MtXHUwMDNlc2l6ZTtcbi1cdGludCBpLCByZXQgPSAwO1xuJiM0MztcdGludCByZXQgPSAwO1xuIFxuIFx0aWYgKHNpemUgXHUwMDNlIHNpemVvZihhcmdzLVx1MDAzZWRhdGEpKVxuIFx0XHRyZXR1cm4gLTc7IC8qIC1FMkJJRyAqL1xuQEAgLTE2MSw3ICYjNDM7MTYxLDcgQEAgaW50IGhpZF91c2VyX2lucHV0X3JlcG9ydChzdHJ1Y3QgaGlkX2h3X3JlcXVlc3Rfc3lzY2FsbF9hcmdzICphcmdzKVxuIHtcbiBcdHN0cnVjdCBoaWRfYnBmX2N0eCAqY3R4O1xuIFx0Y29uc3Qgc2l6ZV90IHNpemUgPSBhcmdzLVx1MDAzZXNpemU7XG4tXHRpbnQgaSwgcmV0ID0gMDtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiBcbiBcdGlmIChzaXplIFx1MDAzZSBzaXplb2YoYXJncy1cdTAwM2VkYXRhKSlcbiBcdFx0cmV0dXJuIC03OyAvKiAtRTJCSUcgKi9cbkBAIC00MTcsNyAmIzQzOzQxNyw2IEBAIFNFQyhcJiMzNDs/c3RydWN0X29wcy5zL2hpZF9od19vdXRwdXRfcmVwb3J0XCYjMzQ7KVxuIGludCBCUEZfUFJPRyhoaWRfdGVzdF9oaWRyYXdfb3V0cHV0X3JlcG9ydCwgc3RydWN0IGhpZF9icGZfY3R4ICpoY3R4LCBfX3U2NCBzb3VyY2UpXG4ge1xuIFx0X191OCAqZGF0YSA9IGhpZF9icGZfZ2V0X2RhdGEoaGN0eCwgMCAvKiBvZmZzZXQgKi8sIDMgLyogc2l6ZSAqLyk7XG4tXHRpbnQgcmV0O1xuIFxuIFx0aWYgKCFkYXRhKVxuIFx0XHRyZXR1cm4gMDsgLyogRVBFUk0gY2hlY2sgKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9saWIuYnBmLm1rIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbGliLmJwZi5ta1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjkyMzhjYmYxZGUwNjJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2xpYi5icGYubWtcbkBAIC0wLDAgJiM0MzsxLDMyMSBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOyNcbiYjNDM7IyBCdWlsZCBCUEYgcHJvZ3JhbXMgYW5kIHNrZWxldG9ucyBmb3Igc2VsZnRlc3RzLlxuJiM0MzsjXG4mIzQzOyMgVXNlIGl0IGZyb20gYSB0ZXN0IE1ha2VmaWxlIGxpa2UgdGhpczpcbiYjNDM7I1xuJiM0MzsjICAgICBCUEZfU1JDUyAgICAgICAgIDo9IGZvby5icGYuYyBiYXIuYnBmLmNcbiYjNDM7IyAgICAgVEVTVF9HRU5fUFJPR1MgICA6PSBmb29fdGVzdFxuJiM0MzsjICAgICBPVkVSUklERV9UQVJHRVRTIDo9IDEgICAgICAgICAgICAgICMgc2V0IGJlZm9yZSBsaWIubWtcbiYjNDM7IyAgICAgaW5jbHVkZSAuLi9saWIubWtcbiYjNDM7IyAgICAgaW5jbHVkZSAuLi9saWIuYnBmLm1rXG4mIzQzOyNcbiYjNDM7IyAgICAgJChPVVRQVVQpL2Zvb190ZXN0OiBmb29fdGVzdC5jICQoQlBGX1NLRUxTKSAkKEJQRk9CSilcbiYjNDM7IyAgICAgICAgICQoY2FsbCBicGZfbGluaywkQCwkXHUwMDNjKVxuJiM0MzsjXG4mIzQzOyMgRGVwZW5kIG9uICQoQlBGT0JKKSB0byByZWxpbmsgdGhlIHRlc3Qgd2hlbiBsaWJicGYuYSBjaGFuZ2VzLlxuJiM0MzsjXG4mIzQzOyMgT3B0aW9ucyB0byBzZXQgYmVmb3JlIGluY2x1ZGluZyBsaWIuYnBmLm1rOlxuJiM0MzsjICAgQlBGX1BST0dfRVhUICAgICAtIHNvdXJjZSBlbmRpbmc7IGRlZmF1bHQgLmJwZi5jLiBVc2UgLmMgZm9yIHByb2dzL2Zvby5jLlxuJiM0MzsjICAgQlBGX0VYVFJBX0hEUlMgICAtIG1vcmUgaGVhZGVycyBuZWVkZWQgYnkgdGhlIEJQRiBvYmplY3RzLlxuJiM0MzsjICAgQlBGX0VYVFJBX0NGTEFHUyAtIG1vcmUgZmxhZ3MgZm9yIGNvbXBpbGluZyBCUEYgcHJvZ3JhbXMuXG4mIzQzOyMgICBCUEZfU0tFTF9FWFQgICAgIC0gc2tlbGV0b24gaGVhZGVyIGVuZGluZzsgZGVmYXVsdCAuc2tlbC5oLiBNdXN0IGVuZCBpblxuJiM0MzsjICAgICAgICAgICAgICAgICAgICAgIHNrZWwuaC5cbiYjNDM7IyAgIEJQRl9HRU5fU1VCU0tFTCAgLSBhbHNvIGNyZWF0ZSBhIHN1YnNrZWxldG9uIGhlYWRlciB3aGVuIHNldC5cbiYjNDM7IyAgIEJQRl9PQkpfRElSICAgICAgLSBmb2xkZXIgZm9yIEJQRiBvYmplY3RzOyBkZWZhdWx0ICQoT1VUUFVUKS5cbiYjNDM7IyAgIEJQRl9TS0VMX0RJUiAgICAgLSBmb2xkZXIgZm9yIHNrZWxldG9uIGhlYWRlcnM7IGRlZmF1bHQgJChPVVRQVVQpLlxuJiM0MzsjXG4mIzQzOyMgU2V0IG91dHB1dCBkaXJlY3RvcmllcyB0aGF0IHVzZSAkKE9VVFBVVCkgYWZ0ZXIgaW5jbHVkaW5nIGxpYi5tay5cbiYjNDM7I1xuJiM0MzsjIEJQRl9DRkxBR1MgbWF5IGJlIHJlcGxhY2VkIGFmdGVyIHRoaXMgaW5jbHVkZS4gR2VuZXJhdGVkIG5hbWVzIHVzZSB0aGUgc291cmNlXG4mIzQzOyMgc3RlbSB3aXRob3V0IGl0cyBkaXJlY3RvcnkuXG4mIzQzOyNcbiYjNDM7IyBJbmNsdWRlIGxpYi5tayBmaXJzdC4gVGhpcyBmaWxlIGRlZmluZXMgdGhlIEJQRiBidWlsZCB2YXJpYWJsZXMgYW5kIGJwZl9saW5rLFxuJiM0MzsjIGV4dGVuZHMgYWxsLCBDRkxBR1MgYW5kIEVYVFJBX0NMRUFOLCBhbmQgZW5hYmxlcyAuREVMRVRFX09OX0VSUk9SLlxuJiM0MztcbiYjNDM7aW5jbHVkZSAkKHRvcF9zcmNkaXIpL3Rvb2xzL3NjcmlwdHMvTWFrZWZpbGUuYXJjaFx0IyBBUkNIIC8gU1JDQVJDSCAvIEhPU1RBUkNIXG4mIzQzO1xuJiM0MzsjIFJlbW92ZSBwYXJ0aWFsIGZpbGVzIHdyaXR0ZW4gZGlyZWN0bHkgdG8gJEAuXG4mIzQzOy5ERUxFVEVfT05fRVJST1I6XG4mIzQzO1xuJiM0MzsjIE1hdGNoIHRoZSBsaWJicGYgYW5kIGJwZnRvb2wgaG9zdCBjb21waWxlciB0byBMTFZNPS5cbiYjNDM7aWZuZXEgKCQoTExWTSksKVxuJiM0MztIT1NUQ0MgPz0gJChMTFZNX1BSRUZJWCljbGFuZyQoTExWTV9TVUZGSVgpXG4mIzQzO0hPU1RMRCA/PSAkKExMVk1fUFJFRklYKWxkLmxsZCQoTExWTV9TVUZGSVgpXG4mIzQzO2Vsc2VcbiYjNDM7SE9TVENDID89IGdjY1xuJiM0MztIT1NUTEQgPz0gbGRcbiYjNDM7ZW5kaWZcbiYjNDM7Q0xBTkcgID89IGNsYW5nXG4mIzQzO1xuJiM0MztpZm5lcSAoJChWKSwxKVxuJiM0MztsaWJfYnBmX3N1Ym1ha2VfZXh0cmFzIDo9IGZlYXR1cmVfZGlzcGxheT0wXG4mIzQzO2VuZGlmXG4mIzQzO1xuJiM0MzsjIE1hdGNoIHNlbGZ0ZXN0cy9icGYgZGVidWcgYW5kIHJlbGVhc2Ugb3B0aW1pemF0aW9uLlxuJiM0MztPUFRfRkxBR1MgPz0gJChpZiAkKFJFTEVBU0UpLC1PMiwtTzApXG4mIzQzO1xuJiM0MzsjIC0tLS0gZmlsZXMgYW5kIHRvb2xzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MzsjIFVzZSBvbmUgZnVsbCBwYXRoLiBEaWZmZXJlbnQgZm9ybXMgb2YgdGhlIHNhbWUgLUkgcGF0aCBjYW4gY2hhbmdlIEJURiBvcmRlci5cbiYjNDM7bGliX2JwZl90b29sc19kaXIgICAgICAgICA6PSAkKGFic3BhdGggJCh0b3Bfc3JjZGlyKS90b29scylcbiYjNDM7bGliX2JwZl9kaXIgICAgICAgICAgICAgICA6PSAkKGxpYl9icGZfdG9vbHNfZGlyKS9saWIvYnBmXG4mIzQzO2xpYl9icGZfdG9vbHNfaW5jbHVkZV9kaXIgOj0gJChsaWJfYnBmX3Rvb2xzX2RpcikvaW5jbHVkZVxuJiM0MztsaWJfYnBmX2JwZnRvb2xfZGlyICAgICAgIDo9ICQobGliX2JwZl90b29sc19kaXIpL2JwZi9icGZ0b29sXG4mIzQzO2xpYl9icGZfYXBpX2RpciAgICAgICAgICAgOj0gJChsaWJfYnBmX3Rvb2xzX2luY2x1ZGVfZGlyKS91YXBpXG4mIzQzO2xpYl9icGZfc291cmNlcyAgICAgICAgICAgOj0gJCh3aWxkY2FyZCAkKGxpYl9icGZfZGlyKS8qLltjaF0gXFxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICAkKGxpYl9icGZfZGlyKS9NYWtlZmlsZSlcbiYjNDM7bGliX2JwZl9oZWFkZXJfc291cmNlcyAgICA6PSAkKGZpbHRlciAlLmgsJChsaWJfYnBmX3NvdXJjZXMpKSBcXFxuJiM0MztcdFx0XHRcdCAgICAgJChsaWJfYnBmX2FwaV9kaXIpL2xpbnV4L2JwZi5oXG4mIzQzOyMgS2VlcCB0aGVzZSBuYW1lcyBmb3IgY2FsbGVycyB3aGljaCBhZGQgdGhlaXIgb3duIEJQRiBmbGFncyBvciBkZXBlbmRlbmNpZXMuXG4mIzQzO0JQRkRJUiAgICAgOj0gJChsaWJfYnBmX2RpcilcbiYjNDM7QVBJRElSICAgICA6PSAkKGxpYl9icGZfYXBpX2RpcilcbiYjNDM7XG4mIzQzOyMgS2VlcCBwcml2YXRlIGJ1aWxkIGZpbGVzIHVuZGVyICQoT1VUUFVUKSBmb3IgYm90aCBpbi10cmVlIGFuZCBPPSBidWlsZHMuXG4mIzQzO2xpYl9icGZfc2NyYXRjaF9kaXIgOj0gJChPVVRQVVQpL3Rvb2xzXG4mIzQzO2xpYl9icGZfYnVpbGRfZGlyICAgOj0gJChsaWJfYnBmX3NjcmF0Y2hfZGlyKS9idWlsZFxuJiM0MztsaWJfYnBmX2luY2x1ZGVfZGlyIDo9ICQobGliX2JwZl9zY3JhdGNoX2RpcikvaW5jbHVkZVxuJiM0MzsjIElOQ0xVREVfRElSIGlzIGFsc28gdXNlZCBieSBjYWxsZXJzIHRoYXQgcmVwbGFjZSBCUEZfQ0ZMQUdTLlxuJiM0MztJTkNMVURFX0RJUiA6PSAkKGxpYl9icGZfaW5jbHVkZV9kaXIpXG4mIzQzO0JQRk9CSiAgICAgIDo9ICQobGliX2JwZl9idWlsZF9kaXIpL2xpYmJwZi9saWJicGYuYVxuJiM0MztcbiYjNDM7IyBDcm9zcyBidWlsZHMgdXNlIGEgc2VwYXJhdGUgbmF0aXZlIGxpYmJwZiBmb3IgYnBmdG9vbC5cbiYjNDM7aWZuZXEgKCQoQ1JPU1NfQ09NUElMRSkkKGZpbHRlci1vdXQgJChIT1NUQVJDSCksJChTUkNBUkNIKSksKVxuJiM0MztsaWJfYnBmX2hvc3RfYnVpbGRfZGlyICAgOj0gJChsaWJfYnBmX2J1aWxkX2RpcikvaG9zdFxuJiM0MztsaWJfYnBmX2hvc3Rfc2NyYXRjaF9kaXIgOj0gJChPVVRQVVQpL2hvc3QtdG9vbHNcbiYjNDM7ZWxzZVxuJiM0MztsaWJfYnBmX2hvc3RfYnVpbGRfZGlyICAgOj0gJChsaWJfYnBmX2J1aWxkX2RpcilcbiYjNDM7bGliX2JwZl9ob3N0X3NjcmF0Y2hfZGlyIDo9ICQobGliX2JwZl9zY3JhdGNoX2RpcilcbiYjNDM7ZW5kaWZcbiYjNDM7bGliX2JwZl9ob3N0X29iaiA6PSAkKGxpYl9icGZfaG9zdF9idWlsZF9kaXIpL2xpYmJwZi9saWJicGYuYVxuJiM0MztERUZBVUxUX0JQRlRPT0wgIDo9ICQobGliX2JwZl9ob3N0X3NjcmF0Y2hfZGlyKS9zYmluL2JwZnRvb2xcbiYjNDM7QlBGVE9PTCAgICAgICAgICA/PSAkKERFRkFVTFRfQlBGVE9PTClcbiYjNDM7XG4mIzQzOyMgUmV1c2UgdGFyZ2V0IFVTRVJDRkxBR1Mgb25seSB3aGVuIGJwZnRvb2wgc2hhcmVzIHRoZSB0YXJnZXQgbGliYnBmLlxuJiM0MztpZmVxICgkKEJQRk9CSiksJChsaWJfYnBmX2hvc3Rfb2JqKSlcbiYjNDM7bGliX2JwZl9ob3N0X3VzZXJfY2ZsYWdzIDo9ICQoVVNFUkNGTEFHUylcbiYjNDM7ZW5kaWZcbiYjNDM7XG4mIzQzOyMgLS0tLSBmaW5kIHZtbGludXggQlRGIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzO1ZNTElOVVhfQlRGX1BBVEhTID89ICQoaWYgJChPKSwkKE8pL3ZtbGludXgpXHRcdFx0XHRcXFxuJiM0MztcdFx0ICAgICAkKGlmICQoS0JVSUxEX09VVFBVVCksJChLQlVJTERfT1VUUFVUKS92bWxpbnV4KVx0XFxcbiYjNDM7XHRcdCAgICAgJCh0b3Bfc3JjZGlyKS92bWxpbnV4XHRcdFx0XHRcXFxuJiM0MztcdFx0ICAgICAvc3lzL2tlcm5lbC9idGYvdm1saW51eFx0XHRcdFx0XFxcbiYjNDM7XHRcdCAgICAgL2Jvb3Qvdm1saW51eC0kKHNoZWxsIHVuYW1lIC1yKVxuJiM0MztWTUxJTlVYX0JURiA/PSAkKGFic3BhdGggJChmaXJzdHdvcmQgJCh3aWxkY2FyZCAkKFZNTElOVVhfQlRGX1BBVEhTKSkpKVxuJiM0MzsjIERlbGF5IG1pc3Npbmctdm1saW51eCBlcnJvcnMgc28gXCYjMzQ7bWFrZSBjbGVhblwmIzM0OyBzdGlsbCB3b3Jrcy5cbiYjNDM7bGliX2JwZl92bWxpbnV4X2RlcHMgOj0gJChpZiAkKFZNTElOVVhfSCksJChWTUxJTlVYX0gpLCQoVk1MSU5VWF9CVEYpICQoQlBGVE9PTCkpXG4mIzQzO1xuJiM0MzsjIC0tLS0gY29tcGlsZXIgZmxhZ3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MzsjIEZpbmQgdGhlIG5vcm1hbCBzeXN0ZW0gaGVhZGVycyB0aGF0IENsYW5nIG9taXRzIHdpdGggLS10YXJnZXQ9YnBmLiBQdXQgdGhlbVxuJiM0MzsjIGxhc3Qgd2l0aCAtaWRpcmFmdGVyIHNvIHRoZXkgY2Fubm90IHJlcGxhY2UgcHJvamVjdCBoZWFkZXJzLlxuJiM0MztkZWZpbmUgbGliX2JwZl9nZXRfc3lzX2luY2x1ZGVzXG4mIzQzOyQoc2hlbGwgJCgxKSAkKDIpIC12IC1FIC0gXHUwMDNjL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxIFxcXG4mIzQzO1x0fCBzZWQgLW4gJiMzOTsvXHUwMDNjLi4uXHUwMDNlIHNlYXJjaCBzdGFydHMgaGVyZTovLC9FbmQgb2Ygc2VhcmNoIGxpc3QuL3sgc3wgXFwoLy4qXFwpfC1pZGlyYWZ0ZXIgXFwxfHAgfSYjMzk7KSBcXFxuJiM0MzskKHNoZWxsICQoMSkgJCgyKSAtZE0gLUUgLSBcdTAwM2MvZGV2L251bGwgfCBncmVwICYjMzk7X19yaXNjdl94bGVuICYjMzk7IHwgYXdrICYjMzk7e3ByaW50ZihcJiMzNDstRF9fcmlzY3ZfeGxlbj0lZCAtRF9fQklUU19QRVJfTE9ORz0lZFwmIzM0OywgJCQzLCAkJDMpfSYjMzk7KSBcXFxuJiM0MzskKHNoZWxsICQoMSkgJCgyKSAtZE0gLUUgLSBcdTAwM2MvZGV2L251bGwgfCBncmVwICYjMzk7X19sb29uZ2FyY2hfZ3JsZW4gJiMzOTsgfCBhd2sgJiMzOTt7cHJpbnRmKFwmIzM0Oy1EX19CSVRTX1BFUl9MT05HPSVkXCYjMzQ7LCAkJDMpfSYjMzk7KSBcXFxuJiM0MzskKHNoZWxsICQoMSkgJCgyKSAtZE0gLUUgLSBcdTAwM2MvZGV2L251bGwgfCBncmVwIC1FICYjMzk7TUlQUyhFTHxFQil8X01JUFNfU1ooUFRSfExPTkcpIHxfTUlQU19TSU0gfF9BQkkoTzMyfE4zMnw2NCkgJiMzOTsgfCBhd2sgJiMzOTt7cHJpbnRmKFwmIzM0Oy1EJXM9JXMgXCYjMzQ7LCAkJDIsICQkMyl9JiMzOTspXG4mIzQzO2VuZGVmXG4mIzQzO2lmbmVxICgkKENST1NTX0NPTVBJTEUpLClcbiYjNDM7bGliX2JwZl9jbGFuZ190YXJnZXRfYXJjaCA9IC0tdGFyZ2V0PSQobm90ZGlyICQoQ1JPU1NfQ09NUElMRTolLT0lKSlcbiYjNDM7ZW5kaWZcbiYjNDM7IyBGaW5kIHRoZSBzeXN0ZW0gaW5jbHVkZSBmbGFncyBvbmNlIGFuZCByZXVzZSB0aGVtLlxuJiM0MztDTEFOR19TWVNfSU5DTFVERVMgOj0gJChjYWxsIGxpYl9icGZfZ2V0X3N5c19pbmNsdWRlcywkKENMQU5HKSwkKGxpYl9icGZfY2xhbmdfdGFyZ2V0X2FyY2gpKVxuJiM0MztcbiYjNDM7bGliX2JwZl9pc19saXR0bGVfZW5kaWFuIDo9ICQoc2hlbGwgJChDQykgLWRNIC1FIC0gXHUwMDNjL2Rldi9udWxsIHwgXFxcbiYjNDM7XHRcdFx0XHQgICAgZ3JlcCAmIzM5O2RlZmluZSBfX0JZVEVfT1JERVJfXyBfX09SREVSX0xJVFRMRV9FTkRJQU5fXyYjMzk7KVxuJiM0MztNRU5ESUFOIDo9ICQoaWYgJChsaWJfYnBmX2lzX2xpdHRsZV9lbmRpYW4pLC1tbGl0dGxlLWVuZGlhbiwtbWJpZy1lbmRpYW4pXG4mIzQzO1xuJiM0MzsjIFVzZSBCUEYgQ1BVIHYzIHdoZW4gQ2xhbmcgc3VwcG9ydHMgaXQuIE90aGVyd2lzZSB1c2UgdjIuXG4mIzQzO2xpYl9icGZfY2xhbmdfY3B1IDo9ICQoc2hlbGwgJChDTEFORykgLS10YXJnZXQ9YnBmIC1tY3B1PWhlbHAgMlx1MDAzZVx1MDAyNjEgfCBcXFxuJiM0MztcdFx0XHQgICAgIGdyZXAgLXEgJiMzOTt2MyYjMzk7IFx1MDAyNlx1MDAyNiBlY2hvIHYzIHx8IGVjaG8gdjIpXG4mIzQzO1xuJiM0MzsjIEFjY2VwdCBhbm9ueW1vdXMgc3RydWN0IGFuZCB1bmlvbiBtZW1iZXJzIGluIHZtbGludXguaC5cbiYjNDM7QlBGX0NGTEFHUyA9IC1nIC1XYWxsIC1XZXJyb3IgLURfX1RBUkdFVF9BUkNIXyQoU1JDQVJDSCkgJChNRU5ESUFOKVx0XFxcbiYjNDM7XHQgICAgIC1JJChJTkNMVURFX0RJUikgLUkkKEFQSURJUilcdFx0XHRcdFxcXG4mIzQzO1x0ICAgICAtc3RkPWdudTExXHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdCAgICAgLWZuby1zdHJpY3QtYWxpYXNpbmdcdFx0XHRcdFx0XFxcbiYjNDM7XHQgICAgIC1mbXMtZXh0ZW5zaW9ucyAtV25vLW1pY3Jvc29mdC1hbm9uLXRhZ1x0XHRcdFxcXG4mIzQzO1x0ICAgICAtV25vLWNvbXBhcmUtZGlzdGluY3QtcG9pbnRlci10eXBlc1x0XHRcdFxcXG4mIzQzO1x0ICAgICAkKENMQU5HX1NZU19JTkNMVURFUykgJChCUEZfRVhUUkFfQ0ZMQUdTKVxuJiM0MztcbiYjNDM7IyAkMSA9IHNvdXJjZSwgJDIgPSBvYmplY3QuIC1NTUQgLU1QIHRyYWNrcyBub24tc3lzdGVtIGhlYWRlcnMuXG4mIzQzO2RlZmluZSBsaWJfYnBmX2J1aWxkX3J1bGVcbiYjNDM7XHQkKGNhbGwgbXNnLENMTkctQlBGLCwkMilcbiYjNDM7XHQkKFEpJChDTEFORykgJChCUEZfQ0ZMQUdTKSAtTzIgLS10YXJnZXQ9YnBmIC1tY3B1PSQobGliX2JwZl9jbGFuZ19jcHUpIFxcXG4mIzQzO1x0XHQtTU1EIC1NUCAtYyAkMSAtbyAkMlxuJiM0MztlbmRlZlxuJiM0MztcbiYjNDM7IyAtLS0tIG91dHB1dCBmb2xkZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7QlBGX09CSl9ESVIgID89ICQoT1VUUFVUKVxuJiM0MztCUEZfU0tFTF9ESVIgPz0gJChPVVRQVVQpXG4mIzQzOyMgUmVqZWN0IGVtcHR5IGRpcmVjdG9yaWVzIGJlZm9yZSBjbGVhbnVwIGdsb2JzIGNhbiByZWFjaCB0aGUgZmlsZXN5c3RlbSByb290LlxuJiM0MztpZmVxICgkKHN0cmlwICQoQlBGX09CSl9ESVIpKSwpXG4mIzQzOyQoZXJyb3IgbGliLmJwZi5tazogQlBGX09CSl9ESVIgaXMgZW1wdHk7IHNldCBpdCBhZnRlciBcJiMzNDtpbmNsdWRlIC4uL2xpYi5ta1wmIzM0OylcbiYjNDM7ZW5kaWZcbiYjNDM7aWZlcSAoJChzdHJpcCAkKEJQRl9TS0VMX0RJUikpLClcbiYjNDM7JChlcnJvciBsaWIuYnBmLm1rOiBCUEZfU0tFTF9ESVIgaXMgZW1wdHk7IHNldCBpdCBhZnRlciBcJiMzNDtpbmNsdWRlIC4uL2xpYi5ta1wmIzM0OylcbiYjNDM7ZW5kaWZcbiYjNDM7XG4mIzQzOyMgLS0tLSBidWlsZCBmb2xkZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzO2xpYl9icGZfbWFrZV9kaXJzIDo9ICQoc29ydCAkKGxpYl9icGZfYnVpbGRfZGlyKS9saWJicGZcdFx0XHRcXFxuJiM0MztcdFx0XHQgICAgJChsaWJfYnBmX2hvc3RfYnVpbGRfZGlyKS9saWJicGZcdFx0XFxcbiYjNDM7XHRcdFx0ICAgICQobGliX2JwZl9ob3N0X2J1aWxkX2RpcikvYnBmdG9vbFx0XHRcXFxuJiM0MztcdFx0XHQgICAgJChsaWJfYnBmX2luY2x1ZGVfZGlyKVx0XHRcdFxcXG4mIzQzO1x0XHRcdCAgICAkKGZpbHRlci1vdXQgJChPVVRQVVQpLCQoQlBGX09CSl9ESVIpICQoQlBGX1NLRUxfRElSKSkpXG4mIzQzOyQobGliX2JwZl9tYWtlX2RpcnMpOlxuJiM0MztcdCQoY2FsbCBtc2csTUtESVIsLCRAKVxuJiM0MztcdCQoUSlta2RpciAtcCAkQFxuJiM0MztcbiYjNDM7IyAtLS0tIHRhcmdldCBsaWJicGYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7IyBQYXNzIHVuZXhwb3J0ZWQgdG9vbGNoYWluIHNldHRpbmdzIGFuZCBidWlsZCBQSUMgZm9yIFBJRSB0ZXN0IGJpbmFyaWVzLlxuJiM0MzsjIGxpYmJwZiBjb25zdW1lcyBVU0VSQ0ZMQUdTIHRocm91Z2ggRVhUUkFfQ0ZMQUdTLlxuJiM0MzskKEJQRk9CSik6ICQobGliX2JwZl9zb3VyY2VzKSAkKGxpYl9icGZfYXBpX2RpcikvbGludXgvYnBmLmggXFxcbiYjNDM7XHQgICB8ICQobGliX2JwZl9idWlsZF9kaXIpL2xpYmJwZlxuJiM0MztcdCQoUSkkKE1BS0UpICQobGliX2JwZl9zdWJtYWtlX2V4dHJhcykgLUMgJChsaWJfYnBmX2RpcikgXFxcbiYjNDM7XHRcdCAgICBPVVRQVVQ9JChsaWJfYnBmX2J1aWxkX2RpcikvbGliYnBmLyBcXFxuJiM0MztcdFx0ICAgIEFSQ0g9JChBUkNIKSBDUk9TU19DT01QSUxFPSQoQ1JPU1NfQ09NUElMRSkgQ0M9XCYjMzQ7JChDQylcJiMzNDsgICAgIFxcXG4mIzQzO1x0XHQgICAgRVhUUkFfQ0ZMQUdTPSYjMzk7LWcgJChPUFRfRkxBR1MpIC1mUElDICQoRVhUUkFfQ0ZMQUdTKSAkKFVTRVJDRkxBR1MpJiMzOTsgXFxcbiYjNDM7XHRcdCAgICBERVNURElSPSQobGliX2JwZl9zY3JhdGNoX2RpcikgcHJlZml4PSBhbGwgaW5zdGFsbF9oZWFkZXJzXG4mIzQzO1xuJiM0MzsjIC0tLS0gaG9zdCBsaWJicGYsIG9ubHkgd2hlbiB0aGUgdGFyZ2V0IGRpZmZlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MztpZm5lcSAoJChCUEZPQkopLCQobGliX2JwZl9ob3N0X29iaikpXG4mIzQzOyQobGliX2JwZl9ob3N0X29iaik6ICQobGliX2JwZl9zb3VyY2VzKSAkKGxpYl9icGZfYXBpX2RpcikvbGludXgvYnBmLmggXFxcbiYjNDM7XHRcdHwgJChsaWJfYnBmX2hvc3RfYnVpbGRfZGlyKS9saWJicGZcbiYjNDM7XHQkKFEpJChNQUtFKSAkKGxpYl9icGZfc3VibWFrZV9leHRyYXMpIC1DICQobGliX2JwZl9kaXIpIFxcXG4mIzQzO1x0XHQgICAgQVJDSD0gQ1JPU1NfQ09NUElMRT0gXFxcbiYjNDM7XHRcdCAgICBPVVRQVVQ9JChsaWJfYnBmX2hvc3RfYnVpbGRfZGlyKS9saWJicGYvIFxcXG4mIzQzO1x0XHQgICAgQ0M9XCYjMzQ7JChIT1NUQ0MpXCYjMzQ7IExEPVwmIzM0OyQoSE9TVExEKVwmIzM0OyBcXFxuJiM0MztcdFx0ICAgIEVYVFJBX0NGTEFHUz0mIzM5Oy1nICQoT1BUX0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykmIzM5OyBcXFxuJiM0MztcdFx0ICAgIERFU1RESVI9JChsaWJfYnBmX2hvc3Rfc2NyYXRjaF9kaXIpIHByZWZpeD0gYWxsIGluc3RhbGxfaGVhZGVyc1xuJiM0MztlbmRpZlxuJiM0MztcbiYjNDM7IyAtLS0tIGhvc3QgYnBmdG9vbCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7JChERUZBVUxUX0JQRlRPT0wpOiAkKHdpbGRjYXJkICQobGliX2JwZl9icGZ0b29sX2RpcikvKi5bY2hdIFxcXG4mIzQzO1x0XHRcdFx0ICQobGliX2JwZl9icGZ0b29sX2RpcikvTWFrZWZpbGUpIFxcXG4mIzQzO1x0XHQgICAgJChsaWJfYnBmX2hvc3Rfb2JqKSB8ICQobGliX2JwZl9ob3N0X2J1aWxkX2RpcikvYnBmdG9vbFxuJiM0MztcdCQoUSkkKE1BS0UpICQobGliX2JwZl9zdWJtYWtlX2V4dHJhcykgLUMgJChsaWJfYnBmX2JwZnRvb2xfZGlyKSBcXFxuJiM0MztcdFx0ICAgIEFSQ0g9IENST1NTX0NPTVBJTEU9IENDPVwmIzM0OyQoSE9TVENDKVwmIzM0OyBMRD1cJiMzNDskKEhPU1RMRClcJiMzNDsgXFxcbiYjNDM7XHRcdCAgICBFWFRSQV9DRkxBR1M9JiMzOTstZyAkKE9QVF9GTEFHUykgJChFWFRSQV9DRkxBR1MpICQobGliX2JwZl9ob3N0X3VzZXJfY2ZsYWdzKSYjMzk7IFxcXG4mIzQzO1x0XHQgICAgRVhUUkFfTERGTEFHUz0mIzM5OyQoRVhUUkFfTERGTEFHUykmIzM5O1x0XHQgIFxcXG4mIzQzO1x0XHQgICAgT1VUUFVUPSQobGliX2JwZl9ob3N0X2J1aWxkX2RpcikvYnBmdG9vbC9cdCAgXFxcbiYjNDM7XHRcdCAgICBMSUJCUEZfT1VUUFVUPSQobGliX2JwZl9ob3N0X2J1aWxkX2RpcikvbGliYnBmLyBcXFxuJiM0MztcdFx0ICAgIExJQkJQRl9ERVNURElSPSQobGliX2JwZl9ob3N0X3NjcmF0Y2hfZGlyKS9cdCAgXFxcbiYjNDM7XHRcdCAgICBwcmVmaXg9IERFU1RESVI9JChsaWJfYnBmX2hvc3Rfc2NyYXRjaF9kaXIpLyBpbnN0YWxsLWJpblxuJiM0MztcbiYjNDM7IyAtLS0tIGJ1aWxkIHZtbGludXguaCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7bGliX2JwZl92bWxpbnV4X2ggICAgIDo9ICQoSU5DTFVERV9ESVIpL3ZtbGludXguaFxuJiM0MztsaWJfYnBmX3ZtbGludXhfc3RhbXAgOj0gJChJTkNMVURFX0RJUikvdm1saW51eC5oLnN0YW1wXG4mIzQzO1xuJiM0MzsjIFByZXNlcnZlIHZtbGludXguaCYjMzk7cyB0aW1lc3RhbXAgd2hlbiBpdHMgY29udGVudHMgZG8gbm90IGNoYW5nZS5cbiYjNDM7aWZlcSAoJCh3aWxkY2FyZCAkKGxpYl9icGZfdm1saW51eF9oKSksKVxuJiM0MzsjIFJlZ2VuZXJhdGUgaWYgdGhlIGhlYWRlciBpcyBtaXNzaW5nIGJ1dCBpdHMgc3RhbXAgcmVtYWlucy5cbiYjNDM7LlBIT05ZOiAkKGxpYl9icGZfdm1saW51eF9zdGFtcClcbiYjNDM7ZW5kaWZcbiYjNDM7XG4mIzQzOyMgVXNlIGEgbm9ybWFsIGVkZ2Ugc28gZGVwZW5kZW50cyBzZWUgYSBjaGFuZ2VkIGhlYWRlciBpbiB0aGUgc2FtZSBtYWtlIHJ1bi5cbiYjNDM7JChsaWJfYnBmX3ZtbGludXhfaCk6ICQobGliX2JwZl92bWxpbnV4X3N0YW1wKSA7XG4mIzQzO1xuJiM0MzskKGxpYl9icGZfdm1saW51eF9zdGFtcCk6ICQobGliX2JwZl92bWxpbnV4X2RlcHMpIHwgJChJTkNMVURFX0RJUilcbiYjNDM7aWZlcSAoJChWTUxJTlVYX0gpLClcbiYjNDM7XHQkKGNhbGwgbXNnLEdFTiwsJChsaWJfYnBmX3ZtbGludXhfaCkpXG4mIzQzO1x0JChRKXRlc3QgLW4gXCYjMzQ7JChWTUxJTlVYX0JURilcJiMzNDsgfHwgeyBcXFxuJiM0MztcdFx0ZWNobyBcJiMzNDtsaWIuYnBmLm1rOiBubyB2bWxpbnV4IGF0IGFueSBvZiBcXFwmIzM0OyQoVk1MSU5VWF9CVEZfUEFUSFMpXFxcJiMzNDtcJiMzNDsgXHUwMDNlXHUwMDI2MjsgXFxcbiYjNDM7XHRcdGV4aXQgMTsgfVxuJiM0MztcdCQoUSkkKEJQRlRPT0wpIGJ0ZiBkdW1wIGZpbGUgJChWTUxJTlVYX0JURikgZm9ybWF0IGMgXHUwMDNlICRALnRtcFxuJiM0MztlbHNlXG4mIzQzO1x0JChjYWxsIG1zZyxDUCwsJChsaWJfYnBmX3ZtbGludXhfaCkpXG4mIzQzO1x0JChRKWNwIFwmIzM0OyQoVk1MSU5VWF9IKVwmIzM0OyAkQC50bXBcbiYjNDM7ZW5kaWZcbiYjNDM7XHQkKFEpY21wIC1zICRALnRtcCAkKGxpYl9icGZfdm1saW51eF9oKSB8fCBtdiAkQC50bXAgJChsaWJfYnBmX3ZtbGludXhfaClcbiYjNDM7XHQkKFEpcm0gLWYgJEAudG1wXG4mIzQzO1x0JChRKXRvdWNoICRAXG4mIzQzO1xuJiM0MzsjIC0tLS0gQlBGIG9iamVjdHMgYW5kIHNrZWxldG9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MztCUEZfUFJPR19FWFQgPz0gLmJwZi5jXG4mIzQzOyMgRWFjaCBzb3VyY2UgbXVzdCBlbmQgd2l0aCBCUEZfUFJPR19FWFQgc28gTWFrZSBjYW4gcmVtb3ZlIHRoYXQgZW5kaW5nLlxuJiM0MztsaWJfYnBmX2JhZF9zcmNzIDo9ICQoZmlsdGVyLW91dCAlJChCUEZfUFJPR19FWFQpLCQoQlBGX1NSQ1MpKVxuJiM0MztpZm5lcSAoJChsaWJfYnBmX2JhZF9zcmNzKSwpXG4mIzQzOyQoZXJyb3IgbGliLmJwZi5tazogQlBGX1NSQ1MgZW50cmllcyBtdXN0IGVuZCBpbiAkKEJQRl9QUk9HX0VYVCk6ICQobGliX2JwZl9iYWRfc3JjcykpXG4mIzQzO2VuZGlmXG4mIzQzO2xpYl9icGZfc3RlbXMgOj0gJChwYXRzdWJzdCAlJChCUEZfUFJPR19FWFQpLCUsJChub3RkaXIgJChCUEZfU1JDUykpKVxuJiM0MzsjIFRoZSBzdGVtIGJlY29tZXMgdGhlIHNrZWxldG9uJiMzOTtzIEMgbmFtZTsgcmVqZWN0IGRvdHMgYW5kIGh5cGhlbnMuXG4mIzQzO2xpYl9icGZfYmFkX3N0ZW1zIDo9ICQoc3RyaXAgJChmb3JlYWNoIHMsJChsaWJfYnBmX3N0ZW1zKSxcdFx0XHRcXFxuJiM0MztcdFx0XHQkKGlmICQoZmluZHN0cmluZyAuLCQocykpJChmaW5kc3RyaW5nIC0sJChzKSksJChzKSkpKVxuJiM0MztpZm5lcSAoJChsaWJfYnBmX2JhZF9zdGVtcyksKVxuJiM0MzskKGVycm9yIGxpYi5icGYubWs6IEJQRl9TUkNTIGJhc2VuYW1lcyBtdXN0IG5vdCBjb250YWluICYjMzk7LiYjMzk7IG9yICYjMzk7LSYjMzk7OiAkKGxpYl9icGZfYmFkX3N0ZW1zKSlcbiYjNDM7ZW5kaWZcbiYjNDM7IyBPdXRwdXQgbmFtZXMgb21pdCBkaXJlY3Rvcmllcywgc28gcmVqZWN0IGR1cGxpY2F0ZSBzdGVtcy5cbiYjNDM7aWZuZXEgKCQod29yZHMgJChsaWJfYnBmX3N0ZW1zKSksJCh3b3JkcyAkKHNvcnQgJChsaWJfYnBmX3N0ZW1zKSkpKVxuJiM0MzskKGVycm9yIGxpYi5icGYubWs6IEJQRl9TUkNTIGhhcyBjb2xsaWRpbmcgYmFzZW5hbWVzOiAkKEJQRl9TUkNTKSlcbiYjNDM7ZW5kaWZcbiYjNDM7QlBGX1NLRUxfRVhUICAgID89IC5za2VsLmhcbiYjNDM7bGliX2JwZl9zdWJza2VsX2V4dCA6PSAkKHBhdHN1YnN0ICVza2VsLmgsJXN1YnNrZWwuaCwkKEJQRl9TS0VMX0VYVCkpXG4mIzQzOyMgS2VlcCBza2VsZXRvbiBzdWZmaXhlcyBkaXN0aW5jdCBhbmQgY2xlYW51cCBnbG9icyBuYXJyb3cuXG4mIzQzO2lmZXEgKCQobGliX2JwZl9zdWJza2VsX2V4dCksJChCUEZfU0tFTF9FWFQpKVxuJiM0MzskKGVycm9yIGxpYi5icGYubWs6IEJQRl9TS0VMX0VYVCBtdXN0IGVuZCBpbiBza2VsLmg6ICQoQlBGX1NLRUxfRVhUKSlcbiYjNDM7ZW5kaWZcbiYjNDM7QlBGX09CSlMgIDo9ICQoYWRkcHJlZml4ICQoQlBGX09CSl9ESVIpLywkKGFkZHN1ZmZpeCAuYnBmLm8sJChsaWJfYnBmX3N0ZW1zKSkpXG4mIzQzO0JQRl9TS0VMUyA6PSAkKGFkZHByZWZpeCAkKEJQRl9TS0VMX0RJUikvLCQoYWRkc3VmZml4ICQoQlBGX1NLRUxfRVhUKSwkKGxpYl9icGZfc3RlbXMpKSlcbiYjNDM7aWZuZXEgKCQoQlBGX0dFTl9TVUJTS0VMKSwpXG4mIzQzO0JQRl9TVUJTS0VMUyA6PSAkKGFkZHByZWZpeCAkKEJQRl9TS0VMX0RJUikvLCQoYWRkc3VmZml4ICQobGliX2JwZl9zdWJza2VsX2V4dCksJChsaWJfYnBmX3N0ZW1zKSkpXG4mIzQzO2VuZGlmXG4mIzQzO1xuJiM0MzsjIFVzZSBwZXItc291cmNlIHJ1bGVzIHRvIGF2b2lkIGNoYW5naW5nIG5vcm1hbCAuYyBsb29rdXAuXG4mIzQzOyMgVHJhY2sgc291cmNlIGhlYWRlcnMgYmVmb3JlIEJQRk9CSiBpbnN0YWxscyB0aGVpciB1cGRhdGVkIGNvcGllcy5cbiYjNDM7ZGVmaW5lIGxpYl9icGZfb2JqX3J1bGVcbiYjNDM7JChCUEZfT0JKX0RJUikvJChwYXRzdWJzdCAlJChCUEZfUFJPR19FWFQpLCUsJChub3RkaXIgJCgxKSkpLmJwZi5vOiAkKDEpXHRcXFxuJiM0MztcdFx0JChCUEZfRVhUUkFfSERSUykgJChsaWJfYnBmX2hlYWRlcl9zb3VyY2VzKVx0XHRcdFxcXG4mIzQzO1x0XHQkKElOQ0xVREVfRElSKS92bWxpbnV4LmggfCAkKEJQRl9PQkpfRElSKSAkKEJQRk9CSilcbiYjNDM7XHQkJChjYWxsIGxpYl9icGZfYnVpbGRfcnVsZSwkJFx1MDAzYywkJEApXG4mIzQzO2VuZGVmXG4mIzQzOyQoZm9yZWFjaCBzcmMsJChCUEZfU1JDUyksJChldmFsICQoY2FsbCBsaWJfYnBmX29ial9ydWxlLCQoc3JjKSkpKVxuJiM0MztcbiYjNDM7IyBHZW5lcmF0ZSBib3RoIGhlYWRlcnMgdG9nZXRoZXIgc28gZWl0aGVyIG1pc3NpbmcgdGFyZ2V0IHJlYnVpbGRzIHRoZSBwYWlyLlxuJiM0MztsaWJfYnBmX3NrZWxfdGFyZ2V0cyA6PSAkKEJQRl9TS0VMX0RJUikvJSQoQlBGX1NLRUxfRVhUKVxuJiM0MztpZm5lcSAoJChCUEZfR0VOX1NVQlNLRUwpLClcbiYjNDM7bGliX2JwZl9za2VsX3RhcmdldHMgJiM0Mzs9ICQoQlBGX1NLRUxfRElSKS8lJChsaWJfYnBmX3N1YnNrZWxfZXh0KVxuJiM0MztlbmRpZlxuJiM0MztcbiYjNDM7IyBMaW5rIHRocmVlIHRpbWVzIGFuZCByZXF1aXJlIHRoZSBmaW5hbCB0d28gb2JqZWN0cyB0byBtYXRjaC5cbiYjNDM7JChsaWJfYnBmX3NrZWxfdGFyZ2V0cyk6ICQoQlBGX09CSl9ESVIpLyUuYnBmLm8gJChCUEZUT09MKSB8ICQoQlBGX1NLRUxfRElSKVxuJiM0MztcdCQoY2FsbCBtc2csR0VOLVNLRUwsLCQoQlBGX1NLRUxfRElSKS8kKiQoQlBGX1NLRUxfRVhUKSlcbiYjNDM7XHQkKFEpJChCUEZUT09MKSBnZW4gb2JqZWN0ICQoXHUwMDNjOi5vPS5saW5rZWQxLm8pICRcdTAwM2NcbiYjNDM7XHQkKFEpJChCUEZUT09MKSBnZW4gb2JqZWN0ICQoXHUwMDNjOi5vPS5saW5rZWQyLm8pICQoXHUwMDNjOi5vPS5saW5rZWQxLm8pXG4mIzQzO1x0JChRKSQoQlBGVE9PTCkgZ2VuIG9iamVjdCAkKFx1MDAzYzoubz0ubGlua2VkMy5vKSAkKFx1MDAzYzoubz0ubGlua2VkMi5vKVxuJiM0MztcdCQoUSlkaWZmICQoXHUwMDNjOi5vPS5saW5rZWQyLm8pICQoXHUwMDNjOi5vPS5saW5rZWQzLm8pXG4mIzQzO1x0JChRKSQoQlBGVE9PTCkgZ2VuIHNrZWxldG9uICQoXHUwMDNjOi5vPS5saW5rZWQzLm8pIG5hbWUgJCogXHUwMDNlICQoQlBGX1NLRUxfRElSKS8kKiQoQlBGX1NLRUxfRVhUKVxuJiM0MztpZm5lcSAoJChCUEZfR0VOX1NVQlNLRUwpLClcbiYjNDM7XHQkKFEpJChCUEZUT09MKSBnZW4gc3Vic2tlbGV0b24gJChcdTAwM2M6Lm89LmxpbmtlZDMubykgbmFtZSAkKiBcdTAwM2UgJChCUEZfU0tFTF9ESVIpLyQqJChsaWJfYnBmX3N1YnNrZWxfZXh0KVxuJiM0MztlbmRpZlxuJiM0MztcdCQoUSlybSAtZiAkKFx1MDAzYzoubz0ubGlua2VkMS5vKSAkKFx1MDAzYzoubz0ubGlua2VkMi5vKSAkKFx1MDAzYzoubz0ubGlua2VkMy5vKVxuJiM0MztcbiYjNDM7IyBSZWFkIHRoZSBoZWFkZXIgZGVwZW5kZW5jaWVzIHdyaXR0ZW4gYnkgLU1NRC5cbiYjNDM7LWluY2x1ZGUgJChCUEZfT0JKUzoubz0uZClcbiYjNDM7XG4mIzQzOyMgLS0tLSB2YWx1ZXMgZm9yIHRoZSB0ZXN0IE1ha2VmaWxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzOyMgQWRkIHRoZSBpbnN0YWxsZWQgbGliYnBmL3ZtbGludXguaCBkaXJlY3RvcnkgYW5kIHRoZSBza2VsZXRvbiBkaXJlY3RvcnkuXG4mIzQzO0NGTEFHUyAmIzQzOz0gLUkkKElOQ0xVREVfRElSKSAtSSQoQlBGX1NLRUxfRElSKVxuJiM0MztcbiYjNDM7IyBBZGQgdGFyZ2V0IHpzdGQgd2hlbiBmb3VuZCBieSB0aGUgdGFyZ2V0IHBrZy1jb25maWcuXG4mIzQzO1BLR19DT05GSUcgPz0gJChDUk9TU19DT01QSUxFKXBrZy1jb25maWdcbiYjNDM7QlBGX0xETElCUyA6PSAkKEJQRk9CSikgLWxlbGYgLWx6XG4mIzQzO2lmbmVxICgkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1leGlzdHMgbGlienN0ZCAyXHUwMDNlL2Rldi9udWxsIFx1MDAyNlx1MDAyNiBlY2hvIHkpLClcbiYjNDM7QlBGX0xETElCUyAmIzQzOz0gLWx6c3RkXG4mIzQzO2VuZGlmXG4mIzQzO1xuJiM0MzsjIEFkZCBza2VsZXRvbnMgYWZ0ZXIgbGliLm1rIGRlZmluZXMgYWxsLlxuJiM0MzthbGw6ICQoQlBGX1NLRUxTKSAkKEJQRl9TVUJTS0VMUylcbiYjNDM7XG4mIzQzOyMgVGhlIHNrZWxldG9uIGFscmVhZHkgZW1iZWRzIGVhY2ggQlBGIG9iamVjdCBpbiB0aGUgdGVzdCBiaW5hcnkuIFRvIGluc3RhbGwgdGhlXG4mIzQzOyMgb2JqZWN0cyBzZXBhcmF0ZWx5LCBhZGQgVEVTVF9HRU5fRklMRVMgJiM0Mzs9ICQoQlBGX09CSlMpLlxuJiM0MztcbiYjNDM7IyAkMSA9IGJpbmFyeSwgJDIgPSB0ZXN0IHNvdXJjZS4gVXNlIHRoZSBzYW1lIGNvbXBpbGUgYW5kIGxpbmsgZmxhZ3MgYXMgbGliLm1rLlxuJiM0MztkZWZpbmUgYnBmX2xpbmtcbiYjNDM7XHQkKGNhbGwgbXNnLEJJTkFSWSwsJDEpXG4mIzQzO1x0JChRKSQoQ0MpICQoQ0ZMQUdTKSAkKENQUEZMQUdTKSAkKExERkxBR1MpICQoVEFSR0VUX0FSQ0gpICQyIFxcXG4mIzQzO1x0XHQkKEJQRl9MRExJQlMpICQoTERMSUJTKSAtbyAkMVxuJiM0MztlbmRlZlxuJiM0MztcbiYjNDM7RVhUUkFfQ0xFQU4gJiM0Mzs9ICQoc29ydCAkKGxpYl9icGZfc2NyYXRjaF9kaXIpICQobGliX2JwZl9ob3N0X3NjcmF0Y2hfZGlyKSkgXFxcbiYjNDM7XHQgICAgICAgJChhZGRwcmVmaXggJChCUEZfT0JKX0RJUikvLCouYnBmLm8gKi5icGYuZCAqLmxpbmtlZCoubylcdFxcXG4mIzQzO1x0ICAgICAgICQoYWRkcHJlZml4ICQoQlBGX1NLRUxfRElSKS8sKiQoQlBGX1NLRUxfRVhUKSAqJChsaWJfYnBmX3N1YnNrZWxfZXh0KSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvTWFrZWZpbGVcbmluZGV4IDNjZmU5MGUwZjM0ZmEuLmRkM2Y1NTk0YWYyNDAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NjaGVkX2V4dC9NYWtlZmlsZVxuQEAgLTE0LDQ4ICYjNDM7MTQsMjkgQEAgQ1VSRElSIDo9ICQoYWJzcGF0aCAuKVxuIFJFUE9ST09UIDo9ICQoYWJzcGF0aCAuLi8uLi8uLi8uLilcbiBUT09MU0RJUiA6PSAkKFJFUE9ST09UKS90b29sc1xuIExJQkRJUiA6PSAkKFRPT0xTRElSKS9saWJcbi1CUEZESVIgOj0gJChMSUJESVIpL2JwZlxuIFRPT0xTSU5DRElSIDo9ICQoVE9PTFNESVIpL2luY2x1ZGVcbi1CUEZUT09MRElSIDo9ICQoVE9PTFNESVIpL2JwZi9icGZ0b29sXG4tQVBJRElSIDo9ICQoVE9PTFNJTkNESVIpL3VhcGlcbiBHRU5ESVIgOj0gJChSRVBPUk9PVCkvaW5jbHVkZS9nZW5lcmF0ZWRcbiBHRU5IRFIgOj0gJChHRU5ESVIpL2F1dG9jb25mLmhcbi1TQ1hUT09MU0RJUiA6PSAkKFRPT0xTRElSKS9zY2hlZF9leHRcbiBTQ1hUT09MU0lOQ0RJUiA6PSAkKFRPT0xTRElSKS9zY2hlZF9leHQvaW5jbHVkZVxuIFxuLU9VVFBVVF9ESVIgOj0gJChPVVRQVVQpL2J1aWxkXG4tT0JKX0RJUiA6PSAkKE9VVFBVVF9ESVIpL29ialxuLUlOQ0xVREVfRElSIDo9ICQoT1VUUFVUX0RJUikvaW5jbHVkZVxuLUJQRk9CSl9ESVIgOj0gJChPQkpfRElSKS9saWJicGZcbi1TQ1hPQkpfRElSIDo9ICQoT0JKX0RJUikvc2NoZWRfZXh0XG4tQlBGT0JKIDo9ICQoQlBGT0JKX0RJUikvbGliYnBmLmFcbi1MSUJCUEZfT1VUUFVUIDo9ICQoT0JKX0RJUikvbGliYnBmL2xpYmJwZi5hXG4tXG4tREVGQVVMVF9CUEZUT09MIDo9ICQoT1VUUFVUX0RJUikvaG9zdC9zYmluL2JwZnRvb2xcbi1IT1NUX09CSl9ESVIgOj0gJChPQkpfRElSKS9ob3N0L2JwZnRvb2xcbi1IT1NUX0xJQkJQRl9PVVRQVVQgOj0gJChPQkpfRElSKS9ob3N0L2xpYmJwZi9cbi1IT1NUX0xJQkJQRl9ERVNURElSIDo9ICQoT1VUUFVUX0RJUikvaG9zdC9cbi1IT1NUX0RFU1RESVIgOj0gJChPVVRQVVRfRElSKS9ob3N0L1xuLVxuLVZNTElOVVhfQlRGX1BBVEhTID89ICQoaWYgJChPKSwkKE8pL3ZtbGludXgpXHRcdFx0XHRcdFxcXG4tXHRcdCAgICAgJChpZiAkKEtCVUlMRF9PVVRQVVQpLCQoS0JVSUxEX09VVFBVVCkvdm1saW51eClcdFx0XFxcbi1cdFx0ICAgICAuLi8uLi8uLi8uLi92bWxpbnV4XHRcdFx0XHRcdFxcXG4tXHRcdCAgICAgL3N5cy9rZXJuZWwvYnRmL3ZtbGludXhcdFx0XHRcdFx0XFxcbi1cdFx0ICAgICAvYm9vdC92bWxpbnV4LSQoc2hlbGwgdW5hbWUgLXIpXG4tVk1MSU5VWF9CVEYgPz0gJChhYnNwYXRoICQoZmlyc3R3b3JkICQod2lsZGNhcmQgJChWTUxJTlVYX0JURl9QQVRIUykpKSlcbi1pZmVxICgkKFZNTElOVVhfQlRGKSwpXG4tJChlcnJvciBDYW5ub3QgZmluZCBhIHZtbGludXggZm9yIFZNTElOVVhfQlRGIGF0IGFueSBvZiBcJiMzNDskKFZNTElOVVhfQlRGX1BBVEhTKVwmIzM0Oylcbi1lbmRpZlxuJiM0MzsjIEJ1aWxkIHNjaGVkdWxlciBza2VsZXRvbnMgYW5kIHN1YnNrZWxldG9ucyB3aXRoIHRoZSBzaGFyZWQgQlBGIHJ1bGVzLlxuJiM0MztCUEZfU1JDUyAgICAgICAgOj0gJCh3aWxkY2FyZCAqLmJwZi5jKVxuJiM0MztCUEZfU0tFTF9FWFQgICAgOj0gLmJwZi5za2VsLmhcbiYjNDM7QlBGX0dFTl9TVUJTS0VMIDo9IDFcbiYjNDM7IyBQcmVzZXJ2ZSB0aGUgZXhpc3RpbmcgYnVpbGQvIGxheW91dC5cbiYjNDM7QlBGX09CSl9ESVIgIDo9ICQoT1VUUFVUKS9idWlsZC9vYmovc2NoZWRfZXh0XG4mIzQzO0JQRl9TS0VMX0RJUiA6PSAkKE9VVFBVVCkvYnVpbGQvaW5jbHVkZVxuJiM0MztTQ1hPQkpfRElSICAgOj0gJChCUEZfT0JKX0RJUilcbiBcbi1CUEZUT09MID89ICQoREVGQVVMVF9CUEZUT09MKVxuJiM0MztpbmNsdWRlIC4uL2xpYi5icGYubWtcbiBcbiBpZm5lcSAoJCh3aWxkY2FyZCAkKEdFTkhEUikpLClcbiAgIEdFTkZMQUdTIDo9IC1ESEFWRV9HRU5IRFJcbiBlbmRpZlxuIFxuIENGTEFHUyAmIzQzOz0gLWcgLU8yIC1yZHluYW1pYyAtcHRocmVhZCAtV2FsbCAtV2Vycm9yICQoR0VORkxBR1MpXHRcdFx0XFxcbi1cdCAgLUkkKElOQ0xVREVfRElSKSAtSSQoR0VORElSKSAtSSQoTElCRElSKVx0XHRcdFx0XFxcbi1cdCAgLUkkKFRPT0xTSU5DRElSKSAtSSQoQVBJRElSKSAtSSQoQ1VSRElSKS9pbmNsdWRlIC1JJChTQ1hUT09MU0lOQ0RJUilcbiYjNDM7XHQgIC1JJChHRU5ESVIpIC1JJChMSUJESVIpIC1JJChUT09MU0lOQ0RJUikgLUkkKEFQSURJUilcdFx0XHRcXFxuJiM0MztcdCAgLUkkKENVUkRJUikvaW5jbHVkZSAtSSQoU0NYVE9PTFNJTkNESVIpXG4gXG4gIyBTaWxlbmNlIHNvbWUgd2FybmluZ3Mgd2hlbiBjb21waWxlZCB3aXRoIGNsYW5nXG4gaWZuZXEgKCQoTExWTSksKVxuQEAgLTY0LDEwMiAmIzQzOzQ1LDI2IEBAIGVuZGlmXG4gXG4gTERGTEFHUyA9IC1sZWxmIC1seiAtbHB0aHJlYWQgLWx6c3RkXG4gXG4tSVNfTElUVExFX0VORElBTiA9ICQoc2hlbGwgJChDQykgLWRNIC1FIC0gXHUwMDNjL2Rldi9udWxsIHxcdFx0XHRcdFxcXG4tXHRcdFx0Z3JlcCAmIzM5O2RlZmluZSBfX0JZVEVfT1JERVJfXyBfX09SREVSX0xJVFRMRV9FTkRJQU5fXyYjMzk7KVxuLVxuLSMgR2V0IENsYW5nJiMzOTtzIGRlZmF1bHQgaW5jbHVkZXMgb24gdGhpcyBzeXN0ZW0sIGFzIG9wcG9zZWQgdG8gdGhvc2Ugc2VlbiBieVxuLSMgJiMzOTstdGFyZ2V0IGJwZiYjMzk7LiBUaGlzIGZpeGVzIFwmIzM0O21pc3NpbmdcJiMzNDsgZmlsZXMgb24gc29tZSBhcmNoaXRlY3R1cmVzL2Rpc3Ryb3MsXG4tIyBzdWNoIGFzIGFzbS9ieXRlb3JkZXIuaCwgYXNtL3NvY2tldC5oLCBhc20vc29ja2lvcy5oLCBzeXMvY2RlZnMuaCBldGMuXG4tI1xuLSMgVXNlICYjMzk7LWlkaXJhZnRlciYjMzk7OiBEb24mIzM5O3QgaW50ZXJmZXJlIHdpdGggaW5jbHVkZSBtZWNoYW5pY3MgZXhjZXB0IHdoZXJlIHRoZVxuLSMgYnVpbGQgd291bGQgaGF2ZSBmYWlsZWQgYW55d2F5cy5cbi1kZWZpbmUgZ2V0X3N5c19pbmNsdWRlc1xuLSQoc2hlbGwgJCgxKSAkKDIpIC12IC1FIC0gXHUwMDNjL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxIFxcXG4tXHR8IHNlZCAtbiAmIzM5Oy9cdTAwM2MuLi5cdTAwM2Ugc2VhcmNoIHN0YXJ0cyBoZXJlOi8sL0VuZCBvZiBzZWFyY2ggbGlzdC4veyBzfCBcXCgvLipcXCl8LWlkaXJhZnRlciBcXDF8cCB9JiMzOTspIFxcXG4tJChzaGVsbCAkKDEpICQoMikgLWRNIC1FIC0gXHUwMDNjL2Rldi9udWxsIHwgZ3JlcCAmIzM5O19fcmlzY3ZfeGxlbiAmIzM5OyB8IGF3ayAmIzM5O3twcmludGYoXCYjMzQ7LURfX3Jpc2N2X3hsZW49JWQgLURfX0JJVFNfUEVSX0xPTkc9JWRcJiMzNDssICQkMywgJCQzKX0mIzM5Oylcbi1lbmRlZlxuLVxuLWlmbmVxICgkKENST1NTX0NPTVBJTEUpLClcbi1DTEFOR19UQVJHRVRfQVJDSCA9IC0tdGFyZ2V0PSQobm90ZGlyICQoQ1JPU1NfQ09NUElMRTolLT0lKSlcbi1lbmRpZlxuLVxuLUNMQU5HX1NZU19JTkNMVURFUyA9ICQoY2FsbCBnZXRfc3lzX2luY2x1ZGVzLCQoQ0xBTkcpLCQoQ0xBTkdfVEFSR0VUX0FSQ0gpKVxuLVxuLUJQRl9DRkxBR1MgPSAtZyAtRF9fVEFSR0VUX0FSQ0hfJChTUkNBUkNIKVx0XHRcdFx0XHRcXFxuLVx0ICAgICAkKGlmICQoSVNfTElUVExFX0VORElBTiksLW1saXR0bGUtZW5kaWFuLC1tYmlnLWVuZGlhbilcdFx0XFxcbiYjNDM7IyBQcmVzZXJ2ZSB0aGUgc2NoZWR1bGVyLXNwZWNpZmljIGZsYWdzOyB0aGUgc2hhcmVkIHJlY2lwZSBhZGRzIHRhcmdldCBmbGFncy5cbiYjNDM7QlBGX0NGTEFHUyA9IC1nIC1EX19UQVJHRVRfQVJDSF8kKFNSQ0FSQ0gpICQoTUVORElBTilcdFx0XHRcdFxcXG4gXHQgICAgIC1JJChDVVJESVIpL2luY2x1ZGUgLUkkKENVUkRJUikvaW5jbHVkZS9icGYtY29tcGF0XHRcdFx0XFxcbiBcdCAgICAgLUkkKElOQ0xVREVfRElSKSAtSSQoQVBJRElSKSAtSSQoU0NYVE9PTFNJTkNESVIpXHRcdFx0XFxcbiBcdCAgICAgLUkkKFJFUE9ST09UKS9pbmNsdWRlXHRcdFx0XHRcdFx0XFxcbi1cdCAgICAgJChDTEFOR19TWVNfSU5DTFVERVMpIFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0ICAgICAkKENMQU5HX1NZU19JTkNMVURFUylcdFx0XHRcdFx0XHRcXFxuIFx0ICAgICAtV2FsbCAtV25vLWNvbXBhcmUtZGlzdGluY3QtcG9pbnRlci10eXBlc1x0XHRcdFx0XFxcbiBcdCAgICAgLVduby1pbmNvbXBhdGlibGUtZnVuY3Rpb24tcG9pbnRlci10eXBlc1x0XHRcdFx0XFxcbiBcdCAgICAgLVduby1taWNyb3NvZnQtYW5vbi10YWdcdFx0XHRcdFx0XHRcXFxuIFx0ICAgICAtZm1zLWV4dGVuc2lvbnNcdFx0XHRcdFx0XHRcdFxcXG4tXHQgICAgIC1PMiAtbWNwdT12M1xuLVxuLSMgc29ydCByZW1vdmVzIGxpYmJwZiBkdXBsaWNhdGVzIHdoZW4gbm90IGNyb3NzLWJ1aWxkaW5nXG4tTUFLRV9ESVJTIDo9ICQoc29ydCAkKE9CSl9ESVIpL2xpYmJwZiAkKE9CSl9ESVIpL2xpYmJwZlx0XHRcdFx0XFxcbi1cdCAgICAgICAkKE9CSl9ESVIpL2JwZnRvb2wgJChPQkpfRElSKS9yZXNvbHZlX2J0Zmlkc1x0XHRcdFxcXG4tXHQgICAgICAgJChIT1NUX09CSl9ESVIpICQoSU5DTFVERV9ESVIpICQoU0NYT0JKX0RJUikpXG4tXG4tJChNQUtFX0RJUlMpOlxuLVx0JChjYWxsIG1zZyxNS0RJUiwsJEApXG4tXHQkKFEpbWtkaXIgLXAgJEBcbi1cbi0kKEJQRk9CSik6ICQod2lsZGNhcmQgJChCUEZESVIpLyouW2NoXSAkKEJQRkRJUikvTWFrZWZpbGUpXHRcdFx0XFxcbi1cdCAgICQoQVBJRElSKS9saW51eC9icGYuaFx0XHRcdFx0XHRcdFxcXG4tXHQgICB8ICQoT0JKX0RJUikvbGliYnBmXG4tXHQkKFEpJChNQUtFKSAkKHN1Ym1ha2VfZXh0cmFzKSAtQyAkKEJQRkRJUikgT1VUUFVUPSQoT0JKX0RJUikvbGliYnBmL1x0XFxcbi1cdFx0ICAgIEFSQ0g9JChBUkNIKSBDQz1cJiMzNDskKENDKVwmIzM0OyBDUk9TU19DT01QSUxFPSQoQ1JPU1NfQ09NUElMRSlcdFxcXG4tXHRcdCAgICBFWFRSQV9DRkxBR1M9JiMzOTstZyAtTzAgLWZQSUMmIzM5O1x0XHRcdFx0XHRcXFxuLVx0XHQgICAgREVTVERJUj0kKE9VVFBVVF9ESVIpIHByZWZpeD0gYWxsIGluc3RhbGxfaGVhZGVyc1xuLVxuLSQoREVGQVVMVF9CUEZUT09MKTogJCh3aWxkY2FyZCAkKEJQRlRPT0xESVIpLyouW2NoXSAkKEJQRlRPT0xESVIpL01ha2VmaWxlKVx0XFxcbi1cdFx0ICAgICQoTElCQlBGX09VVFBVVCkgfCAkKEhPU1RfT0JKX0RJUilcbi1cdCQoUSkkKE1BS0UpICQoc3VibWFrZV9leHRyYXMpICAtQyAkKEJQRlRPT0xESVIpXHRcdFx0XHRcXFxuLVx0XHQgICAgQVJDSD0gQ1JPU1NfQ09NUElMRT0gQ0M9JChIT1NUQ0MpIExEPSQoSE9TVExEKVx0XHRcXFxuLVx0XHQgICAgRVhUUkFfQ0ZMQUdTPSYjMzk7LWcgLU8wJiMzOTtcdFx0XHRcdFx0XFxcbi1cdFx0ICAgIE9VVFBVVD0kKEhPU1RfT0JKX0RJUikvXHRcdFx0XHRcdFxcXG4tXHRcdCAgICBMSUJCUEZfT1VUUFVUPSQoSE9TVF9MSUJCUEZfT1VUUFVUKVx0XHRcdFx0XFxcbi1cdFx0ICAgIExJQkJQRl9ERVNURElSPSQoSE9TVF9MSUJCUEZfREVTVERJUilcdFx0XHRcXFxuLVx0XHQgICAgcHJlZml4PSBERVNURElSPSQoSE9TVF9ERVNURElSKSBpbnN0YWxsLWJpblxuLVxuLSQoSU5DTFVERV9ESVIpL3ZtbGludXguaDogJChWTUxJTlVYX0JURikgJChCUEZUT09MKSB8ICQoSU5DTFVERV9ESVIpXG4taWZlcSAoJChWTUxJTlVYX0gpLClcbi1cdCQoY2FsbCBtc2csR0VOLCwkQClcbi1cdCQoUSkkKEJQRlRPT0wpIGJ0ZiBkdW1wIGZpbGUgJChWTUxJTlVYX0JURikgZm9ybWF0IGMgXHUwMDNlICRAXG4tZWxzZVxuLVx0JChjYWxsIG1zZyxDUCwsJEApXG4tXHQkKFEpY3AgXCYjMzQ7JChWTUxJTlVYX0gpXCYjMzQ7ICRAXG4tZW5kaWZcbi1cbi0kKFNDWE9CSl9ESVIpLyUuYnBmLm86ICUuYnBmLmMgJChJTkNMVURFX0RJUikvdm1saW51eC5oXHR8ICQoQlBGT0JKKSAkKFNDWE9CSl9ESVIpXG4tXHQkKGNhbGwgbXNnLENMTkctQlBGLCwkKG5vdGRpciAkQCkpXG4tXHQkKFEpJChDTEFORykgJChCUEZfQ0ZMQUdTKSAtdGFyZ2V0IGJwZiAtYyAkXHUwMDNjIC1vICRAXG4mIzQzO1x0ICAgICAkKEJQRl9FWFRSQV9DRkxBR1MpXG4gXG4tJChJTkNMVURFX0RJUikvJS5icGYuc2tlbC5oOiAkKFNDWE9CSl9ESVIpLyUuYnBmLm8gJChJTkNMVURFX0RJUikvdm1saW51eC5oICQoQlBGVE9PTCkgfCAkKElOQ0xVREVfRElSKVxuLVx0JChldmFsIHNjaGVkPSQobm90ZGlyICRAKSlcbi1cdCQoY2FsbCBtc2csR0VOLVNLRUwsLCQoc2NoZWQpKVxuLVx0JChRKSQoQlBGVE9PTCkgZ2VuIG9iamVjdCAkKFx1MDAzYzoubz0ubGlua2VkMS5vKSAkXHUwMDNjXG4tXHQkKFEpJChCUEZUT09MKSBnZW4gb2JqZWN0ICQoXHUwMDNjOi5vPS5saW5rZWQyLm8pICQoXHUwMDNjOi5vPS5saW5rZWQxLm8pXG4tXHQkKFEpJChCUEZUT09MKSBnZW4gb2JqZWN0ICQoXHUwMDNjOi5vPS5saW5rZWQzLm8pICQoXHUwMDNjOi5vPS5saW5rZWQyLm8pXG4tXHQkKFEpZGlmZiAkKFx1MDAzYzoubz0ubGlua2VkMi5vKSAkKFx1MDAzYzoubz0ubGlua2VkMy5vKVxuLVx0JChRKSQoQlBGVE9PTCkgZ2VuIHNrZWxldG9uICQoXHUwMDNjOi5vPS5saW5rZWQzLm8pIG5hbWUgJChzdWJzdCAuYnBmLnNrZWwuaCwsJChzY2hlZCkpIFx1MDAzZSAkQFxuLVx0JChRKSQoQlBGVE9PTCkgZ2VuIHN1YnNrZWxldG9uICQoXHUwMDNjOi5vPS5saW5rZWQzLm8pIG5hbWUgJChzdWJzdCAuYnBmLnNrZWwuaCwsJChzY2hlZCkpIFx1MDAzZSAkKEA6LnNrZWwuaD0uc3Vic2tlbC5oKVxuJiM0MztFWFRSQV9DTEVBTiAmIzQzOz0gJChPVVRQVVQpL2J1aWxkXG4gXG4gIyMjIyMjIyMjIyMjIyMjI1xuICMgQyBzY2hlZHVsZXJzICNcbiAjIyMjIyMjIyMjIyMjIyMjXG4gXG4tb3ZlcnJpZGUgZGVmaW5lIENMRUFOXG4tXHRybSAtcmYgJChPVVRQVVRfRElSKVxuLVx0cm0gLWYgJChURVNUX0dFTl9QUk9HUylcbi1lbmRlZlxuLVxuLSMgRXZlcnkgdGVzdGNhc2UgdGFrZXMgYWxsIG9mIHRoZSBCUEYgcHJvZ3MgYXJlIGRlcGVuZGVuY2llcyBieSBkZWZhdWx0LiBUaGlzXG4tIyBhbGxvd3MgdGVzdGNhc2VzIHRvIGxvYWQgYW55IEJQRiBzY2hlZHVsZXIsIHdoaWNoIGlzIHVzZWZ1bCBmb3IgdGVzdGNhc2VzXG4tIyB0aGF0IGRvbiYjMzk7dCBuZWVkIHRoZWlyIG93biBwcm9nIHRvIHJ1biB0aGVpciB0ZXN0LlxuLWFsbF90ZXN0X2JwZnByb2dzIDo9ICQoZm9yZWFjaCBwcm9nLCQod2lsZGNhcmQgKi5icGYuYyksJChJTkNMVURFX0RJUikvJChwYXRzdWJzdCAlLmMsJS5za2VsLmgsJChwcm9nKSkpXG4mIzQzOyMgQnVpbGQgZXZlcnkgc2NoZWR1bGVyIGJlZm9yZSBlYWNoIHRlc3QuXG4mIzQzO2FsbF90ZXN0X2JwZnByb2dzIDo9ICQoQlBGX1NLRUxTKVxuIFxuIGF1dG8tdGVzdC10YXJnZXRzIDo9XHRcdFx0XFxcbiBcdGNyZWF0ZV9kc3FcdFx0XHRcXFxuQEAgLTE5NiwyNCAmIzQzOzEwMSwyMiBAQCBhdXRvLXRlc3QtdGFyZ2V0cyA6PVx0XHRcdFxcXG4gdGVzdGNhc2UtdGFyZ2V0cyA6PSAkKGFkZHN1ZmZpeCAubywkKGFkZHByZWZpeCAkKFNDWE9CSl9ESVIpLywkKGF1dG8tdGVzdC10YXJnZXRzKSkpXG4gXG4gJChTQ1hPQkpfRElSKS9ydW5uZXIubzogcnVubmVyLmMgfCAkKFNDWE9CSl9ESVIpICQoQlBGT0JKKVxuLVx0JChDQykgJChDRkxBR1MpIC1jICRcdTAwM2MgLW8gJEBcbiYjNDM7XHQkKGNhbGwgbXNnLENDLCwkQClcbiYjNDM7XHQkKFEpJChDQykgJChDRkxBR1MpIC1jICRcdTAwM2MgLW8gJEBcbiBcbiAjIENyZWF0ZSBhbGwgb2YgdGhlIHRlc3QgdGFyZ2V0cyBvYmplY3QgZmlsZXMsIHdob3NlIHRlc3RjYXNlIG9iamVjdHMgd2lsbCBiZVxuICMgcmVnaXN0ZXJlZCBpbnRvIHRoZSBydW5uZXIgaW4gRUxGIGNvbnN0cnVjdG9ycy5cbi0jXG4tIyBOb3RlIHRoYXQgd2UgbXVzdCBkbyBkb3VibGUgZXhwYW5zaW9uIGhlcmUgaW4gb3JkZXIgdG8gc3VwcG9ydCBjb25kaXRpb25hbGx5XG4tIyBjb21waWxpbmcgQlBGIG9iamVjdCBmaWxlcyBvbmx5IGlmIG9uZSBpcyBwcmVzZW50LCBhcyB0aGUgd2lsZGNhcmQgTWFrZVxuLSMgZnVuY3Rpb24gZG9lc24mIzM5O3Qgc3VwcG9ydCB1c2luZyBpbXBsaWNpdCBydWxlcyBvdGhlcndpc2UuXG4gJCh0ZXN0Y2FzZS10YXJnZXRzKTogJChTQ1hPQkpfRElSKS8lLm86ICUuYyAkKFNDWE9CSl9ESVIpL3J1bm5lci5vICQoYWxsX3Rlc3RfYnBmcHJvZ3MpIHwgJChTQ1hPQkpfRElSKVxuLVx0JChldmFsIHRlc3Q9JChwYXRzdWJzdCAlLm8sJS5jLCQobm90ZGlyICRAKSkpXG4tXHQkKENDKSAkKENGTEFHUykgLWMgJFx1MDAzYyAtbyAkQFxuJiM0MztcdCQoY2FsbCBtc2csQ0MsLCRAKVxuJiM0MztcdCQoUSkkKENDKSAkKENGTEFHUykgLWMgJFx1MDAzYyAtbyAkQFxuIFxuICQoU0NYT0JKX0RJUikvdXRpbC5vOiB1dGlsLmMgfCAkKFNDWE9CSl9ESVIpXG4tXHQkKENDKSAkKENGTEFHUykgLWMgJFx1MDAzYyAtbyAkQFxuJiM0MztcdCQoY2FsbCBtc2csQ0MsLCRAKVxuJiM0MztcdCQoUSkkKENDKSAkKENGTEFHUykgLWMgJFx1MDAzYyAtbyAkQFxuIFxuICQoT1VUUFVUKS9ydW5uZXI6ICQoU0NYT0JKX0RJUikvcnVubmVyLm8gJChTQ1hPQkpfRElSKS91dGlsLm8gJChCUEZPQkopICQodGVzdGNhc2UtdGFyZ2V0cylcbi1cdEBlY2hvIFwmIzM0OyQodGVzdGNhc2UtdGFyZ2V0cylcJiMzNDtcbi1cdCQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkXiAkKExERkxBR1MpXG4mIzQzO1x0JChjYWxsIG1zZyxCSU5BUlksLCRAKVxuJiM0MztcdCQoUSkkKENDKSAkKENGTEFHUykgLW8gJEAgJF4gJChMREZMQUdTKVxuIFxuIC5ERUZBVUxUX0dPQUwgOj0gYWxsXG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMjM6NTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdCBoYXJuZXNzZXMsIHNlbGZ0ZXN0IEJQRiB0ZXN0IHByb2dyYW1zLCBhbmQgYnVpbGQgaW5mcmFzdHJ1Y3R1cmUgd2l0aGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzLy4gTm9uZSBvZiB0aGUgY2hhbmdlcyBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMsIHNvIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjMDdiNGI1YmFmYmU2ZTFlZTgyNGM4MmQzYmFiYTAxZTg5ODk0MDAwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMTAgMjM6NTg6NDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC8uZ2l0aWdub3JlCmluZGV4IDk1MmU0NDQ4YmYwNzAuLjU2MWEzZTg5MWI5OGMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC8uZ2l0aWdub3JlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC8uZ2l0aWdub3JlCkBAIC02LDcgJiM0Mzs2LDE1IEBAIHRlc3RfZnJlZXplcgogdGVzdF9odWdldGxiX21lbWNnCiB0ZXN0X2tpbGwKIHRlc3Rfa21lbQomIzQzO3Rlc3RfbWVtY2dfc3RhdF9jcm9zc19jcHUKIHRlc3RfbWVtY29udHJvbAogdGVzdF9waWRzCiB0ZXN0X3pzd2FwCiB3YWl0X2lub3RpZnkKJiM0MzsjIEFydGlmYWN0cyBnZW5lcmF0ZWQgYnkgbGliLmJwZi5tawomIzQzOy90b29scwomIzQzOy9ob3N0LXRvb2xzCiYjNDM7Ki5icGYubwomIzQzOyouYnBmLmQKJiM0MzsqLmxpbmtlZCoubwomIzQzOyouc2tlbC5oCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvTWFrZWZpbGUKaW5kZXggZTAxNTg0YzIxODlhYy4uY2I5OTliYzJjODc1ZSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9NYWtlZmlsZQpAQCAtMjAsOSAmIzQzOzIwLDQ2IEBAIFRFU1RfR0VOX1BST0dTICYjNDM7PSB0ZXN0X3pzd2FwCiAKIExPQ0FMX0hEUlMgJiM0Mzs9ICQoc2VsZmRpcikvY2xvbmUzL2Nsb25lM19zZWxmdGVzdHMuaCAkKHNlbGZkaXIpL3BpZGZkL3BpZGZkLmgKIAomIzQzOyMgUmVzb2x2ZSBDbGFuZyBlYXJseSBzbyB0aGUgb3B0aW9uYWwgQlBGIHRlc3QgY2FuIGJlIHNlbGVjdGVkLgomIzQzO2lmbmVxICgkKGZpbHRlciAlLywkKExMVk0pKSwpCiYjNDM7Q0xBTkcgPz0gJChMTFZNKWNsYW5nCiYjNDM7ZWxzZQomIzQzO0NMQU5HID89IGNsYW5nJChmaWx0ZXIgLSUsJChMTFZNKSkKJiM0MztlbmRpZgomIzQzO1JFQURFTEYgPz0gJChDUk9TU19DT01QSUxFKXJlYWRlbGYKJiM0MztWTUxJTlVYX0JURl9QQVRIUyA/PSAkKGlmICQoTyksJChPKS92bWxpbnV4KQkJCQlcCiYjNDM7CQkgICAgICQoaWYgJChLQlVJTERfT1VUUFVUKSwkKEtCVUlMRF9PVVRQVVQpL3ZtbGludXgpCVwKJiM0MzsJCSAgICAgLi4vLi4vLi4vLi4vdm1saW51eAkJCQlcCiYjNDM7CQkgICAgIC9zeXMva2VybmVsL2J0Zi92bWxpbnV4CQkJCVwKJiM0MzsJCSAgICAgL2Jvb3Qvdm1saW51eC0kKHNoZWxsIHVuYW1lIC1yKQomIzQzOyMgSWdub3JlIEVMRiBpbWFnZXMgd2l0aG91dCAuQlRGOyByYXcgc3lzZnMgQlRGIG5lZWRzIG5vIGNoZWNrLgomIzQzO1ZNTElOVVhfQlRGID89ICQoYWJzcGF0aCAkKGZpcnN0d29yZCAkKGZvcmVhY2ggdiwkKHdpbGRjYXJkICQoVk1MSU5VWF9CVEZfUEFUSFMpKSxcCiYjNDM7CQkgJChpZiAkKGZpbHRlciAvc3lzL2tlcm5lbC9idGYvJSwkKHYpKSwkKHYpLFwKJiM0MzsJCSAgICQoaWYgJChzaGVsbCAkKFJFQURFTEYpIC1TICYjMzQ7JCh2KSYjMzQ7IDImZ3Q7L2Rldi9udWxsIHwgZ3JlcCAtRiAuQlRGKSwkKHYpKSkpKSkKJiM0MzsjIEFjY2VwdCBlaXRoZXIgYSBzdXBwbGllZCBoZWFkZXIgb3IgdXNhYmxlIEJURi4KJiM0MztIQVZFX0JQRiA6PSAkKGFuZCAkKG9yICQoVk1MSU5VWF9IKSwkKFZNTElOVVhfQlRGKSksCQkJXAomIzQzOwkJICAkKHNoZWxsIGNvbW1hbmQgLXYgJChDTEFORykgMiZndDsvZGV2L251bGwpKQomIzQzOwomIzQzO2lmbmVxICgkKEhBVkVfQlBGKSwpCiYjNDM7VEVTVF9HRU5fUFJPR1MgJiM0Mzs9IHRlc3RfbWVtY2dfc3RhdF9jcm9zc19jcHUKJiM0MztCUEZfU1JDUyA6PSBtZW1jZ19zdGF0X2Nyb3NzX2NwdS5icGYuYwomIzQzOyMgUmVwbGFjZSBsaWIubWsmIzM5O3MgbGluayBydWxlIGJlbG93LgomIzQzO09WRVJSSURFX1RBUkdFVFMgOj0gMQomIzQzO2VuZGlmCiYjNDM7CiBpbmNsdWRlIC4uL2xpYi5tawogaW5jbHVkZSBsaWIvbGliY2dyb3VwLm1rCiAKJiM0MztpZm5lcSAoJChIQVZFX0JQRiksKQomIzQzO2luY2x1ZGUgLi4vbGliLmJwZi5tawomIzQzOwomIzQzOyMgUmVzdG9yZSBsaWIubWsmIzM5O3MgcnVsZSBmb3Igbm9uLUJQRiB0ZXN0cy4KJiM0MztMT0NBTF9IRFJTICYjNDM7PSAkKHNlbGZkaXIpL2tzZWxmdGVzdF9oYXJuZXNzLmggJChzZWxmZGlyKS9rc2VsZnRlc3QuaAomIzQzOyQoT1VUUFVUKS8lOiAlLmMgJChMT0NBTF9IRFJTKQomIzQzOwkkKGNhbGwgbXNnLENDLCwkQCkKJiM0MzsJJChRKSQoTElOSy5jKSAkKGZpbHRlci1vdXQgJChMT0NBTF9IRFJTKSwkXikgJChMRExJQlMpIC1vICRACiYjNDM7ZW5kaWYKJiM0MzsKICQoT1VUUFVUKS90ZXN0X2NvcmU6ICQoTElCQ0dST1VQX08pCiAkKE9VVFBVVCkvdGVzdF9jcHU6ICQoTElCQ0dST1VQX08pCiAkKE9VVFBVVCkvdGVzdF9jcHVzZXQ6ICQoTElCQ0dST1VQX08pCkBAIC0zMywzICYjNDM7NzAsMTIgQEAgJChPVVRQVVQpL3Rlc3Rfa21lbTogJChMSUJDR1JPVVBfTykKICQoT1VUUFVUKS90ZXN0X21lbWNvbnRyb2w6ICQoTElCQ0dST1VQX08pCiAkKE9VVFBVVCkvdGVzdF9waWRzOiAkKExJQkNHUk9VUF9PKQogJChPVVRQVVQpL3Rlc3RfenN3YXA6ICQoTElCQ0dST1VQX08pCiYjNDM7CiYjNDM7aWZuZXEgKCQoSEFWRV9CUEYpLCkKJiM0MzsjIEtlZXAgaW4tdHJlZSBVQVBJIGhlYWRlcnMgcHJpdmF0ZSB0byB0aGUgQlBGIHRlc3QuCiYjNDM7JChPVVRQVVQpL3Rlc3RfbWVtY2dfc3RhdF9jcm9zc19jcHU6IHByaXZhdGUgQ0ZMQUdTICYjNDM7PSAtSSQodG9wX3NyY2RpcikvdG9vbHMvaW5jbHVkZS91YXBpCiYjNDM7IyBMaW5rIGNncm91cF91dGlsIGFuZCB0aGUgc2tlbGV0b24gYWdhaW5zdCB0aGUgaW4tdHJlZSBsaWJicGYuCiYjNDM7JChPVVRQVVQpL3Rlc3RfbWVtY2dfc3RhdF9jcm9zc19jcHU6IHRlc3RfbWVtY2dfc3RhdF9jcm9zc19jcHUuYyBcCiYjNDM7CQkJCQkkKEJQRl9TS0VMUykgJChMSUJDR1JPVVBfTykgJChCUEZPQkopCiYjNDM7CSQoY2FsbCBicGZfbGluaywkQCwkJmx0OyAkKExJQkNHUk9VUF9PKSkKJiM0MztlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9jb25maWcKaW5kZXggMzlmOTc5NjkwZGQzYi4uMWY1ODVlZDlhNTk2NyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvY29uZmlnCkBAIC00LDMgJiM0Mzs0LDggQEAgQ09ORklHX0NHUk9VUF9GUkVFWkVSPXkKIENPTkZJR19DR1JPVVBfU0NIRUQ9eQogQ09ORklHX01FTUNHPXkKIENPTkZJR19QQUdFX0NPVU5URVI9eQomIzQzO0NPTkZJR19CUEY9eQomIzQzO0NPTkZJR19CUEZfU1lTQ0FMTD15CiYjNDM7Q09ORklHX0JQRl9FVkVOVFM9eQomIzQzO0NPTkZJR19ERUJVR19JTkZPX0JURj15CiYjNDM7Q09ORklHX0RFQlVHX0lORk9fRFdBUkY0PXkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9saWIvY2dyb3VwX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9saWIvY2dyb3VwX3V0aWwuYwppbmRleCAyNTk2YzEyY2Q4NjQ1Li5jYTEyZDc5NGMwOTIxIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbGliL2Nncm91cF91dGlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9jZ3JvdXBfdXRpbC5jCkBAIC01NCw2ICYjNDM7NTQsODggQEAgc3NpemVfdCB3cml0ZV90ZXh0KGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc3NpemVfdCBsZW4pCiAJcmV0dXJuIGxlbiAmbHQ7IDAgPyAtZXJybm8gOiBsZW47CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBjZ19nZXRfaWQgLSByZXR1cm4gYSBjZ3JvdXAmIzM5O3Mga2VybmZzIElECiYjNDM7ICogQGNncm91cDogYWJzb2x1dGUgY2dyb3VwIHBhdGgKJiM0MzsgKgomIzQzOyAqIFRoaXMgaXMgY2dycC0mZ3Q7a24tJmd0O2lkLCBub3Qgc3RfaW5vLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBJRCBvciAwIG9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7dW5zaWduZWQgbG9uZyBsb25nIGNnX2dldF9pZChjb25zdCBjaGFyICpjZ3JvdXApCiYjNDM7ewomIzQzOwl1bmlvbiB7CiYjNDM7CQl1bnNpZ25lZCBsb25nIGxvbmcgaWQ7CiYjNDM7CQl1bnNpZ25lZCBjaGFyIHJhd1s4XTsKJiM0MzsJfSBoYW5kbGU7CiYjNDM7CXN0cnVjdCBmaWxlX2hhbmRsZSAqZmhwLCAqZmhwMjsKJiM0MzsJaW50IG1vdW50X2lkLCBmaHNpemUsIGVycjsKJiM0MzsJdW5zaWduZWQgbG9uZyBsb25nIHJldCA9IDA7CiYjNDM7CiYjNDM7CWZoc2l6ZSA9IHNpemVvZigqZmhwKTsKJiM0MzsJZmhwID0gY2FsbG9jKDEsIGZoc2l6ZSk7CiYjNDM7CWlmICghZmhwKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qIFRoZSBmYWlsZWQgcHJvYmUgcmVwb3J0cyB0aGUgY2dyb3VwZnMgaGFuZGxlIHNpemUuICovCiYjNDM7CWVyciA9IG5hbWVfdG9faGFuZGxlX2F0KEFUX0ZEQ1dELCBjZ3JvdXAsIGZocCwgJmFtcDttb3VudF9pZCwgMCk7CiYjNDM7CWlmIChlcnIgJmd0Oz0gMCB8fCBmaHAtJmd0O2hhbmRsZV9ieXRlcyAhPSA4KQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWZoc2l6ZSA9IHNpemVvZigqZmhwKSAmIzQzOyBmaHAtJmd0O2hhbmRsZV9ieXRlczsKJiM0MzsJZmhwMiA9IHJlYWxsb2MoZmhwLCBmaHNpemUpOwomIzQzOwlpZiAoIWZocDIpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJZmhwID0gZmhwMjsKJiM0MzsKJiM0MzsJaWYgKG5hbWVfdG9faGFuZGxlX2F0KEFUX0ZEQ1dELCBjZ3JvdXAsIGZocCwgJmFtcDttb3VudF9pZCwgMCkgJmx0OyAwKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CW1lbWNweShoYW5kbGUucmF3LCBmaHAtJmd0O2ZfaGFuZGxlLCA4KTsKJiM0MzsJcmV0ID0gaGFuZGxlLmlkOwomIzQzO291dDoKJiM0MzsJZnJlZShmaHApOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBjZ190b3VjaF9wYWdlcyAtIGZhdWx0IGV2ZXJ5IHBhZ2UgaW4gYSByZWdpb24KJiM0MzsgKiBAYnVmOiBzdGFydCBvZiB0aGUgcmVnaW9uCiYjNDM7ICogQHNpemU6IGxlbmd0aCBvZiB0aGUgcmVnaW9uIGluIGJ5dGVzCiYjNDM7ICoKJiM0MzsgKiBQYWdlcyBhcmUgY2hhcmdlZCB0byB0aGUgY2FsbGVyJiMzOTtzIGNncm91cCBvbiBpdHMgY3VycmVudCBDUFUuCiYjNDM7ICovCiYjNDM7dm9pZCBjZ190b3VjaF9wYWdlcyhjaGFyICpidWYsIHNpemVfdCBzaXplKQomIzQzO3sKJiM0MzsJbG9uZyBwYWdlX3NpemUgPSBzeXNjb25mKF9TQ19QQUdFU0laRSk7CiYjNDM7CWNoYXIgKnB0cjsKJiM0MzsKJiM0MzsJaWYgKHBhZ2Vfc2l6ZSAmbHQ7PSAwKQomIzQzOwkJcGFnZV9zaXplID0gQlVGX1NJWkU7CiYjNDM7CiYjNDM7CWZvciAocHRyID0gYnVmOyBwdHIgJmx0OyBidWYgJiM0Mzsgc2l6ZTsgcHRyICYjNDM7PSBwYWdlX3NpemUpCiYjNDM7CQkqcHRyID0gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogY2dfYWxsb2NfYW5vbiAtIGFsbG9jYXRlIGFuZCBmYXVsdCBhbm9ueW1vdXMgbWVtb3J5CiYjNDM7ICogQHNpemU6IGJ5dGVzIHRvIGFsbG9jYXRlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IFJlZ2lvbiB0byBmcmVlKCksIG9yIE5VTEwuCiYjNDM7ICovCiYjNDM7Y2hhciAqY2dfYWxsb2NfYW5vbihzaXplX3Qgc2l6ZSkKJiM0Mzt7CiYjNDM7CWNoYXIgKmJ1ZiA9IG1hbGxvYyhzaXplKTsKJiM0MzsKJiM0MzsJaWYgKCFidWYpIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O21hbGxvYygpIGZhaWxlZFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJY2dfdG91Y2hfcGFnZXMoYnVmLCBzaXplKTsKJiM0MzsJcmV0dXJuIGJ1ZjsKJiM0Mzt9CiYjNDM7CiBjaGFyICpjZ19uYW1lKGNvbnN0IGNoYXIgKnJvb3QsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJc2l6ZV90IGxlbiA9IHN0cmxlbihyb290KSAmIzQzOyBzdHJsZW4obmFtZSkgJiM0MzsgMjsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9saWIvaW5jbHVkZS9jZ3JvdXBfdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9pbmNsdWRlL2Nncm91cF91dGlsLmgKaW5kZXggOGViYjJiNGQ0ZWMwNy4uNjQwNzc4MDE4NzgwNyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9pbmNsdWRlL2Nncm91cF91dGlsLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9pbmNsdWRlL2Nncm91cF91dGlsLmgKQEAgLTU0LDYgJiM0Mzs1NCw5IEBAIGV4dGVybiBzc2l6ZV90IHdyaXRlX3RleHQoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzc2l6ZV90IGxlbik7CiBleHRlcm4gaW50IGNnX2ZpbmRfY29udHJvbGxlcl9yb290KGNoYXIgKnJvb3QsIHNpemVfdCBsZW4sIGNvbnN0IGNoYXIgKmNvbnRyb2xsZXIpOwogZXh0ZXJuIGludCBjZ19maW5kX3VuaWZpZWRfcm9vdChjaGFyICpyb290LCBzaXplX3QgbGVuLCBib29sICpuc2RlbGVnYXRlKTsKIGV4dGVybiBjaGFyICpjZ19uYW1lKGNvbnN0IGNoYXIgKnJvb3QsIGNvbnN0IGNoYXIgKm5hbWUpOwomIzQzO2V4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgY2dfZ2V0X2lkKGNvbnN0IGNoYXIgKmNncm91cCk7CiYjNDM7ZXh0ZXJuIHZvaWQgY2dfdG91Y2hfcGFnZXMoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSk7CiYjNDM7ZXh0ZXJuIGNoYXIgKmNnX2FsbG9jX2Fub24oc2l6ZV90IHNpemUpOwogZXh0ZXJuIGNoYXIgKmNnX25hbWVfaW5kZXhlZChjb25zdCBjaGFyICpyb290LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgaW5kZXgpOwogZXh0ZXJuIGNoYXIgKmNnX2NvbnRyb2woY29uc3QgY2hhciAqY2dyb3VwLCBjb25zdCBjaGFyICpjb250cm9sKTsKIGV4dGVybiBpbnQgY2dfY3JlYXRlKGNvbnN0IGNoYXIgKmNncm91cCk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbWVtY2dfc3RhdF9jcm9zc19jcHUuYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbWVtY2dfc3RhdF9jcm9zc19jcHUuYnBmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uZmZmM2I5MjU2YWEzOQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9tZW1jZ19zdGF0X2Nyb3NzX2NwdS5icGYuYwpAQCAtMCwwICYjNDM7MSwxMDEgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi8KJiM0MzsjZGVmaW5lIEJQRl9OT19LRlVOQ19QUk9UT1RZUEVTCiYjNDM7I2luY2x1ZGUgJmx0O3ZtbGludXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfY29yZV9yZWFkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDttZW1jZ19zdGF0X2Nyb3NzX2NwdS5oJiMzNDsKJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CiYjNDM7CiYjNDM7LyogRW5zdXJlIHRoZSB1cHBlci1ib3VuZCBjaGVja3MgYWxzbyByZWplY3QgbmVnYXRpdmUgQlBGIGFyZ3VtZW50cy4gKi8KJiM0MztfU3RhdGljX2Fzc2VydCgoZW51bSB2bV9ldmVudF9pdGVtKS0xICZndDs9IE5SX1ZNX0VWRU5UX0lURU1TLAomIzQzOwkgICAgICAgJiMzNDtuZWdhdGl2ZSB2bV9ldmVudF9pdGVtIG11c3QgZmFpbCB0aGUgYm91bmRzIGNoZWNrJiMzNDspOwomIzQzO19TdGF0aWNfYXNzZXJ0KChlbnVtIG1lbWNnX21lbW9yeV9ldmVudCktMSAmZ3Q7PSBNRU1DR19OUl9NRU1PUllfRVZFTlRTLAomIzQzOwkgICAgICAgJiMzNDtuZWdhdGl2ZSBtZW1jZ19tZW1vcnlfZXZlbnQgbXVzdCBmYWlsIHRoZSBib3VuZHMgY2hlY2smIzM0Oyk7CiYjNDM7CiYjNDM7LyogRGVjbGFyZSBrZnVuY3MgdGhhdCBtYXkgYmUgYWJzZW50IGZyb20gdGhlIGJ1aWxkLXRpbWUgdm1saW51eC5oLiAqLwomIzQzO3N0cnVjdCBtZW1fY2dyb3VwICpicGZfZ2V0X21lbV9jZ3JvdXAoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcykgX19rc3ltOwomIzQzO3ZvaWQgYnBmX3B1dF9tZW1fY2dyb3VwKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykgX19rc3ltOwomIzQzO3ZvaWQgYnBmX21lbV9jZ3JvdXBfZmx1c2hfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSBfX2tzeW07CiYjNDM7dW5zaWduZWQgbG9uZyBicGZfbWVtX2Nncm91cF9wYWdlX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGlkeCkgX19rc3ltOwomIzQzO3Vuc2lnbmVkIGxvbmcgYnBmX21lbV9jZ3JvdXBfdm1fZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKJiM0MzsJCQkJICAgICAgIGVudW0gdm1fZXZlbnRfaXRlbSBldmVudCkgX19rc3ltOwomIzQzOwomIzQzOy8qIFVzZXJzcGFjZSByZXNpemVzIHRoaXMgY2dyb3VwLUlEIG1hcCBiZWZvcmUgbG9hZC4gKi8KJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0hBU0gpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDEpOwomIzQzOwlfX3R5cGUoa2V5LCBfX3U2NCk7CiYjNDM7CV9fdHlwZSh2YWx1ZSwgc3RydWN0IG1lbWNnX3N0YXRfc25hcHNob3QpOwomIzQzO30gcmVzdWx0cyBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKJiM0MzsKJiM0MzsvKiBJc29sYXRlIGNhcGFiaWxpdHkgZmFpbHVyZXMgZnJvbSB2ZXJpZmllciBmYWlsdXJlcyBpbiB0aGUgdGVzdCBwcm9ncmFtLiAqLwomIzQzO1NFQygmIzM0O2l0ZXIucy9jZ3JvdXAmIzM0OykKJiM0MztpbnQgbWVtY2dfa2Z1bmNzX3Byb2JlKHN0cnVjdCBicGZfaXRlcl9fY2dyb3VwICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgY2dyb3VwICpjZ3JwID0gY3R4LSZndDtjZ3JvdXA7CiYjNDM7CXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKJiM0MzsKJiM0MzsJaWYgKCFjZ3JwKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CW1lbWNnID0gYnBmX2dldF9tZW1fY2dyb3VwKCZhbXA7Y2dycC0mZ3Q7c2VsZik7CiYjNDM7CWlmICghbWVtY2cpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJYnBmX21lbV9jZ3JvdXBfZmx1c2hfc3RhdHMobWVtY2cpOwomIzQzOwlicGZfbWVtX2Nncm91cF9wYWdlX3N0YXRlKG1lbWNnLCAwKTsKJiM0MzsJYnBmX21lbV9jZ3JvdXBfdm1fZXZlbnRzKG1lbWNnLCAwKTsKJiM0MzsJYnBmX3B1dF9tZW1fY2dyb3VwKG1lbWNnKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qIFNsZWVwYWJsZSBpdGVyYXRvcjogZmx1c2ggdGhlIHJvb3Qgb25jZSwgdGhlbiBzbmFwc2hvdCBlYWNoIGNncm91cC4gKi8KJiM0MztTRUMoJiMzNDtpdGVyLnMvY2dyb3VwJiMzNDspCiYjNDM7aW50IGNncm91cF9tZW1jZ19zdGF0X2Nyb3NzX2NwdShzdHJ1Y3QgYnBmX2l0ZXJfX2Nncm91cCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IGNncm91cCAqY2dycCA9IGN0eC0mZ3Q7Y2dyb3VwOwomIzQzOwlzdHJ1Y3QgbWVtY2dfc3RhdF9zbmFwc2hvdCBzbmFwID0ge307CiYjNDM7CXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3M7CiYjNDM7CXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKJiM0MzsJaW50IGlkeF9hbm9uLCBpZHhfZmlsZSwgaWR4X3NobWVtLCBpZHhfZm1hcHBlZCwgaWR4X3BnZmF1bHQ7CiYjNDM7CV9fdTY0IGNnX2lkOwomIzQzOwomIzQzOwkvKiBJZ25vcmUgdGhlIGZpbmFsIHBvc3QtcHJvY2Vzc2luZyBjYWxsLiAqLwomIzQzOwlpZiAoIWNncnApCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJY3NzID0gJmFtcDtjZ3JwLSZndDtzZWxmOwomIzQzOwltZW1jZyA9IGJwZl9nZXRfbWVtX2Nncm91cChjc3MpOwomIzQzOwlpZiAoIW1lbWNnKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qIERFU0NFTkRBTlRTX1BSRSB2aXNpdHMgdGhlIHN1YnRyZWUgcm9vdCBmaXJzdC4gKi8KJiM0MzsJaWYgKGN0eC0mZ3Q7bWV0YS0mZ3Q7c2VxX251bSA9PSAwKQomIzQzOwkJYnBmX21lbV9jZ3JvdXBfZmx1c2hfc3RhdHMobWVtY2cpOwomIzQzOwomIzQzOwljZ19pZCA9IEJQRl9DT1JFX1JFQUQoY2dycCwga24sIGlkKTsKJiM0MzsJc25hcC5jZ3JvdXBfaWQgPSBjZ19pZDsKJiM0MzsKJiM0MzsJaWR4X2Fub24gPSBicGZfY29yZV9lbnVtX3ZhbHVlKGVudW0gbm9kZV9zdGF0X2l0ZW0sIE5SX0FOT05fTUFQUEVEKTsKJiM0MzsJaWR4X2ZpbGUgPSBicGZfY29yZV9lbnVtX3ZhbHVlKGVudW0gbm9kZV9zdGF0X2l0ZW0sIE5SX0ZJTEVfUEFHRVMpOwomIzQzOwlpZHhfc2htZW0gPSBicGZfY29yZV9lbnVtX3ZhbHVlKGVudW0gbm9kZV9zdGF0X2l0ZW0sIE5SX1NITUVNKTsKJiM0MzsJaWR4X2ZtYXBwZWQgPSBicGZfY29yZV9lbnVtX3ZhbHVlKGVudW0gbm9kZV9zdGF0X2l0ZW0sIE5SX0ZJTEVfTUFQUEVEKTsKJiM0MzsJaWR4X3BnZmF1bHQgPSBicGZfY29yZV9lbnVtX3ZhbHVlKGVudW0gdm1fZXZlbnRfaXRlbSwgUEdGQVVMVCk7CiYjNDM7CiYjNDM7CXNuYXAuYW5vbiA9IGJwZl9tZW1fY2dyb3VwX3BhZ2Vfc3RhdGUobWVtY2csIGlkeF9hbm9uKTsKJiM0MzsJc25hcC5maWxlID0gYnBmX21lbV9jZ3JvdXBfcGFnZV9zdGF0ZShtZW1jZywgaWR4X2ZpbGUpOwomIzQzOwlzbmFwLnNobWVtID0gYnBmX21lbV9jZ3JvdXBfcGFnZV9zdGF0ZShtZW1jZywgaWR4X3NobWVtKTsKJiM0MzsJc25hcC5maWxlX21hcHBlZCA9IGJwZl9tZW1fY2dyb3VwX3BhZ2Vfc3RhdGUobWVtY2csIGlkeF9mbWFwcGVkKTsKJiM0MzsJc25hcC5wZ2ZhdWx0ID0gYnBmX21lbV9jZ3JvdXBfdm1fZXZlbnRzKG1lbWNnLCBpZHhfcGdmYXVsdCk7CiYjNDM7CiYjNDM7CS8qIFJlYWQgcGFnZSBjb3VudGVycyBmcm9tIHRoZSB0cnVzdGVkIHBvaW50ZXIuICovCiYjNDM7CXNuYXAudXNhZ2VfcGFnZXMgPSBCUEZfQ09SRV9SRUFEKG1lbWNnLCBtZW1vcnkudXNhZ2UuY291bnRlcik7CiYjNDM7CXNuYXAubWF4X3BhZ2VzID0gQlBGX0NPUkVfUkVBRChtZW1jZywgbWVtb3J5Lm1heCk7CiYjNDM7CiYjNDM7CWJwZl9tYXBfdXBkYXRlX2VsZW0oJmFtcDtyZXN1bHRzLCAmYW1wO2NnX2lkLCAmYW1wO3NuYXAsIEJQRl9BTlkpOwomIzQzOwomIzQzOwlicGZfcHV0X21lbV9jZ3JvdXAobWVtY2cpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbWVtY2dfc3RhdF9jcm9zc19jcHUuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9tZW1jZ19zdGF0X2Nyb3NzX2NwdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmY3NWUzNDFmOGNiODMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbWVtY2dfc3RhdF9jcm9zc19jcHUuaApAQCAtMCwwICYjNDM7MSwxOCBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqLwomIzQzOyNpZm5kZWYgX19NRU1DR19TVEFUX0NST1NTX0NQVV9ICiYjNDM7I2RlZmluZSBfX01FTUNHX1NUQVRfQ1JPU1NfQ1BVX0gKJiM0MzsKJiM0MzsvKiBGaXhlZC13aWR0aCBzbmFwc2hvdCBzaGFyZWQgYnkgQlBGIGFuZCB1c2Vyc3BhY2UuICovCiYjNDM7c3RydWN0IG1lbWNnX3N0YXRfc25hcHNob3QgewomIzQzOwlfX3U2NCBjZ3JvdXBfaWQ7CiYjNDM7CV9fdTY0IGFub247CQkvKiBOUl9BTk9OX01BUFBFRCwgYnl0ZXMgKi8KJiM0MzsJX191NjQgZmlsZTsJCS8qIE5SX0ZJTEVfUEFHRVMsIGJ5dGVzICovCiYjNDM7CV9fdTY0IHNobWVtOwkJLyogTlJfU0hNRU0sIGJ5dGVzICovCiYjNDM7CV9fdTY0IGZpbGVfbWFwcGVkOwkvKiBOUl9GSUxFX01BUFBFRCwgYnl0ZXMgKi8KJiM0MzsJX191NjQgcGdmYXVsdDsJCS8qIFBHRkFVTFQsIGNvdW50ICovCiYjNDM7CV9fdTY0IHVzYWdlX3BhZ2VzOwkvKiBwYWdlX2NvdW50ZXIgbWVtb3J5LnVzYWdlLCBpbiBQQUdFUyAqLwomIzQzOwlfX3U2NCBtYXhfcGFnZXM7CS8qIHBhZ2VfY291bnRlciBtZW1vcnkubWF4LCBpbiBQQUdFUyAqLwomIzQzO307CiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9fTUVNQ0dfU1RBVF9DUk9TU19DUFVfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfbWVtY2dfc3RhdF9jcm9zc19jcHUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X21lbWNnX3N0YXRfY3Jvc3NfY3B1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uOTZlNGE0YTk1OGVkYQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X21lbWNnX3N0YXRfY3Jvc3NfY3B1LmMKQEAgLTAsMCAmIzQzOzEsNzU1IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDb21wYXJlIG1lbWNnIEJQRiBrZnVuY3Mgd2l0aCBtZW1vcnkuc3RhdCBvdmVyIGEgY2hhcmdlZCBzdWJ0cmVlLiBDaGFyZ2VycwomIzQzOyAqIHNwcmVhZCBhbm9ueW1vdXMgbWVtb3J5IGFjcm9zcyBDUFVzIGFuZCBob2xkIGl0LiBSZWFkIEJQRiBmaXJzdCBzbyBpdHMgZmx1c2gKJiM0MzsgKiBpcyBub3QgY29uc3VtZWQgYnkgbWVtb3J5LnN0YXQsIHRoZW4gcmVxdWlyZSB0d28gZmlsZSBzYW1wbGVzIHRvIGJyYWNrZXQgZWFjaAomIzQzOyAqIEJQRiB2YWx1ZS4gRWFjaCBsZWFmIG11c3QgY292ZXIgaXRzIGNoYXJnZTsgcm9vdCBhbm9uIG11c3QgZXF1YWwgdGhlIGxlYWYgc3VtLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgX0dOVV9TT1VSQ0UKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbGltaXRzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2ZjbnRsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbWl0cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRpbnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c2NoZWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3dhaXQuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYnBmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2xpYmJwZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnRmLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtrc2VsZnRlc3QuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtjZ3JvdXBfdXRpbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O21lbWNnX3N0YXRfY3Jvc3NfY3B1LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7bWVtY2dfc3RhdF9jcm9zc19jcHUuc2tlbC5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIFNVQlRSRUVfTkFNRQkJJiMzNDttY2dfeGNwdSYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBNRU1DR19DSEFSR0VfQkFUQ0gJNjQKJiM0MzsKJiM0MzsjZGVmaW5lIEZMVVNIX01BUkdJTgkJMgomIzQzOwomIzQzOy8qIEJvdW5kIHRvdGFsIGNoYXJnZSBvbiBsYXJnZSBzeXN0ZW1zLiAqLwomIzQzOyNkZWZpbmUgTUFYX1RPVEFMX0NIQVJHRQkoMjU2VUwgJmx0OyZsdDsgMjApCiYjNDM7CiYjNDM7LyogQm91bmQgdGhlIENQVXMgdXNlZCBieSBlYWNoIGxlYWYuICovCiYjNDM7I2RlZmluZSBNQVhfQ1BVU19QRVJfTEVBRgkxNgomIzQzOwomIzQzOyNkZWZpbmUgQ0hBUkdFX1dBSVRfUkVUUklFUwk1MDAKJiM0MzsKJiM0MztzdGF0aWMgY2hhciByb290W1BBVEhfTUFYXTsKJiM0MztzdGF0aWMgY2hhciAqc3VidHJlZV9yb290OwomIzQzO3N0YXRpYyBsb25nIHBhZ2Vfc2l6ZTsKJiM0MzsKJiM0MzsvKiBjZ3JvdXBmcyB2YWx1ZXMgaW4gYnl0ZXMuICovCiYjNDM7c3RydWN0IGZpbGVfc25hcCB7CiYjNDM7CWxvbmcgYW5vbiwgZmlsZSwgc2htZW0sIGZpbGVfbWFwcGVkLCBwZ2ZhdWx0OwomIzQzOwlsb25nIGN1cnJlbnQ7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgY2dfbm9kZSB7CiYjNDM7CWNoYXIgcGF0aFtQQVRIX01BWF07CiYjNDM7CXVuc2lnbmVkIGxvbmcgbG9uZyBpZDsKJiM0MzsJYm9vbCBpc19sZWFmOwkJCS8qIGhvbGRzIGEgY2hhcmdlIG9mIGl0cyBvd24gKi8KJiM0MzsJbG9uZyBwcmV2aW91c19jdXJyZW50OwkJLyogcHJldmlvdXMgbWVtb3J5LmN1cnJlbnQgcG9sbCAqLwomIzQzOwlzdHJ1Y3QgbWVtY2dfc3RhdF9zbmFwc2hvdCBicGY7CS8qIHJlYWQgdGhyb3VnaCB0aGUga2Z1bmNzICovCiYjNDM7CXN0cnVjdCBmaWxlX3NuYXAgZmlsZVsyXTsJLyogcG9zdC1CUEYgY2dyb3VwZnMgc2FtcGxlcyAqLwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBjZ19ub2RlICpub2RlczsJLyogREZTIG9yZGVyOiBhIHBhcmVudCBwcmVjZWRlcyBpdHMgY2hpbGRyZW4gKi8KJiM0MztzdGF0aWMgaW50IG5fbm9kZXM7CiYjNDM7c3RhdGljIGludCBuX2xlYXZlczsKJiM0MzsKJiM0MzsvKiAtLS0tIENQVXMgdGhpcyB0ZXN0IG1heSBydW4gb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KJiM0MzsKJiM0MztzdGF0aWMgY3B1X3NldF90IGFsbG93ZWRfY3B1czsKJiM0MztzdGF0aWMgaW50IG5fY3B1OwomIzQzO3N0YXRpYyBsb25nIG5fb25saW5lX2NwdTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IG50aF9jcHUoaW50IG4pCiYjNDM7ewomIzQzOwlpbnQgaSwgc2VlbiA9IDA7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBDUFVfU0VUU0laRTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICghQ1BVX0lTU0VUKGksICZhbXA7YWxsb3dlZF9jcHVzKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmIChzZWVuJiM0MzsmIzQzOyA9PSBuICUgbl9jcHUpCiYjNDM7CQkJcmV0dXJuIGk7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIC0xOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBpbl9jcHUoaW50IGNwdSkKJiM0Mzt7CiYjNDM7CWNwdV9zZXRfdCBzZXQ7CiYjNDM7CiYjNDM7CWlmIChjcHUgJmx0OyAwKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlDUFVfWkVSTygmYW1wO3NldCk7CiYjNDM7CUNQVV9TRVQoY3B1LCAmYW1wO3NldCk7CiYjNDM7CXJldHVybiBzY2hlZF9zZXRhZmZpbml0eSgwLCBzaXplb2Yoc2V0KSwgJmFtcDtzZXQpOwomIzQzO30KJiM0MzsKJiM0MzsvKiAtLS0tIHRyZWUgY29uc3RydWN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiYjNDM7CiYjNDM7c3RhdGljIGludCBhZGRfbm9kZShjb25zdCBjaGFyICpwYXRoLCBib29sIGlzX2xlYWYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgY2dfbm9kZSAqbiA9ICZhbXA7bm9kZXNbbl9ub2Rlc107CiYjNDM7CiYjNDM7CWlmIChjZ19jcmVhdGUocGF0aCkpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CXN0cm5jcHkobi0mZ3Q7cGF0aCwgcGF0aCwgc2l6ZW9mKG4tJmd0O3BhdGgpIC0gMSk7CiYjNDM7CW4tJmd0O2lkID0gY2dfZ2V0X2lkKHBhdGgpOwomIzQzOwluLSZndDtpc19sZWFmID0gaXNfbGVhZjsKJiM0MzsJbi0mZ3Q7cHJldmlvdXNfY3VycmVudCA9IC0xOwomIzQzOwlpZiAoaXNfbGVhZikKJiM0MzsJCW5fbGVhdmVzJiM0MzsmIzQzOzsKJiM0MzsJbl9ub2RlcyYjNDM7JiM0Mzs7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBCdWlsZCBAbGV2ZWxzIGJlbG93IEBwYXRoOyBvbmx5IGxlYXZlcyBhcmUgY2hhcmdlZC4gKi8KJiM0MztzdGF0aWMgaW50IGJ1aWxkX2NoaWxkcmVuKGNvbnN0IGNoYXIgKnBhdGgsIGludCBmYW5vdXQsIGludCBsZXZlbHMpCiYjNDM7ewomIzQzOwljaGFyIGNoaWxkW1BBVEhfTUFYXTsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWlmIChsZXZlbHMgPT0gMCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKiBHaXZlIGNoaWxkIGNncm91cHMgYSBtZW1jZy4gKi8KJiM0MzsJaWYgKGNnX3dyaXRlKHBhdGgsICYjMzQ7Y2dyb3VwLnN1YnRyZWVfY29udHJvbCYjMzQ7LCAmIzM0OyYjNDM7bWVtb3J5JiMzNDspKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgZmFub3V0OyBpJiM0MzsmIzQzOykgewomIzQzOwkJc25wcmludGYoY2hpbGQsIHNpemVvZihjaGlsZCksICYjMzQ7JXMvYyVkJiMzNDssIHBhdGgsIGkpOwomIzQzOwkJaWYgKGFkZF9ub2RlKGNoaWxkLCBsZXZlbHMgPT0gMSkpCiYjNDM7CQkJcmV0dXJuIC0xOwomIzQzOwkJaWYgKGJ1aWxkX2NoaWxkcmVuKGNoaWxkLCBmYW5vdXQsIGxldmVscyAtIDEpKQomIzQzOwkJCXJldHVybiAtMTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHNpemVfdCB0cmVlX2NhcGFjaXR5KGludCBmYW5vdXQsIGludCBkZXB0aCkKJiM0Mzt7CiYjNDM7CXNpemVfdCB0b3RhbCA9IDEsIGxldmVsID0gMTsKJiM0MzsJaW50IGQ7CiYjNDM7CiYjNDM7CWZvciAoZCA9IDA7IGQgJmx0OyBkZXB0aDsgZCYjNDM7JiM0MzspIHsKJiM0MzsJCWxldmVsICo9IGZhbm91dDsKJiM0MzsJCXRvdGFsICYjNDM7PSBsZXZlbDsKJiM0MzsJfQomIzQzOwlyZXR1cm4gdG90YWw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYnVpbGRfdHJlZShpbnQgZmFub3V0LCBpbnQgZGVwdGgsIGludCAqcm9vdF9mZCkKJiM0Mzt7CiYjNDM7CW5fbm9kZXMgPSAwOwomIzQzOwluX2xlYXZlcyA9IDA7CiYjNDM7CW5vZGVzID0gY2FsbG9jKHRyZWVfY2FwYWNpdHkoZmFub3V0LCBkZXB0aCksIHNpemVvZigqbm9kZXMpKTsKJiM0MzsJaWYgKCFub2RlcykKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJaWYgKGFkZF9ub2RlKHN1YnRyZWVfcm9vdCwgZGVwdGggPT0gMCkpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CiYjNDM7CSpyb290X2ZkID0gb3BlbihzdWJ0cmVlX3Jvb3QsIE9fUkRPTkxZKTsKJiM0MzsJaWYgKCpyb290X2ZkICZsdDsgMCkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKJiM0MzsJcmV0dXJuIGJ1aWxkX2NoaWxkcmVuKHN1YnRyZWVfcm9vdCwgZmFub3V0LCBkZXB0aCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIERlc3Ryb3kgY2hpbGRyZW4gYmVmb3JlIHBhcmVudHMsIHRoZW4gcmVhcCBjaGFyZ2Vycy4gKi8KJiM0MztzdGF0aWMgdm9pZCBkZXN0cm95X3RyZWUodm9pZCkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlpZiAoIW5vZGVzKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlmb3IgKGkgPSBuX25vZGVzIC0gMTsgaSAmZ3Q7PSAwOyBpLS0pCiYjNDM7CQljZ19kZXN0cm95KG5vZGVzW2ldLnBhdGgpOwomIzQzOwlmcmVlKG5vZGVzKTsKJiM0MzsJbm9kZXMgPSBOVUxMOwomIzQzOwomIzQzOwl3aGlsZSAod2FpdHBpZCgtMSwgTlVMTCwgMCkgJmd0OyAwKQomIzQzOwkJOwomIzQzO30KJiM0MzsKJiM0MzsvKiAtLS0tIGNyb3NzLUNQVSBjaGFyZ2UgKG9uZSBjaGlsZCBwZXIgbGVhZikgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiYjNDM7CiYjNDM7c3RydWN0IGNoYXJnZV9hcmdzIHsKJiM0MzsJc2l6ZV90IGJ5dGVzOwkvKiBhbm9uIHRoaXMgbGVhZiBob2xkcyAqLwomIzQzOwlpbnQgYmFzZTsJLyogaW5kZXggb2YgdGhlIGZpcnN0IENQVSB0byBmYXVsdCBvbiAqLwomIzQzOwlpbnQgazsJCS8qIENQVXMgdG8gc3ByZWFkIHRoZSBjaGFyZ2Ugb3ZlciAqLwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBjaGFyZ2VfbGVhZihjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZykKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBjaGFyZ2VfYXJncyAqY2EgPSBhcmc7CiYjNDM7CWludCBwcGlkID0gZ2V0cHBpZCgpOwomIzQzOwlzaXplX3QgcGVyLCBvZmY7CiYjNDM7CWNoYXIgKmJ1ZjsKJiM0MzsJaW50IGo7CiYjNDM7CiYjNDM7CWJ1ZiA9IG1hbGxvYyhjYS0mZ3Q7Ynl0ZXMpOwomIzQzOwlpZiAoIWJ1ZikgewomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7bWFsbG9jKCkgZmFpbGVkXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogS2VlcCBlYWNoIENQVSYjMzk7cyBzbGljZSBwYWdlLWFsaWduZWQuICovCiYjNDM7CXBlciA9IGNhLSZndDtieXRlcyAvIGNhLSZndDtrIC8gcGFnZV9zaXplICogcGFnZV9zaXplOwomIzQzOwomIzQzOwlmb3IgKGogPSAwOyBqICZsdDsgY2EtJmd0O2s7IGomIzQzOyYjNDM7KSB7CiYjNDM7CQlvZmYgPSAoc2l6ZV90KWogKiBwZXI7CiYjNDM7CQlpZiAocGluX2NwdShudGhfY3B1KGNhLSZndDtiYXNlICYjNDM7IGopKSkgewomIzQzOwkJCWZyZWUoYnVmKTsKJiM0MzsJCQlyZXR1cm4gLTE7CiYjNDM7CQl9CiYjNDM7CQljZ190b3VjaF9wYWdlcyhidWYgJiM0Mzsgb2ZmLAomIzQzOwkJCSAgICAgICBqID09IGNhLSZndDtrIC0gMSA/IGNhLSZndDtieXRlcyAtIG9mZiA6IHBlcik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJd2hpbGUgKGdldHBwaWQoKSA9PSBwcGlkKQomIzQzOwkJc2xlZXAoMSk7CiYjNDM7CiYjNDM7CWZyZWUoYnVmKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbGVhZl9jaGFyZ2Uoc2l6ZV90IHdhbnQsIGludCBrLCBzaXplX3QgKmJ5dGVzKQomIzQzO3sKJiM0MzsJc2l6ZV90IG1pbl9wYWdlcywgcGFnZXMsIHdhbnRfcGFnZXM7CiYjNDM7CiYjNDM7CWlmICgoc2l6ZV90KW5fb25saW5lX2NwdSAmZ3Q7IFNJWkVfTUFYIC8gRkxVU0hfTUFSR0lOIC8KJiM0MzsJCQkJCSBNRU1DR19DSEFSR0VfQkFUQ0gpCiYjNDM7CQlyZXR1cm4gLUVPVkVSRkxPVzsKJiM0MzsKJiM0MzsJLyogRm9yY2UgbW9yZSB0aGFuIG9uZSBwZW5kaW5nIGJhdGNoIHBlciBDUFUgYWNyb3NzIHRoZSBzdWJ0cmVlLiAqLwomIzQzOwltaW5fcGFnZXMgPSAoc2l6ZV90KUZMVVNIX01BUkdJTiAqIE1FTUNHX0NIQVJHRV9CQVRDSCAqIG5fb25saW5lX2NwdTsKJiM0MzsJcGFnZXMgPSBtaW5fcGFnZXMgLyBuX2xlYXZlcyAmIzQzOyAhIShtaW5fcGFnZXMgJSBuX2xlYXZlcyk7CiYjNDM7CXdhbnRfcGFnZXMgPSB3YW50IC8gcGFnZV9zaXplICYjNDM7ICEhKHdhbnQgJSBwYWdlX3NpemUpOwomIzQzOwlpZiAocGFnZXMgJmx0OyB3YW50X3BhZ2VzKQomIzQzOwkJcGFnZXMgPSB3YW50X3BhZ2VzOwomIzQzOwlpZiAocGFnZXMgJmx0OyAoc2l6ZV90KWspCiYjNDM7CQlwYWdlcyA9IGs7CiYjNDM7CiYjNDM7CWlmIChwYWdlcyAmZ3Q7IE1BWF9UT1RBTF9DSEFSR0UgLyAoc2l6ZV90KW5fbGVhdmVzIC8gcGFnZV9zaXplKQomIzQzOwkJcmV0dXJuIC1FMkJJRzsKJiM0MzsKJiM0MzsJKmJ5dGVzID0gcGFnZXMgKiBwYWdlX3NpemU7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHN0YXJ0X2NoYXJnZXJzKGludCBrLCBzaXplX3QgYnl0ZXMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgY2hhcmdlX2FyZ3MgY2EgPSB7IC5ieXRlcyA9IGJ5dGVzLCAuayA9IGsgfTsKJiM0MzsJbG9uZyBwcmV2LCBjdXI7CiYjNDM7CWJvb2wgcmVhZHk7CiYjNDM7CWludCBpLCByZXRyaWVzOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbl9ub2RlczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICghbm9kZXNbaV0uaXNfbGVhZikKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmIChjZ19ydW5fbm93YWl0KG5vZGVzW2ldLnBhdGgsIGNoYXJnZV9sZWFmLCAmYW1wO2NhKSAmbHQ7IDApIHsKJiM0MzsJCQlrc2Z0X3ByaW50X21zZygmIzM0O2Nhbm5vdCBzdGFydCBhIGNoYXJnZXIgb24gJXNcbiYjMzQ7LAomIzQzOwkJCQkgICAgICAgbm9kZXNbaV0ucGF0aCk7CiYjNDM7CQkJcmV0dXJuIC0xOwomIzQzOwkJfQomIzQzOwkJY2EuYmFzZSAmIzQzOz0gazsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBXYWl0IHVudGlsIGV2ZXJ5IGxlYWYgaXMgZnVsbHkgY2hhcmdlZCBhbmQgc3RhYmxlLiAqLwomIzQzOwlmb3IgKHJldHJpZXMgPSBDSEFSR0VfV0FJVF9SRVRSSUVTOyByZXRyaWVzOyByZXRyaWVzLS0pIHsKJiM0MzsJCXJlYWR5ID0gdHJ1ZTsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBuX25vZGVzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCWlmICghbm9kZXNbaV0uaXNfbGVhZikKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkJY3VyID0gY2dfcmVhZF9sb25nKG5vZGVzW2ldLnBhdGgsICYjMzQ7bWVtb3J5LmN1cnJlbnQmIzM0Oyk7CiYjNDM7CQkJaWYgKGN1ciAmbHQ7IDApIHsKJiM0MzsJCQkJa3NmdF9wcmludF9tc2coJiMzNDtjYW5ub3QgcmVhZCAlcy9tZW1vcnkuY3VycmVudDogJXNcbiYjMzQ7LAomIzQzOwkJCQkJICAgICAgIG5vZGVzW2ldLnBhdGgsIHN0cmVycm9yKGVycm5vKSk7CiYjNDM7CQkJCXJldHVybiAtMTsKJiM0MzsJCQl9CiYjNDM7CiYjNDM7CQkJcHJldiA9IG5vZGVzW2ldLnByZXZpb3VzX2N1cnJlbnQ7CiYjNDM7CQkJbm9kZXNbaV0ucHJldmlvdXNfY3VycmVudCA9IGN1cjsKJiM0MzsJCQlpZiAoY3VyICZsdDsgKGxvbmcpYnl0ZXMgfHwgY3VyICE9IHByZXYpCiYjNDM7CQkJCXJlYWR5ID0gZmFsc2U7CiYjNDM7CQl9CiYjNDM7CQlpZiAocmVhZHkpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CQl1c2xlZXAoREVGQVVMVF9XQUlUX0lOVEVSVkFMX1VTIC8gMTApOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBuX25vZGVzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKG5vZGVzW2ldLmlzX2xlYWYgJmFtcDsmYW1wOyBub2Rlc1tpXS5wcmV2aW91c19jdXJyZW50ICZsdDsgKGxvbmcpYnl0ZXMpIHsKJiM0MzsJCQlrc2Z0X3ByaW50X21zZygmIzM0OyVzIHJlYWNoZWQgb25seSAlbGQgb2YgJXp1IGNoYXJnZWQgYnl0ZXNcbiYjMzQ7LAomIzQzOwkJCQkgICAgICAgbm9kZXNbaV0ucGF0aCwgbm9kZXNbaV0ucHJldmlvdXNfY3VycmVudCwKJiM0MzsJCQkJICAgICAgIGJ5dGVzKTsKJiM0MzsJCQlyZXR1cm4gLTE7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJa3NmdF9wcmludF9tc2coJiMzNDttZW1vcnkuY3VycmVudCBkaWQgbm90IHNldHRsZSBiZWZvcmUgdGhlIHRpbWVvdXRcbiYjMzQ7KTsKJiM0MzsJcmV0dXJuIC0xOwomIzQzO30KJiM0MzsKJiM0MzsvKiAtLS0tIHRoZSB0d28gcmVhZGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiYjNDM7CiYjNDM7LyogRmx1c2ggdGhlIHN1YnRyZWUgYW5kIGNvbGxlY3QgZWFjaCBjZ3JvdXAmIzM5O3Mga2Z1bmMgdmFsdWVzLiAqLwomIzQzO3N0YXRpYyBpbnQgcmVhZF9icGYoaW50IHJvb3RfZmQpCiYjNDM7ewomIzQzOwlERUNMQVJFX0xJQkJQRl9PUFRTKGJwZl9pdGVyX2F0dGFjaF9vcHRzLCBvcHRzKTsKJiM0MzsJc3RydWN0IG1lbWNnX3N0YXRfY3Jvc3NfY3B1ICpza2VsID0gTlVMTDsKJiM0MzsJdW5pb24gYnBmX2l0ZXJfbGlua19pbmZvIGxpbmZvID0ge307CiYjNDM7CXN0cnVjdCBicGZfbGluayAqbGluayA9IE5VTEw7CiYjNDM7CWludCByZXQgPSAtMSwgZXJyLCBpLCBtZmQsIGZkOwomIzQzOwljaGFyIGJ1Zls0MDk2XTsKJiM0MzsJc3NpemVfdCByOwomIzQzOwomIzQzOwlza2VsID0gbWVtY2dfc3RhdF9jcm9zc19jcHVfX29wZW4oKTsKJiM0MzsJaWYgKCFza2VsKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O3NrZWwgb3BlbiBmYWlsZWQ6ICVzICglZClcbiYjMzQ7LAomIzQzOwkJCSAgICAgICBzdHJlcnJvcihlcnJubyksIGVycm5vKTsKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJfQomIzQzOwllcnIgPSBicGZfcHJvZ3JhbV9fc2V0X2F1dG9sb2FkKHNrZWwtJmd0O3Byb2dzLm1lbWNnX2tmdW5jc19wcm9iZSwgZmFsc2UpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O2Rpc2FibGluZyBjYXBhYmlsaXR5IHByb2JlIGZhaWxlZDogJXMgKCVkKVxuJiMzNDssCiYjNDM7CQkJICAgICAgIHN0cmVycm9yKC1lcnIpLCBlcnIpOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsJZXJyID0gYnBmX21hcF9fc2V0X21heF9lbnRyaWVzKHNrZWwtJmd0O21hcHMucmVzdWx0cywgbl9ub2RlcyAmIzQzOyA4KTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtzZXQgbWF4X2VudHJpZXMgZmFpbGVkOiAlcyAoJWQpXG4mIzM0OywKJiM0MzsJCQkgICAgICAgc3RyZXJyb3IoLWVyciksIGVycik7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwllcnIgPSBtZW1jZ19zdGF0X2Nyb3NzX2NwdV9fbG9hZChza2VsKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtza2VsIGxvYWQgZmFpbGVkOiAlcyAoJWQpXG4mIzM0OywKJiM0MzsJCQkgICAgICAgc3RyZXJyb3IoLWVyciksIGVycik7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlsaW5mby5jZ3JvdXAuY2dyb3VwX2ZkID0gcm9vdF9mZDsKJiM0MzsJbGluZm8uY2dyb3VwLm9yZGVyID0gQlBGX0NHUk9VUF9JVEVSX0RFU0NFTkRBTlRTX1BSRTsKJiM0MzsJb3B0cy5saW5rX2luZm8gPSAmYW1wO2xpbmZvOwomIzQzOwlvcHRzLmxpbmtfaW5mb19sZW4gPSBzaXplb2YobGluZm8pOwomIzQzOwomIzQzOwlsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9pdGVyKHNrZWwtJmd0O3Byb2dzLmNncm91cF9tZW1jZ19zdGF0X2Nyb3NzX2NwdSwKJiM0MzsJCQkJCSZhbXA7b3B0cyk7CiYjNDM7CWVyciA9IGxpYmJwZl9nZXRfZXJyb3IobGluayk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWxpbmsgPSBOVUxMOwomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDthdHRhY2ggaXRlciBmYWlsZWQ6ICVzICglZClcbiYjMzQ7LAomIzQzOwkJCSAgICAgICBzdHJlcnJvcigtZXJyKSwgZXJyKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWZkID0gYnBmX2l0ZXJfY3JlYXRlKGJwZl9saW5rX19mZChsaW5rKSk7CiYjNDM7CWlmIChmZCAmbHQ7IDApIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7YnBmX2l0ZXJfY3JlYXRlIGZhaWxlZDogJXMgKCVkKVxuJiMzNDssCiYjNDM7CQkJICAgICAgIHN0cmVycm9yKGVycm5vKSwgZXJybm8pOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsJZG8gewomIzQzOwkJciA9IHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwomIzQzOwl9IHdoaWxlIChyICZndDsgMCB8fCAociAmbHQ7IDAgJmFtcDsmYW1wOyBlcnJubyA9PSBFSU5UUikpOwomIzQzOwllcnIgPSBlcnJubzsKJiM0MzsJY2xvc2UoZmQpOwomIzQzOwlpZiAociAmbHQ7IDApIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7YnBmIHdhbGsgZmFpbGVkOiAlcyAoJWQpXG4mIzM0OywKJiM0MzsJCQkgICAgICAgc3RyZXJyb3IoZXJyKSwgZXJyKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CW1mZCA9IGJwZl9tYXBfX2ZkKHNrZWwtJmd0O21hcHMucmVzdWx0cyk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBuX25vZGVzOyBpJiM0MzsmIzQzOykKJiM0MzsJCWlmIChicGZfbWFwX2xvb2t1cF9lbGVtKG1mZCwgJmFtcDtub2Rlc1tpXS5pZCwgJmFtcDtub2Rlc1tpXS5icGYpKSB7CiYjNDM7CQkJa3NmdF9wcmludF9tc2coJiMzNDtubyBtYXAgZW50cnkgZm9yICVzOiAlcyAoJWQpXG4mIzM0OywKJiM0MzsJCQkJICAgICAgIG5vZGVzW2ldLnBhdGgsIHN0cmVycm9yKGVycm5vKSwgZXJybm8pOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQomIzQzOwlyZXQgPSAwOwomIzQzO291dDoKJiM0MzsJYnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7CiYjNDM7CW1lbWNnX3N0YXRfY3Jvc3NfY3B1X19kZXN0cm95KHNrZWwpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKiBSZWFkIG9uZSBjZ3JvdXBmcyBzbmFwc2hvdC4gKi8KJiM0MztzdGF0aWMgaW50IHJlYWRfZmlsZXMoaW50IHNsb3QpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5fbm9kZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQljb25zdCBjaGFyICpwYXRoID0gbm9kZXNbaV0ucGF0aDsKJiM0MzsJCXN0cnVjdCBmaWxlX3NuYXAgKmYgPSAmYW1wO25vZGVzW2ldLmZpbGVbc2xvdF07CiYjNDM7CiYjNDM7CQlmLSZndDthbm9uID0gY2dfcmVhZF9rZXlfbG9uZyhwYXRoLCAmIzM0O21lbW9yeS5zdGF0JiMzNDssICYjMzQ7YW5vbiAmIzM0Oyk7CiYjNDM7CQlmLSZndDtmaWxlID0gY2dfcmVhZF9rZXlfbG9uZyhwYXRoLCAmIzM0O21lbW9yeS5zdGF0JiMzNDssICYjMzQ7ZmlsZSAmIzM0Oyk7CiYjNDM7CQlmLSZndDtzaG1lbSA9IGNnX3JlYWRfa2V5X2xvbmcocGF0aCwgJiMzNDttZW1vcnkuc3RhdCYjMzQ7LCAmIzM0O3NobWVtICYjMzQ7KTsKJiM0MzsJCWYtJmd0O2ZpbGVfbWFwcGVkID0gY2dfcmVhZF9rZXlfbG9uZyhwYXRoLCAmIzM0O21lbW9yeS5zdGF0JiMzNDssCiYjNDM7CQkJCQkJICAmIzM0O2ZpbGVfbWFwcGVkICYjMzQ7KTsKJiM0MzsJCWYtJmd0O3BnZmF1bHQgPSBjZ19yZWFkX2tleV9sb25nKHBhdGgsICYjMzQ7bWVtb3J5LnN0YXQmIzM0OywgJiMzNDtwZ2ZhdWx0ICYjMzQ7KTsKJiM0MzsJCWYtJmd0O2N1cnJlbnQgPSBjZ19yZWFkX2xvbmcocGF0aCwgJiMzNDttZW1vcnkuY3VycmVudCYjMzQ7KTsKJiM0MzsKJiM0MzsJCWlmIChmLSZndDthbm9uICZsdDsgMCB8fCBmLSZndDtmaWxlICZsdDsgMCB8fCBmLSZndDtzaG1lbSAmbHQ7IDAgfHwKJiM0MzsJCSAgICBmLSZndDtmaWxlX21hcHBlZCAmbHQ7IDAgfHwgZi0mZ3Q7cGdmYXVsdCAmbHQ7IDAgfHwgZi0mZ3Q7Y3VycmVudCAmbHQ7IDApIHsKJiM0MzsJCQlrc2Z0X3ByaW50X21zZygmIzM0O3JlYWRpbmcgdGhlIHN0YXRzIG9mICVzIGZhaWxlZFxuJiMzNDssIHBhdGgpOwomIzQzOwkJCXJldHVybiAtMTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogLS0tLSBjb21wYXJpc29uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGR1bXBfbm9kZShjb25zdCBzdHJ1Y3QgY2dfbm9kZSAqbikKJiM0Mzt7CiYjNDM7CWludCBzOwomIzQzOwomIzQzOwlrc2Z0X3ByaW50X21zZygmIzM0OyVzIGJwZiAgIDogYW5vbj0lbGx1IGZpbGU9JWxsdSBzaG1lbT0lbGx1IGZtYXBwZWQ9JWxsdSBwZ2ZhdWx0PSVsbHVcbiYjMzQ7LAomIzQzOwkJICAgICAgIG4tJmd0O3BhdGgsIG4tJmd0O2JwZi5hbm9uLCBuLSZndDticGYuZmlsZSwgbi0mZ3Q7YnBmLnNobWVtLAomIzQzOwkJICAgICAgIG4tJmd0O2JwZi5maWxlX21hcHBlZCwgbi0mZ3Q7YnBmLnBnZmF1bHQpOwomIzQzOwlmb3IgKHMgPSAwOyBzICZsdDsgMjsgcyYjNDM7JiM0MzspCiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0OyVzIGZpbGUlZDogYW5vbj0lbGQgZmlsZT0lbGQgc2htZW09JWxkIGZtYXBwZWQ9JWxkIHBnZmF1bHQ9JWxkXG4mIzM0OywKJiM0MzsJCQkgICAgICAgbi0mZ3Q7cGF0aCwgcywgbi0mZ3Q7ZmlsZVtzXS5hbm9uLCBuLSZndDtmaWxlW3NdLmZpbGUsCiYjNDM7CQkJICAgICAgIG4tJmd0O2ZpbGVbc10uc2htZW0sIG4tJmd0O2ZpbGVbc10uZmlsZV9tYXBwZWQsCiYjNDM7CQkJICAgICAgIG4tJmd0O2ZpbGVbc10ucGdmYXVsdCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIEVxdWFsIGZpbGUgc2FtcGxlcyByZXF1aXJlIGFuIGV4YWN0IEJQRiBtYXRjaDsgb3RoZXJ3aXNlIGFjY2VwdCB0aGVpciByYW5nZS4gKi8KJiM0MztzdGF0aWMgYm9vbCBicmFja2V0ZWQodW5zaWduZWQgbG9uZyBsb25nIHYsIGxvbmcgYSwgbG9uZyBiKQomIzQzO3sKJiM0MzsJbG9uZyBsbyA9IGEgJmx0OyBiID8gYSA6IGI7CiYjNDM7CWxvbmcgaGkgPSBhICZsdDsgYiA/IGIgOiBhOwomIzQzOwomIzQzOwlyZXR1cm4gdiAmZ3Q7PSAodW5zaWduZWQgbG9uZyBsb25nKWxvICZhbXA7JmFtcDsgdiAmbHQ7PSAodW5zaWduZWQgbG9uZyBsb25nKWhpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGNoZWNrX3RyZWUoc2l6ZV90IGNoYXJnZWQpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGxvbmcgcm9vdF9hbm9uID0gMCwgbGVhZl9hbm9uID0gMDsKJiM0MzsJaW50IGksIGJhZCA9IDA7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBuX25vZGVzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJY29uc3Qgc3RydWN0IGNnX25vZGUgKm4gPSAmYW1wO25vZGVzW2ldOwomIzQzOwkJY29uc3Qgc3RydWN0IG1lbWNnX3N0YXRfc25hcHNob3QgKmIgPSAmYW1wO24tJmd0O2JwZjsKJiM0MzsJCWNvbnN0IHN0cnVjdCBmaWxlX3NuYXAgKmYwID0gJmFtcDtuLSZndDtmaWxlWzBdLCAqZjEgPSAmYW1wO24tJmd0O2ZpbGVbMV07CiYjNDM7CiYjNDM7CQlpZiAoIWJyYWNrZXRlZChiLSZndDthbm9uLCBmMC0mZ3Q7YW5vbiwgZjEtJmd0O2Fub24pIHx8CiYjNDM7CQkgICAgIWJyYWNrZXRlZChiLSZndDtmaWxlLCBmMC0mZ3Q7ZmlsZSwgZjEtJmd0O2ZpbGUpIHx8CiYjNDM7CQkgICAgIWJyYWNrZXRlZChiLSZndDtzaG1lbSwgZjAtJmd0O3NobWVtLCBmMS0mZ3Q7c2htZW0pIHx8CiYjNDM7CQkgICAgIWJyYWNrZXRlZChiLSZndDtmaWxlX21hcHBlZCwgZjAtJmd0O2ZpbGVfbWFwcGVkLAomIzQzOwkJCSAgICAgICBmMS0mZ3Q7ZmlsZV9tYXBwZWQpIHx8CiYjNDM7CQkgICAgIWJyYWNrZXRlZChiLSZndDtwZ2ZhdWx0LCBmMC0mZ3Q7cGdmYXVsdCwgZjEtJmd0O3BnZmF1bHQpKSB7CiYjNDM7CQkJa3NmdF9wcmludF9tc2coJiMzNDtrZnVuY3MgZGlzYWdyZWUgd2l0aCBtZW1vcnkuc3RhdFxuJiMzNDspOwomIzQzOwkJCWR1bXBfbm9kZShuKTsKJiM0MzsJCQliYWQmIzQzOyYjNDM7OwomIzQzOwkJfQomIzQzOwomIzQzOwkJLyogTGl2ZSBwYWdlIGNvdW50ZXJzIGFyZSBib3VuZHMsIG5vdCBmbHVzaGVkIHN0YXRpc3RpY3MuICovCiYjNDM7CQlpZiAoYi0mZ3Q7YW5vbiAmZ3Q7IGItJmd0O3VzYWdlX3BhZ2VzICogKHVuc2lnbmVkIGxvbmcgbG9uZylwYWdlX3NpemUgfHwKJiM0MzsJCSAgICBmMS0mZ3Q7YW5vbiAmZ3Q7IGYxLSZndDtjdXJyZW50KSB7CiYjNDM7CQkJa3NmdF9wcmludF9tc2coJiMzNDslczogYW5vbiBhYm92ZSB1c2FnZTogYnBmICVsbHUvJWxsdSBmaWxlICVsZC8lbGRcbiYjMzQ7LAomIzQzOwkJCQkgICAgICAgbi0mZ3Q7cGF0aCwgYi0mZ3Q7YW5vbiwKJiM0MzsJCQkJICAgICAgIGItJmd0O3VzYWdlX3BhZ2VzICogKHVuc2lnbmVkIGxvbmcgbG9uZylwYWdlX3NpemUsCiYjNDM7CQkJCSAgICAgICBmMS0mZ3Q7YW5vbiwgZjEtJmd0O2N1cnJlbnQpOwomIzQzOwkJCWJhZCYjNDM7JiM0Mzs7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAobi0mZ3Q7aXNfbGVhZikgewomIzQzOwkJCWlmIChiLSZndDthbm9uICZsdDsgY2hhcmdlZCkgewomIzQzOwkJCQlrc2Z0X3ByaW50X21zZygmIzM0OyVzOiBmbHVzaGVkIGFub24gJWxsdSwgY2hhcmdlZCAlenVcbiYjMzQ7LAomIzQzOwkJCQkJICAgICAgIG4tJmd0O3BhdGgsIGItJmd0O2Fub24sIGNoYXJnZWQpOwomIzQzOwkJCQliYWQmIzQzOyYjNDM7OwomIzQzOwkJCX0KJiM0MzsJCQlsZWFmX2Fub24gJiM0Mzs9IGItJmd0O2Fub247CiYjNDM7CQl9CiYjNDM7CQlpZiAoaSA9PSAwKQomIzQzOwkJCXJvb3RfYW5vbiA9IGItJmd0O2Fub247CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHJvb3RfYW5vbiAhPSBsZWFmX2Fub24pIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7c3VidHJlZSByb290IGFub24gJWxsdSwgc3VtIG9mIHRoZSBsZWF2ZXMgJWxsdVxuJiMzNDssCiYjNDM7CQkJICAgICAgIHJvb3RfYW5vbiwgbGVhZl9hbm9uKTsKJiM0MzsJCWJhZCYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIGJhZCA/IC0xIDogMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogQWNjZXB0IFBBR0VfQ09VTlRFUl9NQVggdmFsdWVzIGZyb20gZWl0aGVyIDMyLSBvciA2NC1iaXQga2VybmVscy4gKi8KJiM0MztzdGF0aWMgaW50IGNoZWNrX3VubGltaXRlZCh2b2lkKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBsb25nIG1heDY0ID0gKHVuc2lnbmVkIGxvbmcgbG9uZylJTlQ2NF9NQVggLyBwYWdlX3NpemU7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbG9uZyBtYXgzMiA9IElOVDMyX01BWDsKJiM0MzsKJiM0MzsJaWYgKGNnX3JlYWRfc3RyY21wKG5vZGVzWzBdLnBhdGgsICYjMzQ7bWVtb3J5Lm1heCYjMzQ7LCAmIzM0O21heFxuJiMzNDspKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChub2Rlc1swXS5icGYubWF4X3BhZ2VzICE9IG1heDY0ICZhbXA7JmFtcDsgbm9kZXNbMF0uYnBmLm1heF9wYWdlcyAhPSBtYXgzMikgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDttZW1vcnkubWF4IHJlYWRzIG1heCwga2Z1bmMgcmVwb3J0cyAlbGx1IHBhZ2VzXG4mIzM0OywKJiM0MzsJCQkgICAgICAgbm9kZXNbMF0uYnBmLm1heF9wYWdlcyk7CiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qIC0tLS0gb25lIGNhc2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KJiM0MzsKJiM0MztzdHJ1Y3QgdGVzdGNhc2UgewomIzQzOwljb25zdCBjaGFyICpuYW1lOwomIzQzOwlpbnQgZmFub3V0OwomIzQzOwlpbnQgZGVwdGg7CiYjNDM7CWludCBjcHVzX3Blcl9sZWFmOwkvKiBLLCBvciAwIGZvciB0aGUgYm91bmRlZCBjcm9zcy1DUFUgY291bnQgKi8KJiM0MzsJc2l6ZV90IHJlc2lkZW50X2J5dGVzOwkvKiBhbm9uIHBlciBsZWFmLCByYWlzZWQgaWYgdG9vIHNtYWxsICovCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ1bl9jYXNlKGNvbnN0IHN0cnVjdCB0ZXN0Y2FzZSAqdGMpCiYjNDM7ewomIzQzOwlpbnQgcm9vdF9mZCA9IC0xLCByZXQgPSBLU0ZUX0ZBSUwsIGVyciwgazsKJiM0MzsJc2l6ZV90IGNoYXJnZWQ7CiYjNDM7CiYjNDM7CWlmIChidWlsZF90cmVlKHRjLSZndDtmYW5vdXQsIHRjLSZndDtkZXB0aCwgJmFtcDtyb290X2ZkKSkgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtjYW5ub3QgYnVpbGQgdGhlIHRyZWVcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWsgPSB0Yy0mZ3Q7Y3B1c19wZXJfbGVhZjsKJiM0MzsJaWYgKGsgJmx0Oz0gMCkKJiM0MzsJCWsgPSBuX2NwdSAmbHQ7IE1BWF9DUFVTX1BFUl9MRUFGID8gbl9jcHUgOiBNQVhfQ1BVU19QRVJfTEVBRjsKJiM0MzsJZWxzZSBpZiAoayAmZ3Q7IG5fY3B1KQomIzQzOwkJayA9IG5fY3B1OwomIzQzOwllcnIgPSBsZWFmX2NoYXJnZSh0Yy0mZ3Q7cmVzaWRlbnRfYnl0ZXMsIGssICZhbXA7Y2hhcmdlZCk7CiYjNDM7CWlmIChlcnIgPT0gLUUyQklHKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0OyVzIG5lZWRzIG1vcmUgdGhhbiAlbHVNQiB0byB0cmlnZ2VyIGEgZmx1c2ggb24gJWxkIG9ubGluZSBDUFVzXG4mIzM0OywKJiM0MzsJCQkgICAgICAgdGMtJmd0O25hbWUsIE1BWF9UT1RBTF9DSEFSR0UgJmd0OyZndDsgMjAsIG5fb25saW5lX2NwdSk7CiYjNDM7CQlyZXQgPSBLU0ZUX1NLSVA7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O2Nhbm5vdCBjYWxjdWxhdGUgdGhlIGNoYXJnZSBmb3IgJXM6ICVzICglZClcbiYjMzQ7LAomIzQzOwkJCSAgICAgICB0Yy0mZ3Q7bmFtZSwgc3RyZXJyb3IoLWVyciksIGVycik7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlrc2Z0X3ByaW50X21zZygmIzM0OyVzOiAlZCBjZ3JvdXBzLCAlZCBsZWF2ZXMsICVkLyVkIGNwdXMsICV6dUtCIHBlciBsZWFmXG4mIzM0OywKJiM0MzsJCSAgICAgICB0Yy0mZ3Q7bmFtZSwgbl9ub2Rlcywgbl9sZWF2ZXMsIGssIG5fY3B1LCBjaGFyZ2VkICZndDsmZ3Q7IDEwKTsKJiM0MzsKJiM0MzsJaWYgKHN0YXJ0X2NoYXJnZXJzKGssIGNoYXJnZWQpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CS8qIFJlYWQgQlBGIGZpcnN0OyBtZW1vcnkuc3RhdCB3b3VsZCBjb25zdW1lIHRoZSBwZW5kaW5nIGZsdXNoLiAqLwomIzQzOwlpZiAocmVhZF9icGYocm9vdF9mZCkgfHwgcmVhZF9maWxlcygwKSB8fCByZWFkX2ZpbGVzKDEpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWlmICghY2hlY2tfdHJlZShjaGFyZ2VkKSAmYW1wOyZhbXA7ICFjaGVja191bmxpbWl0ZWQoKSkKJiM0MzsJCXJldCA9IEtTRlRfUEFTUzsKJiM0MztvdXQ6CiYjNDM7CWlmIChyb290X2ZkICZndDs9IDApCiYjNDM7CQljbG9zZShyb290X2ZkKTsKJiM0MzsJZGVzdHJveV90cmVlKCk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGVzdGNhc2UgY2FzZXNbXSA9IHsKJiM0MzsJLyogbmFtZSwgZmFub3V0LCBkZXB0aCwgSywgYW5vbiBwZXIgbGVhZiAqLwomIzQzOwl7ICYjMzQ7c2luZ2xlX2NwdV9zbWFsbF90cmVlJiMzNDssIDQsIDIsIDEsIDIgJmx0OyZsdDsgMjAgfSwKJiM0MzsJeyAmIzM0O2Nyb3NzX2NwdV9zbWFsbF90cmVlJiMzNDssIDQsIDIsIDAsIDIgJmx0OyZsdDsgMjAgfSwKJiM0MzsJeyAmIzM0O3NpbmdsZV9jcHVfbGFyZ2VfdHJlZSYjMzQ7LCA0LCAzLCAxLCAyNTYgJmx0OyZsdDsgMTAgfSwKJiM0MzsJeyAmIzM0O2Nyb3NzX2NwdV9sYXJnZV90cmVlJiMzNDssIDQsIDMsIDAsIDI1NiAmbHQ7Jmx0OyAxMCB9LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgbWVtY2dfa2Z1bmNzX2F2YWlsYWJsZSh2b2lkKQomIzQzO3sKJiM0MzsJc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGtmdW5jc1tdID0gewomIzQzOwkJJiMzNDticGZfZ2V0X21lbV9jZ3JvdXAmIzM0OywKJiM0MzsJCSYjMzQ7YnBmX3B1dF9tZW1fY2dyb3VwJiMzNDssCiYjNDM7CQkmIzM0O2JwZl9tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzJiMzNDssCiYjNDM7CQkmIzM0O2JwZl9tZW1fY2dyb3VwX3BhZ2Vfc3RhdGUmIzM0OywKJiM0MzsJCSYjMzQ7YnBmX21lbV9jZ3JvdXBfdm1fZXZlbnRzJiMzNDssCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBidGYgKmJ0ZjsKJiM0MzsJaW50IGVyciwgaTsKJiM0MzsKJiM0MzsJYnRmID0gYnRmX19sb2FkX3ZtbGludXhfYnRmKCk7CiYjNDM7CWVyciA9IGxpYmJwZl9nZXRfZXJyb3IoYnRmKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtjYW5ub3QgbG9hZCB2bWxpbnV4IEJURjogJXMgKCVkKVxuJiMzNDssCiYjNDM7CQkJICAgICAgIHN0cmVycm9yKC1lcnIpLCBlcnIpOwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKGtmdW5jcyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAoYnRmX19maW5kX2J5X25hbWVfa2luZChidGYsIGtmdW5jc1tpXSwgQlRGX0tJTkRfRlVOQykgJmd0OyAwKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtyZXF1aXJlZCBrZnVuYyAlcyBpcyBub3QgaW4gdm1saW51eCBCVEZcbiYjMzQ7LAomIzQzOwkJCSAgICAgICBrZnVuY3NbaV0pOwomIzQzOwkJYnRmX19mcmVlKGJ0Zik7CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsJaWYgKGJ0Zl9fZmluZF9ieV9uYW1lX2tpbmQoYnRmLCAmIzM0O2JwZl9pdGVyX2Nncm91cCYjMzQ7LCBCVEZfS0lORF9GVU5DKSAmbHQ7PSAwKSB7CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O2Nncm91cCBCUEYgaXRlcmF0b3IgaXMgbm90IGluIHZtbGludXggQlRGXG4mIzM0Oyk7CiYjNDM7CQlidGZfX2ZyZWUoYnRmKTsKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzOwlidGZfX2ZyZWUoYnRmKTsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHVuc3VwcG9ydGVkX2JwZl9mZWF0dXJlX2Vycm9yKGludCBlcnIpCiYjNDM7ewomIzQzOwlyZXR1cm4gZXJyID09IC1FSU5WQUwgfHwgZXJyID09IC1FTk9FTlQgfHwgZXJyID09IC1FT1BOT1RTVVBQOwomIzQzO30KJiM0MzsKJiM0MzsvKiBSZXR1cm4gMSBpZiBzdXBwb3J0ZWQsIDAgaWYgdW5hdmFpbGFibGUsIG9yIGEgbmVnYXRpdmUgZXJyb3IuICovCiYjNDM7c3RhdGljIGludCBwcm9iZV9tZW1jZ19icGZfZmVhdHVyZXMoaW50IHJvb3RfZmQpCiYjNDM7ewomIzQzOwlERUNMQVJFX0xJQkJQRl9PUFRTKGJwZl9pdGVyX2F0dGFjaF9vcHRzLCBvcHRzKTsKJiM0MzsJc3RydWN0IG1lbWNnX3N0YXRfY3Jvc3NfY3B1ICpza2VsOwomIzQzOwl1bmlvbiBicGZfaXRlcl9saW5rX2luZm8gbGluZm8gPSB7fTsKJiM0MzsJc3RydWN0IGJwZl9saW5rICpsaW5rID0gTlVMTDsKJiM0MzsJaW50IHJldCwgZXJyLCBpdGVyX2ZkID0gLTE7CiYjNDM7CiYjNDM7CXNrZWwgPSBtZW1jZ19zdGF0X2Nyb3NzX2NwdV9fb3BlbigpOwomIzQzOwlpZiAoIXNrZWwpIHsKJiM0MzsJCWVyciA9IGVycm5vID8gLWVycm5vIDogLUVJTlZBTDsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7Y2FwYWJpbGl0eSBwcm9iZSBvcGVuIGZhaWxlZDogJXMgKCVkKVxuJiMzNDssCiYjNDM7CQkJICAgICAgIHN0cmVycm9yKC1lcnIpLCBlcnIpOwomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSBicGZfcHJvZ3JhbV9fc2V0X2F1dG9sb2FkKHNrZWwtJmd0O3Byb2dzLmNncm91cF9tZW1jZ19zdGF0X2Nyb3NzX2NwdSwKJiM0MzsJCQkJCWZhbHNlKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtkaXNhYmxpbmcgdGVzdCBwcm9ncmFtIGZhaWxlZDogJXMgKCVkKVxuJiMzNDssCiYjNDM7CQkJICAgICAgIHN0cmVycm9yKC1lcnIpLCBlcnIpOwomIzQzOwkJcmV0ID0gZXJyOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXJyID0gbWVtY2dfc3RhdF9jcm9zc19jcHVfX2xvYWQoc2tlbCk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWtzZnRfcHJpbnRfbXNnKCYjMzQ7QlBGIGNhcGFiaWxpdHkgcHJvYmUgbG9hZCBmYWlsZWQ6ICVzICglZClcbiYjMzQ7LAomIzQzOwkJCSAgICAgICBzdHJlcnJvcigtZXJyKSwgZXJyKTsKJiM0MzsJCXJldCA9IHVuc3VwcG9ydGVkX2JwZl9mZWF0dXJlX2Vycm9yKGVycikgPyAwIDogZXJyOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbGluZm8uY2dyb3VwLmNncm91cF9mZCA9IHJvb3RfZmQ7CiYjNDM7CWxpbmZvLmNncm91cC5vcmRlciA9IEJQRl9DR1JPVVBfSVRFUl9TRUxGX09OTFk7CiYjNDM7CW9wdHMubGlua19pbmZvID0gJmFtcDtsaW5mbzsKJiM0MzsJb3B0cy5saW5rX2luZm9fbGVuID0gc2l6ZW9mKGxpbmZvKTsKJiM0MzsJbGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfaXRlcihza2VsLSZndDtwcm9ncy5tZW1jZ19rZnVuY3NfcHJvYmUsICZhbXA7b3B0cyk7CiYjNDM7CWVyciA9IGxpYmJwZl9nZXRfZXJyb3IobGluayk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWxpbmsgPSBOVUxMOwomIzQzOwkJa3NmdF9wcmludF9tc2coJiMzNDtCUEYgY2FwYWJpbGl0eSBwcm9iZSBhdHRhY2ggZmFpbGVkOiAlcyAoJWQpXG4mIzM0OywKJiM0MzsJCQkgICAgICAgc3RyZXJyb3IoLWVyciksIGVycik7CiYjNDM7CQlyZXQgPSB1bnN1cHBvcnRlZF9icGZfZmVhdHVyZV9lcnJvcihlcnIpID8gMCA6IGVycjsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWl0ZXJfZmQgPSBicGZfaXRlcl9jcmVhdGUoYnBmX2xpbmtfX2ZkKGxpbmspKTsKJiM0MzsJaWYgKGl0ZXJfZmQgJmx0OyAwKSB7CiYjNDM7CQllcnIgPSAtZXJybm87CiYjNDM7CQlrc2Z0X3ByaW50X21zZygmIzM0O0JQRiBjYXBhYmlsaXR5IHByb2JlIGl0ZXJhdG9yIGNyZWF0aW9uIGZhaWxlZDogJXMgKCVkKVxuJiMzNDssCiYjNDM7CQkJICAgICAgIHN0cmVycm9yKC1lcnIpLCBlcnIpOwomIzQzOwkJcmV0ID0gdW5zdXBwb3J0ZWRfYnBmX2ZlYXR1cmVfZXJyb3IoZXJyKSA/IDAgOiBlcnI7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSAxOwomIzQzO291dDoKJiM0MzsJaWYgKGl0ZXJfZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGl0ZXJfZmQpOwomIzQzOwlicGZfbGlua19fZGVzdHJveShsaW5rKTsKJiM0MzsJbWVtY2dfc3RhdF9jcm9zc19jcHVfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKJiM0Mzt7CiYjNDM7CWludCBmZWF0dXJlX2ZkLCBpLCByZXQ7CiYjNDM7CiYjNDM7CWtzZnRfcHJpbnRfaGVhZGVyKCk7CiYjNDM7CiYjNDM7CS8qIFByb2JlIEJURiBiZWZvcmUgb3BlcmF0aW9ucyB0aGF0IG1heSByZXF1aXJlIHByaXZpbGVnZXMuICovCiYjNDM7CWlmICghbWVtY2dfa2Z1bmNzX2F2YWlsYWJsZSgpKQomIzQzOwkJa3NmdF9leGl0X3NraXAoJiMzNDttZW1jZyBCUEYga2Z1bmNzIGFyZSBub3QgYXZhaWxhYmxlXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWlmIChjZ19maW5kX3VuaWZpZWRfcm9vdChyb290LCBzaXplb2Yocm9vdCksIE5VTEwpKQomIzQzOwkJa3NmdF9leGl0X3NraXAoJiMzNDtjZ3JvdXAgdjIgaXNuJiMzOTt0IG1vdW50ZWRcbiYjMzQ7KTsKJiM0MzsJZmVhdHVyZV9mZCA9IG9wZW4ocm9vdCwgT19SRE9OTFkgfCBPX0RJUkVDVE9SWSk7CiYjNDM7CWlmIChmZWF0dXJlX2ZkICZsdDsgMCkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O2Nhbm5vdCBvcGVuIGNncm91cCByb290OiAlcyAoJWQpXG4mIzM0OywKJiM0MzsJCQkJICAgc3RyZXJyb3IoZXJybm8pLCBlcnJubyk7CiYjNDM7CXJldCA9IHByb2JlX21lbWNnX2JwZl9mZWF0dXJlcyhmZWF0dXJlX2ZkKTsKJiM0MzsJY2xvc2UoZmVhdHVyZV9mZCk7CiYjNDM7CWlmICghcmV0KQomIzQzOwkJa3NmdF9leGl0X3NraXAoJiMzNDtzbGVlcGFibGUgY2dyb3VwIGl0ZXJhdG9yIG9yIG1lbWNnIGtmdW5jcyBhcmUgbm90IGF2YWlsYWJsZVxuJiMzNDspOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWtzZnRfZXhpdF9mYWlsX21zZygmIzM0O2Nhbm5vdCBwcm9iZSBCUEYgY2FwYWJpbGl0aWVzOiAlcyAoJWQpXG4mIzM0OywKJiM0MzsJCQkJICAgc3RyZXJyb3IoLXJldCksIHJldCk7CiYjNDM7CiYjNDM7CWlmIChjZ19yZWFkX3N0cnN0cihyb290LCAmIzM0O2Nncm91cC5jb250cm9sbGVycyYjMzQ7LCAmIzM0O21lbW9yeSYjMzQ7KSkKJiM0MzsJCWtzZnRfZXhpdF9za2lwKCYjMzQ7bWVtb3J5IGNvbnRyb2xsZXIgaXNuJiMzOTt0IGF2YWlsYWJsZVxuJiMzNDspOwomIzQzOwomIzQzOwlpZiAoY2dfcmVhZF9zdHJzdHIocm9vdCwgJiMzNDtjZ3JvdXAuc3VidHJlZV9jb250cm9sJiMzNDssICYjMzQ7bWVtb3J5JiMzNDspKQomIzQzOwkJaWYgKGNnX3dyaXRlKHJvb3QsICYjMzQ7Y2dyb3VwLnN1YnRyZWVfY29udHJvbCYjMzQ7LCAmIzM0OyYjNDM7bWVtb3J5JiMzNDspKQomIzQzOwkJCWtzZnRfZXhpdF9za2lwKCYjMzQ7RmFpbGVkIHRvIHNldCBtZW1vcnkgY29udHJvbGxlclxuJiMzNDspOwomIzQzOwomIzQzOwlDUFVfWkVSTygmYW1wO2FsbG93ZWRfY3B1cyk7CiYjNDM7CWlmIChzY2hlZF9nZXRhZmZpbml0eSgwLCBzaXplb2YoYWxsb3dlZF9jcHVzKSwgJmFtcDthbGxvd2VkX2NwdXMpKQomIzQzOwkJa3NmdF9leGl0X3NraXAoJiMzNDtjYW5ub3QgcmVhZCBDUFUgYWZmaW5pdHlcbiYjMzQ7KTsKJiM0MzsJbl9jcHUgPSBDUFVfQ09VTlQoJmFtcDthbGxvd2VkX2NwdXMpOwomIzQzOwlpZiAobl9jcHUgJmx0Oz0gMCkKJiM0MzsJCWtzZnRfZXhpdF9za2lwKCYjMzQ7bm8gQ1BVIHRvIHJ1biBvblxuJiMzNDspOwomIzQzOwluX29ubGluZV9jcHUgPSBzeXNjb25mKF9TQ19OUFJPQ0VTU09SU19PTkxOKTsKJiM0MzsJaWYgKG5fb25saW5lX2NwdSAmbHQ7PSAwKQomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKCYjMzQ7Y2Fubm90IGRldGVybWluZSB0aGUgbnVtYmVyIG9mIG9ubGluZSBDUFVzXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CXBhZ2Vfc2l6ZSA9IHN5c2NvbmYoX1NDX1BBR0VTSVpFKTsKJiM0MzsJaWYgKHBhZ2Vfc2l6ZSAmbHQ7PSAwKQomIzQzOwkJcGFnZV9zaXplID0gQlVGX1NJWkU7CiYjNDM7CiYjNDM7CXN1YnRyZWVfcm9vdCA9IGNnX25hbWUocm9vdCwgU1VCVFJFRV9OQU1FKTsKJiM0MzsJaWYgKCFzdWJ0cmVlX3Jvb3QpCiYjNDM7CQlrc2Z0X2V4aXRfc2tpcCgmIzM0O2Nhbm5vdCBidWlsZCBzdWJ0cmVlIHJvb3QgcGF0aFxuJiMzNDspOwomIzQzOwomIzQzOwkvKiBTZXQgdGhlIHBsYW4gYWZ0ZXIgYWxsIGdsb2JhbCBza2lwIGNoZWNrcy4gKi8KJiM0MzsJa3NmdF9zZXRfcGxhbihBUlJBWV9TSVpFKGNhc2VzKSk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKGNhc2VzKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN3aXRjaCAocnVuX2Nhc2UoJmFtcDtjYXNlc1tpXSkpIHsKJiM0MzsJCWNhc2UgS1NGVF9QQVNTOgomIzQzOwkJCWtzZnRfdGVzdF9yZXN1bHRfcGFzcygmIzM0OyVzXG4mIzM0OywgY2FzZXNbaV0ubmFtZSk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlIEtTRlRfU0tJUDoKJiM0MzsJCQlrc2Z0X3Rlc3RfcmVzdWx0X3NraXAoJiMzNDslc1xuJiMzNDssIGNhc2VzW2ldLm5hbWUpOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJZGVmYXVsdDoKJiM0MzsJCQlrc2Z0X3Rlc3RfcmVzdWx0X2ZhaWwoJiMzNDslc1xuJiMzNDssIGNhc2VzW2ldLm5hbWUpOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWZyZWUoc3VidHJlZV9yb290KTsKJiM0MzsJa3NmdF9maW5pc2hlZCgpOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X21lbWNvbnRyb2wuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X21lbWNvbnRyb2wuYwppbmRleCAwZWJmNzk2ZjNjZmZlLi4xNWJhNDY4Nzk1MDQyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfbWVtY29udHJvbC5jCkBAIC0yNiw3ICYjNDM7MjYsNiBAQAogCiBzdGF0aWMgYm9vbCBoYXNfbG9jYWxldmVudHM7CiBzdGF0aWMgYm9vbCBoYXNfcmVjdXJzaXZlcHJvdDsKLXN0YXRpYyBpbnQgcGFnZV9zaXplOwogCiBpbnQgZ2V0X3RlbXBfZmQodm9pZCkKIHsKQEAgLTU2LDI4ICYjNDM7NTUsMTIgQEAgaW50IGFsbG9jX3BhZ2VjYWNoZShpbnQgZmQsIHNpemVfdCBzaXplKQogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIGNoYXIgKmFsbG9jX2FuZF9wb3B1bGF0ZV9hbm9uKHNpemVfdCBzaXplKQotewotCWNoYXIgKmJ1ZiwgKnB0cjsKLQotCWJ1ZiA9IG1hbGxvYyhzaXplKTsKLQlpZiAoYnVmID09IE5VTEwpIHsKLQkJZnByaW50ZihzdGRlcnIsICYjMzQ7bWFsbG9jKCkgZmFpbGVkXG4mIzM0Oyk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCWZvciAocHRyID0gYnVmOyBwdHIgJmx0OyBidWYgJiM0Mzsgc2l6ZTsgcHRyICYjNDM7PSBwYWdlX3NpemUpCi0JCSpwdHIgPSAwOwotCi0JcmV0dXJuIGJ1ZjsKLX0KLQogaW50IGFsbG9jX2Fub24oY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpCiB7CiAJc2l6ZV90IHNpemUgPSAodW5zaWduZWQgbG9uZylhcmc7CiAJY2hhciAqYnVmOwogCi0JYnVmID0gYWxsb2NfYW5kX3BvcHVsYXRlX2Fub24oc2l6ZSk7CiYjNDM7CWJ1ZiA9IGNnX2FsbG9jX2Fub24oc2l6ZSk7CiAJaWYgKCFidWYpCiAJCXJldHVybiAtMTsKIApAQCAtMTk1LDcgJiM0MzsxNzgsNyBAQCBzdGF0aWMgaW50IGFsbG9jX2Fub25fNTBNX2NoZWNrKGNvbnN0IGNoYXIgKmNncm91cCwgdm9pZCAqYXJnKQogCWxvbmcgYW5vbiwgY3VycmVudDsKIAlpbnQgcmV0ID0gLTE7CiAKLQlidWYgPSBhbGxvY19hbmRfcG9wdWxhdGVfYW5vbihzaXplKTsKJiM0MzsJYnVmID0gY2dfYWxsb2NfYW5vbihzaXplKTsKIAlpZiAoIWJ1ZikKIAkJcmV0dXJuIC0xOwogCkBAIC00MjAsNyAmIzQzOzQwMyw3IEBAIHN0YXRpYyBpbnQgYWxsb2NfYW5vbl9ub2V4aXQoY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpCiAJc2l6ZV90IHNpemUgPSAodW5zaWduZWQgbG9uZylhcmc7CiAJY2hhciAqYnVmOwogCi0JYnVmID0gYWxsb2NfYW5kX3BvcHVsYXRlX2Fub24oc2l6ZSk7CiYjNDM7CWJ1ZiA9IGNnX2FsbG9jX2Fub24oc2l6ZSk7CiAJaWYgKCFidWYpCiAJCXJldHVybiAtMTsKIApAQCAtMTAwMSw3ICYjNDM7OTg0LDcgQEAgc3RhdGljIGludCBhbGxvY19hbm9uXzUwTV9jaGVja19zd2FwKGNvbnN0IGNoYXIgKmNncm91cCwgdm9pZCAqYXJnKQogCWxvbmcgbWVtX2N1cnJlbnQsIHN3YXBfY3VycmVudDsKIAlpbnQgcmV0ID0gLTE7CiAKLQlidWYgPSBhbGxvY19hbmRfcG9wdWxhdGVfYW5vbihzaXplKTsKJiM0MzsJYnVmID0gY2dfYWxsb2NfYW5vbihzaXplKTsKIAlpZiAoIWJ1ZikKIAkJcmV0dXJuIC0xOwogCkBAIC0xNzkzLDEwICYjNDM7MTc3Niw2IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAljaGFyIHJvb3RbUEFUSF9NQVhdOwogCWludCBpLCBwcm9jX3N0YXR1czsKIAotCXBhZ2Vfc2l6ZSA9IHN5c2NvbmYoX1NDX1BBR0VfU0laRSk7Ci0JaWYgKHBhZ2Vfc2l6ZSAmbHQ7PSAwKQotCQlwYWdlX3NpemUgPSBCVUZfU0laRTsKLQogCWtzZnRfcHJpbnRfaGVhZGVyKCk7CiAJa3NmdF9zZXRfcGxhbihBUlJBWV9TSVpFKHRlc3RzKSk7CiAJaWYgKGNnX2ZpbmRfdW5pZmllZF9yb290KHJvb3QsIHNpemVvZihyb290KSwgTlVMTCkpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC8uZ2l0aWdub3JlCmluZGV4IDkzM2Y0ODM4MTViMmMuLjY5OTQzMzAxZGMxZDcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC8uZ2l0aWdub3JlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC8uZ2l0aWdub3JlCkBAIC0xLDUgJiM0MzsxLDYgQEAKIGJwZnRvb2wKICouc2tlbC5oCiYjNDM7Ki5icGYuZAogL2hvc3QtdG9vbHMKIC90b29scwogaGlkX2JwZgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvaGlkL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvaGlkL01ha2VmaWxlCmluZGV4IDJmNDIzZGU4MzE0NzMuLjExOTBhNzQ3MDM2ZGEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvTWFrZWZpbGUKQEAgLTQ3LDcgJiM0Mzs0Nyw2IEBAIG1zZyA9CiBlbHNlCiBtc2cgPSBAcHJpbnRmICYjMzk7ICAlLThzJXMgJXMlc1xuJiMzOTsgJiMzNDskKDEpJiMzNDsgJiMzNDskKGlmICQoMiksIFskKDIpXSkmIzM0OyAmIzM0OyQobm90ZGlyICQoMykpJiMzNDsgJiMzNDskKGlmICQoNCksICQoNCkpJiMzNDs7CiBNQUtFRkxBR1MgJiM0Mzs9IC0tbm8tcHJpbnQtZGlyZWN0b3J5Ci1zdWJtYWtlX2V4dHJhcyA6PSBmZWF0dXJlX2Rpc3BsYXk9MAogZW5kaWYKIAogIyBvdmVycmlkZSBsaWIubWsmIzM5O3MgZGVmYXVsdCBydWxlcwpAQCAtNTgsMTcyICYjNDM7NTcsMjUgQEAgb3ZlcnJpZGUgZGVmaW5lIENMRUFOCiAJJChRKSQoUk0pIC1yICQoRVhUUkFfQ0xFQU4pCiBlbmRlZgogCi1pbmNsdWRlIC4uL2xpYi5tawotCi1UT09MU0RJUiA6PSAkKHRvcF9zcmNkaXIpL3Rvb2xzCi1MSUJESVIgOj0gJChUT09MU0RJUikvbGliCi1CUEZESVIgOj0gJChMSUJESVIpL2JwZgotVE9PTFNJTkNESVIgOj0gJChUT09MU0RJUikvaW5jbHVkZQotQlBGVE9PTERJUiA6PSAkKFRPT0xTRElSKS9icGYvYnBmdG9vbAotU0NSQVRDSF9ESVIgOj0gJChPVVRQVVQpL3Rvb2xzCi1CVUlMRF9ESVIgOj0gJChTQ1JBVENIX0RJUikvYnVpbGQKLUlOQ0xVREVfRElSIDo9ICQoU0NSQVRDSF9ESVIpL2luY2x1ZGUKLUJQRk9CSiA6PSAkKEJVSUxEX0RJUikvbGliYnBmL2xpYmJwZi5hCi1pZm5lcSAoJChDUk9TU19DT01QSUxFKSwpCi1IT1NUX0JVSUxEX0RJUgkJOj0gJChCVUlMRF9ESVIpL2hvc3QKLUhPU1RfU0NSQVRDSF9ESVIJOj0gJChPVVRQVVQpL2hvc3QtdG9vbHMKLUhPU1RfSU5DTFVERV9ESVIJOj0gJChIT1NUX1NDUkFUQ0hfRElSKS9pbmNsdWRlCi1lbHNlCi1IT1NUX0JVSUxEX0RJUgkJOj0gJChCVUlMRF9ESVIpCi1IT1NUX1NDUkFUQ0hfRElSCTo9ICQoU0NSQVRDSF9ESVIpCi1IT1NUX0lOQ0xVREVfRElSCTo9ICQoSU5DTFVERV9ESVIpCi1lbmRpZgotSE9TVF9CUEZPQkogOj0gJChIT1NUX0JVSUxEX0RJUikvbGliYnBmL2xpYmJwZi5hCi1SRVNPTFZFX0JURklEUyA6PSAkKEhPU1RfQlVJTERfRElSKS9yZXNvbHZlX2J0Zmlkcy9yZXNvbHZlX2J0ZmlkcwotCi1WTUxJTlVYX0JURl9QQVRIUyA/PSAkKGlmICQoTyksJChPKS92bWxpbnV4KQkJCQlcCi0JCSAgICAgJChpZiAkKEtCVUlMRF9PVVRQVVQpLCQoS0JVSUxEX09VVFBVVCkvdm1saW51eCkJXAotCQkgICAgIC4uLy4uLy4uLy4uL3ZtbGludXgJCQkJXAotCQkgICAgIC9zeXMva2VybmVsL2J0Zi92bWxpbnV4CQkJCVwKLQkJICAgICAvYm9vdC92bWxpbnV4LSQoc2hlbGwgdW5hbWUgLXIpCi1WTUxJTlVYX0JURiA/PSAkKGFic3BhdGggJChmaXJzdHdvcmQgJCh3aWxkY2FyZCAkKFZNTElOVVhfQlRGX1BBVEhTKSkpKQotaWZlcSAoJChWTUxJTlVYX0JURiksKQotJChlcnJvciBDYW5ub3QgZmluZCBhIHZtbGludXggZm9yIFZNTElOVVhfQlRGIGF0IGFueSBvZiAmIzM0OyQoVk1MSU5VWF9CVEZfUEFUSFMpJiMzNDspCi1lbmRpZgotCi0jIERlZmluZSBzaW1wbGUgYW5kIHNob3J0IGBtYWtlIHRlc3RfcHJvZ3NgLCBgbWFrZSB0ZXN0X3N5c2N0bGAsIGV0YyB0YXJnZXRzCi0jIHRvIGJ1aWxkIGluZGl2aWR1YWwgdGVzdHMuCi0jIE5PVEU6IFNlbWljb2xvbiBhdCB0aGUgZW5kIGlzIGNyaXRpY2FsIHRvIG92ZXJyaWRlIGxpYi5tayYjMzk7cyBkZWZhdWx0IHN0YXRpYwotIyBydWxlIGZvciBiaW5hcmllcy4KLSQobm90ZGlyICQoVEVTVF9HRU5fUFJPR1MpKTogJTogJChPVVRQVVQpLyUgOwotCi0jIHNvcnQgcmVtb3ZlcyBsaWJicGYgZHVwbGljYXRlcyB3aGVuIG5vdCBjcm9zcy1idWlsZGluZwotTUFLRV9ESVJTIDo9ICQoc29ydCAkKEJVSUxEX0RJUikvbGliYnBmICQoSE9TVF9CVUlMRF9ESVIpL2xpYmJwZgkJXAotCSAgICAgICAkKEhPU1RfQlVJTERfRElSKS9icGZ0b29sICQoSE9TVF9CVUlMRF9ESVIpL3Jlc29sdmVfYnRmaWRzCVwKLQkgICAgICAgJChJTkNMVURFX0RJUikpCi0kKE1BS0VfRElSUyk6Ci0JJChjYWxsIG1zZyxNS0RJUiwsJEApCi0JJChRKW1rZGlyIC1wICRACiYjNDM7IyBCdWlsZCB0aGUgbGVnYWN5IHByb2dzLyouYyBsYXlvdXQgd2l0aCB0aGUgc2hhcmVkIEJQRiBydWxlcy4KJiM0MztCUEZfU1JDUyAgICAgICA6PSAkKHdpbGRjYXJkIHByb2dzLyouYykKJiM0MztCUEZfUFJPR19FWFQgICA6PSAuYwomIzQzOyMgQlBGRElSIGlzIGRlZmluZWQgd2hlbiB0aGlzIHJlY3Vyc2l2ZSB2YXJpYWJsZSBpcyBleHBhbmRlZC4KJiM0MztCUEZfRVhUUkFfSERSUyAgPSAkKHdpbGRjYXJkIHByb2dzLyouaCkgJCh3aWxkY2FyZCAkKEJQRkRJUikvaGlkX2JwZl8qLmgpIFwKJiM0MzsJCSAgJCh3aWxkY2FyZCAkKEJQRkRJUikvKi5icGYuaCkKIAotREVGQVVMVF9CUEZUT09MIDo9ICQoSE9TVF9TQ1JBVENIX0RJUikvc2Jpbi9icGZ0b29sCiYjNDM7aW5jbHVkZSAuLi9saWIubWsKJiM0MztpbmNsdWRlIC4uL2xpYi5icGYubWsKIAomIzQzOyMgUHJlc2VydmUgdGhlIGV4aXN0aW5nIGluc3RhbGwgbGlzdC4KJiM0MztURVNUX0dFTl9GSUxFUyAmIzQzOz0gJChCUEZfT0JKUykKIFRFU1RfR0VOX1BST0dTX0VYVEVOREVEICYjNDM7PSAkKERFRkFVTFRfQlBGVE9PTCkKIAotJChURVNUX0dFTl9QUk9HUykgJChURVNUX0dFTl9QUk9HU19FWFRFTkRFRCk6ICQoQlBGT0JKKQotCi1CUEZUT09MID89ICQoREVGQVVMVF9CUEZUT09MKQotJChERUZBVUxUX0JQRlRPT0wpOiAkKHdpbGRjYXJkICQoQlBGVE9PTERJUikvKi5bY2hdICQoQlBGVE9PTERJUikvTWFrZWZpbGUpICAgIFwKLQkJICAgICQoSE9TVF9CUEZPQkopIHwgJChIT1NUX0JVSUxEX0RJUikvYnBmdG9vbAotCSQoUSkkKE1BS0UpICQoc3VibWFrZV9leHRyYXMpICAtQyAkKEJQRlRPT0xESVIpCQkJICAgICAgIFwKLQkJICAgIEFSQ0g9IENST1NTX0NPTVBJTEU9IENDPSQoSE9TVENDKSBMRD0kKEhPU1RMRCkgCSAgICAgICBcCi0JCSAgICBFWFRSQV9DRkxBR1M9JiMzOTstZyAtTzAmIzM5OwkJCQkgICAgICAgXAotCQkgICAgT1VUUFVUPSQoSE9TVF9CVUlMRF9ESVIpL2JwZnRvb2wvCQkJICAgICAgIFwKLQkJICAgIExJQkJQRl9PVVRQVVQ9JChIT1NUX0JVSUxEX0RJUikvbGliYnBmLwkJICAgICAgIFwKLQkJICAgIExJQkJQRl9ERVNURElSPSQoSE9TVF9TQ1JBVENIX0RJUikvCQkJICAgICAgIFwKLQkJICAgIHByZWZpeD0gREVTVERJUj0kKEhPU1RfU0NSQVRDSF9ESVIpLyBpbnN0YWxsLWJpbgotCi0kKEJQRk9CSik6ICQod2lsZGNhcmQgJChCUEZESVIpLyouW2NoXSAkKEJQRkRJUikvTWFrZWZpbGUpCQkgICAgICAgXAotCSAgIHwgJChCVUlMRF9ESVIpL2xpYmJwZgotCSQoUSkkKE1BS0UpICQoc3VibWFrZV9leHRyYXMpIC1DICQoQlBGRElSKSBPVVRQVVQ9JChCVUlMRF9ESVIpL2xpYmJwZi8gXAotCQkgICAgRVhUUkFfQ0ZMQUdTPSYjMzk7LWcgLU8wJiMzOTsJCQkJICAgICAgIFwKLQkJICAgIERFU1RESVI9JChTQ1JBVENIX0RJUikgcHJlZml4PSBhbGwgaW5zdGFsbF9oZWFkZXJzCi0KLWlmbmVxICgkKEJQRk9CSiksJChIT1NUX0JQRk9CSikpCi0kKEhPU1RfQlBGT0JKKTogJCh3aWxkY2FyZCAkKEJQRkRJUikvKi5bY2hdICQoQlBGRElSKS9NYWtlZmlsZSkJCSAgICAgICBcCi0JCXwgJChIT1NUX0JVSUxEX0RJUikvbGliYnBmCi0JJChRKSQoTUFLRSkgJChzdWJtYWtlX2V4dHJhcykgLUMgJChCUEZESVIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCSAgICBFWFRSQV9DRkxBR1M9JiMzOTstZyAtTzAmIzM5OyBBUkNIPSBDUk9TU19DT01QSUxFPQkJICAgICAgIFwKLQkJICAgIE9VVFBVVD0kKEhPU1RfQlVJTERfRElSKS9saWJicGYvIENDPSQoSE9TVENDKSBMRD0kKEhPU1RMRCkgXAotCQkgICAgREVTVERJUj0kKEhPU1RfU0NSQVRDSF9ESVIpLyBwcmVmaXg9IGFsbCBpbnN0YWxsX2hlYWRlcnMKLWVuZGlmCi0KLSQoSU5DTFVERV9ESVIpL3ZtbGludXguaDogJChWTUxJTlVYX0JURikgJChCUEZUT09MKSB8ICQoSU5DTFVERV9ESVIpCi1pZmVxICgkKFZNTElOVVhfSCksKQotCSQoY2FsbCBtc2csR0VOLCwkQCkKLQkkKFEpJChCUEZUT09MKSBidGYgZHVtcCBmaWxlICQoVk1MSU5VWF9CVEYpIGZvcm1hdCBjICZndDsgJEAKLWVsc2UKLQkkKGNhbGwgbXNnLENQLCwkQCkKLQkkKFEpY3AgJiMzNDskKFZNTElOVVhfSCkmIzM0OyAkQAotZW5kaWYKLQotJChSRVNPTFZFX0JURklEUyk6ICQoSE9TVF9CUEZPQkopIHwgJChIT1NUX0JVSUxEX0RJUikvcmVzb2x2ZV9idGZpZHMJXAotCQkgICAgICAgJChUT09MU0RJUikvYnBmL3Jlc29sdmVfYnRmaWRzL21haW4uYwlcCi0JCSAgICAgICAkKFRPT0xTRElSKS9saWIvcmJ0cmVlLmMJCQlcCi0JCSAgICAgICAkKFRPT0xTRElSKS9saWIvemFsbG9jLmMJCQlcCi0JCSAgICAgICAkKFRPT0xTRElSKS9saWIvc3RyaW5nLmMJCQlcCi0JCSAgICAgICAkKFRPT0xTRElSKS9saWIvY3R5cGUuYwkJCVwKLQkJICAgICAgICQoVE9PTFNESVIpL2xpYi9zdHJfZXJyb3Jfci5jCi0JJChRKSQoTUFLRSkgJChzdWJtYWtlX2V4dHJhcykgLUMgJChUT09MU0RJUikvYnBmL3Jlc29sdmVfYnRmaWRzCVwKLQkJQ0M9JChIT1NUQ0MpIExEPSQoSE9TVExEKSBBUj0kKEhPU1RBUikgXAotCQlMSUJCUEZfSU5DTFVERT0kKEhPU1RfSU5DTFVERV9ESVIpIFwKLQkJT1VUUFVUPSQoSE9TVF9CVUlMRF9ESVIpL3Jlc29sdmVfYnRmaWRzLyBCUEZPQko9JChIT1NUX0JQRk9CSikKLQotIyBHZXQgQ2xhbmcmIzM5O3MgZGVmYXVsdCBpbmNsdWRlcyBvbiB0aGlzIHN5c3RlbSwgYXMgb3Bwb3NlZCB0byB0aG9zZSBzZWVuIGJ5Ci0jICYjMzk7LS10YXJnZXQ9YnBmJiMzOTsuIFRoaXMgZml4ZXMgJiMzNDttaXNzaW5nJiMzNDsgZmlsZXMgb24gc29tZSBhcmNoaXRlY3R1cmVzL2Rpc3Ryb3MsCi0jIHN1Y2ggYXMgYXNtL2J5dGVvcmRlci5oLCBhc20vc29ja2V0LmgsIGFzbS9zb2NraW9zLmgsIHN5cy9jZGVmcy5oIGV0Yy4KLSMKLSMgVXNlICYjMzk7LWlkaXJhZnRlciYjMzk7OiBEb24mIzM5O3QgaW50ZXJmZXJlIHdpdGggaW5jbHVkZSBtZWNoYW5pY3MgZXhjZXB0IHdoZXJlIHRoZQotIyBidWlsZCB3b3VsZCBoYXZlIGZhaWxlZCBhbnl3YXlzLgotZGVmaW5lIGdldF9zeXNfaW5jbHVkZXMKLSQoc2hlbGwgJCgxKSAtdiAtRSAtICZsdDsvZGV2L251bGwgMiZndDsmYW1wOzEgXAotCXwgc2VkIC1uICYjMzk7LyZsdDsuLi4mZ3Q7IHNlYXJjaCBzdGFydHMgaGVyZTovLC9FbmQgb2Ygc2VhcmNoIGxpc3QuL3sgc3wgXCgvLipcKXwtaWRpcmFmdGVyIFwxfHAgfSYjMzk7KSBcCi0kKHNoZWxsICQoMSkgLWRNIC1FIC0gJmx0Oy9kZXYvbnVsbCB8IGdyZXAgJiMzOTtfX3Jpc2N2X3hsZW4gJiMzOTsgfCBhd2sgJiMzOTt7cHJpbnRmKCYjMzQ7LURfX3Jpc2N2X3hsZW49JWQgLURfX0JJVFNfUEVSX0xPTkc9JWQmIzM0OywgJCQzLCAkJDMpfSYjMzk7KQotZW5kZWYKLQotIyBEZXRlcm1pbmUgdGFyZ2V0IGVuZGlhbm5lc3MuCi1JU19MSVRUTEVfRU5ESUFOID0gJChzaGVsbCAkKENDKSAtZE0gLUUgLSAmbHQ7L2Rldi9udWxsIHwgXAotCQkJZ3JlcCAmIzM5O2RlZmluZSBfX0JZVEVfT1JERVJfXyBfX09SREVSX0xJVFRMRV9FTkRJQU5fXyYjMzk7KQotTUVORElBTj0kKGlmICQoSVNfTElUVExFX0VORElBTiksLW1saXR0bGUtZW5kaWFuLC1tYmlnLWVuZGlhbikKLQotQ0xBTkdfU1lTX0lOQ0xVREVTID0gJChjYWxsIGdldF9zeXNfaW5jbHVkZXMsJChDTEFORykpCi1CUEZfQ0ZMQUdTID0gLWcgLVdlcnJvciAtRF9fVEFSR0VUX0FSQ0hfJChTUkNBUkNIKSAkKE1FTkRJQU4pIAkJXAotCSAgICAgLVduby1taWNyb3NvZnQtYW5vbi10YWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JICAgICAtZm1zLWV4dGVuc2lvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkgICAgIC1JJChJTkNMVURFX0RJUikKLQotQ0xBTkdfQ0ZMQUdTID0gJChDTEFOR19TWVNfSU5DTFVERVMpIFwKLQkgICAgICAgLVduby1jb21wYXJlLWRpc3RpbmN0LXBvaW50ZXItdHlwZXMKLQotIyBCdWlsZCBCUEYgb2JqZWN0IHVzaW5nIENsYW5nCi0jICQxIC0gaW5wdXQgLmMgZmlsZQotIyAkMiAtIG91dHB1dCAubyBmaWxlCi0jICQzIC0gQ0ZMQUdTCi1kZWZpbmUgQ0xBTkdfQlBGX0JVSUxEX1JVTEUKLQkkKGNhbGwgbXNnLENMTkctQlBGLCQoVFJVTk5FUl9CSU5BUlkpLCQyKQotCSQoUSkkKENMQU5HKSAkMyAtTzIgLS10YXJnZXQ9YnBmIC1jICQxIC1tY3B1PXYzIC1vICQyCi1lbmRlZgotIyBTaW1pbGFyIHRvIENMQU5HX0JQRl9CVUlMRF9SVUxFLCBidXQgd2l0aCBkaXNhYmxlZCBhbHUzMgotZGVmaW5lIENMQU5HX05PQUxVMzJfQlBGX0JVSUxEX1JVTEUKLQkkKGNhbGwgbXNnLENMTkctQlBGLCQoVFJVTk5FUl9CSU5BUlkpLCQyKQotCSQoUSkkKENMQU5HKSAkMyAtTzIgLS10YXJnZXQ9YnBmIC1jICQxIC1tY3B1PXYyIC1vICQyCi1lbmRlZgotIyBCdWlsZCBCUEYgb2JqZWN0IHVzaW5nIEdDQwotZGVmaW5lIEdDQ19CUEZfQlVJTERfUlVMRQotCSQoY2FsbCBtc2csR0NDLUJQRiwkKFRSVU5ORVJfQklOQVJZKSwkMikKLQkkKFEpJChCUEZfR0NDKSAkMyAtTzIgLWMgJDEgLW8gJDIKLWVuZGVmCi0KLUJQRl9QUk9HU19ESVIgOj0gcHJvZ3MKLUJQRl9CVUlMRF9SVUxFIDo9IENMQU5HX0JQRl9CVUlMRF9SVUxFCi1CUEZfU1JDUyA6PSAkKG5vdGRpciAkKHdpbGRjYXJkICQoQlBGX1BST0dTX0RJUikvKi5jKSkKLUJQRl9PQkpTIDo9ICQocGF0c3Vic3QgJS5jLCQoT1VUUFVUKS8lLmJwZi5vLCAkKEJQRl9TUkNTKSkKLUJQRl9TS0VMUyA6PSAkKHBhdHN1YnN0ICUuYywkKE9VVFBVVCkvJS5za2VsLmgsICQoQlBGX1NSQ1MpKQotVEVTVF9HRU5fRklMRVMgJiM0Mzs9ICQoQlBGX09CSlMpCiYjNDM7IyBLZWVwIGFsaWFzZXMgc3VjaCBhcyAmIzM0O21ha2UgaGlkX2JwZiYjMzQ7IGZyb20gbWF0Y2hpbmcgbGliLm1rJiMzOTtzIGJpbmFyeSBydWxlLgomIzQzOyQobm90ZGlyICQoVEVTVF9HRU5fUFJPR1MpKTogJTogJChPVVRQVVQpLyUgOwogCi0kKEJQRl9QUk9HU19ESVIpLWJwZm9ianMgOj0geQotJChCUEZfT0JKUyk6ICQoT1VUUFVUKS8lLmJwZi5vOgkJCQlcCi0JICAgICAkKEJQRl9QUk9HU19ESVIpLyUuYwkJCVwKLQkgICAgICQod2lsZGNhcmQgJChCUEZfUFJPR1NfRElSKS8qLmgpCQlcCi0JICAgICAkKElOQ0xVREVfRElSKS92bWxpbnV4LmgJCQkJXAotCSAgICAgJCh3aWxkY2FyZCAkKEJQRkRJUikvaGlkX2JwZl8qLmgpCQkJXAotCSAgICAgJCh3aWxkY2FyZCAkKEJQRkRJUikvKi5icGYuaCkJCQlcCi0JICAgICB8ICQoT1VUUFVUKSAkKEJQRk9CSikKLQkkKGNhbGwgJChCUEZfQlVJTERfUlVMRSksJCZsdDssJEAsICQoQlBGX0NGTEFHUykpCi0KLSQoQlBGX1NLRUxTKTogJS5za2VsLmg6ICUuYnBmLm8gJChCUEZUT09MKSB8ICQoT1VUUFVUKQotCSQoY2FsbCBtc2csR0VOLVNLRUwsJChCSU5BUlkpLCRAKQotCSQoUSkkKEJQRlRPT0wpIGdlbiBvYmplY3QgJCgmbHQ7Oi5vPS5saW5rZWQxLm8pICQmbHQ7Ci0JJChRKSQoQlBGVE9PTCkgZ2VuIHNrZWxldG9uICQoJmx0Ozoubz0ubGlua2VkMS5vKSBuYW1lICQobm90ZGlyICQoJmx0OzouYnBmLm89KSkgJmd0OyAkQAomIzQzOyMgUmVsaW5rIHRlc3RzIHdoZW4gdGhlIGluLXRyZWUgbGliYnBmIGNoYW5nZXMuCiYjNDM7JChURVNUX0dFTl9QUk9HUyk6ICQoQlBGT0JKKQogCiAkKE9VVFBVVCkvJS5vOiAlLmMgJChCUEZfU0tFTFMpIGhpZF9jb21tb24uaAogCSQoY2FsbCBtc2csQ0MsLCRAKQpAQCAtMjMzLDUgJiM0Mzs4NSw0IEBAICQoT1VUUFVUKS8lOiAkKE9VVFBVVCkvJS5vCiAJJChjYWxsIG1zZyxCSU5BUlksLCRAKQogCSQoUSkkKExJTksuYykgJF4gJChMRExJQlMpIC1vICRACiAKLUVYVFJBX0NMRUFOIDo9ICQoU0NSQVRDSF9ESVIpICQoSE9TVF9TQ1JBVENIX0RJUikgZmVhdHVyZSBicGZ0b29sCVwKLQkkKGFkZHByZWZpeCAkKE9VVFBVVCkvLCoubyAqLnNrZWwuaCBub19hbHUzMikKJiM0MztFWFRSQV9DTEVBTiAmIzQzOz0gJChPVVRQVVQpLyoubwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvaGlkL3Byb2dzL2hpZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvaGlkL3Byb2dzL2hpZC5jCmluZGV4IGIyMWZiYjEzYzkyNmYuLmVjNzM0ZTE4ZDIzYWUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC9wcm9ncy9oaWQuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvcHJvZ3MvaGlkLmMKQEAgLTExMSw3ICYjNDM7MTExLDcgQEAgaW50IGhpZF91c2VyX3Jhd19yZXF1ZXN0KHN0cnVjdCBoaWRfaHdfcmVxdWVzdF9zeXNjYWxsX2FyZ3MgKmFyZ3MpCiB7CiAJc3RydWN0IGhpZF9icGZfY3R4ICpjdHg7CiAJY29uc3Qgc2l6ZV90IHNpemUgPSBhcmdzLSZndDtzaXplOwotCWludCBpLCByZXQgPSAwOwomIzQzOwlpbnQgcmV0ID0gMDsKIAogCWlmIChzaXplICZndDsgc2l6ZW9mKGFyZ3MtJmd0O2RhdGEpKQogCQlyZXR1cm4gLTc7IC8qIC1FMkJJRyAqLwpAQCAtMTM3LDcgJiM0MzsxMzcsNyBAQCBpbnQgaGlkX3VzZXJfb3V0cHV0X3JlcG9ydChzdHJ1Y3QgaGlkX2h3X3JlcXVlc3Rfc3lzY2FsbF9hcmdzICphcmdzKQogewogCXN0cnVjdCBoaWRfYnBmX2N0eCAqY3R4OwogCWNvbnN0IHNpemVfdCBzaXplID0gYXJncy0mZ3Q7c2l6ZTsKLQlpbnQgaSwgcmV0ID0gMDsKJiM0MzsJaW50IHJldCA9IDA7CiAKIAlpZiAoc2l6ZSAmZ3Q7IHNpemVvZihhcmdzLSZndDtkYXRhKSkKIAkJcmV0dXJuIC03OyAvKiAtRTJCSUcgKi8KQEAgLTE2MSw3ICYjNDM7MTYxLDcgQEAgaW50IGhpZF91c2VyX2lucHV0X3JlcG9ydChzdHJ1Y3QgaGlkX2h3X3JlcXVlc3Rfc3lzY2FsbF9hcmdzICphcmdzKQogewogCXN0cnVjdCBoaWRfYnBmX2N0eCAqY3R4OwogCWNvbnN0IHNpemVfdCBzaXplID0gYXJncy0mZ3Q7c2l6ZTsKLQlpbnQgaSwgcmV0ID0gMDsKJiM0MzsJaW50IHJldCA9IDA7CiAKIAlpZiAoc2l6ZSAmZ3Q7IHNpemVvZihhcmdzLSZndDtkYXRhKSkKIAkJcmV0dXJuIC03OyAvKiAtRTJCSUcgKi8KQEAgLTQxNyw3ICYjNDM7NDE3LDYgQEAgU0VDKCYjMzQ7P3N0cnVjdF9vcHMucy9oaWRfaHdfb3V0cHV0X3JlcG9ydCYjMzQ7KQogaW50IEJQRl9QUk9HKGhpZF90ZXN0X2hpZHJhd19vdXRwdXRfcmVwb3J0LCBzdHJ1Y3QgaGlkX2JwZl9jdHggKmhjdHgsIF9fdTY0IHNvdXJjZSkKIHsKIAlfX3U4ICpkYXRhID0gaGlkX2JwZl9nZXRfZGF0YShoY3R4LCAwIC8qIG9mZnNldCAqLywgMyAvKiBzaXplICovKTsKLQlpbnQgcmV0OwogCiAJaWYgKCFkYXRhKQogCQlyZXR1cm4gMDsgLyogRVBFUk0gY2hlY2sgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2xpYi5icGYubWsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9saWIuYnBmLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjkyMzhjYmYxZGUwNjIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9saWIuYnBmLm1rCkBAIC0wLDAgJiM0MzsxLDMyMSBAQAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjCiYjNDM7IyBCdWlsZCBCUEYgcHJvZ3JhbXMgYW5kIHNrZWxldG9ucyBmb3Igc2VsZnRlc3RzLgomIzQzOyMKJiM0MzsjIFVzZSBpdCBmcm9tIGEgdGVzdCBNYWtlZmlsZSBsaWtlIHRoaXM6CiYjNDM7IwomIzQzOyMgICAgIEJQRl9TUkNTICAgICAgICAgOj0gZm9vLmJwZi5jIGJhci5icGYuYwomIzQzOyMgICAgIFRFU1RfR0VOX1BST0dTICAgOj0gZm9vX3Rlc3QKJiM0MzsjICAgICBPVkVSUklERV9UQVJHRVRTIDo9IDEgICAgICAgICAgICAgICMgc2V0IGJlZm9yZSBsaWIubWsKJiM0MzsjICAgICBpbmNsdWRlIC4uL2xpYi5tawomIzQzOyMgICAgIGluY2x1ZGUgLi4vbGliLmJwZi5tawomIzQzOyMKJiM0MzsjICAgICAkKE9VVFBVVCkvZm9vX3Rlc3Q6IGZvb190ZXN0LmMgJChCUEZfU0tFTFMpICQoQlBGT0JKKQomIzQzOyMgICAgICAgICAkKGNhbGwgYnBmX2xpbmssJEAsJCZsdDspCiYjNDM7IwomIzQzOyMgRGVwZW5kIG9uICQoQlBGT0JKKSB0byByZWxpbmsgdGhlIHRlc3Qgd2hlbiBsaWJicGYuYSBjaGFuZ2VzLgomIzQzOyMKJiM0MzsjIE9wdGlvbnMgdG8gc2V0IGJlZm9yZSBpbmNsdWRpbmcgbGliLmJwZi5tazoKJiM0MzsjICAgQlBGX1BST0dfRVhUICAgICAtIHNvdXJjZSBlbmRpbmc7IGRlZmF1bHQgLmJwZi5jLiBVc2UgLmMgZm9yIHByb2dzL2Zvby5jLgomIzQzOyMgICBCUEZfRVhUUkFfSERSUyAgIC0gbW9yZSBoZWFkZXJzIG5lZWRlZCBieSB0aGUgQlBGIG9iamVjdHMuCiYjNDM7IyAgIEJQRl9FWFRSQV9DRkxBR1MgLSBtb3JlIGZsYWdzIGZvciBjb21waWxpbmcgQlBGIHByb2dyYW1zLgomIzQzOyMgICBCUEZfU0tFTF9FWFQgICAgIC0gc2tlbGV0b24gaGVhZGVyIGVuZGluZzsgZGVmYXVsdCAuc2tlbC5oLiBNdXN0IGVuZCBpbgomIzQzOyMgICAgICAgICAgICAgICAgICAgICAgc2tlbC5oLgomIzQzOyMgICBCUEZfR0VOX1NVQlNLRUwgIC0gYWxzbyBjcmVhdGUgYSBzdWJza2VsZXRvbiBoZWFkZXIgd2hlbiBzZXQuCiYjNDM7IyAgIEJQRl9PQkpfRElSICAgICAgLSBmb2xkZXIgZm9yIEJQRiBvYmplY3RzOyBkZWZhdWx0ICQoT1VUUFVUKS4KJiM0MzsjICAgQlBGX1NLRUxfRElSICAgICAtIGZvbGRlciBmb3Igc2tlbGV0b24gaGVhZGVyczsgZGVmYXVsdCAkKE9VVFBVVCkuCiYjNDM7IwomIzQzOyMgU2V0IG91dHB1dCBkaXJlY3RvcmllcyB0aGF0IHVzZSAkKE9VVFBVVCkgYWZ0ZXIgaW5jbHVkaW5nIGxpYi5tay4KJiM0MzsjCiYjNDM7IyBCUEZfQ0ZMQUdTIG1heSBiZSByZXBsYWNlZCBhZnRlciB0aGlzIGluY2x1ZGUuIEdlbmVyYXRlZCBuYW1lcyB1c2UgdGhlIHNvdXJjZQomIzQzOyMgc3RlbSB3aXRob3V0IGl0cyBkaXJlY3RvcnkuCiYjNDM7IwomIzQzOyMgSW5jbHVkZSBsaWIubWsgZmlyc3QuIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBCUEYgYnVpbGQgdmFyaWFibGVzIGFuZCBicGZfbGluaywKJiM0MzsjIGV4dGVuZHMgYWxsLCBDRkxBR1MgYW5kIEVYVFJBX0NMRUFOLCBhbmQgZW5hYmxlcyAuREVMRVRFX09OX0VSUk9SLgomIzQzOwomIzQzO2luY2x1ZGUgJCh0b3Bfc3JjZGlyKS90b29scy9zY3JpcHRzL01ha2VmaWxlLmFyY2gJIyBBUkNIIC8gU1JDQVJDSCAvIEhPU1RBUkNICiYjNDM7CiYjNDM7IyBSZW1vdmUgcGFydGlhbCBmaWxlcyB3cml0dGVuIGRpcmVjdGx5IHRvICRALgomIzQzOy5ERUxFVEVfT05fRVJST1I6CiYjNDM7CiYjNDM7IyBNYXRjaCB0aGUgbGliYnBmIGFuZCBicGZ0b29sIGhvc3QgY29tcGlsZXIgdG8gTExWTT0uCiYjNDM7aWZuZXEgKCQoTExWTSksKQomIzQzO0hPU1RDQyA/PSAkKExMVk1fUFJFRklYKWNsYW5nJChMTFZNX1NVRkZJWCkKJiM0MztIT1NUTEQgPz0gJChMTFZNX1BSRUZJWClsZC5sbGQkKExMVk1fU1VGRklYKQomIzQzO2Vsc2UKJiM0MztIT1NUQ0MgPz0gZ2NjCiYjNDM7SE9TVExEID89IGxkCiYjNDM7ZW5kaWYKJiM0MztDTEFORyAgPz0gY2xhbmcKJiM0MzsKJiM0MztpZm5lcSAoJChWKSwxKQomIzQzO2xpYl9icGZfc3VibWFrZV9leHRyYXMgOj0gZmVhdHVyZV9kaXNwbGF5PTAKJiM0MztlbmRpZgomIzQzOwomIzQzOyMgTWF0Y2ggc2VsZnRlc3RzL2JwZiBkZWJ1ZyBhbmQgcmVsZWFzZSBvcHRpbWl6YXRpb24uCiYjNDM7T1BUX0ZMQUdTID89ICQoaWYgJChSRUxFQVNFKSwtTzIsLU8wKQomIzQzOwomIzQzOyMgLS0tLSBmaWxlcyBhbmQgdG9vbHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7IyBVc2Ugb25lIGZ1bGwgcGF0aC4gRGlmZmVyZW50IGZvcm1zIG9mIHRoZSBzYW1lIC1JIHBhdGggY2FuIGNoYW5nZSBCVEYgb3JkZXIuCiYjNDM7bGliX2JwZl90b29sc19kaXIgICAgICAgICA6PSAkKGFic3BhdGggJCh0b3Bfc3JjZGlyKS90b29scykKJiM0MztsaWJfYnBmX2RpciAgICAgICAgICAgICAgIDo9ICQobGliX2JwZl90b29sc19kaXIpL2xpYi9icGYKJiM0MztsaWJfYnBmX3Rvb2xzX2luY2x1ZGVfZGlyIDo9ICQobGliX2JwZl90b29sc19kaXIpL2luY2x1ZGUKJiM0MztsaWJfYnBmX2JwZnRvb2xfZGlyICAgICAgIDo9ICQobGliX2JwZl90b29sc19kaXIpL2JwZi9icGZ0b29sCiYjNDM7bGliX2JwZl9hcGlfZGlyICAgICAgICAgICA6PSAkKGxpYl9icGZfdG9vbHNfaW5jbHVkZV9kaXIpL3VhcGkKJiM0MztsaWJfYnBmX3NvdXJjZXMgICAgICAgICAgIDo9ICQod2lsZGNhcmQgJChsaWJfYnBmX2RpcikvKi5bY2hdIFwKJiM0MzsJCQkJCSAgICAgICAkKGxpYl9icGZfZGlyKS9NYWtlZmlsZSkKJiM0MztsaWJfYnBmX2hlYWRlcl9zb3VyY2VzICAgIDo9ICQoZmlsdGVyICUuaCwkKGxpYl9icGZfc291cmNlcykpIFwKJiM0MzsJCQkJICAgICAkKGxpYl9icGZfYXBpX2RpcikvbGludXgvYnBmLmgKJiM0MzsjIEtlZXAgdGhlc2UgbmFtZXMgZm9yIGNhbGxlcnMgd2hpY2ggYWRkIHRoZWlyIG93biBCUEYgZmxhZ3Mgb3IgZGVwZW5kZW5jaWVzLgomIzQzO0JQRkRJUiAgICAgOj0gJChsaWJfYnBmX2RpcikKJiM0MztBUElESVIgICAgIDo9ICQobGliX2JwZl9hcGlfZGlyKQomIzQzOwomIzQzOyMgS2VlcCBwcml2YXRlIGJ1aWxkIGZpbGVzIHVuZGVyICQoT1VUUFVUKSBmb3IgYm90aCBpbi10cmVlIGFuZCBPPSBidWlsZHMuCiYjNDM7bGliX2JwZl9zY3JhdGNoX2RpciA6PSAkKE9VVFBVVCkvdG9vbHMKJiM0MztsaWJfYnBmX2J1aWxkX2RpciAgIDo9ICQobGliX2JwZl9zY3JhdGNoX2RpcikvYnVpbGQKJiM0MztsaWJfYnBmX2luY2x1ZGVfZGlyIDo9ICQobGliX2JwZl9zY3JhdGNoX2RpcikvaW5jbHVkZQomIzQzOyMgSU5DTFVERV9ESVIgaXMgYWxzbyB1c2VkIGJ5IGNhbGxlcnMgdGhhdCByZXBsYWNlIEJQRl9DRkxBR1MuCiYjNDM7SU5DTFVERV9ESVIgOj0gJChsaWJfYnBmX2luY2x1ZGVfZGlyKQomIzQzO0JQRk9CSiAgICAgIDo9ICQobGliX2JwZl9idWlsZF9kaXIpL2xpYmJwZi9saWJicGYuYQomIzQzOwomIzQzOyMgQ3Jvc3MgYnVpbGRzIHVzZSBhIHNlcGFyYXRlIG5hdGl2ZSBsaWJicGYgZm9yIGJwZnRvb2wuCiYjNDM7aWZuZXEgKCQoQ1JPU1NfQ09NUElMRSkkKGZpbHRlci1vdXQgJChIT1NUQVJDSCksJChTUkNBUkNIKSksKQomIzQzO2xpYl9icGZfaG9zdF9idWlsZF9kaXIgICA6PSAkKGxpYl9icGZfYnVpbGRfZGlyKS9ob3N0CiYjNDM7bGliX2JwZl9ob3N0X3NjcmF0Y2hfZGlyIDo9ICQoT1VUUFVUKS9ob3N0LXRvb2xzCiYjNDM7ZWxzZQomIzQzO2xpYl9icGZfaG9zdF9idWlsZF9kaXIgICA6PSAkKGxpYl9icGZfYnVpbGRfZGlyKQomIzQzO2xpYl9icGZfaG9zdF9zY3JhdGNoX2RpciA6PSAkKGxpYl9icGZfc2NyYXRjaF9kaXIpCiYjNDM7ZW5kaWYKJiM0MztsaWJfYnBmX2hvc3Rfb2JqIDo9ICQobGliX2JwZl9ob3N0X2J1aWxkX2RpcikvbGliYnBmL2xpYmJwZi5hCiYjNDM7REVGQVVMVF9CUEZUT09MICA6PSAkKGxpYl9icGZfaG9zdF9zY3JhdGNoX2Rpcikvc2Jpbi9icGZ0b29sCiYjNDM7QlBGVE9PTCAgICAgICAgICA/PSAkKERFRkFVTFRfQlBGVE9PTCkKJiM0MzsKJiM0MzsjIFJldXNlIHRhcmdldCBVU0VSQ0ZMQUdTIG9ubHkgd2hlbiBicGZ0b29sIHNoYXJlcyB0aGUgdGFyZ2V0IGxpYmJwZi4KJiM0MztpZmVxICgkKEJQRk9CSiksJChsaWJfYnBmX2hvc3Rfb2JqKSkKJiM0MztsaWJfYnBmX2hvc3RfdXNlcl9jZmxhZ3MgOj0gJChVU0VSQ0ZMQUdTKQomIzQzO2VuZGlmCiYjNDM7CiYjNDM7IyAtLS0tIGZpbmQgdm1saW51eCBCVEYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJiM0MztWTUxJTlVYX0JURl9QQVRIUyA/PSAkKGlmICQoTyksJChPKS92bWxpbnV4KQkJCQlcCiYjNDM7CQkgICAgICQoaWYgJChLQlVJTERfT1VUUFVUKSwkKEtCVUlMRF9PVVRQVVQpL3ZtbGludXgpCVwKJiM0MzsJCSAgICAgJCh0b3Bfc3JjZGlyKS92bWxpbnV4CQkJCVwKJiM0MzsJCSAgICAgL3N5cy9rZXJuZWwvYnRmL3ZtbGludXgJCQkJXAomIzQzOwkJICAgICAvYm9vdC92bWxpbnV4LSQoc2hlbGwgdW5hbWUgLXIpCiYjNDM7Vk1MSU5VWF9CVEYgPz0gJChhYnNwYXRoICQoZmlyc3R3b3JkICQod2lsZGNhcmQgJChWTUxJTlVYX0JURl9QQVRIUykpKSkKJiM0MzsjIERlbGF5IG1pc3Npbmctdm1saW51eCBlcnJvcnMgc28gJiMzNDttYWtlIGNsZWFuJiMzNDsgc3RpbGwgd29ya3MuCiYjNDM7bGliX2JwZl92bWxpbnV4X2RlcHMgOj0gJChpZiAkKFZNTElOVVhfSCksJChWTUxJTlVYX0gpLCQoVk1MSU5VWF9CVEYpICQoQlBGVE9PTCkpCiYjNDM7CiYjNDM7IyAtLS0tIGNvbXBpbGVyIGZsYWdzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJiM0MzsjIEZpbmQgdGhlIG5vcm1hbCBzeXN0ZW0gaGVhZGVycyB0aGF0IENsYW5nIG9taXRzIHdpdGggLS10YXJnZXQ9YnBmLiBQdXQgdGhlbQomIzQzOyMgbGFzdCB3aXRoIC1pZGlyYWZ0ZXIgc28gdGhleSBjYW5ub3QgcmVwbGFjZSBwcm9qZWN0IGhlYWRlcnMuCiYjNDM7ZGVmaW5lIGxpYl9icGZfZ2V0X3N5c19pbmNsdWRlcwomIzQzOyQoc2hlbGwgJCgxKSAkKDIpIC12IC1FIC0gJmx0Oy9kZXYvbnVsbCAyJmd0OyZhbXA7MSBcCiYjNDM7CXwgc2VkIC1uICYjMzk7LyZsdDsuLi4mZ3Q7IHNlYXJjaCBzdGFydHMgaGVyZTovLC9FbmQgb2Ygc2VhcmNoIGxpc3QuL3sgc3wgXCgvLipcKXwtaWRpcmFmdGVyIFwxfHAgfSYjMzk7KSBcCiYjNDM7JChzaGVsbCAkKDEpICQoMikgLWRNIC1FIC0gJmx0Oy9kZXYvbnVsbCB8IGdyZXAgJiMzOTtfX3Jpc2N2X3hsZW4gJiMzOTsgfCBhd2sgJiMzOTt7cHJpbnRmKCYjMzQ7LURfX3Jpc2N2X3hsZW49JWQgLURfX0JJVFNfUEVSX0xPTkc9JWQmIzM0OywgJCQzLCAkJDMpfSYjMzk7KSBcCiYjNDM7JChzaGVsbCAkKDEpICQoMikgLWRNIC1FIC0gJmx0Oy9kZXYvbnVsbCB8IGdyZXAgJiMzOTtfX2xvb25nYXJjaF9ncmxlbiAmIzM5OyB8IGF3ayAmIzM5O3twcmludGYoJiMzNDstRF9fQklUU19QRVJfTE9ORz0lZCYjMzQ7LCAkJDMpfSYjMzk7KSBcCiYjNDM7JChzaGVsbCAkKDEpICQoMikgLWRNIC1FIC0gJmx0Oy9kZXYvbnVsbCB8IGdyZXAgLUUgJiMzOTtNSVBTKEVMfEVCKXxfTUlQU19TWihQVFJ8TE9ORykgfF9NSVBTX1NJTSB8X0FCSShPMzJ8TjMyfDY0KSAmIzM5OyB8IGF3ayAmIzM5O3twcmludGYoJiMzNDstRCVzPSVzICYjMzQ7LCAkJDIsICQkMyl9JiMzOTspCiYjNDM7ZW5kZWYKJiM0MztpZm5lcSAoJChDUk9TU19DT01QSUxFKSwpCiYjNDM7bGliX2JwZl9jbGFuZ190YXJnZXRfYXJjaCA9IC0tdGFyZ2V0PSQobm90ZGlyICQoQ1JPU1NfQ09NUElMRTolLT0lKSkKJiM0MztlbmRpZgomIzQzOyMgRmluZCB0aGUgc3lzdGVtIGluY2x1ZGUgZmxhZ3Mgb25jZSBhbmQgcmV1c2UgdGhlbS4KJiM0MztDTEFOR19TWVNfSU5DTFVERVMgOj0gJChjYWxsIGxpYl9icGZfZ2V0X3N5c19pbmNsdWRlcywkKENMQU5HKSwkKGxpYl9icGZfY2xhbmdfdGFyZ2V0X2FyY2gpKQomIzQzOwomIzQzO2xpYl9icGZfaXNfbGl0dGxlX2VuZGlhbiA6PSAkKHNoZWxsICQoQ0MpIC1kTSAtRSAtICZsdDsvZGV2L251bGwgfCBcCiYjNDM7CQkJCSAgICBncmVwICYjMzk7ZGVmaW5lIF9fQllURV9PUkRFUl9fIF9fT1JERVJfTElUVExFX0VORElBTl9fJiMzOTspCiYjNDM7TUVORElBTiA6PSAkKGlmICQobGliX2JwZl9pc19saXR0bGVfZW5kaWFuKSwtbWxpdHRsZS1lbmRpYW4sLW1iaWctZW5kaWFuKQomIzQzOwomIzQzOyMgVXNlIEJQRiBDUFUgdjMgd2hlbiBDbGFuZyBzdXBwb3J0cyBpdC4gT3RoZXJ3aXNlIHVzZSB2Mi4KJiM0MztsaWJfYnBmX2NsYW5nX2NwdSA6PSAkKHNoZWxsICQoQ0xBTkcpIC0tdGFyZ2V0PWJwZiAtbWNwdT1oZWxwIDImZ3Q7JmFtcDsxIHwgXAomIzQzOwkJCSAgICAgZ3JlcCAtcSAmIzM5O3YzJiMzOTsgJmFtcDsmYW1wOyBlY2hvIHYzIHx8IGVjaG8gdjIpCiYjNDM7CiYjNDM7IyBBY2NlcHQgYW5vbnltb3VzIHN0cnVjdCBhbmQgdW5pb24gbWVtYmVycyBpbiB2bWxpbnV4LmguCiYjNDM7QlBGX0NGTEFHUyA9IC1nIC1XYWxsIC1XZXJyb3IgLURfX1RBUkdFVF9BUkNIXyQoU1JDQVJDSCkgJChNRU5ESUFOKQlcCiYjNDM7CSAgICAgLUkkKElOQ0xVREVfRElSKSAtSSQoQVBJRElSKQkJCQlcCiYjNDM7CSAgICAgLXN0ZD1nbnUxMQkJCQkJCQlcCiYjNDM7CSAgICAgLWZuby1zdHJpY3QtYWxpYXNpbmcJCQkJCVwKJiM0MzsJICAgICAtZm1zLWV4dGVuc2lvbnMgLVduby1taWNyb3NvZnQtYW5vbi10YWcJCQlcCiYjNDM7CSAgICAgLVduby1jb21wYXJlLWRpc3RpbmN0LXBvaW50ZXItdHlwZXMJCQlcCiYjNDM7CSAgICAgJChDTEFOR19TWVNfSU5DTFVERVMpICQoQlBGX0VYVFJBX0NGTEFHUykKJiM0MzsKJiM0MzsjICQxID0gc291cmNlLCAkMiA9IG9iamVjdC4gLU1NRCAtTVAgdHJhY2tzIG5vbi1zeXN0ZW0gaGVhZGVycy4KJiM0MztkZWZpbmUgbGliX2JwZl9idWlsZF9ydWxlCiYjNDM7CSQoY2FsbCBtc2csQ0xORy1CUEYsLCQyKQomIzQzOwkkKFEpJChDTEFORykgJChCUEZfQ0ZMQUdTKSAtTzIgLS10YXJnZXQ9YnBmIC1tY3B1PSQobGliX2JwZl9jbGFuZ19jcHUpIFwKJiM0MzsJCS1NTUQgLU1QIC1jICQxIC1vICQyCiYjNDM7ZW5kZWYKJiM0MzsKJiM0MzsjIC0tLS0gb3V0cHV0IGZvbGRlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzO0JQRl9PQkpfRElSICA/PSAkKE9VVFBVVCkKJiM0MztCUEZfU0tFTF9ESVIgPz0gJChPVVRQVVQpCiYjNDM7IyBSZWplY3QgZW1wdHkgZGlyZWN0b3JpZXMgYmVmb3JlIGNsZWFudXAgZ2xvYnMgY2FuIHJlYWNoIHRoZSBmaWxlc3lzdGVtIHJvb3QuCiYjNDM7aWZlcSAoJChzdHJpcCAkKEJQRl9PQkpfRElSKSksKQomIzQzOyQoZXJyb3IgbGliLmJwZi5tazogQlBGX09CSl9ESVIgaXMgZW1wdHk7IHNldCBpdCBhZnRlciAmIzM0O2luY2x1ZGUgLi4vbGliLm1rJiMzNDspCiYjNDM7ZW5kaWYKJiM0MztpZmVxICgkKHN0cmlwICQoQlBGX1NLRUxfRElSKSksKQomIzQzOyQoZXJyb3IgbGliLmJwZi5tazogQlBGX1NLRUxfRElSIGlzIGVtcHR5OyBzZXQgaXQgYWZ0ZXIgJiMzNDtpbmNsdWRlIC4uL2xpYi5tayYjMzQ7KQomIzQzO2VuZGlmCiYjNDM7CiYjNDM7IyAtLS0tIGJ1aWxkIGZvbGRlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJiM0MztsaWJfYnBmX21ha2VfZGlycyA6PSAkKHNvcnQgJChsaWJfYnBmX2J1aWxkX2RpcikvbGliYnBmCQkJXAomIzQzOwkJCSAgICAkKGxpYl9icGZfaG9zdF9idWlsZF9kaXIpL2xpYmJwZgkJXAomIzQzOwkJCSAgICAkKGxpYl9icGZfaG9zdF9idWlsZF9kaXIpL2JwZnRvb2wJCVwKJiM0MzsJCQkgICAgJChsaWJfYnBmX2luY2x1ZGVfZGlyKQkJCVwKJiM0MzsJCQkgICAgJChmaWx0ZXItb3V0ICQoT1VUUFVUKSwkKEJQRl9PQkpfRElSKSAkKEJQRl9TS0VMX0RJUikpKQomIzQzOyQobGliX2JwZl9tYWtlX2RpcnMpOgomIzQzOwkkKGNhbGwgbXNnLE1LRElSLCwkQCkKJiM0MzsJJChRKW1rZGlyIC1wICRACiYjNDM7CiYjNDM7IyAtLS0tIHRhcmdldCBsaWJicGYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJiM0MzsjIFBhc3MgdW5leHBvcnRlZCB0b29sY2hhaW4gc2V0dGluZ3MgYW5kIGJ1aWxkIFBJQyBmb3IgUElFIHRlc3QgYmluYXJpZXMuCiYjNDM7IyBsaWJicGYgY29uc3VtZXMgVVNFUkNGTEFHUyB0aHJvdWdoIEVYVFJBX0NGTEFHUy4KJiM0MzskKEJQRk9CSik6ICQobGliX2JwZl9zb3VyY2VzKSAkKGxpYl9icGZfYXBpX2RpcikvbGludXgvYnBmLmggXAomIzQzOwkgICB8ICQobGliX2JwZl9idWlsZF9kaXIpL2xpYmJwZgomIzQzOwkkKFEpJChNQUtFKSAkKGxpYl9icGZfc3VibWFrZV9leHRyYXMpIC1DICQobGliX2JwZl9kaXIpIFwKJiM0MzsJCSAgICBPVVRQVVQ9JChsaWJfYnBmX2J1aWxkX2RpcikvbGliYnBmLyBcCiYjNDM7CQkgICAgQVJDSD0kKEFSQ0gpIENST1NTX0NPTVBJTEU9JChDUk9TU19DT01QSUxFKSBDQz0mIzM0OyQoQ0MpJiMzNDsgICAgIFwKJiM0MzsJCSAgICBFWFRSQV9DRkxBR1M9JiMzOTstZyAkKE9QVF9GTEFHUykgLWZQSUMgJChFWFRSQV9DRkxBR1MpICQoVVNFUkNGTEFHUykmIzM5OyBcCiYjNDM7CQkgICAgREVTVERJUj0kKGxpYl9icGZfc2NyYXRjaF9kaXIpIHByZWZpeD0gYWxsIGluc3RhbGxfaGVhZGVycwomIzQzOwomIzQzOyMgLS0tLSBob3N0IGxpYmJwZiwgb25seSB3aGVuIHRoZSB0YXJnZXQgZGlmZmVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7aWZuZXEgKCQoQlBGT0JKKSwkKGxpYl9icGZfaG9zdF9vYmopKQomIzQzOyQobGliX2JwZl9ob3N0X29iaik6ICQobGliX2JwZl9zb3VyY2VzKSAkKGxpYl9icGZfYXBpX2RpcikvbGludXgvYnBmLmggXAomIzQzOwkJfCAkKGxpYl9icGZfaG9zdF9idWlsZF9kaXIpL2xpYmJwZgomIzQzOwkkKFEpJChNQUtFKSAkKGxpYl9icGZfc3VibWFrZV9leHRyYXMpIC1DICQobGliX2JwZl9kaXIpIFwKJiM0MzsJCSAgICBBUkNIPSBDUk9TU19DT01QSUxFPSBcCiYjNDM7CQkgICAgT1VUUFVUPSQobGliX2JwZl9ob3N0X2J1aWxkX2RpcikvbGliYnBmLyBcCiYjNDM7CQkgICAgQ0M9JiMzNDskKEhPU1RDQykmIzM0OyBMRD0mIzM0OyQoSE9TVExEKSYjMzQ7IFwKJiM0MzsJCSAgICBFWFRSQV9DRkxBR1M9JiMzOTstZyAkKE9QVF9GTEFHUykgJChFWFRSQV9DRkxBR1MpJiMzOTsgXAomIzQzOwkJICAgIERFU1RESVI9JChsaWJfYnBmX2hvc3Rfc2NyYXRjaF9kaXIpIHByZWZpeD0gYWxsIGluc3RhbGxfaGVhZGVycwomIzQzO2VuZGlmCiYjNDM7CiYjNDM7IyAtLS0tIGhvc3QgYnBmdG9vbCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJiM0MzskKERFRkFVTFRfQlBGVE9PTCk6ICQod2lsZGNhcmQgJChsaWJfYnBmX2JwZnRvb2xfZGlyKS8qLltjaF0gXAomIzQzOwkJCQkgJChsaWJfYnBmX2JwZnRvb2xfZGlyKS9NYWtlZmlsZSkgXAomIzQzOwkJICAgICQobGliX2JwZl9ob3N0X29iaikgfCAkKGxpYl9icGZfaG9zdF9idWlsZF9kaXIpL2JwZnRvb2wKJiM0MzsJJChRKSQoTUFLRSkgJChsaWJfYnBmX3N1Ym1ha2VfZXh0cmFzKSAtQyAkKGxpYl9icGZfYnBmdG9vbF9kaXIpIFwKJiM0MzsJCSAgICBBUkNIPSBDUk9TU19DT01QSUxFPSBDQz0mIzM0OyQoSE9TVENDKSYjMzQ7IExEPSYjMzQ7JChIT1NUTEQpJiMzNDsgXAomIzQzOwkJICAgIEVYVFJBX0NGTEFHUz0mIzM5Oy1nICQoT1BUX0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykgJChsaWJfYnBmX2hvc3RfdXNlcl9jZmxhZ3MpJiMzOTsgXAomIzQzOwkJICAgIEVYVFJBX0xERkxBR1M9JiMzOTskKEVYVFJBX0xERkxBR1MpJiMzOTsJCSAgXAomIzQzOwkJICAgIE9VVFBVVD0kKGxpYl9icGZfaG9zdF9idWlsZF9kaXIpL2JwZnRvb2wvCSAgXAomIzQzOwkJICAgIExJQkJQRl9PVVRQVVQ9JChsaWJfYnBmX2hvc3RfYnVpbGRfZGlyKS9saWJicGYvIFwKJiM0MzsJCSAgICBMSUJCUEZfREVTVERJUj0kKGxpYl9icGZfaG9zdF9zY3JhdGNoX2RpcikvCSAgXAomIzQzOwkJICAgIHByZWZpeD0gREVTVERJUj0kKGxpYl9icGZfaG9zdF9zY3JhdGNoX2RpcikvIGluc3RhbGwtYmluCiYjNDM7CiYjNDM7IyAtLS0tIGJ1aWxkIHZtbGludXguaCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJiM0MztsaWJfYnBmX3ZtbGludXhfaCAgICAgOj0gJChJTkNMVURFX0RJUikvdm1saW51eC5oCiYjNDM7bGliX2JwZl92bWxpbnV4X3N0YW1wIDo9ICQoSU5DTFVERV9ESVIpL3ZtbGludXguaC5zdGFtcAomIzQzOwomIzQzOyMgUHJlc2VydmUgdm1saW51eC5oJiMzOTtzIHRpbWVzdGFtcCB3aGVuIGl0cyBjb250ZW50cyBkbyBub3QgY2hhbmdlLgomIzQzO2lmZXEgKCQod2lsZGNhcmQgJChsaWJfYnBmX3ZtbGludXhfaCkpLCkKJiM0MzsjIFJlZ2VuZXJhdGUgaWYgdGhlIGhlYWRlciBpcyBtaXNzaW5nIGJ1dCBpdHMgc3RhbXAgcmVtYWlucy4KJiM0MzsuUEhPTlk6ICQobGliX2JwZl92bWxpbnV4X3N0YW1wKQomIzQzO2VuZGlmCiYjNDM7CiYjNDM7IyBVc2UgYSBub3JtYWwgZWRnZSBzbyBkZXBlbmRlbnRzIHNlZSBhIGNoYW5nZWQgaGVhZGVyIGluIHRoZSBzYW1lIG1ha2UgcnVuLgomIzQzOyQobGliX2JwZl92bWxpbnV4X2gpOiAkKGxpYl9icGZfdm1saW51eF9zdGFtcCkgOwomIzQzOwomIzQzOyQobGliX2JwZl92bWxpbnV4X3N0YW1wKTogJChsaWJfYnBmX3ZtbGludXhfZGVwcykgfCAkKElOQ0xVREVfRElSKQomIzQzO2lmZXEgKCQoVk1MSU5VWF9IKSwpCiYjNDM7CSQoY2FsbCBtc2csR0VOLCwkKGxpYl9icGZfdm1saW51eF9oKSkKJiM0MzsJJChRKXRlc3QgLW4gJiMzNDskKFZNTElOVVhfQlRGKSYjMzQ7IHx8IHsgXAomIzQzOwkJZWNobyAmIzM0O2xpYi5icGYubWs6IG5vIHZtbGludXggYXQgYW55IG9mIFwmIzM0OyQoVk1MSU5VWF9CVEZfUEFUSFMpXCYjMzQ7JiMzNDsgJmd0OyZhbXA7MjsgXAomIzQzOwkJZXhpdCAxOyB9CiYjNDM7CSQoUSkkKEJQRlRPT0wpIGJ0ZiBkdW1wIGZpbGUgJChWTUxJTlVYX0JURikgZm9ybWF0IGMgJmd0OyAkQC50bXAKJiM0MztlbHNlCiYjNDM7CSQoY2FsbCBtc2csQ1AsLCQobGliX2JwZl92bWxpbnV4X2gpKQomIzQzOwkkKFEpY3AgJiMzNDskKFZNTElOVVhfSCkmIzM0OyAkQC50bXAKJiM0MztlbmRpZgomIzQzOwkkKFEpY21wIC1zICRALnRtcCAkKGxpYl9icGZfdm1saW51eF9oKSB8fCBtdiAkQC50bXAgJChsaWJfYnBmX3ZtbGludXhfaCkKJiM0MzsJJChRKXJtIC1mICRALnRtcAomIzQzOwkkKFEpdG91Y2ggJEAKJiM0MzsKJiM0MzsjIC0tLS0gQlBGIG9iamVjdHMgYW5kIHNrZWxldG9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzO0JQRl9QUk9HX0VYVCA/PSAuYnBmLmMKJiM0MzsjIEVhY2ggc291cmNlIG11c3QgZW5kIHdpdGggQlBGX1BST0dfRVhUIHNvIE1ha2UgY2FuIHJlbW92ZSB0aGF0IGVuZGluZy4KJiM0MztsaWJfYnBmX2JhZF9zcmNzIDo9ICQoZmlsdGVyLW91dCAlJChCUEZfUFJPR19FWFQpLCQoQlBGX1NSQ1MpKQomIzQzO2lmbmVxICgkKGxpYl9icGZfYmFkX3NyY3MpLCkKJiM0MzskKGVycm9yIGxpYi5icGYubWs6IEJQRl9TUkNTIGVudHJpZXMgbXVzdCBlbmQgaW4gJChCUEZfUFJPR19FWFQpOiAkKGxpYl9icGZfYmFkX3NyY3MpKQomIzQzO2VuZGlmCiYjNDM7bGliX2JwZl9zdGVtcyA6PSAkKHBhdHN1YnN0ICUkKEJQRl9QUk9HX0VYVCksJSwkKG5vdGRpciAkKEJQRl9TUkNTKSkpCiYjNDM7IyBUaGUgc3RlbSBiZWNvbWVzIHRoZSBza2VsZXRvbiYjMzk7cyBDIG5hbWU7IHJlamVjdCBkb3RzIGFuZCBoeXBoZW5zLgomIzQzO2xpYl9icGZfYmFkX3N0ZW1zIDo9ICQoc3RyaXAgJChmb3JlYWNoIHMsJChsaWJfYnBmX3N0ZW1zKSwJCQlcCiYjNDM7CQkJJChpZiAkKGZpbmRzdHJpbmcgLiwkKHMpKSQoZmluZHN0cmluZyAtLCQocykpLCQocykpKSkKJiM0MztpZm5lcSAoJChsaWJfYnBmX2JhZF9zdGVtcyksKQomIzQzOyQoZXJyb3IgbGliLmJwZi5tazogQlBGX1NSQ1MgYmFzZW5hbWVzIG11c3Qgbm90IGNvbnRhaW4gJiMzOTsuJiMzOTsgb3IgJiMzOTstJiMzOTs6ICQobGliX2JwZl9iYWRfc3RlbXMpKQomIzQzO2VuZGlmCiYjNDM7IyBPdXRwdXQgbmFtZXMgb21pdCBkaXJlY3Rvcmllcywgc28gcmVqZWN0IGR1cGxpY2F0ZSBzdGVtcy4KJiM0MztpZm5lcSAoJCh3b3JkcyAkKGxpYl9icGZfc3RlbXMpKSwkKHdvcmRzICQoc29ydCAkKGxpYl9icGZfc3RlbXMpKSkpCiYjNDM7JChlcnJvciBsaWIuYnBmLm1rOiBCUEZfU1JDUyBoYXMgY29sbGlkaW5nIGJhc2VuYW1lczogJChCUEZfU1JDUykpCiYjNDM7ZW5kaWYKJiM0MztCUEZfU0tFTF9FWFQgICAgPz0gLnNrZWwuaAomIzQzO2xpYl9icGZfc3Vic2tlbF9leHQgOj0gJChwYXRzdWJzdCAlc2tlbC5oLCVzdWJza2VsLmgsJChCUEZfU0tFTF9FWFQpKQomIzQzOyMgS2VlcCBza2VsZXRvbiBzdWZmaXhlcyBkaXN0aW5jdCBhbmQgY2xlYW51cCBnbG9icyBuYXJyb3cuCiYjNDM7aWZlcSAoJChsaWJfYnBmX3N1YnNrZWxfZXh0KSwkKEJQRl9TS0VMX0VYVCkpCiYjNDM7JChlcnJvciBsaWIuYnBmLm1rOiBCUEZfU0tFTF9FWFQgbXVzdCBlbmQgaW4gc2tlbC5oOiAkKEJQRl9TS0VMX0VYVCkpCiYjNDM7ZW5kaWYKJiM0MztCUEZfT0JKUyAgOj0gJChhZGRwcmVmaXggJChCUEZfT0JKX0RJUikvLCQoYWRkc3VmZml4IC5icGYubywkKGxpYl9icGZfc3RlbXMpKSkKJiM0MztCUEZfU0tFTFMgOj0gJChhZGRwcmVmaXggJChCUEZfU0tFTF9ESVIpLywkKGFkZHN1ZmZpeCAkKEJQRl9TS0VMX0VYVCksJChsaWJfYnBmX3N0ZW1zKSkpCiYjNDM7aWZuZXEgKCQoQlBGX0dFTl9TVUJTS0VMKSwpCiYjNDM7QlBGX1NVQlNLRUxTIDo9ICQoYWRkcHJlZml4ICQoQlBGX1NLRUxfRElSKS8sJChhZGRzdWZmaXggJChsaWJfYnBmX3N1YnNrZWxfZXh0KSwkKGxpYl9icGZfc3RlbXMpKSkKJiM0MztlbmRpZgomIzQzOwomIzQzOyMgVXNlIHBlci1zb3VyY2UgcnVsZXMgdG8gYXZvaWQgY2hhbmdpbmcgbm9ybWFsIC5jIGxvb2t1cC4KJiM0MzsjIFRyYWNrIHNvdXJjZSBoZWFkZXJzIGJlZm9yZSBCUEZPQkogaW5zdGFsbHMgdGhlaXIgdXBkYXRlZCBjb3BpZXMuCiYjNDM7ZGVmaW5lIGxpYl9icGZfb2JqX3J1bGUKJiM0MzskKEJQRl9PQkpfRElSKS8kKHBhdHN1YnN0ICUkKEJQRl9QUk9HX0VYVCksJSwkKG5vdGRpciAkKDEpKSkuYnBmLm86ICQoMSkJXAomIzQzOwkJJChCUEZfRVhUUkFfSERSUykgJChsaWJfYnBmX2hlYWRlcl9zb3VyY2VzKQkJCVwKJiM0MzsJCSQoSU5DTFVERV9ESVIpL3ZtbGludXguaCB8ICQoQlBGX09CSl9ESVIpICQoQlBGT0JKKQomIzQzOwkkJChjYWxsIGxpYl9icGZfYnVpbGRfcnVsZSwkJCZsdDssJCRAKQomIzQzO2VuZGVmCiYjNDM7JChmb3JlYWNoIHNyYywkKEJQRl9TUkNTKSwkKGV2YWwgJChjYWxsIGxpYl9icGZfb2JqX3J1bGUsJChzcmMpKSkpCiYjNDM7CiYjNDM7IyBHZW5lcmF0ZSBib3RoIGhlYWRlcnMgdG9nZXRoZXIgc28gZWl0aGVyIG1pc3NpbmcgdGFyZ2V0IHJlYnVpbGRzIHRoZSBwYWlyLgomIzQzO2xpYl9icGZfc2tlbF90YXJnZXRzIDo9ICQoQlBGX1NLRUxfRElSKS8lJChCUEZfU0tFTF9FWFQpCiYjNDM7aWZuZXEgKCQoQlBGX0dFTl9TVUJTS0VMKSwpCiYjNDM7bGliX2JwZl9za2VsX3RhcmdldHMgJiM0Mzs9ICQoQlBGX1NLRUxfRElSKS8lJChsaWJfYnBmX3N1YnNrZWxfZXh0KQomIzQzO2VuZGlmCiYjNDM7CiYjNDM7IyBMaW5rIHRocmVlIHRpbWVzIGFuZCByZXF1aXJlIHRoZSBmaW5hbCB0d28gb2JqZWN0cyB0byBtYXRjaC4KJiM0MzskKGxpYl9icGZfc2tlbF90YXJnZXRzKTogJChCUEZfT0JKX0RJUikvJS5icGYubyAkKEJQRlRPT0wpIHwgJChCUEZfU0tFTF9ESVIpCiYjNDM7CSQoY2FsbCBtc2csR0VOLVNLRUwsLCQoQlBGX1NLRUxfRElSKS8kKiQoQlBGX1NLRUxfRVhUKSkKJiM0MzsJJChRKSQoQlBGVE9PTCkgZ2VuIG9iamVjdCAkKCZsdDs6Lm89LmxpbmtlZDEubykgJCZsdDsKJiM0MzsJJChRKSQoQlBGVE9PTCkgZ2VuIG9iamVjdCAkKCZsdDs6Lm89LmxpbmtlZDIubykgJCgmbHQ7Oi5vPS5saW5rZWQxLm8pCiYjNDM7CSQoUSkkKEJQRlRPT0wpIGdlbiBvYmplY3QgJCgmbHQ7Oi5vPS5saW5rZWQzLm8pICQoJmx0Ozoubz0ubGlua2VkMi5vKQomIzQzOwkkKFEpZGlmZiAkKCZsdDs6Lm89LmxpbmtlZDIubykgJCgmbHQ7Oi5vPS5saW5rZWQzLm8pCiYjNDM7CSQoUSkkKEJQRlRPT0wpIGdlbiBza2VsZXRvbiAkKCZsdDs6Lm89LmxpbmtlZDMubykgbmFtZSAkKiAmZ3Q7ICQoQlBGX1NLRUxfRElSKS8kKiQoQlBGX1NLRUxfRVhUKQomIzQzO2lmbmVxICgkKEJQRl9HRU5fU1VCU0tFTCksKQomIzQzOwkkKFEpJChCUEZUT09MKSBnZW4gc3Vic2tlbGV0b24gJCgmbHQ7Oi5vPS5saW5rZWQzLm8pIG5hbWUgJCogJmd0OyAkKEJQRl9TS0VMX0RJUikvJCokKGxpYl9icGZfc3Vic2tlbF9leHQpCiYjNDM7ZW5kaWYKJiM0MzsJJChRKXJtIC1mICQoJmx0Ozoubz0ubGlua2VkMS5vKSAkKCZsdDs6Lm89LmxpbmtlZDIubykgJCgmbHQ7Oi5vPS5saW5rZWQzLm8pCiYjNDM7CiYjNDM7IyBSZWFkIHRoZSBoZWFkZXIgZGVwZW5kZW5jaWVzIHdyaXR0ZW4gYnkgLU1NRC4KJiM0MzstaW5jbHVkZSAkKEJQRl9PQkpTOi5vPS5kKQomIzQzOwomIzQzOyMgLS0tLSB2YWx1ZXMgZm9yIHRoZSB0ZXN0IE1ha2VmaWxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7IyBBZGQgdGhlIGluc3RhbGxlZCBsaWJicGYvdm1saW51eC5oIGRpcmVjdG9yeSBhbmQgdGhlIHNrZWxldG9uIGRpcmVjdG9yeS4KJiM0MztDRkxBR1MgJiM0Mzs9IC1JJChJTkNMVURFX0RJUikgLUkkKEJQRl9TS0VMX0RJUikKJiM0MzsKJiM0MzsjIEFkZCB0YXJnZXQgenN0ZCB3aGVuIGZvdW5kIGJ5IHRoZSB0YXJnZXQgcGtnLWNvbmZpZy4KJiM0MztQS0dfQ09ORklHID89ICQoQ1JPU1NfQ09NUElMRSlwa2ctY29uZmlnCiYjNDM7QlBGX0xETElCUyA6PSAkKEJQRk9CSikgLWxlbGYgLWx6CiYjNDM7aWZuZXEgKCQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWV4aXN0cyBsaWJ6c3RkIDImZ3Q7L2Rldi9udWxsICZhbXA7JmFtcDsgZWNobyB5KSwpCiYjNDM7QlBGX0xETElCUyAmIzQzOz0gLWx6c3RkCiYjNDM7ZW5kaWYKJiM0MzsKJiM0MzsjIEFkZCBza2VsZXRvbnMgYWZ0ZXIgbGliLm1rIGRlZmluZXMgYWxsLgomIzQzO2FsbDogJChCUEZfU0tFTFMpICQoQlBGX1NVQlNLRUxTKQomIzQzOwomIzQzOyMgVGhlIHNrZWxldG9uIGFscmVhZHkgZW1iZWRzIGVhY2ggQlBGIG9iamVjdCBpbiB0aGUgdGVzdCBiaW5hcnkuIFRvIGluc3RhbGwgdGhlCiYjNDM7IyBvYmplY3RzIHNlcGFyYXRlbHksIGFkZCBURVNUX0dFTl9GSUxFUyAmIzQzOz0gJChCUEZfT0JKUykuCiYjNDM7CiYjNDM7IyAkMSA9IGJpbmFyeSwgJDIgPSB0ZXN0IHNvdXJjZS4gVXNlIHRoZSBzYW1lIGNvbXBpbGUgYW5kIGxpbmsgZmxhZ3MgYXMgbGliLm1rLgomIzQzO2RlZmluZSBicGZfbGluawomIzQzOwkkKGNhbGwgbXNnLEJJTkFSWSwsJDEpCiYjNDM7CSQoUSkkKENDKSAkKENGTEFHUykgJChDUFBGTEFHUykgJChMREZMQUdTKSAkKFRBUkdFVF9BUkNIKSAkMiBcCiYjNDM7CQkkKEJQRl9MRExJQlMpICQoTERMSUJTKSAtbyAkMQomIzQzO2VuZGVmCiYjNDM7CiYjNDM7RVhUUkFfQ0xFQU4gJiM0Mzs9ICQoc29ydCAkKGxpYl9icGZfc2NyYXRjaF9kaXIpICQobGliX2JwZl9ob3N0X3NjcmF0Y2hfZGlyKSkgXAomIzQzOwkgICAgICAgJChhZGRwcmVmaXggJChCUEZfT0JKX0RJUikvLCouYnBmLm8gKi5icGYuZCAqLmxpbmtlZCoubykJXAomIzQzOwkgICAgICAgJChhZGRwcmVmaXggJChCUEZfU0tFTF9ESVIpLywqJChCUEZfU0tFTF9FWFQpICokKGxpYl9icGZfc3Vic2tlbF9leHQpKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L01ha2VmaWxlCmluZGV4IDNjZmU5MGUwZjM0ZmEuLmRkM2Y1NTk0YWYyNDAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NjaGVkX2V4dC9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvTWFrZWZpbGUKQEAgLTE0LDQ4ICYjNDM7MTQsMjkgQEAgQ1VSRElSIDo9ICQoYWJzcGF0aCAuKQogUkVQT1JPT1QgOj0gJChhYnNwYXRoIC4uLy4uLy4uLy4uKQogVE9PTFNESVIgOj0gJChSRVBPUk9PVCkvdG9vbHMKIExJQkRJUiA6PSAkKFRPT0xTRElSKS9saWIKLUJQRkRJUiA6PSAkKExJQkRJUikvYnBmCiBUT09MU0lOQ0RJUiA6PSAkKFRPT0xTRElSKS9pbmNsdWRlCi1CUEZUT09MRElSIDo9ICQoVE9PTFNESVIpL2JwZi9icGZ0b29sCi1BUElESVIgOj0gJChUT09MU0lOQ0RJUikvdWFwaQogR0VORElSIDo9ICQoUkVQT1JPT1QpL2luY2x1ZGUvZ2VuZXJhdGVkCiBHRU5IRFIgOj0gJChHRU5ESVIpL2F1dG9jb25mLmgKLVNDWFRPT0xTRElSIDo9ICQoVE9PTFNESVIpL3NjaGVkX2V4dAogU0NYVE9PTFNJTkNESVIgOj0gJChUT09MU0RJUikvc2NoZWRfZXh0L2luY2x1ZGUKIAotT1VUUFVUX0RJUiA6PSAkKE9VVFBVVCkvYnVpbGQKLU9CSl9ESVIgOj0gJChPVVRQVVRfRElSKS9vYmoKLUlOQ0xVREVfRElSIDo9ICQoT1VUUFVUX0RJUikvaW5jbHVkZQotQlBGT0JKX0RJUiA6PSAkKE9CSl9ESVIpL2xpYmJwZgotU0NYT0JKX0RJUiA6PSAkKE9CSl9ESVIpL3NjaGVkX2V4dAotQlBGT0JKIDo9ICQoQlBGT0JKX0RJUikvbGliYnBmLmEKLUxJQkJQRl9PVVRQVVQgOj0gJChPQkpfRElSKS9saWJicGYvbGliYnBmLmEKLQotREVGQVVMVF9CUEZUT09MIDo9ICQoT1VUUFVUX0RJUikvaG9zdC9zYmluL2JwZnRvb2wKLUhPU1RfT0JKX0RJUiA6PSAkKE9CSl9ESVIpL2hvc3QvYnBmdG9vbAotSE9TVF9MSUJCUEZfT1VUUFVUIDo9ICQoT0JKX0RJUikvaG9zdC9saWJicGYvCi1IT1NUX0xJQkJQRl9ERVNURElSIDo9ICQoT1VUUFVUX0RJUikvaG9zdC8KLUhPU1RfREVTVERJUiA6PSAkKE9VVFBVVF9ESVIpL2hvc3QvCi0KLVZNTElOVVhfQlRGX1BBVEhTID89ICQoaWYgJChPKSwkKE8pL3ZtbGludXgpCQkJCQlcCi0JCSAgICAgJChpZiAkKEtCVUlMRF9PVVRQVVQpLCQoS0JVSUxEX09VVFBVVCkvdm1saW51eCkJCVwKLQkJICAgICAuLi8uLi8uLi8uLi92bWxpbnV4CQkJCQlcCi0JCSAgICAgL3N5cy9rZXJuZWwvYnRmL3ZtbGludXgJCQkJCVwKLQkJICAgICAvYm9vdC92bWxpbnV4LSQoc2hlbGwgdW5hbWUgLXIpCi1WTUxJTlVYX0JURiA/PSAkKGFic3BhdGggJChmaXJzdHdvcmQgJCh3aWxkY2FyZCAkKFZNTElOVVhfQlRGX1BBVEhTKSkpKQotaWZlcSAoJChWTUxJTlVYX0JURiksKQotJChlcnJvciBDYW5ub3QgZmluZCBhIHZtbGludXggZm9yIFZNTElOVVhfQlRGIGF0IGFueSBvZiAmIzM0OyQoVk1MSU5VWF9CVEZfUEFUSFMpJiMzNDspCi1lbmRpZgomIzQzOyMgQnVpbGQgc2NoZWR1bGVyIHNrZWxldG9ucyBhbmQgc3Vic2tlbGV0b25zIHdpdGggdGhlIHNoYXJlZCBCUEYgcnVsZXMuCiYjNDM7QlBGX1NSQ1MgICAgICAgIDo9ICQod2lsZGNhcmQgKi5icGYuYykKJiM0MztCUEZfU0tFTF9FWFQgICAgOj0gLmJwZi5za2VsLmgKJiM0MztCUEZfR0VOX1NVQlNLRUwgOj0gMQomIzQzOyMgUHJlc2VydmUgdGhlIGV4aXN0aW5nIGJ1aWxkLyBsYXlvdXQuCiYjNDM7QlBGX09CSl9ESVIgIDo9ICQoT1VUUFVUKS9idWlsZC9vYmovc2NoZWRfZXh0CiYjNDM7QlBGX1NLRUxfRElSIDo9ICQoT1VUUFVUKS9idWlsZC9pbmNsdWRlCiYjNDM7U0NYT0JKX0RJUiAgIDo9ICQoQlBGX09CSl9ESVIpCiAKLUJQRlRPT0wgPz0gJChERUZBVUxUX0JQRlRPT0wpCiYjNDM7aW5jbHVkZSAuLi9saWIuYnBmLm1rCiAKIGlmbmVxICgkKHdpbGRjYXJkICQoR0VOSERSKSksKQogICBHRU5GTEFHUyA6PSAtREhBVkVfR0VOSERSCiBlbmRpZgogCiBDRkxBR1MgJiM0Mzs9IC1nIC1PMiAtcmR5bmFtaWMgLXB0aHJlYWQgLVdhbGwgLVdlcnJvciAkKEdFTkZMQUdTKQkJCVwKLQkgIC1JJChJTkNMVURFX0RJUikgLUkkKEdFTkRJUikgLUkkKExJQkRJUikJCQkJXAotCSAgLUkkKFRPT0xTSU5DRElSKSAtSSQoQVBJRElSKSAtSSQoQ1VSRElSKS9pbmNsdWRlIC1JJChTQ1hUT09MU0lOQ0RJUikKJiM0MzsJICAtSSQoR0VORElSKSAtSSQoTElCRElSKSAtSSQoVE9PTFNJTkNESVIpIC1JJChBUElESVIpCQkJXAomIzQzOwkgIC1JJChDVVJESVIpL2luY2x1ZGUgLUkkKFNDWFRPT0xTSU5DRElSKQogCiAjIFNpbGVuY2Ugc29tZSB3YXJuaW5ncyB3aGVuIGNvbXBpbGVkIHdpdGggY2xhbmcKIGlmbmVxICgkKExMVk0pLCkKQEAgLTY0LDEwMiAmIzQzOzQ1LDI2IEBAIGVuZGlmCiAKIExERkxBR1MgPSAtbGVsZiAtbHogLWxwdGhyZWFkIC1senN0ZAogCi1JU19MSVRUTEVfRU5ESUFOID0gJChzaGVsbCAkKENDKSAtZE0gLUUgLSAmbHQ7L2Rldi9udWxsIHwJCQkJXAotCQkJZ3JlcCAmIzM5O2RlZmluZSBfX0JZVEVfT1JERVJfXyBfX09SREVSX0xJVFRMRV9FTkRJQU5fXyYjMzk7KQotCi0jIEdldCBDbGFuZyYjMzk7cyBkZWZhdWx0IGluY2x1ZGVzIG9uIHRoaXMgc3lzdGVtLCBhcyBvcHBvc2VkIHRvIHRob3NlIHNlZW4gYnkKLSMgJiMzOTstdGFyZ2V0IGJwZiYjMzk7LiBUaGlzIGZpeGVzICYjMzQ7bWlzc2luZyYjMzQ7IGZpbGVzIG9uIHNvbWUgYXJjaGl0ZWN0dXJlcy9kaXN0cm9zLAotIyBzdWNoIGFzIGFzbS9ieXRlb3JkZXIuaCwgYXNtL3NvY2tldC5oLCBhc20vc29ja2lvcy5oLCBzeXMvY2RlZnMuaCBldGMuCi0jCi0jIFVzZSAmIzM5Oy1pZGlyYWZ0ZXImIzM5OzogRG9uJiMzOTt0IGludGVyZmVyZSB3aXRoIGluY2x1ZGUgbWVjaGFuaWNzIGV4Y2VwdCB3aGVyZSB0aGUKLSMgYnVpbGQgd291bGQgaGF2ZSBmYWlsZWQgYW55d2F5cy4KLWRlZmluZSBnZXRfc3lzX2luY2x1ZGVzCi0kKHNoZWxsICQoMSkgJCgyKSAtdiAtRSAtICZsdDsvZGV2L251bGwgMiZndDsmYW1wOzEgXAotCXwgc2VkIC1uICYjMzk7LyZsdDsuLi4mZ3Q7IHNlYXJjaCBzdGFydHMgaGVyZTovLC9FbmQgb2Ygc2VhcmNoIGxpc3QuL3sgc3wgXCgvLipcKXwtaWRpcmFmdGVyIFwxfHAgfSYjMzk7KSBcCi0kKHNoZWxsICQoMSkgJCgyKSAtZE0gLUUgLSAmbHQ7L2Rldi9udWxsIHwgZ3JlcCAmIzM5O19fcmlzY3ZfeGxlbiAmIzM5OyB8IGF3ayAmIzM5O3twcmludGYoJiMzNDstRF9fcmlzY3ZfeGxlbj0lZCAtRF9fQklUU19QRVJfTE9ORz0lZCYjMzQ7LCAkJDMsICQkMyl9JiMzOTspCi1lbmRlZgotCi1pZm5lcSAoJChDUk9TU19DT01QSUxFKSwpCi1DTEFOR19UQVJHRVRfQVJDSCA9IC0tdGFyZ2V0PSQobm90ZGlyICQoQ1JPU1NfQ09NUElMRTolLT0lKSkKLWVuZGlmCi0KLUNMQU5HX1NZU19JTkNMVURFUyA9ICQoY2FsbCBnZXRfc3lzX2luY2x1ZGVzLCQoQ0xBTkcpLCQoQ0xBTkdfVEFSR0VUX0FSQ0gpKQotCi1CUEZfQ0ZMQUdTID0gLWcgLURfX1RBUkdFVF9BUkNIXyQoU1JDQVJDSCkJCQkJCVwKLQkgICAgICQoaWYgJChJU19MSVRUTEVfRU5ESUFOKSwtbWxpdHRsZS1lbmRpYW4sLW1iaWctZW5kaWFuKQkJXAomIzQzOyMgUHJlc2VydmUgdGhlIHNjaGVkdWxlci1zcGVjaWZpYyBmbGFnczsgdGhlIHNoYXJlZCByZWNpcGUgYWRkcyB0YXJnZXQgZmxhZ3MuCiYjNDM7QlBGX0NGTEFHUyA9IC1nIC1EX19UQVJHRVRfQVJDSF8kKFNSQ0FSQ0gpICQoTUVORElBTikJCQkJXAogCSAgICAgLUkkKENVUkRJUikvaW5jbHVkZSAtSSQoQ1VSRElSKS9pbmNsdWRlL2JwZi1jb21wYXQJCQlcCiAJICAgICAtSSQoSU5DTFVERV9ESVIpIC1JJChBUElESVIpIC1JJChTQ1hUT09MU0lOQ0RJUikJCQlcCiAJICAgICAtSSQoUkVQT1JPT1QpL2luY2x1ZGUJCQkJCQlcCi0JICAgICAkKENMQU5HX1NZU19JTkNMVURFUykgCQkJCQkJXAomIzQzOwkgICAgICQoQ0xBTkdfU1lTX0lOQ0xVREVTKQkJCQkJCVwKIAkgICAgIC1XYWxsIC1Xbm8tY29tcGFyZS1kaXN0aW5jdC1wb2ludGVyLXR5cGVzCQkJCVwKIAkgICAgIC1Xbm8taW5jb21wYXRpYmxlLWZ1bmN0aW9uLXBvaW50ZXItdHlwZXMJCQkJXAogCSAgICAgLVduby1taWNyb3NvZnQtYW5vbi10YWcJCQkJCQlcCiAJICAgICAtZm1zLWV4dGVuc2lvbnMJCQkJCQkJXAotCSAgICAgLU8yIC1tY3B1PXYzCi0KLSMgc29ydCByZW1vdmVzIGxpYmJwZiBkdXBsaWNhdGVzIHdoZW4gbm90IGNyb3NzLWJ1aWxkaW5nCi1NQUtFX0RJUlMgOj0gJChzb3J0ICQoT0JKX0RJUikvbGliYnBmICQoT0JKX0RJUikvbGliYnBmCQkJCVwKLQkgICAgICAgJChPQkpfRElSKS9icGZ0b29sICQoT0JKX0RJUikvcmVzb2x2ZV9idGZpZHMJCQlcCi0JICAgICAgICQoSE9TVF9PQkpfRElSKSAkKElOQ0xVREVfRElSKSAkKFNDWE9CSl9ESVIpKQotCi0kKE1BS0VfRElSUyk6Ci0JJChjYWxsIG1zZyxNS0RJUiwsJEApCi0JJChRKW1rZGlyIC1wICRACi0KLSQoQlBGT0JKKTogJCh3aWxkY2FyZCAkKEJQRkRJUikvKi5bY2hdICQoQlBGRElSKS9NYWtlZmlsZSkJCQlcCi0JICAgJChBUElESVIpL2xpbnV4L2JwZi5oCQkJCQkJXAotCSAgIHwgJChPQkpfRElSKS9saWJicGYKLQkkKFEpJChNQUtFKSAkKHN1Ym1ha2VfZXh0cmFzKSAtQyAkKEJQRkRJUikgT1VUUFVUPSQoT0JKX0RJUikvbGliYnBmLwlcCi0JCSAgICBBUkNIPSQoQVJDSCkgQ0M9JiMzNDskKENDKSYjMzQ7IENST1NTX0NPTVBJTEU9JChDUk9TU19DT01QSUxFKQlcCi0JCSAgICBFWFRSQV9DRkxBR1M9JiMzOTstZyAtTzAgLWZQSUMmIzM5OwkJCQkJXAotCQkgICAgREVTVERJUj0kKE9VVFBVVF9ESVIpIHByZWZpeD0gYWxsIGluc3RhbGxfaGVhZGVycwotCi0kKERFRkFVTFRfQlBGVE9PTCk6ICQod2lsZGNhcmQgJChCUEZUT09MRElSKS8qLltjaF0gJChCUEZUT09MRElSKS9NYWtlZmlsZSkJXAotCQkgICAgJChMSUJCUEZfT1VUUFVUKSB8ICQoSE9TVF9PQkpfRElSKQotCSQoUSkkKE1BS0UpICQoc3VibWFrZV9leHRyYXMpICAtQyAkKEJQRlRPT0xESVIpCQkJCVwKLQkJICAgIEFSQ0g9IENST1NTX0NPTVBJTEU9IENDPSQoSE9TVENDKSBMRD0kKEhPU1RMRCkJCVwKLQkJICAgIEVYVFJBX0NGTEFHUz0mIzM5Oy1nIC1PMCYjMzk7CQkJCQlcCi0JCSAgICBPVVRQVVQ9JChIT1NUX09CSl9ESVIpLwkJCQkJXAotCQkgICAgTElCQlBGX09VVFBVVD0kKEhPU1RfTElCQlBGX09VVFBVVCkJCQkJXAotCQkgICAgTElCQlBGX0RFU1RESVI9JChIT1NUX0xJQkJQRl9ERVNURElSKQkJCVwKLQkJICAgIHByZWZpeD0gREVTVERJUj0kKEhPU1RfREVTVERJUikgaW5zdGFsbC1iaW4KLQotJChJTkNMVURFX0RJUikvdm1saW51eC5oOiAkKFZNTElOVVhfQlRGKSAkKEJQRlRPT0wpIHwgJChJTkNMVURFX0RJUikKLWlmZXEgKCQoVk1MSU5VWF9IKSwpCi0JJChjYWxsIG1zZyxHRU4sLCRAKQotCSQoUSkkKEJQRlRPT0wpIGJ0ZiBkdW1wIGZpbGUgJChWTUxJTlVYX0JURikgZm9ybWF0IGMgJmd0OyAkQAotZWxzZQotCSQoY2FsbCBtc2csQ1AsLCRAKQotCSQoUSljcCAmIzM0OyQoVk1MSU5VWF9IKSYjMzQ7ICRACi1lbmRpZgotCi0kKFNDWE9CSl9ESVIpLyUuYnBmLm86ICUuYnBmLmMgJChJTkNMVURFX0RJUikvdm1saW51eC5oCXwgJChCUEZPQkopICQoU0NYT0JKX0RJUikKLQkkKGNhbGwgbXNnLENMTkctQlBGLCwkKG5vdGRpciAkQCkpCi0JJChRKSQoQ0xBTkcpICQoQlBGX0NGTEFHUykgLXRhcmdldCBicGYgLWMgJCZsdDsgLW8gJEAKJiM0MzsJICAgICAkKEJQRl9FWFRSQV9DRkxBR1MpCiAKLSQoSU5DTFVERV9ESVIpLyUuYnBmLnNrZWwuaDogJChTQ1hPQkpfRElSKS8lLmJwZi5vICQoSU5DTFVERV9ESVIpL3ZtbGludXguaCAkKEJQRlRPT0wpIHwgJChJTkNMVURFX0RJUikKLQkkKGV2YWwgc2NoZWQ9JChub3RkaXIgJEApKQotCSQoY2FsbCBtc2csR0VOLVNLRUwsLCQoc2NoZWQpKQotCSQoUSkkKEJQRlRPT0wpIGdlbiBvYmplY3QgJCgmbHQ7Oi5vPS5saW5rZWQxLm8pICQmbHQ7Ci0JJChRKSQoQlBGVE9PTCkgZ2VuIG9iamVjdCAkKCZsdDs6Lm89LmxpbmtlZDIubykgJCgmbHQ7Oi5vPS5saW5rZWQxLm8pCi0JJChRKSQoQlBGVE9PTCkgZ2VuIG9iamVjdCAkKCZsdDs6Lm89LmxpbmtlZDMubykgJCgmbHQ7Oi5vPS5saW5rZWQyLm8pCi0JJChRKWRpZmYgJCgmbHQ7Oi5vPS5saW5rZWQyLm8pICQoJmx0Ozoubz0ubGlua2VkMy5vKQotCSQoUSkkKEJQRlRPT0wpIGdlbiBza2VsZXRvbiAkKCZsdDs6Lm89LmxpbmtlZDMubykgbmFtZSAkKHN1YnN0IC5icGYuc2tlbC5oLCwkKHNjaGVkKSkgJmd0OyAkQAotCSQoUSkkKEJQRlRPT0wpIGdlbiBzdWJza2VsZXRvbiAkKCZsdDs6Lm89LmxpbmtlZDMubykgbmFtZSAkKHN1YnN0IC5icGYuc2tlbC5oLCwkKHNjaGVkKSkgJmd0OyAkKEA6LnNrZWwuaD0uc3Vic2tlbC5oKQomIzQzO0VYVFJBX0NMRUFOICYjNDM7PSAkKE9VVFBVVCkvYnVpbGQKIAogIyMjIyMjIyMjIyMjIyMjIwogIyBDIHNjaGVkdWxlcnMgIwogIyMjIyMjIyMjIyMjIyMjIwogCi1vdmVycmlkZSBkZWZpbmUgQ0xFQU4KLQlybSAtcmYgJChPVVRQVVRfRElSKQotCXJtIC1mICQoVEVTVF9HRU5fUFJPR1MpCi1lbmRlZgotCi0jIEV2ZXJ5IHRlc3RjYXNlIHRha2VzIGFsbCBvZiB0aGUgQlBGIHByb2dzIGFyZSBkZXBlbmRlbmNpZXMgYnkgZGVmYXVsdC4gVGhpcwotIyBhbGxvd3MgdGVzdGNhc2VzIHRvIGxvYWQgYW55IEJQRiBzY2hlZHVsZXIsIHdoaWNoIGlzIHVzZWZ1bCBmb3IgdGVzdGNhc2VzCi0jIHRoYXQgZG9uJiMzOTt0IG5lZWQgdGhlaXIgb3duIHByb2cgdG8gcnVuIHRoZWlyIHRlc3QuCi1hbGxfdGVzdF9icGZwcm9ncyA6PSAkKGZvcmVhY2ggcHJvZywkKHdpbGRjYXJkICouYnBmLmMpLCQoSU5DTFVERV9ESVIpLyQocGF0c3Vic3QgJS5jLCUuc2tlbC5oLCQocHJvZykpKQomIzQzOyMgQnVpbGQgZXZlcnkgc2NoZWR1bGVyIGJlZm9yZSBlYWNoIHRlc3QuCiYjNDM7YWxsX3Rlc3RfYnBmcHJvZ3MgOj0gJChCUEZfU0tFTFMpCiAKIGF1dG8tdGVzdC10YXJnZXRzIDo9CQkJXAogCWNyZWF0ZV9kc3EJCQlcCkBAIC0xOTYsMjQgJiM0MzsxMDEsMjIgQEAgYXV0by10ZXN0LXRhcmdldHMgOj0JCQlcCiB0ZXN0Y2FzZS10YXJnZXRzIDo9ICQoYWRkc3VmZml4IC5vLCQoYWRkcHJlZml4ICQoU0NYT0JKX0RJUikvLCQoYXV0by10ZXN0LXRhcmdldHMpKSkKIAogJChTQ1hPQkpfRElSKS9ydW5uZXIubzogcnVubmVyLmMgfCAkKFNDWE9CSl9ESVIpICQoQlBGT0JKKQotCSQoQ0MpICQoQ0ZMQUdTKSAtYyAkJmx0OyAtbyAkQAomIzQzOwkkKGNhbGwgbXNnLENDLCwkQCkKJiM0MzsJJChRKSQoQ0MpICQoQ0ZMQUdTKSAtYyAkJmx0OyAtbyAkQAogCiAjIENyZWF0ZSBhbGwgb2YgdGhlIHRlc3QgdGFyZ2V0cyBvYmplY3QgZmlsZXMsIHdob3NlIHRlc3RjYXNlIG9iamVjdHMgd2lsbCBiZQogIyByZWdpc3RlcmVkIGludG8gdGhlIHJ1bm5lciBpbiBFTEYgY29uc3RydWN0b3JzLgotIwotIyBOb3RlIHRoYXQgd2UgbXVzdCBkbyBkb3VibGUgZXhwYW5zaW9uIGhlcmUgaW4gb3JkZXIgdG8gc3VwcG9ydCBjb25kaXRpb25hbGx5Ci0jIGNvbXBpbGluZyBCUEYgb2JqZWN0IGZpbGVzIG9ubHkgaWYgb25lIGlzIHByZXNlbnQsIGFzIHRoZSB3aWxkY2FyZCBNYWtlCi0jIGZ1bmN0aW9uIGRvZXNuJiMzOTt0IHN1cHBvcnQgdXNpbmcgaW1wbGljaXQgcnVsZXMgb3RoZXJ3aXNlLgogJCh0ZXN0Y2FzZS10YXJnZXRzKTogJChTQ1hPQkpfRElSKS8lLm86ICUuYyAkKFNDWE9CSl9ESVIpL3J1bm5lci5vICQoYWxsX3Rlc3RfYnBmcHJvZ3MpIHwgJChTQ1hPQkpfRElSKQotCSQoZXZhbCB0ZXN0PSQocGF0c3Vic3QgJS5vLCUuYywkKG5vdGRpciAkQCkpKQotCSQoQ0MpICQoQ0ZMQUdTKSAtYyAkJmx0OyAtbyAkQAomIzQzOwkkKGNhbGwgbXNnLENDLCwkQCkKJiM0MzsJJChRKSQoQ0MpICQoQ0ZMQUdTKSAtYyAkJmx0OyAtbyAkQAogCiAkKFNDWE9CSl9ESVIpL3V0aWwubzogdXRpbC5jIHwgJChTQ1hPQkpfRElSKQotCSQoQ0MpICQoQ0ZMQUdTKSAtYyAkJmx0OyAtbyAkQAomIzQzOwkkKGNhbGwgbXNnLENDLCwkQCkKJiM0MzsJJChRKSQoQ0MpICQoQ0ZMQUdTKSAtYyAkJmx0OyAtbyAkQAogCiAkKE9VVFBVVCkvcnVubmVyOiAkKFNDWE9CSl9ESVIpL3J1bm5lci5vICQoU0NYT0JKX0RJUikvdXRpbC5vICQoQlBGT0JKKSAkKHRlc3RjYXNlLXRhcmdldHMpCi0JQGVjaG8gJiMzNDskKHRlc3RjYXNlLXRhcmdldHMpJiMzNDsKLQkkKENDKSAkKENGTEFHUykgLW8gJEAgJF4gJChMREZMQUdTKQomIzQzOwkkKGNhbGwgbXNnLEJJTkFSWSwsJEApCiYjNDM7CSQoUSkkKENDKSAkKENGTEFHUykgLW8gJEAgJF4gJChMREZMQUdTKQogCiAuREVGQVVMVF9HT0FMIDo9IGFsbAogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5OTQxCgkJCQkJCQlvdXRwdXQ6IDg2CgkJCQkJCQl0aG91Z2h0czogMTAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBwYXRjaCBhbmQgZGV0ZXJtaW5lIGlmIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIEZpcnN0LCBJJiMzOTtsbCBleGFtaW5lIHRoZSBkaWZmIHRvIHNlZSB3aGF0JiMzOTtzIGJlZW4gY2hhbmdlZC4gVGhlIHBhdGNoIHRvdWNoZXMgYSBudW1iZXIgb2YgZmlsZXM6ICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwLy5naXRpZ25vcmVgLCBgTWFrZWZpbGVgLCBgY29uZmlnYCwgc2V2ZXJhbCBgLmNgIGFuZCBgLmhgIGZpbGVzIHdpdGhpbiB0aGUgYGNncm91cGAgZGlyZWN0b3J5LCBpbmNsdWRpbmcgQlBGLXJlbGF0ZWQgZmlsZXMsIGB0ZXN0X21lbWNvbnRyb2wuY2AsIGFuZCBzaW1pbGFyIGBNYWtlZmlsZWAgYW5kIGAuZ2l0aWdub3JlYCBmaWxlcyB3aXRoaW4gYGhpZGAsIGBsaWIuYnBmLm1rYCBhbmQgYHNjaGVkX2V4dGAuCgpUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoZXNlIGNoYW5nZXMgaW1wYWN0IHRoZSBrZXJuZWwgcHJvcGVyIG9yIGFyZSBjb25maW5lZCB0byB1c2VyLXNwYWNlIHRvb2xzIGFuZCB0ZXN0cy4gIEkgc2VlIHRoYXQgYWxsIHRoZSBtb2RpZmllZCBmaWxlcyBhcmUgc3RyaWN0bHkgd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvLi4uYCBoaWVyYXJjaHkuICBJIGtub3cgdGhhdCYjMzk7cyBhIGtleSBpbmRpY2F0b3IuICBOb3csIGxldCBtZSByZWZlcmVuY2UgdGhlIGd1aWRlbGluZXM6IHNlY3Rpb24gMiBkaWN0YXRlcyB3aGVuIHdlIGNhbiBzYWZlbHkgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcmVsZXZhbnQgY3JpdGVyaWEgaXM6ICAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6IC4uLiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLiYjMzQ7CgpHaXZlbiB0aGlzLCBJIGhhdmUgdG8gY29uY2x1ZGUgdGhhdCBgV29ydGhGdXp6aW5nYCBpcyBgZmFsc2VgLiAgVGhlIG1vZGlmaWVkIGZpbGVzIGFyZSBhbGwgY29udGFpbmVkIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9gLCBhbmQgaXQmIzM5O3MgY2xlYXIgbm9uZSBvZiB0aGVtIHRvdWNoIHRoZSBrZXJuZWwgY29kZS4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgbGlzdCBvZiBmaWxlcyBhZ2FpbjogSSBzY2FuIHRocm91Z2ggdGhlIGZpbGVuYW1lczogYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC8uZ2l0aWdub3JlYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9NYWtlZmlsZWAsIGFuZCBzbyBvbiwgcmlnaHQgZG93biB0byB0aGUgbGFzdCBmaWxlLCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L01ha2VmaWxlYC4gWWVwLCBldmVyeSBzaW5nbGUgZmlsZSBpcyBpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2AgZGlyZWN0b3J5LiBObyBrZXJuZWwgY29kZSBpcyBtb2RpZmllZC4gTm8gY29kZSBhZmZlY3RpbmcgYW55IG9mIHRoZSBjb3JlIGtlcm5lbCBjb21wb25lbnRzIChsaWtlIGBtbS9gLCBga2VybmVsL2AsIGBkcml2ZXJzL2AsIGBmcy9gLCBgbmV0L2AsIG9yIGBpbmNsdWRlL2ApIGlzIHRvdWNoZWQuCgpUaGVyZWZvcmUsIGJlY2F1c2UgYWxsIHRoZSBtb2RpZmljYXRpb25zIGFyZSBsaW1pdGVkIHRvIHVzZXItc3BhY2Ugc2VsZnRlc3RzIGFuZCB0aGVpciBidWlsZCBpbmZyYXN0cnVjdHVyZSwgYW5kIHRoZXkgZG9uJiMzOTt0IGFmZmVjdCB0aGUga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBtb2R1bGVzLCB0aGUgYXBwcm9wcmlhdGUgcmVzcG9uc2UgaXM6CgotICAgYFdvcnRoRnV6emluZzogZmFsc2VgCi0gICBgUmVhc29uaW5nOiBBbGwgY2hhbmdlcyBhcmUgcmVzdHJpY3RlZCB0byB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyBhbmQgc2VsZnRlc3QgYnVpbGQgaW5mcmFzdHJ1Y3R1cmUgdW5kZXIgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvLCB3aGljaCBkbyBub3QgbW9kaWZ5IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLmAKLSAgIGBGb2N1c1N5bWJvbHM6IFtdYAotICAgYEVuYWJsZUNvbmZpZ3M6IFtdYAoKSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2Agbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdCBoYXJuZXNzZXMsIHNlbGZ0ZXN0IEJQRiB0ZXN0IHByb2dyYW1zLCBhbmQgYnVpbGQgaW5mcmFzdHJ1Y3R1cmUgd2l0aGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzLy4gTm9uZSBvZiB0aGUgY2hhbmdlcyBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMsIHNvIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGV4Y2x1c2l2ZWx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3QgaGFybmVzc2VzLCBzZWxmdGVzdCBCUEYgdGVzdCBwcm9ncmFtcywgYW5kIGJ1aWxkIGluZnJhc3RydWN0dXJlIHdpdGhpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8uIE5vbmUgb2YgdGhlIGNoYW5nZXMgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLCBzbyBmdXp6aW5nIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDIzOjU4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMFQyMzo1ODo0NC44ODEwNzk2NTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTk2NjY5ODc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdCBoYXJuZXNzZXMsIHNlbGZ0ZXN0IEJQRiB0ZXN0IHByb2dyYW1zLCBhbmQgYnVpbGQgaW5mcmFzdHJ1Y3R1cmUgd2l0aGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzLy4gTm9uZSBvZiB0aGUgY2hhbmdlcyBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMsIHNvIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIzOjU4OjQ0Ljg4MTA4NzgyNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA0ODYyMzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzA3YjRiNWJhZmJlNmUxZWU4MjRjODJkM2JhYmEwMWU4OTg5NDAwMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAxMCAyMzo1ODo0NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC8uZ2l0aWdub3JlXFxuaW5kZXggOTUyZTQ0NDhiZjA3MC4uNTYxYTNlODkxYjk4YyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvLmdpdGlnbm9yZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC8uZ2l0aWdub3JlXFxuQEAgLTYsNyArNiwxNSBAQCB0ZXN0X2ZyZWV6ZXJcXG4gdGVzdF9odWdldGxiX21lbWNnXFxuIHRlc3Rfa2lsbFxcbiB0ZXN0X2ttZW1cXG4rdGVzdF9tZW1jZ19zdGF0X2Nyb3NzX2NwdVxcbiB0ZXN0X21lbWNvbnRyb2xcXG4gdGVzdF9waWRzXFxuIHRlc3RfenN3YXBcXG4gd2FpdF9pbm90aWZ5XFxuKyMgQXJ0aWZhY3RzIGdlbmVyYXRlZCBieSBsaWIuYnBmLm1rXFxuKy90b29sc1xcbisvaG9zdC10b29sc1xcbisqLmJwZi5vXFxuKyouYnBmLmRcXG4rKi5saW5rZWQqLm9cXG4rKi5za2VsLmhcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL01ha2VmaWxlXFxuaW5kZXggZTAxNTg0YzIxODlhYy4uY2I5OTliYzJjODc1ZSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvTWFrZWZpbGVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvTWFrZWZpbGVcXG5AQCAtMjAsOSArMjAsNDYgQEAgVEVTVF9HRU5fUFJPR1MgKz0gdGVzdF96c3dhcFxcbiBcXG4gTE9DQUxfSERSUyArPSAkKHNlbGZkaXIpL2Nsb25lMy9jbG9uZTNfc2VsZnRlc3RzLmggJChzZWxmZGlyKS9waWRmZC9waWRmZC5oXFxuIFxcbisjIFJlc29sdmUgQ2xhbmcgZWFybHkgc28gdGhlIG9wdGlvbmFsIEJQRiB0ZXN0IGNhbiBiZSBzZWxlY3RlZC5cXG4raWZuZXEgKCQoZmlsdGVyICUvLCQoTExWTSkpLClcXG4rQ0xBTkcgPz0gJChMTFZNKWNsYW5nXFxuK2Vsc2VcXG4rQ0xBTkcgPz0gY2xhbmckKGZpbHRlciAtJSwkKExMVk0pKVxcbitlbmRpZlxcbitSRUFERUxGID89ICQoQ1JPU1NfQ09NUElMRSlyZWFkZWxmXFxuK1ZNTElOVVhfQlRGX1BBVEhTID89ICQoaWYgJChPKSwkKE8pL3ZtbGludXgpXFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHQgICAgICQoaWYgJChLQlVJTERfT1VUUFVUKSwkKEtCVUlMRF9PVVRQVVQpL3ZtbGludXgpXFx0XFxcXFxcbitcXHRcXHQgICAgIC4uLy4uLy4uLy4uL3ZtbGludXhcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdCAgICAgL3N5cy9rZXJuZWwvYnRmL3ZtbGludXhcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdFxcdCAgICAgL2Jvb3Qvdm1saW51eC0kKHNoZWxsIHVuYW1lIC1yKVxcbisjIElnbm9yZSBFTEYgaW1hZ2VzIHdpdGhvdXQgLkJURjsgcmF3IHN5c2ZzIEJURiBuZWVkcyBubyBjaGVjay5cXG4rVk1MSU5VWF9CVEYgPz0gJChhYnNwYXRoICQoZmlyc3R3b3JkICQoZm9yZWFjaCB2LCQod2lsZGNhcmQgJChWTUxJTlVYX0JURl9QQVRIUykpLFxcXFxcXG4rXFx0XFx0ICQoaWYgJChmaWx0ZXIgL3N5cy9rZXJuZWwvYnRmLyUsJCh2KSksJCh2KSxcXFxcXFxuK1xcdFxcdCAgICQoaWYgJChzaGVsbCAkKFJFQURFTEYpIC1TIFxcXCIkKHYpXFxcIiAyXFx1MDAzZS9kZXYvbnVsbCB8IGdyZXAgLUYgLkJURiksJCh2KSkpKSkpXFxuKyMgQWNjZXB0IGVpdGhlciBhIHN1cHBsaWVkIGhlYWRlciBvciB1c2FibGUgQlRGLlxcbitIQVZFX0JQRiA6PSAkKGFuZCAkKG9yICQoVk1MSU5VWF9IKSwkKFZNTElOVVhfQlRGKSksXFx0XFx0XFx0XFxcXFxcbitcXHRcXHQgICQoc2hlbGwgY29tbWFuZCAtdiAkKENMQU5HKSAyXFx1MDAzZS9kZXYvbnVsbCkpXFxuK1xcbitpZm5lcSAoJChIQVZFX0JQRiksKVxcbitURVNUX0dFTl9QUk9HUyArPSB0ZXN0X21lbWNnX3N0YXRfY3Jvc3NfY3B1XFxuK0JQRl9TUkNTIDo9IG1lbWNnX3N0YXRfY3Jvc3NfY3B1LmJwZi5jXFxuKyMgUmVwbGFjZSBsaWIubWsncyBsaW5rIHJ1bGUgYmVsb3cuXFxuK09WRVJSSURFX1RBUkdFVFMgOj0gMVxcbitlbmRpZlxcbitcXG4gaW5jbHVkZSAuLi9saWIubWtcXG4gaW5jbHVkZSBsaWIvbGliY2dyb3VwLm1rXFxuIFxcbitpZm5lcSAoJChIQVZFX0JQRiksKVxcbitpbmNsdWRlIC4uL2xpYi5icGYubWtcXG4rXFxuKyMgUmVzdG9yZSBsaWIubWsncyBydWxlIGZvciBub24tQlBGIHRlc3RzLlxcbitMT0NBTF9IRFJTICs9ICQoc2VsZmRpcikva3NlbGZ0ZXN0X2hhcm5lc3MuaCAkKHNlbGZkaXIpL2tzZWxmdGVzdC5oXFxuKyQoT1VUUFVUKS8lOiAlLmMgJChMT0NBTF9IRFJTKVxcbitcXHQkKGNhbGwgbXNnLENDLCwkQClcXG4rXFx0JChRKSQoTElOSy5jKSAkKGZpbHRlci1vdXQgJChMT0NBTF9IRFJTKSwkXikgJChMRExJQlMpIC1vICRAXFxuK2VuZGlmXFxuK1xcbiAkKE9VVFBVVCkvdGVzdF9jb3JlOiAkKExJQkNHUk9VUF9PKVxcbiAkKE9VVFBVVCkvdGVzdF9jcHU6ICQoTElCQ0dST1VQX08pXFxuICQoT1VUUFVUKS90ZXN0X2NwdXNldDogJChMSUJDR1JPVVBfTylcXG5AQCAtMzMsMyArNzAsMTIgQEAgJChPVVRQVVQpL3Rlc3Rfa21lbTogJChMSUJDR1JPVVBfTylcXG4gJChPVVRQVVQpL3Rlc3RfbWVtY29udHJvbDogJChMSUJDR1JPVVBfTylcXG4gJChPVVRQVVQpL3Rlc3RfcGlkczogJChMSUJDR1JPVVBfTylcXG4gJChPVVRQVVQpL3Rlc3RfenN3YXA6ICQoTElCQ0dST1VQX08pXFxuK1xcbitpZm5lcSAoJChIQVZFX0JQRiksKVxcbisjIEtlZXAgaW4tdHJlZSBVQVBJIGhlYWRlcnMgcHJpdmF0ZSB0byB0aGUgQlBGIHRlc3QuXFxuKyQoT1VUUFVUKS90ZXN0X21lbWNnX3N0YXRfY3Jvc3NfY3B1OiBwcml2YXRlIENGTEFHUyArPSAtSSQodG9wX3NyY2RpcikvdG9vbHMvaW5jbHVkZS91YXBpXFxuKyMgTGluayBjZ3JvdXBfdXRpbCBhbmQgdGhlIHNrZWxldG9uIGFnYWluc3QgdGhlIGluLXRyZWUgbGliYnBmLlxcbiskKE9VVFBVVCkvdGVzdF9tZW1jZ19zdGF0X2Nyb3NzX2NwdTogdGVzdF9tZW1jZ19zdGF0X2Nyb3NzX2NwdS5jIFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0JChCUEZfU0tFTFMpICQoTElCQ0dST1VQX08pICQoQlBGT0JKKVxcbitcXHQkKGNhbGwgYnBmX2xpbmssJEAsJFxcdTAwM2MgJChMSUJDR1JPVVBfTykpXFxuK2VuZGlmXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvY29uZmlnXFxuaW5kZXggMzlmOTc5NjkwZGQzYi4uMWY1ODVlZDlhNTk2NyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvY29uZmlnXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2NvbmZpZ1xcbkBAIC00LDMgKzQsOCBAQCBDT05GSUdfQ0dST1VQX0ZSRUVaRVI9eVxcbiBDT05GSUdfQ0dST1VQX1NDSEVEPXlcXG4gQ09ORklHX01FTUNHPXlcXG4gQ09ORklHX1BBR0VfQ09VTlRFUj15XFxuK0NPTkZJR19CUEY9eVxcbitDT05GSUdfQlBGX1NZU0NBTEw9eVxcbitDT05GSUdfQlBGX0VWRU5UUz15XFxuK0NPTkZJR19ERUJVR19JTkZPX0JURj15XFxuK0NPTkZJR19ERUJVR19JTkZPX0RXQVJGND15XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9saWIvY2dyb3VwX3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9saWIvY2dyb3VwX3V0aWwuY1xcbmluZGV4IDI1OTZjMTJjZDg2NDUuLmNhMTJkNzk0YzA5MjEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9jZ3JvdXBfdXRpbC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9jZ3JvdXBfdXRpbC5jXFxuQEAgLTU0LDYgKzU0LDg4IEBAIHNzaXplX3Qgd3JpdGVfdGV4dChjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNzaXplX3QgbGVuKVxcbiBcXHRyZXR1cm4gbGVuIFxcdTAwM2MgMCA/IC1lcnJubyA6IGxlbjtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGNnX2dldF9pZCAtIHJldHVybiBhIGNncm91cCdzIGtlcm5mcyBJRFxcbisgKiBAY2dyb3VwOiBhYnNvbHV0ZSBjZ3JvdXAgcGF0aFxcbisgKlxcbisgKiBUaGlzIGlzIGNncnAtXFx1MDAzZWtuLVxcdTAwM2VpZCwgbm90IHN0X2luby5cXG4rICpcXG4rICogUmV0dXJuOiBJRCBvciAwIG9uIGZhaWx1cmUuXFxuKyAqL1xcbit1bnNpZ25lZCBsb25nIGxvbmcgY2dfZ2V0X2lkKGNvbnN0IGNoYXIgKmNncm91cClcXG4re1xcbitcXHR1bmlvbiB7XFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgbG9uZyBpZDtcXG4rXFx0XFx0dW5zaWduZWQgY2hhciByYXdbOF07XFxuK1xcdH0gaGFuZGxlO1xcbitcXHRzdHJ1Y3QgZmlsZV9oYW5kbGUgKmZocCwgKmZocDI7XFxuK1xcdGludCBtb3VudF9pZCwgZmhzaXplLCBlcnI7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbG9uZyByZXQgPSAwO1xcbitcXG4rXFx0ZmhzaXplID0gc2l6ZW9mKCpmaHApO1xcbitcXHRmaHAgPSBjYWxsb2MoMSwgZmhzaXplKTtcXG4rXFx0aWYgKCFmaHApXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0LyogVGhlIGZhaWxlZCBwcm9iZSByZXBvcnRzIHRoZSBjZ3JvdXBmcyBoYW5kbGUgc2l6ZS4gKi9cXG4rXFx0ZXJyID0gbmFtZV90b19oYW5kbGVfYXQoQVRfRkRDV0QsIGNncm91cCwgZmhwLCBcXHUwMDI2bW91bnRfaWQsIDApO1xcbitcXHRpZiAoZXJyIFxcdTAwM2U9IDAgfHwgZmhwLVxcdTAwM2VoYW5kbGVfYnl0ZXMgIT0gOClcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRmaHNpemUgPSBzaXplb2YoKmZocCkgKyBmaHAtXFx1MDAzZWhhbmRsZV9ieXRlcztcXG4rXFx0ZmhwMiA9IHJlYWxsb2MoZmhwLCBmaHNpemUpO1xcbitcXHRpZiAoIWZocDIpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRmaHAgPSBmaHAyO1xcbitcXG4rXFx0aWYgKG5hbWVfdG9faGFuZGxlX2F0KEFUX0ZEQ1dELCBjZ3JvdXAsIGZocCwgXFx1MDAyNm1vdW50X2lkLCAwKSBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0bWVtY3B5KGhhbmRsZS5yYXcsIGZocC1cXHUwMDNlZl9oYW5kbGUsIDgpO1xcbitcXHRyZXQgPSBoYW5kbGUuaWQ7XFxuK291dDpcXG4rXFx0ZnJlZShmaHApO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisvKipcXG4rICogY2dfdG91Y2hfcGFnZXMgLSBmYXVsdCBldmVyeSBwYWdlIGluIGEgcmVnaW9uXFxuKyAqIEBidWY6IHN0YXJ0IG9mIHRoZSByZWdpb25cXG4rICogQHNpemU6IGxlbmd0aCBvZiB0aGUgcmVnaW9uIGluIGJ5dGVzXFxuKyAqXFxuKyAqIFBhZ2VzIGFyZSBjaGFyZ2VkIHRvIHRoZSBjYWxsZXIncyBjZ3JvdXAgb24gaXRzIGN1cnJlbnQgQ1BVLlxcbisgKi9cXG4rdm9pZCBjZ190b3VjaF9wYWdlcyhjaGFyICpidWYsIHNpemVfdCBzaXplKVxcbit7XFxuK1xcdGxvbmcgcGFnZV9zaXplID0gc3lzY29uZihfU0NfUEFHRVNJWkUpO1xcbitcXHRjaGFyICpwdHI7XFxuK1xcbitcXHRpZiAocGFnZV9zaXplIFxcdTAwM2M9IDApXFxuK1xcdFxcdHBhZ2Vfc2l6ZSA9IEJVRl9TSVpFO1xcbitcXG4rXFx0Zm9yIChwdHIgPSBidWY7IHB0ciBcXHUwMDNjIGJ1ZiArIHNpemU7IHB0ciArPSBwYWdlX3NpemUpXFxuK1xcdFxcdCpwdHIgPSAwO1xcbit9XFxuK1xcbisvKipcXG4rICogY2dfYWxsb2NfYW5vbiAtIGFsbG9jYXRlIGFuZCBmYXVsdCBhbm9ueW1vdXMgbWVtb3J5XFxuKyAqIEBzaXplOiBieXRlcyB0byBhbGxvY2F0ZVxcbisgKlxcbisgKiBSZXR1cm46IFJlZ2lvbiB0byBmcmVlKCksIG9yIE5VTEwuXFxuKyAqL1xcbitjaGFyICpjZ19hbGxvY19hbm9uKHNpemVfdCBzaXplKVxcbit7XFxuK1xcdGNoYXIgKmJ1ZiA9IG1hbGxvYyhzaXplKTtcXG4rXFxuK1xcdGlmICghYnVmKSB7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwibWFsbG9jKCkgZmFpbGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdGNnX3RvdWNoX3BhZ2VzKGJ1Ziwgc2l6ZSk7XFxuK1xcdHJldHVybiBidWY7XFxuK31cXG4rXFxuIGNoYXIgKmNnX25hbWUoY29uc3QgY2hhciAqcm9vdCwgY29uc3QgY2hhciAqbmFtZSlcXG4ge1xcbiBcXHRzaXplX3QgbGVuID0gc3RybGVuKHJvb3QpICsgc3RybGVuKG5hbWUpICsgMjtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9pbmNsdWRlL2Nncm91cF91dGlsLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbGliL2luY2x1ZGUvY2dyb3VwX3V0aWwuaFxcbmluZGV4IDhlYmIyYjRkNGVjMDcuLjY0MDc3ODAxODc4MDcgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9pbmNsdWRlL2Nncm91cF91dGlsLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbGliL2luY2x1ZGUvY2dyb3VwX3V0aWwuaFxcbkBAIC01NCw2ICs1NCw5IEBAIGV4dGVybiBzc2l6ZV90IHdyaXRlX3RleHQoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzc2l6ZV90IGxlbik7XFxuIGV4dGVybiBpbnQgY2dfZmluZF9jb250cm9sbGVyX3Jvb3QoY2hhciAqcm9vdCwgc2l6ZV90IGxlbiwgY29uc3QgY2hhciAqY29udHJvbGxlcik7XFxuIGV4dGVybiBpbnQgY2dfZmluZF91bmlmaWVkX3Jvb3QoY2hhciAqcm9vdCwgc2l6ZV90IGxlbiwgYm9vbCAqbnNkZWxlZ2F0ZSk7XFxuIGV4dGVybiBjaGFyICpjZ19uYW1lKGNvbnN0IGNoYXIgKnJvb3QsIGNvbnN0IGNoYXIgKm5hbWUpO1xcbitleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGNnX2dldF9pZChjb25zdCBjaGFyICpjZ3JvdXApO1xcbitleHRlcm4gdm9pZCBjZ190b3VjaF9wYWdlcyhjaGFyICpidWYsIHNpemVfdCBzaXplKTtcXG4rZXh0ZXJuIGNoYXIgKmNnX2FsbG9jX2Fub24oc2l6ZV90IHNpemUpO1xcbiBleHRlcm4gY2hhciAqY2dfbmFtZV9pbmRleGVkKGNvbnN0IGNoYXIgKnJvb3QsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBpbmRleCk7XFxuIGV4dGVybiBjaGFyICpjZ19jb250cm9sKGNvbnN0IGNoYXIgKmNncm91cCwgY29uc3QgY2hhciAqY29udHJvbCk7XFxuIGV4dGVybiBpbnQgY2dfY3JlYXRlKGNvbnN0IGNoYXIgKmNncm91cCk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9tZW1jZ19zdGF0X2Nyb3NzX2NwdS5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9tZW1jZ19zdGF0X2Nyb3NzX2NwdS5icGYuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZmZmM2I5MjU2YWEzOVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbWVtY2dfc3RhdF9jcm9zc19jcHUuYnBmLmNcXG5AQCAtMCwwICsxLDEwMSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXFxuKyNkZWZpbmUgQlBGX05PX0tGVU5DX1BST1RPVFlQRVNcXG4rI2luY2x1ZGUgXFx1MDAzY3ZtbGludXguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9jb3JlX3JlYWQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcIm1lbWNnX3N0YXRfY3Jvc3NfY3B1LmhcXFwiXFxuK1xcbitjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG4rXFxuKy8qIEVuc3VyZSB0aGUgdXBwZXItYm91bmQgY2hlY2tzIGFsc28gcmVqZWN0IG5lZ2F0aXZlIEJQRiBhcmd1bWVudHMuICovXFxuK19TdGF0aWNfYXNzZXJ0KChlbnVtIHZtX2V2ZW50X2l0ZW0pLTEgXFx1MDAzZT0gTlJfVk1fRVZFTlRfSVRFTVMsXFxuK1xcdCAgICAgICBcXFwibmVnYXRpdmUgdm1fZXZlbnRfaXRlbSBtdXN0IGZhaWwgdGhlIGJvdW5kcyBjaGVja1xcXCIpO1xcbitfU3RhdGljX2Fzc2VydCgoZW51bSBtZW1jZ19tZW1vcnlfZXZlbnQpLTEgXFx1MDAzZT0gTUVNQ0dfTlJfTUVNT1JZX0VWRU5UUyxcXG4rXFx0ICAgICAgIFxcXCJuZWdhdGl2ZSBtZW1jZ19tZW1vcnlfZXZlbnQgbXVzdCBmYWlsIHRoZSBib3VuZHMgY2hlY2tcXFwiKTtcXG4rXFxuKy8qIERlY2xhcmUga2Z1bmNzIHRoYXQgbWF5IGJlIGFic2VudCBmcm9tIHRoZSBidWlsZC10aW1lIHZtbGludXguaC4gKi9cXG4rc3RydWN0IG1lbV9jZ3JvdXAgKmJwZl9nZXRfbWVtX2Nncm91cChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKSBfX2tzeW07XFxuK3ZvaWQgYnBmX3B1dF9tZW1fY2dyb3VwKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykgX19rc3ltO1xcbit2b2lkIGJwZl9tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykgX19rc3ltO1xcbit1bnNpZ25lZCBsb25nIGJwZl9tZW1fY2dyb3VwX3BhZ2Vfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KSBfX2tzeW07XFxuK3Vuc2lnbmVkIGxvbmcgYnBmX21lbV9jZ3JvdXBfdm1fZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGVudW0gdm1fZXZlbnRfaXRlbSBldmVudCkgX19rc3ltO1xcbitcXG4rLyogVXNlcnNwYWNlIHJlc2l6ZXMgdGhpcyBjZ3JvdXAtSUQgbWFwIGJlZm9yZSBsb2FkLiAqL1xcbitzdHJ1Y3Qge1xcbitcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0hBU0gpO1xcbitcXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xcbitcXHRfX3R5cGUoa2V5LCBfX3U2NCk7XFxuK1xcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IG1lbWNnX3N0YXRfc25hcHNob3QpO1xcbit9IHJlc3VsdHMgU0VDKFxcXCIubWFwc1xcXCIpO1xcbitcXG4rLyogSXNvbGF0ZSBjYXBhYmlsaXR5IGZhaWx1cmVzIGZyb20gdmVyaWZpZXIgZmFpbHVyZXMgaW4gdGhlIHRlc3QgcHJvZ3JhbS4gKi9cXG4rU0VDKFxcXCJpdGVyLnMvY2dyb3VwXFxcIilcXG4raW50IG1lbWNnX2tmdW5jc19wcm9iZShzdHJ1Y3QgYnBmX2l0ZXJfX2Nncm91cCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBjZ3JvdXAgKmNncnAgPSBjdHgtXFx1MDAzZWNncm91cDtcXG4rXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbitcXG4rXFx0aWYgKCFjZ3JwKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdG1lbWNnID0gYnBmX2dldF9tZW1fY2dyb3VwKFxcdTAwMjZjZ3JwLVxcdTAwM2VzZWxmKTtcXG4rXFx0aWYgKCFtZW1jZylcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRicGZfbWVtX2Nncm91cF9mbHVzaF9zdGF0cyhtZW1jZyk7XFxuK1xcdGJwZl9tZW1fY2dyb3VwX3BhZ2Vfc3RhdGUobWVtY2csIDApO1xcbitcXHRicGZfbWVtX2Nncm91cF92bV9ldmVudHMobWVtY2csIDApO1xcbitcXHRicGZfcHV0X21lbV9jZ3JvdXAobWVtY2cpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyogU2xlZXBhYmxlIGl0ZXJhdG9yOiBmbHVzaCB0aGUgcm9vdCBvbmNlLCB0aGVuIHNuYXBzaG90IGVhY2ggY2dyb3VwLiAqL1xcbitTRUMoXFxcIml0ZXIucy9jZ3JvdXBcXFwiKVxcbitpbnQgY2dyb3VwX21lbWNnX3N0YXRfY3Jvc3NfY3B1KHN0cnVjdCBicGZfaXRlcl9fY2dyb3VwICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IGNncm91cCAqY2dycCA9IGN0eC1cXHUwMDNlY2dyb3VwO1xcbitcXHRzdHJ1Y3QgbWVtY2dfc3RhdF9zbmFwc2hvdCBzbmFwID0ge307XFxuK1xcdHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3M7XFxuK1xcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG4rXFx0aW50IGlkeF9hbm9uLCBpZHhfZmlsZSwgaWR4X3NobWVtLCBpZHhfZm1hcHBlZCwgaWR4X3BnZmF1bHQ7XFxuK1xcdF9fdTY0IGNnX2lkO1xcbitcXG4rXFx0LyogSWdub3JlIHRoZSBmaW5hbCBwb3N0LXByb2Nlc3NpbmcgY2FsbC4gKi9cXG4rXFx0aWYgKCFjZ3JwKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGNzcyA9IFxcdTAwMjZjZ3JwLVxcdTAwM2VzZWxmO1xcbitcXHRtZW1jZyA9IGJwZl9nZXRfbWVtX2Nncm91cChjc3MpO1xcbitcXHRpZiAoIW1lbWNnKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdC8qIERFU0NFTkRBTlRTX1BSRSB2aXNpdHMgdGhlIHN1YnRyZWUgcm9vdCBmaXJzdC4gKi9cXG4rXFx0aWYgKGN0eC1cXHUwMDNlbWV0YS1cXHUwMDNlc2VxX251bSA9PSAwKVxcbitcXHRcXHRicGZfbWVtX2Nncm91cF9mbHVzaF9zdGF0cyhtZW1jZyk7XFxuK1xcbitcXHRjZ19pZCA9IEJQRl9DT1JFX1JFQUQoY2dycCwga24sIGlkKTtcXG4rXFx0c25hcC5jZ3JvdXBfaWQgPSBjZ19pZDtcXG4rXFxuK1xcdGlkeF9hbm9uID0gYnBmX2NvcmVfZW51bV92YWx1ZShlbnVtIG5vZGVfc3RhdF9pdGVtLCBOUl9BTk9OX01BUFBFRCk7XFxuK1xcdGlkeF9maWxlID0gYnBmX2NvcmVfZW51bV92YWx1ZShlbnVtIG5vZGVfc3RhdF9pdGVtLCBOUl9GSUxFX1BBR0VTKTtcXG4rXFx0aWR4X3NobWVtID0gYnBmX2NvcmVfZW51bV92YWx1ZShlbnVtIG5vZGVfc3RhdF9pdGVtLCBOUl9TSE1FTSk7XFxuK1xcdGlkeF9mbWFwcGVkID0gYnBmX2NvcmVfZW51bV92YWx1ZShlbnVtIG5vZGVfc3RhdF9pdGVtLCBOUl9GSUxFX01BUFBFRCk7XFxuK1xcdGlkeF9wZ2ZhdWx0ID0gYnBmX2NvcmVfZW51bV92YWx1ZShlbnVtIHZtX2V2ZW50X2l0ZW0sIFBHRkFVTFQpO1xcbitcXG4rXFx0c25hcC5hbm9uID0gYnBmX21lbV9jZ3JvdXBfcGFnZV9zdGF0ZShtZW1jZywgaWR4X2Fub24pO1xcbitcXHRzbmFwLmZpbGUgPSBicGZfbWVtX2Nncm91cF9wYWdlX3N0YXRlKG1lbWNnLCBpZHhfZmlsZSk7XFxuK1xcdHNuYXAuc2htZW0gPSBicGZfbWVtX2Nncm91cF9wYWdlX3N0YXRlKG1lbWNnLCBpZHhfc2htZW0pO1xcbitcXHRzbmFwLmZpbGVfbWFwcGVkID0gYnBmX21lbV9jZ3JvdXBfcGFnZV9zdGF0ZShtZW1jZywgaWR4X2ZtYXBwZWQpO1xcbitcXHRzbmFwLnBnZmF1bHQgPSBicGZfbWVtX2Nncm91cF92bV9ldmVudHMobWVtY2csIGlkeF9wZ2ZhdWx0KTtcXG4rXFxuK1xcdC8qIFJlYWQgcGFnZSBjb3VudGVycyBmcm9tIHRoZSB0cnVzdGVkIHBvaW50ZXIuICovXFxuK1xcdHNuYXAudXNhZ2VfcGFnZXMgPSBCUEZfQ09SRV9SRUFEKG1lbWNnLCBtZW1vcnkudXNhZ2UuY291bnRlcik7XFxuK1xcdHNuYXAubWF4X3BhZ2VzID0gQlBGX0NPUkVfUkVBRChtZW1jZywgbWVtb3J5Lm1heCk7XFxuK1xcbitcXHRicGZfbWFwX3VwZGF0ZV9lbGVtKFxcdTAwMjZyZXN1bHRzLCBcXHUwMDI2Y2dfaWQsIFxcdTAwMjZzbmFwLCBCUEZfQU5ZKTtcXG4rXFxuK1xcdGJwZl9wdXRfbWVtX2Nncm91cChtZW1jZyk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9tZW1jZ19zdGF0X2Nyb3NzX2NwdS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL21lbWNnX3N0YXRfY3Jvc3NfY3B1LmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmY3NWUzNDFmOGNiODNcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL21lbWNnX3N0YXRfY3Jvc3NfY3B1LmhcXG5AQCAtMCwwICsxLDE4IEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cXG4rI2lmbmRlZiBfX01FTUNHX1NUQVRfQ1JPU1NfQ1BVX0hcXG4rI2RlZmluZSBfX01FTUNHX1NUQVRfQ1JPU1NfQ1BVX0hcXG4rXFxuKy8qIEZpeGVkLXdpZHRoIHNuYXBzaG90IHNoYXJlZCBieSBCUEYgYW5kIHVzZXJzcGFjZS4gKi9cXG4rc3RydWN0IG1lbWNnX3N0YXRfc25hcHNob3Qge1xcbitcXHRfX3U2NCBjZ3JvdXBfaWQ7XFxuK1xcdF9fdTY0IGFub247XFx0XFx0LyogTlJfQU5PTl9NQVBQRUQsIGJ5dGVzICovXFxuK1xcdF9fdTY0IGZpbGU7XFx0XFx0LyogTlJfRklMRV9QQUdFUywgYnl0ZXMgKi9cXG4rXFx0X191NjQgc2htZW07XFx0XFx0LyogTlJfU0hNRU0sIGJ5dGVzICovXFxuK1xcdF9fdTY0IGZpbGVfbWFwcGVkO1xcdC8qIE5SX0ZJTEVfTUFQUEVELCBieXRlcyAqL1xcbitcXHRfX3U2NCBwZ2ZhdWx0O1xcdFxcdC8qIFBHRkFVTFQsIGNvdW50ICovXFxuK1xcdF9fdTY0IHVzYWdlX3BhZ2VzO1xcdC8qIHBhZ2VfY291bnRlciBtZW1vcnkudXNhZ2UsIGluIFBBR0VTICovXFxuK1xcdF9fdTY0IG1heF9wYWdlcztcXHQvKiBwYWdlX2NvdW50ZXIgbWVtb3J5Lm1heCwgaW4gUEFHRVMgKi9cXG4rfTtcXG4rXFxuKyNlbmRpZiAvKiBfX01FTUNHX1NUQVRfQ1JPU1NfQ1BVX0ggKi9cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfbWVtY2dfc3RhdF9jcm9zc19jcHUuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X21lbWNnX3N0YXRfY3Jvc3NfY3B1LmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjk2ZTRhNGE5NThlZGFcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfbWVtY2dfc3RhdF9jcm9zc19jcHUuY1xcbkBAIC0wLDAgKzEsNzU1IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cXG4rXFxuKy8qXFxuKyAqIENvbXBhcmUgbWVtY2cgQlBGIGtmdW5jcyB3aXRoIG1lbW9yeS5zdGF0IG92ZXIgYSBjaGFyZ2VkIHN1YnRyZWUuIENoYXJnZXJzXFxuKyAqIHNwcmVhZCBhbm9ueW1vdXMgbWVtb3J5IGFjcm9zcyBDUFVzIGFuZCBob2xkIGl0LiBSZWFkIEJQRiBmaXJzdCBzbyBpdHMgZmx1c2hcXG4rICogaXMgbm90IGNvbnN1bWVkIGJ5IG1lbW9yeS5zdGF0LCB0aGVuIHJlcXVpcmUgdHdvIGZpbGUgc2FtcGxlcyB0byBicmFja2V0IGVhY2hcXG4rICogQlBGIHZhbHVlLiBFYWNoIGxlYWYgbXVzdCBjb3ZlciBpdHMgY2hhcmdlOyByb290IGFub24gbXVzdCBlcXVhbCB0aGUgbGVhZiBzdW0uXFxuKyAqL1xcbisjZGVmaW5lIF9HTlVfU09VUkNFXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpbWl0cy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZmNudGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbWl0cy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW50LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzY2hlZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGxpYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RyaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy93YWl0LmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvbGliYnBmLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnRmLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwia3NlbGZ0ZXN0LmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJjZ3JvdXBfdXRpbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwibWVtY2dfc3RhdF9jcm9zc19jcHUuaFxcXCJcXG4rI2luY2x1ZGUgXFxcIm1lbWNnX3N0YXRfY3Jvc3NfY3B1LnNrZWwuaFxcXCJcXG4rXFxuKyNkZWZpbmUgU1VCVFJFRV9OQU1FXFx0XFx0XFxcIm1jZ194Y3B1XFxcIlxcbitcXG4rI2RlZmluZSBNRU1DR19DSEFSR0VfQkFUQ0hcXHQ2NFxcbitcXG4rI2RlZmluZSBGTFVTSF9NQVJHSU5cXHRcXHQyXFxuK1xcbisvKiBCb3VuZCB0b3RhbCBjaGFyZ2Ugb24gbGFyZ2Ugc3lzdGVtcy4gKi9cXG4rI2RlZmluZSBNQVhfVE9UQUxfQ0hBUkdFXFx0KDI1NlVMIFxcdTAwM2NcXHUwMDNjIDIwKVxcbitcXG4rLyogQm91bmQgdGhlIENQVXMgdXNlZCBieSBlYWNoIGxlYWYuICovXFxuKyNkZWZpbmUgTUFYX0NQVVNfUEVSX0xFQUZcXHQxNlxcbitcXG4rI2RlZmluZSBDSEFSR0VfV0FJVF9SRVRSSUVTXFx0NTAwXFxuK1xcbitzdGF0aWMgY2hhciByb290W1BBVEhfTUFYXTtcXG4rc3RhdGljIGNoYXIgKnN1YnRyZWVfcm9vdDtcXG4rc3RhdGljIGxvbmcgcGFnZV9zaXplO1xcbitcXG4rLyogY2dyb3VwZnMgdmFsdWVzIGluIGJ5dGVzLiAqL1xcbitzdHJ1Y3QgZmlsZV9zbmFwIHtcXG4rXFx0bG9uZyBhbm9uLCBmaWxlLCBzaG1lbSwgZmlsZV9tYXBwZWQsIHBnZmF1bHQ7XFxuK1xcdGxvbmcgY3VycmVudDtcXG4rfTtcXG4rXFxuK3N0cnVjdCBjZ19ub2RlIHtcXG4rXFx0Y2hhciBwYXRoW1BBVEhfTUFYXTtcXG4rXFx0dW5zaWduZWQgbG9uZyBsb25nIGlkO1xcbitcXHRib29sIGlzX2xlYWY7XFx0XFx0XFx0LyogaG9sZHMgYSBjaGFyZ2Ugb2YgaXRzIG93biAqL1xcbitcXHRsb25nIHByZXZpb3VzX2N1cnJlbnQ7XFx0XFx0LyogcHJldmlvdXMgbWVtb3J5LmN1cnJlbnQgcG9sbCAqL1xcbitcXHRzdHJ1Y3QgbWVtY2dfc3RhdF9zbmFwc2hvdCBicGY7XFx0LyogcmVhZCB0aHJvdWdoIHRoZSBrZnVuY3MgKi9cXG4rXFx0c3RydWN0IGZpbGVfc25hcCBmaWxlWzJdO1xcdC8qIHBvc3QtQlBGIGNncm91cGZzIHNhbXBsZXMgKi9cXG4rfTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgY2dfbm9kZSAqbm9kZXM7XFx0LyogREZTIG9yZGVyOiBhIHBhcmVudCBwcmVjZWRlcyBpdHMgY2hpbGRyZW4gKi9cXG4rc3RhdGljIGludCBuX25vZGVzO1xcbitzdGF0aWMgaW50IG5fbGVhdmVzO1xcbitcXG4rLyogLS0tLSBDUFVzIHRoaXMgdGVzdCBtYXkgcnVuIG9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXFxuK1xcbitzdGF0aWMgY3B1X3NldF90IGFsbG93ZWRfY3B1cztcXG4rc3RhdGljIGludCBuX2NwdTtcXG4rc3RhdGljIGxvbmcgbl9vbmxpbmVfY3B1O1xcbitcXG4rc3RhdGljIGludCBudGhfY3B1KGludCBuKVxcbit7XFxuK1xcdGludCBpLCBzZWVuID0gMDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBDUFVfU0VUU0laRTsgaSsrKSB7XFxuK1xcdFxcdGlmICghQ1BVX0lTU0VUKGksIFxcdTAwMjZhbGxvd2VkX2NwdXMpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0aWYgKHNlZW4rKyA9PSBuICUgbl9jcHUpXFxuK1xcdFxcdFxcdHJldHVybiBpO1xcbitcXHR9XFxuK1xcdHJldHVybiAtMTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBwaW5fY3B1KGludCBjcHUpXFxuK3tcXG4rXFx0Y3B1X3NldF90IHNldDtcXG4rXFxuK1xcdGlmIChjcHUgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHRDUFVfWkVSTyhcXHUwMDI2c2V0KTtcXG4rXFx0Q1BVX1NFVChjcHUsIFxcdTAwMjZzZXQpO1xcbitcXHRyZXR1cm4gc2NoZWRfc2V0YWZmaW5pdHkoMCwgc2l6ZW9mKHNldCksIFxcdTAwMjZzZXQpO1xcbit9XFxuK1xcbisvKiAtLS0tIHRyZWUgY29uc3RydWN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXFxuK1xcbitzdGF0aWMgaW50IGFkZF9ub2RlKGNvbnN0IGNoYXIgKnBhdGgsIGJvb2wgaXNfbGVhZilcXG4re1xcbitcXHRzdHJ1Y3QgY2dfbm9kZSAqbiA9IFxcdTAwMjZub2Rlc1tuX25vZGVzXTtcXG4rXFxuK1xcdGlmIChjZ19jcmVhdGUocGF0aCkpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdHN0cm5jcHkobi1cXHUwMDNlcGF0aCwgcGF0aCwgc2l6ZW9mKG4tXFx1MDAzZXBhdGgpIC0gMSk7XFxuK1xcdG4tXFx1MDAzZWlkID0gY2dfZ2V0X2lkKHBhdGgpO1xcbitcXHRuLVxcdTAwM2Vpc19sZWFmID0gaXNfbGVhZjtcXG4rXFx0bi1cXHUwMDNlcHJldmlvdXNfY3VycmVudCA9IC0xO1xcbitcXHRpZiAoaXNfbGVhZilcXG4rXFx0XFx0bl9sZWF2ZXMrKztcXG4rXFx0bl9ub2RlcysrO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyogQnVpbGQgQGxldmVscyBiZWxvdyBAcGF0aDsgb25seSBsZWF2ZXMgYXJlIGNoYXJnZWQuICovXFxuK3N0YXRpYyBpbnQgYnVpbGRfY2hpbGRyZW4oY29uc3QgY2hhciAqcGF0aCwgaW50IGZhbm91dCwgaW50IGxldmVscylcXG4re1xcbitcXHRjaGFyIGNoaWxkW1BBVEhfTUFYXTtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRpZiAobGV2ZWxzID09IDApXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0LyogR2l2ZSBjaGlsZCBjZ3JvdXBzIGEgbWVtY2cuICovXFxuK1xcdGlmIChjZ193cml0ZShwYXRoLCBcXFwiY2dyb3VwLnN1YnRyZWVfY29udHJvbFxcXCIsIFxcXCIrbWVtb3J5XFxcIikpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBmYW5vdXQ7IGkrKykge1xcbitcXHRcXHRzbnByaW50ZihjaGlsZCwgc2l6ZW9mKGNoaWxkKSwgXFxcIiVzL2MlZFxcXCIsIHBhdGgsIGkpO1xcbitcXHRcXHRpZiAoYWRkX25vZGUoY2hpbGQsIGxldmVscyA9PSAxKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXHRcXHRpZiAoYnVpbGRfY2hpbGRyZW4oY2hpbGQsIGZhbm91dCwgbGV2ZWxzIC0gMSkpXFxuK1xcdFxcdFxcdHJldHVybiAtMTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHNpemVfdCB0cmVlX2NhcGFjaXR5KGludCBmYW5vdXQsIGludCBkZXB0aClcXG4re1xcbitcXHRzaXplX3QgdG90YWwgPSAxLCBsZXZlbCA9IDE7XFxuK1xcdGludCBkO1xcbitcXG4rXFx0Zm9yIChkID0gMDsgZCBcXHUwMDNjIGRlcHRoOyBkKyspIHtcXG4rXFx0XFx0bGV2ZWwgKj0gZmFub3V0O1xcbitcXHRcXHR0b3RhbCArPSBsZXZlbDtcXG4rXFx0fVxcbitcXHRyZXR1cm4gdG90YWw7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYnVpbGRfdHJlZShpbnQgZmFub3V0LCBpbnQgZGVwdGgsIGludCAqcm9vdF9mZClcXG4re1xcbitcXHRuX25vZGVzID0gMDtcXG4rXFx0bl9sZWF2ZXMgPSAwO1xcbitcXHRub2RlcyA9IGNhbGxvYyh0cmVlX2NhcGFjaXR5KGZhbm91dCwgZGVwdGgpLCBzaXplb2YoKm5vZGVzKSk7XFxuK1xcdGlmICghbm9kZXMpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdGlmIChhZGRfbm9kZShzdWJ0cmVlX3Jvb3QsIGRlcHRoID09IDApKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHQqcm9vdF9mZCA9IG9wZW4oc3VidHJlZV9yb290LCBPX1JET05MWSk7XFxuK1xcdGlmICgqcm9vdF9mZCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdHJldHVybiBidWlsZF9jaGlsZHJlbihzdWJ0cmVlX3Jvb3QsIGZhbm91dCwgZGVwdGgpO1xcbit9XFxuK1xcbisvKiBEZXN0cm95IGNoaWxkcmVuIGJlZm9yZSBwYXJlbnRzLCB0aGVuIHJlYXAgY2hhcmdlcnMuICovXFxuK3N0YXRpYyB2b2lkIGRlc3Ryb3lfdHJlZSh2b2lkKVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0aWYgKCFub2RlcylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Zm9yIChpID0gbl9ub2RlcyAtIDE7IGkgXFx1MDAzZT0gMDsgaS0tKVxcbitcXHRcXHRjZ19kZXN0cm95KG5vZGVzW2ldLnBhdGgpO1xcbitcXHRmcmVlKG5vZGVzKTtcXG4rXFx0bm9kZXMgPSBOVUxMO1xcbitcXG4rXFx0d2hpbGUgKHdhaXRwaWQoLTEsIE5VTEwsIDApIFxcdTAwM2UgMClcXG4rXFx0XFx0O1xcbit9XFxuK1xcbisvKiAtLS0tIGNyb3NzLUNQVSBjaGFyZ2UgKG9uZSBjaGlsZCBwZXIgbGVhZikgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXFxuK1xcbitzdHJ1Y3QgY2hhcmdlX2FyZ3Mge1xcbitcXHRzaXplX3QgYnl0ZXM7XFx0LyogYW5vbiB0aGlzIGxlYWYgaG9sZHMgKi9cXG4rXFx0aW50IGJhc2U7XFx0LyogaW5kZXggb2YgdGhlIGZpcnN0IENQVSB0byBmYXVsdCBvbiAqL1xcbitcXHRpbnQgaztcXHRcXHQvKiBDUFVzIHRvIHNwcmVhZCB0aGUgY2hhcmdlIG92ZXIgKi9cXG4rfTtcXG4rXFxuK3N0YXRpYyBpbnQgY2hhcmdlX2xlYWYoY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IGNoYXJnZV9hcmdzICpjYSA9IGFyZztcXG4rXFx0aW50IHBwaWQgPSBnZXRwcGlkKCk7XFxuK1xcdHNpemVfdCBwZXIsIG9mZjtcXG4rXFx0Y2hhciAqYnVmO1xcbitcXHRpbnQgajtcXG4rXFxuK1xcdGJ1ZiA9IG1hbGxvYyhjYS1cXHUwMDNlYnl0ZXMpO1xcbitcXHRpZiAoIWJ1Zikge1xcbitcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIm1hbGxvYygpIGZhaWxlZFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0fVxcbitcXG4rXFx0LyogS2VlcCBlYWNoIENQVSdzIHNsaWNlIHBhZ2UtYWxpZ25lZC4gKi9cXG4rXFx0cGVyID0gY2EtXFx1MDAzZWJ5dGVzIC8gY2EtXFx1MDAzZWsgLyBwYWdlX3NpemUgKiBwYWdlX3NpemU7XFxuK1xcbitcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgY2EtXFx1MDAzZWs7IGorKykge1xcbitcXHRcXHRvZmYgPSAoc2l6ZV90KWogKiBwZXI7XFxuK1xcdFxcdGlmIChwaW5fY3B1KG50aF9jcHUoY2EtXFx1MDAzZWJhc2UgKyBqKSkpIHtcXG4rXFx0XFx0XFx0ZnJlZShidWYpO1xcbitcXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdH1cXG4rXFx0XFx0Y2dfdG91Y2hfcGFnZXMoYnVmICsgb2ZmLFxcbitcXHRcXHRcXHQgICAgICAgaiA9PSBjYS1cXHUwMDNlayAtIDEgPyBjYS1cXHUwMDNlYnl0ZXMgLSBvZmYgOiBwZXIpO1xcbitcXHR9XFxuK1xcbitcXHR3aGlsZSAoZ2V0cHBpZCgpID09IHBwaWQpXFxuK1xcdFxcdHNsZWVwKDEpO1xcbitcXG4rXFx0ZnJlZShidWYpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBsZWFmX2NoYXJnZShzaXplX3Qgd2FudCwgaW50IGssIHNpemVfdCAqYnl0ZXMpXFxuK3tcXG4rXFx0c2l6ZV90IG1pbl9wYWdlcywgcGFnZXMsIHdhbnRfcGFnZXM7XFxuK1xcbitcXHRpZiAoKHNpemVfdCluX29ubGluZV9jcHUgXFx1MDAzZSBTSVpFX01BWCAvIEZMVVNIX01BUkdJTiAvXFxuK1xcdFxcdFxcdFxcdFxcdCBNRU1DR19DSEFSR0VfQkFUQ0gpXFxuK1xcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbitcXG4rXFx0LyogRm9yY2UgbW9yZSB0aGFuIG9uZSBwZW5kaW5nIGJhdGNoIHBlciBDUFUgYWNyb3NzIHRoZSBzdWJ0cmVlLiAqL1xcbitcXHRtaW5fcGFnZXMgPSAoc2l6ZV90KUZMVVNIX01BUkdJTiAqIE1FTUNHX0NIQVJHRV9CQVRDSCAqIG5fb25saW5lX2NwdTtcXG4rXFx0cGFnZXMgPSBtaW5fcGFnZXMgLyBuX2xlYXZlcyArICEhKG1pbl9wYWdlcyAlIG5fbGVhdmVzKTtcXG4rXFx0d2FudF9wYWdlcyA9IHdhbnQgLyBwYWdlX3NpemUgKyAhISh3YW50ICUgcGFnZV9zaXplKTtcXG4rXFx0aWYgKHBhZ2VzIFxcdTAwM2Mgd2FudF9wYWdlcylcXG4rXFx0XFx0cGFnZXMgPSB3YW50X3BhZ2VzO1xcbitcXHRpZiAocGFnZXMgXFx1MDAzYyAoc2l6ZV90KWspXFxuK1xcdFxcdHBhZ2VzID0gaztcXG4rXFxuK1xcdGlmIChwYWdlcyBcXHUwMDNlIE1BWF9UT1RBTF9DSEFSR0UgLyAoc2l6ZV90KW5fbGVhdmVzIC8gcGFnZV9zaXplKVxcbitcXHRcXHRyZXR1cm4gLUUyQklHO1xcbitcXG4rXFx0KmJ5dGVzID0gcGFnZXMgKiBwYWdlX3NpemU7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHN0YXJ0X2NoYXJnZXJzKGludCBrLCBzaXplX3QgYnl0ZXMpXFxuK3tcXG4rXFx0c3RydWN0IGNoYXJnZV9hcmdzIGNhID0geyAuYnl0ZXMgPSBieXRlcywgLmsgPSBrIH07XFxuK1xcdGxvbmcgcHJldiwgY3VyO1xcbitcXHRib29sIHJlYWR5O1xcbitcXHRpbnQgaSwgcmV0cmllcztcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuX25vZGVzOyBpKyspIHtcXG4rXFx0XFx0aWYgKCFub2Rlc1tpXS5pc19sZWFmKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0aWYgKGNnX3J1bl9ub3dhaXQobm9kZXNbaV0ucGF0aCwgY2hhcmdlX2xlYWYsIFxcdTAwMjZjYSkgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJjYW5ub3Qgc3RhcnQgYSBjaGFyZ2VyIG9uICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgICAgbm9kZXNbaV0ucGF0aCk7XFxuK1xcdFxcdFxcdHJldHVybiAtMTtcXG4rXFx0XFx0fVxcbitcXHRcXHRjYS5iYXNlICs9IGs7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFdhaXQgdW50aWwgZXZlcnkgbGVhZiBpcyBmdWxseSBjaGFyZ2VkIGFuZCBzdGFibGUuICovXFxuK1xcdGZvciAocmV0cmllcyA9IENIQVJHRV9XQUlUX1JFVFJJRVM7IHJldHJpZXM7IHJldHJpZXMtLSkge1xcbitcXHRcXHRyZWFkeSA9IHRydWU7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuX25vZGVzOyBpKyspIHtcXG4rXFx0XFx0XFx0aWYgKCFub2Rlc1tpXS5pc19sZWFmKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdFxcdGN1ciA9IGNnX3JlYWRfbG9uZyhub2Rlc1tpXS5wYXRoLCBcXFwibWVtb3J5LmN1cnJlbnRcXFwiKTtcXG4rXFx0XFx0XFx0aWYgKGN1ciBcXHUwMDNjIDApIHtcXG4rXFx0XFx0XFx0XFx0a3NmdF9wcmludF9tc2coXFxcImNhbm5vdCByZWFkICVzL21lbW9yeS5jdXJyZW50OiAlc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIG5vZGVzW2ldLnBhdGgsIHN0cmVycm9yKGVycm5vKSk7XFxuK1xcdFxcdFxcdFxcdHJldHVybiAtMTtcXG4rXFx0XFx0XFx0fVxcbitcXG4rXFx0XFx0XFx0cHJldiA9IG5vZGVzW2ldLnByZXZpb3VzX2N1cnJlbnQ7XFxuK1xcdFxcdFxcdG5vZGVzW2ldLnByZXZpb3VzX2N1cnJlbnQgPSBjdXI7XFxuK1xcdFxcdFxcdGlmIChjdXIgXFx1MDAzYyAobG9uZylieXRlcyB8fCBjdXIgIT0gcHJldilcXG4rXFx0XFx0XFx0XFx0cmVhZHkgPSBmYWxzZTtcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAocmVhZHkpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHR1c2xlZXAoREVGQVVMVF9XQUlUX0lOVEVSVkFMX1VTIC8gMTApO1xcbitcXHR9XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgbl9ub2RlczsgaSsrKSB7XFxuK1xcdFxcdGlmIChub2Rlc1tpXS5pc19sZWFmIFxcdTAwMjZcXHUwMDI2IG5vZGVzW2ldLnByZXZpb3VzX2N1cnJlbnQgXFx1MDAzYyAobG9uZylieXRlcykge1xcbitcXHRcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiJXMgcmVhY2hlZCBvbmx5ICVsZCBvZiAlenUgY2hhcmdlZCBieXRlc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIG5vZGVzW2ldLnBhdGgsIG5vZGVzW2ldLnByZXZpb3VzX2N1cnJlbnQsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBieXRlcyk7XFxuK1xcdFxcdFxcdHJldHVybiAtMTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdGtzZnRfcHJpbnRfbXNnKFxcXCJtZW1vcnkuY3VycmVudCBkaWQgbm90IHNldHRsZSBiZWZvcmUgdGhlIHRpbWVvdXRcXFxcblxcXCIpO1xcbitcXHRyZXR1cm4gLTE7XFxuK31cXG4rXFxuKy8qIC0tLS0gdGhlIHR3byByZWFkZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cXG4rXFxuKy8qIEZsdXNoIHRoZSBzdWJ0cmVlIGFuZCBjb2xsZWN0IGVhY2ggY2dyb3VwJ3Mga2Z1bmMgdmFsdWVzLiAqL1xcbitzdGF0aWMgaW50IHJlYWRfYnBmKGludCByb290X2ZkKVxcbit7XFxuK1xcdERFQ0xBUkVfTElCQlBGX09QVFMoYnBmX2l0ZXJfYXR0YWNoX29wdHMsIG9wdHMpO1xcbitcXHRzdHJ1Y3QgbWVtY2dfc3RhdF9jcm9zc19jcHUgKnNrZWwgPSBOVUxMO1xcbitcXHR1bmlvbiBicGZfaXRlcl9saW5rX2luZm8gbGluZm8gPSB7fTtcXG4rXFx0c3RydWN0IGJwZl9saW5rICpsaW5rID0gTlVMTDtcXG4rXFx0aW50IHJldCA9IC0xLCBlcnIsIGksIG1mZCwgZmQ7XFxuK1xcdGNoYXIgYnVmWzQwOTZdO1xcbitcXHRzc2l6ZV90IHI7XFxuK1xcbitcXHRza2VsID0gbWVtY2dfc3RhdF9jcm9zc19jcHVfX29wZW4oKTtcXG4rXFx0aWYgKCFza2VsKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJza2VsIG9wZW4gZmFpbGVkOiAlcyAoJWQpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgICAgc3RyZXJyb3IoZXJybm8pLCBlcnJubyk7XFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0fVxcbitcXHRlcnIgPSBicGZfcHJvZ3JhbV9fc2V0X2F1dG9sb2FkKHNrZWwtXFx1MDAzZXByb2dzLm1lbWNnX2tmdW5jc19wcm9iZSwgZmFsc2UpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJkaXNhYmxpbmcgY2FwYWJpbGl0eSBwcm9iZSBmYWlsZWQ6ICVzICglZClcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJlcnJvcigtZXJyKSwgZXJyKTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFx0ZXJyID0gYnBmX21hcF9fc2V0X21heF9lbnRyaWVzKHNrZWwtXFx1MDAzZW1hcHMucmVzdWx0cywgbl9ub2RlcyArIDgpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJzZXQgbWF4X2VudHJpZXMgZmFpbGVkOiAlcyAoJWQpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgICAgc3RyZXJyb3IoLWVyciksIGVycik7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcdGVyciA9IG1lbWNnX3N0YXRfY3Jvc3NfY3B1X19sb2FkKHNrZWwpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJza2VsIGxvYWQgZmFpbGVkOiAlcyAoJWQpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgICAgc3RyZXJyb3IoLWVyciksIGVycik7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRsaW5mby5jZ3JvdXAuY2dyb3VwX2ZkID0gcm9vdF9mZDtcXG4rXFx0bGluZm8uY2dyb3VwLm9yZGVyID0gQlBGX0NHUk9VUF9JVEVSX0RFU0NFTkRBTlRTX1BSRTtcXG4rXFx0b3B0cy5saW5rX2luZm8gPSBcXHUwMDI2bGluZm87XFxuK1xcdG9wdHMubGlua19pbmZvX2xlbiA9IHNpemVvZihsaW5mbyk7XFxuK1xcbitcXHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9pdGVyKHNrZWwtXFx1MDAzZXByb2dzLmNncm91cF9tZW1jZ19zdGF0X2Nyb3NzX2NwdSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx1MDAyNm9wdHMpO1xcbitcXHRlcnIgPSBsaWJicGZfZ2V0X2Vycm9yKGxpbmspO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGxpbmsgPSBOVUxMO1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiYXR0YWNoIGl0ZXIgZmFpbGVkOiAlcyAoJWQpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgICAgc3RyZXJyb3IoLWVyciksIGVycik7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRmZCA9IGJwZl9pdGVyX2NyZWF0ZShicGZfbGlua19fZmQobGluaykpO1xcbitcXHRpZiAoZmQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJicGZfaXRlcl9jcmVhdGUgZmFpbGVkOiAlcyAoJWQpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgICAgc3RyZXJyb3IoZXJybm8pLCBlcnJubyk7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcdGRvIHtcXG4rXFx0XFx0ciA9IHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xcbitcXHR9IHdoaWxlIChyIFxcdTAwM2UgMCB8fCAociBcXHUwMDNjIDAgXFx1MDAyNlxcdTAwMjYgZXJybm8gPT0gRUlOVFIpKTtcXG4rXFx0ZXJyID0gZXJybm87XFxuK1xcdGNsb3NlKGZkKTtcXG4rXFx0aWYgKHIgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJicGYgd2FsayBmYWlsZWQ6ICVzICglZClcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJlcnJvcihlcnIpLCBlcnIpO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0bWZkID0gYnBmX21hcF9fZmQoc2tlbC1cXHUwMDNlbWFwcy5yZXN1bHRzKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5fbm9kZXM7IGkrKylcXG4rXFx0XFx0aWYgKGJwZl9tYXBfbG9va3VwX2VsZW0obWZkLCBcXHUwMDI2bm9kZXNbaV0uaWQsIFxcdTAwMjZub2Rlc1tpXS5icGYpKSB7XFxuK1xcdFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJubyBtYXAgZW50cnkgZm9yICVzOiAlcyAoJWQpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgICAgbm9kZXNbaV0ucGF0aCwgc3RyZXJyb3IoZXJybm8pLCBlcnJubyk7XFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHR9XFxuK1xcdHJldCA9IDA7XFxuK291dDpcXG4rXFx0YnBmX2xpbmtfX2Rlc3Ryb3kobGluayk7XFxuK1xcdG1lbWNnX3N0YXRfY3Jvc3NfY3B1X19kZXN0cm95KHNrZWwpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisvKiBSZWFkIG9uZSBjZ3JvdXBmcyBzbmFwc2hvdC4gKi9cXG4rc3RhdGljIGludCByZWFkX2ZpbGVzKGludCBzbG90KVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5fbm9kZXM7IGkrKykge1xcbitcXHRcXHRjb25zdCBjaGFyICpwYXRoID0gbm9kZXNbaV0ucGF0aDtcXG4rXFx0XFx0c3RydWN0IGZpbGVfc25hcCAqZiA9IFxcdTAwMjZub2Rlc1tpXS5maWxlW3Nsb3RdO1xcbitcXG4rXFx0XFx0Zi1cXHUwMDNlYW5vbiA9IGNnX3JlYWRfa2V5X2xvbmcocGF0aCwgXFxcIm1lbW9yeS5zdGF0XFxcIiwgXFxcImFub24gXFxcIik7XFxuK1xcdFxcdGYtXFx1MDAzZWZpbGUgPSBjZ19yZWFkX2tleV9sb25nKHBhdGgsIFxcXCJtZW1vcnkuc3RhdFxcXCIsIFxcXCJmaWxlIFxcXCIpO1xcbitcXHRcXHRmLVxcdTAwM2VzaG1lbSA9IGNnX3JlYWRfa2V5X2xvbmcocGF0aCwgXFxcIm1lbW9yeS5zdGF0XFxcIiwgXFxcInNobWVtIFxcXCIpO1xcbitcXHRcXHRmLVxcdTAwM2VmaWxlX21hcHBlZCA9IGNnX3JlYWRfa2V5X2xvbmcocGF0aCwgXFxcIm1lbW9yeS5zdGF0XFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBcXFwiZmlsZV9tYXBwZWQgXFxcIik7XFxuK1xcdFxcdGYtXFx1MDAzZXBnZmF1bHQgPSBjZ19yZWFkX2tleV9sb25nKHBhdGgsIFxcXCJtZW1vcnkuc3RhdFxcXCIsIFxcXCJwZ2ZhdWx0IFxcXCIpO1xcbitcXHRcXHRmLVxcdTAwM2VjdXJyZW50ID0gY2dfcmVhZF9sb25nKHBhdGgsIFxcXCJtZW1vcnkuY3VycmVudFxcXCIpO1xcbitcXG4rXFx0XFx0aWYgKGYtXFx1MDAzZWFub24gXFx1MDAzYyAwIHx8IGYtXFx1MDAzZWZpbGUgXFx1MDAzYyAwIHx8IGYtXFx1MDAzZXNobWVtIFxcdTAwM2MgMCB8fFxcbitcXHRcXHQgICAgZi1cXHUwMDNlZmlsZV9tYXBwZWQgXFx1MDAzYyAwIHx8IGYtXFx1MDAzZXBnZmF1bHQgXFx1MDAzYyAwIHx8IGYtXFx1MDAzZWN1cnJlbnQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJyZWFkaW5nIHRoZSBzdGF0cyBvZiAlcyBmYWlsZWRcXFxcblxcXCIsIHBhdGgpO1xcbitcXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyogLS0tLSBjb21wYXJpc29uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xcbitcXG4rc3RhdGljIHZvaWQgZHVtcF9ub2RlKGNvbnN0IHN0cnVjdCBjZ19ub2RlICpuKVxcbit7XFxuK1xcdGludCBzO1xcbitcXG4rXFx0a3NmdF9wcmludF9tc2coXFxcIiVzIGJwZiAgIDogYW5vbj0lbGx1IGZpbGU9JWxsdSBzaG1lbT0lbGx1IGZtYXBwZWQ9JWxsdSBwZ2ZhdWx0PSVsbHVcXFxcblxcXCIsXFxuK1xcdFxcdCAgICAgICBuLVxcdTAwM2VwYXRoLCBuLVxcdTAwM2VicGYuYW5vbiwgbi1cXHUwMDNlYnBmLmZpbGUsIG4tXFx1MDAzZWJwZi5zaG1lbSxcXG4rXFx0XFx0ICAgICAgIG4tXFx1MDAzZWJwZi5maWxlX21hcHBlZCwgbi1cXHUwMDNlYnBmLnBnZmF1bHQpO1xcbitcXHRmb3IgKHMgPSAwOyBzIFxcdTAwM2MgMjsgcysrKVxcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiJXMgZmlsZSVkOiBhbm9uPSVsZCBmaWxlPSVsZCBzaG1lbT0lbGQgZm1hcHBlZD0lbGQgcGdmYXVsdD0lbGRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgICBuLVxcdTAwM2VwYXRoLCBzLCBuLVxcdTAwM2VmaWxlW3NdLmFub24sIG4tXFx1MDAzZWZpbGVbc10uZmlsZSxcXG4rXFx0XFx0XFx0ICAgICAgIG4tXFx1MDAzZWZpbGVbc10uc2htZW0sIG4tXFx1MDAzZWZpbGVbc10uZmlsZV9tYXBwZWQsXFxuK1xcdFxcdFxcdCAgICAgICBuLVxcdTAwM2VmaWxlW3NdLnBnZmF1bHQpO1xcbit9XFxuK1xcbisvKiBFcXVhbCBmaWxlIHNhbXBsZXMgcmVxdWlyZSBhbiBleGFjdCBCUEYgbWF0Y2g7IG90aGVyd2lzZSBhY2NlcHQgdGhlaXIgcmFuZ2UuICovXFxuK3N0YXRpYyBib29sIGJyYWNrZXRlZCh1bnNpZ25lZCBsb25nIGxvbmcgdiwgbG9uZyBhLCBsb25nIGIpXFxuK3tcXG4rXFx0bG9uZyBsbyA9IGEgXFx1MDAzYyBiID8gYSA6IGI7XFxuK1xcdGxvbmcgaGkgPSBhIFxcdTAwM2MgYiA/IGIgOiBhO1xcbitcXG4rXFx0cmV0dXJuIHYgXFx1MDAzZT0gKHVuc2lnbmVkIGxvbmcgbG9uZylsbyBcXHUwMDI2XFx1MDAyNiB2IFxcdTAwM2M9ICh1bnNpZ25lZCBsb25nIGxvbmcpaGk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgY2hlY2tfdHJlZShzaXplX3QgY2hhcmdlZClcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIGxvbmcgcm9vdF9hbm9uID0gMCwgbGVhZl9hbm9uID0gMDtcXG4rXFx0aW50IGksIGJhZCA9IDA7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgbl9ub2RlczsgaSsrKSB7XFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBjZ19ub2RlICpuID0gXFx1MDAyNm5vZGVzW2ldO1xcbitcXHRcXHRjb25zdCBzdHJ1Y3QgbWVtY2dfc3RhdF9zbmFwc2hvdCAqYiA9IFxcdTAwMjZuLVxcdTAwM2VicGY7XFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBmaWxlX3NuYXAgKmYwID0gXFx1MDAyNm4tXFx1MDAzZWZpbGVbMF0sICpmMSA9IFxcdTAwMjZuLVxcdTAwM2VmaWxlWzFdO1xcbitcXG4rXFx0XFx0aWYgKCFicmFja2V0ZWQoYi1cXHUwMDNlYW5vbiwgZjAtXFx1MDAzZWFub24sIGYxLVxcdTAwM2Vhbm9uKSB8fFxcbitcXHRcXHQgICAgIWJyYWNrZXRlZChiLVxcdTAwM2VmaWxlLCBmMC1cXHUwMDNlZmlsZSwgZjEtXFx1MDAzZWZpbGUpIHx8XFxuK1xcdFxcdCAgICAhYnJhY2tldGVkKGItXFx1MDAzZXNobWVtLCBmMC1cXHUwMDNlc2htZW0sIGYxLVxcdTAwM2VzaG1lbSkgfHxcXG4rXFx0XFx0ICAgICFicmFja2V0ZWQoYi1cXHUwMDNlZmlsZV9tYXBwZWQsIGYwLVxcdTAwM2VmaWxlX21hcHBlZCxcXG4rXFx0XFx0XFx0ICAgICAgIGYxLVxcdTAwM2VmaWxlX21hcHBlZCkgfHxcXG4rXFx0XFx0ICAgICFicmFja2V0ZWQoYi1cXHUwMDNlcGdmYXVsdCwgZjAtXFx1MDAzZXBnZmF1bHQsIGYxLVxcdTAwM2VwZ2ZhdWx0KSkge1xcbitcXHRcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwia2Z1bmNzIGRpc2FncmVlIHdpdGggbWVtb3J5LnN0YXRcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRkdW1wX25vZGUobik7XFxuK1xcdFxcdFxcdGJhZCsrO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHQvKiBMaXZlIHBhZ2UgY291bnRlcnMgYXJlIGJvdW5kcywgbm90IGZsdXNoZWQgc3RhdGlzdGljcy4gKi9cXG4rXFx0XFx0aWYgKGItXFx1MDAzZWFub24gXFx1MDAzZSBiLVxcdTAwM2V1c2FnZV9wYWdlcyAqICh1bnNpZ25lZCBsb25nIGxvbmcpcGFnZV9zaXplIHx8XFxuK1xcdFxcdCAgICBmMS1cXHUwMDNlYW5vbiBcXHUwMDNlIGYxLVxcdTAwM2VjdXJyZW50KSB7XFxuK1xcdFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCIlczogYW5vbiBhYm92ZSB1c2FnZTogYnBmICVsbHUvJWxsdSBmaWxlICVsZC8lbGRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBuLVxcdTAwM2VwYXRoLCBiLVxcdTAwM2Vhbm9uLFxcbitcXHRcXHRcXHRcXHQgICAgICAgYi1cXHUwMDNldXNhZ2VfcGFnZXMgKiAodW5zaWduZWQgbG9uZyBsb25nKXBhZ2Vfc2l6ZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGYxLVxcdTAwM2Vhbm9uLCBmMS1cXHUwMDNlY3VycmVudCk7XFxuK1xcdFxcdFxcdGJhZCsrO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAobi1cXHUwMDNlaXNfbGVhZikge1xcbitcXHRcXHRcXHRpZiAoYi1cXHUwMDNlYW5vbiBcXHUwMDNjIGNoYXJnZWQpIHtcXG4rXFx0XFx0XFx0XFx0a3NmdF9wcmludF9tc2coXFxcIiVzOiBmbHVzaGVkIGFub24gJWxsdSwgY2hhcmdlZCAlenVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBuLVxcdTAwM2VwYXRoLCBiLVxcdTAwM2Vhbm9uLCBjaGFyZ2VkKTtcXG4rXFx0XFx0XFx0XFx0YmFkKys7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0bGVhZl9hbm9uICs9IGItXFx1MDAzZWFub247XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKGkgPT0gMClcXG4rXFx0XFx0XFx0cm9vdF9hbm9uID0gYi1cXHUwMDNlYW5vbjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHJvb3RfYW5vbiAhPSBsZWFmX2Fub24pIHtcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxcInN1YnRyZWUgcm9vdCBhbm9uICVsbHUsIHN1bSBvZiB0aGUgbGVhdmVzICVsbHVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgICByb290X2Fub24sIGxlYWZfYW5vbik7XFxuK1xcdFxcdGJhZCsrO1xcbitcXHR9XFxuK1xcdHJldHVybiBiYWQgPyAtMSA6IDA7XFxuK31cXG4rXFxuKy8qIEFjY2VwdCBQQUdFX0NPVU5URVJfTUFYIHZhbHVlcyBmcm9tIGVpdGhlciAzMi0gb3IgNjQtYml0IGtlcm5lbHMuICovXFxuK3N0YXRpYyBpbnQgY2hlY2tfdW5saW1pdGVkKHZvaWQpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBsb25nIG1heDY0ID0gKHVuc2lnbmVkIGxvbmcgbG9uZylJTlQ2NF9NQVggLyBwYWdlX3NpemU7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbG9uZyBtYXgzMiA9IElOVDMyX01BWDtcXG4rXFxuK1xcdGlmIChjZ19yZWFkX3N0cmNtcChub2Rlc1swXS5wYXRoLCBcXFwibWVtb3J5Lm1heFxcXCIsIFxcXCJtYXhcXFxcblxcXCIpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChub2Rlc1swXS5icGYubWF4X3BhZ2VzICE9IG1heDY0IFxcdTAwMjZcXHUwMDI2IG5vZGVzWzBdLmJwZi5tYXhfcGFnZXMgIT0gbWF4MzIpIHtcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxcIm1lbW9yeS5tYXggcmVhZHMgbWF4LCBrZnVuYyByZXBvcnRzICVsbHUgcGFnZXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgICBub2Rlc1swXS5icGYubWF4X3BhZ2VzKTtcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKiAtLS0tIG9uZSBjYXNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXFxuK1xcbitzdHJ1Y3QgdGVzdGNhc2Uge1xcbitcXHRjb25zdCBjaGFyICpuYW1lO1xcbitcXHRpbnQgZmFub3V0O1xcbitcXHRpbnQgZGVwdGg7XFxuK1xcdGludCBjcHVzX3Blcl9sZWFmO1xcdC8qIEssIG9yIDAgZm9yIHRoZSBib3VuZGVkIGNyb3NzLUNQVSBjb3VudCAqL1xcbitcXHRzaXplX3QgcmVzaWRlbnRfYnl0ZXM7XFx0LyogYW5vbiBwZXIgbGVhZiwgcmFpc2VkIGlmIHRvbyBzbWFsbCAqL1xcbit9O1xcbitcXG4rc3RhdGljIGludCBydW5fY2FzZShjb25zdCBzdHJ1Y3QgdGVzdGNhc2UgKnRjKVxcbit7XFxuK1xcdGludCByb290X2ZkID0gLTEsIHJldCA9IEtTRlRfRkFJTCwgZXJyLCBrO1xcbitcXHRzaXplX3QgY2hhcmdlZDtcXG4rXFxuK1xcdGlmIChidWlsZF90cmVlKHRjLVxcdTAwM2VmYW5vdXQsIHRjLVxcdTAwM2VkZXB0aCwgXFx1MDAyNnJvb3RfZmQpKSB7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJjYW5ub3QgYnVpbGQgdGhlIHRyZWVcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0ayA9IHRjLVxcdTAwM2VjcHVzX3Blcl9sZWFmO1xcbitcXHRpZiAoayBcXHUwMDNjPSAwKVxcbitcXHRcXHRrID0gbl9jcHUgXFx1MDAzYyBNQVhfQ1BVU19QRVJfTEVBRiA/IG5fY3B1IDogTUFYX0NQVVNfUEVSX0xFQUY7XFxuK1xcdGVsc2UgaWYgKGsgXFx1MDAzZSBuX2NwdSlcXG4rXFx0XFx0ayA9IG5fY3B1O1xcbitcXHRlcnIgPSBsZWFmX2NoYXJnZSh0Yy1cXHUwMDNlcmVzaWRlbnRfYnl0ZXMsIGssIFxcdTAwMjZjaGFyZ2VkKTtcXG4rXFx0aWYgKGVyciA9PSAtRTJCSUcpIHtcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxcIiVzIG5lZWRzIG1vcmUgdGhhbiAlbHVNQiB0byB0cmlnZ2VyIGEgZmx1c2ggb24gJWxkIG9ubGluZSBDUFVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgICAgdGMtXFx1MDAzZW5hbWUsIE1BWF9UT1RBTF9DSEFSR0UgXFx1MDAzZVxcdTAwM2UgMjAsIG5fb25saW5lX2NwdSk7XFxuK1xcdFxcdHJldCA9IEtTRlRfU0tJUDtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiY2Fubm90IGNhbGN1bGF0ZSB0aGUgY2hhcmdlIGZvciAlczogJXMgKCVkKVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgICAgIHRjLVxcdTAwM2VuYW1lLCBzdHJlcnJvcigtZXJyKSwgZXJyKTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGtzZnRfcHJpbnRfbXNnKFxcXCIlczogJWQgY2dyb3VwcywgJWQgbGVhdmVzLCAlZC8lZCBjcHVzLCAlenVLQiBwZXIgbGVhZlxcXFxuXFxcIixcXG4rXFx0XFx0ICAgICAgIHRjLVxcdTAwM2VuYW1lLCBuX25vZGVzLCBuX2xlYXZlcywgaywgbl9jcHUsIGNoYXJnZWQgXFx1MDAzZVxcdTAwM2UgMTApO1xcbitcXG4rXFx0aWYgKHN0YXJ0X2NoYXJnZXJzKGssIGNoYXJnZWQpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdC8qIFJlYWQgQlBGIGZpcnN0OyBtZW1vcnkuc3RhdCB3b3VsZCBjb25zdW1lIHRoZSBwZW5kaW5nIGZsdXNoLiAqL1xcbitcXHRpZiAocmVhZF9icGYocm9vdF9mZCkgfHwgcmVhZF9maWxlcygwKSB8fCByZWFkX2ZpbGVzKDEpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGlmICghY2hlY2tfdHJlZShjaGFyZ2VkKSBcXHUwMDI2XFx1MDAyNiAhY2hlY2tfdW5saW1pdGVkKCkpXFxuK1xcdFxcdHJldCA9IEtTRlRfUEFTUztcXG4rb3V0OlxcbitcXHRpZiAocm9vdF9mZCBcXHUwMDNlPSAwKVxcbitcXHRcXHRjbG9zZShyb290X2ZkKTtcXG4rXFx0ZGVzdHJveV90cmVlKCk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGVzdGNhc2UgY2FzZXNbXSA9IHtcXG4rXFx0LyogbmFtZSwgZmFub3V0LCBkZXB0aCwgSywgYW5vbiBwZXIgbGVhZiAqL1xcbitcXHR7IFxcXCJzaW5nbGVfY3B1X3NtYWxsX3RyZWVcXFwiLCA0LCAyLCAxLCAyIFxcdTAwM2NcXHUwMDNjIDIwIH0sXFxuK1xcdHsgXFxcImNyb3NzX2NwdV9zbWFsbF90cmVlXFxcIiwgNCwgMiwgMCwgMiBcXHUwMDNjXFx1MDAzYyAyMCB9LFxcbitcXHR7IFxcXCJzaW5nbGVfY3B1X2xhcmdlX3RyZWVcXFwiLCA0LCAzLCAxLCAyNTYgXFx1MDAzY1xcdTAwM2MgMTAgfSxcXG4rXFx0eyBcXFwiY3Jvc3NfY3B1X2xhcmdlX3RyZWVcXFwiLCA0LCAzLCAwLCAyNTYgXFx1MDAzY1xcdTAwM2MgMTAgfSxcXG4rfTtcXG4rXFxuK3N0YXRpYyBib29sIG1lbWNnX2tmdW5jc19hdmFpbGFibGUodm9pZClcXG4re1xcbitcXHRzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qga2Z1bmNzW10gPSB7XFxuK1xcdFxcdFxcXCJicGZfZ2V0X21lbV9jZ3JvdXBcXFwiLFxcbitcXHRcXHRcXFwiYnBmX3B1dF9tZW1fY2dyb3VwXFxcIixcXG4rXFx0XFx0XFxcImJwZl9tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzXFxcIixcXG4rXFx0XFx0XFxcImJwZl9tZW1fY2dyb3VwX3BhZ2Vfc3RhdGVcXFwiLFxcbitcXHRcXHRcXFwiYnBmX21lbV9jZ3JvdXBfdm1fZXZlbnRzXFxcIixcXG4rXFx0fTtcXG4rXFx0c3RydWN0IGJ0ZiAqYnRmO1xcbitcXHRpbnQgZXJyLCBpO1xcbitcXG4rXFx0YnRmID0gYnRmX19sb2FkX3ZtbGludXhfYnRmKCk7XFxuK1xcdGVyciA9IGxpYmJwZl9nZXRfZXJyb3IoYnRmKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiY2Fubm90IGxvYWQgdm1saW51eCBCVEY6ICVzICglZClcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJlcnJvcigtZXJyKSwgZXJyKTtcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShrZnVuY3MpOyBpKyspIHtcXG4rXFx0XFx0aWYgKGJ0Zl9fZmluZF9ieV9uYW1lX2tpbmQoYnRmLCBrZnVuY3NbaV0sIEJURl9LSU5EX0ZVTkMpIFxcdTAwM2UgMClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJyZXF1aXJlZCBrZnVuYyAlcyBpcyBub3QgaW4gdm1saW51eCBCVEZcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgICBrZnVuY3NbaV0pO1xcbitcXHRcXHRidGZfX2ZyZWUoYnRmKTtcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcdGlmIChidGZfX2ZpbmRfYnlfbmFtZV9raW5kKGJ0ZiwgXFxcImJwZl9pdGVyX2Nncm91cFxcXCIsIEJURl9LSU5EX0ZVTkMpIFxcdTAwM2M9IDApIHtcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxcImNncm91cCBCUEYgaXRlcmF0b3IgaXMgbm90IGluIHZtbGludXggQlRGXFxcXG5cXFwiKTtcXG4rXFx0XFx0YnRmX19mcmVlKGJ0Zik7XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbitcXHRidGZfX2ZyZWUoYnRmKTtcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIHVuc3VwcG9ydGVkX2JwZl9mZWF0dXJlX2Vycm9yKGludCBlcnIpXFxuK3tcXG4rXFx0cmV0dXJuIGVyciA9PSAtRUlOVkFMIHx8IGVyciA9PSAtRU5PRU5UIHx8IGVyciA9PSAtRU9QTk9UU1VQUDtcXG4rfVxcbitcXG4rLyogUmV0dXJuIDEgaWYgc3VwcG9ydGVkLCAwIGlmIHVuYXZhaWxhYmxlLCBvciBhIG5lZ2F0aXZlIGVycm9yLiAqL1xcbitzdGF0aWMgaW50IHByb2JlX21lbWNnX2JwZl9mZWF0dXJlcyhpbnQgcm9vdF9mZClcXG4re1xcbitcXHRERUNMQVJFX0xJQkJQRl9PUFRTKGJwZl9pdGVyX2F0dGFjaF9vcHRzLCBvcHRzKTtcXG4rXFx0c3RydWN0IG1lbWNnX3N0YXRfY3Jvc3NfY3B1ICpza2VsO1xcbitcXHR1bmlvbiBicGZfaXRlcl9saW5rX2luZm8gbGluZm8gPSB7fTtcXG4rXFx0c3RydWN0IGJwZl9saW5rICpsaW5rID0gTlVMTDtcXG4rXFx0aW50IHJldCwgZXJyLCBpdGVyX2ZkID0gLTE7XFxuK1xcbitcXHRza2VsID0gbWVtY2dfc3RhdF9jcm9zc19jcHVfX29wZW4oKTtcXG4rXFx0aWYgKCFza2VsKSB7XFxuK1xcdFxcdGVyciA9IGVycm5vID8gLWVycm5vIDogLUVJTlZBTDtcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxcImNhcGFiaWxpdHkgcHJvYmUgb3BlbiBmYWlsZWQ6ICVzICglZClcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJlcnJvcigtZXJyKSwgZXJyKTtcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gYnBmX3Byb2dyYW1fX3NldF9hdXRvbG9hZChza2VsLVxcdTAwM2Vwcm9ncy5jZ3JvdXBfbWVtY2dfc3RhdF9jcm9zc19jcHUsXFxuK1xcdFxcdFxcdFxcdFxcdGZhbHNlKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiZGlzYWJsaW5nIHRlc3QgcHJvZ3JhbSBmYWlsZWQ6ICVzICglZClcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJlcnJvcigtZXJyKSwgZXJyKTtcXG4rXFx0XFx0cmV0ID0gZXJyO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gbWVtY2dfc3RhdF9jcm9zc19jcHVfX2xvYWQoc2tlbCk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxcIkJQRiBjYXBhYmlsaXR5IHByb2JlIGxvYWQgZmFpbGVkOiAlcyAoJWQpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgICAgc3RyZXJyb3IoLWVyciksIGVycik7XFxuK1xcdFxcdHJldCA9IHVuc3VwcG9ydGVkX2JwZl9mZWF0dXJlX2Vycm9yKGVycikgPyAwIDogZXJyO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0bGluZm8uY2dyb3VwLmNncm91cF9mZCA9IHJvb3RfZmQ7XFxuK1xcdGxpbmZvLmNncm91cC5vcmRlciA9IEJQRl9DR1JPVVBfSVRFUl9TRUxGX09OTFk7XFxuK1xcdG9wdHMubGlua19pbmZvID0gXFx1MDAyNmxpbmZvO1xcbitcXHRvcHRzLmxpbmtfaW5mb19sZW4gPSBzaXplb2YobGluZm8pO1xcbitcXHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9pdGVyKHNrZWwtXFx1MDAzZXByb2dzLm1lbWNnX2tmdW5jc19wcm9iZSwgXFx1MDAyNm9wdHMpO1xcbitcXHRlcnIgPSBsaWJicGZfZ2V0X2Vycm9yKGxpbmspO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGxpbmsgPSBOVUxMO1xcbitcXHRcXHRrc2Z0X3ByaW50X21zZyhcXFwiQlBGIGNhcGFiaWxpdHkgcHJvYmUgYXR0YWNoIGZhaWxlZDogJXMgKCVkKVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgICAgIHN0cmVycm9yKC1lcnIpLCBlcnIpO1xcbitcXHRcXHRyZXQgPSB1bnN1cHBvcnRlZF9icGZfZmVhdHVyZV9lcnJvcihlcnIpID8gMCA6IGVycjtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGl0ZXJfZmQgPSBicGZfaXRlcl9jcmVhdGUoYnBmX2xpbmtfX2ZkKGxpbmspKTtcXG4rXFx0aWYgKGl0ZXJfZmQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGVyciA9IC1lcnJubztcXG4rXFx0XFx0a3NmdF9wcmludF9tc2coXFxcIkJQRiBjYXBhYmlsaXR5IHByb2JlIGl0ZXJhdG9yIGNyZWF0aW9uIGZhaWxlZDogJXMgKCVkKVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgICAgIHN0cmVycm9yKC1lcnIpLCBlcnIpO1xcbitcXHRcXHRyZXQgPSB1bnN1cHBvcnRlZF9icGZfZmVhdHVyZV9lcnJvcihlcnIpID8gMCA6IGVycjtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IDE7XFxuK291dDpcXG4rXFx0aWYgKGl0ZXJfZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2UoaXRlcl9mZCk7XFxuK1xcdGJwZl9saW5rX19kZXN0cm95KGxpbmspO1xcbitcXHRtZW1jZ19zdGF0X2Nyb3NzX2NwdV9fZGVzdHJveShza2VsKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbit7XFxuK1xcdGludCBmZWF0dXJlX2ZkLCBpLCByZXQ7XFxuK1xcbitcXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xcbitcXG4rXFx0LyogUHJvYmUgQlRGIGJlZm9yZSBvcGVyYXRpb25zIHRoYXQgbWF5IHJlcXVpcmUgcHJpdmlsZWdlcy4gKi9cXG4rXFx0aWYgKCFtZW1jZ19rZnVuY3NfYXZhaWxhYmxlKCkpXFxuK1xcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJtZW1jZyBCUEYga2Z1bmNzIGFyZSBub3QgYXZhaWxhYmxlXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGlmIChjZ19maW5kX3VuaWZpZWRfcm9vdChyb290LCBzaXplb2Yocm9vdCksIE5VTEwpKVxcbitcXHRcXHRrc2Z0X2V4aXRfc2tpcChcXFwiY2dyb3VwIHYyIGlzbid0IG1vdW50ZWRcXFxcblxcXCIpO1xcbitcXHRmZWF0dXJlX2ZkID0gb3Blbihyb290LCBPX1JET05MWSB8IE9fRElSRUNUT1JZKTtcXG4rXFx0aWYgKGZlYXR1cmVfZmQgXFx1MDAzYyAwKVxcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcImNhbm5vdCBvcGVuIGNncm91cCByb290OiAlcyAoJWQpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBzdHJlcnJvcihlcnJubyksIGVycm5vKTtcXG4rXFx0cmV0ID0gcHJvYmVfbWVtY2dfYnBmX2ZlYXR1cmVzKGZlYXR1cmVfZmQpO1xcbitcXHRjbG9zZShmZWF0dXJlX2ZkKTtcXG4rXFx0aWYgKCFyZXQpXFxuK1xcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJzbGVlcGFibGUgY2dyb3VwIGl0ZXJhdG9yIG9yIG1lbWNnIGtmdW5jcyBhcmUgbm90IGF2YWlsYWJsZVxcXFxuXFxcIik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRrc2Z0X2V4aXRfZmFpbF9tc2coXFxcImNhbm5vdCBwcm9iZSBCUEYgY2FwYWJpbGl0aWVzOiAlcyAoJWQpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBzdHJlcnJvcigtcmV0KSwgcmV0KTtcXG4rXFxuK1xcdGlmIChjZ19yZWFkX3N0cnN0cihyb290LCBcXFwiY2dyb3VwLmNvbnRyb2xsZXJzXFxcIiwgXFxcIm1lbW9yeVxcXCIpKVxcbitcXHRcXHRrc2Z0X2V4aXRfc2tpcChcXFwibWVtb3J5IGNvbnRyb2xsZXIgaXNuJ3QgYXZhaWxhYmxlXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGlmIChjZ19yZWFkX3N0cnN0cihyb290LCBcXFwiY2dyb3VwLnN1YnRyZWVfY29udHJvbFxcXCIsIFxcXCJtZW1vcnlcXFwiKSlcXG4rXFx0XFx0aWYgKGNnX3dyaXRlKHJvb3QsIFxcXCJjZ3JvdXAuc3VidHJlZV9jb250cm9sXFxcIiwgXFxcIittZW1vcnlcXFwiKSlcXG4rXFx0XFx0XFx0a3NmdF9leGl0X3NraXAoXFxcIkZhaWxlZCB0byBzZXQgbWVtb3J5IGNvbnRyb2xsZXJcXFxcblxcXCIpO1xcbitcXG4rXFx0Q1BVX1pFUk8oXFx1MDAyNmFsbG93ZWRfY3B1cyk7XFxuK1xcdGlmIChzY2hlZF9nZXRhZmZpbml0eSgwLCBzaXplb2YoYWxsb3dlZF9jcHVzKSwgXFx1MDAyNmFsbG93ZWRfY3B1cykpXFxuK1xcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJjYW5ub3QgcmVhZCBDUFUgYWZmaW5pdHlcXFxcblxcXCIpO1xcbitcXHRuX2NwdSA9IENQVV9DT1VOVChcXHUwMDI2YWxsb3dlZF9jcHVzKTtcXG4rXFx0aWYgKG5fY3B1IFxcdTAwM2M9IDApXFxuK1xcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJubyBDUFUgdG8gcnVuIG9uXFxcXG5cXFwiKTtcXG4rXFx0bl9vbmxpbmVfY3B1ID0gc3lzY29uZihfU0NfTlBST0NFU1NPUlNfT05MTik7XFxuK1xcdGlmIChuX29ubGluZV9jcHUgXFx1MDAzYz0gMClcXG4rXFx0XFx0a3NmdF9leGl0X2ZhaWxfbXNnKFxcXCJjYW5ub3QgZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2Ygb25saW5lIENQVXNcXFxcblxcXCIpO1xcbitcXG4rXFx0cGFnZV9zaXplID0gc3lzY29uZihfU0NfUEFHRVNJWkUpO1xcbitcXHRpZiAocGFnZV9zaXplIFxcdTAwM2M9IDApXFxuK1xcdFxcdHBhZ2Vfc2l6ZSA9IEJVRl9TSVpFO1xcbitcXG4rXFx0c3VidHJlZV9yb290ID0gY2dfbmFtZShyb290LCBTVUJUUkVFX05BTUUpO1xcbitcXHRpZiAoIXN1YnRyZWVfcm9vdClcXG4rXFx0XFx0a3NmdF9leGl0X3NraXAoXFxcImNhbm5vdCBidWlsZCBzdWJ0cmVlIHJvb3QgcGF0aFxcXFxuXFxcIik7XFxuK1xcbitcXHQvKiBTZXQgdGhlIHBsYW4gYWZ0ZXIgYWxsIGdsb2JhbCBza2lwIGNoZWNrcy4gKi9cXG4rXFx0a3NmdF9zZXRfcGxhbihBUlJBWV9TSVpFKGNhc2VzKSk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShjYXNlcyk7IGkrKykge1xcbitcXHRcXHRzd2l0Y2ggKHJ1bl9jYXNlKFxcdTAwMjZjYXNlc1tpXSkpIHtcXG4rXFx0XFx0Y2FzZSBLU0ZUX1BBU1M6XFxuK1xcdFxcdFxcdGtzZnRfdGVzdF9yZXN1bHRfcGFzcyhcXFwiJXNcXFxcblxcXCIsIGNhc2VzW2ldLm5hbWUpO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSBLU0ZUX1NLSVA6XFxuK1xcdFxcdFxcdGtzZnRfdGVzdF9yZXN1bHRfc2tpcChcXFwiJXNcXFxcblxcXCIsIGNhc2VzW2ldLm5hbWUpO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0ZGVmYXVsdDpcXG4rXFx0XFx0XFx0a3NmdF90ZXN0X3Jlc3VsdF9mYWlsKFxcXCIlc1xcXFxuXFxcIiwgY2FzZXNbaV0ubmFtZSk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdGZyZWUoc3VidHJlZV9yb290KTtcXG4rXFx0a3NmdF9maW5pc2hlZCgpO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X21lbWNvbnRyb2wuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X21lbWNvbnRyb2wuY1xcbmluZGV4IDBlYmY3OTZmM2NmZmUuLjE1YmE0Njg3OTUwNDIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfbWVtY29udHJvbC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfbWVtY29udHJvbC5jXFxuQEAgLTI2LDcgKzI2LDYgQEBcXG4gXFxuIHN0YXRpYyBib29sIGhhc19sb2NhbGV2ZW50cztcXG4gc3RhdGljIGJvb2wgaGFzX3JlY3Vyc2l2ZXByb3Q7XFxuLXN0YXRpYyBpbnQgcGFnZV9zaXplO1xcbiBcXG4gaW50IGdldF90ZW1wX2ZkKHZvaWQpXFxuIHtcXG5AQCAtNTYsMjggKzU1LDEyIEBAIGludCBhbGxvY19wYWdlY2FjaGUoaW50IGZkLCBzaXplX3Qgc2l6ZSlcXG4gXFx0cmV0dXJuIC0xO1xcbiB9XFxuIFxcbi1zdGF0aWMgY2hhciAqYWxsb2NfYW5kX3BvcHVsYXRlX2Fub24oc2l6ZV90IHNpemUpXFxuLXtcXG4tXFx0Y2hhciAqYnVmLCAqcHRyO1xcbi1cXG4tXFx0YnVmID0gbWFsbG9jKHNpemUpO1xcbi1cXHRpZiAoYnVmID09IE5VTEwpIHtcXG4tXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJtYWxsb2MoKSBmYWlsZWRcXFxcblxcXCIpO1xcbi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFx0fVxcbi1cXG4tXFx0Zm9yIChwdHIgPSBidWY7IHB0ciBcXHUwMDNjIGJ1ZiArIHNpemU7IHB0ciArPSBwYWdlX3NpemUpXFxuLVxcdFxcdCpwdHIgPSAwO1xcbi1cXG4tXFx0cmV0dXJuIGJ1ZjtcXG4tfVxcbi1cXG4gaW50IGFsbG9jX2Fub24oY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpXFxuIHtcXG4gXFx0c2l6ZV90IHNpemUgPSAodW5zaWduZWQgbG9uZylhcmc7XFxuIFxcdGNoYXIgKmJ1ZjtcXG4gXFxuLVxcdGJ1ZiA9IGFsbG9jX2FuZF9wb3B1bGF0ZV9hbm9uKHNpemUpO1xcbitcXHRidWYgPSBjZ19hbGxvY19hbm9uKHNpemUpO1xcbiBcXHRpZiAoIWJ1ZilcXG4gXFx0XFx0cmV0dXJuIC0xO1xcbiBcXG5AQCAtMTk1LDcgKzE3OCw3IEBAIHN0YXRpYyBpbnQgYWxsb2NfYW5vbl81ME1fY2hlY2soY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpXFxuIFxcdGxvbmcgYW5vbiwgY3VycmVudDtcXG4gXFx0aW50IHJldCA9IC0xO1xcbiBcXG4tXFx0YnVmID0gYWxsb2NfYW5kX3BvcHVsYXRlX2Fub24oc2l6ZSk7XFxuK1xcdGJ1ZiA9IGNnX2FsbG9jX2Fub24oc2l6ZSk7XFxuIFxcdGlmICghYnVmKVxcbiBcXHRcXHRyZXR1cm4gLTE7XFxuIFxcbkBAIC00MjAsNyArNDAzLDcgQEAgc3RhdGljIGludCBhbGxvY19hbm9uX25vZXhpdChjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZylcXG4gXFx0c2l6ZV90IHNpemUgPSAodW5zaWduZWQgbG9uZylhcmc7XFxuIFxcdGNoYXIgKmJ1ZjtcXG4gXFxuLVxcdGJ1ZiA9IGFsbG9jX2FuZF9wb3B1bGF0ZV9hbm9uKHNpemUpO1xcbitcXHRidWYgPSBjZ19hbGxvY19hbm9uKHNpemUpO1xcbiBcXHRpZiAoIWJ1ZilcXG4gXFx0XFx0cmV0dXJuIC0xO1xcbiBcXG5AQCAtMTAwMSw3ICs5ODQsNyBAQCBzdGF0aWMgaW50IGFsbG9jX2Fub25fNTBNX2NoZWNrX3N3YXAoY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpXFxuIFxcdGxvbmcgbWVtX2N1cnJlbnQsIHN3YXBfY3VycmVudDtcXG4gXFx0aW50IHJldCA9IC0xO1xcbiBcXG4tXFx0YnVmID0gYWxsb2NfYW5kX3BvcHVsYXRlX2Fub24oc2l6ZSk7XFxuK1xcdGJ1ZiA9IGNnX2FsbG9jX2Fub24oc2l6ZSk7XFxuIFxcdGlmICghYnVmKVxcbiBcXHRcXHRyZXR1cm4gLTE7XFxuIFxcbkBAIC0xNzkzLDEwICsxNzc2LDYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxcbiBcXHRjaGFyIHJvb3RbUEFUSF9NQVhdO1xcbiBcXHRpbnQgaSwgcHJvY19zdGF0dXM7XFxuIFxcbi1cXHRwYWdlX3NpemUgPSBzeXNjb25mKF9TQ19QQUdFX1NJWkUpO1xcbi1cXHRpZiAocGFnZV9zaXplIFxcdTAwM2M9IDApXFxuLVxcdFxcdHBhZ2Vfc2l6ZSA9IEJVRl9TSVpFO1xcbi1cXG4gXFx0a3NmdF9wcmludF9oZWFkZXIoKTtcXG4gXFx0a3NmdF9zZXRfcGxhbihBUlJBWV9TSVpFKHRlc3RzKSk7XFxuIFxcdGlmIChjZ19maW5kX3VuaWZpZWRfcm9vdChyb290LCBzaXplb2Yocm9vdCksIE5VTEwpKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC8uZ2l0aWdub3JlXFxuaW5kZXggOTMzZjQ4MzgxNWIyYy4uNjk5NDMzMDFkYzFkNyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvLmdpdGlnbm9yZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC8uZ2l0aWdub3JlXFxuQEAgLTEsNSArMSw2IEBAXFxuIGJwZnRvb2xcXG4gKi5za2VsLmhcXG4rKi5icGYuZFxcbiAvaG9zdC10b29sc1xcbiAvdG9vbHNcXG4gaGlkX2JwZlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvTWFrZWZpbGVcXG5pbmRleCAyZjQyM2RlODMxNDczLi4xMTkwYTc0NzAzNmRhIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC9NYWtlZmlsZVxcbkBAIC00Nyw3ICs0Nyw2IEBAIG1zZyA9XFxuIGVsc2VcXG4gbXNnID0gQHByaW50ZiAnICAlLThzJXMgJXMlc1xcXFxuJyBcXFwiJCgxKVxcXCIgXFxcIiQoaWYgJCgyKSwgWyQoMildKVxcXCIgXFxcIiQobm90ZGlyICQoMykpXFxcIiBcXFwiJChpZiAkKDQpLCAkKDQpKVxcXCI7XFxuIE1BS0VGTEFHUyArPSAtLW5vLXByaW50LWRpcmVjdG9yeVxcbi1zdWJtYWtlX2V4dHJhcyA6PSBmZWF0dXJlX2Rpc3BsYXk9MFxcbiBlbmRpZlxcbiBcXG4gIyBvdmVycmlkZSBsaWIubWsncyBkZWZhdWx0IHJ1bGVzXFxuQEAgLTU4LDE3MiArNTcsMjUgQEAgb3ZlcnJpZGUgZGVmaW5lIENMRUFOXFxuIFxcdCQoUSkkKFJNKSAtciAkKEVYVFJBX0NMRUFOKVxcbiBlbmRlZlxcbiBcXG4taW5jbHVkZSAuLi9saWIubWtcXG4tXFxuLVRPT0xTRElSIDo9ICQodG9wX3NyY2RpcikvdG9vbHNcXG4tTElCRElSIDo9ICQoVE9PTFNESVIpL2xpYlxcbi1CUEZESVIgOj0gJChMSUJESVIpL2JwZlxcbi1UT09MU0lOQ0RJUiA6PSAkKFRPT0xTRElSKS9pbmNsdWRlXFxuLUJQRlRPT0xESVIgOj0gJChUT09MU0RJUikvYnBmL2JwZnRvb2xcXG4tU0NSQVRDSF9ESVIgOj0gJChPVVRQVVQpL3Rvb2xzXFxuLUJVSUxEX0RJUiA6PSAkKFNDUkFUQ0hfRElSKS9idWlsZFxcbi1JTkNMVURFX0RJUiA6PSAkKFNDUkFUQ0hfRElSKS9pbmNsdWRlXFxuLUJQRk9CSiA6PSAkKEJVSUxEX0RJUikvbGliYnBmL2xpYmJwZi5hXFxuLWlmbmVxICgkKENST1NTX0NPTVBJTEUpLClcXG4tSE9TVF9CVUlMRF9ESVJcXHRcXHQ6PSAkKEJVSUxEX0RJUikvaG9zdFxcbi1IT1NUX1NDUkFUQ0hfRElSXFx0Oj0gJChPVVRQVVQpL2hvc3QtdG9vbHNcXG4tSE9TVF9JTkNMVURFX0RJUlxcdDo9ICQoSE9TVF9TQ1JBVENIX0RJUikvaW5jbHVkZVxcbi1lbHNlXFxuLUhPU1RfQlVJTERfRElSXFx0XFx0Oj0gJChCVUlMRF9ESVIpXFxuLUhPU1RfU0NSQVRDSF9ESVJcXHQ6PSAkKFNDUkFUQ0hfRElSKVxcbi1IT1NUX0lOQ0xVREVfRElSXFx0Oj0gJChJTkNMVURFX0RJUilcXG4tZW5kaWZcXG4tSE9TVF9CUEZPQkogOj0gJChIT1NUX0JVSUxEX0RJUikvbGliYnBmL2xpYmJwZi5hXFxuLVJFU09MVkVfQlRGSURTIDo9ICQoSE9TVF9CVUlMRF9ESVIpL3Jlc29sdmVfYnRmaWRzL3Jlc29sdmVfYnRmaWRzXFxuLVxcbi1WTUxJTlVYX0JURl9QQVRIUyA/PSAkKGlmICQoTyksJChPKS92bWxpbnV4KVxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0XFx0ICAgICAkKGlmICQoS0JVSUxEX09VVFBVVCksJChLQlVJTERfT1VUUFVUKS92bWxpbnV4KVxcdFxcXFxcXG4tXFx0XFx0ICAgICAuLi8uLi8uLi8uLi92bWxpbnV4XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHRcXHQgICAgIC9zeXMva2VybmVsL2J0Zi92bWxpbnV4XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHRcXHQgICAgIC9ib290L3ZtbGludXgtJChzaGVsbCB1bmFtZSAtcilcXG4tVk1MSU5VWF9CVEYgPz0gJChhYnNwYXRoICQoZmlyc3R3b3JkICQod2lsZGNhcmQgJChWTUxJTlVYX0JURl9QQVRIUykpKSlcXG4taWZlcSAoJChWTUxJTlVYX0JURiksKVxcbi0kKGVycm9yIENhbm5vdCBmaW5kIGEgdm1saW51eCBmb3IgVk1MSU5VWF9CVEYgYXQgYW55IG9mIFxcXCIkKFZNTElOVVhfQlRGX1BBVEhTKVxcXCIpXFxuLWVuZGlmXFxuLVxcbi0jIERlZmluZSBzaW1wbGUgYW5kIHNob3J0IGBtYWtlIHRlc3RfcHJvZ3NgLCBgbWFrZSB0ZXN0X3N5c2N0bGAsIGV0YyB0YXJnZXRzXFxuLSMgdG8gYnVpbGQgaW5kaXZpZHVhbCB0ZXN0cy5cXG4tIyBOT1RFOiBTZW1pY29sb24gYXQgdGhlIGVuZCBpcyBjcml0aWNhbCB0byBvdmVycmlkZSBsaWIubWsncyBkZWZhdWx0IHN0YXRpY1xcbi0jIHJ1bGUgZm9yIGJpbmFyaWVzLlxcbi0kKG5vdGRpciAkKFRFU1RfR0VOX1BST0dTKSk6ICU6ICQoT1VUUFVUKS8lIDtcXG4tXFxuLSMgc29ydCByZW1vdmVzIGxpYmJwZiBkdXBsaWNhdGVzIHdoZW4gbm90IGNyb3NzLWJ1aWxkaW5nXFxuLU1BS0VfRElSUyA6PSAkKHNvcnQgJChCVUlMRF9ESVIpL2xpYmJwZiAkKEhPU1RfQlVJTERfRElSKS9saWJicGZcXHRcXHRcXFxcXFxuLVxcdCAgICAgICAkKEhPU1RfQlVJTERfRElSKS9icGZ0b29sICQoSE9TVF9CVUlMRF9ESVIpL3Jlc29sdmVfYnRmaWRzXFx0XFxcXFxcbi1cXHQgICAgICAgJChJTkNMVURFX0RJUikpXFxuLSQoTUFLRV9ESVJTKTpcXG4tXFx0JChjYWxsIG1zZyxNS0RJUiwsJEApXFxuLVxcdCQoUSlta2RpciAtcCAkQFxcbisjIEJ1aWxkIHRoZSBsZWdhY3kgcHJvZ3MvKi5jIGxheW91dCB3aXRoIHRoZSBzaGFyZWQgQlBGIHJ1bGVzLlxcbitCUEZfU1JDUyAgICAgICA6PSAkKHdpbGRjYXJkIHByb2dzLyouYylcXG4rQlBGX1BST0dfRVhUICAgOj0gLmNcXG4rIyBCUEZESVIgaXMgZGVmaW5lZCB3aGVuIHRoaXMgcmVjdXJzaXZlIHZhcmlhYmxlIGlzIGV4cGFuZGVkLlxcbitCUEZfRVhUUkFfSERSUyAgPSAkKHdpbGRjYXJkIHByb2dzLyouaCkgJCh3aWxkY2FyZCAkKEJQRkRJUikvaGlkX2JwZl8qLmgpIFxcXFxcXG4rXFx0XFx0ICAkKHdpbGRjYXJkICQoQlBGRElSKS8qLmJwZi5oKVxcbiBcXG4tREVGQVVMVF9CUEZUT09MIDo9ICQoSE9TVF9TQ1JBVENIX0RJUikvc2Jpbi9icGZ0b29sXFxuK2luY2x1ZGUgLi4vbGliLm1rXFxuK2luY2x1ZGUgLi4vbGliLmJwZi5ta1xcbiBcXG4rIyBQcmVzZXJ2ZSB0aGUgZXhpc3RpbmcgaW5zdGFsbCBsaXN0LlxcbitURVNUX0dFTl9GSUxFUyArPSAkKEJQRl9PQkpTKVxcbiBURVNUX0dFTl9QUk9HU19FWFRFTkRFRCArPSAkKERFRkFVTFRfQlBGVE9PTClcXG4gXFxuLSQoVEVTVF9HRU5fUFJPR1MpICQoVEVTVF9HRU5fUFJPR1NfRVhURU5ERUQpOiAkKEJQRk9CSilcXG4tXFxuLUJQRlRPT0wgPz0gJChERUZBVUxUX0JQRlRPT0wpXFxuLSQoREVGQVVMVF9CUEZUT09MKTogJCh3aWxkY2FyZCAkKEJQRlRPT0xESVIpLyouW2NoXSAkKEJQRlRPT0xESVIpL01ha2VmaWxlKSAgICBcXFxcXFxuLVxcdFxcdCAgICAkKEhPU1RfQlBGT0JKKSB8ICQoSE9TVF9CVUlMRF9ESVIpL2JwZnRvb2xcXG4tXFx0JChRKSQoTUFLRSkgJChzdWJtYWtlX2V4dHJhcykgIC1DICQoQlBGVE9PTERJUilcXHRcXHRcXHQgICAgICAgXFxcXFxcbi1cXHRcXHQgICAgQVJDSD0gQ1JPU1NfQ09NUElMRT0gQ0M9JChIT1NUQ0MpIExEPSQoSE9TVExEKSBcXHQgICAgICAgXFxcXFxcbi1cXHRcXHQgICAgRVhUUkFfQ0ZMQUdTPSctZyAtTzAnXFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG4tXFx0XFx0ICAgIE9VVFBVVD0kKEhPU1RfQlVJTERfRElSKS9icGZ0b29sL1xcdFxcdFxcdCAgICAgICBcXFxcXFxuLVxcdFxcdCAgICBMSUJCUEZfT1VUUFVUPSQoSE9TVF9CVUlMRF9ESVIpL2xpYmJwZi9cXHRcXHQgICAgICAgXFxcXFxcbi1cXHRcXHQgICAgTElCQlBGX0RFU1RESVI9JChIT1NUX1NDUkFUQ0hfRElSKS9cXHRcXHRcXHQgICAgICAgXFxcXFxcbi1cXHRcXHQgICAgcHJlZml4PSBERVNURElSPSQoSE9TVF9TQ1JBVENIX0RJUikvIGluc3RhbGwtYmluXFxuLVxcbi0kKEJQRk9CSik6ICQod2lsZGNhcmQgJChCUEZESVIpLyouW2NoXSAkKEJQRkRJUikvTWFrZWZpbGUpXFx0XFx0ICAgICAgIFxcXFxcXG4tXFx0ICAgfCAkKEJVSUxEX0RJUikvbGliYnBmXFxuLVxcdCQoUSkkKE1BS0UpICQoc3VibWFrZV9leHRyYXMpIC1DICQoQlBGRElSKSBPVVRQVVQ9JChCVUlMRF9ESVIpL2xpYmJwZi8gXFxcXFxcbi1cXHRcXHQgICAgRVhUUkFfQ0ZMQUdTPSctZyAtTzAnXFx0XFx0XFx0XFx0ICAgICAgIFxcXFxcXG4tXFx0XFx0ICAgIERFU1RESVI9JChTQ1JBVENIX0RJUikgcHJlZml4PSBhbGwgaW5zdGFsbF9oZWFkZXJzXFxuLVxcbi1pZm5lcSAoJChCUEZPQkopLCQoSE9TVF9CUEZPQkopKVxcbi0kKEhPU1RfQlBGT0JKKTogJCh3aWxkY2FyZCAkKEJQRkRJUikvKi5bY2hdICQoQlBGRElSKS9NYWtlZmlsZSlcXHRcXHQgICAgICAgXFxcXFxcbi1cXHRcXHR8ICQoSE9TVF9CVUlMRF9ESVIpL2xpYmJwZlxcbi1cXHQkKFEpJChNQUtFKSAkKHN1Ym1ha2VfZXh0cmFzKSAtQyAkKEJQRkRJUikgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXG4tXFx0XFx0ICAgIEVYVFJBX0NGTEFHUz0nLWcgLU8wJyBBUkNIPSBDUk9TU19DT01QSUxFPVxcdFxcdCAgICAgICBcXFxcXFxuLVxcdFxcdCAgICBPVVRQVVQ9JChIT1NUX0JVSUxEX0RJUikvbGliYnBmLyBDQz0kKEhPU1RDQykgTEQ9JChIT1NUTEQpIFxcXFxcXG4tXFx0XFx0ICAgIERFU1RESVI9JChIT1NUX1NDUkFUQ0hfRElSKS8gcHJlZml4PSBhbGwgaW5zdGFsbF9oZWFkZXJzXFxuLWVuZGlmXFxuLVxcbi0kKElOQ0xVREVfRElSKS92bWxpbnV4Lmg6ICQoVk1MSU5VWF9CVEYpICQoQlBGVE9PTCkgfCAkKElOQ0xVREVfRElSKVxcbi1pZmVxICgkKFZNTElOVVhfSCksKVxcbi1cXHQkKGNhbGwgbXNnLEdFTiwsJEApXFxuLVxcdCQoUSkkKEJQRlRPT0wpIGJ0ZiBkdW1wIGZpbGUgJChWTUxJTlVYX0JURikgZm9ybWF0IGMgXFx1MDAzZSAkQFxcbi1lbHNlXFxuLVxcdCQoY2FsbCBtc2csQ1AsLCRAKVxcbi1cXHQkKFEpY3AgXFxcIiQoVk1MSU5VWF9IKVxcXCIgJEBcXG4tZW5kaWZcXG4tXFxuLSQoUkVTT0xWRV9CVEZJRFMpOiAkKEhPU1RfQlBGT0JKKSB8ICQoSE9TVF9CVUlMRF9ESVIpL3Jlc29sdmVfYnRmaWRzXFx0XFxcXFxcbi1cXHRcXHQgICAgICAgJChUT09MU0RJUikvYnBmL3Jlc29sdmVfYnRmaWRzL21haW4uY1xcdFxcXFxcXG4tXFx0XFx0ICAgICAgICQoVE9PTFNESVIpL2xpYi9yYnRyZWUuY1xcdFxcdFxcdFxcXFxcXG4tXFx0XFx0ICAgICAgICQoVE9PTFNESVIpL2xpYi96YWxsb2MuY1xcdFxcdFxcdFxcXFxcXG4tXFx0XFx0ICAgICAgICQoVE9PTFNESVIpL2xpYi9zdHJpbmcuY1xcdFxcdFxcdFxcXFxcXG4tXFx0XFx0ICAgICAgICQoVE9PTFNESVIpL2xpYi9jdHlwZS5jXFx0XFx0XFx0XFxcXFxcbi1cXHRcXHQgICAgICAgJChUT09MU0RJUikvbGliL3N0cl9lcnJvcl9yLmNcXG4tXFx0JChRKSQoTUFLRSkgJChzdWJtYWtlX2V4dHJhcykgLUMgJChUT09MU0RJUikvYnBmL3Jlc29sdmVfYnRmaWRzXFx0XFxcXFxcbi1cXHRcXHRDQz0kKEhPU1RDQykgTEQ9JChIT1NUTEQpIEFSPSQoSE9TVEFSKSBcXFxcXFxuLVxcdFxcdExJQkJQRl9JTkNMVURFPSQoSE9TVF9JTkNMVURFX0RJUikgXFxcXFxcbi1cXHRcXHRPVVRQVVQ9JChIT1NUX0JVSUxEX0RJUikvcmVzb2x2ZV9idGZpZHMvIEJQRk9CSj0kKEhPU1RfQlBGT0JKKVxcbi1cXG4tIyBHZXQgQ2xhbmcncyBkZWZhdWx0IGluY2x1ZGVzIG9uIHRoaXMgc3lzdGVtLCBhcyBvcHBvc2VkIHRvIHRob3NlIHNlZW4gYnlcXG4tIyAnLS10YXJnZXQ9YnBmJy4gVGhpcyBmaXhlcyBcXFwibWlzc2luZ1xcXCIgZmlsZXMgb24gc29tZSBhcmNoaXRlY3R1cmVzL2Rpc3Ryb3MsXFxuLSMgc3VjaCBhcyBhc20vYnl0ZW9yZGVyLmgsIGFzbS9zb2NrZXQuaCwgYXNtL3NvY2tpb3MuaCwgc3lzL2NkZWZzLmggZXRjLlxcbi0jXFxuLSMgVXNlICctaWRpcmFmdGVyJzogRG9uJ3QgaW50ZXJmZXJlIHdpdGggaW5jbHVkZSBtZWNoYW5pY3MgZXhjZXB0IHdoZXJlIHRoZVxcbi0jIGJ1aWxkIHdvdWxkIGhhdmUgZmFpbGVkIGFueXdheXMuXFxuLWRlZmluZSBnZXRfc3lzX2luY2x1ZGVzXFxuLSQoc2hlbGwgJCgxKSAtdiAtRSAtIFxcdTAwM2MvZGV2L251bGwgMlxcdTAwM2VcXHUwMDI2MSBcXFxcXFxuLVxcdHwgc2VkIC1uICcvXFx1MDAzYy4uLlxcdTAwM2Ugc2VhcmNoIHN0YXJ0cyBoZXJlOi8sL0VuZCBvZiBzZWFyY2ggbGlzdC4veyBzfCBcXFxcKC8uKlxcXFwpfC1pZGlyYWZ0ZXIgXFxcXDF8cCB9JykgXFxcXFxcbi0kKHNoZWxsICQoMSkgLWRNIC1FIC0gXFx1MDAzYy9kZXYvbnVsbCB8IGdyZXAgJ19fcmlzY3ZfeGxlbiAnIHwgYXdrICd7cHJpbnRmKFxcXCItRF9fcmlzY3ZfeGxlbj0lZCAtRF9fQklUU19QRVJfTE9ORz0lZFxcXCIsICQkMywgJCQzKX0nKVxcbi1lbmRlZlxcbi1cXG4tIyBEZXRlcm1pbmUgdGFyZ2V0IGVuZGlhbm5lc3MuXFxuLUlTX0xJVFRMRV9FTkRJQU4gPSAkKHNoZWxsICQoQ0MpIC1kTSAtRSAtIFxcdTAwM2MvZGV2L251bGwgfCBcXFxcXFxuLVxcdFxcdFxcdGdyZXAgJ2RlZmluZSBfX0JZVEVfT1JERVJfXyBfX09SREVSX0xJVFRMRV9FTkRJQU5fXycpXFxuLU1FTkRJQU49JChpZiAkKElTX0xJVFRMRV9FTkRJQU4pLC1tbGl0dGxlLWVuZGlhbiwtbWJpZy1lbmRpYW4pXFxuLVxcbi1DTEFOR19TWVNfSU5DTFVERVMgPSAkKGNhbGwgZ2V0X3N5c19pbmNsdWRlcywkKENMQU5HKSlcXG4tQlBGX0NGTEFHUyA9IC1nIC1XZXJyb3IgLURfX1RBUkdFVF9BUkNIXyQoU1JDQVJDSCkgJChNRU5ESUFOKSBcXHRcXHRcXFxcXFxuLVxcdCAgICAgLVduby1taWNyb3NvZnQtYW5vbi10YWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxuLVxcdCAgICAgLWZtcy1leHRlbnNpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxuLVxcdCAgICAgLUkkKElOQ0xVREVfRElSKVxcbi1cXG4tQ0xBTkdfQ0ZMQUdTID0gJChDTEFOR19TWVNfSU5DTFVERVMpIFxcXFxcXG4tXFx0ICAgICAgIC1Xbm8tY29tcGFyZS1kaXN0aW5jdC1wb2ludGVyLXR5cGVzXFxuLVxcbi0jIEJ1aWxkIEJQRiBvYmplY3QgdXNpbmcgQ2xhbmdcXG4tIyAkMSAtIGlucHV0IC5jIGZpbGVcXG4tIyAkMiAtIG91dHB1dCAubyBmaWxlXFxuLSMgJDMgLSBDRkxBR1NcXG4tZGVmaW5lIENMQU5HX0JQRl9CVUlMRF9SVUxFXFxuLVxcdCQoY2FsbCBtc2csQ0xORy1CUEYsJChUUlVOTkVSX0JJTkFSWSksJDIpXFxuLVxcdCQoUSkkKENMQU5HKSAkMyAtTzIgLS10YXJnZXQ9YnBmIC1jICQxIC1tY3B1PXYzIC1vICQyXFxuLWVuZGVmXFxuLSMgU2ltaWxhciB0byBDTEFOR19CUEZfQlVJTERfUlVMRSwgYnV0IHdpdGggZGlzYWJsZWQgYWx1MzJcXG4tZGVmaW5lIENMQU5HX05PQUxVMzJfQlBGX0JVSUxEX1JVTEVcXG4tXFx0JChjYWxsIG1zZyxDTE5HLUJQRiwkKFRSVU5ORVJfQklOQVJZKSwkMilcXG4tXFx0JChRKSQoQ0xBTkcpICQzIC1PMiAtLXRhcmdldD1icGYgLWMgJDEgLW1jcHU9djIgLW8gJDJcXG4tZW5kZWZcXG4tIyBCdWlsZCBCUEYgb2JqZWN0IHVzaW5nIEdDQ1xcbi1kZWZpbmUgR0NDX0JQRl9CVUlMRF9SVUxFXFxuLVxcdCQoY2FsbCBtc2csR0NDLUJQRiwkKFRSVU5ORVJfQklOQVJZKSwkMilcXG4tXFx0JChRKSQoQlBGX0dDQykgJDMgLU8yIC1jICQxIC1vICQyXFxuLWVuZGVmXFxuLVxcbi1CUEZfUFJPR1NfRElSIDo9IHByb2dzXFxuLUJQRl9CVUlMRF9SVUxFIDo9IENMQU5HX0JQRl9CVUlMRF9SVUxFXFxuLUJQRl9TUkNTIDo9ICQobm90ZGlyICQod2lsZGNhcmQgJChCUEZfUFJPR1NfRElSKS8qLmMpKVxcbi1CUEZfT0JKUyA6PSAkKHBhdHN1YnN0ICUuYywkKE9VVFBVVCkvJS5icGYubywgJChCUEZfU1JDUykpXFxuLUJQRl9TS0VMUyA6PSAkKHBhdHN1YnN0ICUuYywkKE9VVFBVVCkvJS5za2VsLmgsICQoQlBGX1NSQ1MpKVxcbi1URVNUX0dFTl9GSUxFUyArPSAkKEJQRl9PQkpTKVxcbisjIEtlZXAgYWxpYXNlcyBzdWNoIGFzIFxcXCJtYWtlIGhpZF9icGZcXFwiIGZyb20gbWF0Y2hpbmcgbGliLm1rJ3MgYmluYXJ5IHJ1bGUuXFxuKyQobm90ZGlyICQoVEVTVF9HRU5fUFJPR1MpKTogJTogJChPVVRQVVQpLyUgO1xcbiBcXG4tJChCUEZfUFJPR1NfRElSKS1icGZvYmpzIDo9IHlcXG4tJChCUEZfT0JKUyk6ICQoT1VUUFVUKS8lLmJwZi5vOlxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0ICAgICAkKEJQRl9QUk9HU19ESVIpLyUuY1xcdFxcdFxcdFxcXFxcXG4tXFx0ICAgICAkKHdpbGRjYXJkICQoQlBGX1BST0dTX0RJUikvKi5oKVxcdFxcdFxcXFxcXG4tXFx0ICAgICAkKElOQ0xVREVfRElSKS92bWxpbnV4LmhcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdCAgICAgJCh3aWxkY2FyZCAkKEJQRkRJUikvaGlkX2JwZl8qLmgpXFx0XFx0XFx0XFxcXFxcbi1cXHQgICAgICQod2lsZGNhcmQgJChCUEZESVIpLyouYnBmLmgpXFx0XFx0XFx0XFxcXFxcbi1cXHQgICAgIHwgJChPVVRQVVQpICQoQlBGT0JKKVxcbi1cXHQkKGNhbGwgJChCUEZfQlVJTERfUlVMRSksJFxcdTAwM2MsJEAsICQoQlBGX0NGTEFHUykpXFxuLVxcbi0kKEJQRl9TS0VMUyk6ICUuc2tlbC5oOiAlLmJwZi5vICQoQlBGVE9PTCkgfCAkKE9VVFBVVClcXG4tXFx0JChjYWxsIG1zZyxHRU4tU0tFTCwkKEJJTkFSWSksJEApXFxuLVxcdCQoUSkkKEJQRlRPT0wpIGdlbiBvYmplY3QgJChcXHUwMDNjOi5vPS5saW5rZWQxLm8pICRcXHUwMDNjXFxuLVxcdCQoUSkkKEJQRlRPT0wpIGdlbiBza2VsZXRvbiAkKFxcdTAwM2M6Lm89LmxpbmtlZDEubykgbmFtZSAkKG5vdGRpciAkKFxcdTAwM2M6LmJwZi5vPSkpIFxcdTAwM2UgJEBcXG4rIyBSZWxpbmsgdGVzdHMgd2hlbiB0aGUgaW4tdHJlZSBsaWJicGYgY2hhbmdlcy5cXG4rJChURVNUX0dFTl9QUk9HUyk6ICQoQlBGT0JKKVxcbiBcXG4gJChPVVRQVVQpLyUubzogJS5jICQoQlBGX1NLRUxTKSBoaWRfY29tbW9uLmhcXG4gXFx0JChjYWxsIG1zZyxDQywsJEApXFxuQEAgLTIzMyw1ICs4NSw0IEBAICQoT1VUUFVUKS8lOiAkKE9VVFBVVCkvJS5vXFxuIFxcdCQoY2FsbCBtc2csQklOQVJZLCwkQClcXG4gXFx0JChRKSQoTElOSy5jKSAkXiAkKExETElCUykgLW8gJEBcXG4gXFxuLUVYVFJBX0NMRUFOIDo9ICQoU0NSQVRDSF9ESVIpICQoSE9TVF9TQ1JBVENIX0RJUikgZmVhdHVyZSBicGZ0b29sXFx0XFxcXFxcbi1cXHQkKGFkZHByZWZpeCAkKE9VVFBVVCkvLCoubyAqLnNrZWwuaCBub19hbHUzMilcXG4rRVhUUkFfQ0xFQU4gKz0gJChPVVRQVVQpLyoub1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvcHJvZ3MvaGlkLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvcHJvZ3MvaGlkLmNcXG5pbmRleCBiMjFmYmIxM2M5MjZmLi5lYzczNGUxOGQyM2FlIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC9wcm9ncy9oaWQuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC9wcm9ncy9oaWQuY1xcbkBAIC0xMTEsNyArMTExLDcgQEAgaW50IGhpZF91c2VyX3Jhd19yZXF1ZXN0KHN0cnVjdCBoaWRfaHdfcmVxdWVzdF9zeXNjYWxsX2FyZ3MgKmFyZ3MpXFxuIHtcXG4gXFx0c3RydWN0IGhpZF9icGZfY3R4ICpjdHg7XFxuIFxcdGNvbnN0IHNpemVfdCBzaXplID0gYXJncy1cXHUwMDNlc2l6ZTtcXG4tXFx0aW50IGksIHJldCA9IDA7XFxuK1xcdGludCByZXQgPSAwO1xcbiBcXG4gXFx0aWYgKHNpemUgXFx1MDAzZSBzaXplb2YoYXJncy1cXHUwMDNlZGF0YSkpXFxuIFxcdFxcdHJldHVybiAtNzsgLyogLUUyQklHICovXFxuQEAgLTEzNyw3ICsxMzcsNyBAQCBpbnQgaGlkX3VzZXJfb3V0cHV0X3JlcG9ydChzdHJ1Y3QgaGlkX2h3X3JlcXVlc3Rfc3lzY2FsbF9hcmdzICphcmdzKVxcbiB7XFxuIFxcdHN0cnVjdCBoaWRfYnBmX2N0eCAqY3R4O1xcbiBcXHRjb25zdCBzaXplX3Qgc2l6ZSA9IGFyZ3MtXFx1MDAzZXNpemU7XFxuLVxcdGludCBpLCByZXQgPSAwO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4gXFxuIFxcdGlmIChzaXplIFxcdTAwM2Ugc2l6ZW9mKGFyZ3MtXFx1MDAzZWRhdGEpKVxcbiBcXHRcXHRyZXR1cm4gLTc7IC8qIC1FMkJJRyAqL1xcbkBAIC0xNjEsNyArMTYxLDcgQEAgaW50IGhpZF91c2VyX2lucHV0X3JlcG9ydChzdHJ1Y3QgaGlkX2h3X3JlcXVlc3Rfc3lzY2FsbF9hcmdzICphcmdzKVxcbiB7XFxuIFxcdHN0cnVjdCBoaWRfYnBmX2N0eCAqY3R4O1xcbiBcXHRjb25zdCBzaXplX3Qgc2l6ZSA9IGFyZ3MtXFx1MDAzZXNpemU7XFxuLVxcdGludCBpLCByZXQgPSAwO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4gXFxuIFxcdGlmIChzaXplIFxcdTAwM2Ugc2l6ZW9mKGFyZ3MtXFx1MDAzZWRhdGEpKVxcbiBcXHRcXHRyZXR1cm4gLTc7IC8qIC1FMkJJRyAqL1xcbkBAIC00MTcsNyArNDE3LDYgQEAgU0VDKFxcXCI/c3RydWN0X29wcy5zL2hpZF9od19vdXRwdXRfcmVwb3J0XFxcIilcXG4gaW50IEJQRl9QUk9HKGhpZF90ZXN0X2hpZHJhd19vdXRwdXRfcmVwb3J0LCBzdHJ1Y3QgaGlkX2JwZl9jdHggKmhjdHgsIF9fdTY0IHNvdXJjZSlcXG4ge1xcbiBcXHRfX3U4ICpkYXRhID0gaGlkX2JwZl9nZXRfZGF0YShoY3R4LCAwIC8qIG9mZnNldCAqLywgMyAvKiBzaXplICovKTtcXG4tXFx0aW50IHJldDtcXG4gXFxuIFxcdGlmICghZGF0YSlcXG4gXFx0XFx0cmV0dXJuIDA7IC8qIEVQRVJNIGNoZWNrICovXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2xpYi5icGYubWsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9saWIuYnBmLm1rXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi45MjM4Y2JmMWRlMDYyXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2xpYi5icGYubWtcXG5AQCAtMCwwICsxLDMyMSBAQFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNcXG4rIyBCdWlsZCBCUEYgcHJvZ3JhbXMgYW5kIHNrZWxldG9ucyBmb3Igc2VsZnRlc3RzLlxcbisjXFxuKyMgVXNlIGl0IGZyb20gYSB0ZXN0IE1ha2VmaWxlIGxpa2UgdGhpczpcXG4rI1xcbisjICAgICBCUEZfU1JDUyAgICAgICAgIDo9IGZvby5icGYuYyBiYXIuYnBmLmNcXG4rIyAgICAgVEVTVF9HRU5fUFJPR1MgICA6PSBmb29fdGVzdFxcbisjICAgICBPVkVSUklERV9UQVJHRVRTIDo9IDEgICAgICAgICAgICAgICMgc2V0IGJlZm9yZSBsaWIubWtcXG4rIyAgICAgaW5jbHVkZSAuLi9saWIubWtcXG4rIyAgICAgaW5jbHVkZSAuLi9saWIuYnBmLm1rXFxuKyNcXG4rIyAgICAgJChPVVRQVVQpL2Zvb190ZXN0OiBmb29fdGVzdC5jICQoQlBGX1NLRUxTKSAkKEJQRk9CSilcXG4rIyAgICAgICAgICQoY2FsbCBicGZfbGluaywkQCwkXFx1MDAzYylcXG4rI1xcbisjIERlcGVuZCBvbiAkKEJQRk9CSikgdG8gcmVsaW5rIHRoZSB0ZXN0IHdoZW4gbGliYnBmLmEgY2hhbmdlcy5cXG4rI1xcbisjIE9wdGlvbnMgdG8gc2V0IGJlZm9yZSBpbmNsdWRpbmcgbGliLmJwZi5tazpcXG4rIyAgIEJQRl9QUk9HX0VYVCAgICAgLSBzb3VyY2UgZW5kaW5nOyBkZWZhdWx0IC5icGYuYy4gVXNlIC5jIGZvciBwcm9ncy9mb28uYy5cXG4rIyAgIEJQRl9FWFRSQV9IRFJTICAgLSBtb3JlIGhlYWRlcnMgbmVlZGVkIGJ5IHRoZSBCUEYgb2JqZWN0cy5cXG4rIyAgIEJQRl9FWFRSQV9DRkxBR1MgLSBtb3JlIGZsYWdzIGZvciBjb21waWxpbmcgQlBGIHByb2dyYW1zLlxcbisjICAgQlBGX1NLRUxfRVhUICAgICAtIHNrZWxldG9uIGhlYWRlciBlbmRpbmc7IGRlZmF1bHQgLnNrZWwuaC4gTXVzdCBlbmQgaW5cXG4rIyAgICAgICAgICAgICAgICAgICAgICBza2VsLmguXFxuKyMgICBCUEZfR0VOX1NVQlNLRUwgIC0gYWxzbyBjcmVhdGUgYSBzdWJza2VsZXRvbiBoZWFkZXIgd2hlbiBzZXQuXFxuKyMgICBCUEZfT0JKX0RJUiAgICAgIC0gZm9sZGVyIGZvciBCUEYgb2JqZWN0czsgZGVmYXVsdCAkKE9VVFBVVCkuXFxuKyMgICBCUEZfU0tFTF9ESVIgICAgIC0gZm9sZGVyIGZvciBza2VsZXRvbiBoZWFkZXJzOyBkZWZhdWx0ICQoT1VUUFVUKS5cXG4rI1xcbisjIFNldCBvdXRwdXQgZGlyZWN0b3JpZXMgdGhhdCB1c2UgJChPVVRQVVQpIGFmdGVyIGluY2x1ZGluZyBsaWIubWsuXFxuKyNcXG4rIyBCUEZfQ0ZMQUdTIG1heSBiZSByZXBsYWNlZCBhZnRlciB0aGlzIGluY2x1ZGUuIEdlbmVyYXRlZCBuYW1lcyB1c2UgdGhlIHNvdXJjZVxcbisjIHN0ZW0gd2l0aG91dCBpdHMgZGlyZWN0b3J5LlxcbisjXFxuKyMgSW5jbHVkZSBsaWIubWsgZmlyc3QuIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBCUEYgYnVpbGQgdmFyaWFibGVzIGFuZCBicGZfbGluayxcXG4rIyBleHRlbmRzIGFsbCwgQ0ZMQUdTIGFuZCBFWFRSQV9DTEVBTiwgYW5kIGVuYWJsZXMgLkRFTEVURV9PTl9FUlJPUi5cXG4rXFxuK2luY2x1ZGUgJCh0b3Bfc3JjZGlyKS90b29scy9zY3JpcHRzL01ha2VmaWxlLmFyY2hcXHQjIEFSQ0ggLyBTUkNBUkNIIC8gSE9TVEFSQ0hcXG4rXFxuKyMgUmVtb3ZlIHBhcnRpYWwgZmlsZXMgd3JpdHRlbiBkaXJlY3RseSB0byAkQC5cXG4rLkRFTEVURV9PTl9FUlJPUjpcXG4rXFxuKyMgTWF0Y2ggdGhlIGxpYmJwZiBhbmQgYnBmdG9vbCBob3N0IGNvbXBpbGVyIHRvIExMVk09LlxcbitpZm5lcSAoJChMTFZNKSwpXFxuK0hPU1RDQyA/PSAkKExMVk1fUFJFRklYKWNsYW5nJChMTFZNX1NVRkZJWClcXG4rSE9TVExEID89ICQoTExWTV9QUkVGSVgpbGQubGxkJChMTFZNX1NVRkZJWClcXG4rZWxzZVxcbitIT1NUQ0MgPz0gZ2NjXFxuK0hPU1RMRCA/PSBsZFxcbitlbmRpZlxcbitDTEFORyAgPz0gY2xhbmdcXG4rXFxuK2lmbmVxICgkKFYpLDEpXFxuK2xpYl9icGZfc3VibWFrZV9leHRyYXMgOj0gZmVhdHVyZV9kaXNwbGF5PTBcXG4rZW5kaWZcXG4rXFxuKyMgTWF0Y2ggc2VsZnRlc3RzL2JwZiBkZWJ1ZyBhbmQgcmVsZWFzZSBvcHRpbWl6YXRpb24uXFxuK09QVF9GTEFHUyA/PSAkKGlmICQoUkVMRUFTRSksLU8yLC1PMClcXG4rXFxuKyMgLS0tLSBmaWxlcyBhbmQgdG9vbHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuKyMgVXNlIG9uZSBmdWxsIHBhdGguIERpZmZlcmVudCBmb3JtcyBvZiB0aGUgc2FtZSAtSSBwYXRoIGNhbiBjaGFuZ2UgQlRGIG9yZGVyLlxcbitsaWJfYnBmX3Rvb2xzX2RpciAgICAgICAgIDo9ICQoYWJzcGF0aCAkKHRvcF9zcmNkaXIpL3Rvb2xzKVxcbitsaWJfYnBmX2RpciAgICAgICAgICAgICAgIDo9ICQobGliX2JwZl90b29sc19kaXIpL2xpYi9icGZcXG4rbGliX2JwZl90b29sc19pbmNsdWRlX2RpciA6PSAkKGxpYl9icGZfdG9vbHNfZGlyKS9pbmNsdWRlXFxuK2xpYl9icGZfYnBmdG9vbF9kaXIgICAgICAgOj0gJChsaWJfYnBmX3Rvb2xzX2RpcikvYnBmL2JwZnRvb2xcXG4rbGliX2JwZl9hcGlfZGlyICAgICAgICAgICA6PSAkKGxpYl9icGZfdG9vbHNfaW5jbHVkZV9kaXIpL3VhcGlcXG4rbGliX2JwZl9zb3VyY2VzICAgICAgICAgICA6PSAkKHdpbGRjYXJkICQobGliX2JwZl9kaXIpLyouW2NoXSBcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICAkKGxpYl9icGZfZGlyKS9NYWtlZmlsZSlcXG4rbGliX2JwZl9oZWFkZXJfc291cmNlcyAgICA6PSAkKGZpbHRlciAlLmgsJChsaWJfYnBmX3NvdXJjZXMpKSBcXFxcXFxuK1xcdFxcdFxcdFxcdCAgICAgJChsaWJfYnBmX2FwaV9kaXIpL2xpbnV4L2JwZi5oXFxuKyMgS2VlcCB0aGVzZSBuYW1lcyBmb3IgY2FsbGVycyB3aGljaCBhZGQgdGhlaXIgb3duIEJQRiBmbGFncyBvciBkZXBlbmRlbmNpZXMuXFxuK0JQRkRJUiAgICAgOj0gJChsaWJfYnBmX2RpcilcXG4rQVBJRElSICAgICA6PSAkKGxpYl9icGZfYXBpX2RpcilcXG4rXFxuKyMgS2VlcCBwcml2YXRlIGJ1aWxkIGZpbGVzIHVuZGVyICQoT1VUUFVUKSBmb3IgYm90aCBpbi10cmVlIGFuZCBPPSBidWlsZHMuXFxuK2xpYl9icGZfc2NyYXRjaF9kaXIgOj0gJChPVVRQVVQpL3Rvb2xzXFxuK2xpYl9icGZfYnVpbGRfZGlyICAgOj0gJChsaWJfYnBmX3NjcmF0Y2hfZGlyKS9idWlsZFxcbitsaWJfYnBmX2luY2x1ZGVfZGlyIDo9ICQobGliX2JwZl9zY3JhdGNoX2RpcikvaW5jbHVkZVxcbisjIElOQ0xVREVfRElSIGlzIGFsc28gdXNlZCBieSBjYWxsZXJzIHRoYXQgcmVwbGFjZSBCUEZfQ0ZMQUdTLlxcbitJTkNMVURFX0RJUiA6PSAkKGxpYl9icGZfaW5jbHVkZV9kaXIpXFxuK0JQRk9CSiAgICAgIDo9ICQobGliX2JwZl9idWlsZF9kaXIpL2xpYmJwZi9saWJicGYuYVxcbitcXG4rIyBDcm9zcyBidWlsZHMgdXNlIGEgc2VwYXJhdGUgbmF0aXZlIGxpYmJwZiBmb3IgYnBmdG9vbC5cXG4raWZuZXEgKCQoQ1JPU1NfQ09NUElMRSkkKGZpbHRlci1vdXQgJChIT1NUQVJDSCksJChTUkNBUkNIKSksKVxcbitsaWJfYnBmX2hvc3RfYnVpbGRfZGlyICAgOj0gJChsaWJfYnBmX2J1aWxkX2RpcikvaG9zdFxcbitsaWJfYnBmX2hvc3Rfc2NyYXRjaF9kaXIgOj0gJChPVVRQVVQpL2hvc3QtdG9vbHNcXG4rZWxzZVxcbitsaWJfYnBmX2hvc3RfYnVpbGRfZGlyICAgOj0gJChsaWJfYnBmX2J1aWxkX2RpcilcXG4rbGliX2JwZl9ob3N0X3NjcmF0Y2hfZGlyIDo9ICQobGliX2JwZl9zY3JhdGNoX2RpcilcXG4rZW5kaWZcXG4rbGliX2JwZl9ob3N0X29iaiA6PSAkKGxpYl9icGZfaG9zdF9idWlsZF9kaXIpL2xpYmJwZi9saWJicGYuYVxcbitERUZBVUxUX0JQRlRPT0wgIDo9ICQobGliX2JwZl9ob3N0X3NjcmF0Y2hfZGlyKS9zYmluL2JwZnRvb2xcXG4rQlBGVE9PTCAgICAgICAgICA/PSAkKERFRkFVTFRfQlBGVE9PTClcXG4rXFxuKyMgUmV1c2UgdGFyZ2V0IFVTRVJDRkxBR1Mgb25seSB3aGVuIGJwZnRvb2wgc2hhcmVzIHRoZSB0YXJnZXQgbGliYnBmLlxcbitpZmVxICgkKEJQRk9CSiksJChsaWJfYnBmX2hvc3Rfb2JqKSlcXG4rbGliX2JwZl9ob3N0X3VzZXJfY2ZsYWdzIDo9ICQoVVNFUkNGTEFHUylcXG4rZW5kaWZcXG4rXFxuKyMgLS0tLSBmaW5kIHZtbGludXggQlRGIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuK1ZNTElOVVhfQlRGX1BBVEhTID89ICQoaWYgJChPKSwkKE8pL3ZtbGludXgpXFx0XFx0XFx0XFx0XFxcXFxcbitcXHRcXHQgICAgICQoaWYgJChLQlVJTERfT1VUUFVUKSwkKEtCVUlMRF9PVVRQVVQpL3ZtbGludXgpXFx0XFxcXFxcbitcXHRcXHQgICAgICQodG9wX3NyY2Rpcikvdm1saW51eFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0ICAgICAvc3lzL2tlcm5lbC9idGYvdm1saW51eFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0ICAgICAvYm9vdC92bWxpbnV4LSQoc2hlbGwgdW5hbWUgLXIpXFxuK1ZNTElOVVhfQlRGID89ICQoYWJzcGF0aCAkKGZpcnN0d29yZCAkKHdpbGRjYXJkICQoVk1MSU5VWF9CVEZfUEFUSFMpKSkpXFxuKyMgRGVsYXkgbWlzc2luZy12bWxpbnV4IGVycm9ycyBzbyBcXFwibWFrZSBjbGVhblxcXCIgc3RpbGwgd29ya3MuXFxuK2xpYl9icGZfdm1saW51eF9kZXBzIDo9ICQoaWYgJChWTUxJTlVYX0gpLCQoVk1MSU5VWF9IKSwkKFZNTElOVVhfQlRGKSAkKEJQRlRPT0wpKVxcbitcXG4rIyAtLS0tIGNvbXBpbGVyIGZsYWdzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rIyBGaW5kIHRoZSBub3JtYWwgc3lzdGVtIGhlYWRlcnMgdGhhdCBDbGFuZyBvbWl0cyB3aXRoIC0tdGFyZ2V0PWJwZi4gUHV0IHRoZW1cXG4rIyBsYXN0IHdpdGggLWlkaXJhZnRlciBzbyB0aGV5IGNhbm5vdCByZXBsYWNlIHByb2plY3QgaGVhZGVycy5cXG4rZGVmaW5lIGxpYl9icGZfZ2V0X3N5c19pbmNsdWRlc1xcbiskKHNoZWxsICQoMSkgJCgyKSAtdiAtRSAtIFxcdTAwM2MvZGV2L251bGwgMlxcdTAwM2VcXHUwMDI2MSBcXFxcXFxuK1xcdHwgc2VkIC1uICcvXFx1MDAzYy4uLlxcdTAwM2Ugc2VhcmNoIHN0YXJ0cyBoZXJlOi8sL0VuZCBvZiBzZWFyY2ggbGlzdC4veyBzfCBcXFxcKC8uKlxcXFwpfC1pZGlyYWZ0ZXIgXFxcXDF8cCB9JykgXFxcXFxcbiskKHNoZWxsICQoMSkgJCgyKSAtZE0gLUUgLSBcXHUwMDNjL2Rldi9udWxsIHwgZ3JlcCAnX19yaXNjdl94bGVuICcgfCBhd2sgJ3twcmludGYoXFxcIi1EX19yaXNjdl94bGVuPSVkIC1EX19CSVRTX1BFUl9MT05HPSVkXFxcIiwgJCQzLCAkJDMpfScpIFxcXFxcXG4rJChzaGVsbCAkKDEpICQoMikgLWRNIC1FIC0gXFx1MDAzYy9kZXYvbnVsbCB8IGdyZXAgJ19fbG9vbmdhcmNoX2dybGVuICcgfCBhd2sgJ3twcmludGYoXFxcIi1EX19CSVRTX1BFUl9MT05HPSVkXFxcIiwgJCQzKX0nKSBcXFxcXFxuKyQoc2hlbGwgJCgxKSAkKDIpIC1kTSAtRSAtIFxcdTAwM2MvZGV2L251bGwgfCBncmVwIC1FICdNSVBTKEVMfEVCKXxfTUlQU19TWihQVFJ8TE9ORykgfF9NSVBTX1NJTSB8X0FCSShPMzJ8TjMyfDY0KSAnIHwgYXdrICd7cHJpbnRmKFxcXCItRCVzPSVzIFxcXCIsICQkMiwgJCQzKX0nKVxcbitlbmRlZlxcbitpZm5lcSAoJChDUk9TU19DT01QSUxFKSwpXFxuK2xpYl9icGZfY2xhbmdfdGFyZ2V0X2FyY2ggPSAtLXRhcmdldD0kKG5vdGRpciAkKENST1NTX0NPTVBJTEU6JS09JSkpXFxuK2VuZGlmXFxuKyMgRmluZCB0aGUgc3lzdGVtIGluY2x1ZGUgZmxhZ3Mgb25jZSBhbmQgcmV1c2UgdGhlbS5cXG4rQ0xBTkdfU1lTX0lOQ0xVREVTIDo9ICQoY2FsbCBsaWJfYnBmX2dldF9zeXNfaW5jbHVkZXMsJChDTEFORyksJChsaWJfYnBmX2NsYW5nX3RhcmdldF9hcmNoKSlcXG4rXFxuK2xpYl9icGZfaXNfbGl0dGxlX2VuZGlhbiA6PSAkKHNoZWxsICQoQ0MpIC1kTSAtRSAtIFxcdTAwM2MvZGV2L251bGwgfCBcXFxcXFxuK1xcdFxcdFxcdFxcdCAgICBncmVwICdkZWZpbmUgX19CWVRFX09SREVSX18gX19PUkRFUl9MSVRUTEVfRU5ESUFOX18nKVxcbitNRU5ESUFOIDo9ICQoaWYgJChsaWJfYnBmX2lzX2xpdHRsZV9lbmRpYW4pLC1tbGl0dGxlLWVuZGlhbiwtbWJpZy1lbmRpYW4pXFxuK1xcbisjIFVzZSBCUEYgQ1BVIHYzIHdoZW4gQ2xhbmcgc3VwcG9ydHMgaXQuIE90aGVyd2lzZSB1c2UgdjIuXFxuK2xpYl9icGZfY2xhbmdfY3B1IDo9ICQoc2hlbGwgJChDTEFORykgLS10YXJnZXQ9YnBmIC1tY3B1PWhlbHAgMlxcdTAwM2VcXHUwMDI2MSB8IFxcXFxcXG4rXFx0XFx0XFx0ICAgICBncmVwIC1xICd2MycgXFx1MDAyNlxcdTAwMjYgZWNobyB2MyB8fCBlY2hvIHYyKVxcbitcXG4rIyBBY2NlcHQgYW5vbnltb3VzIHN0cnVjdCBhbmQgdW5pb24gbWVtYmVycyBpbiB2bWxpbnV4LmguXFxuK0JQRl9DRkxBR1MgPSAtZyAtV2FsbCAtV2Vycm9yIC1EX19UQVJHRVRfQVJDSF8kKFNSQ0FSQ0gpICQoTUVORElBTilcXHRcXFxcXFxuK1xcdCAgICAgLUkkKElOQ0xVREVfRElSKSAtSSQoQVBJRElSKVxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0ICAgICAtc3RkPWdudTExXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQgICAgIC1mbm8tc3RyaWN0LWFsaWFzaW5nXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQgICAgIC1mbXMtZXh0ZW5zaW9ucyAtV25vLW1pY3Jvc29mdC1hbm9uLXRhZ1xcdFxcdFxcdFxcXFxcXG4rXFx0ICAgICAtV25vLWNvbXBhcmUtZGlzdGluY3QtcG9pbnRlci10eXBlc1xcdFxcdFxcdFxcXFxcXG4rXFx0ICAgICAkKENMQU5HX1NZU19JTkNMVURFUykgJChCUEZfRVhUUkFfQ0ZMQUdTKVxcbitcXG4rIyAkMSA9IHNvdXJjZSwgJDIgPSBvYmplY3QuIC1NTUQgLU1QIHRyYWNrcyBub24tc3lzdGVtIGhlYWRlcnMuXFxuK2RlZmluZSBsaWJfYnBmX2J1aWxkX3J1bGVcXG4rXFx0JChjYWxsIG1zZyxDTE5HLUJQRiwsJDIpXFxuK1xcdCQoUSkkKENMQU5HKSAkKEJQRl9DRkxBR1MpIC1PMiAtLXRhcmdldD1icGYgLW1jcHU9JChsaWJfYnBmX2NsYW5nX2NwdSkgXFxcXFxcbitcXHRcXHQtTU1EIC1NUCAtYyAkMSAtbyAkMlxcbitlbmRlZlxcbitcXG4rIyAtLS0tIG91dHB1dCBmb2xkZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rQlBGX09CSl9ESVIgID89ICQoT1VUUFVUKVxcbitCUEZfU0tFTF9ESVIgPz0gJChPVVRQVVQpXFxuKyMgUmVqZWN0IGVtcHR5IGRpcmVjdG9yaWVzIGJlZm9yZSBjbGVhbnVwIGdsb2JzIGNhbiByZWFjaCB0aGUgZmlsZXN5c3RlbSByb290LlxcbitpZmVxICgkKHN0cmlwICQoQlBGX09CSl9ESVIpKSwpXFxuKyQoZXJyb3IgbGliLmJwZi5tazogQlBGX09CSl9ESVIgaXMgZW1wdHk7IHNldCBpdCBhZnRlciBcXFwiaW5jbHVkZSAuLi9saWIubWtcXFwiKVxcbitlbmRpZlxcbitpZmVxICgkKHN0cmlwICQoQlBGX1NLRUxfRElSKSksKVxcbiskKGVycm9yIGxpYi5icGYubWs6IEJQRl9TS0VMX0RJUiBpcyBlbXB0eTsgc2V0IGl0IGFmdGVyIFxcXCJpbmNsdWRlIC4uL2xpYi5ta1xcXCIpXFxuK2VuZGlmXFxuK1xcbisjIC0tLS0gYnVpbGQgZm9sZGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbitsaWJfYnBmX21ha2VfZGlycyA6PSAkKHNvcnQgJChsaWJfYnBmX2J1aWxkX2RpcikvbGliYnBmXFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHQgICAgJChsaWJfYnBmX2hvc3RfYnVpbGRfZGlyKS9saWJicGZcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdCAgICAkKGxpYl9icGZfaG9zdF9idWlsZF9kaXIpL2JwZnRvb2xcXHRcXHRcXFxcXFxuK1xcdFxcdFxcdCAgICAkKGxpYl9icGZfaW5jbHVkZV9kaXIpXFx0XFx0XFx0XFxcXFxcbitcXHRcXHRcXHQgICAgJChmaWx0ZXItb3V0ICQoT1VUUFVUKSwkKEJQRl9PQkpfRElSKSAkKEJQRl9TS0VMX0RJUikpKVxcbiskKGxpYl9icGZfbWFrZV9kaXJzKTpcXG4rXFx0JChjYWxsIG1zZyxNS0RJUiwsJEApXFxuK1xcdCQoUSlta2RpciAtcCAkQFxcbitcXG4rIyAtLS0tIHRhcmdldCBsaWJicGYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rIyBQYXNzIHVuZXhwb3J0ZWQgdG9vbGNoYWluIHNldHRpbmdzIGFuZCBidWlsZCBQSUMgZm9yIFBJRSB0ZXN0IGJpbmFyaWVzLlxcbisjIGxpYmJwZiBjb25zdW1lcyBVU0VSQ0ZMQUdTIHRocm91Z2ggRVhUUkFfQ0ZMQUdTLlxcbiskKEJQRk9CSik6ICQobGliX2JwZl9zb3VyY2VzKSAkKGxpYl9icGZfYXBpX2RpcikvbGludXgvYnBmLmggXFxcXFxcbitcXHQgICB8ICQobGliX2JwZl9idWlsZF9kaXIpL2xpYmJwZlxcbitcXHQkKFEpJChNQUtFKSAkKGxpYl9icGZfc3VibWFrZV9leHRyYXMpIC1DICQobGliX2JwZl9kaXIpIFxcXFxcXG4rXFx0XFx0ICAgIE9VVFBVVD0kKGxpYl9icGZfYnVpbGRfZGlyKS9saWJicGYvIFxcXFxcXG4rXFx0XFx0ICAgIEFSQ0g9JChBUkNIKSBDUk9TU19DT01QSUxFPSQoQ1JPU1NfQ09NUElMRSkgQ0M9XFxcIiQoQ0MpXFxcIiAgICAgXFxcXFxcbitcXHRcXHQgICAgRVhUUkFfQ0ZMQUdTPSctZyAkKE9QVF9GTEFHUykgLWZQSUMgJChFWFRSQV9DRkxBR1MpICQoVVNFUkNGTEFHUyknIFxcXFxcXG4rXFx0XFx0ICAgIERFU1RESVI9JChsaWJfYnBmX3NjcmF0Y2hfZGlyKSBwcmVmaXg9IGFsbCBpbnN0YWxsX2hlYWRlcnNcXG4rXFxuKyMgLS0tLSBob3N0IGxpYmJwZiwgb25seSB3aGVuIHRoZSB0YXJnZXQgZGlmZmVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuK2lmbmVxICgkKEJQRk9CSiksJChsaWJfYnBmX2hvc3Rfb2JqKSlcXG4rJChsaWJfYnBmX2hvc3Rfb2JqKTogJChsaWJfYnBmX3NvdXJjZXMpICQobGliX2JwZl9hcGlfZGlyKS9saW51eC9icGYuaCBcXFxcXFxuK1xcdFxcdHwgJChsaWJfYnBmX2hvc3RfYnVpbGRfZGlyKS9saWJicGZcXG4rXFx0JChRKSQoTUFLRSkgJChsaWJfYnBmX3N1Ym1ha2VfZXh0cmFzKSAtQyAkKGxpYl9icGZfZGlyKSBcXFxcXFxuK1xcdFxcdCAgICBBUkNIPSBDUk9TU19DT01QSUxFPSBcXFxcXFxuK1xcdFxcdCAgICBPVVRQVVQ9JChsaWJfYnBmX2hvc3RfYnVpbGRfZGlyKS9saWJicGYvIFxcXFxcXG4rXFx0XFx0ICAgIENDPVxcXCIkKEhPU1RDQylcXFwiIExEPVxcXCIkKEhPU1RMRClcXFwiIFxcXFxcXG4rXFx0XFx0ICAgIEVYVFJBX0NGTEFHUz0nLWcgJChPUFRfRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKScgXFxcXFxcbitcXHRcXHQgICAgREVTVERJUj0kKGxpYl9icGZfaG9zdF9zY3JhdGNoX2RpcikgcHJlZml4PSBhbGwgaW5zdGFsbF9oZWFkZXJzXFxuK2VuZGlmXFxuK1xcbisjIC0tLS0gaG9zdCBicGZ0b29sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbiskKERFRkFVTFRfQlBGVE9PTCk6ICQod2lsZGNhcmQgJChsaWJfYnBmX2JwZnRvb2xfZGlyKS8qLltjaF0gXFxcXFxcbitcXHRcXHRcXHRcXHQgJChsaWJfYnBmX2JwZnRvb2xfZGlyKS9NYWtlZmlsZSkgXFxcXFxcbitcXHRcXHQgICAgJChsaWJfYnBmX2hvc3Rfb2JqKSB8ICQobGliX2JwZl9ob3N0X2J1aWxkX2RpcikvYnBmdG9vbFxcbitcXHQkKFEpJChNQUtFKSAkKGxpYl9icGZfc3VibWFrZV9leHRyYXMpIC1DICQobGliX2JwZl9icGZ0b29sX2RpcikgXFxcXFxcbitcXHRcXHQgICAgQVJDSD0gQ1JPU1NfQ09NUElMRT0gQ0M9XFxcIiQoSE9TVENDKVxcXCIgTEQ9XFxcIiQoSE9TVExEKVxcXCIgXFxcXFxcbitcXHRcXHQgICAgRVhUUkFfQ0ZMQUdTPSctZyAkKE9QVF9GTEFHUykgJChFWFRSQV9DRkxBR1MpICQobGliX2JwZl9ob3N0X3VzZXJfY2ZsYWdzKScgXFxcXFxcbitcXHRcXHQgICAgRVhUUkFfTERGTEFHUz0nJChFWFRSQV9MREZMQUdTKSdcXHRcXHQgIFxcXFxcXG4rXFx0XFx0ICAgIE9VVFBVVD0kKGxpYl9icGZfaG9zdF9idWlsZF9kaXIpL2JwZnRvb2wvXFx0ICBcXFxcXFxuK1xcdFxcdCAgICBMSUJCUEZfT1VUUFVUPSQobGliX2JwZl9ob3N0X2J1aWxkX2RpcikvbGliYnBmLyBcXFxcXFxuK1xcdFxcdCAgICBMSUJCUEZfREVTVERJUj0kKGxpYl9icGZfaG9zdF9zY3JhdGNoX2RpcikvXFx0ICBcXFxcXFxuK1xcdFxcdCAgICBwcmVmaXg9IERFU1RESVI9JChsaWJfYnBmX2hvc3Rfc2NyYXRjaF9kaXIpLyBpbnN0YWxsLWJpblxcbitcXG4rIyAtLS0tIGJ1aWxkIHZtbGludXguaCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rbGliX2JwZl92bWxpbnV4X2ggICAgIDo9ICQoSU5DTFVERV9ESVIpL3ZtbGludXguaFxcbitsaWJfYnBmX3ZtbGludXhfc3RhbXAgOj0gJChJTkNMVURFX0RJUikvdm1saW51eC5oLnN0YW1wXFxuK1xcbisjIFByZXNlcnZlIHZtbGludXguaCdzIHRpbWVzdGFtcCB3aGVuIGl0cyBjb250ZW50cyBkbyBub3QgY2hhbmdlLlxcbitpZmVxICgkKHdpbGRjYXJkICQobGliX2JwZl92bWxpbnV4X2gpKSwpXFxuKyMgUmVnZW5lcmF0ZSBpZiB0aGUgaGVhZGVyIGlzIG1pc3NpbmcgYnV0IGl0cyBzdGFtcCByZW1haW5zLlxcbisuUEhPTlk6ICQobGliX2JwZl92bWxpbnV4X3N0YW1wKVxcbitlbmRpZlxcbitcXG4rIyBVc2UgYSBub3JtYWwgZWRnZSBzbyBkZXBlbmRlbnRzIHNlZSBhIGNoYW5nZWQgaGVhZGVyIGluIHRoZSBzYW1lIG1ha2UgcnVuLlxcbiskKGxpYl9icGZfdm1saW51eF9oKTogJChsaWJfYnBmX3ZtbGludXhfc3RhbXApIDtcXG4rXFxuKyQobGliX2JwZl92bWxpbnV4X3N0YW1wKTogJChsaWJfYnBmX3ZtbGludXhfZGVwcykgfCAkKElOQ0xVREVfRElSKVxcbitpZmVxICgkKFZNTElOVVhfSCksKVxcbitcXHQkKGNhbGwgbXNnLEdFTiwsJChsaWJfYnBmX3ZtbGludXhfaCkpXFxuK1xcdCQoUSl0ZXN0IC1uIFxcXCIkKFZNTElOVVhfQlRGKVxcXCIgfHwgeyBcXFxcXFxuK1xcdFxcdGVjaG8gXFxcImxpYi5icGYubWs6IG5vIHZtbGludXggYXQgYW55IG9mIFxcXFxcXFwiJChWTUxJTlVYX0JURl9QQVRIUylcXFxcXFxcIlxcXCIgXFx1MDAzZVxcdTAwMjYyOyBcXFxcXFxuK1xcdFxcdGV4aXQgMTsgfVxcbitcXHQkKFEpJChCUEZUT09MKSBidGYgZHVtcCBmaWxlICQoVk1MSU5VWF9CVEYpIGZvcm1hdCBjIFxcdTAwM2UgJEAudG1wXFxuK2Vsc2VcXG4rXFx0JChjYWxsIG1zZyxDUCwsJChsaWJfYnBmX3ZtbGludXhfaCkpXFxuK1xcdCQoUSljcCBcXFwiJChWTUxJTlVYX0gpXFxcIiAkQC50bXBcXG4rZW5kaWZcXG4rXFx0JChRKWNtcCAtcyAkQC50bXAgJChsaWJfYnBmX3ZtbGludXhfaCkgfHwgbXYgJEAudG1wICQobGliX2JwZl92bWxpbnV4X2gpXFxuK1xcdCQoUSlybSAtZiAkQC50bXBcXG4rXFx0JChRKXRvdWNoICRAXFxuK1xcbisjIC0tLS0gQlBGIG9iamVjdHMgYW5kIHNrZWxldG9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbitCUEZfUFJPR19FWFQgPz0gLmJwZi5jXFxuKyMgRWFjaCBzb3VyY2UgbXVzdCBlbmQgd2l0aCBCUEZfUFJPR19FWFQgc28gTWFrZSBjYW4gcmVtb3ZlIHRoYXQgZW5kaW5nLlxcbitsaWJfYnBmX2JhZF9zcmNzIDo9ICQoZmlsdGVyLW91dCAlJChCUEZfUFJPR19FWFQpLCQoQlBGX1NSQ1MpKVxcbitpZm5lcSAoJChsaWJfYnBmX2JhZF9zcmNzKSwpXFxuKyQoZXJyb3IgbGliLmJwZi5tazogQlBGX1NSQ1MgZW50cmllcyBtdXN0IGVuZCBpbiAkKEJQRl9QUk9HX0VYVCk6ICQobGliX2JwZl9iYWRfc3JjcykpXFxuK2VuZGlmXFxuK2xpYl9icGZfc3RlbXMgOj0gJChwYXRzdWJzdCAlJChCUEZfUFJPR19FWFQpLCUsJChub3RkaXIgJChCUEZfU1JDUykpKVxcbisjIFRoZSBzdGVtIGJlY29tZXMgdGhlIHNrZWxldG9uJ3MgQyBuYW1lOyByZWplY3QgZG90cyBhbmQgaHlwaGVucy5cXG4rbGliX2JwZl9iYWRfc3RlbXMgOj0gJChzdHJpcCAkKGZvcmVhY2ggcywkKGxpYl9icGZfc3RlbXMpLFxcdFxcdFxcdFxcXFxcXG4rXFx0XFx0XFx0JChpZiAkKGZpbmRzdHJpbmcgLiwkKHMpKSQoZmluZHN0cmluZyAtLCQocykpLCQocykpKSlcXG4raWZuZXEgKCQobGliX2JwZl9iYWRfc3RlbXMpLClcXG4rJChlcnJvciBsaWIuYnBmLm1rOiBCUEZfU1JDUyBiYXNlbmFtZXMgbXVzdCBub3QgY29udGFpbiAnLicgb3IgJy0nOiAkKGxpYl9icGZfYmFkX3N0ZW1zKSlcXG4rZW5kaWZcXG4rIyBPdXRwdXQgbmFtZXMgb21pdCBkaXJlY3Rvcmllcywgc28gcmVqZWN0IGR1cGxpY2F0ZSBzdGVtcy5cXG4raWZuZXEgKCQod29yZHMgJChsaWJfYnBmX3N0ZW1zKSksJCh3b3JkcyAkKHNvcnQgJChsaWJfYnBmX3N0ZW1zKSkpKVxcbiskKGVycm9yIGxpYi5icGYubWs6IEJQRl9TUkNTIGhhcyBjb2xsaWRpbmcgYmFzZW5hbWVzOiAkKEJQRl9TUkNTKSlcXG4rZW5kaWZcXG4rQlBGX1NLRUxfRVhUICAgID89IC5za2VsLmhcXG4rbGliX2JwZl9zdWJza2VsX2V4dCA6PSAkKHBhdHN1YnN0ICVza2VsLmgsJXN1YnNrZWwuaCwkKEJQRl9TS0VMX0VYVCkpXFxuKyMgS2VlcCBza2VsZXRvbiBzdWZmaXhlcyBkaXN0aW5jdCBhbmQgY2xlYW51cCBnbG9icyBuYXJyb3cuXFxuK2lmZXEgKCQobGliX2JwZl9zdWJza2VsX2V4dCksJChCUEZfU0tFTF9FWFQpKVxcbiskKGVycm9yIGxpYi5icGYubWs6IEJQRl9TS0VMX0VYVCBtdXN0IGVuZCBpbiBza2VsLmg6ICQoQlBGX1NLRUxfRVhUKSlcXG4rZW5kaWZcXG4rQlBGX09CSlMgIDo9ICQoYWRkcHJlZml4ICQoQlBGX09CSl9ESVIpLywkKGFkZHN1ZmZpeCAuYnBmLm8sJChsaWJfYnBmX3N0ZW1zKSkpXFxuK0JQRl9TS0VMUyA6PSAkKGFkZHByZWZpeCAkKEJQRl9TS0VMX0RJUikvLCQoYWRkc3VmZml4ICQoQlBGX1NLRUxfRVhUKSwkKGxpYl9icGZfc3RlbXMpKSlcXG4raWZuZXEgKCQoQlBGX0dFTl9TVUJTS0VMKSwpXFxuK0JQRl9TVUJTS0VMUyA6PSAkKGFkZHByZWZpeCAkKEJQRl9TS0VMX0RJUikvLCQoYWRkc3VmZml4ICQobGliX2JwZl9zdWJza2VsX2V4dCksJChsaWJfYnBmX3N0ZW1zKSkpXFxuK2VuZGlmXFxuK1xcbisjIFVzZSBwZXItc291cmNlIHJ1bGVzIHRvIGF2b2lkIGNoYW5naW5nIG5vcm1hbCAuYyBsb29rdXAuXFxuKyMgVHJhY2sgc291cmNlIGhlYWRlcnMgYmVmb3JlIEJQRk9CSiBpbnN0YWxscyB0aGVpciB1cGRhdGVkIGNvcGllcy5cXG4rZGVmaW5lIGxpYl9icGZfb2JqX3J1bGVcXG4rJChCUEZfT0JKX0RJUikvJChwYXRzdWJzdCAlJChCUEZfUFJPR19FWFQpLCUsJChub3RkaXIgJCgxKSkpLmJwZi5vOiAkKDEpXFx0XFxcXFxcbitcXHRcXHQkKEJQRl9FWFRSQV9IRFJTKSAkKGxpYl9icGZfaGVhZGVyX3NvdXJjZXMpXFx0XFx0XFx0XFxcXFxcbitcXHRcXHQkKElOQ0xVREVfRElSKS92bWxpbnV4LmggfCAkKEJQRl9PQkpfRElSKSAkKEJQRk9CSilcXG4rXFx0JCQoY2FsbCBsaWJfYnBmX2J1aWxkX3J1bGUsJCRcXHUwMDNjLCQkQClcXG4rZW5kZWZcXG4rJChmb3JlYWNoIHNyYywkKEJQRl9TUkNTKSwkKGV2YWwgJChjYWxsIGxpYl9icGZfb2JqX3J1bGUsJChzcmMpKSkpXFxuK1xcbisjIEdlbmVyYXRlIGJvdGggaGVhZGVycyB0b2dldGhlciBzbyBlaXRoZXIgbWlzc2luZyB0YXJnZXQgcmVidWlsZHMgdGhlIHBhaXIuXFxuK2xpYl9icGZfc2tlbF90YXJnZXRzIDo9ICQoQlBGX1NLRUxfRElSKS8lJChCUEZfU0tFTF9FWFQpXFxuK2lmbmVxICgkKEJQRl9HRU5fU1VCU0tFTCksKVxcbitsaWJfYnBmX3NrZWxfdGFyZ2V0cyArPSAkKEJQRl9TS0VMX0RJUikvJSQobGliX2JwZl9zdWJza2VsX2V4dClcXG4rZW5kaWZcXG4rXFxuKyMgTGluayB0aHJlZSB0aW1lcyBhbmQgcmVxdWlyZSB0aGUgZmluYWwgdHdvIG9iamVjdHMgdG8gbWF0Y2guXFxuKyQobGliX2JwZl9za2VsX3RhcmdldHMpOiAkKEJQRl9PQkpfRElSKS8lLmJwZi5vICQoQlBGVE9PTCkgfCAkKEJQRl9TS0VMX0RJUilcXG4rXFx0JChjYWxsIG1zZyxHRU4tU0tFTCwsJChCUEZfU0tFTF9ESVIpLyQqJChCUEZfU0tFTF9FWFQpKVxcbitcXHQkKFEpJChCUEZUT09MKSBnZW4gb2JqZWN0ICQoXFx1MDAzYzoubz0ubGlua2VkMS5vKSAkXFx1MDAzY1xcbitcXHQkKFEpJChCUEZUT09MKSBnZW4gb2JqZWN0ICQoXFx1MDAzYzoubz0ubGlua2VkMi5vKSAkKFxcdTAwM2M6Lm89LmxpbmtlZDEubylcXG4rXFx0JChRKSQoQlBGVE9PTCkgZ2VuIG9iamVjdCAkKFxcdTAwM2M6Lm89LmxpbmtlZDMubykgJChcXHUwMDNjOi5vPS5saW5rZWQyLm8pXFxuK1xcdCQoUSlkaWZmICQoXFx1MDAzYzoubz0ubGlua2VkMi5vKSAkKFxcdTAwM2M6Lm89LmxpbmtlZDMubylcXG4rXFx0JChRKSQoQlBGVE9PTCkgZ2VuIHNrZWxldG9uICQoXFx1MDAzYzoubz0ubGlua2VkMy5vKSBuYW1lICQqIFxcdTAwM2UgJChCUEZfU0tFTF9ESVIpLyQqJChCUEZfU0tFTF9FWFQpXFxuK2lmbmVxICgkKEJQRl9HRU5fU1VCU0tFTCksKVxcbitcXHQkKFEpJChCUEZUT09MKSBnZW4gc3Vic2tlbGV0b24gJChcXHUwMDNjOi5vPS5saW5rZWQzLm8pIG5hbWUgJCogXFx1MDAzZSAkKEJQRl9TS0VMX0RJUikvJCokKGxpYl9icGZfc3Vic2tlbF9leHQpXFxuK2VuZGlmXFxuK1xcdCQoUSlybSAtZiAkKFxcdTAwM2M6Lm89LmxpbmtlZDEubykgJChcXHUwMDNjOi5vPS5saW5rZWQyLm8pICQoXFx1MDAzYzoubz0ubGlua2VkMy5vKVxcbitcXG4rIyBSZWFkIHRoZSBoZWFkZXIgZGVwZW5kZW5jaWVzIHdyaXR0ZW4gYnkgLU1NRC5cXG4rLWluY2x1ZGUgJChCUEZfT0JKUzoubz0uZClcXG4rXFxuKyMgLS0tLSB2YWx1ZXMgZm9yIHRoZSB0ZXN0IE1ha2VmaWxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuKyMgQWRkIHRoZSBpbnN0YWxsZWQgbGliYnBmL3ZtbGludXguaCBkaXJlY3RvcnkgYW5kIHRoZSBza2VsZXRvbiBkaXJlY3RvcnkuXFxuK0NGTEFHUyArPSAtSSQoSU5DTFVERV9ESVIpIC1JJChCUEZfU0tFTF9ESVIpXFxuK1xcbisjIEFkZCB0YXJnZXQgenN0ZCB3aGVuIGZvdW5kIGJ5IHRoZSB0YXJnZXQgcGtnLWNvbmZpZy5cXG4rUEtHX0NPTkZJRyA/PSAkKENST1NTX0NPTVBJTEUpcGtnLWNvbmZpZ1xcbitCUEZfTERMSUJTIDo9ICQoQlBGT0JKKSAtbGVsZiAtbHpcXG4raWZuZXEgKCQoc2hlbGwgJChQS0dfQ09ORklHKSAtLWV4aXN0cyBsaWJ6c3RkIDJcXHUwMDNlL2Rldi9udWxsIFxcdTAwMjZcXHUwMDI2IGVjaG8geSksKVxcbitCUEZfTERMSUJTICs9IC1senN0ZFxcbitlbmRpZlxcbitcXG4rIyBBZGQgc2tlbGV0b25zIGFmdGVyIGxpYi5tayBkZWZpbmVzIGFsbC5cXG4rYWxsOiAkKEJQRl9TS0VMUykgJChCUEZfU1VCU0tFTFMpXFxuK1xcbisjIFRoZSBza2VsZXRvbiBhbHJlYWR5IGVtYmVkcyBlYWNoIEJQRiBvYmplY3QgaW4gdGhlIHRlc3QgYmluYXJ5LiBUbyBpbnN0YWxsIHRoZVxcbisjIG9iamVjdHMgc2VwYXJhdGVseSwgYWRkIFRFU1RfR0VOX0ZJTEVTICs9ICQoQlBGX09CSlMpLlxcbitcXG4rIyAkMSA9IGJpbmFyeSwgJDIgPSB0ZXN0IHNvdXJjZS4gVXNlIHRoZSBzYW1lIGNvbXBpbGUgYW5kIGxpbmsgZmxhZ3MgYXMgbGliLm1rLlxcbitkZWZpbmUgYnBmX2xpbmtcXG4rXFx0JChjYWxsIG1zZyxCSU5BUlksLCQxKVxcbitcXHQkKFEpJChDQykgJChDRkxBR1MpICQoQ1BQRkxBR1MpICQoTERGTEFHUykgJChUQVJHRVRfQVJDSCkgJDIgXFxcXFxcbitcXHRcXHQkKEJQRl9MRExJQlMpICQoTERMSUJTKSAtbyAkMVxcbitlbmRlZlxcbitcXG4rRVhUUkFfQ0xFQU4gKz0gJChzb3J0ICQobGliX2JwZl9zY3JhdGNoX2RpcikgJChsaWJfYnBmX2hvc3Rfc2NyYXRjaF9kaXIpKSBcXFxcXFxuK1xcdCAgICAgICAkKGFkZHByZWZpeCAkKEJQRl9PQkpfRElSKS8sKi5icGYubyAqLmJwZi5kICoubGlua2VkKi5vKVxcdFxcXFxcXG4rXFx0ICAgICAgICQoYWRkcHJlZml4ICQoQlBGX1NLRUxfRElSKS8sKiQoQlBGX1NLRUxfRVhUKSAqJChsaWJfYnBmX3N1YnNrZWxfZXh0KSlcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L01ha2VmaWxlXFxuaW5kZXggM2NmZTkwZTBmMzRmYS4uZGQzZjU1OTRhZjI0MCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvTWFrZWZpbGVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9zY2hlZF9leHQvTWFrZWZpbGVcXG5AQCAtMTQsNDggKzE0LDI5IEBAIENVUkRJUiA6PSAkKGFic3BhdGggLilcXG4gUkVQT1JPT1QgOj0gJChhYnNwYXRoIC4uLy4uLy4uLy4uKVxcbiBUT09MU0RJUiA6PSAkKFJFUE9ST09UKS90b29sc1xcbiBMSUJESVIgOj0gJChUT09MU0RJUikvbGliXFxuLUJQRkRJUiA6PSAkKExJQkRJUikvYnBmXFxuIFRPT0xTSU5DRElSIDo9ICQoVE9PTFNESVIpL2luY2x1ZGVcXG4tQlBGVE9PTERJUiA6PSAkKFRPT0xTRElSKS9icGYvYnBmdG9vbFxcbi1BUElESVIgOj0gJChUT09MU0lOQ0RJUikvdWFwaVxcbiBHRU5ESVIgOj0gJChSRVBPUk9PVCkvaW5jbHVkZS9nZW5lcmF0ZWRcXG4gR0VOSERSIDo9ICQoR0VORElSKS9hdXRvY29uZi5oXFxuLVNDWFRPT0xTRElSIDo9ICQoVE9PTFNESVIpL3NjaGVkX2V4dFxcbiBTQ1hUT09MU0lOQ0RJUiA6PSAkKFRPT0xTRElSKS9zY2hlZF9leHQvaW5jbHVkZVxcbiBcXG4tT1VUUFVUX0RJUiA6PSAkKE9VVFBVVCkvYnVpbGRcXG4tT0JKX0RJUiA6PSAkKE9VVFBVVF9ESVIpL29ialxcbi1JTkNMVURFX0RJUiA6PSAkKE9VVFBVVF9ESVIpL2luY2x1ZGVcXG4tQlBGT0JKX0RJUiA6PSAkKE9CSl9ESVIpL2xpYmJwZlxcbi1TQ1hPQkpfRElSIDo9ICQoT0JKX0RJUikvc2NoZWRfZXh0XFxuLUJQRk9CSiA6PSAkKEJQRk9CSl9ESVIpL2xpYmJwZi5hXFxuLUxJQkJQRl9PVVRQVVQgOj0gJChPQkpfRElSKS9saWJicGYvbGliYnBmLmFcXG4tXFxuLURFRkFVTFRfQlBGVE9PTCA6PSAkKE9VVFBVVF9ESVIpL2hvc3Qvc2Jpbi9icGZ0b29sXFxuLUhPU1RfT0JKX0RJUiA6PSAkKE9CSl9ESVIpL2hvc3QvYnBmdG9vbFxcbi1IT1NUX0xJQkJQRl9PVVRQVVQgOj0gJChPQkpfRElSKS9ob3N0L2xpYmJwZi9cXG4tSE9TVF9MSUJCUEZfREVTVERJUiA6PSAkKE9VVFBVVF9ESVIpL2hvc3QvXFxuLUhPU1RfREVTVERJUiA6PSAkKE9VVFBVVF9ESVIpL2hvc3QvXFxuLVxcbi1WTUxJTlVYX0JURl9QQVRIUyA/PSAkKGlmICQoTyksJChPKS92bWxpbnV4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0XFx0ICAgICAkKGlmICQoS0JVSUxEX09VVFBVVCksJChLQlVJTERfT1VUUFVUKS92bWxpbnV4KVxcdFxcdFxcXFxcXG4tXFx0XFx0ICAgICAuLi8uLi8uLi8uLi92bWxpbnV4XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHRcXHQgICAgIC9zeXMva2VybmVsL2J0Zi92bWxpbnV4XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHRcXHQgICAgIC9ib290L3ZtbGludXgtJChzaGVsbCB1bmFtZSAtcilcXG4tVk1MSU5VWF9CVEYgPz0gJChhYnNwYXRoICQoZmlyc3R3b3JkICQod2lsZGNhcmQgJChWTUxJTlVYX0JURl9QQVRIUykpKSlcXG4taWZlcSAoJChWTUxJTlVYX0JURiksKVxcbi0kKGVycm9yIENhbm5vdCBmaW5kIGEgdm1saW51eCBmb3IgVk1MSU5VWF9CVEYgYXQgYW55IG9mIFxcXCIkKFZNTElOVVhfQlRGX1BBVEhTKVxcXCIpXFxuLWVuZGlmXFxuKyMgQnVpbGQgc2NoZWR1bGVyIHNrZWxldG9ucyBhbmQgc3Vic2tlbGV0b25zIHdpdGggdGhlIHNoYXJlZCBCUEYgcnVsZXMuXFxuK0JQRl9TUkNTICAgICAgICA6PSAkKHdpbGRjYXJkICouYnBmLmMpXFxuK0JQRl9TS0VMX0VYVCAgICA6PSAuYnBmLnNrZWwuaFxcbitCUEZfR0VOX1NVQlNLRUwgOj0gMVxcbisjIFByZXNlcnZlIHRoZSBleGlzdGluZyBidWlsZC8gbGF5b3V0LlxcbitCUEZfT0JKX0RJUiAgOj0gJChPVVRQVVQpL2J1aWxkL29iai9zY2hlZF9leHRcXG4rQlBGX1NLRUxfRElSIDo9ICQoT1VUUFVUKS9idWlsZC9pbmNsdWRlXFxuK1NDWE9CSl9ESVIgICA6PSAkKEJQRl9PQkpfRElSKVxcbiBcXG4tQlBGVE9PTCA/PSAkKERFRkFVTFRfQlBGVE9PTClcXG4raW5jbHVkZSAuLi9saWIuYnBmLm1rXFxuIFxcbiBpZm5lcSAoJCh3aWxkY2FyZCAkKEdFTkhEUikpLClcXG4gICBHRU5GTEFHUyA6PSAtREhBVkVfR0VOSERSXFxuIGVuZGlmXFxuIFxcbiBDRkxBR1MgKz0gLWcgLU8yIC1yZHluYW1pYyAtcHRocmVhZCAtV2FsbCAtV2Vycm9yICQoR0VORkxBR1MpXFx0XFx0XFx0XFxcXFxcbi1cXHQgIC1JJChJTkNMVURFX0RJUikgLUkkKEdFTkRJUikgLUkkKExJQkRJUilcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdCAgLUkkKFRPT0xTSU5DRElSKSAtSSQoQVBJRElSKSAtSSQoQ1VSRElSKS9pbmNsdWRlIC1JJChTQ1hUT09MU0lOQ0RJUilcXG4rXFx0ICAtSSQoR0VORElSKSAtSSQoTElCRElSKSAtSSQoVE9PTFNJTkNESVIpIC1JJChBUElESVIpXFx0XFx0XFx0XFxcXFxcbitcXHQgIC1JJChDVVJESVIpL2luY2x1ZGUgLUkkKFNDWFRPT0xTSU5DRElSKVxcbiBcXG4gIyBTaWxlbmNlIHNvbWUgd2FybmluZ3Mgd2hlbiBjb21waWxlZCB3aXRoIGNsYW5nXFxuIGlmbmVxICgkKExMVk0pLClcXG5AQCAtNjQsMTAyICs0NSwyNiBAQCBlbmRpZlxcbiBcXG4gTERGTEFHUyA9IC1sZWxmIC1seiAtbHB0aHJlYWQgLWx6c3RkXFxuIFxcbi1JU19MSVRUTEVfRU5ESUFOID0gJChzaGVsbCAkKENDKSAtZE0gLUUgLSBcXHUwMDNjL2Rldi9udWxsIHxcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdFxcdFxcdGdyZXAgJ2RlZmluZSBfX0JZVEVfT1JERVJfXyBfX09SREVSX0xJVFRMRV9FTkRJQU5fXycpXFxuLVxcbi0jIEdldCBDbGFuZydzIGRlZmF1bHQgaW5jbHVkZXMgb24gdGhpcyBzeXN0ZW0sIGFzIG9wcG9zZWQgdG8gdGhvc2Ugc2VlbiBieVxcbi0jICctdGFyZ2V0IGJwZicuIFRoaXMgZml4ZXMgXFxcIm1pc3NpbmdcXFwiIGZpbGVzIG9uIHNvbWUgYXJjaGl0ZWN0dXJlcy9kaXN0cm9zLFxcbi0jIHN1Y2ggYXMgYXNtL2J5dGVvcmRlci5oLCBhc20vc29ja2V0LmgsIGFzbS9zb2NraW9zLmgsIHN5cy9jZGVmcy5oIGV0Yy5cXG4tI1xcbi0jIFVzZSAnLWlkaXJhZnRlcic6IERvbid0IGludGVyZmVyZSB3aXRoIGluY2x1ZGUgbWVjaGFuaWNzIGV4Y2VwdCB3aGVyZSB0aGVcXG4tIyBidWlsZCB3b3VsZCBoYXZlIGZhaWxlZCBhbnl3YXlzLlxcbi1kZWZpbmUgZ2V0X3N5c19pbmNsdWRlc1xcbi0kKHNoZWxsICQoMSkgJCgyKSAtdiAtRSAtIFxcdTAwM2MvZGV2L251bGwgMlxcdTAwM2VcXHUwMDI2MSBcXFxcXFxuLVxcdHwgc2VkIC1uICcvXFx1MDAzYy4uLlxcdTAwM2Ugc2VhcmNoIHN0YXJ0cyBoZXJlOi8sL0VuZCBvZiBzZWFyY2ggbGlzdC4veyBzfCBcXFxcKC8uKlxcXFwpfC1pZGlyYWZ0ZXIgXFxcXDF8cCB9JykgXFxcXFxcbi0kKHNoZWxsICQoMSkgJCgyKSAtZE0gLUUgLSBcXHUwMDNjL2Rldi9udWxsIHwgZ3JlcCAnX19yaXNjdl94bGVuICcgfCBhd2sgJ3twcmludGYoXFxcIi1EX19yaXNjdl94bGVuPSVkIC1EX19CSVRTX1BFUl9MT05HPSVkXFxcIiwgJCQzLCAkJDMpfScpXFxuLWVuZGVmXFxuLVxcbi1pZm5lcSAoJChDUk9TU19DT01QSUxFKSwpXFxuLUNMQU5HX1RBUkdFVF9BUkNIID0gLS10YXJnZXQ9JChub3RkaXIgJChDUk9TU19DT01QSUxFOiUtPSUpKVxcbi1lbmRpZlxcbi1cXG4tQ0xBTkdfU1lTX0lOQ0xVREVTID0gJChjYWxsIGdldF9zeXNfaW5jbHVkZXMsJChDTEFORyksJChDTEFOR19UQVJHRVRfQVJDSCkpXFxuLVxcbi1CUEZfQ0ZMQUdTID0gLWcgLURfX1RBUkdFVF9BUkNIXyQoU1JDQVJDSClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdCAgICAgJChpZiAkKElTX0xJVFRMRV9FTkRJQU4pLC1tbGl0dGxlLWVuZGlhbiwtbWJpZy1lbmRpYW4pXFx0XFx0XFxcXFxcbisjIFByZXNlcnZlIHRoZSBzY2hlZHVsZXItc3BlY2lmaWMgZmxhZ3M7IHRoZSBzaGFyZWQgcmVjaXBlIGFkZHMgdGFyZ2V0IGZsYWdzLlxcbitCUEZfQ0ZMQUdTID0gLWcgLURfX1RBUkdFVF9BUkNIXyQoU1JDQVJDSCkgJChNRU5ESUFOKVxcdFxcdFxcdFxcdFxcXFxcXG4gXFx0ICAgICAtSSQoQ1VSRElSKS9pbmNsdWRlIC1JJChDVVJESVIpL2luY2x1ZGUvYnBmLWNvbXBhdFxcdFxcdFxcdFxcXFxcXG4gXFx0ICAgICAtSSQoSU5DTFVERV9ESVIpIC1JJChBUElESVIpIC1JJChTQ1hUT09MU0lOQ0RJUilcXHRcXHRcXHRcXFxcXFxuIFxcdCAgICAgLUkkKFJFUE9ST09UKS9pbmNsdWRlXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHQgICAgICQoQ0xBTkdfU1lTX0lOQ0xVREVTKSBcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdCAgICAgJChDTEFOR19TWVNfSU5DTFVERVMpXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHQgICAgIC1XYWxsIC1Xbm8tY29tcGFyZS1kaXN0aW5jdC1wb2ludGVyLXR5cGVzXFx0XFx0XFx0XFx0XFxcXFxcbiBcXHQgICAgIC1Xbm8taW5jb21wYXRpYmxlLWZ1bmN0aW9uLXBvaW50ZXItdHlwZXNcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdCAgICAgLVduby1taWNyb3NvZnQtYW5vbi10YWdcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIFxcdCAgICAgLWZtcy1leHRlbnNpb25zXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHQgICAgIC1PMiAtbWNwdT12M1xcbi1cXG4tIyBzb3J0IHJlbW92ZXMgbGliYnBmIGR1cGxpY2F0ZXMgd2hlbiBub3QgY3Jvc3MtYnVpbGRpbmdcXG4tTUFLRV9ESVJTIDo9ICQoc29ydCAkKE9CSl9ESVIpL2xpYmJwZiAkKE9CSl9ESVIpL2xpYmJwZlxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0ICAgICAgICQoT0JKX0RJUikvYnBmdG9vbCAkKE9CSl9ESVIpL3Jlc29sdmVfYnRmaWRzXFx0XFx0XFx0XFxcXFxcbi1cXHQgICAgICAgJChIT1NUX09CSl9ESVIpICQoSU5DTFVERV9ESVIpICQoU0NYT0JKX0RJUikpXFxuLVxcbi0kKE1BS0VfRElSUyk6XFxuLVxcdCQoY2FsbCBtc2csTUtESVIsLCRAKVxcbi1cXHQkKFEpbWtkaXIgLXAgJEBcXG4tXFxuLSQoQlBGT0JKKTogJCh3aWxkY2FyZCAkKEJQRkRJUikvKi5bY2hdICQoQlBGRElSKS9NYWtlZmlsZSlcXHRcXHRcXHRcXFxcXFxuLVxcdCAgICQoQVBJRElSKS9saW51eC9icGYuaFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0ICAgfCAkKE9CSl9ESVIpL2xpYmJwZlxcbi1cXHQkKFEpJChNQUtFKSAkKHN1Ym1ha2VfZXh0cmFzKSAtQyAkKEJQRkRJUikgT1VUUFVUPSQoT0JKX0RJUikvbGliYnBmL1xcdFxcXFxcXG4tXFx0XFx0ICAgIEFSQ0g9JChBUkNIKSBDQz1cXFwiJChDQylcXFwiIENST1NTX0NPTVBJTEU9JChDUk9TU19DT01QSUxFKVxcdFxcXFxcXG4tXFx0XFx0ICAgIEVYVFJBX0NGTEFHUz0nLWcgLU8wIC1mUElDJ1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0XFx0ICAgIERFU1RESVI9JChPVVRQVVRfRElSKSBwcmVmaXg9IGFsbCBpbnN0YWxsX2hlYWRlcnNcXG4tXFxuLSQoREVGQVVMVF9CUEZUT09MKTogJCh3aWxkY2FyZCAkKEJQRlRPT0xESVIpLyouW2NoXSAkKEJQRlRPT0xESVIpL01ha2VmaWxlKVxcdFxcXFxcXG4tXFx0XFx0ICAgICQoTElCQlBGX09VVFBVVCkgfCAkKEhPU1RfT0JKX0RJUilcXG4tXFx0JChRKSQoTUFLRSkgJChzdWJtYWtlX2V4dHJhcykgIC1DICQoQlBGVE9PTERJUilcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdFxcdCAgICBBUkNIPSBDUk9TU19DT01QSUxFPSBDQz0kKEhPU1RDQykgTEQ9JChIT1NUTEQpXFx0XFx0XFxcXFxcbi1cXHRcXHQgICAgRVhUUkFfQ0ZMQUdTPSctZyAtTzAnXFx0XFx0XFx0XFx0XFx0XFxcXFxcbi1cXHRcXHQgICAgT1VUUFVUPSQoSE9TVF9PQkpfRElSKS9cXHRcXHRcXHRcXHRcXHRcXFxcXFxuLVxcdFxcdCAgICBMSUJCUEZfT1VUUFVUPSQoSE9TVF9MSUJCUEZfT1VUUFVUKVxcdFxcdFxcdFxcdFxcXFxcXG4tXFx0XFx0ICAgIExJQkJQRl9ERVNURElSPSQoSE9TVF9MSUJCUEZfREVTVERJUilcXHRcXHRcXHRcXFxcXFxuLVxcdFxcdCAgICBwcmVmaXg9IERFU1RESVI9JChIT1NUX0RFU1RESVIpIGluc3RhbGwtYmluXFxuLVxcbi0kKElOQ0xVREVfRElSKS92bWxpbnV4Lmg6ICQoVk1MSU5VWF9CVEYpICQoQlBGVE9PTCkgfCAkKElOQ0xVREVfRElSKVxcbi1pZmVxICgkKFZNTElOVVhfSCksKVxcbi1cXHQkKGNhbGwgbXNnLEdFTiwsJEApXFxuLVxcdCQoUSkkKEJQRlRPT0wpIGJ0ZiBkdW1wIGZpbGUgJChWTUxJTlVYX0JURikgZm9ybWF0IGMgXFx1MDAzZSAkQFxcbi1lbHNlXFxuLVxcdCQoY2FsbCBtc2csQ1AsLCRAKVxcbi1cXHQkKFEpY3AgXFxcIiQoVk1MSU5VWF9IKVxcXCIgJEBcXG4tZW5kaWZcXG4tXFxuLSQoU0NYT0JKX0RJUikvJS5icGYubzogJS5icGYuYyAkKElOQ0xVREVfRElSKS92bWxpbnV4LmhcXHR8ICQoQlBGT0JKKSAkKFNDWE9CSl9ESVIpXFxuLVxcdCQoY2FsbCBtc2csQ0xORy1CUEYsLCQobm90ZGlyICRAKSlcXG4tXFx0JChRKSQoQ0xBTkcpICQoQlBGX0NGTEFHUykgLXRhcmdldCBicGYgLWMgJFxcdTAwM2MgLW8gJEBcXG4rXFx0ICAgICAkKEJQRl9FWFRSQV9DRkxBR1MpXFxuIFxcbi0kKElOQ0xVREVfRElSKS8lLmJwZi5za2VsLmg6ICQoU0NYT0JKX0RJUikvJS5icGYubyAkKElOQ0xVREVfRElSKS92bWxpbnV4LmggJChCUEZUT09MKSB8ICQoSU5DTFVERV9ESVIpXFxuLVxcdCQoZXZhbCBzY2hlZD0kKG5vdGRpciAkQCkpXFxuLVxcdCQoY2FsbCBtc2csR0VOLVNLRUwsLCQoc2NoZWQpKVxcbi1cXHQkKFEpJChCUEZUT09MKSBnZW4gb2JqZWN0ICQoXFx1MDAzYzoubz0ubGlua2VkMS5vKSAkXFx1MDAzY1xcbi1cXHQkKFEpJChCUEZUT09MKSBnZW4gb2JqZWN0ICQoXFx1MDAzYzoubz0ubGlua2VkMi5vKSAkKFxcdTAwM2M6Lm89LmxpbmtlZDEubylcXG4tXFx0JChRKSQoQlBGVE9PTCkgZ2VuIG9iamVjdCAkKFxcdTAwM2M6Lm89LmxpbmtlZDMubykgJChcXHUwMDNjOi5vPS5saW5rZWQyLm8pXFxuLVxcdCQoUSlkaWZmICQoXFx1MDAzYzoubz0ubGlua2VkMi5vKSAkKFxcdTAwM2M6Lm89LmxpbmtlZDMubylcXG4tXFx0JChRKSQoQlBGVE9PTCkgZ2VuIHNrZWxldG9uICQoXFx1MDAzYzoubz0ubGlua2VkMy5vKSBuYW1lICQoc3Vic3QgLmJwZi5za2VsLmgsLCQoc2NoZWQpKSBcXHUwMDNlICRAXFxuLVxcdCQoUSkkKEJQRlRPT0wpIGdlbiBzdWJza2VsZXRvbiAkKFxcdTAwM2M6Lm89LmxpbmtlZDMubykgbmFtZSAkKHN1YnN0IC5icGYuc2tlbC5oLCwkKHNjaGVkKSkgXFx1MDAzZSAkKEA6LnNrZWwuaD0uc3Vic2tlbC5oKVxcbitFWFRSQV9DTEVBTiArPSAkKE9VVFBVVCkvYnVpbGRcXG4gXFxuICMjIyMjIyMjIyMjIyMjIyNcXG4gIyBDIHNjaGVkdWxlcnMgI1xcbiAjIyMjIyMjIyMjIyMjIyMjXFxuIFxcbi1vdmVycmlkZSBkZWZpbmUgQ0xFQU5cXG4tXFx0cm0gLXJmICQoT1VUUFVUX0RJUilcXG4tXFx0cm0gLWYgJChURVNUX0dFTl9QUk9HUylcXG4tZW5kZWZcXG4tXFxuLSMgRXZlcnkgdGVzdGNhc2UgdGFrZXMgYWxsIG9mIHRoZSBCUEYgcHJvZ3MgYXJlIGRlcGVuZGVuY2llcyBieSBkZWZhdWx0LiBUaGlzXFxuLSMgYWxsb3dzIHRlc3RjYXNlcyB0byBsb2FkIGFueSBCUEYgc2NoZWR1bGVyLCB3aGljaCBpcyB1c2VmdWwgZm9yIHRlc3RjYXNlc1xcbi0jIHRoYXQgZG9uJ3QgbmVlZCB0aGVpciBvd24gcHJvZyB0byBydW4gdGhlaXIgdGVzdC5cXG4tYWxsX3Rlc3RfYnBmcHJvZ3MgOj0gJChmb3JlYWNoIHByb2csJCh3aWxkY2FyZCAqLmJwZi5jKSwkKElOQ0xVREVfRElSKS8kKHBhdHN1YnN0ICUuYywlLnNrZWwuaCwkKHByb2cpKSlcXG4rIyBCdWlsZCBldmVyeSBzY2hlZHVsZXIgYmVmb3JlIGVhY2ggdGVzdC5cXG4rYWxsX3Rlc3RfYnBmcHJvZ3MgOj0gJChCUEZfU0tFTFMpXFxuIFxcbiBhdXRvLXRlc3QtdGFyZ2V0cyA6PVxcdFxcdFxcdFxcXFxcXG4gXFx0Y3JlYXRlX2RzcVxcdFxcdFxcdFxcXFxcXG5AQCAtMTk2LDI0ICsxMDEsMjIgQEAgYXV0by10ZXN0LXRhcmdldHMgOj1cXHRcXHRcXHRcXFxcXFxuIHRlc3RjYXNlLXRhcmdldHMgOj0gJChhZGRzdWZmaXggLm8sJChhZGRwcmVmaXggJChTQ1hPQkpfRElSKS8sJChhdXRvLXRlc3QtdGFyZ2V0cykpKVxcbiBcXG4gJChTQ1hPQkpfRElSKS9ydW5uZXIubzogcnVubmVyLmMgfCAkKFNDWE9CSl9ESVIpICQoQlBGT0JKKVxcbi1cXHQkKENDKSAkKENGTEFHUykgLWMgJFxcdTAwM2MgLW8gJEBcXG4rXFx0JChjYWxsIG1zZyxDQywsJEApXFxuK1xcdCQoUSkkKENDKSAkKENGTEFHUykgLWMgJFxcdTAwM2MgLW8gJEBcXG4gXFxuICMgQ3JlYXRlIGFsbCBvZiB0aGUgdGVzdCB0YXJnZXRzIG9iamVjdCBmaWxlcywgd2hvc2UgdGVzdGNhc2Ugb2JqZWN0cyB3aWxsIGJlXFxuICMgcmVnaXN0ZXJlZCBpbnRvIHRoZSBydW5uZXIgaW4gRUxGIGNvbnN0cnVjdG9ycy5cXG4tI1xcbi0jIE5vdGUgdGhhdCB3ZSBtdXN0IGRvIGRvdWJsZSBleHBhbnNpb24gaGVyZSBpbiBvcmRlciB0byBzdXBwb3J0IGNvbmRpdGlvbmFsbHlcXG4tIyBjb21waWxpbmcgQlBGIG9iamVjdCBmaWxlcyBvbmx5IGlmIG9uZSBpcyBwcmVzZW50LCBhcyB0aGUgd2lsZGNhcmQgTWFrZVxcbi0jIGZ1bmN0aW9uIGRvZXNuJ3Qgc3VwcG9ydCB1c2luZyBpbXBsaWNpdCBydWxlcyBvdGhlcndpc2UuXFxuICQodGVzdGNhc2UtdGFyZ2V0cyk6ICQoU0NYT0JKX0RJUikvJS5vOiAlLmMgJChTQ1hPQkpfRElSKS9ydW5uZXIubyAkKGFsbF90ZXN0X2JwZnByb2dzKSB8ICQoU0NYT0JKX0RJUilcXG4tXFx0JChldmFsIHRlc3Q9JChwYXRzdWJzdCAlLm8sJS5jLCQobm90ZGlyICRAKSkpXFxuLVxcdCQoQ0MpICQoQ0ZMQUdTKSAtYyAkXFx1MDAzYyAtbyAkQFxcbitcXHQkKGNhbGwgbXNnLENDLCwkQClcXG4rXFx0JChRKSQoQ0MpICQoQ0ZMQUdTKSAtYyAkXFx1MDAzYyAtbyAkQFxcbiBcXG4gJChTQ1hPQkpfRElSKS91dGlsLm86IHV0aWwuYyB8ICQoU0NYT0JKX0RJUilcXG4tXFx0JChDQykgJChDRkxBR1MpIC1jICRcXHUwMDNjIC1vICRAXFxuK1xcdCQoY2FsbCBtc2csQ0MsLCRAKVxcbitcXHQkKFEpJChDQykgJChDRkxBR1MpIC1jICRcXHUwMDNjIC1vICRAXFxuIFxcbiAkKE9VVFBVVCkvcnVubmVyOiAkKFNDWE9CSl9ESVIpL3J1bm5lci5vICQoU0NYT0JKX0RJUikvdXRpbC5vICQoQlBGT0JKKSAkKHRlc3RjYXNlLXRhcmdldHMpXFxuLVxcdEBlY2hvIFxcXCIkKHRlc3RjYXNlLXRhcmdldHMpXFxcIlxcbi1cXHQkKENDKSAkKENGTEFHUykgLW8gJEAgJF4gJChMREZMQUdTKVxcbitcXHQkKGNhbGwgbXNnLEJJTkFSWSwsJEApXFxuK1xcdCQoUSkkKENDKSAkKENGTEFHUykgLW8gJEAgJF4gJChMREZMQUdTKVxcbiBcXG4gLkRFRkFVTFRfR09BTCA6PSBhbGxcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIzOjU4OjQ1LjM4NjY5ODM1N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6ODA5MTA0MTE2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdCBoYXJuZXNzZXMsIHNlbGZ0ZXN0IEJQRiB0ZXN0IHByb2dyYW1zLCBhbmQgYnVpbGQgaW5mcmFzdHJ1Y3R1cmUgd2l0aGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzLy4gTm9uZSBvZiB0aGUgY2hhbmdlcyBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMsIHNvIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzA3YjRiNWJhZmJlNmUxZWU4MjRjODJkM2JhYmEwMWU4OTg5NDAwMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDEwIDIzOjU4OjQ0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvLmdpdGlnbm9yZVxuaW5kZXggOTUyZTQ0NDhiZjA3MC4uNTYxYTNlODkxYjk4YyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC8uZ2l0aWdub3JlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvLmdpdGlnbm9yZVxuQEAgLTYsNyArNiwxNSBAQCB0ZXN0X2ZyZWV6ZXJcbiB0ZXN0X2h1Z2V0bGJfbWVtY2dcbiB0ZXN0X2tpbGxcbiB0ZXN0X2ttZW1cbit0ZXN0X21lbWNnX3N0YXRfY3Jvc3NfY3B1XG4gdGVzdF9tZW1jb250cm9sXG4gdGVzdF9waWRzXG4gdGVzdF96c3dhcFxuIHdhaXRfaW5vdGlmeVxuKyMgQXJ0aWZhY3RzIGdlbmVyYXRlZCBieSBsaWIuYnBmLm1rXG4rL3Rvb2xzXG4rL2hvc3QtdG9vbHNcbisqLmJwZi5vXG4rKi5icGYuZFxuKyoubGlua2VkKi5vXG4rKi5za2VsLmhcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvTWFrZWZpbGVcbmluZGV4IGUwMTU4NGMyMTg5YWMuLmNiOTk5YmMyYzg3NWUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9NYWtlZmlsZVxuQEAgLTIwLDkgKzIwLDQ2IEBAIFRFU1RfR0VOX1BST0dTICs9IHRlc3RfenN3YXBcbiBcbiBMT0NBTF9IRFJTICs9ICQoc2VsZmRpcikvY2xvbmUzL2Nsb25lM19zZWxmdGVzdHMuaCAkKHNlbGZkaXIpL3BpZGZkL3BpZGZkLmhcbiBcbisjIFJlc29sdmUgQ2xhbmcgZWFybHkgc28gdGhlIG9wdGlvbmFsIEJQRiB0ZXN0IGNhbiBiZSBzZWxlY3RlZC5cbitpZm5lcSAoJChmaWx0ZXIgJS8sJChMTFZNKSksKVxuK0NMQU5HID89ICQoTExWTSljbGFuZ1xuK2Vsc2VcbitDTEFORyA/PSBjbGFuZyQoZmlsdGVyIC0lLCQoTExWTSkpXG4rZW5kaWZcbitSRUFERUxGID89ICQoQ1JPU1NfQ09NUElMRSlyZWFkZWxmXG4rVk1MSU5VWF9CVEZfUEFUSFMgPz0gJChpZiAkKE8pLCQoTykvdm1saW51eClcdFx0XHRcdFxcXG4rXHRcdCAgICAgJChpZiAkKEtCVUlMRF9PVVRQVVQpLCQoS0JVSUxEX09VVFBVVCkvdm1saW51eClcdFxcXG4rXHRcdCAgICAgLi4vLi4vLi4vLi4vdm1saW51eFx0XHRcdFx0XFxcbitcdFx0ICAgICAvc3lzL2tlcm5lbC9idGYvdm1saW51eFx0XHRcdFx0XFxcbitcdFx0ICAgICAvYm9vdC92bWxpbnV4LSQoc2hlbGwgdW5hbWUgLXIpXG4rIyBJZ25vcmUgRUxGIGltYWdlcyB3aXRob3V0IC5CVEY7IHJhdyBzeXNmcyBCVEYgbmVlZHMgbm8gY2hlY2suXG4rVk1MSU5VWF9CVEYgPz0gJChhYnNwYXRoICQoZmlyc3R3b3JkICQoZm9yZWFjaCB2LCQod2lsZGNhcmQgJChWTUxJTlVYX0JURl9QQVRIUykpLFxcXG4rXHRcdCAkKGlmICQoZmlsdGVyIC9zeXMva2VybmVsL2J0Zi8lLCQodikpLCQodiksXFxcbitcdFx0ICAgJChpZiAkKHNoZWxsICQoUkVBREVMRikgLVMgXCIkKHYpXCIgMlx1MDAzZS9kZXYvbnVsbCB8IGdyZXAgLUYgLkJURiksJCh2KSkpKSkpXG4rIyBBY2NlcHQgZWl0aGVyIGEgc3VwcGxpZWQgaGVhZGVyIG9yIHVzYWJsZSBCVEYuXG4rSEFWRV9CUEYgOj0gJChhbmQgJChvciAkKFZNTElOVVhfSCksJChWTUxJTlVYX0JURikpLFx0XHRcdFxcXG4rXHRcdCAgJChzaGVsbCBjb21tYW5kIC12ICQoQ0xBTkcpIDJcdTAwM2UvZGV2L251bGwpKVxuK1xuK2lmbmVxICgkKEhBVkVfQlBGKSwpXG4rVEVTVF9HRU5fUFJPR1MgKz0gdGVzdF9tZW1jZ19zdGF0X2Nyb3NzX2NwdVxuK0JQRl9TUkNTIDo9IG1lbWNnX3N0YXRfY3Jvc3NfY3B1LmJwZi5jXG4rIyBSZXBsYWNlIGxpYi5taydzIGxpbmsgcnVsZSBiZWxvdy5cbitPVkVSUklERV9UQVJHRVRTIDo9IDFcbitlbmRpZlxuK1xuIGluY2x1ZGUgLi4vbGliLm1rXG4gaW5jbHVkZSBsaWIvbGliY2dyb3VwLm1rXG4gXG4raWZuZXEgKCQoSEFWRV9CUEYpLClcbitpbmNsdWRlIC4uL2xpYi5icGYubWtcbitcbisjIFJlc3RvcmUgbGliLm1rJ3MgcnVsZSBmb3Igbm9uLUJQRiB0ZXN0cy5cbitMT0NBTF9IRFJTICs9ICQoc2VsZmRpcikva3NlbGZ0ZXN0X2hhcm5lc3MuaCAkKHNlbGZkaXIpL2tzZWxmdGVzdC5oXG4rJChPVVRQVVQpLyU6ICUuYyAkKExPQ0FMX0hEUlMpXG4rXHQkKGNhbGwgbXNnLENDLCwkQClcbitcdCQoUSkkKExJTksuYykgJChmaWx0ZXItb3V0ICQoTE9DQUxfSERSUyksJF4pICQoTERMSUJTKSAtbyAkQFxuK2VuZGlmXG4rXG4gJChPVVRQVVQpL3Rlc3RfY29yZTogJChMSUJDR1JPVVBfTylcbiAkKE9VVFBVVCkvdGVzdF9jcHU6ICQoTElCQ0dST1VQX08pXG4gJChPVVRQVVQpL3Rlc3RfY3B1c2V0OiAkKExJQkNHUk9VUF9PKVxuQEAgLTMzLDMgKzcwLDEyIEBAICQoT1VUUFVUKS90ZXN0X2ttZW06ICQoTElCQ0dST1VQX08pXG4gJChPVVRQVVQpL3Rlc3RfbWVtY29udHJvbDogJChMSUJDR1JPVVBfTylcbiAkKE9VVFBVVCkvdGVzdF9waWRzOiAkKExJQkNHUk9VUF9PKVxuICQoT1VUUFVUKS90ZXN0X3pzd2FwOiAkKExJQkNHUk9VUF9PKVxuK1xuK2lmbmVxICgkKEhBVkVfQlBGKSwpXG4rIyBLZWVwIGluLXRyZWUgVUFQSSBoZWFkZXJzIHByaXZhdGUgdG8gdGhlIEJQRiB0ZXN0LlxuKyQoT1VUUFVUKS90ZXN0X21lbWNnX3N0YXRfY3Jvc3NfY3B1OiBwcml2YXRlIENGTEFHUyArPSAtSSQodG9wX3NyY2RpcikvdG9vbHMvaW5jbHVkZS91YXBpXG4rIyBMaW5rIGNncm91cF91dGlsIGFuZCB0aGUgc2tlbGV0b24gYWdhaW5zdCB0aGUgaW4tdHJlZSBsaWJicGYuXG4rJChPVVRQVVQpL3Rlc3RfbWVtY2dfc3RhdF9jcm9zc19jcHU6IHRlc3RfbWVtY2dfc3RhdF9jcm9zc19jcHUuYyBcXFxuK1x0XHRcdFx0XHQkKEJQRl9TS0VMUykgJChMSUJDR1JPVVBfTykgJChCUEZPQkopXG4rXHQkKGNhbGwgYnBmX2xpbmssJEAsJFx1MDAzYyAkKExJQkNHUk9VUF9PKSlcbitlbmRpZlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9jb25maWcgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvY29uZmlnXG5pbmRleCAzOWY5Nzk2OTBkZDNiLi4xZjU4NWVkOWE1OTY3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2NvbmZpZ1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2NvbmZpZ1xuQEAgLTQsMyArNCw4IEBAIENPTkZJR19DR1JPVVBfRlJFRVpFUj15XG4gQ09ORklHX0NHUk9VUF9TQ0hFRD15XG4gQ09ORklHX01FTUNHPXlcbiBDT05GSUdfUEFHRV9DT1VOVEVSPXlcbitDT05GSUdfQlBGPXlcbitDT05GSUdfQlBGX1NZU0NBTEw9eVxuK0NPTkZJR19CUEZfRVZFTlRTPXlcbitDT05GSUdfREVCVUdfSU5GT19CVEY9eVxuK0NPTkZJR19ERUJVR19JTkZPX0RXQVJGND15XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9jZ3JvdXBfdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9jZ3JvdXBfdXRpbC5jXG5pbmRleCAyNTk2YzEyY2Q4NjQ1Li5jYTEyZDc5NGMwOTIxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9jZ3JvdXBfdXRpbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbGliL2Nncm91cF91dGlsLmNcbkBAIC01NCw2ICs1NCw4OCBAQCBzc2l6ZV90IHdyaXRlX3RleHQoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzc2l6ZV90IGxlbilcbiBcdHJldHVybiBsZW4gXHUwMDNjIDAgPyAtZXJybm8gOiBsZW47XG4gfVxuIFxuKy8qKlxuKyAqIGNnX2dldF9pZCAtIHJldHVybiBhIGNncm91cCdzIGtlcm5mcyBJRFxuKyAqIEBjZ3JvdXA6IGFic29sdXRlIGNncm91cCBwYXRoXG4rICpcbisgKiBUaGlzIGlzIGNncnAtXHUwMDNla24tXHUwMDNlaWQsIG5vdCBzdF9pbm8uXG4rICpcbisgKiBSZXR1cm46IElEIG9yIDAgb24gZmFpbHVyZS5cbisgKi9cbit1bnNpZ25lZCBsb25nIGxvbmcgY2dfZ2V0X2lkKGNvbnN0IGNoYXIgKmNncm91cClcbit7XG4rXHR1bmlvbiB7XG4rXHRcdHVuc2lnbmVkIGxvbmcgbG9uZyBpZDtcbitcdFx0dW5zaWduZWQgY2hhciByYXdbOF07XG4rXHR9IGhhbmRsZTtcbitcdHN0cnVjdCBmaWxlX2hhbmRsZSAqZmhwLCAqZmhwMjtcbitcdGludCBtb3VudF9pZCwgZmhzaXplLCBlcnI7XG4rXHR1bnNpZ25lZCBsb25nIGxvbmcgcmV0ID0gMDtcbitcbitcdGZoc2l6ZSA9IHNpemVvZigqZmhwKTtcbitcdGZocCA9IGNhbGxvYygxLCBmaHNpemUpO1xuK1x0aWYgKCFmaHApXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0LyogVGhlIGZhaWxlZCBwcm9iZSByZXBvcnRzIHRoZSBjZ3JvdXBmcyBoYW5kbGUgc2l6ZS4gKi9cbitcdGVyciA9IG5hbWVfdG9faGFuZGxlX2F0KEFUX0ZEQ1dELCBjZ3JvdXAsIGZocCwgXHUwMDI2bW91bnRfaWQsIDApO1xuK1x0aWYgKGVyciBcdTAwM2U9IDAgfHwgZmhwLVx1MDAzZWhhbmRsZV9ieXRlcyAhPSA4KVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGZoc2l6ZSA9IHNpemVvZigqZmhwKSArIGZocC1cdTAwM2VoYW5kbGVfYnl0ZXM7XG4rXHRmaHAyID0gcmVhbGxvYyhmaHAsIGZoc2l6ZSk7XG4rXHRpZiAoIWZocDIpXG4rXHRcdGdvdG8gb3V0O1xuK1x0ZmhwID0gZmhwMjtcbitcbitcdGlmIChuYW1lX3RvX2hhbmRsZV9hdChBVF9GRENXRCwgY2dyb3VwLCBmaHAsIFx1MDAyNm1vdW50X2lkLCAwKSBcdTAwM2MgMClcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRtZW1jcHkoaGFuZGxlLnJhdywgZmhwLVx1MDAzZWZfaGFuZGxlLCA4KTtcbitcdHJldCA9IGhhbmRsZS5pZDtcbitvdXQ6XG4rXHRmcmVlKGZocCk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiBjZ190b3VjaF9wYWdlcyAtIGZhdWx0IGV2ZXJ5IHBhZ2UgaW4gYSByZWdpb25cbisgKiBAYnVmOiBzdGFydCBvZiB0aGUgcmVnaW9uXG4rICogQHNpemU6IGxlbmd0aCBvZiB0aGUgcmVnaW9uIGluIGJ5dGVzXG4rICpcbisgKiBQYWdlcyBhcmUgY2hhcmdlZCB0byB0aGUgY2FsbGVyJ3MgY2dyb3VwIG9uIGl0cyBjdXJyZW50IENQVS5cbisgKi9cbit2b2lkIGNnX3RvdWNoX3BhZ2VzKGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpXG4re1xuK1x0bG9uZyBwYWdlX3NpemUgPSBzeXNjb25mKF9TQ19QQUdFU0laRSk7XG4rXHRjaGFyICpwdHI7XG4rXG4rXHRpZiAocGFnZV9zaXplIFx1MDAzYz0gMClcbitcdFx0cGFnZV9zaXplID0gQlVGX1NJWkU7XG4rXG4rXHRmb3IgKHB0ciA9IGJ1ZjsgcHRyIFx1MDAzYyBidWYgKyBzaXplOyBwdHIgKz0gcGFnZV9zaXplKVxuK1x0XHQqcHRyID0gMDtcbit9XG4rXG4rLyoqXG4rICogY2dfYWxsb2NfYW5vbiAtIGFsbG9jYXRlIGFuZCBmYXVsdCBhbm9ueW1vdXMgbWVtb3J5XG4rICogQHNpemU6IGJ5dGVzIHRvIGFsbG9jYXRlXG4rICpcbisgKiBSZXR1cm46IFJlZ2lvbiB0byBmcmVlKCksIG9yIE5VTEwuXG4rICovXG4rY2hhciAqY2dfYWxsb2NfYW5vbihzaXplX3Qgc2l6ZSlcbit7XG4rXHRjaGFyICpidWYgPSBtYWxsb2Moc2l6ZSk7XG4rXG4rXHRpZiAoIWJ1Zikge1xuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCJtYWxsb2MoKSBmYWlsZWRcXG5cIik7XG4rXHRcdHJldHVybiBOVUxMO1xuK1x0fVxuK1xuK1x0Y2dfdG91Y2hfcGFnZXMoYnVmLCBzaXplKTtcbitcdHJldHVybiBidWY7XG4rfVxuK1xuIGNoYXIgKmNnX25hbWUoY29uc3QgY2hhciAqcm9vdCwgY29uc3QgY2hhciAqbmFtZSlcbiB7XG4gXHRzaXplX3QgbGVuID0gc3RybGVuKHJvb3QpICsgc3RybGVuKG5hbWUpICsgMjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbGliL2luY2x1ZGUvY2dyb3VwX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9saWIvaW5jbHVkZS9jZ3JvdXBfdXRpbC5oXG5pbmRleCA4ZWJiMmI0ZDRlYzA3Li42NDA3NzgwMTg3ODA3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL2xpYi9pbmNsdWRlL2Nncm91cF91dGlsLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9saWIvaW5jbHVkZS9jZ3JvdXBfdXRpbC5oXG5AQCAtNTQsNiArNTQsOSBAQCBleHRlcm4gc3NpemVfdCB3cml0ZV90ZXh0KGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc3NpemVfdCBsZW4pO1xuIGV4dGVybiBpbnQgY2dfZmluZF9jb250cm9sbGVyX3Jvb3QoY2hhciAqcm9vdCwgc2l6ZV90IGxlbiwgY29uc3QgY2hhciAqY29udHJvbGxlcik7XG4gZXh0ZXJuIGludCBjZ19maW5kX3VuaWZpZWRfcm9vdChjaGFyICpyb290LCBzaXplX3QgbGVuLCBib29sICpuc2RlbGVnYXRlKTtcbiBleHRlcm4gY2hhciAqY2dfbmFtZShjb25zdCBjaGFyICpyb290LCBjb25zdCBjaGFyICpuYW1lKTtcbitleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGNnX2dldF9pZChjb25zdCBjaGFyICpjZ3JvdXApO1xuK2V4dGVybiB2b2lkIGNnX3RvdWNoX3BhZ2VzKGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpO1xuK2V4dGVybiBjaGFyICpjZ19hbGxvY19hbm9uKHNpemVfdCBzaXplKTtcbiBleHRlcm4gY2hhciAqY2dfbmFtZV9pbmRleGVkKGNvbnN0IGNoYXIgKnJvb3QsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBpbmRleCk7XG4gZXh0ZXJuIGNoYXIgKmNnX2NvbnRyb2woY29uc3QgY2hhciAqY2dyb3VwLCBjb25zdCBjaGFyICpjb250cm9sKTtcbiBleHRlcm4gaW50IGNnX2NyZWF0ZShjb25zdCBjaGFyICpjZ3JvdXApO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9tZW1jZ19zdGF0X2Nyb3NzX2NwdS5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9tZW1jZ19zdGF0X2Nyb3NzX2NwdS5icGYuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmZmZjNiOTI1NmFhMzlcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9tZW1jZ19zdGF0X2Nyb3NzX2NwdS5icGYuY1xuQEAgLTAsMCArMSwxMDEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbisjZGVmaW5lIEJQRl9OT19LRlVOQ19QUk9UT1RZUEVTXG4rI2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2NvcmVfcmVhZC5oXHUwMDNlXG4rI2luY2x1ZGUgXCJtZW1jZ19zdGF0X2Nyb3NzX2NwdS5oXCJcbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4rXG4rLyogRW5zdXJlIHRoZSB1cHBlci1ib3VuZCBjaGVja3MgYWxzbyByZWplY3QgbmVnYXRpdmUgQlBGIGFyZ3VtZW50cy4gKi9cbitfU3RhdGljX2Fzc2VydCgoZW51bSB2bV9ldmVudF9pdGVtKS0xIFx1MDAzZT0gTlJfVk1fRVZFTlRfSVRFTVMsXG4rXHQgICAgICAgXCJuZWdhdGl2ZSB2bV9ldmVudF9pdGVtIG11c3QgZmFpbCB0aGUgYm91bmRzIGNoZWNrXCIpO1xuK19TdGF0aWNfYXNzZXJ0KChlbnVtIG1lbWNnX21lbW9yeV9ldmVudCktMSBcdTAwM2U9IE1FTUNHX05SX01FTU9SWV9FVkVOVFMsXG4rXHQgICAgICAgXCJuZWdhdGl2ZSBtZW1jZ19tZW1vcnlfZXZlbnQgbXVzdCBmYWlsIHRoZSBib3VuZHMgY2hlY2tcIik7XG4rXG4rLyogRGVjbGFyZSBrZnVuY3MgdGhhdCBtYXkgYmUgYWJzZW50IGZyb20gdGhlIGJ1aWxkLXRpbWUgdm1saW51eC5oLiAqL1xuK3N0cnVjdCBtZW1fY2dyb3VwICpicGZfZ2V0X21lbV9jZ3JvdXAoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcykgX19rc3ltO1xuK3ZvaWQgYnBmX3B1dF9tZW1fY2dyb3VwKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykgX19rc3ltO1xuK3ZvaWQgYnBmX21lbV9jZ3JvdXBfZmx1c2hfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSBfX2tzeW07XG4rdW5zaWduZWQgbG9uZyBicGZfbWVtX2Nncm91cF9wYWdlX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGlkeCkgX19rc3ltO1xuK3Vuc2lnbmVkIGxvbmcgYnBmX21lbV9jZ3JvdXBfdm1fZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbitcdFx0XHRcdCAgICAgICBlbnVtIHZtX2V2ZW50X2l0ZW0gZXZlbnQpIF9fa3N5bTtcbitcbisvKiBVc2Vyc3BhY2UgcmVzaXplcyB0aGlzIGNncm91cC1JRCBtYXAgYmVmb3JlIGxvYWQuICovXG4rc3RydWN0IHtcbitcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfSEFTSCk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuK1x0X190eXBlKGtleSwgX191NjQpO1xuK1x0X190eXBlKHZhbHVlLCBzdHJ1Y3QgbWVtY2dfc3RhdF9zbmFwc2hvdCk7XG4rfSByZXN1bHRzIFNFQyhcIi5tYXBzXCIpO1xuK1xuKy8qIElzb2xhdGUgY2FwYWJpbGl0eSBmYWlsdXJlcyBmcm9tIHZlcmlmaWVyIGZhaWx1cmVzIGluIHRoZSB0ZXN0IHByb2dyYW0uICovXG4rU0VDKFwiaXRlci5zL2Nncm91cFwiKVxuK2ludCBtZW1jZ19rZnVuY3NfcHJvYmUoc3RydWN0IGJwZl9pdGVyX19jZ3JvdXAgKmN0eClcbit7XG4rXHRzdHJ1Y3QgY2dyb3VwICpjZ3JwID0gY3R4LVx1MDAzZWNncm91cDtcbitcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbitcbitcdGlmICghY2dycClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRtZW1jZyA9IGJwZl9nZXRfbWVtX2Nncm91cChcdTAwMjZjZ3JwLVx1MDAzZXNlbGYpO1xuK1x0aWYgKCFtZW1jZylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRicGZfbWVtX2Nncm91cF9mbHVzaF9zdGF0cyhtZW1jZyk7XG4rXHRicGZfbWVtX2Nncm91cF9wYWdlX3N0YXRlKG1lbWNnLCAwKTtcbitcdGJwZl9tZW1fY2dyb3VwX3ZtX2V2ZW50cyhtZW1jZywgMCk7XG4rXHRicGZfcHV0X21lbV9jZ3JvdXAobWVtY2cpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qIFNsZWVwYWJsZSBpdGVyYXRvcjogZmx1c2ggdGhlIHJvb3Qgb25jZSwgdGhlbiBzbmFwc2hvdCBlYWNoIGNncm91cC4gKi9cbitTRUMoXCJpdGVyLnMvY2dyb3VwXCIpXG4raW50IGNncm91cF9tZW1jZ19zdGF0X2Nyb3NzX2NwdShzdHJ1Y3QgYnBmX2l0ZXJfX2Nncm91cCAqY3R4KVxuK3tcbitcdHN0cnVjdCBjZ3JvdXAgKmNncnAgPSBjdHgtXHUwMDNlY2dyb3VwO1xuK1x0c3RydWN0IG1lbWNnX3N0YXRfc25hcHNob3Qgc25hcCA9IHt9O1xuK1x0c3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcztcbitcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbitcdGludCBpZHhfYW5vbiwgaWR4X2ZpbGUsIGlkeF9zaG1lbSwgaWR4X2ZtYXBwZWQsIGlkeF9wZ2ZhdWx0O1xuK1x0X191NjQgY2dfaWQ7XG4rXG4rXHQvKiBJZ25vcmUgdGhlIGZpbmFsIHBvc3QtcHJvY2Vzc2luZyBjYWxsLiAqL1xuK1x0aWYgKCFjZ3JwKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGNzcyA9IFx1MDAyNmNncnAtXHUwMDNlc2VsZjtcbitcdG1lbWNnID0gYnBmX2dldF9tZW1fY2dyb3VwKGNzcyk7XG4rXHRpZiAoIW1lbWNnKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qIERFU0NFTkRBTlRTX1BSRSB2aXNpdHMgdGhlIHN1YnRyZWUgcm9vdCBmaXJzdC4gKi9cbitcdGlmIChjdHgtXHUwMDNlbWV0YS1cdTAwM2VzZXFfbnVtID09IDApXG4rXHRcdGJwZl9tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKG1lbWNnKTtcbitcbitcdGNnX2lkID0gQlBGX0NPUkVfUkVBRChjZ3JwLCBrbiwgaWQpO1xuK1x0c25hcC5jZ3JvdXBfaWQgPSBjZ19pZDtcbitcbitcdGlkeF9hbm9uID0gYnBmX2NvcmVfZW51bV92YWx1ZShlbnVtIG5vZGVfc3RhdF9pdGVtLCBOUl9BTk9OX01BUFBFRCk7XG4rXHRpZHhfZmlsZSA9IGJwZl9jb3JlX2VudW1fdmFsdWUoZW51bSBub2RlX3N0YXRfaXRlbSwgTlJfRklMRV9QQUdFUyk7XG4rXHRpZHhfc2htZW0gPSBicGZfY29yZV9lbnVtX3ZhbHVlKGVudW0gbm9kZV9zdGF0X2l0ZW0sIE5SX1NITUVNKTtcbitcdGlkeF9mbWFwcGVkID0gYnBmX2NvcmVfZW51bV92YWx1ZShlbnVtIG5vZGVfc3RhdF9pdGVtLCBOUl9GSUxFX01BUFBFRCk7XG4rXHRpZHhfcGdmYXVsdCA9IGJwZl9jb3JlX2VudW1fdmFsdWUoZW51bSB2bV9ldmVudF9pdGVtLCBQR0ZBVUxUKTtcbitcbitcdHNuYXAuYW5vbiA9IGJwZl9tZW1fY2dyb3VwX3BhZ2Vfc3RhdGUobWVtY2csIGlkeF9hbm9uKTtcbitcdHNuYXAuZmlsZSA9IGJwZl9tZW1fY2dyb3VwX3BhZ2Vfc3RhdGUobWVtY2csIGlkeF9maWxlKTtcbitcdHNuYXAuc2htZW0gPSBicGZfbWVtX2Nncm91cF9wYWdlX3N0YXRlKG1lbWNnLCBpZHhfc2htZW0pO1xuK1x0c25hcC5maWxlX21hcHBlZCA9IGJwZl9tZW1fY2dyb3VwX3BhZ2Vfc3RhdGUobWVtY2csIGlkeF9mbWFwcGVkKTtcbitcdHNuYXAucGdmYXVsdCA9IGJwZl9tZW1fY2dyb3VwX3ZtX2V2ZW50cyhtZW1jZywgaWR4X3BnZmF1bHQpO1xuK1xuK1x0LyogUmVhZCBwYWdlIGNvdW50ZXJzIGZyb20gdGhlIHRydXN0ZWQgcG9pbnRlci4gKi9cbitcdHNuYXAudXNhZ2VfcGFnZXMgPSBCUEZfQ09SRV9SRUFEKG1lbWNnLCBtZW1vcnkudXNhZ2UuY291bnRlcik7XG4rXHRzbmFwLm1heF9wYWdlcyA9IEJQRl9DT1JFX1JFQUQobWVtY2csIG1lbW9yeS5tYXgpO1xuK1xuK1x0YnBmX21hcF91cGRhdGVfZWxlbShcdTAwMjZyZXN1bHRzLCBcdTAwMjZjZ19pZCwgXHUwMDI2c25hcCwgQlBGX0FOWSk7XG4rXG4rXHRicGZfcHV0X21lbV9jZ3JvdXAobWVtY2cpO1xuK1x0cmV0dXJuIDA7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC9tZW1jZ19zdGF0X2Nyb3NzX2NwdS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL21lbWNnX3N0YXRfY3Jvc3NfY3B1Lmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5mNzVlMzQxZjhjYjgzXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvbWVtY2dfc3RhdF9jcm9zc19jcHUuaFxuQEAgLTAsMCArMSwxOCBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuKyNpZm5kZWYgX19NRU1DR19TVEFUX0NST1NTX0NQVV9IXG4rI2RlZmluZSBfX01FTUNHX1NUQVRfQ1JPU1NfQ1BVX0hcbitcbisvKiBGaXhlZC13aWR0aCBzbmFwc2hvdCBzaGFyZWQgYnkgQlBGIGFuZCB1c2Vyc3BhY2UuICovXG4rc3RydWN0IG1lbWNnX3N0YXRfc25hcHNob3Qge1xuK1x0X191NjQgY2dyb3VwX2lkO1xuK1x0X191NjQgYW5vbjtcdFx0LyogTlJfQU5PTl9NQVBQRUQsIGJ5dGVzICovXG4rXHRfX3U2NCBmaWxlO1x0XHQvKiBOUl9GSUxFX1BBR0VTLCBieXRlcyAqL1xuK1x0X191NjQgc2htZW07XHRcdC8qIE5SX1NITUVNLCBieXRlcyAqL1xuK1x0X191NjQgZmlsZV9tYXBwZWQ7XHQvKiBOUl9GSUxFX01BUFBFRCwgYnl0ZXMgKi9cbitcdF9fdTY0IHBnZmF1bHQ7XHRcdC8qIFBHRkFVTFQsIGNvdW50ICovXG4rXHRfX3U2NCB1c2FnZV9wYWdlcztcdC8qIHBhZ2VfY291bnRlciBtZW1vcnkudXNhZ2UsIGluIFBBR0VTICovXG4rXHRfX3U2NCBtYXhfcGFnZXM7XHQvKiBwYWdlX2NvdW50ZXIgbWVtb3J5Lm1heCwgaW4gUEFHRVMgKi9cbit9O1xuK1xuKyNlbmRpZiAvKiBfX01FTUNHX1NUQVRfQ1JPU1NfQ1BVX0ggKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9tZW1jZ19zdGF0X2Nyb3NzX2NwdS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfbWVtY2dfc3RhdF9jcm9zc19jcHUuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjk2ZTRhNGE5NThlZGFcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Nncm91cC90ZXN0X21lbWNnX3N0YXRfY3Jvc3NfY3B1LmNcbkBAIC0wLDAgKzEsNzU1IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXG4rXG4rLypcbisgKiBDb21wYXJlIG1lbWNnIEJQRiBrZnVuY3Mgd2l0aCBtZW1vcnkuc3RhdCBvdmVyIGEgY2hhcmdlZCBzdWJ0cmVlLiBDaGFyZ2Vyc1xuKyAqIHNwcmVhZCBhbm9ueW1vdXMgbWVtb3J5IGFjcm9zcyBDUFVzIGFuZCBob2xkIGl0LiBSZWFkIEJQRiBmaXJzdCBzbyBpdHMgZmx1c2hcbisgKiBpcyBub3QgY29uc3VtZWQgYnkgbWVtb3J5LnN0YXQsIHRoZW4gcmVxdWlyZSB0d28gZmlsZSBzYW1wbGVzIHRvIGJyYWNrZXQgZWFjaFxuKyAqIEJQRiB2YWx1ZS4gRWFjaCBsZWFmIG11c3QgY292ZXIgaXRzIGNoYXJnZTsgcm9vdCBhbm9uIG11c3QgZXF1YWwgdGhlIGxlYWYgc3VtLlxuKyAqL1xuKyNkZWZpbmUgX0dOVV9TT1VSQ0VcbitcbisjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbGltaXRzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGltaXRzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRpbnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3NjaGVkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3dhaXQuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2xpYmJwZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2J0Zi5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJrc2VsZnRlc3QuaFwiXG4rI2luY2x1ZGUgXCJjZ3JvdXBfdXRpbC5oXCJcbisjaW5jbHVkZSBcIm1lbWNnX3N0YXRfY3Jvc3NfY3B1LmhcIlxuKyNpbmNsdWRlIFwibWVtY2dfc3RhdF9jcm9zc19jcHUuc2tlbC5oXCJcbitcbisjZGVmaW5lIFNVQlRSRUVfTkFNRVx0XHRcIm1jZ194Y3B1XCJcbitcbisjZGVmaW5lIE1FTUNHX0NIQVJHRV9CQVRDSFx0NjRcbitcbisjZGVmaW5lIEZMVVNIX01BUkdJTlx0XHQyXG4rXG4rLyogQm91bmQgdG90YWwgY2hhcmdlIG9uIGxhcmdlIHN5c3RlbXMuICovXG4rI2RlZmluZSBNQVhfVE9UQUxfQ0hBUkdFXHQoMjU2VUwgXHUwMDNjXHUwMDNjIDIwKVxuK1xuKy8qIEJvdW5kIHRoZSBDUFVzIHVzZWQgYnkgZWFjaCBsZWFmLiAqL1xuKyNkZWZpbmUgTUFYX0NQVVNfUEVSX0xFQUZcdDE2XG4rXG4rI2RlZmluZSBDSEFSR0VfV0FJVF9SRVRSSUVTXHQ1MDBcbitcbitzdGF0aWMgY2hhciByb290W1BBVEhfTUFYXTtcbitzdGF0aWMgY2hhciAqc3VidHJlZV9yb290O1xuK3N0YXRpYyBsb25nIHBhZ2Vfc2l6ZTtcbitcbisvKiBjZ3JvdXBmcyB2YWx1ZXMgaW4gYnl0ZXMuICovXG4rc3RydWN0IGZpbGVfc25hcCB7XG4rXHRsb25nIGFub24sIGZpbGUsIHNobWVtLCBmaWxlX21hcHBlZCwgcGdmYXVsdDtcbitcdGxvbmcgY3VycmVudDtcbit9O1xuK1xuK3N0cnVjdCBjZ19ub2RlIHtcbitcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4rXHR1bnNpZ25lZCBsb25nIGxvbmcgaWQ7XG4rXHRib29sIGlzX2xlYWY7XHRcdFx0LyogaG9sZHMgYSBjaGFyZ2Ugb2YgaXRzIG93biAqL1xuK1x0bG9uZyBwcmV2aW91c19jdXJyZW50O1x0XHQvKiBwcmV2aW91cyBtZW1vcnkuY3VycmVudCBwb2xsICovXG4rXHRzdHJ1Y3QgbWVtY2dfc3RhdF9zbmFwc2hvdCBicGY7XHQvKiByZWFkIHRocm91Z2ggdGhlIGtmdW5jcyAqL1xuK1x0c3RydWN0IGZpbGVfc25hcCBmaWxlWzJdO1x0LyogcG9zdC1CUEYgY2dyb3VwZnMgc2FtcGxlcyAqL1xuK307XG4rXG4rc3RhdGljIHN0cnVjdCBjZ19ub2RlICpub2RlcztcdC8qIERGUyBvcmRlcjogYSBwYXJlbnQgcHJlY2VkZXMgaXRzIGNoaWxkcmVuICovXG4rc3RhdGljIGludCBuX25vZGVzO1xuK3N0YXRpYyBpbnQgbl9sZWF2ZXM7XG4rXG4rLyogLS0tLSBDUFVzIHRoaXMgdGVzdCBtYXkgcnVuIG9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4rXG4rc3RhdGljIGNwdV9zZXRfdCBhbGxvd2VkX2NwdXM7XG4rc3RhdGljIGludCBuX2NwdTtcbitzdGF0aWMgbG9uZyBuX29ubGluZV9jcHU7XG4rXG4rc3RhdGljIGludCBudGhfY3B1KGludCBuKVxuK3tcbitcdGludCBpLCBzZWVuID0gMDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIENQVV9TRVRTSVpFOyBpKyspIHtcbitcdFx0aWYgKCFDUFVfSVNTRVQoaSwgXHUwMDI2YWxsb3dlZF9jcHVzKSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKHNlZW4rKyA9PSBuICUgbl9jcHUpXG4rXHRcdFx0cmV0dXJuIGk7XG4rXHR9XG4rXHRyZXR1cm4gLTE7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGluX2NwdShpbnQgY3B1KVxuK3tcbitcdGNwdV9zZXRfdCBzZXQ7XG4rXG4rXHRpZiAoY3B1IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRDUFVfWkVSTyhcdTAwMjZzZXQpO1xuK1x0Q1BVX1NFVChjcHUsIFx1MDAyNnNldCk7XG4rXHRyZXR1cm4gc2NoZWRfc2V0YWZmaW5pdHkoMCwgc2l6ZW9mKHNldCksIFx1MDAyNnNldCk7XG4rfVxuK1xuKy8qIC0tLS0gdHJlZSBjb25zdHJ1Y3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbitcbitzdGF0aWMgaW50IGFkZF9ub2RlKGNvbnN0IGNoYXIgKnBhdGgsIGJvb2wgaXNfbGVhZilcbit7XG4rXHRzdHJ1Y3QgY2dfbm9kZSAqbiA9IFx1MDAyNm5vZGVzW25fbm9kZXNdO1xuK1xuK1x0aWYgKGNnX2NyZWF0ZShwYXRoKSlcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0c3RybmNweShuLVx1MDAzZXBhdGgsIHBhdGgsIHNpemVvZihuLVx1MDAzZXBhdGgpIC0gMSk7XG4rXHRuLVx1MDAzZWlkID0gY2dfZ2V0X2lkKHBhdGgpO1xuK1x0bi1cdTAwM2Vpc19sZWFmID0gaXNfbGVhZjtcbitcdG4tXHUwMDNlcHJldmlvdXNfY3VycmVudCA9IC0xO1xuK1x0aWYgKGlzX2xlYWYpXG4rXHRcdG5fbGVhdmVzKys7XG4rXHRuX25vZGVzKys7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyogQnVpbGQgQGxldmVscyBiZWxvdyBAcGF0aDsgb25seSBsZWF2ZXMgYXJlIGNoYXJnZWQuICovXG4rc3RhdGljIGludCBidWlsZF9jaGlsZHJlbihjb25zdCBjaGFyICpwYXRoLCBpbnQgZmFub3V0LCBpbnQgbGV2ZWxzKVxuK3tcbitcdGNoYXIgY2hpbGRbUEFUSF9NQVhdO1xuK1x0aW50IGk7XG4rXG4rXHRpZiAobGV2ZWxzID09IDApXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0LyogR2l2ZSBjaGlsZCBjZ3JvdXBzIGEgbWVtY2cuICovXG4rXHRpZiAoY2dfd3JpdGUocGF0aCwgXCJjZ3JvdXAuc3VidHJlZV9jb250cm9sXCIsIFwiK21lbW9yeVwiKSlcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZmFub3V0OyBpKyspIHtcbitcdFx0c25wcmludGYoY2hpbGQsIHNpemVvZihjaGlsZCksIFwiJXMvYyVkXCIsIHBhdGgsIGkpO1xuK1x0XHRpZiAoYWRkX25vZGUoY2hpbGQsIGxldmVscyA9PSAxKSlcbitcdFx0XHRyZXR1cm4gLTE7XG4rXHRcdGlmIChidWlsZF9jaGlsZHJlbihjaGlsZCwgZmFub3V0LCBsZXZlbHMgLSAxKSlcbitcdFx0XHRyZXR1cm4gLTE7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHNpemVfdCB0cmVlX2NhcGFjaXR5KGludCBmYW5vdXQsIGludCBkZXB0aClcbit7XG4rXHRzaXplX3QgdG90YWwgPSAxLCBsZXZlbCA9IDE7XG4rXHRpbnQgZDtcbitcbitcdGZvciAoZCA9IDA7IGQgXHUwMDNjIGRlcHRoOyBkKyspIHtcbitcdFx0bGV2ZWwgKj0gZmFub3V0O1xuK1x0XHR0b3RhbCArPSBsZXZlbDtcbitcdH1cbitcdHJldHVybiB0b3RhbDtcbit9XG4rXG4rc3RhdGljIGludCBidWlsZF90cmVlKGludCBmYW5vdXQsIGludCBkZXB0aCwgaW50ICpyb290X2ZkKVxuK3tcbitcdG5fbm9kZXMgPSAwO1xuK1x0bl9sZWF2ZXMgPSAwO1xuK1x0bm9kZXMgPSBjYWxsb2ModHJlZV9jYXBhY2l0eShmYW5vdXQsIGRlcHRoKSwgc2l6ZW9mKCpub2RlcykpO1xuK1x0aWYgKCFub2RlcylcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0aWYgKGFkZF9ub2RlKHN1YnRyZWVfcm9vdCwgZGVwdGggPT0gMCkpXG4rXHRcdHJldHVybiAtMTtcbitcbitcdCpyb290X2ZkID0gb3BlbihzdWJ0cmVlX3Jvb3QsIE9fUkRPTkxZKTtcbitcdGlmICgqcm9vdF9mZCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0cmV0dXJuIGJ1aWxkX2NoaWxkcmVuKHN1YnRyZWVfcm9vdCwgZmFub3V0LCBkZXB0aCk7XG4rfVxuK1xuKy8qIERlc3Ryb3kgY2hpbGRyZW4gYmVmb3JlIHBhcmVudHMsIHRoZW4gcmVhcCBjaGFyZ2Vycy4gKi9cbitzdGF0aWMgdm9pZCBkZXN0cm95X3RyZWUodm9pZClcbit7XG4rXHRpbnQgaTtcbitcbitcdGlmICghbm9kZXMpXG4rXHRcdHJldHVybjtcbitcbitcdGZvciAoaSA9IG5fbm9kZXMgLSAxOyBpIFx1MDAzZT0gMDsgaS0tKVxuK1x0XHRjZ19kZXN0cm95KG5vZGVzW2ldLnBhdGgpO1xuK1x0ZnJlZShub2Rlcyk7XG4rXHRub2RlcyA9IE5VTEw7XG4rXG4rXHR3aGlsZSAod2FpdHBpZCgtMSwgTlVMTCwgMCkgXHUwMDNlIDApXG4rXHRcdDtcbit9XG4rXG4rLyogLS0tLSBjcm9zcy1DUFUgY2hhcmdlIChvbmUgY2hpbGQgcGVyIGxlYWYpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuK1xuK3N0cnVjdCBjaGFyZ2VfYXJncyB7XG4rXHRzaXplX3QgYnl0ZXM7XHQvKiBhbm9uIHRoaXMgbGVhZiBob2xkcyAqL1xuK1x0aW50IGJhc2U7XHQvKiBpbmRleCBvZiB0aGUgZmlyc3QgQ1BVIHRvIGZhdWx0IG9uICovXG4rXHRpbnQgaztcdFx0LyogQ1BVcyB0byBzcHJlYWQgdGhlIGNoYXJnZSBvdmVyICovXG4rfTtcbitcbitzdGF0aWMgaW50IGNoYXJnZV9sZWFmKGNvbnN0IGNoYXIgKmNncm91cCwgdm9pZCAqYXJnKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBjaGFyZ2VfYXJncyAqY2EgPSBhcmc7XG4rXHRpbnQgcHBpZCA9IGdldHBwaWQoKTtcbitcdHNpemVfdCBwZXIsIG9mZjtcbitcdGNoYXIgKmJ1ZjtcbitcdGludCBqO1xuK1xuK1x0YnVmID0gbWFsbG9jKGNhLVx1MDAzZWJ5dGVzKTtcbitcdGlmICghYnVmKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIm1hbGxvYygpIGZhaWxlZFxcblwiKTtcbitcdFx0cmV0dXJuIC0xO1xuK1x0fVxuK1xuK1x0LyogS2VlcCBlYWNoIENQVSdzIHNsaWNlIHBhZ2UtYWxpZ25lZC4gKi9cbitcdHBlciA9IGNhLVx1MDAzZWJ5dGVzIC8gY2EtXHUwMDNlayAvIHBhZ2Vfc2l6ZSAqIHBhZ2Vfc2l6ZTtcbitcbitcdGZvciAoaiA9IDA7IGogXHUwMDNjIGNhLVx1MDAzZWs7IGorKykge1xuK1x0XHRvZmYgPSAoc2l6ZV90KWogKiBwZXI7XG4rXHRcdGlmIChwaW5fY3B1KG50aF9jcHUoY2EtXHUwMDNlYmFzZSArIGopKSkge1xuK1x0XHRcdGZyZWUoYnVmKTtcbitcdFx0XHRyZXR1cm4gLTE7XG4rXHRcdH1cbitcdFx0Y2dfdG91Y2hfcGFnZXMoYnVmICsgb2ZmLFxuK1x0XHRcdCAgICAgICBqID09IGNhLVx1MDAzZWsgLSAxID8gY2EtXHUwMDNlYnl0ZXMgLSBvZmYgOiBwZXIpO1xuK1x0fVxuK1xuK1x0d2hpbGUgKGdldHBwaWQoKSA9PSBwcGlkKVxuK1x0XHRzbGVlcCgxKTtcbitcbitcdGZyZWUoYnVmKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGxlYWZfY2hhcmdlKHNpemVfdCB3YW50LCBpbnQgaywgc2l6ZV90ICpieXRlcylcbit7XG4rXHRzaXplX3QgbWluX3BhZ2VzLCBwYWdlcywgd2FudF9wYWdlcztcbitcbitcdGlmICgoc2l6ZV90KW5fb25saW5lX2NwdSBcdTAwM2UgU0laRV9NQVggLyBGTFVTSF9NQVJHSU4gL1xuK1x0XHRcdFx0XHQgTUVNQ0dfQ0hBUkdFX0JBVENIKVxuK1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbitcbitcdC8qIEZvcmNlIG1vcmUgdGhhbiBvbmUgcGVuZGluZyBiYXRjaCBwZXIgQ1BVIGFjcm9zcyB0aGUgc3VidHJlZS4gKi9cbitcdG1pbl9wYWdlcyA9IChzaXplX3QpRkxVU0hfTUFSR0lOICogTUVNQ0dfQ0hBUkdFX0JBVENIICogbl9vbmxpbmVfY3B1O1xuK1x0cGFnZXMgPSBtaW5fcGFnZXMgLyBuX2xlYXZlcyArICEhKG1pbl9wYWdlcyAlIG5fbGVhdmVzKTtcbitcdHdhbnRfcGFnZXMgPSB3YW50IC8gcGFnZV9zaXplICsgISEod2FudCAlIHBhZ2Vfc2l6ZSk7XG4rXHRpZiAocGFnZXMgXHUwMDNjIHdhbnRfcGFnZXMpXG4rXHRcdHBhZ2VzID0gd2FudF9wYWdlcztcbitcdGlmIChwYWdlcyBcdTAwM2MgKHNpemVfdClrKVxuK1x0XHRwYWdlcyA9IGs7XG4rXG4rXHRpZiAocGFnZXMgXHUwMDNlIE1BWF9UT1RBTF9DSEFSR0UgLyAoc2l6ZV90KW5fbGVhdmVzIC8gcGFnZV9zaXplKVxuK1x0XHRyZXR1cm4gLUUyQklHO1xuK1xuK1x0KmJ5dGVzID0gcGFnZXMgKiBwYWdlX3NpemU7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBzdGFydF9jaGFyZ2VycyhpbnQgaywgc2l6ZV90IGJ5dGVzKVxuK3tcbitcdHN0cnVjdCBjaGFyZ2VfYXJncyBjYSA9IHsgLmJ5dGVzID0gYnl0ZXMsIC5rID0gayB9O1xuK1x0bG9uZyBwcmV2LCBjdXI7XG4rXHRib29sIHJlYWR5O1xuK1x0aW50IGksIHJldHJpZXM7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuX25vZGVzOyBpKyspIHtcbitcdFx0aWYgKCFub2Rlc1tpXS5pc19sZWFmKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRpZiAoY2dfcnVuX25vd2FpdChub2Rlc1tpXS5wYXRoLCBjaGFyZ2VfbGVhZiwgXHUwMDI2Y2EpIFx1MDAzYyAwKSB7XG4rXHRcdFx0a3NmdF9wcmludF9tc2coXCJjYW5ub3Qgc3RhcnQgYSBjaGFyZ2VyIG9uICVzXFxuXCIsXG4rXHRcdFx0XHQgICAgICAgbm9kZXNbaV0ucGF0aCk7XG4rXHRcdFx0cmV0dXJuIC0xO1xuK1x0XHR9XG4rXHRcdGNhLmJhc2UgKz0gaztcbitcdH1cbitcbitcdC8qIFdhaXQgdW50aWwgZXZlcnkgbGVhZiBpcyBmdWxseSBjaGFyZ2VkIGFuZCBzdGFibGUuICovXG4rXHRmb3IgKHJldHJpZXMgPSBDSEFSR0VfV0FJVF9SRVRSSUVTOyByZXRyaWVzOyByZXRyaWVzLS0pIHtcbitcdFx0cmVhZHkgPSB0cnVlO1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuX25vZGVzOyBpKyspIHtcbitcdFx0XHRpZiAoIW5vZGVzW2ldLmlzX2xlYWYpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcbitcdFx0XHRjdXIgPSBjZ19yZWFkX2xvbmcobm9kZXNbaV0ucGF0aCwgXCJtZW1vcnkuY3VycmVudFwiKTtcbitcdFx0XHRpZiAoY3VyIFx1MDAzYyAwKSB7XG4rXHRcdFx0XHRrc2Z0X3ByaW50X21zZyhcImNhbm5vdCByZWFkICVzL21lbW9yeS5jdXJyZW50OiAlc1xcblwiLFxuK1x0XHRcdFx0XHQgICAgICAgbm9kZXNbaV0ucGF0aCwgc3RyZXJyb3IoZXJybm8pKTtcbitcdFx0XHRcdHJldHVybiAtMTtcbitcdFx0XHR9XG4rXG4rXHRcdFx0cHJldiA9IG5vZGVzW2ldLnByZXZpb3VzX2N1cnJlbnQ7XG4rXHRcdFx0bm9kZXNbaV0ucHJldmlvdXNfY3VycmVudCA9IGN1cjtcbitcdFx0XHRpZiAoY3VyIFx1MDAzYyAobG9uZylieXRlcyB8fCBjdXIgIT0gcHJldilcbitcdFx0XHRcdHJlYWR5ID0gZmFsc2U7XG4rXHRcdH1cbitcdFx0aWYgKHJlYWR5KVxuK1x0XHRcdHJldHVybiAwO1xuK1x0XHR1c2xlZXAoREVGQVVMVF9XQUlUX0lOVEVSVkFMX1VTIC8gMTApO1xuK1x0fVxuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgbl9ub2RlczsgaSsrKSB7XG4rXHRcdGlmIChub2Rlc1tpXS5pc19sZWFmIFx1MDAyNlx1MDAyNiBub2Rlc1tpXS5wcmV2aW91c19jdXJyZW50IFx1MDAzYyAobG9uZylieXRlcykge1xuK1x0XHRcdGtzZnRfcHJpbnRfbXNnKFwiJXMgcmVhY2hlZCBvbmx5ICVsZCBvZiAlenUgY2hhcmdlZCBieXRlc1xcblwiLFxuK1x0XHRcdFx0ICAgICAgIG5vZGVzW2ldLnBhdGgsIG5vZGVzW2ldLnByZXZpb3VzX2N1cnJlbnQsXG4rXHRcdFx0XHQgICAgICAgYnl0ZXMpO1xuK1x0XHRcdHJldHVybiAtMTtcbitcdFx0fVxuK1x0fVxuK1x0a3NmdF9wcmludF9tc2coXCJtZW1vcnkuY3VycmVudCBkaWQgbm90IHNldHRsZSBiZWZvcmUgdGhlIHRpbWVvdXRcXG5cIik7XG4rXHRyZXR1cm4gLTE7XG4rfVxuK1xuKy8qIC0tLS0gdGhlIHR3byByZWFkZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbitcbisvKiBGbHVzaCB0aGUgc3VidHJlZSBhbmQgY29sbGVjdCBlYWNoIGNncm91cCdzIGtmdW5jIHZhbHVlcy4gKi9cbitzdGF0aWMgaW50IHJlYWRfYnBmKGludCByb290X2ZkKVxuK3tcbitcdERFQ0xBUkVfTElCQlBGX09QVFMoYnBmX2l0ZXJfYXR0YWNoX29wdHMsIG9wdHMpO1xuK1x0c3RydWN0IG1lbWNnX3N0YXRfY3Jvc3NfY3B1ICpza2VsID0gTlVMTDtcbitcdHVuaW9uIGJwZl9pdGVyX2xpbmtfaW5mbyBsaW5mbyA9IHt9O1xuK1x0c3RydWN0IGJwZl9saW5rICpsaW5rID0gTlVMTDtcbitcdGludCByZXQgPSAtMSwgZXJyLCBpLCBtZmQsIGZkO1xuK1x0Y2hhciBidWZbNDA5Nl07XG4rXHRzc2l6ZV90IHI7XG4rXG4rXHRza2VsID0gbWVtY2dfc3RhdF9jcm9zc19jcHVfX29wZW4oKTtcbitcdGlmICghc2tlbCkge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcInNrZWwgb3BlbiBmYWlsZWQ6ICVzICglZClcXG5cIixcbitcdFx0XHQgICAgICAgc3RyZXJyb3IoZXJybm8pLCBlcnJubyk7XG4rXHRcdHJldHVybiAtMTtcbitcdH1cbitcdGVyciA9IGJwZl9wcm9ncmFtX19zZXRfYXV0b2xvYWQoc2tlbC1cdTAwM2Vwcm9ncy5tZW1jZ19rZnVuY3NfcHJvYmUsIGZhbHNlKTtcbitcdGlmIChlcnIpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJkaXNhYmxpbmcgY2FwYWJpbGl0eSBwcm9iZSBmYWlsZWQ6ICVzICglZClcXG5cIixcbitcdFx0XHQgICAgICAgc3RyZXJyb3IoLWVyciksIGVycik7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1x0ZXJyID0gYnBmX21hcF9fc2V0X21heF9lbnRyaWVzKHNrZWwtXHUwMDNlbWFwcy5yZXN1bHRzLCBuX25vZGVzICsgOCk7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwic2V0IG1heF9lbnRyaWVzIGZhaWxlZDogJXMgKCVkKVxcblwiLFxuK1x0XHRcdCAgICAgICBzdHJlcnJvcigtZXJyKSwgZXJyKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXHRlcnIgPSBtZW1jZ19zdGF0X2Nyb3NzX2NwdV9fbG9hZChza2VsKTtcbitcdGlmIChlcnIpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJza2VsIGxvYWQgZmFpbGVkOiAlcyAoJWQpXFxuXCIsXG4rXHRcdFx0ICAgICAgIHN0cmVycm9yKC1lcnIpLCBlcnIpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGxpbmZvLmNncm91cC5jZ3JvdXBfZmQgPSByb290X2ZkO1xuK1x0bGluZm8uY2dyb3VwLm9yZGVyID0gQlBGX0NHUk9VUF9JVEVSX0RFU0NFTkRBTlRTX1BSRTtcbitcdG9wdHMubGlua19pbmZvID0gXHUwMDI2bGluZm87XG4rXHRvcHRzLmxpbmtfaW5mb19sZW4gPSBzaXplb2YobGluZm8pO1xuK1xuK1x0bGluayA9IGJwZl9wcm9ncmFtX19hdHRhY2hfaXRlcihza2VsLVx1MDAzZXByb2dzLmNncm91cF9tZW1jZ19zdGF0X2Nyb3NzX2NwdSxcbitcdFx0XHRcdFx0XHUwMDI2b3B0cyk7XG4rXHRlcnIgPSBsaWJicGZfZ2V0X2Vycm9yKGxpbmspO1xuK1x0aWYgKGVycikge1xuK1x0XHRsaW5rID0gTlVMTDtcbitcdFx0a3NmdF9wcmludF9tc2coXCJhdHRhY2ggaXRlciBmYWlsZWQ6ICVzICglZClcXG5cIixcbitcdFx0XHQgICAgICAgc3RyZXJyb3IoLWVyciksIGVycik7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0ZmQgPSBicGZfaXRlcl9jcmVhdGUoYnBmX2xpbmtfX2ZkKGxpbmspKTtcbitcdGlmIChmZCBcdTAwM2MgMCkge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcImJwZl9pdGVyX2NyZWF0ZSBmYWlsZWQ6ICVzICglZClcXG5cIixcbitcdFx0XHQgICAgICAgc3RyZXJyb3IoZXJybm8pLCBlcnJubyk7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1x0ZG8ge1xuK1x0XHRyID0gcmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSk7XG4rXHR9IHdoaWxlIChyIFx1MDAzZSAwIHx8IChyIFx1MDAzYyAwIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFSU5UUikpO1xuK1x0ZXJyID0gZXJybm87XG4rXHRjbG9zZShmZCk7XG4rXHRpZiAociBcdTAwM2MgMCkge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcImJwZiB3YWxrIGZhaWxlZDogJXMgKCVkKVxcblwiLFxuK1x0XHRcdCAgICAgICBzdHJlcnJvcihlcnIpLCBlcnIpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdG1mZCA9IGJwZl9tYXBfX2ZkKHNrZWwtXHUwMDNlbWFwcy5yZXN1bHRzKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5fbm9kZXM7IGkrKylcbitcdFx0aWYgKGJwZl9tYXBfbG9va3VwX2VsZW0obWZkLCBcdTAwMjZub2Rlc1tpXS5pZCwgXHUwMDI2bm9kZXNbaV0uYnBmKSkge1xuK1x0XHRcdGtzZnRfcHJpbnRfbXNnKFwibm8gbWFwIGVudHJ5IGZvciAlczogJXMgKCVkKVxcblwiLFxuK1x0XHRcdFx0ICAgICAgIG5vZGVzW2ldLnBhdGgsIHN0cmVycm9yKGVycm5vKSwgZXJybm8pO1xuK1x0XHRcdGdvdG8gb3V0O1xuK1x0XHR9XG4rXHRyZXQgPSAwO1xuK291dDpcbitcdGJwZl9saW5rX19kZXN0cm95KGxpbmspO1xuK1x0bWVtY2dfc3RhdF9jcm9zc19jcHVfX2Rlc3Ryb3koc2tlbCk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKiBSZWFkIG9uZSBjZ3JvdXBmcyBzbmFwc2hvdC4gKi9cbitzdGF0aWMgaW50IHJlYWRfZmlsZXMoaW50IHNsb3QpXG4re1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuX25vZGVzOyBpKyspIHtcbitcdFx0Y29uc3QgY2hhciAqcGF0aCA9IG5vZGVzW2ldLnBhdGg7XG4rXHRcdHN0cnVjdCBmaWxlX3NuYXAgKmYgPSBcdTAwMjZub2Rlc1tpXS5maWxlW3Nsb3RdO1xuK1xuK1x0XHRmLVx1MDAzZWFub24gPSBjZ19yZWFkX2tleV9sb25nKHBhdGgsIFwibWVtb3J5LnN0YXRcIiwgXCJhbm9uIFwiKTtcbitcdFx0Zi1cdTAwM2VmaWxlID0gY2dfcmVhZF9rZXlfbG9uZyhwYXRoLCBcIm1lbW9yeS5zdGF0XCIsIFwiZmlsZSBcIik7XG4rXHRcdGYtXHUwMDNlc2htZW0gPSBjZ19yZWFkX2tleV9sb25nKHBhdGgsIFwibWVtb3J5LnN0YXRcIiwgXCJzaG1lbSBcIik7XG4rXHRcdGYtXHUwMDNlZmlsZV9tYXBwZWQgPSBjZ19yZWFkX2tleV9sb25nKHBhdGgsIFwibWVtb3J5LnN0YXRcIixcbitcdFx0XHRcdFx0XHQgIFwiZmlsZV9tYXBwZWQgXCIpO1xuK1x0XHRmLVx1MDAzZXBnZmF1bHQgPSBjZ19yZWFkX2tleV9sb25nKHBhdGgsIFwibWVtb3J5LnN0YXRcIiwgXCJwZ2ZhdWx0IFwiKTtcbitcdFx0Zi1cdTAwM2VjdXJyZW50ID0gY2dfcmVhZF9sb25nKHBhdGgsIFwibWVtb3J5LmN1cnJlbnRcIik7XG4rXG4rXHRcdGlmIChmLVx1MDAzZWFub24gXHUwMDNjIDAgfHwgZi1cdTAwM2VmaWxlIFx1MDAzYyAwIHx8IGYtXHUwMDNlc2htZW0gXHUwMDNjIDAgfHxcbitcdFx0ICAgIGYtXHUwMDNlZmlsZV9tYXBwZWQgXHUwMDNjIDAgfHwgZi1cdTAwM2VwZ2ZhdWx0IFx1MDAzYyAwIHx8IGYtXHUwMDNlY3VycmVudCBcdTAwM2MgMCkge1xuK1x0XHRcdGtzZnRfcHJpbnRfbXNnKFwicmVhZGluZyB0aGUgc3RhdHMgb2YgJXMgZmFpbGVkXFxuXCIsIHBhdGgpO1xuK1x0XHRcdHJldHVybiAtMTtcbitcdFx0fVxuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qIC0tLS0gY29tcGFyaXNvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbitcbitzdGF0aWMgdm9pZCBkdW1wX25vZGUoY29uc3Qgc3RydWN0IGNnX25vZGUgKm4pXG4re1xuK1x0aW50IHM7XG4rXG4rXHRrc2Z0X3ByaW50X21zZyhcIiVzIGJwZiAgIDogYW5vbj0lbGx1IGZpbGU9JWxsdSBzaG1lbT0lbGx1IGZtYXBwZWQ9JWxsdSBwZ2ZhdWx0PSVsbHVcXG5cIixcbitcdFx0ICAgICAgIG4tXHUwMDNlcGF0aCwgbi1cdTAwM2VicGYuYW5vbiwgbi1cdTAwM2VicGYuZmlsZSwgbi1cdTAwM2VicGYuc2htZW0sXG4rXHRcdCAgICAgICBuLVx1MDAzZWJwZi5maWxlX21hcHBlZCwgbi1cdTAwM2VicGYucGdmYXVsdCk7XG4rXHRmb3IgKHMgPSAwOyBzIFx1MDAzYyAyOyBzKyspXG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwiJXMgZmlsZSVkOiBhbm9uPSVsZCBmaWxlPSVsZCBzaG1lbT0lbGQgZm1hcHBlZD0lbGQgcGdmYXVsdD0lbGRcXG5cIixcbitcdFx0XHQgICAgICAgbi1cdTAwM2VwYXRoLCBzLCBuLVx1MDAzZWZpbGVbc10uYW5vbiwgbi1cdTAwM2VmaWxlW3NdLmZpbGUsXG4rXHRcdFx0ICAgICAgIG4tXHUwMDNlZmlsZVtzXS5zaG1lbSwgbi1cdTAwM2VmaWxlW3NdLmZpbGVfbWFwcGVkLFxuK1x0XHRcdCAgICAgICBuLVx1MDAzZWZpbGVbc10ucGdmYXVsdCk7XG4rfVxuK1xuKy8qIEVxdWFsIGZpbGUgc2FtcGxlcyByZXF1aXJlIGFuIGV4YWN0IEJQRiBtYXRjaDsgb3RoZXJ3aXNlIGFjY2VwdCB0aGVpciByYW5nZS4gKi9cbitzdGF0aWMgYm9vbCBicmFja2V0ZWQodW5zaWduZWQgbG9uZyBsb25nIHYsIGxvbmcgYSwgbG9uZyBiKVxuK3tcbitcdGxvbmcgbG8gPSBhIFx1MDAzYyBiID8gYSA6IGI7XG4rXHRsb25nIGhpID0gYSBcdTAwM2MgYiA/IGIgOiBhO1xuK1xuK1x0cmV0dXJuIHYgXHUwMDNlPSAodW5zaWduZWQgbG9uZyBsb25nKWxvIFx1MDAyNlx1MDAyNiB2IFx1MDAzYz0gKHVuc2lnbmVkIGxvbmcgbG9uZyloaTtcbit9XG4rXG4rc3RhdGljIGludCBjaGVja190cmVlKHNpemVfdCBjaGFyZ2VkKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgbG9uZyByb290X2Fub24gPSAwLCBsZWFmX2Fub24gPSAwO1xuK1x0aW50IGksIGJhZCA9IDA7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuX25vZGVzOyBpKyspIHtcbitcdFx0Y29uc3Qgc3RydWN0IGNnX25vZGUgKm4gPSBcdTAwMjZub2Rlc1tpXTtcbitcdFx0Y29uc3Qgc3RydWN0IG1lbWNnX3N0YXRfc25hcHNob3QgKmIgPSBcdTAwMjZuLVx1MDAzZWJwZjtcbitcdFx0Y29uc3Qgc3RydWN0IGZpbGVfc25hcCAqZjAgPSBcdTAwMjZuLVx1MDAzZWZpbGVbMF0sICpmMSA9IFx1MDAyNm4tXHUwMDNlZmlsZVsxXTtcbitcbitcdFx0aWYgKCFicmFja2V0ZWQoYi1cdTAwM2Vhbm9uLCBmMC1cdTAwM2Vhbm9uLCBmMS1cdTAwM2Vhbm9uKSB8fFxuK1x0XHQgICAgIWJyYWNrZXRlZChiLVx1MDAzZWZpbGUsIGYwLVx1MDAzZWZpbGUsIGYxLVx1MDAzZWZpbGUpIHx8XG4rXHRcdCAgICAhYnJhY2tldGVkKGItXHUwMDNlc2htZW0sIGYwLVx1MDAzZXNobWVtLCBmMS1cdTAwM2VzaG1lbSkgfHxcbitcdFx0ICAgICFicmFja2V0ZWQoYi1cdTAwM2VmaWxlX21hcHBlZCwgZjAtXHUwMDNlZmlsZV9tYXBwZWQsXG4rXHRcdFx0ICAgICAgIGYxLVx1MDAzZWZpbGVfbWFwcGVkKSB8fFxuK1x0XHQgICAgIWJyYWNrZXRlZChiLVx1MDAzZXBnZmF1bHQsIGYwLVx1MDAzZXBnZmF1bHQsIGYxLVx1MDAzZXBnZmF1bHQpKSB7XG4rXHRcdFx0a3NmdF9wcmludF9tc2coXCJrZnVuY3MgZGlzYWdyZWUgd2l0aCBtZW1vcnkuc3RhdFxcblwiKTtcbitcdFx0XHRkdW1wX25vZGUobik7XG4rXHRcdFx0YmFkKys7XG4rXHRcdH1cbitcbitcdFx0LyogTGl2ZSBwYWdlIGNvdW50ZXJzIGFyZSBib3VuZHMsIG5vdCBmbHVzaGVkIHN0YXRpc3RpY3MuICovXG4rXHRcdGlmIChiLVx1MDAzZWFub24gXHUwMDNlIGItXHUwMDNldXNhZ2VfcGFnZXMgKiAodW5zaWduZWQgbG9uZyBsb25nKXBhZ2Vfc2l6ZSB8fFxuK1x0XHQgICAgZjEtXHUwMDNlYW5vbiBcdTAwM2UgZjEtXHUwMDNlY3VycmVudCkge1xuK1x0XHRcdGtzZnRfcHJpbnRfbXNnKFwiJXM6IGFub24gYWJvdmUgdXNhZ2U6IGJwZiAlbGx1LyVsbHUgZmlsZSAlbGQvJWxkXFxuXCIsXG4rXHRcdFx0XHQgICAgICAgbi1cdTAwM2VwYXRoLCBiLVx1MDAzZWFub24sXG4rXHRcdFx0XHQgICAgICAgYi1cdTAwM2V1c2FnZV9wYWdlcyAqICh1bnNpZ25lZCBsb25nIGxvbmcpcGFnZV9zaXplLFxuK1x0XHRcdFx0ICAgICAgIGYxLVx1MDAzZWFub24sIGYxLVx1MDAzZWN1cnJlbnQpO1xuK1x0XHRcdGJhZCsrO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChuLVx1MDAzZWlzX2xlYWYpIHtcbitcdFx0XHRpZiAoYi1cdTAwM2Vhbm9uIFx1MDAzYyBjaGFyZ2VkKSB7XG4rXHRcdFx0XHRrc2Z0X3ByaW50X21zZyhcIiVzOiBmbHVzaGVkIGFub24gJWxsdSwgY2hhcmdlZCAlenVcXG5cIixcbitcdFx0XHRcdFx0ICAgICAgIG4tXHUwMDNlcGF0aCwgYi1cdTAwM2Vhbm9uLCBjaGFyZ2VkKTtcbitcdFx0XHRcdGJhZCsrO1xuK1x0XHRcdH1cbitcdFx0XHRsZWFmX2Fub24gKz0gYi1cdTAwM2Vhbm9uO1xuK1x0XHR9XG4rXHRcdGlmIChpID09IDApXG4rXHRcdFx0cm9vdF9hbm9uID0gYi1cdTAwM2Vhbm9uO1xuK1x0fVxuK1xuK1x0aWYgKHJvb3RfYW5vbiAhPSBsZWFmX2Fub24pIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJzdWJ0cmVlIHJvb3QgYW5vbiAlbGx1LCBzdW0gb2YgdGhlIGxlYXZlcyAlbGx1XFxuXCIsXG4rXHRcdFx0ICAgICAgIHJvb3RfYW5vbiwgbGVhZl9hbm9uKTtcbitcdFx0YmFkKys7XG4rXHR9XG4rXHRyZXR1cm4gYmFkID8gLTEgOiAwO1xuK31cbitcbisvKiBBY2NlcHQgUEFHRV9DT1VOVEVSX01BWCB2YWx1ZXMgZnJvbSBlaXRoZXIgMzItIG9yIDY0LWJpdCBrZXJuZWxzLiAqL1xuK3N0YXRpYyBpbnQgY2hlY2tfdW5saW1pdGVkKHZvaWQpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBsb25nIG1heDY0ID0gKHVuc2lnbmVkIGxvbmcgbG9uZylJTlQ2NF9NQVggLyBwYWdlX3NpemU7XG4rXHR1bnNpZ25lZCBsb25nIGxvbmcgbWF4MzIgPSBJTlQzMl9NQVg7XG4rXG4rXHRpZiAoY2dfcmVhZF9zdHJjbXAobm9kZXNbMF0ucGF0aCwgXCJtZW1vcnkubWF4XCIsIFwibWF4XFxuXCIpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChub2Rlc1swXS5icGYubWF4X3BhZ2VzICE9IG1heDY0IFx1MDAyNlx1MDAyNiBub2Rlc1swXS5icGYubWF4X3BhZ2VzICE9IG1heDMyKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwibWVtb3J5Lm1heCByZWFkcyBtYXgsIGtmdW5jIHJlcG9ydHMgJWxsdSBwYWdlc1xcblwiLFxuK1x0XHRcdCAgICAgICBub2Rlc1swXS5icGYubWF4X3BhZ2VzKTtcbitcdFx0cmV0dXJuIC0xO1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qIC0tLS0gb25lIGNhc2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbitcbitzdHJ1Y3QgdGVzdGNhc2Uge1xuK1x0Y29uc3QgY2hhciAqbmFtZTtcbitcdGludCBmYW5vdXQ7XG4rXHRpbnQgZGVwdGg7XG4rXHRpbnQgY3B1c19wZXJfbGVhZjtcdC8qIEssIG9yIDAgZm9yIHRoZSBib3VuZGVkIGNyb3NzLUNQVSBjb3VudCAqL1xuK1x0c2l6ZV90IHJlc2lkZW50X2J5dGVzO1x0LyogYW5vbiBwZXIgbGVhZiwgcmFpc2VkIGlmIHRvbyBzbWFsbCAqL1xuK307XG4rXG4rc3RhdGljIGludCBydW5fY2FzZShjb25zdCBzdHJ1Y3QgdGVzdGNhc2UgKnRjKVxuK3tcbitcdGludCByb290X2ZkID0gLTEsIHJldCA9IEtTRlRfRkFJTCwgZXJyLCBrO1xuK1x0c2l6ZV90IGNoYXJnZWQ7XG4rXG4rXHRpZiAoYnVpbGRfdHJlZSh0Yy1cdTAwM2VmYW5vdXQsIHRjLVx1MDAzZWRlcHRoLCBcdTAwMjZyb290X2ZkKSkge1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcImNhbm5vdCBidWlsZCB0aGUgdHJlZVxcblwiKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRrID0gdGMtXHUwMDNlY3B1c19wZXJfbGVhZjtcbitcdGlmIChrIFx1MDAzYz0gMClcbitcdFx0ayA9IG5fY3B1IFx1MDAzYyBNQVhfQ1BVU19QRVJfTEVBRiA/IG5fY3B1IDogTUFYX0NQVVNfUEVSX0xFQUY7XG4rXHRlbHNlIGlmIChrIFx1MDAzZSBuX2NwdSlcbitcdFx0ayA9IG5fY3B1O1xuK1x0ZXJyID0gbGVhZl9jaGFyZ2UodGMtXHUwMDNlcmVzaWRlbnRfYnl0ZXMsIGssIFx1MDAyNmNoYXJnZWQpO1xuK1x0aWYgKGVyciA9PSAtRTJCSUcpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCIlcyBuZWVkcyBtb3JlIHRoYW4gJWx1TUIgdG8gdHJpZ2dlciBhIGZsdXNoIG9uICVsZCBvbmxpbmUgQ1BVc1xcblwiLFxuK1x0XHRcdCAgICAgICB0Yy1cdTAwM2VuYW1lLCBNQVhfVE9UQUxfQ0hBUkdFIFx1MDAzZVx1MDAzZSAyMCwgbl9vbmxpbmVfY3B1KTtcbitcdFx0cmV0ID0gS1NGVF9TS0lQO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcdGlmIChlcnIpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJjYW5ub3QgY2FsY3VsYXRlIHRoZSBjaGFyZ2UgZm9yICVzOiAlcyAoJWQpXFxuXCIsXG4rXHRcdFx0ICAgICAgIHRjLVx1MDAzZW5hbWUsIHN0cmVycm9yKC1lcnIpLCBlcnIpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGtzZnRfcHJpbnRfbXNnKFwiJXM6ICVkIGNncm91cHMsICVkIGxlYXZlcywgJWQvJWQgY3B1cywgJXp1S0IgcGVyIGxlYWZcXG5cIixcbitcdFx0ICAgICAgIHRjLVx1MDAzZW5hbWUsIG5fbm9kZXMsIG5fbGVhdmVzLCBrLCBuX2NwdSwgY2hhcmdlZCBcdTAwM2VcdTAwM2UgMTApO1xuK1xuK1x0aWYgKHN0YXJ0X2NoYXJnZXJzKGssIGNoYXJnZWQpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdC8qIFJlYWQgQlBGIGZpcnN0OyBtZW1vcnkuc3RhdCB3b3VsZCBjb25zdW1lIHRoZSBwZW5kaW5nIGZsdXNoLiAqL1xuK1x0aWYgKHJlYWRfYnBmKHJvb3RfZmQpIHx8IHJlYWRfZmlsZXMoMCkgfHwgcmVhZF9maWxlcygxKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRpZiAoIWNoZWNrX3RyZWUoY2hhcmdlZCkgXHUwMDI2XHUwMDI2ICFjaGVja191bmxpbWl0ZWQoKSlcbitcdFx0cmV0ID0gS1NGVF9QQVNTO1xuK291dDpcbitcdGlmIChyb290X2ZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2Uocm9vdF9mZCk7XG4rXHRkZXN0cm95X3RyZWUoKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGVzdGNhc2UgY2FzZXNbXSA9IHtcbitcdC8qIG5hbWUsIGZhbm91dCwgZGVwdGgsIEssIGFub24gcGVyIGxlYWYgKi9cbitcdHsgXCJzaW5nbGVfY3B1X3NtYWxsX3RyZWVcIiwgNCwgMiwgMSwgMiBcdTAwM2NcdTAwM2MgMjAgfSxcbitcdHsgXCJjcm9zc19jcHVfc21hbGxfdHJlZVwiLCA0LCAyLCAwLCAyIFx1MDAzY1x1MDAzYyAyMCB9LFxuK1x0eyBcInNpbmdsZV9jcHVfbGFyZ2VfdHJlZVwiLCA0LCAzLCAxLCAyNTYgXHUwMDNjXHUwMDNjIDEwIH0sXG4rXHR7IFwiY3Jvc3NfY3B1X2xhcmdlX3RyZWVcIiwgNCwgMywgMCwgMjU2IFx1MDAzY1x1MDAzYyAxMCB9LFxuK307XG4rXG4rc3RhdGljIGJvb2wgbWVtY2dfa2Z1bmNzX2F2YWlsYWJsZSh2b2lkKVxuK3tcbitcdHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBrZnVuY3NbXSA9IHtcbitcdFx0XCJicGZfZ2V0X21lbV9jZ3JvdXBcIixcbitcdFx0XCJicGZfcHV0X21lbV9jZ3JvdXBcIixcbitcdFx0XCJicGZfbWVtX2Nncm91cF9mbHVzaF9zdGF0c1wiLFxuK1x0XHRcImJwZl9tZW1fY2dyb3VwX3BhZ2Vfc3RhdGVcIixcbitcdFx0XCJicGZfbWVtX2Nncm91cF92bV9ldmVudHNcIixcbitcdH07XG4rXHRzdHJ1Y3QgYnRmICpidGY7XG4rXHRpbnQgZXJyLCBpO1xuK1xuK1x0YnRmID0gYnRmX19sb2FkX3ZtbGludXhfYnRmKCk7XG4rXHRlcnIgPSBsaWJicGZfZ2V0X2Vycm9yKGJ0Zik7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwiY2Fubm90IGxvYWQgdm1saW51eCBCVEY6ICVzICglZClcXG5cIixcbitcdFx0XHQgICAgICAgc3RyZXJyb3IoLWVyciksIGVycik7XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoa2Z1bmNzKTsgaSsrKSB7XG4rXHRcdGlmIChidGZfX2ZpbmRfYnlfbmFtZV9raW5kKGJ0Ziwga2Z1bmNzW2ldLCBCVEZfS0lORF9GVU5DKSBcdTAwM2UgMClcbitcdFx0XHRjb250aW51ZTtcbitcdFx0a3NmdF9wcmludF9tc2coXCJyZXF1aXJlZCBrZnVuYyAlcyBpcyBub3QgaW4gdm1saW51eCBCVEZcXG5cIixcbitcdFx0XHQgICAgICAga2Z1bmNzW2ldKTtcbitcdFx0YnRmX19mcmVlKGJ0Zik7XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcdGlmIChidGZfX2ZpbmRfYnlfbmFtZV9raW5kKGJ0ZiwgXCJicGZfaXRlcl9jZ3JvdXBcIiwgQlRGX0tJTkRfRlVOQykgXHUwMDNjPSAwKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwiY2dyb3VwIEJQRiBpdGVyYXRvciBpcyBub3QgaW4gdm1saW51eCBCVEZcXG5cIik7XG4rXHRcdGJ0Zl9fZnJlZShidGYpO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4rXHRidGZfX2ZyZWUoYnRmKTtcbitcdHJldHVybiB0cnVlO1xuK31cbitcbitzdGF0aWMgYm9vbCB1bnN1cHBvcnRlZF9icGZfZmVhdHVyZV9lcnJvcihpbnQgZXJyKVxuK3tcbitcdHJldHVybiBlcnIgPT0gLUVJTlZBTCB8fCBlcnIgPT0gLUVOT0VOVCB8fCBlcnIgPT0gLUVPUE5PVFNVUFA7XG4rfVxuK1xuKy8qIFJldHVybiAxIGlmIHN1cHBvcnRlZCwgMCBpZiB1bmF2YWlsYWJsZSwgb3IgYSBuZWdhdGl2ZSBlcnJvci4gKi9cbitzdGF0aWMgaW50IHByb2JlX21lbWNnX2JwZl9mZWF0dXJlcyhpbnQgcm9vdF9mZClcbit7XG4rXHRERUNMQVJFX0xJQkJQRl9PUFRTKGJwZl9pdGVyX2F0dGFjaF9vcHRzLCBvcHRzKTtcbitcdHN0cnVjdCBtZW1jZ19zdGF0X2Nyb3NzX2NwdSAqc2tlbDtcbitcdHVuaW9uIGJwZl9pdGVyX2xpbmtfaW5mbyBsaW5mbyA9IHt9O1xuK1x0c3RydWN0IGJwZl9saW5rICpsaW5rID0gTlVMTDtcbitcdGludCByZXQsIGVyciwgaXRlcl9mZCA9IC0xO1xuK1xuK1x0c2tlbCA9IG1lbWNnX3N0YXRfY3Jvc3NfY3B1X19vcGVuKCk7XG4rXHRpZiAoIXNrZWwpIHtcbitcdFx0ZXJyID0gZXJybm8gPyAtZXJybm8gOiAtRUlOVkFMO1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcImNhcGFiaWxpdHkgcHJvYmUgb3BlbiBmYWlsZWQ6ICVzICglZClcXG5cIixcbitcdFx0XHQgICAgICAgc3RyZXJyb3IoLWVyciksIGVycik7XG4rXHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rXHRlcnIgPSBicGZfcHJvZ3JhbV9fc2V0X2F1dG9sb2FkKHNrZWwtXHUwMDNlcHJvZ3MuY2dyb3VwX21lbWNnX3N0YXRfY3Jvc3NfY3B1LFxuK1x0XHRcdFx0XHRmYWxzZSk7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdGtzZnRfcHJpbnRfbXNnKFwiZGlzYWJsaW5nIHRlc3QgcHJvZ3JhbSBmYWlsZWQ6ICVzICglZClcXG5cIixcbitcdFx0XHQgICAgICAgc3RyZXJyb3IoLWVyciksIGVycik7XG4rXHRcdHJldCA9IGVycjtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRlcnIgPSBtZW1jZ19zdGF0X2Nyb3NzX2NwdV9fbG9hZChza2VsKTtcbitcdGlmIChlcnIpIHtcbitcdFx0a3NmdF9wcmludF9tc2coXCJCUEYgY2FwYWJpbGl0eSBwcm9iZSBsb2FkIGZhaWxlZDogJXMgKCVkKVxcblwiLFxuK1x0XHRcdCAgICAgICBzdHJlcnJvcigtZXJyKSwgZXJyKTtcbitcdFx0cmV0ID0gdW5zdXBwb3J0ZWRfYnBmX2ZlYXR1cmVfZXJyb3IoZXJyKSA/IDAgOiBlcnI7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0bGluZm8uY2dyb3VwLmNncm91cF9mZCA9IHJvb3RfZmQ7XG4rXHRsaW5mby5jZ3JvdXAub3JkZXIgPSBCUEZfQ0dST1VQX0lURVJfU0VMRl9PTkxZO1xuK1x0b3B0cy5saW5rX2luZm8gPSBcdTAwMjZsaW5mbztcbitcdG9wdHMubGlua19pbmZvX2xlbiA9IHNpemVvZihsaW5mbyk7XG4rXHRsaW5rID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9pdGVyKHNrZWwtXHUwMDNlcHJvZ3MubWVtY2dfa2Z1bmNzX3Byb2JlLCBcdTAwMjZvcHRzKTtcbitcdGVyciA9IGxpYmJwZl9nZXRfZXJyb3IobGluayk7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdGxpbmsgPSBOVUxMO1xuK1x0XHRrc2Z0X3ByaW50X21zZyhcIkJQRiBjYXBhYmlsaXR5IHByb2JlIGF0dGFjaCBmYWlsZWQ6ICVzICglZClcXG5cIixcbitcdFx0XHQgICAgICAgc3RyZXJyb3IoLWVyciksIGVycik7XG4rXHRcdHJldCA9IHVuc3VwcG9ydGVkX2JwZl9mZWF0dXJlX2Vycm9yKGVycikgPyAwIDogZXJyO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGl0ZXJfZmQgPSBicGZfaXRlcl9jcmVhdGUoYnBmX2xpbmtfX2ZkKGxpbmspKTtcbitcdGlmIChpdGVyX2ZkIFx1MDAzYyAwKSB7XG4rXHRcdGVyciA9IC1lcnJubztcbitcdFx0a3NmdF9wcmludF9tc2coXCJCUEYgY2FwYWJpbGl0eSBwcm9iZSBpdGVyYXRvciBjcmVhdGlvbiBmYWlsZWQ6ICVzICglZClcXG5cIixcbitcdFx0XHQgICAgICAgc3RyZXJyb3IoLWVyciksIGVycik7XG4rXHRcdHJldCA9IHVuc3VwcG9ydGVkX2JwZl9mZWF0dXJlX2Vycm9yKGVycikgPyAwIDogZXJyO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdHJldCA9IDE7XG4rb3V0OlxuK1x0aWYgKGl0ZXJfZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShpdGVyX2ZkKTtcbitcdGJwZl9saW5rX19kZXN0cm95KGxpbmspO1xuK1x0bWVtY2dfc3RhdF9jcm9zc19jcHVfX2Rlc3Ryb3koc2tlbCk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4re1xuK1x0aW50IGZlYXR1cmVfZmQsIGksIHJldDtcbitcbitcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XG4rXG4rXHQvKiBQcm9iZSBCVEYgYmVmb3JlIG9wZXJhdGlvbnMgdGhhdCBtYXkgcmVxdWlyZSBwcml2aWxlZ2VzLiAqL1xuK1x0aWYgKCFtZW1jZ19rZnVuY3NfYXZhaWxhYmxlKCkpXG4rXHRcdGtzZnRfZXhpdF9za2lwKFwibWVtY2cgQlBGIGtmdW5jcyBhcmUgbm90IGF2YWlsYWJsZVxcblwiKTtcbitcbitcdGlmIChjZ19maW5kX3VuaWZpZWRfcm9vdChyb290LCBzaXplb2Yocm9vdCksIE5VTEwpKVxuK1x0XHRrc2Z0X2V4aXRfc2tpcChcImNncm91cCB2MiBpc24ndCBtb3VudGVkXFxuXCIpO1xuK1x0ZmVhdHVyZV9mZCA9IG9wZW4ocm9vdCwgT19SRE9OTFkgfCBPX0RJUkVDVE9SWSk7XG4rXHRpZiAoZmVhdHVyZV9mZCBcdTAwM2MgMClcbitcdFx0a3NmdF9leGl0X2ZhaWxfbXNnKFwiY2Fubm90IG9wZW4gY2dyb3VwIHJvb3Q6ICVzICglZClcXG5cIixcbitcdFx0XHRcdCAgIHN0cmVycm9yKGVycm5vKSwgZXJybm8pO1xuK1x0cmV0ID0gcHJvYmVfbWVtY2dfYnBmX2ZlYXR1cmVzKGZlYXR1cmVfZmQpO1xuK1x0Y2xvc2UoZmVhdHVyZV9mZCk7XG4rXHRpZiAoIXJldClcbitcdFx0a3NmdF9leGl0X3NraXAoXCJzbGVlcGFibGUgY2dyb3VwIGl0ZXJhdG9yIG9yIG1lbWNnIGtmdW5jcyBhcmUgbm90IGF2YWlsYWJsZVxcblwiKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcImNhbm5vdCBwcm9iZSBCUEYgY2FwYWJpbGl0aWVzOiAlcyAoJWQpXFxuXCIsXG4rXHRcdFx0XHQgICBzdHJlcnJvcigtcmV0KSwgcmV0KTtcbitcbitcdGlmIChjZ19yZWFkX3N0cnN0cihyb290LCBcImNncm91cC5jb250cm9sbGVyc1wiLCBcIm1lbW9yeVwiKSlcbitcdFx0a3NmdF9leGl0X3NraXAoXCJtZW1vcnkgY29udHJvbGxlciBpc24ndCBhdmFpbGFibGVcXG5cIik7XG4rXG4rXHRpZiAoY2dfcmVhZF9zdHJzdHIocm9vdCwgXCJjZ3JvdXAuc3VidHJlZV9jb250cm9sXCIsIFwibWVtb3J5XCIpKVxuK1x0XHRpZiAoY2dfd3JpdGUocm9vdCwgXCJjZ3JvdXAuc3VidHJlZV9jb250cm9sXCIsIFwiK21lbW9yeVwiKSlcbitcdFx0XHRrc2Z0X2V4aXRfc2tpcChcIkZhaWxlZCB0byBzZXQgbWVtb3J5IGNvbnRyb2xsZXJcXG5cIik7XG4rXG4rXHRDUFVfWkVSTyhcdTAwMjZhbGxvd2VkX2NwdXMpO1xuK1x0aWYgKHNjaGVkX2dldGFmZmluaXR5KDAsIHNpemVvZihhbGxvd2VkX2NwdXMpLCBcdTAwMjZhbGxvd2VkX2NwdXMpKVxuK1x0XHRrc2Z0X2V4aXRfc2tpcChcImNhbm5vdCByZWFkIENQVSBhZmZpbml0eVxcblwiKTtcbitcdG5fY3B1ID0gQ1BVX0NPVU5UKFx1MDAyNmFsbG93ZWRfY3B1cyk7XG4rXHRpZiAobl9jcHUgXHUwMDNjPSAwKVxuK1x0XHRrc2Z0X2V4aXRfc2tpcChcIm5vIENQVSB0byBydW4gb25cXG5cIik7XG4rXHRuX29ubGluZV9jcHUgPSBzeXNjb25mKF9TQ19OUFJPQ0VTU09SU19PTkxOKTtcbitcdGlmIChuX29ubGluZV9jcHUgXHUwMDNjPSAwKVxuK1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coXCJjYW5ub3QgZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2Ygb25saW5lIENQVXNcXG5cIik7XG4rXG4rXHRwYWdlX3NpemUgPSBzeXNjb25mKF9TQ19QQUdFU0laRSk7XG4rXHRpZiAocGFnZV9zaXplIFx1MDAzYz0gMClcbitcdFx0cGFnZV9zaXplID0gQlVGX1NJWkU7XG4rXG4rXHRzdWJ0cmVlX3Jvb3QgPSBjZ19uYW1lKHJvb3QsIFNVQlRSRUVfTkFNRSk7XG4rXHRpZiAoIXN1YnRyZWVfcm9vdClcbitcdFx0a3NmdF9leGl0X3NraXAoXCJjYW5ub3QgYnVpbGQgc3VidHJlZSByb290IHBhdGhcXG5cIik7XG4rXG4rXHQvKiBTZXQgdGhlIHBsYW4gYWZ0ZXIgYWxsIGdsb2JhbCBza2lwIGNoZWNrcy4gKi9cbitcdGtzZnRfc2V0X3BsYW4oQVJSQVlfU0laRShjYXNlcykpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShjYXNlcyk7IGkrKykge1xuK1x0XHRzd2l0Y2ggKHJ1bl9jYXNlKFx1MDAyNmNhc2VzW2ldKSkge1xuK1x0XHRjYXNlIEtTRlRfUEFTUzpcbitcdFx0XHRrc2Z0X3Rlc3RfcmVzdWx0X3Bhc3MoXCIlc1xcblwiLCBjYXNlc1tpXS5uYW1lKTtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBLU0ZUX1NLSVA6XG4rXHRcdFx0a3NmdF90ZXN0X3Jlc3VsdF9za2lwKFwiJXNcXG5cIiwgY2FzZXNbaV0ubmFtZSk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGRlZmF1bHQ6XG4rXHRcdFx0a3NmdF90ZXN0X3Jlc3VsdF9mYWlsKFwiJXNcXG5cIiwgY2FzZXNbaV0ubmFtZSk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdH1cbitcbitcdGZyZWUoc3VidHJlZV9yb290KTtcbitcdGtzZnRfZmluaXNoZWQoKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfbWVtY29udHJvbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfbWVtY29udHJvbC5jXG5pbmRleCAwZWJmNzk2ZjNjZmZlLi4xNWJhNDY4Nzk1MDQyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwL3Rlc3RfbWVtY29udHJvbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvdGVzdF9tZW1jb250cm9sLmNcbkBAIC0yNiw3ICsyNiw2IEBAXG4gXG4gc3RhdGljIGJvb2wgaGFzX2xvY2FsZXZlbnRzO1xuIHN0YXRpYyBib29sIGhhc19yZWN1cnNpdmVwcm90O1xuLXN0YXRpYyBpbnQgcGFnZV9zaXplO1xuIFxuIGludCBnZXRfdGVtcF9mZCh2b2lkKVxuIHtcbkBAIC01NiwyOCArNTUsMTIgQEAgaW50IGFsbG9jX3BhZ2VjYWNoZShpbnQgZmQsIHNpemVfdCBzaXplKVxuIFx0cmV0dXJuIC0xO1xuIH1cbiBcbi1zdGF0aWMgY2hhciAqYWxsb2NfYW5kX3BvcHVsYXRlX2Fub24oc2l6ZV90IHNpemUpXG4te1xuLVx0Y2hhciAqYnVmLCAqcHRyO1xuLVxuLVx0YnVmID0gbWFsbG9jKHNpemUpO1xuLVx0aWYgKGJ1ZiA9PSBOVUxMKSB7XG4tXHRcdGZwcmludGYoc3RkZXJyLCBcIm1hbGxvYygpIGZhaWxlZFxcblwiKTtcbi1cdFx0cmV0dXJuIE5VTEw7XG4tXHR9XG4tXG4tXHRmb3IgKHB0ciA9IGJ1ZjsgcHRyIFx1MDAzYyBidWYgKyBzaXplOyBwdHIgKz0gcGFnZV9zaXplKVxuLVx0XHQqcHRyID0gMDtcbi1cbi1cdHJldHVybiBidWY7XG4tfVxuLVxuIGludCBhbGxvY19hbm9uKGNvbnN0IGNoYXIgKmNncm91cCwgdm9pZCAqYXJnKVxuIHtcbiBcdHNpemVfdCBzaXplID0gKHVuc2lnbmVkIGxvbmcpYXJnO1xuIFx0Y2hhciAqYnVmO1xuIFxuLVx0YnVmID0gYWxsb2NfYW5kX3BvcHVsYXRlX2Fub24oc2l6ZSk7XG4rXHRidWYgPSBjZ19hbGxvY19hbm9uKHNpemUpO1xuIFx0aWYgKCFidWYpXG4gXHRcdHJldHVybiAtMTtcbiBcbkBAIC0xOTUsNyArMTc4LDcgQEAgc3RhdGljIGludCBhbGxvY19hbm9uXzUwTV9jaGVjayhjb25zdCBjaGFyICpjZ3JvdXAsIHZvaWQgKmFyZylcbiBcdGxvbmcgYW5vbiwgY3VycmVudDtcbiBcdGludCByZXQgPSAtMTtcbiBcbi1cdGJ1ZiA9IGFsbG9jX2FuZF9wb3B1bGF0ZV9hbm9uKHNpemUpO1xuK1x0YnVmID0gY2dfYWxsb2NfYW5vbihzaXplKTtcbiBcdGlmICghYnVmKVxuIFx0XHRyZXR1cm4gLTE7XG4gXG5AQCAtNDIwLDcgKzQwMyw3IEBAIHN0YXRpYyBpbnQgYWxsb2NfYW5vbl9ub2V4aXQoY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpXG4gXHRzaXplX3Qgc2l6ZSA9ICh1bnNpZ25lZCBsb25nKWFyZztcbiBcdGNoYXIgKmJ1ZjtcbiBcbi1cdGJ1ZiA9IGFsbG9jX2FuZF9wb3B1bGF0ZV9hbm9uKHNpemUpO1xuK1x0YnVmID0gY2dfYWxsb2NfYW5vbihzaXplKTtcbiBcdGlmICghYnVmKVxuIFx0XHRyZXR1cm4gLTE7XG4gXG5AQCAtMTAwMSw3ICs5ODQsNyBAQCBzdGF0aWMgaW50IGFsbG9jX2Fub25fNTBNX2NoZWNrX3N3YXAoY29uc3QgY2hhciAqY2dyb3VwLCB2b2lkICphcmcpXG4gXHRsb25nIG1lbV9jdXJyZW50LCBzd2FwX2N1cnJlbnQ7XG4gXHRpbnQgcmV0ID0gLTE7XG4gXG4tXHRidWYgPSBhbGxvY19hbmRfcG9wdWxhdGVfYW5vbihzaXplKTtcbitcdGJ1ZiA9IGNnX2FsbG9jX2Fub24oc2l6ZSk7XG4gXHRpZiAoIWJ1ZilcbiBcdFx0cmV0dXJuIC0xO1xuIFxuQEAgLTE3OTMsMTAgKzE3NzYsNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4gXHRjaGFyIHJvb3RbUEFUSF9NQVhdO1xuIFx0aW50IGksIHByb2Nfc3RhdHVzO1xuIFxuLVx0cGFnZV9zaXplID0gc3lzY29uZihfU0NfUEFHRV9TSVpFKTtcbi1cdGlmIChwYWdlX3NpemUgXHUwMDNjPSAwKVxuLVx0XHRwYWdlX3NpemUgPSBCVUZfU0laRTtcbi1cbiBcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XG4gXHRrc2Z0X3NldF9wbGFuKEFSUkFZX1NJWkUodGVzdHMpKTtcbiBcdGlmIChjZ19maW5kX3VuaWZpZWRfcm9vdChyb290LCBzaXplb2Yocm9vdCksIE5VTEwpKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC8uZ2l0aWdub3JlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvaGlkLy5naXRpZ25vcmVcbmluZGV4IDkzM2Y0ODM4MTViMmMuLjY5OTQzMzAxZGMxZDcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvLmdpdGlnbm9yZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvaGlkLy5naXRpZ25vcmVcbkBAIC0xLDUgKzEsNiBAQFxuIGJwZnRvb2xcbiAqLnNrZWwuaFxuKyouYnBmLmRcbiAvaG9zdC10b29sc1xuIC90b29sc1xuIGhpZF9icGZcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvTWFrZWZpbGVcbmluZGV4IDJmNDIzZGU4MzE0NzMuLjExOTBhNzQ3MDM2ZGEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9oaWQvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC9NYWtlZmlsZVxuQEAgLTQ3LDcgKzQ3LDYgQEAgbXNnID1cbiBlbHNlXG4gbXNnID0gQHByaW50ZiAnICAlLThzJXMgJXMlc1xcbicgXCIkKDEpXCIgXCIkKGlmICQoMiksIFskKDIpXSlcIiBcIiQobm90ZGlyICQoMykpXCIgXCIkKGlmICQoNCksICQoNCkpXCI7XG4gTUFLRUZMQUdTICs9IC0tbm8tcHJpbnQtZGlyZWN0b3J5XG4tc3VibWFrZV9leHRyYXMgOj0gZmVhdHVyZV9kaXNwbGF5PTBcbiBlbmRpZlxuIFxuICMgb3ZlcnJpZGUgbGliLm1rJ3MgZGVmYXVsdCBydWxlc1xuQEAgLTU4LDE3MiArNTcsMjUgQEAgb3ZlcnJpZGUgZGVmaW5lIENMRUFOXG4gXHQkKFEpJChSTSkgLXIgJChFWFRSQV9DTEVBTilcbiBlbmRlZlxuIFxuLWluY2x1ZGUgLi4vbGliLm1rXG4tXG4tVE9PTFNESVIgOj0gJCh0b3Bfc3JjZGlyKS90b29sc1xuLUxJQkRJUiA6PSAkKFRPT0xTRElSKS9saWJcbi1CUEZESVIgOj0gJChMSUJESVIpL2JwZlxuLVRPT0xTSU5DRElSIDo9ICQoVE9PTFNESVIpL2luY2x1ZGVcbi1CUEZUT09MRElSIDo9ICQoVE9PTFNESVIpL2JwZi9icGZ0b29sXG4tU0NSQVRDSF9ESVIgOj0gJChPVVRQVVQpL3Rvb2xzXG4tQlVJTERfRElSIDo9ICQoU0NSQVRDSF9ESVIpL2J1aWxkXG4tSU5DTFVERV9ESVIgOj0gJChTQ1JBVENIX0RJUikvaW5jbHVkZVxuLUJQRk9CSiA6PSAkKEJVSUxEX0RJUikvbGliYnBmL2xpYmJwZi5hXG4taWZuZXEgKCQoQ1JPU1NfQ09NUElMRSksKVxuLUhPU1RfQlVJTERfRElSXHRcdDo9ICQoQlVJTERfRElSKS9ob3N0XG4tSE9TVF9TQ1JBVENIX0RJUlx0Oj0gJChPVVRQVVQpL2hvc3QtdG9vbHNcbi1IT1NUX0lOQ0xVREVfRElSXHQ6PSAkKEhPU1RfU0NSQVRDSF9ESVIpL2luY2x1ZGVcbi1lbHNlXG4tSE9TVF9CVUlMRF9ESVJcdFx0Oj0gJChCVUlMRF9ESVIpXG4tSE9TVF9TQ1JBVENIX0RJUlx0Oj0gJChTQ1JBVENIX0RJUilcbi1IT1NUX0lOQ0xVREVfRElSXHQ6PSAkKElOQ0xVREVfRElSKVxuLWVuZGlmXG4tSE9TVF9CUEZPQkogOj0gJChIT1NUX0JVSUxEX0RJUikvbGliYnBmL2xpYmJwZi5hXG4tUkVTT0xWRV9CVEZJRFMgOj0gJChIT1NUX0JVSUxEX0RJUikvcmVzb2x2ZV9idGZpZHMvcmVzb2x2ZV9idGZpZHNcbi1cbi1WTUxJTlVYX0JURl9QQVRIUyA/PSAkKGlmICQoTyksJChPKS92bWxpbnV4KVx0XHRcdFx0XFxcbi1cdFx0ICAgICAkKGlmICQoS0JVSUxEX09VVFBVVCksJChLQlVJTERfT1VUUFVUKS92bWxpbnV4KVx0XFxcbi1cdFx0ICAgICAuLi8uLi8uLi8uLi92bWxpbnV4XHRcdFx0XHRcXFxuLVx0XHQgICAgIC9zeXMva2VybmVsL2J0Zi92bWxpbnV4XHRcdFx0XHRcXFxuLVx0XHQgICAgIC9ib290L3ZtbGludXgtJChzaGVsbCB1bmFtZSAtcilcbi1WTUxJTlVYX0JURiA/PSAkKGFic3BhdGggJChmaXJzdHdvcmQgJCh3aWxkY2FyZCAkKFZNTElOVVhfQlRGX1BBVEhTKSkpKVxuLWlmZXEgKCQoVk1MSU5VWF9CVEYpLClcbi0kKGVycm9yIENhbm5vdCBmaW5kIGEgdm1saW51eCBmb3IgVk1MSU5VWF9CVEYgYXQgYW55IG9mIFwiJChWTUxJTlVYX0JURl9QQVRIUylcIilcbi1lbmRpZlxuLVxuLSMgRGVmaW5lIHNpbXBsZSBhbmQgc2hvcnQgYG1ha2UgdGVzdF9wcm9nc2AsIGBtYWtlIHRlc3Rfc3lzY3RsYCwgZXRjIHRhcmdldHNcbi0jIHRvIGJ1aWxkIGluZGl2aWR1YWwgdGVzdHMuXG4tIyBOT1RFOiBTZW1pY29sb24gYXQgdGhlIGVuZCBpcyBjcml0aWNhbCB0byBvdmVycmlkZSBsaWIubWsncyBkZWZhdWx0IHN0YXRpY1xuLSMgcnVsZSBmb3IgYmluYXJpZXMuXG4tJChub3RkaXIgJChURVNUX0dFTl9QUk9HUykpOiAlOiAkKE9VVFBVVCkvJSA7XG4tXG4tIyBzb3J0IHJlbW92ZXMgbGliYnBmIGR1cGxpY2F0ZXMgd2hlbiBub3QgY3Jvc3MtYnVpbGRpbmdcbi1NQUtFX0RJUlMgOj0gJChzb3J0ICQoQlVJTERfRElSKS9saWJicGYgJChIT1NUX0JVSUxEX0RJUikvbGliYnBmXHRcdFxcXG4tXHQgICAgICAgJChIT1NUX0JVSUxEX0RJUikvYnBmdG9vbCAkKEhPU1RfQlVJTERfRElSKS9yZXNvbHZlX2J0Zmlkc1x0XFxcbi1cdCAgICAgICAkKElOQ0xVREVfRElSKSlcbi0kKE1BS0VfRElSUyk6XG4tXHQkKGNhbGwgbXNnLE1LRElSLCwkQClcbi1cdCQoUSlta2RpciAtcCAkQFxuKyMgQnVpbGQgdGhlIGxlZ2FjeSBwcm9ncy8qLmMgbGF5b3V0IHdpdGggdGhlIHNoYXJlZCBCUEYgcnVsZXMuXG4rQlBGX1NSQ1MgICAgICAgOj0gJCh3aWxkY2FyZCBwcm9ncy8qLmMpXG4rQlBGX1BST0dfRVhUICAgOj0gLmNcbisjIEJQRkRJUiBpcyBkZWZpbmVkIHdoZW4gdGhpcyByZWN1cnNpdmUgdmFyaWFibGUgaXMgZXhwYW5kZWQuXG4rQlBGX0VYVFJBX0hEUlMgID0gJCh3aWxkY2FyZCBwcm9ncy8qLmgpICQod2lsZGNhcmQgJChCUEZESVIpL2hpZF9icGZfKi5oKSBcXFxuK1x0XHQgICQod2lsZGNhcmQgJChCUEZESVIpLyouYnBmLmgpXG4gXG4tREVGQVVMVF9CUEZUT09MIDo9ICQoSE9TVF9TQ1JBVENIX0RJUikvc2Jpbi9icGZ0b29sXG4raW5jbHVkZSAuLi9saWIubWtcbitpbmNsdWRlIC4uL2xpYi5icGYubWtcbiBcbisjIFByZXNlcnZlIHRoZSBleGlzdGluZyBpbnN0YWxsIGxpc3QuXG4rVEVTVF9HRU5fRklMRVMgKz0gJChCUEZfT0JKUylcbiBURVNUX0dFTl9QUk9HU19FWFRFTkRFRCArPSAkKERFRkFVTFRfQlBGVE9PTClcbiBcbi0kKFRFU1RfR0VOX1BST0dTKSAkKFRFU1RfR0VOX1BST0dTX0VYVEVOREVEKTogJChCUEZPQkopXG4tXG4tQlBGVE9PTCA/PSAkKERFRkFVTFRfQlBGVE9PTClcbi0kKERFRkFVTFRfQlBGVE9PTCk6ICQod2lsZGNhcmQgJChCUEZUT09MRElSKS8qLltjaF0gJChCUEZUT09MRElSKS9NYWtlZmlsZSkgICAgXFxcbi1cdFx0ICAgICQoSE9TVF9CUEZPQkopIHwgJChIT1NUX0JVSUxEX0RJUikvYnBmdG9vbFxuLVx0JChRKSQoTUFLRSkgJChzdWJtYWtlX2V4dHJhcykgIC1DICQoQlBGVE9PTERJUilcdFx0XHQgICAgICAgXFxcbi1cdFx0ICAgIEFSQ0g9IENST1NTX0NPTVBJTEU9IENDPSQoSE9TVENDKSBMRD0kKEhPU1RMRCkgXHQgICAgICAgXFxcbi1cdFx0ICAgIEVYVFJBX0NGTEFHUz0nLWcgLU8wJ1x0XHRcdFx0ICAgICAgIFxcXG4tXHRcdCAgICBPVVRQVVQ9JChIT1NUX0JVSUxEX0RJUikvYnBmdG9vbC9cdFx0XHQgICAgICAgXFxcbi1cdFx0ICAgIExJQkJQRl9PVVRQVVQ9JChIT1NUX0JVSUxEX0RJUikvbGliYnBmL1x0XHQgICAgICAgXFxcbi1cdFx0ICAgIExJQkJQRl9ERVNURElSPSQoSE9TVF9TQ1JBVENIX0RJUikvXHRcdFx0ICAgICAgIFxcXG4tXHRcdCAgICBwcmVmaXg9IERFU1RESVI9JChIT1NUX1NDUkFUQ0hfRElSKS8gaW5zdGFsbC1iaW5cbi1cbi0kKEJQRk9CSik6ICQod2lsZGNhcmQgJChCUEZESVIpLyouW2NoXSAkKEJQRkRJUikvTWFrZWZpbGUpXHRcdCAgICAgICBcXFxuLVx0ICAgfCAkKEJVSUxEX0RJUikvbGliYnBmXG4tXHQkKFEpJChNQUtFKSAkKHN1Ym1ha2VfZXh0cmFzKSAtQyAkKEJQRkRJUikgT1VUUFVUPSQoQlVJTERfRElSKS9saWJicGYvIFxcXG4tXHRcdCAgICBFWFRSQV9DRkxBR1M9Jy1nIC1PMCdcdFx0XHRcdCAgICAgICBcXFxuLVx0XHQgICAgREVTVERJUj0kKFNDUkFUQ0hfRElSKSBwcmVmaXg9IGFsbCBpbnN0YWxsX2hlYWRlcnNcbi1cbi1pZm5lcSAoJChCUEZPQkopLCQoSE9TVF9CUEZPQkopKVxuLSQoSE9TVF9CUEZPQkopOiAkKHdpbGRjYXJkICQoQlBGRElSKS8qLltjaF0gJChCUEZESVIpL01ha2VmaWxlKVx0XHQgICAgICAgXFxcbi1cdFx0fCAkKEhPU1RfQlVJTERfRElSKS9saWJicGZcbi1cdCQoUSkkKE1BS0UpICQoc3VibWFrZV9leHRyYXMpIC1DICQoQlBGRElSKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbi1cdFx0ICAgIEVYVFJBX0NGTEFHUz0nLWcgLU8wJyBBUkNIPSBDUk9TU19DT01QSUxFPVx0XHQgICAgICAgXFxcbi1cdFx0ICAgIE9VVFBVVD0kKEhPU1RfQlVJTERfRElSKS9saWJicGYvIENDPSQoSE9TVENDKSBMRD0kKEhPU1RMRCkgXFxcbi1cdFx0ICAgIERFU1RESVI9JChIT1NUX1NDUkFUQ0hfRElSKS8gcHJlZml4PSBhbGwgaW5zdGFsbF9oZWFkZXJzXG4tZW5kaWZcbi1cbi0kKElOQ0xVREVfRElSKS92bWxpbnV4Lmg6ICQoVk1MSU5VWF9CVEYpICQoQlBGVE9PTCkgfCAkKElOQ0xVREVfRElSKVxuLWlmZXEgKCQoVk1MSU5VWF9IKSwpXG4tXHQkKGNhbGwgbXNnLEdFTiwsJEApXG4tXHQkKFEpJChCUEZUT09MKSBidGYgZHVtcCBmaWxlICQoVk1MSU5VWF9CVEYpIGZvcm1hdCBjIFx1MDAzZSAkQFxuLWVsc2Vcbi1cdCQoY2FsbCBtc2csQ1AsLCRAKVxuLVx0JChRKWNwIFwiJChWTUxJTlVYX0gpXCIgJEBcbi1lbmRpZlxuLVxuLSQoUkVTT0xWRV9CVEZJRFMpOiAkKEhPU1RfQlBGT0JKKSB8ICQoSE9TVF9CVUlMRF9ESVIpL3Jlc29sdmVfYnRmaWRzXHRcXFxuLVx0XHQgICAgICAgJChUT09MU0RJUikvYnBmL3Jlc29sdmVfYnRmaWRzL21haW4uY1x0XFxcbi1cdFx0ICAgICAgICQoVE9PTFNESVIpL2xpYi9yYnRyZWUuY1x0XHRcdFxcXG4tXHRcdCAgICAgICAkKFRPT0xTRElSKS9saWIvemFsbG9jLmNcdFx0XHRcXFxuLVx0XHQgICAgICAgJChUT09MU0RJUikvbGliL3N0cmluZy5jXHRcdFx0XFxcbi1cdFx0ICAgICAgICQoVE9PTFNESVIpL2xpYi9jdHlwZS5jXHRcdFx0XFxcbi1cdFx0ICAgICAgICQoVE9PTFNESVIpL2xpYi9zdHJfZXJyb3Jfci5jXG4tXHQkKFEpJChNQUtFKSAkKHN1Ym1ha2VfZXh0cmFzKSAtQyAkKFRPT0xTRElSKS9icGYvcmVzb2x2ZV9idGZpZHNcdFxcXG4tXHRcdENDPSQoSE9TVENDKSBMRD0kKEhPU1RMRCkgQVI9JChIT1NUQVIpIFxcXG4tXHRcdExJQkJQRl9JTkNMVURFPSQoSE9TVF9JTkNMVURFX0RJUikgXFxcbi1cdFx0T1VUUFVUPSQoSE9TVF9CVUlMRF9ESVIpL3Jlc29sdmVfYnRmaWRzLyBCUEZPQko9JChIT1NUX0JQRk9CSilcbi1cbi0jIEdldCBDbGFuZydzIGRlZmF1bHQgaW5jbHVkZXMgb24gdGhpcyBzeXN0ZW0sIGFzIG9wcG9zZWQgdG8gdGhvc2Ugc2VlbiBieVxuLSMgJy0tdGFyZ2V0PWJwZicuIFRoaXMgZml4ZXMgXCJtaXNzaW5nXCIgZmlsZXMgb24gc29tZSBhcmNoaXRlY3R1cmVzL2Rpc3Ryb3MsXG4tIyBzdWNoIGFzIGFzbS9ieXRlb3JkZXIuaCwgYXNtL3NvY2tldC5oLCBhc20vc29ja2lvcy5oLCBzeXMvY2RlZnMuaCBldGMuXG4tI1xuLSMgVXNlICctaWRpcmFmdGVyJzogRG9uJ3QgaW50ZXJmZXJlIHdpdGggaW5jbHVkZSBtZWNoYW5pY3MgZXhjZXB0IHdoZXJlIHRoZVxuLSMgYnVpbGQgd291bGQgaGF2ZSBmYWlsZWQgYW55d2F5cy5cbi1kZWZpbmUgZ2V0X3N5c19pbmNsdWRlc1xuLSQoc2hlbGwgJCgxKSAtdiAtRSAtIFx1MDAzYy9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MSBcXFxuLVx0fCBzZWQgLW4gJy9cdTAwM2MuLi5cdTAwM2Ugc2VhcmNoIHN0YXJ0cyBoZXJlOi8sL0VuZCBvZiBzZWFyY2ggbGlzdC4veyBzfCBcXCgvLipcXCl8LWlkaXJhZnRlciBcXDF8cCB9JykgXFxcbi0kKHNoZWxsICQoMSkgLWRNIC1FIC0gXHUwMDNjL2Rldi9udWxsIHwgZ3JlcCAnX19yaXNjdl94bGVuICcgfCBhd2sgJ3twcmludGYoXCItRF9fcmlzY3ZfeGxlbj0lZCAtRF9fQklUU19QRVJfTE9ORz0lZFwiLCAkJDMsICQkMyl9Jylcbi1lbmRlZlxuLVxuLSMgRGV0ZXJtaW5lIHRhcmdldCBlbmRpYW5uZXNzLlxuLUlTX0xJVFRMRV9FTkRJQU4gPSAkKHNoZWxsICQoQ0MpIC1kTSAtRSAtIFx1MDAzYy9kZXYvbnVsbCB8IFxcXG4tXHRcdFx0Z3JlcCAnZGVmaW5lIF9fQllURV9PUkRFUl9fIF9fT1JERVJfTElUVExFX0VORElBTl9fJylcbi1NRU5ESUFOPSQoaWYgJChJU19MSVRUTEVfRU5ESUFOKSwtbWxpdHRsZS1lbmRpYW4sLW1iaWctZW5kaWFuKVxuLVxuLUNMQU5HX1NZU19JTkNMVURFUyA9ICQoY2FsbCBnZXRfc3lzX2luY2x1ZGVzLCQoQ0xBTkcpKVxuLUJQRl9DRkxBR1MgPSAtZyAtV2Vycm9yIC1EX19UQVJHRVRfQVJDSF8kKFNSQ0FSQ0gpICQoTUVORElBTikgXHRcdFxcXG4tXHQgICAgIC1Xbm8tbWljcm9zb2Z0LWFub24tdGFnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbi1cdCAgICAgLWZtcy1leHRlbnNpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuLVx0ICAgICAtSSQoSU5DTFVERV9ESVIpXG4tXG4tQ0xBTkdfQ0ZMQUdTID0gJChDTEFOR19TWVNfSU5DTFVERVMpIFxcXG4tXHQgICAgICAgLVduby1jb21wYXJlLWRpc3RpbmN0LXBvaW50ZXItdHlwZXNcbi1cbi0jIEJ1aWxkIEJQRiBvYmplY3QgdXNpbmcgQ2xhbmdcbi0jICQxIC0gaW5wdXQgLmMgZmlsZVxuLSMgJDIgLSBvdXRwdXQgLm8gZmlsZVxuLSMgJDMgLSBDRkxBR1Ncbi1kZWZpbmUgQ0xBTkdfQlBGX0JVSUxEX1JVTEVcbi1cdCQoY2FsbCBtc2csQ0xORy1CUEYsJChUUlVOTkVSX0JJTkFSWSksJDIpXG4tXHQkKFEpJChDTEFORykgJDMgLU8yIC0tdGFyZ2V0PWJwZiAtYyAkMSAtbWNwdT12MyAtbyAkMlxuLWVuZGVmXG4tIyBTaW1pbGFyIHRvIENMQU5HX0JQRl9CVUlMRF9SVUxFLCBidXQgd2l0aCBkaXNhYmxlZCBhbHUzMlxuLWRlZmluZSBDTEFOR19OT0FMVTMyX0JQRl9CVUlMRF9SVUxFXG4tXHQkKGNhbGwgbXNnLENMTkctQlBGLCQoVFJVTk5FUl9CSU5BUlkpLCQyKVxuLVx0JChRKSQoQ0xBTkcpICQzIC1PMiAtLXRhcmdldD1icGYgLWMgJDEgLW1jcHU9djIgLW8gJDJcbi1lbmRlZlxuLSMgQnVpbGQgQlBGIG9iamVjdCB1c2luZyBHQ0Ncbi1kZWZpbmUgR0NDX0JQRl9CVUlMRF9SVUxFXG4tXHQkKGNhbGwgbXNnLEdDQy1CUEYsJChUUlVOTkVSX0JJTkFSWSksJDIpXG4tXHQkKFEpJChCUEZfR0NDKSAkMyAtTzIgLWMgJDEgLW8gJDJcbi1lbmRlZlxuLVxuLUJQRl9QUk9HU19ESVIgOj0gcHJvZ3Ncbi1CUEZfQlVJTERfUlVMRSA6PSBDTEFOR19CUEZfQlVJTERfUlVMRVxuLUJQRl9TUkNTIDo9ICQobm90ZGlyICQod2lsZGNhcmQgJChCUEZfUFJPR1NfRElSKS8qLmMpKVxuLUJQRl9PQkpTIDo9ICQocGF0c3Vic3QgJS5jLCQoT1VUUFVUKS8lLmJwZi5vLCAkKEJQRl9TUkNTKSlcbi1CUEZfU0tFTFMgOj0gJChwYXRzdWJzdCAlLmMsJChPVVRQVVQpLyUuc2tlbC5oLCAkKEJQRl9TUkNTKSlcbi1URVNUX0dFTl9GSUxFUyArPSAkKEJQRl9PQkpTKVxuKyMgS2VlcCBhbGlhc2VzIHN1Y2ggYXMgXCJtYWtlIGhpZF9icGZcIiBmcm9tIG1hdGNoaW5nIGxpYi5taydzIGJpbmFyeSBydWxlLlxuKyQobm90ZGlyICQoVEVTVF9HRU5fUFJPR1MpKTogJTogJChPVVRQVVQpLyUgO1xuIFxuLSQoQlBGX1BST0dTX0RJUiktYnBmb2JqcyA6PSB5XG4tJChCUEZfT0JKUyk6ICQoT1VUUFVUKS8lLmJwZi5vOlx0XHRcdFx0XFxcbi1cdCAgICAgJChCUEZfUFJPR1NfRElSKS8lLmNcdFx0XHRcXFxuLVx0ICAgICAkKHdpbGRjYXJkICQoQlBGX1BST0dTX0RJUikvKi5oKVx0XHRcXFxuLVx0ICAgICAkKElOQ0xVREVfRElSKS92bWxpbnV4LmhcdFx0XHRcdFxcXG4tXHQgICAgICQod2lsZGNhcmQgJChCUEZESVIpL2hpZF9icGZfKi5oKVx0XHRcdFxcXG4tXHQgICAgICQod2lsZGNhcmQgJChCUEZESVIpLyouYnBmLmgpXHRcdFx0XFxcbi1cdCAgICAgfCAkKE9VVFBVVCkgJChCUEZPQkopXG4tXHQkKGNhbGwgJChCUEZfQlVJTERfUlVMRSksJFx1MDAzYywkQCwgJChCUEZfQ0ZMQUdTKSlcbi1cbi0kKEJQRl9TS0VMUyk6ICUuc2tlbC5oOiAlLmJwZi5vICQoQlBGVE9PTCkgfCAkKE9VVFBVVClcbi1cdCQoY2FsbCBtc2csR0VOLVNLRUwsJChCSU5BUlkpLCRAKVxuLVx0JChRKSQoQlBGVE9PTCkgZ2VuIG9iamVjdCAkKFx1MDAzYzoubz0ubGlua2VkMS5vKSAkXHUwMDNjXG4tXHQkKFEpJChCUEZUT09MKSBnZW4gc2tlbGV0b24gJChcdTAwM2M6Lm89LmxpbmtlZDEubykgbmFtZSAkKG5vdGRpciAkKFx1MDAzYzouYnBmLm89KSkgXHUwMDNlICRAXG4rIyBSZWxpbmsgdGVzdHMgd2hlbiB0aGUgaW4tdHJlZSBsaWJicGYgY2hhbmdlcy5cbiskKFRFU1RfR0VOX1BST0dTKTogJChCUEZPQkopXG4gXG4gJChPVVRQVVQpLyUubzogJS5jICQoQlBGX1NLRUxTKSBoaWRfY29tbW9uLmhcbiBcdCQoY2FsbCBtc2csQ0MsLCRAKVxuQEAgLTIzMyw1ICs4NSw0IEBAICQoT1VUUFVUKS8lOiAkKE9VVFBVVCkvJS5vXG4gXHQkKGNhbGwgbXNnLEJJTkFSWSwsJEApXG4gXHQkKFEpJChMSU5LLmMpICReICQoTERMSUJTKSAtbyAkQFxuIFxuLUVYVFJBX0NMRUFOIDo9ICQoU0NSQVRDSF9ESVIpICQoSE9TVF9TQ1JBVENIX0RJUikgZmVhdHVyZSBicGZ0b29sXHRcXFxuLVx0JChhZGRwcmVmaXggJChPVVRQVVQpLywqLm8gKi5za2VsLmggbm9fYWx1MzIpXG4rRVhUUkFfQ0xFQU4gKz0gJChPVVRQVVQpLyoub1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC9wcm9ncy9oaWQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC9wcm9ncy9oaWQuY1xuaW5kZXggYjIxZmJiMTNjOTI2Zi4uZWM3MzRlMThkMjNhZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2hpZC9wcm9ncy9oaWQuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvaGlkL3Byb2dzL2hpZC5jXG5AQCAtMTExLDcgKzExMSw3IEBAIGludCBoaWRfdXNlcl9yYXdfcmVxdWVzdChzdHJ1Y3QgaGlkX2h3X3JlcXVlc3Rfc3lzY2FsbF9hcmdzICphcmdzKVxuIHtcbiBcdHN0cnVjdCBoaWRfYnBmX2N0eCAqY3R4O1xuIFx0Y29uc3Qgc2l6ZV90IHNpemUgPSBhcmdzLVx1MDAzZXNpemU7XG4tXHRpbnQgaSwgcmV0ID0gMDtcbitcdGludCByZXQgPSAwO1xuIFxuIFx0aWYgKHNpemUgXHUwMDNlIHNpemVvZihhcmdzLVx1MDAzZWRhdGEpKVxuIFx0XHRyZXR1cm4gLTc7IC8qIC1FMkJJRyAqL1xuQEAgLTEzNyw3ICsxMzcsNyBAQCBpbnQgaGlkX3VzZXJfb3V0cHV0X3JlcG9ydChzdHJ1Y3QgaGlkX2h3X3JlcXVlc3Rfc3lzY2FsbF9hcmdzICphcmdzKVxuIHtcbiBcdHN0cnVjdCBoaWRfYnBmX2N0eCAqY3R4O1xuIFx0Y29uc3Qgc2l6ZV90IHNpemUgPSBhcmdzLVx1MDAzZXNpemU7XG4tXHRpbnQgaSwgcmV0ID0gMDtcbitcdGludCByZXQgPSAwO1xuIFxuIFx0aWYgKHNpemUgXHUwMDNlIHNpemVvZihhcmdzLVx1MDAzZWRhdGEpKVxuIFx0XHRyZXR1cm4gLTc7IC8qIC1FMkJJRyAqL1xuQEAgLTE2MSw3ICsxNjEsNyBAQCBpbnQgaGlkX3VzZXJfaW5wdXRfcmVwb3J0KHN0cnVjdCBoaWRfaHdfcmVxdWVzdF9zeXNjYWxsX2FyZ3MgKmFyZ3MpXG4ge1xuIFx0c3RydWN0IGhpZF9icGZfY3R4ICpjdHg7XG4gXHRjb25zdCBzaXplX3Qgc2l6ZSA9IGFyZ3MtXHUwMDNlc2l6ZTtcbi1cdGludCBpLCByZXQgPSAwO1xuK1x0aW50IHJldCA9IDA7XG4gXG4gXHRpZiAoc2l6ZSBcdTAwM2Ugc2l6ZW9mKGFyZ3MtXHUwMDNlZGF0YSkpXG4gXHRcdHJldHVybiAtNzsgLyogLUUyQklHICovXG5AQCAtNDE3LDcgKzQxNyw2IEBAIFNFQyhcIj9zdHJ1Y3Rfb3BzLnMvaGlkX2h3X291dHB1dF9yZXBvcnRcIilcbiBpbnQgQlBGX1BST0coaGlkX3Rlc3RfaGlkcmF3X291dHB1dF9yZXBvcnQsIHN0cnVjdCBoaWRfYnBmX2N0eCAqaGN0eCwgX191NjQgc291cmNlKVxuIHtcbiBcdF9fdTggKmRhdGEgPSBoaWRfYnBmX2dldF9kYXRhKGhjdHgsIDAgLyogb2Zmc2V0ICovLCAzIC8qIHNpemUgKi8pO1xuLVx0aW50IHJldDtcbiBcbiBcdGlmICghZGF0YSlcbiBcdFx0cmV0dXJuIDA7IC8qIEVQRVJNIGNoZWNrICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbGliLmJwZi5tayBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2xpYi5icGYubWtcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi45MjM4Y2JmMWRlMDYyXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9saWIuYnBmLm1rXG5AQCAtMCwwICsxLDMyMSBAQFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjXG4rIyBCdWlsZCBCUEYgcHJvZ3JhbXMgYW5kIHNrZWxldG9ucyBmb3Igc2VsZnRlc3RzLlxuKyNcbisjIFVzZSBpdCBmcm9tIGEgdGVzdCBNYWtlZmlsZSBsaWtlIHRoaXM6XG4rI1xuKyMgICAgIEJQRl9TUkNTICAgICAgICAgOj0gZm9vLmJwZi5jIGJhci5icGYuY1xuKyMgICAgIFRFU1RfR0VOX1BST0dTICAgOj0gZm9vX3Rlc3RcbisjICAgICBPVkVSUklERV9UQVJHRVRTIDo9IDEgICAgICAgICAgICAgICMgc2V0IGJlZm9yZSBsaWIubWtcbisjICAgICBpbmNsdWRlIC4uL2xpYi5ta1xuKyMgICAgIGluY2x1ZGUgLi4vbGliLmJwZi5ta1xuKyNcbisjICAgICAkKE9VVFBVVCkvZm9vX3Rlc3Q6IGZvb190ZXN0LmMgJChCUEZfU0tFTFMpICQoQlBGT0JKKVxuKyMgICAgICAgICAkKGNhbGwgYnBmX2xpbmssJEAsJFx1MDAzYylcbisjXG4rIyBEZXBlbmQgb24gJChCUEZPQkopIHRvIHJlbGluayB0aGUgdGVzdCB3aGVuIGxpYmJwZi5hIGNoYW5nZXMuXG4rI1xuKyMgT3B0aW9ucyB0byBzZXQgYmVmb3JlIGluY2x1ZGluZyBsaWIuYnBmLm1rOlxuKyMgICBCUEZfUFJPR19FWFQgICAgIC0gc291cmNlIGVuZGluZzsgZGVmYXVsdCAuYnBmLmMuIFVzZSAuYyBmb3IgcHJvZ3MvZm9vLmMuXG4rIyAgIEJQRl9FWFRSQV9IRFJTICAgLSBtb3JlIGhlYWRlcnMgbmVlZGVkIGJ5IHRoZSBCUEYgb2JqZWN0cy5cbisjICAgQlBGX0VYVFJBX0NGTEFHUyAtIG1vcmUgZmxhZ3MgZm9yIGNvbXBpbGluZyBCUEYgcHJvZ3JhbXMuXG4rIyAgIEJQRl9TS0VMX0VYVCAgICAgLSBza2VsZXRvbiBoZWFkZXIgZW5kaW5nOyBkZWZhdWx0IC5za2VsLmguIE11c3QgZW5kIGluXG4rIyAgICAgICAgICAgICAgICAgICAgICBza2VsLmguXG4rIyAgIEJQRl9HRU5fU1VCU0tFTCAgLSBhbHNvIGNyZWF0ZSBhIHN1YnNrZWxldG9uIGhlYWRlciB3aGVuIHNldC5cbisjICAgQlBGX09CSl9ESVIgICAgICAtIGZvbGRlciBmb3IgQlBGIG9iamVjdHM7IGRlZmF1bHQgJChPVVRQVVQpLlxuKyMgICBCUEZfU0tFTF9ESVIgICAgIC0gZm9sZGVyIGZvciBza2VsZXRvbiBoZWFkZXJzOyBkZWZhdWx0ICQoT1VUUFVUKS5cbisjXG4rIyBTZXQgb3V0cHV0IGRpcmVjdG9yaWVzIHRoYXQgdXNlICQoT1VUUFVUKSBhZnRlciBpbmNsdWRpbmcgbGliLm1rLlxuKyNcbisjIEJQRl9DRkxBR1MgbWF5IGJlIHJlcGxhY2VkIGFmdGVyIHRoaXMgaW5jbHVkZS4gR2VuZXJhdGVkIG5hbWVzIHVzZSB0aGUgc291cmNlXG4rIyBzdGVtIHdpdGhvdXQgaXRzIGRpcmVjdG9yeS5cbisjXG4rIyBJbmNsdWRlIGxpYi5tayBmaXJzdC4gVGhpcyBmaWxlIGRlZmluZXMgdGhlIEJQRiBidWlsZCB2YXJpYWJsZXMgYW5kIGJwZl9saW5rLFxuKyMgZXh0ZW5kcyBhbGwsIENGTEFHUyBhbmQgRVhUUkFfQ0xFQU4sIGFuZCBlbmFibGVzIC5ERUxFVEVfT05fRVJST1IuXG4rXG4raW5jbHVkZSAkKHRvcF9zcmNkaXIpL3Rvb2xzL3NjcmlwdHMvTWFrZWZpbGUuYXJjaFx0IyBBUkNIIC8gU1JDQVJDSCAvIEhPU1RBUkNIXG4rXG4rIyBSZW1vdmUgcGFydGlhbCBmaWxlcyB3cml0dGVuIGRpcmVjdGx5IHRvICRALlxuKy5ERUxFVEVfT05fRVJST1I6XG4rXG4rIyBNYXRjaCB0aGUgbGliYnBmIGFuZCBicGZ0b29sIGhvc3QgY29tcGlsZXIgdG8gTExWTT0uXG4raWZuZXEgKCQoTExWTSksKVxuK0hPU1RDQyA/PSAkKExMVk1fUFJFRklYKWNsYW5nJChMTFZNX1NVRkZJWClcbitIT1NUTEQgPz0gJChMTFZNX1BSRUZJWClsZC5sbGQkKExMVk1fU1VGRklYKVxuK2Vsc2VcbitIT1NUQ0MgPz0gZ2NjXG4rSE9TVExEID89IGxkXG4rZW5kaWZcbitDTEFORyAgPz0gY2xhbmdcbitcbitpZm5lcSAoJChWKSwxKVxuK2xpYl9icGZfc3VibWFrZV9leHRyYXMgOj0gZmVhdHVyZV9kaXNwbGF5PTBcbitlbmRpZlxuK1xuKyMgTWF0Y2ggc2VsZnRlc3RzL2JwZiBkZWJ1ZyBhbmQgcmVsZWFzZSBvcHRpbWl6YXRpb24uXG4rT1BUX0ZMQUdTID89ICQoaWYgJChSRUxFQVNFKSwtTzIsLU8wKVxuK1xuKyMgLS0tLSBmaWxlcyBhbmQgdG9vbHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4rIyBVc2Ugb25lIGZ1bGwgcGF0aC4gRGlmZmVyZW50IGZvcm1zIG9mIHRoZSBzYW1lIC1JIHBhdGggY2FuIGNoYW5nZSBCVEYgb3JkZXIuXG4rbGliX2JwZl90b29sc19kaXIgICAgICAgICA6PSAkKGFic3BhdGggJCh0b3Bfc3JjZGlyKS90b29scylcbitsaWJfYnBmX2RpciAgICAgICAgICAgICAgIDo9ICQobGliX2JwZl90b29sc19kaXIpL2xpYi9icGZcbitsaWJfYnBmX3Rvb2xzX2luY2x1ZGVfZGlyIDo9ICQobGliX2JwZl90b29sc19kaXIpL2luY2x1ZGVcbitsaWJfYnBmX2JwZnRvb2xfZGlyICAgICAgIDo9ICQobGliX2JwZl90b29sc19kaXIpL2JwZi9icGZ0b29sXG4rbGliX2JwZl9hcGlfZGlyICAgICAgICAgICA6PSAkKGxpYl9icGZfdG9vbHNfaW5jbHVkZV9kaXIpL3VhcGlcbitsaWJfYnBmX3NvdXJjZXMgICAgICAgICAgIDo9ICQod2lsZGNhcmQgJChsaWJfYnBmX2RpcikvKi5bY2hdIFxcXG4rXHRcdFx0XHRcdCAgICAgICAkKGxpYl9icGZfZGlyKS9NYWtlZmlsZSlcbitsaWJfYnBmX2hlYWRlcl9zb3VyY2VzICAgIDo9ICQoZmlsdGVyICUuaCwkKGxpYl9icGZfc291cmNlcykpIFxcXG4rXHRcdFx0XHQgICAgICQobGliX2JwZl9hcGlfZGlyKS9saW51eC9icGYuaFxuKyMgS2VlcCB0aGVzZSBuYW1lcyBmb3IgY2FsbGVycyB3aGljaCBhZGQgdGhlaXIgb3duIEJQRiBmbGFncyBvciBkZXBlbmRlbmNpZXMuXG4rQlBGRElSICAgICA6PSAkKGxpYl9icGZfZGlyKVxuK0FQSURJUiAgICAgOj0gJChsaWJfYnBmX2FwaV9kaXIpXG4rXG4rIyBLZWVwIHByaXZhdGUgYnVpbGQgZmlsZXMgdW5kZXIgJChPVVRQVVQpIGZvciBib3RoIGluLXRyZWUgYW5kIE89IGJ1aWxkcy5cbitsaWJfYnBmX3NjcmF0Y2hfZGlyIDo9ICQoT1VUUFVUKS90b29sc1xuK2xpYl9icGZfYnVpbGRfZGlyICAgOj0gJChsaWJfYnBmX3NjcmF0Y2hfZGlyKS9idWlsZFxuK2xpYl9icGZfaW5jbHVkZV9kaXIgOj0gJChsaWJfYnBmX3NjcmF0Y2hfZGlyKS9pbmNsdWRlXG4rIyBJTkNMVURFX0RJUiBpcyBhbHNvIHVzZWQgYnkgY2FsbGVycyB0aGF0IHJlcGxhY2UgQlBGX0NGTEFHUy5cbitJTkNMVURFX0RJUiA6PSAkKGxpYl9icGZfaW5jbHVkZV9kaXIpXG4rQlBGT0JKICAgICAgOj0gJChsaWJfYnBmX2J1aWxkX2RpcikvbGliYnBmL2xpYmJwZi5hXG4rXG4rIyBDcm9zcyBidWlsZHMgdXNlIGEgc2VwYXJhdGUgbmF0aXZlIGxpYmJwZiBmb3IgYnBmdG9vbC5cbitpZm5lcSAoJChDUk9TU19DT01QSUxFKSQoZmlsdGVyLW91dCAkKEhPU1RBUkNIKSwkKFNSQ0FSQ0gpKSwpXG4rbGliX2JwZl9ob3N0X2J1aWxkX2RpciAgIDo9ICQobGliX2JwZl9idWlsZF9kaXIpL2hvc3RcbitsaWJfYnBmX2hvc3Rfc2NyYXRjaF9kaXIgOj0gJChPVVRQVVQpL2hvc3QtdG9vbHNcbitlbHNlXG4rbGliX2JwZl9ob3N0X2J1aWxkX2RpciAgIDo9ICQobGliX2JwZl9idWlsZF9kaXIpXG4rbGliX2JwZl9ob3N0X3NjcmF0Y2hfZGlyIDo9ICQobGliX2JwZl9zY3JhdGNoX2RpcilcbitlbmRpZlxuK2xpYl9icGZfaG9zdF9vYmogOj0gJChsaWJfYnBmX2hvc3RfYnVpbGRfZGlyKS9saWJicGYvbGliYnBmLmFcbitERUZBVUxUX0JQRlRPT0wgIDo9ICQobGliX2JwZl9ob3N0X3NjcmF0Y2hfZGlyKS9zYmluL2JwZnRvb2xcbitCUEZUT09MICAgICAgICAgID89ICQoREVGQVVMVF9CUEZUT09MKVxuK1xuKyMgUmV1c2UgdGFyZ2V0IFVTRVJDRkxBR1Mgb25seSB3aGVuIGJwZnRvb2wgc2hhcmVzIHRoZSB0YXJnZXQgbGliYnBmLlxuK2lmZXEgKCQoQlBGT0JKKSwkKGxpYl9icGZfaG9zdF9vYmopKVxuK2xpYl9icGZfaG9zdF91c2VyX2NmbGFncyA6PSAkKFVTRVJDRkxBR1MpXG4rZW5kaWZcbitcbisjIC0tLS0gZmluZCB2bWxpbnV4IEJURiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuK1ZNTElOVVhfQlRGX1BBVEhTID89ICQoaWYgJChPKSwkKE8pL3ZtbGludXgpXHRcdFx0XHRcXFxuK1x0XHQgICAgICQoaWYgJChLQlVJTERfT1VUUFVUKSwkKEtCVUlMRF9PVVRQVVQpL3ZtbGludXgpXHRcXFxuK1x0XHQgICAgICQodG9wX3NyY2Rpcikvdm1saW51eFx0XHRcdFx0XFxcbitcdFx0ICAgICAvc3lzL2tlcm5lbC9idGYvdm1saW51eFx0XHRcdFx0XFxcbitcdFx0ICAgICAvYm9vdC92bWxpbnV4LSQoc2hlbGwgdW5hbWUgLXIpXG4rVk1MSU5VWF9CVEYgPz0gJChhYnNwYXRoICQoZmlyc3R3b3JkICQod2lsZGNhcmQgJChWTUxJTlVYX0JURl9QQVRIUykpKSlcbisjIERlbGF5IG1pc3Npbmctdm1saW51eCBlcnJvcnMgc28gXCJtYWtlIGNsZWFuXCIgc3RpbGwgd29ya3MuXG4rbGliX2JwZl92bWxpbnV4X2RlcHMgOj0gJChpZiAkKFZNTElOVVhfSCksJChWTUxJTlVYX0gpLCQoVk1MSU5VWF9CVEYpICQoQlBGVE9PTCkpXG4rXG4rIyAtLS0tIGNvbXBpbGVyIGZsYWdzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbisjIEZpbmQgdGhlIG5vcm1hbCBzeXN0ZW0gaGVhZGVycyB0aGF0IENsYW5nIG9taXRzIHdpdGggLS10YXJnZXQ9YnBmLiBQdXQgdGhlbVxuKyMgbGFzdCB3aXRoIC1pZGlyYWZ0ZXIgc28gdGhleSBjYW5ub3QgcmVwbGFjZSBwcm9qZWN0IGhlYWRlcnMuXG4rZGVmaW5lIGxpYl9icGZfZ2V0X3N5c19pbmNsdWRlc1xuKyQoc2hlbGwgJCgxKSAkKDIpIC12IC1FIC0gXHUwMDNjL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxIFxcXG4rXHR8IHNlZCAtbiAnL1x1MDAzYy4uLlx1MDAzZSBzZWFyY2ggc3RhcnRzIGhlcmU6LywvRW5kIG9mIHNlYXJjaCBsaXN0Li97IHN8IFxcKC8uKlxcKXwtaWRpcmFmdGVyIFxcMXxwIH0nKSBcXFxuKyQoc2hlbGwgJCgxKSAkKDIpIC1kTSAtRSAtIFx1MDAzYy9kZXYvbnVsbCB8IGdyZXAgJ19fcmlzY3ZfeGxlbiAnIHwgYXdrICd7cHJpbnRmKFwiLURfX3Jpc2N2X3hsZW49JWQgLURfX0JJVFNfUEVSX0xPTkc9JWRcIiwgJCQzLCAkJDMpfScpIFxcXG4rJChzaGVsbCAkKDEpICQoMikgLWRNIC1FIC0gXHUwMDNjL2Rldi9udWxsIHwgZ3JlcCAnX19sb29uZ2FyY2hfZ3JsZW4gJyB8IGF3ayAne3ByaW50ZihcIi1EX19CSVRTX1BFUl9MT05HPSVkXCIsICQkMyl9JykgXFxcbiskKHNoZWxsICQoMSkgJCgyKSAtZE0gLUUgLSBcdTAwM2MvZGV2L251bGwgfCBncmVwIC1FICdNSVBTKEVMfEVCKXxfTUlQU19TWihQVFJ8TE9ORykgfF9NSVBTX1NJTSB8X0FCSShPMzJ8TjMyfDY0KSAnIHwgYXdrICd7cHJpbnRmKFwiLUQlcz0lcyBcIiwgJCQyLCAkJDMpfScpXG4rZW5kZWZcbitpZm5lcSAoJChDUk9TU19DT01QSUxFKSwpXG4rbGliX2JwZl9jbGFuZ190YXJnZXRfYXJjaCA9IC0tdGFyZ2V0PSQobm90ZGlyICQoQ1JPU1NfQ09NUElMRTolLT0lKSlcbitlbmRpZlxuKyMgRmluZCB0aGUgc3lzdGVtIGluY2x1ZGUgZmxhZ3Mgb25jZSBhbmQgcmV1c2UgdGhlbS5cbitDTEFOR19TWVNfSU5DTFVERVMgOj0gJChjYWxsIGxpYl9icGZfZ2V0X3N5c19pbmNsdWRlcywkKENMQU5HKSwkKGxpYl9icGZfY2xhbmdfdGFyZ2V0X2FyY2gpKVxuK1xuK2xpYl9icGZfaXNfbGl0dGxlX2VuZGlhbiA6PSAkKHNoZWxsICQoQ0MpIC1kTSAtRSAtIFx1MDAzYy9kZXYvbnVsbCB8IFxcXG4rXHRcdFx0XHQgICAgZ3JlcCAnZGVmaW5lIF9fQllURV9PUkRFUl9fIF9fT1JERVJfTElUVExFX0VORElBTl9fJylcbitNRU5ESUFOIDo9ICQoaWYgJChsaWJfYnBmX2lzX2xpdHRsZV9lbmRpYW4pLC1tbGl0dGxlLWVuZGlhbiwtbWJpZy1lbmRpYW4pXG4rXG4rIyBVc2UgQlBGIENQVSB2MyB3aGVuIENsYW5nIHN1cHBvcnRzIGl0LiBPdGhlcndpc2UgdXNlIHYyLlxuK2xpYl9icGZfY2xhbmdfY3B1IDo9ICQoc2hlbGwgJChDTEFORykgLS10YXJnZXQ9YnBmIC1tY3B1PWhlbHAgMlx1MDAzZVx1MDAyNjEgfCBcXFxuK1x0XHRcdCAgICAgZ3JlcCAtcSAndjMnIFx1MDAyNlx1MDAyNiBlY2hvIHYzIHx8IGVjaG8gdjIpXG4rXG4rIyBBY2NlcHQgYW5vbnltb3VzIHN0cnVjdCBhbmQgdW5pb24gbWVtYmVycyBpbiB2bWxpbnV4LmguXG4rQlBGX0NGTEFHUyA9IC1nIC1XYWxsIC1XZXJyb3IgLURfX1RBUkdFVF9BUkNIXyQoU1JDQVJDSCkgJChNRU5ESUFOKVx0XFxcbitcdCAgICAgLUkkKElOQ0xVREVfRElSKSAtSSQoQVBJRElSKVx0XHRcdFx0XFxcbitcdCAgICAgLXN0ZD1nbnUxMVx0XHRcdFx0XHRcdFx0XFxcbitcdCAgICAgLWZuby1zdHJpY3QtYWxpYXNpbmdcdFx0XHRcdFx0XFxcbitcdCAgICAgLWZtcy1leHRlbnNpb25zIC1Xbm8tbWljcm9zb2Z0LWFub24tdGFnXHRcdFx0XFxcbitcdCAgICAgLVduby1jb21wYXJlLWRpc3RpbmN0LXBvaW50ZXItdHlwZXNcdFx0XHRcXFxuK1x0ICAgICAkKENMQU5HX1NZU19JTkNMVURFUykgJChCUEZfRVhUUkFfQ0ZMQUdTKVxuK1xuKyMgJDEgPSBzb3VyY2UsICQyID0gb2JqZWN0LiAtTU1EIC1NUCB0cmFja3Mgbm9uLXN5c3RlbSBoZWFkZXJzLlxuK2RlZmluZSBsaWJfYnBmX2J1aWxkX3J1bGVcbitcdCQoY2FsbCBtc2csQ0xORy1CUEYsLCQyKVxuK1x0JChRKSQoQ0xBTkcpICQoQlBGX0NGTEFHUykgLU8yIC0tdGFyZ2V0PWJwZiAtbWNwdT0kKGxpYl9icGZfY2xhbmdfY3B1KSBcXFxuK1x0XHQtTU1EIC1NUCAtYyAkMSAtbyAkMlxuK2VuZGVmXG4rXG4rIyAtLS0tIG91dHB1dCBmb2xkZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbitCUEZfT0JKX0RJUiAgPz0gJChPVVRQVVQpXG4rQlBGX1NLRUxfRElSID89ICQoT1VUUFVUKVxuKyMgUmVqZWN0IGVtcHR5IGRpcmVjdG9yaWVzIGJlZm9yZSBjbGVhbnVwIGdsb2JzIGNhbiByZWFjaCB0aGUgZmlsZXN5c3RlbSByb290LlxuK2lmZXEgKCQoc3RyaXAgJChCUEZfT0JKX0RJUikpLClcbiskKGVycm9yIGxpYi5icGYubWs6IEJQRl9PQkpfRElSIGlzIGVtcHR5OyBzZXQgaXQgYWZ0ZXIgXCJpbmNsdWRlIC4uL2xpYi5ta1wiKVxuK2VuZGlmXG4raWZlcSAoJChzdHJpcCAkKEJQRl9TS0VMX0RJUikpLClcbiskKGVycm9yIGxpYi5icGYubWs6IEJQRl9TS0VMX0RJUiBpcyBlbXB0eTsgc2V0IGl0IGFmdGVyIFwiaW5jbHVkZSAuLi9saWIubWtcIilcbitlbmRpZlxuK1xuKyMgLS0tLSBidWlsZCBmb2xkZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4rbGliX2JwZl9tYWtlX2RpcnMgOj0gJChzb3J0ICQobGliX2JwZl9idWlsZF9kaXIpL2xpYmJwZlx0XHRcdFxcXG4rXHRcdFx0ICAgICQobGliX2JwZl9ob3N0X2J1aWxkX2RpcikvbGliYnBmXHRcdFxcXG4rXHRcdFx0ICAgICQobGliX2JwZl9ob3N0X2J1aWxkX2RpcikvYnBmdG9vbFx0XHRcXFxuK1x0XHRcdCAgICAkKGxpYl9icGZfaW5jbHVkZV9kaXIpXHRcdFx0XFxcbitcdFx0XHQgICAgJChmaWx0ZXItb3V0ICQoT1VUUFVUKSwkKEJQRl9PQkpfRElSKSAkKEJQRl9TS0VMX0RJUikpKVxuKyQobGliX2JwZl9tYWtlX2RpcnMpOlxuK1x0JChjYWxsIG1zZyxNS0RJUiwsJEApXG4rXHQkKFEpbWtkaXIgLXAgJEBcbitcbisjIC0tLS0gdGFyZ2V0IGxpYmJwZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKyMgUGFzcyB1bmV4cG9ydGVkIHRvb2xjaGFpbiBzZXR0aW5ncyBhbmQgYnVpbGQgUElDIGZvciBQSUUgdGVzdCBiaW5hcmllcy5cbisjIGxpYmJwZiBjb25zdW1lcyBVU0VSQ0ZMQUdTIHRocm91Z2ggRVhUUkFfQ0ZMQUdTLlxuKyQoQlBGT0JKKTogJChsaWJfYnBmX3NvdXJjZXMpICQobGliX2JwZl9hcGlfZGlyKS9saW51eC9icGYuaCBcXFxuK1x0ICAgfCAkKGxpYl9icGZfYnVpbGRfZGlyKS9saWJicGZcbitcdCQoUSkkKE1BS0UpICQobGliX2JwZl9zdWJtYWtlX2V4dHJhcykgLUMgJChsaWJfYnBmX2RpcikgXFxcbitcdFx0ICAgIE9VVFBVVD0kKGxpYl9icGZfYnVpbGRfZGlyKS9saWJicGYvIFxcXG4rXHRcdCAgICBBUkNIPSQoQVJDSCkgQ1JPU1NfQ09NUElMRT0kKENST1NTX0NPTVBJTEUpIENDPVwiJChDQylcIiAgICAgXFxcbitcdFx0ICAgIEVYVFJBX0NGTEFHUz0nLWcgJChPUFRfRkxBR1MpIC1mUElDICQoRVhUUkFfQ0ZMQUdTKSAkKFVTRVJDRkxBR1MpJyBcXFxuK1x0XHQgICAgREVTVERJUj0kKGxpYl9icGZfc2NyYXRjaF9kaXIpIHByZWZpeD0gYWxsIGluc3RhbGxfaGVhZGVyc1xuK1xuKyMgLS0tLSBob3N0IGxpYmJwZiwgb25seSB3aGVuIHRoZSB0YXJnZXQgZGlmZmVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4raWZuZXEgKCQoQlBGT0JKKSwkKGxpYl9icGZfaG9zdF9vYmopKVxuKyQobGliX2JwZl9ob3N0X29iaik6ICQobGliX2JwZl9zb3VyY2VzKSAkKGxpYl9icGZfYXBpX2RpcikvbGludXgvYnBmLmggXFxcbitcdFx0fCAkKGxpYl9icGZfaG9zdF9idWlsZF9kaXIpL2xpYmJwZlxuK1x0JChRKSQoTUFLRSkgJChsaWJfYnBmX3N1Ym1ha2VfZXh0cmFzKSAtQyAkKGxpYl9icGZfZGlyKSBcXFxuK1x0XHQgICAgQVJDSD0gQ1JPU1NfQ09NUElMRT0gXFxcbitcdFx0ICAgIE9VVFBVVD0kKGxpYl9icGZfaG9zdF9idWlsZF9kaXIpL2xpYmJwZi8gXFxcbitcdFx0ICAgIENDPVwiJChIT1NUQ0MpXCIgTEQ9XCIkKEhPU1RMRClcIiBcXFxuK1x0XHQgICAgRVhUUkFfQ0ZMQUdTPSctZyAkKE9QVF9GTEFHUykgJChFWFRSQV9DRkxBR1MpJyBcXFxuK1x0XHQgICAgREVTVERJUj0kKGxpYl9icGZfaG9zdF9zY3JhdGNoX2RpcikgcHJlZml4PSBhbGwgaW5zdGFsbF9oZWFkZXJzXG4rZW5kaWZcbitcbisjIC0tLS0gaG9zdCBicGZ0b29sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKyQoREVGQVVMVF9CUEZUT09MKTogJCh3aWxkY2FyZCAkKGxpYl9icGZfYnBmdG9vbF9kaXIpLyouW2NoXSBcXFxuK1x0XHRcdFx0ICQobGliX2JwZl9icGZ0b29sX2RpcikvTWFrZWZpbGUpIFxcXG4rXHRcdCAgICAkKGxpYl9icGZfaG9zdF9vYmopIHwgJChsaWJfYnBmX2hvc3RfYnVpbGRfZGlyKS9icGZ0b29sXG4rXHQkKFEpJChNQUtFKSAkKGxpYl9icGZfc3VibWFrZV9leHRyYXMpIC1DICQobGliX2JwZl9icGZ0b29sX2RpcikgXFxcbitcdFx0ICAgIEFSQ0g9IENST1NTX0NPTVBJTEU9IENDPVwiJChIT1NUQ0MpXCIgTEQ9XCIkKEhPU1RMRClcIiBcXFxuK1x0XHQgICAgRVhUUkFfQ0ZMQUdTPSctZyAkKE9QVF9GTEFHUykgJChFWFRSQV9DRkxBR1MpICQobGliX2JwZl9ob3N0X3VzZXJfY2ZsYWdzKScgXFxcbitcdFx0ICAgIEVYVFJBX0xERkxBR1M9JyQoRVhUUkFfTERGTEFHUyknXHRcdCAgXFxcbitcdFx0ICAgIE9VVFBVVD0kKGxpYl9icGZfaG9zdF9idWlsZF9kaXIpL2JwZnRvb2wvXHQgIFxcXG4rXHRcdCAgICBMSUJCUEZfT1VUUFVUPSQobGliX2JwZl9ob3N0X2J1aWxkX2RpcikvbGliYnBmLyBcXFxuK1x0XHQgICAgTElCQlBGX0RFU1RESVI9JChsaWJfYnBmX2hvc3Rfc2NyYXRjaF9kaXIpL1x0ICBcXFxuK1x0XHQgICAgcHJlZml4PSBERVNURElSPSQobGliX2JwZl9ob3N0X3NjcmF0Y2hfZGlyKS8gaW5zdGFsbC1iaW5cbitcbisjIC0tLS0gYnVpbGQgdm1saW51eC5oIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuK2xpYl9icGZfdm1saW51eF9oICAgICA6PSAkKElOQ0xVREVfRElSKS92bWxpbnV4LmhcbitsaWJfYnBmX3ZtbGludXhfc3RhbXAgOj0gJChJTkNMVURFX0RJUikvdm1saW51eC5oLnN0YW1wXG4rXG4rIyBQcmVzZXJ2ZSB2bWxpbnV4LmgncyB0aW1lc3RhbXAgd2hlbiBpdHMgY29udGVudHMgZG8gbm90IGNoYW5nZS5cbitpZmVxICgkKHdpbGRjYXJkICQobGliX2JwZl92bWxpbnV4X2gpKSwpXG4rIyBSZWdlbmVyYXRlIGlmIHRoZSBoZWFkZXIgaXMgbWlzc2luZyBidXQgaXRzIHN0YW1wIHJlbWFpbnMuXG4rLlBIT05ZOiAkKGxpYl9icGZfdm1saW51eF9zdGFtcClcbitlbmRpZlxuK1xuKyMgVXNlIGEgbm9ybWFsIGVkZ2Ugc28gZGVwZW5kZW50cyBzZWUgYSBjaGFuZ2VkIGhlYWRlciBpbiB0aGUgc2FtZSBtYWtlIHJ1bi5cbiskKGxpYl9icGZfdm1saW51eF9oKTogJChsaWJfYnBmX3ZtbGludXhfc3RhbXApIDtcbitcbiskKGxpYl9icGZfdm1saW51eF9zdGFtcCk6ICQobGliX2JwZl92bWxpbnV4X2RlcHMpIHwgJChJTkNMVURFX0RJUilcbitpZmVxICgkKFZNTElOVVhfSCksKVxuK1x0JChjYWxsIG1zZyxHRU4sLCQobGliX2JwZl92bWxpbnV4X2gpKVxuK1x0JChRKXRlc3QgLW4gXCIkKFZNTElOVVhfQlRGKVwiIHx8IHsgXFxcbitcdFx0ZWNobyBcImxpYi5icGYubWs6IG5vIHZtbGludXggYXQgYW55IG9mIFxcXCIkKFZNTElOVVhfQlRGX1BBVEhTKVxcXCJcIiBcdTAwM2VcdTAwMjYyOyBcXFxuK1x0XHRleGl0IDE7IH1cbitcdCQoUSkkKEJQRlRPT0wpIGJ0ZiBkdW1wIGZpbGUgJChWTUxJTlVYX0JURikgZm9ybWF0IGMgXHUwMDNlICRALnRtcFxuK2Vsc2VcbitcdCQoY2FsbCBtc2csQ1AsLCQobGliX2JwZl92bWxpbnV4X2gpKVxuK1x0JChRKWNwIFwiJChWTUxJTlVYX0gpXCIgJEAudG1wXG4rZW5kaWZcbitcdCQoUSljbXAgLXMgJEAudG1wICQobGliX2JwZl92bWxpbnV4X2gpIHx8IG12ICRALnRtcCAkKGxpYl9icGZfdm1saW51eF9oKVxuK1x0JChRKXJtIC1mICRALnRtcFxuK1x0JChRKXRvdWNoICRAXG4rXG4rIyAtLS0tIEJQRiBvYmplY3RzIGFuZCBza2VsZXRvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbitCUEZfUFJPR19FWFQgPz0gLmJwZi5jXG4rIyBFYWNoIHNvdXJjZSBtdXN0IGVuZCB3aXRoIEJQRl9QUk9HX0VYVCBzbyBNYWtlIGNhbiByZW1vdmUgdGhhdCBlbmRpbmcuXG4rbGliX2JwZl9iYWRfc3JjcyA6PSAkKGZpbHRlci1vdXQgJSQoQlBGX1BST0dfRVhUKSwkKEJQRl9TUkNTKSlcbitpZm5lcSAoJChsaWJfYnBmX2JhZF9zcmNzKSwpXG4rJChlcnJvciBsaWIuYnBmLm1rOiBCUEZfU1JDUyBlbnRyaWVzIG11c3QgZW5kIGluICQoQlBGX1BST0dfRVhUKTogJChsaWJfYnBmX2JhZF9zcmNzKSlcbitlbmRpZlxuK2xpYl9icGZfc3RlbXMgOj0gJChwYXRzdWJzdCAlJChCUEZfUFJPR19FWFQpLCUsJChub3RkaXIgJChCUEZfU1JDUykpKVxuKyMgVGhlIHN0ZW0gYmVjb21lcyB0aGUgc2tlbGV0b24ncyBDIG5hbWU7IHJlamVjdCBkb3RzIGFuZCBoeXBoZW5zLlxuK2xpYl9icGZfYmFkX3N0ZW1zIDo9ICQoc3RyaXAgJChmb3JlYWNoIHMsJChsaWJfYnBmX3N0ZW1zKSxcdFx0XHRcXFxuK1x0XHRcdCQoaWYgJChmaW5kc3RyaW5nIC4sJChzKSkkKGZpbmRzdHJpbmcgLSwkKHMpKSwkKHMpKSkpXG4raWZuZXEgKCQobGliX2JwZl9iYWRfc3RlbXMpLClcbiskKGVycm9yIGxpYi5icGYubWs6IEJQRl9TUkNTIGJhc2VuYW1lcyBtdXN0IG5vdCBjb250YWluICcuJyBvciAnLSc6ICQobGliX2JwZl9iYWRfc3RlbXMpKVxuK2VuZGlmXG4rIyBPdXRwdXQgbmFtZXMgb21pdCBkaXJlY3Rvcmllcywgc28gcmVqZWN0IGR1cGxpY2F0ZSBzdGVtcy5cbitpZm5lcSAoJCh3b3JkcyAkKGxpYl9icGZfc3RlbXMpKSwkKHdvcmRzICQoc29ydCAkKGxpYl9icGZfc3RlbXMpKSkpXG4rJChlcnJvciBsaWIuYnBmLm1rOiBCUEZfU1JDUyBoYXMgY29sbGlkaW5nIGJhc2VuYW1lczogJChCUEZfU1JDUykpXG4rZW5kaWZcbitCUEZfU0tFTF9FWFQgICAgPz0gLnNrZWwuaFxuK2xpYl9icGZfc3Vic2tlbF9leHQgOj0gJChwYXRzdWJzdCAlc2tlbC5oLCVzdWJza2VsLmgsJChCUEZfU0tFTF9FWFQpKVxuKyMgS2VlcCBza2VsZXRvbiBzdWZmaXhlcyBkaXN0aW5jdCBhbmQgY2xlYW51cCBnbG9icyBuYXJyb3cuXG4raWZlcSAoJChsaWJfYnBmX3N1YnNrZWxfZXh0KSwkKEJQRl9TS0VMX0VYVCkpXG4rJChlcnJvciBsaWIuYnBmLm1rOiBCUEZfU0tFTF9FWFQgbXVzdCBlbmQgaW4gc2tlbC5oOiAkKEJQRl9TS0VMX0VYVCkpXG4rZW5kaWZcbitCUEZfT0JKUyAgOj0gJChhZGRwcmVmaXggJChCUEZfT0JKX0RJUikvLCQoYWRkc3VmZml4IC5icGYubywkKGxpYl9icGZfc3RlbXMpKSlcbitCUEZfU0tFTFMgOj0gJChhZGRwcmVmaXggJChCUEZfU0tFTF9ESVIpLywkKGFkZHN1ZmZpeCAkKEJQRl9TS0VMX0VYVCksJChsaWJfYnBmX3N0ZW1zKSkpXG4raWZuZXEgKCQoQlBGX0dFTl9TVUJTS0VMKSwpXG4rQlBGX1NVQlNLRUxTIDo9ICQoYWRkcHJlZml4ICQoQlBGX1NLRUxfRElSKS8sJChhZGRzdWZmaXggJChsaWJfYnBmX3N1YnNrZWxfZXh0KSwkKGxpYl9icGZfc3RlbXMpKSlcbitlbmRpZlxuK1xuKyMgVXNlIHBlci1zb3VyY2UgcnVsZXMgdG8gYXZvaWQgY2hhbmdpbmcgbm9ybWFsIC5jIGxvb2t1cC5cbisjIFRyYWNrIHNvdXJjZSBoZWFkZXJzIGJlZm9yZSBCUEZPQkogaW5zdGFsbHMgdGhlaXIgdXBkYXRlZCBjb3BpZXMuXG4rZGVmaW5lIGxpYl9icGZfb2JqX3J1bGVcbiskKEJQRl9PQkpfRElSKS8kKHBhdHN1YnN0ICUkKEJQRl9QUk9HX0VYVCksJSwkKG5vdGRpciAkKDEpKSkuYnBmLm86ICQoMSlcdFxcXG4rXHRcdCQoQlBGX0VYVFJBX0hEUlMpICQobGliX2JwZl9oZWFkZXJfc291cmNlcylcdFx0XHRcXFxuK1x0XHQkKElOQ0xVREVfRElSKS92bWxpbnV4LmggfCAkKEJQRl9PQkpfRElSKSAkKEJQRk9CSilcbitcdCQkKGNhbGwgbGliX2JwZl9idWlsZF9ydWxlLCQkXHUwMDNjLCQkQClcbitlbmRlZlxuKyQoZm9yZWFjaCBzcmMsJChCUEZfU1JDUyksJChldmFsICQoY2FsbCBsaWJfYnBmX29ial9ydWxlLCQoc3JjKSkpKVxuK1xuKyMgR2VuZXJhdGUgYm90aCBoZWFkZXJzIHRvZ2V0aGVyIHNvIGVpdGhlciBtaXNzaW5nIHRhcmdldCByZWJ1aWxkcyB0aGUgcGFpci5cbitsaWJfYnBmX3NrZWxfdGFyZ2V0cyA6PSAkKEJQRl9TS0VMX0RJUikvJSQoQlBGX1NLRUxfRVhUKVxuK2lmbmVxICgkKEJQRl9HRU5fU1VCU0tFTCksKVxuK2xpYl9icGZfc2tlbF90YXJnZXRzICs9ICQoQlBGX1NLRUxfRElSKS8lJChsaWJfYnBmX3N1YnNrZWxfZXh0KVxuK2VuZGlmXG4rXG4rIyBMaW5rIHRocmVlIHRpbWVzIGFuZCByZXF1aXJlIHRoZSBmaW5hbCB0d28gb2JqZWN0cyB0byBtYXRjaC5cbiskKGxpYl9icGZfc2tlbF90YXJnZXRzKTogJChCUEZfT0JKX0RJUikvJS5icGYubyAkKEJQRlRPT0wpIHwgJChCUEZfU0tFTF9ESVIpXG4rXHQkKGNhbGwgbXNnLEdFTi1TS0VMLCwkKEJQRl9TS0VMX0RJUikvJCokKEJQRl9TS0VMX0VYVCkpXG4rXHQkKFEpJChCUEZUT09MKSBnZW4gb2JqZWN0ICQoXHUwMDNjOi5vPS5saW5rZWQxLm8pICRcdTAwM2NcbitcdCQoUSkkKEJQRlRPT0wpIGdlbiBvYmplY3QgJChcdTAwM2M6Lm89LmxpbmtlZDIubykgJChcdTAwM2M6Lm89LmxpbmtlZDEubylcbitcdCQoUSkkKEJQRlRPT0wpIGdlbiBvYmplY3QgJChcdTAwM2M6Lm89LmxpbmtlZDMubykgJChcdTAwM2M6Lm89LmxpbmtlZDIubylcbitcdCQoUSlkaWZmICQoXHUwMDNjOi5vPS5saW5rZWQyLm8pICQoXHUwMDNjOi5vPS5saW5rZWQzLm8pXG4rXHQkKFEpJChCUEZUT09MKSBnZW4gc2tlbGV0b24gJChcdTAwM2M6Lm89LmxpbmtlZDMubykgbmFtZSAkKiBcdTAwM2UgJChCUEZfU0tFTF9ESVIpLyQqJChCUEZfU0tFTF9FWFQpXG4raWZuZXEgKCQoQlBGX0dFTl9TVUJTS0VMKSwpXG4rXHQkKFEpJChCUEZUT09MKSBnZW4gc3Vic2tlbGV0b24gJChcdTAwM2M6Lm89LmxpbmtlZDMubykgbmFtZSAkKiBcdTAwM2UgJChCUEZfU0tFTF9ESVIpLyQqJChsaWJfYnBmX3N1YnNrZWxfZXh0KVxuK2VuZGlmXG4rXHQkKFEpcm0gLWYgJChcdTAwM2M6Lm89LmxpbmtlZDEubykgJChcdTAwM2M6Lm89LmxpbmtlZDIubykgJChcdTAwM2M6Lm89LmxpbmtlZDMubylcbitcbisjIFJlYWQgdGhlIGhlYWRlciBkZXBlbmRlbmNpZXMgd3JpdHRlbiBieSAtTU1ELlxuKy1pbmNsdWRlICQoQlBGX09CSlM6Lm89LmQpXG4rXG4rIyAtLS0tIHZhbHVlcyBmb3IgdGhlIHRlc3QgTWFrZWZpbGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbisjIEFkZCB0aGUgaW5zdGFsbGVkIGxpYmJwZi92bWxpbnV4LmggZGlyZWN0b3J5IGFuZCB0aGUgc2tlbGV0b24gZGlyZWN0b3J5LlxuK0NGTEFHUyArPSAtSSQoSU5DTFVERV9ESVIpIC1JJChCUEZfU0tFTF9ESVIpXG4rXG4rIyBBZGQgdGFyZ2V0IHpzdGQgd2hlbiBmb3VuZCBieSB0aGUgdGFyZ2V0IHBrZy1jb25maWcuXG4rUEtHX0NPTkZJRyA/PSAkKENST1NTX0NPTVBJTEUpcGtnLWNvbmZpZ1xuK0JQRl9MRExJQlMgOj0gJChCUEZPQkopIC1sZWxmIC1selxuK2lmbmVxICgkKHNoZWxsICQoUEtHX0NPTkZJRykgLS1leGlzdHMgbGlienN0ZCAyXHUwMDNlL2Rldi9udWxsIFx1MDAyNlx1MDAyNiBlY2hvIHkpLClcbitCUEZfTERMSUJTICs9IC1senN0ZFxuK2VuZGlmXG4rXG4rIyBBZGQgc2tlbGV0b25zIGFmdGVyIGxpYi5tayBkZWZpbmVzIGFsbC5cbithbGw6ICQoQlBGX1NLRUxTKSAkKEJQRl9TVUJTS0VMUylcbitcbisjIFRoZSBza2VsZXRvbiBhbHJlYWR5IGVtYmVkcyBlYWNoIEJQRiBvYmplY3QgaW4gdGhlIHRlc3QgYmluYXJ5LiBUbyBpbnN0YWxsIHRoZVxuKyMgb2JqZWN0cyBzZXBhcmF0ZWx5LCBhZGQgVEVTVF9HRU5fRklMRVMgKz0gJChCUEZfT0JKUykuXG4rXG4rIyAkMSA9IGJpbmFyeSwgJDIgPSB0ZXN0IHNvdXJjZS4gVXNlIHRoZSBzYW1lIGNvbXBpbGUgYW5kIGxpbmsgZmxhZ3MgYXMgbGliLm1rLlxuK2RlZmluZSBicGZfbGlua1xuK1x0JChjYWxsIG1zZyxCSU5BUlksLCQxKVxuK1x0JChRKSQoQ0MpICQoQ0ZMQUdTKSAkKENQUEZMQUdTKSAkKExERkxBR1MpICQoVEFSR0VUX0FSQ0gpICQyIFxcXG4rXHRcdCQoQlBGX0xETElCUykgJChMRExJQlMpIC1vICQxXG4rZW5kZWZcbitcbitFWFRSQV9DTEVBTiArPSAkKHNvcnQgJChsaWJfYnBmX3NjcmF0Y2hfZGlyKSAkKGxpYl9icGZfaG9zdF9zY3JhdGNoX2RpcikpIFxcXG4rXHQgICAgICAgJChhZGRwcmVmaXggJChCUEZfT0JKX0RJUikvLCouYnBmLm8gKi5icGYuZCAqLmxpbmtlZCoubylcdFxcXG4rXHQgICAgICAgJChhZGRwcmVmaXggJChCUEZfU0tFTF9ESVIpLywqJChCUEZfU0tFTF9FWFQpICokKGxpYl9icGZfc3Vic2tlbF9leHQpKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NjaGVkX2V4dC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NjaGVkX2V4dC9NYWtlZmlsZVxuaW5kZXggM2NmZTkwZTBmMzRmYS4uZGQzZjU1OTRhZjI0MCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NjaGVkX2V4dC9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvc2NoZWRfZXh0L01ha2VmaWxlXG5AQCAtMTQsNDggKzE0LDI5IEBAIENVUkRJUiA6PSAkKGFic3BhdGggLilcbiBSRVBPUk9PVCA6PSAkKGFic3BhdGggLi4vLi4vLi4vLi4pXG4gVE9PTFNESVIgOj0gJChSRVBPUk9PVCkvdG9vbHNcbiBMSUJESVIgOj0gJChUT09MU0RJUikvbGliXG4tQlBGRElSIDo9ICQoTElCRElSKS9icGZcbiBUT09MU0lOQ0RJUiA6PSAkKFRPT0xTRElSKS9pbmNsdWRlXG4tQlBGVE9PTERJUiA6PSAkKFRPT0xTRElSKS9icGYvYnBmdG9vbFxuLUFQSURJUiA6PSAkKFRPT0xTSU5DRElSKS91YXBpXG4gR0VORElSIDo9ICQoUkVQT1JPT1QpL2luY2x1ZGUvZ2VuZXJhdGVkXG4gR0VOSERSIDo9ICQoR0VORElSKS9hdXRvY29uZi5oXG4tU0NYVE9PTFNESVIgOj0gJChUT09MU0RJUikvc2NoZWRfZXh0XG4gU0NYVE9PTFNJTkNESVIgOj0gJChUT09MU0RJUikvc2NoZWRfZXh0L2luY2x1ZGVcbiBcbi1PVVRQVVRfRElSIDo9ICQoT1VUUFVUKS9idWlsZFxuLU9CSl9ESVIgOj0gJChPVVRQVVRfRElSKS9vYmpcbi1JTkNMVURFX0RJUiA6PSAkKE9VVFBVVF9ESVIpL2luY2x1ZGVcbi1CUEZPQkpfRElSIDo9ICQoT0JKX0RJUikvbGliYnBmXG4tU0NYT0JKX0RJUiA6PSAkKE9CSl9ESVIpL3NjaGVkX2V4dFxuLUJQRk9CSiA6PSAkKEJQRk9CSl9ESVIpL2xpYmJwZi5hXG4tTElCQlBGX09VVFBVVCA6PSAkKE9CSl9ESVIpL2xpYmJwZi9saWJicGYuYVxuLVxuLURFRkFVTFRfQlBGVE9PTCA6PSAkKE9VVFBVVF9ESVIpL2hvc3Qvc2Jpbi9icGZ0b29sXG4tSE9TVF9PQkpfRElSIDo9ICQoT0JKX0RJUikvaG9zdC9icGZ0b29sXG4tSE9TVF9MSUJCUEZfT1VUUFVUIDo9ICQoT0JKX0RJUikvaG9zdC9saWJicGYvXG4tSE9TVF9MSUJCUEZfREVTVERJUiA6PSAkKE9VVFBVVF9ESVIpL2hvc3QvXG4tSE9TVF9ERVNURElSIDo9ICQoT1VUUFVUX0RJUikvaG9zdC9cbi1cbi1WTUxJTlVYX0JURl9QQVRIUyA/PSAkKGlmICQoTyksJChPKS92bWxpbnV4KVx0XHRcdFx0XHRcXFxuLVx0XHQgICAgICQoaWYgJChLQlVJTERfT1VUUFVUKSwkKEtCVUlMRF9PVVRQVVQpL3ZtbGludXgpXHRcdFxcXG4tXHRcdCAgICAgLi4vLi4vLi4vLi4vdm1saW51eFx0XHRcdFx0XHRcXFxuLVx0XHQgICAgIC9zeXMva2VybmVsL2J0Zi92bWxpbnV4XHRcdFx0XHRcdFxcXG4tXHRcdCAgICAgL2Jvb3Qvdm1saW51eC0kKHNoZWxsIHVuYW1lIC1yKVxuLVZNTElOVVhfQlRGID89ICQoYWJzcGF0aCAkKGZpcnN0d29yZCAkKHdpbGRjYXJkICQoVk1MSU5VWF9CVEZfUEFUSFMpKSkpXG4taWZlcSAoJChWTUxJTlVYX0JURiksKVxuLSQoZXJyb3IgQ2Fubm90IGZpbmQgYSB2bWxpbnV4IGZvciBWTUxJTlVYX0JURiBhdCBhbnkgb2YgXCIkKFZNTElOVVhfQlRGX1BBVEhTKVwiKVxuLWVuZGlmXG4rIyBCdWlsZCBzY2hlZHVsZXIgc2tlbGV0b25zIGFuZCBzdWJza2VsZXRvbnMgd2l0aCB0aGUgc2hhcmVkIEJQRiBydWxlcy5cbitCUEZfU1JDUyAgICAgICAgOj0gJCh3aWxkY2FyZCAqLmJwZi5jKVxuK0JQRl9TS0VMX0VYVCAgICA6PSAuYnBmLnNrZWwuaFxuK0JQRl9HRU5fU1VCU0tFTCA6PSAxXG4rIyBQcmVzZXJ2ZSB0aGUgZXhpc3RpbmcgYnVpbGQvIGxheW91dC5cbitCUEZfT0JKX0RJUiAgOj0gJChPVVRQVVQpL2J1aWxkL29iai9zY2hlZF9leHRcbitCUEZfU0tFTF9ESVIgOj0gJChPVVRQVVQpL2J1aWxkL2luY2x1ZGVcbitTQ1hPQkpfRElSICAgOj0gJChCUEZfT0JKX0RJUilcbiBcbi1CUEZUT09MID89ICQoREVGQVVMVF9CUEZUT09MKVxuK2luY2x1ZGUgLi4vbGliLmJwZi5ta1xuIFxuIGlmbmVxICgkKHdpbGRjYXJkICQoR0VOSERSKSksKVxuICAgR0VORkxBR1MgOj0gLURIQVZFX0dFTkhEUlxuIGVuZGlmXG4gXG4gQ0ZMQUdTICs9IC1nIC1PMiAtcmR5bmFtaWMgLXB0aHJlYWQgLVdhbGwgLVdlcnJvciAkKEdFTkZMQUdTKVx0XHRcdFxcXG4tXHQgIC1JJChJTkNMVURFX0RJUikgLUkkKEdFTkRJUikgLUkkKExJQkRJUilcdFx0XHRcdFxcXG4tXHQgIC1JJChUT09MU0lOQ0RJUikgLUkkKEFQSURJUikgLUkkKENVUkRJUikvaW5jbHVkZSAtSSQoU0NYVE9PTFNJTkNESVIpXG4rXHQgIC1JJChHRU5ESVIpIC1JJChMSUJESVIpIC1JJChUT09MU0lOQ0RJUikgLUkkKEFQSURJUilcdFx0XHRcXFxuK1x0ICAtSSQoQ1VSRElSKS9pbmNsdWRlIC1JJChTQ1hUT09MU0lOQ0RJUilcbiBcbiAjIFNpbGVuY2Ugc29tZSB3YXJuaW5ncyB3aGVuIGNvbXBpbGVkIHdpdGggY2xhbmdcbiBpZm5lcSAoJChMTFZNKSwpXG5AQCAtNjQsMTAyICs0NSwyNiBAQCBlbmRpZlxuIFxuIExERkxBR1MgPSAtbGVsZiAtbHogLWxwdGhyZWFkIC1senN0ZFxuIFxuLUlTX0xJVFRMRV9FTkRJQU4gPSAkKHNoZWxsICQoQ0MpIC1kTSAtRSAtIFx1MDAzYy9kZXYvbnVsbCB8XHRcdFx0XHRcXFxuLVx0XHRcdGdyZXAgJ2RlZmluZSBfX0JZVEVfT1JERVJfXyBfX09SREVSX0xJVFRMRV9FTkRJQU5fXycpXG4tXG4tIyBHZXQgQ2xhbmcncyBkZWZhdWx0IGluY2x1ZGVzIG9uIHRoaXMgc3lzdGVtLCBhcyBvcHBvc2VkIHRvIHRob3NlIHNlZW4gYnlcbi0jICctdGFyZ2V0IGJwZicuIFRoaXMgZml4ZXMgXCJtaXNzaW5nXCIgZmlsZXMgb24gc29tZSBhcmNoaXRlY3R1cmVzL2Rpc3Ryb3MsXG4tIyBzdWNoIGFzIGFzbS9ieXRlb3JkZXIuaCwgYXNtL3NvY2tldC5oLCBhc20vc29ja2lvcy5oLCBzeXMvY2RlZnMuaCBldGMuXG4tI1xuLSMgVXNlICctaWRpcmFmdGVyJzogRG9uJ3QgaW50ZXJmZXJlIHdpdGggaW5jbHVkZSBtZWNoYW5pY3MgZXhjZXB0IHdoZXJlIHRoZVxuLSMgYnVpbGQgd291bGQgaGF2ZSBmYWlsZWQgYW55d2F5cy5cbi1kZWZpbmUgZ2V0X3N5c19pbmNsdWRlc1xuLSQoc2hlbGwgJCgxKSAkKDIpIC12IC1FIC0gXHUwMDNjL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxIFxcXG4tXHR8IHNlZCAtbiAnL1x1MDAzYy4uLlx1MDAzZSBzZWFyY2ggc3RhcnRzIGhlcmU6LywvRW5kIG9mIHNlYXJjaCBsaXN0Li97IHN8IFxcKC8uKlxcKXwtaWRpcmFmdGVyIFxcMXxwIH0nKSBcXFxuLSQoc2hlbGwgJCgxKSAkKDIpIC1kTSAtRSAtIFx1MDAzYy9kZXYvbnVsbCB8IGdyZXAgJ19fcmlzY3ZfeGxlbiAnIHwgYXdrICd7cHJpbnRmKFwiLURfX3Jpc2N2X3hsZW49JWQgLURfX0JJVFNfUEVSX0xPTkc9JWRcIiwgJCQzLCAkJDMpfScpXG4tZW5kZWZcbi1cbi1pZm5lcSAoJChDUk9TU19DT01QSUxFKSwpXG4tQ0xBTkdfVEFSR0VUX0FSQ0ggPSAtLXRhcmdldD0kKG5vdGRpciAkKENST1NTX0NPTVBJTEU6JS09JSkpXG4tZW5kaWZcbi1cbi1DTEFOR19TWVNfSU5DTFVERVMgPSAkKGNhbGwgZ2V0X3N5c19pbmNsdWRlcywkKENMQU5HKSwkKENMQU5HX1RBUkdFVF9BUkNIKSlcbi1cbi1CUEZfQ0ZMQUdTID0gLWcgLURfX1RBUkdFVF9BUkNIXyQoU1JDQVJDSClcdFx0XHRcdFx0XFxcbi1cdCAgICAgJChpZiAkKElTX0xJVFRMRV9FTkRJQU4pLC1tbGl0dGxlLWVuZGlhbiwtbWJpZy1lbmRpYW4pXHRcdFxcXG4rIyBQcmVzZXJ2ZSB0aGUgc2NoZWR1bGVyLXNwZWNpZmljIGZsYWdzOyB0aGUgc2hhcmVkIHJlY2lwZSBhZGRzIHRhcmdldCBmbGFncy5cbitCUEZfQ0ZMQUdTID0gLWcgLURfX1RBUkdFVF9BUkNIXyQoU1JDQVJDSCkgJChNRU5ESUFOKVx0XHRcdFx0XFxcbiBcdCAgICAgLUkkKENVUkRJUikvaW5jbHVkZSAtSSQoQ1VSRElSKS9pbmNsdWRlL2JwZi1jb21wYXRcdFx0XHRcXFxuIFx0ICAgICAtSSQoSU5DTFVERV9ESVIpIC1JJChBUElESVIpIC1JJChTQ1hUT09MU0lOQ0RJUilcdFx0XHRcXFxuIFx0ICAgICAtSSQoUkVQT1JPT1QpL2luY2x1ZGVcdFx0XHRcdFx0XHRcXFxuLVx0ICAgICAkKENMQU5HX1NZU19JTkNMVURFUykgXHRcdFx0XHRcdFx0XFxcbitcdCAgICAgJChDTEFOR19TWVNfSU5DTFVERVMpXHRcdFx0XHRcdFx0XFxcbiBcdCAgICAgLVdhbGwgLVduby1jb21wYXJlLWRpc3RpbmN0LXBvaW50ZXItdHlwZXNcdFx0XHRcdFxcXG4gXHQgICAgIC1Xbm8taW5jb21wYXRpYmxlLWZ1bmN0aW9uLXBvaW50ZXItdHlwZXNcdFx0XHRcdFxcXG4gXHQgICAgIC1Xbm8tbWljcm9zb2Z0LWFub24tdGFnXHRcdFx0XHRcdFx0XFxcbiBcdCAgICAgLWZtcy1leHRlbnNpb25zXHRcdFx0XHRcdFx0XHRcXFxuLVx0ICAgICAtTzIgLW1jcHU9djNcbi1cbi0jIHNvcnQgcmVtb3ZlcyBsaWJicGYgZHVwbGljYXRlcyB3aGVuIG5vdCBjcm9zcy1idWlsZGluZ1xuLU1BS0VfRElSUyA6PSAkKHNvcnQgJChPQkpfRElSKS9saWJicGYgJChPQkpfRElSKS9saWJicGZcdFx0XHRcdFxcXG4tXHQgICAgICAgJChPQkpfRElSKS9icGZ0b29sICQoT0JKX0RJUikvcmVzb2x2ZV9idGZpZHNcdFx0XHRcXFxuLVx0ICAgICAgICQoSE9TVF9PQkpfRElSKSAkKElOQ0xVREVfRElSKSAkKFNDWE9CSl9ESVIpKVxuLVxuLSQoTUFLRV9ESVJTKTpcbi1cdCQoY2FsbCBtc2csTUtESVIsLCRAKVxuLVx0JChRKW1rZGlyIC1wICRAXG4tXG4tJChCUEZPQkopOiAkKHdpbGRjYXJkICQoQlBGRElSKS8qLltjaF0gJChCUEZESVIpL01ha2VmaWxlKVx0XHRcdFxcXG4tXHQgICAkKEFQSURJUikvbGludXgvYnBmLmhcdFx0XHRcdFx0XHRcXFxuLVx0ICAgfCAkKE9CSl9ESVIpL2xpYmJwZlxuLVx0JChRKSQoTUFLRSkgJChzdWJtYWtlX2V4dHJhcykgLUMgJChCUEZESVIpIE9VVFBVVD0kKE9CSl9ESVIpL2xpYmJwZi9cdFxcXG4tXHRcdCAgICBBUkNIPSQoQVJDSCkgQ0M9XCIkKENDKVwiIENST1NTX0NPTVBJTEU9JChDUk9TU19DT01QSUxFKVx0XFxcbi1cdFx0ICAgIEVYVFJBX0NGTEFHUz0nLWcgLU8wIC1mUElDJ1x0XHRcdFx0XHRcXFxuLVx0XHQgICAgREVTVERJUj0kKE9VVFBVVF9ESVIpIHByZWZpeD0gYWxsIGluc3RhbGxfaGVhZGVyc1xuLVxuLSQoREVGQVVMVF9CUEZUT09MKTogJCh3aWxkY2FyZCAkKEJQRlRPT0xESVIpLyouW2NoXSAkKEJQRlRPT0xESVIpL01ha2VmaWxlKVx0XFxcbi1cdFx0ICAgICQoTElCQlBGX09VVFBVVCkgfCAkKEhPU1RfT0JKX0RJUilcbi1cdCQoUSkkKE1BS0UpICQoc3VibWFrZV9leHRyYXMpICAtQyAkKEJQRlRPT0xESVIpXHRcdFx0XHRcXFxuLVx0XHQgICAgQVJDSD0gQ1JPU1NfQ09NUElMRT0gQ0M9JChIT1NUQ0MpIExEPSQoSE9TVExEKVx0XHRcXFxuLVx0XHQgICAgRVhUUkFfQ0ZMQUdTPSctZyAtTzAnXHRcdFx0XHRcdFxcXG4tXHRcdCAgICBPVVRQVVQ9JChIT1NUX09CSl9ESVIpL1x0XHRcdFx0XHRcXFxuLVx0XHQgICAgTElCQlBGX09VVFBVVD0kKEhPU1RfTElCQlBGX09VVFBVVClcdFx0XHRcdFxcXG4tXHRcdCAgICBMSUJCUEZfREVTVERJUj0kKEhPU1RfTElCQlBGX0RFU1RESVIpXHRcdFx0XFxcbi1cdFx0ICAgIHByZWZpeD0gREVTVERJUj0kKEhPU1RfREVTVERJUikgaW5zdGFsbC1iaW5cbi1cbi0kKElOQ0xVREVfRElSKS92bWxpbnV4Lmg6ICQoVk1MSU5VWF9CVEYpICQoQlBGVE9PTCkgfCAkKElOQ0xVREVfRElSKVxuLWlmZXEgKCQoVk1MSU5VWF9IKSwpXG4tXHQkKGNhbGwgbXNnLEdFTiwsJEApXG4tXHQkKFEpJChCUEZUT09MKSBidGYgZHVtcCBmaWxlICQoVk1MSU5VWF9CVEYpIGZvcm1hdCBjIFx1MDAzZSAkQFxuLWVsc2Vcbi1cdCQoY2FsbCBtc2csQ1AsLCRAKVxuLVx0JChRKWNwIFwiJChWTUxJTlVYX0gpXCIgJEBcbi1lbmRpZlxuLVxuLSQoU0NYT0JKX0RJUikvJS5icGYubzogJS5icGYuYyAkKElOQ0xVREVfRElSKS92bWxpbnV4LmhcdHwgJChCUEZPQkopICQoU0NYT0JKX0RJUilcbi1cdCQoY2FsbCBtc2csQ0xORy1CUEYsLCQobm90ZGlyICRAKSlcbi1cdCQoUSkkKENMQU5HKSAkKEJQRl9DRkxBR1MpIC10YXJnZXQgYnBmIC1jICRcdTAwM2MgLW8gJEBcbitcdCAgICAgJChCUEZfRVhUUkFfQ0ZMQUdTKVxuIFxuLSQoSU5DTFVERV9ESVIpLyUuYnBmLnNrZWwuaDogJChTQ1hPQkpfRElSKS8lLmJwZi5vICQoSU5DTFVERV9ESVIpL3ZtbGludXguaCAkKEJQRlRPT0wpIHwgJChJTkNMVURFX0RJUilcbi1cdCQoZXZhbCBzY2hlZD0kKG5vdGRpciAkQCkpXG4tXHQkKGNhbGwgbXNnLEdFTi1TS0VMLCwkKHNjaGVkKSlcbi1cdCQoUSkkKEJQRlRPT0wpIGdlbiBvYmplY3QgJChcdTAwM2M6Lm89LmxpbmtlZDEubykgJFx1MDAzY1xuLVx0JChRKSQoQlBGVE9PTCkgZ2VuIG9iamVjdCAkKFx1MDAzYzoubz0ubGlua2VkMi5vKSAkKFx1MDAzYzoubz0ubGlua2VkMS5vKVxuLVx0JChRKSQoQlBGVE9PTCkgZ2VuIG9iamVjdCAkKFx1MDAzYzoubz0ubGlua2VkMy5vKSAkKFx1MDAzYzoubz0ubGlua2VkMi5vKVxuLVx0JChRKWRpZmYgJChcdTAwM2M6Lm89LmxpbmtlZDIubykgJChcdTAwM2M6Lm89LmxpbmtlZDMubylcbi1cdCQoUSkkKEJQRlRPT0wpIGdlbiBza2VsZXRvbiAkKFx1MDAzYzoubz0ubGlua2VkMy5vKSBuYW1lICQoc3Vic3QgLmJwZi5za2VsLmgsLCQoc2NoZWQpKSBcdTAwM2UgJEBcbi1cdCQoUSkkKEJQRlRPT0wpIGdlbiBzdWJza2VsZXRvbiAkKFx1MDAzYzoubz0ubGlua2VkMy5vKSBuYW1lICQoc3Vic3QgLmJwZi5za2VsLmgsLCQoc2NoZWQpKSBcdTAwM2UgJChAOi5za2VsLmg9LnN1YnNrZWwuaClcbitFWFRSQV9DTEVBTiArPSAkKE9VVFBVVCkvYnVpbGRcbiBcbiAjIyMjIyMjIyMjIyMjIyMjXG4gIyBDIHNjaGVkdWxlcnMgI1xuICMjIyMjIyMjIyMjIyMjIyNcbiBcbi1vdmVycmlkZSBkZWZpbmUgQ0xFQU5cbi1cdHJtIC1yZiAkKE9VVFBVVF9ESVIpXG4tXHRybSAtZiAkKFRFU1RfR0VOX1BST0dTKVxuLWVuZGVmXG4tXG4tIyBFdmVyeSB0ZXN0Y2FzZSB0YWtlcyBhbGwgb2YgdGhlIEJQRiBwcm9ncyBhcmUgZGVwZW5kZW5jaWVzIGJ5IGRlZmF1bHQuIFRoaXNcbi0jIGFsbG93cyB0ZXN0Y2FzZXMgdG8gbG9hZCBhbnkgQlBGIHNjaGVkdWxlciwgd2hpY2ggaXMgdXNlZnVsIGZvciB0ZXN0Y2FzZXNcbi0jIHRoYXQgZG9uJ3QgbmVlZCB0aGVpciBvd24gcHJvZyB0byBydW4gdGhlaXIgdGVzdC5cbi1hbGxfdGVzdF9icGZwcm9ncyA6PSAkKGZvcmVhY2ggcHJvZywkKHdpbGRjYXJkICouYnBmLmMpLCQoSU5DTFVERV9ESVIpLyQocGF0c3Vic3QgJS5jLCUuc2tlbC5oLCQocHJvZykpKVxuKyMgQnVpbGQgZXZlcnkgc2NoZWR1bGVyIGJlZm9yZSBlYWNoIHRlc3QuXG4rYWxsX3Rlc3RfYnBmcHJvZ3MgOj0gJChCUEZfU0tFTFMpXG4gXG4gYXV0by10ZXN0LXRhcmdldHMgOj1cdFx0XHRcXFxuIFx0Y3JlYXRlX2RzcVx0XHRcdFxcXG5AQCAtMTk2LDI0ICsxMDEsMjIgQEAgYXV0by10ZXN0LXRhcmdldHMgOj1cdFx0XHRcXFxuIHRlc3RjYXNlLXRhcmdldHMgOj0gJChhZGRzdWZmaXggLm8sJChhZGRwcmVmaXggJChTQ1hPQkpfRElSKS8sJChhdXRvLXRlc3QtdGFyZ2V0cykpKVxuIFxuICQoU0NYT0JKX0RJUikvcnVubmVyLm86IHJ1bm5lci5jIHwgJChTQ1hPQkpfRElSKSAkKEJQRk9CSilcbi1cdCQoQ0MpICQoQ0ZMQUdTKSAtYyAkXHUwMDNjIC1vICRAXG4rXHQkKGNhbGwgbXNnLENDLCwkQClcbitcdCQoUSkkKENDKSAkKENGTEFHUykgLWMgJFx1MDAzYyAtbyAkQFxuIFxuICMgQ3JlYXRlIGFsbCBvZiB0aGUgdGVzdCB0YXJnZXRzIG9iamVjdCBmaWxlcywgd2hvc2UgdGVzdGNhc2Ugb2JqZWN0cyB3aWxsIGJlXG4gIyByZWdpc3RlcmVkIGludG8gdGhlIHJ1bm5lciBpbiBFTEYgY29uc3RydWN0b3JzLlxuLSNcbi0jIE5vdGUgdGhhdCB3ZSBtdXN0IGRvIGRvdWJsZSBleHBhbnNpb24gaGVyZSBpbiBvcmRlciB0byBzdXBwb3J0IGNvbmRpdGlvbmFsbHlcbi0jIGNvbXBpbGluZyBCUEYgb2JqZWN0IGZpbGVzIG9ubHkgaWYgb25lIGlzIHByZXNlbnQsIGFzIHRoZSB3aWxkY2FyZCBNYWtlXG4tIyBmdW5jdGlvbiBkb2Vzbid0IHN1cHBvcnQgdXNpbmcgaW1wbGljaXQgcnVsZXMgb3RoZXJ3aXNlLlxuICQodGVzdGNhc2UtdGFyZ2V0cyk6ICQoU0NYT0JKX0RJUikvJS5vOiAlLmMgJChTQ1hPQkpfRElSKS9ydW5uZXIubyAkKGFsbF90ZXN0X2JwZnByb2dzKSB8ICQoU0NYT0JKX0RJUilcbi1cdCQoZXZhbCB0ZXN0PSQocGF0c3Vic3QgJS5vLCUuYywkKG5vdGRpciAkQCkpKVxuLVx0JChDQykgJChDRkxBR1MpIC1jICRcdTAwM2MgLW8gJEBcbitcdCQoY2FsbCBtc2csQ0MsLCRAKVxuK1x0JChRKSQoQ0MpICQoQ0ZMQUdTKSAtYyAkXHUwMDNjIC1vICRAXG4gXG4gJChTQ1hPQkpfRElSKS91dGlsLm86IHV0aWwuYyB8ICQoU0NYT0JKX0RJUilcbi1cdCQoQ0MpICQoQ0ZMQUdTKSAtYyAkXHUwMDNjIC1vICRAXG4rXHQkKGNhbGwgbXNnLENDLCwkQClcbitcdCQoUSkkKENDKSAkKENGTEFHUykgLWMgJFx1MDAzYyAtbyAkQFxuIFxuICQoT1VUUFVUKS9ydW5uZXI6ICQoU0NYT0JKX0RJUikvcnVubmVyLm8gJChTQ1hPQkpfRElSKS91dGlsLm8gJChCUEZPQkopICQodGVzdGNhc2UtdGFyZ2V0cylcbi1cdEBlY2hvIFwiJCh0ZXN0Y2FzZS10YXJnZXRzKVwiXG4tXHQkKENDKSAkKENGTEFHUykgLW8gJEAgJF4gJChMREZMQUdTKVxuK1x0JChjYWxsIG1zZyxCSU5BUlksLCRAKVxuK1x0JChRKSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkXiAkKExERkxBR1MpXG4gXG4gLkRFRkFVTFRfR09BTCA6PSBhbGxcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIzOjU4OjQ1LjM4NjcwMTMxN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgwOTEwMTczODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoIGFuZCBkZXRlcm1pbmUgaWYgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4gRmlyc3QsIEknbGwgZXhhbWluZSB0aGUgZGlmZiB0byBzZWUgd2hhdCdzIGJlZW4gY2hhbmdlZC4gVGhlIHBhdGNoIHRvdWNoZXMgYSBudW1iZXIgb2YgZmlsZXM6ICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvY2dyb3VwLy5naXRpZ25vcmVgLCBgTWFrZWZpbGVgLCBgY29uZmlnYCwgc2V2ZXJhbCBgLmNgIGFuZCBgLmhgIGZpbGVzIHdpdGhpbiB0aGUgYGNncm91cGAgZGlyZWN0b3J5LCBpbmNsdWRpbmcgQlBGLXJlbGF0ZWQgZmlsZXMsIGB0ZXN0X21lbWNvbnRyb2wuY2AsIGFuZCBzaW1pbGFyIGBNYWtlZmlsZWAgYW5kIGAuZ2l0aWdub3JlYCBmaWxlcyB3aXRoaW4gYGhpZGAsIGBsaWIuYnBmLm1rYCBhbmQgYHNjaGVkX2V4dGAuXG5cblRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlc2UgY2hhbmdlcyBpbXBhY3QgdGhlIGtlcm5lbCBwcm9wZXIgb3IgYXJlIGNvbmZpbmVkIHRvIHVzZXItc3BhY2UgdG9vbHMgYW5kIHRlc3RzLiAgSSBzZWUgdGhhdCBhbGwgdGhlIG1vZGlmaWVkIGZpbGVzIGFyZSBzdHJpY3RseSB3aXRoaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8uLi5gIGhpZXJhcmNoeS4gIEkga25vdyB0aGF0J3MgYSBrZXkgaW5kaWNhdG9yLiAgTm93LCBsZXQgbWUgcmVmZXJlbmNlIHRoZSBndWlkZWxpbmVzOiBzZWN0aW9uIDIgZGljdGF0ZXMgd2hlbiB3ZSBjYW4gc2FmZWx5IHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJlbGV2YW50IGNyaXRlcmlhIGlzOiAgXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOiAuLi4gVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cIlxuXG5HaXZlbiB0aGlzLCBJIGhhdmUgdG8gY29uY2x1ZGUgdGhhdCBgV29ydGhGdXp6aW5nYCBpcyBgZmFsc2VgLiAgVGhlIG1vZGlmaWVkIGZpbGVzIGFyZSBhbGwgY29udGFpbmVkIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9gLCBhbmQgaXQncyBjbGVhciBub25lIG9mIHRoZW0gdG91Y2ggdGhlIGtlcm5lbCBjb2RlLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGxpc3Qgb2YgZmlsZXMgYWdhaW46IEkgc2NhbiB0aHJvdWdoIHRoZSBmaWxlbmFtZXM6IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvLmdpdGlnbm9yZWAsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9jZ3JvdXAvTWFrZWZpbGVgLCBhbmQgc28gb24sIHJpZ2h0IGRvd24gdG8gdGhlIGxhc3QgZmlsZSwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3NjaGVkX2V4dC9NYWtlZmlsZWAuIFllcCwgZXZlcnkgc2luZ2xlIGZpbGUgaXMgaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9gIGRpcmVjdG9yeS4gTm8ga2VybmVsIGNvZGUgaXMgbW9kaWZpZWQuIE5vIGNvZGUgYWZmZWN0aW5nIGFueSBvZiB0aGUgY29yZSBrZXJuZWwgY29tcG9uZW50cyAobGlrZSBgbW0vYCwgYGtlcm5lbC9gLCBgZHJpdmVycy9gLCBgZnMvYCwgYG5ldC9gLCBvciBgaW5jbHVkZS9gKSBpcyB0b3VjaGVkLlxuXG5UaGVyZWZvcmUsIGJlY2F1c2UgYWxsIHRoZSBtb2RpZmljYXRpb25zIGFyZSBsaW1pdGVkIHRvIHVzZXItc3BhY2Ugc2VsZnRlc3RzIGFuZCB0aGVpciBidWlsZCBpbmZyYXN0cnVjdHVyZSwgYW5kIHRoZXkgZG9uJ3QgYWZmZWN0IHRoZSBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIG1vZHVsZXMsIHRoZSBhcHByb3ByaWF0ZSByZXNwb25zZSBpczpcblxuLSAgIGBXb3J0aEZ1enppbmc6IGZhbHNlYFxuLSAgIGBSZWFzb25pbmc6IEFsbCBjaGFuZ2VzIGFyZSByZXN0cmljdGVkIHRvIHVzZXItc3BhY2Ugc2VsZnRlc3RzIGFuZCBzZWxmdGVzdCBidWlsZCBpbmZyYXN0cnVjdHVyZSB1bmRlciB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy8sIHdoaWNoIGRvIG5vdCBtb2RpZnkgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuYFxuLSAgIGBGb2N1c1N5bWJvbHM6IFtdYFxuLSAgIGBFbmFibGVDb25maWdzOiBbXWBcblxuSSdtIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYCBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5OTQxLCJPdXRwdXRUb2tlbnMiOjg2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIzOjU4OjUzLjQ3NzcyMTY0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBleGNsdXNpdmVseSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0IGhhcm5lc3Nlcywgc2VsZnRlc3QgQlBGIHRlc3QgcHJvZ3JhbXMsIGFuZCBidWlsZCBpbmZyYXN0cnVjdHVyZSB3aXRoaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvLiBOb25lIG9mIHRoZSBjaGFuZ2VzIGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcywgc28gZnV6emluZyBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZXhjbHVzaXZlbHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdCBoYXJuZXNzZXMsIHNlbGZ0ZXN0IEJQRiB0ZXN0IHByb2dyYW1zLCBhbmQgYnVpbGQgaW5mcmFzdHJ1Y3R1cmUgd2l0aGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzLy4gTm9uZSBvZiB0aGUgY2hhbmdlcyBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMsIHNvIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDIzOjU4OjUzLjQ3Nzc0MDk4WiIsIlNlcSI6NSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2mfjq[1] Phase: Running StartedAt: 2026-09-10 23:58:57 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mfjq[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-10 23:58:57 +0000 UTC FinishedAt: 2026-09-10 23:59:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}