Name: series-workflowzwc62 Phase: Failed StartedAt: 2026-08-20 21:15:06 +0000 UTC FinishedAt: 2026-08-20 22:08:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzwc62[0] Phase: Succeeded StartedAt: 2026-08-20 21:15:06 +0000 UTC FinishedAt: 2026-08-20 22:08:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzwc62[0].run-triage Phase: Succeeded StartedAt: 2026-08-20 21:15:06 +0000 UTC FinishedAt: 2026-08-20 22:08:14 +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+CgkJCTx0ZD4yMDI2LzA4LzIwIDIyOjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvKSBieSBjb252ZXJ0aW5nIGFuIG9sZC1zdHlsZSB0ZXN0IGludG8gdGhlIHRlc3RfcHJvZ3MgZnJhbWV3b3JrLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjI6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjMWNjMGE4ZmUzNWU2NzA4ZmNlMGExODE5M2U0Njg5NTMxYTNhYWMzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjAgMjI6MDc6MzEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvLmdpdGlnbm9yZVxuaW5kZXggOTg2YTYzODkxODZiYS4uYjgxNWJmMGQ4ODc3NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8uZ2l0aWdub3JlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvLmdpdGlnbm9yZVxuQEAgLTE3LDcgJiM0MzsxNyw2IEBAIHRlc3RfdmVyaWZpZXJfbG9nXG4gZmVhdHVyZVxuIHVyYW5kb21fcmVhZFxuIHRlc3Rfc29ja21hcFxuLXRlc3RfbGlyY19tb2RlMl91c2VyXG4gZmxvd19kaXNzZWN0b3JfbG9hZFxuIHRlc3RfdGNwbm90aWZ5X3VzZXJcbiB0ZXN0X2xpYmJwZlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxuaW5kZXggMmIyZjkzZGVjNDc0Yi4uZjhlYzBmNTc0NTU5YSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXG5AQCAtMTIzLDcgJiM0MzsxMjMsNiBAQCBURVNUX0ZJTEVTID0geHNrX3ByZXJlcXMuc2ggJCh3aWxkY2FyZCBwcm9ncy9idGZfZHVtcF90ZXN0X2Nhc2VfKi5jKVxuIFxuICMgT3JkZXIgY29ycmVzcG9uZCB0byAmIzM5O21ha2UgcnVuX3Rlc3RzJiMzOTsgb3JkZXJcbiBURVNUX1BST0dTIDo9IHRlc3Rfa21vZC5zaCBcXFxuLVx0dGVzdF9saXJjX21vZGUyLnNoIFxcXG4gXHR0ZXN0X2JwZnRvb2xfYnVpbGQuc2ggXFxcbiBcdHRlc3RfZG9jX2J1aWxkLnNoIFxcXG4gXHR0ZXN0X3hzay5zaCBcXFxuQEAgLTE0MSw3ICYjNDM7MTQwLDYgQEAgVEVTVF9HRU5fUFJPR1NfRVhURU5ERUQgPSBcXFxuIFx0YmVuY2ggXFxcbiBcdGZsb3dfZGlzc2VjdG9yX2xvYWQgXFxcbiBcdHRlc3RfY3BwIFxcXG4tXHR0ZXN0X2xpcmNfbW9kZTJfdXNlciBcXFxuIFx0dmVyaXN0YXQgXFxcbiBcdHhkcF9mZWF0dXJlcyBcXFxuIFx0eGRwX2h3X21ldGFkYXRhIFxcXG5AQCAtMzM4LDcgJiM0MzszMzYsNiBAQCAkKE9VVFBVVCkvdGVzdF9zb2NrbWFwOiAkKENHUk9VUF9IRUxQRVJTKSAkKFRFU1RJTkdfSEVMUEVSUylcbiAkKE9VVFBVVCkvdGVzdF90Y3Bub3RpZnlfdXNlcjogJChDR1JPVVBfSEVMUEVSUykgJChURVNUSU5HX0hFTFBFUlMpICQoVFJBQ0VfSEVMUEVSUylcbiAkKE9VVFBVVCkvdGVzdF9zb2NrX2ZpZWxkczogJChDR1JPVVBfSEVMUEVSUykgJChURVNUSU5HX0hFTFBFUlMpXG4gJChPVVRQVVQpL3Rlc3RfdGFnOiAkKFRFU1RJTkdfSEVMUEVSUylcbi0kKE9VVFBVVCkvdGVzdF9saXJjX21vZGUyX3VzZXI6ICQoVEVTVElOR19IRUxQRVJTKVxuICQoT1VUUFVUKS9mbG93X2Rpc3NlY3Rvcl9sb2FkOiAkKFRFU1RJTkdfSEVMUEVSUylcbiAkKE9VVFBVVCkvdGVzdF9tYXBzOiAkKFRFU1RJTkdfSEVMUEVSUylcbiAkKE9VVFBVVCkvdGVzdF92ZXJpZmllcjogJChURVNUSU5HX0hFTFBFUlMpICQoQ0FQX0hFTFBFUlMpICQoVU5QUklWX0hFTFBFUlMpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGlyY19tb2RlMi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGlyY19tb2RlMi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOGU0ODVkYjcwYjc4YVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGlyY19tb2RlMi5jXG5AQCAtMCwwICYjNDM7MSwzMzQgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7Ly8gdGVzdCBpciBkZWNvZGVyXG4mIzQzOy8vXG4mIzQzOy8vIENvcHlyaWdodCAoQykgMjAxOCBTZWFuIFlvdW5nIFx1MDAzY3NlYW5AbWVzcy5vcmdcdTAwM2VcbiYjNDM7XG4mIzQzOy8vIEEgbGlyYyBjaGFyZGV2IGlzIGEgZGV2aWNlIHJlcHJlc2VudGluZyBhIGNvbnN1bWVyIElSIChjaXIpIGRldmljZSB3aGljaFxuJiM0MzsvLyBjYW4gcmVjZWl2ZSBpbmZyYXJlZCBzaWduYWxzIGZyb20gcmVtb3RlIGNvbnRyb2wgYW5kL29yIHRyYW5zbWl0IElSLlxuJiM0MzsvL1xuJiM0MzsvLyBJUiBpcyBzZW50IGFzIGEgc2VyaWVzIG9mIHB1bHNlcyBhbmQgc3BhY2Ugc29tZXdoYXQgbGlrZSBtb3JzZSBjb2RlLiBUaGVcbiYjNDM7Ly8gQlBGIHByb2dyYW0gY2FuIGRlY29kZSB0aGlzIGludG8gc2NhbmNvZGVzIHNvIHRoYXQgcmMtY29yZSBjYW4gdHJhbnNsYXRlXG4mIzQzOy8vIHRoaXMgaW50byBpbnB1dCBrZXkgY29kZXMgdXNpbmcgdGhlIHJjIGtleW1hcC5cbiYjNDM7Ly9cbiYjNDM7Ly8gVGhpcyB0ZXN0IHdvcmtzIGJ5IHNlbmRpbmcgSVIgb3ZlciByYy1sb29wYmFjaywgc28gdGhlIElSIGlzIHByb2Nlc3NlZCBieVxuJiM0MzsvLyBCUEYgYW5kIHRoZW4gZGVjb2RlZCBpbnRvIHNjYW5jb2Rlcy4gVGhlIGxpcmMgY2hhcmRldiBtdXN0IGJlIHRoZSBvbmVcbiYjNDM7Ly8gYXNzb2NpYXRlZCB3aXRoIHJjLWxvb3BiYWNrLCBzZWUgdGhlIG91dHB1dCBvZiBpci1rZXl0YWJsZSgxKS5cbiYjNDM7Ly9cbiYjNDM7Ly8gVGhlIGZvbGxvd2luZyBDT05GSUcgb3B0aW9ucyBtdXN0IGJlIGVuYWJsZWQgZm9yIHRoZSB0ZXN0IHRvIHN1Y2NlZWQ6XG4mIzQzOy8vIENPTkZJR19SQ19DT1JFPXlcbiYjNDM7Ly8gQ09ORklHX0JQRl9SQVdJUl9FVkVOVD15XG4mIzQzOy8vIENPTkZJR19SQ19MT09QQkFDSz15XG4mIzQzOy8vIENPTkZJR19MSVJDPXlcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lucHV0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGlyYy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2dsb2IuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW1pdHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2Nwb2xsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2xpcmNfbW9kZTIuc2tlbC5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBSZWFkIHRoZSBERVZOQU1FPSBsaW5lIG91dCBvZiB0aGUgZmlyc3QgdWV2ZW50IGZpbGUgdGhhdCBtYXRjaGVzXG4mIzQzOyAqIHBhdHRlcm4sIGFuZCB0dXJuIGl0IGludG8gYSAvZGV2L1x1MDAzY25hbWVcdTAwM2UgcGF0aC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIGZpbmRfZGV2bmFtZShjb25zdCBjaGFyICpwYXR0ZXJuLCBjaGFyICpwYXRoLCBzaXplX3QgcGF0aF9zeilcbiYjNDM7e1xuJiM0MztcdGdsb2JfdCBnbCA9IHt9O1xuJiM0MztcdGJvb2wgZm91bmQgPSBmYWxzZTtcbiYjNDM7XHRGSUxFICpmO1xuJiM0MztcbiYjNDM7XHRpZiAoZ2xvYihwYXR0ZXJuLCAwLCBOVUxMLCBcdTAwMjZnbCkgfHwgZ2wuZ2xfcGF0aGMgPT0gMClcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRmID0gZm9wZW4oZ2wuZ2xfcGF0aHZbMF0sIFwmIzM0O3JcJiMzNDspO1xuJiM0MztcdGlmICghZilcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRjaGFyIGxpbmVbMjU2XTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZikpIHtcbiYjNDM7XHRcdGNoYXIgKnZhbDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoc3RybmNtcChsaW5lLCBcJiMzNDtERVZOQU1FPVwmIzM0OywgOCkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHZhbCA9IGxpbmUgJiM0MzsgODtcbiYjNDM7XHRcdHZhbFtzdHJjc3BuKHZhbCwgXCYjMzQ7XFxuXCYjMzQ7KV0gPSAmIzM5O1xcMCYjMzk7O1xuJiM0MztcdFx0c25wcmludGYocGF0aCwgcGF0aF9zeiwgXCYjMzQ7L2Rldi8lc1wmIzM0OywgdmFsKTtcbiYjNDM7XHRcdGZvdW5kID0gdHJ1ZTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZmNsb3NlKGYpO1xuJiM0MztvdXQ6XG4mIzQzO1x0Z2xvYmZyZWUoXHUwMDI2Z2wpO1xuJiM0MztcdHJldHVybiBmb3VuZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogTG9hZCByYy1sb29wYmFjayBhbmQgZmluZCB0aGUgbGlyYyBhbmQgaW5wdXQgY2hhcmRldnMgaXQgY3JlYXRlZC4gKi9cbiYjNDM7c3RhdGljIGJvb2wgZmluZF9sb29wYmFja19kZXZpY2VzKGNoYXIgKmxpcmNfcGF0aCwgY2hhciAqaW5wdXRfcGF0aCxcbiYjNDM7XHRcdFx0XHQgIHNpemVfdCBwYXRoX3N6KVxuJiM0Mzt7XG4mIzQzO1x0Z2xvYl90IGdsID0ge307XG4mIzQzO1x0Ym9vbCBmb3VuZCA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHQvKiBJZ25vcmUgZmFpbHVyZSwgd2UgY2hlY2sgZm9yIHRoZSByZXN1bHRpbmcgZGV2aWNlcyBiZWxvdy4gKi9cbiYjNDM7XHRTWVNfTk9GQUlMKFwmIzM0O21vZHByb2JlIHJjLWxvb3BiYWNrIFx1MDAzZSAvZGV2L251bGwgMlx1MDAzZVx1MDAyNjFcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRpZiAoZ2xvYihcJiMzNDsvc3lzL2NsYXNzL3JjL3JjKlwmIzM0OywgMCwgTlVMTCwgXHUwMDI2Z2wpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGZvciAoc2l6ZV90IGkgPSAwOyBpIFx1MDAzYyBnbC5nbF9wYXRoYzsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGNvbnN0IGNoYXIgKnJjZGlyID0gZ2wuZ2xfcGF0aHZbaV07XG4mIzQzO1x0XHRjaGFyIHVldmVudF9wYXRoW1BBVEhfTUFYXTtcbiYjNDM7XHRcdGNoYXIgdWV2ZW50WzQwOTZdO1xuJiM0MztcdFx0Y2hhciBwYXR0ZXJuW1BBVEhfTUFYXTtcbiYjNDM7XHRcdEZJTEUgKmY7XG4mIzQzO1x0XHRzaXplX3QgbjtcbiYjNDM7XG4mIzQzO1x0XHRzbnByaW50Zih1ZXZlbnRfcGF0aCwgc2l6ZW9mKHVldmVudF9wYXRoKSwgXCYjMzQ7JXMvdWV2ZW50XCYjMzQ7LCByY2Rpcik7XG4mIzQzO1x0XHRmID0gZm9wZW4odWV2ZW50X3BhdGgsIFwmIzM0O3JcJiMzNDspO1xuJiM0MztcdFx0aWYgKCFmKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdG4gPSBmcmVhZCh1ZXZlbnQsIDEsIHNpemVvZih1ZXZlbnQpIC0gMSwgZik7XG4mIzQzO1x0XHRmY2xvc2UoZik7XG4mIzQzO1x0XHR1ZXZlbnRbbl0gPSAmIzM5O1xcMCYjMzk7O1xuJiM0MztcbiYjNDM7XHRcdGlmICghc3Ryc3RyKHVldmVudCwgXCYjMzQ7RFJWX05BTUU9cmMtbG9vcGJhY2tcJiMzNDspKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRzbnByaW50ZihwYXR0ZXJuLCBzaXplb2YocGF0dGVybiksIFwmIzM0OyVzL2xpcmMqL3VldmVudFwmIzM0OywgcmNkaXIpO1xuJiM0MztcdFx0aWYgKCFmaW5kX2Rldm5hbWUocGF0dGVybiwgbGlyY19wYXRoLCBwYXRoX3N6KSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0c25wcmludGYocGF0dGVybiwgc2l6ZW9mKHBhdHRlcm4pLCBcJiMzNDslcy9pbnB1dCovZXZlbnQqL3VldmVudFwmIzM0OywgcmNkaXIpO1xuJiM0MztcdFx0aWYgKCFmaW5kX2Rldm5hbWUocGF0dGVybiwgaW5wdXRfcGF0aCwgcGF0aF9zeikpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGZvdW5kID0gdHJ1ZTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRpZiAoIWZvdW5kKSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7Tm8gcmMgZGV2aWNlcyBmb3VuZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7RW5hYmxlIENPTkZJR19SQ19MT09QQkFDSywgQ09ORklHX1JDX0xPT1BCQUNLLCBhbmQgQ09ORklHX0xJUkNcXG5cJiMzNDspO1xuJiM0Mzs/XHR9XG4mIzQzO1xuJiM0MztcdGdsb2JmcmVlKFx1MDAyNmdsKTtcbiYjNDM7XHRyZXR1cm4gZm91bmQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgdGVzdF9saXJjX21vZGUyKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGxpcmNfcGF0aFtQQVRIX01BWF0sIGlucHV0X3BhdGhbUEFUSF9NQVhdO1xuJiM0MztcdGludCBsaXJjZmQgPSAtMSwgaW5wdXRmZCA9IC0xLCBwcm9nZmQsIHByb2dmZDIgPSAtMTtcbiYjNDM7XHRzdHJ1Y3QgbGlyY19tb2RlMiAqc2tlbCA9IE5VTEwsICpza2VsMiA9IE5VTEw7XG4mIzQzO1x0X191MzIgcHJvZ19pZHNbMTBdLCBwcm9nX2ZsYWdzWzEwXSwgcHJvZ19jbnQ7XG4mIzQzO1x0c3RydWN0IGJwZl9wcm9nX2luZm8gaW5mbztcbiYjNDM7XHRfX3UzMiBpbmZvX2xlbiwgcHJvZ19pZCwgcHJvZ19pZDI7XG4mIzQzO1x0aW50IHRlc3RpcjEgPSAweDhlYWQ7XHQvKiBrZXlkb3duIGZsYWcgKDB4ODAwMCkgfCBzY2FuY29kZSAweGVhZCAqL1xuJiM0MztcdGludCB0ZXN0aXIyID0gMHg0MDgxO1x0LyogcG9pbnRlcl9yZWwgZmxhZyAoMHg0MDAwKSB8IHJlbF94PTEgfCByZWxfeT0xICovXG4mIzQzO1x0c3RydWN0IGlucHV0X2V2ZW50IGV2ZW50O1xuJiM0MztcdHN0cnVjdCBwb2xsZmQgcGZkID0ge307XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKGdldHVpZCgpICE9IDApIHtcbiYjNDM7XHRcdHRlc3RfX3NraXAoKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghZmluZF9sb29wYmFja19kZXZpY2VzKGxpcmNfcGF0aCwgaW5wdXRfcGF0aCwgc2l6ZW9mKGxpcmNfcGF0aCkpKSB7XG4mIzQzO1x0XHR0ZXN0X19za2lwKCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRza2VsID0gbGlyY19tb2RlMl9fb3Blbl9hbmRfbG9hZCgpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtsaXJjX21vZGUyX19vcGVuX2FuZF9sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0cHJvZ2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MuYnBmX2RlY29kZXIpO1xuJiM0MztcbiYjNDM7XHRtZW1zZXQoXHUwMDI2aW5mbywgMCwgc2l6ZW9mKGluZm8pKTtcbiYjNDM7XHRpbmZvX2xlbiA9IHNpemVvZihpbmZvKTtcbiYjNDM7XHRyZXQgPSBicGZfcHJvZ19nZXRfaW5mb19ieV9mZChwcm9nZmQsIFx1MDAyNmluZm8sIFx1MDAyNmluZm9fbGVuKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwmIzM0O2dldCBmaXJzdCBwcm9ncmFtJiMzOTtzIGluZm9cJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0cHJvZ19pZCA9IGluZm8uaWQ7XG4mIzQzO1xuJiM0MztcdGxpcmNmZCA9IG9wZW4obGlyY19wYXRoLCBPX1JEV1IgfCBPX05PTkJMT0NLKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShsaXJjZmQsIDAsIFwmIzM0O29wZW4gbGlyYyBkZXZpY2VcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdC8qIFRyeSB0byBkZXRhY2ggaXQgYmVmb3JlIGl0IHdhcyBldmVyIGF0dGFjaGVkLCBzaG91bGQgZmFpbC4gKi9cbiYjNDM7XHRyZXQgPSBicGZfcHJvZ19kZXRhY2gyKHByb2dmZCwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMik7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEocmV0LCAtRU5PRU5ULCBcJiMzNDtkZXRhY2ggdW5hdHRhY2hlZCBwcm9ncmFtXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRpbnB1dGZkID0gb3BlbihpbnB1dF9wYXRoLCBPX1JET05MWSB8IE9fTk9OQkxPQ0spO1xuJiM0MztcdGlmICghQVNTRVJUX0dFKGlucHV0ZmQsIDAsIFwmIzM0O29wZW4gaW5wdXQgZGV2aWNlXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRwcm9nX2NudCA9IEFSUkFZX1NJWkUocHJvZ19pZHMpO1xuJiM0MztcdHJldCA9IGJwZl9wcm9nX3F1ZXJ5KGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDAsIHByb2dfZmxhZ3MsIHByb2dfaWRzLFxuJiM0MztcdFx0XHQgICAgIFx1MDAyNnByb2dfY250KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwmIzM0O3F1ZXJ5IHByb2dyYW1zIGJlZm9yZSBhdHRhY2hcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEocHJvZ19jbnQsIDAsIFwmIzM0O25vIHByb2dyYW1zIHNob3VsZCBiZSBhdHRhY2hlZCB5ZXRcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdC8qIEludmFsaWQgYXR0YWNoIGZsYWdzIG11c3QgYmUgcmVqZWN0ZWQsIGFuZCBtdXN0IG5vdCBhdHRhY2guICovXG4mIzQzO1x0cmV0ID0gYnBmX3Byb2dfYXR0YWNoKHByb2dmZCwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMSk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEocmV0LCAtRUlOVkFMLCBcJiMzNDthdHRhY2ggd2l0aCBpbnZhbGlkIGZsYWdzXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRwcm9nX2NudCA9IEFSUkFZX1NJWkUocHJvZ19pZHMpO1xuJiM0MztcdHJldCA9IGJwZl9wcm9nX3F1ZXJ5KGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDAsIHByb2dfZmxhZ3MsIHByb2dfaWRzLFxuJiM0MztcdFx0XHQgICAgIFx1MDAyNnByb2dfY250KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwmIzM0O3F1ZXJ5IHByb2dyYW1zIGFmdGVyIHJlamVjdGVkIGF0dGFjaFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShwcm9nX2NudCwgMCwgXCYjMzQ7cmVqZWN0ZWQgYXR0YWNoIHNob3VsZCBub3QgYXR0YWNoXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBicGZfcHJvZ19hdHRhY2gocHJvZ2ZkLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwmIzM0O2F0dGFjaCBwcm9ncmFtIHRvIGxpcmMgZGV2aWNlXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHQvKiBJbnZhbGlkIHF1ZXJ5IGZsYWdzIG11c3QgYmUgcmVqZWN0ZWQgdG9vLCB3aXRob3V0IHVwc2V0dGluZyBzdGF0ZS4gKi9cbiYjNDM7XHRwcm9nX2NudCA9IEFSUkFZX1NJWkUocHJvZ19pZHMpO1xuJiM0MztcdHJldCA9IGJwZl9wcm9nX3F1ZXJ5KGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDEsIHByb2dfZmxhZ3MsIHByb2dfaWRzLFxuJiM0MztcdFx0XHQgICAgIFx1MDAyNnByb2dfY250KTtcbiYjNDM7XHRBU1NFUlRfRVEocmV0LCAtRUlOVkFMLCBcJiMzNDtxdWVyeSB3aXRoIGludmFsaWQgZmxhZ3NcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRwcm9nX2NudCA9IEFSUkFZX1NJWkUocHJvZ19pZHMpO1xuJiM0MztcdHJldCA9IGJwZl9wcm9nX3F1ZXJ5KGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDAsIHByb2dfZmxhZ3MsIHByb2dfaWRzLFxuJiM0MztcdFx0XHQgICAgIFx1MDAyNnByb2dfY250KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwmIzM0O3F1ZXJ5IHByb2dyYW1zIGFmdGVyIGF0dGFjaFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dF9kZXRhY2g7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEocHJvZ19jbnQsIDEsIFwmIzM0O29uZSBwcm9ncmFtIHNob3VsZCBiZSBhdHRhY2hlZFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dF9kZXRhY2g7XG4mIzQzO1x0QVNTRVJUX0VRKHByb2dfaWRzWzBdLCBwcm9nX2lkLCBcJiMzNDtxdWVyaWVkIGlkIHNob3VsZCBtYXRjaCBhdHRhY2hlZCBwcm9ncmFtXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LyogV3JpdGUgcmF3IElSICovXG4mIzQzO1x0cmV0ID0gd3JpdGUobGlyY2ZkLCBcdTAwMjZ0ZXN0aXIxLCBzaXplb2YodGVzdGlyMSkpO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHJldCwgc2l6ZW9mKHRlc3RpcjEpLCBcJiMzNDtzZW5kIHRlc3QgSVIgbWVzc2FnZSAxXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0X2RldGFjaDtcbiYjNDM7XG4mIzQzO1x0cGZkLmZkID0gaW5wdXRmZDtcbiYjNDM7XHRwZmQuZXZlbnRzID0gUE9MTElOO1xuJiM0MztcbiYjNDM7XHRmb3IgKDs7KSB7XG4mIzQzO1x0XHRwb2xsKFx1MDAyNnBmZCwgMSwgMTAwKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBSZWFkIGRlY29kZWQgSVIgKi9cbiYjNDM7XHRcdHJldCA9IHJlYWQoaW5wdXRmZCwgXHUwMDI2ZXZlbnQsIHNpemVvZihldmVudCkpO1xuJiM0MztcdFx0aWYgKCFBU1NFUlRfRVEocmV0LCBzaXplb2YoZXZlbnQpLCBcJiMzNDtyZWFkIGRlY29kZWQgSVIgMVwmIzM0OykpXG4mIzQzO1x0XHRcdGdvdG8gb3V0X2RldGFjaDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoZXZlbnQudHlwZSA9PSBFVl9NU0MgXHUwMDI2XHUwMDI2IGV2ZW50LmNvZGUgPT0gTVNDX1NDQU4gXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgZXZlbnQudmFsdWUgPT0gMHhlYWQpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogV3JpdGUgcmF3IElSICovXG4mIzQzO1x0cmV0ID0gd3JpdGUobGlyY2ZkLCBcdTAwMjZ0ZXN0aXIyLCBzaXplb2YodGVzdGlyMikpO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHJldCwgc2l6ZW9mKHRlc3RpcjIpLCBcJiMzNDtzZW5kIHRlc3QgSVIgbWVzc2FnZSAyXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0X2RldGFjaDtcbiYjNDM7XG4mIzQzO1x0Zm9yICg7Oykge1xuJiM0MztcdFx0cG9sbChcdTAwMjZwZmQsIDEsIDEwMCk7XG4mIzQzO1xuJiM0MztcdFx0LyogUmVhZCBkZWNvZGVkIElSICovXG4mIzQzO1x0XHRyZXQgPSByZWFkKGlucHV0ZmQsIFx1MDAyNmV2ZW50LCBzaXplb2YoZXZlbnQpKTtcbiYjNDM7XHRcdGlmICghQVNTRVJUX0VRKHJldCwgc2l6ZW9mKGV2ZW50KSwgXCYjMzQ7cmVhZCBkZWNvZGVkIElSIDJcJiMzNDspKVxuJiM0MztcdFx0XHRnb3RvIG91dF9kZXRhY2g7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGV2ZW50LnR5cGUgPT0gRVZfUkVMIFx1MDAyNlx1MDAyNiBldmVudC5jb2RlID09IFJFTF9ZIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGV2ZW50LnZhbHVlID09IDEpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHJvZ19jbnQgPSBBUlJBWV9TSVpFKHByb2dfaWRzKTtcbiYjNDM7XHRyZXQgPSBicGZfcHJvZ19xdWVyeShsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwLCBwcm9nX2ZsYWdzLCBwcm9nX2lkcyxcbiYjNDM7XHRcdFx0ICAgICBcdTAwMjZwcm9nX2NudCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0socmV0LCBcJiMzNDtxdWVyeSBwcm9ncmFtcyBhZnRlciBJUiB3YXMgZGVjb2RlZFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dF9kZXRhY2g7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEocHJvZ19jbnQsIDEsIFwmIzM0O29uZSBwcm9ncmFtIHNob3VsZCBzdGlsbCBiZSBhdHRhY2hlZFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dF9kZXRhY2g7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIGxpcmMgY2hhcmRldiBjYW4gaG9sZCBtb3JlIHRoYW4gb25lIGF0dGFjaGVkIHByb2dyYW0gYXQgb25jZS5cbiYjNDM7XHQgKiBMb2FkIGEgc2Vjb25kLCBpbmRlcGVuZGVudCBpbnN0YW5jZSBhbmQgY2hlY2sgaXQgY2FuIGJlIGF0dGFjaGVkXG4mIzQzO1x0ICogYWxvbmdzaWRlIHRoZSBmaXJzdCwgcXVlcmllZCwgYW5kIHRoZW4gZGV0YWNoZWQgb24gaXRzIG93blxuJiM0MztcdCAqIHdpdGhvdXQgZGlzdHVyYmluZyB0aGUgZmlyc3QgcHJvZ3JhbSYjMzk7cyBhdHRhY2htZW50LlxuJiM0MztcdCAqL1xuJiM0MztcdHNrZWwyID0gbGlyY19tb2RlMl9fb3Blbl9hbmRfbG9hZCgpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsMiwgXCYjMzQ7bGlyY19tb2RlMl9fb3Blbl9hbmRfbG9hZCAoMm5kKVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dF9kZXRhY2g7XG4mIzQzO1xuJiM0MztcdHByb2dmZDIgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbDItXHUwMDNlcHJvZ3MuYnBmX2RlY29kZXIpO1xuJiM0MztcbiYjNDM7XHRtZW1zZXQoXHUwMDI2aW5mbywgMCwgc2l6ZW9mKGluZm8pKTtcbiYjNDM7XHRpbmZvX2xlbiA9IHNpemVvZihpbmZvKTtcbiYjNDM7XHRyZXQgPSBicGZfcHJvZ19nZXRfaW5mb19ieV9mZChwcm9nZmQyLCBcdTAwMjZpbmZvLCBcdTAwMjZpbmZvX2xlbik7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0socmV0LCBcJiMzNDtnZXQgc2Vjb25kIHByb2dyYW0mIzM5O3MgaW5mb1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dF9kZXRhY2g7XG4mIzQzO1x0cHJvZ19pZDIgPSBpbmZvLmlkO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBicGZfcHJvZ19hdHRhY2gocHJvZ2ZkMiwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0socmV0LCBcJiMzNDthdHRhY2ggc2Vjb25kIHByb2dyYW0gdG8gbGlyYyBkZXZpY2VcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXRfZGV0YWNoO1xuJiM0MztcbiYjNDM7XHRwcm9nX2NudCA9IEFSUkFZX1NJWkUocHJvZ19pZHMpO1xuJiM0MztcdHJldCA9IGJwZl9wcm9nX3F1ZXJ5KGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDAsIHByb2dfZmxhZ3MsIHByb2dfaWRzLFxuJiM0MztcdFx0XHQgICAgIFx1MDAyNnByb2dfY250KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwmIzM0O3F1ZXJ5IHByb2dyYW1zIGFmdGVyIHNlY29uZCBhdHRhY2hcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXRfZGV0YWNoMjtcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShwcm9nX2NudCwgMiwgXCYjMzQ7dHdvIHByb2dyYW1zIHNob3VsZCBiZSBhdHRhY2hlZFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dF9kZXRhY2gyO1xuJiM0MztcdEFTU0VSVF9UUlVFKChwcm9nX2lkc1swXSA9PSBwcm9nX2lkIFx1MDAyNlx1MDAyNiBwcm9nX2lkc1sxXSA9PSBwcm9nX2lkMikgfHxcbiYjNDM7XHRcdCAgICAocHJvZ19pZHNbMF0gPT0gcHJvZ19pZDIgXHUwMDI2XHUwMDI2IHByb2dfaWRzWzFdID09IHByb2dfaWQpLFxuJiM0MztcdFx0ICAgIFwmIzM0O3F1ZXJpZWQgaWRzIHNob3VsZCBiZSB0aGUgdHdvIGF0dGFjaGVkIHByb2dyYW1zXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LyogRGV0YWNoIHRoZSBzZWNvbmQgcHJvZ3JhbTsgdGhlIGZpcnN0IHNob3VsZCByZW1haW4gYXR0YWNoZWQuICovXG4mIzQzO1x0cmV0ID0gYnBmX3Byb2dfZGV0YWNoMihwcm9nZmQyLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwmIzM0O2RldGFjaCBzZWNvbmQgcHJvZ3JhbVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dF9kZXRhY2gyO1xuJiM0MztcbiYjNDM7XHQvKiBEZXRhY2hpbmcgYW4gYWxyZWFkeS1kZXRhY2hlZCBwcm9ncmFtIHNob3VsZCBub3cgZmFpbC4gKi9cbiYjNDM7XHRyZXQgPSBicGZfcHJvZ19kZXRhY2gyKHByb2dmZDIsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIpO1xuJiM0MztcdEFTU0VSVF9FUShyZXQsIC1FTk9FTlQsIFwmIzM0O2RldGFjaCBzZWNvbmQgcHJvZ3JhbSBhZ2FpblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHByb2dfY250ID0gQVJSQVlfU0laRShwcm9nX2lkcyk7XG4mIzQzO1x0cmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCwgcHJvZ19mbGFncywgcHJvZ19pZHMsXG4mIzQzO1x0XHRcdCAgICAgXHUwMDI2cHJvZ19jbnQpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKHJldCwgXCYjMzQ7cXVlcnkgcHJvZ3JhbXMgYWZ0ZXIgc2Vjb25kIGRldGFjaFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dF9kZXRhY2g7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEocHJvZ19jbnQsIDEsIFwmIzM0O29uZSBwcm9ncmFtIHNob3VsZCByZW1haW4gYXR0YWNoZWRcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXRfZGV0YWNoO1xuJiM0MztcdEFTU0VSVF9FUShwcm9nX2lkc1swXSwgcHJvZ19pZCwgXCYjMzQ7cmVtYWluaW5nIHByb2dyYW0gc2hvdWxkIGJlIHRoZSBmaXJzdCBvbmVcJiMzNDspO1xuJiM0MztcbiYjNDM7b3V0X2RldGFjaDpcbiYjNDM7XHQvKiBMZXQmIzM5O3MgdHJ5IGRldGFjaGluZyBpdCBub3cgaXQgaXMgYWN0dWFsbHkgYXR0YWNoZWQuICovXG4mIzQzO1x0cmV0ID0gYnBmX3Byb2dfZGV0YWNoMihwcm9nZmQsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIpO1xuJiM0MztcdEFTU0VSVF9PSyhyZXQsIFwmIzM0O2RldGFjaCBwcm9ncmFtIGZyb20gbGlyYyBkZXZpY2VcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKiBEZXRhY2hpbmcgaXQgYWdhaW4gc2hvdWxkIG5vdyBmYWlsIHRoZSBzYW1lIHdheS4gKi9cbiYjNDM7XHRyZXQgPSBicGZfcHJvZ19kZXRhY2gyKHByb2dmZCwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMik7XG4mIzQzO1x0QVNTRVJUX0VRKHJldCwgLUVOT0VOVCwgXCYjMzQ7ZGV0YWNoIHByb2dyYW0gZnJvbSBsaXJjIGRldmljZSBhZ2FpblwmIzM0Oyk7XG4mIzQzO1x0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztvdXRfZGV0YWNoMjpcbiYjNDM7XHQvKiBCZXN0LWVmZm9ydCBjbGVhbnVwIG9mIHRoZSBzZWNvbmQgcHJvZ3JhbSBiZWZvcmUgYmFpbGluZyBvdXQuICovXG4mIzQzO1x0YnBmX3Byb2dfZGV0YWNoMihwcm9nZmQyLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyKTtcbiYjNDM7XHRnb3RvIG91dF9kZXRhY2g7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0aWYgKGlucHV0ZmQgXHUwMDNlPSAwKVxuJiM0MztcdFx0Y2xvc2UoaW5wdXRmZCk7XG4mIzQzO1x0aWYgKGxpcmNmZCBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZShsaXJjZmQpO1xuJiM0MztcdGxpcmNfbW9kZTJfX2Rlc3Ryb3koc2tlbDIpO1xuJiM0MztcdGxpcmNfbW9kZTJfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbGlyY19tb2RlMi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xpcmNfbW9kZTIuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjk4MTM3ZjNjNWMwM2Rcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9saXJjX21vZGUyLmNcbkBAIC0wLDAgJiM0MzsxLDMyIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8vIHRlc3QgaXIgZGVjb2RlclxuJiM0MzsvL1xuJiM0MzsvLyBDb3B5cmlnaHQgKEMpIDIwMTggU2VhbiBZb3VuZyBcdTAwM2NzZWFuQG1lc3Mub3JnXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9saXJjLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtsaXJjX21vZGUyXCYjMzQ7KVxuJiM0MztpbnQgYnBmX2RlY29kZXIodW5zaWduZWQgaW50ICpzYW1wbGUpXG4mIzQzO3tcbiYjNDM7XHRpZiAoTElSQ19JU19QVUxTRSgqc2FtcGxlKSkge1xuJiM0MztcdFx0dW5zaWduZWQgaW50IGR1cmF0aW9uID0gTElSQ19WQUxVRSgqc2FtcGxlKTtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogRmxhZyBiaXRzIHBpY2tlZCBkZWxpYmVyYXRlbHkgbG93OiByYy1sb29wYmFjayBzaW11bGF0ZXNcbiYjNDM7XHRcdCAqIGEgcmVjZWl2ZXIgb3ZlcmZsb3cgZm9yIGFueSBwdWxzZSBvdmVyIE1TX1RPX1VTKDUwKSAoc2VlXG4mIzQzO1x0XHQgKiBsb29wX3R4X2lyKCkgaW4gcmMtbG9vcGJhY2suYyksIHdoaWNoIHdvdWxkIHNpbGVudGx5XG4mIzQzO1x0XHQgKiBzd2FsbG93IHRoZSBzYW1wbGUgYmVmb3JlIGl0IGV2ZXIgcmVhY2hlcyB0aGlzIGRlY29kZXIuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChkdXJhdGlvbiBcdTAwMjYgMHg4MDAwKVxuJiM0MztcdFx0XHRicGZfcmNfa2V5ZG93bihzYW1wbGUsIDB4NDAsIGR1cmF0aW9uIFx1MDAyNiAweDNmZmYsIDApO1xuJiM0MztcdFx0aWYgKGR1cmF0aW9uIFx1MDAyNiAweDQwMDApXG4mIzQzO1x0XHRcdGJwZl9yY19wb2ludGVyX3JlbChzYW1wbGUsIChkdXJhdGlvbiBcdTAwM2VcdTAwM2UgNykgXHUwMDI2IDB4N2YsXG4mIzQzO1x0XHRcdFx0XHQgICBkdXJhdGlvbiBcdTAwMjYgMHg3Zik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9saXJjX21vZGUyX2tlcm4uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2xpcmNfbW9kZTJfa2Vybi5jXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IGNiZTQyODRjMDMyZmUuLjAwMDAwMDAwMDAwMDBcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2xpcmNfbW9kZTJfa2Vybi5jXG4mIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsXG5AQCAtMSwyNiAmIzQzOzAsMCBAQFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4tLy8gdGVzdCBpciBkZWNvZGVyXG4tLy9cbi0vLyBDb3B5cmlnaHQgKEMpIDIwMTggU2VhbiBZb3VuZyBcdTAwM2NzZWFuQG1lc3Mub3JnXHUwMDNlXG4tXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9saXJjLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuLVxuLVNFQyhcJiMzNDtsaXJjX21vZGUyXCYjMzQ7KVxuLWludCBicGZfZGVjb2Rlcih1bnNpZ25lZCBpbnQgKnNhbXBsZSlcbi17XG4tXHRpZiAoTElSQ19JU19QVUxTRSgqc2FtcGxlKSkge1xuLVx0XHR1bnNpZ25lZCBpbnQgZHVyYXRpb24gPSBMSVJDX1ZBTFVFKCpzYW1wbGUpO1xuLVxuLVx0XHRpZiAoZHVyYXRpb24gXHUwMDI2IDB4MTAwMClcbi1cdFx0XHRicGZfcmNfa2V5ZG93bihzYW1wbGUsIDB4NDAsIGR1cmF0aW9uIFx1MDAyNiAweGZmZmYsIDApO1xuLVx0XHRpZiAoZHVyYXRpb24gXHUwMDI2IDB4MjAwMClcbi1cdFx0XHRicGZfcmNfcG9pbnRlcl9yZWwoc2FtcGxlLCAoZHVyYXRpb24gXHUwMDNlXHUwMDNlIDgpIFx1MDAyNiAweGZmLFxuLVx0XHRcdFx0XHQgICBkdXJhdGlvbiBcdTAwMjYgMHhmZik7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tY2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9saXJjX21vZGUyLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbGlyY19tb2RlMi5zaFxuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCA1MjUyYjkxZjQ4YTE4Li4wMDAwMDAwMDAwMDAwXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9saXJjX21vZGUyLnNoXG4mIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsXG5AQCAtMSw0MSAmIzQzOzAsMCBAQFxuLSMhL2Jpbi9iYXNoXG4tIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuLVxuLSMgS3NlbGZ0ZXN0IGZyYW1ld29yayByZXF1aXJlbWVudCAtIFNLSVAgY29kZSBpcyA0LlxuLWtzZnRfc2tpcD00XG4tcmV0PSRrc2Z0X3NraXBcbi1cbi1tc2c9XCYjMzQ7c2tpcCBhbGwgdGVzdHM6XCYjMzQ7XG4taWYgWyAkVUlEICE9IDAgXTsgdGhlblxuLVx0ZWNobyAkbXNnIHBsZWFzZSBydW4gdGhpcyBhcyByb290IFx1MDAzZVx1MDAyNjJcbi1cdGV4aXQgJGtzZnRfc2tpcFxuLWZpXG4tXG4tR1JFRU49JiMzOTtcXDAzM1swOzkybSYjMzk7XG4tUkVEPSYjMzk7XFwwMzNbMDszMW0mIzM5O1xuLU5DPSYjMzk7XFwwMzNbMG0mIzM5OyAjIE5vIENvbG9yXG4tXG4tbW9kcHJvYmUgcmMtbG9vcGJhY2tcbi1cbi1mb3IgaSBpbiAvc3lzL2NsYXNzL3JjL3JjKlxuLWRvXG4tXHRpZiBncmVwIC1xIERSVl9OQU1FPXJjLWxvb3BiYWNrICRpL3VldmVudFxuLVx0dGhlblxuLVx0XHRMSVJDREVWPSQoZ3JlcCBERVZOQU1FPSAkaS9saXJjKi91ZXZlbnQgfCBzZWQgc1FERVZOQU1FPVEvZGV2L1EpXG4tXHRcdElOUFVUREVWPSQoZ3JlcCBERVZOQU1FPSAkaS9pbnB1dCovZXZlbnQqL3VldmVudCB8IHNlZCBzUURFVk5BTUU9US9kZXYvUSlcbi1cdGZpXG4tZG9uZVxuLVxuLWlmIFsgLW4gXCYjMzQ7JExJUkNERVZcJiMzNDsgXTtcbi10aGVuXG4tXHRUWVBFPWxpcmNfbW9kZTJcbi1cdC4vdGVzdF9saXJjX21vZGUyX3VzZXIgJExJUkNERVYgJElOUFVUREVWXG4tXHRyZXQ9JD9cbi1cdGlmIFsgJHJldCAtbmUgMCBdOyB0aGVuXG4tXHRcdGVjaG8gLWUgJHtSRUR9XCYjMzQ7RkFJTDogJFRZUEVcJiMzNDske05DfVxuLVx0ZWxzZVxuLVx0XHRlY2hvIC1lICR7R1JFRU59XCYjMzQ7UEFTUzogJFRZUEVcJiMzNDske05DfVxuLVx0Zmlcbi1maVxuLVxuLWV4aXQgJHJldFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xpcmNfbW9kZTJfdXNlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbGlyY19tb2RlMl91c2VyLmNcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggY2QxOTFkYTIwZDE0My4uMDAwMDAwMDAwMDAwMFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbGlyY19tb2RlMl91c2VyLmNcbiYjNDM7JiM0MzsmIzQzOyAvZGV2L251bGxcbkBAIC0xLDE3NyAmIzQzOzAsMCBAQFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4tLy8gdGVzdCBpciBkZWNvZGVyXG4tLy9cbi0vLyBDb3B5cmlnaHQgKEMpIDIwMTggU2VhbiBZb3VuZyBcdTAwM2NzZWFuQG1lc3Mub3JnXHUwMDNlXG4tXG4tLy8gQSBsaXJjIGNoYXJkZXYgaXMgYSBkZXZpY2UgcmVwcmVzZW50aW5nIGEgY29uc3VtZXIgSVIgKGNpcikgZGV2aWNlIHdoaWNoXG4tLy8gY2FuIHJlY2VpdmUgaW5mcmFyZWQgc2lnbmFscyBmcm9tIHJlbW90ZSBjb250cm9sIGFuZC9vciB0cmFuc21pdCBJUi5cbi0vL1xuLS8vIElSIGlzIHNlbnQgYXMgYSBzZXJpZXMgb2YgcHVsc2VzIGFuZCBzcGFjZSBzb21ld2hhdCBsaWtlIG1vcnNlIGNvZGUuIFRoZVxuLS8vIEJQRiBwcm9ncmFtIGNhbiBkZWNvZGUgdGhpcyBpbnRvIHNjYW5jb2RlcyBzbyB0aGF0IHJjLWNvcmUgY2FuIHRyYW5zbGF0ZVxuLS8vIHRoaXMgaW50byBpbnB1dCBrZXkgY29kZXMgdXNpbmcgdGhlIHJjIGtleW1hcC5cbi0vL1xuLS8vIFRoaXMgdGVzdCB3b3JrcyBieSBzZW5kaW5nIElSIG92ZXIgcmMtbG9vcGJhY2ssIHNvIHRoZSBJUiBpcyBwcm9jZXNzZWQgYnlcbi0vLyBCUEYgYW5kIHRoZW4gZGVjb2RlZCBpbnRvIHNjYW5jb2Rlcy4gVGhlIGxpcmMgY2hhcmRldiBtdXN0IGJlIHRoZSBvbmVcbi0vLyBhc3NvY2lhdGVkIHdpdGggcmMtbG9vcGJhY2ssIHNlZSB0aGUgb3V0cHV0IG9mIGlyLWtleXRhYmxlKDEpLlxuLS8vXG4tLy8gVGhlIGZvbGxvd2luZyBDT05GSUcgb3B0aW9ucyBtdXN0IGJlIGVuYWJsZWQgZm9yIHRoZSB0ZXN0IHRvIHN1Y2NlZWQ6XG4tLy8gQ09ORklHX1JDX0NPUkU9eVxuLS8vIENPTkZJR19CUEZfUkFXSVJfRVZFTlQ9eVxuLS8vIENPTkZJR19SQ19MT09QQkFDSz15XG4tXG4tLy8gU3RlcHM6XG4tLy8gMS4gT3BlbiB0aGUgL2Rldi9saXJjTiBkZXZpY2UgZm9yIHJjLWxvb3BiYWNrIChnaXZlbiBvbiBjb21tYW5kIGxpbmUpXG4tLy8gMi4gQXR0YWNoIGJwZl9saXJjX21vZGUyIHByb2dyYW0gd2hpY2ggZGVjb2RlcyBzb21lIElSLlxuLS8vIDMuIFNlbmQgc29tZSBJUiB0byB0aGUgc2FtZSBJUiBkZXZpY2U7IHNpbmNlIGl0IGlzIGxvb3BiYWNrLCB0aGlzIHdpbGxcbi0vLyAgICBlbmQgdXAgaW4gdGhlIGJwZiBwcm9ncmFtXG4tLy8gNC4gYnBmIHByb2dyYW0gc2hvdWxkIGRlY29kZSBJUiBhbmQgcmVwb3J0IGtleWNvZGVcbi0vLyA1LiBXZSBjYW4gcmVhZCBrZXljb2RlIGZyb20gc2FtZSAvZGV2L2xpcmMgZGV2aWNlXG4tXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9pbnB1dC5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2Nwb2xsLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY3N5cy9pb2N0bC5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjc3lzL3N0YXQuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2Vcbi1cbi0jaW5jbHVkZSBcJiMzNDticGZfdXRpbC5oXCYjMzQ7XG4tI2luY2x1ZGUgXHUwMDNjYnBmL2JwZi5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjYnBmL2xpYmJwZi5oXHUwMDNlXG4tXG4tI2luY2x1ZGUgXCYjMzQ7dGVzdGluZ19oZWxwZXJzLmhcJiMzNDtcbi1cbi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4te1xuLVx0c3RydWN0IGJwZl9vYmplY3QgKm9iajtcbi1cdGludCByZXQsIGxpcmNmZCwgcHJvZ2ZkLCBpbnB1dGZkO1xuLVx0aW50IHRlc3RpcjEgPSAweDFlYWQ7XG4tXHRpbnQgdGVzdGlyMiA9IDB4MjEwMTtcbi1cdHUzMiBwcm9nX2lkc1sxMF0sIHByb2dfZmxhZ3NbMTBdLCBwcm9nX2NudDtcbi1cbi1cdGlmIChhcmdjICE9IDMpIHtcbi1cdFx0cHJpbnRmKFwmIzM0O1VzYWdlOiAlcyAvZGV2L2xpcmNOIC9kZXYvaW5wdXQvZXZlbnRNXFxuXCYjMzQ7LCBhcmd2WzBdKTtcbi1cdFx0cmV0dXJuIDI7XG4tXHR9XG4tXG4tXHRyZXQgPSBicGZfcHJvZ190ZXN0X2xvYWQoXCYjMzQ7dGVzdF9saXJjX21vZGUyX2tlcm4uYnBmLm9cJiMzNDssXG4tXHRcdFx0XHQgQlBGX1BST0dfVFlQRV9MSVJDX01PREUyLCBcdTAwMjZvYmosIFx1MDAyNnByb2dmZCk7XG4tXHRpZiAocmV0KSB7XG4tXHRcdHByaW50ZihcJiMzNDtGYWlsZWQgdG8gbG9hZCBicGYgcHJvZ3JhbVxcblwmIzM0Oyk7XG4tXHRcdHJldHVybiAxO1xuLVx0fVxuLVxuLVx0bGlyY2ZkID0gb3Blbihhcmd2WzFdLCBPX1JEV1IgfCBPX05PTkJMT0NLKTtcbi1cdGlmIChsaXJjZmQgPT0gLTEpIHtcbi1cdFx0cHJpbnRmKFwmIzM0O2ZhaWxlZCB0byBvcGVuIGxpcmMgZGV2aWNlICVzOiAlbVxcblwmIzM0OywgYXJndlsxXSk7XG4tXHRcdHJldHVybiAxO1xuLVx0fVxuLVxuLVx0LyogTGV0JiMzOTtzIHRyeSBkZXRhY2ggaXQgYmVmb3JlIGl0IHdhcyBldmVyIGF0dGFjaGVkICovXG4tXHRyZXQgPSBicGZfcHJvZ19kZXRhY2gyKHByb2dmZCwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMik7XG4tXHRpZiAocmV0ICE9IC1FTk9FTlQpIHtcbi1cdFx0cHJpbnRmKFwmIzM0O2JwZl9wcm9nX2RldGFjaDIgbm90IGF0dGFjaGVkIHNob3VsZCBmYWlsOiAlbVxcblwmIzM0Oyk7XG4tXHRcdHJldHVybiAxO1xuLVx0fVxuLVxuLVx0aW5wdXRmZCA9IG9wZW4oYXJndlsyXSwgT19SRE9OTFkgfCBPX05PTkJMT0NLKTtcbi1cdGlmIChpbnB1dGZkID09IC0xKSB7XG4tXHRcdHByaW50ZihcJiMzNDtmYWlsZWQgdG8gb3BlbiBpbnB1dCBkZXZpY2UgJXM6ICVtXFxuXCYjMzQ7LCBhcmd2WzFdKTtcbi1cdFx0cmV0dXJuIDE7XG4tXHR9XG4tXG4tXHRwcm9nX2NudCA9IDEwO1xuLVx0cmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCwgcHJvZ19mbGFncywgcHJvZ19pZHMsXG4tXHRcdFx0ICAgICBcdTAwMjZwcm9nX2NudCk7XG4tXHRpZiAocmV0KSB7XG4tXHRcdHByaW50ZihcJiMzNDtGYWlsZWQgdG8gcXVlcnkgYnBmIHByb2dyYW1zIG9uIGxpcmMgZGV2aWNlOiAlbVxcblwmIzM0Oyk7XG4tXHRcdHJldHVybiAxO1xuLVx0fVxuLVxuLVx0aWYgKHByb2dfY250ICE9IDApIHtcbi1cdFx0cHJpbnRmKFwmIzM0O0V4cGVjdGVkIG5vdGhpbmcgdG8gYmUgYXR0YWNoZWRcXG5cJiMzNDspO1xuLVx0XHRyZXR1cm4gMTtcbi1cdH1cbi1cbi1cdHJldCA9IGJwZl9wcm9nX2F0dGFjaChwcm9nZmQsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDApO1xuLVx0aWYgKHJldCkge1xuLVx0XHRwcmludGYoXCYjMzQ7RmFpbGVkIHRvIGF0dGFjaCBicGYgdG8gbGlyYyBkZXZpY2U6ICVtXFxuXCYjMzQ7KTtcbi1cdFx0cmV0dXJuIDE7XG4tXHR9XG4tXG4tXHQvKiBXcml0ZSByYXcgSVIgKi9cbi1cdHJldCA9IHdyaXRlKGxpcmNmZCwgXHUwMDI2dGVzdGlyMSwgc2l6ZW9mKHRlc3RpcjEpKTtcbi1cdGlmIChyZXQgIT0gc2l6ZW9mKHRlc3RpcjEpKSB7XG4tXHRcdHByaW50ZihcJiMzNDtGYWlsZWQgdG8gc2VuZCB0ZXN0IElSIG1lc3NhZ2U6ICVtXFxuXCYjMzQ7KTtcbi1cdFx0cmV0dXJuIDE7XG4tXHR9XG4tXG4tXHRzdHJ1Y3QgcG9sbGZkIHBmZCA9IHsgLmZkID0gaW5wdXRmZCwgLmV2ZW50cyA9IFBPTExJTiB9O1xuLVx0c3RydWN0IGlucHV0X2V2ZW50IGV2ZW50O1xuLVxuLVx0Zm9yICg7Oykge1xuLVx0XHRwb2xsKFx1MDAyNnBmZCwgMSwgMTAwKTtcbi1cbi1cdFx0LyogUmVhZCBkZWNvZGVkIElSICovXG4tXHRcdHJldCA9IHJlYWQoaW5wdXRmZCwgXHUwMDI2ZXZlbnQsIHNpemVvZihldmVudCkpO1xuLVx0XHRpZiAocmV0ICE9IHNpemVvZihldmVudCkpIHtcbi1cdFx0XHRwcmludGYoXCYjMzQ7RmFpbGVkIHRvIHJlYWQgZGVjb2RlZCBJUjogJW1cXG5cJiMzNDspO1xuLVx0XHRcdHJldHVybiAxO1xuLVx0XHR9XG4tXG4tXHRcdGlmIChldmVudC50eXBlID09IEVWX01TQyBcdTAwMjZcdTAwMjYgZXZlbnQuY29kZSA9PSBNU0NfU0NBTiBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIGV2ZW50LnZhbHVlID09IDB4MWVhZCkge1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHR9XG4tXG4tXHQvKiBXcml0ZSByYXcgSVIgKi9cbi1cdHJldCA9IHdyaXRlKGxpcmNmZCwgXHUwMDI2dGVzdGlyMiwgc2l6ZW9mKHRlc3RpcjIpKTtcbi1cdGlmIChyZXQgIT0gc2l6ZW9mKHRlc3RpcjIpKSB7XG4tXHRcdHByaW50ZihcJiMzNDtGYWlsZWQgdG8gc2VuZCB0ZXN0IElSIG1lc3NhZ2U6ICVtXFxuXCYjMzQ7KTtcbi1cdFx0cmV0dXJuIDE7XG4tXHR9XG4tXG4tXHRmb3IgKDs7KSB7XG4tXHRcdHBvbGwoXHUwMDI2cGZkLCAxLCAxMDApO1xuLVxuLVx0XHQvKiBSZWFkIGRlY29kZWQgSVIgKi9cbi1cdFx0cmV0ID0gcmVhZChpbnB1dGZkLCBcdTAwMjZldmVudCwgc2l6ZW9mKGV2ZW50KSk7XG4tXHRcdGlmIChyZXQgIT0gc2l6ZW9mKGV2ZW50KSkge1xuLVx0XHRcdHByaW50ZihcJiMzNDtGYWlsZWQgdG8gcmVhZCBkZWNvZGVkIElSOiAlbVxcblwmIzM0Oyk7XG4tXHRcdFx0cmV0dXJuIDE7XG4tXHRcdH1cbi1cbi1cdFx0aWYgKGV2ZW50LnR5cGUgPT0gRVZfUkVMIFx1MDAyNlx1MDAyNiBldmVudC5jb2RlID09IFJFTF9ZIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgZXZlbnQudmFsdWUgPT0gMSApIHtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0fVxuLVxuLVx0cHJvZ19jbnQgPSAxMDtcbi1cdHJldCA9IGJwZl9wcm9nX3F1ZXJ5KGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDAsIHByb2dfZmxhZ3MsIHByb2dfaWRzLFxuLVx0XHRcdCAgICAgXHUwMDI2cHJvZ19jbnQpO1xuLVx0aWYgKHJldCkge1xuLVx0XHRwcmludGYoXCYjMzQ7RmFpbGVkIHRvIHF1ZXJ5IGJwZiBwcm9ncmFtcyBvbiBsaXJjIGRldmljZTogJW1cXG5cJiMzNDspO1xuLVx0XHRyZXR1cm4gMTtcbi1cdH1cbi1cbi1cdGlmIChwcm9nX2NudCAhPSAxKSB7XG4tXHRcdHByaW50ZihcJiMzNDtFeHBlY3RlZCBvbmUgcHJvZ3JhbSB0byBiZSBhdHRhY2hlZFxcblwmIzM0Oyk7XG4tXHRcdHJldHVybiAxO1xuLVx0fVxuLVxuLVx0LyogTGV0JiMzOTtzIHRyeSBkZXRhY2hpbmcgaXQgbm93IGl0IGlzIGFjdHVhbGx5IGF0dGFjaGVkICovXG4tXHRyZXQgPSBicGZfcHJvZ19kZXRhY2gyKHByb2dmZCwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMik7XG4tXHRpZiAocmV0KSB7XG4tXHRcdHByaW50ZihcJiMzNDticGZfcHJvZ19kZXRhY2gyOiByZXR1cm5lZCAlbVxcblwmIzM0Oyk7XG4tXHRcdHJldHVybiAxO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIyOjA3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEJQRiBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8pIGJ5IGNvbnZlcnRpbmcgYW4gb2xkLXN0eWxlIHRlc3QgaW50byB0aGUgdGVzdF9wcm9ncyBmcmFtZXdvcmsuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGMxY2MwYThmZTM1ZTY3MDhmY2UwYTE4MTkzZTQ2ODk1MzFhM2FhYzMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyMCAyMjowNzozMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8uZ2l0aWdub3JlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy5naXRpZ25vcmUKaW5kZXggOTg2YTYzODkxODZiYS4uYjgxNWJmMGQ4ODc3NCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy5naXRpZ25vcmUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy5naXRpZ25vcmUKQEAgLTE3LDcgJiM0MzsxNyw2IEBAIHRlc3RfdmVyaWZpZXJfbG9nCiBmZWF0dXJlCiB1cmFuZG9tX3JlYWQKIHRlc3Rfc29ja21hcAotdGVzdF9saXJjX21vZGUyX3VzZXIKIGZsb3dfZGlzc2VjdG9yX2xvYWQKIHRlc3RfdGNwbm90aWZ5X3VzZXIKIHRlc3RfbGliYnBmCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUKaW5kZXggMmIyZjkzZGVjNDc0Yi4uZjhlYzBmNTc0NTU5YSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZQpAQCAtMTIzLDcgJiM0MzsxMjMsNiBAQCBURVNUX0ZJTEVTID0geHNrX3ByZXJlcXMuc2ggJCh3aWxkY2FyZCBwcm9ncy9idGZfZHVtcF90ZXN0X2Nhc2VfKi5jKQogCiAjIE9yZGVyIGNvcnJlc3BvbmQgdG8gJiMzOTttYWtlIHJ1bl90ZXN0cyYjMzk7IG9yZGVyCiBURVNUX1BST0dTIDo9IHRlc3Rfa21vZC5zaCBcCi0JdGVzdF9saXJjX21vZGUyLnNoIFwKIAl0ZXN0X2JwZnRvb2xfYnVpbGQuc2ggXAogCXRlc3RfZG9jX2J1aWxkLnNoIFwKIAl0ZXN0X3hzay5zaCBcCkBAIC0xNDEsNyAmIzQzOzE0MCw2IEBAIFRFU1RfR0VOX1BST0dTX0VYVEVOREVEID0gXAogCWJlbmNoIFwKIAlmbG93X2Rpc3NlY3Rvcl9sb2FkIFwKIAl0ZXN0X2NwcCBcCi0JdGVzdF9saXJjX21vZGUyX3VzZXIgXAogCXZlcmlzdGF0IFwKIAl4ZHBfZmVhdHVyZXMgXAogCXhkcF9od19tZXRhZGF0YSBcCkBAIC0zMzgsNyAmIzQzOzMzNiw2IEBAICQoT1VUUFVUKS90ZXN0X3NvY2ttYXA6ICQoQ0dST1VQX0hFTFBFUlMpICQoVEVTVElOR19IRUxQRVJTKQogJChPVVRQVVQpL3Rlc3RfdGNwbm90aWZ5X3VzZXI6ICQoQ0dST1VQX0hFTFBFUlMpICQoVEVTVElOR19IRUxQRVJTKSAkKFRSQUNFX0hFTFBFUlMpCiAkKE9VVFBVVCkvdGVzdF9zb2NrX2ZpZWxkczogJChDR1JPVVBfSEVMUEVSUykgJChURVNUSU5HX0hFTFBFUlMpCiAkKE9VVFBVVCkvdGVzdF90YWc6ICQoVEVTVElOR19IRUxQRVJTKQotJChPVVRQVVQpL3Rlc3RfbGlyY19tb2RlMl91c2VyOiAkKFRFU1RJTkdfSEVMUEVSUykKICQoT1VUUFVUKS9mbG93X2Rpc3NlY3Rvcl9sb2FkOiAkKFRFU1RJTkdfSEVMUEVSUykKICQoT1VUUFVUKS90ZXN0X21hcHM6ICQoVEVTVElOR19IRUxQRVJTKQogJChPVVRQVVQpL3Rlc3RfdmVyaWZpZXI6ICQoVEVTVElOR19IRUxQRVJTKSAkKENBUF9IRUxQRVJTKSAkKFVOUFJJVl9IRUxQRVJTKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGlyY19tb2RlMi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGlyY19tb2RlMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjhlNDg1ZGI3MGI3OGEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saXJjX21vZGUyLmMKQEAgLTAsMCAmIzQzOzEsMzM0IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvLyB0ZXN0IGlyIGRlY29kZXIKJiM0MzsvLwomIzQzOy8vIENvcHlyaWdodCAoQykgMjAxOCBTZWFuIFlvdW5nICZsdDtzZWFuQG1lc3Mub3JnJmd0OwomIzQzOwomIzQzOy8vIEEgbGlyYyBjaGFyZGV2IGlzIGEgZGV2aWNlIHJlcHJlc2VudGluZyBhIGNvbnN1bWVyIElSIChjaXIpIGRldmljZSB3aGljaAomIzQzOy8vIGNhbiByZWNlaXZlIGluZnJhcmVkIHNpZ25hbHMgZnJvbSByZW1vdGUgY29udHJvbCBhbmQvb3IgdHJhbnNtaXQgSVIuCiYjNDM7Ly8KJiM0MzsvLyBJUiBpcyBzZW50IGFzIGEgc2VyaWVzIG9mIHB1bHNlcyBhbmQgc3BhY2Ugc29tZXdoYXQgbGlrZSBtb3JzZSBjb2RlLiBUaGUKJiM0MzsvLyBCUEYgcHJvZ3JhbSBjYW4gZGVjb2RlIHRoaXMgaW50byBzY2FuY29kZXMgc28gdGhhdCByYy1jb3JlIGNhbiB0cmFuc2xhdGUKJiM0MzsvLyB0aGlzIGludG8gaW5wdXQga2V5IGNvZGVzIHVzaW5nIHRoZSByYyBrZXltYXAuCiYjNDM7Ly8KJiM0MzsvLyBUaGlzIHRlc3Qgd29ya3MgYnkgc2VuZGluZyBJUiBvdmVyIHJjLWxvb3BiYWNrLCBzbyB0aGUgSVIgaXMgcHJvY2Vzc2VkIGJ5CiYjNDM7Ly8gQlBGIGFuZCB0aGVuIGRlY29kZWQgaW50byBzY2FuY29kZXMuIFRoZSBsaXJjIGNoYXJkZXYgbXVzdCBiZSB0aGUgb25lCiYjNDM7Ly8gYXNzb2NpYXRlZCB3aXRoIHJjLWxvb3BiYWNrLCBzZWUgdGhlIG91dHB1dCBvZiBpci1rZXl0YWJsZSgxKS4KJiM0MzsvLwomIzQzOy8vIFRoZSBmb2xsb3dpbmcgQ09ORklHIG9wdGlvbnMgbXVzdCBiZSBlbmFibGVkIGZvciB0aGUgdGVzdCB0byBzdWNjZWVkOgomIzQzOy8vIENPTkZJR19SQ19DT1JFPXkKJiM0MzsvLyBDT05GSUdfQlBGX1JBV0lSX0VWRU5UPXkKJiM0MzsvLyBDT05GSUdfUkNfTE9PUEJBQ0s9eQomIzQzOy8vIENPTkZJR19MSVJDPXkKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW5wdXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbGlyYy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtnbG9iLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbWl0cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtwb2xsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2xpcmNfbW9kZTIuc2tlbC5oJiMzNDsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJlYWQgdGhlIERFVk5BTUU9IGxpbmUgb3V0IG9mIHRoZSBmaXJzdCB1ZXZlbnQgZmlsZSB0aGF0IG1hdGNoZXMKJiM0MzsgKiBwYXR0ZXJuLCBhbmQgdHVybiBpdCBpbnRvIGEgL2Rldi8mbHQ7bmFtZSZndDsgcGF0aC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCBmaW5kX2Rldm5hbWUoY29uc3QgY2hhciAqcGF0dGVybiwgY2hhciAqcGF0aCwgc2l6ZV90IHBhdGhfc3opCiYjNDM7ewomIzQzOwlnbG9iX3QgZ2wgPSB7fTsKJiM0MzsJYm9vbCBmb3VuZCA9IGZhbHNlOwomIzQzOwlGSUxFICpmOwomIzQzOwomIzQzOwlpZiAoZ2xvYihwYXR0ZXJuLCAwLCBOVUxMLCAmYW1wO2dsKSB8fCBnbC5nbF9wYXRoYyA9PSAwKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWYgPSBmb3BlbihnbC5nbF9wYXRodlswXSwgJiMzNDtyJiMzNDspOwomIzQzOwlpZiAoIWYpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJY2hhciBsaW5lWzI1Nl07CiYjNDM7CiYjNDM7CXdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGYpKSB7CiYjNDM7CQljaGFyICp2YWw7CiYjNDM7CiYjNDM7CQlpZiAoc3RybmNtcChsaW5lLCAmIzM0O0RFVk5BTUU9JiMzNDssIDgpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJdmFsID0gbGluZSAmIzQzOyA4OwomIzQzOwkJdmFsW3N0cmNzcG4odmFsLCAmIzM0O1xuJiMzNDspXSA9ICYjMzk7XDAmIzM5OzsKJiM0MzsJCXNucHJpbnRmKHBhdGgsIHBhdGhfc3osICYjMzQ7L2Rldi8lcyYjMzQ7LCB2YWwpOwomIzQzOwkJZm91bmQgPSB0cnVlOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZmNsb3NlKGYpOwomIzQzO291dDoKJiM0MzsJZ2xvYmZyZWUoJmFtcDtnbCk7CiYjNDM7CXJldHVybiBmb3VuZDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogTG9hZCByYy1sb29wYmFjayBhbmQgZmluZCB0aGUgbGlyYyBhbmQgaW5wdXQgY2hhcmRldnMgaXQgY3JlYXRlZC4gKi8KJiM0MztzdGF0aWMgYm9vbCBmaW5kX2xvb3BiYWNrX2RldmljZXMoY2hhciAqbGlyY19wYXRoLCBjaGFyICppbnB1dF9wYXRoLAomIzQzOwkJCQkgIHNpemVfdCBwYXRoX3N6KQomIzQzO3sKJiM0MzsJZ2xvYl90IGdsID0ge307CiYjNDM7CWJvb2wgZm91bmQgPSBmYWxzZTsKJiM0MzsKJiM0MzsJLyogSWdub3JlIGZhaWx1cmUsIHdlIGNoZWNrIGZvciB0aGUgcmVzdWx0aW5nIGRldmljZXMgYmVsb3cuICovCiYjNDM7CVNZU19OT0ZBSUwoJiMzNDttb2Rwcm9iZSByYy1sb29wYmFjayAmZ3Q7IC9kZXYvbnVsbCAyJmd0OyZhbXA7MSYjMzQ7KTsKJiM0MzsKJiM0MzsJaWYgKGdsb2IoJiMzNDsvc3lzL2NsYXNzL3JjL3JjKiYjMzQ7LCAwLCBOVUxMLCAmYW1wO2dsKSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlmb3IgKHNpemVfdCBpID0gMDsgaSAmbHQ7IGdsLmdsX3BhdGhjOyBpJiM0MzsmIzQzOykgewomIzQzOwkJY29uc3QgY2hhciAqcmNkaXIgPSBnbC5nbF9wYXRodltpXTsKJiM0MzsJCWNoYXIgdWV2ZW50X3BhdGhbUEFUSF9NQVhdOwomIzQzOwkJY2hhciB1ZXZlbnRbNDA5Nl07CiYjNDM7CQljaGFyIHBhdHRlcm5bUEFUSF9NQVhdOwomIzQzOwkJRklMRSAqZjsKJiM0MzsJCXNpemVfdCBuOwomIzQzOwomIzQzOwkJc25wcmludGYodWV2ZW50X3BhdGgsIHNpemVvZih1ZXZlbnRfcGF0aCksICYjMzQ7JXMvdWV2ZW50JiMzNDssIHJjZGlyKTsKJiM0MzsJCWYgPSBmb3Blbih1ZXZlbnRfcGF0aCwgJiMzNDtyJiMzNDspOwomIzQzOwkJaWYgKCFmKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJbiA9IGZyZWFkKHVldmVudCwgMSwgc2l6ZW9mKHVldmVudCkgLSAxLCBmKTsKJiM0MzsJCWZjbG9zZShmKTsKJiM0MzsJCXVldmVudFtuXSA9ICYjMzk7XDAmIzM5OzsKJiM0MzsKJiM0MzsJCWlmICghc3Ryc3RyKHVldmVudCwgJiMzNDtEUlZfTkFNRT1yYy1sb29wYmFjayYjMzQ7KSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCXNucHJpbnRmKHBhdHRlcm4sIHNpemVvZihwYXR0ZXJuKSwgJiMzNDslcy9saXJjKi91ZXZlbnQmIzM0OywgcmNkaXIpOwomIzQzOwkJaWYgKCFmaW5kX2Rldm5hbWUocGF0dGVybiwgbGlyY19wYXRoLCBwYXRoX3N6KSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCXNucHJpbnRmKHBhdHRlcm4sIHNpemVvZihwYXR0ZXJuKSwgJiMzNDslcy9pbnB1dCovZXZlbnQqL3VldmVudCYjMzQ7LCByY2Rpcik7CiYjNDM7CQlpZiAoIWZpbmRfZGV2bmFtZShwYXR0ZXJuLCBpbnB1dF9wYXRoLCBwYXRoX3N6KSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWZvdW5kID0gdHJ1ZTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlpZiAoIWZvdW5kKSB7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtObyByYyBkZXZpY2VzIGZvdW5kXG4mIzM0Oyk7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtFbmFibGUgQ09ORklHX1JDX0xPT1BCQUNLLCBDT05GSUdfUkNfTE9PUEJBQ0ssIGFuZCBDT05GSUdfTElSQ1xuJiMzNDspOwomIzQzOz8JfQomIzQzOwomIzQzOwlnbG9iZnJlZSgmYW1wO2dsKTsKJiM0MzsJcmV0dXJuIGZvdW5kOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHRlc3RfbGlyY19tb2RlMih2b2lkKQomIzQzO3sKJiM0MzsJY2hhciBsaXJjX3BhdGhbUEFUSF9NQVhdLCBpbnB1dF9wYXRoW1BBVEhfTUFYXTsKJiM0MzsJaW50IGxpcmNmZCA9IC0xLCBpbnB1dGZkID0gLTEsIHByb2dmZCwgcHJvZ2ZkMiA9IC0xOwomIzQzOwlzdHJ1Y3QgbGlyY19tb2RlMiAqc2tlbCA9IE5VTEwsICpza2VsMiA9IE5VTEw7CiYjNDM7CV9fdTMyIHByb2dfaWRzWzEwXSwgcHJvZ19mbGFnc1sxMF0sIHByb2dfY250OwomIzQzOwlzdHJ1Y3QgYnBmX3Byb2dfaW5mbyBpbmZvOwomIzQzOwlfX3UzMiBpbmZvX2xlbiwgcHJvZ19pZCwgcHJvZ19pZDI7CiYjNDM7CWludCB0ZXN0aXIxID0gMHg4ZWFkOwkvKiBrZXlkb3duIGZsYWcgKDB4ODAwMCkgfCBzY2FuY29kZSAweGVhZCAqLwomIzQzOwlpbnQgdGVzdGlyMiA9IDB4NDA4MTsJLyogcG9pbnRlcl9yZWwgZmxhZyAoMHg0MDAwKSB8IHJlbF94PTEgfCByZWxfeT0xICovCiYjNDM7CXN0cnVjdCBpbnB1dF9ldmVudCBldmVudDsKJiM0MzsJc3RydWN0IHBvbGxmZCBwZmQgPSB7fTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKGdldHVpZCgpICE9IDApIHsKJiM0MzsJCXRlc3RfX3NraXAoKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWZpbmRfbG9vcGJhY2tfZGV2aWNlcyhsaXJjX3BhdGgsIGlucHV0X3BhdGgsIHNpemVvZihsaXJjX3BhdGgpKSkgewomIzQzOwkJdGVzdF9fc2tpcCgpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNrZWwgPSBsaXJjX21vZGUyX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O2xpcmNfbW9kZTJfX29wZW5fYW5kX2xvYWQmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXByb2dmZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLSZndDtwcm9ncy5icGZfZGVjb2Rlcik7CiYjNDM7CiYjNDM7CW1lbXNldCgmYW1wO2luZm8sIDAsIHNpemVvZihpbmZvKSk7CiYjNDM7CWluZm9fbGVuID0gc2l6ZW9mKGluZm8pOwomIzQzOwlyZXQgPSBicGZfcHJvZ19nZXRfaW5mb19ieV9mZChwcm9nZmQsICZhbXA7aW5mbywgJmFtcDtpbmZvX2xlbik7CiYjNDM7CWlmICghQVNTRVJUX09LKHJldCwgJiMzNDtnZXQgZmlyc3QgcHJvZ3JhbSYjMzk7cyBpbmZvJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CXByb2dfaWQgPSBpbmZvLmlkOwomIzQzOwomIzQzOwlsaXJjZmQgPSBvcGVuKGxpcmNfcGF0aCwgT19SRFdSIHwgT19OT05CTE9DSyk7CiYjNDM7CWlmICghQVNTRVJUX0dFKGxpcmNmZCwgMCwgJiMzNDtvcGVuIGxpcmMgZGV2aWNlJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CS8qIFRyeSB0byBkZXRhY2ggaXQgYmVmb3JlIGl0IHdhcyBldmVyIGF0dGFjaGVkLCBzaG91bGQgZmFpbC4gKi8KJiM0MzsJcmV0ID0gYnBmX3Byb2dfZGV0YWNoMihwcm9nZmQsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIpOwomIzQzOwlpZiAoIUFTU0VSVF9FUShyZXQsIC1FTk9FTlQsICYjMzQ7ZGV0YWNoIHVuYXR0YWNoZWQgcHJvZ3JhbSYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlpbnB1dGZkID0gb3BlbihpbnB1dF9wYXRoLCBPX1JET05MWSB8IE9fTk9OQkxPQ0spOwomIzQzOwlpZiAoIUFTU0VSVF9HRShpbnB1dGZkLCAwLCAmIzM0O29wZW4gaW5wdXQgZGV2aWNlJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXByb2dfY250ID0gQVJSQVlfU0laRShwcm9nX2lkcyk7CiYjNDM7CXJldCA9IGJwZl9wcm9nX3F1ZXJ5KGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDAsIHByb2dfZmxhZ3MsIHByb2dfaWRzLAomIzQzOwkJCSAgICAgJmFtcDtwcm9nX2NudCk7CiYjNDM7CWlmICghQVNTRVJUX09LKHJldCwgJiMzNDtxdWVyeSBwcm9ncmFtcyBiZWZvcmUgYXR0YWNoJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWlmICghQVNTRVJUX0VRKHByb2dfY250LCAwLCAmIzM0O25vIHByb2dyYW1zIHNob3VsZCBiZSBhdHRhY2hlZCB5ZXQmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyogSW52YWxpZCBhdHRhY2ggZmxhZ3MgbXVzdCBiZSByZWplY3RlZCwgYW5kIG11c3Qgbm90IGF0dGFjaC4gKi8KJiM0MzsJcmV0ID0gYnBmX3Byb2dfYXR0YWNoKHByb2dmZCwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMSk7CiYjNDM7CWlmICghQVNTRVJUX0VRKHJldCwgLUVJTlZBTCwgJiMzNDthdHRhY2ggd2l0aCBpbnZhbGlkIGZsYWdzJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXByb2dfY250ID0gQVJSQVlfU0laRShwcm9nX2lkcyk7CiYjNDM7CXJldCA9IGJwZl9wcm9nX3F1ZXJ5KGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDAsIHByb2dfZmxhZ3MsIHByb2dfaWRzLAomIzQzOwkJCSAgICAgJmFtcDtwcm9nX2NudCk7CiYjNDM7CWlmICghQVNTRVJUX09LKHJldCwgJiMzNDtxdWVyeSBwcm9ncmFtcyBhZnRlciByZWplY3RlZCBhdHRhY2gmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKCFBU1NFUlRfRVEocHJvZ19jbnQsIDAsICYjMzQ7cmVqZWN0ZWQgYXR0YWNoIHNob3VsZCBub3QgYXR0YWNoJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXJldCA9IGJwZl9wcm9nX2F0dGFjaChwcm9nZmQsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDApOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhyZXQsICYjMzQ7YXR0YWNoIHByb2dyYW0gdG8gbGlyYyBkZXZpY2UmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyogSW52YWxpZCBxdWVyeSBmbGFncyBtdXN0IGJlIHJlamVjdGVkIHRvbywgd2l0aG91dCB1cHNldHRpbmcgc3RhdGUuICovCiYjNDM7CXByb2dfY250ID0gQVJSQVlfU0laRShwcm9nX2lkcyk7CiYjNDM7CXJldCA9IGJwZl9wcm9nX3F1ZXJ5KGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDEsIHByb2dfZmxhZ3MsIHByb2dfaWRzLAomIzQzOwkJCSAgICAgJmFtcDtwcm9nX2NudCk7CiYjNDM7CUFTU0VSVF9FUShyZXQsIC1FSU5WQUwsICYjMzQ7cXVlcnkgd2l0aCBpbnZhbGlkIGZsYWdzJiMzNDspOwomIzQzOwomIzQzOwlwcm9nX2NudCA9IEFSUkFZX1NJWkUocHJvZ19pZHMpOwomIzQzOwlyZXQgPSBicGZfcHJvZ19xdWVyeShsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwLCBwcm9nX2ZsYWdzLCBwcm9nX2lkcywKJiM0MzsJCQkgICAgICZhbXA7cHJvZ19jbnQpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhyZXQsICYjMzQ7cXVlcnkgcHJvZ3JhbXMgYWZ0ZXIgYXR0YWNoJiMzNDspKQomIzQzOwkJZ290byBvdXRfZGV0YWNoOwomIzQzOwlpZiAoIUFTU0VSVF9FUShwcm9nX2NudCwgMSwgJiMzNDtvbmUgcHJvZ3JhbSBzaG91bGQgYmUgYXR0YWNoZWQmIzM0OykpCiYjNDM7CQlnb3RvIG91dF9kZXRhY2g7CiYjNDM7CUFTU0VSVF9FUShwcm9nX2lkc1swXSwgcHJvZ19pZCwgJiMzNDtxdWVyaWVkIGlkIHNob3VsZCBtYXRjaCBhdHRhY2hlZCBwcm9ncmFtJiMzNDspOwomIzQzOwomIzQzOwkvKiBXcml0ZSByYXcgSVIgKi8KJiM0MzsJcmV0ID0gd3JpdGUobGlyY2ZkLCAmYW1wO3Rlc3RpcjEsIHNpemVvZih0ZXN0aXIxKSk7CiYjNDM7CWlmICghQVNTRVJUX0VRKHJldCwgc2l6ZW9mKHRlc3RpcjEpLCAmIzM0O3NlbmQgdGVzdCBJUiBtZXNzYWdlIDEmIzM0OykpCiYjNDM7CQlnb3RvIG91dF9kZXRhY2g7CiYjNDM7CiYjNDM7CXBmZC5mZCA9IGlucHV0ZmQ7CiYjNDM7CXBmZC5ldmVudHMgPSBQT0xMSU47CiYjNDM7CiYjNDM7CWZvciAoOzspIHsKJiM0MzsJCXBvbGwoJmFtcDtwZmQsIDEsIDEwMCk7CiYjNDM7CiYjNDM7CQkvKiBSZWFkIGRlY29kZWQgSVIgKi8KJiM0MzsJCXJldCA9IHJlYWQoaW5wdXRmZCwgJmFtcDtldmVudCwgc2l6ZW9mKGV2ZW50KSk7CiYjNDM7CQlpZiAoIUFTU0VSVF9FUShyZXQsIHNpemVvZihldmVudCksICYjMzQ7cmVhZCBkZWNvZGVkIElSIDEmIzM0OykpCiYjNDM7CQkJZ290byBvdXRfZGV0YWNoOwomIzQzOwomIzQzOwkJaWYgKGV2ZW50LnR5cGUgPT0gRVZfTVNDICZhbXA7JmFtcDsgZXZlbnQuY29kZSA9PSBNU0NfU0NBTiAmYW1wOyZhbXA7CiYjNDM7CQkgICAgZXZlbnQudmFsdWUgPT0gMHhlYWQpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogV3JpdGUgcmF3IElSICovCiYjNDM7CXJldCA9IHdyaXRlKGxpcmNmZCwgJmFtcDt0ZXN0aXIyLCBzaXplb2YodGVzdGlyMikpOwomIzQzOwlpZiAoIUFTU0VSVF9FUShyZXQsIHNpemVvZih0ZXN0aXIyKSwgJiMzNDtzZW5kIHRlc3QgSVIgbWVzc2FnZSAyJiMzNDspKQomIzQzOwkJZ290byBvdXRfZGV0YWNoOwomIzQzOwomIzQzOwlmb3IgKDs7KSB7CiYjNDM7CQlwb2xsKCZhbXA7cGZkLCAxLCAxMDApOwomIzQzOwomIzQzOwkJLyogUmVhZCBkZWNvZGVkIElSICovCiYjNDM7CQlyZXQgPSByZWFkKGlucHV0ZmQsICZhbXA7ZXZlbnQsIHNpemVvZihldmVudCkpOwomIzQzOwkJaWYgKCFBU1NFUlRfRVEocmV0LCBzaXplb2YoZXZlbnQpLCAmIzM0O3JlYWQgZGVjb2RlZCBJUiAyJiMzNDspKQomIzQzOwkJCWdvdG8gb3V0X2RldGFjaDsKJiM0MzsKJiM0MzsJCWlmIChldmVudC50eXBlID09IEVWX1JFTCAmYW1wOyZhbXA7IGV2ZW50LmNvZGUgPT0gUkVMX1kgJmFtcDsmYW1wOwomIzQzOwkJICAgIGV2ZW50LnZhbHVlID09IDEpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcHJvZ19jbnQgPSBBUlJBWV9TSVpFKHByb2dfaWRzKTsKJiM0MzsJcmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCwgcHJvZ19mbGFncywgcHJvZ19pZHMsCiYjNDM7CQkJICAgICAmYW1wO3Byb2dfY250KTsKJiM0MzsJaWYgKCFBU1NFUlRfT0socmV0LCAmIzM0O3F1ZXJ5IHByb2dyYW1zIGFmdGVyIElSIHdhcyBkZWNvZGVkJiMzNDspKQomIzQzOwkJZ290byBvdXRfZGV0YWNoOwomIzQzOwlpZiAoIUFTU0VSVF9FUShwcm9nX2NudCwgMSwgJiMzNDtvbmUgcHJvZ3JhbSBzaG91bGQgc3RpbGwgYmUgYXR0YWNoZWQmIzM0OykpCiYjNDM7CQlnb3RvIG91dF9kZXRhY2g7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBsaXJjIGNoYXJkZXYgY2FuIGhvbGQgbW9yZSB0aGFuIG9uZSBhdHRhY2hlZCBwcm9ncmFtIGF0IG9uY2UuCiYjNDM7CSAqIExvYWQgYSBzZWNvbmQsIGluZGVwZW5kZW50IGluc3RhbmNlIGFuZCBjaGVjayBpdCBjYW4gYmUgYXR0YWNoZWQKJiM0MzsJICogYWxvbmdzaWRlIHRoZSBmaXJzdCwgcXVlcmllZCwgYW5kIHRoZW4gZGV0YWNoZWQgb24gaXRzIG93bgomIzQzOwkgKiB3aXRob3V0IGRpc3R1cmJpbmcgdGhlIGZpcnN0IHByb2dyYW0mIzM5O3MgYXR0YWNobWVudC4KJiM0MzsJICovCiYjNDM7CXNrZWwyID0gbGlyY19tb2RlMl9fb3Blbl9hbmRfbG9hZCgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbDIsICYjMzQ7bGlyY19tb2RlMl9fb3Blbl9hbmRfbG9hZCAoMm5kKSYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0X2RldGFjaDsKJiM0MzsKJiM0MzsJcHJvZ2ZkMiA9IGJwZl9wcm9ncmFtX19mZChza2VsMi0mZ3Q7cHJvZ3MuYnBmX2RlY29kZXIpOwomIzQzOwomIzQzOwltZW1zZXQoJmFtcDtpbmZvLCAwLCBzaXplb2YoaW5mbykpOwomIzQzOwlpbmZvX2xlbiA9IHNpemVvZihpbmZvKTsKJiM0MzsJcmV0ID0gYnBmX3Byb2dfZ2V0X2luZm9fYnlfZmQocHJvZ2ZkMiwgJmFtcDtpbmZvLCAmYW1wO2luZm9fbGVuKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0socmV0LCAmIzM0O2dldCBzZWNvbmQgcHJvZ3JhbSYjMzk7cyBpbmZvJiMzNDspKQomIzQzOwkJZ290byBvdXRfZGV0YWNoOwomIzQzOwlwcm9nX2lkMiA9IGluZm8uaWQ7CiYjNDM7CiYjNDM7CXJldCA9IGJwZl9wcm9nX2F0dGFjaChwcm9nZmQyLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0socmV0LCAmIzM0O2F0dGFjaCBzZWNvbmQgcHJvZ3JhbSB0byBsaXJjIGRldmljZSYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0X2RldGFjaDsKJiM0MzsKJiM0MzsJcHJvZ19jbnQgPSBBUlJBWV9TSVpFKHByb2dfaWRzKTsKJiM0MzsJcmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCwgcHJvZ19mbGFncywgcHJvZ19pZHMsCiYjNDM7CQkJICAgICAmYW1wO3Byb2dfY250KTsKJiM0MzsJaWYgKCFBU1NFUlRfT0socmV0LCAmIzM0O3F1ZXJ5IHByb2dyYW1zIGFmdGVyIHNlY29uZCBhdHRhY2gmIzM0OykpCiYjNDM7CQlnb3RvIG91dF9kZXRhY2gyOwomIzQzOwlpZiAoIUFTU0VSVF9FUShwcm9nX2NudCwgMiwgJiMzNDt0d28gcHJvZ3JhbXMgc2hvdWxkIGJlIGF0dGFjaGVkJiMzNDspKQomIzQzOwkJZ290byBvdXRfZGV0YWNoMjsKJiM0MzsJQVNTRVJUX1RSVUUoKHByb2dfaWRzWzBdID09IHByb2dfaWQgJmFtcDsmYW1wOyBwcm9nX2lkc1sxXSA9PSBwcm9nX2lkMikgfHwKJiM0MzsJCSAgICAocHJvZ19pZHNbMF0gPT0gcHJvZ19pZDIgJmFtcDsmYW1wOyBwcm9nX2lkc1sxXSA9PSBwcm9nX2lkKSwKJiM0MzsJCSAgICAmIzM0O3F1ZXJpZWQgaWRzIHNob3VsZCBiZSB0aGUgdHdvIGF0dGFjaGVkIHByb2dyYW1zJiMzNDspOwomIzQzOwomIzQzOwkvKiBEZXRhY2ggdGhlIHNlY29uZCBwcm9ncmFtOyB0aGUgZmlyc3Qgc2hvdWxkIHJlbWFpbiBhdHRhY2hlZC4gKi8KJiM0MzsJcmV0ID0gYnBmX3Byb2dfZGV0YWNoMihwcm9nZmQyLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0socmV0LCAmIzM0O2RldGFjaCBzZWNvbmQgcHJvZ3JhbSYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0X2RldGFjaDI7CiYjNDM7CiYjNDM7CS8qIERldGFjaGluZyBhbiBhbHJlYWR5LWRldGFjaGVkIHByb2dyYW0gc2hvdWxkIG5vdyBmYWlsLiAqLwomIzQzOwlyZXQgPSBicGZfcHJvZ19kZXRhY2gyKHByb2dmZDIsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIpOwomIzQzOwlBU1NFUlRfRVEocmV0LCAtRU5PRU5ULCAmIzM0O2RldGFjaCBzZWNvbmQgcHJvZ3JhbSBhZ2FpbiYjMzQ7KTsKJiM0MzsKJiM0MzsJcHJvZ19jbnQgPSBBUlJBWV9TSVpFKHByb2dfaWRzKTsKJiM0MzsJcmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCwgcHJvZ19mbGFncywgcHJvZ19pZHMsCiYjNDM7CQkJICAgICAmYW1wO3Byb2dfY250KTsKJiM0MzsJaWYgKCFBU1NFUlRfT0socmV0LCAmIzM0O3F1ZXJ5IHByb2dyYW1zIGFmdGVyIHNlY29uZCBkZXRhY2gmIzM0OykpCiYjNDM7CQlnb3RvIG91dF9kZXRhY2g7CiYjNDM7CWlmICghQVNTRVJUX0VRKHByb2dfY250LCAxLCAmIzM0O29uZSBwcm9ncmFtIHNob3VsZCByZW1haW4gYXR0YWNoZWQmIzM0OykpCiYjNDM7CQlnb3RvIG91dF9kZXRhY2g7CiYjNDM7CUFTU0VSVF9FUShwcm9nX2lkc1swXSwgcHJvZ19pZCwgJiMzNDtyZW1haW5pbmcgcHJvZ3JhbSBzaG91bGQgYmUgdGhlIGZpcnN0IG9uZSYjMzQ7KTsKJiM0MzsKJiM0MztvdXRfZGV0YWNoOgomIzQzOwkvKiBMZXQmIzM5O3MgdHJ5IGRldGFjaGluZyBpdCBub3cgaXQgaXMgYWN0dWFsbHkgYXR0YWNoZWQuICovCiYjNDM7CXJldCA9IGJwZl9wcm9nX2RldGFjaDIocHJvZ2ZkLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyKTsKJiM0MzsJQVNTRVJUX09LKHJldCwgJiMzNDtkZXRhY2ggcHJvZ3JhbSBmcm9tIGxpcmMgZGV2aWNlJiMzNDspOwomIzQzOwomIzQzOwkvKiBEZXRhY2hpbmcgaXQgYWdhaW4gc2hvdWxkIG5vdyBmYWlsIHRoZSBzYW1lIHdheS4gKi8KJiM0MzsJcmV0ID0gYnBmX3Byb2dfZGV0YWNoMihwcm9nZmQsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIpOwomIzQzOwlBU1NFUlRfRVEocmV0LCAtRU5PRU5ULCAmIzM0O2RldGFjaCBwcm9ncmFtIGZyb20gbGlyYyBkZXZpY2UgYWdhaW4mIzM0Oyk7CiYjNDM7CWdvdG8gb3V0OwomIzQzOwomIzQzO291dF9kZXRhY2gyOgomIzQzOwkvKiBCZXN0LWVmZm9ydCBjbGVhbnVwIG9mIHRoZSBzZWNvbmQgcHJvZ3JhbSBiZWZvcmUgYmFpbGluZyBvdXQuICovCiYjNDM7CWJwZl9wcm9nX2RldGFjaDIocHJvZ2ZkMiwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMik7CiYjNDM7CWdvdG8gb3V0X2RldGFjaDsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CWlmIChpbnB1dGZkICZndDs9IDApCiYjNDM7CQljbG9zZShpbnB1dGZkKTsKJiM0MzsJaWYgKGxpcmNmZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2UobGlyY2ZkKTsKJiM0MzsJbGlyY19tb2RlMl9fZGVzdHJveShza2VsMik7CiYjNDM7CWxpcmNfbW9kZTJfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xpcmNfbW9kZTIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9saXJjX21vZGUyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uOTgxMzdmM2M1YzAzZAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9saXJjX21vZGUyLmMKQEAgLTAsMCAmIzQzOzEsMzIgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8vIHRlc3QgaXIgZGVjb2RlcgomIzQzOy8vCiYjNDM7Ly8gQ29weXJpZ2h0IChDKSAyMDE4IFNlYW4gWW91bmcgJmx0O3NlYW5AbWVzcy5vcmcmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JwZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9saXJjLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOwomIzQzO1NFQygmIzM0O2xpcmNfbW9kZTImIzM0OykKJiM0MztpbnQgYnBmX2RlY29kZXIodW5zaWduZWQgaW50ICpzYW1wbGUpCiYjNDM7ewomIzQzOwlpZiAoTElSQ19JU19QVUxTRSgqc2FtcGxlKSkgewomIzQzOwkJdW5zaWduZWQgaW50IGR1cmF0aW9uID0gTElSQ19WQUxVRSgqc2FtcGxlKTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBGbGFnIGJpdHMgcGlja2VkIGRlbGliZXJhdGVseSBsb3c6IHJjLWxvb3BiYWNrIHNpbXVsYXRlcwomIzQzOwkJICogYSByZWNlaXZlciBvdmVyZmxvdyBmb3IgYW55IHB1bHNlIG92ZXIgTVNfVE9fVVMoNTApIChzZWUKJiM0MzsJCSAqIGxvb3BfdHhfaXIoKSBpbiByYy1sb29wYmFjay5jKSwgd2hpY2ggd291bGQgc2lsZW50bHkKJiM0MzsJCSAqIHN3YWxsb3cgdGhlIHNhbXBsZSBiZWZvcmUgaXQgZXZlciByZWFjaGVzIHRoaXMgZGVjb2Rlci4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGR1cmF0aW9uICZhbXA7IDB4ODAwMCkKJiM0MzsJCQlicGZfcmNfa2V5ZG93bihzYW1wbGUsIDB4NDAsIGR1cmF0aW9uICZhbXA7IDB4M2ZmZiwgMCk7CiYjNDM7CQlpZiAoZHVyYXRpb24gJmFtcDsgMHg0MDAwKQomIzQzOwkJCWJwZl9yY19wb2ludGVyX3JlbChzYW1wbGUsIChkdXJhdGlvbiAmZ3Q7Jmd0OyA3KSAmYW1wOyAweDdmLAomIzQzOwkJCQkJICAgZHVyYXRpb24gJmFtcDsgMHg3Zik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2xpcmNfbW9kZTJfa2Vybi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfbGlyY19tb2RlMl9rZXJuLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiZTQyODRjMDMyZmUuLjAwMDAwMDAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfbGlyY19tb2RlMl9rZXJuLmMKJiM0MzsmIzQzOyYjNDM7IC9kZXYvbnVsbApAQCAtMSwyNiAmIzQzOzAsMCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKLS8vIHRlc3QgaXIgZGVjb2RlcgotLy8KLS8vIENvcHlyaWdodCAoQykgMjAxOCBTZWFuIFlvdW5nICZsdDtzZWFuQG1lc3Mub3JnJmd0OwotCi0jaW5jbHVkZSAmbHQ7bGludXgvYnBmLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgvbGlyYy5oJmd0OwotI2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwotCi1TRUMoJiMzNDtsaXJjX21vZGUyJiMzNDspCi1pbnQgYnBmX2RlY29kZXIodW5zaWduZWQgaW50ICpzYW1wbGUpCi17Ci0JaWYgKExJUkNfSVNfUFVMU0UoKnNhbXBsZSkpIHsKLQkJdW5zaWduZWQgaW50IGR1cmF0aW9uID0gTElSQ19WQUxVRSgqc2FtcGxlKTsKLQotCQlpZiAoZHVyYXRpb24gJmFtcDsgMHgxMDAwKQotCQkJYnBmX3JjX2tleWRvd24oc2FtcGxlLCAweDQwLCBkdXJhdGlvbiAmYW1wOyAweGZmZmYsIDApOwotCQlpZiAoZHVyYXRpb24gJmFtcDsgMHgyMDAwKQotCQkJYnBmX3JjX3BvaW50ZXJfcmVsKHNhbXBsZSwgKGR1cmF0aW9uICZndDsmZ3Q7IDgpICZhbXA7IDB4ZmYsCi0JCQkJCSAgIGR1cmF0aW9uICZhbXA7IDB4ZmYpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1jaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9saXJjX21vZGUyLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbGlyY19tb2RlMi5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNTI1MmI5MWY0OGExOC4uMDAwMDAwMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9saXJjX21vZGUyLnNoCiYjNDM7JiM0MzsmIzQzOyAvZGV2L251bGwKQEAgLTEsNDEgJiM0MzswLDAgQEAKLSMhL2Jpbi9iYXNoCi0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCi0KLSMgS3NlbGZ0ZXN0IGZyYW1ld29yayByZXF1aXJlbWVudCAtIFNLSVAgY29kZSBpcyA0Lgota3NmdF9za2lwPTQKLXJldD0ka3NmdF9za2lwCi0KLW1zZz0mIzM0O3NraXAgYWxsIHRlc3RzOiYjMzQ7Ci1pZiBbICRVSUQgIT0gMCBdOyB0aGVuCi0JZWNobyAkbXNnIHBsZWFzZSBydW4gdGhpcyBhcyByb290ICZndDsmYW1wOzIKLQlleGl0ICRrc2Z0X3NraXAKLWZpCi0KLUdSRUVOPSYjMzk7XDAzM1swOzkybSYjMzk7Ci1SRUQ9JiMzOTtcMDMzWzA7MzFtJiMzOTsKLU5DPSYjMzk7XDAzM1swbSYjMzk7ICMgTm8gQ29sb3IKLQotbW9kcHJvYmUgcmMtbG9vcGJhY2sKLQotZm9yIGkgaW4gL3N5cy9jbGFzcy9yYy9yYyoKLWRvCi0JaWYgZ3JlcCAtcSBEUlZfTkFNRT1yYy1sb29wYmFjayAkaS91ZXZlbnQKLQl0aGVuCi0JCUxJUkNERVY9JChncmVwIERFVk5BTUU9ICRpL2xpcmMqL3VldmVudCB8IHNlZCBzUURFVk5BTUU9US9kZXYvUSkKLQkJSU5QVVRERVY9JChncmVwIERFVk5BTUU9ICRpL2lucHV0Ki9ldmVudCovdWV2ZW50IHwgc2VkIHNRREVWTkFNRT1RL2Rldi9RKQotCWZpCi1kb25lCi0KLWlmIFsgLW4gJiMzNDskTElSQ0RFViYjMzQ7IF07Ci10aGVuCi0JVFlQRT1saXJjX21vZGUyCi0JLi90ZXN0X2xpcmNfbW9kZTJfdXNlciAkTElSQ0RFViAkSU5QVVRERVYKLQlyZXQ9JD8KLQlpZiBbICRyZXQgLW5lIDAgXTsgdGhlbgotCQllY2hvIC1lICR7UkVEfSYjMzQ7RkFJTDogJFRZUEUmIzM0OyR7TkN9Ci0JZWxzZQotCQllY2hvIC1lICR7R1JFRU59JiMzNDtQQVNTOiAkVFlQRSYjMzQ7JHtOQ30KLQlmaQotZmkKLQotZXhpdCAkcmV0CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9saXJjX21vZGUyX3VzZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xpcmNfbW9kZTJfdXNlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDE5MWRhMjBkMTQzLi4wMDAwMDAwMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xpcmNfbW9kZTJfdXNlci5jCiYjNDM7JiM0MzsmIzQzOyAvZGV2L251bGwKQEAgLTEsMTc3ICYjNDM7MCwwIEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAotLy8gdGVzdCBpciBkZWNvZGVyCi0vLwotLy8gQ29weXJpZ2h0IChDKSAyMDE4IFNlYW4gWW91bmcgJmx0O3NlYW5AbWVzcy5vcmcmZ3Q7Ci0KLS8vIEEgbGlyYyBjaGFyZGV2IGlzIGEgZGV2aWNlIHJlcHJlc2VudGluZyBhIGNvbnN1bWVyIElSIChjaXIpIGRldmljZSB3aGljaAotLy8gY2FuIHJlY2VpdmUgaW5mcmFyZWQgc2lnbmFscyBmcm9tIHJlbW90ZSBjb250cm9sIGFuZC9vciB0cmFuc21pdCBJUi4KLS8vCi0vLyBJUiBpcyBzZW50IGFzIGEgc2VyaWVzIG9mIHB1bHNlcyBhbmQgc3BhY2Ugc29tZXdoYXQgbGlrZSBtb3JzZSBjb2RlLiBUaGUKLS8vIEJQRiBwcm9ncmFtIGNhbiBkZWNvZGUgdGhpcyBpbnRvIHNjYW5jb2RlcyBzbyB0aGF0IHJjLWNvcmUgY2FuIHRyYW5zbGF0ZQotLy8gdGhpcyBpbnRvIGlucHV0IGtleSBjb2RlcyB1c2luZyB0aGUgcmMga2V5bWFwLgotLy8KLS8vIFRoaXMgdGVzdCB3b3JrcyBieSBzZW5kaW5nIElSIG92ZXIgcmMtbG9vcGJhY2ssIHNvIHRoZSBJUiBpcyBwcm9jZXNzZWQgYnkKLS8vIEJQRiBhbmQgdGhlbiBkZWNvZGVkIGludG8gc2NhbmNvZGVzLiBUaGUgbGlyYyBjaGFyZGV2IG11c3QgYmUgdGhlIG9uZQotLy8gYXNzb2NpYXRlZCB3aXRoIHJjLWxvb3BiYWNrLCBzZWUgdGhlIG91dHB1dCBvZiBpci1rZXl0YWJsZSgxKS4KLS8vCi0vLyBUaGUgZm9sbG93aW5nIENPTkZJRyBvcHRpb25zIG11c3QgYmUgZW5hYmxlZCBmb3IgdGhlIHRlc3QgdG8gc3VjY2VlZDoKLS8vIENPTkZJR19SQ19DT1JFPXkKLS8vIENPTkZJR19CUEZfUkFXSVJfRVZFTlQ9eQotLy8gQ09ORklHX1JDX0xPT1BCQUNLPXkKLQotLy8gU3RlcHM6Ci0vLyAxLiBPcGVuIHRoZSAvZGV2L2xpcmNOIGRldmljZSBmb3IgcmMtbG9vcGJhY2sgKGdpdmVuIG9uIGNvbW1hbmQgbGluZSkKLS8vIDIuIEF0dGFjaCBicGZfbGlyY19tb2RlMiBwcm9ncmFtIHdoaWNoIGRlY29kZXMgc29tZSBJUi4KLS8vIDMuIFNlbmQgc29tZSBJUiB0byB0aGUgc2FtZSBJUiBkZXZpY2U7IHNpbmNlIGl0IGlzIGxvb3BiYWNrLCB0aGlzIHdpbGwKLS8vICAgIGVuZCB1cCBpbiB0aGUgYnBmIHByb2dyYW0KLS8vIDQuIGJwZiBwcm9ncmFtIHNob3VsZCBkZWNvZGUgSVIgYW5kIHJlcG9ydCBrZXljb2RlCi0vLyA1LiBXZSBjYW4gcmVhZCBrZXljb2RlIGZyb20gc2FtZSAvZGV2L2xpcmMgZGV2aWNlCi0KLSNpbmNsdWRlICZsdDtsaW51eC9icGYuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9pbnB1dC5oJmd0OwotI2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKLSNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKLSNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKLSNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKLSNpbmNsdWRlICZsdDtwb2xsLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7c3lzL3R5cGVzLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7c3lzL2lvY3RsLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7c3lzL3N0YXQuaCZndDsKLSNpbmNsdWRlICZsdDtmY250bC5oJmd0OwotCi0jaW5jbHVkZSAmIzM0O2JwZl91dGlsLmgmIzM0OwotI2luY2x1ZGUgJmx0O2JwZi9icGYuaCZndDsKLSNpbmNsdWRlICZsdDticGYvbGliYnBmLmgmZ3Q7Ci0KLSNpbmNsdWRlICYjMzQ7dGVzdGluZ19oZWxwZXJzLmgmIzM0OwotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0Jc3RydWN0IGJwZl9vYmplY3QgKm9iajsKLQlpbnQgcmV0LCBsaXJjZmQsIHByb2dmZCwgaW5wdXRmZDsKLQlpbnQgdGVzdGlyMSA9IDB4MWVhZDsKLQlpbnQgdGVzdGlyMiA9IDB4MjEwMTsKLQl1MzIgcHJvZ19pZHNbMTBdLCBwcm9nX2ZsYWdzWzEwXSwgcHJvZ19jbnQ7Ci0KLQlpZiAoYXJnYyAhPSAzKSB7Ci0JCXByaW50ZigmIzM0O1VzYWdlOiAlcyAvZGV2L2xpcmNOIC9kZXYvaW5wdXQvZXZlbnRNXG4mIzM0OywgYXJndlswXSk7Ci0JCXJldHVybiAyOwotCX0KLQotCXJldCA9IGJwZl9wcm9nX3Rlc3RfbG9hZCgmIzM0O3Rlc3RfbGlyY19tb2RlMl9rZXJuLmJwZi5vJiMzNDssCi0JCQkJIEJQRl9QUk9HX1RZUEVfTElSQ19NT0RFMiwgJmFtcDtvYmosICZhbXA7cHJvZ2ZkKTsKLQlpZiAocmV0KSB7Ci0JCXByaW50ZigmIzM0O0ZhaWxlZCB0byBsb2FkIGJwZiBwcm9ncmFtXG4mIzM0Oyk7Ci0JCXJldHVybiAxOwotCX0KLQotCWxpcmNmZCA9IG9wZW4oYXJndlsxXSwgT19SRFdSIHwgT19OT05CTE9DSyk7Ci0JaWYgKGxpcmNmZCA9PSAtMSkgewotCQlwcmludGYoJiMzNDtmYWlsZWQgdG8gb3BlbiBsaXJjIGRldmljZSAlczogJW1cbiYjMzQ7LCBhcmd2WzFdKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JLyogTGV0JiMzOTtzIHRyeSBkZXRhY2ggaXQgYmVmb3JlIGl0IHdhcyBldmVyIGF0dGFjaGVkICovCi0JcmV0ID0gYnBmX3Byb2dfZGV0YWNoMihwcm9nZmQsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIpOwotCWlmIChyZXQgIT0gLUVOT0VOVCkgewotCQlwcmludGYoJiMzNDticGZfcHJvZ19kZXRhY2gyIG5vdCBhdHRhY2hlZCBzaG91bGQgZmFpbDogJW1cbiYjMzQ7KTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JaW5wdXRmZCA9IG9wZW4oYXJndlsyXSwgT19SRE9OTFkgfCBPX05PTkJMT0NLKTsKLQlpZiAoaW5wdXRmZCA9PSAtMSkgewotCQlwcmludGYoJiMzNDtmYWlsZWQgdG8gb3BlbiBpbnB1dCBkZXZpY2UgJXM6ICVtXG4mIzM0OywgYXJndlsxXSk7Ci0JCXJldHVybiAxOwotCX0KLQotCXByb2dfY250ID0gMTA7Ci0JcmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCwgcHJvZ19mbGFncywgcHJvZ19pZHMsCi0JCQkgICAgICZhbXA7cHJvZ19jbnQpOwotCWlmIChyZXQpIHsKLQkJcHJpbnRmKCYjMzQ7RmFpbGVkIHRvIHF1ZXJ5IGJwZiBwcm9ncmFtcyBvbiBsaXJjIGRldmljZTogJW1cbiYjMzQ7KTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JaWYgKHByb2dfY250ICE9IDApIHsKLQkJcHJpbnRmKCYjMzQ7RXhwZWN0ZWQgbm90aGluZyB0byBiZSBhdHRhY2hlZFxuJiMzNDspOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlyZXQgPSBicGZfcHJvZ19hdHRhY2gocHJvZ2ZkLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwKTsKLQlpZiAocmV0KSB7Ci0JCXByaW50ZigmIzM0O0ZhaWxlZCB0byBhdHRhY2ggYnBmIHRvIGxpcmMgZGV2aWNlOiAlbVxuJiMzNDspOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQkvKiBXcml0ZSByYXcgSVIgKi8KLQlyZXQgPSB3cml0ZShsaXJjZmQsICZhbXA7dGVzdGlyMSwgc2l6ZW9mKHRlc3RpcjEpKTsKLQlpZiAocmV0ICE9IHNpemVvZih0ZXN0aXIxKSkgewotCQlwcmludGYoJiMzNDtGYWlsZWQgdG8gc2VuZCB0ZXN0IElSIG1lc3NhZ2U6ICVtXG4mIzM0Oyk7Ci0JCXJldHVybiAxOwotCX0KLQotCXN0cnVjdCBwb2xsZmQgcGZkID0geyAuZmQgPSBpbnB1dGZkLCAuZXZlbnRzID0gUE9MTElOIH07Ci0Jc3RydWN0IGlucHV0X2V2ZW50IGV2ZW50OwotCi0JZm9yICg7OykgewotCQlwb2xsKCZhbXA7cGZkLCAxLCAxMDApOwotCi0JCS8qIFJlYWQgZGVjb2RlZCBJUiAqLwotCQlyZXQgPSByZWFkKGlucHV0ZmQsICZhbXA7ZXZlbnQsIHNpemVvZihldmVudCkpOwotCQlpZiAocmV0ICE9IHNpemVvZihldmVudCkpIHsKLQkJCXByaW50ZigmIzM0O0ZhaWxlZCB0byByZWFkIGRlY29kZWQgSVI6ICVtXG4mIzM0Oyk7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCi0JCWlmIChldmVudC50eXBlID09IEVWX01TQyAmYW1wOyZhbXA7IGV2ZW50LmNvZGUgPT0gTVNDX1NDQU4gJmFtcDsmYW1wOwotCQkgICAgZXZlbnQudmFsdWUgPT0gMHgxZWFkKSB7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCS8qIFdyaXRlIHJhdyBJUiAqLwotCXJldCA9IHdyaXRlKGxpcmNmZCwgJmFtcDt0ZXN0aXIyLCBzaXplb2YodGVzdGlyMikpOwotCWlmIChyZXQgIT0gc2l6ZW9mKHRlc3RpcjIpKSB7Ci0JCXByaW50ZigmIzM0O0ZhaWxlZCB0byBzZW5kIHRlc3QgSVIgbWVzc2FnZTogJW1cbiYjMzQ7KTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JZm9yICg7OykgewotCQlwb2xsKCZhbXA7cGZkLCAxLCAxMDApOwotCi0JCS8qIFJlYWQgZGVjb2RlZCBJUiAqLwotCQlyZXQgPSByZWFkKGlucHV0ZmQsICZhbXA7ZXZlbnQsIHNpemVvZihldmVudCkpOwotCQlpZiAocmV0ICE9IHNpemVvZihldmVudCkpIHsKLQkJCXByaW50ZigmIzM0O0ZhaWxlZCB0byByZWFkIGRlY29kZWQgSVI6ICVtXG4mIzM0Oyk7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCi0JCWlmIChldmVudC50eXBlID09IEVWX1JFTCAmYW1wOyZhbXA7IGV2ZW50LmNvZGUgPT0gUkVMX1kgJmFtcDsmYW1wOwotCQkgICAgZXZlbnQudmFsdWUgPT0gMSApIHsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JcHJvZ19jbnQgPSAxMDsKLQlyZXQgPSBicGZfcHJvZ19xdWVyeShsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwLCBwcm9nX2ZsYWdzLCBwcm9nX2lkcywKLQkJCSAgICAgJmFtcDtwcm9nX2NudCk7Ci0JaWYgKHJldCkgewotCQlwcmludGYoJiMzNDtGYWlsZWQgdG8gcXVlcnkgYnBmIHByb2dyYW1zIG9uIGxpcmMgZGV2aWNlOiAlbVxuJiMzNDspOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlpZiAocHJvZ19jbnQgIT0gMSkgewotCQlwcmludGYoJiMzNDtFeHBlY3RlZCBvbmUgcHJvZ3JhbSB0byBiZSBhdHRhY2hlZFxuJiMzNDspOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQkvKiBMZXQmIzM5O3MgdHJ5IGRldGFjaGluZyBpdCBub3cgaXQgaXMgYWN0dWFsbHkgYXR0YWNoZWQgKi8KLQlyZXQgPSBicGZfcHJvZ19kZXRhY2gyKHByb2dmZCwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMik7Ci0JaWYgKHJldCkgewotCQlwcmludGYoJiMzNDticGZfcHJvZ19kZXRhY2gyOiByZXR1cm5lZCAlbVxuJiMzNDspOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjI6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxMjUKCQkJCQkJCW91dHB1dDogODAKCQkJCQkJCXRob3VnaHRzOiAzODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQlBGIFNlbGZ0ZXN0IENvbnZlcnNpb24gUmV2aWV3KioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgcmVmYWN0b3JzIHRoZSBgbGlyY19tb2RlMmAgQlBGIHNlbGZ0ZXN0cy4gQmFzaWNhbGx5LCBpdCYjMzk7cyB0YWtpbmcgYW4gb2xkLCBjbHVua2llciBzdHlsZSB0ZXN0IGFuZCBtb2Rlcm5pemluZyBpdCwgbW92aW5nIGl0IG92ZXIgdG8gdGhlIGB0ZXN0X3Byb2dzYCBmcmFtZXdvcmsuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGlzICphY3R1YWxseSogY2hhbmdlcyBhbnl0aGluZyBjb3JlIHRvIHRoZSBrZXJuZWwsIG9yIGlmIGl0JiMzOTtzIGp1c3QgYSByZWZhY3RvcmluZyBvZiB0aGUgdGVzdCBpdHNlbGYuCgpGaXJzdCBpbnN0aW5jdCBpcyB0aGF0IGl0ICpzaG91bGRuJiMzOTt0KiB0b3VjaCBrZXJuZWwgZnVuY3Rpb25hbGl0eS4gSXQmIzM5O3MgYWxsIHdpdGhpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9gIGRpcmVjdG9yeSwgd2hpY2ggaXMgZXhhY3RseSB3aGVyZSBJIGV4cGVjdCB0byBzZWUgdGVzdCBjb2RlLiBPa2F5LCBsZXQmIzM5O3MgY29uZmlybSB0aGF0IHdpdGggYSBtb3JlIHRob3JvdWdoIGNoZWNrIG9mIHRoZSBkaWZmLgoKQWxyaWdodCwgdGhlIGZpbGVzIG1vZGlmaWVkIGFyZTogYC5naXRpZ25vcmVgLCBgTWFrZWZpbGVgLCBhbmQgdGhlIG1haW4gdGVzdCBmaWxlcy4gU3BlY2lmaWNhbGx5OiBgcHJvZ190ZXN0cy9saXJjX21vZGUyLmNgLCBgcHJvZ3MvbGlyY19tb2RlMi5jYC4gVGhlIG9sZCBzdHVmZiDigJMgYHRlc3RfbGlyY19tb2RlMl9rZXJuLmNgLCBgdGVzdF9saXJjX21vZGUyLnNoYCwgYW5kIGB0ZXN0X2xpcmNfbW9kZTJfdXNlci5jYCDigJMgYXJlIGFsbCBiZWluZyAqZGVsZXRlZCouIFNvLCB3ZSYjMzk7cmUgcmVwbGFjaW5nIHRoZSBvbGQgdGVzdCB3aXRoIHRoZSBuZXcgb25lLiBObyBrZXJuZWwgc291cmNlIGNvZGUgaXMgYmVpbmcgbW9kaWZpZWQgb3V0c2lkZSBvZiBgdG9vbHMvYC4gVGhpcyBjb25maXJtcyBteSBpbml0aWFsIGFzc2Vzc21lbnQuCgpHaXZlbiB0aGF0IHRoaXMgaXMgYSBwdXJlbHkgc2VsZnRlc3QtcmVsYXRlZCBjaGFuZ2UsIEkmIzM5O20gY29uZmlkZW50IHRoZXJlIGFyZSB6ZXJvIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZi4gVGhpcyBtZWFucyB3ZSYjMzk7cmUgc2FmZSB0byBtYXJrIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgQlBGIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLykgYnkgY29udmVydGluZyBhbiBvbGQtc3R5bGUgdGVzdCBpbnRvIHRoZSB0ZXN0X3Byb2dzIGZyYW1ld29yay4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEJQRiBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8pIGJ5IGNvbnZlcnRpbmcgYW4gb2xkLXN0eWxlIHRlc3QgaW50byB0aGUgdGVzdF9wcm9ncyBmcmFtZXdvcmsuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMjowNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjI6MDc6MzMuMTIzMzU1MzMyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTcwNDI5NzI3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgQlBGIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLykgYnkgY29udmVydGluZyBhbiBvbGQtc3R5bGUgdGVzdCBpbnRvIHRoZSB0ZXN0X3Byb2dzIGZyYW1ld29yay4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMjowNzozMy4xMjMzNjAwMjJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTY5ODQxNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjMWNjMGE4ZmUzNWU2NzA4ZmNlMGExODE5M2U0Njg5NTMxYTNhYWMzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDIwIDIyOjA3OjMxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8uZ2l0aWdub3JlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy5naXRpZ25vcmVcXG5pbmRleCA5ODZhNjM4OTE4NmJhLi5iODE1YmYwZDg4Nzc0IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8uZ2l0aWdub3JlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy5naXRpZ25vcmVcXG5AQCAtMTcsNyArMTcsNiBAQCB0ZXN0X3ZlcmlmaWVyX2xvZ1xcbiBmZWF0dXJlXFxuIHVyYW5kb21fcmVhZFxcbiB0ZXN0X3NvY2ttYXBcXG4tdGVzdF9saXJjX21vZGUyX3VzZXJcXG4gZmxvd19kaXNzZWN0b3JfbG9hZFxcbiB0ZXN0X3RjcG5vdGlmeV91c2VyXFxuIHRlc3RfbGliYnBmXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxcbmluZGV4IDJiMmY5M2RlYzQ3NGIuLmY4ZWMwZjU3NDU1OWEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXFxuQEAgLTEyMyw3ICsxMjMsNiBAQCBURVNUX0ZJTEVTID0geHNrX3ByZXJlcXMuc2ggJCh3aWxkY2FyZCBwcm9ncy9idGZfZHVtcF90ZXN0X2Nhc2VfKi5jKVxcbiBcXG4gIyBPcmRlciBjb3JyZXNwb25kIHRvICdtYWtlIHJ1bl90ZXN0cycgb3JkZXJcXG4gVEVTVF9QUk9HUyA6PSB0ZXN0X2ttb2Quc2ggXFxcXFxcbi1cXHR0ZXN0X2xpcmNfbW9kZTIuc2ggXFxcXFxcbiBcXHR0ZXN0X2JwZnRvb2xfYnVpbGQuc2ggXFxcXFxcbiBcXHR0ZXN0X2RvY19idWlsZC5zaCBcXFxcXFxuIFxcdHRlc3RfeHNrLnNoIFxcXFxcXG5AQCAtMTQxLDcgKzE0MCw2IEBAIFRFU1RfR0VOX1BST0dTX0VYVEVOREVEID0gXFxcXFxcbiBcXHRiZW5jaCBcXFxcXFxuIFxcdGZsb3dfZGlzc2VjdG9yX2xvYWQgXFxcXFxcbiBcXHR0ZXN0X2NwcCBcXFxcXFxuLVxcdHRlc3RfbGlyY19tb2RlMl91c2VyIFxcXFxcXG4gXFx0dmVyaXN0YXQgXFxcXFxcbiBcXHR4ZHBfZmVhdHVyZXMgXFxcXFxcbiBcXHR4ZHBfaHdfbWV0YWRhdGEgXFxcXFxcbkBAIC0zMzgsNyArMzM2LDYgQEAgJChPVVRQVVQpL3Rlc3Rfc29ja21hcDogJChDR1JPVVBfSEVMUEVSUykgJChURVNUSU5HX0hFTFBFUlMpXFxuICQoT1VUUFVUKS90ZXN0X3RjcG5vdGlmeV91c2VyOiAkKENHUk9VUF9IRUxQRVJTKSAkKFRFU1RJTkdfSEVMUEVSUykgJChUUkFDRV9IRUxQRVJTKVxcbiAkKE9VVFBVVCkvdGVzdF9zb2NrX2ZpZWxkczogJChDR1JPVVBfSEVMUEVSUykgJChURVNUSU5HX0hFTFBFUlMpXFxuICQoT1VUUFVUKS90ZXN0X3RhZzogJChURVNUSU5HX0hFTFBFUlMpXFxuLSQoT1VUUFVUKS90ZXN0X2xpcmNfbW9kZTJfdXNlcjogJChURVNUSU5HX0hFTFBFUlMpXFxuICQoT1VUUFVUKS9mbG93X2Rpc3NlY3Rvcl9sb2FkOiAkKFRFU1RJTkdfSEVMUEVSUylcXG4gJChPVVRQVVQpL3Rlc3RfbWFwczogJChURVNUSU5HX0hFTFBFUlMpXFxuICQoT1VUUFVUKS90ZXN0X3ZlcmlmaWVyOiAkKFRFU1RJTkdfSEVMUEVSUykgJChDQVBfSEVMUEVSUykgJChVTlBSSVZfSEVMUEVSUylcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGlyY19tb2RlMi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGlyY19tb2RlMi5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi44ZTQ4NWRiNzBiNzhhXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpcmNfbW9kZTIuY1xcbkBAIC0wLDAgKzEsMzM0IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8vIHRlc3QgaXIgZGVjb2RlclxcbisvL1xcbisvLyBDb3B5cmlnaHQgKEMpIDIwMTggU2VhbiBZb3VuZyBcXHUwMDNjc2VhbkBtZXNzLm9yZ1xcdTAwM2VcXG4rXFxuKy8vIEEgbGlyYyBjaGFyZGV2IGlzIGEgZGV2aWNlIHJlcHJlc2VudGluZyBhIGNvbnN1bWVyIElSIChjaXIpIGRldmljZSB3aGljaFxcbisvLyBjYW4gcmVjZWl2ZSBpbmZyYXJlZCBzaWduYWxzIGZyb20gcmVtb3RlIGNvbnRyb2wgYW5kL29yIHRyYW5zbWl0IElSLlxcbisvL1xcbisvLyBJUiBpcyBzZW50IGFzIGEgc2VyaWVzIG9mIHB1bHNlcyBhbmQgc3BhY2Ugc29tZXdoYXQgbGlrZSBtb3JzZSBjb2RlLiBUaGVcXG4rLy8gQlBGIHByb2dyYW0gY2FuIGRlY29kZSB0aGlzIGludG8gc2NhbmNvZGVzIHNvIHRoYXQgcmMtY29yZSBjYW4gdHJhbnNsYXRlXFxuKy8vIHRoaXMgaW50byBpbnB1dCBrZXkgY29kZXMgdXNpbmcgdGhlIHJjIGtleW1hcC5cXG4rLy9cXG4rLy8gVGhpcyB0ZXN0IHdvcmtzIGJ5IHNlbmRpbmcgSVIgb3ZlciByYy1sb29wYmFjaywgc28gdGhlIElSIGlzIHByb2Nlc3NlZCBieVxcbisvLyBCUEYgYW5kIHRoZW4gZGVjb2RlZCBpbnRvIHNjYW5jb2Rlcy4gVGhlIGxpcmMgY2hhcmRldiBtdXN0IGJlIHRoZSBvbmVcXG4rLy8gYXNzb2NpYXRlZCB3aXRoIHJjLWxvb3BiYWNrLCBzZWUgdGhlIG91dHB1dCBvZiBpci1rZXl0YWJsZSgxKS5cXG4rLy9cXG4rLy8gVGhlIGZvbGxvd2luZyBDT05GSUcgb3B0aW9ucyBtdXN0IGJlIGVuYWJsZWQgZm9yIHRoZSB0ZXN0IHRvIHN1Y2NlZWQ6XFxuKy8vIENPTkZJR19SQ19DT1JFPXlcXG4rLy8gQ09ORklHX0JQRl9SQVdJUl9FVkVOVD15XFxuKy8vIENPTkZJR19SQ19MT09QQkFDSz15XFxuKy8vIENPTkZJR19MSVJDPXlcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbnB1dC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbGlyYy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZ2xvYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGltaXRzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nwb2xsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N0ZXN0X3Byb2dzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJsaXJjX21vZGUyLnNrZWwuaFxcXCJcXG4rXFxuKy8qXFxuKyAqIFJlYWQgdGhlIERFVk5BTUU9IGxpbmUgb3V0IG9mIHRoZSBmaXJzdCB1ZXZlbnQgZmlsZSB0aGF0IG1hdGNoZXNcXG4rICogcGF0dGVybiwgYW5kIHR1cm4gaXQgaW50byBhIC9kZXYvXFx1MDAzY25hbWVcXHUwMDNlIHBhdGguXFxuKyAqL1xcbitzdGF0aWMgYm9vbCBmaW5kX2Rldm5hbWUoY29uc3QgY2hhciAqcGF0dGVybiwgY2hhciAqcGF0aCwgc2l6ZV90IHBhdGhfc3opXFxuK3tcXG4rXFx0Z2xvYl90IGdsID0ge307XFxuK1xcdGJvb2wgZm91bmQgPSBmYWxzZTtcXG4rXFx0RklMRSAqZjtcXG4rXFxuK1xcdGlmIChnbG9iKHBhdHRlcm4sIDAsIE5VTEwsIFxcdTAwMjZnbCkgfHwgZ2wuZ2xfcGF0aGMgPT0gMClcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRmID0gZm9wZW4oZ2wuZ2xfcGF0aHZbMF0sIFxcXCJyXFxcIik7XFxuK1xcdGlmICghZilcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRjaGFyIGxpbmVbMjU2XTtcXG4rXFxuK1xcdHdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGYpKSB7XFxuK1xcdFxcdGNoYXIgKnZhbDtcXG4rXFxuK1xcdFxcdGlmIChzdHJuY21wKGxpbmUsIFxcXCJERVZOQU1FPVxcXCIsIDgpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHZhbCA9IGxpbmUgKyA4O1xcbitcXHRcXHR2YWxbc3RyY3Nwbih2YWwsIFxcXCJcXFxcblxcXCIpXSA9ICdcXFxcMCc7XFxuK1xcdFxcdHNucHJpbnRmKHBhdGgsIHBhdGhfc3osIFxcXCIvZGV2LyVzXFxcIiwgdmFsKTtcXG4rXFx0XFx0Zm91bmQgPSB0cnVlO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0ZmNsb3NlKGYpO1xcbitvdXQ6XFxuK1xcdGdsb2JmcmVlKFxcdTAwMjZnbCk7XFxuK1xcdHJldHVybiBmb3VuZDtcXG4rfVxcbitcXG4rLyogTG9hZCByYy1sb29wYmFjayBhbmQgZmluZCB0aGUgbGlyYyBhbmQgaW5wdXQgY2hhcmRldnMgaXQgY3JlYXRlZC4gKi9cXG4rc3RhdGljIGJvb2wgZmluZF9sb29wYmFja19kZXZpY2VzKGNoYXIgKmxpcmNfcGF0aCwgY2hhciAqaW5wdXRfcGF0aCxcXG4rXFx0XFx0XFx0XFx0ICBzaXplX3QgcGF0aF9zeilcXG4re1xcbitcXHRnbG9iX3QgZ2wgPSB7fTtcXG4rXFx0Ym9vbCBmb3VuZCA9IGZhbHNlO1xcbitcXG4rXFx0LyogSWdub3JlIGZhaWx1cmUsIHdlIGNoZWNrIGZvciB0aGUgcmVzdWx0aW5nIGRldmljZXMgYmVsb3cuICovXFxuK1xcdFNZU19OT0ZBSUwoXFxcIm1vZHByb2JlIHJjLWxvb3BiYWNrIFxcdTAwM2UgL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjFcXFwiKTtcXG4rXFxuK1xcdGlmIChnbG9iKFxcXCIvc3lzL2NsYXNzL3JjL3JjKlxcXCIsIDAsIE5VTEwsIFxcdTAwMjZnbCkpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXFx1MDAzYyBnbC5nbF9wYXRoYzsgaSsrKSB7XFxuK1xcdFxcdGNvbnN0IGNoYXIgKnJjZGlyID0gZ2wuZ2xfcGF0aHZbaV07XFxuK1xcdFxcdGNoYXIgdWV2ZW50X3BhdGhbUEFUSF9NQVhdO1xcbitcXHRcXHRjaGFyIHVldmVudFs0MDk2XTtcXG4rXFx0XFx0Y2hhciBwYXR0ZXJuW1BBVEhfTUFYXTtcXG4rXFx0XFx0RklMRSAqZjtcXG4rXFx0XFx0c2l6ZV90IG47XFxuK1xcbitcXHRcXHRzbnByaW50Zih1ZXZlbnRfcGF0aCwgc2l6ZW9mKHVldmVudF9wYXRoKSwgXFxcIiVzL3VldmVudFxcXCIsIHJjZGlyKTtcXG4rXFx0XFx0ZiA9IGZvcGVuKHVldmVudF9wYXRoLCBcXFwiclxcXCIpO1xcbitcXHRcXHRpZiAoIWYpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRuID0gZnJlYWQodWV2ZW50LCAxLCBzaXplb2YodWV2ZW50KSAtIDEsIGYpO1xcbitcXHRcXHRmY2xvc2UoZik7XFxuK1xcdFxcdHVldmVudFtuXSA9ICdcXFxcMCc7XFxuK1xcbitcXHRcXHRpZiAoIXN0cnN0cih1ZXZlbnQsIFxcXCJEUlZfTkFNRT1yYy1sb29wYmFja1xcXCIpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHNucHJpbnRmKHBhdHRlcm4sIHNpemVvZihwYXR0ZXJuKSwgXFxcIiVzL2xpcmMqL3VldmVudFxcXCIsIHJjZGlyKTtcXG4rXFx0XFx0aWYgKCFmaW5kX2Rldm5hbWUocGF0dGVybiwgbGlyY19wYXRoLCBwYXRoX3N6KSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRzbnByaW50ZihwYXR0ZXJuLCBzaXplb2YocGF0dGVybiksIFxcXCIlcy9pbnB1dCovZXZlbnQqL3VldmVudFxcXCIsIHJjZGlyKTtcXG4rXFx0XFx0aWYgKCFmaW5kX2Rldm5hbWUocGF0dGVybiwgaW5wdXRfcGF0aCwgcGF0aF9zeikpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0Zm91bmQgPSB0cnVlO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rb3V0OlxcbitcXHRpZiAoIWZvdW5kKSB7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiTm8gcmMgZGV2aWNlcyBmb3VuZFxcXFxuXFxcIik7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiRW5hYmxlIENPTkZJR19SQ19MT09QQkFDSywgQ09ORklHX1JDX0xPT1BCQUNLLCBhbmQgQ09ORklHX0xJUkNcXFxcblxcXCIpO1xcbis/XFx0fVxcbitcXG4rXFx0Z2xvYmZyZWUoXFx1MDAyNmdsKTtcXG4rXFx0cmV0dXJuIGZvdW5kO1xcbit9XFxuK1xcbit2b2lkIHRlc3RfbGlyY19tb2RlMih2b2lkKVxcbit7XFxuK1xcdGNoYXIgbGlyY19wYXRoW1BBVEhfTUFYXSwgaW5wdXRfcGF0aFtQQVRIX01BWF07XFxuK1xcdGludCBsaXJjZmQgPSAtMSwgaW5wdXRmZCA9IC0xLCBwcm9nZmQsIHByb2dmZDIgPSAtMTtcXG4rXFx0c3RydWN0IGxpcmNfbW9kZTIgKnNrZWwgPSBOVUxMLCAqc2tlbDIgPSBOVUxMO1xcbitcXHRfX3UzMiBwcm9nX2lkc1sxMF0sIHByb2dfZmxhZ3NbMTBdLCBwcm9nX2NudDtcXG4rXFx0c3RydWN0IGJwZl9wcm9nX2luZm8gaW5mbztcXG4rXFx0X191MzIgaW5mb19sZW4sIHByb2dfaWQsIHByb2dfaWQyO1xcbitcXHRpbnQgdGVzdGlyMSA9IDB4OGVhZDtcXHQvKiBrZXlkb3duIGZsYWcgKDB4ODAwMCkgfCBzY2FuY29kZSAweGVhZCAqL1xcbitcXHRpbnQgdGVzdGlyMiA9IDB4NDA4MTtcXHQvKiBwb2ludGVyX3JlbCBmbGFnICgweDQwMDApIHwgcmVsX3g9MSB8IHJlbF95PTEgKi9cXG4rXFx0c3RydWN0IGlucHV0X2V2ZW50IGV2ZW50O1xcbitcXHRzdHJ1Y3QgcG9sbGZkIHBmZCA9IHt9O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKGdldHVpZCgpICE9IDApIHtcXG4rXFx0XFx0dGVzdF9fc2tpcCgpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghZmluZF9sb29wYmFja19kZXZpY2VzKGxpcmNfcGF0aCwgaW5wdXRfcGF0aCwgc2l6ZW9mKGxpcmNfcGF0aCkpKSB7XFxuK1xcdFxcdHRlc3RfX3NraXAoKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRza2VsID0gbGlyY19tb2RlMl9fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcImxpcmNfbW9kZTJfX29wZW5fYW5kX2xvYWRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cHJvZ2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXFx1MDAzZXByb2dzLmJwZl9kZWNvZGVyKTtcXG4rXFxuK1xcdG1lbXNldChcXHUwMDI2aW5mbywgMCwgc2l6ZW9mKGluZm8pKTtcXG4rXFx0aW5mb19sZW4gPSBzaXplb2YoaW5mbyk7XFxuK1xcdHJldCA9IGJwZl9wcm9nX2dldF9pbmZvX2J5X2ZkKHByb2dmZCwgXFx1MDAyNmluZm8sIFxcdTAwMjZpbmZvX2xlbik7XFxuK1xcdGlmICghQVNTRVJUX09LKHJldCwgXFxcImdldCBmaXJzdCBwcm9ncmFtJ3MgaW5mb1xcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0cHJvZ19pZCA9IGluZm8uaWQ7XFxuK1xcbitcXHRsaXJjZmQgPSBvcGVuKGxpcmNfcGF0aCwgT19SRFdSIHwgT19OT05CTE9DSyk7XFxuK1xcdGlmICghQVNTRVJUX0dFKGxpcmNmZCwgMCwgXFxcIm9wZW4gbGlyYyBkZXZpY2VcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHQvKiBUcnkgdG8gZGV0YWNoIGl0IGJlZm9yZSBpdCB3YXMgZXZlciBhdHRhY2hlZCwgc2hvdWxkIGZhaWwuICovXFxuK1xcdHJldCA9IGJwZl9wcm9nX2RldGFjaDIocHJvZ2ZkLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyKTtcXG4rXFx0aWYgKCFBU1NFUlRfRVEocmV0LCAtRU5PRU5ULCBcXFwiZGV0YWNoIHVuYXR0YWNoZWQgcHJvZ3JhbVxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGlucHV0ZmQgPSBvcGVuKGlucHV0X3BhdGgsIE9fUkRPTkxZIHwgT19OT05CTE9DSyk7XFxuK1xcdGlmICghQVNTRVJUX0dFKGlucHV0ZmQsIDAsIFxcXCJvcGVuIGlucHV0IGRldmljZVxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdHByb2dfY250ID0gQVJSQVlfU0laRShwcm9nX2lkcyk7XFxuK1xcdHJldCA9IGJwZl9wcm9nX3F1ZXJ5KGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDAsIHByb2dfZmxhZ3MsIHByb2dfaWRzLFxcbitcXHRcXHRcXHQgICAgIFxcdTAwMjZwcm9nX2NudCk7XFxuK1xcdGlmICghQVNTRVJUX09LKHJldCwgXFxcInF1ZXJ5IHByb2dyYW1zIGJlZm9yZSBhdHRhY2hcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdGlmICghQVNTRVJUX0VRKHByb2dfY250LCAwLCBcXFwibm8gcHJvZ3JhbXMgc2hvdWxkIGJlIGF0dGFjaGVkIHlldFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdC8qIEludmFsaWQgYXR0YWNoIGZsYWdzIG11c3QgYmUgcmVqZWN0ZWQsIGFuZCBtdXN0IG5vdCBhdHRhY2guICovXFxuK1xcdHJldCA9IGJwZl9wcm9nX2F0dGFjaChwcm9nZmQsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDEpO1xcbitcXHRpZiAoIUFTU0VSVF9FUShyZXQsIC1FSU5WQUwsIFxcXCJhdHRhY2ggd2l0aCBpbnZhbGlkIGZsYWdzXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0cHJvZ19jbnQgPSBBUlJBWV9TSVpFKHByb2dfaWRzKTtcXG4rXFx0cmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCwgcHJvZ19mbGFncywgcHJvZ19pZHMsXFxuK1xcdFxcdFxcdCAgICAgXFx1MDAyNnByb2dfY250KTtcXG4rXFx0aWYgKCFBU1NFUlRfT0socmV0LCBcXFwicXVlcnkgcHJvZ3JhbXMgYWZ0ZXIgcmVqZWN0ZWQgYXR0YWNoXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAoIUFTU0VSVF9FUShwcm9nX2NudCwgMCwgXFxcInJlamVjdGVkIGF0dGFjaCBzaG91bGQgbm90IGF0dGFjaFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdHJldCA9IGJwZl9wcm9nX2F0dGFjaChwcm9nZmQsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDApO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFxcXCJhdHRhY2ggcHJvZ3JhbSB0byBsaXJjIGRldmljZVxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdC8qIEludmFsaWQgcXVlcnkgZmxhZ3MgbXVzdCBiZSByZWplY3RlZCB0b28sIHdpdGhvdXQgdXBzZXR0aW5nIHN0YXRlLiAqL1xcbitcXHRwcm9nX2NudCA9IEFSUkFZX1NJWkUocHJvZ19pZHMpO1xcbitcXHRyZXQgPSBicGZfcHJvZ19xdWVyeShsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAxLCBwcm9nX2ZsYWdzLCBwcm9nX2lkcyxcXG4rXFx0XFx0XFx0ICAgICBcXHUwMDI2cHJvZ19jbnQpO1xcbitcXHRBU1NFUlRfRVEocmV0LCAtRUlOVkFMLCBcXFwicXVlcnkgd2l0aCBpbnZhbGlkIGZsYWdzXFxcIik7XFxuK1xcbitcXHRwcm9nX2NudCA9IEFSUkFZX1NJWkUocHJvZ19pZHMpO1xcbitcXHRyZXQgPSBicGZfcHJvZ19xdWVyeShsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwLCBwcm9nX2ZsYWdzLCBwcm9nX2lkcyxcXG4rXFx0XFx0XFx0ICAgICBcXHUwMDI2cHJvZ19jbnQpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFxcXCJxdWVyeSBwcm9ncmFtcyBhZnRlciBhdHRhY2hcXFwiKSlcXG4rXFx0XFx0Z290byBvdXRfZGV0YWNoO1xcbitcXHRpZiAoIUFTU0VSVF9FUShwcm9nX2NudCwgMSwgXFxcIm9uZSBwcm9ncmFtIHNob3VsZCBiZSBhdHRhY2hlZFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dF9kZXRhY2g7XFxuK1xcdEFTU0VSVF9FUShwcm9nX2lkc1swXSwgcHJvZ19pZCwgXFxcInF1ZXJpZWQgaWQgc2hvdWxkIG1hdGNoIGF0dGFjaGVkIHByb2dyYW1cXFwiKTtcXG4rXFxuK1xcdC8qIFdyaXRlIHJhdyBJUiAqL1xcbitcXHRyZXQgPSB3cml0ZShsaXJjZmQsIFxcdTAwMjZ0ZXN0aXIxLCBzaXplb2YodGVzdGlyMSkpO1xcbitcXHRpZiAoIUFTU0VSVF9FUShyZXQsIHNpemVvZih0ZXN0aXIxKSwgXFxcInNlbmQgdGVzdCBJUiBtZXNzYWdlIDFcXFwiKSlcXG4rXFx0XFx0Z290byBvdXRfZGV0YWNoO1xcbitcXG4rXFx0cGZkLmZkID0gaW5wdXRmZDtcXG4rXFx0cGZkLmV2ZW50cyA9IFBPTExJTjtcXG4rXFxuK1xcdGZvciAoOzspIHtcXG4rXFx0XFx0cG9sbChcXHUwMDI2cGZkLCAxLCAxMDApO1xcbitcXG4rXFx0XFx0LyogUmVhZCBkZWNvZGVkIElSICovXFxuK1xcdFxcdHJldCA9IHJlYWQoaW5wdXRmZCwgXFx1MDAyNmV2ZW50LCBzaXplb2YoZXZlbnQpKTtcXG4rXFx0XFx0aWYgKCFBU1NFUlRfRVEocmV0LCBzaXplb2YoZXZlbnQpLCBcXFwicmVhZCBkZWNvZGVkIElSIDFcXFwiKSlcXG4rXFx0XFx0XFx0Z290byBvdXRfZGV0YWNoO1xcbitcXG4rXFx0XFx0aWYgKGV2ZW50LnR5cGUgPT0gRVZfTVNDIFxcdTAwMjZcXHUwMDI2IGV2ZW50LmNvZGUgPT0gTVNDX1NDQU4gXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIGV2ZW50LnZhbHVlID09IDB4ZWFkKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0LyogV3JpdGUgcmF3IElSICovXFxuK1xcdHJldCA9IHdyaXRlKGxpcmNmZCwgXFx1MDAyNnRlc3RpcjIsIHNpemVvZih0ZXN0aXIyKSk7XFxuK1xcdGlmICghQVNTRVJUX0VRKHJldCwgc2l6ZW9mKHRlc3RpcjIpLCBcXFwic2VuZCB0ZXN0IElSIG1lc3NhZ2UgMlxcXCIpKVxcbitcXHRcXHRnb3RvIG91dF9kZXRhY2g7XFxuK1xcbitcXHRmb3IgKDs7KSB7XFxuK1xcdFxcdHBvbGwoXFx1MDAyNnBmZCwgMSwgMTAwKTtcXG4rXFxuK1xcdFxcdC8qIFJlYWQgZGVjb2RlZCBJUiAqL1xcbitcXHRcXHRyZXQgPSByZWFkKGlucHV0ZmQsIFxcdTAwMjZldmVudCwgc2l6ZW9mKGV2ZW50KSk7XFxuK1xcdFxcdGlmICghQVNTRVJUX0VRKHJldCwgc2l6ZW9mKGV2ZW50KSwgXFxcInJlYWQgZGVjb2RlZCBJUiAyXFxcIikpXFxuK1xcdFxcdFxcdGdvdG8gb3V0X2RldGFjaDtcXG4rXFxuK1xcdFxcdGlmIChldmVudC50eXBlID09IEVWX1JFTCBcXHUwMDI2XFx1MDAyNiBldmVudC5jb2RlID09IFJFTF9ZIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBldmVudC52YWx1ZSA9PSAxKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0cHJvZ19jbnQgPSBBUlJBWV9TSVpFKHByb2dfaWRzKTtcXG4rXFx0cmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCwgcHJvZ19mbGFncywgcHJvZ19pZHMsXFxuK1xcdFxcdFxcdCAgICAgXFx1MDAyNnByb2dfY250KTtcXG4rXFx0aWYgKCFBU1NFUlRfT0socmV0LCBcXFwicXVlcnkgcHJvZ3JhbXMgYWZ0ZXIgSVIgd2FzIGRlY29kZWRcXFwiKSlcXG4rXFx0XFx0Z290byBvdXRfZGV0YWNoO1xcbitcXHRpZiAoIUFTU0VSVF9FUShwcm9nX2NudCwgMSwgXFxcIm9uZSBwcm9ncmFtIHNob3VsZCBzdGlsbCBiZSBhdHRhY2hlZFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dF9kZXRhY2g7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgbGlyYyBjaGFyZGV2IGNhbiBob2xkIG1vcmUgdGhhbiBvbmUgYXR0YWNoZWQgcHJvZ3JhbSBhdCBvbmNlLlxcbitcXHQgKiBMb2FkIGEgc2Vjb25kLCBpbmRlcGVuZGVudCBpbnN0YW5jZSBhbmQgY2hlY2sgaXQgY2FuIGJlIGF0dGFjaGVkXFxuK1xcdCAqIGFsb25nc2lkZSB0aGUgZmlyc3QsIHF1ZXJpZWQsIGFuZCB0aGVuIGRldGFjaGVkIG9uIGl0cyBvd25cXG4rXFx0ICogd2l0aG91dCBkaXN0dXJiaW5nIHRoZSBmaXJzdCBwcm9ncmFtJ3MgYXR0YWNobWVudC5cXG4rXFx0ICovXFxuK1xcdHNrZWwyID0gbGlyY19tb2RlMl9fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbDIsIFxcXCJsaXJjX21vZGUyX19vcGVuX2FuZF9sb2FkICgybmQpXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0X2RldGFjaDtcXG4rXFxuK1xcdHByb2dmZDIgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbDItXFx1MDAzZXByb2dzLmJwZl9kZWNvZGVyKTtcXG4rXFxuK1xcdG1lbXNldChcXHUwMDI2aW5mbywgMCwgc2l6ZW9mKGluZm8pKTtcXG4rXFx0aW5mb19sZW4gPSBzaXplb2YoaW5mbyk7XFxuK1xcdHJldCA9IGJwZl9wcm9nX2dldF9pbmZvX2J5X2ZkKHByb2dmZDIsIFxcdTAwMjZpbmZvLCBcXHUwMDI2aW5mb19sZW4pO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFxcXCJnZXQgc2Vjb25kIHByb2dyYW0ncyBpbmZvXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0X2RldGFjaDtcXG4rXFx0cHJvZ19pZDIgPSBpbmZvLmlkO1xcbitcXG4rXFx0cmV0ID0gYnBmX3Byb2dfYXR0YWNoKHByb2dmZDIsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDApO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFxcXCJhdHRhY2ggc2Vjb25kIHByb2dyYW0gdG8gbGlyYyBkZXZpY2VcXFwiKSlcXG4rXFx0XFx0Z290byBvdXRfZGV0YWNoO1xcbitcXG4rXFx0cHJvZ19jbnQgPSBBUlJBWV9TSVpFKHByb2dfaWRzKTtcXG4rXFx0cmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCwgcHJvZ19mbGFncywgcHJvZ19pZHMsXFxuK1xcdFxcdFxcdCAgICAgXFx1MDAyNnByb2dfY250KTtcXG4rXFx0aWYgKCFBU1NFUlRfT0socmV0LCBcXFwicXVlcnkgcHJvZ3JhbXMgYWZ0ZXIgc2Vjb25kIGF0dGFjaFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dF9kZXRhY2gyO1xcbitcXHRpZiAoIUFTU0VSVF9FUShwcm9nX2NudCwgMiwgXFxcInR3byBwcm9ncmFtcyBzaG91bGQgYmUgYXR0YWNoZWRcXFwiKSlcXG4rXFx0XFx0Z290byBvdXRfZGV0YWNoMjtcXG4rXFx0QVNTRVJUX1RSVUUoKHByb2dfaWRzWzBdID09IHByb2dfaWQgXFx1MDAyNlxcdTAwMjYgcHJvZ19pZHNbMV0gPT0gcHJvZ19pZDIpIHx8XFxuK1xcdFxcdCAgICAocHJvZ19pZHNbMF0gPT0gcHJvZ19pZDIgXFx1MDAyNlxcdTAwMjYgcHJvZ19pZHNbMV0gPT0gcHJvZ19pZCksXFxuK1xcdFxcdCAgICBcXFwicXVlcmllZCBpZHMgc2hvdWxkIGJlIHRoZSB0d28gYXR0YWNoZWQgcHJvZ3JhbXNcXFwiKTtcXG4rXFxuK1xcdC8qIERldGFjaCB0aGUgc2Vjb25kIHByb2dyYW07IHRoZSBmaXJzdCBzaG91bGQgcmVtYWluIGF0dGFjaGVkLiAqL1xcbitcXHRyZXQgPSBicGZfcHJvZ19kZXRhY2gyKHByb2dmZDIsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFxcXCJkZXRhY2ggc2Vjb25kIHByb2dyYW1cXFwiKSlcXG4rXFx0XFx0Z290byBvdXRfZGV0YWNoMjtcXG4rXFxuK1xcdC8qIERldGFjaGluZyBhbiBhbHJlYWR5LWRldGFjaGVkIHByb2dyYW0gc2hvdWxkIG5vdyBmYWlsLiAqL1xcbitcXHRyZXQgPSBicGZfcHJvZ19kZXRhY2gyKHByb2dmZDIsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIpO1xcbitcXHRBU1NFUlRfRVEocmV0LCAtRU5PRU5ULCBcXFwiZGV0YWNoIHNlY29uZCBwcm9ncmFtIGFnYWluXFxcIik7XFxuK1xcbitcXHRwcm9nX2NudCA9IEFSUkFZX1NJWkUocHJvZ19pZHMpO1xcbitcXHRyZXQgPSBicGZfcHJvZ19xdWVyeShsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwLCBwcm9nX2ZsYWdzLCBwcm9nX2lkcyxcXG4rXFx0XFx0XFx0ICAgICBcXHUwMDI2cHJvZ19jbnQpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFxcXCJxdWVyeSBwcm9ncmFtcyBhZnRlciBzZWNvbmQgZGV0YWNoXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0X2RldGFjaDtcXG4rXFx0aWYgKCFBU1NFUlRfRVEocHJvZ19jbnQsIDEsIFxcXCJvbmUgcHJvZ3JhbSBzaG91bGQgcmVtYWluIGF0dGFjaGVkXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0X2RldGFjaDtcXG4rXFx0QVNTRVJUX0VRKHByb2dfaWRzWzBdLCBwcm9nX2lkLCBcXFwicmVtYWluaW5nIHByb2dyYW0gc2hvdWxkIGJlIHRoZSBmaXJzdCBvbmVcXFwiKTtcXG4rXFxuK291dF9kZXRhY2g6XFxuK1xcdC8qIExldCdzIHRyeSBkZXRhY2hpbmcgaXQgbm93IGl0IGlzIGFjdHVhbGx5IGF0dGFjaGVkLiAqL1xcbitcXHRyZXQgPSBicGZfcHJvZ19kZXRhY2gyKHByb2dmZCwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMik7XFxuK1xcdEFTU0VSVF9PSyhyZXQsIFxcXCJkZXRhY2ggcHJvZ3JhbSBmcm9tIGxpcmMgZGV2aWNlXFxcIik7XFxuK1xcbitcXHQvKiBEZXRhY2hpbmcgaXQgYWdhaW4gc2hvdWxkIG5vdyBmYWlsIHRoZSBzYW1lIHdheS4gKi9cXG4rXFx0cmV0ID0gYnBmX3Byb2dfZGV0YWNoMihwcm9nZmQsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIpO1xcbitcXHRBU1NFUlRfRVEocmV0LCAtRU5PRU5ULCBcXFwiZGV0YWNoIHByb2dyYW0gZnJvbSBsaXJjIGRldmljZSBhZ2FpblxcXCIpO1xcbitcXHRnb3RvIG91dDtcXG4rXFxuK291dF9kZXRhY2gyOlxcbitcXHQvKiBCZXN0LWVmZm9ydCBjbGVhbnVwIG9mIHRoZSBzZWNvbmQgcHJvZ3JhbSBiZWZvcmUgYmFpbGluZyBvdXQuICovXFxuK1xcdGJwZl9wcm9nX2RldGFjaDIocHJvZ2ZkMiwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMik7XFxuK1xcdGdvdG8gb3V0X2RldGFjaDtcXG4rXFxuK291dDpcXG4rXFx0aWYgKGlucHV0ZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2UoaW5wdXRmZCk7XFxuK1xcdGlmIChsaXJjZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2UobGlyY2ZkKTtcXG4rXFx0bGlyY19tb2RlMl9fZGVzdHJveShza2VsMik7XFxuK1xcdGxpcmNfbW9kZTJfX2Rlc3Ryb3koc2tlbCk7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xpcmNfbW9kZTIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9saXJjX21vZGUyLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjk4MTM3ZjNjNWMwM2RcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xpcmNfbW9kZTIuY1xcbkBAIC0wLDAgKzEsMzIgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLy8gdGVzdCBpciBkZWNvZGVyXFxuKy8vXFxuKy8vIENvcHlyaWdodCAoQykgMjAxOCBTZWFuIFlvdW5nIFxcdTAwM2NzZWFuQG1lc3Mub3JnXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbGlyYy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuK1xcbitTRUMoXFxcImxpcmNfbW9kZTJcXFwiKVxcbitpbnQgYnBmX2RlY29kZXIodW5zaWduZWQgaW50ICpzYW1wbGUpXFxuK3tcXG4rXFx0aWYgKExJUkNfSVNfUFVMU0UoKnNhbXBsZSkpIHtcXG4rXFx0XFx0dW5zaWduZWQgaW50IGR1cmF0aW9uID0gTElSQ19WQUxVRSgqc2FtcGxlKTtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEZsYWcgYml0cyBwaWNrZWQgZGVsaWJlcmF0ZWx5IGxvdzogcmMtbG9vcGJhY2sgc2ltdWxhdGVzXFxuK1xcdFxcdCAqIGEgcmVjZWl2ZXIgb3ZlcmZsb3cgZm9yIGFueSBwdWxzZSBvdmVyIE1TX1RPX1VTKDUwKSAoc2VlXFxuK1xcdFxcdCAqIGxvb3BfdHhfaXIoKSBpbiByYy1sb29wYmFjay5jKSwgd2hpY2ggd291bGQgc2lsZW50bHlcXG4rXFx0XFx0ICogc3dhbGxvdyB0aGUgc2FtcGxlIGJlZm9yZSBpdCBldmVyIHJlYWNoZXMgdGhpcyBkZWNvZGVyLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKGR1cmF0aW9uIFxcdTAwMjYgMHg4MDAwKVxcbitcXHRcXHRcXHRicGZfcmNfa2V5ZG93bihzYW1wbGUsIDB4NDAsIGR1cmF0aW9uIFxcdTAwMjYgMHgzZmZmLCAwKTtcXG4rXFx0XFx0aWYgKGR1cmF0aW9uIFxcdTAwMjYgMHg0MDAwKVxcbitcXHRcXHRcXHRicGZfcmNfcG9pbnRlcl9yZWwoc2FtcGxlLCAoZHVyYXRpb24gXFx1MDAzZVxcdTAwM2UgNykgXFx1MDAyNiAweDdmLFxcbitcXHRcXHRcXHRcXHRcXHQgICBkdXJhdGlvbiBcXHUwMDI2IDB4N2YpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2xpcmNfbW9kZTJfa2Vybi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfbGlyY19tb2RlMl9rZXJuLmNcXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCBjYmU0Mjg0YzAzMmZlLi4wMDAwMDAwMDAwMDAwXFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfbGlyY19tb2RlMl9rZXJuLmNcXG4rKysgL2Rldi9udWxsXFxuQEAgLTEsMjYgKzAsMCBAQFxcbi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbi0vLyB0ZXN0IGlyIGRlY29kZXJcXG4tLy9cXG4tLy8gQ29weXJpZ2h0IChDKSAyMDE4IFNlYW4gWW91bmcgXFx1MDAzY3NlYW5AbWVzcy5vcmdcXHUwMDNlXFxuLVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9saXJjLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4tXFxuLVNFQyhcXFwibGlyY19tb2RlMlxcXCIpXFxuLWludCBicGZfZGVjb2Rlcih1bnNpZ25lZCBpbnQgKnNhbXBsZSlcXG4te1xcbi1cXHRpZiAoTElSQ19JU19QVUxTRSgqc2FtcGxlKSkge1xcbi1cXHRcXHR1bnNpZ25lZCBpbnQgZHVyYXRpb24gPSBMSVJDX1ZBTFVFKCpzYW1wbGUpO1xcbi1cXG4tXFx0XFx0aWYgKGR1cmF0aW9uIFxcdTAwMjYgMHgxMDAwKVxcbi1cXHRcXHRcXHRicGZfcmNfa2V5ZG93bihzYW1wbGUsIDB4NDAsIGR1cmF0aW9uIFxcdTAwMjYgMHhmZmZmLCAwKTtcXG4tXFx0XFx0aWYgKGR1cmF0aW9uIFxcdTAwMjYgMHgyMDAwKVxcbi1cXHRcXHRcXHRicGZfcmNfcG9pbnRlcl9yZWwoc2FtcGxlLCAoZHVyYXRpb24gXFx1MDAzZVxcdTAwM2UgOCkgXFx1MDAyNiAweGZmLFxcbi1cXHRcXHRcXHRcXHRcXHQgICBkdXJhdGlvbiBcXHUwMDI2IDB4ZmYpO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4tY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xpcmNfbW9kZTIuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9saXJjX21vZGUyLnNoXFxuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1XFxuaW5kZXggNTI1MmI5MWY0OGExOC4uMDAwMDAwMDAwMDAwMFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xpcmNfbW9kZTIuc2hcXG4rKysgL2Rldi9udWxsXFxuQEAgLTEsNDEgKzAsMCBAQFxcbi0jIS9iaW4vYmFzaFxcbi0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuLVxcbi0jIEtzZWxmdGVzdCBmcmFtZXdvcmsgcmVxdWlyZW1lbnQgLSBTS0lQIGNvZGUgaXMgNC5cXG4ta3NmdF9za2lwPTRcXG4tcmV0PSRrc2Z0X3NraXBcXG4tXFxuLW1zZz1cXFwic2tpcCBhbGwgdGVzdHM6XFxcIlxcbi1pZiBbICRVSUQgIT0gMCBdOyB0aGVuXFxuLVxcdGVjaG8gJG1zZyBwbGVhc2UgcnVuIHRoaXMgYXMgcm9vdCBcXHUwMDNlXFx1MDAyNjJcXG4tXFx0ZXhpdCAka3NmdF9za2lwXFxuLWZpXFxuLVxcbi1HUkVFTj0nXFxcXDAzM1swOzkybSdcXG4tUkVEPSdcXFxcMDMzWzA7MzFtJ1xcbi1OQz0nXFxcXDAzM1swbScgIyBObyBDb2xvclxcbi1cXG4tbW9kcHJvYmUgcmMtbG9vcGJhY2tcXG4tXFxuLWZvciBpIGluIC9zeXMvY2xhc3MvcmMvcmMqXFxuLWRvXFxuLVxcdGlmIGdyZXAgLXEgRFJWX05BTUU9cmMtbG9vcGJhY2sgJGkvdWV2ZW50XFxuLVxcdHRoZW5cXG4tXFx0XFx0TElSQ0RFVj0kKGdyZXAgREVWTkFNRT0gJGkvbGlyYyovdWV2ZW50IHwgc2VkIHNRREVWTkFNRT1RL2Rldi9RKVxcbi1cXHRcXHRJTlBVVERFVj0kKGdyZXAgREVWTkFNRT0gJGkvaW5wdXQqL2V2ZW50Ki91ZXZlbnQgfCBzZWQgc1FERVZOQU1FPVEvZGV2L1EpXFxuLVxcdGZpXFxuLWRvbmVcXG4tXFxuLWlmIFsgLW4gXFxcIiRMSVJDREVWXFxcIiBdO1xcbi10aGVuXFxuLVxcdFRZUEU9bGlyY19tb2RlMlxcbi1cXHQuL3Rlc3RfbGlyY19tb2RlMl91c2VyICRMSVJDREVWICRJTlBVVERFVlxcbi1cXHRyZXQ9JD9cXG4tXFx0aWYgWyAkcmV0IC1uZSAwIF07IHRoZW5cXG4tXFx0XFx0ZWNobyAtZSAke1JFRH1cXFwiRkFJTDogJFRZUEVcXFwiJHtOQ31cXG4tXFx0ZWxzZVxcbi1cXHRcXHRlY2hvIC1lICR7R1JFRU59XFxcIlBBU1M6ICRUWVBFXFxcIiR7TkN9XFxuLVxcdGZpXFxuLWZpXFxuLVxcbi1leGl0ICRyZXRcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbGlyY19tb2RlMl91c2VyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9saXJjX21vZGUyX3VzZXIuY1xcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IGNkMTkxZGEyMGQxNDMuLjAwMDAwMDAwMDAwMDBcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9saXJjX21vZGUyX3VzZXIuY1xcbisrKyAvZGV2L251bGxcXG5AQCAtMSwxNzcgKzAsMCBAQFxcbi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbi0vLyB0ZXN0IGlyIGRlY29kZXJcXG4tLy9cXG4tLy8gQ29weXJpZ2h0IChDKSAyMDE4IFNlYW4gWW91bmcgXFx1MDAzY3NlYW5AbWVzcy5vcmdcXHUwMDNlXFxuLVxcbi0vLyBBIGxpcmMgY2hhcmRldiBpcyBhIGRldmljZSByZXByZXNlbnRpbmcgYSBjb25zdW1lciBJUiAoY2lyKSBkZXZpY2Ugd2hpY2hcXG4tLy8gY2FuIHJlY2VpdmUgaW5mcmFyZWQgc2lnbmFscyBmcm9tIHJlbW90ZSBjb250cm9sIGFuZC9vciB0cmFuc21pdCBJUi5cXG4tLy9cXG4tLy8gSVIgaXMgc2VudCBhcyBhIHNlcmllcyBvZiBwdWxzZXMgYW5kIHNwYWNlIHNvbWV3aGF0IGxpa2UgbW9yc2UgY29kZS4gVGhlXFxuLS8vIEJQRiBwcm9ncmFtIGNhbiBkZWNvZGUgdGhpcyBpbnRvIHNjYW5jb2RlcyBzbyB0aGF0IHJjLWNvcmUgY2FuIHRyYW5zbGF0ZVxcbi0vLyB0aGlzIGludG8gaW5wdXQga2V5IGNvZGVzIHVzaW5nIHRoZSByYyBrZXltYXAuXFxuLS8vXFxuLS8vIFRoaXMgdGVzdCB3b3JrcyBieSBzZW5kaW5nIElSIG92ZXIgcmMtbG9vcGJhY2ssIHNvIHRoZSBJUiBpcyBwcm9jZXNzZWQgYnlcXG4tLy8gQlBGIGFuZCB0aGVuIGRlY29kZWQgaW50byBzY2FuY29kZXMuIFRoZSBsaXJjIGNoYXJkZXYgbXVzdCBiZSB0aGUgb25lXFxuLS8vIGFzc29jaWF0ZWQgd2l0aCByYy1sb29wYmFjaywgc2VlIHRoZSBvdXRwdXQgb2YgaXIta2V5dGFibGUoMSkuXFxuLS8vXFxuLS8vIFRoZSBmb2xsb3dpbmcgQ09ORklHIG9wdGlvbnMgbXVzdCBiZSBlbmFibGVkIGZvciB0aGUgdGVzdCB0byBzdWNjZWVkOlxcbi0vLyBDT05GSUdfUkNfQ09SRT15XFxuLS8vIENPTkZJR19CUEZfUkFXSVJfRVZFTlQ9eVxcbi0vLyBDT05GSUdfUkNfTE9PUEJBQ0s9eVxcbi1cXG4tLy8gU3RlcHM6XFxuLS8vIDEuIE9wZW4gdGhlIC9kZXYvbGlyY04gZGV2aWNlIGZvciByYy1sb29wYmFjayAoZ2l2ZW4gb24gY29tbWFuZCBsaW5lKVxcbi0vLyAyLiBBdHRhY2ggYnBmX2xpcmNfbW9kZTIgcHJvZ3JhbSB3aGljaCBkZWNvZGVzIHNvbWUgSVIuXFxuLS8vIDMuIFNlbmQgc29tZSBJUiB0byB0aGUgc2FtZSBJUiBkZXZpY2U7IHNpbmNlIGl0IGlzIGxvb3BiYWNrLCB0aGlzIHdpbGxcXG4tLy8gICAgZW5kIHVwIGluIHRoZSBicGYgcHJvZ3JhbVxcbi0vLyA0LiBicGYgcHJvZ3JhbSBzaG91bGQgZGVjb2RlIElSIGFuZCByZXBvcnQga2V5Y29kZVxcbi0vLyA1LiBXZSBjYW4gcmVhZCBrZXljb2RlIGZyb20gc2FtZSAvZGV2L2xpcmMgZGV2aWNlXFxuLVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbnB1dC5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY3N0ZGlvLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NzdGRsaWIuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2Nwb2xsLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NzeXMvdHlwZXMuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY3N5cy9pb2N0bC5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjc3lzL3N0YXQuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY2ZjbnRsLmhcXHUwMDNlXFxuLVxcbi0jaW5jbHVkZSBcXFwiYnBmX3V0aWwuaFxcXCJcXG4tI2luY2x1ZGUgXFx1MDAzY2JwZi9icGYuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY2JwZi9saWJicGYuaFxcdTAwM2VcXG4tXFxuLSNpbmNsdWRlIFxcXCJ0ZXN0aW5nX2hlbHBlcnMuaFxcXCJcXG4tXFxuLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4te1xcbi1cXHRzdHJ1Y3QgYnBmX29iamVjdCAqb2JqO1xcbi1cXHRpbnQgcmV0LCBsaXJjZmQsIHByb2dmZCwgaW5wdXRmZDtcXG4tXFx0aW50IHRlc3RpcjEgPSAweDFlYWQ7XFxuLVxcdGludCB0ZXN0aXIyID0gMHgyMTAxO1xcbi1cXHR1MzIgcHJvZ19pZHNbMTBdLCBwcm9nX2ZsYWdzWzEwXSwgcHJvZ19jbnQ7XFxuLVxcbi1cXHRpZiAoYXJnYyAhPSAzKSB7XFxuLVxcdFxcdHByaW50ZihcXFwiVXNhZ2U6ICVzIC9kZXYvbGlyY04gL2Rldi9pbnB1dC9ldmVudE1cXFxcblxcXCIsIGFyZ3ZbMF0pO1xcbi1cXHRcXHRyZXR1cm4gMjtcXG4tXFx0fVxcbi1cXG4tXFx0cmV0ID0gYnBmX3Byb2dfdGVzdF9sb2FkKFxcXCJ0ZXN0X2xpcmNfbW9kZTJfa2Vybi5icGYub1xcXCIsXFxuLVxcdFxcdFxcdFxcdCBCUEZfUFJPR19UWVBFX0xJUkNfTU9ERTIsIFxcdTAwMjZvYmosIFxcdTAwMjZwcm9nZmQpO1xcbi1cXHRpZiAocmV0KSB7XFxuLVxcdFxcdHByaW50ZihcXFwiRmFpbGVkIHRvIGxvYWQgYnBmIHByb2dyYW1cXFxcblxcXCIpO1xcbi1cXHRcXHRyZXR1cm4gMTtcXG4tXFx0fVxcbi1cXG4tXFx0bGlyY2ZkID0gb3Blbihhcmd2WzFdLCBPX1JEV1IgfCBPX05PTkJMT0NLKTtcXG4tXFx0aWYgKGxpcmNmZCA9PSAtMSkge1xcbi1cXHRcXHRwcmludGYoXFxcImZhaWxlZCB0byBvcGVuIGxpcmMgZGV2aWNlICVzOiAlbVxcXFxuXFxcIiwgYXJndlsxXSk7XFxuLVxcdFxcdHJldHVybiAxO1xcbi1cXHR9XFxuLVxcbi1cXHQvKiBMZXQncyB0cnkgZGV0YWNoIGl0IGJlZm9yZSBpdCB3YXMgZXZlciBhdHRhY2hlZCAqL1xcbi1cXHRyZXQgPSBicGZfcHJvZ19kZXRhY2gyKHByb2dmZCwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMik7XFxuLVxcdGlmIChyZXQgIT0gLUVOT0VOVCkge1xcbi1cXHRcXHRwcmludGYoXFxcImJwZl9wcm9nX2RldGFjaDIgbm90IGF0dGFjaGVkIHNob3VsZCBmYWlsOiAlbVxcXFxuXFxcIik7XFxuLVxcdFxcdHJldHVybiAxO1xcbi1cXHR9XFxuLVxcbi1cXHRpbnB1dGZkID0gb3Blbihhcmd2WzJdLCBPX1JET05MWSB8IE9fTk9OQkxPQ0spO1xcbi1cXHRpZiAoaW5wdXRmZCA9PSAtMSkge1xcbi1cXHRcXHRwcmludGYoXFxcImZhaWxlZCB0byBvcGVuIGlucHV0IGRldmljZSAlczogJW1cXFxcblxcXCIsIGFyZ3ZbMV0pO1xcbi1cXHRcXHRyZXR1cm4gMTtcXG4tXFx0fVxcbi1cXG4tXFx0cHJvZ19jbnQgPSAxMDtcXG4tXFx0cmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCwgcHJvZ19mbGFncywgcHJvZ19pZHMsXFxuLVxcdFxcdFxcdCAgICAgXFx1MDAyNnByb2dfY250KTtcXG4tXFx0aWYgKHJldCkge1xcbi1cXHRcXHRwcmludGYoXFxcIkZhaWxlZCB0byBxdWVyeSBicGYgcHJvZ3JhbXMgb24gbGlyYyBkZXZpY2U6ICVtXFxcXG5cXFwiKTtcXG4tXFx0XFx0cmV0dXJuIDE7XFxuLVxcdH1cXG4tXFxuLVxcdGlmIChwcm9nX2NudCAhPSAwKSB7XFxuLVxcdFxcdHByaW50ZihcXFwiRXhwZWN0ZWQgbm90aGluZyB0byBiZSBhdHRhY2hlZFxcXFxuXFxcIik7XFxuLVxcdFxcdHJldHVybiAxO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXQgPSBicGZfcHJvZ19hdHRhY2gocHJvZ2ZkLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwKTtcXG4tXFx0aWYgKHJldCkge1xcbi1cXHRcXHRwcmludGYoXFxcIkZhaWxlZCB0byBhdHRhY2ggYnBmIHRvIGxpcmMgZGV2aWNlOiAlbVxcXFxuXFxcIik7XFxuLVxcdFxcdHJldHVybiAxO1xcbi1cXHR9XFxuLVxcbi1cXHQvKiBXcml0ZSByYXcgSVIgKi9cXG4tXFx0cmV0ID0gd3JpdGUobGlyY2ZkLCBcXHUwMDI2dGVzdGlyMSwgc2l6ZW9mKHRlc3RpcjEpKTtcXG4tXFx0aWYgKHJldCAhPSBzaXplb2YodGVzdGlyMSkpIHtcXG4tXFx0XFx0cHJpbnRmKFxcXCJGYWlsZWQgdG8gc2VuZCB0ZXN0IElSIG1lc3NhZ2U6ICVtXFxcXG5cXFwiKTtcXG4tXFx0XFx0cmV0dXJuIDE7XFxuLVxcdH1cXG4tXFxuLVxcdHN0cnVjdCBwb2xsZmQgcGZkID0geyAuZmQgPSBpbnB1dGZkLCAuZXZlbnRzID0gUE9MTElOIH07XFxuLVxcdHN0cnVjdCBpbnB1dF9ldmVudCBldmVudDtcXG4tXFxuLVxcdGZvciAoOzspIHtcXG4tXFx0XFx0cG9sbChcXHUwMDI2cGZkLCAxLCAxMDApO1xcbi1cXG4tXFx0XFx0LyogUmVhZCBkZWNvZGVkIElSICovXFxuLVxcdFxcdHJldCA9IHJlYWQoaW5wdXRmZCwgXFx1MDAyNmV2ZW50LCBzaXplb2YoZXZlbnQpKTtcXG4tXFx0XFx0aWYgKHJldCAhPSBzaXplb2YoZXZlbnQpKSB7XFxuLVxcdFxcdFxcdHByaW50ZihcXFwiRmFpbGVkIHRvIHJlYWQgZGVjb2RlZCBJUjogJW1cXFxcblxcXCIpO1xcbi1cXHRcXHRcXHRyZXR1cm4gMTtcXG4tXFx0XFx0fVxcbi1cXG4tXFx0XFx0aWYgKGV2ZW50LnR5cGUgPT0gRVZfTVNDIFxcdTAwMjZcXHUwMDI2IGV2ZW50LmNvZGUgPT0gTVNDX1NDQU4gXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgIGV2ZW50LnZhbHVlID09IDB4MWVhZCkge1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbi1cXHR9XFxuLVxcbi1cXHQvKiBXcml0ZSByYXcgSVIgKi9cXG4tXFx0cmV0ID0gd3JpdGUobGlyY2ZkLCBcXHUwMDI2dGVzdGlyMiwgc2l6ZW9mKHRlc3RpcjIpKTtcXG4tXFx0aWYgKHJldCAhPSBzaXplb2YodGVzdGlyMikpIHtcXG4tXFx0XFx0cHJpbnRmKFxcXCJGYWlsZWQgdG8gc2VuZCB0ZXN0IElSIG1lc3NhZ2U6ICVtXFxcXG5cXFwiKTtcXG4tXFx0XFx0cmV0dXJuIDE7XFxuLVxcdH1cXG4tXFxuLVxcdGZvciAoOzspIHtcXG4tXFx0XFx0cG9sbChcXHUwMDI2cGZkLCAxLCAxMDApO1xcbi1cXG4tXFx0XFx0LyogUmVhZCBkZWNvZGVkIElSICovXFxuLVxcdFxcdHJldCA9IHJlYWQoaW5wdXRmZCwgXFx1MDAyNmV2ZW50LCBzaXplb2YoZXZlbnQpKTtcXG4tXFx0XFx0aWYgKHJldCAhPSBzaXplb2YoZXZlbnQpKSB7XFxuLVxcdFxcdFxcdHByaW50ZihcXFwiRmFpbGVkIHRvIHJlYWQgZGVjb2RlZCBJUjogJW1cXFxcblxcXCIpO1xcbi1cXHRcXHRcXHRyZXR1cm4gMTtcXG4tXFx0XFx0fVxcbi1cXG4tXFx0XFx0aWYgKGV2ZW50LnR5cGUgPT0gRVZfUkVMIFxcdTAwMjZcXHUwMDI2IGV2ZW50LmNvZGUgPT0gUkVMX1kgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgIGV2ZW50LnZhbHVlID09IDEgKSB7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4tXFxuLVxcdHByb2dfY250ID0gMTA7XFxuLVxcdHJldCA9IGJwZl9wcm9nX3F1ZXJ5KGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDAsIHByb2dfZmxhZ3MsIHByb2dfaWRzLFxcbi1cXHRcXHRcXHQgICAgIFxcdTAwMjZwcm9nX2NudCk7XFxuLVxcdGlmIChyZXQpIHtcXG4tXFx0XFx0cHJpbnRmKFxcXCJGYWlsZWQgdG8gcXVlcnkgYnBmIHByb2dyYW1zIG9uIGxpcmMgZGV2aWNlOiAlbVxcXFxuXFxcIik7XFxuLVxcdFxcdHJldHVybiAxO1xcbi1cXHR9XFxuLVxcbi1cXHRpZiAocHJvZ19jbnQgIT0gMSkge1xcbi1cXHRcXHRwcmludGYoXFxcIkV4cGVjdGVkIG9uZSBwcm9ncmFtIHRvIGJlIGF0dGFjaGVkXFxcXG5cXFwiKTtcXG4tXFx0XFx0cmV0dXJuIDE7XFxuLVxcdH1cXG4tXFxuLVxcdC8qIExldCdzIHRyeSBkZXRhY2hpbmcgaXQgbm93IGl0IGlzIGFjdHVhbGx5IGF0dGFjaGVkICovXFxuLVxcdHJldCA9IGJwZl9wcm9nX2RldGFjaDIocHJvZ2ZkLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyKTtcXG4tXFx0aWYgKHJldCkge1xcbi1cXHRcXHRwcmludGYoXFxcImJwZl9wcm9nX2RldGFjaDI6IHJldHVybmVkICVtXFxcXG5cXFwiKTtcXG4tXFx0XFx0cmV0dXJuIDE7XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiAwO1xcbi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIyOjA3OjM0LjQyMTEyMjA4NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg0MDY1MTkxMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgQlBGIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLykgYnkgY29udmVydGluZyBhbiBvbGQtc3R5bGUgdGVzdCBpbnRvIHRoZSB0ZXN0X3Byb2dzIGZyYW1ld29yay4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjMWNjMGE4ZmUzNWU2NzA4ZmNlMGExODE5M2U0Njg5NTMxYTNhYWMzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjAgMjI6MDc6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8uZ2l0aWdub3JlXG5pbmRleCA5ODZhNjM4OTE4NmJhLi5iODE1YmYwZDg4Nzc0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy5naXRpZ25vcmVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8uZ2l0aWdub3JlXG5AQCAtMTcsNyArMTcsNiBAQCB0ZXN0X3ZlcmlmaWVyX2xvZ1xuIGZlYXR1cmVcbiB1cmFuZG9tX3JlYWRcbiB0ZXN0X3NvY2ttYXBcbi10ZXN0X2xpcmNfbW9kZTJfdXNlclxuIGZsb3dfZGlzc2VjdG9yX2xvYWRcbiB0ZXN0X3RjcG5vdGlmeV91c2VyXG4gdGVzdF9saWJicGZcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcbmluZGV4IDJiMmY5M2RlYzQ3NGIuLmY4ZWMwZjU3NDU1OWEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxuQEAgLTEyMyw3ICsxMjMsNiBAQCBURVNUX0ZJTEVTID0geHNrX3ByZXJlcXMuc2ggJCh3aWxkY2FyZCBwcm9ncy9idGZfZHVtcF90ZXN0X2Nhc2VfKi5jKVxuIFxuICMgT3JkZXIgY29ycmVzcG9uZCB0byAnbWFrZSBydW5fdGVzdHMnIG9yZGVyXG4gVEVTVF9QUk9HUyA6PSB0ZXN0X2ttb2Quc2ggXFxcbi1cdHRlc3RfbGlyY19tb2RlMi5zaCBcXFxuIFx0dGVzdF9icGZ0b29sX2J1aWxkLnNoIFxcXG4gXHR0ZXN0X2RvY19idWlsZC5zaCBcXFxuIFx0dGVzdF94c2suc2ggXFxcbkBAIC0xNDEsNyArMTQwLDYgQEAgVEVTVF9HRU5fUFJPR1NfRVhURU5ERUQgPSBcXFxuIFx0YmVuY2ggXFxcbiBcdGZsb3dfZGlzc2VjdG9yX2xvYWQgXFxcbiBcdHRlc3RfY3BwIFxcXG4tXHR0ZXN0X2xpcmNfbW9kZTJfdXNlciBcXFxuIFx0dmVyaXN0YXQgXFxcbiBcdHhkcF9mZWF0dXJlcyBcXFxuIFx0eGRwX2h3X21ldGFkYXRhIFxcXG5AQCAtMzM4LDcgKzMzNiw2IEBAICQoT1VUUFVUKS90ZXN0X3NvY2ttYXA6ICQoQ0dST1VQX0hFTFBFUlMpICQoVEVTVElOR19IRUxQRVJTKVxuICQoT1VUUFVUKS90ZXN0X3RjcG5vdGlmeV91c2VyOiAkKENHUk9VUF9IRUxQRVJTKSAkKFRFU1RJTkdfSEVMUEVSUykgJChUUkFDRV9IRUxQRVJTKVxuICQoT1VUUFVUKS90ZXN0X3NvY2tfZmllbGRzOiAkKENHUk9VUF9IRUxQRVJTKSAkKFRFU1RJTkdfSEVMUEVSUylcbiAkKE9VVFBVVCkvdGVzdF90YWc6ICQoVEVTVElOR19IRUxQRVJTKVxuLSQoT1VUUFVUKS90ZXN0X2xpcmNfbW9kZTJfdXNlcjogJChURVNUSU5HX0hFTFBFUlMpXG4gJChPVVRQVVQpL2Zsb3dfZGlzc2VjdG9yX2xvYWQ6ICQoVEVTVElOR19IRUxQRVJTKVxuICQoT1VUUFVUKS90ZXN0X21hcHM6ICQoVEVTVElOR19IRUxQRVJTKVxuICQoT1VUUFVUKS90ZXN0X3ZlcmlmaWVyOiAkKFRFU1RJTkdfSEVMUEVSUykgJChDQVBfSEVMUEVSUykgJChVTlBSSVZfSEVMUEVSUylcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saXJjX21vZGUyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saXJjX21vZGUyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi44ZTQ4NWRiNzBiNzhhXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saXJjX21vZGUyLmNcbkBAIC0wLDAgKzEsMzM0IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvLyB0ZXN0IGlyIGRlY29kZXJcbisvL1xuKy8vIENvcHlyaWdodCAoQykgMjAxOCBTZWFuIFlvdW5nIFx1MDAzY3NlYW5AbWVzcy5vcmdcdTAwM2VcbitcbisvLyBBIGxpcmMgY2hhcmRldiBpcyBhIGRldmljZSByZXByZXNlbnRpbmcgYSBjb25zdW1lciBJUiAoY2lyKSBkZXZpY2Ugd2hpY2hcbisvLyBjYW4gcmVjZWl2ZSBpbmZyYXJlZCBzaWduYWxzIGZyb20gcmVtb3RlIGNvbnRyb2wgYW5kL29yIHRyYW5zbWl0IElSLlxuKy8vXG4rLy8gSVIgaXMgc2VudCBhcyBhIHNlcmllcyBvZiBwdWxzZXMgYW5kIHNwYWNlIHNvbWV3aGF0IGxpa2UgbW9yc2UgY29kZS4gVGhlXG4rLy8gQlBGIHByb2dyYW0gY2FuIGRlY29kZSB0aGlzIGludG8gc2NhbmNvZGVzIHNvIHRoYXQgcmMtY29yZSBjYW4gdHJhbnNsYXRlXG4rLy8gdGhpcyBpbnRvIGlucHV0IGtleSBjb2RlcyB1c2luZyB0aGUgcmMga2V5bWFwLlxuKy8vXG4rLy8gVGhpcyB0ZXN0IHdvcmtzIGJ5IHNlbmRpbmcgSVIgb3ZlciByYy1sb29wYmFjaywgc28gdGhlIElSIGlzIHByb2Nlc3NlZCBieVxuKy8vIEJQRiBhbmQgdGhlbiBkZWNvZGVkIGludG8gc2NhbmNvZGVzLiBUaGUgbGlyYyBjaGFyZGV2IG11c3QgYmUgdGhlIG9uZVxuKy8vIGFzc29jaWF0ZWQgd2l0aCByYy1sb29wYmFjaywgc2VlIHRoZSBvdXRwdXQgb2YgaXIta2V5dGFibGUoMSkuXG4rLy9cbisvLyBUaGUgZm9sbG93aW5nIENPTkZJRyBvcHRpb25zIG11c3QgYmUgZW5hYmxlZCBmb3IgdGhlIHRlc3QgdG8gc3VjY2VlZDpcbisvLyBDT05GSUdfUkNfQ09SRT15XG4rLy8gQ09ORklHX0JQRl9SQVdJUl9FVkVOVD15XG4rLy8gQ09ORklHX1JDX0xPT1BCQUNLPXlcbisvLyBDT05GSUdfTElSQz15XG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW5wdXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpcmMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2dsb2IuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbWl0cy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjcG9sbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4rI2luY2x1ZGUgXCJsaXJjX21vZGUyLnNrZWwuaFwiXG4rXG4rLypcbisgKiBSZWFkIHRoZSBERVZOQU1FPSBsaW5lIG91dCBvZiB0aGUgZmlyc3QgdWV2ZW50IGZpbGUgdGhhdCBtYXRjaGVzXG4rICogcGF0dGVybiwgYW5kIHR1cm4gaXQgaW50byBhIC9kZXYvXHUwMDNjbmFtZVx1MDAzZSBwYXRoLlxuKyAqL1xuK3N0YXRpYyBib29sIGZpbmRfZGV2bmFtZShjb25zdCBjaGFyICpwYXR0ZXJuLCBjaGFyICpwYXRoLCBzaXplX3QgcGF0aF9zeilcbit7XG4rXHRnbG9iX3QgZ2wgPSB7fTtcbitcdGJvb2wgZm91bmQgPSBmYWxzZTtcbitcdEZJTEUgKmY7XG4rXG4rXHRpZiAoZ2xvYihwYXR0ZXJuLCAwLCBOVUxMLCBcdTAwMjZnbCkgfHwgZ2wuZ2xfcGF0aGMgPT0gMClcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRmID0gZm9wZW4oZ2wuZ2xfcGF0aHZbMF0sIFwiclwiKTtcbitcdGlmICghZilcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRjaGFyIGxpbmVbMjU2XTtcbitcbitcdHdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGYpKSB7XG4rXHRcdGNoYXIgKnZhbDtcbitcbitcdFx0aWYgKHN0cm5jbXAobGluZSwgXCJERVZOQU1FPVwiLCA4KSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0dmFsID0gbGluZSArIDg7XG4rXHRcdHZhbFtzdHJjc3BuKHZhbCwgXCJcXG5cIildID0gJ1xcMCc7XG4rXHRcdHNucHJpbnRmKHBhdGgsIHBhdGhfc3osIFwiL2Rldi8lc1wiLCB2YWwpO1xuK1x0XHRmb3VuZCA9IHRydWU7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0ZmNsb3NlKGYpO1xuK291dDpcbitcdGdsb2JmcmVlKFx1MDAyNmdsKTtcbitcdHJldHVybiBmb3VuZDtcbit9XG4rXG4rLyogTG9hZCByYy1sb29wYmFjayBhbmQgZmluZCB0aGUgbGlyYyBhbmQgaW5wdXQgY2hhcmRldnMgaXQgY3JlYXRlZC4gKi9cbitzdGF0aWMgYm9vbCBmaW5kX2xvb3BiYWNrX2RldmljZXMoY2hhciAqbGlyY19wYXRoLCBjaGFyICppbnB1dF9wYXRoLFxuK1x0XHRcdFx0ICBzaXplX3QgcGF0aF9zeilcbit7XG4rXHRnbG9iX3QgZ2wgPSB7fTtcbitcdGJvb2wgZm91bmQgPSBmYWxzZTtcbitcbitcdC8qIElnbm9yZSBmYWlsdXJlLCB3ZSBjaGVjayBmb3IgdGhlIHJlc3VsdGluZyBkZXZpY2VzIGJlbG93LiAqL1xuK1x0U1lTX05PRkFJTChcIm1vZHByb2JlIHJjLWxvb3BiYWNrIFx1MDAzZSAvZGV2L251bGwgMlx1MDAzZVx1MDAyNjFcIik7XG4rXG4rXHRpZiAoZ2xvYihcIi9zeXMvY2xhc3MvcmMvcmMqXCIsIDAsIE5VTEwsIFx1MDAyNmdsKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRmb3IgKHNpemVfdCBpID0gMDsgaSBcdTAwM2MgZ2wuZ2xfcGF0aGM7IGkrKykge1xuK1x0XHRjb25zdCBjaGFyICpyY2RpciA9IGdsLmdsX3BhdGh2W2ldO1xuK1x0XHRjaGFyIHVldmVudF9wYXRoW1BBVEhfTUFYXTtcbitcdFx0Y2hhciB1ZXZlbnRbNDA5Nl07XG4rXHRcdGNoYXIgcGF0dGVybltQQVRIX01BWF07XG4rXHRcdEZJTEUgKmY7XG4rXHRcdHNpemVfdCBuO1xuK1xuK1x0XHRzbnByaW50Zih1ZXZlbnRfcGF0aCwgc2l6ZW9mKHVldmVudF9wYXRoKSwgXCIlcy91ZXZlbnRcIiwgcmNkaXIpO1xuK1x0XHRmID0gZm9wZW4odWV2ZW50X3BhdGgsIFwiclwiKTtcbitcdFx0aWYgKCFmKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRuID0gZnJlYWQodWV2ZW50LCAxLCBzaXplb2YodWV2ZW50KSAtIDEsIGYpO1xuK1x0XHRmY2xvc2UoZik7XG4rXHRcdHVldmVudFtuXSA9ICdcXDAnO1xuK1xuK1x0XHRpZiAoIXN0cnN0cih1ZXZlbnQsIFwiRFJWX05BTUU9cmMtbG9vcGJhY2tcIikpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHNucHJpbnRmKHBhdHRlcm4sIHNpemVvZihwYXR0ZXJuKSwgXCIlcy9saXJjKi91ZXZlbnRcIiwgcmNkaXIpO1xuK1x0XHRpZiAoIWZpbmRfZGV2bmFtZShwYXR0ZXJuLCBsaXJjX3BhdGgsIHBhdGhfc3opKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRzbnByaW50ZihwYXR0ZXJuLCBzaXplb2YocGF0dGVybiksIFwiJXMvaW5wdXQqL2V2ZW50Ki91ZXZlbnRcIiwgcmNkaXIpO1xuK1x0XHRpZiAoIWZpbmRfZGV2bmFtZShwYXR0ZXJuLCBpbnB1dF9wYXRoLCBwYXRoX3N6KSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0Zm91bmQgPSB0cnVlO1xuK1x0XHRicmVhaztcbitcdH1cbitcbitvdXQ6XG4rXHRpZiAoIWZvdW5kKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIk5vIHJjIGRldmljZXMgZm91bmRcXG5cIik7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIkVuYWJsZSBDT05GSUdfUkNfTE9PUEJBQ0ssIENPTkZJR19SQ19MT09QQkFDSywgYW5kIENPTkZJR19MSVJDXFxuXCIpO1xuKz9cdH1cbitcbitcdGdsb2JmcmVlKFx1MDAyNmdsKTtcbitcdHJldHVybiBmb3VuZDtcbit9XG4rXG4rdm9pZCB0ZXN0X2xpcmNfbW9kZTIodm9pZClcbit7XG4rXHRjaGFyIGxpcmNfcGF0aFtQQVRIX01BWF0sIGlucHV0X3BhdGhbUEFUSF9NQVhdO1xuK1x0aW50IGxpcmNmZCA9IC0xLCBpbnB1dGZkID0gLTEsIHByb2dmZCwgcHJvZ2ZkMiA9IC0xO1xuK1x0c3RydWN0IGxpcmNfbW9kZTIgKnNrZWwgPSBOVUxMLCAqc2tlbDIgPSBOVUxMO1xuK1x0X191MzIgcHJvZ19pZHNbMTBdLCBwcm9nX2ZsYWdzWzEwXSwgcHJvZ19jbnQ7XG4rXHRzdHJ1Y3QgYnBmX3Byb2dfaW5mbyBpbmZvO1xuK1x0X191MzIgaW5mb19sZW4sIHByb2dfaWQsIHByb2dfaWQyO1xuK1x0aW50IHRlc3RpcjEgPSAweDhlYWQ7XHQvKiBrZXlkb3duIGZsYWcgKDB4ODAwMCkgfCBzY2FuY29kZSAweGVhZCAqL1xuK1x0aW50IHRlc3RpcjIgPSAweDQwODE7XHQvKiBwb2ludGVyX3JlbCBmbGFnICgweDQwMDApIHwgcmVsX3g9MSB8IHJlbF95PTEgKi9cbitcdHN0cnVjdCBpbnB1dF9ldmVudCBldmVudDtcbitcdHN0cnVjdCBwb2xsZmQgcGZkID0ge307XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKGdldHVpZCgpICE9IDApIHtcbitcdFx0dGVzdF9fc2tpcCgpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRpZiAoIWZpbmRfbG9vcGJhY2tfZGV2aWNlcyhsaXJjX3BhdGgsIGlucHV0X3BhdGgsIHNpemVvZihsaXJjX3BhdGgpKSkge1xuK1x0XHR0ZXN0X19za2lwKCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHNrZWwgPSBsaXJjX21vZGUyX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJsaXJjX21vZGUyX19vcGVuX2FuZF9sb2FkXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRwcm9nZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5icGZfZGVjb2Rlcik7XG4rXG4rXHRtZW1zZXQoXHUwMDI2aW5mbywgMCwgc2l6ZW9mKGluZm8pKTtcbitcdGluZm9fbGVuID0gc2l6ZW9mKGluZm8pO1xuK1x0cmV0ID0gYnBmX3Byb2dfZ2V0X2luZm9fYnlfZmQocHJvZ2ZkLCBcdTAwMjZpbmZvLCBcdTAwMjZpbmZvX2xlbik7XG4rXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwiZ2V0IGZpcnN0IHByb2dyYW0ncyBpbmZvXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdHByb2dfaWQgPSBpbmZvLmlkO1xuK1xuK1x0bGlyY2ZkID0gb3BlbihsaXJjX3BhdGgsIE9fUkRXUiB8IE9fTk9OQkxPQ0spO1xuK1x0aWYgKCFBU1NFUlRfR0UobGlyY2ZkLCAwLCBcIm9wZW4gbGlyYyBkZXZpY2VcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0LyogVHJ5IHRvIGRldGFjaCBpdCBiZWZvcmUgaXQgd2FzIGV2ZXIgYXR0YWNoZWQsIHNob3VsZCBmYWlsLiAqL1xuK1x0cmV0ID0gYnBmX3Byb2dfZGV0YWNoMihwcm9nZmQsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIpO1xuK1x0aWYgKCFBU1NFUlRfRVEocmV0LCAtRU5PRU5ULCBcImRldGFjaCB1bmF0dGFjaGVkIHByb2dyYW1cIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0aW5wdXRmZCA9IG9wZW4oaW5wdXRfcGF0aCwgT19SRE9OTFkgfCBPX05PTkJMT0NLKTtcbitcdGlmICghQVNTRVJUX0dFKGlucHV0ZmQsIDAsIFwib3BlbiBpbnB1dCBkZXZpY2VcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0cHJvZ19jbnQgPSBBUlJBWV9TSVpFKHByb2dfaWRzKTtcbitcdHJldCA9IGJwZl9wcm9nX3F1ZXJ5KGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDAsIHByb2dfZmxhZ3MsIHByb2dfaWRzLFxuK1x0XHRcdCAgICAgXHUwMDI2cHJvZ19jbnQpO1xuK1x0aWYgKCFBU1NFUlRfT0socmV0LCBcInF1ZXJ5IHByb2dyYW1zIGJlZm9yZSBhdHRhY2hcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0aWYgKCFBU1NFUlRfRVEocHJvZ19jbnQsIDAsIFwibm8gcHJvZ3JhbXMgc2hvdWxkIGJlIGF0dGFjaGVkIHlldFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHQvKiBJbnZhbGlkIGF0dGFjaCBmbGFncyBtdXN0IGJlIHJlamVjdGVkLCBhbmQgbXVzdCBub3QgYXR0YWNoLiAqL1xuK1x0cmV0ID0gYnBmX3Byb2dfYXR0YWNoKHByb2dmZCwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMSk7XG4rXHRpZiAoIUFTU0VSVF9FUShyZXQsIC1FSU5WQUwsIFwiYXR0YWNoIHdpdGggaW52YWxpZCBmbGFnc1wiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRwcm9nX2NudCA9IEFSUkFZX1NJWkUocHJvZ19pZHMpO1xuK1x0cmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCwgcHJvZ19mbGFncywgcHJvZ19pZHMsXG4rXHRcdFx0ICAgICBcdTAwMjZwcm9nX2NudCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwicXVlcnkgcHJvZ3JhbXMgYWZ0ZXIgcmVqZWN0ZWQgYXR0YWNoXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICghQVNTRVJUX0VRKHByb2dfY250LCAwLCBcInJlamVjdGVkIGF0dGFjaCBzaG91bGQgbm90IGF0dGFjaFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRyZXQgPSBicGZfcHJvZ19hdHRhY2gocHJvZ2ZkLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwKTtcbitcdGlmICghQVNTRVJUX09LKHJldCwgXCJhdHRhY2ggcHJvZ3JhbSB0byBsaXJjIGRldmljZVwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHQvKiBJbnZhbGlkIHF1ZXJ5IGZsYWdzIG11c3QgYmUgcmVqZWN0ZWQgdG9vLCB3aXRob3V0IHVwc2V0dGluZyBzdGF0ZS4gKi9cbitcdHByb2dfY250ID0gQVJSQVlfU0laRShwcm9nX2lkcyk7XG4rXHRyZXQgPSBicGZfcHJvZ19xdWVyeShsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAxLCBwcm9nX2ZsYWdzLCBwcm9nX2lkcyxcbitcdFx0XHQgICAgIFx1MDAyNnByb2dfY250KTtcbitcdEFTU0VSVF9FUShyZXQsIC1FSU5WQUwsIFwicXVlcnkgd2l0aCBpbnZhbGlkIGZsYWdzXCIpO1xuK1xuK1x0cHJvZ19jbnQgPSBBUlJBWV9TSVpFKHByb2dfaWRzKTtcbitcdHJldCA9IGJwZl9wcm9nX3F1ZXJ5KGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDAsIHByb2dfZmxhZ3MsIHByb2dfaWRzLFxuK1x0XHRcdCAgICAgXHUwMDI2cHJvZ19jbnQpO1xuK1x0aWYgKCFBU1NFUlRfT0socmV0LCBcInF1ZXJ5IHByb2dyYW1zIGFmdGVyIGF0dGFjaFwiKSlcbitcdFx0Z290byBvdXRfZGV0YWNoO1xuK1x0aWYgKCFBU1NFUlRfRVEocHJvZ19jbnQsIDEsIFwib25lIHByb2dyYW0gc2hvdWxkIGJlIGF0dGFjaGVkXCIpKVxuK1x0XHRnb3RvIG91dF9kZXRhY2g7XG4rXHRBU1NFUlRfRVEocHJvZ19pZHNbMF0sIHByb2dfaWQsIFwicXVlcmllZCBpZCBzaG91bGQgbWF0Y2ggYXR0YWNoZWQgcHJvZ3JhbVwiKTtcbitcbitcdC8qIFdyaXRlIHJhdyBJUiAqL1xuK1x0cmV0ID0gd3JpdGUobGlyY2ZkLCBcdTAwMjZ0ZXN0aXIxLCBzaXplb2YodGVzdGlyMSkpO1xuK1x0aWYgKCFBU1NFUlRfRVEocmV0LCBzaXplb2YodGVzdGlyMSksIFwic2VuZCB0ZXN0IElSIG1lc3NhZ2UgMVwiKSlcbitcdFx0Z290byBvdXRfZGV0YWNoO1xuK1xuK1x0cGZkLmZkID0gaW5wdXRmZDtcbitcdHBmZC5ldmVudHMgPSBQT0xMSU47XG4rXG4rXHRmb3IgKDs7KSB7XG4rXHRcdHBvbGwoXHUwMDI2cGZkLCAxLCAxMDApO1xuK1xuK1x0XHQvKiBSZWFkIGRlY29kZWQgSVIgKi9cbitcdFx0cmV0ID0gcmVhZChpbnB1dGZkLCBcdTAwMjZldmVudCwgc2l6ZW9mKGV2ZW50KSk7XG4rXHRcdGlmICghQVNTRVJUX0VRKHJldCwgc2l6ZW9mKGV2ZW50KSwgXCJyZWFkIGRlY29kZWQgSVIgMVwiKSlcbitcdFx0XHRnb3RvIG91dF9kZXRhY2g7XG4rXG4rXHRcdGlmIChldmVudC50eXBlID09IEVWX01TQyBcdTAwMjZcdTAwMjYgZXZlbnQuY29kZSA9PSBNU0NfU0NBTiBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGV2ZW50LnZhbHVlID09IDB4ZWFkKVxuK1x0XHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0LyogV3JpdGUgcmF3IElSICovXG4rXHRyZXQgPSB3cml0ZShsaXJjZmQsIFx1MDAyNnRlc3RpcjIsIHNpemVvZih0ZXN0aXIyKSk7XG4rXHRpZiAoIUFTU0VSVF9FUShyZXQsIHNpemVvZih0ZXN0aXIyKSwgXCJzZW5kIHRlc3QgSVIgbWVzc2FnZSAyXCIpKVxuK1x0XHRnb3RvIG91dF9kZXRhY2g7XG4rXG4rXHRmb3IgKDs7KSB7XG4rXHRcdHBvbGwoXHUwMDI2cGZkLCAxLCAxMDApO1xuK1xuK1x0XHQvKiBSZWFkIGRlY29kZWQgSVIgKi9cbitcdFx0cmV0ID0gcmVhZChpbnB1dGZkLCBcdTAwMjZldmVudCwgc2l6ZW9mKGV2ZW50KSk7XG4rXHRcdGlmICghQVNTRVJUX0VRKHJldCwgc2l6ZW9mKGV2ZW50KSwgXCJyZWFkIGRlY29kZWQgSVIgMlwiKSlcbitcdFx0XHRnb3RvIG91dF9kZXRhY2g7XG4rXG4rXHRcdGlmIChldmVudC50eXBlID09IEVWX1JFTCBcdTAwMjZcdTAwMjYgZXZlbnQuY29kZSA9PSBSRUxfWSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGV2ZW50LnZhbHVlID09IDEpXG4rXHRcdFx0YnJlYWs7XG4rXHR9XG4rXG4rXHRwcm9nX2NudCA9IEFSUkFZX1NJWkUocHJvZ19pZHMpO1xuK1x0cmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCwgcHJvZ19mbGFncywgcHJvZ19pZHMsXG4rXHRcdFx0ICAgICBcdTAwMjZwcm9nX2NudCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwicXVlcnkgcHJvZ3JhbXMgYWZ0ZXIgSVIgd2FzIGRlY29kZWRcIikpXG4rXHRcdGdvdG8gb3V0X2RldGFjaDtcbitcdGlmICghQVNTRVJUX0VRKHByb2dfY250LCAxLCBcIm9uZSBwcm9ncmFtIHNob3VsZCBzdGlsbCBiZSBhdHRhY2hlZFwiKSlcbitcdFx0Z290byBvdXRfZGV0YWNoO1xuK1xuK1x0LypcbitcdCAqIFRoZSBsaXJjIGNoYXJkZXYgY2FuIGhvbGQgbW9yZSB0aGFuIG9uZSBhdHRhY2hlZCBwcm9ncmFtIGF0IG9uY2UuXG4rXHQgKiBMb2FkIGEgc2Vjb25kLCBpbmRlcGVuZGVudCBpbnN0YW5jZSBhbmQgY2hlY2sgaXQgY2FuIGJlIGF0dGFjaGVkXG4rXHQgKiBhbG9uZ3NpZGUgdGhlIGZpcnN0LCBxdWVyaWVkLCBhbmQgdGhlbiBkZXRhY2hlZCBvbiBpdHMgb3duXG4rXHQgKiB3aXRob3V0IGRpc3R1cmJpbmcgdGhlIGZpcnN0IHByb2dyYW0ncyBhdHRhY2htZW50LlxuK1x0ICovXG4rXHRza2VsMiA9IGxpcmNfbW9kZTJfX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsMiwgXCJsaXJjX21vZGUyX19vcGVuX2FuZF9sb2FkICgybmQpXCIpKVxuK1x0XHRnb3RvIG91dF9kZXRhY2g7XG4rXG4rXHRwcm9nZmQyID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwyLVx1MDAzZXByb2dzLmJwZl9kZWNvZGVyKTtcbitcbitcdG1lbXNldChcdTAwMjZpbmZvLCAwLCBzaXplb2YoaW5mbykpO1xuK1x0aW5mb19sZW4gPSBzaXplb2YoaW5mbyk7XG4rXHRyZXQgPSBicGZfcHJvZ19nZXRfaW5mb19ieV9mZChwcm9nZmQyLCBcdTAwMjZpbmZvLCBcdTAwMjZpbmZvX2xlbik7XG4rXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwiZ2V0IHNlY29uZCBwcm9ncmFtJ3MgaW5mb1wiKSlcbitcdFx0Z290byBvdXRfZGV0YWNoO1xuK1x0cHJvZ19pZDIgPSBpbmZvLmlkO1xuK1xuK1x0cmV0ID0gYnBmX3Byb2dfYXR0YWNoKHByb2dmZDIsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDApO1xuK1x0aWYgKCFBU1NFUlRfT0socmV0LCBcImF0dGFjaCBzZWNvbmQgcHJvZ3JhbSB0byBsaXJjIGRldmljZVwiKSlcbitcdFx0Z290byBvdXRfZGV0YWNoO1xuK1xuK1x0cHJvZ19jbnQgPSBBUlJBWV9TSVpFKHByb2dfaWRzKTtcbitcdHJldCA9IGJwZl9wcm9nX3F1ZXJ5KGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDAsIHByb2dfZmxhZ3MsIHByb2dfaWRzLFxuK1x0XHRcdCAgICAgXHUwMDI2cHJvZ19jbnQpO1xuK1x0aWYgKCFBU1NFUlRfT0socmV0LCBcInF1ZXJ5IHByb2dyYW1zIGFmdGVyIHNlY29uZCBhdHRhY2hcIikpXG4rXHRcdGdvdG8gb3V0X2RldGFjaDI7XG4rXHRpZiAoIUFTU0VSVF9FUShwcm9nX2NudCwgMiwgXCJ0d28gcHJvZ3JhbXMgc2hvdWxkIGJlIGF0dGFjaGVkXCIpKVxuK1x0XHRnb3RvIG91dF9kZXRhY2gyO1xuK1x0QVNTRVJUX1RSVUUoKHByb2dfaWRzWzBdID09IHByb2dfaWQgXHUwMDI2XHUwMDI2IHByb2dfaWRzWzFdID09IHByb2dfaWQyKSB8fFxuK1x0XHQgICAgKHByb2dfaWRzWzBdID09IHByb2dfaWQyIFx1MDAyNlx1MDAyNiBwcm9nX2lkc1sxXSA9PSBwcm9nX2lkKSxcbitcdFx0ICAgIFwicXVlcmllZCBpZHMgc2hvdWxkIGJlIHRoZSB0d28gYXR0YWNoZWQgcHJvZ3JhbXNcIik7XG4rXG4rXHQvKiBEZXRhY2ggdGhlIHNlY29uZCBwcm9ncmFtOyB0aGUgZmlyc3Qgc2hvdWxkIHJlbWFpbiBhdHRhY2hlZC4gKi9cbitcdHJldCA9IGJwZl9wcm9nX2RldGFjaDIocHJvZ2ZkMiwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMik7XG4rXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwiZGV0YWNoIHNlY29uZCBwcm9ncmFtXCIpKVxuK1x0XHRnb3RvIG91dF9kZXRhY2gyO1xuK1xuK1x0LyogRGV0YWNoaW5nIGFuIGFscmVhZHktZGV0YWNoZWQgcHJvZ3JhbSBzaG91bGQgbm93IGZhaWwuICovXG4rXHRyZXQgPSBicGZfcHJvZ19kZXRhY2gyKHByb2dmZDIsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIpO1xuK1x0QVNTRVJUX0VRKHJldCwgLUVOT0VOVCwgXCJkZXRhY2ggc2Vjb25kIHByb2dyYW0gYWdhaW5cIik7XG4rXG4rXHRwcm9nX2NudCA9IEFSUkFZX1NJWkUocHJvZ19pZHMpO1xuK1x0cmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCwgcHJvZ19mbGFncywgcHJvZ19pZHMsXG4rXHRcdFx0ICAgICBcdTAwMjZwcm9nX2NudCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwicXVlcnkgcHJvZ3JhbXMgYWZ0ZXIgc2Vjb25kIGRldGFjaFwiKSlcbitcdFx0Z290byBvdXRfZGV0YWNoO1xuK1x0aWYgKCFBU1NFUlRfRVEocHJvZ19jbnQsIDEsIFwib25lIHByb2dyYW0gc2hvdWxkIHJlbWFpbiBhdHRhY2hlZFwiKSlcbitcdFx0Z290byBvdXRfZGV0YWNoO1xuK1x0QVNTRVJUX0VRKHByb2dfaWRzWzBdLCBwcm9nX2lkLCBcInJlbWFpbmluZyBwcm9ncmFtIHNob3VsZCBiZSB0aGUgZmlyc3Qgb25lXCIpO1xuK1xuK291dF9kZXRhY2g6XG4rXHQvKiBMZXQncyB0cnkgZGV0YWNoaW5nIGl0IG5vdyBpdCBpcyBhY3R1YWxseSBhdHRhY2hlZC4gKi9cbitcdHJldCA9IGJwZl9wcm9nX2RldGFjaDIocHJvZ2ZkLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyKTtcbitcdEFTU0VSVF9PSyhyZXQsIFwiZGV0YWNoIHByb2dyYW0gZnJvbSBsaXJjIGRldmljZVwiKTtcbitcbitcdC8qIERldGFjaGluZyBpdCBhZ2FpbiBzaG91bGQgbm93IGZhaWwgdGhlIHNhbWUgd2F5LiAqL1xuK1x0cmV0ID0gYnBmX3Byb2dfZGV0YWNoMihwcm9nZmQsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIpO1xuK1x0QVNTRVJUX0VRKHJldCwgLUVOT0VOVCwgXCJkZXRhY2ggcHJvZ3JhbSBmcm9tIGxpcmMgZGV2aWNlIGFnYWluXCIpO1xuK1x0Z290byBvdXQ7XG4rXG4rb3V0X2RldGFjaDI6XG4rXHQvKiBCZXN0LWVmZm9ydCBjbGVhbnVwIG9mIHRoZSBzZWNvbmQgcHJvZ3JhbSBiZWZvcmUgYmFpbGluZyBvdXQuICovXG4rXHRicGZfcHJvZ19kZXRhY2gyKHByb2dmZDIsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIpO1xuK1x0Z290byBvdXRfZGV0YWNoO1xuK1xuK291dDpcbitcdGlmIChpbnB1dGZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UoaW5wdXRmZCk7XG4rXHRpZiAobGlyY2ZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UobGlyY2ZkKTtcbitcdGxpcmNfbW9kZTJfX2Rlc3Ryb3koc2tlbDIpO1xuK1x0bGlyY19tb2RlMl9fZGVzdHJveShza2VsKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xpcmNfbW9kZTIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9saXJjX21vZGUyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi45ODEzN2YzYzVjMDNkXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbGlyY19tb2RlMi5jXG5AQCAtMCwwICsxLDMyIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvLyB0ZXN0IGlyIGRlY29kZXJcbisvL1xuKy8vIENvcHlyaWdodCAoQykgMjAxOCBTZWFuIFlvdW5nIFx1MDAzY3NlYW5AbWVzcy5vcmdcdTAwM2VcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpcmMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4rXG4rU0VDKFwibGlyY19tb2RlMlwiKVxuK2ludCBicGZfZGVjb2Rlcih1bnNpZ25lZCBpbnQgKnNhbXBsZSlcbit7XG4rXHRpZiAoTElSQ19JU19QVUxTRSgqc2FtcGxlKSkge1xuK1x0XHR1bnNpZ25lZCBpbnQgZHVyYXRpb24gPSBMSVJDX1ZBTFVFKCpzYW1wbGUpO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBGbGFnIGJpdHMgcGlja2VkIGRlbGliZXJhdGVseSBsb3c6IHJjLWxvb3BiYWNrIHNpbXVsYXRlc1xuK1x0XHQgKiBhIHJlY2VpdmVyIG92ZXJmbG93IGZvciBhbnkgcHVsc2Ugb3ZlciBNU19UT19VUyg1MCkgKHNlZVxuK1x0XHQgKiBsb29wX3R4X2lyKCkgaW4gcmMtbG9vcGJhY2suYyksIHdoaWNoIHdvdWxkIHNpbGVudGx5XG4rXHRcdCAqIHN3YWxsb3cgdGhlIHNhbXBsZSBiZWZvcmUgaXQgZXZlciByZWFjaGVzIHRoaXMgZGVjb2Rlci5cbitcdFx0ICovXG4rXHRcdGlmIChkdXJhdGlvbiBcdTAwMjYgMHg4MDAwKVxuK1x0XHRcdGJwZl9yY19rZXlkb3duKHNhbXBsZSwgMHg0MCwgZHVyYXRpb24gXHUwMDI2IDB4M2ZmZiwgMCk7XG4rXHRcdGlmIChkdXJhdGlvbiBcdTAwMjYgMHg0MDAwKVxuK1x0XHRcdGJwZl9yY19wb2ludGVyX3JlbChzYW1wbGUsIChkdXJhdGlvbiBcdTAwM2VcdTAwM2UgNykgXHUwMDI2IDB4N2YsXG4rXHRcdFx0XHRcdCAgIGR1cmF0aW9uIFx1MDAyNiAweDdmKTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfbGlyY19tb2RlMl9rZXJuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9saXJjX21vZGUyX2tlcm4uY1xuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCBjYmU0Mjg0YzAzMmZlLi4wMDAwMDAwMDAwMDAwXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9saXJjX21vZGUyX2tlcm4uY1xuKysrIC9kZXYvbnVsbFxuQEAgLTEsMjYgKzAsMCBAQFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4tLy8gdGVzdCBpciBkZWNvZGVyXG4tLy9cbi0vLyBDb3B5cmlnaHQgKEMpIDIwMTggU2VhbiBZb3VuZyBcdTAwM2NzZWFuQG1lc3Mub3JnXHUwMDNlXG4tXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9saXJjLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuLVxuLVNFQyhcImxpcmNfbW9kZTJcIilcbi1pbnQgYnBmX2RlY29kZXIodW5zaWduZWQgaW50ICpzYW1wbGUpXG4te1xuLVx0aWYgKExJUkNfSVNfUFVMU0UoKnNhbXBsZSkpIHtcbi1cdFx0dW5zaWduZWQgaW50IGR1cmF0aW9uID0gTElSQ19WQUxVRSgqc2FtcGxlKTtcbi1cbi1cdFx0aWYgKGR1cmF0aW9uIFx1MDAyNiAweDEwMDApXG4tXHRcdFx0YnBmX3JjX2tleWRvd24oc2FtcGxlLCAweDQwLCBkdXJhdGlvbiBcdTAwMjYgMHhmZmZmLCAwKTtcbi1cdFx0aWYgKGR1cmF0aW9uIFx1MDAyNiAweDIwMDApXG4tXHRcdFx0YnBmX3JjX3BvaW50ZXJfcmVsKHNhbXBsZSwgKGR1cmF0aW9uIFx1MDAzZVx1MDAzZSA4KSBcdTAwMjYgMHhmZixcbi1cdFx0XHRcdFx0ICAgZHVyYXRpb24gXHUwMDI2IDB4ZmYpO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLWNoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9saXJjX21vZGUyLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbGlyY19tb2RlMi5zaFxuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCA1MjUyYjkxZjQ4YTE4Li4wMDAwMDAwMDAwMDAwXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9saXJjX21vZGUyLnNoXG4rKysgL2Rldi9udWxsXG5AQCAtMSw0MSArMCwwIEBAXG4tIyEvYmluL2Jhc2hcbi0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4tXG4tIyBLc2VsZnRlc3QgZnJhbWV3b3JrIHJlcXVpcmVtZW50IC0gU0tJUCBjb2RlIGlzIDQuXG4ta3NmdF9za2lwPTRcbi1yZXQ9JGtzZnRfc2tpcFxuLVxuLW1zZz1cInNraXAgYWxsIHRlc3RzOlwiXG4taWYgWyAkVUlEICE9IDAgXTsgdGhlblxuLVx0ZWNobyAkbXNnIHBsZWFzZSBydW4gdGhpcyBhcyByb290IFx1MDAzZVx1MDAyNjJcbi1cdGV4aXQgJGtzZnRfc2tpcFxuLWZpXG4tXG4tR1JFRU49J1xcMDMzWzA7OTJtJ1xuLVJFRD0nXFwwMzNbMDszMW0nXG4tTkM9J1xcMDMzWzBtJyAjIE5vIENvbG9yXG4tXG4tbW9kcHJvYmUgcmMtbG9vcGJhY2tcbi1cbi1mb3IgaSBpbiAvc3lzL2NsYXNzL3JjL3JjKlxuLWRvXG4tXHRpZiBncmVwIC1xIERSVl9OQU1FPXJjLWxvb3BiYWNrICRpL3VldmVudFxuLVx0dGhlblxuLVx0XHRMSVJDREVWPSQoZ3JlcCBERVZOQU1FPSAkaS9saXJjKi91ZXZlbnQgfCBzZWQgc1FERVZOQU1FPVEvZGV2L1EpXG4tXHRcdElOUFVUREVWPSQoZ3JlcCBERVZOQU1FPSAkaS9pbnB1dCovZXZlbnQqL3VldmVudCB8IHNlZCBzUURFVk5BTUU9US9kZXYvUSlcbi1cdGZpXG4tZG9uZVxuLVxuLWlmIFsgLW4gXCIkTElSQ0RFVlwiIF07XG4tdGhlblxuLVx0VFlQRT1saXJjX21vZGUyXG4tXHQuL3Rlc3RfbGlyY19tb2RlMl91c2VyICRMSVJDREVWICRJTlBVVERFVlxuLVx0cmV0PSQ/XG4tXHRpZiBbICRyZXQgLW5lIDAgXTsgdGhlblxuLVx0XHRlY2hvIC1lICR7UkVEfVwiRkFJTDogJFRZUEVcIiR7TkN9XG4tXHRlbHNlXG4tXHRcdGVjaG8gLWUgJHtHUkVFTn1cIlBBU1M6ICRUWVBFXCIke05DfVxuLVx0Zmlcbi1maVxuLVxuLWV4aXQgJHJldFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xpcmNfbW9kZTJfdXNlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbGlyY19tb2RlMl91c2VyLmNcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggY2QxOTFkYTIwZDE0My4uMDAwMDAwMDAwMDAwMFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbGlyY19tb2RlMl91c2VyLmNcbisrKyAvZGV2L251bGxcbkBAIC0xLDE3NyArMCwwIEBAXG4tLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbi0vLyB0ZXN0IGlyIGRlY29kZXJcbi0vL1xuLS8vIENvcHlyaWdodCAoQykgMjAxOCBTZWFuIFlvdW5nIFx1MDAzY3NlYW5AbWVzcy5vcmdcdTAwM2Vcbi1cbi0vLyBBIGxpcmMgY2hhcmRldiBpcyBhIGRldmljZSByZXByZXNlbnRpbmcgYSBjb25zdW1lciBJUiAoY2lyKSBkZXZpY2Ugd2hpY2hcbi0vLyBjYW4gcmVjZWl2ZSBpbmZyYXJlZCBzaWduYWxzIGZyb20gcmVtb3RlIGNvbnRyb2wgYW5kL29yIHRyYW5zbWl0IElSLlxuLS8vXG4tLy8gSVIgaXMgc2VudCBhcyBhIHNlcmllcyBvZiBwdWxzZXMgYW5kIHNwYWNlIHNvbWV3aGF0IGxpa2UgbW9yc2UgY29kZS4gVGhlXG4tLy8gQlBGIHByb2dyYW0gY2FuIGRlY29kZSB0aGlzIGludG8gc2NhbmNvZGVzIHNvIHRoYXQgcmMtY29yZSBjYW4gdHJhbnNsYXRlXG4tLy8gdGhpcyBpbnRvIGlucHV0IGtleSBjb2RlcyB1c2luZyB0aGUgcmMga2V5bWFwLlxuLS8vXG4tLy8gVGhpcyB0ZXN0IHdvcmtzIGJ5IHNlbmRpbmcgSVIgb3ZlciByYy1sb29wYmFjaywgc28gdGhlIElSIGlzIHByb2Nlc3NlZCBieVxuLS8vIEJQRiBhbmQgdGhlbiBkZWNvZGVkIGludG8gc2NhbmNvZGVzLiBUaGUgbGlyYyBjaGFyZGV2IG11c3QgYmUgdGhlIG9uZVxuLS8vIGFzc29jaWF0ZWQgd2l0aCByYy1sb29wYmFjaywgc2VlIHRoZSBvdXRwdXQgb2YgaXIta2V5dGFibGUoMSkuXG4tLy9cbi0vLyBUaGUgZm9sbG93aW5nIENPTkZJRyBvcHRpb25zIG11c3QgYmUgZW5hYmxlZCBmb3IgdGhlIHRlc3QgdG8gc3VjY2VlZDpcbi0vLyBDT05GSUdfUkNfQ09SRT15XG4tLy8gQ09ORklHX0JQRl9SQVdJUl9FVkVOVD15XG4tLy8gQ09ORklHX1JDX0xPT1BCQUNLPXlcbi1cbi0vLyBTdGVwczpcbi0vLyAxLiBPcGVuIHRoZSAvZGV2L2xpcmNOIGRldmljZSBmb3IgcmMtbG9vcGJhY2sgKGdpdmVuIG9uIGNvbW1hbmQgbGluZSlcbi0vLyAyLiBBdHRhY2ggYnBmX2xpcmNfbW9kZTIgcHJvZ3JhbSB3aGljaCBkZWNvZGVzIHNvbWUgSVIuXG4tLy8gMy4gU2VuZCBzb21lIElSIHRvIHRoZSBzYW1lIElSIGRldmljZTsgc2luY2UgaXQgaXMgbG9vcGJhY2ssIHRoaXMgd2lsbFxuLS8vICAgIGVuZCB1cCBpbiB0aGUgYnBmIHByb2dyYW1cbi0vLyA0LiBicGYgcHJvZ3JhbSBzaG91bGQgZGVjb2RlIElSIGFuZCByZXBvcnQga2V5Y29kZVxuLS8vIDUuIFdlIGNhbiByZWFkIGtleWNvZGUgZnJvbSBzYW1lIC9kZXYvbGlyYyBkZXZpY2Vcbi1cbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2lucHV0LmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY3BvbGwuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY3N5cy90eXBlcy5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjc3lzL2lvY3RsLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NzeXMvc3RhdC5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuLVxuLSNpbmNsdWRlIFwiYnBmX3V0aWwuaFwiXG4tI2luY2x1ZGUgXHUwMDNjYnBmL2JwZi5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjYnBmL2xpYmJwZi5oXHUwMDNlXG4tXG4tI2luY2x1ZGUgXCJ0ZXN0aW5nX2hlbHBlcnMuaFwiXG4tXG4taW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuLXtcbi1cdHN0cnVjdCBicGZfb2JqZWN0ICpvYmo7XG4tXHRpbnQgcmV0LCBsaXJjZmQsIHByb2dmZCwgaW5wdXRmZDtcbi1cdGludCB0ZXN0aXIxID0gMHgxZWFkO1xuLVx0aW50IHRlc3RpcjIgPSAweDIxMDE7XG4tXHR1MzIgcHJvZ19pZHNbMTBdLCBwcm9nX2ZsYWdzWzEwXSwgcHJvZ19jbnQ7XG4tXG4tXHRpZiAoYXJnYyAhPSAzKSB7XG4tXHRcdHByaW50ZihcIlVzYWdlOiAlcyAvZGV2L2xpcmNOIC9kZXYvaW5wdXQvZXZlbnRNXFxuXCIsIGFyZ3ZbMF0pO1xuLVx0XHRyZXR1cm4gMjtcbi1cdH1cbi1cbi1cdHJldCA9IGJwZl9wcm9nX3Rlc3RfbG9hZChcInRlc3RfbGlyY19tb2RlMl9rZXJuLmJwZi5vXCIsXG4tXHRcdFx0XHQgQlBGX1BST0dfVFlQRV9MSVJDX01PREUyLCBcdTAwMjZvYmosIFx1MDAyNnByb2dmZCk7XG4tXHRpZiAocmV0KSB7XG4tXHRcdHByaW50ZihcIkZhaWxlZCB0byBsb2FkIGJwZiBwcm9ncmFtXFxuXCIpO1xuLVx0XHRyZXR1cm4gMTtcbi1cdH1cbi1cbi1cdGxpcmNmZCA9IG9wZW4oYXJndlsxXSwgT19SRFdSIHwgT19OT05CTE9DSyk7XG4tXHRpZiAobGlyY2ZkID09IC0xKSB7XG4tXHRcdHByaW50ZihcImZhaWxlZCB0byBvcGVuIGxpcmMgZGV2aWNlICVzOiAlbVxcblwiLCBhcmd2WzFdKTtcbi1cdFx0cmV0dXJuIDE7XG4tXHR9XG4tXG4tXHQvKiBMZXQncyB0cnkgZGV0YWNoIGl0IGJlZm9yZSBpdCB3YXMgZXZlciBhdHRhY2hlZCAqL1xuLVx0cmV0ID0gYnBmX3Byb2dfZGV0YWNoMihwcm9nZmQsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIpO1xuLVx0aWYgKHJldCAhPSAtRU5PRU5UKSB7XG4tXHRcdHByaW50ZihcImJwZl9wcm9nX2RldGFjaDIgbm90IGF0dGFjaGVkIHNob3VsZCBmYWlsOiAlbVxcblwiKTtcbi1cdFx0cmV0dXJuIDE7XG4tXHR9XG4tXG4tXHRpbnB1dGZkID0gb3Blbihhcmd2WzJdLCBPX1JET05MWSB8IE9fTk9OQkxPQ0spO1xuLVx0aWYgKGlucHV0ZmQgPT0gLTEpIHtcbi1cdFx0cHJpbnRmKFwiZmFpbGVkIHRvIG9wZW4gaW5wdXQgZGV2aWNlICVzOiAlbVxcblwiLCBhcmd2WzFdKTtcbi1cdFx0cmV0dXJuIDE7XG4tXHR9XG4tXG4tXHRwcm9nX2NudCA9IDEwO1xuLVx0cmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCwgcHJvZ19mbGFncywgcHJvZ19pZHMsXG4tXHRcdFx0ICAgICBcdTAwMjZwcm9nX2NudCk7XG4tXHRpZiAocmV0KSB7XG4tXHRcdHByaW50ZihcIkZhaWxlZCB0byBxdWVyeSBicGYgcHJvZ3JhbXMgb24gbGlyYyBkZXZpY2U6ICVtXFxuXCIpO1xuLVx0XHRyZXR1cm4gMTtcbi1cdH1cbi1cbi1cdGlmIChwcm9nX2NudCAhPSAwKSB7XG4tXHRcdHByaW50ZihcIkV4cGVjdGVkIG5vdGhpbmcgdG8gYmUgYXR0YWNoZWRcXG5cIik7XG4tXHRcdHJldHVybiAxO1xuLVx0fVxuLVxuLVx0cmV0ID0gYnBmX3Byb2dfYXR0YWNoKHByb2dmZCwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCk7XG4tXHRpZiAocmV0KSB7XG4tXHRcdHByaW50ZihcIkZhaWxlZCB0byBhdHRhY2ggYnBmIHRvIGxpcmMgZGV2aWNlOiAlbVxcblwiKTtcbi1cdFx0cmV0dXJuIDE7XG4tXHR9XG4tXG4tXHQvKiBXcml0ZSByYXcgSVIgKi9cbi1cdHJldCA9IHdyaXRlKGxpcmNmZCwgXHUwMDI2dGVzdGlyMSwgc2l6ZW9mKHRlc3RpcjEpKTtcbi1cdGlmIChyZXQgIT0gc2l6ZW9mKHRlc3RpcjEpKSB7XG4tXHRcdHByaW50ZihcIkZhaWxlZCB0byBzZW5kIHRlc3QgSVIgbWVzc2FnZTogJW1cXG5cIik7XG4tXHRcdHJldHVybiAxO1xuLVx0fVxuLVxuLVx0c3RydWN0IHBvbGxmZCBwZmQgPSB7IC5mZCA9IGlucHV0ZmQsIC5ldmVudHMgPSBQT0xMSU4gfTtcbi1cdHN0cnVjdCBpbnB1dF9ldmVudCBldmVudDtcbi1cbi1cdGZvciAoOzspIHtcbi1cdFx0cG9sbChcdTAwMjZwZmQsIDEsIDEwMCk7XG4tXG4tXHRcdC8qIFJlYWQgZGVjb2RlZCBJUiAqL1xuLVx0XHRyZXQgPSByZWFkKGlucHV0ZmQsIFx1MDAyNmV2ZW50LCBzaXplb2YoZXZlbnQpKTtcbi1cdFx0aWYgKHJldCAhPSBzaXplb2YoZXZlbnQpKSB7XG4tXHRcdFx0cHJpbnRmKFwiRmFpbGVkIHRvIHJlYWQgZGVjb2RlZCBJUjogJW1cXG5cIik7XG4tXHRcdFx0cmV0dXJuIDE7XG4tXHRcdH1cbi1cbi1cdFx0aWYgKGV2ZW50LnR5cGUgPT0gRVZfTVNDIFx1MDAyNlx1MDAyNiBldmVudC5jb2RlID09IE1TQ19TQ0FOIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgZXZlbnQudmFsdWUgPT0gMHgxZWFkKSB7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdH1cbi1cbi1cdC8qIFdyaXRlIHJhdyBJUiAqL1xuLVx0cmV0ID0gd3JpdGUobGlyY2ZkLCBcdTAwMjZ0ZXN0aXIyLCBzaXplb2YodGVzdGlyMikpO1xuLVx0aWYgKHJldCAhPSBzaXplb2YodGVzdGlyMikpIHtcbi1cdFx0cHJpbnRmKFwiRmFpbGVkIHRvIHNlbmQgdGVzdCBJUiBtZXNzYWdlOiAlbVxcblwiKTtcbi1cdFx0cmV0dXJuIDE7XG4tXHR9XG4tXG4tXHRmb3IgKDs7KSB7XG4tXHRcdHBvbGwoXHUwMDI2cGZkLCAxLCAxMDApO1xuLVxuLVx0XHQvKiBSZWFkIGRlY29kZWQgSVIgKi9cbi1cdFx0cmV0ID0gcmVhZChpbnB1dGZkLCBcdTAwMjZldmVudCwgc2l6ZW9mKGV2ZW50KSk7XG4tXHRcdGlmIChyZXQgIT0gc2l6ZW9mKGV2ZW50KSkge1xuLVx0XHRcdHByaW50ZihcIkZhaWxlZCB0byByZWFkIGRlY29kZWQgSVI6ICVtXFxuXCIpO1xuLVx0XHRcdHJldHVybiAxO1xuLVx0XHR9XG4tXG4tXHRcdGlmIChldmVudC50eXBlID09IEVWX1JFTCBcdTAwMjZcdTAwMjYgZXZlbnQuY29kZSA9PSBSRUxfWSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIGV2ZW50LnZhbHVlID09IDEgKSB7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdH1cbi1cbi1cdHByb2dfY250ID0gMTA7XG4tXHRyZXQgPSBicGZfcHJvZ19xdWVyeShsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwLCBwcm9nX2ZsYWdzLCBwcm9nX2lkcyxcbi1cdFx0XHQgICAgIFx1MDAyNnByb2dfY250KTtcbi1cdGlmIChyZXQpIHtcbi1cdFx0cHJpbnRmKFwiRmFpbGVkIHRvIHF1ZXJ5IGJwZiBwcm9ncmFtcyBvbiBsaXJjIGRldmljZTogJW1cXG5cIik7XG4tXHRcdHJldHVybiAxO1xuLVx0fVxuLVxuLVx0aWYgKHByb2dfY250ICE9IDEpIHtcbi1cdFx0cHJpbnRmKFwiRXhwZWN0ZWQgb25lIHByb2dyYW0gdG8gYmUgYXR0YWNoZWRcXG5cIik7XG4tXHRcdHJldHVybiAxO1xuLVx0fVxuLVxuLVx0LyogTGV0J3MgdHJ5IGRldGFjaGluZyBpdCBub3cgaXQgaXMgYWN0dWFsbHkgYXR0YWNoZWQgKi9cbi1cdHJldCA9IGJwZl9wcm9nX2RldGFjaDIocHJvZ2ZkLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyKTtcbi1cdGlmIChyZXQpIHtcbi1cdFx0cHJpbnRmKFwiYnBmX3Byb2dfZGV0YWNoMjogcmV0dXJuZWQgJW1cXG5cIik7XG4tXHRcdHJldHVybiAxO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjI6MDc6MzQuNDIxMTIzNDc2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQwNjQ5NjQ0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipCUEYgU2VsZnRlc3QgQ29udmVyc2lvbiBSZXZpZXcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgcmVmYWN0b3JzIHRoZSBgbGlyY19tb2RlMmAgQlBGIHNlbGZ0ZXN0cy4gQmFzaWNhbGx5LCBpdCdzIHRha2luZyBhbiBvbGQsIGNsdW5raWVyIHN0eWxlIHRlc3QgYW5kIG1vZGVybml6aW5nIGl0LCBtb3ZpbmcgaXQgb3ZlciB0byB0aGUgYHRlc3RfcHJvZ3NgIGZyYW1ld29yay4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIHRoaXMgKmFjdHVhbGx5KiBjaGFuZ2VzIGFueXRoaW5nIGNvcmUgdG8gdGhlIGtlcm5lbCwgb3IgaWYgaXQncyBqdXN0IGEgcmVmYWN0b3Jpbmcgb2YgdGhlIHRlc3QgaXRzZWxmLlxuXG5GaXJzdCBpbnN0aW5jdCBpcyB0aGF0IGl0ICpzaG91bGRuJ3QqIHRvdWNoIGtlcm5lbCBmdW5jdGlvbmFsaXR5LiBJdCdzIGFsbCB3aXRoaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYCBkaXJlY3RvcnksIHdoaWNoIGlzIGV4YWN0bHkgd2hlcmUgSSBleHBlY3QgdG8gc2VlIHRlc3QgY29kZS4gT2theSwgbGV0J3MgY29uZmlybSB0aGF0IHdpdGggYSBtb3JlIHRob3JvdWdoIGNoZWNrIG9mIHRoZSBkaWZmLlxuXG5BbHJpZ2h0LCB0aGUgZmlsZXMgbW9kaWZpZWQgYXJlOiBgLmdpdGlnbm9yZWAsIGBNYWtlZmlsZWAsIGFuZCB0aGUgbWFpbiB0ZXN0IGZpbGVzLiBTcGVjaWZpY2FsbHk6IGBwcm9nX3Rlc3RzL2xpcmNfbW9kZTIuY2AsIGBwcm9ncy9saXJjX21vZGUyLmNgLiBUaGUgb2xkIHN0dWZmIOKAkyBgdGVzdF9saXJjX21vZGUyX2tlcm4uY2AsIGB0ZXN0X2xpcmNfbW9kZTIuc2hgLCBhbmQgYHRlc3RfbGlyY19tb2RlMl91c2VyLmNgIOKAkyBhcmUgYWxsIGJlaW5nICpkZWxldGVkKi4gU28sIHdlJ3JlIHJlcGxhY2luZyB0aGUgb2xkIHRlc3Qgd2l0aCB0aGUgbmV3IG9uZS4gTm8ga2VybmVsIHNvdXJjZSBjb2RlIGlzIGJlaW5nIG1vZGlmaWVkIG91dHNpZGUgb2YgYHRvb2xzL2AuIFRoaXMgY29uZmlybXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50LlxuXG5HaXZlbiB0aGF0IHRoaXMgaXMgYSBwdXJlbHkgc2VsZnRlc3QtcmVsYXRlZCBjaGFuZ2UsIEknbSBjb25maWRlbnQgdGhlcmUgYXJlIHplcm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgaXRzZWxmLiBUaGlzIG1lYW5zIHdlJ3JlIHNhZmUgdG8gbWFyayBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTI1LCJPdXRwdXRUb2tlbnMiOjgwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjI6MDc6NDIuODI3NjIyMjgzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEJQRiBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8pIGJ5IGNvbnZlcnRpbmcgYW4gb2xkLXN0eWxlIHRlc3QgaW50byB0aGUgdGVzdF9wcm9ncyBmcmFtZXdvcmsuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvKSBieSBjb252ZXJ0aW5nIGFuIG9sZC1zdHlsZSB0ZXN0IGludG8gdGhlIHRlc3RfcHJvZ3MgZnJhbWV3b3JrLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIyOjA3OjQyLjgyNzY0MjcyM1oiLCJTZXEiOjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzwc62[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-20 21:15:06 +0000 UTC FinishedAt: 2026-08-20 22:07:43 +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+CgkJCTx0ZD4yMDI2LzA4LzIwIDIyOjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvKSBieSBjb252ZXJ0aW5nIGFuIG9sZC1zdHlsZSB0ZXN0IGludG8gdGhlIHRlc3RfcHJvZ3MgZnJhbWV3b3JrLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjI6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjMWNjMGE4ZmUzNWU2NzA4ZmNlMGExODE5M2U0Njg5NTMxYTNhYWMzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjAgMjI6MDc6MzEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvLmdpdGlnbm9yZVxuaW5kZXggOTg2YTYzODkxODZiYS4uYjgxNWJmMGQ4ODc3NCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8uZ2l0aWdub3JlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvLmdpdGlnbm9yZVxuQEAgLTE3LDcgJiM0MzsxNyw2IEBAIHRlc3RfdmVyaWZpZXJfbG9nXG4gZmVhdHVyZVxuIHVyYW5kb21fcmVhZFxuIHRlc3Rfc29ja21hcFxuLXRlc3RfbGlyY19tb2RlMl91c2VyXG4gZmxvd19kaXNzZWN0b3JfbG9hZFxuIHRlc3RfdGNwbm90aWZ5X3VzZXJcbiB0ZXN0X2xpYmJwZlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxuaW5kZXggMmIyZjkzZGVjNDc0Yi4uZjhlYzBmNTc0NTU5YSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXG5AQCAtMTIzLDcgJiM0MzsxMjMsNiBAQCBURVNUX0ZJTEVTID0geHNrX3ByZXJlcXMuc2ggJCh3aWxkY2FyZCBwcm9ncy9idGZfZHVtcF90ZXN0X2Nhc2VfKi5jKVxuIFxuICMgT3JkZXIgY29ycmVzcG9uZCB0byAmIzM5O21ha2UgcnVuX3Rlc3RzJiMzOTsgb3JkZXJcbiBURVNUX1BST0dTIDo9IHRlc3Rfa21vZC5zaCBcXFxuLVx0dGVzdF9saXJjX21vZGUyLnNoIFxcXG4gXHR0ZXN0X2JwZnRvb2xfYnVpbGQuc2ggXFxcbiBcdHRlc3RfZG9jX2J1aWxkLnNoIFxcXG4gXHR0ZXN0X3hzay5zaCBcXFxuQEAgLTE0MSw3ICYjNDM7MTQwLDYgQEAgVEVTVF9HRU5fUFJPR1NfRVhURU5ERUQgPSBcXFxuIFx0YmVuY2ggXFxcbiBcdGZsb3dfZGlzc2VjdG9yX2xvYWQgXFxcbiBcdHRlc3RfY3BwIFxcXG4tXHR0ZXN0X2xpcmNfbW9kZTJfdXNlciBcXFxuIFx0dmVyaXN0YXQgXFxcbiBcdHhkcF9mZWF0dXJlcyBcXFxuIFx0eGRwX2h3X21ldGFkYXRhIFxcXG5AQCAtMzM4LDcgJiM0MzszMzYsNiBAQCAkKE9VVFBVVCkvdGVzdF9zb2NrbWFwOiAkKENHUk9VUF9IRUxQRVJTKSAkKFRFU1RJTkdfSEVMUEVSUylcbiAkKE9VVFBVVCkvdGVzdF90Y3Bub3RpZnlfdXNlcjogJChDR1JPVVBfSEVMUEVSUykgJChURVNUSU5HX0hFTFBFUlMpICQoVFJBQ0VfSEVMUEVSUylcbiAkKE9VVFBVVCkvdGVzdF9zb2NrX2ZpZWxkczogJChDR1JPVVBfSEVMUEVSUykgJChURVNUSU5HX0hFTFBFUlMpXG4gJChPVVRQVVQpL3Rlc3RfdGFnOiAkKFRFU1RJTkdfSEVMUEVSUylcbi0kKE9VVFBVVCkvdGVzdF9saXJjX21vZGUyX3VzZXI6ICQoVEVTVElOR19IRUxQRVJTKVxuICQoT1VUUFVUKS9mbG93X2Rpc3NlY3Rvcl9sb2FkOiAkKFRFU1RJTkdfSEVMUEVSUylcbiAkKE9VVFBVVCkvdGVzdF9tYXBzOiAkKFRFU1RJTkdfSEVMUEVSUylcbiAkKE9VVFBVVCkvdGVzdF92ZXJpZmllcjogJChURVNUSU5HX0hFTFBFUlMpICQoQ0FQX0hFTFBFUlMpICQoVU5QUklWX0hFTFBFUlMpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGlyY19tb2RlMi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGlyY19tb2RlMi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOGU0ODVkYjcwYjc4YVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGlyY19tb2RlMi5jXG5AQCAtMCwwICYjNDM7MSwzMzQgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7Ly8gdGVzdCBpciBkZWNvZGVyXG4mIzQzOy8vXG4mIzQzOy8vIENvcHlyaWdodCAoQykgMjAxOCBTZWFuIFlvdW5nIFx1MDAzY3NlYW5AbWVzcy5vcmdcdTAwM2VcbiYjNDM7XG4mIzQzOy8vIEEgbGlyYyBjaGFyZGV2IGlzIGEgZGV2aWNlIHJlcHJlc2VudGluZyBhIGNvbnN1bWVyIElSIChjaXIpIGRldmljZSB3aGljaFxuJiM0MzsvLyBjYW4gcmVjZWl2ZSBpbmZyYXJlZCBzaWduYWxzIGZyb20gcmVtb3RlIGNvbnRyb2wgYW5kL29yIHRyYW5zbWl0IElSLlxuJiM0MzsvL1xuJiM0MzsvLyBJUiBpcyBzZW50IGFzIGEgc2VyaWVzIG9mIHB1bHNlcyBhbmQgc3BhY2Ugc29tZXdoYXQgbGlrZSBtb3JzZSBjb2RlLiBUaGVcbiYjNDM7Ly8gQlBGIHByb2dyYW0gY2FuIGRlY29kZSB0aGlzIGludG8gc2NhbmNvZGVzIHNvIHRoYXQgcmMtY29yZSBjYW4gdHJhbnNsYXRlXG4mIzQzOy8vIHRoaXMgaW50byBpbnB1dCBrZXkgY29kZXMgdXNpbmcgdGhlIHJjIGtleW1hcC5cbiYjNDM7Ly9cbiYjNDM7Ly8gVGhpcyB0ZXN0IHdvcmtzIGJ5IHNlbmRpbmcgSVIgb3ZlciByYy1sb29wYmFjaywgc28gdGhlIElSIGlzIHByb2Nlc3NlZCBieVxuJiM0MzsvLyBCUEYgYW5kIHRoZW4gZGVjb2RlZCBpbnRvIHNjYW5jb2Rlcy4gVGhlIGxpcmMgY2hhcmRldiBtdXN0IGJlIHRoZSBvbmVcbiYjNDM7Ly8gYXNzb2NpYXRlZCB3aXRoIHJjLWxvb3BiYWNrLCBzZWUgdGhlIG91dHB1dCBvZiBpci1rZXl0YWJsZSgxKS5cbiYjNDM7Ly9cbiYjNDM7Ly8gVGhlIGZvbGxvd2luZyBDT05GSUcgb3B0aW9ucyBtdXN0IGJlIGVuYWJsZWQgZm9yIHRoZSB0ZXN0IHRvIHN1Y2NlZWQ6XG4mIzQzOy8vIENPTkZJR19SQ19DT1JFPXlcbiYjNDM7Ly8gQ09ORklHX0JQRl9SQVdJUl9FVkVOVD15XG4mIzQzOy8vIENPTkZJR19SQ19MT09QQkFDSz15XG4mIzQzOy8vIENPTkZJR19MSVJDPXlcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lucHV0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGlyYy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2dsb2IuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW1pdHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2Nwb2xsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2xpcmNfbW9kZTIuc2tlbC5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBSZWFkIHRoZSBERVZOQU1FPSBsaW5lIG91dCBvZiB0aGUgZmlyc3QgdWV2ZW50IGZpbGUgdGhhdCBtYXRjaGVzXG4mIzQzOyAqIHBhdHRlcm4sIGFuZCB0dXJuIGl0IGludG8gYSAvZGV2L1x1MDAzY25hbWVcdTAwM2UgcGF0aC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIGZpbmRfZGV2bmFtZShjb25zdCBjaGFyICpwYXR0ZXJuLCBjaGFyICpwYXRoLCBzaXplX3QgcGF0aF9zeilcbiYjNDM7e1xuJiM0MztcdGdsb2JfdCBnbCA9IHt9O1xuJiM0MztcdGJvb2wgZm91bmQgPSBmYWxzZTtcbiYjNDM7XHRGSUxFICpmO1xuJiM0MztcbiYjNDM7XHRpZiAoZ2xvYihwYXR0ZXJuLCAwLCBOVUxMLCBcdTAwMjZnbCkgfHwgZ2wuZ2xfcGF0aGMgPT0gMClcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRmID0gZm9wZW4oZ2wuZ2xfcGF0aHZbMF0sIFwmIzM0O3JcJiMzNDspO1xuJiM0MztcdGlmICghZilcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRjaGFyIGxpbmVbMjU2XTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZikpIHtcbiYjNDM7XHRcdGNoYXIgKnZhbDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoc3RybmNtcChsaW5lLCBcJiMzNDtERVZOQU1FPVwmIzM0OywgOCkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHZhbCA9IGxpbmUgJiM0MzsgODtcbiYjNDM7XHRcdHZhbFtzdHJjc3BuKHZhbCwgXCYjMzQ7XFxuXCYjMzQ7KV0gPSAmIzM5O1xcMCYjMzk7O1xuJiM0MztcdFx0c25wcmludGYocGF0aCwgcGF0aF9zeiwgXCYjMzQ7L2Rldi8lc1wmIzM0OywgdmFsKTtcbiYjNDM7XHRcdGZvdW5kID0gdHJ1ZTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZmNsb3NlKGYpO1xuJiM0MztvdXQ6XG4mIzQzO1x0Z2xvYmZyZWUoXHUwMDI2Z2wpO1xuJiM0MztcdHJldHVybiBmb3VuZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogTG9hZCByYy1sb29wYmFjayBhbmQgZmluZCB0aGUgbGlyYyBhbmQgaW5wdXQgY2hhcmRldnMgaXQgY3JlYXRlZC4gKi9cbiYjNDM7c3RhdGljIGJvb2wgZmluZF9sb29wYmFja19kZXZpY2VzKGNoYXIgKmxpcmNfcGF0aCwgY2hhciAqaW5wdXRfcGF0aCxcbiYjNDM7XHRcdFx0XHQgIHNpemVfdCBwYXRoX3N6KVxuJiM0Mzt7XG4mIzQzO1x0Z2xvYl90IGdsID0ge307XG4mIzQzO1x0Ym9vbCBmb3VuZCA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHQvKiBJZ25vcmUgZmFpbHVyZSwgd2UgY2hlY2sgZm9yIHRoZSByZXN1bHRpbmcgZGV2aWNlcyBiZWxvdy4gKi9cbiYjNDM7XHRTWVNfTk9GQUlMKFwmIzM0O21vZHByb2JlIHJjLWxvb3BiYWNrIFx1MDAzZSAvZGV2L251bGwgMlx1MDAzZVx1MDAyNjFcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRpZiAoZ2xvYihcJiMzNDsvc3lzL2NsYXNzL3JjL3JjKlwmIzM0OywgMCwgTlVMTCwgXHUwMDI2Z2wpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGZvciAoc2l6ZV90IGkgPSAwOyBpIFx1MDAzYyBnbC5nbF9wYXRoYzsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGNvbnN0IGNoYXIgKnJjZGlyID0gZ2wuZ2xfcGF0aHZbaV07XG4mIzQzO1x0XHRjaGFyIHVldmVudF9wYXRoW1BBVEhfTUFYXTtcbiYjNDM7XHRcdGNoYXIgdWV2ZW50WzQwOTZdO1xuJiM0MztcdFx0Y2hhciBwYXR0ZXJuW1BBVEhfTUFYXTtcbiYjNDM7XHRcdEZJTEUgKmY7XG4mIzQzO1x0XHRzaXplX3QgbjtcbiYjNDM7XG4mIzQzO1x0XHRzbnByaW50Zih1ZXZlbnRfcGF0aCwgc2l6ZW9mKHVldmVudF9wYXRoKSwgXCYjMzQ7JXMvdWV2ZW50XCYjMzQ7LCByY2Rpcik7XG4mIzQzO1x0XHRmID0gZm9wZW4odWV2ZW50X3BhdGgsIFwmIzM0O3JcJiMzNDspO1xuJiM0MztcdFx0aWYgKCFmKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdG4gPSBmcmVhZCh1ZXZlbnQsIDEsIHNpemVvZih1ZXZlbnQpIC0gMSwgZik7XG4mIzQzO1x0XHRmY2xvc2UoZik7XG4mIzQzO1x0XHR1ZXZlbnRbbl0gPSAmIzM5O1xcMCYjMzk7O1xuJiM0MztcbiYjNDM7XHRcdGlmICghc3Ryc3RyKHVldmVudCwgXCYjMzQ7RFJWX05BTUU9cmMtbG9vcGJhY2tcJiMzNDspKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRzbnByaW50ZihwYXR0ZXJuLCBzaXplb2YocGF0dGVybiksIFwmIzM0OyVzL2xpcmMqL3VldmVudFwmIzM0OywgcmNkaXIpO1xuJiM0MztcdFx0aWYgKCFmaW5kX2Rldm5hbWUocGF0dGVybiwgbGlyY19wYXRoLCBwYXRoX3N6KSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0c25wcmludGYocGF0dGVybiwgc2l6ZW9mKHBhdHRlcm4pLCBcJiMzNDslcy9pbnB1dCovZXZlbnQqL3VldmVudFwmIzM0OywgcmNkaXIpO1xuJiM0MztcdFx0aWYgKCFmaW5kX2Rldm5hbWUocGF0dGVybiwgaW5wdXRfcGF0aCwgcGF0aF9zeikpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGZvdW5kID0gdHJ1ZTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRpZiAoIWZvdW5kKSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7Tm8gcmMgZGV2aWNlcyBmb3VuZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7RW5hYmxlIENPTkZJR19SQ19MT09QQkFDSywgQ09ORklHX1JDX0xPT1BCQUNLLCBhbmQgQ09ORklHX0xJUkNcXG5cJiMzNDspO1xuJiM0Mzs/XHR9XG4mIzQzO1xuJiM0MztcdGdsb2JmcmVlKFx1MDAyNmdsKTtcbiYjNDM7XHRyZXR1cm4gZm91bmQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgdGVzdF9saXJjX21vZGUyKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGxpcmNfcGF0aFtQQVRIX01BWF0sIGlucHV0X3BhdGhbUEFUSF9NQVhdO1xuJiM0MztcdGludCBsaXJjZmQgPSAtMSwgaW5wdXRmZCA9IC0xLCBwcm9nZmQsIHByb2dmZDIgPSAtMTtcbiYjNDM7XHRzdHJ1Y3QgbGlyY19tb2RlMiAqc2tlbCA9IE5VTEwsICpza2VsMiA9IE5VTEw7XG4mIzQzO1x0X191MzIgcHJvZ19pZHNbMTBdLCBwcm9nX2ZsYWdzWzEwXSwgcHJvZ19jbnQ7XG4mIzQzO1x0c3RydWN0IGJwZl9wcm9nX2luZm8gaW5mbztcbiYjNDM7XHRfX3UzMiBpbmZvX2xlbiwgcHJvZ19pZCwgcHJvZ19pZDI7XG4mIzQzO1x0aW50IHRlc3RpcjEgPSAweDhlYWQ7XHQvKiBrZXlkb3duIGZsYWcgKDB4ODAwMCkgfCBzY2FuY29kZSAweGVhZCAqL1xuJiM0MztcdGludCB0ZXN0aXIyID0gMHg0MDgxO1x0LyogcG9pbnRlcl9yZWwgZmxhZyAoMHg0MDAwKSB8IHJlbF94PTEgfCByZWxfeT0xICovXG4mIzQzO1x0c3RydWN0IGlucHV0X2V2ZW50IGV2ZW50O1xuJiM0MztcdHN0cnVjdCBwb2xsZmQgcGZkID0ge307XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKGdldHVpZCgpICE9IDApIHtcbiYjNDM7XHRcdHRlc3RfX3NraXAoKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghZmluZF9sb29wYmFja19kZXZpY2VzKGxpcmNfcGF0aCwgaW5wdXRfcGF0aCwgc2l6ZW9mKGxpcmNfcGF0aCkpKSB7XG4mIzQzO1x0XHR0ZXN0X19za2lwKCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRza2VsID0gbGlyY19tb2RlMl9fb3Blbl9hbmRfbG9hZCgpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtsaXJjX21vZGUyX19vcGVuX2FuZF9sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0cHJvZ2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3MuYnBmX2RlY29kZXIpO1xuJiM0MztcbiYjNDM7XHRtZW1zZXQoXHUwMDI2aW5mbywgMCwgc2l6ZW9mKGluZm8pKTtcbiYjNDM7XHRpbmZvX2xlbiA9IHNpemVvZihpbmZvKTtcbiYjNDM7XHRyZXQgPSBicGZfcHJvZ19nZXRfaW5mb19ieV9mZChwcm9nZmQsIFx1MDAyNmluZm8sIFx1MDAyNmluZm9fbGVuKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwmIzM0O2dldCBmaXJzdCBwcm9ncmFtJiMzOTtzIGluZm9cJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0cHJvZ19pZCA9IGluZm8uaWQ7XG4mIzQzO1xuJiM0MztcdGxpcmNmZCA9IG9wZW4obGlyY19wYXRoLCBPX1JEV1IgfCBPX05PTkJMT0NLKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShsaXJjZmQsIDAsIFwmIzM0O29wZW4gbGlyYyBkZXZpY2VcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdC8qIFRyeSB0byBkZXRhY2ggaXQgYmVmb3JlIGl0IHdhcyBldmVyIGF0dGFjaGVkLCBzaG91bGQgZmFpbC4gKi9cbiYjNDM7XHRyZXQgPSBicGZfcHJvZ19kZXRhY2gyKHByb2dmZCwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMik7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEocmV0LCAtRU5PRU5ULCBcJiMzNDtkZXRhY2ggdW5hdHRhY2hlZCBwcm9ncmFtXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRpbnB1dGZkID0gb3BlbihpbnB1dF9wYXRoLCBPX1JET05MWSB8IE9fTk9OQkxPQ0spO1xuJiM0MztcdGlmICghQVNTRVJUX0dFKGlucHV0ZmQsIDAsIFwmIzM0O29wZW4gaW5wdXQgZGV2aWNlXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRwcm9nX2NudCA9IEFSUkFZX1NJWkUocHJvZ19pZHMpO1xuJiM0MztcdHJldCA9IGJwZl9wcm9nX3F1ZXJ5KGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDAsIHByb2dfZmxhZ3MsIHByb2dfaWRzLFxuJiM0MztcdFx0XHQgICAgIFx1MDAyNnByb2dfY250KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwmIzM0O3F1ZXJ5IHByb2dyYW1zIGJlZm9yZSBhdHRhY2hcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEocHJvZ19jbnQsIDAsIFwmIzM0O25vIHByb2dyYW1zIHNob3VsZCBiZSBhdHRhY2hlZCB5ZXRcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdC8qIEludmFsaWQgYXR0YWNoIGZsYWdzIG11c3QgYmUgcmVqZWN0ZWQsIGFuZCBtdXN0IG5vdCBhdHRhY2guICovXG4mIzQzO1x0cmV0ID0gYnBmX3Byb2dfYXR0YWNoKHByb2dmZCwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMSk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEocmV0LCAtRUlOVkFMLCBcJiMzNDthdHRhY2ggd2l0aCBpbnZhbGlkIGZsYWdzXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRwcm9nX2NudCA9IEFSUkFZX1NJWkUocHJvZ19pZHMpO1xuJiM0MztcdHJldCA9IGJwZl9wcm9nX3F1ZXJ5KGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDAsIHByb2dfZmxhZ3MsIHByb2dfaWRzLFxuJiM0MztcdFx0XHQgICAgIFx1MDAyNnByb2dfY250KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwmIzM0O3F1ZXJ5IHByb2dyYW1zIGFmdGVyIHJlamVjdGVkIGF0dGFjaFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShwcm9nX2NudCwgMCwgXCYjMzQ7cmVqZWN0ZWQgYXR0YWNoIHNob3VsZCBub3QgYXR0YWNoXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBicGZfcHJvZ19hdHRhY2gocHJvZ2ZkLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwmIzM0O2F0dGFjaCBwcm9ncmFtIHRvIGxpcmMgZGV2aWNlXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHQvKiBJbnZhbGlkIHF1ZXJ5IGZsYWdzIG11c3QgYmUgcmVqZWN0ZWQgdG9vLCB3aXRob3V0IHVwc2V0dGluZyBzdGF0ZS4gKi9cbiYjNDM7XHRwcm9nX2NudCA9IEFSUkFZX1NJWkUocHJvZ19pZHMpO1xuJiM0MztcdHJldCA9IGJwZl9wcm9nX3F1ZXJ5KGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDEsIHByb2dfZmxhZ3MsIHByb2dfaWRzLFxuJiM0MztcdFx0XHQgICAgIFx1MDAyNnByb2dfY250KTtcbiYjNDM7XHRBU1NFUlRfRVEocmV0LCAtRUlOVkFMLCBcJiMzNDtxdWVyeSB3aXRoIGludmFsaWQgZmxhZ3NcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRwcm9nX2NudCA9IEFSUkFZX1NJWkUocHJvZ19pZHMpO1xuJiM0MztcdHJldCA9IGJwZl9wcm9nX3F1ZXJ5KGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDAsIHByb2dfZmxhZ3MsIHByb2dfaWRzLFxuJiM0MztcdFx0XHQgICAgIFx1MDAyNnByb2dfY250KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwmIzM0O3F1ZXJ5IHByb2dyYW1zIGFmdGVyIGF0dGFjaFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dF9kZXRhY2g7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEocHJvZ19jbnQsIDEsIFwmIzM0O29uZSBwcm9ncmFtIHNob3VsZCBiZSBhdHRhY2hlZFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dF9kZXRhY2g7XG4mIzQzO1x0QVNTRVJUX0VRKHByb2dfaWRzWzBdLCBwcm9nX2lkLCBcJiMzNDtxdWVyaWVkIGlkIHNob3VsZCBtYXRjaCBhdHRhY2hlZCBwcm9ncmFtXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LyogV3JpdGUgcmF3IElSICovXG4mIzQzO1x0cmV0ID0gd3JpdGUobGlyY2ZkLCBcdTAwMjZ0ZXN0aXIxLCBzaXplb2YodGVzdGlyMSkpO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHJldCwgc2l6ZW9mKHRlc3RpcjEpLCBcJiMzNDtzZW5kIHRlc3QgSVIgbWVzc2FnZSAxXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0X2RldGFjaDtcbiYjNDM7XG4mIzQzO1x0cGZkLmZkID0gaW5wdXRmZDtcbiYjNDM7XHRwZmQuZXZlbnRzID0gUE9MTElOO1xuJiM0MztcbiYjNDM7XHRmb3IgKDs7KSB7XG4mIzQzO1x0XHRwb2xsKFx1MDAyNnBmZCwgMSwgMTAwKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBSZWFkIGRlY29kZWQgSVIgKi9cbiYjNDM7XHRcdHJldCA9IHJlYWQoaW5wdXRmZCwgXHUwMDI2ZXZlbnQsIHNpemVvZihldmVudCkpO1xuJiM0MztcdFx0aWYgKCFBU1NFUlRfRVEocmV0LCBzaXplb2YoZXZlbnQpLCBcJiMzNDtyZWFkIGRlY29kZWQgSVIgMVwmIzM0OykpXG4mIzQzO1x0XHRcdGdvdG8gb3V0X2RldGFjaDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoZXZlbnQudHlwZSA9PSBFVl9NU0MgXHUwMDI2XHUwMDI2IGV2ZW50LmNvZGUgPT0gTVNDX1NDQU4gXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgZXZlbnQudmFsdWUgPT0gMHhlYWQpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogV3JpdGUgcmF3IElSICovXG4mIzQzO1x0cmV0ID0gd3JpdGUobGlyY2ZkLCBcdTAwMjZ0ZXN0aXIyLCBzaXplb2YodGVzdGlyMikpO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHJldCwgc2l6ZW9mKHRlc3RpcjIpLCBcJiMzNDtzZW5kIHRlc3QgSVIgbWVzc2FnZSAyXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0X2RldGFjaDtcbiYjNDM7XG4mIzQzO1x0Zm9yICg7Oykge1xuJiM0MztcdFx0cG9sbChcdTAwMjZwZmQsIDEsIDEwMCk7XG4mIzQzO1xuJiM0MztcdFx0LyogUmVhZCBkZWNvZGVkIElSICovXG4mIzQzO1x0XHRyZXQgPSByZWFkKGlucHV0ZmQsIFx1MDAyNmV2ZW50LCBzaXplb2YoZXZlbnQpKTtcbiYjNDM7XHRcdGlmICghQVNTRVJUX0VRKHJldCwgc2l6ZW9mKGV2ZW50KSwgXCYjMzQ7cmVhZCBkZWNvZGVkIElSIDJcJiMzNDspKVxuJiM0MztcdFx0XHRnb3RvIG91dF9kZXRhY2g7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGV2ZW50LnR5cGUgPT0gRVZfUkVMIFx1MDAyNlx1MDAyNiBldmVudC5jb2RlID09IFJFTF9ZIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGV2ZW50LnZhbHVlID09IDEpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHJvZ19jbnQgPSBBUlJBWV9TSVpFKHByb2dfaWRzKTtcbiYjNDM7XHRyZXQgPSBicGZfcHJvZ19xdWVyeShsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwLCBwcm9nX2ZsYWdzLCBwcm9nX2lkcyxcbiYjNDM7XHRcdFx0ICAgICBcdTAwMjZwcm9nX2NudCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0socmV0LCBcJiMzNDtxdWVyeSBwcm9ncmFtcyBhZnRlciBJUiB3YXMgZGVjb2RlZFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dF9kZXRhY2g7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEocHJvZ19jbnQsIDEsIFwmIzM0O29uZSBwcm9ncmFtIHNob3VsZCBzdGlsbCBiZSBhdHRhY2hlZFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dF9kZXRhY2g7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIGxpcmMgY2hhcmRldiBjYW4gaG9sZCBtb3JlIHRoYW4gb25lIGF0dGFjaGVkIHByb2dyYW0gYXQgb25jZS5cbiYjNDM7XHQgKiBMb2FkIGEgc2Vjb25kLCBpbmRlcGVuZGVudCBpbnN0YW5jZSBhbmQgY2hlY2sgaXQgY2FuIGJlIGF0dGFjaGVkXG4mIzQzO1x0ICogYWxvbmdzaWRlIHRoZSBmaXJzdCwgcXVlcmllZCwgYW5kIHRoZW4gZGV0YWNoZWQgb24gaXRzIG93blxuJiM0MztcdCAqIHdpdGhvdXQgZGlzdHVyYmluZyB0aGUgZmlyc3QgcHJvZ3JhbSYjMzk7cyBhdHRhY2htZW50LlxuJiM0MztcdCAqL1xuJiM0MztcdHNrZWwyID0gbGlyY19tb2RlMl9fb3Blbl9hbmRfbG9hZCgpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsMiwgXCYjMzQ7bGlyY19tb2RlMl9fb3Blbl9hbmRfbG9hZCAoMm5kKVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dF9kZXRhY2g7XG4mIzQzO1xuJiM0MztcdHByb2dmZDIgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbDItXHUwMDNlcHJvZ3MuYnBmX2RlY29kZXIpO1xuJiM0MztcbiYjNDM7XHRtZW1zZXQoXHUwMDI2aW5mbywgMCwgc2l6ZW9mKGluZm8pKTtcbiYjNDM7XHRpbmZvX2xlbiA9IHNpemVvZihpbmZvKTtcbiYjNDM7XHRyZXQgPSBicGZfcHJvZ19nZXRfaW5mb19ieV9mZChwcm9nZmQyLCBcdTAwMjZpbmZvLCBcdTAwMjZpbmZvX2xlbik7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0socmV0LCBcJiMzNDtnZXQgc2Vjb25kIHByb2dyYW0mIzM5O3MgaW5mb1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dF9kZXRhY2g7XG4mIzQzO1x0cHJvZ19pZDIgPSBpbmZvLmlkO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBicGZfcHJvZ19hdHRhY2gocHJvZ2ZkMiwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0socmV0LCBcJiMzNDthdHRhY2ggc2Vjb25kIHByb2dyYW0gdG8gbGlyYyBkZXZpY2VcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXRfZGV0YWNoO1xuJiM0MztcbiYjNDM7XHRwcm9nX2NudCA9IEFSUkFZX1NJWkUocHJvZ19pZHMpO1xuJiM0MztcdHJldCA9IGJwZl9wcm9nX3F1ZXJ5KGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDAsIHByb2dfZmxhZ3MsIHByb2dfaWRzLFxuJiM0MztcdFx0XHQgICAgIFx1MDAyNnByb2dfY250KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwmIzM0O3F1ZXJ5IHByb2dyYW1zIGFmdGVyIHNlY29uZCBhdHRhY2hcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXRfZGV0YWNoMjtcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShwcm9nX2NudCwgMiwgXCYjMzQ7dHdvIHByb2dyYW1zIHNob3VsZCBiZSBhdHRhY2hlZFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dF9kZXRhY2gyO1xuJiM0MztcdEFTU0VSVF9UUlVFKChwcm9nX2lkc1swXSA9PSBwcm9nX2lkIFx1MDAyNlx1MDAyNiBwcm9nX2lkc1sxXSA9PSBwcm9nX2lkMikgfHxcbiYjNDM7XHRcdCAgICAocHJvZ19pZHNbMF0gPT0gcHJvZ19pZDIgXHUwMDI2XHUwMDI2IHByb2dfaWRzWzFdID09IHByb2dfaWQpLFxuJiM0MztcdFx0ICAgIFwmIzM0O3F1ZXJpZWQgaWRzIHNob3VsZCBiZSB0aGUgdHdvIGF0dGFjaGVkIHByb2dyYW1zXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LyogRGV0YWNoIHRoZSBzZWNvbmQgcHJvZ3JhbTsgdGhlIGZpcnN0IHNob3VsZCByZW1haW4gYXR0YWNoZWQuICovXG4mIzQzO1x0cmV0ID0gYnBmX3Byb2dfZGV0YWNoMihwcm9nZmQyLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwmIzM0O2RldGFjaCBzZWNvbmQgcHJvZ3JhbVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dF9kZXRhY2gyO1xuJiM0MztcbiYjNDM7XHQvKiBEZXRhY2hpbmcgYW4gYWxyZWFkeS1kZXRhY2hlZCBwcm9ncmFtIHNob3VsZCBub3cgZmFpbC4gKi9cbiYjNDM7XHRyZXQgPSBicGZfcHJvZ19kZXRhY2gyKHByb2dmZDIsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIpO1xuJiM0MztcdEFTU0VSVF9FUShyZXQsIC1FTk9FTlQsIFwmIzM0O2RldGFjaCBzZWNvbmQgcHJvZ3JhbSBhZ2FpblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHByb2dfY250ID0gQVJSQVlfU0laRShwcm9nX2lkcyk7XG4mIzQzO1x0cmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCwgcHJvZ19mbGFncywgcHJvZ19pZHMsXG4mIzQzO1x0XHRcdCAgICAgXHUwMDI2cHJvZ19jbnQpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKHJldCwgXCYjMzQ7cXVlcnkgcHJvZ3JhbXMgYWZ0ZXIgc2Vjb25kIGRldGFjaFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dF9kZXRhY2g7XG4mIzQzO1x0aWYgKCFBU1NFUlRfRVEocHJvZ19jbnQsIDEsIFwmIzM0O29uZSBwcm9ncmFtIHNob3VsZCByZW1haW4gYXR0YWNoZWRcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXRfZGV0YWNoO1xuJiM0MztcdEFTU0VSVF9FUShwcm9nX2lkc1swXSwgcHJvZ19pZCwgXCYjMzQ7cmVtYWluaW5nIHByb2dyYW0gc2hvdWxkIGJlIHRoZSBmaXJzdCBvbmVcJiMzNDspO1xuJiM0MztcbiYjNDM7b3V0X2RldGFjaDpcbiYjNDM7XHQvKiBMZXQmIzM5O3MgdHJ5IGRldGFjaGluZyBpdCBub3cgaXQgaXMgYWN0dWFsbHkgYXR0YWNoZWQuICovXG4mIzQzO1x0cmV0ID0gYnBmX3Byb2dfZGV0YWNoMihwcm9nZmQsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIpO1xuJiM0MztcdEFTU0VSVF9PSyhyZXQsIFwmIzM0O2RldGFjaCBwcm9ncmFtIGZyb20gbGlyYyBkZXZpY2VcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKiBEZXRhY2hpbmcgaXQgYWdhaW4gc2hvdWxkIG5vdyBmYWlsIHRoZSBzYW1lIHdheS4gKi9cbiYjNDM7XHRyZXQgPSBicGZfcHJvZ19kZXRhY2gyKHByb2dmZCwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMik7XG4mIzQzO1x0QVNTRVJUX0VRKHJldCwgLUVOT0VOVCwgXCYjMzQ7ZGV0YWNoIHByb2dyYW0gZnJvbSBsaXJjIGRldmljZSBhZ2FpblwmIzM0Oyk7XG4mIzQzO1x0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztvdXRfZGV0YWNoMjpcbiYjNDM7XHQvKiBCZXN0LWVmZm9ydCBjbGVhbnVwIG9mIHRoZSBzZWNvbmQgcHJvZ3JhbSBiZWZvcmUgYmFpbGluZyBvdXQuICovXG4mIzQzO1x0YnBmX3Byb2dfZGV0YWNoMihwcm9nZmQyLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyKTtcbiYjNDM7XHRnb3RvIG91dF9kZXRhY2g7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0aWYgKGlucHV0ZmQgXHUwMDNlPSAwKVxuJiM0MztcdFx0Y2xvc2UoaW5wdXRmZCk7XG4mIzQzO1x0aWYgKGxpcmNmZCBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZShsaXJjZmQpO1xuJiM0MztcdGxpcmNfbW9kZTJfX2Rlc3Ryb3koc2tlbDIpO1xuJiM0MztcdGxpcmNfbW9kZTJfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbGlyY19tb2RlMi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xpcmNfbW9kZTIuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjk4MTM3ZjNjNWMwM2Rcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9saXJjX21vZGUyLmNcbkBAIC0wLDAgJiM0MzsxLDMyIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8vIHRlc3QgaXIgZGVjb2RlclxuJiM0MzsvL1xuJiM0MzsvLyBDb3B5cmlnaHQgKEMpIDIwMTggU2VhbiBZb3VuZyBcdTAwM2NzZWFuQG1lc3Mub3JnXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9saXJjLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtsaXJjX21vZGUyXCYjMzQ7KVxuJiM0MztpbnQgYnBmX2RlY29kZXIodW5zaWduZWQgaW50ICpzYW1wbGUpXG4mIzQzO3tcbiYjNDM7XHRpZiAoTElSQ19JU19QVUxTRSgqc2FtcGxlKSkge1xuJiM0MztcdFx0dW5zaWduZWQgaW50IGR1cmF0aW9uID0gTElSQ19WQUxVRSgqc2FtcGxlKTtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogRmxhZyBiaXRzIHBpY2tlZCBkZWxpYmVyYXRlbHkgbG93OiByYy1sb29wYmFjayBzaW11bGF0ZXNcbiYjNDM7XHRcdCAqIGEgcmVjZWl2ZXIgb3ZlcmZsb3cgZm9yIGFueSBwdWxzZSBvdmVyIE1TX1RPX1VTKDUwKSAoc2VlXG4mIzQzO1x0XHQgKiBsb29wX3R4X2lyKCkgaW4gcmMtbG9vcGJhY2suYyksIHdoaWNoIHdvdWxkIHNpbGVudGx5XG4mIzQzO1x0XHQgKiBzd2FsbG93IHRoZSBzYW1wbGUgYmVmb3JlIGl0IGV2ZXIgcmVhY2hlcyB0aGlzIGRlY29kZXIuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChkdXJhdGlvbiBcdTAwMjYgMHg4MDAwKVxuJiM0MztcdFx0XHRicGZfcmNfa2V5ZG93bihzYW1wbGUsIDB4NDAsIGR1cmF0aW9uIFx1MDAyNiAweDNmZmYsIDApO1xuJiM0MztcdFx0aWYgKGR1cmF0aW9uIFx1MDAyNiAweDQwMDApXG4mIzQzO1x0XHRcdGJwZl9yY19wb2ludGVyX3JlbChzYW1wbGUsIChkdXJhdGlvbiBcdTAwM2VcdTAwM2UgNykgXHUwMDI2IDB4N2YsXG4mIzQzO1x0XHRcdFx0XHQgICBkdXJhdGlvbiBcdTAwMjYgMHg3Zik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9saXJjX21vZGUyX2tlcm4uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2xpcmNfbW9kZTJfa2Vybi5jXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IGNiZTQyODRjMDMyZmUuLjAwMDAwMDAwMDAwMDBcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2xpcmNfbW9kZTJfa2Vybi5jXG4mIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsXG5AQCAtMSwyNiAmIzQzOzAsMCBAQFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4tLy8gdGVzdCBpciBkZWNvZGVyXG4tLy9cbi0vLyBDb3B5cmlnaHQgKEMpIDIwMTggU2VhbiBZb3VuZyBcdTAwM2NzZWFuQG1lc3Mub3JnXHUwMDNlXG4tXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9saXJjLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuLVxuLVNFQyhcJiMzNDtsaXJjX21vZGUyXCYjMzQ7KVxuLWludCBicGZfZGVjb2Rlcih1bnNpZ25lZCBpbnQgKnNhbXBsZSlcbi17XG4tXHRpZiAoTElSQ19JU19QVUxTRSgqc2FtcGxlKSkge1xuLVx0XHR1bnNpZ25lZCBpbnQgZHVyYXRpb24gPSBMSVJDX1ZBTFVFKCpzYW1wbGUpO1xuLVxuLVx0XHRpZiAoZHVyYXRpb24gXHUwMDI2IDB4MTAwMClcbi1cdFx0XHRicGZfcmNfa2V5ZG93bihzYW1wbGUsIDB4NDAsIGR1cmF0aW9uIFx1MDAyNiAweGZmZmYsIDApO1xuLVx0XHRpZiAoZHVyYXRpb24gXHUwMDI2IDB4MjAwMClcbi1cdFx0XHRicGZfcmNfcG9pbnRlcl9yZWwoc2FtcGxlLCAoZHVyYXRpb24gXHUwMDNlXHUwMDNlIDgpIFx1MDAyNiAweGZmLFxuLVx0XHRcdFx0XHQgICBkdXJhdGlvbiBcdTAwMjYgMHhmZik7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tY2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9saXJjX21vZGUyLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbGlyY19tb2RlMi5zaFxuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCA1MjUyYjkxZjQ4YTE4Li4wMDAwMDAwMDAwMDAwXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9saXJjX21vZGUyLnNoXG4mIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsXG5AQCAtMSw0MSAmIzQzOzAsMCBAQFxuLSMhL2Jpbi9iYXNoXG4tIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuLVxuLSMgS3NlbGZ0ZXN0IGZyYW1ld29yayByZXF1aXJlbWVudCAtIFNLSVAgY29kZSBpcyA0LlxuLWtzZnRfc2tpcD00XG4tcmV0PSRrc2Z0X3NraXBcbi1cbi1tc2c9XCYjMzQ7c2tpcCBhbGwgdGVzdHM6XCYjMzQ7XG4taWYgWyAkVUlEICE9IDAgXTsgdGhlblxuLVx0ZWNobyAkbXNnIHBsZWFzZSBydW4gdGhpcyBhcyByb290IFx1MDAzZVx1MDAyNjJcbi1cdGV4aXQgJGtzZnRfc2tpcFxuLWZpXG4tXG4tR1JFRU49JiMzOTtcXDAzM1swOzkybSYjMzk7XG4tUkVEPSYjMzk7XFwwMzNbMDszMW0mIzM5O1xuLU5DPSYjMzk7XFwwMzNbMG0mIzM5OyAjIE5vIENvbG9yXG4tXG4tbW9kcHJvYmUgcmMtbG9vcGJhY2tcbi1cbi1mb3IgaSBpbiAvc3lzL2NsYXNzL3JjL3JjKlxuLWRvXG4tXHRpZiBncmVwIC1xIERSVl9OQU1FPXJjLWxvb3BiYWNrICRpL3VldmVudFxuLVx0dGhlblxuLVx0XHRMSVJDREVWPSQoZ3JlcCBERVZOQU1FPSAkaS9saXJjKi91ZXZlbnQgfCBzZWQgc1FERVZOQU1FPVEvZGV2L1EpXG4tXHRcdElOUFVUREVWPSQoZ3JlcCBERVZOQU1FPSAkaS9pbnB1dCovZXZlbnQqL3VldmVudCB8IHNlZCBzUURFVk5BTUU9US9kZXYvUSlcbi1cdGZpXG4tZG9uZVxuLVxuLWlmIFsgLW4gXCYjMzQ7JExJUkNERVZcJiMzNDsgXTtcbi10aGVuXG4tXHRUWVBFPWxpcmNfbW9kZTJcbi1cdC4vdGVzdF9saXJjX21vZGUyX3VzZXIgJExJUkNERVYgJElOUFVUREVWXG4tXHRyZXQ9JD9cbi1cdGlmIFsgJHJldCAtbmUgMCBdOyB0aGVuXG4tXHRcdGVjaG8gLWUgJHtSRUR9XCYjMzQ7RkFJTDogJFRZUEVcJiMzNDske05DfVxuLVx0ZWxzZVxuLVx0XHRlY2hvIC1lICR7R1JFRU59XCYjMzQ7UEFTUzogJFRZUEVcJiMzNDske05DfVxuLVx0Zmlcbi1maVxuLVxuLWV4aXQgJHJldFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xpcmNfbW9kZTJfdXNlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbGlyY19tb2RlMl91c2VyLmNcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggY2QxOTFkYTIwZDE0My4uMDAwMDAwMDAwMDAwMFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbGlyY19tb2RlMl91c2VyLmNcbiYjNDM7JiM0MzsmIzQzOyAvZGV2L251bGxcbkBAIC0xLDE3NyAmIzQzOzAsMCBAQFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4tLy8gdGVzdCBpciBkZWNvZGVyXG4tLy9cbi0vLyBDb3B5cmlnaHQgKEMpIDIwMTggU2VhbiBZb3VuZyBcdTAwM2NzZWFuQG1lc3Mub3JnXHUwMDNlXG4tXG4tLy8gQSBsaXJjIGNoYXJkZXYgaXMgYSBkZXZpY2UgcmVwcmVzZW50aW5nIGEgY29uc3VtZXIgSVIgKGNpcikgZGV2aWNlIHdoaWNoXG4tLy8gY2FuIHJlY2VpdmUgaW5mcmFyZWQgc2lnbmFscyBmcm9tIHJlbW90ZSBjb250cm9sIGFuZC9vciB0cmFuc21pdCBJUi5cbi0vL1xuLS8vIElSIGlzIHNlbnQgYXMgYSBzZXJpZXMgb2YgcHVsc2VzIGFuZCBzcGFjZSBzb21ld2hhdCBsaWtlIG1vcnNlIGNvZGUuIFRoZVxuLS8vIEJQRiBwcm9ncmFtIGNhbiBkZWNvZGUgdGhpcyBpbnRvIHNjYW5jb2RlcyBzbyB0aGF0IHJjLWNvcmUgY2FuIHRyYW5zbGF0ZVxuLS8vIHRoaXMgaW50byBpbnB1dCBrZXkgY29kZXMgdXNpbmcgdGhlIHJjIGtleW1hcC5cbi0vL1xuLS8vIFRoaXMgdGVzdCB3b3JrcyBieSBzZW5kaW5nIElSIG92ZXIgcmMtbG9vcGJhY2ssIHNvIHRoZSBJUiBpcyBwcm9jZXNzZWQgYnlcbi0vLyBCUEYgYW5kIHRoZW4gZGVjb2RlZCBpbnRvIHNjYW5jb2Rlcy4gVGhlIGxpcmMgY2hhcmRldiBtdXN0IGJlIHRoZSBvbmVcbi0vLyBhc3NvY2lhdGVkIHdpdGggcmMtbG9vcGJhY2ssIHNlZSB0aGUgb3V0cHV0IG9mIGlyLWtleXRhYmxlKDEpLlxuLS8vXG4tLy8gVGhlIGZvbGxvd2luZyBDT05GSUcgb3B0aW9ucyBtdXN0IGJlIGVuYWJsZWQgZm9yIHRoZSB0ZXN0IHRvIHN1Y2NlZWQ6XG4tLy8gQ09ORklHX1JDX0NPUkU9eVxuLS8vIENPTkZJR19CUEZfUkFXSVJfRVZFTlQ9eVxuLS8vIENPTkZJR19SQ19MT09QQkFDSz15XG4tXG4tLy8gU3RlcHM6XG4tLy8gMS4gT3BlbiB0aGUgL2Rldi9saXJjTiBkZXZpY2UgZm9yIHJjLWxvb3BiYWNrIChnaXZlbiBvbiBjb21tYW5kIGxpbmUpXG4tLy8gMi4gQXR0YWNoIGJwZl9saXJjX21vZGUyIHByb2dyYW0gd2hpY2ggZGVjb2RlcyBzb21lIElSLlxuLS8vIDMuIFNlbmQgc29tZSBJUiB0byB0aGUgc2FtZSBJUiBkZXZpY2U7IHNpbmNlIGl0IGlzIGxvb3BiYWNrLCB0aGlzIHdpbGxcbi0vLyAgICBlbmQgdXAgaW4gdGhlIGJwZiBwcm9ncmFtXG4tLy8gNC4gYnBmIHByb2dyYW0gc2hvdWxkIGRlY29kZSBJUiBhbmQgcmVwb3J0IGtleWNvZGVcbi0vLyA1LiBXZSBjYW4gcmVhZCBrZXljb2RlIGZyb20gc2FtZSAvZGV2L2xpcmMgZGV2aWNlXG4tXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9pbnB1dC5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY3N0ZGlvLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2Nwb2xsLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY3N5cy9pb2N0bC5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjc3lzL3N0YXQuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2Vcbi1cbi0jaW5jbHVkZSBcJiMzNDticGZfdXRpbC5oXCYjMzQ7XG4tI2luY2x1ZGUgXHUwMDNjYnBmL2JwZi5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjYnBmL2xpYmJwZi5oXHUwMDNlXG4tXG4tI2luY2x1ZGUgXCYjMzQ7dGVzdGluZ19oZWxwZXJzLmhcJiMzNDtcbi1cbi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXG4te1xuLVx0c3RydWN0IGJwZl9vYmplY3QgKm9iajtcbi1cdGludCByZXQsIGxpcmNmZCwgcHJvZ2ZkLCBpbnB1dGZkO1xuLVx0aW50IHRlc3RpcjEgPSAweDFlYWQ7XG4tXHRpbnQgdGVzdGlyMiA9IDB4MjEwMTtcbi1cdHUzMiBwcm9nX2lkc1sxMF0sIHByb2dfZmxhZ3NbMTBdLCBwcm9nX2NudDtcbi1cbi1cdGlmIChhcmdjICE9IDMpIHtcbi1cdFx0cHJpbnRmKFwmIzM0O1VzYWdlOiAlcyAvZGV2L2xpcmNOIC9kZXYvaW5wdXQvZXZlbnRNXFxuXCYjMzQ7LCBhcmd2WzBdKTtcbi1cdFx0cmV0dXJuIDI7XG4tXHR9XG4tXG4tXHRyZXQgPSBicGZfcHJvZ190ZXN0X2xvYWQoXCYjMzQ7dGVzdF9saXJjX21vZGUyX2tlcm4uYnBmLm9cJiMzNDssXG4tXHRcdFx0XHQgQlBGX1BST0dfVFlQRV9MSVJDX01PREUyLCBcdTAwMjZvYmosIFx1MDAyNnByb2dmZCk7XG4tXHRpZiAocmV0KSB7XG4tXHRcdHByaW50ZihcJiMzNDtGYWlsZWQgdG8gbG9hZCBicGYgcHJvZ3JhbVxcblwmIzM0Oyk7XG4tXHRcdHJldHVybiAxO1xuLVx0fVxuLVxuLVx0bGlyY2ZkID0gb3Blbihhcmd2WzFdLCBPX1JEV1IgfCBPX05PTkJMT0NLKTtcbi1cdGlmIChsaXJjZmQgPT0gLTEpIHtcbi1cdFx0cHJpbnRmKFwmIzM0O2ZhaWxlZCB0byBvcGVuIGxpcmMgZGV2aWNlICVzOiAlbVxcblwmIzM0OywgYXJndlsxXSk7XG4tXHRcdHJldHVybiAxO1xuLVx0fVxuLVxuLVx0LyogTGV0JiMzOTtzIHRyeSBkZXRhY2ggaXQgYmVmb3JlIGl0IHdhcyBldmVyIGF0dGFjaGVkICovXG4tXHRyZXQgPSBicGZfcHJvZ19kZXRhY2gyKHByb2dmZCwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMik7XG4tXHRpZiAocmV0ICE9IC1FTk9FTlQpIHtcbi1cdFx0cHJpbnRmKFwmIzM0O2JwZl9wcm9nX2RldGFjaDIgbm90IGF0dGFjaGVkIHNob3VsZCBmYWlsOiAlbVxcblwmIzM0Oyk7XG4tXHRcdHJldHVybiAxO1xuLVx0fVxuLVxuLVx0aW5wdXRmZCA9IG9wZW4oYXJndlsyXSwgT19SRE9OTFkgfCBPX05PTkJMT0NLKTtcbi1cdGlmIChpbnB1dGZkID09IC0xKSB7XG4tXHRcdHByaW50ZihcJiMzNDtmYWlsZWQgdG8gb3BlbiBpbnB1dCBkZXZpY2UgJXM6ICVtXFxuXCYjMzQ7LCBhcmd2WzFdKTtcbi1cdFx0cmV0dXJuIDE7XG4tXHR9XG4tXG4tXHRwcm9nX2NudCA9IDEwO1xuLVx0cmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCwgcHJvZ19mbGFncywgcHJvZ19pZHMsXG4tXHRcdFx0ICAgICBcdTAwMjZwcm9nX2NudCk7XG4tXHRpZiAocmV0KSB7XG4tXHRcdHByaW50ZihcJiMzNDtGYWlsZWQgdG8gcXVlcnkgYnBmIHByb2dyYW1zIG9uIGxpcmMgZGV2aWNlOiAlbVxcblwmIzM0Oyk7XG4tXHRcdHJldHVybiAxO1xuLVx0fVxuLVxuLVx0aWYgKHByb2dfY250ICE9IDApIHtcbi1cdFx0cHJpbnRmKFwmIzM0O0V4cGVjdGVkIG5vdGhpbmcgdG8gYmUgYXR0YWNoZWRcXG5cJiMzNDspO1xuLVx0XHRyZXR1cm4gMTtcbi1cdH1cbi1cbi1cdHJldCA9IGJwZl9wcm9nX2F0dGFjaChwcm9nZmQsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDApO1xuLVx0aWYgKHJldCkge1xuLVx0XHRwcmludGYoXCYjMzQ7RmFpbGVkIHRvIGF0dGFjaCBicGYgdG8gbGlyYyBkZXZpY2U6ICVtXFxuXCYjMzQ7KTtcbi1cdFx0cmV0dXJuIDE7XG4tXHR9XG4tXG4tXHQvKiBXcml0ZSByYXcgSVIgKi9cbi1cdHJldCA9IHdyaXRlKGxpcmNmZCwgXHUwMDI2dGVzdGlyMSwgc2l6ZW9mKHRlc3RpcjEpKTtcbi1cdGlmIChyZXQgIT0gc2l6ZW9mKHRlc3RpcjEpKSB7XG4tXHRcdHByaW50ZihcJiMzNDtGYWlsZWQgdG8gc2VuZCB0ZXN0IElSIG1lc3NhZ2U6ICVtXFxuXCYjMzQ7KTtcbi1cdFx0cmV0dXJuIDE7XG4tXHR9XG4tXG4tXHRzdHJ1Y3QgcG9sbGZkIHBmZCA9IHsgLmZkID0gaW5wdXRmZCwgLmV2ZW50cyA9IFBPTExJTiB9O1xuLVx0c3RydWN0IGlucHV0X2V2ZW50IGV2ZW50O1xuLVxuLVx0Zm9yICg7Oykge1xuLVx0XHRwb2xsKFx1MDAyNnBmZCwgMSwgMTAwKTtcbi1cbi1cdFx0LyogUmVhZCBkZWNvZGVkIElSICovXG4tXHRcdHJldCA9IHJlYWQoaW5wdXRmZCwgXHUwMDI2ZXZlbnQsIHNpemVvZihldmVudCkpO1xuLVx0XHRpZiAocmV0ICE9IHNpemVvZihldmVudCkpIHtcbi1cdFx0XHRwcmludGYoXCYjMzQ7RmFpbGVkIHRvIHJlYWQgZGVjb2RlZCBJUjogJW1cXG5cJiMzNDspO1xuLVx0XHRcdHJldHVybiAxO1xuLVx0XHR9XG4tXG4tXHRcdGlmIChldmVudC50eXBlID09IEVWX01TQyBcdTAwMjZcdTAwMjYgZXZlbnQuY29kZSA9PSBNU0NfU0NBTiBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIGV2ZW50LnZhbHVlID09IDB4MWVhZCkge1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHR9XG4tXG4tXHQvKiBXcml0ZSByYXcgSVIgKi9cbi1cdHJldCA9IHdyaXRlKGxpcmNmZCwgXHUwMDI2dGVzdGlyMiwgc2l6ZW9mKHRlc3RpcjIpKTtcbi1cdGlmIChyZXQgIT0gc2l6ZW9mKHRlc3RpcjIpKSB7XG4tXHRcdHByaW50ZihcJiMzNDtGYWlsZWQgdG8gc2VuZCB0ZXN0IElSIG1lc3NhZ2U6ICVtXFxuXCYjMzQ7KTtcbi1cdFx0cmV0dXJuIDE7XG4tXHR9XG4tXG4tXHRmb3IgKDs7KSB7XG4tXHRcdHBvbGwoXHUwMDI2cGZkLCAxLCAxMDApO1xuLVxuLVx0XHQvKiBSZWFkIGRlY29kZWQgSVIgKi9cbi1cdFx0cmV0ID0gcmVhZChpbnB1dGZkLCBcdTAwMjZldmVudCwgc2l6ZW9mKGV2ZW50KSk7XG4tXHRcdGlmIChyZXQgIT0gc2l6ZW9mKGV2ZW50KSkge1xuLVx0XHRcdHByaW50ZihcJiMzNDtGYWlsZWQgdG8gcmVhZCBkZWNvZGVkIElSOiAlbVxcblwmIzM0Oyk7XG4tXHRcdFx0cmV0dXJuIDE7XG4tXHRcdH1cbi1cbi1cdFx0aWYgKGV2ZW50LnR5cGUgPT0gRVZfUkVMIFx1MDAyNlx1MDAyNiBldmVudC5jb2RlID09IFJFTF9ZIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgZXZlbnQudmFsdWUgPT0gMSApIHtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0fVxuLVxuLVx0cHJvZ19jbnQgPSAxMDtcbi1cdHJldCA9IGJwZl9wcm9nX3F1ZXJ5KGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDAsIHByb2dfZmxhZ3MsIHByb2dfaWRzLFxuLVx0XHRcdCAgICAgXHUwMDI2cHJvZ19jbnQpO1xuLVx0aWYgKHJldCkge1xuLVx0XHRwcmludGYoXCYjMzQ7RmFpbGVkIHRvIHF1ZXJ5IGJwZiBwcm9ncmFtcyBvbiBsaXJjIGRldmljZTogJW1cXG5cJiMzNDspO1xuLVx0XHRyZXR1cm4gMTtcbi1cdH1cbi1cbi1cdGlmIChwcm9nX2NudCAhPSAxKSB7XG4tXHRcdHByaW50ZihcJiMzNDtFeHBlY3RlZCBvbmUgcHJvZ3JhbSB0byBiZSBhdHRhY2hlZFxcblwmIzM0Oyk7XG4tXHRcdHJldHVybiAxO1xuLVx0fVxuLVxuLVx0LyogTGV0JiMzOTtzIHRyeSBkZXRhY2hpbmcgaXQgbm93IGl0IGlzIGFjdHVhbGx5IGF0dGFjaGVkICovXG4tXHRyZXQgPSBicGZfcHJvZ19kZXRhY2gyKHByb2dmZCwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMik7XG4tXHRpZiAocmV0KSB7XG4tXHRcdHByaW50ZihcJiMzNDticGZfcHJvZ19kZXRhY2gyOiByZXR1cm5lZCAlbVxcblwmIzM0Oyk7XG4tXHRcdHJldHVybiAxO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDIyOjA3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEJQRiBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8pIGJ5IGNvbnZlcnRpbmcgYW4gb2xkLXN0eWxlIHRlc3QgaW50byB0aGUgdGVzdF9wcm9ncyBmcmFtZXdvcmsuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGMxY2MwYThmZTM1ZTY3MDhmY2UwYTE4MTkzZTQ2ODk1MzFhM2FhYzMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyMCAyMjowNzozMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8uZ2l0aWdub3JlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy5naXRpZ25vcmUKaW5kZXggOTg2YTYzODkxODZiYS4uYjgxNWJmMGQ4ODc3NCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy5naXRpZ25vcmUKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy5naXRpZ25vcmUKQEAgLTE3LDcgJiM0MzsxNyw2IEBAIHRlc3RfdmVyaWZpZXJfbG9nCiBmZWF0dXJlCiB1cmFuZG9tX3JlYWQKIHRlc3Rfc29ja21hcAotdGVzdF9saXJjX21vZGUyX3VzZXIKIGZsb3dfZGlzc2VjdG9yX2xvYWQKIHRlc3RfdGNwbm90aWZ5X3VzZXIKIHRlc3RfbGliYnBmCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUKaW5kZXggMmIyZjkzZGVjNDc0Yi4uZjhlYzBmNTc0NTU5YSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZQpAQCAtMTIzLDcgJiM0MzsxMjMsNiBAQCBURVNUX0ZJTEVTID0geHNrX3ByZXJlcXMuc2ggJCh3aWxkY2FyZCBwcm9ncy9idGZfZHVtcF90ZXN0X2Nhc2VfKi5jKQogCiAjIE9yZGVyIGNvcnJlc3BvbmQgdG8gJiMzOTttYWtlIHJ1bl90ZXN0cyYjMzk7IG9yZGVyCiBURVNUX1BST0dTIDo9IHRlc3Rfa21vZC5zaCBcCi0JdGVzdF9saXJjX21vZGUyLnNoIFwKIAl0ZXN0X2JwZnRvb2xfYnVpbGQuc2ggXAogCXRlc3RfZG9jX2J1aWxkLnNoIFwKIAl0ZXN0X3hzay5zaCBcCkBAIC0xNDEsNyAmIzQzOzE0MCw2IEBAIFRFU1RfR0VOX1BST0dTX0VYVEVOREVEID0gXAogCWJlbmNoIFwKIAlmbG93X2Rpc3NlY3Rvcl9sb2FkIFwKIAl0ZXN0X2NwcCBcCi0JdGVzdF9saXJjX21vZGUyX3VzZXIgXAogCXZlcmlzdGF0IFwKIAl4ZHBfZmVhdHVyZXMgXAogCXhkcF9od19tZXRhZGF0YSBcCkBAIC0zMzgsNyAmIzQzOzMzNiw2IEBAICQoT1VUUFVUKS90ZXN0X3NvY2ttYXA6ICQoQ0dST1VQX0hFTFBFUlMpICQoVEVTVElOR19IRUxQRVJTKQogJChPVVRQVVQpL3Rlc3RfdGNwbm90aWZ5X3VzZXI6ICQoQ0dST1VQX0hFTFBFUlMpICQoVEVTVElOR19IRUxQRVJTKSAkKFRSQUNFX0hFTFBFUlMpCiAkKE9VVFBVVCkvdGVzdF9zb2NrX2ZpZWxkczogJChDR1JPVVBfSEVMUEVSUykgJChURVNUSU5HX0hFTFBFUlMpCiAkKE9VVFBVVCkvdGVzdF90YWc6ICQoVEVTVElOR19IRUxQRVJTKQotJChPVVRQVVQpL3Rlc3RfbGlyY19tb2RlMl91c2VyOiAkKFRFU1RJTkdfSEVMUEVSUykKICQoT1VUUFVUKS9mbG93X2Rpc3NlY3Rvcl9sb2FkOiAkKFRFU1RJTkdfSEVMUEVSUykKICQoT1VUUFVUKS90ZXN0X21hcHM6ICQoVEVTVElOR19IRUxQRVJTKQogJChPVVRQVVQpL3Rlc3RfdmVyaWZpZXI6ICQoVEVTVElOR19IRUxQRVJTKSAkKENBUF9IRUxQRVJTKSAkKFVOUFJJVl9IRUxQRVJTKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGlyY19tb2RlMi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGlyY19tb2RlMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjhlNDg1ZGI3MGI3OGEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saXJjX21vZGUyLmMKQEAgLTAsMCAmIzQzOzEsMzM0IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvLyB0ZXN0IGlyIGRlY29kZXIKJiM0MzsvLwomIzQzOy8vIENvcHlyaWdodCAoQykgMjAxOCBTZWFuIFlvdW5nICZsdDtzZWFuQG1lc3Mub3JnJmd0OwomIzQzOwomIzQzOy8vIEEgbGlyYyBjaGFyZGV2IGlzIGEgZGV2aWNlIHJlcHJlc2VudGluZyBhIGNvbnN1bWVyIElSIChjaXIpIGRldmljZSB3aGljaAomIzQzOy8vIGNhbiByZWNlaXZlIGluZnJhcmVkIHNpZ25hbHMgZnJvbSByZW1vdGUgY29udHJvbCBhbmQvb3IgdHJhbnNtaXQgSVIuCiYjNDM7Ly8KJiM0MzsvLyBJUiBpcyBzZW50IGFzIGEgc2VyaWVzIG9mIHB1bHNlcyBhbmQgc3BhY2Ugc29tZXdoYXQgbGlrZSBtb3JzZSBjb2RlLiBUaGUKJiM0MzsvLyBCUEYgcHJvZ3JhbSBjYW4gZGVjb2RlIHRoaXMgaW50byBzY2FuY29kZXMgc28gdGhhdCByYy1jb3JlIGNhbiB0cmFuc2xhdGUKJiM0MzsvLyB0aGlzIGludG8gaW5wdXQga2V5IGNvZGVzIHVzaW5nIHRoZSByYyBrZXltYXAuCiYjNDM7Ly8KJiM0MzsvLyBUaGlzIHRlc3Qgd29ya3MgYnkgc2VuZGluZyBJUiBvdmVyIHJjLWxvb3BiYWNrLCBzbyB0aGUgSVIgaXMgcHJvY2Vzc2VkIGJ5CiYjNDM7Ly8gQlBGIGFuZCB0aGVuIGRlY29kZWQgaW50byBzY2FuY29kZXMuIFRoZSBsaXJjIGNoYXJkZXYgbXVzdCBiZSB0aGUgb25lCiYjNDM7Ly8gYXNzb2NpYXRlZCB3aXRoIHJjLWxvb3BiYWNrLCBzZWUgdGhlIG91dHB1dCBvZiBpci1rZXl0YWJsZSgxKS4KJiM0MzsvLwomIzQzOy8vIFRoZSBmb2xsb3dpbmcgQ09ORklHIG9wdGlvbnMgbXVzdCBiZSBlbmFibGVkIGZvciB0aGUgdGVzdCB0byBzdWNjZWVkOgomIzQzOy8vIENPTkZJR19SQ19DT1JFPXkKJiM0MzsvLyBDT05GSUdfQlBGX1JBV0lSX0VWRU5UPXkKJiM0MzsvLyBDT05GSUdfUkNfTE9PUEJBQ0s9eQomIzQzOy8vIENPTkZJR19MSVJDPXkKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW5wdXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbGlyYy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtnbG9iLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbWl0cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtwb2xsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2xpcmNfbW9kZTIuc2tlbC5oJiMzNDsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJlYWQgdGhlIERFVk5BTUU9IGxpbmUgb3V0IG9mIHRoZSBmaXJzdCB1ZXZlbnQgZmlsZSB0aGF0IG1hdGNoZXMKJiM0MzsgKiBwYXR0ZXJuLCBhbmQgdHVybiBpdCBpbnRvIGEgL2Rldi8mbHQ7bmFtZSZndDsgcGF0aC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCBmaW5kX2Rldm5hbWUoY29uc3QgY2hhciAqcGF0dGVybiwgY2hhciAqcGF0aCwgc2l6ZV90IHBhdGhfc3opCiYjNDM7ewomIzQzOwlnbG9iX3QgZ2wgPSB7fTsKJiM0MzsJYm9vbCBmb3VuZCA9IGZhbHNlOwomIzQzOwlGSUxFICpmOwomIzQzOwomIzQzOwlpZiAoZ2xvYihwYXR0ZXJuLCAwLCBOVUxMLCAmYW1wO2dsKSB8fCBnbC5nbF9wYXRoYyA9PSAwKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWYgPSBmb3BlbihnbC5nbF9wYXRodlswXSwgJiMzNDtyJiMzNDspOwomIzQzOwlpZiAoIWYpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJY2hhciBsaW5lWzI1Nl07CiYjNDM7CiYjNDM7CXdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGYpKSB7CiYjNDM7CQljaGFyICp2YWw7CiYjNDM7CiYjNDM7CQlpZiAoc3RybmNtcChsaW5lLCAmIzM0O0RFVk5BTUU9JiMzNDssIDgpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJdmFsID0gbGluZSAmIzQzOyA4OwomIzQzOwkJdmFsW3N0cmNzcG4odmFsLCAmIzM0O1xuJiMzNDspXSA9ICYjMzk7XDAmIzM5OzsKJiM0MzsJCXNucHJpbnRmKHBhdGgsIHBhdGhfc3osICYjMzQ7L2Rldi8lcyYjMzQ7LCB2YWwpOwomIzQzOwkJZm91bmQgPSB0cnVlOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZmNsb3NlKGYpOwomIzQzO291dDoKJiM0MzsJZ2xvYmZyZWUoJmFtcDtnbCk7CiYjNDM7CXJldHVybiBmb3VuZDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogTG9hZCByYy1sb29wYmFjayBhbmQgZmluZCB0aGUgbGlyYyBhbmQgaW5wdXQgY2hhcmRldnMgaXQgY3JlYXRlZC4gKi8KJiM0MztzdGF0aWMgYm9vbCBmaW5kX2xvb3BiYWNrX2RldmljZXMoY2hhciAqbGlyY19wYXRoLCBjaGFyICppbnB1dF9wYXRoLAomIzQzOwkJCQkgIHNpemVfdCBwYXRoX3N6KQomIzQzO3sKJiM0MzsJZ2xvYl90IGdsID0ge307CiYjNDM7CWJvb2wgZm91bmQgPSBmYWxzZTsKJiM0MzsKJiM0MzsJLyogSWdub3JlIGZhaWx1cmUsIHdlIGNoZWNrIGZvciB0aGUgcmVzdWx0aW5nIGRldmljZXMgYmVsb3cuICovCiYjNDM7CVNZU19OT0ZBSUwoJiMzNDttb2Rwcm9iZSByYy1sb29wYmFjayAmZ3Q7IC9kZXYvbnVsbCAyJmd0OyZhbXA7MSYjMzQ7KTsKJiM0MzsKJiM0MzsJaWYgKGdsb2IoJiMzNDsvc3lzL2NsYXNzL3JjL3JjKiYjMzQ7LCAwLCBOVUxMLCAmYW1wO2dsKSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlmb3IgKHNpemVfdCBpID0gMDsgaSAmbHQ7IGdsLmdsX3BhdGhjOyBpJiM0MzsmIzQzOykgewomIzQzOwkJY29uc3QgY2hhciAqcmNkaXIgPSBnbC5nbF9wYXRodltpXTsKJiM0MzsJCWNoYXIgdWV2ZW50X3BhdGhbUEFUSF9NQVhdOwomIzQzOwkJY2hhciB1ZXZlbnRbNDA5Nl07CiYjNDM7CQljaGFyIHBhdHRlcm5bUEFUSF9NQVhdOwomIzQzOwkJRklMRSAqZjsKJiM0MzsJCXNpemVfdCBuOwomIzQzOwomIzQzOwkJc25wcmludGYodWV2ZW50X3BhdGgsIHNpemVvZih1ZXZlbnRfcGF0aCksICYjMzQ7JXMvdWV2ZW50JiMzNDssIHJjZGlyKTsKJiM0MzsJCWYgPSBmb3Blbih1ZXZlbnRfcGF0aCwgJiMzNDtyJiMzNDspOwomIzQzOwkJaWYgKCFmKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJbiA9IGZyZWFkKHVldmVudCwgMSwgc2l6ZW9mKHVldmVudCkgLSAxLCBmKTsKJiM0MzsJCWZjbG9zZShmKTsKJiM0MzsJCXVldmVudFtuXSA9ICYjMzk7XDAmIzM5OzsKJiM0MzsKJiM0MzsJCWlmICghc3Ryc3RyKHVldmVudCwgJiMzNDtEUlZfTkFNRT1yYy1sb29wYmFjayYjMzQ7KSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCXNucHJpbnRmKHBhdHRlcm4sIHNpemVvZihwYXR0ZXJuKSwgJiMzNDslcy9saXJjKi91ZXZlbnQmIzM0OywgcmNkaXIpOwomIzQzOwkJaWYgKCFmaW5kX2Rldm5hbWUocGF0dGVybiwgbGlyY19wYXRoLCBwYXRoX3N6KSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCXNucHJpbnRmKHBhdHRlcm4sIHNpemVvZihwYXR0ZXJuKSwgJiMzNDslcy9pbnB1dCovZXZlbnQqL3VldmVudCYjMzQ7LCByY2Rpcik7CiYjNDM7CQlpZiAoIWZpbmRfZGV2bmFtZShwYXR0ZXJuLCBpbnB1dF9wYXRoLCBwYXRoX3N6KSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWZvdW5kID0gdHJ1ZTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlpZiAoIWZvdW5kKSB7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtObyByYyBkZXZpY2VzIGZvdW5kXG4mIzM0Oyk7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtFbmFibGUgQ09ORklHX1JDX0xPT1BCQUNLLCBDT05GSUdfUkNfTE9PUEJBQ0ssIGFuZCBDT05GSUdfTElSQ1xuJiMzNDspOwomIzQzOz8JfQomIzQzOwomIzQzOwlnbG9iZnJlZSgmYW1wO2dsKTsKJiM0MzsJcmV0dXJuIGZvdW5kOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHRlc3RfbGlyY19tb2RlMih2b2lkKQomIzQzO3sKJiM0MzsJY2hhciBsaXJjX3BhdGhbUEFUSF9NQVhdLCBpbnB1dF9wYXRoW1BBVEhfTUFYXTsKJiM0MzsJaW50IGxpcmNmZCA9IC0xLCBpbnB1dGZkID0gLTEsIHByb2dmZCwgcHJvZ2ZkMiA9IC0xOwomIzQzOwlzdHJ1Y3QgbGlyY19tb2RlMiAqc2tlbCA9IE5VTEwsICpza2VsMiA9IE5VTEw7CiYjNDM7CV9fdTMyIHByb2dfaWRzWzEwXSwgcHJvZ19mbGFnc1sxMF0sIHByb2dfY250OwomIzQzOwlzdHJ1Y3QgYnBmX3Byb2dfaW5mbyBpbmZvOwomIzQzOwlfX3UzMiBpbmZvX2xlbiwgcHJvZ19pZCwgcHJvZ19pZDI7CiYjNDM7CWludCB0ZXN0aXIxID0gMHg4ZWFkOwkvKiBrZXlkb3duIGZsYWcgKDB4ODAwMCkgfCBzY2FuY29kZSAweGVhZCAqLwomIzQzOwlpbnQgdGVzdGlyMiA9IDB4NDA4MTsJLyogcG9pbnRlcl9yZWwgZmxhZyAoMHg0MDAwKSB8IHJlbF94PTEgfCByZWxfeT0xICovCiYjNDM7CXN0cnVjdCBpbnB1dF9ldmVudCBldmVudDsKJiM0MzsJc3RydWN0IHBvbGxmZCBwZmQgPSB7fTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKGdldHVpZCgpICE9IDApIHsKJiM0MzsJCXRlc3RfX3NraXAoKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWZpbmRfbG9vcGJhY2tfZGV2aWNlcyhsaXJjX3BhdGgsIGlucHV0X3BhdGgsIHNpemVvZihsaXJjX3BhdGgpKSkgewomIzQzOwkJdGVzdF9fc2tpcCgpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNrZWwgPSBsaXJjX21vZGUyX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O2xpcmNfbW9kZTJfX29wZW5fYW5kX2xvYWQmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXByb2dmZCA9IGJwZl9wcm9ncmFtX19mZChza2VsLSZndDtwcm9ncy5icGZfZGVjb2Rlcik7CiYjNDM7CiYjNDM7CW1lbXNldCgmYW1wO2luZm8sIDAsIHNpemVvZihpbmZvKSk7CiYjNDM7CWluZm9fbGVuID0gc2l6ZW9mKGluZm8pOwomIzQzOwlyZXQgPSBicGZfcHJvZ19nZXRfaW5mb19ieV9mZChwcm9nZmQsICZhbXA7aW5mbywgJmFtcDtpbmZvX2xlbik7CiYjNDM7CWlmICghQVNTRVJUX09LKHJldCwgJiMzNDtnZXQgZmlyc3QgcHJvZ3JhbSYjMzk7cyBpbmZvJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CXByb2dfaWQgPSBpbmZvLmlkOwomIzQzOwomIzQzOwlsaXJjZmQgPSBvcGVuKGxpcmNfcGF0aCwgT19SRFdSIHwgT19OT05CTE9DSyk7CiYjNDM7CWlmICghQVNTRVJUX0dFKGxpcmNmZCwgMCwgJiMzNDtvcGVuIGxpcmMgZGV2aWNlJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CS8qIFRyeSB0byBkZXRhY2ggaXQgYmVmb3JlIGl0IHdhcyBldmVyIGF0dGFjaGVkLCBzaG91bGQgZmFpbC4gKi8KJiM0MzsJcmV0ID0gYnBmX3Byb2dfZGV0YWNoMihwcm9nZmQsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIpOwomIzQzOwlpZiAoIUFTU0VSVF9FUShyZXQsIC1FTk9FTlQsICYjMzQ7ZGV0YWNoIHVuYXR0YWNoZWQgcHJvZ3JhbSYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlpbnB1dGZkID0gb3BlbihpbnB1dF9wYXRoLCBPX1JET05MWSB8IE9fTk9OQkxPQ0spOwomIzQzOwlpZiAoIUFTU0VSVF9HRShpbnB1dGZkLCAwLCAmIzM0O29wZW4gaW5wdXQgZGV2aWNlJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXByb2dfY250ID0gQVJSQVlfU0laRShwcm9nX2lkcyk7CiYjNDM7CXJldCA9IGJwZl9wcm9nX3F1ZXJ5KGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDAsIHByb2dfZmxhZ3MsIHByb2dfaWRzLAomIzQzOwkJCSAgICAgJmFtcDtwcm9nX2NudCk7CiYjNDM7CWlmICghQVNTRVJUX09LKHJldCwgJiMzNDtxdWVyeSBwcm9ncmFtcyBiZWZvcmUgYXR0YWNoJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWlmICghQVNTRVJUX0VRKHByb2dfY250LCAwLCAmIzM0O25vIHByb2dyYW1zIHNob3VsZCBiZSBhdHRhY2hlZCB5ZXQmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyogSW52YWxpZCBhdHRhY2ggZmxhZ3MgbXVzdCBiZSByZWplY3RlZCwgYW5kIG11c3Qgbm90IGF0dGFjaC4gKi8KJiM0MzsJcmV0ID0gYnBmX3Byb2dfYXR0YWNoKHByb2dmZCwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMSk7CiYjNDM7CWlmICghQVNTRVJUX0VRKHJldCwgLUVJTlZBTCwgJiMzNDthdHRhY2ggd2l0aCBpbnZhbGlkIGZsYWdzJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXByb2dfY250ID0gQVJSQVlfU0laRShwcm9nX2lkcyk7CiYjNDM7CXJldCA9IGJwZl9wcm9nX3F1ZXJ5KGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDAsIHByb2dfZmxhZ3MsIHByb2dfaWRzLAomIzQzOwkJCSAgICAgJmFtcDtwcm9nX2NudCk7CiYjNDM7CWlmICghQVNTRVJUX09LKHJldCwgJiMzNDtxdWVyeSBwcm9ncmFtcyBhZnRlciByZWplY3RlZCBhdHRhY2gmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKCFBU1NFUlRfRVEocHJvZ19jbnQsIDAsICYjMzQ7cmVqZWN0ZWQgYXR0YWNoIHNob3VsZCBub3QgYXR0YWNoJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXJldCA9IGJwZl9wcm9nX2F0dGFjaChwcm9nZmQsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDApOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhyZXQsICYjMzQ7YXR0YWNoIHByb2dyYW0gdG8gbGlyYyBkZXZpY2UmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyogSW52YWxpZCBxdWVyeSBmbGFncyBtdXN0IGJlIHJlamVjdGVkIHRvbywgd2l0aG91dCB1cHNldHRpbmcgc3RhdGUuICovCiYjNDM7CXByb2dfY250ID0gQVJSQVlfU0laRShwcm9nX2lkcyk7CiYjNDM7CXJldCA9IGJwZl9wcm9nX3F1ZXJ5KGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDEsIHByb2dfZmxhZ3MsIHByb2dfaWRzLAomIzQzOwkJCSAgICAgJmFtcDtwcm9nX2NudCk7CiYjNDM7CUFTU0VSVF9FUShyZXQsIC1FSU5WQUwsICYjMzQ7cXVlcnkgd2l0aCBpbnZhbGlkIGZsYWdzJiMzNDspOwomIzQzOwomIzQzOwlwcm9nX2NudCA9IEFSUkFZX1NJWkUocHJvZ19pZHMpOwomIzQzOwlyZXQgPSBicGZfcHJvZ19xdWVyeShsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwLCBwcm9nX2ZsYWdzLCBwcm9nX2lkcywKJiM0MzsJCQkgICAgICZhbXA7cHJvZ19jbnQpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhyZXQsICYjMzQ7cXVlcnkgcHJvZ3JhbXMgYWZ0ZXIgYXR0YWNoJiMzNDspKQomIzQzOwkJZ290byBvdXRfZGV0YWNoOwomIzQzOwlpZiAoIUFTU0VSVF9FUShwcm9nX2NudCwgMSwgJiMzNDtvbmUgcHJvZ3JhbSBzaG91bGQgYmUgYXR0YWNoZWQmIzM0OykpCiYjNDM7CQlnb3RvIG91dF9kZXRhY2g7CiYjNDM7CUFTU0VSVF9FUShwcm9nX2lkc1swXSwgcHJvZ19pZCwgJiMzNDtxdWVyaWVkIGlkIHNob3VsZCBtYXRjaCBhdHRhY2hlZCBwcm9ncmFtJiMzNDspOwomIzQzOwomIzQzOwkvKiBXcml0ZSByYXcgSVIgKi8KJiM0MzsJcmV0ID0gd3JpdGUobGlyY2ZkLCAmYW1wO3Rlc3RpcjEsIHNpemVvZih0ZXN0aXIxKSk7CiYjNDM7CWlmICghQVNTRVJUX0VRKHJldCwgc2l6ZW9mKHRlc3RpcjEpLCAmIzM0O3NlbmQgdGVzdCBJUiBtZXNzYWdlIDEmIzM0OykpCiYjNDM7CQlnb3RvIG91dF9kZXRhY2g7CiYjNDM7CiYjNDM7CXBmZC5mZCA9IGlucHV0ZmQ7CiYjNDM7CXBmZC5ldmVudHMgPSBQT0xMSU47CiYjNDM7CiYjNDM7CWZvciAoOzspIHsKJiM0MzsJCXBvbGwoJmFtcDtwZmQsIDEsIDEwMCk7CiYjNDM7CiYjNDM7CQkvKiBSZWFkIGRlY29kZWQgSVIgKi8KJiM0MzsJCXJldCA9IHJlYWQoaW5wdXRmZCwgJmFtcDtldmVudCwgc2l6ZW9mKGV2ZW50KSk7CiYjNDM7CQlpZiAoIUFTU0VSVF9FUShyZXQsIHNpemVvZihldmVudCksICYjMzQ7cmVhZCBkZWNvZGVkIElSIDEmIzM0OykpCiYjNDM7CQkJZ290byBvdXRfZGV0YWNoOwomIzQzOwomIzQzOwkJaWYgKGV2ZW50LnR5cGUgPT0gRVZfTVNDICZhbXA7JmFtcDsgZXZlbnQuY29kZSA9PSBNU0NfU0NBTiAmYW1wOyZhbXA7CiYjNDM7CQkgICAgZXZlbnQudmFsdWUgPT0gMHhlYWQpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogV3JpdGUgcmF3IElSICovCiYjNDM7CXJldCA9IHdyaXRlKGxpcmNmZCwgJmFtcDt0ZXN0aXIyLCBzaXplb2YodGVzdGlyMikpOwomIzQzOwlpZiAoIUFTU0VSVF9FUShyZXQsIHNpemVvZih0ZXN0aXIyKSwgJiMzNDtzZW5kIHRlc3QgSVIgbWVzc2FnZSAyJiMzNDspKQomIzQzOwkJZ290byBvdXRfZGV0YWNoOwomIzQzOwomIzQzOwlmb3IgKDs7KSB7CiYjNDM7CQlwb2xsKCZhbXA7cGZkLCAxLCAxMDApOwomIzQzOwomIzQzOwkJLyogUmVhZCBkZWNvZGVkIElSICovCiYjNDM7CQlyZXQgPSByZWFkKGlucHV0ZmQsICZhbXA7ZXZlbnQsIHNpemVvZihldmVudCkpOwomIzQzOwkJaWYgKCFBU1NFUlRfRVEocmV0LCBzaXplb2YoZXZlbnQpLCAmIzM0O3JlYWQgZGVjb2RlZCBJUiAyJiMzNDspKQomIzQzOwkJCWdvdG8gb3V0X2RldGFjaDsKJiM0MzsKJiM0MzsJCWlmIChldmVudC50eXBlID09IEVWX1JFTCAmYW1wOyZhbXA7IGV2ZW50LmNvZGUgPT0gUkVMX1kgJmFtcDsmYW1wOwomIzQzOwkJICAgIGV2ZW50LnZhbHVlID09IDEpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcHJvZ19jbnQgPSBBUlJBWV9TSVpFKHByb2dfaWRzKTsKJiM0MzsJcmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCwgcHJvZ19mbGFncywgcHJvZ19pZHMsCiYjNDM7CQkJICAgICAmYW1wO3Byb2dfY250KTsKJiM0MzsJaWYgKCFBU1NFUlRfT0socmV0LCAmIzM0O3F1ZXJ5IHByb2dyYW1zIGFmdGVyIElSIHdhcyBkZWNvZGVkJiMzNDspKQomIzQzOwkJZ290byBvdXRfZGV0YWNoOwomIzQzOwlpZiAoIUFTU0VSVF9FUShwcm9nX2NudCwgMSwgJiMzNDtvbmUgcHJvZ3JhbSBzaG91bGQgc3RpbGwgYmUgYXR0YWNoZWQmIzM0OykpCiYjNDM7CQlnb3RvIG91dF9kZXRhY2g7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBsaXJjIGNoYXJkZXYgY2FuIGhvbGQgbW9yZSB0aGFuIG9uZSBhdHRhY2hlZCBwcm9ncmFtIGF0IG9uY2UuCiYjNDM7CSAqIExvYWQgYSBzZWNvbmQsIGluZGVwZW5kZW50IGluc3RhbmNlIGFuZCBjaGVjayBpdCBjYW4gYmUgYXR0YWNoZWQKJiM0MzsJICogYWxvbmdzaWRlIHRoZSBmaXJzdCwgcXVlcmllZCwgYW5kIHRoZW4gZGV0YWNoZWQgb24gaXRzIG93bgomIzQzOwkgKiB3aXRob3V0IGRpc3R1cmJpbmcgdGhlIGZpcnN0IHByb2dyYW0mIzM5O3MgYXR0YWNobWVudC4KJiM0MzsJICovCiYjNDM7CXNrZWwyID0gbGlyY19tb2RlMl9fb3Blbl9hbmRfbG9hZCgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbDIsICYjMzQ7bGlyY19tb2RlMl9fb3Blbl9hbmRfbG9hZCAoMm5kKSYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0X2RldGFjaDsKJiM0MzsKJiM0MzsJcHJvZ2ZkMiA9IGJwZl9wcm9ncmFtX19mZChza2VsMi0mZ3Q7cHJvZ3MuYnBmX2RlY29kZXIpOwomIzQzOwomIzQzOwltZW1zZXQoJmFtcDtpbmZvLCAwLCBzaXplb2YoaW5mbykpOwomIzQzOwlpbmZvX2xlbiA9IHNpemVvZihpbmZvKTsKJiM0MzsJcmV0ID0gYnBmX3Byb2dfZ2V0X2luZm9fYnlfZmQocHJvZ2ZkMiwgJmFtcDtpbmZvLCAmYW1wO2luZm9fbGVuKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0socmV0LCAmIzM0O2dldCBzZWNvbmQgcHJvZ3JhbSYjMzk7cyBpbmZvJiMzNDspKQomIzQzOwkJZ290byBvdXRfZGV0YWNoOwomIzQzOwlwcm9nX2lkMiA9IGluZm8uaWQ7CiYjNDM7CiYjNDM7CXJldCA9IGJwZl9wcm9nX2F0dGFjaChwcm9nZmQyLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0socmV0LCAmIzM0O2F0dGFjaCBzZWNvbmQgcHJvZ3JhbSB0byBsaXJjIGRldmljZSYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0X2RldGFjaDsKJiM0MzsKJiM0MzsJcHJvZ19jbnQgPSBBUlJBWV9TSVpFKHByb2dfaWRzKTsKJiM0MzsJcmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCwgcHJvZ19mbGFncywgcHJvZ19pZHMsCiYjNDM7CQkJICAgICAmYW1wO3Byb2dfY250KTsKJiM0MzsJaWYgKCFBU1NFUlRfT0socmV0LCAmIzM0O3F1ZXJ5IHByb2dyYW1zIGFmdGVyIHNlY29uZCBhdHRhY2gmIzM0OykpCiYjNDM7CQlnb3RvIG91dF9kZXRhY2gyOwomIzQzOwlpZiAoIUFTU0VSVF9FUShwcm9nX2NudCwgMiwgJiMzNDt0d28gcHJvZ3JhbXMgc2hvdWxkIGJlIGF0dGFjaGVkJiMzNDspKQomIzQzOwkJZ290byBvdXRfZGV0YWNoMjsKJiM0MzsJQVNTRVJUX1RSVUUoKHByb2dfaWRzWzBdID09IHByb2dfaWQgJmFtcDsmYW1wOyBwcm9nX2lkc1sxXSA9PSBwcm9nX2lkMikgfHwKJiM0MzsJCSAgICAocHJvZ19pZHNbMF0gPT0gcHJvZ19pZDIgJmFtcDsmYW1wOyBwcm9nX2lkc1sxXSA9PSBwcm9nX2lkKSwKJiM0MzsJCSAgICAmIzM0O3F1ZXJpZWQgaWRzIHNob3VsZCBiZSB0aGUgdHdvIGF0dGFjaGVkIHByb2dyYW1zJiMzNDspOwomIzQzOwomIzQzOwkvKiBEZXRhY2ggdGhlIHNlY29uZCBwcm9ncmFtOyB0aGUgZmlyc3Qgc2hvdWxkIHJlbWFpbiBhdHRhY2hlZC4gKi8KJiM0MzsJcmV0ID0gYnBmX3Byb2dfZGV0YWNoMihwcm9nZmQyLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0socmV0LCAmIzM0O2RldGFjaCBzZWNvbmQgcHJvZ3JhbSYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0X2RldGFjaDI7CiYjNDM7CiYjNDM7CS8qIERldGFjaGluZyBhbiBhbHJlYWR5LWRldGFjaGVkIHByb2dyYW0gc2hvdWxkIG5vdyBmYWlsLiAqLwomIzQzOwlyZXQgPSBicGZfcHJvZ19kZXRhY2gyKHByb2dmZDIsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIpOwomIzQzOwlBU1NFUlRfRVEocmV0LCAtRU5PRU5ULCAmIzM0O2RldGFjaCBzZWNvbmQgcHJvZ3JhbSBhZ2FpbiYjMzQ7KTsKJiM0MzsKJiM0MzsJcHJvZ19jbnQgPSBBUlJBWV9TSVpFKHByb2dfaWRzKTsKJiM0MzsJcmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCwgcHJvZ19mbGFncywgcHJvZ19pZHMsCiYjNDM7CQkJICAgICAmYW1wO3Byb2dfY250KTsKJiM0MzsJaWYgKCFBU1NFUlRfT0socmV0LCAmIzM0O3F1ZXJ5IHByb2dyYW1zIGFmdGVyIHNlY29uZCBkZXRhY2gmIzM0OykpCiYjNDM7CQlnb3RvIG91dF9kZXRhY2g7CiYjNDM7CWlmICghQVNTRVJUX0VRKHByb2dfY250LCAxLCAmIzM0O29uZSBwcm9ncmFtIHNob3VsZCByZW1haW4gYXR0YWNoZWQmIzM0OykpCiYjNDM7CQlnb3RvIG91dF9kZXRhY2g7CiYjNDM7CUFTU0VSVF9FUShwcm9nX2lkc1swXSwgcHJvZ19pZCwgJiMzNDtyZW1haW5pbmcgcHJvZ3JhbSBzaG91bGQgYmUgdGhlIGZpcnN0IG9uZSYjMzQ7KTsKJiM0MzsKJiM0MztvdXRfZGV0YWNoOgomIzQzOwkvKiBMZXQmIzM5O3MgdHJ5IGRldGFjaGluZyBpdCBub3cgaXQgaXMgYWN0dWFsbHkgYXR0YWNoZWQuICovCiYjNDM7CXJldCA9IGJwZl9wcm9nX2RldGFjaDIocHJvZ2ZkLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyKTsKJiM0MzsJQVNTRVJUX09LKHJldCwgJiMzNDtkZXRhY2ggcHJvZ3JhbSBmcm9tIGxpcmMgZGV2aWNlJiMzNDspOwomIzQzOwomIzQzOwkvKiBEZXRhY2hpbmcgaXQgYWdhaW4gc2hvdWxkIG5vdyBmYWlsIHRoZSBzYW1lIHdheS4gKi8KJiM0MzsJcmV0ID0gYnBmX3Byb2dfZGV0YWNoMihwcm9nZmQsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIpOwomIzQzOwlBU1NFUlRfRVEocmV0LCAtRU5PRU5ULCAmIzM0O2RldGFjaCBwcm9ncmFtIGZyb20gbGlyYyBkZXZpY2UgYWdhaW4mIzM0Oyk7CiYjNDM7CWdvdG8gb3V0OwomIzQzOwomIzQzO291dF9kZXRhY2gyOgomIzQzOwkvKiBCZXN0LWVmZm9ydCBjbGVhbnVwIG9mIHRoZSBzZWNvbmQgcHJvZ3JhbSBiZWZvcmUgYmFpbGluZyBvdXQuICovCiYjNDM7CWJwZl9wcm9nX2RldGFjaDIocHJvZ2ZkMiwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMik7CiYjNDM7CWdvdG8gb3V0X2RldGFjaDsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CWlmIChpbnB1dGZkICZndDs9IDApCiYjNDM7CQljbG9zZShpbnB1dGZkKTsKJiM0MzsJaWYgKGxpcmNmZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2UobGlyY2ZkKTsKJiM0MzsJbGlyY19tb2RlMl9fZGVzdHJveShza2VsMik7CiYjNDM7CWxpcmNfbW9kZTJfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xpcmNfbW9kZTIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9saXJjX21vZGUyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uOTgxMzdmM2M1YzAzZAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9saXJjX21vZGUyLmMKQEAgLTAsMCAmIzQzOzEsMzIgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8vIHRlc3QgaXIgZGVjb2RlcgomIzQzOy8vCiYjNDM7Ly8gQ29weXJpZ2h0IChDKSAyMDE4IFNlYW4gWW91bmcgJmx0O3NlYW5AbWVzcy5vcmcmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JwZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9saXJjLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOwomIzQzO1NFQygmIzM0O2xpcmNfbW9kZTImIzM0OykKJiM0MztpbnQgYnBmX2RlY29kZXIodW5zaWduZWQgaW50ICpzYW1wbGUpCiYjNDM7ewomIzQzOwlpZiAoTElSQ19JU19QVUxTRSgqc2FtcGxlKSkgewomIzQzOwkJdW5zaWduZWQgaW50IGR1cmF0aW9uID0gTElSQ19WQUxVRSgqc2FtcGxlKTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBGbGFnIGJpdHMgcGlja2VkIGRlbGliZXJhdGVseSBsb3c6IHJjLWxvb3BiYWNrIHNpbXVsYXRlcwomIzQzOwkJICogYSByZWNlaXZlciBvdmVyZmxvdyBmb3IgYW55IHB1bHNlIG92ZXIgTVNfVE9fVVMoNTApIChzZWUKJiM0MzsJCSAqIGxvb3BfdHhfaXIoKSBpbiByYy1sb29wYmFjay5jKSwgd2hpY2ggd291bGQgc2lsZW50bHkKJiM0MzsJCSAqIHN3YWxsb3cgdGhlIHNhbXBsZSBiZWZvcmUgaXQgZXZlciByZWFjaGVzIHRoaXMgZGVjb2Rlci4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGR1cmF0aW9uICZhbXA7IDB4ODAwMCkKJiM0MzsJCQlicGZfcmNfa2V5ZG93bihzYW1wbGUsIDB4NDAsIGR1cmF0aW9uICZhbXA7IDB4M2ZmZiwgMCk7CiYjNDM7CQlpZiAoZHVyYXRpb24gJmFtcDsgMHg0MDAwKQomIzQzOwkJCWJwZl9yY19wb2ludGVyX3JlbChzYW1wbGUsIChkdXJhdGlvbiAmZ3Q7Jmd0OyA3KSAmYW1wOyAweDdmLAomIzQzOwkJCQkJICAgZHVyYXRpb24gJmFtcDsgMHg3Zik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2xpcmNfbW9kZTJfa2Vybi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfbGlyY19tb2RlMl9rZXJuLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiZTQyODRjMDMyZmUuLjAwMDAwMDAwMDAwMDAKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfbGlyY19tb2RlMl9rZXJuLmMKJiM0MzsmIzQzOyYjNDM7IC9kZXYvbnVsbApAQCAtMSwyNiAmIzQzOzAsMCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKLS8vIHRlc3QgaXIgZGVjb2RlcgotLy8KLS8vIENvcHlyaWdodCAoQykgMjAxOCBTZWFuIFlvdW5nICZsdDtzZWFuQG1lc3Mub3JnJmd0OwotCi0jaW5jbHVkZSAmbHQ7bGludXgvYnBmLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgvbGlyYy5oJmd0OwotI2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwotCi1TRUMoJiMzNDtsaXJjX21vZGUyJiMzNDspCi1pbnQgYnBmX2RlY29kZXIodW5zaWduZWQgaW50ICpzYW1wbGUpCi17Ci0JaWYgKExJUkNfSVNfUFVMU0UoKnNhbXBsZSkpIHsKLQkJdW5zaWduZWQgaW50IGR1cmF0aW9uID0gTElSQ19WQUxVRSgqc2FtcGxlKTsKLQotCQlpZiAoZHVyYXRpb24gJmFtcDsgMHgxMDAwKQotCQkJYnBmX3JjX2tleWRvd24oc2FtcGxlLCAweDQwLCBkdXJhdGlvbiAmYW1wOyAweGZmZmYsIDApOwotCQlpZiAoZHVyYXRpb24gJmFtcDsgMHgyMDAwKQotCQkJYnBmX3JjX3BvaW50ZXJfcmVsKHNhbXBsZSwgKGR1cmF0aW9uICZndDsmZ3Q7IDgpICZhbXA7IDB4ZmYsCi0JCQkJCSAgIGR1cmF0aW9uICZhbXA7IDB4ZmYpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1jaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9saXJjX21vZGUyLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbGlyY19tb2RlMi5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNTI1MmI5MWY0OGExOC4uMDAwMDAwMDAwMDAwMAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9saXJjX21vZGUyLnNoCiYjNDM7JiM0MzsmIzQzOyAvZGV2L251bGwKQEAgLTEsNDEgJiM0MzswLDAgQEAKLSMhL2Jpbi9iYXNoCi0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCi0KLSMgS3NlbGZ0ZXN0IGZyYW1ld29yayByZXF1aXJlbWVudCAtIFNLSVAgY29kZSBpcyA0Lgota3NmdF9za2lwPTQKLXJldD0ka3NmdF9za2lwCi0KLW1zZz0mIzM0O3NraXAgYWxsIHRlc3RzOiYjMzQ7Ci1pZiBbICRVSUQgIT0gMCBdOyB0aGVuCi0JZWNobyAkbXNnIHBsZWFzZSBydW4gdGhpcyBhcyByb290ICZndDsmYW1wOzIKLQlleGl0ICRrc2Z0X3NraXAKLWZpCi0KLUdSRUVOPSYjMzk7XDAzM1swOzkybSYjMzk7Ci1SRUQ9JiMzOTtcMDMzWzA7MzFtJiMzOTsKLU5DPSYjMzk7XDAzM1swbSYjMzk7ICMgTm8gQ29sb3IKLQotbW9kcHJvYmUgcmMtbG9vcGJhY2sKLQotZm9yIGkgaW4gL3N5cy9jbGFzcy9yYy9yYyoKLWRvCi0JaWYgZ3JlcCAtcSBEUlZfTkFNRT1yYy1sb29wYmFjayAkaS91ZXZlbnQKLQl0aGVuCi0JCUxJUkNERVY9JChncmVwIERFVk5BTUU9ICRpL2xpcmMqL3VldmVudCB8IHNlZCBzUURFVk5BTUU9US9kZXYvUSkKLQkJSU5QVVRERVY9JChncmVwIERFVk5BTUU9ICRpL2lucHV0Ki9ldmVudCovdWV2ZW50IHwgc2VkIHNRREVWTkFNRT1RL2Rldi9RKQotCWZpCi1kb25lCi0KLWlmIFsgLW4gJiMzNDskTElSQ0RFViYjMzQ7IF07Ci10aGVuCi0JVFlQRT1saXJjX21vZGUyCi0JLi90ZXN0X2xpcmNfbW9kZTJfdXNlciAkTElSQ0RFViAkSU5QVVRERVYKLQlyZXQ9JD8KLQlpZiBbICRyZXQgLW5lIDAgXTsgdGhlbgotCQllY2hvIC1lICR7UkVEfSYjMzQ7RkFJTDogJFRZUEUmIzM0OyR7TkN9Ci0JZWxzZQotCQllY2hvIC1lICR7R1JFRU59JiMzNDtQQVNTOiAkVFlQRSYjMzQ7JHtOQ30KLQlmaQotZmkKLQotZXhpdCAkcmV0CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9saXJjX21vZGUyX3VzZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xpcmNfbW9kZTJfdXNlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDE5MWRhMjBkMTQzLi4wMDAwMDAwMDAwMDAwCi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xpcmNfbW9kZTJfdXNlci5jCiYjNDM7JiM0MzsmIzQzOyAvZGV2L251bGwKQEAgLTEsMTc3ICYjNDM7MCwwIEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAotLy8gdGVzdCBpciBkZWNvZGVyCi0vLwotLy8gQ29weXJpZ2h0IChDKSAyMDE4IFNlYW4gWW91bmcgJmx0O3NlYW5AbWVzcy5vcmcmZ3Q7Ci0KLS8vIEEgbGlyYyBjaGFyZGV2IGlzIGEgZGV2aWNlIHJlcHJlc2VudGluZyBhIGNvbnN1bWVyIElSIChjaXIpIGRldmljZSB3aGljaAotLy8gY2FuIHJlY2VpdmUgaW5mcmFyZWQgc2lnbmFscyBmcm9tIHJlbW90ZSBjb250cm9sIGFuZC9vciB0cmFuc21pdCBJUi4KLS8vCi0vLyBJUiBpcyBzZW50IGFzIGEgc2VyaWVzIG9mIHB1bHNlcyBhbmQgc3BhY2Ugc29tZXdoYXQgbGlrZSBtb3JzZSBjb2RlLiBUaGUKLS8vIEJQRiBwcm9ncmFtIGNhbiBkZWNvZGUgdGhpcyBpbnRvIHNjYW5jb2RlcyBzbyB0aGF0IHJjLWNvcmUgY2FuIHRyYW5zbGF0ZQotLy8gdGhpcyBpbnRvIGlucHV0IGtleSBjb2RlcyB1c2luZyB0aGUgcmMga2V5bWFwLgotLy8KLS8vIFRoaXMgdGVzdCB3b3JrcyBieSBzZW5kaW5nIElSIG92ZXIgcmMtbG9vcGJhY2ssIHNvIHRoZSBJUiBpcyBwcm9jZXNzZWQgYnkKLS8vIEJQRiBhbmQgdGhlbiBkZWNvZGVkIGludG8gc2NhbmNvZGVzLiBUaGUgbGlyYyBjaGFyZGV2IG11c3QgYmUgdGhlIG9uZQotLy8gYXNzb2NpYXRlZCB3aXRoIHJjLWxvb3BiYWNrLCBzZWUgdGhlIG91dHB1dCBvZiBpci1rZXl0YWJsZSgxKS4KLS8vCi0vLyBUaGUgZm9sbG93aW5nIENPTkZJRyBvcHRpb25zIG11c3QgYmUgZW5hYmxlZCBmb3IgdGhlIHRlc3QgdG8gc3VjY2VlZDoKLS8vIENPTkZJR19SQ19DT1JFPXkKLS8vIENPTkZJR19CUEZfUkFXSVJfRVZFTlQ9eQotLy8gQ09ORklHX1JDX0xPT1BCQUNLPXkKLQotLy8gU3RlcHM6Ci0vLyAxLiBPcGVuIHRoZSAvZGV2L2xpcmNOIGRldmljZSBmb3IgcmMtbG9vcGJhY2sgKGdpdmVuIG9uIGNvbW1hbmQgbGluZSkKLS8vIDIuIEF0dGFjaCBicGZfbGlyY19tb2RlMiBwcm9ncmFtIHdoaWNoIGRlY29kZXMgc29tZSBJUi4KLS8vIDMuIFNlbmQgc29tZSBJUiB0byB0aGUgc2FtZSBJUiBkZXZpY2U7IHNpbmNlIGl0IGlzIGxvb3BiYWNrLCB0aGlzIHdpbGwKLS8vICAgIGVuZCB1cCBpbiB0aGUgYnBmIHByb2dyYW0KLS8vIDQuIGJwZiBwcm9ncmFtIHNob3VsZCBkZWNvZGUgSVIgYW5kIHJlcG9ydCBrZXljb2RlCi0vLyA1LiBXZSBjYW4gcmVhZCBrZXljb2RlIGZyb20gc2FtZSAvZGV2L2xpcmMgZGV2aWNlCi0KLSNpbmNsdWRlICZsdDtsaW51eC9icGYuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9pbnB1dC5oJmd0OwotI2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKLSNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKLSNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKLSNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKLSNpbmNsdWRlICZsdDtwb2xsLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7c3lzL3R5cGVzLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7c3lzL2lvY3RsLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7c3lzL3N0YXQuaCZndDsKLSNpbmNsdWRlICZsdDtmY250bC5oJmd0OwotCi0jaW5jbHVkZSAmIzM0O2JwZl91dGlsLmgmIzM0OwotI2luY2x1ZGUgJmx0O2JwZi9icGYuaCZndDsKLSNpbmNsdWRlICZsdDticGYvbGliYnBmLmgmZ3Q7Ci0KLSNpbmNsdWRlICYjMzQ7dGVzdGluZ19oZWxwZXJzLmgmIzM0OwotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0Jc3RydWN0IGJwZl9vYmplY3QgKm9iajsKLQlpbnQgcmV0LCBsaXJjZmQsIHByb2dmZCwgaW5wdXRmZDsKLQlpbnQgdGVzdGlyMSA9IDB4MWVhZDsKLQlpbnQgdGVzdGlyMiA9IDB4MjEwMTsKLQl1MzIgcHJvZ19pZHNbMTBdLCBwcm9nX2ZsYWdzWzEwXSwgcHJvZ19jbnQ7Ci0KLQlpZiAoYXJnYyAhPSAzKSB7Ci0JCXByaW50ZigmIzM0O1VzYWdlOiAlcyAvZGV2L2xpcmNOIC9kZXYvaW5wdXQvZXZlbnRNXG4mIzM0OywgYXJndlswXSk7Ci0JCXJldHVybiAyOwotCX0KLQotCXJldCA9IGJwZl9wcm9nX3Rlc3RfbG9hZCgmIzM0O3Rlc3RfbGlyY19tb2RlMl9rZXJuLmJwZi5vJiMzNDssCi0JCQkJIEJQRl9QUk9HX1RZUEVfTElSQ19NT0RFMiwgJmFtcDtvYmosICZhbXA7cHJvZ2ZkKTsKLQlpZiAocmV0KSB7Ci0JCXByaW50ZigmIzM0O0ZhaWxlZCB0byBsb2FkIGJwZiBwcm9ncmFtXG4mIzM0Oyk7Ci0JCXJldHVybiAxOwotCX0KLQotCWxpcmNmZCA9IG9wZW4oYXJndlsxXSwgT19SRFdSIHwgT19OT05CTE9DSyk7Ci0JaWYgKGxpcmNmZCA9PSAtMSkgewotCQlwcmludGYoJiMzNDtmYWlsZWQgdG8gb3BlbiBsaXJjIGRldmljZSAlczogJW1cbiYjMzQ7LCBhcmd2WzFdKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JLyogTGV0JiMzOTtzIHRyeSBkZXRhY2ggaXQgYmVmb3JlIGl0IHdhcyBldmVyIGF0dGFjaGVkICovCi0JcmV0ID0gYnBmX3Byb2dfZGV0YWNoMihwcm9nZmQsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIpOwotCWlmIChyZXQgIT0gLUVOT0VOVCkgewotCQlwcmludGYoJiMzNDticGZfcHJvZ19kZXRhY2gyIG5vdCBhdHRhY2hlZCBzaG91bGQgZmFpbDogJW1cbiYjMzQ7KTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JaW5wdXRmZCA9IG9wZW4oYXJndlsyXSwgT19SRE9OTFkgfCBPX05PTkJMT0NLKTsKLQlpZiAoaW5wdXRmZCA9PSAtMSkgewotCQlwcmludGYoJiMzNDtmYWlsZWQgdG8gb3BlbiBpbnB1dCBkZXZpY2UgJXM6ICVtXG4mIzM0OywgYXJndlsxXSk7Ci0JCXJldHVybiAxOwotCX0KLQotCXByb2dfY250ID0gMTA7Ci0JcmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCwgcHJvZ19mbGFncywgcHJvZ19pZHMsCi0JCQkgICAgICZhbXA7cHJvZ19jbnQpOwotCWlmIChyZXQpIHsKLQkJcHJpbnRmKCYjMzQ7RmFpbGVkIHRvIHF1ZXJ5IGJwZiBwcm9ncmFtcyBvbiBsaXJjIGRldmljZTogJW1cbiYjMzQ7KTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JaWYgKHByb2dfY250ICE9IDApIHsKLQkJcHJpbnRmKCYjMzQ7RXhwZWN0ZWQgbm90aGluZyB0byBiZSBhdHRhY2hlZFxuJiMzNDspOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlyZXQgPSBicGZfcHJvZ19hdHRhY2gocHJvZ2ZkLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwKTsKLQlpZiAocmV0KSB7Ci0JCXByaW50ZigmIzM0O0ZhaWxlZCB0byBhdHRhY2ggYnBmIHRvIGxpcmMgZGV2aWNlOiAlbVxuJiMzNDspOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQkvKiBXcml0ZSByYXcgSVIgKi8KLQlyZXQgPSB3cml0ZShsaXJjZmQsICZhbXA7dGVzdGlyMSwgc2l6ZW9mKHRlc3RpcjEpKTsKLQlpZiAocmV0ICE9IHNpemVvZih0ZXN0aXIxKSkgewotCQlwcmludGYoJiMzNDtGYWlsZWQgdG8gc2VuZCB0ZXN0IElSIG1lc3NhZ2U6ICVtXG4mIzM0Oyk7Ci0JCXJldHVybiAxOwotCX0KLQotCXN0cnVjdCBwb2xsZmQgcGZkID0geyAuZmQgPSBpbnB1dGZkLCAuZXZlbnRzID0gUE9MTElOIH07Ci0Jc3RydWN0IGlucHV0X2V2ZW50IGV2ZW50OwotCi0JZm9yICg7OykgewotCQlwb2xsKCZhbXA7cGZkLCAxLCAxMDApOwotCi0JCS8qIFJlYWQgZGVjb2RlZCBJUiAqLwotCQlyZXQgPSByZWFkKGlucHV0ZmQsICZhbXA7ZXZlbnQsIHNpemVvZihldmVudCkpOwotCQlpZiAocmV0ICE9IHNpemVvZihldmVudCkpIHsKLQkJCXByaW50ZigmIzM0O0ZhaWxlZCB0byByZWFkIGRlY29kZWQgSVI6ICVtXG4mIzM0Oyk7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCi0JCWlmIChldmVudC50eXBlID09IEVWX01TQyAmYW1wOyZhbXA7IGV2ZW50LmNvZGUgPT0gTVNDX1NDQU4gJmFtcDsmYW1wOwotCQkgICAgZXZlbnQudmFsdWUgPT0gMHgxZWFkKSB7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCS8qIFdyaXRlIHJhdyBJUiAqLwotCXJldCA9IHdyaXRlKGxpcmNmZCwgJmFtcDt0ZXN0aXIyLCBzaXplb2YodGVzdGlyMikpOwotCWlmIChyZXQgIT0gc2l6ZW9mKHRlc3RpcjIpKSB7Ci0JCXByaW50ZigmIzM0O0ZhaWxlZCB0byBzZW5kIHRlc3QgSVIgbWVzc2FnZTogJW1cbiYjMzQ7KTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JZm9yICg7OykgewotCQlwb2xsKCZhbXA7cGZkLCAxLCAxMDApOwotCi0JCS8qIFJlYWQgZGVjb2RlZCBJUiAqLwotCQlyZXQgPSByZWFkKGlucHV0ZmQsICZhbXA7ZXZlbnQsIHNpemVvZihldmVudCkpOwotCQlpZiAocmV0ICE9IHNpemVvZihldmVudCkpIHsKLQkJCXByaW50ZigmIzM0O0ZhaWxlZCB0byByZWFkIGRlY29kZWQgSVI6ICVtXG4mIzM0Oyk7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCi0JCWlmIChldmVudC50eXBlID09IEVWX1JFTCAmYW1wOyZhbXA7IGV2ZW50LmNvZGUgPT0gUkVMX1kgJmFtcDsmYW1wOwotCQkgICAgZXZlbnQudmFsdWUgPT0gMSApIHsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JcHJvZ19jbnQgPSAxMDsKLQlyZXQgPSBicGZfcHJvZ19xdWVyeShsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwLCBwcm9nX2ZsYWdzLCBwcm9nX2lkcywKLQkJCSAgICAgJmFtcDtwcm9nX2NudCk7Ci0JaWYgKHJldCkgewotCQlwcmludGYoJiMzNDtGYWlsZWQgdG8gcXVlcnkgYnBmIHByb2dyYW1zIG9uIGxpcmMgZGV2aWNlOiAlbVxuJiMzNDspOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlpZiAocHJvZ19jbnQgIT0gMSkgewotCQlwcmludGYoJiMzNDtFeHBlY3RlZCBvbmUgcHJvZ3JhbSB0byBiZSBhdHRhY2hlZFxuJiMzNDspOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQkvKiBMZXQmIzM5O3MgdHJ5IGRldGFjaGluZyBpdCBub3cgaXQgaXMgYWN0dWFsbHkgYXR0YWNoZWQgKi8KLQlyZXQgPSBicGZfcHJvZ19kZXRhY2gyKHByb2dmZCwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMik7Ci0JaWYgKHJldCkgewotCQlwcmludGYoJiMzNDticGZfcHJvZ19kZXRhY2gyOiByZXR1cm5lZCAlbVxuJiMzNDspOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMjI6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxMjUKCQkJCQkJCW91dHB1dDogODAKCQkJCQkJCXRob3VnaHRzOiAzODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQlBGIFNlbGZ0ZXN0IENvbnZlcnNpb24gUmV2aWV3KioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgcmVmYWN0b3JzIHRoZSBgbGlyY19tb2RlMmAgQlBGIHNlbGZ0ZXN0cy4gQmFzaWNhbGx5LCBpdCYjMzk7cyB0YWtpbmcgYW4gb2xkLCBjbHVua2llciBzdHlsZSB0ZXN0IGFuZCBtb2Rlcm5pemluZyBpdCwgbW92aW5nIGl0IG92ZXIgdG8gdGhlIGB0ZXN0X3Byb2dzYCBmcmFtZXdvcmsuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGlzICphY3R1YWxseSogY2hhbmdlcyBhbnl0aGluZyBjb3JlIHRvIHRoZSBrZXJuZWwsIG9yIGlmIGl0JiMzOTtzIGp1c3QgYSByZWZhY3RvcmluZyBvZiB0aGUgdGVzdCBpdHNlbGYuCgpGaXJzdCBpbnN0aW5jdCBpcyB0aGF0IGl0ICpzaG91bGRuJiMzOTt0KiB0b3VjaCBrZXJuZWwgZnVuY3Rpb25hbGl0eS4gSXQmIzM5O3MgYWxsIHdpdGhpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9gIGRpcmVjdG9yeSwgd2hpY2ggaXMgZXhhY3RseSB3aGVyZSBJIGV4cGVjdCB0byBzZWUgdGVzdCBjb2RlLiBPa2F5LCBsZXQmIzM5O3MgY29uZmlybSB0aGF0IHdpdGggYSBtb3JlIHRob3JvdWdoIGNoZWNrIG9mIHRoZSBkaWZmLgoKQWxyaWdodCwgdGhlIGZpbGVzIG1vZGlmaWVkIGFyZTogYC5naXRpZ25vcmVgLCBgTWFrZWZpbGVgLCBhbmQgdGhlIG1haW4gdGVzdCBmaWxlcy4gU3BlY2lmaWNhbGx5OiBgcHJvZ190ZXN0cy9saXJjX21vZGUyLmNgLCBgcHJvZ3MvbGlyY19tb2RlMi5jYC4gVGhlIG9sZCBzdHVmZiDigJMgYHRlc3RfbGlyY19tb2RlMl9rZXJuLmNgLCBgdGVzdF9saXJjX21vZGUyLnNoYCwgYW5kIGB0ZXN0X2xpcmNfbW9kZTJfdXNlci5jYCDigJMgYXJlIGFsbCBiZWluZyAqZGVsZXRlZCouIFNvLCB3ZSYjMzk7cmUgcmVwbGFjaW5nIHRoZSBvbGQgdGVzdCB3aXRoIHRoZSBuZXcgb25lLiBObyBrZXJuZWwgc291cmNlIGNvZGUgaXMgYmVpbmcgbW9kaWZpZWQgb3V0c2lkZSBvZiBgdG9vbHMvYC4gVGhpcyBjb25maXJtcyBteSBpbml0aWFsIGFzc2Vzc21lbnQuCgpHaXZlbiB0aGF0IHRoaXMgaXMgYSBwdXJlbHkgc2VsZnRlc3QtcmVsYXRlZCBjaGFuZ2UsIEkmIzM5O20gY29uZmlkZW50IHRoZXJlIGFyZSB6ZXJvIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGl0c2VsZi4gVGhpcyBtZWFucyB3ZSYjMzk7cmUgc2FmZSB0byBtYXJrIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgQlBGIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLykgYnkgY29udmVydGluZyBhbiBvbGQtc3R5bGUgdGVzdCBpbnRvIHRoZSB0ZXN0X3Byb2dzIGZyYW1ld29yay4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEJQRiBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8pIGJ5IGNvbnZlcnRpbmcgYW4gb2xkLXN0eWxlIHRlc3QgaW50byB0aGUgdGVzdF9wcm9ncyBmcmFtZXdvcmsuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAyMjowNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjI6MDc6MzMuMTIzMzU1MzMyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTcwNDI5NzI3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgQlBGIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLykgYnkgY29udmVydGluZyBhbiBvbGQtc3R5bGUgdGVzdCBpbnRvIHRoZSB0ZXN0X3Byb2dzIGZyYW1ld29yay4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQyMjowNzozMy4xMjMzNjAwMjJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTY5ODQxNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjMWNjMGE4ZmUzNWU2NzA4ZmNlMGExODE5M2U0Njg5NTMxYTNhYWMzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDIwIDIyOjA3OjMxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8uZ2l0aWdub3JlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy5naXRpZ25vcmVcXG5pbmRleCA5ODZhNjM4OTE4NmJhLi5iODE1YmYwZDg4Nzc0IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8uZ2l0aWdub3JlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy5naXRpZ25vcmVcXG5AQCAtMTcsNyArMTcsNiBAQCB0ZXN0X3ZlcmlmaWVyX2xvZ1xcbiBmZWF0dXJlXFxuIHVyYW5kb21fcmVhZFxcbiB0ZXN0X3NvY2ttYXBcXG4tdGVzdF9saXJjX21vZGUyX3VzZXJcXG4gZmxvd19kaXNzZWN0b3JfbG9hZFxcbiB0ZXN0X3RjcG5vdGlmeV91c2VyXFxuIHRlc3RfbGliYnBmXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxcbmluZGV4IDJiMmY5M2RlYzQ3NGIuLmY4ZWMwZjU3NDU1OWEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlXFxuQEAgLTEyMyw3ICsxMjMsNiBAQCBURVNUX0ZJTEVTID0geHNrX3ByZXJlcXMuc2ggJCh3aWxkY2FyZCBwcm9ncy9idGZfZHVtcF90ZXN0X2Nhc2VfKi5jKVxcbiBcXG4gIyBPcmRlciBjb3JyZXNwb25kIHRvICdtYWtlIHJ1bl90ZXN0cycgb3JkZXJcXG4gVEVTVF9QUk9HUyA6PSB0ZXN0X2ttb2Quc2ggXFxcXFxcbi1cXHR0ZXN0X2xpcmNfbW9kZTIuc2ggXFxcXFxcbiBcXHR0ZXN0X2JwZnRvb2xfYnVpbGQuc2ggXFxcXFxcbiBcXHR0ZXN0X2RvY19idWlsZC5zaCBcXFxcXFxuIFxcdHRlc3RfeHNrLnNoIFxcXFxcXG5AQCAtMTQxLDcgKzE0MCw2IEBAIFRFU1RfR0VOX1BST0dTX0VYVEVOREVEID0gXFxcXFxcbiBcXHRiZW5jaCBcXFxcXFxuIFxcdGZsb3dfZGlzc2VjdG9yX2xvYWQgXFxcXFxcbiBcXHR0ZXN0X2NwcCBcXFxcXFxuLVxcdHRlc3RfbGlyY19tb2RlMl91c2VyIFxcXFxcXG4gXFx0dmVyaXN0YXQgXFxcXFxcbiBcXHR4ZHBfZmVhdHVyZXMgXFxcXFxcbiBcXHR4ZHBfaHdfbWV0YWRhdGEgXFxcXFxcbkBAIC0zMzgsNyArMzM2LDYgQEAgJChPVVRQVVQpL3Rlc3Rfc29ja21hcDogJChDR1JPVVBfSEVMUEVSUykgJChURVNUSU5HX0hFTFBFUlMpXFxuICQoT1VUUFVUKS90ZXN0X3RjcG5vdGlmeV91c2VyOiAkKENHUk9VUF9IRUxQRVJTKSAkKFRFU1RJTkdfSEVMUEVSUykgJChUUkFDRV9IRUxQRVJTKVxcbiAkKE9VVFBVVCkvdGVzdF9zb2NrX2ZpZWxkczogJChDR1JPVVBfSEVMUEVSUykgJChURVNUSU5HX0hFTFBFUlMpXFxuICQoT1VUUFVUKS90ZXN0X3RhZzogJChURVNUSU5HX0hFTFBFUlMpXFxuLSQoT1VUUFVUKS90ZXN0X2xpcmNfbW9kZTJfdXNlcjogJChURVNUSU5HX0hFTFBFUlMpXFxuICQoT1VUUFVUKS9mbG93X2Rpc3NlY3Rvcl9sb2FkOiAkKFRFU1RJTkdfSEVMUEVSUylcXG4gJChPVVRQVVQpL3Rlc3RfbWFwczogJChURVNUSU5HX0hFTFBFUlMpXFxuICQoT1VUUFVUKS90ZXN0X3ZlcmlmaWVyOiAkKFRFU1RJTkdfSEVMUEVSUykgJChDQVBfSEVMUEVSUykgJChVTlBSSVZfSEVMUEVSUylcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGlyY19tb2RlMi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvbGlyY19tb2RlMi5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi44ZTQ4NWRiNzBiNzhhXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2xpcmNfbW9kZTIuY1xcbkBAIC0wLDAgKzEsMzM0IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8vIHRlc3QgaXIgZGVjb2RlclxcbisvL1xcbisvLyBDb3B5cmlnaHQgKEMpIDIwMTggU2VhbiBZb3VuZyBcXHUwMDNjc2VhbkBtZXNzLm9yZ1xcdTAwM2VcXG4rXFxuKy8vIEEgbGlyYyBjaGFyZGV2IGlzIGEgZGV2aWNlIHJlcHJlc2VudGluZyBhIGNvbnN1bWVyIElSIChjaXIpIGRldmljZSB3aGljaFxcbisvLyBjYW4gcmVjZWl2ZSBpbmZyYXJlZCBzaWduYWxzIGZyb20gcmVtb3RlIGNvbnRyb2wgYW5kL29yIHRyYW5zbWl0IElSLlxcbisvL1xcbisvLyBJUiBpcyBzZW50IGFzIGEgc2VyaWVzIG9mIHB1bHNlcyBhbmQgc3BhY2Ugc29tZXdoYXQgbGlrZSBtb3JzZSBjb2RlLiBUaGVcXG4rLy8gQlBGIHByb2dyYW0gY2FuIGRlY29kZSB0aGlzIGludG8gc2NhbmNvZGVzIHNvIHRoYXQgcmMtY29yZSBjYW4gdHJhbnNsYXRlXFxuKy8vIHRoaXMgaW50byBpbnB1dCBrZXkgY29kZXMgdXNpbmcgdGhlIHJjIGtleW1hcC5cXG4rLy9cXG4rLy8gVGhpcyB0ZXN0IHdvcmtzIGJ5IHNlbmRpbmcgSVIgb3ZlciByYy1sb29wYmFjaywgc28gdGhlIElSIGlzIHByb2Nlc3NlZCBieVxcbisvLyBCUEYgYW5kIHRoZW4gZGVjb2RlZCBpbnRvIHNjYW5jb2Rlcy4gVGhlIGxpcmMgY2hhcmRldiBtdXN0IGJlIHRoZSBvbmVcXG4rLy8gYXNzb2NpYXRlZCB3aXRoIHJjLWxvb3BiYWNrLCBzZWUgdGhlIG91dHB1dCBvZiBpci1rZXl0YWJsZSgxKS5cXG4rLy9cXG4rLy8gVGhlIGZvbGxvd2luZyBDT05GSUcgb3B0aW9ucyBtdXN0IGJlIGVuYWJsZWQgZm9yIHRoZSB0ZXN0IHRvIHN1Y2NlZWQ6XFxuKy8vIENPTkZJR19SQ19DT1JFPXlcXG4rLy8gQ09ORklHX0JQRl9SQVdJUl9FVkVOVD15XFxuKy8vIENPTkZJR19SQ19MT09QQkFDSz15XFxuKy8vIENPTkZJR19MSVJDPXlcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbnB1dC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbGlyYy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZ2xvYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGltaXRzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nwb2xsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N0ZXN0X3Byb2dzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJsaXJjX21vZGUyLnNrZWwuaFxcXCJcXG4rXFxuKy8qXFxuKyAqIFJlYWQgdGhlIERFVk5BTUU9IGxpbmUgb3V0IG9mIHRoZSBmaXJzdCB1ZXZlbnQgZmlsZSB0aGF0IG1hdGNoZXNcXG4rICogcGF0dGVybiwgYW5kIHR1cm4gaXQgaW50byBhIC9kZXYvXFx1MDAzY25hbWVcXHUwMDNlIHBhdGguXFxuKyAqL1xcbitzdGF0aWMgYm9vbCBmaW5kX2Rldm5hbWUoY29uc3QgY2hhciAqcGF0dGVybiwgY2hhciAqcGF0aCwgc2l6ZV90IHBhdGhfc3opXFxuK3tcXG4rXFx0Z2xvYl90IGdsID0ge307XFxuK1xcdGJvb2wgZm91bmQgPSBmYWxzZTtcXG4rXFx0RklMRSAqZjtcXG4rXFxuK1xcdGlmIChnbG9iKHBhdHRlcm4sIDAsIE5VTEwsIFxcdTAwMjZnbCkgfHwgZ2wuZ2xfcGF0aGMgPT0gMClcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRmID0gZm9wZW4oZ2wuZ2xfcGF0aHZbMF0sIFxcXCJyXFxcIik7XFxuK1xcdGlmICghZilcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRjaGFyIGxpbmVbMjU2XTtcXG4rXFxuK1xcdHdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGYpKSB7XFxuK1xcdFxcdGNoYXIgKnZhbDtcXG4rXFxuK1xcdFxcdGlmIChzdHJuY21wKGxpbmUsIFxcXCJERVZOQU1FPVxcXCIsIDgpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHZhbCA9IGxpbmUgKyA4O1xcbitcXHRcXHR2YWxbc3RyY3Nwbih2YWwsIFxcXCJcXFxcblxcXCIpXSA9ICdcXFxcMCc7XFxuK1xcdFxcdHNucHJpbnRmKHBhdGgsIHBhdGhfc3osIFxcXCIvZGV2LyVzXFxcIiwgdmFsKTtcXG4rXFx0XFx0Zm91bmQgPSB0cnVlO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0ZmNsb3NlKGYpO1xcbitvdXQ6XFxuK1xcdGdsb2JmcmVlKFxcdTAwMjZnbCk7XFxuK1xcdHJldHVybiBmb3VuZDtcXG4rfVxcbitcXG4rLyogTG9hZCByYy1sb29wYmFjayBhbmQgZmluZCB0aGUgbGlyYyBhbmQgaW5wdXQgY2hhcmRldnMgaXQgY3JlYXRlZC4gKi9cXG4rc3RhdGljIGJvb2wgZmluZF9sb29wYmFja19kZXZpY2VzKGNoYXIgKmxpcmNfcGF0aCwgY2hhciAqaW5wdXRfcGF0aCxcXG4rXFx0XFx0XFx0XFx0ICBzaXplX3QgcGF0aF9zeilcXG4re1xcbitcXHRnbG9iX3QgZ2wgPSB7fTtcXG4rXFx0Ym9vbCBmb3VuZCA9IGZhbHNlO1xcbitcXG4rXFx0LyogSWdub3JlIGZhaWx1cmUsIHdlIGNoZWNrIGZvciB0aGUgcmVzdWx0aW5nIGRldmljZXMgYmVsb3cuICovXFxuK1xcdFNZU19OT0ZBSUwoXFxcIm1vZHByb2JlIHJjLWxvb3BiYWNrIFxcdTAwM2UgL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjFcXFwiKTtcXG4rXFxuK1xcdGlmIChnbG9iKFxcXCIvc3lzL2NsYXNzL3JjL3JjKlxcXCIsIDAsIE5VTEwsIFxcdTAwMjZnbCkpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXFx1MDAzYyBnbC5nbF9wYXRoYzsgaSsrKSB7XFxuK1xcdFxcdGNvbnN0IGNoYXIgKnJjZGlyID0gZ2wuZ2xfcGF0aHZbaV07XFxuK1xcdFxcdGNoYXIgdWV2ZW50X3BhdGhbUEFUSF9NQVhdO1xcbitcXHRcXHRjaGFyIHVldmVudFs0MDk2XTtcXG4rXFx0XFx0Y2hhciBwYXR0ZXJuW1BBVEhfTUFYXTtcXG4rXFx0XFx0RklMRSAqZjtcXG4rXFx0XFx0c2l6ZV90IG47XFxuK1xcbitcXHRcXHRzbnByaW50Zih1ZXZlbnRfcGF0aCwgc2l6ZW9mKHVldmVudF9wYXRoKSwgXFxcIiVzL3VldmVudFxcXCIsIHJjZGlyKTtcXG4rXFx0XFx0ZiA9IGZvcGVuKHVldmVudF9wYXRoLCBcXFwiclxcXCIpO1xcbitcXHRcXHRpZiAoIWYpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRuID0gZnJlYWQodWV2ZW50LCAxLCBzaXplb2YodWV2ZW50KSAtIDEsIGYpO1xcbitcXHRcXHRmY2xvc2UoZik7XFxuK1xcdFxcdHVldmVudFtuXSA9ICdcXFxcMCc7XFxuK1xcbitcXHRcXHRpZiAoIXN0cnN0cih1ZXZlbnQsIFxcXCJEUlZfTkFNRT1yYy1sb29wYmFja1xcXCIpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHNucHJpbnRmKHBhdHRlcm4sIHNpemVvZihwYXR0ZXJuKSwgXFxcIiVzL2xpcmMqL3VldmVudFxcXCIsIHJjZGlyKTtcXG4rXFx0XFx0aWYgKCFmaW5kX2Rldm5hbWUocGF0dGVybiwgbGlyY19wYXRoLCBwYXRoX3N6KSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRzbnByaW50ZihwYXR0ZXJuLCBzaXplb2YocGF0dGVybiksIFxcXCIlcy9pbnB1dCovZXZlbnQqL3VldmVudFxcXCIsIHJjZGlyKTtcXG4rXFx0XFx0aWYgKCFmaW5kX2Rldm5hbWUocGF0dGVybiwgaW5wdXRfcGF0aCwgcGF0aF9zeikpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0Zm91bmQgPSB0cnVlO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rb3V0OlxcbitcXHRpZiAoIWZvdW5kKSB7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiTm8gcmMgZGV2aWNlcyBmb3VuZFxcXFxuXFxcIik7XFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiRW5hYmxlIENPTkZJR19SQ19MT09QQkFDSywgQ09ORklHX1JDX0xPT1BCQUNLLCBhbmQgQ09ORklHX0xJUkNcXFxcblxcXCIpO1xcbis/XFx0fVxcbitcXG4rXFx0Z2xvYmZyZWUoXFx1MDAyNmdsKTtcXG4rXFx0cmV0dXJuIGZvdW5kO1xcbit9XFxuK1xcbit2b2lkIHRlc3RfbGlyY19tb2RlMih2b2lkKVxcbit7XFxuK1xcdGNoYXIgbGlyY19wYXRoW1BBVEhfTUFYXSwgaW5wdXRfcGF0aFtQQVRIX01BWF07XFxuK1xcdGludCBsaXJjZmQgPSAtMSwgaW5wdXRmZCA9IC0xLCBwcm9nZmQsIHByb2dmZDIgPSAtMTtcXG4rXFx0c3RydWN0IGxpcmNfbW9kZTIgKnNrZWwgPSBOVUxMLCAqc2tlbDIgPSBOVUxMO1xcbitcXHRfX3UzMiBwcm9nX2lkc1sxMF0sIHByb2dfZmxhZ3NbMTBdLCBwcm9nX2NudDtcXG4rXFx0c3RydWN0IGJwZl9wcm9nX2luZm8gaW5mbztcXG4rXFx0X191MzIgaW5mb19sZW4sIHByb2dfaWQsIHByb2dfaWQyO1xcbitcXHRpbnQgdGVzdGlyMSA9IDB4OGVhZDtcXHQvKiBrZXlkb3duIGZsYWcgKDB4ODAwMCkgfCBzY2FuY29kZSAweGVhZCAqL1xcbitcXHRpbnQgdGVzdGlyMiA9IDB4NDA4MTtcXHQvKiBwb2ludGVyX3JlbCBmbGFnICgweDQwMDApIHwgcmVsX3g9MSB8IHJlbF95PTEgKi9cXG4rXFx0c3RydWN0IGlucHV0X2V2ZW50IGV2ZW50O1xcbitcXHRzdHJ1Y3QgcG9sbGZkIHBmZCA9IHt9O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKGdldHVpZCgpICE9IDApIHtcXG4rXFx0XFx0dGVzdF9fc2tpcCgpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghZmluZF9sb29wYmFja19kZXZpY2VzKGxpcmNfcGF0aCwgaW5wdXRfcGF0aCwgc2l6ZW9mKGxpcmNfcGF0aCkpKSB7XFxuK1xcdFxcdHRlc3RfX3NraXAoKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRza2VsID0gbGlyY19tb2RlMl9fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcImxpcmNfbW9kZTJfX29wZW5fYW5kX2xvYWRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cHJvZ2ZkID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXFx1MDAzZXByb2dzLmJwZl9kZWNvZGVyKTtcXG4rXFxuK1xcdG1lbXNldChcXHUwMDI2aW5mbywgMCwgc2l6ZW9mKGluZm8pKTtcXG4rXFx0aW5mb19sZW4gPSBzaXplb2YoaW5mbyk7XFxuK1xcdHJldCA9IGJwZl9wcm9nX2dldF9pbmZvX2J5X2ZkKHByb2dmZCwgXFx1MDAyNmluZm8sIFxcdTAwMjZpbmZvX2xlbik7XFxuK1xcdGlmICghQVNTRVJUX09LKHJldCwgXFxcImdldCBmaXJzdCBwcm9ncmFtJ3MgaW5mb1xcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0cHJvZ19pZCA9IGluZm8uaWQ7XFxuK1xcbitcXHRsaXJjZmQgPSBvcGVuKGxpcmNfcGF0aCwgT19SRFdSIHwgT19OT05CTE9DSyk7XFxuK1xcdGlmICghQVNTRVJUX0dFKGxpcmNmZCwgMCwgXFxcIm9wZW4gbGlyYyBkZXZpY2VcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHQvKiBUcnkgdG8gZGV0YWNoIGl0IGJlZm9yZSBpdCB3YXMgZXZlciBhdHRhY2hlZCwgc2hvdWxkIGZhaWwuICovXFxuK1xcdHJldCA9IGJwZl9wcm9nX2RldGFjaDIocHJvZ2ZkLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyKTtcXG4rXFx0aWYgKCFBU1NFUlRfRVEocmV0LCAtRU5PRU5ULCBcXFwiZGV0YWNoIHVuYXR0YWNoZWQgcHJvZ3JhbVxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGlucHV0ZmQgPSBvcGVuKGlucHV0X3BhdGgsIE9fUkRPTkxZIHwgT19OT05CTE9DSyk7XFxuK1xcdGlmICghQVNTRVJUX0dFKGlucHV0ZmQsIDAsIFxcXCJvcGVuIGlucHV0IGRldmljZVxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdHByb2dfY250ID0gQVJSQVlfU0laRShwcm9nX2lkcyk7XFxuK1xcdHJldCA9IGJwZl9wcm9nX3F1ZXJ5KGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDAsIHByb2dfZmxhZ3MsIHByb2dfaWRzLFxcbitcXHRcXHRcXHQgICAgIFxcdTAwMjZwcm9nX2NudCk7XFxuK1xcdGlmICghQVNTRVJUX09LKHJldCwgXFxcInF1ZXJ5IHByb2dyYW1zIGJlZm9yZSBhdHRhY2hcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdGlmICghQVNTRVJUX0VRKHByb2dfY250LCAwLCBcXFwibm8gcHJvZ3JhbXMgc2hvdWxkIGJlIGF0dGFjaGVkIHlldFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdC8qIEludmFsaWQgYXR0YWNoIGZsYWdzIG11c3QgYmUgcmVqZWN0ZWQsIGFuZCBtdXN0IG5vdCBhdHRhY2guICovXFxuK1xcdHJldCA9IGJwZl9wcm9nX2F0dGFjaChwcm9nZmQsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDEpO1xcbitcXHRpZiAoIUFTU0VSVF9FUShyZXQsIC1FSU5WQUwsIFxcXCJhdHRhY2ggd2l0aCBpbnZhbGlkIGZsYWdzXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0cHJvZ19jbnQgPSBBUlJBWV9TSVpFKHByb2dfaWRzKTtcXG4rXFx0cmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCwgcHJvZ19mbGFncywgcHJvZ19pZHMsXFxuK1xcdFxcdFxcdCAgICAgXFx1MDAyNnByb2dfY250KTtcXG4rXFx0aWYgKCFBU1NFUlRfT0socmV0LCBcXFwicXVlcnkgcHJvZ3JhbXMgYWZ0ZXIgcmVqZWN0ZWQgYXR0YWNoXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAoIUFTU0VSVF9FUShwcm9nX2NudCwgMCwgXFxcInJlamVjdGVkIGF0dGFjaCBzaG91bGQgbm90IGF0dGFjaFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdHJldCA9IGJwZl9wcm9nX2F0dGFjaChwcm9nZmQsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDApO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFxcXCJhdHRhY2ggcHJvZ3JhbSB0byBsaXJjIGRldmljZVxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdC8qIEludmFsaWQgcXVlcnkgZmxhZ3MgbXVzdCBiZSByZWplY3RlZCB0b28sIHdpdGhvdXQgdXBzZXR0aW5nIHN0YXRlLiAqL1xcbitcXHRwcm9nX2NudCA9IEFSUkFZX1NJWkUocHJvZ19pZHMpO1xcbitcXHRyZXQgPSBicGZfcHJvZ19xdWVyeShsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAxLCBwcm9nX2ZsYWdzLCBwcm9nX2lkcyxcXG4rXFx0XFx0XFx0ICAgICBcXHUwMDI2cHJvZ19jbnQpO1xcbitcXHRBU1NFUlRfRVEocmV0LCAtRUlOVkFMLCBcXFwicXVlcnkgd2l0aCBpbnZhbGlkIGZsYWdzXFxcIik7XFxuK1xcbitcXHRwcm9nX2NudCA9IEFSUkFZX1NJWkUocHJvZ19pZHMpO1xcbitcXHRyZXQgPSBicGZfcHJvZ19xdWVyeShsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwLCBwcm9nX2ZsYWdzLCBwcm9nX2lkcyxcXG4rXFx0XFx0XFx0ICAgICBcXHUwMDI2cHJvZ19jbnQpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFxcXCJxdWVyeSBwcm9ncmFtcyBhZnRlciBhdHRhY2hcXFwiKSlcXG4rXFx0XFx0Z290byBvdXRfZGV0YWNoO1xcbitcXHRpZiAoIUFTU0VSVF9FUShwcm9nX2NudCwgMSwgXFxcIm9uZSBwcm9ncmFtIHNob3VsZCBiZSBhdHRhY2hlZFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dF9kZXRhY2g7XFxuK1xcdEFTU0VSVF9FUShwcm9nX2lkc1swXSwgcHJvZ19pZCwgXFxcInF1ZXJpZWQgaWQgc2hvdWxkIG1hdGNoIGF0dGFjaGVkIHByb2dyYW1cXFwiKTtcXG4rXFxuK1xcdC8qIFdyaXRlIHJhdyBJUiAqL1xcbitcXHRyZXQgPSB3cml0ZShsaXJjZmQsIFxcdTAwMjZ0ZXN0aXIxLCBzaXplb2YodGVzdGlyMSkpO1xcbitcXHRpZiAoIUFTU0VSVF9FUShyZXQsIHNpemVvZih0ZXN0aXIxKSwgXFxcInNlbmQgdGVzdCBJUiBtZXNzYWdlIDFcXFwiKSlcXG4rXFx0XFx0Z290byBvdXRfZGV0YWNoO1xcbitcXG4rXFx0cGZkLmZkID0gaW5wdXRmZDtcXG4rXFx0cGZkLmV2ZW50cyA9IFBPTExJTjtcXG4rXFxuK1xcdGZvciAoOzspIHtcXG4rXFx0XFx0cG9sbChcXHUwMDI2cGZkLCAxLCAxMDApO1xcbitcXG4rXFx0XFx0LyogUmVhZCBkZWNvZGVkIElSICovXFxuK1xcdFxcdHJldCA9IHJlYWQoaW5wdXRmZCwgXFx1MDAyNmV2ZW50LCBzaXplb2YoZXZlbnQpKTtcXG4rXFx0XFx0aWYgKCFBU1NFUlRfRVEocmV0LCBzaXplb2YoZXZlbnQpLCBcXFwicmVhZCBkZWNvZGVkIElSIDFcXFwiKSlcXG4rXFx0XFx0XFx0Z290byBvdXRfZGV0YWNoO1xcbitcXG4rXFx0XFx0aWYgKGV2ZW50LnR5cGUgPT0gRVZfTVNDIFxcdTAwMjZcXHUwMDI2IGV2ZW50LmNvZGUgPT0gTVNDX1NDQU4gXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIGV2ZW50LnZhbHVlID09IDB4ZWFkKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0LyogV3JpdGUgcmF3IElSICovXFxuK1xcdHJldCA9IHdyaXRlKGxpcmNmZCwgXFx1MDAyNnRlc3RpcjIsIHNpemVvZih0ZXN0aXIyKSk7XFxuK1xcdGlmICghQVNTRVJUX0VRKHJldCwgc2l6ZW9mKHRlc3RpcjIpLCBcXFwic2VuZCB0ZXN0IElSIG1lc3NhZ2UgMlxcXCIpKVxcbitcXHRcXHRnb3RvIG91dF9kZXRhY2g7XFxuK1xcbitcXHRmb3IgKDs7KSB7XFxuK1xcdFxcdHBvbGwoXFx1MDAyNnBmZCwgMSwgMTAwKTtcXG4rXFxuK1xcdFxcdC8qIFJlYWQgZGVjb2RlZCBJUiAqL1xcbitcXHRcXHRyZXQgPSByZWFkKGlucHV0ZmQsIFxcdTAwMjZldmVudCwgc2l6ZW9mKGV2ZW50KSk7XFxuK1xcdFxcdGlmICghQVNTRVJUX0VRKHJldCwgc2l6ZW9mKGV2ZW50KSwgXFxcInJlYWQgZGVjb2RlZCBJUiAyXFxcIikpXFxuK1xcdFxcdFxcdGdvdG8gb3V0X2RldGFjaDtcXG4rXFxuK1xcdFxcdGlmIChldmVudC50eXBlID09IEVWX1JFTCBcXHUwMDI2XFx1MDAyNiBldmVudC5jb2RlID09IFJFTF9ZIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBldmVudC52YWx1ZSA9PSAxKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0cHJvZ19jbnQgPSBBUlJBWV9TSVpFKHByb2dfaWRzKTtcXG4rXFx0cmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCwgcHJvZ19mbGFncywgcHJvZ19pZHMsXFxuK1xcdFxcdFxcdCAgICAgXFx1MDAyNnByb2dfY250KTtcXG4rXFx0aWYgKCFBU1NFUlRfT0socmV0LCBcXFwicXVlcnkgcHJvZ3JhbXMgYWZ0ZXIgSVIgd2FzIGRlY29kZWRcXFwiKSlcXG4rXFx0XFx0Z290byBvdXRfZGV0YWNoO1xcbitcXHRpZiAoIUFTU0VSVF9FUShwcm9nX2NudCwgMSwgXFxcIm9uZSBwcm9ncmFtIHNob3VsZCBzdGlsbCBiZSBhdHRhY2hlZFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dF9kZXRhY2g7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgbGlyYyBjaGFyZGV2IGNhbiBob2xkIG1vcmUgdGhhbiBvbmUgYXR0YWNoZWQgcHJvZ3JhbSBhdCBvbmNlLlxcbitcXHQgKiBMb2FkIGEgc2Vjb25kLCBpbmRlcGVuZGVudCBpbnN0YW5jZSBhbmQgY2hlY2sgaXQgY2FuIGJlIGF0dGFjaGVkXFxuK1xcdCAqIGFsb25nc2lkZSB0aGUgZmlyc3QsIHF1ZXJpZWQsIGFuZCB0aGVuIGRldGFjaGVkIG9uIGl0cyBvd25cXG4rXFx0ICogd2l0aG91dCBkaXN0dXJiaW5nIHRoZSBmaXJzdCBwcm9ncmFtJ3MgYXR0YWNobWVudC5cXG4rXFx0ICovXFxuK1xcdHNrZWwyID0gbGlyY19tb2RlMl9fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbDIsIFxcXCJsaXJjX21vZGUyX19vcGVuX2FuZF9sb2FkICgybmQpXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0X2RldGFjaDtcXG4rXFxuK1xcdHByb2dmZDIgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbDItXFx1MDAzZXByb2dzLmJwZl9kZWNvZGVyKTtcXG4rXFxuK1xcdG1lbXNldChcXHUwMDI2aW5mbywgMCwgc2l6ZW9mKGluZm8pKTtcXG4rXFx0aW5mb19sZW4gPSBzaXplb2YoaW5mbyk7XFxuK1xcdHJldCA9IGJwZl9wcm9nX2dldF9pbmZvX2J5X2ZkKHByb2dmZDIsIFxcdTAwMjZpbmZvLCBcXHUwMDI2aW5mb19sZW4pO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFxcXCJnZXQgc2Vjb25kIHByb2dyYW0ncyBpbmZvXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0X2RldGFjaDtcXG4rXFx0cHJvZ19pZDIgPSBpbmZvLmlkO1xcbitcXG4rXFx0cmV0ID0gYnBmX3Byb2dfYXR0YWNoKHByb2dmZDIsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDApO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFxcXCJhdHRhY2ggc2Vjb25kIHByb2dyYW0gdG8gbGlyYyBkZXZpY2VcXFwiKSlcXG4rXFx0XFx0Z290byBvdXRfZGV0YWNoO1xcbitcXG4rXFx0cHJvZ19jbnQgPSBBUlJBWV9TSVpFKHByb2dfaWRzKTtcXG4rXFx0cmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCwgcHJvZ19mbGFncywgcHJvZ19pZHMsXFxuK1xcdFxcdFxcdCAgICAgXFx1MDAyNnByb2dfY250KTtcXG4rXFx0aWYgKCFBU1NFUlRfT0socmV0LCBcXFwicXVlcnkgcHJvZ3JhbXMgYWZ0ZXIgc2Vjb25kIGF0dGFjaFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dF9kZXRhY2gyO1xcbitcXHRpZiAoIUFTU0VSVF9FUShwcm9nX2NudCwgMiwgXFxcInR3byBwcm9ncmFtcyBzaG91bGQgYmUgYXR0YWNoZWRcXFwiKSlcXG4rXFx0XFx0Z290byBvdXRfZGV0YWNoMjtcXG4rXFx0QVNTRVJUX1RSVUUoKHByb2dfaWRzWzBdID09IHByb2dfaWQgXFx1MDAyNlxcdTAwMjYgcHJvZ19pZHNbMV0gPT0gcHJvZ19pZDIpIHx8XFxuK1xcdFxcdCAgICAocHJvZ19pZHNbMF0gPT0gcHJvZ19pZDIgXFx1MDAyNlxcdTAwMjYgcHJvZ19pZHNbMV0gPT0gcHJvZ19pZCksXFxuK1xcdFxcdCAgICBcXFwicXVlcmllZCBpZHMgc2hvdWxkIGJlIHRoZSB0d28gYXR0YWNoZWQgcHJvZ3JhbXNcXFwiKTtcXG4rXFxuK1xcdC8qIERldGFjaCB0aGUgc2Vjb25kIHByb2dyYW07IHRoZSBmaXJzdCBzaG91bGQgcmVtYWluIGF0dGFjaGVkLiAqL1xcbitcXHRyZXQgPSBicGZfcHJvZ19kZXRhY2gyKHByb2dmZDIsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFxcXCJkZXRhY2ggc2Vjb25kIHByb2dyYW1cXFwiKSlcXG4rXFx0XFx0Z290byBvdXRfZGV0YWNoMjtcXG4rXFxuK1xcdC8qIERldGFjaGluZyBhbiBhbHJlYWR5LWRldGFjaGVkIHByb2dyYW0gc2hvdWxkIG5vdyBmYWlsLiAqL1xcbitcXHRyZXQgPSBicGZfcHJvZ19kZXRhY2gyKHByb2dmZDIsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIpO1xcbitcXHRBU1NFUlRfRVEocmV0LCAtRU5PRU5ULCBcXFwiZGV0YWNoIHNlY29uZCBwcm9ncmFtIGFnYWluXFxcIik7XFxuK1xcbitcXHRwcm9nX2NudCA9IEFSUkFZX1NJWkUocHJvZ19pZHMpO1xcbitcXHRyZXQgPSBicGZfcHJvZ19xdWVyeShsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwLCBwcm9nX2ZsYWdzLCBwcm9nX2lkcyxcXG4rXFx0XFx0XFx0ICAgICBcXHUwMDI2cHJvZ19jbnQpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFxcXCJxdWVyeSBwcm9ncmFtcyBhZnRlciBzZWNvbmQgZGV0YWNoXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0X2RldGFjaDtcXG4rXFx0aWYgKCFBU1NFUlRfRVEocHJvZ19jbnQsIDEsIFxcXCJvbmUgcHJvZ3JhbSBzaG91bGQgcmVtYWluIGF0dGFjaGVkXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0X2RldGFjaDtcXG4rXFx0QVNTRVJUX0VRKHByb2dfaWRzWzBdLCBwcm9nX2lkLCBcXFwicmVtYWluaW5nIHByb2dyYW0gc2hvdWxkIGJlIHRoZSBmaXJzdCBvbmVcXFwiKTtcXG4rXFxuK291dF9kZXRhY2g6XFxuK1xcdC8qIExldCdzIHRyeSBkZXRhY2hpbmcgaXQgbm93IGl0IGlzIGFjdHVhbGx5IGF0dGFjaGVkLiAqL1xcbitcXHRyZXQgPSBicGZfcHJvZ19kZXRhY2gyKHByb2dmZCwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMik7XFxuK1xcdEFTU0VSVF9PSyhyZXQsIFxcXCJkZXRhY2ggcHJvZ3JhbSBmcm9tIGxpcmMgZGV2aWNlXFxcIik7XFxuK1xcbitcXHQvKiBEZXRhY2hpbmcgaXQgYWdhaW4gc2hvdWxkIG5vdyBmYWlsIHRoZSBzYW1lIHdheS4gKi9cXG4rXFx0cmV0ID0gYnBmX3Byb2dfZGV0YWNoMihwcm9nZmQsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIpO1xcbitcXHRBU1NFUlRfRVEocmV0LCAtRU5PRU5ULCBcXFwiZGV0YWNoIHByb2dyYW0gZnJvbSBsaXJjIGRldmljZSBhZ2FpblxcXCIpO1xcbitcXHRnb3RvIG91dDtcXG4rXFxuK291dF9kZXRhY2gyOlxcbitcXHQvKiBCZXN0LWVmZm9ydCBjbGVhbnVwIG9mIHRoZSBzZWNvbmQgcHJvZ3JhbSBiZWZvcmUgYmFpbGluZyBvdXQuICovXFxuK1xcdGJwZl9wcm9nX2RldGFjaDIocHJvZ2ZkMiwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMik7XFxuK1xcdGdvdG8gb3V0X2RldGFjaDtcXG4rXFxuK291dDpcXG4rXFx0aWYgKGlucHV0ZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2UoaW5wdXRmZCk7XFxuK1xcdGlmIChsaXJjZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2UobGlyY2ZkKTtcXG4rXFx0bGlyY19tb2RlMl9fZGVzdHJveShza2VsMik7XFxuK1xcdGxpcmNfbW9kZTJfX2Rlc3Ryb3koc2tlbCk7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xpcmNfbW9kZTIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9saXJjX21vZGUyLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjk4MTM3ZjNjNWMwM2RcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xpcmNfbW9kZTIuY1xcbkBAIC0wLDAgKzEsMzIgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLy8gdGVzdCBpciBkZWNvZGVyXFxuKy8vXFxuKy8vIENvcHlyaWdodCAoQykgMjAxOCBTZWFuIFlvdW5nIFxcdTAwM2NzZWFuQG1lc3Mub3JnXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbGlyYy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuK1xcbitTRUMoXFxcImxpcmNfbW9kZTJcXFwiKVxcbitpbnQgYnBmX2RlY29kZXIodW5zaWduZWQgaW50ICpzYW1wbGUpXFxuK3tcXG4rXFx0aWYgKExJUkNfSVNfUFVMU0UoKnNhbXBsZSkpIHtcXG4rXFx0XFx0dW5zaWduZWQgaW50IGR1cmF0aW9uID0gTElSQ19WQUxVRSgqc2FtcGxlKTtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEZsYWcgYml0cyBwaWNrZWQgZGVsaWJlcmF0ZWx5IGxvdzogcmMtbG9vcGJhY2sgc2ltdWxhdGVzXFxuK1xcdFxcdCAqIGEgcmVjZWl2ZXIgb3ZlcmZsb3cgZm9yIGFueSBwdWxzZSBvdmVyIE1TX1RPX1VTKDUwKSAoc2VlXFxuK1xcdFxcdCAqIGxvb3BfdHhfaXIoKSBpbiByYy1sb29wYmFjay5jKSwgd2hpY2ggd291bGQgc2lsZW50bHlcXG4rXFx0XFx0ICogc3dhbGxvdyB0aGUgc2FtcGxlIGJlZm9yZSBpdCBldmVyIHJlYWNoZXMgdGhpcyBkZWNvZGVyLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKGR1cmF0aW9uIFxcdTAwMjYgMHg4MDAwKVxcbitcXHRcXHRcXHRicGZfcmNfa2V5ZG93bihzYW1wbGUsIDB4NDAsIGR1cmF0aW9uIFxcdTAwMjYgMHgzZmZmLCAwKTtcXG4rXFx0XFx0aWYgKGR1cmF0aW9uIFxcdTAwMjYgMHg0MDAwKVxcbitcXHRcXHRcXHRicGZfcmNfcG9pbnRlcl9yZWwoc2FtcGxlLCAoZHVyYXRpb24gXFx1MDAzZVxcdTAwM2UgNykgXFx1MDAyNiAweDdmLFxcbitcXHRcXHRcXHRcXHRcXHQgICBkdXJhdGlvbiBcXHUwMDI2IDB4N2YpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2xpcmNfbW9kZTJfa2Vybi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfbGlyY19tb2RlMl9rZXJuLmNcXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCBjYmU0Mjg0YzAzMmZlLi4wMDAwMDAwMDAwMDAwXFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfbGlyY19tb2RlMl9rZXJuLmNcXG4rKysgL2Rldi9udWxsXFxuQEAgLTEsMjYgKzAsMCBAQFxcbi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbi0vLyB0ZXN0IGlyIGRlY29kZXJcXG4tLy9cXG4tLy8gQ29weXJpZ2h0IChDKSAyMDE4IFNlYW4gWW91bmcgXFx1MDAzY3NlYW5AbWVzcy5vcmdcXHUwMDNlXFxuLVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9saXJjLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4tXFxuLVNFQyhcXFwibGlyY19tb2RlMlxcXCIpXFxuLWludCBicGZfZGVjb2Rlcih1bnNpZ25lZCBpbnQgKnNhbXBsZSlcXG4te1xcbi1cXHRpZiAoTElSQ19JU19QVUxTRSgqc2FtcGxlKSkge1xcbi1cXHRcXHR1bnNpZ25lZCBpbnQgZHVyYXRpb24gPSBMSVJDX1ZBTFVFKCpzYW1wbGUpO1xcbi1cXG4tXFx0XFx0aWYgKGR1cmF0aW9uIFxcdTAwMjYgMHgxMDAwKVxcbi1cXHRcXHRcXHRicGZfcmNfa2V5ZG93bihzYW1wbGUsIDB4NDAsIGR1cmF0aW9uIFxcdTAwMjYgMHhmZmZmLCAwKTtcXG4tXFx0XFx0aWYgKGR1cmF0aW9uIFxcdTAwMjYgMHgyMDAwKVxcbi1cXHRcXHRcXHRicGZfcmNfcG9pbnRlcl9yZWwoc2FtcGxlLCAoZHVyYXRpb24gXFx1MDAzZVxcdTAwM2UgOCkgXFx1MDAyNiAweGZmLFxcbi1cXHRcXHRcXHRcXHRcXHQgICBkdXJhdGlvbiBcXHUwMDI2IDB4ZmYpO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4tY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xpcmNfbW9kZTIuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9saXJjX21vZGUyLnNoXFxuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1XFxuaW5kZXggNTI1MmI5MWY0OGExOC4uMDAwMDAwMDAwMDAwMFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xpcmNfbW9kZTIuc2hcXG4rKysgL2Rldi9udWxsXFxuQEAgLTEsNDEgKzAsMCBAQFxcbi0jIS9iaW4vYmFzaFxcbi0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuLVxcbi0jIEtzZWxmdGVzdCBmcmFtZXdvcmsgcmVxdWlyZW1lbnQgLSBTS0lQIGNvZGUgaXMgNC5cXG4ta3NmdF9za2lwPTRcXG4tcmV0PSRrc2Z0X3NraXBcXG4tXFxuLW1zZz1cXFwic2tpcCBhbGwgdGVzdHM6XFxcIlxcbi1pZiBbICRVSUQgIT0gMCBdOyB0aGVuXFxuLVxcdGVjaG8gJG1zZyBwbGVhc2UgcnVuIHRoaXMgYXMgcm9vdCBcXHUwMDNlXFx1MDAyNjJcXG4tXFx0ZXhpdCAka3NmdF9za2lwXFxuLWZpXFxuLVxcbi1HUkVFTj0nXFxcXDAzM1swOzkybSdcXG4tUkVEPSdcXFxcMDMzWzA7MzFtJ1xcbi1OQz0nXFxcXDAzM1swbScgIyBObyBDb2xvclxcbi1cXG4tbW9kcHJvYmUgcmMtbG9vcGJhY2tcXG4tXFxuLWZvciBpIGluIC9zeXMvY2xhc3MvcmMvcmMqXFxuLWRvXFxuLVxcdGlmIGdyZXAgLXEgRFJWX05BTUU9cmMtbG9vcGJhY2sgJGkvdWV2ZW50XFxuLVxcdHRoZW5cXG4tXFx0XFx0TElSQ0RFVj0kKGdyZXAgREVWTkFNRT0gJGkvbGlyYyovdWV2ZW50IHwgc2VkIHNRREVWTkFNRT1RL2Rldi9RKVxcbi1cXHRcXHRJTlBVVERFVj0kKGdyZXAgREVWTkFNRT0gJGkvaW5wdXQqL2V2ZW50Ki91ZXZlbnQgfCBzZWQgc1FERVZOQU1FPVEvZGV2L1EpXFxuLVxcdGZpXFxuLWRvbmVcXG4tXFxuLWlmIFsgLW4gXFxcIiRMSVJDREVWXFxcIiBdO1xcbi10aGVuXFxuLVxcdFRZUEU9bGlyY19tb2RlMlxcbi1cXHQuL3Rlc3RfbGlyY19tb2RlMl91c2VyICRMSVJDREVWICRJTlBVVERFVlxcbi1cXHRyZXQ9JD9cXG4tXFx0aWYgWyAkcmV0IC1uZSAwIF07IHRoZW5cXG4tXFx0XFx0ZWNobyAtZSAke1JFRH1cXFwiRkFJTDogJFRZUEVcXFwiJHtOQ31cXG4tXFx0ZWxzZVxcbi1cXHRcXHRlY2hvIC1lICR7R1JFRU59XFxcIlBBU1M6ICRUWVBFXFxcIiR7TkN9XFxuLVxcdGZpXFxuLWZpXFxuLVxcbi1leGl0ICRyZXRcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbGlyY19tb2RlMl91c2VyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9saXJjX21vZGUyX3VzZXIuY1xcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IGNkMTkxZGEyMGQxNDMuLjAwMDAwMDAwMDAwMDBcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9saXJjX21vZGUyX3VzZXIuY1xcbisrKyAvZGV2L251bGxcXG5AQCAtMSwxNzcgKzAsMCBAQFxcbi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbi0vLyB0ZXN0IGlyIGRlY29kZXJcXG4tLy9cXG4tLy8gQ29weXJpZ2h0IChDKSAyMDE4IFNlYW4gWW91bmcgXFx1MDAzY3NlYW5AbWVzcy5vcmdcXHUwMDNlXFxuLVxcbi0vLyBBIGxpcmMgY2hhcmRldiBpcyBhIGRldmljZSByZXByZXNlbnRpbmcgYSBjb25zdW1lciBJUiAoY2lyKSBkZXZpY2Ugd2hpY2hcXG4tLy8gY2FuIHJlY2VpdmUgaW5mcmFyZWQgc2lnbmFscyBmcm9tIHJlbW90ZSBjb250cm9sIGFuZC9vciB0cmFuc21pdCBJUi5cXG4tLy9cXG4tLy8gSVIgaXMgc2VudCBhcyBhIHNlcmllcyBvZiBwdWxzZXMgYW5kIHNwYWNlIHNvbWV3aGF0IGxpa2UgbW9yc2UgY29kZS4gVGhlXFxuLS8vIEJQRiBwcm9ncmFtIGNhbiBkZWNvZGUgdGhpcyBpbnRvIHNjYW5jb2RlcyBzbyB0aGF0IHJjLWNvcmUgY2FuIHRyYW5zbGF0ZVxcbi0vLyB0aGlzIGludG8gaW5wdXQga2V5IGNvZGVzIHVzaW5nIHRoZSByYyBrZXltYXAuXFxuLS8vXFxuLS8vIFRoaXMgdGVzdCB3b3JrcyBieSBzZW5kaW5nIElSIG92ZXIgcmMtbG9vcGJhY2ssIHNvIHRoZSBJUiBpcyBwcm9jZXNzZWQgYnlcXG4tLy8gQlBGIGFuZCB0aGVuIGRlY29kZWQgaW50byBzY2FuY29kZXMuIFRoZSBsaXJjIGNoYXJkZXYgbXVzdCBiZSB0aGUgb25lXFxuLS8vIGFzc29jaWF0ZWQgd2l0aCByYy1sb29wYmFjaywgc2VlIHRoZSBvdXRwdXQgb2YgaXIta2V5dGFibGUoMSkuXFxuLS8vXFxuLS8vIFRoZSBmb2xsb3dpbmcgQ09ORklHIG9wdGlvbnMgbXVzdCBiZSBlbmFibGVkIGZvciB0aGUgdGVzdCB0byBzdWNjZWVkOlxcbi0vLyBDT05GSUdfUkNfQ09SRT15XFxuLS8vIENPTkZJR19CUEZfUkFXSVJfRVZFTlQ9eVxcbi0vLyBDT05GSUdfUkNfTE9PUEJBQ0s9eVxcbi1cXG4tLy8gU3RlcHM6XFxuLS8vIDEuIE9wZW4gdGhlIC9kZXYvbGlyY04gZGV2aWNlIGZvciByYy1sb29wYmFjayAoZ2l2ZW4gb24gY29tbWFuZCBsaW5lKVxcbi0vLyAyLiBBdHRhY2ggYnBmX2xpcmNfbW9kZTIgcHJvZ3JhbSB3aGljaCBkZWNvZGVzIHNvbWUgSVIuXFxuLS8vIDMuIFNlbmQgc29tZSBJUiB0byB0aGUgc2FtZSBJUiBkZXZpY2U7IHNpbmNlIGl0IGlzIGxvb3BiYWNrLCB0aGlzIHdpbGxcXG4tLy8gICAgZW5kIHVwIGluIHRoZSBicGYgcHJvZ3JhbVxcbi0vLyA0LiBicGYgcHJvZ3JhbSBzaG91bGQgZGVjb2RlIElSIGFuZCByZXBvcnQga2V5Y29kZVxcbi0vLyA1LiBXZSBjYW4gcmVhZCBrZXljb2RlIGZyb20gc2FtZSAvZGV2L2xpcmMgZGV2aWNlXFxuLVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbnB1dC5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY3N0ZGlvLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NzdGRsaWIuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY3N0cmluZy5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2Nwb2xsLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NzeXMvdHlwZXMuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY3N5cy9pb2N0bC5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjc3lzL3N0YXQuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY2ZjbnRsLmhcXHUwMDNlXFxuLVxcbi0jaW5jbHVkZSBcXFwiYnBmX3V0aWwuaFxcXCJcXG4tI2luY2x1ZGUgXFx1MDAzY2JwZi9icGYuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY2JwZi9saWJicGYuaFxcdTAwM2VcXG4tXFxuLSNpbmNsdWRlIFxcXCJ0ZXN0aW5nX2hlbHBlcnMuaFxcXCJcXG4tXFxuLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcXG4te1xcbi1cXHRzdHJ1Y3QgYnBmX29iamVjdCAqb2JqO1xcbi1cXHRpbnQgcmV0LCBsaXJjZmQsIHByb2dmZCwgaW5wdXRmZDtcXG4tXFx0aW50IHRlc3RpcjEgPSAweDFlYWQ7XFxuLVxcdGludCB0ZXN0aXIyID0gMHgyMTAxO1xcbi1cXHR1MzIgcHJvZ19pZHNbMTBdLCBwcm9nX2ZsYWdzWzEwXSwgcHJvZ19jbnQ7XFxuLVxcbi1cXHRpZiAoYXJnYyAhPSAzKSB7XFxuLVxcdFxcdHByaW50ZihcXFwiVXNhZ2U6ICVzIC9kZXYvbGlyY04gL2Rldi9pbnB1dC9ldmVudE1cXFxcblxcXCIsIGFyZ3ZbMF0pO1xcbi1cXHRcXHRyZXR1cm4gMjtcXG4tXFx0fVxcbi1cXG4tXFx0cmV0ID0gYnBmX3Byb2dfdGVzdF9sb2FkKFxcXCJ0ZXN0X2xpcmNfbW9kZTJfa2Vybi5icGYub1xcXCIsXFxuLVxcdFxcdFxcdFxcdCBCUEZfUFJPR19UWVBFX0xJUkNfTU9ERTIsIFxcdTAwMjZvYmosIFxcdTAwMjZwcm9nZmQpO1xcbi1cXHRpZiAocmV0KSB7XFxuLVxcdFxcdHByaW50ZihcXFwiRmFpbGVkIHRvIGxvYWQgYnBmIHByb2dyYW1cXFxcblxcXCIpO1xcbi1cXHRcXHRyZXR1cm4gMTtcXG4tXFx0fVxcbi1cXG4tXFx0bGlyY2ZkID0gb3Blbihhcmd2WzFdLCBPX1JEV1IgfCBPX05PTkJMT0NLKTtcXG4tXFx0aWYgKGxpcmNmZCA9PSAtMSkge1xcbi1cXHRcXHRwcmludGYoXFxcImZhaWxlZCB0byBvcGVuIGxpcmMgZGV2aWNlICVzOiAlbVxcXFxuXFxcIiwgYXJndlsxXSk7XFxuLVxcdFxcdHJldHVybiAxO1xcbi1cXHR9XFxuLVxcbi1cXHQvKiBMZXQncyB0cnkgZGV0YWNoIGl0IGJlZm9yZSBpdCB3YXMgZXZlciBhdHRhY2hlZCAqL1xcbi1cXHRyZXQgPSBicGZfcHJvZ19kZXRhY2gyKHByb2dmZCwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMik7XFxuLVxcdGlmIChyZXQgIT0gLUVOT0VOVCkge1xcbi1cXHRcXHRwcmludGYoXFxcImJwZl9wcm9nX2RldGFjaDIgbm90IGF0dGFjaGVkIHNob3VsZCBmYWlsOiAlbVxcXFxuXFxcIik7XFxuLVxcdFxcdHJldHVybiAxO1xcbi1cXHR9XFxuLVxcbi1cXHRpbnB1dGZkID0gb3Blbihhcmd2WzJdLCBPX1JET05MWSB8IE9fTk9OQkxPQ0spO1xcbi1cXHRpZiAoaW5wdXRmZCA9PSAtMSkge1xcbi1cXHRcXHRwcmludGYoXFxcImZhaWxlZCB0byBvcGVuIGlucHV0IGRldmljZSAlczogJW1cXFxcblxcXCIsIGFyZ3ZbMV0pO1xcbi1cXHRcXHRyZXR1cm4gMTtcXG4tXFx0fVxcbi1cXG4tXFx0cHJvZ19jbnQgPSAxMDtcXG4tXFx0cmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCwgcHJvZ19mbGFncywgcHJvZ19pZHMsXFxuLVxcdFxcdFxcdCAgICAgXFx1MDAyNnByb2dfY250KTtcXG4tXFx0aWYgKHJldCkge1xcbi1cXHRcXHRwcmludGYoXFxcIkZhaWxlZCB0byBxdWVyeSBicGYgcHJvZ3JhbXMgb24gbGlyYyBkZXZpY2U6ICVtXFxcXG5cXFwiKTtcXG4tXFx0XFx0cmV0dXJuIDE7XFxuLVxcdH1cXG4tXFxuLVxcdGlmIChwcm9nX2NudCAhPSAwKSB7XFxuLVxcdFxcdHByaW50ZihcXFwiRXhwZWN0ZWQgbm90aGluZyB0byBiZSBhdHRhY2hlZFxcXFxuXFxcIik7XFxuLVxcdFxcdHJldHVybiAxO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXQgPSBicGZfcHJvZ19hdHRhY2gocHJvZ2ZkLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwKTtcXG4tXFx0aWYgKHJldCkge1xcbi1cXHRcXHRwcmludGYoXFxcIkZhaWxlZCB0byBhdHRhY2ggYnBmIHRvIGxpcmMgZGV2aWNlOiAlbVxcXFxuXFxcIik7XFxuLVxcdFxcdHJldHVybiAxO1xcbi1cXHR9XFxuLVxcbi1cXHQvKiBXcml0ZSByYXcgSVIgKi9cXG4tXFx0cmV0ID0gd3JpdGUobGlyY2ZkLCBcXHUwMDI2dGVzdGlyMSwgc2l6ZW9mKHRlc3RpcjEpKTtcXG4tXFx0aWYgKHJldCAhPSBzaXplb2YodGVzdGlyMSkpIHtcXG4tXFx0XFx0cHJpbnRmKFxcXCJGYWlsZWQgdG8gc2VuZCB0ZXN0IElSIG1lc3NhZ2U6ICVtXFxcXG5cXFwiKTtcXG4tXFx0XFx0cmV0dXJuIDE7XFxuLVxcdH1cXG4tXFxuLVxcdHN0cnVjdCBwb2xsZmQgcGZkID0geyAuZmQgPSBpbnB1dGZkLCAuZXZlbnRzID0gUE9MTElOIH07XFxuLVxcdHN0cnVjdCBpbnB1dF9ldmVudCBldmVudDtcXG4tXFxuLVxcdGZvciAoOzspIHtcXG4tXFx0XFx0cG9sbChcXHUwMDI2cGZkLCAxLCAxMDApO1xcbi1cXG4tXFx0XFx0LyogUmVhZCBkZWNvZGVkIElSICovXFxuLVxcdFxcdHJldCA9IHJlYWQoaW5wdXRmZCwgXFx1MDAyNmV2ZW50LCBzaXplb2YoZXZlbnQpKTtcXG4tXFx0XFx0aWYgKHJldCAhPSBzaXplb2YoZXZlbnQpKSB7XFxuLVxcdFxcdFxcdHByaW50ZihcXFwiRmFpbGVkIHRvIHJlYWQgZGVjb2RlZCBJUjogJW1cXFxcblxcXCIpO1xcbi1cXHRcXHRcXHRyZXR1cm4gMTtcXG4tXFx0XFx0fVxcbi1cXG4tXFx0XFx0aWYgKGV2ZW50LnR5cGUgPT0gRVZfTVNDIFxcdTAwMjZcXHUwMDI2IGV2ZW50LmNvZGUgPT0gTVNDX1NDQU4gXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgIGV2ZW50LnZhbHVlID09IDB4MWVhZCkge1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbi1cXHR9XFxuLVxcbi1cXHQvKiBXcml0ZSByYXcgSVIgKi9cXG4tXFx0cmV0ID0gd3JpdGUobGlyY2ZkLCBcXHUwMDI2dGVzdGlyMiwgc2l6ZW9mKHRlc3RpcjIpKTtcXG4tXFx0aWYgKHJldCAhPSBzaXplb2YodGVzdGlyMikpIHtcXG4tXFx0XFx0cHJpbnRmKFxcXCJGYWlsZWQgdG8gc2VuZCB0ZXN0IElSIG1lc3NhZ2U6ICVtXFxcXG5cXFwiKTtcXG4tXFx0XFx0cmV0dXJuIDE7XFxuLVxcdH1cXG4tXFxuLVxcdGZvciAoOzspIHtcXG4tXFx0XFx0cG9sbChcXHUwMDI2cGZkLCAxLCAxMDApO1xcbi1cXG4tXFx0XFx0LyogUmVhZCBkZWNvZGVkIElSICovXFxuLVxcdFxcdHJldCA9IHJlYWQoaW5wdXRmZCwgXFx1MDAyNmV2ZW50LCBzaXplb2YoZXZlbnQpKTtcXG4tXFx0XFx0aWYgKHJldCAhPSBzaXplb2YoZXZlbnQpKSB7XFxuLVxcdFxcdFxcdHByaW50ZihcXFwiRmFpbGVkIHRvIHJlYWQgZGVjb2RlZCBJUjogJW1cXFxcblxcXCIpO1xcbi1cXHRcXHRcXHRyZXR1cm4gMTtcXG4tXFx0XFx0fVxcbi1cXG4tXFx0XFx0aWYgKGV2ZW50LnR5cGUgPT0gRVZfUkVMIFxcdTAwMjZcXHUwMDI2IGV2ZW50LmNvZGUgPT0gUkVMX1kgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgIGV2ZW50LnZhbHVlID09IDEgKSB7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4tXFxuLVxcdHByb2dfY250ID0gMTA7XFxuLVxcdHJldCA9IGJwZl9wcm9nX3F1ZXJ5KGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDAsIHByb2dfZmxhZ3MsIHByb2dfaWRzLFxcbi1cXHRcXHRcXHQgICAgIFxcdTAwMjZwcm9nX2NudCk7XFxuLVxcdGlmIChyZXQpIHtcXG4tXFx0XFx0cHJpbnRmKFxcXCJGYWlsZWQgdG8gcXVlcnkgYnBmIHByb2dyYW1zIG9uIGxpcmMgZGV2aWNlOiAlbVxcXFxuXFxcIik7XFxuLVxcdFxcdHJldHVybiAxO1xcbi1cXHR9XFxuLVxcbi1cXHRpZiAocHJvZ19jbnQgIT0gMSkge1xcbi1cXHRcXHRwcmludGYoXFxcIkV4cGVjdGVkIG9uZSBwcm9ncmFtIHRvIGJlIGF0dGFjaGVkXFxcXG5cXFwiKTtcXG4tXFx0XFx0cmV0dXJuIDE7XFxuLVxcdH1cXG4tXFxuLVxcdC8qIExldCdzIHRyeSBkZXRhY2hpbmcgaXQgbm93IGl0IGlzIGFjdHVhbGx5IGF0dGFjaGVkICovXFxuLVxcdHJldCA9IGJwZl9wcm9nX2RldGFjaDIocHJvZ2ZkLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyKTtcXG4tXFx0aWYgKHJldCkge1xcbi1cXHRcXHRwcmludGYoXFxcImJwZl9wcm9nX2RldGFjaDI6IHJldHVybmVkICVtXFxcXG5cXFwiKTtcXG4tXFx0XFx0cmV0dXJuIDE7XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiAwO1xcbi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIyOjA3OjM0LjQyMTEyMjA4NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg0MDY1MTkxMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgQlBGIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLykgYnkgY29udmVydGluZyBhbiBvbGQtc3R5bGUgdGVzdCBpbnRvIHRoZSB0ZXN0X3Byb2dzIGZyYW1ld29yay4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjMWNjMGE4ZmUzNWU2NzA4ZmNlMGExODE5M2U0Njg5NTMxYTNhYWMzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjAgMjI6MDc6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8uZ2l0aWdub3JlXG5pbmRleCA5ODZhNjM4OTE4NmJhLi5iODE1YmYwZDg4Nzc0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmLy5naXRpZ25vcmVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8uZ2l0aWdub3JlXG5AQCAtMTcsNyArMTcsNiBAQCB0ZXN0X3ZlcmlmaWVyX2xvZ1xuIGZlYXR1cmVcbiB1cmFuZG9tX3JlYWRcbiB0ZXN0X3NvY2ttYXBcbi10ZXN0X2xpcmNfbW9kZTJfdXNlclxuIGZsb3dfZGlzc2VjdG9yX2xvYWRcbiB0ZXN0X3RjcG5vdGlmeV91c2VyXG4gdGVzdF9saWJicGZcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcbmluZGV4IDJiMmY5M2RlYzQ3NGIuLmY4ZWMwZjU3NDU1OWEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZVxuQEAgLTEyMyw3ICsxMjMsNiBAQCBURVNUX0ZJTEVTID0geHNrX3ByZXJlcXMuc2ggJCh3aWxkY2FyZCBwcm9ncy9idGZfZHVtcF90ZXN0X2Nhc2VfKi5jKVxuIFxuICMgT3JkZXIgY29ycmVzcG9uZCB0byAnbWFrZSBydW5fdGVzdHMnIG9yZGVyXG4gVEVTVF9QUk9HUyA6PSB0ZXN0X2ttb2Quc2ggXFxcbi1cdHRlc3RfbGlyY19tb2RlMi5zaCBcXFxuIFx0dGVzdF9icGZ0b29sX2J1aWxkLnNoIFxcXG4gXHR0ZXN0X2RvY19idWlsZC5zaCBcXFxuIFx0dGVzdF94c2suc2ggXFxcbkBAIC0xNDEsNyArMTQwLDYgQEAgVEVTVF9HRU5fUFJPR1NfRVhURU5ERUQgPSBcXFxuIFx0YmVuY2ggXFxcbiBcdGZsb3dfZGlzc2VjdG9yX2xvYWQgXFxcbiBcdHRlc3RfY3BwIFxcXG4tXHR0ZXN0X2xpcmNfbW9kZTJfdXNlciBcXFxuIFx0dmVyaXN0YXQgXFxcbiBcdHhkcF9mZWF0dXJlcyBcXFxuIFx0eGRwX2h3X21ldGFkYXRhIFxcXG5AQCAtMzM4LDcgKzMzNiw2IEBAICQoT1VUUFVUKS90ZXN0X3NvY2ttYXA6ICQoQ0dST1VQX0hFTFBFUlMpICQoVEVTVElOR19IRUxQRVJTKVxuICQoT1VUUFVUKS90ZXN0X3RjcG5vdGlmeV91c2VyOiAkKENHUk9VUF9IRUxQRVJTKSAkKFRFU1RJTkdfSEVMUEVSUykgJChUUkFDRV9IRUxQRVJTKVxuICQoT1VUUFVUKS90ZXN0X3NvY2tfZmllbGRzOiAkKENHUk9VUF9IRUxQRVJTKSAkKFRFU1RJTkdfSEVMUEVSUylcbiAkKE9VVFBVVCkvdGVzdF90YWc6ICQoVEVTVElOR19IRUxQRVJTKVxuLSQoT1VUUFVUKS90ZXN0X2xpcmNfbW9kZTJfdXNlcjogJChURVNUSU5HX0hFTFBFUlMpXG4gJChPVVRQVVQpL2Zsb3dfZGlzc2VjdG9yX2xvYWQ6ICQoVEVTVElOR19IRUxQRVJTKVxuICQoT1VUUFVUKS90ZXN0X21hcHM6ICQoVEVTVElOR19IRUxQRVJTKVxuICQoT1VUUFVUKS90ZXN0X3ZlcmlmaWVyOiAkKFRFU1RJTkdfSEVMUEVSUykgJChDQVBfSEVMUEVSUykgJChVTlBSSVZfSEVMUEVSUylcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saXJjX21vZGUyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saXJjX21vZGUyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi44ZTQ4NWRiNzBiNzhhXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9saXJjX21vZGUyLmNcbkBAIC0wLDAgKzEsMzM0IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvLyB0ZXN0IGlyIGRlY29kZXJcbisvL1xuKy8vIENvcHlyaWdodCAoQykgMjAxOCBTZWFuIFlvdW5nIFx1MDAzY3NlYW5AbWVzcy5vcmdcdTAwM2VcbitcbisvLyBBIGxpcmMgY2hhcmRldiBpcyBhIGRldmljZSByZXByZXNlbnRpbmcgYSBjb25zdW1lciBJUiAoY2lyKSBkZXZpY2Ugd2hpY2hcbisvLyBjYW4gcmVjZWl2ZSBpbmZyYXJlZCBzaWduYWxzIGZyb20gcmVtb3RlIGNvbnRyb2wgYW5kL29yIHRyYW5zbWl0IElSLlxuKy8vXG4rLy8gSVIgaXMgc2VudCBhcyBhIHNlcmllcyBvZiBwdWxzZXMgYW5kIHNwYWNlIHNvbWV3aGF0IGxpa2UgbW9yc2UgY29kZS4gVGhlXG4rLy8gQlBGIHByb2dyYW0gY2FuIGRlY29kZSB0aGlzIGludG8gc2NhbmNvZGVzIHNvIHRoYXQgcmMtY29yZSBjYW4gdHJhbnNsYXRlXG4rLy8gdGhpcyBpbnRvIGlucHV0IGtleSBjb2RlcyB1c2luZyB0aGUgcmMga2V5bWFwLlxuKy8vXG4rLy8gVGhpcyB0ZXN0IHdvcmtzIGJ5IHNlbmRpbmcgSVIgb3ZlciByYy1sb29wYmFjaywgc28gdGhlIElSIGlzIHByb2Nlc3NlZCBieVxuKy8vIEJQRiBhbmQgdGhlbiBkZWNvZGVkIGludG8gc2NhbmNvZGVzLiBUaGUgbGlyYyBjaGFyZGV2IG11c3QgYmUgdGhlIG9uZVxuKy8vIGFzc29jaWF0ZWQgd2l0aCByYy1sb29wYmFjaywgc2VlIHRoZSBvdXRwdXQgb2YgaXIta2V5dGFibGUoMSkuXG4rLy9cbisvLyBUaGUgZm9sbG93aW5nIENPTkZJRyBvcHRpb25zIG11c3QgYmUgZW5hYmxlZCBmb3IgdGhlIHRlc3QgdG8gc3VjY2VlZDpcbisvLyBDT05GSUdfUkNfQ09SRT15XG4rLy8gQ09ORklHX0JQRl9SQVdJUl9FVkVOVD15XG4rLy8gQ09ORklHX1JDX0xPT1BCQUNLPXlcbisvLyBDT05GSUdfTElSQz15XG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW5wdXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpcmMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2dsb2IuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbWl0cy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjcG9sbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4rI2luY2x1ZGUgXCJsaXJjX21vZGUyLnNrZWwuaFwiXG4rXG4rLypcbisgKiBSZWFkIHRoZSBERVZOQU1FPSBsaW5lIG91dCBvZiB0aGUgZmlyc3QgdWV2ZW50IGZpbGUgdGhhdCBtYXRjaGVzXG4rICogcGF0dGVybiwgYW5kIHR1cm4gaXQgaW50byBhIC9kZXYvXHUwMDNjbmFtZVx1MDAzZSBwYXRoLlxuKyAqL1xuK3N0YXRpYyBib29sIGZpbmRfZGV2bmFtZShjb25zdCBjaGFyICpwYXR0ZXJuLCBjaGFyICpwYXRoLCBzaXplX3QgcGF0aF9zeilcbit7XG4rXHRnbG9iX3QgZ2wgPSB7fTtcbitcdGJvb2wgZm91bmQgPSBmYWxzZTtcbitcdEZJTEUgKmY7XG4rXG4rXHRpZiAoZ2xvYihwYXR0ZXJuLCAwLCBOVUxMLCBcdTAwMjZnbCkgfHwgZ2wuZ2xfcGF0aGMgPT0gMClcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRmID0gZm9wZW4oZ2wuZ2xfcGF0aHZbMF0sIFwiclwiKTtcbitcdGlmICghZilcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRjaGFyIGxpbmVbMjU2XTtcbitcbitcdHdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGYpKSB7XG4rXHRcdGNoYXIgKnZhbDtcbitcbitcdFx0aWYgKHN0cm5jbXAobGluZSwgXCJERVZOQU1FPVwiLCA4KSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0dmFsID0gbGluZSArIDg7XG4rXHRcdHZhbFtzdHJjc3BuKHZhbCwgXCJcXG5cIildID0gJ1xcMCc7XG4rXHRcdHNucHJpbnRmKHBhdGgsIHBhdGhfc3osIFwiL2Rldi8lc1wiLCB2YWwpO1xuK1x0XHRmb3VuZCA9IHRydWU7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0ZmNsb3NlKGYpO1xuK291dDpcbitcdGdsb2JmcmVlKFx1MDAyNmdsKTtcbitcdHJldHVybiBmb3VuZDtcbit9XG4rXG4rLyogTG9hZCByYy1sb29wYmFjayBhbmQgZmluZCB0aGUgbGlyYyBhbmQgaW5wdXQgY2hhcmRldnMgaXQgY3JlYXRlZC4gKi9cbitzdGF0aWMgYm9vbCBmaW5kX2xvb3BiYWNrX2RldmljZXMoY2hhciAqbGlyY19wYXRoLCBjaGFyICppbnB1dF9wYXRoLFxuK1x0XHRcdFx0ICBzaXplX3QgcGF0aF9zeilcbit7XG4rXHRnbG9iX3QgZ2wgPSB7fTtcbitcdGJvb2wgZm91bmQgPSBmYWxzZTtcbitcbitcdC8qIElnbm9yZSBmYWlsdXJlLCB3ZSBjaGVjayBmb3IgdGhlIHJlc3VsdGluZyBkZXZpY2VzIGJlbG93LiAqL1xuK1x0U1lTX05PRkFJTChcIm1vZHByb2JlIHJjLWxvb3BiYWNrIFx1MDAzZSAvZGV2L251bGwgMlx1MDAzZVx1MDAyNjFcIik7XG4rXG4rXHRpZiAoZ2xvYihcIi9zeXMvY2xhc3MvcmMvcmMqXCIsIDAsIE5VTEwsIFx1MDAyNmdsKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRmb3IgKHNpemVfdCBpID0gMDsgaSBcdTAwM2MgZ2wuZ2xfcGF0aGM7IGkrKykge1xuK1x0XHRjb25zdCBjaGFyICpyY2RpciA9IGdsLmdsX3BhdGh2W2ldO1xuK1x0XHRjaGFyIHVldmVudF9wYXRoW1BBVEhfTUFYXTtcbitcdFx0Y2hhciB1ZXZlbnRbNDA5Nl07XG4rXHRcdGNoYXIgcGF0dGVybltQQVRIX01BWF07XG4rXHRcdEZJTEUgKmY7XG4rXHRcdHNpemVfdCBuO1xuK1xuK1x0XHRzbnByaW50Zih1ZXZlbnRfcGF0aCwgc2l6ZW9mKHVldmVudF9wYXRoKSwgXCIlcy91ZXZlbnRcIiwgcmNkaXIpO1xuK1x0XHRmID0gZm9wZW4odWV2ZW50X3BhdGgsIFwiclwiKTtcbitcdFx0aWYgKCFmKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRuID0gZnJlYWQodWV2ZW50LCAxLCBzaXplb2YodWV2ZW50KSAtIDEsIGYpO1xuK1x0XHRmY2xvc2UoZik7XG4rXHRcdHVldmVudFtuXSA9ICdcXDAnO1xuK1xuK1x0XHRpZiAoIXN0cnN0cih1ZXZlbnQsIFwiRFJWX05BTUU9cmMtbG9vcGJhY2tcIikpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHNucHJpbnRmKHBhdHRlcm4sIHNpemVvZihwYXR0ZXJuKSwgXCIlcy9saXJjKi91ZXZlbnRcIiwgcmNkaXIpO1xuK1x0XHRpZiAoIWZpbmRfZGV2bmFtZShwYXR0ZXJuLCBsaXJjX3BhdGgsIHBhdGhfc3opKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRzbnByaW50ZihwYXR0ZXJuLCBzaXplb2YocGF0dGVybiksIFwiJXMvaW5wdXQqL2V2ZW50Ki91ZXZlbnRcIiwgcmNkaXIpO1xuK1x0XHRpZiAoIWZpbmRfZGV2bmFtZShwYXR0ZXJuLCBpbnB1dF9wYXRoLCBwYXRoX3N6KSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0Zm91bmQgPSB0cnVlO1xuK1x0XHRicmVhaztcbitcdH1cbitcbitvdXQ6XG4rXHRpZiAoIWZvdW5kKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIk5vIHJjIGRldmljZXMgZm91bmRcXG5cIik7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIkVuYWJsZSBDT05GSUdfUkNfTE9PUEJBQ0ssIENPTkZJR19SQ19MT09QQkFDSywgYW5kIENPTkZJR19MSVJDXFxuXCIpO1xuKz9cdH1cbitcbitcdGdsb2JmcmVlKFx1MDAyNmdsKTtcbitcdHJldHVybiBmb3VuZDtcbit9XG4rXG4rdm9pZCB0ZXN0X2xpcmNfbW9kZTIodm9pZClcbit7XG4rXHRjaGFyIGxpcmNfcGF0aFtQQVRIX01BWF0sIGlucHV0X3BhdGhbUEFUSF9NQVhdO1xuK1x0aW50IGxpcmNmZCA9IC0xLCBpbnB1dGZkID0gLTEsIHByb2dmZCwgcHJvZ2ZkMiA9IC0xO1xuK1x0c3RydWN0IGxpcmNfbW9kZTIgKnNrZWwgPSBOVUxMLCAqc2tlbDIgPSBOVUxMO1xuK1x0X191MzIgcHJvZ19pZHNbMTBdLCBwcm9nX2ZsYWdzWzEwXSwgcHJvZ19jbnQ7XG4rXHRzdHJ1Y3QgYnBmX3Byb2dfaW5mbyBpbmZvO1xuK1x0X191MzIgaW5mb19sZW4sIHByb2dfaWQsIHByb2dfaWQyO1xuK1x0aW50IHRlc3RpcjEgPSAweDhlYWQ7XHQvKiBrZXlkb3duIGZsYWcgKDB4ODAwMCkgfCBzY2FuY29kZSAweGVhZCAqL1xuK1x0aW50IHRlc3RpcjIgPSAweDQwODE7XHQvKiBwb2ludGVyX3JlbCBmbGFnICgweDQwMDApIHwgcmVsX3g9MSB8IHJlbF95PTEgKi9cbitcdHN0cnVjdCBpbnB1dF9ldmVudCBldmVudDtcbitcdHN0cnVjdCBwb2xsZmQgcGZkID0ge307XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKGdldHVpZCgpICE9IDApIHtcbitcdFx0dGVzdF9fc2tpcCgpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRpZiAoIWZpbmRfbG9vcGJhY2tfZGV2aWNlcyhsaXJjX3BhdGgsIGlucHV0X3BhdGgsIHNpemVvZihsaXJjX3BhdGgpKSkge1xuK1x0XHR0ZXN0X19za2lwKCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHNrZWwgPSBsaXJjX21vZGUyX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJsaXJjX21vZGUyX19vcGVuX2FuZF9sb2FkXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRwcm9nZmQgPSBicGZfcHJvZ3JhbV9fZmQoc2tlbC1cdTAwM2Vwcm9ncy5icGZfZGVjb2Rlcik7XG4rXG4rXHRtZW1zZXQoXHUwMDI2aW5mbywgMCwgc2l6ZW9mKGluZm8pKTtcbitcdGluZm9fbGVuID0gc2l6ZW9mKGluZm8pO1xuK1x0cmV0ID0gYnBmX3Byb2dfZ2V0X2luZm9fYnlfZmQocHJvZ2ZkLCBcdTAwMjZpbmZvLCBcdTAwMjZpbmZvX2xlbik7XG4rXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwiZ2V0IGZpcnN0IHByb2dyYW0ncyBpbmZvXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdHByb2dfaWQgPSBpbmZvLmlkO1xuK1xuK1x0bGlyY2ZkID0gb3BlbihsaXJjX3BhdGgsIE9fUkRXUiB8IE9fTk9OQkxPQ0spO1xuK1x0aWYgKCFBU1NFUlRfR0UobGlyY2ZkLCAwLCBcIm9wZW4gbGlyYyBkZXZpY2VcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0LyogVHJ5IHRvIGRldGFjaCBpdCBiZWZvcmUgaXQgd2FzIGV2ZXIgYXR0YWNoZWQsIHNob3VsZCBmYWlsLiAqL1xuK1x0cmV0ID0gYnBmX3Byb2dfZGV0YWNoMihwcm9nZmQsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIpO1xuK1x0aWYgKCFBU1NFUlRfRVEocmV0LCAtRU5PRU5ULCBcImRldGFjaCB1bmF0dGFjaGVkIHByb2dyYW1cIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0aW5wdXRmZCA9IG9wZW4oaW5wdXRfcGF0aCwgT19SRE9OTFkgfCBPX05PTkJMT0NLKTtcbitcdGlmICghQVNTRVJUX0dFKGlucHV0ZmQsIDAsIFwib3BlbiBpbnB1dCBkZXZpY2VcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0cHJvZ19jbnQgPSBBUlJBWV9TSVpFKHByb2dfaWRzKTtcbitcdHJldCA9IGJwZl9wcm9nX3F1ZXJ5KGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDAsIHByb2dfZmxhZ3MsIHByb2dfaWRzLFxuK1x0XHRcdCAgICAgXHUwMDI2cHJvZ19jbnQpO1xuK1x0aWYgKCFBU1NFUlRfT0socmV0LCBcInF1ZXJ5IHByb2dyYW1zIGJlZm9yZSBhdHRhY2hcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0aWYgKCFBU1NFUlRfRVEocHJvZ19jbnQsIDAsIFwibm8gcHJvZ3JhbXMgc2hvdWxkIGJlIGF0dGFjaGVkIHlldFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHQvKiBJbnZhbGlkIGF0dGFjaCBmbGFncyBtdXN0IGJlIHJlamVjdGVkLCBhbmQgbXVzdCBub3QgYXR0YWNoLiAqL1xuK1x0cmV0ID0gYnBmX3Byb2dfYXR0YWNoKHByb2dmZCwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMSk7XG4rXHRpZiAoIUFTU0VSVF9FUShyZXQsIC1FSU5WQUwsIFwiYXR0YWNoIHdpdGggaW52YWxpZCBmbGFnc1wiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRwcm9nX2NudCA9IEFSUkFZX1NJWkUocHJvZ19pZHMpO1xuK1x0cmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCwgcHJvZ19mbGFncywgcHJvZ19pZHMsXG4rXHRcdFx0ICAgICBcdTAwMjZwcm9nX2NudCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwicXVlcnkgcHJvZ3JhbXMgYWZ0ZXIgcmVqZWN0ZWQgYXR0YWNoXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICghQVNTRVJUX0VRKHByb2dfY250LCAwLCBcInJlamVjdGVkIGF0dGFjaCBzaG91bGQgbm90IGF0dGFjaFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRyZXQgPSBicGZfcHJvZ19hdHRhY2gocHJvZ2ZkLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwKTtcbitcdGlmICghQVNTRVJUX09LKHJldCwgXCJhdHRhY2ggcHJvZ3JhbSB0byBsaXJjIGRldmljZVwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHQvKiBJbnZhbGlkIHF1ZXJ5IGZsYWdzIG11c3QgYmUgcmVqZWN0ZWQgdG9vLCB3aXRob3V0IHVwc2V0dGluZyBzdGF0ZS4gKi9cbitcdHByb2dfY250ID0gQVJSQVlfU0laRShwcm9nX2lkcyk7XG4rXHRyZXQgPSBicGZfcHJvZ19xdWVyeShsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAxLCBwcm9nX2ZsYWdzLCBwcm9nX2lkcyxcbitcdFx0XHQgICAgIFx1MDAyNnByb2dfY250KTtcbitcdEFTU0VSVF9FUShyZXQsIC1FSU5WQUwsIFwicXVlcnkgd2l0aCBpbnZhbGlkIGZsYWdzXCIpO1xuK1xuK1x0cHJvZ19jbnQgPSBBUlJBWV9TSVpFKHByb2dfaWRzKTtcbitcdHJldCA9IGJwZl9wcm9nX3F1ZXJ5KGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDAsIHByb2dfZmxhZ3MsIHByb2dfaWRzLFxuK1x0XHRcdCAgICAgXHUwMDI2cHJvZ19jbnQpO1xuK1x0aWYgKCFBU1NFUlRfT0socmV0LCBcInF1ZXJ5IHByb2dyYW1zIGFmdGVyIGF0dGFjaFwiKSlcbitcdFx0Z290byBvdXRfZGV0YWNoO1xuK1x0aWYgKCFBU1NFUlRfRVEocHJvZ19jbnQsIDEsIFwib25lIHByb2dyYW0gc2hvdWxkIGJlIGF0dGFjaGVkXCIpKVxuK1x0XHRnb3RvIG91dF9kZXRhY2g7XG4rXHRBU1NFUlRfRVEocHJvZ19pZHNbMF0sIHByb2dfaWQsIFwicXVlcmllZCBpZCBzaG91bGQgbWF0Y2ggYXR0YWNoZWQgcHJvZ3JhbVwiKTtcbitcbitcdC8qIFdyaXRlIHJhdyBJUiAqL1xuK1x0cmV0ID0gd3JpdGUobGlyY2ZkLCBcdTAwMjZ0ZXN0aXIxLCBzaXplb2YodGVzdGlyMSkpO1xuK1x0aWYgKCFBU1NFUlRfRVEocmV0LCBzaXplb2YodGVzdGlyMSksIFwic2VuZCB0ZXN0IElSIG1lc3NhZ2UgMVwiKSlcbitcdFx0Z290byBvdXRfZGV0YWNoO1xuK1xuK1x0cGZkLmZkID0gaW5wdXRmZDtcbitcdHBmZC5ldmVudHMgPSBQT0xMSU47XG4rXG4rXHRmb3IgKDs7KSB7XG4rXHRcdHBvbGwoXHUwMDI2cGZkLCAxLCAxMDApO1xuK1xuK1x0XHQvKiBSZWFkIGRlY29kZWQgSVIgKi9cbitcdFx0cmV0ID0gcmVhZChpbnB1dGZkLCBcdTAwMjZldmVudCwgc2l6ZW9mKGV2ZW50KSk7XG4rXHRcdGlmICghQVNTRVJUX0VRKHJldCwgc2l6ZW9mKGV2ZW50KSwgXCJyZWFkIGRlY29kZWQgSVIgMVwiKSlcbitcdFx0XHRnb3RvIG91dF9kZXRhY2g7XG4rXG4rXHRcdGlmIChldmVudC50eXBlID09IEVWX01TQyBcdTAwMjZcdTAwMjYgZXZlbnQuY29kZSA9PSBNU0NfU0NBTiBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGV2ZW50LnZhbHVlID09IDB4ZWFkKVxuK1x0XHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0LyogV3JpdGUgcmF3IElSICovXG4rXHRyZXQgPSB3cml0ZShsaXJjZmQsIFx1MDAyNnRlc3RpcjIsIHNpemVvZih0ZXN0aXIyKSk7XG4rXHRpZiAoIUFTU0VSVF9FUShyZXQsIHNpemVvZih0ZXN0aXIyKSwgXCJzZW5kIHRlc3QgSVIgbWVzc2FnZSAyXCIpKVxuK1x0XHRnb3RvIG91dF9kZXRhY2g7XG4rXG4rXHRmb3IgKDs7KSB7XG4rXHRcdHBvbGwoXHUwMDI2cGZkLCAxLCAxMDApO1xuK1xuK1x0XHQvKiBSZWFkIGRlY29kZWQgSVIgKi9cbitcdFx0cmV0ID0gcmVhZChpbnB1dGZkLCBcdTAwMjZldmVudCwgc2l6ZW9mKGV2ZW50KSk7XG4rXHRcdGlmICghQVNTRVJUX0VRKHJldCwgc2l6ZW9mKGV2ZW50KSwgXCJyZWFkIGRlY29kZWQgSVIgMlwiKSlcbitcdFx0XHRnb3RvIG91dF9kZXRhY2g7XG4rXG4rXHRcdGlmIChldmVudC50eXBlID09IEVWX1JFTCBcdTAwMjZcdTAwMjYgZXZlbnQuY29kZSA9PSBSRUxfWSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGV2ZW50LnZhbHVlID09IDEpXG4rXHRcdFx0YnJlYWs7XG4rXHR9XG4rXG4rXHRwcm9nX2NudCA9IEFSUkFZX1NJWkUocHJvZ19pZHMpO1xuK1x0cmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCwgcHJvZ19mbGFncywgcHJvZ19pZHMsXG4rXHRcdFx0ICAgICBcdTAwMjZwcm9nX2NudCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwicXVlcnkgcHJvZ3JhbXMgYWZ0ZXIgSVIgd2FzIGRlY29kZWRcIikpXG4rXHRcdGdvdG8gb3V0X2RldGFjaDtcbitcdGlmICghQVNTRVJUX0VRKHByb2dfY250LCAxLCBcIm9uZSBwcm9ncmFtIHNob3VsZCBzdGlsbCBiZSBhdHRhY2hlZFwiKSlcbitcdFx0Z290byBvdXRfZGV0YWNoO1xuK1xuK1x0LypcbitcdCAqIFRoZSBsaXJjIGNoYXJkZXYgY2FuIGhvbGQgbW9yZSB0aGFuIG9uZSBhdHRhY2hlZCBwcm9ncmFtIGF0IG9uY2UuXG4rXHQgKiBMb2FkIGEgc2Vjb25kLCBpbmRlcGVuZGVudCBpbnN0YW5jZSBhbmQgY2hlY2sgaXQgY2FuIGJlIGF0dGFjaGVkXG4rXHQgKiBhbG9uZ3NpZGUgdGhlIGZpcnN0LCBxdWVyaWVkLCBhbmQgdGhlbiBkZXRhY2hlZCBvbiBpdHMgb3duXG4rXHQgKiB3aXRob3V0IGRpc3R1cmJpbmcgdGhlIGZpcnN0IHByb2dyYW0ncyBhdHRhY2htZW50LlxuK1x0ICovXG4rXHRza2VsMiA9IGxpcmNfbW9kZTJfX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsMiwgXCJsaXJjX21vZGUyX19vcGVuX2FuZF9sb2FkICgybmQpXCIpKVxuK1x0XHRnb3RvIG91dF9kZXRhY2g7XG4rXG4rXHRwcm9nZmQyID0gYnBmX3Byb2dyYW1fX2ZkKHNrZWwyLVx1MDAzZXByb2dzLmJwZl9kZWNvZGVyKTtcbitcbitcdG1lbXNldChcdTAwMjZpbmZvLCAwLCBzaXplb2YoaW5mbykpO1xuK1x0aW5mb19sZW4gPSBzaXplb2YoaW5mbyk7XG4rXHRyZXQgPSBicGZfcHJvZ19nZXRfaW5mb19ieV9mZChwcm9nZmQyLCBcdTAwMjZpbmZvLCBcdTAwMjZpbmZvX2xlbik7XG4rXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwiZ2V0IHNlY29uZCBwcm9ncmFtJ3MgaW5mb1wiKSlcbitcdFx0Z290byBvdXRfZGV0YWNoO1xuK1x0cHJvZ19pZDIgPSBpbmZvLmlkO1xuK1xuK1x0cmV0ID0gYnBmX3Byb2dfYXR0YWNoKHByb2dmZDIsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDApO1xuK1x0aWYgKCFBU1NFUlRfT0socmV0LCBcImF0dGFjaCBzZWNvbmQgcHJvZ3JhbSB0byBsaXJjIGRldmljZVwiKSlcbitcdFx0Z290byBvdXRfZGV0YWNoO1xuK1xuK1x0cHJvZ19jbnQgPSBBUlJBWV9TSVpFKHByb2dfaWRzKTtcbitcdHJldCA9IGJwZl9wcm9nX3F1ZXJ5KGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIsIDAsIHByb2dfZmxhZ3MsIHByb2dfaWRzLFxuK1x0XHRcdCAgICAgXHUwMDI2cHJvZ19jbnQpO1xuK1x0aWYgKCFBU1NFUlRfT0socmV0LCBcInF1ZXJ5IHByb2dyYW1zIGFmdGVyIHNlY29uZCBhdHRhY2hcIikpXG4rXHRcdGdvdG8gb3V0X2RldGFjaDI7XG4rXHRpZiAoIUFTU0VSVF9FUShwcm9nX2NudCwgMiwgXCJ0d28gcHJvZ3JhbXMgc2hvdWxkIGJlIGF0dGFjaGVkXCIpKVxuK1x0XHRnb3RvIG91dF9kZXRhY2gyO1xuK1x0QVNTRVJUX1RSVUUoKHByb2dfaWRzWzBdID09IHByb2dfaWQgXHUwMDI2XHUwMDI2IHByb2dfaWRzWzFdID09IHByb2dfaWQyKSB8fFxuK1x0XHQgICAgKHByb2dfaWRzWzBdID09IHByb2dfaWQyIFx1MDAyNlx1MDAyNiBwcm9nX2lkc1sxXSA9PSBwcm9nX2lkKSxcbitcdFx0ICAgIFwicXVlcmllZCBpZHMgc2hvdWxkIGJlIHRoZSB0d28gYXR0YWNoZWQgcHJvZ3JhbXNcIik7XG4rXG4rXHQvKiBEZXRhY2ggdGhlIHNlY29uZCBwcm9ncmFtOyB0aGUgZmlyc3Qgc2hvdWxkIHJlbWFpbiBhdHRhY2hlZC4gKi9cbitcdHJldCA9IGJwZl9wcm9nX2RldGFjaDIocHJvZ2ZkMiwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMik7XG4rXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwiZGV0YWNoIHNlY29uZCBwcm9ncmFtXCIpKVxuK1x0XHRnb3RvIG91dF9kZXRhY2gyO1xuK1xuK1x0LyogRGV0YWNoaW5nIGFuIGFscmVhZHktZGV0YWNoZWQgcHJvZ3JhbSBzaG91bGQgbm93IGZhaWwuICovXG4rXHRyZXQgPSBicGZfcHJvZ19kZXRhY2gyKHByb2dmZDIsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIpO1xuK1x0QVNTRVJUX0VRKHJldCwgLUVOT0VOVCwgXCJkZXRhY2ggc2Vjb25kIHByb2dyYW0gYWdhaW5cIik7XG4rXG4rXHRwcm9nX2NudCA9IEFSUkFZX1NJWkUocHJvZ19pZHMpO1xuK1x0cmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCwgcHJvZ19mbGFncywgcHJvZ19pZHMsXG4rXHRcdFx0ICAgICBcdTAwMjZwcm9nX2NudCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwicXVlcnkgcHJvZ3JhbXMgYWZ0ZXIgc2Vjb25kIGRldGFjaFwiKSlcbitcdFx0Z290byBvdXRfZGV0YWNoO1xuK1x0aWYgKCFBU1NFUlRfRVEocHJvZ19jbnQsIDEsIFwib25lIHByb2dyYW0gc2hvdWxkIHJlbWFpbiBhdHRhY2hlZFwiKSlcbitcdFx0Z290byBvdXRfZGV0YWNoO1xuK1x0QVNTRVJUX0VRKHByb2dfaWRzWzBdLCBwcm9nX2lkLCBcInJlbWFpbmluZyBwcm9ncmFtIHNob3VsZCBiZSB0aGUgZmlyc3Qgb25lXCIpO1xuK1xuK291dF9kZXRhY2g6XG4rXHQvKiBMZXQncyB0cnkgZGV0YWNoaW5nIGl0IG5vdyBpdCBpcyBhY3R1YWxseSBhdHRhY2hlZC4gKi9cbitcdHJldCA9IGJwZl9wcm9nX2RldGFjaDIocHJvZ2ZkLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyKTtcbitcdEFTU0VSVF9PSyhyZXQsIFwiZGV0YWNoIHByb2dyYW0gZnJvbSBsaXJjIGRldmljZVwiKTtcbitcbitcdC8qIERldGFjaGluZyBpdCBhZ2FpbiBzaG91bGQgbm93IGZhaWwgdGhlIHNhbWUgd2F5LiAqL1xuK1x0cmV0ID0gYnBmX3Byb2dfZGV0YWNoMihwcm9nZmQsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIpO1xuK1x0QVNTRVJUX0VRKHJldCwgLUVOT0VOVCwgXCJkZXRhY2ggcHJvZ3JhbSBmcm9tIGxpcmMgZGV2aWNlIGFnYWluXCIpO1xuK1x0Z290byBvdXQ7XG4rXG4rb3V0X2RldGFjaDI6XG4rXHQvKiBCZXN0LWVmZm9ydCBjbGVhbnVwIG9mIHRoZSBzZWNvbmQgcHJvZ3JhbSBiZWZvcmUgYmFpbGluZyBvdXQuICovXG4rXHRicGZfcHJvZ19kZXRhY2gyKHByb2dmZDIsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIpO1xuK1x0Z290byBvdXRfZGV0YWNoO1xuK1xuK291dDpcbitcdGlmIChpbnB1dGZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UoaW5wdXRmZCk7XG4rXHRpZiAobGlyY2ZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UobGlyY2ZkKTtcbitcdGxpcmNfbW9kZTJfX2Rlc3Ryb3koc2tlbDIpO1xuK1x0bGlyY19tb2RlMl9fZGVzdHJveShza2VsKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2xpcmNfbW9kZTIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9saXJjX21vZGUyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi45ODEzN2YzYzVjMDNkXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbGlyY19tb2RlMi5jXG5AQCAtMCwwICsxLDMyIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvLyB0ZXN0IGlyIGRlY29kZXJcbisvL1xuKy8vIENvcHlyaWdodCAoQykgMjAxOCBTZWFuIFlvdW5nIFx1MDAzY3NlYW5AbWVzcy5vcmdcdTAwM2VcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpcmMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4rXG4rU0VDKFwibGlyY19tb2RlMlwiKVxuK2ludCBicGZfZGVjb2Rlcih1bnNpZ25lZCBpbnQgKnNhbXBsZSlcbit7XG4rXHRpZiAoTElSQ19JU19QVUxTRSgqc2FtcGxlKSkge1xuK1x0XHR1bnNpZ25lZCBpbnQgZHVyYXRpb24gPSBMSVJDX1ZBTFVFKCpzYW1wbGUpO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBGbGFnIGJpdHMgcGlja2VkIGRlbGliZXJhdGVseSBsb3c6IHJjLWxvb3BiYWNrIHNpbXVsYXRlc1xuK1x0XHQgKiBhIHJlY2VpdmVyIG92ZXJmbG93IGZvciBhbnkgcHVsc2Ugb3ZlciBNU19UT19VUyg1MCkgKHNlZVxuK1x0XHQgKiBsb29wX3R4X2lyKCkgaW4gcmMtbG9vcGJhY2suYyksIHdoaWNoIHdvdWxkIHNpbGVudGx5XG4rXHRcdCAqIHN3YWxsb3cgdGhlIHNhbXBsZSBiZWZvcmUgaXQgZXZlciByZWFjaGVzIHRoaXMgZGVjb2Rlci5cbitcdFx0ICovXG4rXHRcdGlmIChkdXJhdGlvbiBcdTAwMjYgMHg4MDAwKVxuK1x0XHRcdGJwZl9yY19rZXlkb3duKHNhbXBsZSwgMHg0MCwgZHVyYXRpb24gXHUwMDI2IDB4M2ZmZiwgMCk7XG4rXHRcdGlmIChkdXJhdGlvbiBcdTAwMjYgMHg0MDAwKVxuK1x0XHRcdGJwZl9yY19wb2ludGVyX3JlbChzYW1wbGUsIChkdXJhdGlvbiBcdTAwM2VcdTAwM2UgNykgXHUwMDI2IDB4N2YsXG4rXHRcdFx0XHRcdCAgIGR1cmF0aW9uIFx1MDAyNiAweDdmKTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfbGlyY19tb2RlMl9rZXJuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9saXJjX21vZGUyX2tlcm4uY1xuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCBjYmU0Mjg0YzAzMmZlLi4wMDAwMDAwMDAwMDAwXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9saXJjX21vZGUyX2tlcm4uY1xuKysrIC9kZXYvbnVsbFxuQEAgLTEsMjYgKzAsMCBAQFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4tLy8gdGVzdCBpciBkZWNvZGVyXG4tLy9cbi0vLyBDb3B5cmlnaHQgKEMpIDIwMTggU2VhbiBZb3VuZyBcdTAwM2NzZWFuQG1lc3Mub3JnXHUwMDNlXG4tXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9saXJjLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuLVxuLVNFQyhcImxpcmNfbW9kZTJcIilcbi1pbnQgYnBmX2RlY29kZXIodW5zaWduZWQgaW50ICpzYW1wbGUpXG4te1xuLVx0aWYgKExJUkNfSVNfUFVMU0UoKnNhbXBsZSkpIHtcbi1cdFx0dW5zaWduZWQgaW50IGR1cmF0aW9uID0gTElSQ19WQUxVRSgqc2FtcGxlKTtcbi1cbi1cdFx0aWYgKGR1cmF0aW9uIFx1MDAyNiAweDEwMDApXG4tXHRcdFx0YnBmX3JjX2tleWRvd24oc2FtcGxlLCAweDQwLCBkdXJhdGlvbiBcdTAwMjYgMHhmZmZmLCAwKTtcbi1cdFx0aWYgKGR1cmF0aW9uIFx1MDAyNiAweDIwMDApXG4tXHRcdFx0YnBmX3JjX3BvaW50ZXJfcmVsKHNhbXBsZSwgKGR1cmF0aW9uIFx1MDAzZVx1MDAzZSA4KSBcdTAwMjYgMHhmZixcbi1cdFx0XHRcdFx0ICAgZHVyYXRpb24gXHUwMDI2IDB4ZmYpO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLWNoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9saXJjX21vZGUyLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbGlyY19tb2RlMi5zaFxuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCA1MjUyYjkxZjQ4YTE4Li4wMDAwMDAwMDAwMDAwXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9saXJjX21vZGUyLnNoXG4rKysgL2Rldi9udWxsXG5AQCAtMSw0MSArMCwwIEBAXG4tIyEvYmluL2Jhc2hcbi0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4tXG4tIyBLc2VsZnRlc3QgZnJhbWV3b3JrIHJlcXVpcmVtZW50IC0gU0tJUCBjb2RlIGlzIDQuXG4ta3NmdF9za2lwPTRcbi1yZXQ9JGtzZnRfc2tpcFxuLVxuLW1zZz1cInNraXAgYWxsIHRlc3RzOlwiXG4taWYgWyAkVUlEICE9IDAgXTsgdGhlblxuLVx0ZWNobyAkbXNnIHBsZWFzZSBydW4gdGhpcyBhcyByb290IFx1MDAzZVx1MDAyNjJcbi1cdGV4aXQgJGtzZnRfc2tpcFxuLWZpXG4tXG4tR1JFRU49J1xcMDMzWzA7OTJtJ1xuLVJFRD0nXFwwMzNbMDszMW0nXG4tTkM9J1xcMDMzWzBtJyAjIE5vIENvbG9yXG4tXG4tbW9kcHJvYmUgcmMtbG9vcGJhY2tcbi1cbi1mb3IgaSBpbiAvc3lzL2NsYXNzL3JjL3JjKlxuLWRvXG4tXHRpZiBncmVwIC1xIERSVl9OQU1FPXJjLWxvb3BiYWNrICRpL3VldmVudFxuLVx0dGhlblxuLVx0XHRMSVJDREVWPSQoZ3JlcCBERVZOQU1FPSAkaS9saXJjKi91ZXZlbnQgfCBzZWQgc1FERVZOQU1FPVEvZGV2L1EpXG4tXHRcdElOUFVUREVWPSQoZ3JlcCBERVZOQU1FPSAkaS9pbnB1dCovZXZlbnQqL3VldmVudCB8IHNlZCBzUURFVk5BTUU9US9kZXYvUSlcbi1cdGZpXG4tZG9uZVxuLVxuLWlmIFsgLW4gXCIkTElSQ0RFVlwiIF07XG4tdGhlblxuLVx0VFlQRT1saXJjX21vZGUyXG4tXHQuL3Rlc3RfbGlyY19tb2RlMl91c2VyICRMSVJDREVWICRJTlBVVERFVlxuLVx0cmV0PSQ/XG4tXHRpZiBbICRyZXQgLW5lIDAgXTsgdGhlblxuLVx0XHRlY2hvIC1lICR7UkVEfVwiRkFJTDogJFRZUEVcIiR7TkN9XG4tXHRlbHNlXG4tXHRcdGVjaG8gLWUgJHtHUkVFTn1cIlBBU1M6ICRUWVBFXCIke05DfVxuLVx0Zmlcbi1maVxuLVxuLWV4aXQgJHJldFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2xpcmNfbW9kZTJfdXNlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbGlyY19tb2RlMl91c2VyLmNcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggY2QxOTFkYTIwZDE0My4uMDAwMDAwMDAwMDAwMFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RfbGlyY19tb2RlMl91c2VyLmNcbisrKyAvZGV2L251bGxcbkBAIC0xLDE3NyArMCwwIEBAXG4tLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbi0vLyB0ZXN0IGlyIGRlY29kZXJcbi0vL1xuLS8vIENvcHlyaWdodCAoQykgMjAxOCBTZWFuIFlvdW5nIFx1MDAzY3NlYW5AbWVzcy5vcmdcdTAwM2Vcbi1cbi0vLyBBIGxpcmMgY2hhcmRldiBpcyBhIGRldmljZSByZXByZXNlbnRpbmcgYSBjb25zdW1lciBJUiAoY2lyKSBkZXZpY2Ugd2hpY2hcbi0vLyBjYW4gcmVjZWl2ZSBpbmZyYXJlZCBzaWduYWxzIGZyb20gcmVtb3RlIGNvbnRyb2wgYW5kL29yIHRyYW5zbWl0IElSLlxuLS8vXG4tLy8gSVIgaXMgc2VudCBhcyBhIHNlcmllcyBvZiBwdWxzZXMgYW5kIHNwYWNlIHNvbWV3aGF0IGxpa2UgbW9yc2UgY29kZS4gVGhlXG4tLy8gQlBGIHByb2dyYW0gY2FuIGRlY29kZSB0aGlzIGludG8gc2NhbmNvZGVzIHNvIHRoYXQgcmMtY29yZSBjYW4gdHJhbnNsYXRlXG4tLy8gdGhpcyBpbnRvIGlucHV0IGtleSBjb2RlcyB1c2luZyB0aGUgcmMga2V5bWFwLlxuLS8vXG4tLy8gVGhpcyB0ZXN0IHdvcmtzIGJ5IHNlbmRpbmcgSVIgb3ZlciByYy1sb29wYmFjaywgc28gdGhlIElSIGlzIHByb2Nlc3NlZCBieVxuLS8vIEJQRiBhbmQgdGhlbiBkZWNvZGVkIGludG8gc2NhbmNvZGVzLiBUaGUgbGlyYyBjaGFyZGV2IG11c3QgYmUgdGhlIG9uZVxuLS8vIGFzc29jaWF0ZWQgd2l0aCByYy1sb29wYmFjaywgc2VlIHRoZSBvdXRwdXQgb2YgaXIta2V5dGFibGUoMSkuXG4tLy9cbi0vLyBUaGUgZm9sbG93aW5nIENPTkZJRyBvcHRpb25zIG11c3QgYmUgZW5hYmxlZCBmb3IgdGhlIHRlc3QgdG8gc3VjY2VlZDpcbi0vLyBDT05GSUdfUkNfQ09SRT15XG4tLy8gQ09ORklHX0JQRl9SQVdJUl9FVkVOVD15XG4tLy8gQ09ORklHX1JDX0xPT1BCQUNLPXlcbi1cbi0vLyBTdGVwczpcbi0vLyAxLiBPcGVuIHRoZSAvZGV2L2xpcmNOIGRldmljZSBmb3IgcmMtbG9vcGJhY2sgKGdpdmVuIG9uIGNvbW1hbmQgbGluZSlcbi0vLyAyLiBBdHRhY2ggYnBmX2xpcmNfbW9kZTIgcHJvZ3JhbSB3aGljaCBkZWNvZGVzIHNvbWUgSVIuXG4tLy8gMy4gU2VuZCBzb21lIElSIHRvIHRoZSBzYW1lIElSIGRldmljZTsgc2luY2UgaXQgaXMgbG9vcGJhY2ssIHRoaXMgd2lsbFxuLS8vICAgIGVuZCB1cCBpbiB0aGUgYnBmIHByb2dyYW1cbi0vLyA0LiBicGYgcHJvZ3JhbSBzaG91bGQgZGVjb2RlIElSIGFuZCByZXBvcnQga2V5Y29kZVxuLS8vIDUuIFdlIGNhbiByZWFkIGtleWNvZGUgZnJvbSBzYW1lIC9kZXYvbGlyYyBkZXZpY2Vcbi1cbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2lucHV0LmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjc3RkaW8uaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY3N0ZGxpYi5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY3BvbGwuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY3N5cy90eXBlcy5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjc3lzL2lvY3RsLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NzeXMvc3RhdC5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuLVxuLSNpbmNsdWRlIFwiYnBmX3V0aWwuaFwiXG4tI2luY2x1ZGUgXHUwMDNjYnBmL2JwZi5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjYnBmL2xpYmJwZi5oXHUwMDNlXG4tXG4tI2luY2x1ZGUgXCJ0ZXN0aW5nX2hlbHBlcnMuaFwiXG4tXG4taW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KVxuLXtcbi1cdHN0cnVjdCBicGZfb2JqZWN0ICpvYmo7XG4tXHRpbnQgcmV0LCBsaXJjZmQsIHByb2dmZCwgaW5wdXRmZDtcbi1cdGludCB0ZXN0aXIxID0gMHgxZWFkO1xuLVx0aW50IHRlc3RpcjIgPSAweDIxMDE7XG4tXHR1MzIgcHJvZ19pZHNbMTBdLCBwcm9nX2ZsYWdzWzEwXSwgcHJvZ19jbnQ7XG4tXG4tXHRpZiAoYXJnYyAhPSAzKSB7XG4tXHRcdHByaW50ZihcIlVzYWdlOiAlcyAvZGV2L2xpcmNOIC9kZXYvaW5wdXQvZXZlbnRNXFxuXCIsIGFyZ3ZbMF0pO1xuLVx0XHRyZXR1cm4gMjtcbi1cdH1cbi1cbi1cdHJldCA9IGJwZl9wcm9nX3Rlc3RfbG9hZChcInRlc3RfbGlyY19tb2RlMl9rZXJuLmJwZi5vXCIsXG4tXHRcdFx0XHQgQlBGX1BST0dfVFlQRV9MSVJDX01PREUyLCBcdTAwMjZvYmosIFx1MDAyNnByb2dmZCk7XG4tXHRpZiAocmV0KSB7XG4tXHRcdHByaW50ZihcIkZhaWxlZCB0byBsb2FkIGJwZiBwcm9ncmFtXFxuXCIpO1xuLVx0XHRyZXR1cm4gMTtcbi1cdH1cbi1cbi1cdGxpcmNmZCA9IG9wZW4oYXJndlsxXSwgT19SRFdSIHwgT19OT05CTE9DSyk7XG4tXHRpZiAobGlyY2ZkID09IC0xKSB7XG4tXHRcdHByaW50ZihcImZhaWxlZCB0byBvcGVuIGxpcmMgZGV2aWNlICVzOiAlbVxcblwiLCBhcmd2WzFdKTtcbi1cdFx0cmV0dXJuIDE7XG4tXHR9XG4tXG4tXHQvKiBMZXQncyB0cnkgZGV0YWNoIGl0IGJlZm9yZSBpdCB3YXMgZXZlciBhdHRhY2hlZCAqL1xuLVx0cmV0ID0gYnBmX3Byb2dfZGV0YWNoMihwcm9nZmQsIGxpcmNmZCwgQlBGX0xJUkNfTU9ERTIpO1xuLVx0aWYgKHJldCAhPSAtRU5PRU5UKSB7XG4tXHRcdHByaW50ZihcImJwZl9wcm9nX2RldGFjaDIgbm90IGF0dGFjaGVkIHNob3VsZCBmYWlsOiAlbVxcblwiKTtcbi1cdFx0cmV0dXJuIDE7XG4tXHR9XG4tXG4tXHRpbnB1dGZkID0gb3Blbihhcmd2WzJdLCBPX1JET05MWSB8IE9fTk9OQkxPQ0spO1xuLVx0aWYgKGlucHV0ZmQgPT0gLTEpIHtcbi1cdFx0cHJpbnRmKFwiZmFpbGVkIHRvIG9wZW4gaW5wdXQgZGV2aWNlICVzOiAlbVxcblwiLCBhcmd2WzFdKTtcbi1cdFx0cmV0dXJuIDE7XG4tXHR9XG4tXG4tXHRwcm9nX2NudCA9IDEwO1xuLVx0cmV0ID0gYnBmX3Byb2dfcXVlcnkobGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCwgcHJvZ19mbGFncywgcHJvZ19pZHMsXG4tXHRcdFx0ICAgICBcdTAwMjZwcm9nX2NudCk7XG4tXHRpZiAocmV0KSB7XG4tXHRcdHByaW50ZihcIkZhaWxlZCB0byBxdWVyeSBicGYgcHJvZ3JhbXMgb24gbGlyYyBkZXZpY2U6ICVtXFxuXCIpO1xuLVx0XHRyZXR1cm4gMTtcbi1cdH1cbi1cbi1cdGlmIChwcm9nX2NudCAhPSAwKSB7XG4tXHRcdHByaW50ZihcIkV4cGVjdGVkIG5vdGhpbmcgdG8gYmUgYXR0YWNoZWRcXG5cIik7XG4tXHRcdHJldHVybiAxO1xuLVx0fVxuLVxuLVx0cmV0ID0gYnBmX3Byb2dfYXR0YWNoKHByb2dmZCwgbGlyY2ZkLCBCUEZfTElSQ19NT0RFMiwgMCk7XG4tXHRpZiAocmV0KSB7XG4tXHRcdHByaW50ZihcIkZhaWxlZCB0byBhdHRhY2ggYnBmIHRvIGxpcmMgZGV2aWNlOiAlbVxcblwiKTtcbi1cdFx0cmV0dXJuIDE7XG4tXHR9XG4tXG4tXHQvKiBXcml0ZSByYXcgSVIgKi9cbi1cdHJldCA9IHdyaXRlKGxpcmNmZCwgXHUwMDI2dGVzdGlyMSwgc2l6ZW9mKHRlc3RpcjEpKTtcbi1cdGlmIChyZXQgIT0gc2l6ZW9mKHRlc3RpcjEpKSB7XG4tXHRcdHByaW50ZihcIkZhaWxlZCB0byBzZW5kIHRlc3QgSVIgbWVzc2FnZTogJW1cXG5cIik7XG4tXHRcdHJldHVybiAxO1xuLVx0fVxuLVxuLVx0c3RydWN0IHBvbGxmZCBwZmQgPSB7IC5mZCA9IGlucHV0ZmQsIC5ldmVudHMgPSBQT0xMSU4gfTtcbi1cdHN0cnVjdCBpbnB1dF9ldmVudCBldmVudDtcbi1cbi1cdGZvciAoOzspIHtcbi1cdFx0cG9sbChcdTAwMjZwZmQsIDEsIDEwMCk7XG4tXG4tXHRcdC8qIFJlYWQgZGVjb2RlZCBJUiAqL1xuLVx0XHRyZXQgPSByZWFkKGlucHV0ZmQsIFx1MDAyNmV2ZW50LCBzaXplb2YoZXZlbnQpKTtcbi1cdFx0aWYgKHJldCAhPSBzaXplb2YoZXZlbnQpKSB7XG4tXHRcdFx0cHJpbnRmKFwiRmFpbGVkIHRvIHJlYWQgZGVjb2RlZCBJUjogJW1cXG5cIik7XG4tXHRcdFx0cmV0dXJuIDE7XG4tXHRcdH1cbi1cbi1cdFx0aWYgKGV2ZW50LnR5cGUgPT0gRVZfTVNDIFx1MDAyNlx1MDAyNiBldmVudC5jb2RlID09IE1TQ19TQ0FOIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgZXZlbnQudmFsdWUgPT0gMHgxZWFkKSB7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdH1cbi1cbi1cdC8qIFdyaXRlIHJhdyBJUiAqL1xuLVx0cmV0ID0gd3JpdGUobGlyY2ZkLCBcdTAwMjZ0ZXN0aXIyLCBzaXplb2YodGVzdGlyMikpO1xuLVx0aWYgKHJldCAhPSBzaXplb2YodGVzdGlyMikpIHtcbi1cdFx0cHJpbnRmKFwiRmFpbGVkIHRvIHNlbmQgdGVzdCBJUiBtZXNzYWdlOiAlbVxcblwiKTtcbi1cdFx0cmV0dXJuIDE7XG4tXHR9XG4tXG4tXHRmb3IgKDs7KSB7XG4tXHRcdHBvbGwoXHUwMDI2cGZkLCAxLCAxMDApO1xuLVxuLVx0XHQvKiBSZWFkIGRlY29kZWQgSVIgKi9cbi1cdFx0cmV0ID0gcmVhZChpbnB1dGZkLCBcdTAwMjZldmVudCwgc2l6ZW9mKGV2ZW50KSk7XG4tXHRcdGlmIChyZXQgIT0gc2l6ZW9mKGV2ZW50KSkge1xuLVx0XHRcdHByaW50ZihcIkZhaWxlZCB0byByZWFkIGRlY29kZWQgSVI6ICVtXFxuXCIpO1xuLVx0XHRcdHJldHVybiAxO1xuLVx0XHR9XG4tXG4tXHRcdGlmIChldmVudC50eXBlID09IEVWX1JFTCBcdTAwMjZcdTAwMjYgZXZlbnQuY29kZSA9PSBSRUxfWSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIGV2ZW50LnZhbHVlID09IDEgKSB7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdH1cbi1cbi1cdHByb2dfY250ID0gMTA7XG4tXHRyZXQgPSBicGZfcHJvZ19xdWVyeShsaXJjZmQsIEJQRl9MSVJDX01PREUyLCAwLCBwcm9nX2ZsYWdzLCBwcm9nX2lkcyxcbi1cdFx0XHQgICAgIFx1MDAyNnByb2dfY250KTtcbi1cdGlmIChyZXQpIHtcbi1cdFx0cHJpbnRmKFwiRmFpbGVkIHRvIHF1ZXJ5IGJwZiBwcm9ncmFtcyBvbiBsaXJjIGRldmljZTogJW1cXG5cIik7XG4tXHRcdHJldHVybiAxO1xuLVx0fVxuLVxuLVx0aWYgKHByb2dfY250ICE9IDEpIHtcbi1cdFx0cHJpbnRmKFwiRXhwZWN0ZWQgb25lIHByb2dyYW0gdG8gYmUgYXR0YWNoZWRcXG5cIik7XG4tXHRcdHJldHVybiAxO1xuLVx0fVxuLVxuLVx0LyogTGV0J3MgdHJ5IGRldGFjaGluZyBpdCBub3cgaXQgaXMgYWN0dWFsbHkgYXR0YWNoZWQgKi9cbi1cdHJldCA9IGJwZl9wcm9nX2RldGFjaDIocHJvZ2ZkLCBsaXJjZmQsIEJQRl9MSVJDX01PREUyKTtcbi1cdGlmIChyZXQpIHtcbi1cdFx0cHJpbnRmKFwiYnBmX3Byb2dfZGV0YWNoMjogcmV0dXJuZWQgJW1cXG5cIik7XG4tXHRcdHJldHVybiAxO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjI6MDc6MzQuNDIxMTIzNDc2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQwNjQ5NjQ0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipCUEYgU2VsZnRlc3QgQ29udmVyc2lvbiBSZXZpZXcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgcmVmYWN0b3JzIHRoZSBgbGlyY19tb2RlMmAgQlBGIHNlbGZ0ZXN0cy4gQmFzaWNhbGx5LCBpdCdzIHRha2luZyBhbiBvbGQsIGNsdW5raWVyIHN0eWxlIHRlc3QgYW5kIG1vZGVybml6aW5nIGl0LCBtb3ZpbmcgaXQgb3ZlciB0byB0aGUgYHRlc3RfcHJvZ3NgIGZyYW1ld29yay4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIHRoaXMgKmFjdHVhbGx5KiBjaGFuZ2VzIGFueXRoaW5nIGNvcmUgdG8gdGhlIGtlcm5lbCwgb3IgaWYgaXQncyBqdXN0IGEgcmVmYWN0b3Jpbmcgb2YgdGhlIHRlc3QgaXRzZWxmLlxuXG5GaXJzdCBpbnN0aW5jdCBpcyB0aGF0IGl0ICpzaG91bGRuJ3QqIHRvdWNoIGtlcm5lbCBmdW5jdGlvbmFsaXR5LiBJdCdzIGFsbCB3aXRoaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYCBkaXJlY3RvcnksIHdoaWNoIGlzIGV4YWN0bHkgd2hlcmUgSSBleHBlY3QgdG8gc2VlIHRlc3QgY29kZS4gT2theSwgbGV0J3MgY29uZmlybSB0aGF0IHdpdGggYSBtb3JlIHRob3JvdWdoIGNoZWNrIG9mIHRoZSBkaWZmLlxuXG5BbHJpZ2h0LCB0aGUgZmlsZXMgbW9kaWZpZWQgYXJlOiBgLmdpdGlnbm9yZWAsIGBNYWtlZmlsZWAsIGFuZCB0aGUgbWFpbiB0ZXN0IGZpbGVzLiBTcGVjaWZpY2FsbHk6IGBwcm9nX3Rlc3RzL2xpcmNfbW9kZTIuY2AsIGBwcm9ncy9saXJjX21vZGUyLmNgLiBUaGUgb2xkIHN0dWZmIOKAkyBgdGVzdF9saXJjX21vZGUyX2tlcm4uY2AsIGB0ZXN0X2xpcmNfbW9kZTIuc2hgLCBhbmQgYHRlc3RfbGlyY19tb2RlMl91c2VyLmNgIOKAkyBhcmUgYWxsIGJlaW5nICpkZWxldGVkKi4gU28sIHdlJ3JlIHJlcGxhY2luZyB0aGUgb2xkIHRlc3Qgd2l0aCB0aGUgbmV3IG9uZS4gTm8ga2VybmVsIHNvdXJjZSBjb2RlIGlzIGJlaW5nIG1vZGlmaWVkIG91dHNpZGUgb2YgYHRvb2xzL2AuIFRoaXMgY29uZmlybXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50LlxuXG5HaXZlbiB0aGF0IHRoaXMgaXMgYSBwdXJlbHkgc2VsZnRlc3QtcmVsYXRlZCBjaGFuZ2UsIEknbSBjb25maWRlbnQgdGhlcmUgYXJlIHplcm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgaXRzZWxmLiBUaGlzIG1lYW5zIHdlJ3JlIHNhZmUgdG8gbWFyayBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTI1LCJPdXRwdXRUb2tlbnMiOjgwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMjI6MDc6NDIuODI3NjIyMjgzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIEJQRiBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi8pIGJ5IGNvbnZlcnRpbmcgYW4gb2xkLXN0eWxlIHRlc3QgaW50byB0aGUgdGVzdF9wcm9ncyBmcmFtZXdvcmsuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBCUEYgc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvKSBieSBjb252ZXJ0aW5nIGFuIG9sZC1zdHlsZSB0ZXN0IGludG8gdGhlIHRlc3RfcHJvZ3MgZnJhbWV3b3JrLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDIyOjA3OjQyLjgyNzY0MjcyM1oiLCJTZXEiOjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzwc62[1] Phase: Running StartedAt: 2026-08-20 22:08:14 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzwc62[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-20 22:08:14 +0000 UTC FinishedAt: 2026-08-20 22:08:19 +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,}