Name: series-workflowgpscn Phase: Failed StartedAt: 2026-08-06 16:50:57 +0000 UTC FinishedAt: 2026-08-06 17:40:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgpscn[0] Phase: Succeeded StartedAt: 2026-08-06 16:50:57 +0000 UTC FinishedAt: 2026-08-06 17:40:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgpscn[0].run-triage Phase: Succeeded StartedAt: 2026-08-06 16:50:57 +0000 UTC FinishedAt: 2026-08-06 17:40:46 +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+CgkJCTx0ZD4yMDI2LzA4LzA2IDE3OjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgRU43NTgxIE5QVSBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMpLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNvQyBoYXJkd2FyZSBibG9jayB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGUgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgc28gaXQgY2Fubm90IGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTc6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjODAwMjBkNDZmNGZhZWVkOWUwZDUxYWQ0NTliNTRlNDY3YTRhNTYzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgNiAxNzozOTo1NyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuY1xuaW5kZXggYjY3OWJlZDk1MmRlMy4uZTFlMGRkYjkyZjAzNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNcbkBAIC0yMyw2ICYjNDM7MjMsMTIgQEBcbiAjZGVmaW5lIE5QVV9FTjc1ODFfRklSTVdBUkVfUlYzMl9NQVhfU0laRVx0MHgyMDAwMDBcbiAjZGVmaW5lIE5QVV9FTjc1ODFfRklSTVdBUkVfREFUQV9NQVhfU0laRVx0MHgxMDAwMFxuICNkZWZpbmUgTlBVX0RVTVBfU0laRVx0XHRcdFx0NTEyXG4mIzQzOy8qXG4mIzQzOyAqIE1haWxib3ggRE1BIHBheWxvYWQgc2l6ZS4gQ292ZXJzIHNpemVvZihzdHJ1Y3QgcHBlX21ib3hfZGF0YSkgKDI4KSBhbmRcbiYjNDM7ICogV0xBTiBUTFYgbWVzc2FnZXMgKGhlYWRlciAmIzQzOyBwYXlsb2FkKTsgbGFyZ2VzdCBpbi10cmVlIFdMQU4gcGF5bG9hZCB0b2RheVxuJiM0MzsgKiBpcyAxNiBieXRlcyAoSU5PREVfVFhSWF9SRUdfQUREUikuIEtlZXAgaGVhZHJvb20gZm9yIGZ1dHVyZSBjb21tYW5kcy5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgQUlST0hBX05QVV9NQk9YX1NJWkVcdFx0XHQyNTZcbiBcbiAjZGVmaW5lIFJFR19OUFVfTE9DQUxfU1JBTVx0XHQweDBcbiBcbkBAIC0xNjEsMjEgJiM0MzsxNjcsMzIgQEAgc3RydWN0IHdsYW5fbWJveF9kYXRhIHtcbiB9O1xuIFxuIHN0YXRpYyBpbnQgYWlyb2hhX25wdV9zZW5kX21zZyhzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCBpbnQgZnVuY19pZCxcbi1cdFx0XHQgICAgICAgdm9pZCAqcCwgaW50IHNpemUpXG4mIzQzO1x0XHRcdCAgICAgICBjb25zdCB2b2lkICpyZXEsIGludCBzaXplLFxuJiM0MztcdFx0XHQgICAgICAgdm9pZCAqcnNwLCBpbnQgcnNwX29mZiwgaW50IHJzcF9sZW4pXG4ge1xuIFx0dTE2IGNvcmUgPSAwOyAvKiBGSVhNRSAqL1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfbnB1X2NvcmUgKmMgPSBcdTAwMjZucHUtXHUwMDNlY29yZXNbY29yZV07XG4gXHR1MzIgdmFsLCBvZmZzZXQgPSBjb3JlIFx1MDAzY1x1MDAzYyA0O1xuLVx0ZG1hX2FkZHJfdCBkbWFfYWRkcjtcbiBcdGludCByZXQ7XG4gXG4tXHRkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKG5wdS1cdTAwM2VkZXYsIHAsIHNpemUsIERNQV9CSURJUkVDVElPTkFMKTtcbi1cdHJldCA9IGRtYV9tYXBwaW5nX2Vycm9yKG5wdS1cdTAwM2VkZXYsIGRtYV9hZGRyKTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0aWYgKHNpemUgXHUwMDNlIEFJUk9IQV9OUFVfTUJPWF9TSVpFIHx8XG4mIzQzO1x0ICAgIChyc3AgXHUwMDI2XHUwMDI2IChyc3Bfb2ZmIFx1MDAzYyAwIHx8IHJzcF9sZW4gXHUwMDNjIDAgfHxcbiYjNDM7XHRcdCAgICAgcnNwX29mZiAmIzQzOyByc3BfbGVuIFx1MDAzZSBzaXplKSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdHNwaW5fbG9ja19iaChcdTAwMjZucHUtXHUwMDNlY29yZXNbY29yZV0ubG9jayk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNYWlsYm94IHBheWxvYWRzIGFyZSBiaWRpcmVjdGlvbmFsIChDUFUgcmVxdWVzdCwgTlBVIHJlc3BvbnNlKS5cbiYjNDM7XHQgKiBPbiBFTjc1ODEmIzQzO01UNzk5Niwgc3RyZWFtaW5nIERNQV9CSURJUkVDVElPTkFMIGFnYWluc3QgdGhlXG4mIzQzO1x0ICogY2FsbGVyIGt6YWxsb2MoKSBidWZmZXIgY2FuIGxlYXZlIFdMQU5fRlVOQ19HRVRfV0FJVF9OUFVfVkVSU0lPTlxuJiM0MztcdCAqIHJlYWRpbmcgYXMgMC4wIGRlc3BpdGUgTUJPWCBzdWNjZXNzLiBSZXVzZSBhIHByb2JlLXRpbWUgY29oZXJlbnRcbiYjNDM7XHQgKiBib3VuY2UgYnVmZmVyIHVuZGVyIHRoZSBwZXItY29yZSBsb2NrIChhbHNvIHVzZWQgZnJvbSBQUEVcbiYjNDM7XHQgKiBmb2VfY29tbWl0IHVuZGVyIGF0b21pYyBjb250ZXh0KS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2Yy1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0bWVtY3B5KGMtXHUwMDNlYnVmLCByZXEsIHNpemUpO1xuIFxuLVx0cmVnbWFwX3dyaXRlKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMCkgJiM0Mzsgb2Zmc2V0LCBkbWFfYWRkcik7XG4mIzQzO1x0cmVnbWFwX3dyaXRlKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMCkgJiM0Mzsgb2Zmc2V0LCBjLVx1MDAzZWFkZHIpO1xuIFx0cmVnbWFwX3dyaXRlKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMSkgJiM0Mzsgb2Zmc2V0LCBzaXplKTtcbiBcdHJlZ21hcF9yZWFkKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMikgJiM0Mzsgb2Zmc2V0LCBcdTAwMjZ2YWwpO1xuIFx0cmVnbWFwX3dyaXRlKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMikgJiM0Mzsgb2Zmc2V0LCB2YWwgJiM0MzsgMSk7XG5AQCAtMTg5LDkgJiM0MzsyMDYsMTAgQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X3NlbmRfbXNnKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBmdW5jX2lkLFxuIFx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IEZJRUxEX0dFVChNQk9YX01TR19TVEFUVVMsIHZhbCkgIT0gTlBVX01CT1hfU1VDQ0VTUylcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcbi1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5wdS1cdTAwM2Vjb3Jlc1tjb3JlXS5sb2NrKTtcbiYjNDM7XHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgcnNwKVxuJiM0MztcdFx0bWVtY3B5KHJzcCwgYy1cdTAwM2VidWYgJiM0MzsgcnNwX29mZiwgcnNwX2xlbik7XG4gXG4tXHRkbWFfdW5tYXBfc2luZ2xlKG5wdS1cdTAwM2VkZXYsIGRtYV9hZGRyLCBzaXplLCBETUFfQklESVJFQ1RJT05BTCk7XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Yy1cdTAwM2Vsb2NrKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTM0Myw3ICYjNDM7MzYxLDcgQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X3BwZV9pbml0KHN0cnVjdCBhaXJvaGFfbnB1ICpucHUpXG4gXHRwcGVfZGF0YS1cdTAwM2Vpbml0X2luZm8ud2FuX21vZGUgPSBRRE1BX1dBTl9FVEhFUjtcbiBcbiBcdGVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19QUEUsIHBwZV9kYXRhLFxuLVx0XHRcdFx0ICBzaXplb2YoKnBwZV9kYXRhKSk7XG4mIzQzO1x0XHRcdFx0ICBzaXplb2YoKnBwZV9kYXRhKSwgTlVMTCwgMCwgMCk7XG4gXHRrZnJlZShwcGVfZGF0YSk7XG4gXG4gXHRyZXR1cm4gZXJyO1xuQEAgLTM2Miw3ICYjNDM7MzgwLDcgQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X3BwZV9kZWluaXQoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSlcbiBcdHBwZV9kYXRhLVx1MDAzZWZ1bmNfaWQgPSBQUEVfRlVOQ19TRVRfV0FJVF9IV05BVF9ERUlOSVQ7XG4gXG4gXHRlcnIgPSBhaXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgTlBVX0ZVTkNfUFBFLCBwcGVfZGF0YSxcbi1cdFx0XHRcdCAgc2l6ZW9mKCpwcGVfZGF0YSkpO1xuJiM0MztcdFx0XHRcdCAgc2l6ZW9mKCpwcGVfZGF0YSksIE5VTEwsIDAsIDApO1xuIFx0a2ZyZWUocHBlX2RhdGEpO1xuIFxuIFx0cmV0dXJuIGVycjtcbkBAIC0zODYsNyAmIzQzOzQwNCw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcGVfZmx1c2hfc3JhbV9lbnRyaWVzKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsXG4gXHRwcGVfZGF0YS1cdTAwM2VzZXRfaW5mby5zaXplID0gc3JhbV9udW1fZW50cmllcztcbiBcbiBcdGVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19QUEUsIHBwZV9kYXRhLFxuLVx0XHRcdFx0ICBzaXplb2YoKnBwZV9kYXRhKSk7XG4mIzQzO1x0XHRcdFx0ICBzaXplb2YoKnBwZV9kYXRhKSwgTlVMTCwgMCwgMCk7XG4gXHRrZnJlZShwcGVfZGF0YSk7XG4gXG4gXHRyZXR1cm4gZXJyO1xuQEAgLTQxMSw3ICYjNDM7NDI5LDcgQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X2ZvZV9jb21taXRfZW50cnkoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSxcbiBcdFx0XHRcdFx0ICA6IFBQRV9TUkFNX1NFVF9FTlRSWTtcbiBcbiBcdGVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19QUEUsIHBwZV9kYXRhLFxuLVx0XHRcdFx0ICBzaXplb2YoKnBwZV9kYXRhKSk7XG4mIzQzO1x0XHRcdFx0ICBzaXplb2YoKnBwZV9kYXRhKSwgTlVMTCwgMCwgMCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIG91dDtcbiBcbkBAIC00MjAsNyAmIzQzOzQzOCw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX25wdV9mb2VfY29tbWl0X2VudHJ5KHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsXG4gXHRwcGVfZGF0YS1cdTAwM2VzZXRfaW5mby5zaXplID0gc2l6ZW9mKHUzMik7XG4gXG4gXHRlcnIgPSBhaXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgTlBVX0ZVTkNfUFBFLCBwcGVfZGF0YSxcbi1cdFx0XHRcdCAgc2l6ZW9mKCpwcGVfZGF0YSkpO1xuJiM0MztcdFx0XHRcdCAgc2l6ZW9mKCpwcGVfZGF0YSksIE5VTEwsIDAsIDApO1xuIG91dDpcbiBcdGtmcmVlKHBwZV9kYXRhKTtcbiBcbkBAIC00NDMsNiAmIzQzOzQ2MSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcGVfc3RhdHNfc2V0dXAoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSxcbiBcdHBwZV9kYXRhLVx1MDAzZXN0YXRzX2luZm8uZm9lX3N0YXRzX2FkZHIgPSBmb2Vfc3RhdHNfYWRkcjtcbiBcbiBcdGVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19QUEUsIHBwZV9kYXRhLFxuJiM0MztcdFx0XHRcdCAgc2l6ZW9mKCpwcGVfZGF0YSksIHBwZV9kYXRhLCAwLFxuIFx0XHRcdFx0ICBzaXplb2YoKnBwZV9kYXRhKSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIG91dDtcbkBAIC00NzUsNyAmIzQzOzQ5NCw4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX25wdV93bGFuX21zZ19zZW5kKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBpZmluZGV4LFxuIFx0d2xhbl9kYXRhLVx1MDAzZWZ1bmNfaWQgPSBmdW5jX2lkO1xuIFx0bWVtY3B5KHdsYW5fZGF0YS1cdTAwM2VkLCBkYXRhLCBkYXRhX2xlbik7XG4gXG4tXHRlcnIgPSBhaXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgTlBVX0ZVTkNfV0lGSSwgd2xhbl9kYXRhLCBsZW4pO1xuJiM0MztcdGVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19XSUZJLCB3bGFuX2RhdGEsIGxlbixcbiYjNDM7XHRcdFx0XHQgIE5VTEwsIDAsIDApO1xuIFx0a2ZyZWUod2xhbl9kYXRhKTtcbiBcbiBcdHJldHVybiBlcnI7XG5AQCAtNDk3LDkgJiM0Mzs1MTcsOSBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfd2xhbl9tc2dfZ2V0KHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBpZmluZGV4LFxuIFx0d2xhbl9kYXRhLVx1MDAzZWZ1bmNfdHlwZSA9IE5QVV9PUF9HRVQ7XG4gXHR3bGFuX2RhdGEtXHUwMDNlZnVuY19pZCA9IGZ1bmNfaWQ7XG4gXG4tXHRlcnIgPSBhaXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgTlBVX0ZVTkNfV0lGSSwgd2xhbl9kYXRhLCBsZW4pO1xuLVx0aWYgKCFlcnIpXG4tXHRcdG1lbWNweShkYXRhLCB3bGFuX2RhdGEtXHUwMDNlZCwgZGF0YV9sZW4pO1xuJiM0MztcdGVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19XSUZJLCB3bGFuX2RhdGEsIGxlbixcbiYjNDM7XHRcdFx0XHQgIGRhdGEsIG9mZnNldG9mKHN0cnVjdCB3bGFuX21ib3hfZGF0YSwgZCksXG4mIzQzO1x0XHRcdFx0ICBkYXRhX2xlbik7XG4gXHRrZnJlZSh3bGFuX2RhdGEpO1xuIFxuIFx0cmV0dXJuIGVycjtcbkBAIC03NzAsNiAmIzQzOzc5MCwxNSBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShucHUtXHUwMDNlY29yZXMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IGFpcm9oYV9ucHVfY29yZSAqY29yZSA9IFx1MDAyNm5wdS1cdTAwM2Vjb3Jlc1tpXTtcbiYjNDM7XG4mIzQzO1x0XHRjb3JlLVx1MDAzZWJ1ZiA9IGRtYW1fYWxsb2NfY29oZXJlbnQoZGV2LCBBSVJPSEFfTlBVX01CT1hfU0laRSxcbiYjNDM7XHRcdFx0XHRcdFx0XHUwMDI2Y29yZS1cdTAwM2VhZGRyLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRcdGlmICghY29yZS1cdTAwM2VidWYpXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRlcnIgPSBhaXJvaGFfbnB1X3J1bl9maXJtd2FyZShkZXYsIGJhc2UsIFx1MDAyNnJlcyk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgXCYjMzQ7ZmFpbGVkIHRvIHJ1biBucHUgZmlybXdhcmVcXG5cJiMzNDspO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc29jL2Fpcm9oYS9haXJvaGFfb2ZmbG9hZC5oIGIvaW5jbHVkZS9saW51eC9zb2MvYWlyb2hhL2Fpcm9oYV9vZmZsb2FkLmhcbmluZGV4IDc1ODlmY2NmZWVmNmQuLjE2YTk4OGFkNzQ2N2MgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NvYy9haXJvaGEvYWlyb2hhX29mZmxvYWQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zb2MvYWlyb2hhL2Fpcm9oYV9vZmZsb2FkLmhcbkBAIC0xNzMsNiAmIzQzOzE3Myw5IEBAIHN0cnVjdCBhaXJvaGFfbnB1IHtcbiBcdFx0LyogcHJvdGVjdCBjb25jdXJyZW50IG5wdSBtZW1vcnkgYWNjZXNzZXMgKi9cbiBcdFx0c3BpbmxvY2tfdCBsb2NrO1xuIFx0XHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd2R0X3dvcms7XG4mIzQzO1x0XHQvKiBDb2hlcmVudCBib3VuY2UgYnVmZmVyIGZvciBtYWlsYm94IGNtZC9yc3AgKi9cbiYjNDM7XHRcdHZvaWQgKmJ1ZjtcbiYjNDM7XHRcdGRtYV9hZGRyX3QgYWRkcjtcbiBcdH0gY29yZXNbTlBVX05VTV9DT1JFU107XG4gXG4gXHRpbnQgaXJxc1tOUFVfTlVNX0lSUV07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTc6NDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgRU43NTgxIE5QVSBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMpLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNvQyBoYXJkd2FyZSBibG9jayB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGUgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgc28gaXQgY2Fubm90IGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjODAwMjBkNDZmNGZhZWVkOWUwZDUxYWQ0NTliNTRlNDY3YTRhNTYzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgNiAxNzozOTo1NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jCmluZGV4IGI2NzliZWQ5NTJkZTMuLmUxZTBkZGI5MmYwMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYwpAQCAtMjMsNiAmIzQzOzIzLDEyIEBACiAjZGVmaW5lIE5QVV9FTjc1ODFfRklSTVdBUkVfUlYzMl9NQVhfU0laRQkweDIwMDAwMAogI2RlZmluZSBOUFVfRU43NTgxX0ZJUk1XQVJFX0RBVEFfTUFYX1NJWkUJMHgxMDAwMAogI2RlZmluZSBOUFVfRFVNUF9TSVpFCQkJCTUxMgomIzQzOy8qCiYjNDM7ICogTWFpbGJveCBETUEgcGF5bG9hZCBzaXplLiBDb3ZlcnMgc2l6ZW9mKHN0cnVjdCBwcGVfbWJveF9kYXRhKSAoMjgpIGFuZAomIzQzOyAqIFdMQU4gVExWIG1lc3NhZ2VzIChoZWFkZXIgJiM0MzsgcGF5bG9hZCk7IGxhcmdlc3QgaW4tdHJlZSBXTEFOIHBheWxvYWQgdG9kYXkKJiM0MzsgKiBpcyAxNiBieXRlcyAoSU5PREVfVFhSWF9SRUdfQUREUikuIEtlZXAgaGVhZHJvb20gZm9yIGZ1dHVyZSBjb21tYW5kcy4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIEFJUk9IQV9OUFVfTUJPWF9TSVpFCQkJMjU2CiAKICNkZWZpbmUgUkVHX05QVV9MT0NBTF9TUkFNCQkweDAKIApAQCAtMTYxLDIxICYjNDM7MTY3LDMyIEBAIHN0cnVjdCB3bGFuX21ib3hfZGF0YSB7CiB9OwogCiBzdGF0aWMgaW50IGFpcm9oYV9ucHVfc2VuZF9tc2coc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGZ1bmNfaWQsCi0JCQkgICAgICAgdm9pZCAqcCwgaW50IHNpemUpCiYjNDM7CQkJICAgICAgIGNvbnN0IHZvaWQgKnJlcSwgaW50IHNpemUsCiYjNDM7CQkJICAgICAgIHZvaWQgKnJzcCwgaW50IHJzcF9vZmYsIGludCByc3BfbGVuKQogewogCXUxNiBjb3JlID0gMDsgLyogRklYTUUgKi8KJiM0MzsJc3RydWN0IGFpcm9oYV9ucHVfY29yZSAqYyA9ICZhbXA7bnB1LSZndDtjb3Jlc1tjb3JlXTsKIAl1MzIgdmFsLCBvZmZzZXQgPSBjb3JlICZsdDsmbHQ7IDQ7Ci0JZG1hX2FkZHJfdCBkbWFfYWRkcjsKIAlpbnQgcmV0OwogCi0JZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZShucHUtJmd0O2RldiwgcCwgc2l6ZSwgRE1BX0JJRElSRUNUSU9OQUwpOwotCXJldCA9IGRtYV9tYXBwaW5nX2Vycm9yKG5wdS0mZ3Q7ZGV2LCBkbWFfYWRkcik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKJiM0MzsJaWYgKHNpemUgJmd0OyBBSVJPSEFfTlBVX01CT1hfU0laRSB8fAomIzQzOwkgICAgKHJzcCAmYW1wOyZhbXA7IChyc3Bfb2ZmICZsdDsgMCB8fCByc3BfbGVuICZsdDsgMCB8fAomIzQzOwkJICAgICByc3Bfb2ZmICYjNDM7IHJzcF9sZW4gJmd0OyBzaXplKSkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKIAotCXNwaW5fbG9ja19iaCgmYW1wO25wdS0mZ3Q7Y29yZXNbY29yZV0ubG9jayk7CiYjNDM7CS8qCiYjNDM7CSAqIE1haWxib3ggcGF5bG9hZHMgYXJlIGJpZGlyZWN0aW9uYWwgKENQVSByZXF1ZXN0LCBOUFUgcmVzcG9uc2UpLgomIzQzOwkgKiBPbiBFTjc1ODEmIzQzO01UNzk5Niwgc3RyZWFtaW5nIERNQV9CSURJUkVDVElPTkFMIGFnYWluc3QgdGhlCiYjNDM7CSAqIGNhbGxlciBremFsbG9jKCkgYnVmZmVyIGNhbiBsZWF2ZSBXTEFOX0ZVTkNfR0VUX1dBSVRfTlBVX1ZFUlNJT04KJiM0MzsJICogcmVhZGluZyBhcyAwLjAgZGVzcGl0ZSBNQk9YIHN1Y2Nlc3MuIFJldXNlIGEgcHJvYmUtdGltZSBjb2hlcmVudAomIzQzOwkgKiBib3VuY2UgYnVmZmVyIHVuZGVyIHRoZSBwZXItY29yZSBsb2NrIChhbHNvIHVzZWQgZnJvbSBQUEUKJiM0MzsJICogZm9lX2NvbW1pdCB1bmRlciBhdG9taWMgY29udGV4dCkuCiYjNDM7CSAqLwomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtjLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJbWVtY3B5KGMtJmd0O2J1ZiwgcmVxLCBzaXplKTsKIAotCXJlZ21hcF93cml0ZShucHUtJmd0O3JlZ21hcCwgUkVHX0NSX01CUTBfQ1RSTCgwKSAmIzQzOyBvZmZzZXQsIGRtYV9hZGRyKTsKJiM0MzsJcmVnbWFwX3dyaXRlKG5wdS0mZ3Q7cmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDApICYjNDM7IG9mZnNldCwgYy0mZ3Q7YWRkcik7CiAJcmVnbWFwX3dyaXRlKG5wdS0mZ3Q7cmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDEpICYjNDM7IG9mZnNldCwgc2l6ZSk7CiAJcmVnbWFwX3JlYWQobnB1LSZndDtyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMikgJiM0Mzsgb2Zmc2V0LCAmYW1wO3ZhbCk7CiAJcmVnbWFwX3dyaXRlKG5wdS0mZ3Q7cmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDIpICYjNDM7IG9mZnNldCwgdmFsICYjNDM7IDEpOwpAQCAtMTg5LDkgJiM0MzsyMDYsMTAgQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X3NlbmRfbXNnKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBmdW5jX2lkLAogCWlmICghcmV0ICZhbXA7JmFtcDsgRklFTERfR0VUKE1CT1hfTVNHX1NUQVRVUywgdmFsKSAhPSBOUFVfTUJPWF9TVUNDRVNTKQogCQlyZXQgPSAtRUlOVkFMOwogCi0Jc3Bpbl91bmxvY2tfYmgoJmFtcDtucHUtJmd0O2NvcmVzW2NvcmVdLmxvY2spOwomIzQzOwlpZiAoIXJldCAmYW1wOyZhbXA7IHJzcCkKJiM0MzsJCW1lbWNweShyc3AsIGMtJmd0O2J1ZiAmIzQzOyByc3Bfb2ZmLCByc3BfbGVuKTsKIAotCWRtYV91bm1hcF9zaW5nbGUobnB1LSZndDtkZXYsIGRtYV9hZGRyLCBzaXplLCBETUFfQklESVJFQ1RJT05BTCk7CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7Yy0mZ3Q7bG9jayk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzQzLDcgJiM0MzszNjEsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfcHBlX2luaXQoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSkKIAlwcGVfZGF0YS0mZ3Q7aW5pdF9pbmZvLndhbl9tb2RlID0gUURNQV9XQU5fRVRIRVI7CiAKIAllcnIgPSBhaXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgTlBVX0ZVTkNfUFBFLCBwcGVfZGF0YSwKLQkJCQkgIHNpemVvZigqcHBlX2RhdGEpKTsKJiM0MzsJCQkJICBzaXplb2YoKnBwZV9kYXRhKSwgTlVMTCwgMCwgMCk7CiAJa2ZyZWUocHBlX2RhdGEpOwogCiAJcmV0dXJuIGVycjsKQEAgLTM2Miw3ICYjNDM7MzgwLDcgQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X3BwZV9kZWluaXQoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSkKIAlwcGVfZGF0YS0mZ3Q7ZnVuY19pZCA9IFBQRV9GVU5DX1NFVF9XQUlUX0hXTkFUX0RFSU5JVDsKIAogCWVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19QUEUsIHBwZV9kYXRhLAotCQkJCSAgc2l6ZW9mKCpwcGVfZGF0YSkpOwomIzQzOwkJCQkgIHNpemVvZigqcHBlX2RhdGEpLCBOVUxMLCAwLCAwKTsKIAlrZnJlZShwcGVfZGF0YSk7CiAKIAlyZXR1cm4gZXJyOwpAQCAtMzg2LDcgJiM0Mzs0MDQsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfcHBlX2ZsdXNoX3NyYW1fZW50cmllcyhzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LAogCXBwZV9kYXRhLSZndDtzZXRfaW5mby5zaXplID0gc3JhbV9udW1fZW50cmllczsKIAogCWVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19QUEUsIHBwZV9kYXRhLAotCQkJCSAgc2l6ZW9mKCpwcGVfZGF0YSkpOwomIzQzOwkJCQkgIHNpemVvZigqcHBlX2RhdGEpLCBOVUxMLCAwLCAwKTsKIAlrZnJlZShwcGVfZGF0YSk7CiAKIAlyZXR1cm4gZXJyOwpAQCAtNDExLDcgJiM0Mzs0MjksNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfZm9lX2NvbW1pdF9lbnRyeShzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LAogCQkJCQkgIDogUFBFX1NSQU1fU0VUX0VOVFJZOwogCiAJZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1BQRSwgcHBlX2RhdGEsCi0JCQkJICBzaXplb2YoKnBwZV9kYXRhKSk7CiYjNDM7CQkJCSAgc2l6ZW9mKCpwcGVfZGF0YSksIE5VTEwsIDAsIDApOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCkBAIC00MjAsNyAmIzQzOzQzOCw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX25wdV9mb2VfY29tbWl0X2VudHJ5KHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsCiAJcHBlX2RhdGEtJmd0O3NldF9pbmZvLnNpemUgPSBzaXplb2YodTMyKTsKIAogCWVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19QUEUsIHBwZV9kYXRhLAotCQkJCSAgc2l6ZW9mKCpwcGVfZGF0YSkpOwomIzQzOwkJCQkgIHNpemVvZigqcHBlX2RhdGEpLCBOVUxMLCAwLCAwKTsKIG91dDoKIAlrZnJlZShwcGVfZGF0YSk7CiAKQEAgLTQ0Myw2ICYjNDM7NDYxLDcgQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X3BwZV9zdGF0c19zZXR1cChzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LAogCXBwZV9kYXRhLSZndDtzdGF0c19pbmZvLmZvZV9zdGF0c19hZGRyID0gZm9lX3N0YXRzX2FkZHI7CiAKIAllcnIgPSBhaXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgTlBVX0ZVTkNfUFBFLCBwcGVfZGF0YSwKJiM0MzsJCQkJICBzaXplb2YoKnBwZV9kYXRhKSwgcHBlX2RhdGEsIDAsCiAJCQkJICBzaXplb2YoKnBwZV9kYXRhKSk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CkBAIC00NzUsNyAmIzQzOzQ5NCw4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX25wdV93bGFuX21zZ19zZW5kKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBpZmluZGV4LAogCXdsYW5fZGF0YS0mZ3Q7ZnVuY19pZCA9IGZ1bmNfaWQ7CiAJbWVtY3B5KHdsYW5fZGF0YS0mZ3Q7ZCwgZGF0YSwgZGF0YV9sZW4pOwogCi0JZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1dJRkksIHdsYW5fZGF0YSwgbGVuKTsKJiM0MzsJZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1dJRkksIHdsYW5fZGF0YSwgbGVuLAomIzQzOwkJCQkgIE5VTEwsIDAsIDApOwogCWtmcmVlKHdsYW5fZGF0YSk7CiAKIAlyZXR1cm4gZXJyOwpAQCAtNDk3LDkgJiM0Mzs1MTcsOSBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfd2xhbl9tc2dfZ2V0KHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBpZmluZGV4LAogCXdsYW5fZGF0YS0mZ3Q7ZnVuY190eXBlID0gTlBVX09QX0dFVDsKIAl3bGFuX2RhdGEtJmd0O2Z1bmNfaWQgPSBmdW5jX2lkOwogCi0JZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1dJRkksIHdsYW5fZGF0YSwgbGVuKTsKLQlpZiAoIWVycikKLQkJbWVtY3B5KGRhdGEsIHdsYW5fZGF0YS0mZ3Q7ZCwgZGF0YV9sZW4pOwomIzQzOwllcnIgPSBhaXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgTlBVX0ZVTkNfV0lGSSwgd2xhbl9kYXRhLCBsZW4sCiYjNDM7CQkJCSAgZGF0YSwgb2Zmc2V0b2Yoc3RydWN0IHdsYW5fbWJveF9kYXRhLCBkKSwKJiM0MzsJCQkJICBkYXRhX2xlbik7CiAJa2ZyZWUod2xhbl9kYXRhKTsKIAogCXJldHVybiBlcnI7CkBAIC03NzAsNiAmIzQzOzc5MCwxNSBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKG5wdS0mZ3Q7Y29yZXMpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGFpcm9oYV9ucHVfY29yZSAqY29yZSA9ICZhbXA7bnB1LSZndDtjb3Jlc1tpXTsKJiM0MzsKJiM0MzsJCWNvcmUtJmd0O2J1ZiA9IGRtYW1fYWxsb2NfY29oZXJlbnQoZGV2LCBBSVJPSEFfTlBVX01CT1hfU0laRSwKJiM0MzsJCQkJCQkmYW1wO2NvcmUtJmd0O2FkZHIsIEdGUF9LRVJORUwpOwomIzQzOwkJaWYgKCFjb3JlLSZndDtidWYpCiYjNDM7CQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KJiM0MzsKIAllcnIgPSBhaXJvaGFfbnB1X3J1bl9maXJtd2FyZShkZXYsIGJhc2UsICZhbXA7cmVzKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgJiMzNDtmYWlsZWQgdG8gcnVuIG5wdSBmaXJtd2FyZVxuJiMzNDspOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb2MvYWlyb2hhL2Fpcm9oYV9vZmZsb2FkLmggYi9pbmNsdWRlL2xpbnV4L3NvYy9haXJvaGEvYWlyb2hhX29mZmxvYWQuaAppbmRleCA3NTg5ZmNjZmVlZjZkLi4xNmE5ODhhZDc0NjdjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NvYy9haXJvaGEvYWlyb2hhX29mZmxvYWQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NvYy9haXJvaGEvYWlyb2hhX29mZmxvYWQuaApAQCAtMTczLDYgJiM0MzsxNzMsOSBAQCBzdHJ1Y3QgYWlyb2hhX25wdSB7CiAJCS8qIHByb3RlY3QgY29uY3VycmVudCBucHUgbWVtb3J5IGFjY2Vzc2VzICovCiAJCXNwaW5sb2NrX3QgbG9jazsKIAkJc3RydWN0IHdvcmtfc3RydWN0IHdkdF93b3JrOwomIzQzOwkJLyogQ29oZXJlbnQgYm91bmNlIGJ1ZmZlciBmb3IgbWFpbGJveCBjbWQvcnNwICovCiYjNDM7CQl2b2lkICpidWY7CiYjNDM7CQlkbWFfYWRkcl90IGFkZHI7CiAJfSBjb3Jlc1tOUFVfTlVNX0NPUkVTXTsKIAogCWludCBpcnFzW05QVV9OVU1fSVJRXTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY3MgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDM2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaCB0byBhbiBBaXJvaGEgTlBVIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBhZmZlY3RpbmcgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIGBhaXJvaGFfbnB1X3NlbmRfbXNnYCDigJMgaXQmIzM5O3Mgc2hpZnRpbmcgdG8gYSBwcmUtYWxsb2NhdGVkIGNvaGVyZW50IERNQSBidWZmZXIgaW5zdGVhZCBvZiB0aGUgZHluYW1pYyBtYXBwaW5nL3VubWFwcGluZyBhcHByb2FjaC4gU21hcnQgbW92ZSwgdGhhdCBzaG91bGQgYmUgbW9yZSBlZmZpY2llbnQuIFRoZSBhZGRlZCBgcnNwYCwgYHJzcF9vZmZgLCBhbmQgYHJzcF9sZW5gIHBhcmFtZXRlcnMgY2xhcmlmeSBob3cgdGhlIHJlc3BvbnNlIGRhdGEgaXMgaGFuZGxlZCwgbWFraW5nIHRoaXMgYSBtdWNoIGNsZWFuZXIgYXBwcm9hY2guIEFuZCB0aGlzIHByZS1hbGxvY2F0ZWQgYnVmZmVyIGlzIGJlaW5nIGRvbmUgYXQgcHJvYmUgdGltZSB1c2luZyBgZG1hbV9hbGxvY19jb2hlcmVudGAuIE1ha2VzIHNlbnNlLCBzZXRzIHRoaW5ncyB1cCBlYXJseSBhbmQga2VlcHMgdGhpbmdzIHJ1bm5pbmcgc21vb3RobHkuCgpOb3csIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIGNvbnNpZGVyIHRoZSBiaWdnZXIgcGljdHVyZS4gSXMgdGhpcyBhIGRyaXZlciBmb3Igc29tZSBzcGVjaWZpYywgdW4tZW11bGF0ZWQgaGFyZHdhcmU/IFRoZSBkcml2ZXIgaXMgaW4gdGhlIGBhaXJvaGFgIGRpcmVjdG9yeSwgd2hpY2ggaW5kaWNhdGVzIEFpcm9oYSwgYSBzdWJzaWRpYXJ5IG9mIE1lZGlhVGVrLCBpcyB0aGUgdmVuZG9yIGhlcmUuIEl0IGlzIGxpa2VseSB0aGF0IHRoaXMgZHJpdmVyIGlzIGZvciB0aGUgQWlyb2hhIEVONzU4MSBTb0MgTlBVIChOZXR3b3JrIFByb2Nlc3NpbmcgVW5pdCkuIEkga25vdyB3ZSBjYW7igJl0IGVtdWxhdGUgKmV2ZXJ5KiBwaWVjZSBvZiBoYXJkd2FyZSBpbiBRRU1VLiBEb2VzIFFFTVUgc3VwcG9ydCB0aGUgRU43NTgxPyBObywgaXQgbG9va3MgbGlrZSBpdCBpc24mIzM5O3QuCgpIYW5nIG9uLi4uIHRoZSBwcm9tcHQgbWVudGlvbnMgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuIFRoaXMgaXMgYW4gU29DIGRyaXZlciwgbm90IGEgUENJZSBjYXJkLiBCdXQgdGhlIGtleSBpcyB0aGF0IGl0JiMzOTtzIHN0aWxsIGEgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlciB0aGF0IGlzbiYjMzk7dCBlbXVsYXRlZCBieSBRRU1VLiBUaGlzIHBhdGNoIHJlcXVpcmVzIGFuIEVONzU4MSB0byB0ZXN0LCBhbmQgdGhhdCByZXF1aXJlcyBhY3R1YWwgaGFyZHdhcmUsIG5vdCBhbiBlbXVsYXRvci4KCknigJltIGdvaW5nIHRvIGNoZWNrIHRoZSBrZXJuZWwgdHJlZSBmb3IgYW55IG1lbnRpb24gb2YgJiMzNDthaXJvaGEmIzM0Oy4gU2VlIGlmIHRoZXJlJiMzOTtzIGFueSBoaW50IG9mIGVtdWxhdGlvbiBvciBldmVuIGEgbWV0aG9kIG9mIHJlYWNoaW5nIHRoZSBoYXJkd2FyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthaXJvaGFfbnB1X3Byb2JlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM9NzA1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyByZWdtYXBfY29uZmlnID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNzEyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo3MTM6c3RhdGljIGludCBhaXJvaGFfbnB1X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTcxNC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYz04NDI9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWlyb2hhX25wdV9kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjg0MzpcdC5wcm9iZSA9IGFpcm9oYV9ucHVfcHJvYmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTg0NC1cdC5yZW1vdmUgPSBhaXJvaGFfbnB1X3JlbW92ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzAyCgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMTk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRmVhc2liaWxpdHkgb2YgQWNjZXNzaW5nIHRoZSBBaXJvaGEgTlBVIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgYWlyb2hhX25wdWAgZHJpdmVyLCBhbmQgbXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IGl0JiMzOTtzIGdvaW5nIHRvIGJlIHRyaWNreSB0byBnZXQgYXQgaW4gYSB0eXBpY2FsIHZpcnR1YWxpemVkIHNldHVwLiBQbGF0Zm9ybSBkcml2ZXJzLCBlc3BlY2lhbGx5IHRob3NlIHRpZWQgdG8gYSBzcGVjaWZpYyBTb0MgbGlrZSB0aGlzIEFpcm9oYSBFTjc1ODEsIGFyZSB1c3VhbGx5IG91dCBvZiByZWFjaCB1bmxlc3Mgd2UgaGF2ZSBhIGZ1bGwtYmxvd24gZW11bGF0aW9uIG9mIHRoYXQgU29DLCB3aGljaCwgbGV0JiMzOTtzIGJlIGhvbmVzdCwgaXNuJiMzOTt0IGFsd2F5cyByZWFkaWx5IGF2YWlsYWJsZSwgZXNwZWNpYWxseSBmb3Igc29tZXRoaW5nIGxpa2UgdGhpcy4gSSBjYW4gdGhpbmsgb2YgYSBmZXcgQVJNIGJvYXJkcyBpbiBRRU1VIHRoYXQgKm1pZ2h0KiBiZSBzaW11bGF0ZWQgd2VsbCBlbm91Z2gsIGJ1dCBJJiMzOTttIG5vdCBiZXR0aW5nIG9uIGl0LgoKU28sIHRoZSBmaXJzdCB0aGluZyB0byBjaGVjayBpcyBpZiB0aGVyZSYjMzk7cyAqYW55KiB3YXkgdG8gcmVhY2ggdGhpcyBjb2RlIHdpdGhvdXQgZGlyZWN0IGhhcmR3YXJlIGFjY2Vzcy4gTXkgZ3V0IHNheXMgbm8sIGJ1dCB3ZSBuZWVkIHRvIHZlcmlmeS4gSSBzZWUgaXQmIzM5O3MgYSBwbGF0Zm9ybSBkZXZpY2UsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIERldmljZSBUcmVlLiBJZiB0aGUgRGV2aWNlIFRyZWUgaXNuJiMzOTt0IHByZXNlbnQgb3IgZG9lc24mIzM5O3QgZGVzY3JpYmUgdGhlIGhhcmR3YXJlLCB0aGUgYHByb2JlYCBmdW5jdGlvbiBqdXN0IHdvbiYjMzk7dCBiZSBjYWxsZWQsIHdoaWNoIGlzIGEgYmlnIGh1cmRsZS4gRXZlbiBpZiB3ZSAqZGlkKiBwcm92aWRlIGEgZHVtbXkgRGV2aWNlIFRyZWUsIHRoaXMgZHJpdmVyIHVzZXMgdGhpbmdzIGxpa2UgYGRldm1faW9yZW1hcF9yZXNvdXJjZWAsIGBkZXZtX3JlcXVlc3RfaXJxYCwgYW5kIGByZWdtYXBfaW5pdF9tbWlvYCwgYW5kIHRoZW4gaXQgZ2V0cyB0byBgYWlyb2hhX25wdV9ydW5fZmlybXdhcmVgLCB3aGljaCBtb3N0IGxpa2VseSBpbnRlcmFjdHMgZGlyZWN0bHkgd2l0aCB0aGUgaGFyZHdhcmUuCgpUaW1lIHRvIGRpdmUgaW50byBgYWlyb2hhX25wdV9wcm9iZWAuIEkgbmVlZCB0byBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBoYXBwZW5pbmcgaW4gdGhhdCBmdW5jdGlvbiB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGp1c3QgaG93IHRpZ2h0bHkgY291cGxlZCB0aGlzIGlzIHRvIHRoZSBzcGVjaWZpYyBoYXJkd2FyZS4gVGhpcyBpcyBnb2luZyB0byBiZSBteSBrZXkgZm9jdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzEzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzEzOlx0c3RhdGljIGludCBhaXJvaGFfbnB1X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gNzE0Olx0e1xuIDcxNTpcdFx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG4gNzE2Olx0XHRzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1O1xuIDcxNzpcdFx0c3RydWN0IHJlc291cmNlIHJlcztcbiA3MTg6XHRcdHZvaWQgX19pb21lbSAqYmFzZTtcbiA3MTk6XHRcdGludCBpLCBpcnEsIGVycjtcbiA3MjA6XHRcdHUzMiB2YWw7XG4gNzIxOlx0XG4gNzIyOlx0XHRiYXNlID0gZGV2bV9wbGF0Zm9ybV9pb3JlbWFwX3Jlc291cmNlKHBkZXYsIDApO1xuIDcyMzpcdFx0aWYgKElTX0VSUihiYXNlKSlcbiA3MjQ6XHRcdFx0cmV0dXJuIFBUUl9FUlIoYmFzZSk7XG4gNzI1Olx0XG4gNzI2Olx0XHRucHUgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKm5wdSksIEdGUF9LRVJORUwpO1xuIDcyNzpcdFx0aWYgKCFucHUpXG4gNzI4Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDcyOTpcdFxuIDczMDpcdFx0bnB1LVx1MDAzZWRldiA9IGRldjtcbiA3MzE6XHRcdG5wdS1cdTAwM2VvcHMucHBlX2luaXQgPSBhaXJvaGFfbnB1X3BwZV9pbml0O1xuIDczMjpcdFx0bnB1LVx1MDAzZW9wcy5wcGVfZGVpbml0ID0gYWlyb2hhX25wdV9wcGVfZGVpbml0O1xuIDczMzpcdFx0bnB1LVx1MDAzZW9wcy5wcGVfaW5pdF9zdGF0cyA9IGFpcm9oYV9ucHVfcHBlX3N0YXRzX3NldHVwO1xuIDczNDpcdFx0bnB1LVx1MDAzZW9wcy5wcGVfZmx1c2hfc3JhbV9lbnRyaWVzID0gYWlyb2hhX25wdV9wcGVfZmx1c2hfc3JhbV9lbnRyaWVzO1xuIDczNTpcdFx0bnB1LVx1MDAzZW9wcy5wcGVfZm9lX2NvbW1pdF9lbnRyeSA9IGFpcm9oYV9ucHVfZm9lX2NvbW1pdF9lbnRyeTtcbiA3MzY6XHRcdG5wdS1cdTAwM2VvcHMud2xhbl9pbml0X3Jlc2VydmVkX21lbW9yeSA9IGFpcm9oYV9ucHVfd2xhbl9pbml0X21lbW9yeTtcbiA3Mzc6XHRcdG5wdS1cdTAwM2VvcHMud2xhbl9zZW5kX21zZyA9IGFpcm9oYV9ucHVfd2xhbl9tc2dfc2VuZDtcbiA3Mzg6XHRcdG5wdS1cdTAwM2VvcHMud2xhbl9nZXRfbXNnID0gYWlyb2hhX25wdV93bGFuX21zZ19nZXQ7XG4gNzM5Olx0XHRucHUtXHUwMDNlb3BzLndsYW5fZ2V0X3F1ZXVlX2FkZHIgPSBhaXJvaGFfbnB1X3dsYW5fcXVldWVfYWRkcl9nZXQ7XG4gNzQwOlx0XHRucHUtXHUwMDNlb3BzLndsYW5fc2V0X2lycV9zdGF0dXMgPSBhaXJvaGFfbnB1X3dsYW5faXJxX3N0YXR1c19zZXQ7XG4gNzQxOlx0XHRucHUtXHUwMDNlb3BzLndsYW5fZ2V0X2lycV9zdGF0dXMgPSBhaXJvaGFfbnB1X3dsYW5faXJxX3N0YXR1c19nZXQ7XG4gNzQyOlx0XHRucHUtXHUwMDNlb3BzLndsYW5fZW5hYmxlX2lycSA9IGFpcm9oYV9ucHVfd2xhbl9pcnFfZW5hYmxlO1xuIDc0MzpcdFx0bnB1LVx1MDAzZW9wcy53bGFuX2Rpc2FibGVfaXJxID0gYWlyb2hhX25wdV93bGFuX2lycV9kaXNhYmxlO1xuIDc0NDpcdFxuIDc0NTpcdFx0bnB1LVx1MDAzZXJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfbW1pbyhkZXYsIGJhc2UsIFx1MDAyNnJlZ21hcF9jb25maWcpO1xuIDc0NjpcdFx0aWYgKElTX0VSUihucHUtXHUwMDNlcmVnbWFwKSlcbiA3NDc6XHRcdFx0cmV0dXJuIFBUUl9FUlIobnB1LVx1MDAzZXJlZ21hcCk7XG4gNzQ4Olx0XG4gNzQ5Olx0XHRlcnIgPSBvZl9yZXNlcnZlZF9tZW1fcmVnaW9uX3RvX3Jlc291cmNlKGRldi1cdTAwM2VvZl9ub2RlLCAwLCBcdTAwMjZyZXMpO1xuIDc1MDpcdFx0aWYgKGVycilcbiA3NTE6XHRcdFx0cmV0dXJuIGVycjtcbiA3NTI6XHRcbiA3NTM6XHRcdGlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7XG4gNzU0Olx0XHRpZiAoaXJxIFx1MDAzYyAwKVxuIDc1NTpcdFx0XHRyZXR1cm4gaXJxO1xuIDc1NjpcdFxuIDc1NzpcdFx0ZXJyID0gZGV2bV9yZXF1ZXN0X2lycShkZXYsIGlycSwgYWlyb2hhX25wdV9tYm94X2hhbmRsZXIsXG4gNzU4Olx0XHRcdFx0ICAgICAgIElSUUZfU0hBUkVELCBcJiMzNDthaXJvaGEtbnB1LW1ib3hcJiMzNDssIG5wdSk7XG4gNzU5Olx0XHRpZiAoZXJyKVxuIDc2MDpcdFx0XHRyZXR1cm4gZXJyO1xuIDc2MTpcdFxuIDc2MjpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShucHUtXHUwMDNlY29yZXMpOyBpJiM0MzsmIzQzOykge1xuIDc2MzpcdFx0XHRzdHJ1Y3QgYWlyb2hhX25wdV9jb3JlICpjb3JlID0gXHUwMDI2bnB1LVx1MDAzZWNvcmVzW2ldO1xuIDc2NDpcdFxuIDc2NTpcdFx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZjb3JlLVx1MDAzZWxvY2spO1xuIDc2NjpcdFx0XHRjb3JlLVx1MDAzZW5wdSA9IG5wdTtcbiA3Njc6XHRcbiA3Njg6XHRcdFx0aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCBpICYjNDM7IDEpO1xuIDc2OTpcdFx0XHRpZiAoaXJxIFx1MDAzYyAwKVxuIDc3MDpcdFx0XHRcdHJldHVybiBpcnE7XG4gNzcxOlx0XG4gNzcyOlx0XHRcdGVyciA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBpcnEsIGFpcm9oYV9ucHVfd2R0X2hhbmRsZXIsXG4gNzczOlx0XHRcdFx0XHQgICAgICAgSVJRRl9TSEFSRUQsIFwmIzM0O2Fpcm9oYS1ucHUtd2R0XCYjMzQ7LCBjb3JlKTtcbiA3NzQ6XHRcdFx0aWYgKGVycilcbiA3NzU6XHRcdFx0XHRyZXR1cm4gZXJyO1xuIDc3NjpcdFxuIDc3NzpcdFx0XHRJTklUX1dPUksoXHUwMDI2Y29yZS1cdTAwM2V3ZHRfd29yaywgYWlyb2hhX25wdV93ZHRfd29yayk7XG4gNzc4Olx0XHR9XG4gNzc5Olx0XG4gNzgwOlx0XHQvKiB3bGFuIElSUSBsaW5lcyAqL1xuIDc4MTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShucHUtXHUwMDNlaXJxcyk7IGkmIzQzOyYjNDM7KSB7XG4gNzgyOlx0XHRcdGlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgaSAmIzQzOyBBUlJBWV9TSVpFKG5wdS1cdTAwM2Vjb3JlcykgJiM0MzsgMSk7XG4gNzgzOlx0XHRcdGlmIChpcnEgXHUwMDNjIDApXG4gNzg0Olx0XHRcdFx0cmV0dXJuIGlycTtcbiA3ODU6XHRcbiA3ODY6XHRcdFx0bnB1LVx1MDAzZWlycXNbaV0gPSBpcnE7XG4gNzg3Olx0XHR9XG4gNzg4Olx0XG4gNzg5Olx0XHRlcnIgPSBkbWFfc2V0X2NvaGVyZW50X21hc2soZGV2LCBETUFfQklUX01BU0soMzIpKTtcbiA3OTA6XHRcdGlmIChlcnIpXG4gNzkxOlx0XHRcdHJldHVybiBlcnI7XG4gNzkyOlx0XG4gNzkzOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKG5wdS1cdTAwM2Vjb3Jlcyk7IGkmIzQzOyYjNDM7KSB7XG4gNzk0Olx0XHRcdHN0cnVjdCBhaXJvaGFfbnB1X2NvcmUgKmNvcmUgPSBcdTAwMjZucHUtXHUwMDNlY29yZXNbaV07XG4gNzk1Olx0XG4gNzk2Olx0XHRcdGNvcmUtXHUwMDNlYnVmID0gZG1hbV9hbGxvY19jb2hlcmVudChkZXYsIEFJUk9IQV9OUFVfTUJPWF9TSVpFLFxuIDc5NzpcdFx0XHRcdFx0XHRcdFx1MDAyNmNvcmUtXHUwMDNlYWRkciwgR0ZQX0tFUk5FTCk7XG4gNzk4Olx0XHRcdGlmICghY29yZS1cdTAwM2VidWYpXG4gNzk5Olx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gODAwOlx0XHR9XG4gODAxOlx0XG4gODAyOlx0XHRlcnIgPSBhaXJvaGFfbnB1X3J1bl9maXJtd2FyZShkZXYsIGJhc2UsIFx1MDAyNnJlcyk7XG4gODAzOlx0XHRpZiAoZXJyKVxuIDgwNDpcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgXCYjMzQ7ZmFpbGVkIHRvIHJ1biBucHUgZmlybXdhcmVcXG5cJiMzNDspO1xuIDgwNTpcdFxuIDgwNjpcdFx0cmVnbWFwX3dyaXRlKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9OUFVfTUlCKDEwKSxcbiA4MDc6XHRcdFx0ICAgICByZXMuc3RhcnQgJiM0MzsgTlBVX0VONzU4MV9GSVJNV0FSRV9SVjMyX01BWF9TSVpFKTtcbiA4MDg6XHRcdHJlZ21hcF93cml0ZShucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTlBVX01JQigxMSksIDB4NDAwMDApOyAvKiBTUkFNIDI1NksgKi9cbiA4MDk6XHRcdHJlZ21hcF93cml0ZShucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTlBVX01JQigxMiksIDApO1xuIDgxMDpcdFx0cmVnbWFwX3dyaXRlKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9OUFVfTUlCKDIxKSwgMSk7XG4gODExOlx0XHRtc2xlZXAoMTAwKTtcbiA4MTI6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjI1CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBBc3Nlc3NtZW50OiBBaXJvaGEgRU43NTgxIE5QVSBEcml2ZXIqKgoKT2theSwgc28gdGhlIGRyaXZlciB1c2VzIGBvZl9yZXNlcnZlZF9tZW1fcmVnaW9uX3RvX3Jlc291cmNlKClgLCB3aGljaCBpcyBhIGtleSBwaWVjZS4gSWYgSSB3YW50ZWQgdG8gZnV6eiB0aGlzLCBJJiMzOTtkIGhhdmUgdG8gZ2V0IHN5emthbGxlciB0byBnZW5lcmF0ZSBhIGRldmljZSB0cmVlIHdpdGggcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbnMuIEkga25vdyBzeXprYWxsZXIgY2FuIGRvIHRoaXMgaW4gc29tZSBjYXNlcywgbWF5YmUgdXNpbmcgcHNldWRvLXN5c2NhbGxzIGxpa2UgYHN5el9pbml0X25ldF9zb2NrZXRgIGlmIGl0IGhhcyBhIGRlZmluaXRpb24gZm9yIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSwgYnV0IHVzdWFsbHkgc3l6a2FsbGVyIGRvZXNuJiMzOTt0IGNyZWF0ZSBwbGF0Zm9ybSBkZXZpY2VzIHdpdGggcmVzZXJ2ZWQgbWVtb3J5IHVubGVzcyB0aGVyZSYjMzk7cyBhIHN5emxhbmcgZGVzY3JpcHRpb24uIEkgdGhvdWdodCwgYnJpZWZseSwgYWJvdXQgYHN5el9nZW5ldGxpbmtfZ2V0X2ZhbWlseWAsIGJ1dCB0aGF0JiMzOTtzIG5vdCB0aGUgcmlnaHQgcGF0aC4gUGxhdGZvcm0gZGV2aWNlcyBhcmUgaW5zdGFudGlhdGVkIHZpYSBkZXZpY2UgdHJlZSBvdmVybGF5cywgcmlnaHQ/IEFuZCBJIHJlY2FsbCBzeXprYWxsZXIgaGFzICpzb21lKiBsaW1pdGVkIHN1cHBvcnQgZm9yIHRob3NlLCBpbiB0aGluZ3MgbGlrZSBgc3l6X21vdW50X2ltYWdlYCwgYnV0IGl0JiMzOTtzIG5vdCBpZGVhbC4KCkNydWNpYWxseSwgdGhpcyBpcyBhIG5ldHdvcmsgcHJvY2Vzc2luZyB1bml0IGRyaXZlciBmb3IgdGhlIEFpcm9oYSBFTjc1ODEuIFRoZSBwcm9tcHQgbWVudGlvbnMgYSBzcGVjaWZpYyBsaXN0IG9mIGRldmljZXMgdG8gY2hlY2suIE5vdywgaXQmIzM5O3Mgbm90IGEgUENJZSBjYXJkLCBidXQgaXQgKmlzKiB2ZW5kb3Itc3BlY2lmaWMgU29DIGhhcmR3YXJlIOKAkyB0aGUgRU43NTgxLiBBbmQgdGhlIHByb21wdCBpcyBjbGVhciB0aGF0IGRyaXZlcnMgbmVlZGluZyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gUUVNVSBhcmUgYSAmIzM0O25vLWdvJiMzNDsuIFRoZSBFTjc1ODEgbmVlZHMgcGh5c2ljYWwgaGFyZHdhcmUgYW5kIGFzIGZhciBhcyBJIGtub3csIHN0YW5kYXJkIFFFTVUgZG9lc24mIzM5O3QgZW11bGF0ZSB0aGUgRU43NTgxLiBUaGlzIGxvb2tzIGxpa2UgYSBkZWFkIGVuZCBmb3Igc3RhbmRhcmQgUUVNVSBmdXp6aW5nLgoKQnV0IHdhaXQsIGhvbGQgb24uIElzIGl0ICpwb3NzaWJsZSogdG8gcmVhY2ggdGhpcyBjb2RlIGF0IGFsbCBpbiBRRU1VPyBJIHNob3VsZCBxdWlja2x5IGNoZWNrIGlmIHRoZXJlIGlzICphbnkqIEVONzU4MSBlbXVsYXRpb24gYXZhaWxhYmxlLiBOb3BlLCBub3QgdGhhdCBJIGNhbiBmaW5kLgoKU28sIGNhbiBzeXprYWxsZXIgZnV6eiB0aGlzPyBXZWxsLCB0aGUgcXVlc3Rpb24gYm9pbHMgZG93biB0byB3aGV0aGVyIHN5emthbGxlciBjYW4gaW5zdGFudGlhdGUgdGhlIHBsYXRmb3JtIGRldmljZS4gU3l6a2FsbGVyJiMzOTtzIGBzeXpfZGV2X2luaXRgIG9yIHNpbWlsYXIgbWlnaHQgYmUgYWJsZSB0byBjcmVhdGUgcGxhdGZvcm0gZGV2aWNlcywgaWYgSSBjYW4gbWFwIG1lbW9yeSwgcHJvdmlkZSBJUlFzLCBhbmQgbW9zdCBpbXBvcnRhbnRseSwgdGhlIHJlc2VydmVkIG1lbW9yeSByZWdpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlLCBzbyBhIGNoZWNrIG9uIHdoZXRoZXIgYWlyb2hhX25wdSBoYXMgYW55IHN5emthbGxlciBkZXNjcmlwdGlvbiB3b3VsZCBiZSB1c2VmdWwuIFVsdGltYXRlbHksIHRoaXMgbG9va3MgdW5saWtlbHkgdG8gYmUgd29ydGggcHVyc3Vpbmcgd2l0aG91dCBzaWduaWZpY2FudCBlZmZvcnQgdG8gZW11bGF0ZSB0aGUgc3BlY2lmaWMgaGFyZHdhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthaXJvaGEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtzeXMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjM4CgkJCQkJCQlvdXRwdXQ6IDExNAoJCQkJCQkJdGhvdWdodHM6IDM2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50OiBBaXJvaGEgTlBVIERyaXZlciBhbmQgRnV6emluZyBGZWFzaWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGVyZSBhcmUgbm8gc3l6bGFuZyBkZXNjcmlwdGlvbnMgYXZhaWxhYmxlIGZvciB0aGlzIEFpcm9oYSBjb21wb25lbnQsIHdoaWNoIGlzIGEgcmVkIGZsYWcsIGJ1dCB0aGUgY29yZSBpc3N1ZSBoZXJlIGlzIHRoZSBoYXJkd2FyZSBkZXBlbmRlbmN5LiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNvQyBOUFUgZHJpdmVyLCBhbmQgYmFzZWQgb24gd2hhdCBJIGtub3cgYWJvdXQgdGhlc2Uga2luZHMgb2YgZHJpdmVycywgaXQgKmFic29sdXRlbHkqIHJlcXVpcmVzIHRoZSBhY3R1YWwgQWlyb2hhIEVONzU4MSBTb0MgaGFyZHdhcmUgdG8gZnVuY3Rpb24uIEl0JiMzOTtzIG5vdCBzb21ldGhpbmcgdGhhdCBjYW4gYmUgYWRlcXVhdGVseSBlbXVsYXRlZCB3aXRoaW4gYSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LCBvciBldmVuIHVzaW5nIHNwZWNpYWxpemVkIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiBJdCYjMzk7cyBzaW1wbHkgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nLgoKTGV0IG1lIHF1aWNrbHkgcmUtcmVhZCB0aGUgcHJvbXB0IHRvIGJlIHN1cmU6IComIzM0Oy4uLkNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS4uLiAtIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuLi4gdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuJiMzNDsqCgpZdXAsIHRoYXQgc2VhbHMgaXQuIFRoaXMgKmRpcmVjdGx5KiBmYWxscyBpbnRvIHRoZSBjYXRlZ29yeSBvZiBjb2RlIHRoYXQgaXMgZnVuZGFtZW50YWxseSBpbmFjY2Vzc2libGUgZm9yIGZ1enppbmcuIEl0JiMzOTtzIGFuIEFpcm9oYSBFTjc1ODEgTlBVIGRyaXZlci4gSSBrbm93IHRoYXQga2luZCBvZiBoYXJkd2FyZS4gSXQgbmVlZHMgdGhlIHBoeXNpY2FsIFNvQy4gVGhlIGNvZGUgcGF0aCBtb2RpZmljYXRpb24gY29uY2VybnMgdGhlIGRyaXZlciBhdCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuY2AuIFRoZSBkcml2ZXImIzM5O3MgaW5oZXJlbnQgZGVwZW5kZW5jZSBvbiB0aGUgc3BlY2lmaWMgQWlyb2hhIFNvQyBhcmNoaXRlY3R1cmUgbWFrZXMgaXQgaW1wb3NzaWJsZSB0byByZWFjaCB0aGVzZSBjb2RlIHBhdGhzIGluIGFueSBwcmFjdGljYWwgdmlydHVhbGl6ZWQgc2V0dGluZy4gVGhlcmVmb3JlLCB0aGUgZGVjaXNpb24gaXMgY2xlYXI6IGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4gVGhlIHBhdGNoJiMzOTtzIHRhcmdldCBpcyB1bi1mdXp6YWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQWlyb2hhIEVONzU4MSBOUFUgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jKS4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBTb0MgaGFyZHdhcmUgYmxvY2sgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhlIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIHNvIGl0IGNhbm5vdCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQWlyb2hhIEVONzU4MSBOUFUgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jKS4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBTb0MgaGFyZHdhcmUgYmxvY2sgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhlIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIHNvIGl0IGNhbm5vdCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTc6Mzk6NTkuMjE1OTIwNDg1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU4NjkyMjM5MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgRU43NTgxIE5QVSBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMpLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNvQyBoYXJkd2FyZSBibG9jayB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGUgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgc28gaXQgY2Fubm90IGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE3OjM5OjU5LjIxNTk0Mjk2NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1NjcwODg4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGM4MDAyMGQ0NmY0ZmFlZWQ5ZTBkNTFhZDQ1OWI1NGU0NjdhNGE1NjNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgNiAxNzozOTo1NyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuY1xcbmluZGV4IGI2NzliZWQ5NTJkZTMuLmUxZTBkZGI5MmYwMzcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNcXG5AQCAtMjMsNiArMjMsMTIgQEBcXG4gI2RlZmluZSBOUFVfRU43NTgxX0ZJUk1XQVJFX1JWMzJfTUFYX1NJWkVcXHQweDIwMDAwMFxcbiAjZGVmaW5lIE5QVV9FTjc1ODFfRklSTVdBUkVfREFUQV9NQVhfU0laRVxcdDB4MTAwMDBcXG4gI2RlZmluZSBOUFVfRFVNUF9TSVpFXFx0XFx0XFx0XFx0NTEyXFxuKy8qXFxuKyAqIE1haWxib3ggRE1BIHBheWxvYWQgc2l6ZS4gQ292ZXJzIHNpemVvZihzdHJ1Y3QgcHBlX21ib3hfZGF0YSkgKDI4KSBhbmRcXG4rICogV0xBTiBUTFYgbWVzc2FnZXMgKGhlYWRlciArIHBheWxvYWQpOyBsYXJnZXN0IGluLXRyZWUgV0xBTiBwYXlsb2FkIHRvZGF5XFxuKyAqIGlzIDE2IGJ5dGVzIChJTk9ERV9UWFJYX1JFR19BRERSKS4gS2VlcCBoZWFkcm9vbSBmb3IgZnV0dXJlIGNvbW1hbmRzLlxcbisgKi9cXG4rI2RlZmluZSBBSVJPSEFfTlBVX01CT1hfU0laRVxcdFxcdFxcdDI1NlxcbiBcXG4gI2RlZmluZSBSRUdfTlBVX0xPQ0FMX1NSQU1cXHRcXHQweDBcXG4gXFxuQEAgLTE2MSwyMSArMTY3LDMyIEBAIHN0cnVjdCB3bGFuX21ib3hfZGF0YSB7XFxuIH07XFxuIFxcbiBzdGF0aWMgaW50IGFpcm9oYV9ucHVfc2VuZF9tc2coc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGZ1bmNfaWQsXFxuLVxcdFxcdFxcdCAgICAgICB2b2lkICpwLCBpbnQgc2l6ZSlcXG4rXFx0XFx0XFx0ICAgICAgIGNvbnN0IHZvaWQgKnJlcSwgaW50IHNpemUsXFxuK1xcdFxcdFxcdCAgICAgICB2b2lkICpyc3AsIGludCByc3Bfb2ZmLCBpbnQgcnNwX2xlbilcXG4ge1xcbiBcXHR1MTYgY29yZSA9IDA7IC8qIEZJWE1FICovXFxuK1xcdHN0cnVjdCBhaXJvaGFfbnB1X2NvcmUgKmMgPSBcXHUwMDI2bnB1LVxcdTAwM2Vjb3Jlc1tjb3JlXTtcXG4gXFx0dTMyIHZhbCwgb2Zmc2V0ID0gY29yZSBcXHUwMDNjXFx1MDAzYyA0O1xcbi1cXHRkbWFfYWRkcl90IGRtYV9hZGRyO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0ZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZShucHUtXFx1MDAzZWRldiwgcCwgc2l6ZSwgRE1BX0JJRElSRUNUSU9OQUwpO1xcbi1cXHRyZXQgPSBkbWFfbWFwcGluZ19lcnJvcihucHUtXFx1MDAzZWRldiwgZG1hX2FkZHIpO1xcbi1cXHRpZiAocmV0KVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRpZiAoc2l6ZSBcXHUwMDNlIEFJUk9IQV9OUFVfTUJPWF9TSVpFIHx8XFxuK1xcdCAgICAocnNwIFxcdTAwMjZcXHUwMDI2IChyc3Bfb2ZmIFxcdTAwM2MgMCB8fCByc3BfbGVuIFxcdTAwM2MgMCB8fFxcbitcXHRcXHQgICAgIHJzcF9vZmYgKyByc3BfbGVuIFxcdTAwM2Ugc2l6ZSkpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuLVxcdHNwaW5fbG9ja19iaChcXHUwMDI2bnB1LVxcdTAwM2Vjb3Jlc1tjb3JlXS5sb2NrKTtcXG4rXFx0LypcXG4rXFx0ICogTWFpbGJveCBwYXlsb2FkcyBhcmUgYmlkaXJlY3Rpb25hbCAoQ1BVIHJlcXVlc3QsIE5QVSByZXNwb25zZSkuXFxuK1xcdCAqIE9uIEVONzU4MStNVDc5OTYsIHN0cmVhbWluZyBETUFfQklESVJFQ1RJT05BTCBhZ2FpbnN0IHRoZVxcbitcXHQgKiBjYWxsZXIga3phbGxvYygpIGJ1ZmZlciBjYW4gbGVhdmUgV0xBTl9GVU5DX0dFVF9XQUlUX05QVV9WRVJTSU9OXFxuK1xcdCAqIHJlYWRpbmcgYXMgMC4wIGRlc3BpdGUgTUJPWCBzdWNjZXNzLiBSZXVzZSBhIHByb2JlLXRpbWUgY29oZXJlbnRcXG4rXFx0ICogYm91bmNlIGJ1ZmZlciB1bmRlciB0aGUgcGVyLWNvcmUgbG9jayAoYWxzbyB1c2VkIGZyb20gUFBFXFxuK1xcdCAqIGZvZV9jb21taXQgdW5kZXIgYXRvbWljIGNvbnRleHQpLlxcbitcXHQgKi9cXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZjLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdG1lbWNweShjLVxcdTAwM2VidWYsIHJlcSwgc2l6ZSk7XFxuIFxcbi1cXHRyZWdtYXBfd3JpdGUobnB1LVxcdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMCkgKyBvZmZzZXQsIGRtYV9hZGRyKTtcXG4rXFx0cmVnbWFwX3dyaXRlKG5wdS1cXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDApICsgb2Zmc2V0LCBjLVxcdTAwM2VhZGRyKTtcXG4gXFx0cmVnbWFwX3dyaXRlKG5wdS1cXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDEpICsgb2Zmc2V0LCBzaXplKTtcXG4gXFx0cmVnbWFwX3JlYWQobnB1LVxcdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMikgKyBvZmZzZXQsIFxcdTAwMjZ2YWwpO1xcbiBcXHRyZWdtYXBfd3JpdGUobnB1LVxcdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMikgKyBvZmZzZXQsIHZhbCArIDEpO1xcbkBAIC0xODksOSArMjA2LDEwIEBAIHN0YXRpYyBpbnQgYWlyb2hhX25wdV9zZW5kX21zZyhzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCBpbnQgZnVuY19pZCxcXG4gXFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgRklFTERfR0VUKE1CT1hfTVNHX1NUQVRVUywgdmFsKSAhPSBOUFVfTUJPWF9TVUNDRVNTKVxcbiBcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbiBcXG4tXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5wdS1cXHUwMDNlY29yZXNbY29yZV0ubG9jayk7XFxuK1xcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2IHJzcClcXG4rXFx0XFx0bWVtY3B5KHJzcCwgYy1cXHUwMDNlYnVmICsgcnNwX29mZiwgcnNwX2xlbik7XFxuIFxcbi1cXHRkbWFfdW5tYXBfc2luZ2xlKG5wdS1cXHUwMDNlZGV2LCBkbWFfYWRkciwgc2l6ZSwgRE1BX0JJRElSRUNUSU9OQUwpO1xcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Yy1cXHUwMDNlbG9jayk7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuQEAgLTM0Myw3ICszNjEsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfcHBlX2luaXQoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSlcXG4gXFx0cHBlX2RhdGEtXFx1MDAzZWluaXRfaW5mby53YW5fbW9kZSA9IFFETUFfV0FOX0VUSEVSO1xcbiBcXG4gXFx0ZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1BQRSwgcHBlX2RhdGEsXFxuLVxcdFxcdFxcdFxcdCAgc2l6ZW9mKCpwcGVfZGF0YSkpO1xcbitcXHRcXHRcXHRcXHQgIHNpemVvZigqcHBlX2RhdGEpLCBOVUxMLCAwLCAwKTtcXG4gXFx0a2ZyZWUocHBlX2RhdGEpO1xcbiBcXG4gXFx0cmV0dXJuIGVycjtcXG5AQCAtMzYyLDcgKzM4MCw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcGVfZGVpbml0KHN0cnVjdCBhaXJvaGFfbnB1ICpucHUpXFxuIFxcdHBwZV9kYXRhLVxcdTAwM2VmdW5jX2lkID0gUFBFX0ZVTkNfU0VUX1dBSVRfSFdOQVRfREVJTklUO1xcbiBcXG4gXFx0ZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1BQRSwgcHBlX2RhdGEsXFxuLVxcdFxcdFxcdFxcdCAgc2l6ZW9mKCpwcGVfZGF0YSkpO1xcbitcXHRcXHRcXHRcXHQgIHNpemVvZigqcHBlX2RhdGEpLCBOVUxMLCAwLCAwKTtcXG4gXFx0a2ZyZWUocHBlX2RhdGEpO1xcbiBcXG4gXFx0cmV0dXJuIGVycjtcXG5AQCAtMzg2LDcgKzQwNCw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcGVfZmx1c2hfc3JhbV9lbnRyaWVzKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsXFxuIFxcdHBwZV9kYXRhLVxcdTAwM2VzZXRfaW5mby5zaXplID0gc3JhbV9udW1fZW50cmllcztcXG4gXFxuIFxcdGVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19QUEUsIHBwZV9kYXRhLFxcbi1cXHRcXHRcXHRcXHQgIHNpemVvZigqcHBlX2RhdGEpKTtcXG4rXFx0XFx0XFx0XFx0ICBzaXplb2YoKnBwZV9kYXRhKSwgTlVMTCwgMCwgMCk7XFxuIFxcdGtmcmVlKHBwZV9kYXRhKTtcXG4gXFxuIFxcdHJldHVybiBlcnI7XFxuQEAgLTQxMSw3ICs0MjksNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfZm9lX2NvbW1pdF9lbnRyeShzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LFxcbiBcXHRcXHRcXHRcXHRcXHQgIDogUFBFX1NSQU1fU0VUX0VOVFJZO1xcbiBcXG4gXFx0ZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1BQRSwgcHBlX2RhdGEsXFxuLVxcdFxcdFxcdFxcdCAgc2l6ZW9mKCpwcGVfZGF0YSkpO1xcbitcXHRcXHRcXHRcXHQgIHNpemVvZigqcHBlX2RhdGEpLCBOVUxMLCAwLCAwKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbkBAIC00MjAsNyArNDM4LDcgQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X2ZvZV9jb21taXRfZW50cnkoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSxcXG4gXFx0cHBlX2RhdGEtXFx1MDAzZXNldF9pbmZvLnNpemUgPSBzaXplb2YodTMyKTtcXG4gXFxuIFxcdGVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19QUEUsIHBwZV9kYXRhLFxcbi1cXHRcXHRcXHRcXHQgIHNpemVvZigqcHBlX2RhdGEpKTtcXG4rXFx0XFx0XFx0XFx0ICBzaXplb2YoKnBwZV9kYXRhKSwgTlVMTCwgMCwgMCk7XFxuIG91dDpcXG4gXFx0a2ZyZWUocHBlX2RhdGEpO1xcbiBcXG5AQCAtNDQzLDYgKzQ2MSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcGVfc3RhdHNfc2V0dXAoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSxcXG4gXFx0cHBlX2RhdGEtXFx1MDAzZXN0YXRzX2luZm8uZm9lX3N0YXRzX2FkZHIgPSBmb2Vfc3RhdHNfYWRkcjtcXG4gXFxuIFxcdGVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19QUEUsIHBwZV9kYXRhLFxcbitcXHRcXHRcXHRcXHQgIHNpemVvZigqcHBlX2RhdGEpLCBwcGVfZGF0YSwgMCxcXG4gXFx0XFx0XFx0XFx0ICBzaXplb2YoKnBwZV9kYXRhKSk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbkBAIC00NzUsNyArNDk0LDggQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X3dsYW5fbXNnX3NlbmQoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGlmaW5kZXgsXFxuIFxcdHdsYW5fZGF0YS1cXHUwMDNlZnVuY19pZCA9IGZ1bmNfaWQ7XFxuIFxcdG1lbWNweSh3bGFuX2RhdGEtXFx1MDAzZWQsIGRhdGEsIGRhdGFfbGVuKTtcXG4gXFxuLVxcdGVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19XSUZJLCB3bGFuX2RhdGEsIGxlbik7XFxuK1xcdGVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19XSUZJLCB3bGFuX2RhdGEsIGxlbixcXG4rXFx0XFx0XFx0XFx0ICBOVUxMLCAwLCAwKTtcXG4gXFx0a2ZyZWUod2xhbl9kYXRhKTtcXG4gXFxuIFxcdHJldHVybiBlcnI7XFxuQEAgLTQ5Nyw5ICs1MTcsOSBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfd2xhbl9tc2dfZ2V0KHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBpZmluZGV4LFxcbiBcXHR3bGFuX2RhdGEtXFx1MDAzZWZ1bmNfdHlwZSA9IE5QVV9PUF9HRVQ7XFxuIFxcdHdsYW5fZGF0YS1cXHUwMDNlZnVuY19pZCA9IGZ1bmNfaWQ7XFxuIFxcbi1cXHRlcnIgPSBhaXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgTlBVX0ZVTkNfV0lGSSwgd2xhbl9kYXRhLCBsZW4pO1xcbi1cXHRpZiAoIWVycilcXG4tXFx0XFx0bWVtY3B5KGRhdGEsIHdsYW5fZGF0YS1cXHUwMDNlZCwgZGF0YV9sZW4pO1xcbitcXHRlcnIgPSBhaXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgTlBVX0ZVTkNfV0lGSSwgd2xhbl9kYXRhLCBsZW4sXFxuK1xcdFxcdFxcdFxcdCAgZGF0YSwgb2Zmc2V0b2Yoc3RydWN0IHdsYW5fbWJveF9kYXRhLCBkKSxcXG4rXFx0XFx0XFx0XFx0ICBkYXRhX2xlbik7XFxuIFxcdGtmcmVlKHdsYW5fZGF0YSk7XFxuIFxcbiBcXHRyZXR1cm4gZXJyO1xcbkBAIC03NzAsNiArNzkwLDE1IEBAIHN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUobnB1LVxcdTAwM2Vjb3Jlcyk7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgYWlyb2hhX25wdV9jb3JlICpjb3JlID0gXFx1MDAyNm5wdS1cXHUwMDNlY29yZXNbaV07XFxuK1xcbitcXHRcXHRjb3JlLVxcdTAwM2VidWYgPSBkbWFtX2FsbG9jX2NvaGVyZW50KGRldiwgQUlST0hBX05QVV9NQk9YX1NJWkUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZjb3JlLVxcdTAwM2VhZGRyLCBHRlBfS0VSTkVMKTtcXG4rXFx0XFx0aWYgKCFjb3JlLVxcdTAwM2VidWYpXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbiBcXHRlcnIgPSBhaXJvaGFfbnB1X3J1bl9maXJtd2FyZShkZXYsIGJhc2UsIFxcdTAwMjZyZXMpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgXFxcImZhaWxlZCB0byBydW4gbnB1IGZpcm13YXJlXFxcXG5cXFwiKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb2MvYWlyb2hhL2Fpcm9oYV9vZmZsb2FkLmggYi9pbmNsdWRlL2xpbnV4L3NvYy9haXJvaGEvYWlyb2hhX29mZmxvYWQuaFxcbmluZGV4IDc1ODlmY2NmZWVmNmQuLjE2YTk4OGFkNzQ2N2MgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9zb2MvYWlyb2hhL2Fpcm9oYV9vZmZsb2FkLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NvYy9haXJvaGEvYWlyb2hhX29mZmxvYWQuaFxcbkBAIC0xNzMsNiArMTczLDkgQEAgc3RydWN0IGFpcm9oYV9ucHUge1xcbiBcXHRcXHQvKiBwcm90ZWN0IGNvbmN1cnJlbnQgbnB1IG1lbW9yeSBhY2Nlc3NlcyAqL1xcbiBcXHRcXHRzcGlubG9ja190IGxvY2s7XFxuIFxcdFxcdHN0cnVjdCB3b3JrX3N0cnVjdCB3ZHRfd29yaztcXG4rXFx0XFx0LyogQ29oZXJlbnQgYm91bmNlIGJ1ZmZlciBmb3IgbWFpbGJveCBjbWQvcnNwICovXFxuK1xcdFxcdHZvaWQgKmJ1ZjtcXG4rXFx0XFx0ZG1hX2FkZHJfdCBhZGRyO1xcbiBcXHR9IGNvcmVzW05QVV9OVU1fQ09SRVNdO1xcbiBcXG4gXFx0aW50IGlycXNbTlBVX05VTV9JUlFdO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNzo0MDowMC43NzM1ODUxNzhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozNDMxMTU1MTYyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFpcm9oYSBFTjc1ODEgTlBVIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYykuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU29DIGhhcmR3YXJlIGJsb2NrIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoZSBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBzbyBpdCBjYW5ub3QgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzgwMDIwZDQ2ZjRmYWVlZDllMGQ1MWFkNDU5YjU0ZTQ2N2E0YTU2M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDYgMTc6Mzk6NTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuY1xuaW5kZXggYjY3OWJlZDk1MmRlMy4uZTFlMGRkYjkyZjAzNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNcbkBAIC0yMyw2ICsyMywxMiBAQFxuICNkZWZpbmUgTlBVX0VONzU4MV9GSVJNV0FSRV9SVjMyX01BWF9TSVpFXHQweDIwMDAwMFxuICNkZWZpbmUgTlBVX0VONzU4MV9GSVJNV0FSRV9EQVRBX01BWF9TSVpFXHQweDEwMDAwXG4gI2RlZmluZSBOUFVfRFVNUF9TSVpFXHRcdFx0XHQ1MTJcbisvKlxuKyAqIE1haWxib3ggRE1BIHBheWxvYWQgc2l6ZS4gQ292ZXJzIHNpemVvZihzdHJ1Y3QgcHBlX21ib3hfZGF0YSkgKDI4KSBhbmRcbisgKiBXTEFOIFRMViBtZXNzYWdlcyAoaGVhZGVyICsgcGF5bG9hZCk7IGxhcmdlc3QgaW4tdHJlZSBXTEFOIHBheWxvYWQgdG9kYXlcbisgKiBpcyAxNiBieXRlcyAoSU5PREVfVFhSWF9SRUdfQUREUikuIEtlZXAgaGVhZHJvb20gZm9yIGZ1dHVyZSBjb21tYW5kcy5cbisgKi9cbisjZGVmaW5lIEFJUk9IQV9OUFVfTUJPWF9TSVpFXHRcdFx0MjU2XG4gXG4gI2RlZmluZSBSRUdfTlBVX0xPQ0FMX1NSQU1cdFx0MHgwXG4gXG5AQCAtMTYxLDIxICsxNjcsMzIgQEAgc3RydWN0IHdsYW5fbWJveF9kYXRhIHtcbiB9O1xuIFxuIHN0YXRpYyBpbnQgYWlyb2hhX25wdV9zZW5kX21zZyhzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCBpbnQgZnVuY19pZCxcbi1cdFx0XHQgICAgICAgdm9pZCAqcCwgaW50IHNpemUpXG4rXHRcdFx0ICAgICAgIGNvbnN0IHZvaWQgKnJlcSwgaW50IHNpemUsXG4rXHRcdFx0ICAgICAgIHZvaWQgKnJzcCwgaW50IHJzcF9vZmYsIGludCByc3BfbGVuKVxuIHtcbiBcdHUxNiBjb3JlID0gMDsgLyogRklYTUUgKi9cbitcdHN0cnVjdCBhaXJvaGFfbnB1X2NvcmUgKmMgPSBcdTAwMjZucHUtXHUwMDNlY29yZXNbY29yZV07XG4gXHR1MzIgdmFsLCBvZmZzZXQgPSBjb3JlIFx1MDAzY1x1MDAzYyA0O1xuLVx0ZG1hX2FkZHJfdCBkbWFfYWRkcjtcbiBcdGludCByZXQ7XG4gXG4tXHRkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKG5wdS1cdTAwM2VkZXYsIHAsIHNpemUsIERNQV9CSURJUkVDVElPTkFMKTtcbi1cdHJldCA9IGRtYV9tYXBwaW5nX2Vycm9yKG5wdS1cdTAwM2VkZXYsIGRtYV9hZGRyKTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4rXHRpZiAoc2l6ZSBcdTAwM2UgQUlST0hBX05QVV9NQk9YX1NJWkUgfHxcbitcdCAgICAocnNwIFx1MDAyNlx1MDAyNiAocnNwX29mZiBcdTAwM2MgMCB8fCByc3BfbGVuIFx1MDAzYyAwIHx8XG4rXHRcdCAgICAgcnNwX29mZiArIHJzcF9sZW4gXHUwMDNlIHNpemUpKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRzcGluX2xvY2tfYmgoXHUwMDI2bnB1LVx1MDAzZWNvcmVzW2NvcmVdLmxvY2spO1xuK1x0LypcbitcdCAqIE1haWxib3ggcGF5bG9hZHMgYXJlIGJpZGlyZWN0aW9uYWwgKENQVSByZXF1ZXN0LCBOUFUgcmVzcG9uc2UpLlxuK1x0ICogT24gRU43NTgxK01UNzk5Niwgc3RyZWFtaW5nIERNQV9CSURJUkVDVElPTkFMIGFnYWluc3QgdGhlXG4rXHQgKiBjYWxsZXIga3phbGxvYygpIGJ1ZmZlciBjYW4gbGVhdmUgV0xBTl9GVU5DX0dFVF9XQUlUX05QVV9WRVJTSU9OXG4rXHQgKiByZWFkaW5nIGFzIDAuMCBkZXNwaXRlIE1CT1ggc3VjY2Vzcy4gUmV1c2UgYSBwcm9iZS10aW1lIGNvaGVyZW50XG4rXHQgKiBib3VuY2UgYnVmZmVyIHVuZGVyIHRoZSBwZXItY29yZSBsb2NrIChhbHNvIHVzZWQgZnJvbSBQUEVcbitcdCAqIGZvZV9jb21taXQgdW5kZXIgYXRvbWljIGNvbnRleHQpLlxuK1x0ICovXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2Yy1cdTAwM2Vsb2NrKTtcbitcbitcdG1lbWNweShjLVx1MDAzZWJ1ZiwgcmVxLCBzaXplKTtcbiBcbi1cdHJlZ21hcF93cml0ZShucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDApICsgb2Zmc2V0LCBkbWFfYWRkcik7XG4rXHRyZWdtYXBfd3JpdGUobnB1LVx1MDAzZXJlZ21hcCwgUkVHX0NSX01CUTBfQ1RSTCgwKSArIG9mZnNldCwgYy1cdTAwM2VhZGRyKTtcbiBcdHJlZ21hcF93cml0ZShucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDEpICsgb2Zmc2V0LCBzaXplKTtcbiBcdHJlZ21hcF9yZWFkKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMikgKyBvZmZzZXQsIFx1MDAyNnZhbCk7XG4gXHRyZWdtYXBfd3JpdGUobnB1LVx1MDAzZXJlZ21hcCwgUkVHX0NSX01CUTBfQ1RSTCgyKSArIG9mZnNldCwgdmFsICsgMSk7XG5AQCAtMTg5LDkgKzIwNiwxMCBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfc2VuZF9tc2coc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGZ1bmNfaWQsXG4gXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgRklFTERfR0VUKE1CT1hfTVNHX1NUQVRVUywgdmFsKSAhPSBOUFVfTUJPWF9TVUNDRVNTKVxuIFx0XHRyZXQgPSAtRUlOVkFMO1xuIFxuLVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bnB1LVx1MDAzZWNvcmVzW2NvcmVdLmxvY2spO1xuK1x0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IHJzcClcbitcdFx0bWVtY3B5KHJzcCwgYy1cdTAwM2VidWYgKyByc3Bfb2ZmLCByc3BfbGVuKTtcbiBcbi1cdGRtYV91bm1hcF9zaW5nbGUobnB1LVx1MDAzZWRldiwgZG1hX2FkZHIsIHNpemUsIERNQV9CSURJUkVDVElPTkFMKTtcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmMtXHUwMDNlbG9jayk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC0zNDMsNyArMzYxLDcgQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X3BwZV9pbml0KHN0cnVjdCBhaXJvaGFfbnB1ICpucHUpXG4gXHRwcGVfZGF0YS1cdTAwM2Vpbml0X2luZm8ud2FuX21vZGUgPSBRRE1BX1dBTl9FVEhFUjtcbiBcbiBcdGVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19QUEUsIHBwZV9kYXRhLFxuLVx0XHRcdFx0ICBzaXplb2YoKnBwZV9kYXRhKSk7XG4rXHRcdFx0XHQgIHNpemVvZigqcHBlX2RhdGEpLCBOVUxMLCAwLCAwKTtcbiBcdGtmcmVlKHBwZV9kYXRhKTtcbiBcbiBcdHJldHVybiBlcnI7XG5AQCAtMzYyLDcgKzM4MCw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcGVfZGVpbml0KHN0cnVjdCBhaXJvaGFfbnB1ICpucHUpXG4gXHRwcGVfZGF0YS1cdTAwM2VmdW5jX2lkID0gUFBFX0ZVTkNfU0VUX1dBSVRfSFdOQVRfREVJTklUO1xuIFxuIFx0ZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1BQRSwgcHBlX2RhdGEsXG4tXHRcdFx0XHQgIHNpemVvZigqcHBlX2RhdGEpKTtcbitcdFx0XHRcdCAgc2l6ZW9mKCpwcGVfZGF0YSksIE5VTEwsIDAsIDApO1xuIFx0a2ZyZWUocHBlX2RhdGEpO1xuIFxuIFx0cmV0dXJuIGVycjtcbkBAIC0zODYsNyArNDA0LDcgQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X3BwZV9mbHVzaF9zcmFtX2VudHJpZXMoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSxcbiBcdHBwZV9kYXRhLVx1MDAzZXNldF9pbmZvLnNpemUgPSBzcmFtX251bV9lbnRyaWVzO1xuIFxuIFx0ZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1BQRSwgcHBlX2RhdGEsXG4tXHRcdFx0XHQgIHNpemVvZigqcHBlX2RhdGEpKTtcbitcdFx0XHRcdCAgc2l6ZW9mKCpwcGVfZGF0YSksIE5VTEwsIDAsIDApO1xuIFx0a2ZyZWUocHBlX2RhdGEpO1xuIFxuIFx0cmV0dXJuIGVycjtcbkBAIC00MTEsNyArNDI5LDcgQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X2ZvZV9jb21taXRfZW50cnkoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSxcbiBcdFx0XHRcdFx0ICA6IFBQRV9TUkFNX1NFVF9FTlRSWTtcbiBcbiBcdGVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19QUEUsIHBwZV9kYXRhLFxuLVx0XHRcdFx0ICBzaXplb2YoKnBwZV9kYXRhKSk7XG4rXHRcdFx0XHQgIHNpemVvZigqcHBlX2RhdGEpLCBOVUxMLCAwLCAwKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gb3V0O1xuIFxuQEAgLTQyMCw3ICs0MzgsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfZm9lX2NvbW1pdF9lbnRyeShzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LFxuIFx0cHBlX2RhdGEtXHUwMDNlc2V0X2luZm8uc2l6ZSA9IHNpemVvZih1MzIpO1xuIFxuIFx0ZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1BQRSwgcHBlX2RhdGEsXG4tXHRcdFx0XHQgIHNpemVvZigqcHBlX2RhdGEpKTtcbitcdFx0XHRcdCAgc2l6ZW9mKCpwcGVfZGF0YSksIE5VTEwsIDAsIDApO1xuIG91dDpcbiBcdGtmcmVlKHBwZV9kYXRhKTtcbiBcbkBAIC00NDMsNiArNDYxLDcgQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X3BwZV9zdGF0c19zZXR1cChzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LFxuIFx0cHBlX2RhdGEtXHUwMDNlc3RhdHNfaW5mby5mb2Vfc3RhdHNfYWRkciA9IGZvZV9zdGF0c19hZGRyO1xuIFxuIFx0ZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1BQRSwgcHBlX2RhdGEsXG4rXHRcdFx0XHQgIHNpemVvZigqcHBlX2RhdGEpLCBwcGVfZGF0YSwgMCxcbiBcdFx0XHRcdCAgc2l6ZW9mKCpwcGVfZGF0YSkpO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBvdXQ7XG5AQCAtNDc1LDcgKzQ5NCw4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX25wdV93bGFuX21zZ19zZW5kKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBpZmluZGV4LFxuIFx0d2xhbl9kYXRhLVx1MDAzZWZ1bmNfaWQgPSBmdW5jX2lkO1xuIFx0bWVtY3B5KHdsYW5fZGF0YS1cdTAwM2VkLCBkYXRhLCBkYXRhX2xlbik7XG4gXG4tXHRlcnIgPSBhaXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgTlBVX0ZVTkNfV0lGSSwgd2xhbl9kYXRhLCBsZW4pO1xuK1x0ZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1dJRkksIHdsYW5fZGF0YSwgbGVuLFxuK1x0XHRcdFx0ICBOVUxMLCAwLCAwKTtcbiBcdGtmcmVlKHdsYW5fZGF0YSk7XG4gXG4gXHRyZXR1cm4gZXJyO1xuQEAgLTQ5Nyw5ICs1MTcsOSBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfd2xhbl9tc2dfZ2V0KHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBpZmluZGV4LFxuIFx0d2xhbl9kYXRhLVx1MDAzZWZ1bmNfdHlwZSA9IE5QVV9PUF9HRVQ7XG4gXHR3bGFuX2RhdGEtXHUwMDNlZnVuY19pZCA9IGZ1bmNfaWQ7XG4gXG4tXHRlcnIgPSBhaXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgTlBVX0ZVTkNfV0lGSSwgd2xhbl9kYXRhLCBsZW4pO1xuLVx0aWYgKCFlcnIpXG4tXHRcdG1lbWNweShkYXRhLCB3bGFuX2RhdGEtXHUwMDNlZCwgZGF0YV9sZW4pO1xuK1x0ZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1dJRkksIHdsYW5fZGF0YSwgbGVuLFxuK1x0XHRcdFx0ICBkYXRhLCBvZmZzZXRvZihzdHJ1Y3Qgd2xhbl9tYm94X2RhdGEsIGQpLFxuK1x0XHRcdFx0ICBkYXRhX2xlbik7XG4gXHRrZnJlZSh3bGFuX2RhdGEpO1xuIFxuIFx0cmV0dXJuIGVycjtcbkBAIC03NzAsNiArNzkwLDE1IEBAIHN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUobnB1LVx1MDAzZWNvcmVzKTsgaSsrKSB7XG4rXHRcdHN0cnVjdCBhaXJvaGFfbnB1X2NvcmUgKmNvcmUgPSBcdTAwMjZucHUtXHUwMDNlY29yZXNbaV07XG4rXG4rXHRcdGNvcmUtXHUwMDNlYnVmID0gZG1hbV9hbGxvY19jb2hlcmVudChkZXYsIEFJUk9IQV9OUFVfTUJPWF9TSVpFLFxuK1x0XHRcdFx0XHRcdFx1MDAyNmNvcmUtXHUwMDNlYWRkciwgR0ZQX0tFUk5FTCk7XG4rXHRcdGlmICghY29yZS1cdTAwM2VidWYpXG4rXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4gXHRlcnIgPSBhaXJvaGFfbnB1X3J1bl9maXJtd2FyZShkZXYsIGJhc2UsIFx1MDAyNnJlcyk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgXCJmYWlsZWQgdG8gcnVuIG5wdSBmaXJtd2FyZVxcblwiKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NvYy9haXJvaGEvYWlyb2hhX29mZmxvYWQuaCBiL2luY2x1ZGUvbGludXgvc29jL2Fpcm9oYS9haXJvaGFfb2ZmbG9hZC5oXG5pbmRleCA3NTg5ZmNjZmVlZjZkLi4xNmE5ODhhZDc0NjdjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zb2MvYWlyb2hhL2Fpcm9oYV9vZmZsb2FkLmhcbisrKyBiL2luY2x1ZGUvbGludXgvc29jL2Fpcm9oYS9haXJvaGFfb2ZmbG9hZC5oXG5AQCAtMTczLDYgKzE3Myw5IEBAIHN0cnVjdCBhaXJvaGFfbnB1IHtcbiBcdFx0LyogcHJvdGVjdCBjb25jdXJyZW50IG5wdSBtZW1vcnkgYWNjZXNzZXMgKi9cbiBcdFx0c3BpbmxvY2tfdCBsb2NrO1xuIFx0XHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd2R0X3dvcms7XG4rXHRcdC8qIENvaGVyZW50IGJvdW5jZSBidWZmZXIgZm9yIG1haWxib3ggY21kL3JzcCAqL1xuK1x0XHR2b2lkICpidWY7XG4rXHRcdGRtYV9hZGRyX3QgYWRkcjtcbiBcdH0gY29yZXNbTlBVX05VTV9DT1JFU107XG4gXG4gXHRpbnQgaXJxc1tOUFVfTlVNX0lSUV07XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNzo0MDowMC43NzM1ODc1NDhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTg2MjUwNjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhdGNoIHRvIGFuIEFpcm9oYSBOUFUgRHJpdmVyKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBhZmZlY3RpbmcgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIGBhaXJvaGFfbnB1X3NlbmRfbXNnYCDigJMgaXQncyBzaGlmdGluZyB0byBhIHByZS1hbGxvY2F0ZWQgY29oZXJlbnQgRE1BIGJ1ZmZlciBpbnN0ZWFkIG9mIHRoZSBkeW5hbWljIG1hcHBpbmcvdW5tYXBwaW5nIGFwcHJvYWNoLiBTbWFydCBtb3ZlLCB0aGF0IHNob3VsZCBiZSBtb3JlIGVmZmljaWVudC4gVGhlIGFkZGVkIGByc3BgLCBgcnNwX29mZmAsIGFuZCBgcnNwX2xlbmAgcGFyYW1ldGVycyBjbGFyaWZ5IGhvdyB0aGUgcmVzcG9uc2UgZGF0YSBpcyBoYW5kbGVkLCBtYWtpbmcgdGhpcyBhIG11Y2ggY2xlYW5lciBhcHByb2FjaC4gQW5kIHRoaXMgcHJlLWFsbG9jYXRlZCBidWZmZXIgaXMgYmVpbmcgZG9uZSBhdCBwcm9iZSB0aW1lIHVzaW5nIGBkbWFtX2FsbG9jX2NvaGVyZW50YC4gTWFrZXMgc2Vuc2UsIHNldHMgdGhpbmdzIHVwIGVhcmx5IGFuZCBrZWVwcyB0aGluZ3MgcnVubmluZyBzbW9vdGhseS5cblxuTm93LCBsZXQncyBzdGVwIGJhY2sgYW5kIGNvbnNpZGVyIHRoZSBiaWdnZXIgcGljdHVyZS4gSXMgdGhpcyBhIGRyaXZlciBmb3Igc29tZSBzcGVjaWZpYywgdW4tZW11bGF0ZWQgaGFyZHdhcmU/IFRoZSBkcml2ZXIgaXMgaW4gdGhlIGBhaXJvaGFgIGRpcmVjdG9yeSwgd2hpY2ggaW5kaWNhdGVzIEFpcm9oYSwgYSBzdWJzaWRpYXJ5IG9mIE1lZGlhVGVrLCBpcyB0aGUgdmVuZG9yIGhlcmUuIEl0IGlzIGxpa2VseSB0aGF0IHRoaXMgZHJpdmVyIGlzIGZvciB0aGUgQWlyb2hhIEVONzU4MSBTb0MgTlBVIChOZXR3b3JrIFByb2Nlc3NpbmcgVW5pdCkuIEkga25vdyB3ZSBjYW7igJl0IGVtdWxhdGUgKmV2ZXJ5KiBwaWVjZSBvZiBoYXJkd2FyZSBpbiBRRU1VLiBEb2VzIFFFTVUgc3VwcG9ydCB0aGUgRU43NTgxPyBObywgaXQgbG9va3MgbGlrZSBpdCBpc24ndC5cblxuSGFuZyBvbi4uLiB0aGUgcHJvbXB0IG1lbnRpb25zIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzLiBUaGlzIGlzIGFuIFNvQyBkcml2ZXIsIG5vdCBhIFBDSWUgY2FyZC4gQnV0IHRoZSBrZXkgaXMgdGhhdCBpdCdzIHN0aWxsIGEgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlciB0aGF0IGlzbid0IGVtdWxhdGVkIGJ5IFFFTVUuIFRoaXMgcGF0Y2ggcmVxdWlyZXMgYW4gRU43NTgxIHRvIHRlc3QsIGFuZCB0aGF0IHJlcXVpcmVzIGFjdHVhbCBoYXJkd2FyZSwgbm90IGFuIGVtdWxhdG9yLlxuXG5J4oCZbSBnb2luZyB0byBjaGVjayB0aGUga2VybmVsIHRyZWUgZm9yIGFueSBtZW50aW9uIG9mIFwiYWlyb2hhXCIuIFNlZSBpZiB0aGVyZSdzIGFueSBoaW50IG9mIGVtdWxhdGlvbiBvciBldmVuIGEgbWV0aG9kIG9mIHJlYWNoaW5nIHRoZSBoYXJkd2FyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY3MiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE3OjQwOjA3Ljc1OTg0MTA2N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjk3MTcwNDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFpcm9oYV9ucHVfcHJvYmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYz03MDU9c3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIHJlZ21hcF9jb25maWcgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTcxMi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjcxMzpzdGF0aWMgaW50IGFpcm9oYV9ucHVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTcxNC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jPTg0Mj1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhaXJvaGFfbnB1X2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjg0MzpcXHQucHJvYmUgPSBhaXJvaGFfbnB1X3Byb2JlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtODQ0LVxcdC5yZW1vdmUgPSBhaXJvaGFfbnB1X3JlbW92ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTc6NDA6MTAuMDU3MDE4NDE5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzAwMzY5NjAzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZlYXNpYmlsaXR5IG9mIEFjY2Vzc2luZyB0aGUgQWlyb2hhIE5QVSBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBhaXJvaGFfbnB1YCBkcml2ZXIsIGFuZCBteSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgaXQncyBnb2luZyB0byBiZSB0cmlja3kgdG8gZ2V0IGF0IGluIGEgdHlwaWNhbCB2aXJ0dWFsaXplZCBzZXR1cC4gUGxhdGZvcm0gZHJpdmVycywgZXNwZWNpYWxseSB0aG9zZSB0aWVkIHRvIGEgc3BlY2lmaWMgU29DIGxpa2UgdGhpcyBBaXJvaGEgRU43NTgxLCBhcmUgdXN1YWxseSBvdXQgb2YgcmVhY2ggdW5sZXNzIHdlIGhhdmUgYSBmdWxsLWJsb3duIGVtdWxhdGlvbiBvZiB0aGF0IFNvQywgd2hpY2gsIGxldCdzIGJlIGhvbmVzdCwgaXNuJ3QgYWx3YXlzIHJlYWRpbHkgYXZhaWxhYmxlLCBlc3BlY2lhbGx5IGZvciBzb21ldGhpbmcgbGlrZSB0aGlzLiBJIGNhbiB0aGluayBvZiBhIGZldyBBUk0gYm9hcmRzIGluIFFFTVUgdGhhdCAqbWlnaHQqIGJlIHNpbXVsYXRlZCB3ZWxsIGVub3VnaCwgYnV0IEknbSBub3QgYmV0dGluZyBvbiBpdC5cblxuU28sIHRoZSBmaXJzdCB0aGluZyB0byBjaGVjayBpcyBpZiB0aGVyZSdzICphbnkqIHdheSB0byByZWFjaCB0aGlzIGNvZGUgd2l0aG91dCBkaXJlY3QgaGFyZHdhcmUgYWNjZXNzLiBNeSBndXQgc2F5cyBubywgYnV0IHdlIG5lZWQgdG8gdmVyaWZ5LiBJIHNlZSBpdCdzIGEgcGxhdGZvcm0gZGV2aWNlLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBEZXZpY2UgVHJlZS4gSWYgdGhlIERldmljZSBUcmVlIGlzbid0IHByZXNlbnQgb3IgZG9lc24ndCBkZXNjcmliZSB0aGUgaGFyZHdhcmUsIHRoZSBgcHJvYmVgIGZ1bmN0aW9uIGp1c3Qgd29uJ3QgYmUgY2FsbGVkLCB3aGljaCBpcyBhIGJpZyBodXJkbGUuIEV2ZW4gaWYgd2UgKmRpZCogcHJvdmlkZSBhIGR1bW15IERldmljZSBUcmVlLCB0aGlzIGRyaXZlciB1c2VzIHRoaW5ncyBsaWtlIGBkZXZtX2lvcmVtYXBfcmVzb3VyY2VgLCBgZGV2bV9yZXF1ZXN0X2lycWAsIGFuZCBgcmVnbWFwX2luaXRfbW1pb2AsIGFuZCB0aGVuIGl0IGdldHMgdG8gYGFpcm9oYV9ucHVfcnVuX2Zpcm13YXJlYCwgd2hpY2ggbW9zdCBsaWtlbHkgaW50ZXJhY3RzIGRpcmVjdGx5IHdpdGggdGhlIGhhcmR3YXJlLlxuXG5UaW1lIHRvIGRpdmUgaW50byBgYWlyb2hhX25wdV9wcm9iZWAuIEkgbmVlZCB0byBzZWUgd2hhdCdzIGFjdHVhbGx5IGhhcHBlbmluZyBpbiB0aGF0IGZ1bmN0aW9uIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YganVzdCBob3cgdGlnaHRseSBjb3VwbGVkIHRoaXMgaXMgdG8gdGhlIHNwZWNpZmljIGhhcmR3YXJlLiBUaGlzIGlzIGdvaW5nIHRvIGJlIG15IGtleSBmb2N1cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTcwMiwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNzo0MDoxNy4wNjA3MTYzMTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcxMyxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MTM6XFx0c3RhdGljIGludCBhaXJvaGFfbnB1X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuIDcxNDpcXHR7XFxuIDcxNTpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbiA3MTY6XFx0XFx0c3RydWN0IGFpcm9oYV9ucHUgKm5wdTtcXG4gNzE3OlxcdFxcdHN0cnVjdCByZXNvdXJjZSByZXM7XFxuIDcxODpcXHRcXHR2b2lkIF9faW9tZW0gKmJhc2U7XFxuIDcxOTpcXHRcXHRpbnQgaSwgaXJxLCBlcnI7XFxuIDcyMDpcXHRcXHR1MzIgdmFsO1xcbiA3MjE6XFx0XFxuIDcyMjpcXHRcXHRiYXNlID0gZGV2bV9wbGF0Zm9ybV9pb3JlbWFwX3Jlc291cmNlKHBkZXYsIDApO1xcbiA3MjM6XFx0XFx0aWYgKElTX0VSUihiYXNlKSlcXG4gNzI0OlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGJhc2UpO1xcbiA3MjU6XFx0XFxuIDcyNjpcXHRcXHRucHUgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKm5wdSksIEdGUF9LRVJORUwpO1xcbiA3Mjc6XFx0XFx0aWYgKCFucHUpXFxuIDcyODpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gNzI5OlxcdFxcbiA3MzA6XFx0XFx0bnB1LVxcdTAwM2VkZXYgPSBkZXY7XFxuIDczMTpcXHRcXHRucHUtXFx1MDAzZW9wcy5wcGVfaW5pdCA9IGFpcm9oYV9ucHVfcHBlX2luaXQ7XFxuIDczMjpcXHRcXHRucHUtXFx1MDAzZW9wcy5wcGVfZGVpbml0ID0gYWlyb2hhX25wdV9wcGVfZGVpbml0O1xcbiA3MzM6XFx0XFx0bnB1LVxcdTAwM2VvcHMucHBlX2luaXRfc3RhdHMgPSBhaXJvaGFfbnB1X3BwZV9zdGF0c19zZXR1cDtcXG4gNzM0OlxcdFxcdG5wdS1cXHUwMDNlb3BzLnBwZV9mbHVzaF9zcmFtX2VudHJpZXMgPSBhaXJvaGFfbnB1X3BwZV9mbHVzaF9zcmFtX2VudHJpZXM7XFxuIDczNTpcXHRcXHRucHUtXFx1MDAzZW9wcy5wcGVfZm9lX2NvbW1pdF9lbnRyeSA9IGFpcm9oYV9ucHVfZm9lX2NvbW1pdF9lbnRyeTtcXG4gNzM2OlxcdFxcdG5wdS1cXHUwMDNlb3BzLndsYW5faW5pdF9yZXNlcnZlZF9tZW1vcnkgPSBhaXJvaGFfbnB1X3dsYW5faW5pdF9tZW1vcnk7XFxuIDczNzpcXHRcXHRucHUtXFx1MDAzZW9wcy53bGFuX3NlbmRfbXNnID0gYWlyb2hhX25wdV93bGFuX21zZ19zZW5kO1xcbiA3Mzg6XFx0XFx0bnB1LVxcdTAwM2VvcHMud2xhbl9nZXRfbXNnID0gYWlyb2hhX25wdV93bGFuX21zZ19nZXQ7XFxuIDczOTpcXHRcXHRucHUtXFx1MDAzZW9wcy53bGFuX2dldF9xdWV1ZV9hZGRyID0gYWlyb2hhX25wdV93bGFuX3F1ZXVlX2FkZHJfZ2V0O1xcbiA3NDA6XFx0XFx0bnB1LVxcdTAwM2VvcHMud2xhbl9zZXRfaXJxX3N0YXR1cyA9IGFpcm9oYV9ucHVfd2xhbl9pcnFfc3RhdHVzX3NldDtcXG4gNzQxOlxcdFxcdG5wdS1cXHUwMDNlb3BzLndsYW5fZ2V0X2lycV9zdGF0dXMgPSBhaXJvaGFfbnB1X3dsYW5faXJxX3N0YXR1c19nZXQ7XFxuIDc0MjpcXHRcXHRucHUtXFx1MDAzZW9wcy53bGFuX2VuYWJsZV9pcnEgPSBhaXJvaGFfbnB1X3dsYW5faXJxX2VuYWJsZTtcXG4gNzQzOlxcdFxcdG5wdS1cXHUwMDNlb3BzLndsYW5fZGlzYWJsZV9pcnEgPSBhaXJvaGFfbnB1X3dsYW5faXJxX2Rpc2FibGU7XFxuIDc0NDpcXHRcXG4gNzQ1OlxcdFxcdG5wdS1cXHUwMDNlcmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9tbWlvKGRldiwgYmFzZSwgXFx1MDAyNnJlZ21hcF9jb25maWcpO1xcbiA3NDY6XFx0XFx0aWYgKElTX0VSUihucHUtXFx1MDAzZXJlZ21hcCkpXFxuIDc0NzpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihucHUtXFx1MDAzZXJlZ21hcCk7XFxuIDc0ODpcXHRcXG4gNzQ5OlxcdFxcdGVyciA9IG9mX3Jlc2VydmVkX21lbV9yZWdpb25fdG9fcmVzb3VyY2UoZGV2LVxcdTAwM2VvZl9ub2RlLCAwLCBcXHUwMDI2cmVzKTtcXG4gNzUwOlxcdFxcdGlmIChlcnIpXFxuIDc1MTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA3NTI6XFx0XFxuIDc1MzpcXHRcXHRpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApO1xcbiA3NTQ6XFx0XFx0aWYgKGlycSBcXHUwMDNjIDApXFxuIDc1NTpcXHRcXHRcXHRyZXR1cm4gaXJxO1xcbiA3NTY6XFx0XFxuIDc1NzpcXHRcXHRlcnIgPSBkZXZtX3JlcXVlc3RfaXJxKGRldiwgaXJxLCBhaXJvaGFfbnB1X21ib3hfaGFuZGxlcixcXG4gNzU4OlxcdFxcdFxcdFxcdCAgICAgICBJUlFGX1NIQVJFRCwgXFxcImFpcm9oYS1ucHUtbWJveFxcXCIsIG5wdSk7XFxuIDc1OTpcXHRcXHRpZiAoZXJyKVxcbiA3NjA6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNzYxOlxcdFxcbiA3NjI6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUobnB1LVxcdTAwM2Vjb3Jlcyk7IGkrKykge1xcbiA3NjM6XFx0XFx0XFx0c3RydWN0IGFpcm9oYV9ucHVfY29yZSAqY29yZSA9IFxcdTAwMjZucHUtXFx1MDAzZWNvcmVzW2ldO1xcbiA3NjQ6XFx0XFxuIDc2NTpcXHRcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2Y29yZS1cXHUwMDNlbG9jayk7XFxuIDc2NjpcXHRcXHRcXHRjb3JlLVxcdTAwM2VucHUgPSBucHU7XFxuIDc2NzpcXHRcXG4gNzY4OlxcdFxcdFxcdGlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgaSArIDEpO1xcbiA3Njk6XFx0XFx0XFx0aWYgKGlycSBcXHUwMDNjIDApXFxuIDc3MDpcXHRcXHRcXHRcXHRyZXR1cm4gaXJxO1xcbiA3NzE6XFx0XFxuIDc3MjpcXHRcXHRcXHRlcnIgPSBkZXZtX3JlcXVlc3RfaXJxKGRldiwgaXJxLCBhaXJvaGFfbnB1X3dkdF9oYW5kbGVyLFxcbiA3NzM6XFx0XFx0XFx0XFx0XFx0ICAgICAgIElSUUZfU0hBUkVELCBcXFwiYWlyb2hhLW5wdS13ZHRcXFwiLCBjb3JlKTtcXG4gNzc0OlxcdFxcdFxcdGlmIChlcnIpXFxuIDc3NTpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA3NzY6XFx0XFxuIDc3NzpcXHRcXHRcXHRJTklUX1dPUksoXFx1MDAyNmNvcmUtXFx1MDAzZXdkdF93b3JrLCBhaXJvaGFfbnB1X3dkdF93b3JrKTtcXG4gNzc4OlxcdFxcdH1cXG4gNzc5OlxcdFxcbiA3ODA6XFx0XFx0Lyogd2xhbiBJUlEgbGluZXMgKi9cXG4gNzgxOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKG5wdS1cXHUwMDNlaXJxcyk7IGkrKykge1xcbiA3ODI6XFx0XFx0XFx0aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCBpICsgQVJSQVlfU0laRShucHUtXFx1MDAzZWNvcmVzKSArIDEpO1xcbiA3ODM6XFx0XFx0XFx0aWYgKGlycSBcXHUwMDNjIDApXFxuIDc4NDpcXHRcXHRcXHRcXHRyZXR1cm4gaXJxO1xcbiA3ODU6XFx0XFxuIDc4NjpcXHRcXHRcXHRucHUtXFx1MDAzZWlycXNbaV0gPSBpcnE7XFxuIDc4NzpcXHRcXHR9XFxuIDc4ODpcXHRcXG4gNzg5OlxcdFxcdGVyciA9IGRtYV9zZXRfY29oZXJlbnRfbWFzayhkZXYsIERNQV9CSVRfTUFTSygzMikpO1xcbiA3OTA6XFx0XFx0aWYgKGVycilcXG4gNzkxOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDc5MjpcXHRcXG4gNzkzOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKG5wdS1cXHUwMDNlY29yZXMpOyBpKyspIHtcXG4gNzk0OlxcdFxcdFxcdHN0cnVjdCBhaXJvaGFfbnB1X2NvcmUgKmNvcmUgPSBcXHUwMDI2bnB1LVxcdTAwM2Vjb3Jlc1tpXTtcXG4gNzk1OlxcdFxcbiA3OTY6XFx0XFx0XFx0Y29yZS1cXHUwMDNlYnVmID0gZG1hbV9hbGxvY19jb2hlcmVudChkZXYsIEFJUk9IQV9OUFVfTUJPWF9TSVpFLFxcbiA3OTc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNmNvcmUtXFx1MDAzZWFkZHIsIEdGUF9LRVJORUwpO1xcbiA3OTg6XFx0XFx0XFx0aWYgKCFjb3JlLVxcdTAwM2VidWYpXFxuIDc5OTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gODAwOlxcdFxcdH1cXG4gODAxOlxcdFxcbiA4MDI6XFx0XFx0ZXJyID0gYWlyb2hhX25wdV9ydW5fZmlybXdhcmUoZGV2LCBiYXNlLCBcXHUwMDI2cmVzKTtcXG4gODAzOlxcdFxcdGlmIChlcnIpXFxuIDgwNDpcXHRcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgXFxcImZhaWxlZCB0byBydW4gbnB1IGZpcm13YXJlXFxcXG5cXFwiKTtcXG4gODA1OlxcdFxcbiA4MDY6XFx0XFx0cmVnbWFwX3dyaXRlKG5wdS1cXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTlBVX01JQigxMCksXFxuIDgwNzpcXHRcXHRcXHQgICAgIHJlcy5zdGFydCArIE5QVV9FTjc1ODFfRklSTVdBUkVfUlYzMl9NQVhfU0laRSk7XFxuIDgwODpcXHRcXHRyZWdtYXBfd3JpdGUobnB1LVxcdTAwM2VyZWdtYXAsIFJFR19DUl9OUFVfTUlCKDExKSwgMHg0MDAwMCk7IC8qIFNSQU0gMjU2SyAqL1xcbiA4MDk6XFx0XFx0cmVnbWFwX3dyaXRlKG5wdS1cXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTlBVX01JQigxMiksIDApO1xcbiA4MTA6XFx0XFx0cmVnbWFwX3dyaXRlKG5wdS1cXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTlBVX01JQigyMSksIDEpO1xcbiA4MTE6XFx0XFx0bXNsZWVwKDEwMCk7XFxuIDgxMjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTc6NDA6MTcuMDYwODEyNjE2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA5MjM0NDAwMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nIEFzc2Vzc21lbnQ6IEFpcm9oYSBFTjc1ODEgTlBVIERyaXZlcioqXG5cbk9rYXksIHNvIHRoZSBkcml2ZXIgdXNlcyBgb2ZfcmVzZXJ2ZWRfbWVtX3JlZ2lvbl90b19yZXNvdXJjZSgpYCwgd2hpY2ggaXMgYSBrZXkgcGllY2UuIElmIEkgd2FudGVkIHRvIGZ1enogdGhpcywgSSdkIGhhdmUgdG8gZ2V0IHN5emthbGxlciB0byBnZW5lcmF0ZSBhIGRldmljZSB0cmVlIHdpdGggcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbnMuIEkga25vdyBzeXprYWxsZXIgY2FuIGRvIHRoaXMgaW4gc29tZSBjYXNlcywgbWF5YmUgdXNpbmcgcHNldWRvLXN5c2NhbGxzIGxpa2UgYHN5el9pbml0X25ldF9zb2NrZXRgIGlmIGl0IGhhcyBhIGRlZmluaXRpb24gZm9yIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSwgYnV0IHVzdWFsbHkgc3l6a2FsbGVyIGRvZXNuJ3QgY3JlYXRlIHBsYXRmb3JtIGRldmljZXMgd2l0aCByZXNlcnZlZCBtZW1vcnkgdW5sZXNzIHRoZXJlJ3MgYSBzeXpsYW5nIGRlc2NyaXB0aW9uLiBJIHRob3VnaHQsIGJyaWVmbHksIGFib3V0IGBzeXpfZ2VuZXRsaW5rX2dldF9mYW1pbHlgLCBidXQgdGhhdCdzIG5vdCB0aGUgcmlnaHQgcGF0aC4gUGxhdGZvcm0gZGV2aWNlcyBhcmUgaW5zdGFudGlhdGVkIHZpYSBkZXZpY2UgdHJlZSBvdmVybGF5cywgcmlnaHQ/IEFuZCBJIHJlY2FsbCBzeXprYWxsZXIgaGFzICpzb21lKiBsaW1pdGVkIHN1cHBvcnQgZm9yIHRob3NlLCBpbiB0aGluZ3MgbGlrZSBgc3l6X21vdW50X2ltYWdlYCwgYnV0IGl0J3Mgbm90IGlkZWFsLlxuXG5DcnVjaWFsbHksIHRoaXMgaXMgYSBuZXR3b3JrIHByb2Nlc3NpbmcgdW5pdCBkcml2ZXIgZm9yIHRoZSBBaXJvaGEgRU43NTgxLiBUaGUgcHJvbXB0IG1lbnRpb25zIGEgc3BlY2lmaWMgbGlzdCBvZiBkZXZpY2VzIHRvIGNoZWNrLiBOb3csIGl0J3Mgbm90IGEgUENJZSBjYXJkLCBidXQgaXQgKmlzKiB2ZW5kb3Itc3BlY2lmaWMgU29DIGhhcmR3YXJlIOKAkyB0aGUgRU43NTgxLiBBbmQgdGhlIHByb21wdCBpcyBjbGVhciB0aGF0IGRyaXZlcnMgbmVlZGluZyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gUUVNVSBhcmUgYSBcIm5vLWdvXCIuIFRoZSBFTjc1ODEgbmVlZHMgcGh5c2ljYWwgaGFyZHdhcmUgYW5kIGFzIGZhciBhcyBJIGtub3csIHN0YW5kYXJkIFFFTVUgZG9lc24ndCBlbXVsYXRlIHRoZSBFTjc1ODEuIFRoaXMgbG9va3MgbGlrZSBhIGRlYWQgZW5kIGZvciBzdGFuZGFyZCBRRU1VIGZ1enppbmcuXG5cbkJ1dCB3YWl0LCBob2xkIG9uLiBJcyBpdCAqcG9zc2libGUqIHRvIHJlYWNoIHRoaXMgY29kZSBhdCBhbGwgaW4gUUVNVT8gSSBzaG91bGQgcXVpY2tseSBjaGVjayBpZiB0aGVyZSBpcyAqYW55KiBFTjc1ODEgZW11bGF0aW9uIGF2YWlsYWJsZS4gTm9wZSwgbm90IHRoYXQgSSBjYW4gZmluZC5cblxuU28sIGNhbiBzeXprYWxsZXIgZnV6eiB0aGlzPyBXZWxsLCB0aGUgcXVlc3Rpb24gYm9pbHMgZG93biB0byB3aGV0aGVyIHN5emthbGxlciBjYW4gaW5zdGFudGlhdGUgdGhlIHBsYXRmb3JtIGRldmljZS4gU3l6a2FsbGVyJ3MgYHN5el9kZXZfaW5pdGAgb3Igc2ltaWxhciBtaWdodCBiZSBhYmxlIHRvIGNyZWF0ZSBwbGF0Zm9ybSBkZXZpY2VzLCBpZiBJIGNhbiBtYXAgbWVtb3J5LCBwcm92aWRlIElSUXMsIGFuZCBtb3N0IGltcG9ydGFudGx5LCB0aGUgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUsIHNvIGEgY2hlY2sgb24gd2hldGhlciBhaXJvaGFfbnB1IGhhcyBhbnkgc3l6a2FsbGVyIGRlc2NyaXB0aW9uIHdvdWxkIGJlIHVzZWZ1bC4gVWx0aW1hdGVseSwgdGhpcyBsb29rcyB1bmxpa2VseSB0byBiZSB3b3J0aCBwdXJzdWluZyB3aXRob3V0IHNpZ25pZmljYW50IGVmZm9ydCB0byBlbXVsYXRlIHRoZSBzcGVjaWZpYyBoYXJkd2FyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIyNSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE3OjQwOjI3Ljk4NDI1NTAzM1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzkyMjM1NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWlyb2hhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInN5cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE3OjQwOjI4LjA0ODE4NzAxOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwMzY5MTQ0NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudDogQWlyb2hhIE5QVSBEcml2ZXIgYW5kIEZ1enppbmcgRmVhc2liaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZXJlIGFyZSBubyBzeXpsYW5nIGRlc2NyaXB0aW9ucyBhdmFpbGFibGUgZm9yIHRoaXMgQWlyb2hhIGNvbXBvbmVudCwgd2hpY2ggaXMgYSByZWQgZmxhZywgYnV0IHRoZSBjb3JlIGlzc3VlIGhlcmUgaXMgdGhlIGhhcmR3YXJlIGRlcGVuZGVuY3kuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU29DIE5QVSBkcml2ZXIsIGFuZCBiYXNlZCBvbiB3aGF0IEkga25vdyBhYm91dCB0aGVzZSBraW5kcyBvZiBkcml2ZXJzLCBpdCAqYWJzb2x1dGVseSogcmVxdWlyZXMgdGhlIGFjdHVhbCBBaXJvaGEgRU43NTgxIFNvQyBoYXJkd2FyZSB0byBmdW5jdGlvbi4gSXQncyBub3Qgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGFkZXF1YXRlbHkgZW11bGF0ZWQgd2l0aGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudCwgb3IgZXZlbiB1c2luZyBzcGVjaWFsaXplZCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS4gSXQncyBzaW1wbHkgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nLlxuXG5MZXQgbWUgcXVpY2tseSByZS1yZWFkIHRoZSBwcm9tcHQgdG8gYmUgc3VyZTogKlwiLi4uQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLi4uIC0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycy4uLiB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cIipcblxuWXVwLCB0aGF0IHNlYWxzIGl0LiBUaGlzICpkaXJlY3RseSogZmFsbHMgaW50byB0aGUgY2F0ZWdvcnkgb2YgY29kZSB0aGF0IGlzIGZ1bmRhbWVudGFsbHkgaW5hY2Nlc3NpYmxlIGZvciBmdXp6aW5nLiBJdCdzIGFuIEFpcm9oYSBFTjc1ODEgTlBVIGRyaXZlci4gSSBrbm93IHRoYXQga2luZCBvZiBoYXJkd2FyZS4gSXQgbmVlZHMgdGhlIHBoeXNpY2FsIFNvQy4gVGhlIGNvZGUgcGF0aCBtb2RpZmljYXRpb24gY29uY2VybnMgdGhlIGRyaXZlciBhdCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuY2AuIFRoZSBkcml2ZXIncyBpbmhlcmVudCBkZXBlbmRlbmNlIG9uIHRoZSBzcGVjaWZpYyBBaXJvaGEgU29DIGFyY2hpdGVjdHVyZSBtYWtlcyBpdCBpbXBvc3NpYmxlIHRvIHJlYWNoIHRoZXNlIGNvZGUgcGF0aHMgaW4gYW55IHByYWN0aWNhbCB2aXJ0dWFsaXplZCBzZXR0aW5nLiBUaGVyZWZvcmUsIHRoZSBkZWNpc2lvbiBpcyBjbGVhcjogYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLiBUaGUgcGF0Y2gncyB0YXJnZXQgaXMgdW4tZnV6emFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyMzgsIk91dHB1dFRva2VucyI6MTE0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE3OjQwOjM1LjA4NTEwNDE3NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgRU43NTgxIE5QVSBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMpLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNvQyBoYXJkd2FyZSBibG9jayB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGUgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgc28gaXQgY2Fubm90IGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgRU43NTgxIE5QVSBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMpLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNvQyBoYXJkd2FyZSBibG9jayB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGUgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgc28gaXQgY2Fubm90IGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowgpscn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-06 16:50:57 +0000 UTC FinishedAt: 2026-08-06 17:40:36 +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+CgkJCTx0ZD4yMDI2LzA4LzA2IDE3OjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgRU43NTgxIE5QVSBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMpLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNvQyBoYXJkd2FyZSBibG9jayB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGUgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgc28gaXQgY2Fubm90IGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTc6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjODAwMjBkNDZmNGZhZWVkOWUwZDUxYWQ0NTliNTRlNDY3YTRhNTYzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgNiAxNzozOTo1NyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuY1xuaW5kZXggYjY3OWJlZDk1MmRlMy4uZTFlMGRkYjkyZjAzNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNcbkBAIC0yMyw2ICYjNDM7MjMsMTIgQEBcbiAjZGVmaW5lIE5QVV9FTjc1ODFfRklSTVdBUkVfUlYzMl9NQVhfU0laRVx0MHgyMDAwMDBcbiAjZGVmaW5lIE5QVV9FTjc1ODFfRklSTVdBUkVfREFUQV9NQVhfU0laRVx0MHgxMDAwMFxuICNkZWZpbmUgTlBVX0RVTVBfU0laRVx0XHRcdFx0NTEyXG4mIzQzOy8qXG4mIzQzOyAqIE1haWxib3ggRE1BIHBheWxvYWQgc2l6ZS4gQ292ZXJzIHNpemVvZihzdHJ1Y3QgcHBlX21ib3hfZGF0YSkgKDI4KSBhbmRcbiYjNDM7ICogV0xBTiBUTFYgbWVzc2FnZXMgKGhlYWRlciAmIzQzOyBwYXlsb2FkKTsgbGFyZ2VzdCBpbi10cmVlIFdMQU4gcGF5bG9hZCB0b2RheVxuJiM0MzsgKiBpcyAxNiBieXRlcyAoSU5PREVfVFhSWF9SRUdfQUREUikuIEtlZXAgaGVhZHJvb20gZm9yIGZ1dHVyZSBjb21tYW5kcy5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgQUlST0hBX05QVV9NQk9YX1NJWkVcdFx0XHQyNTZcbiBcbiAjZGVmaW5lIFJFR19OUFVfTE9DQUxfU1JBTVx0XHQweDBcbiBcbkBAIC0xNjEsMjEgJiM0MzsxNjcsMzIgQEAgc3RydWN0IHdsYW5fbWJveF9kYXRhIHtcbiB9O1xuIFxuIHN0YXRpYyBpbnQgYWlyb2hhX25wdV9zZW5kX21zZyhzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCBpbnQgZnVuY19pZCxcbi1cdFx0XHQgICAgICAgdm9pZCAqcCwgaW50IHNpemUpXG4mIzQzO1x0XHRcdCAgICAgICBjb25zdCB2b2lkICpyZXEsIGludCBzaXplLFxuJiM0MztcdFx0XHQgICAgICAgdm9pZCAqcnNwLCBpbnQgcnNwX29mZiwgaW50IHJzcF9sZW4pXG4ge1xuIFx0dTE2IGNvcmUgPSAwOyAvKiBGSVhNRSAqL1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfbnB1X2NvcmUgKmMgPSBcdTAwMjZucHUtXHUwMDNlY29yZXNbY29yZV07XG4gXHR1MzIgdmFsLCBvZmZzZXQgPSBjb3JlIFx1MDAzY1x1MDAzYyA0O1xuLVx0ZG1hX2FkZHJfdCBkbWFfYWRkcjtcbiBcdGludCByZXQ7XG4gXG4tXHRkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKG5wdS1cdTAwM2VkZXYsIHAsIHNpemUsIERNQV9CSURJUkVDVElPTkFMKTtcbi1cdHJldCA9IGRtYV9tYXBwaW5nX2Vycm9yKG5wdS1cdTAwM2VkZXYsIGRtYV9hZGRyKTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0aWYgKHNpemUgXHUwMDNlIEFJUk9IQV9OUFVfTUJPWF9TSVpFIHx8XG4mIzQzO1x0ICAgIChyc3AgXHUwMDI2XHUwMDI2IChyc3Bfb2ZmIFx1MDAzYyAwIHx8IHJzcF9sZW4gXHUwMDNjIDAgfHxcbiYjNDM7XHRcdCAgICAgcnNwX29mZiAmIzQzOyByc3BfbGVuIFx1MDAzZSBzaXplKSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdHNwaW5fbG9ja19iaChcdTAwMjZucHUtXHUwMDNlY29yZXNbY29yZV0ubG9jayk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNYWlsYm94IHBheWxvYWRzIGFyZSBiaWRpcmVjdGlvbmFsIChDUFUgcmVxdWVzdCwgTlBVIHJlc3BvbnNlKS5cbiYjNDM7XHQgKiBPbiBFTjc1ODEmIzQzO01UNzk5Niwgc3RyZWFtaW5nIERNQV9CSURJUkVDVElPTkFMIGFnYWluc3QgdGhlXG4mIzQzO1x0ICogY2FsbGVyIGt6YWxsb2MoKSBidWZmZXIgY2FuIGxlYXZlIFdMQU5fRlVOQ19HRVRfV0FJVF9OUFVfVkVSU0lPTlxuJiM0MztcdCAqIHJlYWRpbmcgYXMgMC4wIGRlc3BpdGUgTUJPWCBzdWNjZXNzLiBSZXVzZSBhIHByb2JlLXRpbWUgY29oZXJlbnRcbiYjNDM7XHQgKiBib3VuY2UgYnVmZmVyIHVuZGVyIHRoZSBwZXItY29yZSBsb2NrIChhbHNvIHVzZWQgZnJvbSBQUEVcbiYjNDM7XHQgKiBmb2VfY29tbWl0IHVuZGVyIGF0b21pYyBjb250ZXh0KS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2Yy1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0bWVtY3B5KGMtXHUwMDNlYnVmLCByZXEsIHNpemUpO1xuIFxuLVx0cmVnbWFwX3dyaXRlKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMCkgJiM0Mzsgb2Zmc2V0LCBkbWFfYWRkcik7XG4mIzQzO1x0cmVnbWFwX3dyaXRlKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMCkgJiM0Mzsgb2Zmc2V0LCBjLVx1MDAzZWFkZHIpO1xuIFx0cmVnbWFwX3dyaXRlKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMSkgJiM0Mzsgb2Zmc2V0LCBzaXplKTtcbiBcdHJlZ21hcF9yZWFkKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMikgJiM0Mzsgb2Zmc2V0LCBcdTAwMjZ2YWwpO1xuIFx0cmVnbWFwX3dyaXRlKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMikgJiM0Mzsgb2Zmc2V0LCB2YWwgJiM0MzsgMSk7XG5AQCAtMTg5LDkgJiM0MzsyMDYsMTAgQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X3NlbmRfbXNnKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBmdW5jX2lkLFxuIFx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IEZJRUxEX0dFVChNQk9YX01TR19TVEFUVVMsIHZhbCkgIT0gTlBVX01CT1hfU1VDQ0VTUylcbiBcdFx0cmV0ID0gLUVJTlZBTDtcbiBcbi1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5wdS1cdTAwM2Vjb3Jlc1tjb3JlXS5sb2NrKTtcbiYjNDM7XHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgcnNwKVxuJiM0MztcdFx0bWVtY3B5KHJzcCwgYy1cdTAwM2VidWYgJiM0MzsgcnNwX29mZiwgcnNwX2xlbik7XG4gXG4tXHRkbWFfdW5tYXBfc2luZ2xlKG5wdS1cdTAwM2VkZXYsIGRtYV9hZGRyLCBzaXplLCBETUFfQklESVJFQ1RJT05BTCk7XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Yy1cdTAwM2Vsb2NrKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTM0Myw3ICYjNDM7MzYxLDcgQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X3BwZV9pbml0KHN0cnVjdCBhaXJvaGFfbnB1ICpucHUpXG4gXHRwcGVfZGF0YS1cdTAwM2Vpbml0X2luZm8ud2FuX21vZGUgPSBRRE1BX1dBTl9FVEhFUjtcbiBcbiBcdGVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19QUEUsIHBwZV9kYXRhLFxuLVx0XHRcdFx0ICBzaXplb2YoKnBwZV9kYXRhKSk7XG4mIzQzO1x0XHRcdFx0ICBzaXplb2YoKnBwZV9kYXRhKSwgTlVMTCwgMCwgMCk7XG4gXHRrZnJlZShwcGVfZGF0YSk7XG4gXG4gXHRyZXR1cm4gZXJyO1xuQEAgLTM2Miw3ICYjNDM7MzgwLDcgQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X3BwZV9kZWluaXQoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSlcbiBcdHBwZV9kYXRhLVx1MDAzZWZ1bmNfaWQgPSBQUEVfRlVOQ19TRVRfV0FJVF9IV05BVF9ERUlOSVQ7XG4gXG4gXHRlcnIgPSBhaXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgTlBVX0ZVTkNfUFBFLCBwcGVfZGF0YSxcbi1cdFx0XHRcdCAgc2l6ZW9mKCpwcGVfZGF0YSkpO1xuJiM0MztcdFx0XHRcdCAgc2l6ZW9mKCpwcGVfZGF0YSksIE5VTEwsIDAsIDApO1xuIFx0a2ZyZWUocHBlX2RhdGEpO1xuIFxuIFx0cmV0dXJuIGVycjtcbkBAIC0zODYsNyAmIzQzOzQwNCw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcGVfZmx1c2hfc3JhbV9lbnRyaWVzKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsXG4gXHRwcGVfZGF0YS1cdTAwM2VzZXRfaW5mby5zaXplID0gc3JhbV9udW1fZW50cmllcztcbiBcbiBcdGVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19QUEUsIHBwZV9kYXRhLFxuLVx0XHRcdFx0ICBzaXplb2YoKnBwZV9kYXRhKSk7XG4mIzQzO1x0XHRcdFx0ICBzaXplb2YoKnBwZV9kYXRhKSwgTlVMTCwgMCwgMCk7XG4gXHRrZnJlZShwcGVfZGF0YSk7XG4gXG4gXHRyZXR1cm4gZXJyO1xuQEAgLTQxMSw3ICYjNDM7NDI5LDcgQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X2ZvZV9jb21taXRfZW50cnkoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSxcbiBcdFx0XHRcdFx0ICA6IFBQRV9TUkFNX1NFVF9FTlRSWTtcbiBcbiBcdGVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19QUEUsIHBwZV9kYXRhLFxuLVx0XHRcdFx0ICBzaXplb2YoKnBwZV9kYXRhKSk7XG4mIzQzO1x0XHRcdFx0ICBzaXplb2YoKnBwZV9kYXRhKSwgTlVMTCwgMCwgMCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIG91dDtcbiBcbkBAIC00MjAsNyAmIzQzOzQzOCw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX25wdV9mb2VfY29tbWl0X2VudHJ5KHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsXG4gXHRwcGVfZGF0YS1cdTAwM2VzZXRfaW5mby5zaXplID0gc2l6ZW9mKHUzMik7XG4gXG4gXHRlcnIgPSBhaXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgTlBVX0ZVTkNfUFBFLCBwcGVfZGF0YSxcbi1cdFx0XHRcdCAgc2l6ZW9mKCpwcGVfZGF0YSkpO1xuJiM0MztcdFx0XHRcdCAgc2l6ZW9mKCpwcGVfZGF0YSksIE5VTEwsIDAsIDApO1xuIG91dDpcbiBcdGtmcmVlKHBwZV9kYXRhKTtcbiBcbkBAIC00NDMsNiAmIzQzOzQ2MSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcGVfc3RhdHNfc2V0dXAoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSxcbiBcdHBwZV9kYXRhLVx1MDAzZXN0YXRzX2luZm8uZm9lX3N0YXRzX2FkZHIgPSBmb2Vfc3RhdHNfYWRkcjtcbiBcbiBcdGVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19QUEUsIHBwZV9kYXRhLFxuJiM0MztcdFx0XHRcdCAgc2l6ZW9mKCpwcGVfZGF0YSksIHBwZV9kYXRhLCAwLFxuIFx0XHRcdFx0ICBzaXplb2YoKnBwZV9kYXRhKSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIG91dDtcbkBAIC00NzUsNyAmIzQzOzQ5NCw4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX25wdV93bGFuX21zZ19zZW5kKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBpZmluZGV4LFxuIFx0d2xhbl9kYXRhLVx1MDAzZWZ1bmNfaWQgPSBmdW5jX2lkO1xuIFx0bWVtY3B5KHdsYW5fZGF0YS1cdTAwM2VkLCBkYXRhLCBkYXRhX2xlbik7XG4gXG4tXHRlcnIgPSBhaXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgTlBVX0ZVTkNfV0lGSSwgd2xhbl9kYXRhLCBsZW4pO1xuJiM0MztcdGVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19XSUZJLCB3bGFuX2RhdGEsIGxlbixcbiYjNDM7XHRcdFx0XHQgIE5VTEwsIDAsIDApO1xuIFx0a2ZyZWUod2xhbl9kYXRhKTtcbiBcbiBcdHJldHVybiBlcnI7XG5AQCAtNDk3LDkgJiM0Mzs1MTcsOSBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfd2xhbl9tc2dfZ2V0KHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBpZmluZGV4LFxuIFx0d2xhbl9kYXRhLVx1MDAzZWZ1bmNfdHlwZSA9IE5QVV9PUF9HRVQ7XG4gXHR3bGFuX2RhdGEtXHUwMDNlZnVuY19pZCA9IGZ1bmNfaWQ7XG4gXG4tXHRlcnIgPSBhaXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgTlBVX0ZVTkNfV0lGSSwgd2xhbl9kYXRhLCBsZW4pO1xuLVx0aWYgKCFlcnIpXG4tXHRcdG1lbWNweShkYXRhLCB3bGFuX2RhdGEtXHUwMDNlZCwgZGF0YV9sZW4pO1xuJiM0MztcdGVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19XSUZJLCB3bGFuX2RhdGEsIGxlbixcbiYjNDM7XHRcdFx0XHQgIGRhdGEsIG9mZnNldG9mKHN0cnVjdCB3bGFuX21ib3hfZGF0YSwgZCksXG4mIzQzO1x0XHRcdFx0ICBkYXRhX2xlbik7XG4gXHRrZnJlZSh3bGFuX2RhdGEpO1xuIFxuIFx0cmV0dXJuIGVycjtcbkBAIC03NzAsNiAmIzQzOzc5MCwxNSBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShucHUtXHUwMDNlY29yZXMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IGFpcm9oYV9ucHVfY29yZSAqY29yZSA9IFx1MDAyNm5wdS1cdTAwM2Vjb3Jlc1tpXTtcbiYjNDM7XG4mIzQzO1x0XHRjb3JlLVx1MDAzZWJ1ZiA9IGRtYW1fYWxsb2NfY29oZXJlbnQoZGV2LCBBSVJPSEFfTlBVX01CT1hfU0laRSxcbiYjNDM7XHRcdFx0XHRcdFx0XHUwMDI2Y29yZS1cdTAwM2VhZGRyLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRcdGlmICghY29yZS1cdTAwM2VidWYpXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRlcnIgPSBhaXJvaGFfbnB1X3J1bl9maXJtd2FyZShkZXYsIGJhc2UsIFx1MDAyNnJlcyk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgXCYjMzQ7ZmFpbGVkIHRvIHJ1biBucHUgZmlybXdhcmVcXG5cJiMzNDspO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc29jL2Fpcm9oYS9haXJvaGFfb2ZmbG9hZC5oIGIvaW5jbHVkZS9saW51eC9zb2MvYWlyb2hhL2Fpcm9oYV9vZmZsb2FkLmhcbmluZGV4IDc1ODlmY2NmZWVmNmQuLjE2YTk4OGFkNzQ2N2MgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NvYy9haXJvaGEvYWlyb2hhX29mZmxvYWQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zb2MvYWlyb2hhL2Fpcm9oYV9vZmZsb2FkLmhcbkBAIC0xNzMsNiAmIzQzOzE3Myw5IEBAIHN0cnVjdCBhaXJvaGFfbnB1IHtcbiBcdFx0LyogcHJvdGVjdCBjb25jdXJyZW50IG5wdSBtZW1vcnkgYWNjZXNzZXMgKi9cbiBcdFx0c3BpbmxvY2tfdCBsb2NrO1xuIFx0XHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd2R0X3dvcms7XG4mIzQzO1x0XHQvKiBDb2hlcmVudCBib3VuY2UgYnVmZmVyIGZvciBtYWlsYm94IGNtZC9yc3AgKi9cbiYjNDM7XHRcdHZvaWQgKmJ1ZjtcbiYjNDM7XHRcdGRtYV9hZGRyX3QgYWRkcjtcbiBcdH0gY29yZXNbTlBVX05VTV9DT1JFU107XG4gXG4gXHRpbnQgaXJxc1tOUFVfTlVNX0lSUV07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTc6NDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgRU43NTgxIE5QVSBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMpLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNvQyBoYXJkd2FyZSBibG9jayB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGUgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgc28gaXQgY2Fubm90IGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjODAwMjBkNDZmNGZhZWVkOWUwZDUxYWQ0NTliNTRlNDY3YTRhNTYzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgNiAxNzozOTo1NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jCmluZGV4IGI2NzliZWQ5NTJkZTMuLmUxZTBkZGI5MmYwMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYwpAQCAtMjMsNiAmIzQzOzIzLDEyIEBACiAjZGVmaW5lIE5QVV9FTjc1ODFfRklSTVdBUkVfUlYzMl9NQVhfU0laRQkweDIwMDAwMAogI2RlZmluZSBOUFVfRU43NTgxX0ZJUk1XQVJFX0RBVEFfTUFYX1NJWkUJMHgxMDAwMAogI2RlZmluZSBOUFVfRFVNUF9TSVpFCQkJCTUxMgomIzQzOy8qCiYjNDM7ICogTWFpbGJveCBETUEgcGF5bG9hZCBzaXplLiBDb3ZlcnMgc2l6ZW9mKHN0cnVjdCBwcGVfbWJveF9kYXRhKSAoMjgpIGFuZAomIzQzOyAqIFdMQU4gVExWIG1lc3NhZ2VzIChoZWFkZXIgJiM0MzsgcGF5bG9hZCk7IGxhcmdlc3QgaW4tdHJlZSBXTEFOIHBheWxvYWQgdG9kYXkKJiM0MzsgKiBpcyAxNiBieXRlcyAoSU5PREVfVFhSWF9SRUdfQUREUikuIEtlZXAgaGVhZHJvb20gZm9yIGZ1dHVyZSBjb21tYW5kcy4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIEFJUk9IQV9OUFVfTUJPWF9TSVpFCQkJMjU2CiAKICNkZWZpbmUgUkVHX05QVV9MT0NBTF9TUkFNCQkweDAKIApAQCAtMTYxLDIxICYjNDM7MTY3LDMyIEBAIHN0cnVjdCB3bGFuX21ib3hfZGF0YSB7CiB9OwogCiBzdGF0aWMgaW50IGFpcm9oYV9ucHVfc2VuZF9tc2coc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGZ1bmNfaWQsCi0JCQkgICAgICAgdm9pZCAqcCwgaW50IHNpemUpCiYjNDM7CQkJICAgICAgIGNvbnN0IHZvaWQgKnJlcSwgaW50IHNpemUsCiYjNDM7CQkJICAgICAgIHZvaWQgKnJzcCwgaW50IHJzcF9vZmYsIGludCByc3BfbGVuKQogewogCXUxNiBjb3JlID0gMDsgLyogRklYTUUgKi8KJiM0MzsJc3RydWN0IGFpcm9oYV9ucHVfY29yZSAqYyA9ICZhbXA7bnB1LSZndDtjb3Jlc1tjb3JlXTsKIAl1MzIgdmFsLCBvZmZzZXQgPSBjb3JlICZsdDsmbHQ7IDQ7Ci0JZG1hX2FkZHJfdCBkbWFfYWRkcjsKIAlpbnQgcmV0OwogCi0JZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZShucHUtJmd0O2RldiwgcCwgc2l6ZSwgRE1BX0JJRElSRUNUSU9OQUwpOwotCXJldCA9IGRtYV9tYXBwaW5nX2Vycm9yKG5wdS0mZ3Q7ZGV2LCBkbWFfYWRkcik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKJiM0MzsJaWYgKHNpemUgJmd0OyBBSVJPSEFfTlBVX01CT1hfU0laRSB8fAomIzQzOwkgICAgKHJzcCAmYW1wOyZhbXA7IChyc3Bfb2ZmICZsdDsgMCB8fCByc3BfbGVuICZsdDsgMCB8fAomIzQzOwkJICAgICByc3Bfb2ZmICYjNDM7IHJzcF9sZW4gJmd0OyBzaXplKSkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKIAotCXNwaW5fbG9ja19iaCgmYW1wO25wdS0mZ3Q7Y29yZXNbY29yZV0ubG9jayk7CiYjNDM7CS8qCiYjNDM7CSAqIE1haWxib3ggcGF5bG9hZHMgYXJlIGJpZGlyZWN0aW9uYWwgKENQVSByZXF1ZXN0LCBOUFUgcmVzcG9uc2UpLgomIzQzOwkgKiBPbiBFTjc1ODEmIzQzO01UNzk5Niwgc3RyZWFtaW5nIERNQV9CSURJUkVDVElPTkFMIGFnYWluc3QgdGhlCiYjNDM7CSAqIGNhbGxlciBremFsbG9jKCkgYnVmZmVyIGNhbiBsZWF2ZSBXTEFOX0ZVTkNfR0VUX1dBSVRfTlBVX1ZFUlNJT04KJiM0MzsJICogcmVhZGluZyBhcyAwLjAgZGVzcGl0ZSBNQk9YIHN1Y2Nlc3MuIFJldXNlIGEgcHJvYmUtdGltZSBjb2hlcmVudAomIzQzOwkgKiBib3VuY2UgYnVmZmVyIHVuZGVyIHRoZSBwZXItY29yZSBsb2NrIChhbHNvIHVzZWQgZnJvbSBQUEUKJiM0MzsJICogZm9lX2NvbW1pdCB1bmRlciBhdG9taWMgY29udGV4dCkuCiYjNDM7CSAqLwomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtjLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJbWVtY3B5KGMtJmd0O2J1ZiwgcmVxLCBzaXplKTsKIAotCXJlZ21hcF93cml0ZShucHUtJmd0O3JlZ21hcCwgUkVHX0NSX01CUTBfQ1RSTCgwKSAmIzQzOyBvZmZzZXQsIGRtYV9hZGRyKTsKJiM0MzsJcmVnbWFwX3dyaXRlKG5wdS0mZ3Q7cmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDApICYjNDM7IG9mZnNldCwgYy0mZ3Q7YWRkcik7CiAJcmVnbWFwX3dyaXRlKG5wdS0mZ3Q7cmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDEpICYjNDM7IG9mZnNldCwgc2l6ZSk7CiAJcmVnbWFwX3JlYWQobnB1LSZndDtyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMikgJiM0Mzsgb2Zmc2V0LCAmYW1wO3ZhbCk7CiAJcmVnbWFwX3dyaXRlKG5wdS0mZ3Q7cmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDIpICYjNDM7IG9mZnNldCwgdmFsICYjNDM7IDEpOwpAQCAtMTg5LDkgJiM0MzsyMDYsMTAgQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X3NlbmRfbXNnKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBmdW5jX2lkLAogCWlmICghcmV0ICZhbXA7JmFtcDsgRklFTERfR0VUKE1CT1hfTVNHX1NUQVRVUywgdmFsKSAhPSBOUFVfTUJPWF9TVUNDRVNTKQogCQlyZXQgPSAtRUlOVkFMOwogCi0Jc3Bpbl91bmxvY2tfYmgoJmFtcDtucHUtJmd0O2NvcmVzW2NvcmVdLmxvY2spOwomIzQzOwlpZiAoIXJldCAmYW1wOyZhbXA7IHJzcCkKJiM0MzsJCW1lbWNweShyc3AsIGMtJmd0O2J1ZiAmIzQzOyByc3Bfb2ZmLCByc3BfbGVuKTsKIAotCWRtYV91bm1hcF9zaW5nbGUobnB1LSZndDtkZXYsIGRtYV9hZGRyLCBzaXplLCBETUFfQklESVJFQ1RJT05BTCk7CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7Yy0mZ3Q7bG9jayk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzQzLDcgJiM0MzszNjEsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfcHBlX2luaXQoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSkKIAlwcGVfZGF0YS0mZ3Q7aW5pdF9pbmZvLndhbl9tb2RlID0gUURNQV9XQU5fRVRIRVI7CiAKIAllcnIgPSBhaXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgTlBVX0ZVTkNfUFBFLCBwcGVfZGF0YSwKLQkJCQkgIHNpemVvZigqcHBlX2RhdGEpKTsKJiM0MzsJCQkJICBzaXplb2YoKnBwZV9kYXRhKSwgTlVMTCwgMCwgMCk7CiAJa2ZyZWUocHBlX2RhdGEpOwogCiAJcmV0dXJuIGVycjsKQEAgLTM2Miw3ICYjNDM7MzgwLDcgQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X3BwZV9kZWluaXQoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSkKIAlwcGVfZGF0YS0mZ3Q7ZnVuY19pZCA9IFBQRV9GVU5DX1NFVF9XQUlUX0hXTkFUX0RFSU5JVDsKIAogCWVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19QUEUsIHBwZV9kYXRhLAotCQkJCSAgc2l6ZW9mKCpwcGVfZGF0YSkpOwomIzQzOwkJCQkgIHNpemVvZigqcHBlX2RhdGEpLCBOVUxMLCAwLCAwKTsKIAlrZnJlZShwcGVfZGF0YSk7CiAKIAlyZXR1cm4gZXJyOwpAQCAtMzg2LDcgJiM0Mzs0MDQsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfcHBlX2ZsdXNoX3NyYW1fZW50cmllcyhzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LAogCXBwZV9kYXRhLSZndDtzZXRfaW5mby5zaXplID0gc3JhbV9udW1fZW50cmllczsKIAogCWVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19QUEUsIHBwZV9kYXRhLAotCQkJCSAgc2l6ZW9mKCpwcGVfZGF0YSkpOwomIzQzOwkJCQkgIHNpemVvZigqcHBlX2RhdGEpLCBOVUxMLCAwLCAwKTsKIAlrZnJlZShwcGVfZGF0YSk7CiAKIAlyZXR1cm4gZXJyOwpAQCAtNDExLDcgJiM0Mzs0MjksNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfZm9lX2NvbW1pdF9lbnRyeShzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LAogCQkJCQkgIDogUFBFX1NSQU1fU0VUX0VOVFJZOwogCiAJZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1BQRSwgcHBlX2RhdGEsCi0JCQkJICBzaXplb2YoKnBwZV9kYXRhKSk7CiYjNDM7CQkJCSAgc2l6ZW9mKCpwcGVfZGF0YSksIE5VTEwsIDAsIDApOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCkBAIC00MjAsNyAmIzQzOzQzOCw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX25wdV9mb2VfY29tbWl0X2VudHJ5KHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsCiAJcHBlX2RhdGEtJmd0O3NldF9pbmZvLnNpemUgPSBzaXplb2YodTMyKTsKIAogCWVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19QUEUsIHBwZV9kYXRhLAotCQkJCSAgc2l6ZW9mKCpwcGVfZGF0YSkpOwomIzQzOwkJCQkgIHNpemVvZigqcHBlX2RhdGEpLCBOVUxMLCAwLCAwKTsKIG91dDoKIAlrZnJlZShwcGVfZGF0YSk7CiAKQEAgLTQ0Myw2ICYjNDM7NDYxLDcgQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X3BwZV9zdGF0c19zZXR1cChzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LAogCXBwZV9kYXRhLSZndDtzdGF0c19pbmZvLmZvZV9zdGF0c19hZGRyID0gZm9lX3N0YXRzX2FkZHI7CiAKIAllcnIgPSBhaXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgTlBVX0ZVTkNfUFBFLCBwcGVfZGF0YSwKJiM0MzsJCQkJICBzaXplb2YoKnBwZV9kYXRhKSwgcHBlX2RhdGEsIDAsCiAJCQkJICBzaXplb2YoKnBwZV9kYXRhKSk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CkBAIC00NzUsNyAmIzQzOzQ5NCw4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX25wdV93bGFuX21zZ19zZW5kKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBpZmluZGV4LAogCXdsYW5fZGF0YS0mZ3Q7ZnVuY19pZCA9IGZ1bmNfaWQ7CiAJbWVtY3B5KHdsYW5fZGF0YS0mZ3Q7ZCwgZGF0YSwgZGF0YV9sZW4pOwogCi0JZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1dJRkksIHdsYW5fZGF0YSwgbGVuKTsKJiM0MzsJZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1dJRkksIHdsYW5fZGF0YSwgbGVuLAomIzQzOwkJCQkgIE5VTEwsIDAsIDApOwogCWtmcmVlKHdsYW5fZGF0YSk7CiAKIAlyZXR1cm4gZXJyOwpAQCAtNDk3LDkgJiM0Mzs1MTcsOSBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfd2xhbl9tc2dfZ2V0KHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBpZmluZGV4LAogCXdsYW5fZGF0YS0mZ3Q7ZnVuY190eXBlID0gTlBVX09QX0dFVDsKIAl3bGFuX2RhdGEtJmd0O2Z1bmNfaWQgPSBmdW5jX2lkOwogCi0JZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1dJRkksIHdsYW5fZGF0YSwgbGVuKTsKLQlpZiAoIWVycikKLQkJbWVtY3B5KGRhdGEsIHdsYW5fZGF0YS0mZ3Q7ZCwgZGF0YV9sZW4pOwomIzQzOwllcnIgPSBhaXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgTlBVX0ZVTkNfV0lGSSwgd2xhbl9kYXRhLCBsZW4sCiYjNDM7CQkJCSAgZGF0YSwgb2Zmc2V0b2Yoc3RydWN0IHdsYW5fbWJveF9kYXRhLCBkKSwKJiM0MzsJCQkJICBkYXRhX2xlbik7CiAJa2ZyZWUod2xhbl9kYXRhKTsKIAogCXJldHVybiBlcnI7CkBAIC03NzAsNiAmIzQzOzc5MCwxNSBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKG5wdS0mZ3Q7Y29yZXMpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGFpcm9oYV9ucHVfY29yZSAqY29yZSA9ICZhbXA7bnB1LSZndDtjb3Jlc1tpXTsKJiM0MzsKJiM0MzsJCWNvcmUtJmd0O2J1ZiA9IGRtYW1fYWxsb2NfY29oZXJlbnQoZGV2LCBBSVJPSEFfTlBVX01CT1hfU0laRSwKJiM0MzsJCQkJCQkmYW1wO2NvcmUtJmd0O2FkZHIsIEdGUF9LRVJORUwpOwomIzQzOwkJaWYgKCFjb3JlLSZndDtidWYpCiYjNDM7CQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KJiM0MzsKIAllcnIgPSBhaXJvaGFfbnB1X3J1bl9maXJtd2FyZShkZXYsIGJhc2UsICZhbXA7cmVzKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgJiMzNDtmYWlsZWQgdG8gcnVuIG5wdSBmaXJtd2FyZVxuJiMzNDspOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb2MvYWlyb2hhL2Fpcm9oYV9vZmZsb2FkLmggYi9pbmNsdWRlL2xpbnV4L3NvYy9haXJvaGEvYWlyb2hhX29mZmxvYWQuaAppbmRleCA3NTg5ZmNjZmVlZjZkLi4xNmE5ODhhZDc0NjdjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NvYy9haXJvaGEvYWlyb2hhX29mZmxvYWQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NvYy9haXJvaGEvYWlyb2hhX29mZmxvYWQuaApAQCAtMTczLDYgJiM0MzsxNzMsOSBAQCBzdHJ1Y3QgYWlyb2hhX25wdSB7CiAJCS8qIHByb3RlY3QgY29uY3VycmVudCBucHUgbWVtb3J5IGFjY2Vzc2VzICovCiAJCXNwaW5sb2NrX3QgbG9jazsKIAkJc3RydWN0IHdvcmtfc3RydWN0IHdkdF93b3JrOwomIzQzOwkJLyogQ29oZXJlbnQgYm91bmNlIGJ1ZmZlciBmb3IgbWFpbGJveCBjbWQvcnNwICovCiYjNDM7CQl2b2lkICpidWY7CiYjNDM7CQlkbWFfYWRkcl90IGFkZHI7CiAJfSBjb3Jlc1tOUFVfTlVNX0NPUkVTXTsKIAogCWludCBpcnFzW05QVV9OVU1fSVJRXTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY3MgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDM2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaCB0byBhbiBBaXJvaGEgTlBVIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBhZmZlY3RpbmcgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIGBhaXJvaGFfbnB1X3NlbmRfbXNnYCDigJMgaXQmIzM5O3Mgc2hpZnRpbmcgdG8gYSBwcmUtYWxsb2NhdGVkIGNvaGVyZW50IERNQSBidWZmZXIgaW5zdGVhZCBvZiB0aGUgZHluYW1pYyBtYXBwaW5nL3VubWFwcGluZyBhcHByb2FjaC4gU21hcnQgbW92ZSwgdGhhdCBzaG91bGQgYmUgbW9yZSBlZmZpY2llbnQuIFRoZSBhZGRlZCBgcnNwYCwgYHJzcF9vZmZgLCBhbmQgYHJzcF9sZW5gIHBhcmFtZXRlcnMgY2xhcmlmeSBob3cgdGhlIHJlc3BvbnNlIGRhdGEgaXMgaGFuZGxlZCwgbWFraW5nIHRoaXMgYSBtdWNoIGNsZWFuZXIgYXBwcm9hY2guIEFuZCB0aGlzIHByZS1hbGxvY2F0ZWQgYnVmZmVyIGlzIGJlaW5nIGRvbmUgYXQgcHJvYmUgdGltZSB1c2luZyBgZG1hbV9hbGxvY19jb2hlcmVudGAuIE1ha2VzIHNlbnNlLCBzZXRzIHRoaW5ncyB1cCBlYXJseSBhbmQga2VlcHMgdGhpbmdzIHJ1bm5pbmcgc21vb3RobHkuCgpOb3csIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIGNvbnNpZGVyIHRoZSBiaWdnZXIgcGljdHVyZS4gSXMgdGhpcyBhIGRyaXZlciBmb3Igc29tZSBzcGVjaWZpYywgdW4tZW11bGF0ZWQgaGFyZHdhcmU/IFRoZSBkcml2ZXIgaXMgaW4gdGhlIGBhaXJvaGFgIGRpcmVjdG9yeSwgd2hpY2ggaW5kaWNhdGVzIEFpcm9oYSwgYSBzdWJzaWRpYXJ5IG9mIE1lZGlhVGVrLCBpcyB0aGUgdmVuZG9yIGhlcmUuIEl0IGlzIGxpa2VseSB0aGF0IHRoaXMgZHJpdmVyIGlzIGZvciB0aGUgQWlyb2hhIEVONzU4MSBTb0MgTlBVIChOZXR3b3JrIFByb2Nlc3NpbmcgVW5pdCkuIEkga25vdyB3ZSBjYW7igJl0IGVtdWxhdGUgKmV2ZXJ5KiBwaWVjZSBvZiBoYXJkd2FyZSBpbiBRRU1VLiBEb2VzIFFFTVUgc3VwcG9ydCB0aGUgRU43NTgxPyBObywgaXQgbG9va3MgbGlrZSBpdCBpc24mIzM5O3QuCgpIYW5nIG9uLi4uIHRoZSBwcm9tcHQgbWVudGlvbnMgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuIFRoaXMgaXMgYW4gU29DIGRyaXZlciwgbm90IGEgUENJZSBjYXJkLiBCdXQgdGhlIGtleSBpcyB0aGF0IGl0JiMzOTtzIHN0aWxsIGEgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlciB0aGF0IGlzbiYjMzk7dCBlbXVsYXRlZCBieSBRRU1VLiBUaGlzIHBhdGNoIHJlcXVpcmVzIGFuIEVONzU4MSB0byB0ZXN0LCBhbmQgdGhhdCByZXF1aXJlcyBhY3R1YWwgaGFyZHdhcmUsIG5vdCBhbiBlbXVsYXRvci4KCknigJltIGdvaW5nIHRvIGNoZWNrIHRoZSBrZXJuZWwgdHJlZSBmb3IgYW55IG1lbnRpb24gb2YgJiMzNDthaXJvaGEmIzM0Oy4gU2VlIGlmIHRoZXJlJiMzOTtzIGFueSBoaW50IG9mIGVtdWxhdGlvbiBvciBldmVuIGEgbWV0aG9kIG9mIHJlYWNoaW5nIHRoZSBoYXJkd2FyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthaXJvaGFfbnB1X3Byb2JlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM9NzA1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyByZWdtYXBfY29uZmlnID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNzEyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo3MTM6c3RhdGljIGludCBhaXJvaGFfbnB1X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTcxNC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYz04NDI9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWlyb2hhX25wdV9kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjg0MzpcdC5wcm9iZSA9IGFpcm9oYV9ucHVfcHJvYmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTg0NC1cdC5yZW1vdmUgPSBhaXJvaGFfbnB1X3JlbW92ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzAyCgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMTk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRmVhc2liaWxpdHkgb2YgQWNjZXNzaW5nIHRoZSBBaXJvaGEgTlBVIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgYWlyb2hhX25wdWAgZHJpdmVyLCBhbmQgbXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IGl0JiMzOTtzIGdvaW5nIHRvIGJlIHRyaWNreSB0byBnZXQgYXQgaW4gYSB0eXBpY2FsIHZpcnR1YWxpemVkIHNldHVwLiBQbGF0Zm9ybSBkcml2ZXJzLCBlc3BlY2lhbGx5IHRob3NlIHRpZWQgdG8gYSBzcGVjaWZpYyBTb0MgbGlrZSB0aGlzIEFpcm9oYSBFTjc1ODEsIGFyZSB1c3VhbGx5IG91dCBvZiByZWFjaCB1bmxlc3Mgd2UgaGF2ZSBhIGZ1bGwtYmxvd24gZW11bGF0aW9uIG9mIHRoYXQgU29DLCB3aGljaCwgbGV0JiMzOTtzIGJlIGhvbmVzdCwgaXNuJiMzOTt0IGFsd2F5cyByZWFkaWx5IGF2YWlsYWJsZSwgZXNwZWNpYWxseSBmb3Igc29tZXRoaW5nIGxpa2UgdGhpcy4gSSBjYW4gdGhpbmsgb2YgYSBmZXcgQVJNIGJvYXJkcyBpbiBRRU1VIHRoYXQgKm1pZ2h0KiBiZSBzaW11bGF0ZWQgd2VsbCBlbm91Z2gsIGJ1dCBJJiMzOTttIG5vdCBiZXR0aW5nIG9uIGl0LgoKU28sIHRoZSBmaXJzdCB0aGluZyB0byBjaGVjayBpcyBpZiB0aGVyZSYjMzk7cyAqYW55KiB3YXkgdG8gcmVhY2ggdGhpcyBjb2RlIHdpdGhvdXQgZGlyZWN0IGhhcmR3YXJlIGFjY2Vzcy4gTXkgZ3V0IHNheXMgbm8sIGJ1dCB3ZSBuZWVkIHRvIHZlcmlmeS4gSSBzZWUgaXQmIzM5O3MgYSBwbGF0Zm9ybSBkZXZpY2UsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIERldmljZSBUcmVlLiBJZiB0aGUgRGV2aWNlIFRyZWUgaXNuJiMzOTt0IHByZXNlbnQgb3IgZG9lc24mIzM5O3QgZGVzY3JpYmUgdGhlIGhhcmR3YXJlLCB0aGUgYHByb2JlYCBmdW5jdGlvbiBqdXN0IHdvbiYjMzk7dCBiZSBjYWxsZWQsIHdoaWNoIGlzIGEgYmlnIGh1cmRsZS4gRXZlbiBpZiB3ZSAqZGlkKiBwcm92aWRlIGEgZHVtbXkgRGV2aWNlIFRyZWUsIHRoaXMgZHJpdmVyIHVzZXMgdGhpbmdzIGxpa2UgYGRldm1faW9yZW1hcF9yZXNvdXJjZWAsIGBkZXZtX3JlcXVlc3RfaXJxYCwgYW5kIGByZWdtYXBfaW5pdF9tbWlvYCwgYW5kIHRoZW4gaXQgZ2V0cyB0byBgYWlyb2hhX25wdV9ydW5fZmlybXdhcmVgLCB3aGljaCBtb3N0IGxpa2VseSBpbnRlcmFjdHMgZGlyZWN0bHkgd2l0aCB0aGUgaGFyZHdhcmUuCgpUaW1lIHRvIGRpdmUgaW50byBgYWlyb2hhX25wdV9wcm9iZWAuIEkgbmVlZCB0byBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBoYXBwZW5pbmcgaW4gdGhhdCBmdW5jdGlvbiB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGp1c3QgaG93IHRpZ2h0bHkgY291cGxlZCB0aGlzIGlzIHRvIHRoZSBzcGVjaWZpYyBoYXJkd2FyZS4gVGhpcyBpcyBnb2luZyB0byBiZSBteSBrZXkgZm9jdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzEzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzEzOlx0c3RhdGljIGludCBhaXJvaGFfbnB1X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gNzE0Olx0e1xuIDcxNTpcdFx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG4gNzE2Olx0XHRzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1O1xuIDcxNzpcdFx0c3RydWN0IHJlc291cmNlIHJlcztcbiA3MTg6XHRcdHZvaWQgX19pb21lbSAqYmFzZTtcbiA3MTk6XHRcdGludCBpLCBpcnEsIGVycjtcbiA3MjA6XHRcdHUzMiB2YWw7XG4gNzIxOlx0XG4gNzIyOlx0XHRiYXNlID0gZGV2bV9wbGF0Zm9ybV9pb3JlbWFwX3Jlc291cmNlKHBkZXYsIDApO1xuIDcyMzpcdFx0aWYgKElTX0VSUihiYXNlKSlcbiA3MjQ6XHRcdFx0cmV0dXJuIFBUUl9FUlIoYmFzZSk7XG4gNzI1Olx0XG4gNzI2Olx0XHRucHUgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKm5wdSksIEdGUF9LRVJORUwpO1xuIDcyNzpcdFx0aWYgKCFucHUpXG4gNzI4Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDcyOTpcdFxuIDczMDpcdFx0bnB1LVx1MDAzZWRldiA9IGRldjtcbiA3MzE6XHRcdG5wdS1cdTAwM2VvcHMucHBlX2luaXQgPSBhaXJvaGFfbnB1X3BwZV9pbml0O1xuIDczMjpcdFx0bnB1LVx1MDAzZW9wcy5wcGVfZGVpbml0ID0gYWlyb2hhX25wdV9wcGVfZGVpbml0O1xuIDczMzpcdFx0bnB1LVx1MDAzZW9wcy5wcGVfaW5pdF9zdGF0cyA9IGFpcm9oYV9ucHVfcHBlX3N0YXRzX3NldHVwO1xuIDczNDpcdFx0bnB1LVx1MDAzZW9wcy5wcGVfZmx1c2hfc3JhbV9lbnRyaWVzID0gYWlyb2hhX25wdV9wcGVfZmx1c2hfc3JhbV9lbnRyaWVzO1xuIDczNTpcdFx0bnB1LVx1MDAzZW9wcy5wcGVfZm9lX2NvbW1pdF9lbnRyeSA9IGFpcm9oYV9ucHVfZm9lX2NvbW1pdF9lbnRyeTtcbiA3MzY6XHRcdG5wdS1cdTAwM2VvcHMud2xhbl9pbml0X3Jlc2VydmVkX21lbW9yeSA9IGFpcm9oYV9ucHVfd2xhbl9pbml0X21lbW9yeTtcbiA3Mzc6XHRcdG5wdS1cdTAwM2VvcHMud2xhbl9zZW5kX21zZyA9IGFpcm9oYV9ucHVfd2xhbl9tc2dfc2VuZDtcbiA3Mzg6XHRcdG5wdS1cdTAwM2VvcHMud2xhbl9nZXRfbXNnID0gYWlyb2hhX25wdV93bGFuX21zZ19nZXQ7XG4gNzM5Olx0XHRucHUtXHUwMDNlb3BzLndsYW5fZ2V0X3F1ZXVlX2FkZHIgPSBhaXJvaGFfbnB1X3dsYW5fcXVldWVfYWRkcl9nZXQ7XG4gNzQwOlx0XHRucHUtXHUwMDNlb3BzLndsYW5fc2V0X2lycV9zdGF0dXMgPSBhaXJvaGFfbnB1X3dsYW5faXJxX3N0YXR1c19zZXQ7XG4gNzQxOlx0XHRucHUtXHUwMDNlb3BzLndsYW5fZ2V0X2lycV9zdGF0dXMgPSBhaXJvaGFfbnB1X3dsYW5faXJxX3N0YXR1c19nZXQ7XG4gNzQyOlx0XHRucHUtXHUwMDNlb3BzLndsYW5fZW5hYmxlX2lycSA9IGFpcm9oYV9ucHVfd2xhbl9pcnFfZW5hYmxlO1xuIDc0MzpcdFx0bnB1LVx1MDAzZW9wcy53bGFuX2Rpc2FibGVfaXJxID0gYWlyb2hhX25wdV93bGFuX2lycV9kaXNhYmxlO1xuIDc0NDpcdFxuIDc0NTpcdFx0bnB1LVx1MDAzZXJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfbW1pbyhkZXYsIGJhc2UsIFx1MDAyNnJlZ21hcF9jb25maWcpO1xuIDc0NjpcdFx0aWYgKElTX0VSUihucHUtXHUwMDNlcmVnbWFwKSlcbiA3NDc6XHRcdFx0cmV0dXJuIFBUUl9FUlIobnB1LVx1MDAzZXJlZ21hcCk7XG4gNzQ4Olx0XG4gNzQ5Olx0XHRlcnIgPSBvZl9yZXNlcnZlZF9tZW1fcmVnaW9uX3RvX3Jlc291cmNlKGRldi1cdTAwM2VvZl9ub2RlLCAwLCBcdTAwMjZyZXMpO1xuIDc1MDpcdFx0aWYgKGVycilcbiA3NTE6XHRcdFx0cmV0dXJuIGVycjtcbiA3NTI6XHRcbiA3NTM6XHRcdGlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7XG4gNzU0Olx0XHRpZiAoaXJxIFx1MDAzYyAwKVxuIDc1NTpcdFx0XHRyZXR1cm4gaXJxO1xuIDc1NjpcdFxuIDc1NzpcdFx0ZXJyID0gZGV2bV9yZXF1ZXN0X2lycShkZXYsIGlycSwgYWlyb2hhX25wdV9tYm94X2hhbmRsZXIsXG4gNzU4Olx0XHRcdFx0ICAgICAgIElSUUZfU0hBUkVELCBcJiMzNDthaXJvaGEtbnB1LW1ib3hcJiMzNDssIG5wdSk7XG4gNzU5Olx0XHRpZiAoZXJyKVxuIDc2MDpcdFx0XHRyZXR1cm4gZXJyO1xuIDc2MTpcdFxuIDc2MjpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShucHUtXHUwMDNlY29yZXMpOyBpJiM0MzsmIzQzOykge1xuIDc2MzpcdFx0XHRzdHJ1Y3QgYWlyb2hhX25wdV9jb3JlICpjb3JlID0gXHUwMDI2bnB1LVx1MDAzZWNvcmVzW2ldO1xuIDc2NDpcdFxuIDc2NTpcdFx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZjb3JlLVx1MDAzZWxvY2spO1xuIDc2NjpcdFx0XHRjb3JlLVx1MDAzZW5wdSA9IG5wdTtcbiA3Njc6XHRcbiA3Njg6XHRcdFx0aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCBpICYjNDM7IDEpO1xuIDc2OTpcdFx0XHRpZiAoaXJxIFx1MDAzYyAwKVxuIDc3MDpcdFx0XHRcdHJldHVybiBpcnE7XG4gNzcxOlx0XG4gNzcyOlx0XHRcdGVyciA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBpcnEsIGFpcm9oYV9ucHVfd2R0X2hhbmRsZXIsXG4gNzczOlx0XHRcdFx0XHQgICAgICAgSVJRRl9TSEFSRUQsIFwmIzM0O2Fpcm9oYS1ucHUtd2R0XCYjMzQ7LCBjb3JlKTtcbiA3NzQ6XHRcdFx0aWYgKGVycilcbiA3NzU6XHRcdFx0XHRyZXR1cm4gZXJyO1xuIDc3NjpcdFxuIDc3NzpcdFx0XHRJTklUX1dPUksoXHUwMDI2Y29yZS1cdTAwM2V3ZHRfd29yaywgYWlyb2hhX25wdV93ZHRfd29yayk7XG4gNzc4Olx0XHR9XG4gNzc5Olx0XG4gNzgwOlx0XHQvKiB3bGFuIElSUSBsaW5lcyAqL1xuIDc4MTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShucHUtXHUwMDNlaXJxcyk7IGkmIzQzOyYjNDM7KSB7XG4gNzgyOlx0XHRcdGlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgaSAmIzQzOyBBUlJBWV9TSVpFKG5wdS1cdTAwM2Vjb3JlcykgJiM0MzsgMSk7XG4gNzgzOlx0XHRcdGlmIChpcnEgXHUwMDNjIDApXG4gNzg0Olx0XHRcdFx0cmV0dXJuIGlycTtcbiA3ODU6XHRcbiA3ODY6XHRcdFx0bnB1LVx1MDAzZWlycXNbaV0gPSBpcnE7XG4gNzg3Olx0XHR9XG4gNzg4Olx0XG4gNzg5Olx0XHRlcnIgPSBkbWFfc2V0X2NvaGVyZW50X21hc2soZGV2LCBETUFfQklUX01BU0soMzIpKTtcbiA3OTA6XHRcdGlmIChlcnIpXG4gNzkxOlx0XHRcdHJldHVybiBlcnI7XG4gNzkyOlx0XG4gNzkzOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKG5wdS1cdTAwM2Vjb3Jlcyk7IGkmIzQzOyYjNDM7KSB7XG4gNzk0Olx0XHRcdHN0cnVjdCBhaXJvaGFfbnB1X2NvcmUgKmNvcmUgPSBcdTAwMjZucHUtXHUwMDNlY29yZXNbaV07XG4gNzk1Olx0XG4gNzk2Olx0XHRcdGNvcmUtXHUwMDNlYnVmID0gZG1hbV9hbGxvY19jb2hlcmVudChkZXYsIEFJUk9IQV9OUFVfTUJPWF9TSVpFLFxuIDc5NzpcdFx0XHRcdFx0XHRcdFx1MDAyNmNvcmUtXHUwMDNlYWRkciwgR0ZQX0tFUk5FTCk7XG4gNzk4Olx0XHRcdGlmICghY29yZS1cdTAwM2VidWYpXG4gNzk5Olx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gODAwOlx0XHR9XG4gODAxOlx0XG4gODAyOlx0XHRlcnIgPSBhaXJvaGFfbnB1X3J1bl9maXJtd2FyZShkZXYsIGJhc2UsIFx1MDAyNnJlcyk7XG4gODAzOlx0XHRpZiAoZXJyKVxuIDgwNDpcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgXCYjMzQ7ZmFpbGVkIHRvIHJ1biBucHUgZmlybXdhcmVcXG5cJiMzNDspO1xuIDgwNTpcdFxuIDgwNjpcdFx0cmVnbWFwX3dyaXRlKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9OUFVfTUlCKDEwKSxcbiA4MDc6XHRcdFx0ICAgICByZXMuc3RhcnQgJiM0MzsgTlBVX0VONzU4MV9GSVJNV0FSRV9SVjMyX01BWF9TSVpFKTtcbiA4MDg6XHRcdHJlZ21hcF93cml0ZShucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTlBVX01JQigxMSksIDB4NDAwMDApOyAvKiBTUkFNIDI1NksgKi9cbiA4MDk6XHRcdHJlZ21hcF93cml0ZShucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTlBVX01JQigxMiksIDApO1xuIDgxMDpcdFx0cmVnbWFwX3dyaXRlKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9OUFVfTUlCKDIxKSwgMSk7XG4gODExOlx0XHRtc2xlZXAoMTAwKTtcbiA4MTI6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjI1CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBBc3Nlc3NtZW50OiBBaXJvaGEgRU43NTgxIE5QVSBEcml2ZXIqKgoKT2theSwgc28gdGhlIGRyaXZlciB1c2VzIGBvZl9yZXNlcnZlZF9tZW1fcmVnaW9uX3RvX3Jlc291cmNlKClgLCB3aGljaCBpcyBhIGtleSBwaWVjZS4gSWYgSSB3YW50ZWQgdG8gZnV6eiB0aGlzLCBJJiMzOTtkIGhhdmUgdG8gZ2V0IHN5emthbGxlciB0byBnZW5lcmF0ZSBhIGRldmljZSB0cmVlIHdpdGggcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbnMuIEkga25vdyBzeXprYWxsZXIgY2FuIGRvIHRoaXMgaW4gc29tZSBjYXNlcywgbWF5YmUgdXNpbmcgcHNldWRvLXN5c2NhbGxzIGxpa2UgYHN5el9pbml0X25ldF9zb2NrZXRgIGlmIGl0IGhhcyBhIGRlZmluaXRpb24gZm9yIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSwgYnV0IHVzdWFsbHkgc3l6a2FsbGVyIGRvZXNuJiMzOTt0IGNyZWF0ZSBwbGF0Zm9ybSBkZXZpY2VzIHdpdGggcmVzZXJ2ZWQgbWVtb3J5IHVubGVzcyB0aGVyZSYjMzk7cyBhIHN5emxhbmcgZGVzY3JpcHRpb24uIEkgdGhvdWdodCwgYnJpZWZseSwgYWJvdXQgYHN5el9nZW5ldGxpbmtfZ2V0X2ZhbWlseWAsIGJ1dCB0aGF0JiMzOTtzIG5vdCB0aGUgcmlnaHQgcGF0aC4gUGxhdGZvcm0gZGV2aWNlcyBhcmUgaW5zdGFudGlhdGVkIHZpYSBkZXZpY2UgdHJlZSBvdmVybGF5cywgcmlnaHQ/IEFuZCBJIHJlY2FsbCBzeXprYWxsZXIgaGFzICpzb21lKiBsaW1pdGVkIHN1cHBvcnQgZm9yIHRob3NlLCBpbiB0aGluZ3MgbGlrZSBgc3l6X21vdW50X2ltYWdlYCwgYnV0IGl0JiMzOTtzIG5vdCBpZGVhbC4KCkNydWNpYWxseSwgdGhpcyBpcyBhIG5ldHdvcmsgcHJvY2Vzc2luZyB1bml0IGRyaXZlciBmb3IgdGhlIEFpcm9oYSBFTjc1ODEuIFRoZSBwcm9tcHQgbWVudGlvbnMgYSBzcGVjaWZpYyBsaXN0IG9mIGRldmljZXMgdG8gY2hlY2suIE5vdywgaXQmIzM5O3Mgbm90IGEgUENJZSBjYXJkLCBidXQgaXQgKmlzKiB2ZW5kb3Itc3BlY2lmaWMgU29DIGhhcmR3YXJlIOKAkyB0aGUgRU43NTgxLiBBbmQgdGhlIHByb21wdCBpcyBjbGVhciB0aGF0IGRyaXZlcnMgbmVlZGluZyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gUUVNVSBhcmUgYSAmIzM0O25vLWdvJiMzNDsuIFRoZSBFTjc1ODEgbmVlZHMgcGh5c2ljYWwgaGFyZHdhcmUgYW5kIGFzIGZhciBhcyBJIGtub3csIHN0YW5kYXJkIFFFTVUgZG9lc24mIzM5O3QgZW11bGF0ZSB0aGUgRU43NTgxLiBUaGlzIGxvb2tzIGxpa2UgYSBkZWFkIGVuZCBmb3Igc3RhbmRhcmQgUUVNVSBmdXp6aW5nLgoKQnV0IHdhaXQsIGhvbGQgb24uIElzIGl0ICpwb3NzaWJsZSogdG8gcmVhY2ggdGhpcyBjb2RlIGF0IGFsbCBpbiBRRU1VPyBJIHNob3VsZCBxdWlja2x5IGNoZWNrIGlmIHRoZXJlIGlzICphbnkqIEVONzU4MSBlbXVsYXRpb24gYXZhaWxhYmxlLiBOb3BlLCBub3QgdGhhdCBJIGNhbiBmaW5kLgoKU28sIGNhbiBzeXprYWxsZXIgZnV6eiB0aGlzPyBXZWxsLCB0aGUgcXVlc3Rpb24gYm9pbHMgZG93biB0byB3aGV0aGVyIHN5emthbGxlciBjYW4gaW5zdGFudGlhdGUgdGhlIHBsYXRmb3JtIGRldmljZS4gU3l6a2FsbGVyJiMzOTtzIGBzeXpfZGV2X2luaXRgIG9yIHNpbWlsYXIgbWlnaHQgYmUgYWJsZSB0byBjcmVhdGUgcGxhdGZvcm0gZGV2aWNlcywgaWYgSSBjYW4gbWFwIG1lbW9yeSwgcHJvdmlkZSBJUlFzLCBhbmQgbW9zdCBpbXBvcnRhbnRseSwgdGhlIHJlc2VydmVkIG1lbW9yeSByZWdpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlLCBzbyBhIGNoZWNrIG9uIHdoZXRoZXIgYWlyb2hhX25wdSBoYXMgYW55IHN5emthbGxlciBkZXNjcmlwdGlvbiB3b3VsZCBiZSB1c2VmdWwuIFVsdGltYXRlbHksIHRoaXMgbG9va3MgdW5saWtlbHkgdG8gYmUgd29ydGggcHVyc3Vpbmcgd2l0aG91dCBzaWduaWZpY2FudCBlZmZvcnQgdG8gZW11bGF0ZSB0aGUgc3BlY2lmaWMgaGFyZHdhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthaXJvaGEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtzeXMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxNzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjM4CgkJCQkJCQlvdXRwdXQ6IDExNAoJCQkJCQkJdGhvdWdodHM6IDM2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50OiBBaXJvaGEgTlBVIERyaXZlciBhbmQgRnV6emluZyBGZWFzaWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGVyZSBhcmUgbm8gc3l6bGFuZyBkZXNjcmlwdGlvbnMgYXZhaWxhYmxlIGZvciB0aGlzIEFpcm9oYSBjb21wb25lbnQsIHdoaWNoIGlzIGEgcmVkIGZsYWcsIGJ1dCB0aGUgY29yZSBpc3N1ZSBoZXJlIGlzIHRoZSBoYXJkd2FyZSBkZXBlbmRlbmN5LiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNvQyBOUFUgZHJpdmVyLCBhbmQgYmFzZWQgb24gd2hhdCBJIGtub3cgYWJvdXQgdGhlc2Uga2luZHMgb2YgZHJpdmVycywgaXQgKmFic29sdXRlbHkqIHJlcXVpcmVzIHRoZSBhY3R1YWwgQWlyb2hhIEVONzU4MSBTb0MgaGFyZHdhcmUgdG8gZnVuY3Rpb24uIEl0JiMzOTtzIG5vdCBzb21ldGhpbmcgdGhhdCBjYW4gYmUgYWRlcXVhdGVseSBlbXVsYXRlZCB3aXRoaW4gYSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LCBvciBldmVuIHVzaW5nIHNwZWNpYWxpemVkIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiBJdCYjMzk7cyBzaW1wbHkgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nLgoKTGV0IG1lIHF1aWNrbHkgcmUtcmVhZCB0aGUgcHJvbXB0IHRvIGJlIHN1cmU6IComIzM0Oy4uLkNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS4uLiAtIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuLi4gdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuJiMzNDsqCgpZdXAsIHRoYXQgc2VhbHMgaXQuIFRoaXMgKmRpcmVjdGx5KiBmYWxscyBpbnRvIHRoZSBjYXRlZ29yeSBvZiBjb2RlIHRoYXQgaXMgZnVuZGFtZW50YWxseSBpbmFjY2Vzc2libGUgZm9yIGZ1enppbmcuIEl0JiMzOTtzIGFuIEFpcm9oYSBFTjc1ODEgTlBVIGRyaXZlci4gSSBrbm93IHRoYXQga2luZCBvZiBoYXJkd2FyZS4gSXQgbmVlZHMgdGhlIHBoeXNpY2FsIFNvQy4gVGhlIGNvZGUgcGF0aCBtb2RpZmljYXRpb24gY29uY2VybnMgdGhlIGRyaXZlciBhdCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuY2AuIFRoZSBkcml2ZXImIzM5O3MgaW5oZXJlbnQgZGVwZW5kZW5jZSBvbiB0aGUgc3BlY2lmaWMgQWlyb2hhIFNvQyBhcmNoaXRlY3R1cmUgbWFrZXMgaXQgaW1wb3NzaWJsZSB0byByZWFjaCB0aGVzZSBjb2RlIHBhdGhzIGluIGFueSBwcmFjdGljYWwgdmlydHVhbGl6ZWQgc2V0dGluZy4gVGhlcmVmb3JlLCB0aGUgZGVjaXNpb24gaXMgY2xlYXI6IGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4gVGhlIHBhdGNoJiMzOTtzIHRhcmdldCBpcyB1bi1mdXp6YWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQWlyb2hhIEVONzU4MSBOUFUgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jKS4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBTb0MgaGFyZHdhcmUgYmxvY2sgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhlIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIHNvIGl0IGNhbm5vdCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQWlyb2hhIEVONzU4MSBOUFUgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jKS4gVGhpcyBpcyBhIHZlbmRvci1zcGVjaWZpYyBTb0MgaGFyZHdhcmUgYmxvY2sgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhlIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIHNvIGl0IGNhbm5vdCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTc6Mzk6NTkuMjE1OTIwNDg1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU4NjkyMjM5MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgRU43NTgxIE5QVSBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMpLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNvQyBoYXJkd2FyZSBibG9jayB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGUgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgc28gaXQgY2Fubm90IGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE3OjM5OjU5LjIxNTk0Mjk2NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1NjcwODg4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGM4MDAyMGQ0NmY0ZmFlZWQ5ZTBkNTFhZDQ1OWI1NGU0NjdhNGE1NjNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgNiAxNzozOTo1NyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuY1xcbmluZGV4IGI2NzliZWQ5NTJkZTMuLmUxZTBkZGI5MmYwMzcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNcXG5AQCAtMjMsNiArMjMsMTIgQEBcXG4gI2RlZmluZSBOUFVfRU43NTgxX0ZJUk1XQVJFX1JWMzJfTUFYX1NJWkVcXHQweDIwMDAwMFxcbiAjZGVmaW5lIE5QVV9FTjc1ODFfRklSTVdBUkVfREFUQV9NQVhfU0laRVxcdDB4MTAwMDBcXG4gI2RlZmluZSBOUFVfRFVNUF9TSVpFXFx0XFx0XFx0XFx0NTEyXFxuKy8qXFxuKyAqIE1haWxib3ggRE1BIHBheWxvYWQgc2l6ZS4gQ292ZXJzIHNpemVvZihzdHJ1Y3QgcHBlX21ib3hfZGF0YSkgKDI4KSBhbmRcXG4rICogV0xBTiBUTFYgbWVzc2FnZXMgKGhlYWRlciArIHBheWxvYWQpOyBsYXJnZXN0IGluLXRyZWUgV0xBTiBwYXlsb2FkIHRvZGF5XFxuKyAqIGlzIDE2IGJ5dGVzIChJTk9ERV9UWFJYX1JFR19BRERSKS4gS2VlcCBoZWFkcm9vbSBmb3IgZnV0dXJlIGNvbW1hbmRzLlxcbisgKi9cXG4rI2RlZmluZSBBSVJPSEFfTlBVX01CT1hfU0laRVxcdFxcdFxcdDI1NlxcbiBcXG4gI2RlZmluZSBSRUdfTlBVX0xPQ0FMX1NSQU1cXHRcXHQweDBcXG4gXFxuQEAgLTE2MSwyMSArMTY3LDMyIEBAIHN0cnVjdCB3bGFuX21ib3hfZGF0YSB7XFxuIH07XFxuIFxcbiBzdGF0aWMgaW50IGFpcm9oYV9ucHVfc2VuZF9tc2coc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGZ1bmNfaWQsXFxuLVxcdFxcdFxcdCAgICAgICB2b2lkICpwLCBpbnQgc2l6ZSlcXG4rXFx0XFx0XFx0ICAgICAgIGNvbnN0IHZvaWQgKnJlcSwgaW50IHNpemUsXFxuK1xcdFxcdFxcdCAgICAgICB2b2lkICpyc3AsIGludCByc3Bfb2ZmLCBpbnQgcnNwX2xlbilcXG4ge1xcbiBcXHR1MTYgY29yZSA9IDA7IC8qIEZJWE1FICovXFxuK1xcdHN0cnVjdCBhaXJvaGFfbnB1X2NvcmUgKmMgPSBcXHUwMDI2bnB1LVxcdTAwM2Vjb3Jlc1tjb3JlXTtcXG4gXFx0dTMyIHZhbCwgb2Zmc2V0ID0gY29yZSBcXHUwMDNjXFx1MDAzYyA0O1xcbi1cXHRkbWFfYWRkcl90IGRtYV9hZGRyO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0ZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZShucHUtXFx1MDAzZWRldiwgcCwgc2l6ZSwgRE1BX0JJRElSRUNUSU9OQUwpO1xcbi1cXHRyZXQgPSBkbWFfbWFwcGluZ19lcnJvcihucHUtXFx1MDAzZWRldiwgZG1hX2FkZHIpO1xcbi1cXHRpZiAocmV0KVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRpZiAoc2l6ZSBcXHUwMDNlIEFJUk9IQV9OUFVfTUJPWF9TSVpFIHx8XFxuK1xcdCAgICAocnNwIFxcdTAwMjZcXHUwMDI2IChyc3Bfb2ZmIFxcdTAwM2MgMCB8fCByc3BfbGVuIFxcdTAwM2MgMCB8fFxcbitcXHRcXHQgICAgIHJzcF9vZmYgKyByc3BfbGVuIFxcdTAwM2Ugc2l6ZSkpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuLVxcdHNwaW5fbG9ja19iaChcXHUwMDI2bnB1LVxcdTAwM2Vjb3Jlc1tjb3JlXS5sb2NrKTtcXG4rXFx0LypcXG4rXFx0ICogTWFpbGJveCBwYXlsb2FkcyBhcmUgYmlkaXJlY3Rpb25hbCAoQ1BVIHJlcXVlc3QsIE5QVSByZXNwb25zZSkuXFxuK1xcdCAqIE9uIEVONzU4MStNVDc5OTYsIHN0cmVhbWluZyBETUFfQklESVJFQ1RJT05BTCBhZ2FpbnN0IHRoZVxcbitcXHQgKiBjYWxsZXIga3phbGxvYygpIGJ1ZmZlciBjYW4gbGVhdmUgV0xBTl9GVU5DX0dFVF9XQUlUX05QVV9WRVJTSU9OXFxuK1xcdCAqIHJlYWRpbmcgYXMgMC4wIGRlc3BpdGUgTUJPWCBzdWNjZXNzLiBSZXVzZSBhIHByb2JlLXRpbWUgY29oZXJlbnRcXG4rXFx0ICogYm91bmNlIGJ1ZmZlciB1bmRlciB0aGUgcGVyLWNvcmUgbG9jayAoYWxzbyB1c2VkIGZyb20gUFBFXFxuK1xcdCAqIGZvZV9jb21taXQgdW5kZXIgYXRvbWljIGNvbnRleHQpLlxcbitcXHQgKi9cXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZjLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdG1lbWNweShjLVxcdTAwM2VidWYsIHJlcSwgc2l6ZSk7XFxuIFxcbi1cXHRyZWdtYXBfd3JpdGUobnB1LVxcdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMCkgKyBvZmZzZXQsIGRtYV9hZGRyKTtcXG4rXFx0cmVnbWFwX3dyaXRlKG5wdS1cXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDApICsgb2Zmc2V0LCBjLVxcdTAwM2VhZGRyKTtcXG4gXFx0cmVnbWFwX3dyaXRlKG5wdS1cXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDEpICsgb2Zmc2V0LCBzaXplKTtcXG4gXFx0cmVnbWFwX3JlYWQobnB1LVxcdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMikgKyBvZmZzZXQsIFxcdTAwMjZ2YWwpO1xcbiBcXHRyZWdtYXBfd3JpdGUobnB1LVxcdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMikgKyBvZmZzZXQsIHZhbCArIDEpO1xcbkBAIC0xODksOSArMjA2LDEwIEBAIHN0YXRpYyBpbnQgYWlyb2hhX25wdV9zZW5kX21zZyhzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCBpbnQgZnVuY19pZCxcXG4gXFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgRklFTERfR0VUKE1CT1hfTVNHX1NUQVRVUywgdmFsKSAhPSBOUFVfTUJPWF9TVUNDRVNTKVxcbiBcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbiBcXG4tXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5wdS1cXHUwMDNlY29yZXNbY29yZV0ubG9jayk7XFxuK1xcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2IHJzcClcXG4rXFx0XFx0bWVtY3B5KHJzcCwgYy1cXHUwMDNlYnVmICsgcnNwX29mZiwgcnNwX2xlbik7XFxuIFxcbi1cXHRkbWFfdW5tYXBfc2luZ2xlKG5wdS1cXHUwMDNlZGV2LCBkbWFfYWRkciwgc2l6ZSwgRE1BX0JJRElSRUNUSU9OQUwpO1xcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Yy1cXHUwMDNlbG9jayk7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuQEAgLTM0Myw3ICszNjEsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfcHBlX2luaXQoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSlcXG4gXFx0cHBlX2RhdGEtXFx1MDAzZWluaXRfaW5mby53YW5fbW9kZSA9IFFETUFfV0FOX0VUSEVSO1xcbiBcXG4gXFx0ZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1BQRSwgcHBlX2RhdGEsXFxuLVxcdFxcdFxcdFxcdCAgc2l6ZW9mKCpwcGVfZGF0YSkpO1xcbitcXHRcXHRcXHRcXHQgIHNpemVvZigqcHBlX2RhdGEpLCBOVUxMLCAwLCAwKTtcXG4gXFx0a2ZyZWUocHBlX2RhdGEpO1xcbiBcXG4gXFx0cmV0dXJuIGVycjtcXG5AQCAtMzYyLDcgKzM4MCw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcGVfZGVpbml0KHN0cnVjdCBhaXJvaGFfbnB1ICpucHUpXFxuIFxcdHBwZV9kYXRhLVxcdTAwM2VmdW5jX2lkID0gUFBFX0ZVTkNfU0VUX1dBSVRfSFdOQVRfREVJTklUO1xcbiBcXG4gXFx0ZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1BQRSwgcHBlX2RhdGEsXFxuLVxcdFxcdFxcdFxcdCAgc2l6ZW9mKCpwcGVfZGF0YSkpO1xcbitcXHRcXHRcXHRcXHQgIHNpemVvZigqcHBlX2RhdGEpLCBOVUxMLCAwLCAwKTtcXG4gXFx0a2ZyZWUocHBlX2RhdGEpO1xcbiBcXG4gXFx0cmV0dXJuIGVycjtcXG5AQCAtMzg2LDcgKzQwNCw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcGVfZmx1c2hfc3JhbV9lbnRyaWVzKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsXFxuIFxcdHBwZV9kYXRhLVxcdTAwM2VzZXRfaW5mby5zaXplID0gc3JhbV9udW1fZW50cmllcztcXG4gXFxuIFxcdGVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19QUEUsIHBwZV9kYXRhLFxcbi1cXHRcXHRcXHRcXHQgIHNpemVvZigqcHBlX2RhdGEpKTtcXG4rXFx0XFx0XFx0XFx0ICBzaXplb2YoKnBwZV9kYXRhKSwgTlVMTCwgMCwgMCk7XFxuIFxcdGtmcmVlKHBwZV9kYXRhKTtcXG4gXFxuIFxcdHJldHVybiBlcnI7XFxuQEAgLTQxMSw3ICs0MjksNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfZm9lX2NvbW1pdF9lbnRyeShzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LFxcbiBcXHRcXHRcXHRcXHRcXHQgIDogUFBFX1NSQU1fU0VUX0VOVFJZO1xcbiBcXG4gXFx0ZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1BQRSwgcHBlX2RhdGEsXFxuLVxcdFxcdFxcdFxcdCAgc2l6ZW9mKCpwcGVfZGF0YSkpO1xcbitcXHRcXHRcXHRcXHQgIHNpemVvZigqcHBlX2RhdGEpLCBOVUxMLCAwLCAwKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbkBAIC00MjAsNyArNDM4LDcgQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X2ZvZV9jb21taXRfZW50cnkoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSxcXG4gXFx0cHBlX2RhdGEtXFx1MDAzZXNldF9pbmZvLnNpemUgPSBzaXplb2YodTMyKTtcXG4gXFxuIFxcdGVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19QUEUsIHBwZV9kYXRhLFxcbi1cXHRcXHRcXHRcXHQgIHNpemVvZigqcHBlX2RhdGEpKTtcXG4rXFx0XFx0XFx0XFx0ICBzaXplb2YoKnBwZV9kYXRhKSwgTlVMTCwgMCwgMCk7XFxuIG91dDpcXG4gXFx0a2ZyZWUocHBlX2RhdGEpO1xcbiBcXG5AQCAtNDQzLDYgKzQ2MSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcGVfc3RhdHNfc2V0dXAoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSxcXG4gXFx0cHBlX2RhdGEtXFx1MDAzZXN0YXRzX2luZm8uZm9lX3N0YXRzX2FkZHIgPSBmb2Vfc3RhdHNfYWRkcjtcXG4gXFxuIFxcdGVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19QUEUsIHBwZV9kYXRhLFxcbitcXHRcXHRcXHRcXHQgIHNpemVvZigqcHBlX2RhdGEpLCBwcGVfZGF0YSwgMCxcXG4gXFx0XFx0XFx0XFx0ICBzaXplb2YoKnBwZV9kYXRhKSk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbkBAIC00NzUsNyArNDk0LDggQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X3dsYW5fbXNnX3NlbmQoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGlmaW5kZXgsXFxuIFxcdHdsYW5fZGF0YS1cXHUwMDNlZnVuY19pZCA9IGZ1bmNfaWQ7XFxuIFxcdG1lbWNweSh3bGFuX2RhdGEtXFx1MDAzZWQsIGRhdGEsIGRhdGFfbGVuKTtcXG4gXFxuLVxcdGVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19XSUZJLCB3bGFuX2RhdGEsIGxlbik7XFxuK1xcdGVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19XSUZJLCB3bGFuX2RhdGEsIGxlbixcXG4rXFx0XFx0XFx0XFx0ICBOVUxMLCAwLCAwKTtcXG4gXFx0a2ZyZWUod2xhbl9kYXRhKTtcXG4gXFxuIFxcdHJldHVybiBlcnI7XFxuQEAgLTQ5Nyw5ICs1MTcsOSBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfd2xhbl9tc2dfZ2V0KHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBpZmluZGV4LFxcbiBcXHR3bGFuX2RhdGEtXFx1MDAzZWZ1bmNfdHlwZSA9IE5QVV9PUF9HRVQ7XFxuIFxcdHdsYW5fZGF0YS1cXHUwMDNlZnVuY19pZCA9IGZ1bmNfaWQ7XFxuIFxcbi1cXHRlcnIgPSBhaXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgTlBVX0ZVTkNfV0lGSSwgd2xhbl9kYXRhLCBsZW4pO1xcbi1cXHRpZiAoIWVycilcXG4tXFx0XFx0bWVtY3B5KGRhdGEsIHdsYW5fZGF0YS1cXHUwMDNlZCwgZGF0YV9sZW4pO1xcbitcXHRlcnIgPSBhaXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgTlBVX0ZVTkNfV0lGSSwgd2xhbl9kYXRhLCBsZW4sXFxuK1xcdFxcdFxcdFxcdCAgZGF0YSwgb2Zmc2V0b2Yoc3RydWN0IHdsYW5fbWJveF9kYXRhLCBkKSxcXG4rXFx0XFx0XFx0XFx0ICBkYXRhX2xlbik7XFxuIFxcdGtmcmVlKHdsYW5fZGF0YSk7XFxuIFxcbiBcXHRyZXR1cm4gZXJyO1xcbkBAIC03NzAsNiArNzkwLDE1IEBAIHN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUobnB1LVxcdTAwM2Vjb3Jlcyk7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgYWlyb2hhX25wdV9jb3JlICpjb3JlID0gXFx1MDAyNm5wdS1cXHUwMDNlY29yZXNbaV07XFxuK1xcbitcXHRcXHRjb3JlLVxcdTAwM2VidWYgPSBkbWFtX2FsbG9jX2NvaGVyZW50KGRldiwgQUlST0hBX05QVV9NQk9YX1NJWkUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZjb3JlLVxcdTAwM2VhZGRyLCBHRlBfS0VSTkVMKTtcXG4rXFx0XFx0aWYgKCFjb3JlLVxcdTAwM2VidWYpXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbiBcXHRlcnIgPSBhaXJvaGFfbnB1X3J1bl9maXJtd2FyZShkZXYsIGJhc2UsIFxcdTAwMjZyZXMpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgXFxcImZhaWxlZCB0byBydW4gbnB1IGZpcm13YXJlXFxcXG5cXFwiKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb2MvYWlyb2hhL2Fpcm9oYV9vZmZsb2FkLmggYi9pbmNsdWRlL2xpbnV4L3NvYy9haXJvaGEvYWlyb2hhX29mZmxvYWQuaFxcbmluZGV4IDc1ODlmY2NmZWVmNmQuLjE2YTk4OGFkNzQ2N2MgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9zb2MvYWlyb2hhL2Fpcm9oYV9vZmZsb2FkLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NvYy9haXJvaGEvYWlyb2hhX29mZmxvYWQuaFxcbkBAIC0xNzMsNiArMTczLDkgQEAgc3RydWN0IGFpcm9oYV9ucHUge1xcbiBcXHRcXHQvKiBwcm90ZWN0IGNvbmN1cnJlbnQgbnB1IG1lbW9yeSBhY2Nlc3NlcyAqL1xcbiBcXHRcXHRzcGlubG9ja190IGxvY2s7XFxuIFxcdFxcdHN0cnVjdCB3b3JrX3N0cnVjdCB3ZHRfd29yaztcXG4rXFx0XFx0LyogQ29oZXJlbnQgYm91bmNlIGJ1ZmZlciBmb3IgbWFpbGJveCBjbWQvcnNwICovXFxuK1xcdFxcdHZvaWQgKmJ1ZjtcXG4rXFx0XFx0ZG1hX2FkZHJfdCBhZGRyO1xcbiBcXHR9IGNvcmVzW05QVV9OVU1fQ09SRVNdO1xcbiBcXG4gXFx0aW50IGlycXNbTlBVX05VTV9JUlFdO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNzo0MDowMC43NzM1ODUxNzhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozNDMxMTU1MTYyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFpcm9oYSBFTjc1ODEgTlBVIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYykuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU29DIGhhcmR3YXJlIGJsb2NrIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoZSBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBzbyBpdCBjYW5ub3QgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzgwMDIwZDQ2ZjRmYWVlZDllMGQ1MWFkNDU5YjU0ZTQ2N2E0YTU2M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDYgMTc6Mzk6NTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuY1xuaW5kZXggYjY3OWJlZDk1MmRlMy4uZTFlMGRkYjkyZjAzNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNcbkBAIC0yMyw2ICsyMywxMiBAQFxuICNkZWZpbmUgTlBVX0VONzU4MV9GSVJNV0FSRV9SVjMyX01BWF9TSVpFXHQweDIwMDAwMFxuICNkZWZpbmUgTlBVX0VONzU4MV9GSVJNV0FSRV9EQVRBX01BWF9TSVpFXHQweDEwMDAwXG4gI2RlZmluZSBOUFVfRFVNUF9TSVpFXHRcdFx0XHQ1MTJcbisvKlxuKyAqIE1haWxib3ggRE1BIHBheWxvYWQgc2l6ZS4gQ292ZXJzIHNpemVvZihzdHJ1Y3QgcHBlX21ib3hfZGF0YSkgKDI4KSBhbmRcbisgKiBXTEFOIFRMViBtZXNzYWdlcyAoaGVhZGVyICsgcGF5bG9hZCk7IGxhcmdlc3QgaW4tdHJlZSBXTEFOIHBheWxvYWQgdG9kYXlcbisgKiBpcyAxNiBieXRlcyAoSU5PREVfVFhSWF9SRUdfQUREUikuIEtlZXAgaGVhZHJvb20gZm9yIGZ1dHVyZSBjb21tYW5kcy5cbisgKi9cbisjZGVmaW5lIEFJUk9IQV9OUFVfTUJPWF9TSVpFXHRcdFx0MjU2XG4gXG4gI2RlZmluZSBSRUdfTlBVX0xPQ0FMX1NSQU1cdFx0MHgwXG4gXG5AQCAtMTYxLDIxICsxNjcsMzIgQEAgc3RydWN0IHdsYW5fbWJveF9kYXRhIHtcbiB9O1xuIFxuIHN0YXRpYyBpbnQgYWlyb2hhX25wdV9zZW5kX21zZyhzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCBpbnQgZnVuY19pZCxcbi1cdFx0XHQgICAgICAgdm9pZCAqcCwgaW50IHNpemUpXG4rXHRcdFx0ICAgICAgIGNvbnN0IHZvaWQgKnJlcSwgaW50IHNpemUsXG4rXHRcdFx0ICAgICAgIHZvaWQgKnJzcCwgaW50IHJzcF9vZmYsIGludCByc3BfbGVuKVxuIHtcbiBcdHUxNiBjb3JlID0gMDsgLyogRklYTUUgKi9cbitcdHN0cnVjdCBhaXJvaGFfbnB1X2NvcmUgKmMgPSBcdTAwMjZucHUtXHUwMDNlY29yZXNbY29yZV07XG4gXHR1MzIgdmFsLCBvZmZzZXQgPSBjb3JlIFx1MDAzY1x1MDAzYyA0O1xuLVx0ZG1hX2FkZHJfdCBkbWFfYWRkcjtcbiBcdGludCByZXQ7XG4gXG4tXHRkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKG5wdS1cdTAwM2VkZXYsIHAsIHNpemUsIERNQV9CSURJUkVDVElPTkFMKTtcbi1cdHJldCA9IGRtYV9tYXBwaW5nX2Vycm9yKG5wdS1cdTAwM2VkZXYsIGRtYV9hZGRyKTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4rXHRpZiAoc2l6ZSBcdTAwM2UgQUlST0hBX05QVV9NQk9YX1NJWkUgfHxcbitcdCAgICAocnNwIFx1MDAyNlx1MDAyNiAocnNwX29mZiBcdTAwM2MgMCB8fCByc3BfbGVuIFx1MDAzYyAwIHx8XG4rXHRcdCAgICAgcnNwX29mZiArIHJzcF9sZW4gXHUwMDNlIHNpemUpKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRzcGluX2xvY2tfYmgoXHUwMDI2bnB1LVx1MDAzZWNvcmVzW2NvcmVdLmxvY2spO1xuK1x0LypcbitcdCAqIE1haWxib3ggcGF5bG9hZHMgYXJlIGJpZGlyZWN0aW9uYWwgKENQVSByZXF1ZXN0LCBOUFUgcmVzcG9uc2UpLlxuK1x0ICogT24gRU43NTgxK01UNzk5Niwgc3RyZWFtaW5nIERNQV9CSURJUkVDVElPTkFMIGFnYWluc3QgdGhlXG4rXHQgKiBjYWxsZXIga3phbGxvYygpIGJ1ZmZlciBjYW4gbGVhdmUgV0xBTl9GVU5DX0dFVF9XQUlUX05QVV9WRVJTSU9OXG4rXHQgKiByZWFkaW5nIGFzIDAuMCBkZXNwaXRlIE1CT1ggc3VjY2Vzcy4gUmV1c2UgYSBwcm9iZS10aW1lIGNvaGVyZW50XG4rXHQgKiBib3VuY2UgYnVmZmVyIHVuZGVyIHRoZSBwZXItY29yZSBsb2NrIChhbHNvIHVzZWQgZnJvbSBQUEVcbitcdCAqIGZvZV9jb21taXQgdW5kZXIgYXRvbWljIGNvbnRleHQpLlxuK1x0ICovXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2Yy1cdTAwM2Vsb2NrKTtcbitcbitcdG1lbWNweShjLVx1MDAzZWJ1ZiwgcmVxLCBzaXplKTtcbiBcbi1cdHJlZ21hcF93cml0ZShucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDApICsgb2Zmc2V0LCBkbWFfYWRkcik7XG4rXHRyZWdtYXBfd3JpdGUobnB1LVx1MDAzZXJlZ21hcCwgUkVHX0NSX01CUTBfQ1RSTCgwKSArIG9mZnNldCwgYy1cdTAwM2VhZGRyKTtcbiBcdHJlZ21hcF93cml0ZShucHUtXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTUJRMF9DVFJMKDEpICsgb2Zmc2V0LCBzaXplKTtcbiBcdHJlZ21hcF9yZWFkKG5wdS1cdTAwM2VyZWdtYXAsIFJFR19DUl9NQlEwX0NUUkwoMikgKyBvZmZzZXQsIFx1MDAyNnZhbCk7XG4gXHRyZWdtYXBfd3JpdGUobnB1LVx1MDAzZXJlZ21hcCwgUkVHX0NSX01CUTBfQ1RSTCgyKSArIG9mZnNldCwgdmFsICsgMSk7XG5AQCAtMTg5LDkgKzIwNiwxMCBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfc2VuZF9tc2coc3RydWN0IGFpcm9oYV9ucHUgKm5wdSwgaW50IGZ1bmNfaWQsXG4gXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgRklFTERfR0VUKE1CT1hfTVNHX1NUQVRVUywgdmFsKSAhPSBOUFVfTUJPWF9TVUNDRVNTKVxuIFx0XHRyZXQgPSAtRUlOVkFMO1xuIFxuLVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bnB1LVx1MDAzZWNvcmVzW2NvcmVdLmxvY2spO1xuK1x0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IHJzcClcbitcdFx0bWVtY3B5KHJzcCwgYy1cdTAwM2VidWYgKyByc3Bfb2ZmLCByc3BfbGVuKTtcbiBcbi1cdGRtYV91bm1hcF9zaW5nbGUobnB1LVx1MDAzZWRldiwgZG1hX2FkZHIsIHNpemUsIERNQV9CSURJUkVDVElPTkFMKTtcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmMtXHUwMDNlbG9jayk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC0zNDMsNyArMzYxLDcgQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X3BwZV9pbml0KHN0cnVjdCBhaXJvaGFfbnB1ICpucHUpXG4gXHRwcGVfZGF0YS1cdTAwM2Vpbml0X2luZm8ud2FuX21vZGUgPSBRRE1BX1dBTl9FVEhFUjtcbiBcbiBcdGVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19QUEUsIHBwZV9kYXRhLFxuLVx0XHRcdFx0ICBzaXplb2YoKnBwZV9kYXRhKSk7XG4rXHRcdFx0XHQgIHNpemVvZigqcHBlX2RhdGEpLCBOVUxMLCAwLCAwKTtcbiBcdGtmcmVlKHBwZV9kYXRhKTtcbiBcbiBcdHJldHVybiBlcnI7XG5AQCAtMzYyLDcgKzM4MCw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcGVfZGVpbml0KHN0cnVjdCBhaXJvaGFfbnB1ICpucHUpXG4gXHRwcGVfZGF0YS1cdTAwM2VmdW5jX2lkID0gUFBFX0ZVTkNfU0VUX1dBSVRfSFdOQVRfREVJTklUO1xuIFxuIFx0ZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1BQRSwgcHBlX2RhdGEsXG4tXHRcdFx0XHQgIHNpemVvZigqcHBlX2RhdGEpKTtcbitcdFx0XHRcdCAgc2l6ZW9mKCpwcGVfZGF0YSksIE5VTEwsIDAsIDApO1xuIFx0a2ZyZWUocHBlX2RhdGEpO1xuIFxuIFx0cmV0dXJuIGVycjtcbkBAIC0zODYsNyArNDA0LDcgQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X3BwZV9mbHVzaF9zcmFtX2VudHJpZXMoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSxcbiBcdHBwZV9kYXRhLVx1MDAzZXNldF9pbmZvLnNpemUgPSBzcmFtX251bV9lbnRyaWVzO1xuIFxuIFx0ZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1BQRSwgcHBlX2RhdGEsXG4tXHRcdFx0XHQgIHNpemVvZigqcHBlX2RhdGEpKTtcbitcdFx0XHRcdCAgc2l6ZW9mKCpwcGVfZGF0YSksIE5VTEwsIDAsIDApO1xuIFx0a2ZyZWUocHBlX2RhdGEpO1xuIFxuIFx0cmV0dXJuIGVycjtcbkBAIC00MTEsNyArNDI5LDcgQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X2ZvZV9jb21taXRfZW50cnkoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSxcbiBcdFx0XHRcdFx0ICA6IFBQRV9TUkFNX1NFVF9FTlRSWTtcbiBcbiBcdGVyciA9IGFpcm9oYV9ucHVfc2VuZF9tc2cobnB1LCBOUFVfRlVOQ19QUEUsIHBwZV9kYXRhLFxuLVx0XHRcdFx0ICBzaXplb2YoKnBwZV9kYXRhKSk7XG4rXHRcdFx0XHQgIHNpemVvZigqcHBlX2RhdGEpLCBOVUxMLCAwLCAwKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gb3V0O1xuIFxuQEAgLTQyMCw3ICs0MzgsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfZm9lX2NvbW1pdF9lbnRyeShzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LFxuIFx0cHBlX2RhdGEtXHUwMDNlc2V0X2luZm8uc2l6ZSA9IHNpemVvZih1MzIpO1xuIFxuIFx0ZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1BQRSwgcHBlX2RhdGEsXG4tXHRcdFx0XHQgIHNpemVvZigqcHBlX2RhdGEpKTtcbitcdFx0XHRcdCAgc2l6ZW9mKCpwcGVfZGF0YSksIE5VTEwsIDAsIDApO1xuIG91dDpcbiBcdGtmcmVlKHBwZV9kYXRhKTtcbiBcbkBAIC00NDMsNiArNDYxLDcgQEAgc3RhdGljIGludCBhaXJvaGFfbnB1X3BwZV9zdGF0c19zZXR1cChzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LFxuIFx0cHBlX2RhdGEtXHUwMDNlc3RhdHNfaW5mby5mb2Vfc3RhdHNfYWRkciA9IGZvZV9zdGF0c19hZGRyO1xuIFxuIFx0ZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1BQRSwgcHBlX2RhdGEsXG4rXHRcdFx0XHQgIHNpemVvZigqcHBlX2RhdGEpLCBwcGVfZGF0YSwgMCxcbiBcdFx0XHRcdCAgc2l6ZW9mKCpwcGVfZGF0YSkpO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBvdXQ7XG5AQCAtNDc1LDcgKzQ5NCw4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX25wdV93bGFuX21zZ19zZW5kKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBpZmluZGV4LFxuIFx0d2xhbl9kYXRhLVx1MDAzZWZ1bmNfaWQgPSBmdW5jX2lkO1xuIFx0bWVtY3B5KHdsYW5fZGF0YS1cdTAwM2VkLCBkYXRhLCBkYXRhX2xlbik7XG4gXG4tXHRlcnIgPSBhaXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgTlBVX0ZVTkNfV0lGSSwgd2xhbl9kYXRhLCBsZW4pO1xuK1x0ZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1dJRkksIHdsYW5fZGF0YSwgbGVuLFxuK1x0XHRcdFx0ICBOVUxMLCAwLCAwKTtcbiBcdGtmcmVlKHdsYW5fZGF0YSk7XG4gXG4gXHRyZXR1cm4gZXJyO1xuQEAgLTQ5Nyw5ICs1MTcsOSBAQCBzdGF0aWMgaW50IGFpcm9oYV9ucHVfd2xhbl9tc2dfZ2V0KHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBpZmluZGV4LFxuIFx0d2xhbl9kYXRhLVx1MDAzZWZ1bmNfdHlwZSA9IE5QVV9PUF9HRVQ7XG4gXHR3bGFuX2RhdGEtXHUwMDNlZnVuY19pZCA9IGZ1bmNfaWQ7XG4gXG4tXHRlcnIgPSBhaXJvaGFfbnB1X3NlbmRfbXNnKG5wdSwgTlBVX0ZVTkNfV0lGSSwgd2xhbl9kYXRhLCBsZW4pO1xuLVx0aWYgKCFlcnIpXG4tXHRcdG1lbWNweShkYXRhLCB3bGFuX2RhdGEtXHUwMDNlZCwgZGF0YV9sZW4pO1xuK1x0ZXJyID0gYWlyb2hhX25wdV9zZW5kX21zZyhucHUsIE5QVV9GVU5DX1dJRkksIHdsYW5fZGF0YSwgbGVuLFxuK1x0XHRcdFx0ICBkYXRhLCBvZmZzZXRvZihzdHJ1Y3Qgd2xhbl9tYm94X2RhdGEsIGQpLFxuK1x0XHRcdFx0ICBkYXRhX2xlbik7XG4gXHRrZnJlZSh3bGFuX2RhdGEpO1xuIFxuIFx0cmV0dXJuIGVycjtcbkBAIC03NzAsNiArNzkwLDE1IEBAIHN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUobnB1LVx1MDAzZWNvcmVzKTsgaSsrKSB7XG4rXHRcdHN0cnVjdCBhaXJvaGFfbnB1X2NvcmUgKmNvcmUgPSBcdTAwMjZucHUtXHUwMDNlY29yZXNbaV07XG4rXG4rXHRcdGNvcmUtXHUwMDNlYnVmID0gZG1hbV9hbGxvY19jb2hlcmVudChkZXYsIEFJUk9IQV9OUFVfTUJPWF9TSVpFLFxuK1x0XHRcdFx0XHRcdFx1MDAyNmNvcmUtXHUwMDNlYWRkciwgR0ZQX0tFUk5FTCk7XG4rXHRcdGlmICghY29yZS1cdTAwM2VidWYpXG4rXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4gXHRlcnIgPSBhaXJvaGFfbnB1X3J1bl9maXJtd2FyZShkZXYsIGJhc2UsIFx1MDAyNnJlcyk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgXCJmYWlsZWQgdG8gcnVuIG5wdSBmaXJtd2FyZVxcblwiKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NvYy9haXJvaGEvYWlyb2hhX29mZmxvYWQuaCBiL2luY2x1ZGUvbGludXgvc29jL2Fpcm9oYS9haXJvaGFfb2ZmbG9hZC5oXG5pbmRleCA3NTg5ZmNjZmVlZjZkLi4xNmE5ODhhZDc0NjdjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zb2MvYWlyb2hhL2Fpcm9oYV9vZmZsb2FkLmhcbisrKyBiL2luY2x1ZGUvbGludXgvc29jL2Fpcm9oYS9haXJvaGFfb2ZmbG9hZC5oXG5AQCAtMTczLDYgKzE3Myw5IEBAIHN0cnVjdCBhaXJvaGFfbnB1IHtcbiBcdFx0LyogcHJvdGVjdCBjb25jdXJyZW50IG5wdSBtZW1vcnkgYWNjZXNzZXMgKi9cbiBcdFx0c3BpbmxvY2tfdCBsb2NrO1xuIFx0XHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd2R0X3dvcms7XG4rXHRcdC8qIENvaGVyZW50IGJvdW5jZSBidWZmZXIgZm9yIG1haWxib3ggY21kL3JzcCAqL1xuK1x0XHR2b2lkICpidWY7XG4rXHRcdGRtYV9hZGRyX3QgYWRkcjtcbiBcdH0gY29yZXNbTlBVX05VTV9DT1JFU107XG4gXG4gXHRpbnQgaXJxc1tOUFVfTlVNX0lSUV07XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNzo0MDowMC43NzM1ODc1NDhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTg2MjUwNjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhdGNoIHRvIGFuIEFpcm9oYSBOUFUgRHJpdmVyKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBhZmZlY3RpbmcgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIGBhaXJvaGFfbnB1X3NlbmRfbXNnYCDigJMgaXQncyBzaGlmdGluZyB0byBhIHByZS1hbGxvY2F0ZWQgY29oZXJlbnQgRE1BIGJ1ZmZlciBpbnN0ZWFkIG9mIHRoZSBkeW5hbWljIG1hcHBpbmcvdW5tYXBwaW5nIGFwcHJvYWNoLiBTbWFydCBtb3ZlLCB0aGF0IHNob3VsZCBiZSBtb3JlIGVmZmljaWVudC4gVGhlIGFkZGVkIGByc3BgLCBgcnNwX29mZmAsIGFuZCBgcnNwX2xlbmAgcGFyYW1ldGVycyBjbGFyaWZ5IGhvdyB0aGUgcmVzcG9uc2UgZGF0YSBpcyBoYW5kbGVkLCBtYWtpbmcgdGhpcyBhIG11Y2ggY2xlYW5lciBhcHByb2FjaC4gQW5kIHRoaXMgcHJlLWFsbG9jYXRlZCBidWZmZXIgaXMgYmVpbmcgZG9uZSBhdCBwcm9iZSB0aW1lIHVzaW5nIGBkbWFtX2FsbG9jX2NvaGVyZW50YC4gTWFrZXMgc2Vuc2UsIHNldHMgdGhpbmdzIHVwIGVhcmx5IGFuZCBrZWVwcyB0aGluZ3MgcnVubmluZyBzbW9vdGhseS5cblxuTm93LCBsZXQncyBzdGVwIGJhY2sgYW5kIGNvbnNpZGVyIHRoZSBiaWdnZXIgcGljdHVyZS4gSXMgdGhpcyBhIGRyaXZlciBmb3Igc29tZSBzcGVjaWZpYywgdW4tZW11bGF0ZWQgaGFyZHdhcmU/IFRoZSBkcml2ZXIgaXMgaW4gdGhlIGBhaXJvaGFgIGRpcmVjdG9yeSwgd2hpY2ggaW5kaWNhdGVzIEFpcm9oYSwgYSBzdWJzaWRpYXJ5IG9mIE1lZGlhVGVrLCBpcyB0aGUgdmVuZG9yIGhlcmUuIEl0IGlzIGxpa2VseSB0aGF0IHRoaXMgZHJpdmVyIGlzIGZvciB0aGUgQWlyb2hhIEVONzU4MSBTb0MgTlBVIChOZXR3b3JrIFByb2Nlc3NpbmcgVW5pdCkuIEkga25vdyB3ZSBjYW7igJl0IGVtdWxhdGUgKmV2ZXJ5KiBwaWVjZSBvZiBoYXJkd2FyZSBpbiBRRU1VLiBEb2VzIFFFTVUgc3VwcG9ydCB0aGUgRU43NTgxPyBObywgaXQgbG9va3MgbGlrZSBpdCBpc24ndC5cblxuSGFuZyBvbi4uLiB0aGUgcHJvbXB0IG1lbnRpb25zIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzLiBUaGlzIGlzIGFuIFNvQyBkcml2ZXIsIG5vdCBhIFBDSWUgY2FyZC4gQnV0IHRoZSBrZXkgaXMgdGhhdCBpdCdzIHN0aWxsIGEgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlciB0aGF0IGlzbid0IGVtdWxhdGVkIGJ5IFFFTVUuIFRoaXMgcGF0Y2ggcmVxdWlyZXMgYW4gRU43NTgxIHRvIHRlc3QsIGFuZCB0aGF0IHJlcXVpcmVzIGFjdHVhbCBoYXJkd2FyZSwgbm90IGFuIGVtdWxhdG9yLlxuXG5J4oCZbSBnb2luZyB0byBjaGVjayB0aGUga2VybmVsIHRyZWUgZm9yIGFueSBtZW50aW9uIG9mIFwiYWlyb2hhXCIuIFNlZSBpZiB0aGVyZSdzIGFueSBoaW50IG9mIGVtdWxhdGlvbiBvciBldmVuIGEgbWV0aG9kIG9mIHJlYWNoaW5nIHRoZSBoYXJkd2FyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY3MiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE3OjQwOjA3Ljc1OTg0MTA2N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjk3MTcwNDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFpcm9oYV9ucHVfcHJvYmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYz03MDU9c3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIHJlZ21hcF9jb25maWcgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTcxMi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjcxMzpzdGF0aWMgaW50IGFpcm9oYV9ucHVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTcxNC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jPTg0Mj1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhaXJvaGFfbnB1X2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjg0MzpcXHQucHJvYmUgPSBhaXJvaGFfbnB1X3Byb2JlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtODQ0LVxcdC5yZW1vdmUgPSBhaXJvaGFfbnB1X3JlbW92ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTc6NDA6MTAuMDU3MDE4NDE5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzAwMzY5NjAzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZlYXNpYmlsaXR5IG9mIEFjY2Vzc2luZyB0aGUgQWlyb2hhIE5QVSBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBhaXJvaGFfbnB1YCBkcml2ZXIsIGFuZCBteSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgaXQncyBnb2luZyB0byBiZSB0cmlja3kgdG8gZ2V0IGF0IGluIGEgdHlwaWNhbCB2aXJ0dWFsaXplZCBzZXR1cC4gUGxhdGZvcm0gZHJpdmVycywgZXNwZWNpYWxseSB0aG9zZSB0aWVkIHRvIGEgc3BlY2lmaWMgU29DIGxpa2UgdGhpcyBBaXJvaGEgRU43NTgxLCBhcmUgdXN1YWxseSBvdXQgb2YgcmVhY2ggdW5sZXNzIHdlIGhhdmUgYSBmdWxsLWJsb3duIGVtdWxhdGlvbiBvZiB0aGF0IFNvQywgd2hpY2gsIGxldCdzIGJlIGhvbmVzdCwgaXNuJ3QgYWx3YXlzIHJlYWRpbHkgYXZhaWxhYmxlLCBlc3BlY2lhbGx5IGZvciBzb21ldGhpbmcgbGlrZSB0aGlzLiBJIGNhbiB0aGluayBvZiBhIGZldyBBUk0gYm9hcmRzIGluIFFFTVUgdGhhdCAqbWlnaHQqIGJlIHNpbXVsYXRlZCB3ZWxsIGVub3VnaCwgYnV0IEknbSBub3QgYmV0dGluZyBvbiBpdC5cblxuU28sIHRoZSBmaXJzdCB0aGluZyB0byBjaGVjayBpcyBpZiB0aGVyZSdzICphbnkqIHdheSB0byByZWFjaCB0aGlzIGNvZGUgd2l0aG91dCBkaXJlY3QgaGFyZHdhcmUgYWNjZXNzLiBNeSBndXQgc2F5cyBubywgYnV0IHdlIG5lZWQgdG8gdmVyaWZ5LiBJIHNlZSBpdCdzIGEgcGxhdGZvcm0gZGV2aWNlLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBEZXZpY2UgVHJlZS4gSWYgdGhlIERldmljZSBUcmVlIGlzbid0IHByZXNlbnQgb3IgZG9lc24ndCBkZXNjcmliZSB0aGUgaGFyZHdhcmUsIHRoZSBgcHJvYmVgIGZ1bmN0aW9uIGp1c3Qgd29uJ3QgYmUgY2FsbGVkLCB3aGljaCBpcyBhIGJpZyBodXJkbGUuIEV2ZW4gaWYgd2UgKmRpZCogcHJvdmlkZSBhIGR1bW15IERldmljZSBUcmVlLCB0aGlzIGRyaXZlciB1c2VzIHRoaW5ncyBsaWtlIGBkZXZtX2lvcmVtYXBfcmVzb3VyY2VgLCBgZGV2bV9yZXF1ZXN0X2lycWAsIGFuZCBgcmVnbWFwX2luaXRfbW1pb2AsIGFuZCB0aGVuIGl0IGdldHMgdG8gYGFpcm9oYV9ucHVfcnVuX2Zpcm13YXJlYCwgd2hpY2ggbW9zdCBsaWtlbHkgaW50ZXJhY3RzIGRpcmVjdGx5IHdpdGggdGhlIGhhcmR3YXJlLlxuXG5UaW1lIHRvIGRpdmUgaW50byBgYWlyb2hhX25wdV9wcm9iZWAuIEkgbmVlZCB0byBzZWUgd2hhdCdzIGFjdHVhbGx5IGhhcHBlbmluZyBpbiB0aGF0IGZ1bmN0aW9uIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YganVzdCBob3cgdGlnaHRseSBjb3VwbGVkIHRoaXMgaXMgdG8gdGhlIHNwZWNpZmljIGhhcmR3YXJlLiBUaGlzIGlzIGdvaW5nIHRvIGJlIG15IGtleSBmb2N1cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTcwMiwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxNzo0MDoxNy4wNjA3MTYzMTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcxMyxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MTM6XFx0c3RhdGljIGludCBhaXJvaGFfbnB1X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuIDcxNDpcXHR7XFxuIDcxNTpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbiA3MTY6XFx0XFx0c3RydWN0IGFpcm9oYV9ucHUgKm5wdTtcXG4gNzE3OlxcdFxcdHN0cnVjdCByZXNvdXJjZSByZXM7XFxuIDcxODpcXHRcXHR2b2lkIF9faW9tZW0gKmJhc2U7XFxuIDcxOTpcXHRcXHRpbnQgaSwgaXJxLCBlcnI7XFxuIDcyMDpcXHRcXHR1MzIgdmFsO1xcbiA3MjE6XFx0XFxuIDcyMjpcXHRcXHRiYXNlID0gZGV2bV9wbGF0Zm9ybV9pb3JlbWFwX3Jlc291cmNlKHBkZXYsIDApO1xcbiA3MjM6XFx0XFx0aWYgKElTX0VSUihiYXNlKSlcXG4gNzI0OlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGJhc2UpO1xcbiA3MjU6XFx0XFxuIDcyNjpcXHRcXHRucHUgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKm5wdSksIEdGUF9LRVJORUwpO1xcbiA3Mjc6XFx0XFx0aWYgKCFucHUpXFxuIDcyODpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gNzI5OlxcdFxcbiA3MzA6XFx0XFx0bnB1LVxcdTAwM2VkZXYgPSBkZXY7XFxuIDczMTpcXHRcXHRucHUtXFx1MDAzZW9wcy5wcGVfaW5pdCA9IGFpcm9oYV9ucHVfcHBlX2luaXQ7XFxuIDczMjpcXHRcXHRucHUtXFx1MDAzZW9wcy5wcGVfZGVpbml0ID0gYWlyb2hhX25wdV9wcGVfZGVpbml0O1xcbiA3MzM6XFx0XFx0bnB1LVxcdTAwM2VvcHMucHBlX2luaXRfc3RhdHMgPSBhaXJvaGFfbnB1X3BwZV9zdGF0c19zZXR1cDtcXG4gNzM0OlxcdFxcdG5wdS1cXHUwMDNlb3BzLnBwZV9mbHVzaF9zcmFtX2VudHJpZXMgPSBhaXJvaGFfbnB1X3BwZV9mbHVzaF9zcmFtX2VudHJpZXM7XFxuIDczNTpcXHRcXHRucHUtXFx1MDAzZW9wcy5wcGVfZm9lX2NvbW1pdF9lbnRyeSA9IGFpcm9oYV9ucHVfZm9lX2NvbW1pdF9lbnRyeTtcXG4gNzM2OlxcdFxcdG5wdS1cXHUwMDNlb3BzLndsYW5faW5pdF9yZXNlcnZlZF9tZW1vcnkgPSBhaXJvaGFfbnB1X3dsYW5faW5pdF9tZW1vcnk7XFxuIDczNzpcXHRcXHRucHUtXFx1MDAzZW9wcy53bGFuX3NlbmRfbXNnID0gYWlyb2hhX25wdV93bGFuX21zZ19zZW5kO1xcbiA3Mzg6XFx0XFx0bnB1LVxcdTAwM2VvcHMud2xhbl9nZXRfbXNnID0gYWlyb2hhX25wdV93bGFuX21zZ19nZXQ7XFxuIDczOTpcXHRcXHRucHUtXFx1MDAzZW9wcy53bGFuX2dldF9xdWV1ZV9hZGRyID0gYWlyb2hhX25wdV93bGFuX3F1ZXVlX2FkZHJfZ2V0O1xcbiA3NDA6XFx0XFx0bnB1LVxcdTAwM2VvcHMud2xhbl9zZXRfaXJxX3N0YXR1cyA9IGFpcm9oYV9ucHVfd2xhbl9pcnFfc3RhdHVzX3NldDtcXG4gNzQxOlxcdFxcdG5wdS1cXHUwMDNlb3BzLndsYW5fZ2V0X2lycV9zdGF0dXMgPSBhaXJvaGFfbnB1X3dsYW5faXJxX3N0YXR1c19nZXQ7XFxuIDc0MjpcXHRcXHRucHUtXFx1MDAzZW9wcy53bGFuX2VuYWJsZV9pcnEgPSBhaXJvaGFfbnB1X3dsYW5faXJxX2VuYWJsZTtcXG4gNzQzOlxcdFxcdG5wdS1cXHUwMDNlb3BzLndsYW5fZGlzYWJsZV9pcnEgPSBhaXJvaGFfbnB1X3dsYW5faXJxX2Rpc2FibGU7XFxuIDc0NDpcXHRcXG4gNzQ1OlxcdFxcdG5wdS1cXHUwMDNlcmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9tbWlvKGRldiwgYmFzZSwgXFx1MDAyNnJlZ21hcF9jb25maWcpO1xcbiA3NDY6XFx0XFx0aWYgKElTX0VSUihucHUtXFx1MDAzZXJlZ21hcCkpXFxuIDc0NzpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihucHUtXFx1MDAzZXJlZ21hcCk7XFxuIDc0ODpcXHRcXG4gNzQ5OlxcdFxcdGVyciA9IG9mX3Jlc2VydmVkX21lbV9yZWdpb25fdG9fcmVzb3VyY2UoZGV2LVxcdTAwM2VvZl9ub2RlLCAwLCBcXHUwMDI2cmVzKTtcXG4gNzUwOlxcdFxcdGlmIChlcnIpXFxuIDc1MTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA3NTI6XFx0XFxuIDc1MzpcXHRcXHRpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApO1xcbiA3NTQ6XFx0XFx0aWYgKGlycSBcXHUwMDNjIDApXFxuIDc1NTpcXHRcXHRcXHRyZXR1cm4gaXJxO1xcbiA3NTY6XFx0XFxuIDc1NzpcXHRcXHRlcnIgPSBkZXZtX3JlcXVlc3RfaXJxKGRldiwgaXJxLCBhaXJvaGFfbnB1X21ib3hfaGFuZGxlcixcXG4gNzU4OlxcdFxcdFxcdFxcdCAgICAgICBJUlFGX1NIQVJFRCwgXFxcImFpcm9oYS1ucHUtbWJveFxcXCIsIG5wdSk7XFxuIDc1OTpcXHRcXHRpZiAoZXJyKVxcbiA3NjA6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNzYxOlxcdFxcbiA3NjI6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUobnB1LVxcdTAwM2Vjb3Jlcyk7IGkrKykge1xcbiA3NjM6XFx0XFx0XFx0c3RydWN0IGFpcm9oYV9ucHVfY29yZSAqY29yZSA9IFxcdTAwMjZucHUtXFx1MDAzZWNvcmVzW2ldO1xcbiA3NjQ6XFx0XFxuIDc2NTpcXHRcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2Y29yZS1cXHUwMDNlbG9jayk7XFxuIDc2NjpcXHRcXHRcXHRjb3JlLVxcdTAwM2VucHUgPSBucHU7XFxuIDc2NzpcXHRcXG4gNzY4OlxcdFxcdFxcdGlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgaSArIDEpO1xcbiA3Njk6XFx0XFx0XFx0aWYgKGlycSBcXHUwMDNjIDApXFxuIDc3MDpcXHRcXHRcXHRcXHRyZXR1cm4gaXJxO1xcbiA3NzE6XFx0XFxuIDc3MjpcXHRcXHRcXHRlcnIgPSBkZXZtX3JlcXVlc3RfaXJxKGRldiwgaXJxLCBhaXJvaGFfbnB1X3dkdF9oYW5kbGVyLFxcbiA3NzM6XFx0XFx0XFx0XFx0XFx0ICAgICAgIElSUUZfU0hBUkVELCBcXFwiYWlyb2hhLW5wdS13ZHRcXFwiLCBjb3JlKTtcXG4gNzc0OlxcdFxcdFxcdGlmIChlcnIpXFxuIDc3NTpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA3NzY6XFx0XFxuIDc3NzpcXHRcXHRcXHRJTklUX1dPUksoXFx1MDAyNmNvcmUtXFx1MDAzZXdkdF93b3JrLCBhaXJvaGFfbnB1X3dkdF93b3JrKTtcXG4gNzc4OlxcdFxcdH1cXG4gNzc5OlxcdFxcbiA3ODA6XFx0XFx0Lyogd2xhbiBJUlEgbGluZXMgKi9cXG4gNzgxOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKG5wdS1cXHUwMDNlaXJxcyk7IGkrKykge1xcbiA3ODI6XFx0XFx0XFx0aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCBpICsgQVJSQVlfU0laRShucHUtXFx1MDAzZWNvcmVzKSArIDEpO1xcbiA3ODM6XFx0XFx0XFx0aWYgKGlycSBcXHUwMDNjIDApXFxuIDc4NDpcXHRcXHRcXHRcXHRyZXR1cm4gaXJxO1xcbiA3ODU6XFx0XFxuIDc4NjpcXHRcXHRcXHRucHUtXFx1MDAzZWlycXNbaV0gPSBpcnE7XFxuIDc4NzpcXHRcXHR9XFxuIDc4ODpcXHRcXG4gNzg5OlxcdFxcdGVyciA9IGRtYV9zZXRfY29oZXJlbnRfbWFzayhkZXYsIERNQV9CSVRfTUFTSygzMikpO1xcbiA3OTA6XFx0XFx0aWYgKGVycilcXG4gNzkxOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDc5MjpcXHRcXG4gNzkzOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKG5wdS1cXHUwMDNlY29yZXMpOyBpKyspIHtcXG4gNzk0OlxcdFxcdFxcdHN0cnVjdCBhaXJvaGFfbnB1X2NvcmUgKmNvcmUgPSBcXHUwMDI2bnB1LVxcdTAwM2Vjb3Jlc1tpXTtcXG4gNzk1OlxcdFxcbiA3OTY6XFx0XFx0XFx0Y29yZS1cXHUwMDNlYnVmID0gZG1hbV9hbGxvY19jb2hlcmVudChkZXYsIEFJUk9IQV9OUFVfTUJPWF9TSVpFLFxcbiA3OTc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNmNvcmUtXFx1MDAzZWFkZHIsIEdGUF9LRVJORUwpO1xcbiA3OTg6XFx0XFx0XFx0aWYgKCFjb3JlLVxcdTAwM2VidWYpXFxuIDc5OTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gODAwOlxcdFxcdH1cXG4gODAxOlxcdFxcbiA4MDI6XFx0XFx0ZXJyID0gYWlyb2hhX25wdV9ydW5fZmlybXdhcmUoZGV2LCBiYXNlLCBcXHUwMDI2cmVzKTtcXG4gODAzOlxcdFxcdGlmIChlcnIpXFxuIDgwNDpcXHRcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgXFxcImZhaWxlZCB0byBydW4gbnB1IGZpcm13YXJlXFxcXG5cXFwiKTtcXG4gODA1OlxcdFxcbiA4MDY6XFx0XFx0cmVnbWFwX3dyaXRlKG5wdS1cXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTlBVX01JQigxMCksXFxuIDgwNzpcXHRcXHRcXHQgICAgIHJlcy5zdGFydCArIE5QVV9FTjc1ODFfRklSTVdBUkVfUlYzMl9NQVhfU0laRSk7XFxuIDgwODpcXHRcXHRyZWdtYXBfd3JpdGUobnB1LVxcdTAwM2VyZWdtYXAsIFJFR19DUl9OUFVfTUlCKDExKSwgMHg0MDAwMCk7IC8qIFNSQU0gMjU2SyAqL1xcbiA4MDk6XFx0XFx0cmVnbWFwX3dyaXRlKG5wdS1cXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTlBVX01JQigxMiksIDApO1xcbiA4MTA6XFx0XFx0cmVnbWFwX3dyaXRlKG5wdS1cXHUwMDNlcmVnbWFwLCBSRUdfQ1JfTlBVX01JQigyMSksIDEpO1xcbiA4MTE6XFx0XFx0bXNsZWVwKDEwMCk7XFxuIDgxMjpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTc6NDA6MTcuMDYwODEyNjE2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA5MjM0NDAwMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nIEFzc2Vzc21lbnQ6IEFpcm9oYSBFTjc1ODEgTlBVIERyaXZlcioqXG5cbk9rYXksIHNvIHRoZSBkcml2ZXIgdXNlcyBgb2ZfcmVzZXJ2ZWRfbWVtX3JlZ2lvbl90b19yZXNvdXJjZSgpYCwgd2hpY2ggaXMgYSBrZXkgcGllY2UuIElmIEkgd2FudGVkIHRvIGZ1enogdGhpcywgSSdkIGhhdmUgdG8gZ2V0IHN5emthbGxlciB0byBnZW5lcmF0ZSBhIGRldmljZSB0cmVlIHdpdGggcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbnMuIEkga25vdyBzeXprYWxsZXIgY2FuIGRvIHRoaXMgaW4gc29tZSBjYXNlcywgbWF5YmUgdXNpbmcgcHNldWRvLXN5c2NhbGxzIGxpa2UgYHN5el9pbml0X25ldF9zb2NrZXRgIGlmIGl0IGhhcyBhIGRlZmluaXRpb24gZm9yIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSwgYnV0IHVzdWFsbHkgc3l6a2FsbGVyIGRvZXNuJ3QgY3JlYXRlIHBsYXRmb3JtIGRldmljZXMgd2l0aCByZXNlcnZlZCBtZW1vcnkgdW5sZXNzIHRoZXJlJ3MgYSBzeXpsYW5nIGRlc2NyaXB0aW9uLiBJIHRob3VnaHQsIGJyaWVmbHksIGFib3V0IGBzeXpfZ2VuZXRsaW5rX2dldF9mYW1pbHlgLCBidXQgdGhhdCdzIG5vdCB0aGUgcmlnaHQgcGF0aC4gUGxhdGZvcm0gZGV2aWNlcyBhcmUgaW5zdGFudGlhdGVkIHZpYSBkZXZpY2UgdHJlZSBvdmVybGF5cywgcmlnaHQ/IEFuZCBJIHJlY2FsbCBzeXprYWxsZXIgaGFzICpzb21lKiBsaW1pdGVkIHN1cHBvcnQgZm9yIHRob3NlLCBpbiB0aGluZ3MgbGlrZSBgc3l6X21vdW50X2ltYWdlYCwgYnV0IGl0J3Mgbm90IGlkZWFsLlxuXG5DcnVjaWFsbHksIHRoaXMgaXMgYSBuZXR3b3JrIHByb2Nlc3NpbmcgdW5pdCBkcml2ZXIgZm9yIHRoZSBBaXJvaGEgRU43NTgxLiBUaGUgcHJvbXB0IG1lbnRpb25zIGEgc3BlY2lmaWMgbGlzdCBvZiBkZXZpY2VzIHRvIGNoZWNrLiBOb3csIGl0J3Mgbm90IGEgUENJZSBjYXJkLCBidXQgaXQgKmlzKiB2ZW5kb3Itc3BlY2lmaWMgU29DIGhhcmR3YXJlIOKAkyB0aGUgRU43NTgxLiBBbmQgdGhlIHByb21wdCBpcyBjbGVhciB0aGF0IGRyaXZlcnMgbmVlZGluZyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gUUVNVSBhcmUgYSBcIm5vLWdvXCIuIFRoZSBFTjc1ODEgbmVlZHMgcGh5c2ljYWwgaGFyZHdhcmUgYW5kIGFzIGZhciBhcyBJIGtub3csIHN0YW5kYXJkIFFFTVUgZG9lc24ndCBlbXVsYXRlIHRoZSBFTjc1ODEuIFRoaXMgbG9va3MgbGlrZSBhIGRlYWQgZW5kIGZvciBzdGFuZGFyZCBRRU1VIGZ1enppbmcuXG5cbkJ1dCB3YWl0LCBob2xkIG9uLiBJcyBpdCAqcG9zc2libGUqIHRvIHJlYWNoIHRoaXMgY29kZSBhdCBhbGwgaW4gUUVNVT8gSSBzaG91bGQgcXVpY2tseSBjaGVjayBpZiB0aGVyZSBpcyAqYW55KiBFTjc1ODEgZW11bGF0aW9uIGF2YWlsYWJsZS4gTm9wZSwgbm90IHRoYXQgSSBjYW4gZmluZC5cblxuU28sIGNhbiBzeXprYWxsZXIgZnV6eiB0aGlzPyBXZWxsLCB0aGUgcXVlc3Rpb24gYm9pbHMgZG93biB0byB3aGV0aGVyIHN5emthbGxlciBjYW4gaW5zdGFudGlhdGUgdGhlIHBsYXRmb3JtIGRldmljZS4gU3l6a2FsbGVyJ3MgYHN5el9kZXZfaW5pdGAgb3Igc2ltaWxhciBtaWdodCBiZSBhYmxlIHRvIGNyZWF0ZSBwbGF0Zm9ybSBkZXZpY2VzLCBpZiBJIGNhbiBtYXAgbWVtb3J5LCBwcm92aWRlIElSUXMsIGFuZCBtb3N0IGltcG9ydGFudGx5LCB0aGUgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUsIHNvIGEgY2hlY2sgb24gd2hldGhlciBhaXJvaGFfbnB1IGhhcyBhbnkgc3l6a2FsbGVyIGRlc2NyaXB0aW9uIHdvdWxkIGJlIHVzZWZ1bC4gVWx0aW1hdGVseSwgdGhpcyBsb29rcyB1bmxpa2VseSB0byBiZSB3b3J0aCBwdXJzdWluZyB3aXRob3V0IHNpZ25pZmljYW50IGVmZm9ydCB0byBlbXVsYXRlIHRoZSBzcGVjaWZpYyBoYXJkd2FyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIyNSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE3OjQwOjI3Ljk4NDI1NTAzM1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzkyMjM1NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWlyb2hhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInN5cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE3OjQwOjI4LjA0ODE4NzAxOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwMzY5MTQ0NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudDogQWlyb2hhIE5QVSBEcml2ZXIgYW5kIEZ1enppbmcgRmVhc2liaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZXJlIGFyZSBubyBzeXpsYW5nIGRlc2NyaXB0aW9ucyBhdmFpbGFibGUgZm9yIHRoaXMgQWlyb2hhIGNvbXBvbmVudCwgd2hpY2ggaXMgYSByZWQgZmxhZywgYnV0IHRoZSBjb3JlIGlzc3VlIGhlcmUgaXMgdGhlIGhhcmR3YXJlIGRlcGVuZGVuY3kuIFRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU29DIE5QVSBkcml2ZXIsIGFuZCBiYXNlZCBvbiB3aGF0IEkga25vdyBhYm91dCB0aGVzZSBraW5kcyBvZiBkcml2ZXJzLCBpdCAqYWJzb2x1dGVseSogcmVxdWlyZXMgdGhlIGFjdHVhbCBBaXJvaGEgRU43NTgxIFNvQyBoYXJkd2FyZSB0byBmdW5jdGlvbi4gSXQncyBub3Qgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGFkZXF1YXRlbHkgZW11bGF0ZWQgd2l0aGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudCwgb3IgZXZlbiB1c2luZyBzcGVjaWFsaXplZCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS4gSXQncyBzaW1wbHkgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nLlxuXG5MZXQgbWUgcXVpY2tseSByZS1yZWFkIHRoZSBwcm9tcHQgdG8gYmUgc3VyZTogKlwiLi4uQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLi4uIC0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycy4uLiB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cIipcblxuWXVwLCB0aGF0IHNlYWxzIGl0LiBUaGlzICpkaXJlY3RseSogZmFsbHMgaW50byB0aGUgY2F0ZWdvcnkgb2YgY29kZSB0aGF0IGlzIGZ1bmRhbWVudGFsbHkgaW5hY2Nlc3NpYmxlIGZvciBmdXp6aW5nLiBJdCdzIGFuIEFpcm9oYSBFTjc1ODEgTlBVIGRyaXZlci4gSSBrbm93IHRoYXQga2luZCBvZiBoYXJkd2FyZS4gSXQgbmVlZHMgdGhlIHBoeXNpY2FsIFNvQy4gVGhlIGNvZGUgcGF0aCBtb2RpZmljYXRpb24gY29uY2VybnMgdGhlIGRyaXZlciBhdCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuY2AuIFRoZSBkcml2ZXIncyBpbmhlcmVudCBkZXBlbmRlbmNlIG9uIHRoZSBzcGVjaWZpYyBBaXJvaGEgU29DIGFyY2hpdGVjdHVyZSBtYWtlcyBpdCBpbXBvc3NpYmxlIHRvIHJlYWNoIHRoZXNlIGNvZGUgcGF0aHMgaW4gYW55IHByYWN0aWNhbCB2aXJ0dWFsaXplZCBzZXR0aW5nLiBUaGVyZWZvcmUsIHRoZSBkZWNpc2lvbiBpcyBjbGVhcjogYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLiBUaGUgcGF0Y2gncyB0YXJnZXQgaXMgdW4tZnV6emFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyMzgsIk91dHB1dFRva2VucyI6MTE0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE3OjQwOjM1LjA4NTEwNDE3NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgRU43NTgxIE5QVSBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMpLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNvQyBoYXJkd2FyZSBibG9jayB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGUgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgc28gaXQgY2Fubm90IGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgRU43NTgxIE5QVSBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMpLiBUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNvQyBoYXJkd2FyZSBibG9jayB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGUgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgc28gaXQgY2Fubm90IGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowgpscn[1] Phase: Running StartedAt: 2026-08-06 17:40:46 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgpscn[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-06 17:40:46 +0000 UTC FinishedAt: 2026-08-06 17:40:51 +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,}