Name: series-workflowqszbj Phase: Succeeded StartedAt: 2026-07-29 10:58:23 +0000 UTC FinishedAt: 2026-07-29 15:24:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqszbj[0] Phase: Succeeded StartedAt: 2026-07-29 10:58:23 +0000 UTC FinishedAt: 2026-07-29 11:23:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqszbj[0].run-triage Phase: Succeeded StartedAt: 2026-07-29 10:58:23 +0000 UTC FinishedAt: 2026-07-29 11:23:34 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "99cea7eb5216ff688a597595e93c123823865674", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "99cea7eb5216ff688a597595e93c123823865674", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE" ], "series_id": "0a421c5f-91d7-49d2-8b3c-196a0745ba3a" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "mm_get_huge_zero_folio", "mm_put_huge_zero_folio", "shrink_huge_zero_folio_scan", "shrink_huge_zero_folio_count", "alloc_huge_zero_folio", "get_huge_zero_folio" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDExOjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bW1fZ2V0X2h1Z2VfemVyb19mb2xpbyYjMzQ7LAogICAgJiMzNDttbV9wdXRfaHVnZV96ZXJvX2ZvbGlvJiMzNDssCiAgICAmIzM0O3Nocmlua19odWdlX3plcm9fZm9saW9fc2NhbiYjMzQ7LAogICAgJiMzNDtzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX2NvdW50JiMzNDssCiAgICAmIzM0O2FsbG9jX2h1Z2VfemVyb19mb2xpbyYjMzQ7LAogICAgJiMzNDtnZXRfaHVnZV96ZXJvX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYWxsb2NhdGlvbiBhbmQgbWFuYWdlbWVudCBvZiB0aGUgaHVnZSB6ZXJvIGZvbGlvIGluIFRIUCAoVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyksIGludHJvZHVjaW5nIGEgc3BpbmxvY2sgdG8gZml4IHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgYWxsb2NhdGlvbiBhbmQgc2hyaW5raW5nIHdoZW4gQ09ORklHX1BFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPIGlzIGRpc2FibGVkLiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgcGFnZSBmYXVsdHMgYW5kIG1lbW9yeSBwcmVzc3VyZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxMToyMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDE0OTYzYTVhNjY0MWJiYTZhNGM0NjZjYjFhYzdlODQxY2Q1MzU2YjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAyOSAxMToyMjoxNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggMDMyNzAyYTQ2MzdiYS4uYWNlZTJkMjhiOWJiYyAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC00MSw2ICYjNDM7NDEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BnYWxsb2MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BnYWxsb2NfdGFnLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdld2Fsay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS90bGIuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O2ludGVybmFsLmhcJiMzNDtcbkBAIC03Nyw5ICYjNDM7NzgsMTUgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGVmZXJyZWRfc3BsaXRfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcbiBcdFx0XHRcdFx0IHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpO1xuIHN0YXRpYyBib29sIHNwbGl0X3VuZGVydXNlZF90aHAgPSB0cnVlO1xuIFxuLXN0YXRpYyBhdG9taWNfdCBodWdlX3plcm9fcmVmY291bnQ7XG4mIzQzOyNkZWZpbmUgSFVHRV9aRVJPX1VOU0VUX1BGTiAofjBVTClcbiBzdHJ1Y3QgZm9saW8gKmh1Z2VfemVyb19mb2xpbyBfX3JlYWRfbW9zdGx5O1xuLXVuc2lnbmVkIGxvbmcgaHVnZV96ZXJvX3BmbiBfX3JlYWRfbW9zdGx5ID0gfjBVTDtcbiYjNDM7dW5zaWduZWQgbG9uZyBodWdlX3plcm9fcGZuIF9fcmVhZF9tb3N0bHkgPSBIVUdFX1pFUk9fVU5TRVRfUEZOO1xuJiM0MzsjaWZuZGVmIENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT1xuJiM0MztzdGF0aWMgYXRvbWljX3QgaHVnZV96ZXJvX3JlZmNvdW50O1xuJiM0MztzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGh1Z2VfemVyb19sb2NrKTtcbiYjNDM7c3RhdGljIHN0cnVjdCBzaHJpbmtlciAqaHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gdW5zaWduZWQgbG9uZyBodWdlX2Fub25fb3JkZXJzX2Fsd2F5cyBfX3JlYWRfbW9zdGx5O1xuIHVuc2lnbmVkIGxvbmcgaHVnZV9hbm9uX29yZGVyc19tYWR2aXNlIF9fcmVhZF9tb3N0bHk7XG4gdW5zaWduZWQgbG9uZyBodWdlX2Fub25fb3JkZXJzX2luaGVyaXQgX19yZWFkX21vc3RseTtcbkBAIC0yMjEsMzMgJiM0MzsyMjgsNzQgQEAgdW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdHJldHVybiBvcmRlcnM7XG4gfVxuIFxuLXN0YXRpYyBib29sIGdldF9odWdlX3plcm9fZm9saW8odm9pZClcbiYjNDM7c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZV96ZXJvX2ZvbGlvKHZvaWQpXG4ge1xuIFx0c3RydWN0IGZvbGlvICp6ZXJvX2ZvbGlvO1xuLXJldHJ5OlxuLVx0aWYgKGxpa2VseShhdG9taWNfaW5jX25vdF96ZXJvKFx1MDAyNmh1Z2VfemVyb19yZWZjb3VudCkpKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdHplcm9fZm9saW8gPSBmb2xpb19hbGxvYygoR0ZQX1RSQU5TSFVHRSB8IF9fR0ZQX1pFUk8gfCBfX0dGUF9aRVJPVEFHUykgXHUwMDI2XG4gXHRcdFx0XHQgfl9fR0ZQX01PVkFCTEUsXG4gXHRcdFx0SFBBR0VfUE1EX09SREVSKTtcbiBcdGlmICghemVyb19mb2xpbykge1xuIFx0XHRjb3VudF92bV9ldmVudChUSFBfWkVST19QQUdFX0FMTE9DX0ZBSUxFRCk7XG4tXHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XHRmb2xpb19jbGVhcl9sYXJnZV9ybWFwcGFibGUoemVyb19mb2xpbyk7IC8qIEV4cGxpY2l0bHkgbm90IHJtYXBwYWJsZS4gKi9cbiYjNDM7XHRyZXR1cm4gemVyb19mb2xpbztcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT1xuJiM0MztzdGF0aWMgaW50IF9faW5pdCBodWdlX3plcm9faW5pdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aHVnZV96ZXJvX2ZvbGlvID0gYWxsb2NfaHVnZV96ZXJvX2ZvbGlvKCk7XG4mIzQzO1x0aWYgKCFodWdlX3plcm9fZm9saW8pIHtcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7QWxsb2NhdGluZyBwZXJzaXN0ZW50IGh1Z2UgemVybyBmb2xpbyBmYWlsZWRcXG5cJiMzNDspO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRodWdlX3plcm9fcGZuID0gZm9saW9fcGZuKGh1Z2VfemVyb19mb2xpbyk7XG4mIzQzO1x0XHRjb3VudF92bV9ldmVudChUSFBfWkVST19QQUdFX0FMTE9DKTtcbiBcdH1cbi1cdC8qIEVuc3VyZSB6ZXJvIGZvbGlvIHdvbiYjMzk7dCBoYXZlIGxhcmdlX3JtYXBwYWJsZSBmbGFnIHNldC4gKi9cbi1cdGZvbGlvX2NsZWFyX2xhcmdlX3JtYXBwYWJsZSh6ZXJvX2ZvbGlvKTtcbi1cdHByZWVtcHRfZGlzYWJsZSgpO1xuLVx0aWYgKGNtcHhjaGcoXHUwMDI2aHVnZV96ZXJvX2ZvbGlvLCBOVUxMLCB6ZXJvX2ZvbGlvKSkge1xuLVx0XHRwcmVlbXB0X2VuYWJsZSgpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBfX2luaXQgaHVnZV96ZXJvX3Nocmlua2VyX2V4aXQodm9pZClcbiYjNDM7e1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdHJ1Y3QgZm9saW8gKm1tX2dldF9odWdlX3plcm9fZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gaHVnZV96ZXJvX2ZvbGlvO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIG1tX3B1dF9odWdlX3plcm9fZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4mIzQzO3tcbiYjNDM7fVxuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgYm9vbCBnZXRfaHVnZV96ZXJvX2ZvbGlvKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZm9saW8gKnplcm9fZm9saW87XG4mIzQzO1xuJiM0MztcdC8qIFBhaXJlZCB3aXRoIGF0b21pY19zZXRfcmVsZWFzZSgpLiAqL1xuJiM0MztcdGlmIChsaWtlbHkoYXRvbWljX2luY19ub3RfemVybyhcdTAwMjZodWdlX3plcm9fcmVmY291bnQpKSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHR6ZXJvX2ZvbGlvID0gYWxsb2NfaHVnZV96ZXJvX2ZvbGlvKCk7XG4mIzQzO1x0aWYgKHVubGlrZWx5KCF6ZXJvX2ZvbGlvKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0LyogUGFpcmVkIHdpdGggY3JpdGljYWwgc2VjdGlvbiBpbiBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW4oKS4gKi9cbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2aHVnZV96ZXJvX2xvY2spO1xuJiM0MztcdGlmIChodWdlX3plcm9fZm9saW8pIHtcbiYjNDM7XHRcdC8qIFNvbWVib2R5IGVsc2UgYWxyZWFkeSBpbnN0YWxsZWQgaXQuICovXG4mIzQzO1x0XHRhdG9taWNfaW5jKFx1MDAyNmh1Z2VfemVyb19yZWZjb3VudCk7XG4mIzQzO1x0XHRzcGluX3VubG9jayhcdTAwMjZodWdlX3plcm9fbG9jayk7XG4gXHRcdGZvbGlvX3B1dCh6ZXJvX2ZvbGlvKTtcbi1cdFx0Z290byByZXRyeTtcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuIFx0fVxuJiM0MztcdFdSSVRFX09OQ0UoaHVnZV96ZXJvX2ZvbGlvLCB6ZXJvX2ZvbGlvKTtcbiBcdFdSSVRFX09OQ0UoaHVnZV96ZXJvX3BmbiwgZm9saW9fcGZuKHplcm9fZm9saW8pKTtcbiYjNDM7XHQvKiBQYWlyZWQgd2l0aCBhdG9taWNfaW5jX25vdF96ZXJvKCkuICYjNDM7MSBmb3Igc2hyaW5rZXIgcGluLiAqL1xuJiM0MztcdGF0b21pY19zZXRfcmVsZWFzZShcdTAwMjZodWdlX3plcm9fcmVmY291bnQsIDIpO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNmh1Z2VfemVyb19sb2NrKTtcbiBcbi1cdC8qIFdlIHRha2UgYWRkaXRpb25hbCByZWZlcmVuY2UgaGVyZS4gSXQgd2lsbCBiZSBwdXQgYmFjayBieSBzaHJpbmtlciAqL1xuLVx0YXRvbWljX3NldChcdTAwMjZodWdlX3plcm9fcmVmY291bnQsIDIpO1xuLVx0cHJlZW1wdF9lbmFibGUoKTtcbiBcdGNvdW50X3ZtX2V2ZW50KFRIUF9aRVJPX1BBR0VfQUxMT0MpO1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuQEAgLTI1OCwxNCAmIzQzOzMwNiw1OSBAQCBzdGF0aWMgdm9pZCBwdXRfaHVnZV96ZXJvX2ZvbGlvKHZvaWQpXG4gXHQgKiBDb3VudGVyIHNob3VsZCBuZXZlciBnbyB0byB6ZXJvIGhlcmUuIE9ubHkgc2hyaW5rZXIgY2FuIHB1dFxuIFx0ICogbGFzdCByZWZlcmVuY2UuXG4gXHQgKi9cbi1cdEJVR19PTihhdG9taWNfZGVjX2FuZF90ZXN0KFx1MDAyNmh1Z2VfemVyb19yZWZjb3VudCkpO1xuJiM0MztcdFdBUk5fT05fT05DRShhdG9taWNfZGVjX2FuZF90ZXN0KFx1MDAyNmh1Z2VfemVyb19yZWZjb3VudCkpO1xuIH1cbiBcbi1zdHJ1Y3QgZm9saW8gKm1tX2dldF9odWdlX3plcm9fZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19odWdlX3plcm9fZm9saW9fY291bnQoc3RydWN0IHNocmlua2VyICpzaHJpbmssXG4mIzQzO1x0XHRcdFx0XHRcdCAgc3RydWN0IHNocmlua19jb250cm9sICpzYylcbiB7XG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU8pKVxuLVx0XHRyZXR1cm4gaHVnZV96ZXJvX2ZvbGlvO1xuJiM0MztcdC8qIHdlIGNhbiBmcmVlIHplcm8gcGFnZSBvbmx5IGlmIGxhc3QgcmVmZXJlbmNlIHJlbWFpbnMgKi9cbiYjNDM7XHRyZXR1cm4gYXRvbWljX3JlYWQoXHUwMDI2aHVnZV96ZXJvX3JlZmNvdW50KSA9PSAxID8gSFBBR0VfUE1EX05SIDogMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxuJiM0MztcdFx0XHRcdFx0XHQgc3RydWN0IHNocmlua19jb250cm9sICpzYylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBmb2xpbyAqemVyb19mb2xpbztcbiYjNDM7XG4mIzQzO1x0LyogUGFpcmVkIHdpdGggY3JpdGljYWwgc2VjdGlvbiBpbiBnZXRfaHVnZV96ZXJvX2ZvbGlvKCkuICovXG4mIzQzO1x0c2NvcGVkX2d1YXJkKHNwaW5sb2NrLCBcdTAwMjZodWdlX3plcm9fbG9jaykge1xuJiM0MztcdFx0LyogUGFpcmVkIHdpdGggYXRvbWljX2luY19ub3RfemVybygpIGluIGdldF9odWdlX3plcm9fZm9saW8oKS4gKi9cbiYjNDM7XHRcdGlmIChhdG9taWNfY21weGNoZyhcdTAwMjZodWdlX3plcm9fcmVmY291bnQsIDEsIDApICE9IDEpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRcdHplcm9fZm9saW8gPSBodWdlX3plcm9fZm9saW87XG4mIzQzO1x0XHRWTV9XQVJOX09OX09OQ0UoIWh1Z2VfemVyb19mb2xpbyk7XG4mIzQzO1x0XHRXUklURV9PTkNFKGh1Z2VfemVyb19mb2xpbywgTlVMTCk7XG4mIzQzO1x0XHRXUklURV9PTkNFKGh1Z2VfemVyb19wZm4sIEhVR0VfWkVST19VTlNFVF9QRk4pO1xuJiM0MztcdH1cbiBcbiYjNDM7XHRmb2xpb19wdXQoemVyb19mb2xpbyk7XG4mIzQzO1x0cmV0dXJuIEhQQUdFX1BNRF9OUjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX2luaXQgaHVnZV96ZXJvX2luaXQodm9pZClcbiYjNDM7e1xuJiM0MztcdGh1Z2VfemVyb19mb2xpb19zaHJpbmtlciA9IHNocmlua2VyX2FsbG9jKDAsIFwmIzM0O3RocC16ZXJvXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIWh1Z2VfemVyb19mb2xpb19zaHJpbmtlcikge1xuJiM0MztcdFx0c2hyaW5rZXJfZnJlZShkZWZlcnJlZF9zcGxpdF9zaHJpbmtlcik7XG4mIzQzO1x0XHRsaXN0X2xydV9kZXN0cm95KFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGh1Z2VfemVyb19mb2xpb19zaHJpbmtlci1cdTAwM2Vjb3VudF9vYmplY3RzID0gc2hyaW5rX2h1Z2VfemVyb19mb2xpb19jb3VudDtcbiYjNDM7XHRodWdlX3plcm9fZm9saW9fc2hyaW5rZXItXHUwMDNlc2Nhbl9vYmplY3RzID0gc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuO1xuJiM0MztcdHNocmlua2VyX3JlZ2lzdGVyKGh1Z2VfemVyb19mb2xpb19zaHJpbmtlcik7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIF9faW5pdCBodWdlX3plcm9fc2hyaW5rZXJfZXhpdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c2hyaW5rZXJfZnJlZShodWdlX3plcm9fZm9saW9fc2hyaW5rZXIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdHJ1Y3QgZm9saW8gKm1tX2dldF9odWdlX3plcm9fZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4mIzQzO3tcbiBcdGlmIChtbV9mbGFnc190ZXN0KE1NRl9IVUdFX1pFUk9fRk9MSU8sIG1tKSlcbiBcdFx0cmV0dXJuIFJFQURfT05DRShodWdlX3plcm9fZm9saW8pO1xuIFxuQEAgLTI4MCwzNSAmIzQzOzM3MywxMCBAQCBzdHJ1Y3QgZm9saW8gKm1tX2dldF9odWdlX3plcm9fZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gXG4gdm9pZCBtbV9wdXRfaHVnZV96ZXJvX2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIHtcbi1cdGlmIChJU19FTkFCTEVEKENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJTykpXG4tXHRcdHJldHVybjtcbi1cbiBcdGlmIChtbV9mbGFnc190ZXN0KE1NRl9IVUdFX1pFUk9fRk9MSU8sIG1tKSlcbiBcdFx0cHV0X2h1Z2VfemVyb19mb2xpbygpO1xuIH1cbi1cbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxuLVx0XHRcdFx0XHRcdCAgc3RydWN0IHNocmlua19jb250cm9sICpzYylcbi17XG4tXHQvKiB3ZSBjYW4gZnJlZSB6ZXJvIHBhZ2Ugb25seSBpZiBsYXN0IHJlZmVyZW5jZSByZW1haW5zICovXG4tXHRyZXR1cm4gYXRvbWljX3JlYWQoXHUwMDI2aHVnZV96ZXJvX3JlZmNvdW50KSA9PSAxID8gSFBBR0VfUE1EX05SIDogMDtcbi19XG4tXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxuLVx0XHRcdFx0XHRcdCBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuLXtcbi1cdGlmIChhdG9taWNfY21weGNoZyhcdTAwMjZodWdlX3plcm9fcmVmY291bnQsIDEsIDApID09IDEpIHtcbi1cdFx0c3RydWN0IGZvbGlvICp6ZXJvX2ZvbGlvID0geGNoZyhcdTAwMjZodWdlX3plcm9fZm9saW8sIE5VTEwpO1xuLVx0XHRCVUdfT04oemVyb19mb2xpbyA9PSBOVUxMKTtcbi1cdFx0V1JJVEVfT05DRShodWdlX3plcm9fcGZuLCB+MFVMKTtcbi1cdFx0Zm9saW9fcHV0KHplcm9fZm9saW8pO1xuLVx0XHRyZXR1cm4gSFBBR0VfUE1EX05SO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyBzdHJ1Y3Qgc2hyaW5rZXIgKmh1Z2VfemVyb19mb2xpb19zaHJpbmtlcjtcbiYjNDM7I2VuZGlmIC8qIENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJTyAqL1xuIFxuICNpZmRlZiBDT05GSUdfU1lTRlNcbiBzdGF0aWMgc3NpemVfdCBlbmFibGVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG5AQCAtOTcyLDM5ICYjNDM7MTA0MCwxNCBAQCBzdGF0aWMgaW50IF9faW5pdCB0aHBfc2hyaW5rZXJfaW5pdCh2b2lkKVxuIFx0ZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXItXHUwMDNlc2Nhbl9vYmplY3RzID0gZGVmZXJyZWRfc3BsaXRfc2NhbjtcbiBcdHNocmlua2VyX3JlZ2lzdGVyKGRlZmVycmVkX3NwbGl0X3Nocmlua2VyKTtcbiBcbi1cdGlmIChJU19FTkFCTEVEKENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJTykpIHtcbi1cdFx0Lypcbi1cdFx0ICogQnVtcCB0aGUgcmVmZXJlbmNlIG9mIHRoZSBodWdlX3plcm9fZm9saW8gYW5kIGRvIG5vdFxuLVx0XHQgKiBpbml0aWFsaXplIHRoZSBzaHJpbmtlci5cbi1cdFx0ICpcbi1cdFx0ICogaHVnZV96ZXJvX2ZvbGlvIHdpbGwgYWx3YXlzIGJlIE5VTEwgb24gZmFpbHVyZS4gV2UgYXNzdW1lXG4tXHRcdCAqIHRoYXQgZ2V0X2h1Z2VfemVyb19mb2xpbygpIHdpbGwgbW9zdCBsaWtlbHkgbm90IGZhaWwgYXNcbi1cdFx0ICogdGhwX3Nocmlua2VyX2luaXQoKSBpcyBpbnZva2VkIGVhcmx5IG9uIGR1cmluZyBib290LlxuLVx0XHQgKi9cbi1cdFx0aWYgKCFnZXRfaHVnZV96ZXJvX2ZvbGlvKCkpXG4tXHRcdFx0cHJfd2FybihcJiMzNDtBbGxvY2F0aW5nIHBlcnNpc3RlbnQgaHVnZSB6ZXJvIGZvbGlvIGZhaWxlZFxcblwmIzM0Oyk7XG4tXHRcdHJldHVybiAwO1xuLVx0fVxuLVxuLVx0aHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyID0gc2hyaW5rZXJfYWxsb2MoMCwgXCYjMzQ7dGhwLXplcm9cJiMzNDspO1xuLVx0aWYgKCFodWdlX3plcm9fZm9saW9fc2hyaW5rZXIpIHtcbi1cdFx0c2hyaW5rZXJfZnJlZShkZWZlcnJlZF9zcGxpdF9zaHJpbmtlcik7XG4tXHRcdGxpc3RfbHJ1X2Rlc3Ryb3koXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1KTtcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4tXHR9XG4tXG4tXHRodWdlX3plcm9fZm9saW9fc2hyaW5rZXItXHUwMDNlY291bnRfb2JqZWN0cyA9IHNocmlua19odWdlX3plcm9fZm9saW9fY291bnQ7XG4tXHRodWdlX3plcm9fZm9saW9fc2hyaW5rZXItXHUwMDNlc2Nhbl9vYmplY3RzID0gc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuO1xuLVx0c2hyaW5rZXJfcmVnaXN0ZXIoaHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyKTtcbi1cbi1cdHJldHVybiAwO1xuJiM0MztcdHJldHVybiBodWdlX3plcm9faW5pdCgpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBfX2luaXQgdGhwX3Nocmlua2VyX2V4aXQodm9pZClcbiB7XG4tXHRzaHJpbmtlcl9mcmVlKGh1Z2VfemVyb19mb2xpb19zaHJpbmtlcik7XG4gXHRzaHJpbmtlcl9mcmVlKGRlZmVycmVkX3NwbGl0X3Nocmlua2VyKTtcbiBcdGxpc3RfbHJ1X2Rlc3Ryb3koXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1KTtcbiYjNDM7XHRodWdlX3plcm9fc2hyaW5rZXJfZXhpdCgpO1xuIH1cbiBcbiBzdGF0aWMgaW50IF9faW5pdCBodWdlcGFnZV9pbml0KHZvaWQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTE6MjI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bW1fZ2V0X2h1Z2VfemVyb19mb2xpbyYjMzQ7LAogICAgJiMzNDttbV9wdXRfaHVnZV96ZXJvX2ZvbGlvJiMzNDssCiAgICAmIzM0O3Nocmlua19odWdlX3plcm9fZm9saW9fc2NhbiYjMzQ7LAogICAgJiMzNDtzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX2NvdW50JiMzNDssCiAgICAmIzM0O2FsbG9jX2h1Z2VfemVyb19mb2xpbyYjMzQ7LAogICAgJiMzNDtnZXRfaHVnZV96ZXJvX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYWxsb2NhdGlvbiBhbmQgbWFuYWdlbWVudCBvZiB0aGUgaHVnZSB6ZXJvIGZvbGlvIGluIFRIUCAoVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyksIGludHJvZHVjaW5nIGEgc3BpbmxvY2sgdG8gZml4IHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgYWxsb2NhdGlvbiBhbmQgc2hyaW5raW5nIHdoZW4gQ09ORklHX1BFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPIGlzIGRpc2FibGVkLiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgcGFnZSBmYXVsdHMgYW5kIG1lbW9yeSBwcmVzc3VyZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDE0OTYzYTVhNjY0MWJiYTZhNGM0NjZjYjFhYzdlODQxY2Q1MzU2YjgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAyOSAxMToyMjoxNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IDAzMjcwMmE0NjM3YmEuLmFjZWUyZDI4YjliYmMgMTAwNjQ0Ci0tLSBhL21tL2h1Z2VfbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuYwpAQCAtNDEsNiAmIzQzOzQxLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9wZ2FsbG9jLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGdhbGxvY190YWcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wYWdld2Fsay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDthc20vdGxiLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2ludGVybmFsLmgmIzM0OwpAQCAtNzcsOSAmIzQzOzc4LDE1IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRlZmVycmVkX3NwbGl0X3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssCiAJCQkJCSBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKTsKIHN0YXRpYyBib29sIHNwbGl0X3VuZGVydXNlZF90aHAgPSB0cnVlOwogCi1zdGF0aWMgYXRvbWljX3QgaHVnZV96ZXJvX3JlZmNvdW50OwomIzQzOyNkZWZpbmUgSFVHRV9aRVJPX1VOU0VUX1BGTiAofjBVTCkKIHN0cnVjdCBmb2xpbyAqaHVnZV96ZXJvX2ZvbGlvIF9fcmVhZF9tb3N0bHk7Ci11bnNpZ25lZCBsb25nIGh1Z2VfemVyb19wZm4gX19yZWFkX21vc3RseSA9IH4wVUw7CiYjNDM7dW5zaWduZWQgbG9uZyBodWdlX3plcm9fcGZuIF9fcmVhZF9tb3N0bHkgPSBIVUdFX1pFUk9fVU5TRVRfUEZOOwomIzQzOyNpZm5kZWYgQ09ORklHX1BFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPCiYjNDM7c3RhdGljIGF0b21pY190IGh1Z2VfemVyb19yZWZjb3VudDsKJiM0MztzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGh1Z2VfemVyb19sb2NrKTsKJiM0MztzdGF0aWMgc3RydWN0IHNocmlua2VyICpodWdlX3plcm9fZm9saW9fc2hyaW5rZXI7CiYjNDM7I2VuZGlmCiYjNDM7CiB1bnNpZ25lZCBsb25nIGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzIF9fcmVhZF9tb3N0bHk7CiB1bnNpZ25lZCBsb25nIGh1Z2VfYW5vbl9vcmRlcnNfbWFkdmlzZSBfX3JlYWRfbW9zdGx5OwogdW5zaWduZWQgbG9uZyBodWdlX2Fub25fb3JkZXJzX2luaGVyaXQgX19yZWFkX21vc3RseTsKQEAgLTIyMSwzMyAmIzQzOzIyOCw3NCBAQCB1bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCXJldHVybiBvcmRlcnM7CiB9CiAKLXN0YXRpYyBib29sIGdldF9odWdlX3plcm9fZm9saW8odm9pZCkKJiM0MztzdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19odWdlX3plcm9fZm9saW8odm9pZCkKIHsKIAlzdHJ1Y3QgZm9saW8gKnplcm9fZm9saW87Ci1yZXRyeToKLQlpZiAobGlrZWx5KGF0b21pY19pbmNfbm90X3plcm8oJmFtcDtodWdlX3plcm9fcmVmY291bnQpKSkKLQkJcmV0dXJuIHRydWU7CiAKIAl6ZXJvX2ZvbGlvID0gZm9saW9fYWxsb2MoKEdGUF9UUkFOU0hVR0UgfCBfX0dGUF9aRVJPIHwgX19HRlBfWkVST1RBR1MpICZhbXA7CiAJCQkJIH5fX0dGUF9NT1ZBQkxFLAogCQkJSFBBR0VfUE1EX09SREVSKTsKIAlpZiAoIXplcm9fZm9saW8pIHsKIAkJY291bnRfdm1fZXZlbnQoVEhQX1pFUk9fUEFHRV9BTExPQ19GQUlMRUQpOwotCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwlmb2xpb19jbGVhcl9sYXJnZV9ybWFwcGFibGUoemVyb19mb2xpbyk7IC8qIEV4cGxpY2l0bHkgbm90IHJtYXBwYWJsZS4gKi8KJiM0MzsJcmV0dXJuIHplcm9fZm9saW87CiYjNDM7fQomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU8KJiM0MztzdGF0aWMgaW50IF9faW5pdCBodWdlX3plcm9faW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJaHVnZV96ZXJvX2ZvbGlvID0gYWxsb2NfaHVnZV96ZXJvX2ZvbGlvKCk7CiYjNDM7CWlmICghaHVnZV96ZXJvX2ZvbGlvKSB7CiYjNDM7CQlwcl93YXJuKCYjMzQ7QWxsb2NhdGluZyBwZXJzaXN0ZW50IGh1Z2UgemVybyBmb2xpbyBmYWlsZWRcbiYjMzQ7KTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWh1Z2VfemVyb19wZm4gPSBmb2xpb19wZm4oaHVnZV96ZXJvX2ZvbGlvKTsKJiM0MzsJCWNvdW50X3ZtX2V2ZW50KFRIUF9aRVJPX1BBR0VfQUxMT0MpOwogCX0KLQkvKiBFbnN1cmUgemVybyBmb2xpbyB3b24mIzM5O3QgaGF2ZSBsYXJnZV9ybWFwcGFibGUgZmxhZyBzZXQuICovCi0JZm9saW9fY2xlYXJfbGFyZ2Vfcm1hcHBhYmxlKHplcm9fZm9saW8pOwotCXByZWVtcHRfZGlzYWJsZSgpOwotCWlmIChjbXB4Y2hnKCZhbXA7aHVnZV96ZXJvX2ZvbGlvLCBOVUxMLCB6ZXJvX2ZvbGlvKSkgewotCQlwcmVlbXB0X2VuYWJsZSgpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgX19pbml0IGh1Z2VfemVyb19zaHJpbmtlcl9leGl0KHZvaWQpCiYjNDM7ewomIzQzO30KJiM0MzsKJiM0MztzdHJ1Y3QgZm9saW8gKm1tX2dldF9odWdlX3plcm9fZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pCiYjNDM7ewomIzQzOwlyZXR1cm4gaHVnZV96ZXJvX2ZvbGlvOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIG1tX3B1dF9odWdlX3plcm9fZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pCiYjNDM7ewomIzQzO30KJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBib29sIGdldF9odWdlX3plcm9fZm9saW8odm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBmb2xpbyAqemVyb19mb2xpbzsKJiM0MzsKJiM0MzsJLyogUGFpcmVkIHdpdGggYXRvbWljX3NldF9yZWxlYXNlKCkuICovCiYjNDM7CWlmIChsaWtlbHkoYXRvbWljX2luY19ub3RfemVybygmYW1wO2h1Z2VfemVyb19yZWZjb3VudCkpKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CXplcm9fZm9saW8gPSBhbGxvY19odWdlX3plcm9fZm9saW8oKTsKJiM0MzsJaWYgKHVubGlrZWx5KCF6ZXJvX2ZvbGlvKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJLyogUGFpcmVkIHdpdGggY3JpdGljYWwgc2VjdGlvbiBpbiBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW4oKS4gKi8KJiM0MzsJc3Bpbl9sb2NrKCZhbXA7aHVnZV96ZXJvX2xvY2spOwomIzQzOwlpZiAoaHVnZV96ZXJvX2ZvbGlvKSB7CiYjNDM7CQkvKiBTb21lYm9keSBlbHNlIGFscmVhZHkgaW5zdGFsbGVkIGl0LiAqLwomIzQzOwkJYXRvbWljX2luYygmYW1wO2h1Z2VfemVyb19yZWZjb3VudCk7CiYjNDM7CQlzcGluX3VubG9jaygmYW1wO2h1Z2VfemVyb19sb2NrKTsKIAkJZm9saW9fcHV0KHplcm9fZm9saW8pOwotCQlnb3RvIHJldHJ5OwomIzQzOwkJcmV0dXJuIHRydWU7CiAJfQomIzQzOwlXUklURV9PTkNFKGh1Z2VfemVyb19mb2xpbywgemVyb19mb2xpbyk7CiAJV1JJVEVfT05DRShodWdlX3plcm9fcGZuLCBmb2xpb19wZm4oemVyb19mb2xpbykpOwomIzQzOwkvKiBQYWlyZWQgd2l0aCBhdG9taWNfaW5jX25vdF96ZXJvKCkuICYjNDM7MSBmb3Igc2hyaW5rZXIgcGluLiAqLwomIzQzOwlhdG9taWNfc2V0X3JlbGVhc2UoJmFtcDtodWdlX3plcm9fcmVmY291bnQsIDIpOwomIzQzOwlzcGluX3VubG9jaygmYW1wO2h1Z2VfemVyb19sb2NrKTsKIAotCS8qIFdlIHRha2UgYWRkaXRpb25hbCByZWZlcmVuY2UgaGVyZS4gSXQgd2lsbCBiZSBwdXQgYmFjayBieSBzaHJpbmtlciAqLwotCWF0b21pY19zZXQoJmFtcDtodWdlX3plcm9fcmVmY291bnQsIDIpOwotCXByZWVtcHRfZW5hYmxlKCk7CiAJY291bnRfdm1fZXZlbnQoVEhQX1pFUk9fUEFHRV9BTExPQyk7CiAJcmV0dXJuIHRydWU7CiB9CkBAIC0yNTgsMTQgJiM0MzszMDYsNTkgQEAgc3RhdGljIHZvaWQgcHV0X2h1Z2VfemVyb19mb2xpbyh2b2lkKQogCSAqIENvdW50ZXIgc2hvdWxkIG5ldmVyIGdvIHRvIHplcm8gaGVyZS4gT25seSBzaHJpbmtlciBjYW4gcHV0CiAJICogbGFzdCByZWZlcmVuY2UuCiAJICovCi0JQlVHX09OKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFtcDtodWdlX3plcm9fcmVmY291bnQpKTsKJiM0MzsJV0FSTl9PTl9PTkNFKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFtcDtodWdlX3plcm9fcmVmY291bnQpKTsKIH0KIAotc3RydWN0IGZvbGlvICptbV9nZXRfaHVnZV96ZXJvX2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19odWdlX3plcm9fZm9saW9fY291bnQoc3RydWN0IHNocmlua2VyICpzaHJpbmssCiYjNDM7CQkJCQkJICBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKQogewotCWlmIChJU19FTkFCTEVEKENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJTykpCi0JCXJldHVybiBodWdlX3plcm9fZm9saW87CiYjNDM7CS8qIHdlIGNhbiBmcmVlIHplcm8gcGFnZSBvbmx5IGlmIGxhc3QgcmVmZXJlbmNlIHJlbWFpbnMgKi8KJiM0MzsJcmV0dXJuIGF0b21pY19yZWFkKCZhbXA7aHVnZV96ZXJvX3JlZmNvdW50KSA9PSAxID8gSFBBR0VfUE1EX05SIDogMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLAomIzQzOwkJCQkJCSBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKQomIzQzO3sKJiM0MzsJc3RydWN0IGZvbGlvICp6ZXJvX2ZvbGlvOwomIzQzOwomIzQzOwkvKiBQYWlyZWQgd2l0aCBjcml0aWNhbCBzZWN0aW9uIGluIGdldF9odWdlX3plcm9fZm9saW8oKS4gKi8KJiM0MzsJc2NvcGVkX2d1YXJkKHNwaW5sb2NrLCAmYW1wO2h1Z2VfemVyb19sb2NrKSB7CiYjNDM7CQkvKiBQYWlyZWQgd2l0aCBhdG9taWNfaW5jX25vdF96ZXJvKCkgaW4gZ2V0X2h1Z2VfemVyb19mb2xpbygpLiAqLwomIzQzOwkJaWYgKGF0b21pY19jbXB4Y2hnKCZhbXA7aHVnZV96ZXJvX3JlZmNvdW50LCAxLCAwKSAhPSAxKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwomIzQzOwkJemVyb19mb2xpbyA9IGh1Z2VfemVyb19mb2xpbzsKJiM0MzsJCVZNX1dBUk5fT05fT05DRSghaHVnZV96ZXJvX2ZvbGlvKTsKJiM0MzsJCVdSSVRFX09OQ0UoaHVnZV96ZXJvX2ZvbGlvLCBOVUxMKTsKJiM0MzsJCVdSSVRFX09OQ0UoaHVnZV96ZXJvX3BmbiwgSFVHRV9aRVJPX1VOU0VUX1BGTik7CiYjNDM7CX0KIAomIzQzOwlmb2xpb19wdXQoemVyb19mb2xpbyk7CiYjNDM7CXJldHVybiBIUEFHRV9QTURfTlI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19pbml0IGh1Z2VfemVyb19pbml0KHZvaWQpCiYjNDM7ewomIzQzOwlodWdlX3plcm9fZm9saW9fc2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYygwLCAmIzM0O3RocC16ZXJvJiMzNDspOwomIzQzOwlpZiAoIWh1Z2VfemVyb19mb2xpb19zaHJpbmtlcikgewomIzQzOwkJc2hyaW5rZXJfZnJlZShkZWZlcnJlZF9zcGxpdF9zaHJpbmtlcik7CiYjNDM7CQlsaXN0X2xydV9kZXN0cm95KCZhbXA7ZGVmZXJyZWRfc3BsaXRfbHJ1KTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CWh1Z2VfemVyb19mb2xpb19zaHJpbmtlci0mZ3Q7Y291bnRfb2JqZWN0cyA9IHNocmlua19odWdlX3plcm9fZm9saW9fY291bnQ7CiYjNDM7CWh1Z2VfemVyb19mb2xpb19zaHJpbmtlci0mZ3Q7c2Nhbl9vYmplY3RzID0gc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuOwomIzQzOwlzaHJpbmtlcl9yZWdpc3RlcihodWdlX3plcm9fZm9saW9fc2hyaW5rZXIpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgX19pbml0IGh1Z2VfemVyb19zaHJpbmtlcl9leGl0KHZvaWQpCiYjNDM7ewomIzQzOwlzaHJpbmtlcl9mcmVlKGh1Z2VfemVyb19mb2xpb19zaHJpbmtlcik7CiYjNDM7fQomIzQzOwomIzQzO3N0cnVjdCBmb2xpbyAqbW1fZ2V0X2h1Z2VfemVyb19mb2xpbyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKJiM0Mzt7CiAJaWYgKG1tX2ZsYWdzX3Rlc3QoTU1GX0hVR0VfWkVST19GT0xJTywgbW0pKQogCQlyZXR1cm4gUkVBRF9PTkNFKGh1Z2VfemVyb19mb2xpbyk7CiAKQEAgLTI4MCwzNSAmIzQzOzM3MywxMCBAQCBzdHJ1Y3QgZm9saW8gKm1tX2dldF9odWdlX3plcm9fZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pCiAKIHZvaWQgbW1fcHV0X2h1Z2VfemVyb19mb2xpbyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU8pKQotCQlyZXR1cm47Ci0KIAlpZiAobW1fZmxhZ3NfdGVzdChNTUZfSFVHRV9aRVJPX0ZPTElPLCBtbSkpCiAJCXB1dF9odWdlX3plcm9fZm9saW8oKTsKIH0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluaywKLQkJCQkJCSAgc3RydWN0IHNocmlua19jb250cm9sICpzYykKLXsKLQkvKiB3ZSBjYW4gZnJlZSB6ZXJvIHBhZ2Ugb25seSBpZiBsYXN0IHJlZmVyZW5jZSByZW1haW5zICovCi0JcmV0dXJuIGF0b21pY19yZWFkKCZhbXA7aHVnZV96ZXJvX3JlZmNvdW50KSA9PSAxID8gSFBBR0VfUE1EX05SIDogMDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLAotCQkJCQkJIHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpCi17Ci0JaWYgKGF0b21pY19jbXB4Y2hnKCZhbXA7aHVnZV96ZXJvX3JlZmNvdW50LCAxLCAwKSA9PSAxKSB7Ci0JCXN0cnVjdCBmb2xpbyAqemVyb19mb2xpbyA9IHhjaGcoJmFtcDtodWdlX3plcm9fZm9saW8sIE5VTEwpOwotCQlCVUdfT04oemVyb19mb2xpbyA9PSBOVUxMKTsKLQkJV1JJVEVfT05DRShodWdlX3plcm9fcGZuLCB+MFVMKTsKLQkJZm9saW9fcHV0KHplcm9fZm9saW8pOwotCQlyZXR1cm4gSFBBR0VfUE1EX05SOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHNocmlua2VyICpodWdlX3plcm9fZm9saW9fc2hyaW5rZXI7CiYjNDM7I2VuZGlmIC8qIENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJTyAqLwogCiAjaWZkZWYgQ09ORklHX1NZU0ZTCiBzdGF0aWMgc3NpemVfdCBlbmFibGVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCkBAIC05NzIsMzkgJiM0MzsxMDQwLDE0IEBAIHN0YXRpYyBpbnQgX19pbml0IHRocF9zaHJpbmtlcl9pbml0KHZvaWQpCiAJZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXItJmd0O3NjYW5fb2JqZWN0cyA9IGRlZmVycmVkX3NwbGl0X3NjYW47CiAJc2hyaW5rZXJfcmVnaXN0ZXIoZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIpOwogCi0JaWYgKElTX0VOQUJMRUQoQ09ORklHX1BFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPKSkgewotCQkvKgotCQkgKiBCdW1wIHRoZSByZWZlcmVuY2Ugb2YgdGhlIGh1Z2VfemVyb19mb2xpbyBhbmQgZG8gbm90Ci0JCSAqIGluaXRpYWxpemUgdGhlIHNocmlua2VyLgotCQkgKgotCQkgKiBodWdlX3plcm9fZm9saW8gd2lsbCBhbHdheXMgYmUgTlVMTCBvbiBmYWlsdXJlLiBXZSBhc3N1bWUKLQkJICogdGhhdCBnZXRfaHVnZV96ZXJvX2ZvbGlvKCkgd2lsbCBtb3N0IGxpa2VseSBub3QgZmFpbCBhcwotCQkgKiB0aHBfc2hyaW5rZXJfaW5pdCgpIGlzIGludm9rZWQgZWFybHkgb24gZHVyaW5nIGJvb3QuCi0JCSAqLwotCQlpZiAoIWdldF9odWdlX3plcm9fZm9saW8oKSkKLQkJCXByX3dhcm4oJiMzNDtBbGxvY2F0aW5nIHBlcnNpc3RlbnQgaHVnZSB6ZXJvIGZvbGlvIGZhaWxlZFxuJiMzNDspOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlodWdlX3plcm9fZm9saW9fc2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYygwLCAmIzM0O3RocC16ZXJvJiMzNDspOwotCWlmICghaHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyKSB7Ci0JCXNocmlua2VyX2ZyZWUoZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIpOwotCQlsaXN0X2xydV9kZXN0cm95KCZhbXA7ZGVmZXJyZWRfc3BsaXRfbHJ1KTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JaHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyLSZndDtjb3VudF9vYmplY3RzID0gc2hyaW5rX2h1Z2VfemVyb19mb2xpb19jb3VudDsKLQlodWdlX3plcm9fZm9saW9fc2hyaW5rZXItJmd0O3NjYW5fb2JqZWN0cyA9IHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbjsKLQlzaHJpbmtlcl9yZWdpc3RlcihodWdlX3plcm9fZm9saW9fc2hyaW5rZXIpOwotCi0JcmV0dXJuIDA7CiYjNDM7CXJldHVybiBodWdlX3plcm9faW5pdCgpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgdGhwX3Nocmlua2VyX2V4aXQodm9pZCkKIHsKLQlzaHJpbmtlcl9mcmVlKGh1Z2VfemVyb19mb2xpb19zaHJpbmtlcik7CiAJc2hyaW5rZXJfZnJlZShkZWZlcnJlZF9zcGxpdF9zaHJpbmtlcik7CiAJbGlzdF9scnVfZGVzdHJveSgmYW1wO2RlZmVycmVkX3NwbGl0X2xydSk7CiYjNDM7CWh1Z2VfemVyb19zaHJpbmtlcl9leGl0KCk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGh1Z2VwYWdlX2luaXQodm9pZCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTE6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkxNgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDMwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEh1Z2UgWmVybyBGb2xpbyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgZGlnZ2luZyBkZWVwIGludG8gYG1tL2h1Z2VfbWVtb3J5LmNgLiBGcm9tIHRoZSBjaGFuZ2VzLCBpdCBsb29rcyBsaWtlIHdlJiMzOTtyZSByZXdvcmtpbmcgaG93IHRoZSBodWdlIHplcm8gZm9saW8gaXMgaGFuZGxlZCwgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byB0aGUgYENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT2AgY29uZmlnIG9wdGlvbi4gSXQmIzM5O3MgdG91Y2hpbmcgc29tZSBmdW5kYW1lbnRhbCBzdHVmZiBpbiBUSFAgbWFuYWdlbWVudCwgd2hpY2ggaXMgYWx3YXlzIGEgY3JpdGljYWwgYXJlYS4gSSBzZWUgbWVudGlvbnMgb2YgYSBgaHVnZV96ZXJvX2xvY2tgIGJlaW5nIGludHJvZHVjZWQsIGFuZCBpdCBhcHBlYXJzIHRoZSBjb3JlIGZ1bmN0aW9ucyBsaWtlIGBnZXRfaHVnZV96ZXJvX2ZvbGlvYCBhbmQgYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAgYXJlIGJlaW5nIHNpZ25pZmljYW50bHkgbW9kaWZpZWQuIEdpdmVuIGl0cyBsb2NhdGlvbiwgdGhpcyBjb2RlIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLCBhbmQgZnVuY3Rpb25hbGx5IHNpZ25pZmljYW50LgoKTm93LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggaGFzIHRvdWNoZWQ6CgoqICAgSSBzZWUgbmV3IGZ1bmN0aW9uczogYGFsbG9jX2h1Z2VfemVyb19mb2xpb2AsIGBodWdlX3plcm9faW5pdGAsIGFuZCBgaHVnZV96ZXJvX3Nocmlua2VyX2V4aXRgLiBUaGVzZSBhcmUgbGlrZWx5IHJlbGF0ZWQgdG8gaW5pdGlhbGl6YXRpb24sIGFsbG9jYXRpb24sIGFuZCBjbGVhbnVwIG9mIHRoZXNlIHplcm8gZm9saW9zLgoqICAgVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmU6IGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYCwgYG1tX3B1dF9odWdlX3plcm9fZm9saW9gLCBgZ2V0X2h1Z2VfemVyb19mb2xpb2AsIGBwdXRfaHVnZV96ZXJvX2ZvbGlvYCwgYHNocmlua19odWdlX3plcm9fZm9saW9fY291bnRgLCBgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuYCwgYHRocF9zaHJpbmtlcl9pbml0YCBhbmQgYHRocF9zaHJpbmtlcl9leGl0YC4gQ2hhbmdlcyB0byB0aGUgYG1tYCBwcmVmaXhlZCBmdW5jdGlvbnMgc3VnZ2VzdCB0aGF0IHRoZSBwYXRjaCBtYXkgYmUgY2hhbmdpbmcgaG93IHRoZSB6ZXJvIGZvbGlvcyBhcmUgcmV0cmlldmVkIGFuZCByZWxlYXNlZCwgYW5kIGhvdyB0aGUgc3lzdGVtIGludGVyYWN0cyB3aXRoIHRoZW0uIFRoZSBzaHJpbmtpbmcgZnVuY3Rpb25zIGJlaW5nIG1vZGlmaWVkIGluZGljYXRlcyBzb21lIGNoYW5nZSB0byB0aGUgc3lzdGVtJiMzOTtzIG1lbW9yeSByZWNsYW1hdGlvbiB3aGVuIHplcm8gZm9saW9zIGFyZSBpbnZvbHZlZC4gQ2hhbmdlcyB0byB0aGUgYHRocGAgZnVuY3Rpb25zIGFyZSBsaWtlbHkgdG8gaW50ZWdyYXRlIHRoZSBuZXcgZnVuY3Rpb25hbGl0eSBpbnRvIFRIUC4KCk15IG5leHQgc3RlcCBpcyB0byBkcmlsbCBpbnRvIHRoZSBLY29uZmlnIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiBgQ09ORklHX1BFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPYC4gVGhpcyB3aWxsIGJlIGtleSB0byBkZWNpcGhlcmluZyB0aGUgaW50ZW5kZWQgYmVoYXZpb3Igb2YgdGhpcyBwYXRjaCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDExOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQRVJTSVNURU5UX0hVR0VfWkVST19GT0xJTyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTgyND1jb25maWcgQVJDSF9XQU5UU19USFBfU1dBUFxuLS1cbm1tL0tjb25maWctODI2LVxubW0vS2NvbmZpZzo4Mjc6Y29uZmlnIFBFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPXG5tbS9LY29uZmlnLTgyOC1cdGJvb2wgXCYjMzQ7QWxsb2NhdGUgYSBQTUQgc2l6ZWQgZm9saW8gZm9yIHplcm9pbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxMToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Nzc4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkFuYWx5emluZyBEZXBlbmRlbmNpZXMgb2YgUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU8qKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gd29yay4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCBpbXBsaWNhdGlvbnMgaGVyZS4gVGhpcyBgUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9gIHRoaW5nLi4uIHJpZ2h0IG9mZiB0aGUgYmF0LCB0aGF0IG5hbWUgc3VnZ2VzdHMgc29tZSBrZXkgYXNwZWN0cy4gJiMzNDtQZXJzaXN0ZW50JiMzNDsgdGVsbHMgbWUgaXQmIzM5O3MgbGlrZWx5IGRlYWxpbmcgd2l0aCBsb25nLXRlcm0gc3RvcmFnZSwgbWF5YmUgZXZlbiBkdXJhYmlsaXR5IGNvbmNlcm5zLiAmIzM0O0h1Z2UmIzM0OyBpcyBhIHBvaW50ZXIgdG93YXJkcyBsYXJnZSBkYXRhIHZvbHVtZXMg4oCTIHRoaW5rIGJpZyB0YWJsZXMsIGltYWdlcywgb3IgcGVyaGFwcyBleHRlbnNpdmUgZGF0YXNldHMuIEFuZCAmIzM0O1plcm8mIzM0OyBpbXBsaWVzIHNvbWUgcG90ZW50aWFsIG9wdGltaXphdGlvbiwgcGVyaGFwcyBmb3Igc2l0dWF0aW9ucyB3aGVyZSBkYXRhIGlzLCBieSBkZWZhdWx0LCBlbXB0eSBvciBzcGFyc2UgYW5kIG5lZWRzIHRvIGJlIGluaXRpYWxpemVkLiAmIzM0O0ZvbGlvJiMzNDsgbGlrZWx5IGltcGxpZXMgdGhpcyBpcyBlaXRoZXIgdGhlIG5hbWUgb2YgYSBmaWxlIG9yIGEgY29sbGVjdGlvbiBvZiBmaWxlcy4KClNvLCB0aGUgaW1tZWRpYXRlIHF1ZXN0aW9ucyBJIGhhdmUgYXJlOiBXaGF0IHNwZWNpZmljIHRlY2hub2xvZ2llcyBpcyB0aGlzIGJ1aWx0IG9uPyBXaGF0IHVuZGVybHlpbmcgc3RvcmFnZSBtZWNoYW5pc21zIGFyZSBpbnZvbHZlZD8gSXMgaXQgdGllZCB0byBhIHNwZWNpZmljIGRhdGFiYXNlIHN5c3RlbSwgYSBkaXN0cmlidXRlZCBmaWxlIHN5c3RlbSwgb3IgYSBjdXN0b20gaW4tbWVtb3J5IHN0cnVjdHVyZT8gSXMgaXQgcmVsaWFudCBvbiBhIHBhcnRpY3VsYXIgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UsIGxpYnJhcnksIG9yIGZyYW1ld29yaz8KCkkgYWxzbyBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICYjMzQ7d2h5JiMzNDsgYmVoaW5kIHRoaXMuIFdoeSBpcyB0aGlzIHBlcnNpc3RlbnQ/IFdoYXQmIzM5O3MgdGhlIGFwcGxpY2F0aW9uIHVzZSBjYXNlIGZvciB0aGlzIHN0cnVjdHVyZT8gSXMgaXQgdXNlZCBmb3IgYXJjaGl2YWwsIGNhY2hpbmcsIHRyYW5zYWN0aW9uYWwgZGF0YSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEtub3dpbmcgdGhlIHB1cnBvc2Ugd2lsbCBpbmZvcm0gbXkgaW52ZXN0aWdhdGlvbiBpbnRvIGl0cyBkZXBlbmRlbmNpZXMuIElzIHRoaXMgdXNlZCBieSBhbiBvdXRzaWRlIHByb2dyYW0sIG9yIGJ5IHRoZSBwcm9ncmFtIHRoYXQgSSBhbSB3b3JraW5nIG9uLiAKCkkgc3VwcG9zZSBJIGNhbiBiZWdpbiB0byB1bnBhY2sgdGhpcyBieSBsb29raW5nIGF0IHRoZSBjb2RlIGRpcmVjdGx5LiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW1wb3J0aW5nIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTE6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MjA6XHRcbiA4MjE6XHRjb25maWcgQVJDSF9XQU5UX0dFTkVSQUxfSFVHRVRMQlxuIDgyMjpcdFx0Ym9vbFxuIDgyMzpcdFxuIDgyNDpcdGNvbmZpZyBBUkNIX1dBTlRTX1RIUF9TV0FQXG4gODI1Olx0XHRkZWZfYm9vbCBuXG4gODI2Olx0XG4gODI3Olx0Y29uZmlnIFBFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPXG4gODI4Olx0XHRib29sIFwmIzM0O0FsbG9jYXRlIGEgUE1EIHNpemVkIGZvbGlvIGZvciB6ZXJvaW5nXCYjMzQ7XG4gODI5Olx0XHRkZXBlbmRzIG9uIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4gODMwOlx0XHRoZWxwXG4gODMxOlx0XHQgIEVuYWJsZSB0aGlzIG9wdGlvbiB0byByZWR1Y2UgdGhlIHJ1bnRpbWUgcmVmY291bnRpbmcgb3ZlcmhlYWRcbiA4MzI6XHRcdCAgb2YgdGhlIGh1Z2UgemVybyBmb2xpbyBhbmQgZXhwYW5kIHRoZSBwbGFjZXMgaW4gdGhlIGtlcm5lbFxuIDgzMzpcdFx0ICB0aGF0IGNhbiB1c2UgaHVnZSB6ZXJvIGZvbGlvcy4gRm9yIGluc3RhbmNlLCBibG9jayBJL08gYmVuZWZpdHNcbiA4MzQ6XHRcdCAgZnJvbSBhY2Nlc3MgdG8gbGFyZ2UgZm9saW9zIGZvciB6ZXJvaW5nIG1lbW9yeS5cbiA4MzU6XHRcbiA4MzY6XHRcdCAgV2l0aCB0aGlzIG9wdGlvbiBlbmFibGVkLCB0aGUgaHVnZSB6ZXJvIGZvbGlvIGlzIGFsbG9jYXRlZFxuIDgzNzpcdFx0ICBvbmNlIGFuZCBuZXZlciBmcmVlZC4gT25lIGZ1bGwgaHVnZSBwYWdlJiMzOTtzIHdvcnRoIG9mIG1lbW9yeSBzaGFsbFxuIDgzODpcdFx0ICBiZSB1c2VkLlxuIDgzOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDExOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0NzkKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA1MDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSBjb25kaXRpb25hbCBvbiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBzcGVjaWZpY2FsbHkgdGhlIGBDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9gIGZsYWcuIEl04oCZcyBtb2RpZnlpbmcgdGhlIGJlaGF2aW9yIGFyb3VuZCBgZ2V0X2h1Z2VfemVyb19mb2xpb2AgYW5kIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5gICpvbmx5KiB3aGVuIHRoaXMgcGVyc2lzdGVudCB6ZXJvIGZvbGlvIGZlYXR1cmUgaXMgZGlzYWJsZWQuIExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGRpZmYgYWdhaW4uLi4gWWVwLCB0aGF0JiMzOTtzIHJpZ2h0LiBUaGUga2V5IGlzIGluIHRob3NlIGAjaWZuZGVmIENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT2AgYmxvY2tzLgoKRXNzZW50aWFsbHksIGlmIHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24gKmlzbiYjMzk7dCogc2V0LCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGR5bmFtaWMgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIG9mIHRoZSB6ZXJvIGZvbGlvLiBJbiB0aGF0IHNjZW5hcmlvLCBgZ2V0X2h1Z2VfemVyb19mb2xpb2AgdXNlcyBhIHNwaW5sb2NrIChgaHVnZV96ZXJvX2xvY2tgKSB0byBwcm90ZWN0IGFnYWluc3QgcmFjZSBjb25kaXRpb25zLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHRyeWluZyB0byBpbnN0YWxsIHRoZSBmb2xpbyBzYWZlbHksIGF0b21pY2FsbHkgaW5jcmVtZW50aW5nIGEgcmVmZXJlbmNlIGNvdW50LiBUaGUgY29tbWVudHMgb24gdGhlIGxvY2sgYXJlIHVzZWZ1bCBoZXJlLgoKSWYgYENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT2AgKmlzKiBzZXQsIHRoZW4gdGhlIGZvbGlvIGlzIGluaXRpYWxpemVkIG9uY2UgYW5kIG5ldmVyIGZyZWVkLCBhbmQgd2UgaGF2ZSBhIGRpZmZlcmVudCBtZWNoYW5pc20gZW50aXJlbHkuCgpUaGlzIGlzIGdvb2QuIEZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGlzIGNvZGUgcGF0aCBpcyBkZWZpbml0ZWx5IGEgY2FuZGlkYXRlIGZvciB0aG9yb3VnaCB0ZXN0aW5nLiBUaGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHNwaW5sb2NrIGFuZCB0aGUgYXRvbWljIG9wZXJhdGlvbnMgYXJlIHRoZSByZWQgZmxhZ3MuIEkmIzM5O2Qgd2FudCB0byBmb2N1cyBmdXp6aW5nIGFyb3VuZCB0aGVzZSBzeW1ib2xzOiBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AsIGBtbV9wdXRfaHVnZV96ZXJvX2ZvbGlvYCwgYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAsIGFuZCBgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19jb3VudGAuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYG1tX2dldF9odWdlX3plcm9fZm9saW9gIGlzIGV4cG9ydGVkIG9yIG90aGVyd2lzZSByZWFjaGFibGUgYnkgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxMToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttbV9nZXRfaHVnZV96ZXJvX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2RheC5jPTE0MTE9c3RhdGljIHZtX2ZhdWx0X3QgZGF4X3BtZF9sb2FkX2hvbGUoc3RydWN0IHhhX3N0YXRlICp4YXMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLS1cbmZzL2RheC5jLTE0MTgtXG5mcy9kYXguYzoxNDE5Olx0emVyb19mb2xpbyA9IG1tX2dldF9odWdlX3plcm9fZm9saW8odm1mLVx1MDAzZXZtYS1cdTAwM2V2bV9tbSk7XG5mcy9kYXguYy0xNDIwLVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTU0OT1zdGF0aWMgaW5saW5lIGJvb2wgaXNfaHVnZV96ZXJvX3BtZChwbWRfdCBwbWQpXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTUzLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NTU0OnN0cnVjdCBmb2xpbyAqbW1fZ2V0X2h1Z2VfemVyb19mb2xpbyhzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC01NTUtdm9pZCBtbV9wdXRfaHVnZV96ZXJvX2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD04MDY9c3RhdGljIGlubGluZSBpbnQgc3BsaXRfZm9saW9fdG9fb3JkZXIoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19vcmRlcilcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC04MTMtICpcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjgxNDogKiBUaGlzIGZ1bmN0aW9uIHNoYWxsIGJlIHVzZWQgd2hlbiBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvKCkgY2Fubm90IGJlXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC04MTUtICogdXNlZCBhcyB0aGVyZSBpcyBubyBhcHByb3ByaWF0ZSBtbSBsaWZldGltZSB0byB0aWUgdGhlIGh1Z2UgemVybyBmb2xpb1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MjU5PXN0YXRpYyB2b2lkIF9faW5pdCBodWdlX3plcm9fc2hyaW5rZXJfZXhpdCh2b2lkKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjYyLVxubW0vaHVnZV9tZW1vcnkuYzoyNjM6c3RydWN0IGZvbGlvICptbV9nZXRfaHVnZV96ZXJvX2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxubW0vaHVnZV9tZW1vcnkuYy0yNjQte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MzU1PXN0YXRpYyB2b2lkIF9faW5pdCBodWdlX3plcm9fc2hyaW5rZXJfZXhpdCh2b2lkKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzU5LVxubW0vaHVnZV9tZW1vcnkuYzozNjA6c3RydWN0IGZvbGlvICptbV9nZXRfaHVnZV96ZXJvX2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxubW0vaHVnZV9tZW1vcnkuYy0zNjEte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTUxOT12bV9mYXVsdF90IGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTU0MS1cdFx0XHRyZXR1cm4gVk1fRkFVTFRfT09NO1xubW0vaHVnZV9tZW1vcnkuYzoxNTQyOlx0XHR6ZXJvX2ZvbGlvID0gbW1fZ2V0X2h1Z2VfemVyb19mb2xpbyh2bWEtXHUwMDNldm1fbW0pO1xubW0vaHVnZV9tZW1vcnkuYy0xNTQzLVx0XHRpZiAodW5saWtlbHkoIXplcm9fZm9saW8pKSB7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0xOTA3PWludCBjb3B5X2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdF9tbSwgc3RydWN0IG1tX3N0cnVjdCAqc3JjX21tLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTk3MC1cdFx0Lypcbm1tL2h1Z2VfbWVtb3J5LmM6MTk3MTpcdFx0ICogbW1fZ2V0X2h1Z2VfemVyb19mb2xpbygpIHdpbGwgbmV2ZXIgYWxsb2NhdGUgYSBuZXdcbm1tL2h1Z2VfbWVtb3J5LmMtMTk3Mi1cdFx0ICogZm9saW8gaGVyZSwgc2luY2Ugd2UgYWxyZWFkeSBoYXZlIGEgemVybyBwYWdlIHRvXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xOTc0LVx0XHQgKi9cbm1tL2h1Z2VfbWVtb3J5LmM6MTk3NTpcdFx0bW1fZ2V0X2h1Z2VfemVyb19mb2xpbyhkc3RfbW0pO1xubW0vaHVnZV9tZW1vcnkuYy0xOTc2LVx0XHRnb3RvIG91dF96ZXJvX3BhZ2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTE6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI1MQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDY2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSHVnZSBaZXJvIEZvbGlvIFNocmlua2luZyBhbmQgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGh1Z2UgemVybyBmb2xpbyBjb2RlLiBGaXJzdCwgaXQmIzM5O3MgY2xlYXIgdGhhdCBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AgaXMgZGVmaW5pdGVseSByZWFjaGFibGUsIGFuZCB0aGF0IGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5gIGlzIGEgc2hyaW5rZXIgY2FsbGJhY2ssIHdoaWNoIG1lYW5zIGl0IHNob3VsZCBiZSB0cmlnZ2VyZWQgYnkgbWVtb3J5IHByZXNzdXJlLiBMZXQmIzM5O3MgbWFrZSBzdXJlIGl0JiMzOTtzIG5vdCBpbmxpbmU7IHllcywgaXQmIzM5O3Mgc3RhdGljIGluIGBtbS9odWdlX21lbW9yeS5jYCwgYnV0IHNpbmNlIGl0JiMzOTtzIGEgc2hyaW5rZXIgY2FsbGJhY2sgYW5kIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgdG8gYGh1Z2VfemVyb19mb2xpb19zaHJpbmtlci0mZ3Q7c2Nhbl9vYmplY3RzID0gc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuO2AgaXQgd29uJiMzOTt0IGJlIGlubGluZWQuIFRoYXQmIzM5O3MgZ29vZCwgYSBmdXp6ZXIgY2FuIHBvdGVudGlhbGx5IGZvY3VzIG9uIHRoaXMuCgpOb3csIGxldCBtZSBjaGVjayB0aGUgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbiBgZ2V0X2h1Z2VfemVyb19mb2xpb2AsIHdoaWNoIGlzIGFsc28gc3RhdGljIGFuZCBjYWxsZWQgYnkgYG1tX2dldF9odWdlX3plcm9fZm9saW9gLCB3aGljaCBpbiB0dXJuIGNhbGxzIGl0LgoKVGhlIGZ1bmN0aW9ucyBJJiMzOTttIGZvY3VzaW5nIG9uIGFyZToKCiogICBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AKKiAgIGBtbV9wdXRfaHVnZV96ZXJvX2ZvbGlvYAoqICAgYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAKKiAgIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX2NvdW50YAoKSG9sZCBvbiBhIHNlY29uZC4uLml0IGxvb2tzIGxpa2UgYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAgYW5kIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX2NvdW50YCBhcmUgb25seSBjb21waWxlZCBpZiBgQ09ORklHX1BFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPYCBpcyAqbm90KiBzZXQuIFNvLCBpZiBJIHdhbnQgdG8gdGVzdCB0aGUgbmV3IGxvY2tpbmcgYW5kIHNocmlua2VyIGxvZ2ljLCBJICptdXN0KiBlbnN1cmUgdGhhdCBgQ09ORklHX1BFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPYCBpcyBub3QgZW5hYmxlZC4gSSBzaG91bGQgY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgdG8gc2VlIGlmIGl0IGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gSSYjMzk7bSBnb2luZyB0byBuZWVkIHRvIGtlZXAgdGhpcyBpbiBtaW5kIHdoZW4gY29uZmlndXJpbmcgbXkgZnV6emluZyBlbnZpcm9ubWVudCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTE6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9ODI0PWNvbmZpZyBBUkNIX1dBTlRTX1RIUF9TV0FQXG4tLVxubW0vS2NvbmZpZy04MjYtXG5tbS9LY29uZmlnOjgyNzpjb25maWcgUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9cbm1tL0tjb25maWctODI4LVx0Ym9vbCBcJiMzNDtBbGxvY2F0ZSBhIFBNRCBzaXplZCBmb2xpbyBmb3IgemVyb2luZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxMToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDQwCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyB0aGUgRGVmYXVsdCBCZWhhdmlvciBhbmQgRGVwZW5kZW5jaWVzKioKClJpZ2h0LCBzbywgdGhlcmUmIzM5O3Mgbm8gYGRlZmF1bHQgeWAgaGVyZS4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4gVGhhdCYjMzk7cyBhIGdvb2QgdGhpbmcsIHNpbXBsaWZpZXMgaW5pdGlhbCBzZXR1cC4gIE5vdywgdGhlIGJlYXV0eSBvZiB0aGlzIGlzIHRoYXQgYmVjYXVzZSBpdCYjMzk7cyAqZGlzYWJsZWQqIGJ5IGRlZmF1bHQsIEkgZG9uJiMzOTt0IG5lZWQgdG8gZ28gb3V0IG9mIG15IHdheSB0byAqZXhwbGljaXRseSogZGlzYWJsZSBpdCBqdXN0IHRvIHZlcmlmeSB0aGUgYCNlbHNlYCBicmFuY2guIFRoYXQgc2F2ZXMgbWUgYSBzdGVwIGluIHRoZSB0ZXN0aW5nIHByb2Nlc3MsIHdoaWNoIGlzIGFsd2F5cyB3ZWxjb21lLiBIb3dldmVyLCBgbW0vaHVnZV9tZW1vcnkuY2AgaGFzIGEgZGlyZWN0IGRlcGVuZGVuY3kgb24gYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgd2hpY2ggKm11c3QqIGJlIGVuYWJsZWQgZm9yIHRoZSBjb21waWxhdGlvbiB0byB3b3JrLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQmIzM5O3Mgc2V0IGNvcnJlY3RseSBkdXJpbmcgY29tcGlsYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDExOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTg0Mz1jb25maWcgTU1fSURcbi0tXG5tbS9LY29uZmlnLTg0NS1cbm1tL0tjb25maWc6ODQ2Om1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL0tjb25maWctODQ3LVx0Ym9vbCBcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZz04NjQ9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy04NjktXG5tbS9LY29uZmlnOjg3MDpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcbm1tL0tjb25maWctODcxLVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctODc2LVxubW0vS2NvbmZpZzo4Nzc6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTUFEVklTRVxubW0vS2NvbmZpZy04NzgtXHRcdGJvb2wgXCYjMzQ7bWFkdmlzZVwmIzM0O1xuLS1cbm1tL0tjb25maWctODg1LVxubW0vS2NvbmZpZzo4ODY6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTkVWRVJcbm1tL0tjb25maWctODg3LVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz04OTM9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy05MDItXG5tbS9LY29uZmlnOjkwMzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX05FVkVSXG5tbS9LY29uZmlnLTkwNC1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWctOTEyLVxubW0vS2NvbmZpZzo5MTM6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVNcbm1tL0tjb25maWctOTE0LVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctOTIwLVxubW0vS2NvbmZpZzo5MjE6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9XSVRISU5fU0laRVxubW0vS2NvbmZpZy05MjItXHRcdGJvb2wgXCYjMzQ7d2l0aGluX3NpemVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkyOC1cbm1tL0tjb25maWc6OTI5Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQURWSVNFXG5tbS9LY29uZmlnLTkzMC1cdFx0Ym9vbCBcJiMzNDthZHZpc2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTkzOD1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTk0Ny1cbm1tL0tjb25maWc6OTQ4Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfTkVWRVJcbm1tL0tjb25maWctOTQ5LVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NTYtXG5tbS9LY29uZmlnOjk1NzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZU1xubW0vS2NvbmZpZy05NTgtXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NjQtXG5tbS9LY29uZmlnOjk2NTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFXG5tbS9LY29uZmlnLTk2Ni1cdFx0Ym9vbCBcJiMzNDt3aXRoaW5fc2l6ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctOTcyLVxubW0vS2NvbmZpZzo5NzM6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0Vcbm1tL0tjb25maWctOTc0LVx0XHRib29sIFwmIzM0O2FkdmlzZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxMToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQwOAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipFbmFibGluZyBUcmFuc3BhcmVudCBIdWdlcGFnZXMg4oCTIEEgUXVpY2sgQ2hlY2sqKgoKUmlnaHQsIHNvIHRoZSBwbGFuIGlzIHRvIGVuYWJsZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBTZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBzdHJhdGVneSBnaXZlbiB0aGUgYXBwbGljYXRpb24mIzM5O3MgY2hhcmFjdGVyaXN0aWNzIGFuZCBteSB1bmRlcnN0YW5kaW5nIG9mIGl0cyBtZW1vcnkgYWNjZXNzIHBhdHRlcm5zLiBCZWZvcmUgSSBjb21taXQgdG8gdGhpcywgdGhvdWdoLCBJIG5lZWQgdG8gcGVyZm9ybSBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBlbnN1cmUgdGhlIGZlYXR1cmUgaXMgYWN0dWFsbHkgY29tcGlsZWQgaW50byB0aGUga2VybmVsIGlmIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZGVmaW5lZC4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgYG1tL2h1Z2VfbWVtb3J5LmNgIGlzIGNvbXBpbGVkIGNvbmRpdGlvbmFsbHkgb24gdGhhdCB2ZXJ5IGRlZmluZS4gQSBxdWljayBncmVwIG9yIGNvZGUgbmF2aWdhdGlvbiBpbnRvIHRoZSBzb3VyY2UgdHJlZSBzaG91bGQgZG8gdGhlIHRyaWNrLiBObyBwb2ludCBpbiBlbmFibGluZyBhIGZlYXR1cmUgdGhhdCBkb2VzbiYjMzk7dCBhY3R1YWxseSBleGlzdCBpbiB0aGUgYnVpbGQuIEkmIzM5O2xsIG1ha2Ugc3VyZSBpdCBpcyBpbmRlZWQgYnVpbHQtaW4sIGFuZCB0aGVuLCB3ZSBjYW4gcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTE6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZV9tZW1vcnkubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICYjNDM7PSBtaWdyYXRlX2RldmljZS5vXG5tbS9NYWtlZmlsZToxMDE6b2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSAmIzQzOz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cbm1tL01ha2VmaWxlLTEwMi1vYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSAmIzQzOz0gcGFnZV9jb3VudGVyLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTE6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3NTMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA1MzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNzaW5nIEZ1enppbmcgRWZmb3J0cyBvbiBIdWdlIFplcm8gRm9saW8gTWFuYWdlbWVudCoqCgpPa2F5LCBzbyB0aGlzIGNoYW5nZSAqZG9lcyogaW5kZWVkIHJlcXVpcmUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gTm8gcXVlc3Rpb24gYWJvdXQgdGhhdC4gTm93LCB3aGVyZSB0byBmb2N1cyB0aGUgZnV6emVyPyBBaCwgdGhlIHBhdGNoIG1vZGlmaWVzIGBtbS9odWdlX21lbW9yeS5jYCwgc28gdGhhdCYjMzk7cyB0aGUga2V5IGFyZWEuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgYWJvdXQgdGhlIG1hbmFnZW1lbnQgb2YgdGhlIGh1Z2UgemVybyBmb2xpby4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gem9vbSBpbiBvbiB0aGVzZSBmdW5jdGlvbnM6IGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYCwgYG1tX3B1dF9odWdlX3plcm9fZm9saW9gLCBhbmQgdGhlIHNocmlua2VyIGZ1bmN0aW9ucywgYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAsIGFuZCBgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19jb3VudGAuCgpKdXN0IGRvdWJsZS1jaGVja2luZywgYG1tX2dldF9odWdlX3plcm9fZm9saW9gIGlzbiYjMzk7dCBleHBvcnRlZCB0byBtb2R1bGVzLCBidXQgaXQmIzM5O3MgZ2xvYmFsLCBzbyBpdCYjMzk7cyBhY2Nlc3NpYmxlLiBgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuYCBpcyBzdGF0aWMsIGJ1dCBpdHMgYWRkcmVzcyAqaXMqIHRha2VuLCB3aGljaCBtYWtlcyBpdCBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gTGV0IG1lIGp1c3QgY29uZmlybSB0aG9zZSBmdW5jdGlvbiBuYW1lcy4uLiB5ZXA6CgpgYGBjCnN0cnVjdCBmb2xpbyAqbW1fZ2V0X2h1Z2VfemVyb19mb2xpbyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKdm9pZCBtbV9wdXRfaHVnZV96ZXJvX2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQpzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLAoJCQkJCQkgIHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpCnN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluaywKCQkJCQkJIHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpCmBgYAoKQXJlIHRoZXJlIGFueSBvdGhlciByZWxldmFudCBmdW5jdGlvbnMsIGxldCBtZSBqdXN0IGNoZWNrLi4uIFllcCwgdGhlcmUgYXJlIGBhbGxvY19odWdlX3plcm9fZm9saW9gIGFuZCBgZ2V0X2h1Z2VfemVyb19mb2xpb2AuIEkgc2hvdWxkIGRlZmluaXRlbHkgYWRkIHRob3NlIHRvIHRoZSBsaXN0IGFzIHdlbGwuCgpBbHJpZ2h0LCB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGlzIGlzIHRoYXQgdGhpcyBwYXRjaCByZWZhY3RvcnMgdGhlIGFsbG9jYXRpb24gYW5kIG1hbmFnZW1lbnQgb2YgaHVnZSB6ZXJvIGZvbGlvcyB3aXRoaW4gVEhQLiBUaGVyZSYjMzk7cyBhIHNwaW5sb2NrIChgaHVnZV96ZXJvX2xvY2tgKSBub3cgdG8gYWRkcmVzcyByYWNlIGNvbmRpdGlvbnMgdGhhdCBhcHBlYXIgd2hlbiBhbGxvY2F0aW9uIGFuZCBzaHJpbmtpbmcgaXMgZW5hYmxlZCB3aGVuIGBDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9gIGlzIGRpc2FibGVkLiBUaGF0IG1lYW5zIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMuIFBhZ2UgZmF1bHRzIGFuZCBtZW1vcnkgcHJlc3N1cmUgdGhyb3VnaCB0aGUgc2hyaW5rZXIgcGF0aCBhcmUgZ29pbmcgdG8gYmUga2V5IGVudHJ5IHBvaW50cy4gU28gdGhlIGhpZ2ggcHJpb3JpdHkgY29uZmlncyB0byBlbmFibGUgYXJlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuCgpTbywgdGhlIGZvY3VzIHN5bWJvbHMgYXJlOiBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AsIGBtbV9wdXRfaHVnZV96ZXJvX2ZvbGlvYCwgYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAsIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX2NvdW50YCwgYGFsbG9jX2h1Z2VfemVyb19mb2xpb2AsIGFuZCBgZ2V0X2h1Z2VfemVyb19mb2xpb2AuCgpKdXN0IGEgc2FuaXR5IGNoZWNrOiBJIHNob3VsZCBjaGVjayB0byBzZWUgaWYgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBoYXMgYW55IGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTE6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODQ2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NDY6XHRtZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4gODQ3Olx0XHRib29sIFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcJiMzNDtcbiA4NDg6XHRcdGRlcGVuZHMgb24gSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFIFx1MDAyNlx1MDAyNiAhUFJFRU1QVF9SVFxuIDg0OTpcdFx0c2VsZWN0IENPTVBBQ1RJT05cbiA4NTA6XHRcdHNlbGVjdCBYQVJSQVlfTVVMVElcbiA4NTE6XHRcdHNlbGVjdCBNTV9JRFxuIDg1MjpcdFx0aGVscFxuIDg1MzpcdFx0ICBUcmFuc3BhcmVudCBIdWdlcGFnZXMgYWxsb3dzIHRoZSBrZXJuZWwgdG8gdXNlIGh1Z2UgcGFnZXMgYW5kXG4gODU0Olx0XHQgIGh1Z2UgdGxiIHRyYW5zcGFyZW50bHkgdG8gdGhlIGFwcGxpY2F0aW9ucyB3aGVuZXZlciBwb3NzaWJsZS5cbiA4NTU6XHRcdCAgVGhpcyBmZWF0dXJlIGNhbiBpbXByb3ZlIGNvbXB1dGluZyBwZXJmb3JtYW5jZSB0byBjZXJ0YWluXG4gODU2Olx0XHQgIGFwcGxpY2F0aW9ucyBieSBzcGVlZGluZyB1cCBwYWdlIGZhdWx0cyBkdXJpbmcgbWVtb3J5XG4gODU3Olx0XHQgIGFsbG9jYXRpb24sIGJ5IHJlZHVjaW5nIHRoZSBudW1iZXIgb2YgdGxiIG1pc3NlcyBhbmQgYnkgc3BlZWRpbmdcbiA4NTg6XHRcdCAgdXAgdGhlIHBhZ2V0YWJsZSB3YWxraW5nLlxuIDg1OTpcdFxuIDg2MDpcdFx0ICBJZiBtZW1vcnkgY29uc3RyYWluZWQgb24gZW1iZWRkZWQsIHlvdSBtYXkgd2FudCB0byBzYXkgTi5cbiA4NjE6XHRcbiA4NjI6XHRpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuIDg2MzpcdFxuIDg2NDpcdGNob2ljZVxuIDg2NTpcdFx0cHJvbXB0IFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnQgc3lzZnMgZGVmYXVsdHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTE6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyMTAKCQkJCQkJCW91dHB1dDogMTc0CgkJCQkJCQl0aG91Z2h0czogNDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBUSFAgUGF0Y2ggZm9yIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBmb3IgZnV6emluZyBwdXJwb3Nlcy4gVGhlIGxvZ2ljIHNlZW1zIHRvIGhpbmdlIG9uIGBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UgJmFtcDsmYW1wOyAhUFJFRU1QVF9SVGAuIFNpbmNlIGFyY2hpdGVjdHVyZXMgbGlrZSB4ODYgdHlwaWNhbGx5IGRlZmluZSBgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCwganVzdCBsaXN0aW5nIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgc2hvdWxkIGJlIHN1ZmZpY2llbnQuIFRoYXQmIzM5O3Mgb3VyIHByaW1hcnkgZm9jdXMuCgpOZXh0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgc3RhdGUgb2YgYENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT2AuIFRoZSBwYXRjaCBzZWVtcyB0byB0b3VjaCBib3RoIGJyYW5jaGVzLCBidXQgdGhlIG1vcmUgaW52b2x2ZWQgY29kZSwgaW5jbHVkaW5nIHRoZSBzcGlubG9jayBhbmQgc2hyaW5rZXIgbWVjaGFuaXNtcywgaXMgaW4gdGhlIGAjZWxzZWAgYnJhbmNoLCB3aGVuIGBDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9gIGlzIGRpc2FibGVkLiBUaGUgZGVmYXVsdCBpcyB0byBoYXZlIHRoaXMgZGlzYWJsZWQsIHNvIHdlIGRvbiYjMzk7dCBuZWVkIHRvIGV4cGxpY2l0bHkgZGlzYWJsZSBpdCBmb3Igb3VyIGZ1enppbmcgc2V0dXAuIFdlJiMzOTtyZSBzYWZlIHRvIHN0aWNrIHdpdGggZW5hYmxpbmcgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4KCk5vdywgcmVhY2hhYmlsaXR5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYCBpcyBhY3R1YWxseSBjYWxsZWQuIEEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGF0IGl0JiMzOTtzIGFjY2Vzc2VkIHZpYSBgZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2VgLCBgY29weV9odWdlX3BtZGAsIGFuZCBgZGF4X3BtZF9sb2FkX2hvbGVgLiBZZXMsIGl0JiMzOTtzIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBHb29kLgoKR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIHJhY2UgY29uZGl0aW9ucyBpbiB0aGUgY29udGV4dCBvZiBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgc2hyaW5raW5nLCBlc3BlY2lhbGx5IHdpdGggdGhlIGFkZGVkIHNwaW5sb2NrIHdoZW4gYENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT2AgaXMgZGlzYWJsZWQsIHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBUaGlzIHJlZmFjdG9yaW5nIG9mIGh1Z2UgemVybyBmb2xpbyBtYW5hZ2VtZW50IGluIFRIUCwgd2hpY2ggdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgYW5kIGlzIGV4cG9zZWQgdGhyb3VnaCBwYWdlIGZhdWx0cyBhbmQgbWVtb3J5IHByZXNzdXJlLCBnaXZlcyBtZSBhIHN0cm9uZyBqdXN0aWZpY2F0aW9uIHRvIHNldCAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IHRvIHRydWUuCgpUaGUga2V5IHN5bWJvbHMgdG8gdGFyZ2V0IGluIHRoZSBmdXp6ZXIgYXJlOiBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AsIGBtbV9wdXRfaHVnZV96ZXJvX2ZvbGlvYCwgYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAsIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX2NvdW50YCwgYGFsbG9jX2h1Z2VfemVyb19mb2xpb2AsIGFuZCBgZ2V0X2h1Z2VfemVyb19mb2xpb2AuCgpBbmQgdGhlIGtleSBjb25maWd1cmF0aW9uIHRvIGVuYWJsZSwgZm9yIHRoZSBmdXp6ZXIgdG8gZW5nYWdlIHdpdGggdGhlIG1vZGlmaWVkIGNvZGUsIGlzIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIFRoYXQmIzM5O3MgdGhlIGtleS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTE6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bW1fZ2V0X2h1Z2VfemVyb19mb2xpbyYjMzQ7LAogICAgJiMzNDttbV9wdXRfaHVnZV96ZXJvX2ZvbGlvJiMzNDssCiAgICAmIzM0O3Nocmlua19odWdlX3plcm9fZm9saW9fc2NhbiYjMzQ7LAogICAgJiMzNDtzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX2NvdW50JiMzNDssCiAgICAmIzM0O2FsbG9jX2h1Z2VfemVyb19mb2xpbyYjMzQ7LAogICAgJiMzNDtnZXRfaHVnZV96ZXJvX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYWxsb2NhdGlvbiBhbmQgbWFuYWdlbWVudCBvZiB0aGUgaHVnZSB6ZXJvIGZvbGlvIGluIFRIUCAoVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyksIGludHJvZHVjaW5nIGEgc3BpbmxvY2sgdG8gZml4IHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgYWxsb2NhdGlvbiBhbmQgc2hyaW5raW5nIHdoZW4gQ09ORklHX1BFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPIGlzIGRpc2FibGVkLiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgcGFnZSBmYXVsdHMgYW5kIG1lbW9yeSBwcmVzc3VyZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttbV9nZXRfaHVnZV96ZXJvX2ZvbGlvJiMzNDssCiAgICAmIzM0O21tX3B1dF9odWdlX3plcm9fZm9saW8mIzM0OywKICAgICYjMzQ7c2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuJiMzNDssCiAgICAmIzM0O3Nocmlua19odWdlX3plcm9fZm9saW9fY291bnQmIzM0OywKICAgICYjMzQ7YWxsb2NfaHVnZV96ZXJvX2ZvbGlvJiMzNDssCiAgICAmIzM0O2dldF9odWdlX3plcm9fZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBhbGxvY2F0aW9uIGFuZCBtYW5hZ2VtZW50IG9mIHRoZSBodWdlIHplcm8gZm9saW8gaW4gVEhQIChUcmFuc3BhcmVudCBIdWdlIFBhZ2VzKSwgaW50cm9kdWNpbmcgYSBzcGlubG9jayB0byBmaXggcmFjZSBjb25kaXRpb25zIGR1cmluZyBhbGxvY2F0aW9uIGFuZCBzaHJpbmtpbmcgd2hlbiBDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU8gaXMgZGlzYWJsZWQuIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHZpYSBwYWdlIGZhdWx0cyBhbmQgbWVtb3J5IHByZXNzdXJlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjlUMTE6MjI6MTguNjQ5MDUzNTQ5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQzMTk5MzkxMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvXCIsXG4gICAgXCJtbV9wdXRfaHVnZV96ZXJvX2ZvbGlvXCIsXG4gICAgXCJzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5cIixcbiAgICBcInNocmlua19odWdlX3plcm9fZm9saW9fY291bnRcIixcbiAgICBcImFsbG9jX2h1Z2VfemVyb19mb2xpb1wiLFxuICAgIFwiZ2V0X2h1Z2VfemVyb19mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYWxsb2NhdGlvbiBhbmQgbWFuYWdlbWVudCBvZiB0aGUgaHVnZSB6ZXJvIGZvbGlvIGluIFRIUCAoVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyksIGludHJvZHVjaW5nIGEgc3BpbmxvY2sgdG8gZml4IHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgYWxsb2NhdGlvbiBhbmQgc2hyaW5raW5nIHdoZW4gQ09ORklHX1BFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPIGlzIGRpc2FibGVkLiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgcGFnZSBmYXVsdHMgYW5kIG1lbW9yeSBwcmVzc3VyZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTE6MjI6MTguNjQ5MDYwOTU5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTk0MTA3MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxNDk2M2E1YTY2NDFiYmE2YTRjNDY2Y2IxYWM3ZTg0MWNkNTM1NmI4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDI5IDExOjIyOjE3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXFxuaW5kZXggMDMyNzAyYTQ2MzdiYS4uYWNlZTJkMjhiOWJiYyAxMDA2NDRcXG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXFxuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xcbkBAIC00MSw2ICs0MSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wZ2FsbG9jLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wZ2FsbG9jX3RhZy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFnZXdhbGsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NsZWFudXAuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vdGxiLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJpbnRlcm5hbC5oXFxcIlxcbkBAIC03Nyw5ICs3OCwxNSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkZWZlcnJlZF9zcGxpdF9zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxcbiBcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHNocmlua19jb250cm9sICpzYyk7XFxuIHN0YXRpYyBib29sIHNwbGl0X3VuZGVydXNlZF90aHAgPSB0cnVlO1xcbiBcXG4tc3RhdGljIGF0b21pY190IGh1Z2VfemVyb19yZWZjb3VudDtcXG4rI2RlZmluZSBIVUdFX1pFUk9fVU5TRVRfUEZOICh+MFVMKVxcbiBzdHJ1Y3QgZm9saW8gKmh1Z2VfemVyb19mb2xpbyBfX3JlYWRfbW9zdGx5O1xcbi11bnNpZ25lZCBsb25nIGh1Z2VfemVyb19wZm4gX19yZWFkX21vc3RseSA9IH4wVUw7XFxuK3Vuc2lnbmVkIGxvbmcgaHVnZV96ZXJvX3BmbiBfX3JlYWRfbW9zdGx5ID0gSFVHRV9aRVJPX1VOU0VUX1BGTjtcXG4rI2lmbmRlZiBDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9cXG4rc3RhdGljIGF0b21pY190IGh1Z2VfemVyb19yZWZjb3VudDtcXG4rc3RhdGljIERFRklORV9TUElOTE9DSyhodWdlX3plcm9fbG9jayk7XFxuK3N0YXRpYyBzdHJ1Y3Qgc2hyaW5rZXIgKmh1Z2VfemVyb19mb2xpb19zaHJpbmtlcjtcXG4rI2VuZGlmXFxuK1xcbiB1bnNpZ25lZCBsb25nIGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzIF9fcmVhZF9tb3N0bHk7XFxuIHVuc2lnbmVkIGxvbmcgaHVnZV9hbm9uX29yZGVyc19tYWR2aXNlIF9fcmVhZF9tb3N0bHk7XFxuIHVuc2lnbmVkIGxvbmcgaHVnZV9hbm9uX29yZGVyc19pbmhlcml0IF9fcmVhZF9tb3N0bHk7XFxuQEAgLTIyMSwzMyArMjI4LDc0IEBAIHVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdHJldHVybiBvcmRlcnM7XFxuIH1cXG4gXFxuLXN0YXRpYyBib29sIGdldF9odWdlX3plcm9fZm9saW8odm9pZClcXG4rc3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZV96ZXJvX2ZvbGlvKHZvaWQpXFxuIHtcXG4gXFx0c3RydWN0IGZvbGlvICp6ZXJvX2ZvbGlvO1xcbi1yZXRyeTpcXG4tXFx0aWYgKGxpa2VseShhdG9taWNfaW5jX25vdF96ZXJvKFxcdTAwMjZodWdlX3plcm9fcmVmY291bnQpKSlcXG4tXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbiBcXHR6ZXJvX2ZvbGlvID0gZm9saW9fYWxsb2MoKEdGUF9UUkFOU0hVR0UgfCBfX0dGUF9aRVJPIHwgX19HRlBfWkVST1RBR1MpIFxcdTAwMjZcXG4gXFx0XFx0XFx0XFx0IH5fX0dGUF9NT1ZBQkxFLFxcbiBcXHRcXHRcXHRIUEFHRV9QTURfT1JERVIpO1xcbiBcXHRpZiAoIXplcm9fZm9saW8pIHtcXG4gXFx0XFx0Y291bnRfdm1fZXZlbnQoVEhQX1pFUk9fUEFHRV9BTExPQ19GQUlMRUQpO1xcbi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9XFxuK1xcdGZvbGlvX2NsZWFyX2xhcmdlX3JtYXBwYWJsZSh6ZXJvX2ZvbGlvKTsgLyogRXhwbGljaXRseSBub3Qgcm1hcHBhYmxlLiAqL1xcbitcXHRyZXR1cm4gemVyb19mb2xpbztcXG4rfVxcbitcXG4rI2lmZGVmIENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT1xcbitzdGF0aWMgaW50IF9faW5pdCBodWdlX3plcm9faW5pdCh2b2lkKVxcbit7XFxuK1xcdGh1Z2VfemVyb19mb2xpbyA9IGFsbG9jX2h1Z2VfemVyb19mb2xpbygpO1xcbitcXHRpZiAoIWh1Z2VfemVyb19mb2xpbykge1xcbitcXHRcXHRwcl93YXJuKFxcXCJBbGxvY2F0aW5nIHBlcnNpc3RlbnQgaHVnZSB6ZXJvIGZvbGlvIGZhaWxlZFxcXFxuXFxcIik7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGh1Z2VfemVyb19wZm4gPSBmb2xpb19wZm4oaHVnZV96ZXJvX2ZvbGlvKTtcXG4rXFx0XFx0Y291bnRfdm1fZXZlbnQoVEhQX1pFUk9fUEFHRV9BTExPQyk7XFxuIFxcdH1cXG4tXFx0LyogRW5zdXJlIHplcm8gZm9saW8gd29uJ3QgaGF2ZSBsYXJnZV9ybWFwcGFibGUgZmxhZyBzZXQuICovXFxuLVxcdGZvbGlvX2NsZWFyX2xhcmdlX3JtYXBwYWJsZSh6ZXJvX2ZvbGlvKTtcXG4tXFx0cHJlZW1wdF9kaXNhYmxlKCk7XFxuLVxcdGlmIChjbXB4Y2hnKFxcdTAwMjZodWdlX3plcm9fZm9saW8sIE5VTEwsIHplcm9fZm9saW8pKSB7XFxuLVxcdFxcdHByZWVtcHRfZW5hYmxlKCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBfX2luaXQgaHVnZV96ZXJvX3Nocmlua2VyX2V4aXQodm9pZClcXG4re1xcbit9XFxuK1xcbitzdHJ1Y3QgZm9saW8gKm1tX2dldF9odWdlX3plcm9fZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuK3tcXG4rXFx0cmV0dXJuIGh1Z2VfemVyb19mb2xpbztcXG4rfVxcbitcXG4rdm9pZCBtbV9wdXRfaHVnZV96ZXJvX2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbit7XFxuK31cXG4rI2Vsc2VcXG4rc3RhdGljIGJvb2wgZ2V0X2h1Z2VfemVyb19mb2xpbyh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBmb2xpbyAqemVyb19mb2xpbztcXG4rXFxuK1xcdC8qIFBhaXJlZCB3aXRoIGF0b21pY19zZXRfcmVsZWFzZSgpLiAqL1xcbitcXHRpZiAobGlrZWx5KGF0b21pY19pbmNfbm90X3plcm8oXFx1MDAyNmh1Z2VfemVyb19yZWZjb3VudCkpKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdHplcm9fZm9saW8gPSBhbGxvY19odWdlX3plcm9fZm9saW8oKTtcXG4rXFx0aWYgKHVubGlrZWx5KCF6ZXJvX2ZvbGlvKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0LyogUGFpcmVkIHdpdGggY3JpdGljYWwgc2VjdGlvbiBpbiBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW4oKS4gKi9cXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZodWdlX3plcm9fbG9jayk7XFxuK1xcdGlmIChodWdlX3plcm9fZm9saW8pIHtcXG4rXFx0XFx0LyogU29tZWJvZHkgZWxzZSBhbHJlYWR5IGluc3RhbGxlZCBpdC4gKi9cXG4rXFx0XFx0YXRvbWljX2luYyhcXHUwMDI2aHVnZV96ZXJvX3JlZmNvdW50KTtcXG4rXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmh1Z2VfemVyb19sb2NrKTtcXG4gXFx0XFx0Zm9saW9fcHV0KHplcm9fZm9saW8pO1xcbi1cXHRcXHRnb3RvIHJldHJ5O1xcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0fVxcbitcXHRXUklURV9PTkNFKGh1Z2VfemVyb19mb2xpbywgemVyb19mb2xpbyk7XFxuIFxcdFdSSVRFX09OQ0UoaHVnZV96ZXJvX3BmbiwgZm9saW9fcGZuKHplcm9fZm9saW8pKTtcXG4rXFx0LyogUGFpcmVkIHdpdGggYXRvbWljX2luY19ub3RfemVybygpLiArMSBmb3Igc2hyaW5rZXIgcGluLiAqL1xcbitcXHRhdG9taWNfc2V0X3JlbGVhc2UoXFx1MDAyNmh1Z2VfemVyb19yZWZjb3VudCwgMik7XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZodWdlX3plcm9fbG9jayk7XFxuIFxcbi1cXHQvKiBXZSB0YWtlIGFkZGl0aW9uYWwgcmVmZXJlbmNlIGhlcmUuIEl0IHdpbGwgYmUgcHV0IGJhY2sgYnkgc2hyaW5rZXIgKi9cXG4tXFx0YXRvbWljX3NldChcXHUwMDI2aHVnZV96ZXJvX3JlZmNvdW50LCAyKTtcXG4tXFx0cHJlZW1wdF9lbmFibGUoKTtcXG4gXFx0Y291bnRfdm1fZXZlbnQoVEhQX1pFUk9fUEFHRV9BTExPQyk7XFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuQEAgLTI1OCwxNCArMzA2LDU5IEBAIHN0YXRpYyB2b2lkIHB1dF9odWdlX3plcm9fZm9saW8odm9pZClcXG4gXFx0ICogQ291bnRlciBzaG91bGQgbmV2ZXIgZ28gdG8gemVybyBoZXJlLiBPbmx5IHNocmlua2VyIGNhbiBwdXRcXG4gXFx0ICogbGFzdCByZWZlcmVuY2UuXFxuIFxcdCAqL1xcbi1cXHRCVUdfT04oYXRvbWljX2RlY19hbmRfdGVzdChcXHUwMDI2aHVnZV96ZXJvX3JlZmNvdW50KSk7XFxuK1xcdFdBUk5fT05fT05DRShhdG9taWNfZGVjX2FuZF90ZXN0KFxcdTAwMjZodWdlX3plcm9fcmVmY291bnQpKTtcXG4gfVxcbiBcXG4tc3RydWN0IGZvbGlvICptbV9nZXRfaHVnZV96ZXJvX2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXFxuIHtcXG4tXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPKSlcXG4tXFx0XFx0cmV0dXJuIGh1Z2VfemVyb19mb2xpbztcXG4rXFx0Lyogd2UgY2FuIGZyZWUgemVybyBwYWdlIG9ubHkgaWYgbGFzdCByZWZlcmVuY2UgcmVtYWlucyAqL1xcbitcXHRyZXR1cm4gYXRvbWljX3JlYWQoXFx1MDAyNmh1Z2VfemVyb19yZWZjb3VudCkgPT0gMSA/IEhQQUdFX1BNRF9OUiA6IDA7XFxuK31cXG4rXFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXFxuK3tcXG4rXFx0c3RydWN0IGZvbGlvICp6ZXJvX2ZvbGlvO1xcbitcXG4rXFx0LyogUGFpcmVkIHdpdGggY3JpdGljYWwgc2VjdGlvbiBpbiBnZXRfaHVnZV96ZXJvX2ZvbGlvKCkuICovXFxuK1xcdHNjb3BlZF9ndWFyZChzcGlubG9jaywgXFx1MDAyNmh1Z2VfemVyb19sb2NrKSB7XFxuK1xcdFxcdC8qIFBhaXJlZCB3aXRoIGF0b21pY19pbmNfbm90X3plcm8oKSBpbiBnZXRfaHVnZV96ZXJvX2ZvbGlvKCkuICovXFxuK1xcdFxcdGlmIChhdG9taWNfY21weGNoZyhcXHUwMDI2aHVnZV96ZXJvX3JlZmNvdW50LCAxLCAwKSAhPSAxKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdFxcdHplcm9fZm9saW8gPSBodWdlX3plcm9fZm9saW87XFxuK1xcdFxcdFZNX1dBUk5fT05fT05DRSghaHVnZV96ZXJvX2ZvbGlvKTtcXG4rXFx0XFx0V1JJVEVfT05DRShodWdlX3plcm9fZm9saW8sIE5VTEwpO1xcbitcXHRcXHRXUklURV9PTkNFKGh1Z2VfemVyb19wZm4sIEhVR0VfWkVST19VTlNFVF9QRk4pO1xcbitcXHR9XFxuIFxcbitcXHRmb2xpb19wdXQoemVyb19mb2xpbyk7XFxuK1xcdHJldHVybiBIUEFHRV9QTURfTlI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgX19pbml0IGh1Z2VfemVyb19pbml0KHZvaWQpXFxuK3tcXG4rXFx0aHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyID0gc2hyaW5rZXJfYWxsb2MoMCwgXFxcInRocC16ZXJvXFxcIik7XFxuK1xcdGlmICghaHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyKSB7XFxuK1xcdFxcdHNocmlua2VyX2ZyZWUoZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIpO1xcbitcXHRcXHRsaXN0X2xydV9kZXN0cm95KFxcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUpO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0aHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyLVxcdTAwM2Vjb3VudF9vYmplY3RzID0gc2hyaW5rX2h1Z2VfemVyb19mb2xpb19jb3VudDtcXG4rXFx0aHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyLVxcdTAwM2VzY2FuX29iamVjdHMgPSBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW47XFxuK1xcdHNocmlua2VyX3JlZ2lzdGVyKGh1Z2VfemVyb19mb2xpb19zaHJpbmtlcik7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBfX2luaXQgaHVnZV96ZXJvX3Nocmlua2VyX2V4aXQodm9pZClcXG4re1xcbitcXHRzaHJpbmtlcl9mcmVlKGh1Z2VfemVyb19mb2xpb19zaHJpbmtlcik7XFxuK31cXG4rXFxuK3N0cnVjdCBmb2xpbyAqbW1fZ2V0X2h1Z2VfemVyb19mb2xpbyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4re1xcbiBcXHRpZiAobW1fZmxhZ3NfdGVzdChNTUZfSFVHRV9aRVJPX0ZPTElPLCBtbSkpXFxuIFxcdFxcdHJldHVybiBSRUFEX09OQ0UoaHVnZV96ZXJvX2ZvbGlvKTtcXG4gXFxuQEAgLTI4MCwzNSArMzczLDEwIEBAIHN0cnVjdCBmb2xpbyAqbW1fZ2V0X2h1Z2VfemVyb19mb2xpbyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4gXFxuIHZvaWQgbW1fcHV0X2h1Z2VfemVyb19mb2xpbyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4ge1xcbi1cXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU8pKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbiBcXHRpZiAobW1fZmxhZ3NfdGVzdChNTUZfSFVHRV9aRVJPX0ZPTElPLCBtbSkpXFxuIFxcdFxcdHB1dF9odWdlX3plcm9fZm9saW8oKTtcXG4gfVxcbi1cXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxcbi17XFxuLVxcdC8qIHdlIGNhbiBmcmVlIHplcm8gcGFnZSBvbmx5IGlmIGxhc3QgcmVmZXJlbmNlIHJlbWFpbnMgKi9cXG4tXFx0cmV0dXJuIGF0b21pY19yZWFkKFxcdTAwMjZodWdlX3plcm9fcmVmY291bnQpID09IDEgPyBIUEFHRV9QTURfTlIgOiAwO1xcbi19XFxuLVxcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxcbi17XFxuLVxcdGlmIChhdG9taWNfY21weGNoZyhcXHUwMDI2aHVnZV96ZXJvX3JlZmNvdW50LCAxLCAwKSA9PSAxKSB7XFxuLVxcdFxcdHN0cnVjdCBmb2xpbyAqemVyb19mb2xpbyA9IHhjaGcoXFx1MDAyNmh1Z2VfemVyb19mb2xpbywgTlVMTCk7XFxuLVxcdFxcdEJVR19PTih6ZXJvX2ZvbGlvID09IE5VTEwpO1xcbi1cXHRcXHRXUklURV9PTkNFKGh1Z2VfemVyb19wZm4sIH4wVUwpO1xcbi1cXHRcXHRmb2xpb19wdXQoemVyb19mb2xpbyk7XFxuLVxcdFxcdHJldHVybiBIUEFHRV9QTURfTlI7XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbi1zdGF0aWMgc3RydWN0IHNocmlua2VyICpodWdlX3plcm9fZm9saW9fc2hyaW5rZXI7XFxuKyNlbmRpZiAvKiBDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU8gKi9cXG4gXFxuICNpZmRlZiBDT05GSUdfU1lTRlNcXG4gc3RhdGljIHNzaXplX3QgZW5hYmxlZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbkBAIC05NzIsMzkgKzEwNDAsMTQgQEAgc3RhdGljIGludCBfX2luaXQgdGhwX3Nocmlua2VyX2luaXQodm9pZClcXG4gXFx0ZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXItXFx1MDAzZXNjYW5fb2JqZWN0cyA9IGRlZmVycmVkX3NwbGl0X3NjYW47XFxuIFxcdHNocmlua2VyX3JlZ2lzdGVyKGRlZmVycmVkX3NwbGl0X3Nocmlua2VyKTtcXG4gXFxuLVxcdGlmIChJU19FTkFCTEVEKENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJTykpIHtcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogQnVtcCB0aGUgcmVmZXJlbmNlIG9mIHRoZSBodWdlX3plcm9fZm9saW8gYW5kIGRvIG5vdFxcbi1cXHRcXHQgKiBpbml0aWFsaXplIHRoZSBzaHJpbmtlci5cXG4tXFx0XFx0ICpcXG4tXFx0XFx0ICogaHVnZV96ZXJvX2ZvbGlvIHdpbGwgYWx3YXlzIGJlIE5VTEwgb24gZmFpbHVyZS4gV2UgYXNzdW1lXFxuLVxcdFxcdCAqIHRoYXQgZ2V0X2h1Z2VfemVyb19mb2xpbygpIHdpbGwgbW9zdCBsaWtlbHkgbm90IGZhaWwgYXNcXG4tXFx0XFx0ICogdGhwX3Nocmlua2VyX2luaXQoKSBpcyBpbnZva2VkIGVhcmx5IG9uIGR1cmluZyBib290Llxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0aWYgKCFnZXRfaHVnZV96ZXJvX2ZvbGlvKCkpXFxuLVxcdFxcdFxcdHByX3dhcm4oXFxcIkFsbG9jYXRpbmcgcGVyc2lzdGVudCBodWdlIHplcm8gZm9saW8gZmFpbGVkXFxcXG5cXFwiKTtcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcdH1cXG4tXFxuLVxcdGh1Z2VfemVyb19mb2xpb19zaHJpbmtlciA9IHNocmlua2VyX2FsbG9jKDAsIFxcXCJ0aHAtemVyb1xcXCIpO1xcbi1cXHRpZiAoIWh1Z2VfemVyb19mb2xpb19zaHJpbmtlcikge1xcbi1cXHRcXHRzaHJpbmtlcl9mcmVlKGRlZmVycmVkX3NwbGl0X3Nocmlua2VyKTtcXG4tXFx0XFx0bGlzdF9scnVfZGVzdHJveShcXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1KTtcXG4tXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLVxcdH1cXG4tXFxuLVxcdGh1Z2VfemVyb19mb2xpb19zaHJpbmtlci1cXHUwMDNlY291bnRfb2JqZWN0cyA9IHNocmlua19odWdlX3plcm9fZm9saW9fY291bnQ7XFxuLVxcdGh1Z2VfemVyb19mb2xpb19zaHJpbmtlci1cXHUwMDNlc2Nhbl9vYmplY3RzID0gc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuO1xcbi1cXHRzaHJpbmtlcl9yZWdpc3RlcihodWdlX3plcm9fZm9saW9fc2hyaW5rZXIpO1xcbi1cXG4tXFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiBodWdlX3plcm9faW5pdCgpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBfX2luaXQgdGhwX3Nocmlua2VyX2V4aXQodm9pZClcXG4ge1xcbi1cXHRzaHJpbmtlcl9mcmVlKGh1Z2VfemVyb19mb2xpb19zaHJpbmtlcik7XFxuIFxcdHNocmlua2VyX2ZyZWUoZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIpO1xcbiBcXHRsaXN0X2xydV9kZXN0cm95KFxcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUpO1xcbitcXHRodWdlX3plcm9fc2hyaW5rZXJfZXhpdCgpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IF9faW5pdCBodWdlcGFnZV9pbml0KHZvaWQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDExOjIyOjE5LjI2OTU2MjEyNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjYzNjk5NDIxMTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibW1fZ2V0X2h1Z2VfemVyb19mb2xpb1wiLFxuICAgIFwibW1fcHV0X2h1Z2VfemVyb19mb2xpb1wiLFxuICAgIFwic2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuXCIsXG4gICAgXCJzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX2NvdW50XCIsXG4gICAgXCJhbGxvY19odWdlX3plcm9fZm9saW9cIixcbiAgICBcImdldF9odWdlX3plcm9fZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGFsbG9jYXRpb24gYW5kIG1hbmFnZW1lbnQgb2YgdGhlIGh1Z2UgemVybyBmb2xpbyBpbiBUSFAgKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMpLCBpbnRyb2R1Y2luZyBhIHNwaW5sb2NrIHRvIGZpeCByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIGFsbG9jYXRpb24gYW5kIHNocmlua2luZyB3aGVuIENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJTyBpcyBkaXNhYmxlZC4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGFuZCBpcyByZWFjaGFibGUgdmlhIHBhZ2UgZmF1bHRzIGFuZCBtZW1vcnkgcHJlc3N1cmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDE0OTYzYTVhNjY0MWJiYTZhNGM0NjZjYjFhYzdlODQxY2Q1MzU2YjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAyOSAxMToyMjoxNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCAwMzI3MDJhNDYzN2JhLi5hY2VlMmQyOGI5YmJjIDEwMDY0NFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xuQEAgLTQxLDYgKzQxLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wZ2FsbG9jLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wZ2FsbG9jX3RhZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZXdhbGsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS90bGIuaFx1MDAzZVxuICNpbmNsdWRlIFwiaW50ZXJuYWwuaFwiXG5AQCAtNzcsOSArNzgsMTUgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGVmZXJyZWRfc3BsaXRfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcbiBcdFx0XHRcdFx0IHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpO1xuIHN0YXRpYyBib29sIHNwbGl0X3VuZGVydXNlZF90aHAgPSB0cnVlO1xuIFxuLXN0YXRpYyBhdG9taWNfdCBodWdlX3plcm9fcmVmY291bnQ7XG4rI2RlZmluZSBIVUdFX1pFUk9fVU5TRVRfUEZOICh+MFVMKVxuIHN0cnVjdCBmb2xpbyAqaHVnZV96ZXJvX2ZvbGlvIF9fcmVhZF9tb3N0bHk7XG4tdW5zaWduZWQgbG9uZyBodWdlX3plcm9fcGZuIF9fcmVhZF9tb3N0bHkgPSB+MFVMO1xuK3Vuc2lnbmVkIGxvbmcgaHVnZV96ZXJvX3BmbiBfX3JlYWRfbW9zdGx5ID0gSFVHRV9aRVJPX1VOU0VUX1BGTjtcbisjaWZuZGVmIENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT1xuK3N0YXRpYyBhdG9taWNfdCBodWdlX3plcm9fcmVmY291bnQ7XG4rc3RhdGljIERFRklORV9TUElOTE9DSyhodWdlX3plcm9fbG9jayk7XG4rc3RhdGljIHN0cnVjdCBzaHJpbmtlciAqaHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyO1xuKyNlbmRpZlxuK1xuIHVuc2lnbmVkIGxvbmcgaHVnZV9hbm9uX29yZGVyc19hbHdheXMgX19yZWFkX21vc3RseTtcbiB1bnNpZ25lZCBsb25nIGh1Z2VfYW5vbl9vcmRlcnNfbWFkdmlzZSBfX3JlYWRfbW9zdGx5O1xuIHVuc2lnbmVkIGxvbmcgaHVnZV9hbm9uX29yZGVyc19pbmhlcml0IF9fcmVhZF9tb3N0bHk7XG5AQCAtMjIxLDMzICsyMjgsNzQgQEAgdW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdHJldHVybiBvcmRlcnM7XG4gfVxuIFxuLXN0YXRpYyBib29sIGdldF9odWdlX3plcm9fZm9saW8odm9pZClcbitzdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19odWdlX3plcm9fZm9saW8odm9pZClcbiB7XG4gXHRzdHJ1Y3QgZm9saW8gKnplcm9fZm9saW87XG4tcmV0cnk6XG4tXHRpZiAobGlrZWx5KGF0b21pY19pbmNfbm90X3plcm8oXHUwMDI2aHVnZV96ZXJvX3JlZmNvdW50KSkpXG4tXHRcdHJldHVybiB0cnVlO1xuIFxuIFx0emVyb19mb2xpbyA9IGZvbGlvX2FsbG9jKChHRlBfVFJBTlNIVUdFIHwgX19HRlBfWkVSTyB8IF9fR0ZQX1pFUk9UQUdTKSBcdTAwMjZcbiBcdFx0XHRcdCB+X19HRlBfTU9WQUJMRSxcbiBcdFx0XHRIUEFHRV9QTURfT1JERVIpO1xuIFx0aWYgKCF6ZXJvX2ZvbGlvKSB7XG4gXHRcdGNvdW50X3ZtX2V2ZW50KFRIUF9aRVJPX1BBR0VfQUxMT0NfRkFJTEVEKTtcbi1cdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcdGZvbGlvX2NsZWFyX2xhcmdlX3JtYXBwYWJsZSh6ZXJvX2ZvbGlvKTsgLyogRXhwbGljaXRseSBub3Qgcm1hcHBhYmxlLiAqL1xuK1x0cmV0dXJuIHplcm9fZm9saW87XG4rfVxuK1xuKyNpZmRlZiBDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9cbitzdGF0aWMgaW50IF9faW5pdCBodWdlX3plcm9faW5pdCh2b2lkKVxuK3tcbitcdGh1Z2VfemVyb19mb2xpbyA9IGFsbG9jX2h1Z2VfemVyb19mb2xpbygpO1xuK1x0aWYgKCFodWdlX3plcm9fZm9saW8pIHtcbitcdFx0cHJfd2FybihcIkFsbG9jYXRpbmcgcGVyc2lzdGVudCBodWdlIHplcm8gZm9saW8gZmFpbGVkXFxuXCIpO1xuK1x0fSBlbHNlIHtcbitcdFx0aHVnZV96ZXJvX3BmbiA9IGZvbGlvX3BmbihodWdlX3plcm9fZm9saW8pO1xuK1x0XHRjb3VudF92bV9ldmVudChUSFBfWkVST19QQUdFX0FMTE9DKTtcbiBcdH1cbi1cdC8qIEVuc3VyZSB6ZXJvIGZvbGlvIHdvbid0IGhhdmUgbGFyZ2Vfcm1hcHBhYmxlIGZsYWcgc2V0LiAqL1xuLVx0Zm9saW9fY2xlYXJfbGFyZ2Vfcm1hcHBhYmxlKHplcm9fZm9saW8pO1xuLVx0cHJlZW1wdF9kaXNhYmxlKCk7XG4tXHRpZiAoY21weGNoZyhcdTAwMjZodWdlX3plcm9fZm9saW8sIE5VTEwsIHplcm9fZm9saW8pKSB7XG4tXHRcdHByZWVtcHRfZW5hYmxlKCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgX19pbml0IGh1Z2VfemVyb19zaHJpbmtlcl9leGl0KHZvaWQpXG4re1xuK31cbitcbitzdHJ1Y3QgZm9saW8gKm1tX2dldF9odWdlX3plcm9fZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4re1xuK1x0cmV0dXJuIGh1Z2VfemVyb19mb2xpbztcbit9XG4rXG4rdm9pZCBtbV9wdXRfaHVnZV96ZXJvX2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuK3tcbit9XG4rI2Vsc2VcbitzdGF0aWMgYm9vbCBnZXRfaHVnZV96ZXJvX2ZvbGlvKHZvaWQpXG4re1xuK1x0c3RydWN0IGZvbGlvICp6ZXJvX2ZvbGlvO1xuK1xuK1x0LyogUGFpcmVkIHdpdGggYXRvbWljX3NldF9yZWxlYXNlKCkuICovXG4rXHRpZiAobGlrZWx5KGF0b21pY19pbmNfbm90X3plcm8oXHUwMDI2aHVnZV96ZXJvX3JlZmNvdW50KSkpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0emVyb19mb2xpbyA9IGFsbG9jX2h1Z2VfemVyb19mb2xpbygpO1xuK1x0aWYgKHVubGlrZWx5KCF6ZXJvX2ZvbGlvKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0LyogUGFpcmVkIHdpdGggY3JpdGljYWwgc2VjdGlvbiBpbiBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW4oKS4gKi9cbitcdHNwaW5fbG9jayhcdTAwMjZodWdlX3plcm9fbG9jayk7XG4rXHRpZiAoaHVnZV96ZXJvX2ZvbGlvKSB7XG4rXHRcdC8qIFNvbWVib2R5IGVsc2UgYWxyZWFkeSBpbnN0YWxsZWQgaXQuICovXG4rXHRcdGF0b21pY19pbmMoXHUwMDI2aHVnZV96ZXJvX3JlZmNvdW50KTtcbitcdFx0c3Bpbl91bmxvY2soXHUwMDI2aHVnZV96ZXJvX2xvY2spO1xuIFx0XHRmb2xpb19wdXQoemVyb19mb2xpbyk7XG4tXHRcdGdvdG8gcmV0cnk7XG4rXHRcdHJldHVybiB0cnVlO1xuIFx0fVxuK1x0V1JJVEVfT05DRShodWdlX3plcm9fZm9saW8sIHplcm9fZm9saW8pO1xuIFx0V1JJVEVfT05DRShodWdlX3plcm9fcGZuLCBmb2xpb19wZm4oemVyb19mb2xpbykpO1xuK1x0LyogUGFpcmVkIHdpdGggYXRvbWljX2luY19ub3RfemVybygpLiArMSBmb3Igc2hyaW5rZXIgcGluLiAqL1xuK1x0YXRvbWljX3NldF9yZWxlYXNlKFx1MDAyNmh1Z2VfemVyb19yZWZjb3VudCwgMik7XG4rXHRzcGluX3VubG9jayhcdTAwMjZodWdlX3plcm9fbG9jayk7XG4gXG4tXHQvKiBXZSB0YWtlIGFkZGl0aW9uYWwgcmVmZXJlbmNlIGhlcmUuIEl0IHdpbGwgYmUgcHV0IGJhY2sgYnkgc2hyaW5rZXIgKi9cbi1cdGF0b21pY19zZXQoXHUwMDI2aHVnZV96ZXJvX3JlZmNvdW50LCAyKTtcbi1cdHByZWVtcHRfZW5hYmxlKCk7XG4gXHRjb3VudF92bV9ldmVudChUSFBfWkVST19QQUdFX0FMTE9DKTtcbiBcdHJldHVybiB0cnVlO1xuIH1cbkBAIC0yNTgsMTQgKzMwNiw1OSBAQCBzdGF0aWMgdm9pZCBwdXRfaHVnZV96ZXJvX2ZvbGlvKHZvaWQpXG4gXHQgKiBDb3VudGVyIHNob3VsZCBuZXZlciBnbyB0byB6ZXJvIGhlcmUuIE9ubHkgc2hyaW5rZXIgY2FuIHB1dFxuIFx0ICogbGFzdCByZWZlcmVuY2UuXG4gXHQgKi9cbi1cdEJVR19PTihhdG9taWNfZGVjX2FuZF90ZXN0KFx1MDAyNmh1Z2VfemVyb19yZWZjb3VudCkpO1xuK1x0V0FSTl9PTl9PTkNFKGF0b21pY19kZWNfYW5kX3Rlc3QoXHUwMDI2aHVnZV96ZXJvX3JlZmNvdW50KSk7XG4gfVxuIFxuLXN0cnVjdCBmb2xpbyAqbW1fZ2V0X2h1Z2VfemVyb19mb2xpbyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxuK1x0XHRcdFx0XHRcdCAgc3RydWN0IHNocmlua19jb250cm9sICpzYylcbiB7XG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU8pKVxuLVx0XHRyZXR1cm4gaHVnZV96ZXJvX2ZvbGlvO1xuK1x0Lyogd2UgY2FuIGZyZWUgemVybyBwYWdlIG9ubHkgaWYgbGFzdCByZWZlcmVuY2UgcmVtYWlucyAqL1xuK1x0cmV0dXJuIGF0b21pY19yZWFkKFx1MDAyNmh1Z2VfemVyb19yZWZjb3VudCkgPT0gMSA/IEhQQUdFX1BNRF9OUiA6IDA7XG4rfVxuK1xuK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcbitcdFx0XHRcdFx0XHQgc3RydWN0IHNocmlua19jb250cm9sICpzYylcbit7XG4rXHRzdHJ1Y3QgZm9saW8gKnplcm9fZm9saW87XG4rXG4rXHQvKiBQYWlyZWQgd2l0aCBjcml0aWNhbCBzZWN0aW9uIGluIGdldF9odWdlX3plcm9fZm9saW8oKS4gKi9cbitcdHNjb3BlZF9ndWFyZChzcGlubG9jaywgXHUwMDI2aHVnZV96ZXJvX2xvY2spIHtcbitcdFx0LyogUGFpcmVkIHdpdGggYXRvbWljX2luY19ub3RfemVybygpIGluIGdldF9odWdlX3plcm9fZm9saW8oKS4gKi9cbitcdFx0aWYgKGF0b21pY19jbXB4Y2hnKFx1MDAyNmh1Z2VfemVyb19yZWZjb3VudCwgMSwgMCkgIT0gMSlcbitcdFx0XHRyZXR1cm4gMDtcbitcbitcdFx0emVyb19mb2xpbyA9IGh1Z2VfemVyb19mb2xpbztcbitcdFx0Vk1fV0FSTl9PTl9PTkNFKCFodWdlX3plcm9fZm9saW8pO1xuK1x0XHRXUklURV9PTkNFKGh1Z2VfemVyb19mb2xpbywgTlVMTCk7XG4rXHRcdFdSSVRFX09OQ0UoaHVnZV96ZXJvX3BmbiwgSFVHRV9aRVJPX1VOU0VUX1BGTik7XG4rXHR9XG4gXG4rXHRmb2xpb19wdXQoemVyb19mb2xpbyk7XG4rXHRyZXR1cm4gSFBBR0VfUE1EX05SO1xuK31cbitcbitzdGF0aWMgaW50IF9faW5pdCBodWdlX3plcm9faW5pdCh2b2lkKVxuK3tcbitcdGh1Z2VfemVyb19mb2xpb19zaHJpbmtlciA9IHNocmlua2VyX2FsbG9jKDAsIFwidGhwLXplcm9cIik7XG4rXHRpZiAoIWh1Z2VfemVyb19mb2xpb19zaHJpbmtlcikge1xuK1x0XHRzaHJpbmtlcl9mcmVlKGRlZmVycmVkX3NwbGl0X3Nocmlua2VyKTtcbitcdFx0bGlzdF9scnVfZGVzdHJveShcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUpO1xuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcbitcdGh1Z2VfemVyb19mb2xpb19zaHJpbmtlci1cdTAwM2Vjb3VudF9vYmplY3RzID0gc2hyaW5rX2h1Z2VfemVyb19mb2xpb19jb3VudDtcbitcdGh1Z2VfemVyb19mb2xpb19zaHJpbmtlci1cdTAwM2VzY2FuX29iamVjdHMgPSBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW47XG4rXHRzaHJpbmtlcl9yZWdpc3RlcihodWdlX3plcm9fZm9saW9fc2hyaW5rZXIpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIF9faW5pdCBodWdlX3plcm9fc2hyaW5rZXJfZXhpdCh2b2lkKVxuK3tcbitcdHNocmlua2VyX2ZyZWUoaHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyKTtcbit9XG4rXG4rc3RydWN0IGZvbGlvICptbV9nZXRfaHVnZV96ZXJvX2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuK3tcbiBcdGlmIChtbV9mbGFnc190ZXN0KE1NRl9IVUdFX1pFUk9fRk9MSU8sIG1tKSlcbiBcdFx0cmV0dXJuIFJFQURfT05DRShodWdlX3plcm9fZm9saW8pO1xuIFxuQEAgLTI4MCwzNSArMzczLDEwIEBAIHN0cnVjdCBmb2xpbyAqbW1fZ2V0X2h1Z2VfemVyb19mb2xpbyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBcbiB2b2lkIG1tX3B1dF9odWdlX3plcm9fZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4ge1xuLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPKSlcbi1cdFx0cmV0dXJuO1xuLVxuIFx0aWYgKG1tX2ZsYWdzX3Rlc3QoTU1GX0hVR0VfWkVST19GT0xJTywgbW0pKVxuIFx0XHRwdXRfaHVnZV96ZXJvX2ZvbGlvKCk7XG4gfVxuLVxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19odWdlX3plcm9fZm9saW9fY291bnQoc3RydWN0IHNocmlua2VyICpzaHJpbmssXG4tXHRcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuLXtcbi1cdC8qIHdlIGNhbiBmcmVlIHplcm8gcGFnZSBvbmx5IGlmIGxhc3QgcmVmZXJlbmNlIHJlbWFpbnMgKi9cbi1cdHJldHVybiBhdG9taWNfcmVhZChcdTAwMjZodWdlX3plcm9fcmVmY291bnQpID09IDEgPyBIUEFHRV9QTURfTlIgOiAwO1xuLX1cbi1cbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssXG4tXHRcdFx0XHRcdFx0IHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXG4te1xuLVx0aWYgKGF0b21pY19jbXB4Y2hnKFx1MDAyNmh1Z2VfemVyb19yZWZjb3VudCwgMSwgMCkgPT0gMSkge1xuLVx0XHRzdHJ1Y3QgZm9saW8gKnplcm9fZm9saW8gPSB4Y2hnKFx1MDAyNmh1Z2VfemVyb19mb2xpbywgTlVMTCk7XG4tXHRcdEJVR19PTih6ZXJvX2ZvbGlvID09IE5VTEwpO1xuLVx0XHRXUklURV9PTkNFKGh1Z2VfemVyb19wZm4sIH4wVUwpO1xuLVx0XHRmb2xpb19wdXQoemVyb19mb2xpbyk7XG4tXHRcdHJldHVybiBIUEFHRV9QTURfTlI7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIHN0cnVjdCBzaHJpbmtlciAqaHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyO1xuKyNlbmRpZiAvKiBDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU8gKi9cbiBcbiAjaWZkZWYgQ09ORklHX1NZU0ZTXG4gc3RhdGljIHNzaXplX3QgZW5hYmxlZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuQEAgLTk3MiwzOSArMTA0MCwxNCBAQCBzdGF0aWMgaW50IF9faW5pdCB0aHBfc2hyaW5rZXJfaW5pdCh2b2lkKVxuIFx0ZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXItXHUwMDNlc2Nhbl9vYmplY3RzID0gZGVmZXJyZWRfc3BsaXRfc2NhbjtcbiBcdHNocmlua2VyX3JlZ2lzdGVyKGRlZmVycmVkX3NwbGl0X3Nocmlua2VyKTtcbiBcbi1cdGlmIChJU19FTkFCTEVEKENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJTykpIHtcbi1cdFx0Lypcbi1cdFx0ICogQnVtcCB0aGUgcmVmZXJlbmNlIG9mIHRoZSBodWdlX3plcm9fZm9saW8gYW5kIGRvIG5vdFxuLVx0XHQgKiBpbml0aWFsaXplIHRoZSBzaHJpbmtlci5cbi1cdFx0ICpcbi1cdFx0ICogaHVnZV96ZXJvX2ZvbGlvIHdpbGwgYWx3YXlzIGJlIE5VTEwgb24gZmFpbHVyZS4gV2UgYXNzdW1lXG4tXHRcdCAqIHRoYXQgZ2V0X2h1Z2VfemVyb19mb2xpbygpIHdpbGwgbW9zdCBsaWtlbHkgbm90IGZhaWwgYXNcbi1cdFx0ICogdGhwX3Nocmlua2VyX2luaXQoKSBpcyBpbnZva2VkIGVhcmx5IG9uIGR1cmluZyBib290LlxuLVx0XHQgKi9cbi1cdFx0aWYgKCFnZXRfaHVnZV96ZXJvX2ZvbGlvKCkpXG4tXHRcdFx0cHJfd2FybihcIkFsbG9jYXRpbmcgcGVyc2lzdGVudCBodWdlIHplcm8gZm9saW8gZmFpbGVkXFxuXCIpO1xuLVx0XHRyZXR1cm4gMDtcbi1cdH1cbi1cbi1cdGh1Z2VfemVyb19mb2xpb19zaHJpbmtlciA9IHNocmlua2VyX2FsbG9jKDAsIFwidGhwLXplcm9cIik7XG4tXHRpZiAoIWh1Z2VfemVyb19mb2xpb19zaHJpbmtlcikge1xuLVx0XHRzaHJpbmtlcl9mcmVlKGRlZmVycmVkX3NwbGl0X3Nocmlua2VyKTtcbi1cdFx0bGlzdF9scnVfZGVzdHJveShcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUpO1xuLVx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdH1cbi1cbi1cdGh1Z2VfemVyb19mb2xpb19zaHJpbmtlci1cdTAwM2Vjb3VudF9vYmplY3RzID0gc2hyaW5rX2h1Z2VfemVyb19mb2xpb19jb3VudDtcbi1cdGh1Z2VfemVyb19mb2xpb19zaHJpbmtlci1cdTAwM2VzY2FuX29iamVjdHMgPSBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW47XG4tXHRzaHJpbmtlcl9yZWdpc3RlcihodWdlX3plcm9fZm9saW9fc2hyaW5rZXIpO1xuLVxuLVx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gaHVnZV96ZXJvX2luaXQoKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19pbml0IHRocF9zaHJpbmtlcl9leGl0KHZvaWQpXG4ge1xuLVx0c2hyaW5rZXJfZnJlZShodWdlX3plcm9fZm9saW9fc2hyaW5rZXIpO1xuIFx0c2hyaW5rZXJfZnJlZShkZWZlcnJlZF9zcGxpdF9zaHJpbmtlcik7XG4gXHRsaXN0X2xydV9kZXN0cm95KFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSk7XG4rXHRodWdlX3plcm9fc2hyaW5rZXJfZXhpdCgpO1xuIH1cbiBcbiBzdGF0aWMgaW50IF9faW5pdCBodWdlcGFnZV9pbml0KHZvaWQpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMToyMjoxOS4yNjk1NjQ0MjVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTgwODU5MjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHVnZSBaZXJvIEZvbGlvIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQncyBkaWdnaW5nIGRlZXAgaW50byBgbW0vaHVnZV9tZW1vcnkuY2AuIEZyb20gdGhlIGNoYW5nZXMsIGl0IGxvb2tzIGxpa2Ugd2UncmUgcmV3b3JraW5nIGhvdyB0aGUgaHVnZSB6ZXJvIGZvbGlvIGlzIGhhbmRsZWQsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gdGhlIGBDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9gIGNvbmZpZyBvcHRpb24uIEl0J3MgdG91Y2hpbmcgc29tZSBmdW5kYW1lbnRhbCBzdHVmZiBpbiBUSFAgbWFuYWdlbWVudCwgd2hpY2ggaXMgYWx3YXlzIGEgY3JpdGljYWwgYXJlYS4gSSBzZWUgbWVudGlvbnMgb2YgYSBgaHVnZV96ZXJvX2xvY2tgIGJlaW5nIGludHJvZHVjZWQsIGFuZCBpdCBhcHBlYXJzIHRoZSBjb3JlIGZ1bmN0aW9ucyBsaWtlIGBnZXRfaHVnZV96ZXJvX2ZvbGlvYCBhbmQgYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAgYXJlIGJlaW5nIHNpZ25pZmljYW50bHkgbW9kaWZpZWQuIEdpdmVuIGl0cyBsb2NhdGlvbiwgdGhpcyBjb2RlIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLCBhbmQgZnVuY3Rpb25hbGx5IHNpZ25pZmljYW50LlxuXG5Ob3csIGxldCdzIGJyZWFrIGRvd24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGlzIHBhdGNoIGhhcyB0b3VjaGVkOlxuXG4qICAgSSBzZWUgbmV3IGZ1bmN0aW9uczogYGFsbG9jX2h1Z2VfemVyb19mb2xpb2AsIGBodWdlX3plcm9faW5pdGAsIGFuZCBgaHVnZV96ZXJvX3Nocmlua2VyX2V4aXRgLiBUaGVzZSBhcmUgbGlrZWx5IHJlbGF0ZWQgdG8gaW5pdGlhbGl6YXRpb24sIGFsbG9jYXRpb24sIGFuZCBjbGVhbnVwIG9mIHRoZXNlIHplcm8gZm9saW9zLlxuKiAgIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlOiBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AsIGBtbV9wdXRfaHVnZV96ZXJvX2ZvbGlvYCwgYGdldF9odWdlX3plcm9fZm9saW9gLCBgcHV0X2h1Z2VfemVyb19mb2xpb2AsIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX2NvdW50YCwgYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAsIGB0aHBfc2hyaW5rZXJfaW5pdGAgYW5kIGB0aHBfc2hyaW5rZXJfZXhpdGAuIENoYW5nZXMgdG8gdGhlIGBtbWAgcHJlZml4ZWQgZnVuY3Rpb25zIHN1Z2dlc3QgdGhhdCB0aGUgcGF0Y2ggbWF5IGJlIGNoYW5naW5nIGhvdyB0aGUgemVybyBmb2xpb3MgYXJlIHJldHJpZXZlZCBhbmQgcmVsZWFzZWQsIGFuZCBob3cgdGhlIHN5c3RlbSBpbnRlcmFjdHMgd2l0aCB0aGVtLiBUaGUgc2hyaW5raW5nIGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZCBpbmRpY2F0ZXMgc29tZSBjaGFuZ2UgdG8gdGhlIHN5c3RlbSdzIG1lbW9yeSByZWNsYW1hdGlvbiB3aGVuIHplcm8gZm9saW9zIGFyZSBpbnZvbHZlZC4gQ2hhbmdlcyB0byB0aGUgYHRocGAgZnVuY3Rpb25zIGFyZSBsaWtlbHkgdG8gaW50ZWdyYXRlIHRoZSBuZXcgZnVuY3Rpb25hbGl0eSBpbnRvIFRIUC5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGludG8gdGhlIEtjb25maWcgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIGBDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9gLiBUaGlzIHdpbGwgYmUga2V5IHRvIGRlY2lwaGVyaW5nIHRoZSBpbnRlbmRlZCBiZWhhdmlvciBvZiB0aGlzIHBhdGNoIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5MTYsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMToyMjoyNy44NTA0Mjc1MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTQzNjYxNjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTgyND1jb25maWcgQVJDSF9XQU5UU19USFBfU1dBUFxcbi0tXFxubW0vS2NvbmZpZy04MjYtXFxubW0vS2NvbmZpZzo4Mjc6Y29uZmlnIFBFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPXFxubW0vS2NvbmZpZy04MjgtXFx0Ym9vbCBcXFwiQWxsb2NhdGUgYSBQTUQgc2l6ZWQgZm9saW8gZm9yIHplcm9pbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDExOjIyOjMwLjc5NDA5ODg3M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNjc4NTQ4ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIERlcGVuZGVuY2llcyBvZiBQRVJTSVNURU5UX0hVR0VfWkVST19GT0xJTyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHdvcmsuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyYWwgaW1wbGljYXRpb25zIGhlcmUuIFRoaXMgYFBFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPYCB0aGluZy4uLiByaWdodCBvZmYgdGhlIGJhdCwgdGhhdCBuYW1lIHN1Z2dlc3RzIHNvbWUga2V5IGFzcGVjdHMuIFwiUGVyc2lzdGVudFwiIHRlbGxzIG1lIGl0J3MgbGlrZWx5IGRlYWxpbmcgd2l0aCBsb25nLXRlcm0gc3RvcmFnZSwgbWF5YmUgZXZlbiBkdXJhYmlsaXR5IGNvbmNlcm5zLiBcIkh1Z2VcIiBpcyBhIHBvaW50ZXIgdG93YXJkcyBsYXJnZSBkYXRhIHZvbHVtZXMg4oCTIHRoaW5rIGJpZyB0YWJsZXMsIGltYWdlcywgb3IgcGVyaGFwcyBleHRlbnNpdmUgZGF0YXNldHMuIEFuZCBcIlplcm9cIiBpbXBsaWVzIHNvbWUgcG90ZW50aWFsIG9wdGltaXphdGlvbiwgcGVyaGFwcyBmb3Igc2l0dWF0aW9ucyB3aGVyZSBkYXRhIGlzLCBieSBkZWZhdWx0LCBlbXB0eSBvciBzcGFyc2UgYW5kIG5lZWRzIHRvIGJlIGluaXRpYWxpemVkLiBcIkZvbGlvXCIgbGlrZWx5IGltcGxpZXMgdGhpcyBpcyBlaXRoZXIgdGhlIG5hbWUgb2YgYSBmaWxlIG9yIGEgY29sbGVjdGlvbiBvZiBmaWxlcy5cblxuU28sIHRoZSBpbW1lZGlhdGUgcXVlc3Rpb25zIEkgaGF2ZSBhcmU6IFdoYXQgc3BlY2lmaWMgdGVjaG5vbG9naWVzIGlzIHRoaXMgYnVpbHQgb24/IFdoYXQgdW5kZXJseWluZyBzdG9yYWdlIG1lY2hhbmlzbXMgYXJlIGludm9sdmVkPyBJcyBpdCB0aWVkIHRvIGEgc3BlY2lmaWMgZGF0YWJhc2Ugc3lzdGVtLCBhIGRpc3RyaWJ1dGVkIGZpbGUgc3lzdGVtLCBvciBhIGN1c3RvbSBpbi1tZW1vcnkgc3RydWN0dXJlPyBJcyBpdCByZWxpYW50IG9uIGEgcGFydGljdWxhciBwcm9ncmFtbWluZyBsYW5ndWFnZSwgbGlicmFyeSwgb3IgZnJhbWV3b3JrP1xuXG5JIGFsc28gbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBcIndoeVwiIGJlaGluZCB0aGlzLiBXaHkgaXMgdGhpcyBwZXJzaXN0ZW50PyBXaGF0J3MgdGhlIGFwcGxpY2F0aW9uIHVzZSBjYXNlIGZvciB0aGlzIHN0cnVjdHVyZT8gSXMgaXQgdXNlZCBmb3IgYXJjaGl2YWwsIGNhY2hpbmcsIHRyYW5zYWN0aW9uYWwgZGF0YSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEtub3dpbmcgdGhlIHB1cnBvc2Ugd2lsbCBpbmZvcm0gbXkgaW52ZXN0aWdhdGlvbiBpbnRvIGl0cyBkZXBlbmRlbmNpZXMuIElzIHRoaXMgdXNlZCBieSBhbiBvdXRzaWRlIHByb2dyYW0sIG9yIGJ5IHRoZSBwcm9ncmFtIHRoYXQgSSBhbSB3b3JraW5nIG9uLiBcblxuSSBzdXBwb3NlIEkgY2FuIGJlZ2luIHRvIHVucGFjayB0aGlzIGJ5IGxvb2tpbmcgYXQgdGhlIGNvZGUgZGlyZWN0bHkuIExldCdzIHNlZSB3aGF0J3MgaW1wb3J0aW5nIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NzgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMToyMjozNS4wNjE5NTU3OTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MjA6XFx0XFxuIDgyMTpcXHRjb25maWcgQVJDSF9XQU5UX0dFTkVSQUxfSFVHRVRMQlxcbiA4MjI6XFx0XFx0Ym9vbFxcbiA4MjM6XFx0XFxuIDgyNDpcXHRjb25maWcgQVJDSF9XQU5UU19USFBfU1dBUFxcbiA4MjU6XFx0XFx0ZGVmX2Jvb2wgblxcbiA4MjY6XFx0XFxuIDgyNzpcXHRjb25maWcgUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9cXG4gODI4OlxcdFxcdGJvb2wgXFxcIkFsbG9jYXRlIGEgUE1EIHNpemVkIGZvbGlvIGZvciB6ZXJvaW5nXFxcIlxcbiA4Mjk6XFx0XFx0ZGVwZW5kcyBvbiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbiA4MzA6XFx0XFx0aGVscFxcbiA4MzE6XFx0XFx0ICBFbmFibGUgdGhpcyBvcHRpb24gdG8gcmVkdWNlIHRoZSBydW50aW1lIHJlZmNvdW50aW5nIG92ZXJoZWFkXFxuIDgzMjpcXHRcXHQgIG9mIHRoZSBodWdlIHplcm8gZm9saW8gYW5kIGV4cGFuZCB0aGUgcGxhY2VzIGluIHRoZSBrZXJuZWxcXG4gODMzOlxcdFxcdCAgdGhhdCBjYW4gdXNlIGh1Z2UgemVybyBmb2xpb3MuIEZvciBpbnN0YW5jZSwgYmxvY2sgSS9PIGJlbmVmaXRzXFxuIDgzNDpcXHRcXHQgIGZyb20gYWNjZXNzIHRvIGxhcmdlIGZvbGlvcyBmb3IgemVyb2luZyBtZW1vcnkuXFxuIDgzNTpcXHRcXG4gODM2OlxcdFxcdCAgV2l0aCB0aGlzIG9wdGlvbiBlbmFibGVkLCB0aGUgaHVnZSB6ZXJvIGZvbGlvIGlzIGFsbG9jYXRlZFxcbiA4Mzc6XFx0XFx0ICBvbmNlIGFuZCBuZXZlciBmcmVlZC4gT25lIGZ1bGwgaHVnZSBwYWdlJ3Mgd29ydGggb2YgbWVtb3J5IHNoYWxsXFxuIDgzODpcXHRcXHQgIGJlIHVzZWQuXFxuIDgzOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTE6MjI6MzUuMDYyMDY1MjI2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzE0NjUxMzkzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgY29uZGl0aW9uYWwgb24gYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgc3BlY2lmaWNhbGx5IHRoZSBgQ09ORklHX1BFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPYCBmbGFnLiBJdOKAmXMgbW9kaWZ5aW5nIHRoZSBiZWhhdmlvciBhcm91bmQgYGdldF9odWdlX3plcm9fZm9saW9gIGFuZCBgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuYCAqb25seSogd2hlbiB0aGlzIHBlcnNpc3RlbnQgemVybyBmb2xpbyBmZWF0dXJlIGlzIGRpc2FibGVkLiBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBkaWZmIGFnYWluLi4uIFllcCwgdGhhdCdzIHJpZ2h0LiBUaGUga2V5IGlzIGluIHRob3NlIGAjaWZuZGVmIENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT2AgYmxvY2tzLlxuXG5Fc3NlbnRpYWxseSwgaWYgdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbiAqaXNuJ3QqIHNldCwgd2UncmUgZGVhbGluZyB3aXRoIGR5bmFtaWMgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIG9mIHRoZSB6ZXJvIGZvbGlvLiBJbiB0aGF0IHNjZW5hcmlvLCBgZ2V0X2h1Z2VfemVyb19mb2xpb2AgdXNlcyBhIHNwaW5sb2NrIChgaHVnZV96ZXJvX2xvY2tgKSB0byBwcm90ZWN0IGFnYWluc3QgcmFjZSBjb25kaXRpb25zLiBJdCBsb29rcyBsaWtlIGl0J3MgdHJ5aW5nIHRvIGluc3RhbGwgdGhlIGZvbGlvIHNhZmVseSwgYXRvbWljYWxseSBpbmNyZW1lbnRpbmcgYSByZWZlcmVuY2UgY291bnQuIFRoZSBjb21tZW50cyBvbiB0aGUgbG9jayBhcmUgdXNlZnVsIGhlcmUuXG5cbklmIGBDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9gICppcyogc2V0LCB0aGVuIHRoZSBmb2xpbyBpcyBpbml0aWFsaXplZCBvbmNlIGFuZCBuZXZlciBmcmVlZCwgYW5kIHdlIGhhdmUgYSBkaWZmZXJlbnQgbWVjaGFuaXNtIGVudGlyZWx5LlxuXG5UaGlzIGlzIGdvb2QuIEZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGlzIGNvZGUgcGF0aCBpcyBkZWZpbml0ZWx5IGEgY2FuZGlkYXRlIGZvciB0aG9yb3VnaCB0ZXN0aW5nLiBUaGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHNwaW5sb2NrIGFuZCB0aGUgYXRvbWljIG9wZXJhdGlvbnMgYXJlIHRoZSByZWQgZmxhZ3MuIEknZCB3YW50IHRvIGZvY3VzIGZ1enppbmcgYXJvdW5kIHRoZXNlIHN5bWJvbHM6IGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYCwgYG1tX3B1dF9odWdlX3plcm9fZm9saW9gLCBgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuYCwgYW5kIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX2NvdW50YC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AgaXMgZXhwb3J0ZWQgb3Igb3RoZXJ3aXNlIHJlYWNoYWJsZSBieSBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDc5LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTA5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTE6MjI6NDIuMjA4NTgyNjEzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NTUwNDU4MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW1fZ2V0X2h1Z2VfemVyb19mb2xpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9kYXguYz0xNDExPXN0YXRpYyB2bV9mYXVsdF90IGRheF9wbWRfbG9hZF9ob2xlKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tLVxcbmZzL2RheC5jLTE0MTgtXFxuZnMvZGF4LmM6MTQxOTpcXHR6ZXJvX2ZvbGlvID0gbW1fZ2V0X2h1Z2VfemVyb19mb2xpbyh2bWYtXFx1MDAzZXZtYS1cXHUwMDNldm1fbW0pO1xcbmZzL2RheC5jLTE0MjAtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD01NDk9c3RhdGljIGlubGluZSBib29sIGlzX2h1Z2VfemVyb19wbWQocG1kX3QgcG1kKVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTUzLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjU1NDpzdHJ1Y3QgZm9saW8gKm1tX2dldF9odWdlX3plcm9fZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTU1NS12b2lkIG1tX3B1dF9odWdlX3plcm9fZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9ODA2PXN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2ZvbGlvX3RvX29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfb3JkZXIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC04MTMtICpcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo4MTQ6ICogVGhpcyBmdW5jdGlvbiBzaGFsbCBiZSB1c2VkIHdoZW4gbW1fZ2V0X2h1Z2VfemVyb19mb2xpbygpIGNhbm5vdCBiZVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTgxNS0gKiB1c2VkIGFzIHRoZXJlIGlzIG5vIGFwcHJvcHJpYXRlIG1tIGxpZmV0aW1lIHRvIHRpZSB0aGUgaHVnZSB6ZXJvIGZvbGlvXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTI1OT1zdGF0aWMgdm9pZCBfX2luaXQgaHVnZV96ZXJvX3Nocmlua2VyX2V4aXQodm9pZClcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjYyLVxcbm1tL2h1Z2VfbWVtb3J5LmM6MjYzOnN0cnVjdCBmb2xpbyAqbW1fZ2V0X2h1Z2VfemVyb19mb2xpbyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5tbS9odWdlX21lbW9yeS5jLTI2NC17XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTM1NT1zdGF0aWMgdm9pZCBfX2luaXQgaHVnZV96ZXJvX3Nocmlua2VyX2V4aXQodm9pZClcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzU5LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MzYwOnN0cnVjdCBmb2xpbyAqbW1fZ2V0X2h1Z2VfemVyb19mb2xpbyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5tbS9odWdlX21lbW9yeS5jLTM2MS17XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTE1MTk9dm1fZmF1bHRfdCBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTU0MS1cXHRcXHRcXHRyZXR1cm4gVk1fRkFVTFRfT09NO1xcbm1tL2h1Z2VfbWVtb3J5LmM6MTU0MjpcXHRcXHR6ZXJvX2ZvbGlvID0gbW1fZ2V0X2h1Z2VfemVyb19mb2xpbyh2bWEtXFx1MDAzZXZtX21tKTtcXG5tbS9odWdlX21lbW9yeS5jLTE1NDMtXFx0XFx0aWYgKHVubGlrZWx5KCF6ZXJvX2ZvbGlvKSkge1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xOTA3PWludCBjb3B5X2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdF9tbSwgc3RydWN0IG1tX3N0cnVjdCAqc3JjX21tLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xOTcwLVxcdFxcdC8qXFxubW0vaHVnZV9tZW1vcnkuYzoxOTcxOlxcdFxcdCAqIG1tX2dldF9odWdlX3plcm9fZm9saW8oKSB3aWxsIG5ldmVyIGFsbG9jYXRlIGEgbmV3XFxubW0vaHVnZV9tZW1vcnkuYy0xOTcyLVxcdFxcdCAqIGZvbGlvIGhlcmUsIHNpbmNlIHdlIGFscmVhZHkgaGF2ZSBhIHplcm8gcGFnZSB0b1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xOTc0LVxcdFxcdCAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6MTk3NTpcXHRcXHRtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvKGRzdF9tbSk7XFxubW0vaHVnZV9tZW1vcnkuYy0xOTc2LVxcdFxcdGdvdG8gb3V0X3plcm9fcGFnZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTE6MjI6NDQuNzYzNjM0OTM1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzkyOTc5OTA5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSHVnZSBaZXJvIEZvbGlvIFNocmlua2luZyBhbmQgQWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBodWdlIHplcm8gZm9saW8gY29kZS4gRmlyc3QsIGl0J3MgY2xlYXIgdGhhdCBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AgaXMgZGVmaW5pdGVseSByZWFjaGFibGUsIGFuZCB0aGF0IGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5gIGlzIGEgc2hyaW5rZXIgY2FsbGJhY2ssIHdoaWNoIG1lYW5zIGl0IHNob3VsZCBiZSB0cmlnZ2VyZWQgYnkgbWVtb3J5IHByZXNzdXJlLiBMZXQncyBtYWtlIHN1cmUgaXQncyBub3QgaW5saW5lOyB5ZXMsIGl0J3Mgc3RhdGljIGluIGBtbS9odWdlX21lbW9yeS5jYCwgYnV0IHNpbmNlIGl0J3MgYSBzaHJpbmtlciBjYWxsYmFjayBhbmQgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciB0byBgaHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyLVx1MDAzZXNjYW5fb2JqZWN0cyA9IHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbjtgIGl0IHdvbid0IGJlIGlubGluZWQuIFRoYXQncyBnb29kLCBhIGZ1enplciBjYW4gcG90ZW50aWFsbHkgZm9jdXMgb24gdGhpcy5cblxuTm93LCBsZXQgbWUgY2hlY2sgdGhlIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb24gYGdldF9odWdlX3plcm9fZm9saW9gLCB3aGljaCBpcyBhbHNvIHN0YXRpYyBhbmQgY2FsbGVkIGJ5IGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYCwgd2hpY2ggaW4gdHVybiBjYWxscyBpdC5cblxuVGhlIGZ1bmN0aW9ucyBJJ20gZm9jdXNpbmcgb24gYXJlOlxuXG4qICAgYG1tX2dldF9odWdlX3plcm9fZm9saW9gXG4qICAgYG1tX3B1dF9odWdlX3plcm9fZm9saW9gXG4qICAgYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmBcbiogICBgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19jb3VudGBcblxuSG9sZCBvbiBhIHNlY29uZC4uLml0IGxvb2tzIGxpa2UgYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAgYW5kIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX2NvdW50YCBhcmUgb25seSBjb21waWxlZCBpZiBgQ09ORklHX1BFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPYCBpcyAqbm90KiBzZXQuIFNvLCBpZiBJIHdhbnQgdG8gdGVzdCB0aGUgbmV3IGxvY2tpbmcgYW5kIHNocmlua2VyIGxvZ2ljLCBJICptdXN0KiBlbnN1cmUgdGhhdCBgQ09ORklHX1BFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPYCBpcyBub3QgZW5hYmxlZC4gSSBzaG91bGQgY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgdG8gc2VlIGlmIGl0IGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gSSdtIGdvaW5nIHRvIG5lZWQgdG8ga2VlcCB0aGlzIGluIG1pbmQgd2hlbiBjb25maWd1cmluZyBteSBmdXp6aW5nIGVudmlyb25tZW50IVxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjUxLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDExOjIyOjUyLjY5MzQzODM1NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUwNDcwNzUxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz04MjQ9Y29uZmlnIEFSQ0hfV0FOVFNfVEhQX1NXQVBcXG4tLVxcbm1tL0tjb25maWctODI2LVxcbm1tL0tjb25maWc6ODI3OmNvbmZpZyBQRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT1xcbm1tL0tjb25maWctODI4LVxcdGJvb2wgXFxcIkFsbG9jYXRlIGEgUE1EIHNpemVkIGZvbGlvIGZvciB6ZXJvaW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMToyMjo1NS4xOTgxNTczNDdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg4MjkzMDE2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi5cblxuKipBbmFseXppbmcgdGhlIERlZmF1bHQgQmVoYXZpb3IgYW5kIERlcGVuZGVuY2llcyoqXG5cblJpZ2h0LCBzbywgdGhlcmUncyBubyBgZGVmYXVsdCB5YCBoZXJlLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgZmVhdHVyZSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LiBUaGF0J3MgYSBnb29kIHRoaW5nLCBzaW1wbGlmaWVzIGluaXRpYWwgc2V0dXAuICBOb3csIHRoZSBiZWF1dHkgb2YgdGhpcyBpcyB0aGF0IGJlY2F1c2UgaXQncyAqZGlzYWJsZWQqIGJ5IGRlZmF1bHQsIEkgZG9uJ3QgbmVlZCB0byBnbyBvdXQgb2YgbXkgd2F5IHRvICpleHBsaWNpdGx5KiBkaXNhYmxlIGl0IGp1c3QgdG8gdmVyaWZ5IHRoZSBgI2Vsc2VgIGJyYW5jaC4gVGhhdCBzYXZlcyBtZSBhIHN0ZXAgaW4gdGhlIHRlc3RpbmcgcHJvY2Vzcywgd2hpY2ggaXMgYWx3YXlzIHdlbGNvbWUuIEhvd2V2ZXIsIGBtbS9odWdlX21lbW9yeS5jYCBoYXMgYSBkaXJlY3QgZGVwZW5kZW5jeSBvbiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCB3aGljaCAqbXVzdCogYmUgZW5hYmxlZCBmb3IgdGhlIGNvbXBpbGF0aW9uIHRvIHdvcmsuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCdzIHNldCBjb3JyZWN0bHkgZHVyaW5nIGNvbXBpbGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDQwLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTE6MjI6NTkuMDgxMDg5ODI5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDM4NzE4NTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTg0Mz1jb25maWcgTU1fSURcXG4tLVxcbm1tL0tjb25maWctODQ1LVxcbm1tL0tjb25maWc6ODQ2Om1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9LY29uZmlnLTg0Ny1cXHRib29sIFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XFxcIlxcbi0tXFxubW0vS2NvbmZpZz04NjQ9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTg2OS1cXG5tbS9LY29uZmlnOjg3MDpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXFxubW0vS2NvbmZpZy04NzEtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04NzYtXFxubW0vS2NvbmZpZzo4Nzc6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0VcXG5tbS9LY29uZmlnLTg3OC1cXHRcXHRib29sIFxcXCJtYWR2aXNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04ODUtXFxubW0vS2NvbmZpZzo4ODY6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXFxubW0vS2NvbmZpZy04ODctXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTg5Mz1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctOTAyLVxcbm1tL0tjb25maWc6OTAzOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX05FVkVSXFxubW0vS2NvbmZpZy05MDQtXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkxMi1cXG5tbS9LY29uZmlnOjkxMzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTkxNC1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkyMC1cXG5tbS9LY29uZmlnOjkyMTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9XSVRISU5fU0laRVxcbm1tL0tjb25maWctOTIyLVxcdFxcdGJvb2wgXFxcIndpdGhpbl9zaXplXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MjgtXFxubW0vS2NvbmZpZzo5Mjk6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQURWSVNFXFxubW0vS2NvbmZpZy05MzAtXFx0XFx0Ym9vbCBcXFwiYWR2aXNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZz05Mzg9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTk0Ny1cXG5tbS9LY29uZmlnOjk0ODpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9ORVZFUlxcbm1tL0tjb25maWctOTQ5LVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NTYtXFxubW0vS2NvbmZpZzo5NTc6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQUxXQVlTXFxubW0vS2NvbmZpZy05NTgtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NjQtXFxubW0vS2NvbmZpZzo5NjU6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9LY29uZmlnLTk2Ni1cXHRcXHRib29sIFxcXCJ3aXRoaW5fc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTcyLVxcbm1tL0tjb25maWc6OTczOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRVxcbm1tL0tjb25maWctOTc0LVxcdFxcdGJvb2wgXFxcImFkdmlzZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTE6MjM6MDEuNTE5ODE1OTMzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NTcyNDc4NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkVuYWJsaW5nIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyDigJMgQSBRdWljayBDaGVjayoqXG5cblJpZ2h0LCBzbyB0aGUgcGxhbiBpcyB0byBlbmFibGUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gU2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgc3RyYXRlZ3kgZ2l2ZW4gdGhlIGFwcGxpY2F0aW9uJ3MgY2hhcmFjdGVyaXN0aWNzIGFuZCBteSB1bmRlcnN0YW5kaW5nIG9mIGl0cyBtZW1vcnkgYWNjZXNzIHBhdHRlcm5zLiBCZWZvcmUgSSBjb21taXQgdG8gdGhpcywgdGhvdWdoLCBJIG5lZWQgdG8gcGVyZm9ybSBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBlbnN1cmUgdGhlIGZlYXR1cmUgaXMgYWN0dWFsbHkgY29tcGlsZWQgaW50byB0aGUga2VybmVsIGlmIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZGVmaW5lZC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgbW0vaHVnZV9tZW1vcnkuY2AgaXMgY29tcGlsZWQgY29uZGl0aW9uYWxseSBvbiB0aGF0IHZlcnkgZGVmaW5lLiBBIHF1aWNrIGdyZXAgb3IgY29kZSBuYXZpZ2F0aW9uIGludG8gdGhlIHNvdXJjZSB0cmVlIHNob3VsZCBkbyB0aGUgdHJpY2suIE5vIHBvaW50IGluIGVuYWJsaW5nIGEgZmVhdHVyZSB0aGF0IGRvZXNuJ3QgYWN0dWFsbHkgZXhpc3QgaW4gdGhlIGJ1aWxkLiBJJ2xsIG1ha2Ugc3VyZSBpdCBpcyBpbmRlZWQgYnVpbHQtaW4sIGFuZCB0aGVuLCB3ZSBjYW4gcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0MDgsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMToyMzowNC45NzcwNjc1ODRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MzYwNDUwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZV9tZW1vcnkub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICs9IG1pZ3JhdGVfZGV2aWNlLm9cXG5tbS9NYWtlZmlsZToxMDE6b2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSArPSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQub1xcbm1tL01ha2VmaWxlLTEwMi1vYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSArPSBwYWdlX2NvdW50ZXIub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMToyMzowNy42MTMxMjAyMDRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODA3NTk1MTc3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c3NpbmcgRnV6emluZyBFZmZvcnRzIG9uIEh1Z2UgWmVybyBGb2xpbyBNYW5hZ2VtZW50KipcblxuT2theSwgc28gdGhpcyBjaGFuZ2UgKmRvZXMqIGluZGVlZCByZXF1aXJlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIE5vIHF1ZXN0aW9uIGFib3V0IHRoYXQuIE5vdywgd2hlcmUgdG8gZm9jdXMgdGhlIGZ1enplcj8gQWgsIHRoZSBwYXRjaCBtb2RpZmllcyBgbW0vaHVnZV9tZW1vcnkuY2AsIHNvIHRoYXQncyB0aGUga2V5IGFyZWEuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgYWJvdXQgdGhlIG1hbmFnZW1lbnQgb2YgdGhlIGh1Z2UgemVybyBmb2xpby4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gem9vbSBpbiBvbiB0aGVzZSBmdW5jdGlvbnM6IGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYCwgYG1tX3B1dF9odWdlX3plcm9fZm9saW9gLCBhbmQgdGhlIHNocmlua2VyIGZ1bmN0aW9ucywgYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAsIGFuZCBgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19jb3VudGAuXG5cbkp1c3QgZG91YmxlLWNoZWNraW5nLCBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AgaXNuJ3QgZXhwb3J0ZWQgdG8gbW9kdWxlcywgYnV0IGl0J3MgZ2xvYmFsLCBzbyBpdCdzIGFjY2Vzc2libGUuIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5gIGlzIHN0YXRpYywgYnV0IGl0cyBhZGRyZXNzICppcyogdGFrZW4sIHdoaWNoIG1ha2VzIGl0IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBMZXQgbWUganVzdCBjb25maXJtIHRob3NlIGZ1bmN0aW9uIG5hbWVzLi4uIHllcDpcblxuYGBgY1xuc3RydWN0IGZvbGlvICptbV9nZXRfaHVnZV96ZXJvX2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxudm9pZCBtbV9wdXRfaHVnZV96ZXJvX2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcblx0XHRcdFx0XHRcdCAgc3RydWN0IHNocmlua19jb250cm9sICpzYylcbnN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcblx0XHRcdFx0XHRcdCBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuYGBgXG5cbkFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsZXZhbnQgZnVuY3Rpb25zLCBsZXQgbWUganVzdCBjaGVjay4uLiBZZXAsIHRoZXJlIGFyZSBgYWxsb2NfaHVnZV96ZXJvX2ZvbGlvYCBhbmQgYGdldF9odWdlX3plcm9fZm9saW9gLiBJIHNob3VsZCBkZWZpbml0ZWx5IGFkZCB0aG9zZSB0byB0aGUgbGlzdCBhcyB3ZWxsLlxuXG5BbHJpZ2h0LCB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGlzIGlzIHRoYXQgdGhpcyBwYXRjaCByZWZhY3RvcnMgdGhlIGFsbG9jYXRpb24gYW5kIG1hbmFnZW1lbnQgb2YgaHVnZSB6ZXJvIGZvbGlvcyB3aXRoaW4gVEhQLiBUaGVyZSdzIGEgc3BpbmxvY2sgKGBodWdlX3plcm9fbG9ja2ApIG5vdyB0byBhZGRyZXNzIHJhY2UgY29uZGl0aW9ucyB0aGF0IGFwcGVhciB3aGVuIGFsbG9jYXRpb24gYW5kIHNocmlua2luZyBpcyBlbmFibGVkIHdoZW4gYENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT2AgaXMgZGlzYWJsZWQuIFRoYXQgbWVhbnMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYy4gUGFnZSBmYXVsdHMgYW5kIG1lbW9yeSBwcmVzc3VyZSB0aHJvdWdoIHRoZSBzaHJpbmtlciBwYXRoIGFyZSBnb2luZyB0byBiZSBrZXkgZW50cnkgcG9pbnRzLiBTbyB0aGUgaGlnaCBwcmlvcml0eSBjb25maWdzIHRvIGVuYWJsZSBhcmUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC5cblxuU28sIHRoZSBmb2N1cyBzeW1ib2xzIGFyZTogYG1tX2dldF9odWdlX3plcm9fZm9saW9gLCBgbW1fcHV0X2h1Z2VfemVyb19mb2xpb2AsIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5gLCBgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19jb3VudGAsIGBhbGxvY19odWdlX3plcm9fZm9saW9gLCBhbmQgYGdldF9odWdlX3plcm9fZm9saW9gLlxuXG5KdXN0IGEgc2FuaXR5IGNoZWNrOiBJIHNob3VsZCBjaGVjayB0byBzZWUgaWYgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBoYXMgYW55IGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3NTMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTE6MjM6MTUuNjg5MDc1NThaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzODY5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg0NixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg0NjpcXHRtZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuIDg0NzpcXHRcXHRib29sIFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XFxcIlxcbiA4NDg6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UgXFx1MDAyNlxcdTAwMjYgIVBSRUVNUFRfUlRcXG4gODQ5OlxcdFxcdHNlbGVjdCBDT01QQUNUSU9OXFxuIDg1MDpcXHRcXHRzZWxlY3QgWEFSUkFZX01VTFRJXFxuIDg1MTpcXHRcXHRzZWxlY3QgTU1fSURcXG4gODUyOlxcdFxcdGhlbHBcXG4gODUzOlxcdFxcdCAgVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIGFsbG93cyB0aGUga2VybmVsIHRvIHVzZSBodWdlIHBhZ2VzIGFuZFxcbiA4NTQ6XFx0XFx0ICBodWdlIHRsYiB0cmFuc3BhcmVudGx5IHRvIHRoZSBhcHBsaWNhdGlvbnMgd2hlbmV2ZXIgcG9zc2libGUuXFxuIDg1NTpcXHRcXHQgIFRoaXMgZmVhdHVyZSBjYW4gaW1wcm92ZSBjb21wdXRpbmcgcGVyZm9ybWFuY2UgdG8gY2VydGFpblxcbiA4NTY6XFx0XFx0ICBhcHBsaWNhdGlvbnMgYnkgc3BlZWRpbmcgdXAgcGFnZSBmYXVsdHMgZHVyaW5nIG1lbW9yeVxcbiA4NTc6XFx0XFx0ICBhbGxvY2F0aW9uLCBieSByZWR1Y2luZyB0aGUgbnVtYmVyIG9mIHRsYiBtaXNzZXMgYW5kIGJ5IHNwZWVkaW5nXFxuIDg1ODpcXHRcXHQgIHVwIHRoZSBwYWdldGFibGUgd2Fsa2luZy5cXG4gODU5OlxcdFxcbiA4NjA6XFx0XFx0ICBJZiBtZW1vcnkgY29uc3RyYWluZWQgb24gZW1iZWRkZWQsIHlvdSBtYXkgd2FudCB0byBzYXkgTi5cXG4gODYxOlxcdFxcbiA4NjI6XFx0aWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4gODYzOlxcdFxcbiA4NjQ6XFx0Y2hvaWNlXFxuIDg2NTpcXHRcXHRwcm9tcHQgXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnQgc3lzZnMgZGVmYXVsdHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDExOjIzOjE1LjY5MDMxODUxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxMzI2OTg4MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFRIUCBQYXRjaCBmb3IgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBmb3IgZnV6emluZyBwdXJwb3Nlcy4gVGhlIGxvZ2ljIHNlZW1zIHRvIGhpbmdlIG9uIGBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UgXHUwMDI2XHUwMDI2ICFQUkVFTVBUX1JUYC4gU2luY2UgYXJjaGl0ZWN0dXJlcyBsaWtlIHg4NiB0eXBpY2FsbHkgZGVmaW5lIGBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBqdXN0IGxpc3RpbmcgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBzaG91bGQgYmUgc3VmZmljaWVudC4gVGhhdCdzIG91ciBwcmltYXJ5IGZvY3VzLlxuXG5OZXh0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgc3RhdGUgb2YgYENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT2AuIFRoZSBwYXRjaCBzZWVtcyB0byB0b3VjaCBib3RoIGJyYW5jaGVzLCBidXQgdGhlIG1vcmUgaW52b2x2ZWQgY29kZSwgaW5jbHVkaW5nIHRoZSBzcGlubG9jayBhbmQgc2hyaW5rZXIgbWVjaGFuaXNtcywgaXMgaW4gdGhlIGAjZWxzZWAgYnJhbmNoLCB3aGVuIGBDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9gIGlzIGRpc2FibGVkLiBUaGUgZGVmYXVsdCBpcyB0byBoYXZlIHRoaXMgZGlzYWJsZWQsIHNvIHdlIGRvbid0IG5lZWQgdG8gZXhwbGljaXRseSBkaXNhYmxlIGl0IGZvciBvdXIgZnV6emluZyBzZXR1cC4gV2UncmUgc2FmZSB0byBzdGljayB3aXRoIGVuYWJsaW5nIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuXG5cbk5vdywgcmVhY2hhYmlsaXR5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYCBpcyBhY3R1YWxseSBjYWxsZWQuIEEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGF0IGl0J3MgYWNjZXNzZWQgdmlhIGBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZWAsIGBjb3B5X2h1Z2VfcG1kYCwgYW5kIGBkYXhfcG1kX2xvYWRfaG9sZWAuIFllcywgaXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gR29vZC5cblxuR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIHJhY2UgY29uZGl0aW9ucyBpbiB0aGUgY29udGV4dCBvZiBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgc2hyaW5raW5nLCBlc3BlY2lhbGx5IHdpdGggdGhlIGFkZGVkIHNwaW5sb2NrIHdoZW4gYENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT2AgaXMgZGlzYWJsZWQsIHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBUaGlzIHJlZmFjdG9yaW5nIG9mIGh1Z2UgemVybyBmb2xpbyBtYW5hZ2VtZW50IGluIFRIUCwgd2hpY2ggdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgYW5kIGlzIGV4cG9zZWQgdGhyb3VnaCBwYWdlIGZhdWx0cyBhbmQgbWVtb3J5IHByZXNzdXJlLCBnaXZlcyBtZSBhIHN0cm9uZyBqdXN0aWZpY2F0aW9uIHRvIHNldCBcIldvcnRoRnV6emluZ1wiIHRvIHRydWUuXG5cblRoZSBrZXkgc3ltYm9scyB0byB0YXJnZXQgaW4gdGhlIGZ1enplciBhcmU6IGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYCwgYG1tX3B1dF9odWdlX3plcm9fZm9saW9gLCBgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuYCwgYHNocmlua19odWdlX3plcm9fZm9saW9fY291bnRgLCBgYWxsb2NfaHVnZV96ZXJvX2ZvbGlvYCwgYW5kIGBnZXRfaHVnZV96ZXJvX2ZvbGlvYC5cblxuQW5kIHRoZSBrZXkgY29uZmlndXJhdGlvbiB0byBlbmFibGUsIGZvciB0aGUgZnV6emVyIHRvIGVuZ2FnZSB3aXRoIHRoZSBtb2RpZmllZCBjb2RlLCBpcyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBUaGF0J3MgdGhlIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMTAsIk91dHB1dFRva2VucyI6MTc0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTE6MjM6MjIuODIzMDIxNjg4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1OTU3MjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1tX2dldF9odWdlX3plcm9fZm9saW9cIixcbiAgICBcIm1tX3B1dF9odWdlX3plcm9fZm9saW9cIixcbiAgICBcInNocmlua19odWdlX3plcm9fZm9saW9fc2NhblwiLFxuICAgIFwic2hyaW5rX2h1Z2VfemVyb19mb2xpb19jb3VudFwiLFxuICAgIFwiYWxsb2NfaHVnZV96ZXJvX2ZvbGlvXCIsXG4gICAgXCJnZXRfaHVnZV96ZXJvX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBhbGxvY2F0aW9uIGFuZCBtYW5hZ2VtZW50IG9mIHRoZSBodWdlIHplcm8gZm9saW8gaW4gVEhQIChUcmFuc3BhcmVudCBIdWdlIFBhZ2VzKSwgaW50cm9kdWNpbmcgYSBzcGlubG9jayB0byBmaXggcmFjZSBjb25kaXRpb25zIGR1cmluZyBhbGxvY2F0aW9uIGFuZCBzaHJpbmtpbmcgd2hlbiBDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU8gaXMgZGlzYWJsZWQuIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHZpYSBwYWdlIGZhdWx0cyBhbmQgbWVtb3J5IHByZXNzdXJlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibW1fZ2V0X2h1Z2VfemVyb19mb2xpb1wiLFxuICAgIFwibW1fcHV0X2h1Z2VfemVyb19mb2xpb1wiLFxuICAgIFwic2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuXCIsXG4gICAgXCJzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX2NvdW50XCIsXG4gICAgXCJhbGxvY19odWdlX3plcm9fZm9saW9cIixcbiAgICBcImdldF9odWdlX3plcm9fZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGFsbG9jYXRpb24gYW5kIG1hbmFnZW1lbnQgb2YgdGhlIGh1Z2UgemVybyBmb2xpbyBpbiBUSFAgKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMpLCBpbnRyb2R1Y2luZyBhIHNwaW5sb2NrIHRvIGZpeCByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIGFsbG9jYXRpb24gYW5kIHNocmlua2luZyB3aGVuIENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJTyBpcyBkaXNhYmxlZC4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGFuZCBpcyByZWFjaGFibGUgdmlhIHBhZ2UgZmF1bHRzIGFuZCBtZW1vcnkgcHJlc3N1cmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowqszbj[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-29 10:58:23 +0000 UTC FinishedAt: 2026-07-29 11:23:24 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "99cea7eb5216ff688a597595e93c123823865674", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "99cea7eb5216ff688a597595e93c123823865674", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE" ], "series_id": "0a421c5f-91d7-49d2-8b3c-196a0745ba3a" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "mm_get_huge_zero_folio", "mm_put_huge_zero_folio", "shrink_huge_zero_folio_scan", "shrink_huge_zero_folio_count", "alloc_huge_zero_folio", "get_huge_zero_folio" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDExOjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bW1fZ2V0X2h1Z2VfemVyb19mb2xpbyYjMzQ7LAogICAgJiMzNDttbV9wdXRfaHVnZV96ZXJvX2ZvbGlvJiMzNDssCiAgICAmIzM0O3Nocmlua19odWdlX3plcm9fZm9saW9fc2NhbiYjMzQ7LAogICAgJiMzNDtzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX2NvdW50JiMzNDssCiAgICAmIzM0O2FsbG9jX2h1Z2VfemVyb19mb2xpbyYjMzQ7LAogICAgJiMzNDtnZXRfaHVnZV96ZXJvX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYWxsb2NhdGlvbiBhbmQgbWFuYWdlbWVudCBvZiB0aGUgaHVnZSB6ZXJvIGZvbGlvIGluIFRIUCAoVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyksIGludHJvZHVjaW5nIGEgc3BpbmxvY2sgdG8gZml4IHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgYWxsb2NhdGlvbiBhbmQgc2hyaW5raW5nIHdoZW4gQ09ORklHX1BFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPIGlzIGRpc2FibGVkLiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgcGFnZSBmYXVsdHMgYW5kIG1lbW9yeSBwcmVzc3VyZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxMToyMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDE0OTYzYTVhNjY0MWJiYTZhNGM0NjZjYjFhYzdlODQxY2Q1MzU2YjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAyOSAxMToyMjoxNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggMDMyNzAyYTQ2MzdiYS4uYWNlZTJkMjhiOWJiYyAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC00MSw2ICYjNDM7NDEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BnYWxsb2MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BnYWxsb2NfdGFnLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdld2Fsay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS90bGIuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O2ludGVybmFsLmhcJiMzNDtcbkBAIC03Nyw5ICYjNDM7NzgsMTUgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGVmZXJyZWRfc3BsaXRfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcbiBcdFx0XHRcdFx0IHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpO1xuIHN0YXRpYyBib29sIHNwbGl0X3VuZGVydXNlZF90aHAgPSB0cnVlO1xuIFxuLXN0YXRpYyBhdG9taWNfdCBodWdlX3plcm9fcmVmY291bnQ7XG4mIzQzOyNkZWZpbmUgSFVHRV9aRVJPX1VOU0VUX1BGTiAofjBVTClcbiBzdHJ1Y3QgZm9saW8gKmh1Z2VfemVyb19mb2xpbyBfX3JlYWRfbW9zdGx5O1xuLXVuc2lnbmVkIGxvbmcgaHVnZV96ZXJvX3BmbiBfX3JlYWRfbW9zdGx5ID0gfjBVTDtcbiYjNDM7dW5zaWduZWQgbG9uZyBodWdlX3plcm9fcGZuIF9fcmVhZF9tb3N0bHkgPSBIVUdFX1pFUk9fVU5TRVRfUEZOO1xuJiM0MzsjaWZuZGVmIENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT1xuJiM0MztzdGF0aWMgYXRvbWljX3QgaHVnZV96ZXJvX3JlZmNvdW50O1xuJiM0MztzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGh1Z2VfemVyb19sb2NrKTtcbiYjNDM7c3RhdGljIHN0cnVjdCBzaHJpbmtlciAqaHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gdW5zaWduZWQgbG9uZyBodWdlX2Fub25fb3JkZXJzX2Fsd2F5cyBfX3JlYWRfbW9zdGx5O1xuIHVuc2lnbmVkIGxvbmcgaHVnZV9hbm9uX29yZGVyc19tYWR2aXNlIF9fcmVhZF9tb3N0bHk7XG4gdW5zaWduZWQgbG9uZyBodWdlX2Fub25fb3JkZXJzX2luaGVyaXQgX19yZWFkX21vc3RseTtcbkBAIC0yMjEsMzMgJiM0MzsyMjgsNzQgQEAgdW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdHJldHVybiBvcmRlcnM7XG4gfVxuIFxuLXN0YXRpYyBib29sIGdldF9odWdlX3plcm9fZm9saW8odm9pZClcbiYjNDM7c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZV96ZXJvX2ZvbGlvKHZvaWQpXG4ge1xuIFx0c3RydWN0IGZvbGlvICp6ZXJvX2ZvbGlvO1xuLXJldHJ5OlxuLVx0aWYgKGxpa2VseShhdG9taWNfaW5jX25vdF96ZXJvKFx1MDAyNmh1Z2VfemVyb19yZWZjb3VudCkpKVxuLVx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdHplcm9fZm9saW8gPSBmb2xpb19hbGxvYygoR0ZQX1RSQU5TSFVHRSB8IF9fR0ZQX1pFUk8gfCBfX0dGUF9aRVJPVEFHUykgXHUwMDI2XG4gXHRcdFx0XHQgfl9fR0ZQX01PVkFCTEUsXG4gXHRcdFx0SFBBR0VfUE1EX09SREVSKTtcbiBcdGlmICghemVyb19mb2xpbykge1xuIFx0XHRjb3VudF92bV9ldmVudChUSFBfWkVST19QQUdFX0FMTE9DX0ZBSUxFRCk7XG4tXHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XHRmb2xpb19jbGVhcl9sYXJnZV9ybWFwcGFibGUoemVyb19mb2xpbyk7IC8qIEV4cGxpY2l0bHkgbm90IHJtYXBwYWJsZS4gKi9cbiYjNDM7XHRyZXR1cm4gemVyb19mb2xpbztcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT1xuJiM0MztzdGF0aWMgaW50IF9faW5pdCBodWdlX3plcm9faW5pdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aHVnZV96ZXJvX2ZvbGlvID0gYWxsb2NfaHVnZV96ZXJvX2ZvbGlvKCk7XG4mIzQzO1x0aWYgKCFodWdlX3plcm9fZm9saW8pIHtcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7QWxsb2NhdGluZyBwZXJzaXN0ZW50IGh1Z2UgemVybyBmb2xpbyBmYWlsZWRcXG5cJiMzNDspO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRodWdlX3plcm9fcGZuID0gZm9saW9fcGZuKGh1Z2VfemVyb19mb2xpbyk7XG4mIzQzO1x0XHRjb3VudF92bV9ldmVudChUSFBfWkVST19QQUdFX0FMTE9DKTtcbiBcdH1cbi1cdC8qIEVuc3VyZSB6ZXJvIGZvbGlvIHdvbiYjMzk7dCBoYXZlIGxhcmdlX3JtYXBwYWJsZSBmbGFnIHNldC4gKi9cbi1cdGZvbGlvX2NsZWFyX2xhcmdlX3JtYXBwYWJsZSh6ZXJvX2ZvbGlvKTtcbi1cdHByZWVtcHRfZGlzYWJsZSgpO1xuLVx0aWYgKGNtcHhjaGcoXHUwMDI2aHVnZV96ZXJvX2ZvbGlvLCBOVUxMLCB6ZXJvX2ZvbGlvKSkge1xuLVx0XHRwcmVlbXB0X2VuYWJsZSgpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBfX2luaXQgaHVnZV96ZXJvX3Nocmlua2VyX2V4aXQodm9pZClcbiYjNDM7e1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdHJ1Y3QgZm9saW8gKm1tX2dldF9odWdlX3plcm9fZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gaHVnZV96ZXJvX2ZvbGlvO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIG1tX3B1dF9odWdlX3plcm9fZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4mIzQzO3tcbiYjNDM7fVxuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgYm9vbCBnZXRfaHVnZV96ZXJvX2ZvbGlvKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZm9saW8gKnplcm9fZm9saW87XG4mIzQzO1xuJiM0MztcdC8qIFBhaXJlZCB3aXRoIGF0b21pY19zZXRfcmVsZWFzZSgpLiAqL1xuJiM0MztcdGlmIChsaWtlbHkoYXRvbWljX2luY19ub3RfemVybyhcdTAwMjZodWdlX3plcm9fcmVmY291bnQpKSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHR6ZXJvX2ZvbGlvID0gYWxsb2NfaHVnZV96ZXJvX2ZvbGlvKCk7XG4mIzQzO1x0aWYgKHVubGlrZWx5KCF6ZXJvX2ZvbGlvKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0LyogUGFpcmVkIHdpdGggY3JpdGljYWwgc2VjdGlvbiBpbiBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW4oKS4gKi9cbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2aHVnZV96ZXJvX2xvY2spO1xuJiM0MztcdGlmIChodWdlX3plcm9fZm9saW8pIHtcbiYjNDM7XHRcdC8qIFNvbWVib2R5IGVsc2UgYWxyZWFkeSBpbnN0YWxsZWQgaXQuICovXG4mIzQzO1x0XHRhdG9taWNfaW5jKFx1MDAyNmh1Z2VfemVyb19yZWZjb3VudCk7XG4mIzQzO1x0XHRzcGluX3VubG9jayhcdTAwMjZodWdlX3plcm9fbG9jayk7XG4gXHRcdGZvbGlvX3B1dCh6ZXJvX2ZvbGlvKTtcbi1cdFx0Z290byByZXRyeTtcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuIFx0fVxuJiM0MztcdFdSSVRFX09OQ0UoaHVnZV96ZXJvX2ZvbGlvLCB6ZXJvX2ZvbGlvKTtcbiBcdFdSSVRFX09OQ0UoaHVnZV96ZXJvX3BmbiwgZm9saW9fcGZuKHplcm9fZm9saW8pKTtcbiYjNDM7XHQvKiBQYWlyZWQgd2l0aCBhdG9taWNfaW5jX25vdF96ZXJvKCkuICYjNDM7MSBmb3Igc2hyaW5rZXIgcGluLiAqL1xuJiM0MztcdGF0b21pY19zZXRfcmVsZWFzZShcdTAwMjZodWdlX3plcm9fcmVmY291bnQsIDIpO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNmh1Z2VfemVyb19sb2NrKTtcbiBcbi1cdC8qIFdlIHRha2UgYWRkaXRpb25hbCByZWZlcmVuY2UgaGVyZS4gSXQgd2lsbCBiZSBwdXQgYmFjayBieSBzaHJpbmtlciAqL1xuLVx0YXRvbWljX3NldChcdTAwMjZodWdlX3plcm9fcmVmY291bnQsIDIpO1xuLVx0cHJlZW1wdF9lbmFibGUoKTtcbiBcdGNvdW50X3ZtX2V2ZW50KFRIUF9aRVJPX1BBR0VfQUxMT0MpO1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuQEAgLTI1OCwxNCAmIzQzOzMwNiw1OSBAQCBzdGF0aWMgdm9pZCBwdXRfaHVnZV96ZXJvX2ZvbGlvKHZvaWQpXG4gXHQgKiBDb3VudGVyIHNob3VsZCBuZXZlciBnbyB0byB6ZXJvIGhlcmUuIE9ubHkgc2hyaW5rZXIgY2FuIHB1dFxuIFx0ICogbGFzdCByZWZlcmVuY2UuXG4gXHQgKi9cbi1cdEJVR19PTihhdG9taWNfZGVjX2FuZF90ZXN0KFx1MDAyNmh1Z2VfemVyb19yZWZjb3VudCkpO1xuJiM0MztcdFdBUk5fT05fT05DRShhdG9taWNfZGVjX2FuZF90ZXN0KFx1MDAyNmh1Z2VfemVyb19yZWZjb3VudCkpO1xuIH1cbiBcbi1zdHJ1Y3QgZm9saW8gKm1tX2dldF9odWdlX3plcm9fZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19odWdlX3plcm9fZm9saW9fY291bnQoc3RydWN0IHNocmlua2VyICpzaHJpbmssXG4mIzQzO1x0XHRcdFx0XHRcdCAgc3RydWN0IHNocmlua19jb250cm9sICpzYylcbiB7XG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU8pKVxuLVx0XHRyZXR1cm4gaHVnZV96ZXJvX2ZvbGlvO1xuJiM0MztcdC8qIHdlIGNhbiBmcmVlIHplcm8gcGFnZSBvbmx5IGlmIGxhc3QgcmVmZXJlbmNlIHJlbWFpbnMgKi9cbiYjNDM7XHRyZXR1cm4gYXRvbWljX3JlYWQoXHUwMDI2aHVnZV96ZXJvX3JlZmNvdW50KSA9PSAxID8gSFBBR0VfUE1EX05SIDogMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxuJiM0MztcdFx0XHRcdFx0XHQgc3RydWN0IHNocmlua19jb250cm9sICpzYylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBmb2xpbyAqemVyb19mb2xpbztcbiYjNDM7XG4mIzQzO1x0LyogUGFpcmVkIHdpdGggY3JpdGljYWwgc2VjdGlvbiBpbiBnZXRfaHVnZV96ZXJvX2ZvbGlvKCkuICovXG4mIzQzO1x0c2NvcGVkX2d1YXJkKHNwaW5sb2NrLCBcdTAwMjZodWdlX3plcm9fbG9jaykge1xuJiM0MztcdFx0LyogUGFpcmVkIHdpdGggYXRvbWljX2luY19ub3RfemVybygpIGluIGdldF9odWdlX3plcm9fZm9saW8oKS4gKi9cbiYjNDM7XHRcdGlmIChhdG9taWNfY21weGNoZyhcdTAwMjZodWdlX3plcm9fcmVmY291bnQsIDEsIDApICE9IDEpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRcdHplcm9fZm9saW8gPSBodWdlX3plcm9fZm9saW87XG4mIzQzO1x0XHRWTV9XQVJOX09OX09OQ0UoIWh1Z2VfemVyb19mb2xpbyk7XG4mIzQzO1x0XHRXUklURV9PTkNFKGh1Z2VfemVyb19mb2xpbywgTlVMTCk7XG4mIzQzO1x0XHRXUklURV9PTkNFKGh1Z2VfemVyb19wZm4sIEhVR0VfWkVST19VTlNFVF9QRk4pO1xuJiM0MztcdH1cbiBcbiYjNDM7XHRmb2xpb19wdXQoemVyb19mb2xpbyk7XG4mIzQzO1x0cmV0dXJuIEhQQUdFX1BNRF9OUjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX2luaXQgaHVnZV96ZXJvX2luaXQodm9pZClcbiYjNDM7e1xuJiM0MztcdGh1Z2VfemVyb19mb2xpb19zaHJpbmtlciA9IHNocmlua2VyX2FsbG9jKDAsIFwmIzM0O3RocC16ZXJvXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIWh1Z2VfemVyb19mb2xpb19zaHJpbmtlcikge1xuJiM0MztcdFx0c2hyaW5rZXJfZnJlZShkZWZlcnJlZF9zcGxpdF9zaHJpbmtlcik7XG4mIzQzO1x0XHRsaXN0X2xydV9kZXN0cm95KFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGh1Z2VfemVyb19mb2xpb19zaHJpbmtlci1cdTAwM2Vjb3VudF9vYmplY3RzID0gc2hyaW5rX2h1Z2VfemVyb19mb2xpb19jb3VudDtcbiYjNDM7XHRodWdlX3plcm9fZm9saW9fc2hyaW5rZXItXHUwMDNlc2Nhbl9vYmplY3RzID0gc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuO1xuJiM0MztcdHNocmlua2VyX3JlZ2lzdGVyKGh1Z2VfemVyb19mb2xpb19zaHJpbmtlcik7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIF9faW5pdCBodWdlX3plcm9fc2hyaW5rZXJfZXhpdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c2hyaW5rZXJfZnJlZShodWdlX3plcm9fZm9saW9fc2hyaW5rZXIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdHJ1Y3QgZm9saW8gKm1tX2dldF9odWdlX3plcm9fZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4mIzQzO3tcbiBcdGlmIChtbV9mbGFnc190ZXN0KE1NRl9IVUdFX1pFUk9fRk9MSU8sIG1tKSlcbiBcdFx0cmV0dXJuIFJFQURfT05DRShodWdlX3plcm9fZm9saW8pO1xuIFxuQEAgLTI4MCwzNSAmIzQzOzM3MywxMCBAQCBzdHJ1Y3QgZm9saW8gKm1tX2dldF9odWdlX3plcm9fZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gXG4gdm9pZCBtbV9wdXRfaHVnZV96ZXJvX2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIHtcbi1cdGlmIChJU19FTkFCTEVEKENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJTykpXG4tXHRcdHJldHVybjtcbi1cbiBcdGlmIChtbV9mbGFnc190ZXN0KE1NRl9IVUdFX1pFUk9fRk9MSU8sIG1tKSlcbiBcdFx0cHV0X2h1Z2VfemVyb19mb2xpbygpO1xuIH1cbi1cbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxuLVx0XHRcdFx0XHRcdCAgc3RydWN0IHNocmlua19jb250cm9sICpzYylcbi17XG4tXHQvKiB3ZSBjYW4gZnJlZSB6ZXJvIHBhZ2Ugb25seSBpZiBsYXN0IHJlZmVyZW5jZSByZW1haW5zICovXG4tXHRyZXR1cm4gYXRvbWljX3JlYWQoXHUwMDI2aHVnZV96ZXJvX3JlZmNvdW50KSA9PSAxID8gSFBBR0VfUE1EX05SIDogMDtcbi19XG4tXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxuLVx0XHRcdFx0XHRcdCBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuLXtcbi1cdGlmIChhdG9taWNfY21weGNoZyhcdTAwMjZodWdlX3plcm9fcmVmY291bnQsIDEsIDApID09IDEpIHtcbi1cdFx0c3RydWN0IGZvbGlvICp6ZXJvX2ZvbGlvID0geGNoZyhcdTAwMjZodWdlX3plcm9fZm9saW8sIE5VTEwpO1xuLVx0XHRCVUdfT04oemVyb19mb2xpbyA9PSBOVUxMKTtcbi1cdFx0V1JJVEVfT05DRShodWdlX3plcm9fcGZuLCB+MFVMKTtcbi1cdFx0Zm9saW9fcHV0KHplcm9fZm9saW8pO1xuLVx0XHRyZXR1cm4gSFBBR0VfUE1EX05SO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyBzdHJ1Y3Qgc2hyaW5rZXIgKmh1Z2VfemVyb19mb2xpb19zaHJpbmtlcjtcbiYjNDM7I2VuZGlmIC8qIENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJTyAqL1xuIFxuICNpZmRlZiBDT05GSUdfU1lTRlNcbiBzdGF0aWMgc3NpemVfdCBlbmFibGVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG5AQCAtOTcyLDM5ICYjNDM7MTA0MCwxNCBAQCBzdGF0aWMgaW50IF9faW5pdCB0aHBfc2hyaW5rZXJfaW5pdCh2b2lkKVxuIFx0ZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXItXHUwMDNlc2Nhbl9vYmplY3RzID0gZGVmZXJyZWRfc3BsaXRfc2NhbjtcbiBcdHNocmlua2VyX3JlZ2lzdGVyKGRlZmVycmVkX3NwbGl0X3Nocmlua2VyKTtcbiBcbi1cdGlmIChJU19FTkFCTEVEKENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJTykpIHtcbi1cdFx0Lypcbi1cdFx0ICogQnVtcCB0aGUgcmVmZXJlbmNlIG9mIHRoZSBodWdlX3plcm9fZm9saW8gYW5kIGRvIG5vdFxuLVx0XHQgKiBpbml0aWFsaXplIHRoZSBzaHJpbmtlci5cbi1cdFx0ICpcbi1cdFx0ICogaHVnZV96ZXJvX2ZvbGlvIHdpbGwgYWx3YXlzIGJlIE5VTEwgb24gZmFpbHVyZS4gV2UgYXNzdW1lXG4tXHRcdCAqIHRoYXQgZ2V0X2h1Z2VfemVyb19mb2xpbygpIHdpbGwgbW9zdCBsaWtlbHkgbm90IGZhaWwgYXNcbi1cdFx0ICogdGhwX3Nocmlua2VyX2luaXQoKSBpcyBpbnZva2VkIGVhcmx5IG9uIGR1cmluZyBib290LlxuLVx0XHQgKi9cbi1cdFx0aWYgKCFnZXRfaHVnZV96ZXJvX2ZvbGlvKCkpXG4tXHRcdFx0cHJfd2FybihcJiMzNDtBbGxvY2F0aW5nIHBlcnNpc3RlbnQgaHVnZSB6ZXJvIGZvbGlvIGZhaWxlZFxcblwmIzM0Oyk7XG4tXHRcdHJldHVybiAwO1xuLVx0fVxuLVxuLVx0aHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyID0gc2hyaW5rZXJfYWxsb2MoMCwgXCYjMzQ7dGhwLXplcm9cJiMzNDspO1xuLVx0aWYgKCFodWdlX3plcm9fZm9saW9fc2hyaW5rZXIpIHtcbi1cdFx0c2hyaW5rZXJfZnJlZShkZWZlcnJlZF9zcGxpdF9zaHJpbmtlcik7XG4tXHRcdGxpc3RfbHJ1X2Rlc3Ryb3koXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1KTtcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4tXHR9XG4tXG4tXHRodWdlX3plcm9fZm9saW9fc2hyaW5rZXItXHUwMDNlY291bnRfb2JqZWN0cyA9IHNocmlua19odWdlX3plcm9fZm9saW9fY291bnQ7XG4tXHRodWdlX3plcm9fZm9saW9fc2hyaW5rZXItXHUwMDNlc2Nhbl9vYmplY3RzID0gc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuO1xuLVx0c2hyaW5rZXJfcmVnaXN0ZXIoaHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyKTtcbi1cbi1cdHJldHVybiAwO1xuJiM0MztcdHJldHVybiBodWdlX3plcm9faW5pdCgpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBfX2luaXQgdGhwX3Nocmlua2VyX2V4aXQodm9pZClcbiB7XG4tXHRzaHJpbmtlcl9mcmVlKGh1Z2VfemVyb19mb2xpb19zaHJpbmtlcik7XG4gXHRzaHJpbmtlcl9mcmVlKGRlZmVycmVkX3NwbGl0X3Nocmlua2VyKTtcbiBcdGxpc3RfbHJ1X2Rlc3Ryb3koXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1KTtcbiYjNDM7XHRodWdlX3plcm9fc2hyaW5rZXJfZXhpdCgpO1xuIH1cbiBcbiBzdGF0aWMgaW50IF9faW5pdCBodWdlcGFnZV9pbml0KHZvaWQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTE6MjI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bW1fZ2V0X2h1Z2VfemVyb19mb2xpbyYjMzQ7LAogICAgJiMzNDttbV9wdXRfaHVnZV96ZXJvX2ZvbGlvJiMzNDssCiAgICAmIzM0O3Nocmlua19odWdlX3plcm9fZm9saW9fc2NhbiYjMzQ7LAogICAgJiMzNDtzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX2NvdW50JiMzNDssCiAgICAmIzM0O2FsbG9jX2h1Z2VfemVyb19mb2xpbyYjMzQ7LAogICAgJiMzNDtnZXRfaHVnZV96ZXJvX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYWxsb2NhdGlvbiBhbmQgbWFuYWdlbWVudCBvZiB0aGUgaHVnZSB6ZXJvIGZvbGlvIGluIFRIUCAoVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyksIGludHJvZHVjaW5nIGEgc3BpbmxvY2sgdG8gZml4IHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgYWxsb2NhdGlvbiBhbmQgc2hyaW5raW5nIHdoZW4gQ09ORklHX1BFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPIGlzIGRpc2FibGVkLiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgcGFnZSBmYXVsdHMgYW5kIG1lbW9yeSBwcmVzc3VyZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDE0OTYzYTVhNjY0MWJiYTZhNGM0NjZjYjFhYzdlODQxY2Q1MzU2YjgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAyOSAxMToyMjoxNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IDAzMjcwMmE0NjM3YmEuLmFjZWUyZDI4YjliYmMgMTAwNjQ0Ci0tLSBhL21tL2h1Z2VfbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuYwpAQCAtNDEsNiAmIzQzOzQxLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9wZ2FsbG9jLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGdhbGxvY190YWcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wYWdld2Fsay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiAKICNpbmNsdWRlICZsdDthc20vdGxiLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2ludGVybmFsLmgmIzM0OwpAQCAtNzcsOSAmIzQzOzc4LDE1IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRlZmVycmVkX3NwbGl0X3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssCiAJCQkJCSBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKTsKIHN0YXRpYyBib29sIHNwbGl0X3VuZGVydXNlZF90aHAgPSB0cnVlOwogCi1zdGF0aWMgYXRvbWljX3QgaHVnZV96ZXJvX3JlZmNvdW50OwomIzQzOyNkZWZpbmUgSFVHRV9aRVJPX1VOU0VUX1BGTiAofjBVTCkKIHN0cnVjdCBmb2xpbyAqaHVnZV96ZXJvX2ZvbGlvIF9fcmVhZF9tb3N0bHk7Ci11bnNpZ25lZCBsb25nIGh1Z2VfemVyb19wZm4gX19yZWFkX21vc3RseSA9IH4wVUw7CiYjNDM7dW5zaWduZWQgbG9uZyBodWdlX3plcm9fcGZuIF9fcmVhZF9tb3N0bHkgPSBIVUdFX1pFUk9fVU5TRVRfUEZOOwomIzQzOyNpZm5kZWYgQ09ORklHX1BFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPCiYjNDM7c3RhdGljIGF0b21pY190IGh1Z2VfemVyb19yZWZjb3VudDsKJiM0MztzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGh1Z2VfemVyb19sb2NrKTsKJiM0MztzdGF0aWMgc3RydWN0IHNocmlua2VyICpodWdlX3plcm9fZm9saW9fc2hyaW5rZXI7CiYjNDM7I2VuZGlmCiYjNDM7CiB1bnNpZ25lZCBsb25nIGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzIF9fcmVhZF9tb3N0bHk7CiB1bnNpZ25lZCBsb25nIGh1Z2VfYW5vbl9vcmRlcnNfbWFkdmlzZSBfX3JlYWRfbW9zdGx5OwogdW5zaWduZWQgbG9uZyBodWdlX2Fub25fb3JkZXJzX2luaGVyaXQgX19yZWFkX21vc3RseTsKQEAgLTIyMSwzMyAmIzQzOzIyOCw3NCBAQCB1bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCXJldHVybiBvcmRlcnM7CiB9CiAKLXN0YXRpYyBib29sIGdldF9odWdlX3plcm9fZm9saW8odm9pZCkKJiM0MztzdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19odWdlX3plcm9fZm9saW8odm9pZCkKIHsKIAlzdHJ1Y3QgZm9saW8gKnplcm9fZm9saW87Ci1yZXRyeToKLQlpZiAobGlrZWx5KGF0b21pY19pbmNfbm90X3plcm8oJmFtcDtodWdlX3plcm9fcmVmY291bnQpKSkKLQkJcmV0dXJuIHRydWU7CiAKIAl6ZXJvX2ZvbGlvID0gZm9saW9fYWxsb2MoKEdGUF9UUkFOU0hVR0UgfCBfX0dGUF9aRVJPIHwgX19HRlBfWkVST1RBR1MpICZhbXA7CiAJCQkJIH5fX0dGUF9NT1ZBQkxFLAogCQkJSFBBR0VfUE1EX09SREVSKTsKIAlpZiAoIXplcm9fZm9saW8pIHsKIAkJY291bnRfdm1fZXZlbnQoVEhQX1pFUk9fUEFHRV9BTExPQ19GQUlMRUQpOwotCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwlmb2xpb19jbGVhcl9sYXJnZV9ybWFwcGFibGUoemVyb19mb2xpbyk7IC8qIEV4cGxpY2l0bHkgbm90IHJtYXBwYWJsZS4gKi8KJiM0MzsJcmV0dXJuIHplcm9fZm9saW87CiYjNDM7fQomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU8KJiM0MztzdGF0aWMgaW50IF9faW5pdCBodWdlX3plcm9faW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJaHVnZV96ZXJvX2ZvbGlvID0gYWxsb2NfaHVnZV96ZXJvX2ZvbGlvKCk7CiYjNDM7CWlmICghaHVnZV96ZXJvX2ZvbGlvKSB7CiYjNDM7CQlwcl93YXJuKCYjMzQ7QWxsb2NhdGluZyBwZXJzaXN0ZW50IGh1Z2UgemVybyBmb2xpbyBmYWlsZWRcbiYjMzQ7KTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWh1Z2VfemVyb19wZm4gPSBmb2xpb19wZm4oaHVnZV96ZXJvX2ZvbGlvKTsKJiM0MzsJCWNvdW50X3ZtX2V2ZW50KFRIUF9aRVJPX1BBR0VfQUxMT0MpOwogCX0KLQkvKiBFbnN1cmUgemVybyBmb2xpbyB3b24mIzM5O3QgaGF2ZSBsYXJnZV9ybWFwcGFibGUgZmxhZyBzZXQuICovCi0JZm9saW9fY2xlYXJfbGFyZ2Vfcm1hcHBhYmxlKHplcm9fZm9saW8pOwotCXByZWVtcHRfZGlzYWJsZSgpOwotCWlmIChjbXB4Y2hnKCZhbXA7aHVnZV96ZXJvX2ZvbGlvLCBOVUxMLCB6ZXJvX2ZvbGlvKSkgewotCQlwcmVlbXB0X2VuYWJsZSgpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgX19pbml0IGh1Z2VfemVyb19zaHJpbmtlcl9leGl0KHZvaWQpCiYjNDM7ewomIzQzO30KJiM0MzsKJiM0MztzdHJ1Y3QgZm9saW8gKm1tX2dldF9odWdlX3plcm9fZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pCiYjNDM7ewomIzQzOwlyZXR1cm4gaHVnZV96ZXJvX2ZvbGlvOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIG1tX3B1dF9odWdlX3plcm9fZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pCiYjNDM7ewomIzQzO30KJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBib29sIGdldF9odWdlX3plcm9fZm9saW8odm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBmb2xpbyAqemVyb19mb2xpbzsKJiM0MzsKJiM0MzsJLyogUGFpcmVkIHdpdGggYXRvbWljX3NldF9yZWxlYXNlKCkuICovCiYjNDM7CWlmIChsaWtlbHkoYXRvbWljX2luY19ub3RfemVybygmYW1wO2h1Z2VfemVyb19yZWZjb3VudCkpKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CXplcm9fZm9saW8gPSBhbGxvY19odWdlX3plcm9fZm9saW8oKTsKJiM0MzsJaWYgKHVubGlrZWx5KCF6ZXJvX2ZvbGlvKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJLyogUGFpcmVkIHdpdGggY3JpdGljYWwgc2VjdGlvbiBpbiBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW4oKS4gKi8KJiM0MzsJc3Bpbl9sb2NrKCZhbXA7aHVnZV96ZXJvX2xvY2spOwomIzQzOwlpZiAoaHVnZV96ZXJvX2ZvbGlvKSB7CiYjNDM7CQkvKiBTb21lYm9keSBlbHNlIGFscmVhZHkgaW5zdGFsbGVkIGl0LiAqLwomIzQzOwkJYXRvbWljX2luYygmYW1wO2h1Z2VfemVyb19yZWZjb3VudCk7CiYjNDM7CQlzcGluX3VubG9jaygmYW1wO2h1Z2VfemVyb19sb2NrKTsKIAkJZm9saW9fcHV0KHplcm9fZm9saW8pOwotCQlnb3RvIHJldHJ5OwomIzQzOwkJcmV0dXJuIHRydWU7CiAJfQomIzQzOwlXUklURV9PTkNFKGh1Z2VfemVyb19mb2xpbywgemVyb19mb2xpbyk7CiAJV1JJVEVfT05DRShodWdlX3plcm9fcGZuLCBmb2xpb19wZm4oemVyb19mb2xpbykpOwomIzQzOwkvKiBQYWlyZWQgd2l0aCBhdG9taWNfaW5jX25vdF96ZXJvKCkuICYjNDM7MSBmb3Igc2hyaW5rZXIgcGluLiAqLwomIzQzOwlhdG9taWNfc2V0X3JlbGVhc2UoJmFtcDtodWdlX3plcm9fcmVmY291bnQsIDIpOwomIzQzOwlzcGluX3VubG9jaygmYW1wO2h1Z2VfemVyb19sb2NrKTsKIAotCS8qIFdlIHRha2UgYWRkaXRpb25hbCByZWZlcmVuY2UgaGVyZS4gSXQgd2lsbCBiZSBwdXQgYmFjayBieSBzaHJpbmtlciAqLwotCWF0b21pY19zZXQoJmFtcDtodWdlX3plcm9fcmVmY291bnQsIDIpOwotCXByZWVtcHRfZW5hYmxlKCk7CiAJY291bnRfdm1fZXZlbnQoVEhQX1pFUk9fUEFHRV9BTExPQyk7CiAJcmV0dXJuIHRydWU7CiB9CkBAIC0yNTgsMTQgJiM0MzszMDYsNTkgQEAgc3RhdGljIHZvaWQgcHV0X2h1Z2VfemVyb19mb2xpbyh2b2lkKQogCSAqIENvdW50ZXIgc2hvdWxkIG5ldmVyIGdvIHRvIHplcm8gaGVyZS4gT25seSBzaHJpbmtlciBjYW4gcHV0CiAJICogbGFzdCByZWZlcmVuY2UuCiAJICovCi0JQlVHX09OKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFtcDtodWdlX3plcm9fcmVmY291bnQpKTsKJiM0MzsJV0FSTl9PTl9PTkNFKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFtcDtodWdlX3plcm9fcmVmY291bnQpKTsKIH0KIAotc3RydWN0IGZvbGlvICptbV9nZXRfaHVnZV96ZXJvX2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19odWdlX3plcm9fZm9saW9fY291bnQoc3RydWN0IHNocmlua2VyICpzaHJpbmssCiYjNDM7CQkJCQkJICBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKQogewotCWlmIChJU19FTkFCTEVEKENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJTykpCi0JCXJldHVybiBodWdlX3plcm9fZm9saW87CiYjNDM7CS8qIHdlIGNhbiBmcmVlIHplcm8gcGFnZSBvbmx5IGlmIGxhc3QgcmVmZXJlbmNlIHJlbWFpbnMgKi8KJiM0MzsJcmV0dXJuIGF0b21pY19yZWFkKCZhbXA7aHVnZV96ZXJvX3JlZmNvdW50KSA9PSAxID8gSFBBR0VfUE1EX05SIDogMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLAomIzQzOwkJCQkJCSBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKQomIzQzO3sKJiM0MzsJc3RydWN0IGZvbGlvICp6ZXJvX2ZvbGlvOwomIzQzOwomIzQzOwkvKiBQYWlyZWQgd2l0aCBjcml0aWNhbCBzZWN0aW9uIGluIGdldF9odWdlX3plcm9fZm9saW8oKS4gKi8KJiM0MzsJc2NvcGVkX2d1YXJkKHNwaW5sb2NrLCAmYW1wO2h1Z2VfemVyb19sb2NrKSB7CiYjNDM7CQkvKiBQYWlyZWQgd2l0aCBhdG9taWNfaW5jX25vdF96ZXJvKCkgaW4gZ2V0X2h1Z2VfemVyb19mb2xpbygpLiAqLwomIzQzOwkJaWYgKGF0b21pY19jbXB4Y2hnKCZhbXA7aHVnZV96ZXJvX3JlZmNvdW50LCAxLCAwKSAhPSAxKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwomIzQzOwkJemVyb19mb2xpbyA9IGh1Z2VfemVyb19mb2xpbzsKJiM0MzsJCVZNX1dBUk5fT05fT05DRSghaHVnZV96ZXJvX2ZvbGlvKTsKJiM0MzsJCVdSSVRFX09OQ0UoaHVnZV96ZXJvX2ZvbGlvLCBOVUxMKTsKJiM0MzsJCVdSSVRFX09OQ0UoaHVnZV96ZXJvX3BmbiwgSFVHRV9aRVJPX1VOU0VUX1BGTik7CiYjNDM7CX0KIAomIzQzOwlmb2xpb19wdXQoemVyb19mb2xpbyk7CiYjNDM7CXJldHVybiBIUEFHRV9QTURfTlI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19pbml0IGh1Z2VfemVyb19pbml0KHZvaWQpCiYjNDM7ewomIzQzOwlodWdlX3plcm9fZm9saW9fc2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYygwLCAmIzM0O3RocC16ZXJvJiMzNDspOwomIzQzOwlpZiAoIWh1Z2VfemVyb19mb2xpb19zaHJpbmtlcikgewomIzQzOwkJc2hyaW5rZXJfZnJlZShkZWZlcnJlZF9zcGxpdF9zaHJpbmtlcik7CiYjNDM7CQlsaXN0X2xydV9kZXN0cm95KCZhbXA7ZGVmZXJyZWRfc3BsaXRfbHJ1KTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CWh1Z2VfemVyb19mb2xpb19zaHJpbmtlci0mZ3Q7Y291bnRfb2JqZWN0cyA9IHNocmlua19odWdlX3plcm9fZm9saW9fY291bnQ7CiYjNDM7CWh1Z2VfemVyb19mb2xpb19zaHJpbmtlci0mZ3Q7c2Nhbl9vYmplY3RzID0gc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuOwomIzQzOwlzaHJpbmtlcl9yZWdpc3RlcihodWdlX3plcm9fZm9saW9fc2hyaW5rZXIpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgX19pbml0IGh1Z2VfemVyb19zaHJpbmtlcl9leGl0KHZvaWQpCiYjNDM7ewomIzQzOwlzaHJpbmtlcl9mcmVlKGh1Z2VfemVyb19mb2xpb19zaHJpbmtlcik7CiYjNDM7fQomIzQzOwomIzQzO3N0cnVjdCBmb2xpbyAqbW1fZ2V0X2h1Z2VfemVyb19mb2xpbyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKJiM0Mzt7CiAJaWYgKG1tX2ZsYWdzX3Rlc3QoTU1GX0hVR0VfWkVST19GT0xJTywgbW0pKQogCQlyZXR1cm4gUkVBRF9PTkNFKGh1Z2VfemVyb19mb2xpbyk7CiAKQEAgLTI4MCwzNSAmIzQzOzM3MywxMCBAQCBzdHJ1Y3QgZm9saW8gKm1tX2dldF9odWdlX3plcm9fZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pCiAKIHZvaWQgbW1fcHV0X2h1Z2VfemVyb19mb2xpbyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU8pKQotCQlyZXR1cm47Ci0KIAlpZiAobW1fZmxhZ3NfdGVzdChNTUZfSFVHRV9aRVJPX0ZPTElPLCBtbSkpCiAJCXB1dF9odWdlX3plcm9fZm9saW8oKTsKIH0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluaywKLQkJCQkJCSAgc3RydWN0IHNocmlua19jb250cm9sICpzYykKLXsKLQkvKiB3ZSBjYW4gZnJlZSB6ZXJvIHBhZ2Ugb25seSBpZiBsYXN0IHJlZmVyZW5jZSByZW1haW5zICovCi0JcmV0dXJuIGF0b21pY19yZWFkKCZhbXA7aHVnZV96ZXJvX3JlZmNvdW50KSA9PSAxID8gSFBBR0VfUE1EX05SIDogMDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLAotCQkJCQkJIHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpCi17Ci0JaWYgKGF0b21pY19jbXB4Y2hnKCZhbXA7aHVnZV96ZXJvX3JlZmNvdW50LCAxLCAwKSA9PSAxKSB7Ci0JCXN0cnVjdCBmb2xpbyAqemVyb19mb2xpbyA9IHhjaGcoJmFtcDtodWdlX3plcm9fZm9saW8sIE5VTEwpOwotCQlCVUdfT04oemVyb19mb2xpbyA9PSBOVUxMKTsKLQkJV1JJVEVfT05DRShodWdlX3plcm9fcGZuLCB+MFVMKTsKLQkJZm9saW9fcHV0KHplcm9fZm9saW8pOwotCQlyZXR1cm4gSFBBR0VfUE1EX05SOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHNocmlua2VyICpodWdlX3plcm9fZm9saW9fc2hyaW5rZXI7CiYjNDM7I2VuZGlmIC8qIENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJTyAqLwogCiAjaWZkZWYgQ09ORklHX1NZU0ZTCiBzdGF0aWMgc3NpemVfdCBlbmFibGVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCkBAIC05NzIsMzkgJiM0MzsxMDQwLDE0IEBAIHN0YXRpYyBpbnQgX19pbml0IHRocF9zaHJpbmtlcl9pbml0KHZvaWQpCiAJZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXItJmd0O3NjYW5fb2JqZWN0cyA9IGRlZmVycmVkX3NwbGl0X3NjYW47CiAJc2hyaW5rZXJfcmVnaXN0ZXIoZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIpOwogCi0JaWYgKElTX0VOQUJMRUQoQ09ORklHX1BFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPKSkgewotCQkvKgotCQkgKiBCdW1wIHRoZSByZWZlcmVuY2Ugb2YgdGhlIGh1Z2VfemVyb19mb2xpbyBhbmQgZG8gbm90Ci0JCSAqIGluaXRpYWxpemUgdGhlIHNocmlua2VyLgotCQkgKgotCQkgKiBodWdlX3plcm9fZm9saW8gd2lsbCBhbHdheXMgYmUgTlVMTCBvbiBmYWlsdXJlLiBXZSBhc3N1bWUKLQkJICogdGhhdCBnZXRfaHVnZV96ZXJvX2ZvbGlvKCkgd2lsbCBtb3N0IGxpa2VseSBub3QgZmFpbCBhcwotCQkgKiB0aHBfc2hyaW5rZXJfaW5pdCgpIGlzIGludm9rZWQgZWFybHkgb24gZHVyaW5nIGJvb3QuCi0JCSAqLwotCQlpZiAoIWdldF9odWdlX3plcm9fZm9saW8oKSkKLQkJCXByX3dhcm4oJiMzNDtBbGxvY2F0aW5nIHBlcnNpc3RlbnQgaHVnZSB6ZXJvIGZvbGlvIGZhaWxlZFxuJiMzNDspOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlodWdlX3plcm9fZm9saW9fc2hyaW5rZXIgPSBzaHJpbmtlcl9hbGxvYygwLCAmIzM0O3RocC16ZXJvJiMzNDspOwotCWlmICghaHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyKSB7Ci0JCXNocmlua2VyX2ZyZWUoZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIpOwotCQlsaXN0X2xydV9kZXN0cm95KCZhbXA7ZGVmZXJyZWRfc3BsaXRfbHJ1KTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JaHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyLSZndDtjb3VudF9vYmplY3RzID0gc2hyaW5rX2h1Z2VfemVyb19mb2xpb19jb3VudDsKLQlodWdlX3plcm9fZm9saW9fc2hyaW5rZXItJmd0O3NjYW5fb2JqZWN0cyA9IHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbjsKLQlzaHJpbmtlcl9yZWdpc3RlcihodWdlX3plcm9fZm9saW9fc2hyaW5rZXIpOwotCi0JcmV0dXJuIDA7CiYjNDM7CXJldHVybiBodWdlX3plcm9faW5pdCgpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgdGhwX3Nocmlua2VyX2V4aXQodm9pZCkKIHsKLQlzaHJpbmtlcl9mcmVlKGh1Z2VfemVyb19mb2xpb19zaHJpbmtlcik7CiAJc2hyaW5rZXJfZnJlZShkZWZlcnJlZF9zcGxpdF9zaHJpbmtlcik7CiAJbGlzdF9scnVfZGVzdHJveSgmYW1wO2RlZmVycmVkX3NwbGl0X2xydSk7CiYjNDM7CWh1Z2VfemVyb19zaHJpbmtlcl9leGl0KCk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGh1Z2VwYWdlX2luaXQodm9pZCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTE6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkxNgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDMwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEh1Z2UgWmVybyBGb2xpbyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgZGlnZ2luZyBkZWVwIGludG8gYG1tL2h1Z2VfbWVtb3J5LmNgLiBGcm9tIHRoZSBjaGFuZ2VzLCBpdCBsb29rcyBsaWtlIHdlJiMzOTtyZSByZXdvcmtpbmcgaG93IHRoZSBodWdlIHplcm8gZm9saW8gaXMgaGFuZGxlZCwgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byB0aGUgYENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT2AgY29uZmlnIG9wdGlvbi4gSXQmIzM5O3MgdG91Y2hpbmcgc29tZSBmdW5kYW1lbnRhbCBzdHVmZiBpbiBUSFAgbWFuYWdlbWVudCwgd2hpY2ggaXMgYWx3YXlzIGEgY3JpdGljYWwgYXJlYS4gSSBzZWUgbWVudGlvbnMgb2YgYSBgaHVnZV96ZXJvX2xvY2tgIGJlaW5nIGludHJvZHVjZWQsIGFuZCBpdCBhcHBlYXJzIHRoZSBjb3JlIGZ1bmN0aW9ucyBsaWtlIGBnZXRfaHVnZV96ZXJvX2ZvbGlvYCBhbmQgYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAgYXJlIGJlaW5nIHNpZ25pZmljYW50bHkgbW9kaWZpZWQuIEdpdmVuIGl0cyBsb2NhdGlvbiwgdGhpcyBjb2RlIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLCBhbmQgZnVuY3Rpb25hbGx5IHNpZ25pZmljYW50LgoKTm93LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggaGFzIHRvdWNoZWQ6CgoqICAgSSBzZWUgbmV3IGZ1bmN0aW9uczogYGFsbG9jX2h1Z2VfemVyb19mb2xpb2AsIGBodWdlX3plcm9faW5pdGAsIGFuZCBgaHVnZV96ZXJvX3Nocmlua2VyX2V4aXRgLiBUaGVzZSBhcmUgbGlrZWx5IHJlbGF0ZWQgdG8gaW5pdGlhbGl6YXRpb24sIGFsbG9jYXRpb24sIGFuZCBjbGVhbnVwIG9mIHRoZXNlIHplcm8gZm9saW9zLgoqICAgVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmU6IGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYCwgYG1tX3B1dF9odWdlX3plcm9fZm9saW9gLCBgZ2V0X2h1Z2VfemVyb19mb2xpb2AsIGBwdXRfaHVnZV96ZXJvX2ZvbGlvYCwgYHNocmlua19odWdlX3plcm9fZm9saW9fY291bnRgLCBgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuYCwgYHRocF9zaHJpbmtlcl9pbml0YCBhbmQgYHRocF9zaHJpbmtlcl9leGl0YC4gQ2hhbmdlcyB0byB0aGUgYG1tYCBwcmVmaXhlZCBmdW5jdGlvbnMgc3VnZ2VzdCB0aGF0IHRoZSBwYXRjaCBtYXkgYmUgY2hhbmdpbmcgaG93IHRoZSB6ZXJvIGZvbGlvcyBhcmUgcmV0cmlldmVkIGFuZCByZWxlYXNlZCwgYW5kIGhvdyB0aGUgc3lzdGVtIGludGVyYWN0cyB3aXRoIHRoZW0uIFRoZSBzaHJpbmtpbmcgZnVuY3Rpb25zIGJlaW5nIG1vZGlmaWVkIGluZGljYXRlcyBzb21lIGNoYW5nZSB0byB0aGUgc3lzdGVtJiMzOTtzIG1lbW9yeSByZWNsYW1hdGlvbiB3aGVuIHplcm8gZm9saW9zIGFyZSBpbnZvbHZlZC4gQ2hhbmdlcyB0byB0aGUgYHRocGAgZnVuY3Rpb25zIGFyZSBsaWtlbHkgdG8gaW50ZWdyYXRlIHRoZSBuZXcgZnVuY3Rpb25hbGl0eSBpbnRvIFRIUC4KCk15IG5leHQgc3RlcCBpcyB0byBkcmlsbCBpbnRvIHRoZSBLY29uZmlnIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiBgQ09ORklHX1BFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPYC4gVGhpcyB3aWxsIGJlIGtleSB0byBkZWNpcGhlcmluZyB0aGUgaW50ZW5kZWQgYmVoYXZpb3Igb2YgdGhpcyBwYXRjaCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDExOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQRVJTSVNURU5UX0hVR0VfWkVST19GT0xJTyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTgyND1jb25maWcgQVJDSF9XQU5UU19USFBfU1dBUFxuLS1cbm1tL0tjb25maWctODI2LVxubW0vS2NvbmZpZzo4Mjc6Y29uZmlnIFBFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPXG5tbS9LY29uZmlnLTgyOC1cdGJvb2wgXCYjMzQ7QWxsb2NhdGUgYSBQTUQgc2l6ZWQgZm9saW8gZm9yIHplcm9pbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxMToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Nzc4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkFuYWx5emluZyBEZXBlbmRlbmNpZXMgb2YgUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU8qKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gd29yay4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCBpbXBsaWNhdGlvbnMgaGVyZS4gVGhpcyBgUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9gIHRoaW5nLi4uIHJpZ2h0IG9mZiB0aGUgYmF0LCB0aGF0IG5hbWUgc3VnZ2VzdHMgc29tZSBrZXkgYXNwZWN0cy4gJiMzNDtQZXJzaXN0ZW50JiMzNDsgdGVsbHMgbWUgaXQmIzM5O3MgbGlrZWx5IGRlYWxpbmcgd2l0aCBsb25nLXRlcm0gc3RvcmFnZSwgbWF5YmUgZXZlbiBkdXJhYmlsaXR5IGNvbmNlcm5zLiAmIzM0O0h1Z2UmIzM0OyBpcyBhIHBvaW50ZXIgdG93YXJkcyBsYXJnZSBkYXRhIHZvbHVtZXMg4oCTIHRoaW5rIGJpZyB0YWJsZXMsIGltYWdlcywgb3IgcGVyaGFwcyBleHRlbnNpdmUgZGF0YXNldHMuIEFuZCAmIzM0O1plcm8mIzM0OyBpbXBsaWVzIHNvbWUgcG90ZW50aWFsIG9wdGltaXphdGlvbiwgcGVyaGFwcyBmb3Igc2l0dWF0aW9ucyB3aGVyZSBkYXRhIGlzLCBieSBkZWZhdWx0LCBlbXB0eSBvciBzcGFyc2UgYW5kIG5lZWRzIHRvIGJlIGluaXRpYWxpemVkLiAmIzM0O0ZvbGlvJiMzNDsgbGlrZWx5IGltcGxpZXMgdGhpcyBpcyBlaXRoZXIgdGhlIG5hbWUgb2YgYSBmaWxlIG9yIGEgY29sbGVjdGlvbiBvZiBmaWxlcy4KClNvLCB0aGUgaW1tZWRpYXRlIHF1ZXN0aW9ucyBJIGhhdmUgYXJlOiBXaGF0IHNwZWNpZmljIHRlY2hub2xvZ2llcyBpcyB0aGlzIGJ1aWx0IG9uPyBXaGF0IHVuZGVybHlpbmcgc3RvcmFnZSBtZWNoYW5pc21zIGFyZSBpbnZvbHZlZD8gSXMgaXQgdGllZCB0byBhIHNwZWNpZmljIGRhdGFiYXNlIHN5c3RlbSwgYSBkaXN0cmlidXRlZCBmaWxlIHN5c3RlbSwgb3IgYSBjdXN0b20gaW4tbWVtb3J5IHN0cnVjdHVyZT8gSXMgaXQgcmVsaWFudCBvbiBhIHBhcnRpY3VsYXIgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UsIGxpYnJhcnksIG9yIGZyYW1ld29yaz8KCkkgYWxzbyBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICYjMzQ7d2h5JiMzNDsgYmVoaW5kIHRoaXMuIFdoeSBpcyB0aGlzIHBlcnNpc3RlbnQ/IFdoYXQmIzM5O3MgdGhlIGFwcGxpY2F0aW9uIHVzZSBjYXNlIGZvciB0aGlzIHN0cnVjdHVyZT8gSXMgaXQgdXNlZCBmb3IgYXJjaGl2YWwsIGNhY2hpbmcsIHRyYW5zYWN0aW9uYWwgZGF0YSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEtub3dpbmcgdGhlIHB1cnBvc2Ugd2lsbCBpbmZvcm0gbXkgaW52ZXN0aWdhdGlvbiBpbnRvIGl0cyBkZXBlbmRlbmNpZXMuIElzIHRoaXMgdXNlZCBieSBhbiBvdXRzaWRlIHByb2dyYW0sIG9yIGJ5IHRoZSBwcm9ncmFtIHRoYXQgSSBhbSB3b3JraW5nIG9uLiAKCkkgc3VwcG9zZSBJIGNhbiBiZWdpbiB0byB1bnBhY2sgdGhpcyBieSBsb29raW5nIGF0IHRoZSBjb2RlIGRpcmVjdGx5LiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW1wb3J0aW5nIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTE6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MjA6XHRcbiA4MjE6XHRjb25maWcgQVJDSF9XQU5UX0dFTkVSQUxfSFVHRVRMQlxuIDgyMjpcdFx0Ym9vbFxuIDgyMzpcdFxuIDgyNDpcdGNvbmZpZyBBUkNIX1dBTlRTX1RIUF9TV0FQXG4gODI1Olx0XHRkZWZfYm9vbCBuXG4gODI2Olx0XG4gODI3Olx0Y29uZmlnIFBFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPXG4gODI4Olx0XHRib29sIFwmIzM0O0FsbG9jYXRlIGEgUE1EIHNpemVkIGZvbGlvIGZvciB6ZXJvaW5nXCYjMzQ7XG4gODI5Olx0XHRkZXBlbmRzIG9uIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4gODMwOlx0XHRoZWxwXG4gODMxOlx0XHQgIEVuYWJsZSB0aGlzIG9wdGlvbiB0byByZWR1Y2UgdGhlIHJ1bnRpbWUgcmVmY291bnRpbmcgb3ZlcmhlYWRcbiA4MzI6XHRcdCAgb2YgdGhlIGh1Z2UgemVybyBmb2xpbyBhbmQgZXhwYW5kIHRoZSBwbGFjZXMgaW4gdGhlIGtlcm5lbFxuIDgzMzpcdFx0ICB0aGF0IGNhbiB1c2UgaHVnZSB6ZXJvIGZvbGlvcy4gRm9yIGluc3RhbmNlLCBibG9jayBJL08gYmVuZWZpdHNcbiA4MzQ6XHRcdCAgZnJvbSBhY2Nlc3MgdG8gbGFyZ2UgZm9saW9zIGZvciB6ZXJvaW5nIG1lbW9yeS5cbiA4MzU6XHRcbiA4MzY6XHRcdCAgV2l0aCB0aGlzIG9wdGlvbiBlbmFibGVkLCB0aGUgaHVnZSB6ZXJvIGZvbGlvIGlzIGFsbG9jYXRlZFxuIDgzNzpcdFx0ICBvbmNlIGFuZCBuZXZlciBmcmVlZC4gT25lIGZ1bGwgaHVnZSBwYWdlJiMzOTtzIHdvcnRoIG9mIG1lbW9yeSBzaGFsbFxuIDgzODpcdFx0ICBiZSB1c2VkLlxuIDgzOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDExOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0NzkKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA1MDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSBjb25kaXRpb25hbCBvbiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBzcGVjaWZpY2FsbHkgdGhlIGBDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9gIGZsYWcuIEl04oCZcyBtb2RpZnlpbmcgdGhlIGJlaGF2aW9yIGFyb3VuZCBgZ2V0X2h1Z2VfemVyb19mb2xpb2AgYW5kIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5gICpvbmx5KiB3aGVuIHRoaXMgcGVyc2lzdGVudCB6ZXJvIGZvbGlvIGZlYXR1cmUgaXMgZGlzYWJsZWQuIExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGRpZmYgYWdhaW4uLi4gWWVwLCB0aGF0JiMzOTtzIHJpZ2h0LiBUaGUga2V5IGlzIGluIHRob3NlIGAjaWZuZGVmIENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT2AgYmxvY2tzLgoKRXNzZW50aWFsbHksIGlmIHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24gKmlzbiYjMzk7dCogc2V0LCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGR5bmFtaWMgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIG9mIHRoZSB6ZXJvIGZvbGlvLiBJbiB0aGF0IHNjZW5hcmlvLCBgZ2V0X2h1Z2VfemVyb19mb2xpb2AgdXNlcyBhIHNwaW5sb2NrIChgaHVnZV96ZXJvX2xvY2tgKSB0byBwcm90ZWN0IGFnYWluc3QgcmFjZSBjb25kaXRpb25zLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHRyeWluZyB0byBpbnN0YWxsIHRoZSBmb2xpbyBzYWZlbHksIGF0b21pY2FsbHkgaW5jcmVtZW50aW5nIGEgcmVmZXJlbmNlIGNvdW50LiBUaGUgY29tbWVudHMgb24gdGhlIGxvY2sgYXJlIHVzZWZ1bCBoZXJlLgoKSWYgYENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT2AgKmlzKiBzZXQsIHRoZW4gdGhlIGZvbGlvIGlzIGluaXRpYWxpemVkIG9uY2UgYW5kIG5ldmVyIGZyZWVkLCBhbmQgd2UgaGF2ZSBhIGRpZmZlcmVudCBtZWNoYW5pc20gZW50aXJlbHkuCgpUaGlzIGlzIGdvb2QuIEZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGlzIGNvZGUgcGF0aCBpcyBkZWZpbml0ZWx5IGEgY2FuZGlkYXRlIGZvciB0aG9yb3VnaCB0ZXN0aW5nLiBUaGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHNwaW5sb2NrIGFuZCB0aGUgYXRvbWljIG9wZXJhdGlvbnMgYXJlIHRoZSByZWQgZmxhZ3MuIEkmIzM5O2Qgd2FudCB0byBmb2N1cyBmdXp6aW5nIGFyb3VuZCB0aGVzZSBzeW1ib2xzOiBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AsIGBtbV9wdXRfaHVnZV96ZXJvX2ZvbGlvYCwgYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAsIGFuZCBgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19jb3VudGAuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYG1tX2dldF9odWdlX3plcm9fZm9saW9gIGlzIGV4cG9ydGVkIG9yIG90aGVyd2lzZSByZWFjaGFibGUgYnkgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxMToyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttbV9nZXRfaHVnZV96ZXJvX2ZvbGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2RheC5jPTE0MTE9c3RhdGljIHZtX2ZhdWx0X3QgZGF4X3BtZF9sb2FkX2hvbGUoc3RydWN0IHhhX3N0YXRlICp4YXMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLS1cbmZzL2RheC5jLTE0MTgtXG5mcy9kYXguYzoxNDE5Olx0emVyb19mb2xpbyA9IG1tX2dldF9odWdlX3plcm9fZm9saW8odm1mLVx1MDAzZXZtYS1cdTAwM2V2bV9tbSk7XG5mcy9kYXguYy0xNDIwLVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTU0OT1zdGF0aWMgaW5saW5lIGJvb2wgaXNfaHVnZV96ZXJvX3BtZChwbWRfdCBwbWQpXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTUzLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NTU0OnN0cnVjdCBmb2xpbyAqbW1fZ2V0X2h1Z2VfemVyb19mb2xpbyhzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC01NTUtdm9pZCBtbV9wdXRfaHVnZV96ZXJvX2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD04MDY9c3RhdGljIGlubGluZSBpbnQgc3BsaXRfZm9saW9fdG9fb3JkZXIoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19vcmRlcilcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC04MTMtICpcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjgxNDogKiBUaGlzIGZ1bmN0aW9uIHNoYWxsIGJlIHVzZWQgd2hlbiBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvKCkgY2Fubm90IGJlXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC04MTUtICogdXNlZCBhcyB0aGVyZSBpcyBubyBhcHByb3ByaWF0ZSBtbSBsaWZldGltZSB0byB0aWUgdGhlIGh1Z2UgemVybyBmb2xpb1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MjU5PXN0YXRpYyB2b2lkIF9faW5pdCBodWdlX3plcm9fc2hyaW5rZXJfZXhpdCh2b2lkKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjYyLVxubW0vaHVnZV9tZW1vcnkuYzoyNjM6c3RydWN0IGZvbGlvICptbV9nZXRfaHVnZV96ZXJvX2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxubW0vaHVnZV9tZW1vcnkuYy0yNjQte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MzU1PXN0YXRpYyB2b2lkIF9faW5pdCBodWdlX3plcm9fc2hyaW5rZXJfZXhpdCh2b2lkKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzU5LVxubW0vaHVnZV9tZW1vcnkuYzozNjA6c3RydWN0IGZvbGlvICptbV9nZXRfaHVnZV96ZXJvX2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxubW0vaHVnZV9tZW1vcnkuYy0zNjEte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTUxOT12bV9mYXVsdF90IGRvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTU0MS1cdFx0XHRyZXR1cm4gVk1fRkFVTFRfT09NO1xubW0vaHVnZV9tZW1vcnkuYzoxNTQyOlx0XHR6ZXJvX2ZvbGlvID0gbW1fZ2V0X2h1Z2VfemVyb19mb2xpbyh2bWEtXHUwMDNldm1fbW0pO1xubW0vaHVnZV9tZW1vcnkuYy0xNTQzLVx0XHRpZiAodW5saWtlbHkoIXplcm9fZm9saW8pKSB7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0xOTA3PWludCBjb3B5X2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdF9tbSwgc3RydWN0IG1tX3N0cnVjdCAqc3JjX21tLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTk3MC1cdFx0Lypcbm1tL2h1Z2VfbWVtb3J5LmM6MTk3MTpcdFx0ICogbW1fZ2V0X2h1Z2VfemVyb19mb2xpbygpIHdpbGwgbmV2ZXIgYWxsb2NhdGUgYSBuZXdcbm1tL2h1Z2VfbWVtb3J5LmMtMTk3Mi1cdFx0ICogZm9saW8gaGVyZSwgc2luY2Ugd2UgYWxyZWFkeSBoYXZlIGEgemVybyBwYWdlIHRvXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xOTc0LVx0XHQgKi9cbm1tL2h1Z2VfbWVtb3J5LmM6MTk3NTpcdFx0bW1fZ2V0X2h1Z2VfemVyb19mb2xpbyhkc3RfbW0pO1xubW0vaHVnZV9tZW1vcnkuYy0xOTc2LVx0XHRnb3RvIG91dF96ZXJvX3BhZ2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTE6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI1MQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDY2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSHVnZSBaZXJvIEZvbGlvIFNocmlua2luZyBhbmQgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGh1Z2UgemVybyBmb2xpbyBjb2RlLiBGaXJzdCwgaXQmIzM5O3MgY2xlYXIgdGhhdCBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AgaXMgZGVmaW5pdGVseSByZWFjaGFibGUsIGFuZCB0aGF0IGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5gIGlzIGEgc2hyaW5rZXIgY2FsbGJhY2ssIHdoaWNoIG1lYW5zIGl0IHNob3VsZCBiZSB0cmlnZ2VyZWQgYnkgbWVtb3J5IHByZXNzdXJlLiBMZXQmIzM5O3MgbWFrZSBzdXJlIGl0JiMzOTtzIG5vdCBpbmxpbmU7IHllcywgaXQmIzM5O3Mgc3RhdGljIGluIGBtbS9odWdlX21lbW9yeS5jYCwgYnV0IHNpbmNlIGl0JiMzOTtzIGEgc2hyaW5rZXIgY2FsbGJhY2sgYW5kIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgdG8gYGh1Z2VfemVyb19mb2xpb19zaHJpbmtlci0mZ3Q7c2Nhbl9vYmplY3RzID0gc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuO2AgaXQgd29uJiMzOTt0IGJlIGlubGluZWQuIFRoYXQmIzM5O3MgZ29vZCwgYSBmdXp6ZXIgY2FuIHBvdGVudGlhbGx5IGZvY3VzIG9uIHRoaXMuCgpOb3csIGxldCBtZSBjaGVjayB0aGUgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbiBgZ2V0X2h1Z2VfemVyb19mb2xpb2AsIHdoaWNoIGlzIGFsc28gc3RhdGljIGFuZCBjYWxsZWQgYnkgYG1tX2dldF9odWdlX3plcm9fZm9saW9gLCB3aGljaCBpbiB0dXJuIGNhbGxzIGl0LgoKVGhlIGZ1bmN0aW9ucyBJJiMzOTttIGZvY3VzaW5nIG9uIGFyZToKCiogICBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AKKiAgIGBtbV9wdXRfaHVnZV96ZXJvX2ZvbGlvYAoqICAgYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAKKiAgIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX2NvdW50YAoKSG9sZCBvbiBhIHNlY29uZC4uLml0IGxvb2tzIGxpa2UgYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAgYW5kIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX2NvdW50YCBhcmUgb25seSBjb21waWxlZCBpZiBgQ09ORklHX1BFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPYCBpcyAqbm90KiBzZXQuIFNvLCBpZiBJIHdhbnQgdG8gdGVzdCB0aGUgbmV3IGxvY2tpbmcgYW5kIHNocmlua2VyIGxvZ2ljLCBJICptdXN0KiBlbnN1cmUgdGhhdCBgQ09ORklHX1BFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPYCBpcyBub3QgZW5hYmxlZC4gSSBzaG91bGQgY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgdG8gc2VlIGlmIGl0IGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gSSYjMzk7bSBnb2luZyB0byBuZWVkIHRvIGtlZXAgdGhpcyBpbiBtaW5kIHdoZW4gY29uZmlndXJpbmcgbXkgZnV6emluZyBlbnZpcm9ubWVudCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTE6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9ODI0PWNvbmZpZyBBUkNIX1dBTlRTX1RIUF9TV0FQXG4tLVxubW0vS2NvbmZpZy04MjYtXG5tbS9LY29uZmlnOjgyNzpjb25maWcgUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9cbm1tL0tjb25maWctODI4LVx0Ym9vbCBcJiMzNDtBbGxvY2F0ZSBhIFBNRCBzaXplZCBmb2xpbyBmb3IgemVyb2luZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxMToyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDQwCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyB0aGUgRGVmYXVsdCBCZWhhdmlvciBhbmQgRGVwZW5kZW5jaWVzKioKClJpZ2h0LCBzbywgdGhlcmUmIzM5O3Mgbm8gYGRlZmF1bHQgeWAgaGVyZS4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4gVGhhdCYjMzk7cyBhIGdvb2QgdGhpbmcsIHNpbXBsaWZpZXMgaW5pdGlhbCBzZXR1cC4gIE5vdywgdGhlIGJlYXV0eSBvZiB0aGlzIGlzIHRoYXQgYmVjYXVzZSBpdCYjMzk7cyAqZGlzYWJsZWQqIGJ5IGRlZmF1bHQsIEkgZG9uJiMzOTt0IG5lZWQgdG8gZ28gb3V0IG9mIG15IHdheSB0byAqZXhwbGljaXRseSogZGlzYWJsZSBpdCBqdXN0IHRvIHZlcmlmeSB0aGUgYCNlbHNlYCBicmFuY2guIFRoYXQgc2F2ZXMgbWUgYSBzdGVwIGluIHRoZSB0ZXN0aW5nIHByb2Nlc3MsIHdoaWNoIGlzIGFsd2F5cyB3ZWxjb21lLiBIb3dldmVyLCBgbW0vaHVnZV9tZW1vcnkuY2AgaGFzIGEgZGlyZWN0IGRlcGVuZGVuY3kgb24gYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgd2hpY2ggKm11c3QqIGJlIGVuYWJsZWQgZm9yIHRoZSBjb21waWxhdGlvbiB0byB3b3JrLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQmIzM5O3Mgc2V0IGNvcnJlY3RseSBkdXJpbmcgY29tcGlsYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI5IDExOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTg0Mz1jb25maWcgTU1fSURcbi0tXG5tbS9LY29uZmlnLTg0NS1cbm1tL0tjb25maWc6ODQ2Om1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL0tjb25maWctODQ3LVx0Ym9vbCBcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZz04NjQ9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy04NjktXG5tbS9LY29uZmlnOjg3MDpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcbm1tL0tjb25maWctODcxLVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctODc2LVxubW0vS2NvbmZpZzo4Nzc6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTUFEVklTRVxubW0vS2NvbmZpZy04NzgtXHRcdGJvb2wgXCYjMzQ7bWFkdmlzZVwmIzM0O1xuLS1cbm1tL0tjb25maWctODg1LVxubW0vS2NvbmZpZzo4ODY6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTkVWRVJcbm1tL0tjb25maWctODg3LVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz04OTM9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy05MDItXG5tbS9LY29uZmlnOjkwMzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX05FVkVSXG5tbS9LY29uZmlnLTkwNC1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWctOTEyLVxubW0vS2NvbmZpZzo5MTM6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVNcbm1tL0tjb25maWctOTE0LVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctOTIwLVxubW0vS2NvbmZpZzo5MjE6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9XSVRISU5fU0laRVxubW0vS2NvbmZpZy05MjItXHRcdGJvb2wgXCYjMzQ7d2l0aGluX3NpemVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkyOC1cbm1tL0tjb25maWc6OTI5Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQURWSVNFXG5tbS9LY29uZmlnLTkzMC1cdFx0Ym9vbCBcJiMzNDthZHZpc2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTkzOD1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTk0Ny1cbm1tL0tjb25maWc6OTQ4Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfTkVWRVJcbm1tL0tjb25maWctOTQ5LVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NTYtXG5tbS9LY29uZmlnOjk1NzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZU1xubW0vS2NvbmZpZy05NTgtXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NjQtXG5tbS9LY29uZmlnOjk2NTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFXG5tbS9LY29uZmlnLTk2Ni1cdFx0Ym9vbCBcJiMzNDt3aXRoaW5fc2l6ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctOTcyLVxubW0vS2NvbmZpZzo5NzM6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0Vcbm1tL0tjb25maWctOTc0LVx0XHRib29sIFwmIzM0O2FkdmlzZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOSAxMToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQwOAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipFbmFibGluZyBUcmFuc3BhcmVudCBIdWdlcGFnZXMg4oCTIEEgUXVpY2sgQ2hlY2sqKgoKUmlnaHQsIHNvIHRoZSBwbGFuIGlzIHRvIGVuYWJsZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBTZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBzdHJhdGVneSBnaXZlbiB0aGUgYXBwbGljYXRpb24mIzM5O3MgY2hhcmFjdGVyaXN0aWNzIGFuZCBteSB1bmRlcnN0YW5kaW5nIG9mIGl0cyBtZW1vcnkgYWNjZXNzIHBhdHRlcm5zLiBCZWZvcmUgSSBjb21taXQgdG8gdGhpcywgdGhvdWdoLCBJIG5lZWQgdG8gcGVyZm9ybSBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBlbnN1cmUgdGhlIGZlYXR1cmUgaXMgYWN0dWFsbHkgY29tcGlsZWQgaW50byB0aGUga2VybmVsIGlmIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZGVmaW5lZC4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgYG1tL2h1Z2VfbWVtb3J5LmNgIGlzIGNvbXBpbGVkIGNvbmRpdGlvbmFsbHkgb24gdGhhdCB2ZXJ5IGRlZmluZS4gQSBxdWljayBncmVwIG9yIGNvZGUgbmF2aWdhdGlvbiBpbnRvIHRoZSBzb3VyY2UgdHJlZSBzaG91bGQgZG8gdGhlIHRyaWNrLiBObyBwb2ludCBpbiBlbmFibGluZyBhIGZlYXR1cmUgdGhhdCBkb2VzbiYjMzk7dCBhY3R1YWxseSBleGlzdCBpbiB0aGUgYnVpbGQuIEkmIzM5O2xsIG1ha2Ugc3VyZSBpdCBpcyBpbmRlZWQgYnVpbHQtaW4sIGFuZCB0aGVuLCB3ZSBjYW4gcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTE6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZV9tZW1vcnkubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICYjNDM7PSBtaWdyYXRlX2RldmljZS5vXG5tbS9NYWtlZmlsZToxMDE6b2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSAmIzQzOz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cbm1tL01ha2VmaWxlLTEwMi1vYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSAmIzQzOz0gcGFnZV9jb3VudGVyLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTE6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3NTMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA1MzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNzaW5nIEZ1enppbmcgRWZmb3J0cyBvbiBIdWdlIFplcm8gRm9saW8gTWFuYWdlbWVudCoqCgpPa2F5LCBzbyB0aGlzIGNoYW5nZSAqZG9lcyogaW5kZWVkIHJlcXVpcmUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gTm8gcXVlc3Rpb24gYWJvdXQgdGhhdC4gTm93LCB3aGVyZSB0byBmb2N1cyB0aGUgZnV6emVyPyBBaCwgdGhlIHBhdGNoIG1vZGlmaWVzIGBtbS9odWdlX21lbW9yeS5jYCwgc28gdGhhdCYjMzk7cyB0aGUga2V5IGFyZWEuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgYWJvdXQgdGhlIG1hbmFnZW1lbnQgb2YgdGhlIGh1Z2UgemVybyBmb2xpby4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gem9vbSBpbiBvbiB0aGVzZSBmdW5jdGlvbnM6IGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYCwgYG1tX3B1dF9odWdlX3plcm9fZm9saW9gLCBhbmQgdGhlIHNocmlua2VyIGZ1bmN0aW9ucywgYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAsIGFuZCBgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19jb3VudGAuCgpKdXN0IGRvdWJsZS1jaGVja2luZywgYG1tX2dldF9odWdlX3plcm9fZm9saW9gIGlzbiYjMzk7dCBleHBvcnRlZCB0byBtb2R1bGVzLCBidXQgaXQmIzM5O3MgZ2xvYmFsLCBzbyBpdCYjMzk7cyBhY2Nlc3NpYmxlLiBgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuYCBpcyBzdGF0aWMsIGJ1dCBpdHMgYWRkcmVzcyAqaXMqIHRha2VuLCB3aGljaCBtYWtlcyBpdCBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gTGV0IG1lIGp1c3QgY29uZmlybSB0aG9zZSBmdW5jdGlvbiBuYW1lcy4uLiB5ZXA6CgpgYGBjCnN0cnVjdCBmb2xpbyAqbW1fZ2V0X2h1Z2VfemVyb19mb2xpbyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKdm9pZCBtbV9wdXRfaHVnZV96ZXJvX2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQpzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLAoJCQkJCQkgIHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpCnN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluaywKCQkJCQkJIHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpCmBgYAoKQXJlIHRoZXJlIGFueSBvdGhlciByZWxldmFudCBmdW5jdGlvbnMsIGxldCBtZSBqdXN0IGNoZWNrLi4uIFllcCwgdGhlcmUgYXJlIGBhbGxvY19odWdlX3plcm9fZm9saW9gIGFuZCBgZ2V0X2h1Z2VfemVyb19mb2xpb2AuIEkgc2hvdWxkIGRlZmluaXRlbHkgYWRkIHRob3NlIHRvIHRoZSBsaXN0IGFzIHdlbGwuCgpBbHJpZ2h0LCB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGlzIGlzIHRoYXQgdGhpcyBwYXRjaCByZWZhY3RvcnMgdGhlIGFsbG9jYXRpb24gYW5kIG1hbmFnZW1lbnQgb2YgaHVnZSB6ZXJvIGZvbGlvcyB3aXRoaW4gVEhQLiBUaGVyZSYjMzk7cyBhIHNwaW5sb2NrIChgaHVnZV96ZXJvX2xvY2tgKSBub3cgdG8gYWRkcmVzcyByYWNlIGNvbmRpdGlvbnMgdGhhdCBhcHBlYXIgd2hlbiBhbGxvY2F0aW9uIGFuZCBzaHJpbmtpbmcgaXMgZW5hYmxlZCB3aGVuIGBDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9gIGlzIGRpc2FibGVkLiBUaGF0IG1lYW5zIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMuIFBhZ2UgZmF1bHRzIGFuZCBtZW1vcnkgcHJlc3N1cmUgdGhyb3VnaCB0aGUgc2hyaW5rZXIgcGF0aCBhcmUgZ29pbmcgdG8gYmUga2V5IGVudHJ5IHBvaW50cy4gU28gdGhlIGhpZ2ggcHJpb3JpdHkgY29uZmlncyB0byBlbmFibGUgYXJlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuCgpTbywgdGhlIGZvY3VzIHN5bWJvbHMgYXJlOiBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AsIGBtbV9wdXRfaHVnZV96ZXJvX2ZvbGlvYCwgYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAsIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX2NvdW50YCwgYGFsbG9jX2h1Z2VfemVyb19mb2xpb2AsIGFuZCBgZ2V0X2h1Z2VfemVyb19mb2xpb2AuCgpKdXN0IGEgc2FuaXR5IGNoZWNrOiBJIHNob3VsZCBjaGVjayB0byBzZWUgaWYgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBoYXMgYW55IGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTE6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODQ2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NDY6XHRtZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4gODQ3Olx0XHRib29sIFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcJiMzNDtcbiA4NDg6XHRcdGRlcGVuZHMgb24gSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFIFx1MDAyNlx1MDAyNiAhUFJFRU1QVF9SVFxuIDg0OTpcdFx0c2VsZWN0IENPTVBBQ1RJT05cbiA4NTA6XHRcdHNlbGVjdCBYQVJSQVlfTVVMVElcbiA4NTE6XHRcdHNlbGVjdCBNTV9JRFxuIDg1MjpcdFx0aGVscFxuIDg1MzpcdFx0ICBUcmFuc3BhcmVudCBIdWdlcGFnZXMgYWxsb3dzIHRoZSBrZXJuZWwgdG8gdXNlIGh1Z2UgcGFnZXMgYW5kXG4gODU0Olx0XHQgIGh1Z2UgdGxiIHRyYW5zcGFyZW50bHkgdG8gdGhlIGFwcGxpY2F0aW9ucyB3aGVuZXZlciBwb3NzaWJsZS5cbiA4NTU6XHRcdCAgVGhpcyBmZWF0dXJlIGNhbiBpbXByb3ZlIGNvbXB1dGluZyBwZXJmb3JtYW5jZSB0byBjZXJ0YWluXG4gODU2Olx0XHQgIGFwcGxpY2F0aW9ucyBieSBzcGVlZGluZyB1cCBwYWdlIGZhdWx0cyBkdXJpbmcgbWVtb3J5XG4gODU3Olx0XHQgIGFsbG9jYXRpb24sIGJ5IHJlZHVjaW5nIHRoZSBudW1iZXIgb2YgdGxiIG1pc3NlcyBhbmQgYnkgc3BlZWRpbmdcbiA4NTg6XHRcdCAgdXAgdGhlIHBhZ2V0YWJsZSB3YWxraW5nLlxuIDg1OTpcdFxuIDg2MDpcdFx0ICBJZiBtZW1vcnkgY29uc3RyYWluZWQgb24gZW1iZWRkZWQsIHlvdSBtYXkgd2FudCB0byBzYXkgTi5cbiA4NjE6XHRcbiA4NjI6XHRpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuIDg2MzpcdFxuIDg2NDpcdGNob2ljZVxuIDg2NTpcdFx0cHJvbXB0IFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnQgc3lzZnMgZGVmYXVsdHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTE6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyMTAKCQkJCQkJCW91dHB1dDogMTc0CgkJCQkJCQl0aG91Z2h0czogNDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBUSFAgUGF0Y2ggZm9yIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBmb3IgZnV6emluZyBwdXJwb3Nlcy4gVGhlIGxvZ2ljIHNlZW1zIHRvIGhpbmdlIG9uIGBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UgJmFtcDsmYW1wOyAhUFJFRU1QVF9SVGAuIFNpbmNlIGFyY2hpdGVjdHVyZXMgbGlrZSB4ODYgdHlwaWNhbGx5IGRlZmluZSBgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCwganVzdCBsaXN0aW5nIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgc2hvdWxkIGJlIHN1ZmZpY2llbnQuIFRoYXQmIzM5O3Mgb3VyIHByaW1hcnkgZm9jdXMuCgpOZXh0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgc3RhdGUgb2YgYENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT2AuIFRoZSBwYXRjaCBzZWVtcyB0byB0b3VjaCBib3RoIGJyYW5jaGVzLCBidXQgdGhlIG1vcmUgaW52b2x2ZWQgY29kZSwgaW5jbHVkaW5nIHRoZSBzcGlubG9jayBhbmQgc2hyaW5rZXIgbWVjaGFuaXNtcywgaXMgaW4gdGhlIGAjZWxzZWAgYnJhbmNoLCB3aGVuIGBDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9gIGlzIGRpc2FibGVkLiBUaGUgZGVmYXVsdCBpcyB0byBoYXZlIHRoaXMgZGlzYWJsZWQsIHNvIHdlIGRvbiYjMzk7dCBuZWVkIHRvIGV4cGxpY2l0bHkgZGlzYWJsZSBpdCBmb3Igb3VyIGZ1enppbmcgc2V0dXAuIFdlJiMzOTtyZSBzYWZlIHRvIHN0aWNrIHdpdGggZW5hYmxpbmcgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4KCk5vdywgcmVhY2hhYmlsaXR5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYCBpcyBhY3R1YWxseSBjYWxsZWQuIEEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGF0IGl0JiMzOTtzIGFjY2Vzc2VkIHZpYSBgZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2VgLCBgY29weV9odWdlX3BtZGAsIGFuZCBgZGF4X3BtZF9sb2FkX2hvbGVgLiBZZXMsIGl0JiMzOTtzIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBHb29kLgoKR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIHJhY2UgY29uZGl0aW9ucyBpbiB0aGUgY29udGV4dCBvZiBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgc2hyaW5raW5nLCBlc3BlY2lhbGx5IHdpdGggdGhlIGFkZGVkIHNwaW5sb2NrIHdoZW4gYENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT2AgaXMgZGlzYWJsZWQsIHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBUaGlzIHJlZmFjdG9yaW5nIG9mIGh1Z2UgemVybyBmb2xpbyBtYW5hZ2VtZW50IGluIFRIUCwgd2hpY2ggdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgYW5kIGlzIGV4cG9zZWQgdGhyb3VnaCBwYWdlIGZhdWx0cyBhbmQgbWVtb3J5IHByZXNzdXJlLCBnaXZlcyBtZSBhIHN0cm9uZyBqdXN0aWZpY2F0aW9uIHRvIHNldCAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IHRvIHRydWUuCgpUaGUga2V5IHN5bWJvbHMgdG8gdGFyZ2V0IGluIHRoZSBmdXp6ZXIgYXJlOiBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AsIGBtbV9wdXRfaHVnZV96ZXJvX2ZvbGlvYCwgYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAsIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX2NvdW50YCwgYGFsbG9jX2h1Z2VfemVyb19mb2xpb2AsIGFuZCBgZ2V0X2h1Z2VfemVyb19mb2xpb2AuCgpBbmQgdGhlIGtleSBjb25maWd1cmF0aW9uIHRvIGVuYWJsZSwgZm9yIHRoZSBmdXp6ZXIgdG8gZW5nYWdlIHdpdGggdGhlIG1vZGlmaWVkIGNvZGUsIGlzIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIFRoYXQmIzM5O3MgdGhlIGtleS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjkgMTE6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bW1fZ2V0X2h1Z2VfemVyb19mb2xpbyYjMzQ7LAogICAgJiMzNDttbV9wdXRfaHVnZV96ZXJvX2ZvbGlvJiMzNDssCiAgICAmIzM0O3Nocmlua19odWdlX3plcm9fZm9saW9fc2NhbiYjMzQ7LAogICAgJiMzNDtzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX2NvdW50JiMzNDssCiAgICAmIzM0O2FsbG9jX2h1Z2VfemVyb19mb2xpbyYjMzQ7LAogICAgJiMzNDtnZXRfaHVnZV96ZXJvX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYWxsb2NhdGlvbiBhbmQgbWFuYWdlbWVudCBvZiB0aGUgaHVnZSB6ZXJvIGZvbGlvIGluIFRIUCAoVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyksIGludHJvZHVjaW5nIGEgc3BpbmxvY2sgdG8gZml4IHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgYWxsb2NhdGlvbiBhbmQgc2hyaW5raW5nIHdoZW4gQ09ORklHX1BFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPIGlzIGRpc2FibGVkLiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgcGFnZSBmYXVsdHMgYW5kIG1lbW9yeSBwcmVzc3VyZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttbV9nZXRfaHVnZV96ZXJvX2ZvbGlvJiMzNDssCiAgICAmIzM0O21tX3B1dF9odWdlX3plcm9fZm9saW8mIzM0OywKICAgICYjMzQ7c2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuJiMzNDssCiAgICAmIzM0O3Nocmlua19odWdlX3plcm9fZm9saW9fY291bnQmIzM0OywKICAgICYjMzQ7YWxsb2NfaHVnZV96ZXJvX2ZvbGlvJiMzNDssCiAgICAmIzM0O2dldF9odWdlX3plcm9fZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBhbGxvY2F0aW9uIGFuZCBtYW5hZ2VtZW50IG9mIHRoZSBodWdlIHplcm8gZm9saW8gaW4gVEhQIChUcmFuc3BhcmVudCBIdWdlIFBhZ2VzKSwgaW50cm9kdWNpbmcgYSBzcGlubG9jayB0byBmaXggcmFjZSBjb25kaXRpb25zIGR1cmluZyBhbGxvY2F0aW9uIGFuZCBzaHJpbmtpbmcgd2hlbiBDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU8gaXMgZGlzYWJsZWQuIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHZpYSBwYWdlIGZhdWx0cyBhbmQgbWVtb3J5IHByZXNzdXJlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjlUMTE6MjI6MTguNjQ5MDUzNTQ5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQzMTk5MzkxMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvXCIsXG4gICAgXCJtbV9wdXRfaHVnZV96ZXJvX2ZvbGlvXCIsXG4gICAgXCJzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5cIixcbiAgICBcInNocmlua19odWdlX3plcm9fZm9saW9fY291bnRcIixcbiAgICBcImFsbG9jX2h1Z2VfemVyb19mb2xpb1wiLFxuICAgIFwiZ2V0X2h1Z2VfemVyb19mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgYWxsb2NhdGlvbiBhbmQgbWFuYWdlbWVudCBvZiB0aGUgaHVnZSB6ZXJvIGZvbGlvIGluIFRIUCAoVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyksIGludHJvZHVjaW5nIGEgc3BpbmxvY2sgdG8gZml4IHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgYWxsb2NhdGlvbiBhbmQgc2hyaW5raW5nIHdoZW4gQ09ORklHX1BFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPIGlzIGRpc2FibGVkLiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgcGFnZSBmYXVsdHMgYW5kIG1lbW9yeSBwcmVzc3VyZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTE6MjI6MTguNjQ5MDYwOTU5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTk0MTA3MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxNDk2M2E1YTY2NDFiYmE2YTRjNDY2Y2IxYWM3ZTg0MWNkNTM1NmI4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDI5IDExOjIyOjE3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXFxuaW5kZXggMDMyNzAyYTQ2MzdiYS4uYWNlZTJkMjhiOWJiYyAxMDA2NDRcXG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXFxuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xcbkBAIC00MSw2ICs0MSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wZ2FsbG9jLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wZ2FsbG9jX3RhZy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFnZXdhbGsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NsZWFudXAuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vdGxiLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJpbnRlcm5hbC5oXFxcIlxcbkBAIC03Nyw5ICs3OCwxNSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkZWZlcnJlZF9zcGxpdF9zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxcbiBcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHNocmlua19jb250cm9sICpzYyk7XFxuIHN0YXRpYyBib29sIHNwbGl0X3VuZGVydXNlZF90aHAgPSB0cnVlO1xcbiBcXG4tc3RhdGljIGF0b21pY190IGh1Z2VfemVyb19yZWZjb3VudDtcXG4rI2RlZmluZSBIVUdFX1pFUk9fVU5TRVRfUEZOICh+MFVMKVxcbiBzdHJ1Y3QgZm9saW8gKmh1Z2VfemVyb19mb2xpbyBfX3JlYWRfbW9zdGx5O1xcbi11bnNpZ25lZCBsb25nIGh1Z2VfemVyb19wZm4gX19yZWFkX21vc3RseSA9IH4wVUw7XFxuK3Vuc2lnbmVkIGxvbmcgaHVnZV96ZXJvX3BmbiBfX3JlYWRfbW9zdGx5ID0gSFVHRV9aRVJPX1VOU0VUX1BGTjtcXG4rI2lmbmRlZiBDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9cXG4rc3RhdGljIGF0b21pY190IGh1Z2VfemVyb19yZWZjb3VudDtcXG4rc3RhdGljIERFRklORV9TUElOTE9DSyhodWdlX3plcm9fbG9jayk7XFxuK3N0YXRpYyBzdHJ1Y3Qgc2hyaW5rZXIgKmh1Z2VfemVyb19mb2xpb19zaHJpbmtlcjtcXG4rI2VuZGlmXFxuK1xcbiB1bnNpZ25lZCBsb25nIGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzIF9fcmVhZF9tb3N0bHk7XFxuIHVuc2lnbmVkIGxvbmcgaHVnZV9hbm9uX29yZGVyc19tYWR2aXNlIF9fcmVhZF9tb3N0bHk7XFxuIHVuc2lnbmVkIGxvbmcgaHVnZV9hbm9uX29yZGVyc19pbmhlcml0IF9fcmVhZF9tb3N0bHk7XFxuQEAgLTIyMSwzMyArMjI4LDc0IEBAIHVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdHJldHVybiBvcmRlcnM7XFxuIH1cXG4gXFxuLXN0YXRpYyBib29sIGdldF9odWdlX3plcm9fZm9saW8odm9pZClcXG4rc3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZV96ZXJvX2ZvbGlvKHZvaWQpXFxuIHtcXG4gXFx0c3RydWN0IGZvbGlvICp6ZXJvX2ZvbGlvO1xcbi1yZXRyeTpcXG4tXFx0aWYgKGxpa2VseShhdG9taWNfaW5jX25vdF96ZXJvKFxcdTAwMjZodWdlX3plcm9fcmVmY291bnQpKSlcXG4tXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbiBcXHR6ZXJvX2ZvbGlvID0gZm9saW9fYWxsb2MoKEdGUF9UUkFOU0hVR0UgfCBfX0dGUF9aRVJPIHwgX19HRlBfWkVST1RBR1MpIFxcdTAwMjZcXG4gXFx0XFx0XFx0XFx0IH5fX0dGUF9NT1ZBQkxFLFxcbiBcXHRcXHRcXHRIUEFHRV9QTURfT1JERVIpO1xcbiBcXHRpZiAoIXplcm9fZm9saW8pIHtcXG4gXFx0XFx0Y291bnRfdm1fZXZlbnQoVEhQX1pFUk9fUEFHRV9BTExPQ19GQUlMRUQpO1xcbi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9XFxuK1xcdGZvbGlvX2NsZWFyX2xhcmdlX3JtYXBwYWJsZSh6ZXJvX2ZvbGlvKTsgLyogRXhwbGljaXRseSBub3Qgcm1hcHBhYmxlLiAqL1xcbitcXHRyZXR1cm4gemVyb19mb2xpbztcXG4rfVxcbitcXG4rI2lmZGVmIENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT1xcbitzdGF0aWMgaW50IF9faW5pdCBodWdlX3plcm9faW5pdCh2b2lkKVxcbit7XFxuK1xcdGh1Z2VfemVyb19mb2xpbyA9IGFsbG9jX2h1Z2VfemVyb19mb2xpbygpO1xcbitcXHRpZiAoIWh1Z2VfemVyb19mb2xpbykge1xcbitcXHRcXHRwcl93YXJuKFxcXCJBbGxvY2F0aW5nIHBlcnNpc3RlbnQgaHVnZSB6ZXJvIGZvbGlvIGZhaWxlZFxcXFxuXFxcIik7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGh1Z2VfemVyb19wZm4gPSBmb2xpb19wZm4oaHVnZV96ZXJvX2ZvbGlvKTtcXG4rXFx0XFx0Y291bnRfdm1fZXZlbnQoVEhQX1pFUk9fUEFHRV9BTExPQyk7XFxuIFxcdH1cXG4tXFx0LyogRW5zdXJlIHplcm8gZm9saW8gd29uJ3QgaGF2ZSBsYXJnZV9ybWFwcGFibGUgZmxhZyBzZXQuICovXFxuLVxcdGZvbGlvX2NsZWFyX2xhcmdlX3JtYXBwYWJsZSh6ZXJvX2ZvbGlvKTtcXG4tXFx0cHJlZW1wdF9kaXNhYmxlKCk7XFxuLVxcdGlmIChjbXB4Y2hnKFxcdTAwMjZodWdlX3plcm9fZm9saW8sIE5VTEwsIHplcm9fZm9saW8pKSB7XFxuLVxcdFxcdHByZWVtcHRfZW5hYmxlKCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBfX2luaXQgaHVnZV96ZXJvX3Nocmlua2VyX2V4aXQodm9pZClcXG4re1xcbit9XFxuK1xcbitzdHJ1Y3QgZm9saW8gKm1tX2dldF9odWdlX3plcm9fZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuK3tcXG4rXFx0cmV0dXJuIGh1Z2VfemVyb19mb2xpbztcXG4rfVxcbitcXG4rdm9pZCBtbV9wdXRfaHVnZV96ZXJvX2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbit7XFxuK31cXG4rI2Vsc2VcXG4rc3RhdGljIGJvb2wgZ2V0X2h1Z2VfemVyb19mb2xpbyh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBmb2xpbyAqemVyb19mb2xpbztcXG4rXFxuK1xcdC8qIFBhaXJlZCB3aXRoIGF0b21pY19zZXRfcmVsZWFzZSgpLiAqL1xcbitcXHRpZiAobGlrZWx5KGF0b21pY19pbmNfbm90X3plcm8oXFx1MDAyNmh1Z2VfemVyb19yZWZjb3VudCkpKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdHplcm9fZm9saW8gPSBhbGxvY19odWdlX3plcm9fZm9saW8oKTtcXG4rXFx0aWYgKHVubGlrZWx5KCF6ZXJvX2ZvbGlvKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0LyogUGFpcmVkIHdpdGggY3JpdGljYWwgc2VjdGlvbiBpbiBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW4oKS4gKi9cXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZodWdlX3plcm9fbG9jayk7XFxuK1xcdGlmIChodWdlX3plcm9fZm9saW8pIHtcXG4rXFx0XFx0LyogU29tZWJvZHkgZWxzZSBhbHJlYWR5IGluc3RhbGxlZCBpdC4gKi9cXG4rXFx0XFx0YXRvbWljX2luYyhcXHUwMDI2aHVnZV96ZXJvX3JlZmNvdW50KTtcXG4rXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmh1Z2VfemVyb19sb2NrKTtcXG4gXFx0XFx0Zm9saW9fcHV0KHplcm9fZm9saW8pO1xcbi1cXHRcXHRnb3RvIHJldHJ5O1xcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0fVxcbitcXHRXUklURV9PTkNFKGh1Z2VfemVyb19mb2xpbywgemVyb19mb2xpbyk7XFxuIFxcdFdSSVRFX09OQ0UoaHVnZV96ZXJvX3BmbiwgZm9saW9fcGZuKHplcm9fZm9saW8pKTtcXG4rXFx0LyogUGFpcmVkIHdpdGggYXRvbWljX2luY19ub3RfemVybygpLiArMSBmb3Igc2hyaW5rZXIgcGluLiAqL1xcbitcXHRhdG9taWNfc2V0X3JlbGVhc2UoXFx1MDAyNmh1Z2VfemVyb19yZWZjb3VudCwgMik7XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZodWdlX3plcm9fbG9jayk7XFxuIFxcbi1cXHQvKiBXZSB0YWtlIGFkZGl0aW9uYWwgcmVmZXJlbmNlIGhlcmUuIEl0IHdpbGwgYmUgcHV0IGJhY2sgYnkgc2hyaW5rZXIgKi9cXG4tXFx0YXRvbWljX3NldChcXHUwMDI2aHVnZV96ZXJvX3JlZmNvdW50LCAyKTtcXG4tXFx0cHJlZW1wdF9lbmFibGUoKTtcXG4gXFx0Y291bnRfdm1fZXZlbnQoVEhQX1pFUk9fUEFHRV9BTExPQyk7XFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuQEAgLTI1OCwxNCArMzA2LDU5IEBAIHN0YXRpYyB2b2lkIHB1dF9odWdlX3plcm9fZm9saW8odm9pZClcXG4gXFx0ICogQ291bnRlciBzaG91bGQgbmV2ZXIgZ28gdG8gemVybyBoZXJlLiBPbmx5IHNocmlua2VyIGNhbiBwdXRcXG4gXFx0ICogbGFzdCByZWZlcmVuY2UuXFxuIFxcdCAqL1xcbi1cXHRCVUdfT04oYXRvbWljX2RlY19hbmRfdGVzdChcXHUwMDI2aHVnZV96ZXJvX3JlZmNvdW50KSk7XFxuK1xcdFdBUk5fT05fT05DRShhdG9taWNfZGVjX2FuZF90ZXN0KFxcdTAwMjZodWdlX3plcm9fcmVmY291bnQpKTtcXG4gfVxcbiBcXG4tc3RydWN0IGZvbGlvICptbV9nZXRfaHVnZV96ZXJvX2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXFxuIHtcXG4tXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPKSlcXG4tXFx0XFx0cmV0dXJuIGh1Z2VfemVyb19mb2xpbztcXG4rXFx0Lyogd2UgY2FuIGZyZWUgemVybyBwYWdlIG9ubHkgaWYgbGFzdCByZWZlcmVuY2UgcmVtYWlucyAqL1xcbitcXHRyZXR1cm4gYXRvbWljX3JlYWQoXFx1MDAyNmh1Z2VfemVyb19yZWZjb3VudCkgPT0gMSA/IEhQQUdFX1BNRF9OUiA6IDA7XFxuK31cXG4rXFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXFxuK3tcXG4rXFx0c3RydWN0IGZvbGlvICp6ZXJvX2ZvbGlvO1xcbitcXG4rXFx0LyogUGFpcmVkIHdpdGggY3JpdGljYWwgc2VjdGlvbiBpbiBnZXRfaHVnZV96ZXJvX2ZvbGlvKCkuICovXFxuK1xcdHNjb3BlZF9ndWFyZChzcGlubG9jaywgXFx1MDAyNmh1Z2VfemVyb19sb2NrKSB7XFxuK1xcdFxcdC8qIFBhaXJlZCB3aXRoIGF0b21pY19pbmNfbm90X3plcm8oKSBpbiBnZXRfaHVnZV96ZXJvX2ZvbGlvKCkuICovXFxuK1xcdFxcdGlmIChhdG9taWNfY21weGNoZyhcXHUwMDI2aHVnZV96ZXJvX3JlZmNvdW50LCAxLCAwKSAhPSAxKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdFxcdHplcm9fZm9saW8gPSBodWdlX3plcm9fZm9saW87XFxuK1xcdFxcdFZNX1dBUk5fT05fT05DRSghaHVnZV96ZXJvX2ZvbGlvKTtcXG4rXFx0XFx0V1JJVEVfT05DRShodWdlX3plcm9fZm9saW8sIE5VTEwpO1xcbitcXHRcXHRXUklURV9PTkNFKGh1Z2VfemVyb19wZm4sIEhVR0VfWkVST19VTlNFVF9QRk4pO1xcbitcXHR9XFxuIFxcbitcXHRmb2xpb19wdXQoemVyb19mb2xpbyk7XFxuK1xcdHJldHVybiBIUEFHRV9QTURfTlI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgX19pbml0IGh1Z2VfemVyb19pbml0KHZvaWQpXFxuK3tcXG4rXFx0aHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyID0gc2hyaW5rZXJfYWxsb2MoMCwgXFxcInRocC16ZXJvXFxcIik7XFxuK1xcdGlmICghaHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyKSB7XFxuK1xcdFxcdHNocmlua2VyX2ZyZWUoZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIpO1xcbitcXHRcXHRsaXN0X2xydV9kZXN0cm95KFxcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUpO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0aHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyLVxcdTAwM2Vjb3VudF9vYmplY3RzID0gc2hyaW5rX2h1Z2VfemVyb19mb2xpb19jb3VudDtcXG4rXFx0aHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyLVxcdTAwM2VzY2FuX29iamVjdHMgPSBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW47XFxuK1xcdHNocmlua2VyX3JlZ2lzdGVyKGh1Z2VfemVyb19mb2xpb19zaHJpbmtlcik7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBfX2luaXQgaHVnZV96ZXJvX3Nocmlua2VyX2V4aXQodm9pZClcXG4re1xcbitcXHRzaHJpbmtlcl9mcmVlKGh1Z2VfemVyb19mb2xpb19zaHJpbmtlcik7XFxuK31cXG4rXFxuK3N0cnVjdCBmb2xpbyAqbW1fZ2V0X2h1Z2VfemVyb19mb2xpbyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4re1xcbiBcXHRpZiAobW1fZmxhZ3NfdGVzdChNTUZfSFVHRV9aRVJPX0ZPTElPLCBtbSkpXFxuIFxcdFxcdHJldHVybiBSRUFEX09OQ0UoaHVnZV96ZXJvX2ZvbGlvKTtcXG4gXFxuQEAgLTI4MCwzNSArMzczLDEwIEBAIHN0cnVjdCBmb2xpbyAqbW1fZ2V0X2h1Z2VfemVyb19mb2xpbyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4gXFxuIHZvaWQgbW1fcHV0X2h1Z2VfemVyb19mb2xpbyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4ge1xcbi1cXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU8pKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbiBcXHRpZiAobW1fZmxhZ3NfdGVzdChNTUZfSFVHRV9aRVJPX0ZPTElPLCBtbSkpXFxuIFxcdFxcdHB1dF9odWdlX3plcm9fZm9saW8oKTtcXG4gfVxcbi1cXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxcbi17XFxuLVxcdC8qIHdlIGNhbiBmcmVlIHplcm8gcGFnZSBvbmx5IGlmIGxhc3QgcmVmZXJlbmNlIHJlbWFpbnMgKi9cXG4tXFx0cmV0dXJuIGF0b21pY19yZWFkKFxcdTAwMjZodWdlX3plcm9fcmVmY291bnQpID09IDEgPyBIUEFHRV9QTURfTlIgOiAwO1xcbi19XFxuLVxcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxcbi17XFxuLVxcdGlmIChhdG9taWNfY21weGNoZyhcXHUwMDI2aHVnZV96ZXJvX3JlZmNvdW50LCAxLCAwKSA9PSAxKSB7XFxuLVxcdFxcdHN0cnVjdCBmb2xpbyAqemVyb19mb2xpbyA9IHhjaGcoXFx1MDAyNmh1Z2VfemVyb19mb2xpbywgTlVMTCk7XFxuLVxcdFxcdEJVR19PTih6ZXJvX2ZvbGlvID09IE5VTEwpO1xcbi1cXHRcXHRXUklURV9PTkNFKGh1Z2VfemVyb19wZm4sIH4wVUwpO1xcbi1cXHRcXHRmb2xpb19wdXQoemVyb19mb2xpbyk7XFxuLVxcdFxcdHJldHVybiBIUEFHRV9QTURfTlI7XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbi1zdGF0aWMgc3RydWN0IHNocmlua2VyICpodWdlX3plcm9fZm9saW9fc2hyaW5rZXI7XFxuKyNlbmRpZiAvKiBDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU8gKi9cXG4gXFxuICNpZmRlZiBDT05GSUdfU1lTRlNcXG4gc3RhdGljIHNzaXplX3QgZW5hYmxlZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbkBAIC05NzIsMzkgKzEwNDAsMTQgQEAgc3RhdGljIGludCBfX2luaXQgdGhwX3Nocmlua2VyX2luaXQodm9pZClcXG4gXFx0ZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXItXFx1MDAzZXNjYW5fb2JqZWN0cyA9IGRlZmVycmVkX3NwbGl0X3NjYW47XFxuIFxcdHNocmlua2VyX3JlZ2lzdGVyKGRlZmVycmVkX3NwbGl0X3Nocmlua2VyKTtcXG4gXFxuLVxcdGlmIChJU19FTkFCTEVEKENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJTykpIHtcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogQnVtcCB0aGUgcmVmZXJlbmNlIG9mIHRoZSBodWdlX3plcm9fZm9saW8gYW5kIGRvIG5vdFxcbi1cXHRcXHQgKiBpbml0aWFsaXplIHRoZSBzaHJpbmtlci5cXG4tXFx0XFx0ICpcXG4tXFx0XFx0ICogaHVnZV96ZXJvX2ZvbGlvIHdpbGwgYWx3YXlzIGJlIE5VTEwgb24gZmFpbHVyZS4gV2UgYXNzdW1lXFxuLVxcdFxcdCAqIHRoYXQgZ2V0X2h1Z2VfemVyb19mb2xpbygpIHdpbGwgbW9zdCBsaWtlbHkgbm90IGZhaWwgYXNcXG4tXFx0XFx0ICogdGhwX3Nocmlua2VyX2luaXQoKSBpcyBpbnZva2VkIGVhcmx5IG9uIGR1cmluZyBib290Llxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0aWYgKCFnZXRfaHVnZV96ZXJvX2ZvbGlvKCkpXFxuLVxcdFxcdFxcdHByX3dhcm4oXFxcIkFsbG9jYXRpbmcgcGVyc2lzdGVudCBodWdlIHplcm8gZm9saW8gZmFpbGVkXFxcXG5cXFwiKTtcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcdH1cXG4tXFxuLVxcdGh1Z2VfemVyb19mb2xpb19zaHJpbmtlciA9IHNocmlua2VyX2FsbG9jKDAsIFxcXCJ0aHAtemVyb1xcXCIpO1xcbi1cXHRpZiAoIWh1Z2VfemVyb19mb2xpb19zaHJpbmtlcikge1xcbi1cXHRcXHRzaHJpbmtlcl9mcmVlKGRlZmVycmVkX3NwbGl0X3Nocmlua2VyKTtcXG4tXFx0XFx0bGlzdF9scnVfZGVzdHJveShcXHUwMDI2ZGVmZXJyZWRfc3BsaXRfbHJ1KTtcXG4tXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLVxcdH1cXG4tXFxuLVxcdGh1Z2VfemVyb19mb2xpb19zaHJpbmtlci1cXHUwMDNlY291bnRfb2JqZWN0cyA9IHNocmlua19odWdlX3plcm9fZm9saW9fY291bnQ7XFxuLVxcdGh1Z2VfemVyb19mb2xpb19zaHJpbmtlci1cXHUwMDNlc2Nhbl9vYmplY3RzID0gc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuO1xcbi1cXHRzaHJpbmtlcl9yZWdpc3RlcihodWdlX3plcm9fZm9saW9fc2hyaW5rZXIpO1xcbi1cXG4tXFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiBodWdlX3plcm9faW5pdCgpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBfX2luaXQgdGhwX3Nocmlua2VyX2V4aXQodm9pZClcXG4ge1xcbi1cXHRzaHJpbmtlcl9mcmVlKGh1Z2VfemVyb19mb2xpb19zaHJpbmtlcik7XFxuIFxcdHNocmlua2VyX2ZyZWUoZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXIpO1xcbiBcXHRsaXN0X2xydV9kZXN0cm95KFxcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUpO1xcbitcXHRodWdlX3plcm9fc2hyaW5rZXJfZXhpdCgpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IF9faW5pdCBodWdlcGFnZV9pbml0KHZvaWQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDExOjIyOjE5LjI2OTU2MjEyNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjYzNjk5NDIxMTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibW1fZ2V0X2h1Z2VfemVyb19mb2xpb1wiLFxuICAgIFwibW1fcHV0X2h1Z2VfemVyb19mb2xpb1wiLFxuICAgIFwic2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuXCIsXG4gICAgXCJzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX2NvdW50XCIsXG4gICAgXCJhbGxvY19odWdlX3plcm9fZm9saW9cIixcbiAgICBcImdldF9odWdlX3plcm9fZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGFsbG9jYXRpb24gYW5kIG1hbmFnZW1lbnQgb2YgdGhlIGh1Z2UgemVybyBmb2xpbyBpbiBUSFAgKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMpLCBpbnRyb2R1Y2luZyBhIHNwaW5sb2NrIHRvIGZpeCByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIGFsbG9jYXRpb24gYW5kIHNocmlua2luZyB3aGVuIENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJTyBpcyBkaXNhYmxlZC4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGFuZCBpcyByZWFjaGFibGUgdmlhIHBhZ2UgZmF1bHRzIGFuZCBtZW1vcnkgcHJlc3N1cmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDE0OTYzYTVhNjY0MWJiYTZhNGM0NjZjYjFhYzdlODQxY2Q1MzU2YjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAyOSAxMToyMjoxNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCAwMzI3MDJhNDYzN2JhLi5hY2VlMmQyOGI5YmJjIDEwMDY0NFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xuQEAgLTQxLDYgKzQxLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wZ2FsbG9jLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wZ2FsbG9jX3RhZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZXdhbGsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2FzbS90bGIuaFx1MDAzZVxuICNpbmNsdWRlIFwiaW50ZXJuYWwuaFwiXG5AQCAtNzcsOSArNzgsMTUgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGVmZXJyZWRfc3BsaXRfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcbiBcdFx0XHRcdFx0IHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpO1xuIHN0YXRpYyBib29sIHNwbGl0X3VuZGVydXNlZF90aHAgPSB0cnVlO1xuIFxuLXN0YXRpYyBhdG9taWNfdCBodWdlX3plcm9fcmVmY291bnQ7XG4rI2RlZmluZSBIVUdFX1pFUk9fVU5TRVRfUEZOICh+MFVMKVxuIHN0cnVjdCBmb2xpbyAqaHVnZV96ZXJvX2ZvbGlvIF9fcmVhZF9tb3N0bHk7XG4tdW5zaWduZWQgbG9uZyBodWdlX3plcm9fcGZuIF9fcmVhZF9tb3N0bHkgPSB+MFVMO1xuK3Vuc2lnbmVkIGxvbmcgaHVnZV96ZXJvX3BmbiBfX3JlYWRfbW9zdGx5ID0gSFVHRV9aRVJPX1VOU0VUX1BGTjtcbisjaWZuZGVmIENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT1xuK3N0YXRpYyBhdG9taWNfdCBodWdlX3plcm9fcmVmY291bnQ7XG4rc3RhdGljIERFRklORV9TUElOTE9DSyhodWdlX3plcm9fbG9jayk7XG4rc3RhdGljIHN0cnVjdCBzaHJpbmtlciAqaHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyO1xuKyNlbmRpZlxuK1xuIHVuc2lnbmVkIGxvbmcgaHVnZV9hbm9uX29yZGVyc19hbHdheXMgX19yZWFkX21vc3RseTtcbiB1bnNpZ25lZCBsb25nIGh1Z2VfYW5vbl9vcmRlcnNfbWFkdmlzZSBfX3JlYWRfbW9zdGx5O1xuIHVuc2lnbmVkIGxvbmcgaHVnZV9hbm9uX29yZGVyc19pbmhlcml0IF9fcmVhZF9tb3N0bHk7XG5AQCAtMjIxLDMzICsyMjgsNzQgQEAgdW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdHJldHVybiBvcmRlcnM7XG4gfVxuIFxuLXN0YXRpYyBib29sIGdldF9odWdlX3plcm9fZm9saW8odm9pZClcbitzdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19odWdlX3plcm9fZm9saW8odm9pZClcbiB7XG4gXHRzdHJ1Y3QgZm9saW8gKnplcm9fZm9saW87XG4tcmV0cnk6XG4tXHRpZiAobGlrZWx5KGF0b21pY19pbmNfbm90X3plcm8oXHUwMDI2aHVnZV96ZXJvX3JlZmNvdW50KSkpXG4tXHRcdHJldHVybiB0cnVlO1xuIFxuIFx0emVyb19mb2xpbyA9IGZvbGlvX2FsbG9jKChHRlBfVFJBTlNIVUdFIHwgX19HRlBfWkVSTyB8IF9fR0ZQX1pFUk9UQUdTKSBcdTAwMjZcbiBcdFx0XHRcdCB+X19HRlBfTU9WQUJMRSxcbiBcdFx0XHRIUEFHRV9QTURfT1JERVIpO1xuIFx0aWYgKCF6ZXJvX2ZvbGlvKSB7XG4gXHRcdGNvdW50X3ZtX2V2ZW50KFRIUF9aRVJPX1BBR0VfQUxMT0NfRkFJTEVEKTtcbi1cdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcdGZvbGlvX2NsZWFyX2xhcmdlX3JtYXBwYWJsZSh6ZXJvX2ZvbGlvKTsgLyogRXhwbGljaXRseSBub3Qgcm1hcHBhYmxlLiAqL1xuK1x0cmV0dXJuIHplcm9fZm9saW87XG4rfVxuK1xuKyNpZmRlZiBDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9cbitzdGF0aWMgaW50IF9faW5pdCBodWdlX3plcm9faW5pdCh2b2lkKVxuK3tcbitcdGh1Z2VfemVyb19mb2xpbyA9IGFsbG9jX2h1Z2VfemVyb19mb2xpbygpO1xuK1x0aWYgKCFodWdlX3plcm9fZm9saW8pIHtcbitcdFx0cHJfd2FybihcIkFsbG9jYXRpbmcgcGVyc2lzdGVudCBodWdlIHplcm8gZm9saW8gZmFpbGVkXFxuXCIpO1xuK1x0fSBlbHNlIHtcbitcdFx0aHVnZV96ZXJvX3BmbiA9IGZvbGlvX3BmbihodWdlX3plcm9fZm9saW8pO1xuK1x0XHRjb3VudF92bV9ldmVudChUSFBfWkVST19QQUdFX0FMTE9DKTtcbiBcdH1cbi1cdC8qIEVuc3VyZSB6ZXJvIGZvbGlvIHdvbid0IGhhdmUgbGFyZ2Vfcm1hcHBhYmxlIGZsYWcgc2V0LiAqL1xuLVx0Zm9saW9fY2xlYXJfbGFyZ2Vfcm1hcHBhYmxlKHplcm9fZm9saW8pO1xuLVx0cHJlZW1wdF9kaXNhYmxlKCk7XG4tXHRpZiAoY21weGNoZyhcdTAwMjZodWdlX3plcm9fZm9saW8sIE5VTEwsIHplcm9fZm9saW8pKSB7XG4tXHRcdHByZWVtcHRfZW5hYmxlKCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgX19pbml0IGh1Z2VfemVyb19zaHJpbmtlcl9leGl0KHZvaWQpXG4re1xuK31cbitcbitzdHJ1Y3QgZm9saW8gKm1tX2dldF9odWdlX3plcm9fZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4re1xuK1x0cmV0dXJuIGh1Z2VfemVyb19mb2xpbztcbit9XG4rXG4rdm9pZCBtbV9wdXRfaHVnZV96ZXJvX2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuK3tcbit9XG4rI2Vsc2VcbitzdGF0aWMgYm9vbCBnZXRfaHVnZV96ZXJvX2ZvbGlvKHZvaWQpXG4re1xuK1x0c3RydWN0IGZvbGlvICp6ZXJvX2ZvbGlvO1xuK1xuK1x0LyogUGFpcmVkIHdpdGggYXRvbWljX3NldF9yZWxlYXNlKCkuICovXG4rXHRpZiAobGlrZWx5KGF0b21pY19pbmNfbm90X3plcm8oXHUwMDI2aHVnZV96ZXJvX3JlZmNvdW50KSkpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0emVyb19mb2xpbyA9IGFsbG9jX2h1Z2VfemVyb19mb2xpbygpO1xuK1x0aWYgKHVubGlrZWx5KCF6ZXJvX2ZvbGlvKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0LyogUGFpcmVkIHdpdGggY3JpdGljYWwgc2VjdGlvbiBpbiBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW4oKS4gKi9cbitcdHNwaW5fbG9jayhcdTAwMjZodWdlX3plcm9fbG9jayk7XG4rXHRpZiAoaHVnZV96ZXJvX2ZvbGlvKSB7XG4rXHRcdC8qIFNvbWVib2R5IGVsc2UgYWxyZWFkeSBpbnN0YWxsZWQgaXQuICovXG4rXHRcdGF0b21pY19pbmMoXHUwMDI2aHVnZV96ZXJvX3JlZmNvdW50KTtcbitcdFx0c3Bpbl91bmxvY2soXHUwMDI2aHVnZV96ZXJvX2xvY2spO1xuIFx0XHRmb2xpb19wdXQoemVyb19mb2xpbyk7XG4tXHRcdGdvdG8gcmV0cnk7XG4rXHRcdHJldHVybiB0cnVlO1xuIFx0fVxuK1x0V1JJVEVfT05DRShodWdlX3plcm9fZm9saW8sIHplcm9fZm9saW8pO1xuIFx0V1JJVEVfT05DRShodWdlX3plcm9fcGZuLCBmb2xpb19wZm4oemVyb19mb2xpbykpO1xuK1x0LyogUGFpcmVkIHdpdGggYXRvbWljX2luY19ub3RfemVybygpLiArMSBmb3Igc2hyaW5rZXIgcGluLiAqL1xuK1x0YXRvbWljX3NldF9yZWxlYXNlKFx1MDAyNmh1Z2VfemVyb19yZWZjb3VudCwgMik7XG4rXHRzcGluX3VubG9jayhcdTAwMjZodWdlX3plcm9fbG9jayk7XG4gXG4tXHQvKiBXZSB0YWtlIGFkZGl0aW9uYWwgcmVmZXJlbmNlIGhlcmUuIEl0IHdpbGwgYmUgcHV0IGJhY2sgYnkgc2hyaW5rZXIgKi9cbi1cdGF0b21pY19zZXQoXHUwMDI2aHVnZV96ZXJvX3JlZmNvdW50LCAyKTtcbi1cdHByZWVtcHRfZW5hYmxlKCk7XG4gXHRjb3VudF92bV9ldmVudChUSFBfWkVST19QQUdFX0FMTE9DKTtcbiBcdHJldHVybiB0cnVlO1xuIH1cbkBAIC0yNTgsMTQgKzMwNiw1OSBAQCBzdGF0aWMgdm9pZCBwdXRfaHVnZV96ZXJvX2ZvbGlvKHZvaWQpXG4gXHQgKiBDb3VudGVyIHNob3VsZCBuZXZlciBnbyB0byB6ZXJvIGhlcmUuIE9ubHkgc2hyaW5rZXIgY2FuIHB1dFxuIFx0ICogbGFzdCByZWZlcmVuY2UuXG4gXHQgKi9cbi1cdEJVR19PTihhdG9taWNfZGVjX2FuZF90ZXN0KFx1MDAyNmh1Z2VfemVyb19yZWZjb3VudCkpO1xuK1x0V0FSTl9PTl9PTkNFKGF0b21pY19kZWNfYW5kX3Rlc3QoXHUwMDI2aHVnZV96ZXJvX3JlZmNvdW50KSk7XG4gfVxuIFxuLXN0cnVjdCBmb2xpbyAqbW1fZ2V0X2h1Z2VfemVyb19mb2xpbyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxuK1x0XHRcdFx0XHRcdCAgc3RydWN0IHNocmlua19jb250cm9sICpzYylcbiB7XG4tXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU8pKVxuLVx0XHRyZXR1cm4gaHVnZV96ZXJvX2ZvbGlvO1xuK1x0Lyogd2UgY2FuIGZyZWUgemVybyBwYWdlIG9ubHkgaWYgbGFzdCByZWZlcmVuY2UgcmVtYWlucyAqL1xuK1x0cmV0dXJuIGF0b21pY19yZWFkKFx1MDAyNmh1Z2VfemVyb19yZWZjb3VudCkgPT0gMSA/IEhQQUdFX1BNRF9OUiA6IDA7XG4rfVxuK1xuK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcbitcdFx0XHRcdFx0XHQgc3RydWN0IHNocmlua19jb250cm9sICpzYylcbit7XG4rXHRzdHJ1Y3QgZm9saW8gKnplcm9fZm9saW87XG4rXG4rXHQvKiBQYWlyZWQgd2l0aCBjcml0aWNhbCBzZWN0aW9uIGluIGdldF9odWdlX3plcm9fZm9saW8oKS4gKi9cbitcdHNjb3BlZF9ndWFyZChzcGlubG9jaywgXHUwMDI2aHVnZV96ZXJvX2xvY2spIHtcbitcdFx0LyogUGFpcmVkIHdpdGggYXRvbWljX2luY19ub3RfemVybygpIGluIGdldF9odWdlX3plcm9fZm9saW8oKS4gKi9cbitcdFx0aWYgKGF0b21pY19jbXB4Y2hnKFx1MDAyNmh1Z2VfemVyb19yZWZjb3VudCwgMSwgMCkgIT0gMSlcbitcdFx0XHRyZXR1cm4gMDtcbitcbitcdFx0emVyb19mb2xpbyA9IGh1Z2VfemVyb19mb2xpbztcbitcdFx0Vk1fV0FSTl9PTl9PTkNFKCFodWdlX3plcm9fZm9saW8pO1xuK1x0XHRXUklURV9PTkNFKGh1Z2VfemVyb19mb2xpbywgTlVMTCk7XG4rXHRcdFdSSVRFX09OQ0UoaHVnZV96ZXJvX3BmbiwgSFVHRV9aRVJPX1VOU0VUX1BGTik7XG4rXHR9XG4gXG4rXHRmb2xpb19wdXQoemVyb19mb2xpbyk7XG4rXHRyZXR1cm4gSFBBR0VfUE1EX05SO1xuK31cbitcbitzdGF0aWMgaW50IF9faW5pdCBodWdlX3plcm9faW5pdCh2b2lkKVxuK3tcbitcdGh1Z2VfemVyb19mb2xpb19zaHJpbmtlciA9IHNocmlua2VyX2FsbG9jKDAsIFwidGhwLXplcm9cIik7XG4rXHRpZiAoIWh1Z2VfemVyb19mb2xpb19zaHJpbmtlcikge1xuK1x0XHRzaHJpbmtlcl9mcmVlKGRlZmVycmVkX3NwbGl0X3Nocmlua2VyKTtcbitcdFx0bGlzdF9scnVfZGVzdHJveShcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUpO1xuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcbitcdGh1Z2VfemVyb19mb2xpb19zaHJpbmtlci1cdTAwM2Vjb3VudF9vYmplY3RzID0gc2hyaW5rX2h1Z2VfemVyb19mb2xpb19jb3VudDtcbitcdGh1Z2VfemVyb19mb2xpb19zaHJpbmtlci1cdTAwM2VzY2FuX29iamVjdHMgPSBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW47XG4rXHRzaHJpbmtlcl9yZWdpc3RlcihodWdlX3plcm9fZm9saW9fc2hyaW5rZXIpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIF9faW5pdCBodWdlX3plcm9fc2hyaW5rZXJfZXhpdCh2b2lkKVxuK3tcbitcdHNocmlua2VyX2ZyZWUoaHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyKTtcbit9XG4rXG4rc3RydWN0IGZvbGlvICptbV9nZXRfaHVnZV96ZXJvX2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuK3tcbiBcdGlmIChtbV9mbGFnc190ZXN0KE1NRl9IVUdFX1pFUk9fRk9MSU8sIG1tKSlcbiBcdFx0cmV0dXJuIFJFQURfT05DRShodWdlX3plcm9fZm9saW8pO1xuIFxuQEAgLTI4MCwzNSArMzczLDEwIEBAIHN0cnVjdCBmb2xpbyAqbW1fZ2V0X2h1Z2VfemVyb19mb2xpbyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBcbiB2b2lkIG1tX3B1dF9odWdlX3plcm9fZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4ge1xuLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPKSlcbi1cdFx0cmV0dXJuO1xuLVxuIFx0aWYgKG1tX2ZsYWdzX3Rlc3QoTU1GX0hVR0VfWkVST19GT0xJTywgbW0pKVxuIFx0XHRwdXRfaHVnZV96ZXJvX2ZvbGlvKCk7XG4gfVxuLVxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19odWdlX3plcm9fZm9saW9fY291bnQoc3RydWN0IHNocmlua2VyICpzaHJpbmssXG4tXHRcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuLXtcbi1cdC8qIHdlIGNhbiBmcmVlIHplcm8gcGFnZSBvbmx5IGlmIGxhc3QgcmVmZXJlbmNlIHJlbWFpbnMgKi9cbi1cdHJldHVybiBhdG9taWNfcmVhZChcdTAwMjZodWdlX3plcm9fcmVmY291bnQpID09IDEgPyBIUEFHRV9QTURfTlIgOiAwO1xuLX1cbi1cbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssXG4tXHRcdFx0XHRcdFx0IHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXG4te1xuLVx0aWYgKGF0b21pY19jbXB4Y2hnKFx1MDAyNmh1Z2VfemVyb19yZWZjb3VudCwgMSwgMCkgPT0gMSkge1xuLVx0XHRzdHJ1Y3QgZm9saW8gKnplcm9fZm9saW8gPSB4Y2hnKFx1MDAyNmh1Z2VfemVyb19mb2xpbywgTlVMTCk7XG4tXHRcdEJVR19PTih6ZXJvX2ZvbGlvID09IE5VTEwpO1xuLVx0XHRXUklURV9PTkNFKGh1Z2VfemVyb19wZm4sIH4wVUwpO1xuLVx0XHRmb2xpb19wdXQoemVyb19mb2xpbyk7XG4tXHRcdHJldHVybiBIUEFHRV9QTURfTlI7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIHN0cnVjdCBzaHJpbmtlciAqaHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyO1xuKyNlbmRpZiAvKiBDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU8gKi9cbiBcbiAjaWZkZWYgQ09ORklHX1NZU0ZTXG4gc3RhdGljIHNzaXplX3QgZW5hYmxlZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuQEAgLTk3MiwzOSArMTA0MCwxNCBAQCBzdGF0aWMgaW50IF9faW5pdCB0aHBfc2hyaW5rZXJfaW5pdCh2b2lkKVxuIFx0ZGVmZXJyZWRfc3BsaXRfc2hyaW5rZXItXHUwMDNlc2Nhbl9vYmplY3RzID0gZGVmZXJyZWRfc3BsaXRfc2NhbjtcbiBcdHNocmlua2VyX3JlZ2lzdGVyKGRlZmVycmVkX3NwbGl0X3Nocmlua2VyKTtcbiBcbi1cdGlmIChJU19FTkFCTEVEKENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJTykpIHtcbi1cdFx0Lypcbi1cdFx0ICogQnVtcCB0aGUgcmVmZXJlbmNlIG9mIHRoZSBodWdlX3plcm9fZm9saW8gYW5kIGRvIG5vdFxuLVx0XHQgKiBpbml0aWFsaXplIHRoZSBzaHJpbmtlci5cbi1cdFx0ICpcbi1cdFx0ICogaHVnZV96ZXJvX2ZvbGlvIHdpbGwgYWx3YXlzIGJlIE5VTEwgb24gZmFpbHVyZS4gV2UgYXNzdW1lXG4tXHRcdCAqIHRoYXQgZ2V0X2h1Z2VfemVyb19mb2xpbygpIHdpbGwgbW9zdCBsaWtlbHkgbm90IGZhaWwgYXNcbi1cdFx0ICogdGhwX3Nocmlua2VyX2luaXQoKSBpcyBpbnZva2VkIGVhcmx5IG9uIGR1cmluZyBib290LlxuLVx0XHQgKi9cbi1cdFx0aWYgKCFnZXRfaHVnZV96ZXJvX2ZvbGlvKCkpXG4tXHRcdFx0cHJfd2FybihcIkFsbG9jYXRpbmcgcGVyc2lzdGVudCBodWdlIHplcm8gZm9saW8gZmFpbGVkXFxuXCIpO1xuLVx0XHRyZXR1cm4gMDtcbi1cdH1cbi1cbi1cdGh1Z2VfemVyb19mb2xpb19zaHJpbmtlciA9IHNocmlua2VyX2FsbG9jKDAsIFwidGhwLXplcm9cIik7XG4tXHRpZiAoIWh1Z2VfemVyb19mb2xpb19zaHJpbmtlcikge1xuLVx0XHRzaHJpbmtlcl9mcmVlKGRlZmVycmVkX3NwbGl0X3Nocmlua2VyKTtcbi1cdFx0bGlzdF9scnVfZGVzdHJveShcdTAwMjZkZWZlcnJlZF9zcGxpdF9scnUpO1xuLVx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdH1cbi1cbi1cdGh1Z2VfemVyb19mb2xpb19zaHJpbmtlci1cdTAwM2Vjb3VudF9vYmplY3RzID0gc2hyaW5rX2h1Z2VfemVyb19mb2xpb19jb3VudDtcbi1cdGh1Z2VfemVyb19mb2xpb19zaHJpbmtlci1cdTAwM2VzY2FuX29iamVjdHMgPSBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW47XG4tXHRzaHJpbmtlcl9yZWdpc3RlcihodWdlX3plcm9fZm9saW9fc2hyaW5rZXIpO1xuLVxuLVx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gaHVnZV96ZXJvX2luaXQoKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19pbml0IHRocF9zaHJpbmtlcl9leGl0KHZvaWQpXG4ge1xuLVx0c2hyaW5rZXJfZnJlZShodWdlX3plcm9fZm9saW9fc2hyaW5rZXIpO1xuIFx0c2hyaW5rZXJfZnJlZShkZWZlcnJlZF9zcGxpdF9zaHJpbmtlcik7XG4gXHRsaXN0X2xydV9kZXN0cm95KFx1MDAyNmRlZmVycmVkX3NwbGl0X2xydSk7XG4rXHRodWdlX3plcm9fc2hyaW5rZXJfZXhpdCgpO1xuIH1cbiBcbiBzdGF0aWMgaW50IF9faW5pdCBodWdlcGFnZV9pbml0KHZvaWQpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMToyMjoxOS4yNjk1NjQ0MjVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTgwODU5MjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHVnZSBaZXJvIEZvbGlvIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQncyBkaWdnaW5nIGRlZXAgaW50byBgbW0vaHVnZV9tZW1vcnkuY2AuIEZyb20gdGhlIGNoYW5nZXMsIGl0IGxvb2tzIGxpa2Ugd2UncmUgcmV3b3JraW5nIGhvdyB0aGUgaHVnZSB6ZXJvIGZvbGlvIGlzIGhhbmRsZWQsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gdGhlIGBDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9gIGNvbmZpZyBvcHRpb24uIEl0J3MgdG91Y2hpbmcgc29tZSBmdW5kYW1lbnRhbCBzdHVmZiBpbiBUSFAgbWFuYWdlbWVudCwgd2hpY2ggaXMgYWx3YXlzIGEgY3JpdGljYWwgYXJlYS4gSSBzZWUgbWVudGlvbnMgb2YgYSBgaHVnZV96ZXJvX2xvY2tgIGJlaW5nIGludHJvZHVjZWQsIGFuZCBpdCBhcHBlYXJzIHRoZSBjb3JlIGZ1bmN0aW9ucyBsaWtlIGBnZXRfaHVnZV96ZXJvX2ZvbGlvYCBhbmQgYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAgYXJlIGJlaW5nIHNpZ25pZmljYW50bHkgbW9kaWZpZWQuIEdpdmVuIGl0cyBsb2NhdGlvbiwgdGhpcyBjb2RlIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLCBhbmQgZnVuY3Rpb25hbGx5IHNpZ25pZmljYW50LlxuXG5Ob3csIGxldCdzIGJyZWFrIGRvd24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGlzIHBhdGNoIGhhcyB0b3VjaGVkOlxuXG4qICAgSSBzZWUgbmV3IGZ1bmN0aW9uczogYGFsbG9jX2h1Z2VfemVyb19mb2xpb2AsIGBodWdlX3plcm9faW5pdGAsIGFuZCBgaHVnZV96ZXJvX3Nocmlua2VyX2V4aXRgLiBUaGVzZSBhcmUgbGlrZWx5IHJlbGF0ZWQgdG8gaW5pdGlhbGl6YXRpb24sIGFsbG9jYXRpb24sIGFuZCBjbGVhbnVwIG9mIHRoZXNlIHplcm8gZm9saW9zLlxuKiAgIFRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlOiBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AsIGBtbV9wdXRfaHVnZV96ZXJvX2ZvbGlvYCwgYGdldF9odWdlX3plcm9fZm9saW9gLCBgcHV0X2h1Z2VfemVyb19mb2xpb2AsIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX2NvdW50YCwgYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAsIGB0aHBfc2hyaW5rZXJfaW5pdGAgYW5kIGB0aHBfc2hyaW5rZXJfZXhpdGAuIENoYW5nZXMgdG8gdGhlIGBtbWAgcHJlZml4ZWQgZnVuY3Rpb25zIHN1Z2dlc3QgdGhhdCB0aGUgcGF0Y2ggbWF5IGJlIGNoYW5naW5nIGhvdyB0aGUgemVybyBmb2xpb3MgYXJlIHJldHJpZXZlZCBhbmQgcmVsZWFzZWQsIGFuZCBob3cgdGhlIHN5c3RlbSBpbnRlcmFjdHMgd2l0aCB0aGVtLiBUaGUgc2hyaW5raW5nIGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZCBpbmRpY2F0ZXMgc29tZSBjaGFuZ2UgdG8gdGhlIHN5c3RlbSdzIG1lbW9yeSByZWNsYW1hdGlvbiB3aGVuIHplcm8gZm9saW9zIGFyZSBpbnZvbHZlZC4gQ2hhbmdlcyB0byB0aGUgYHRocGAgZnVuY3Rpb25zIGFyZSBsaWtlbHkgdG8gaW50ZWdyYXRlIHRoZSBuZXcgZnVuY3Rpb25hbGl0eSBpbnRvIFRIUC5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGludG8gdGhlIEtjb25maWcgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIGBDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9gLiBUaGlzIHdpbGwgYmUga2V5IHRvIGRlY2lwaGVyaW5nIHRoZSBpbnRlbmRlZCBiZWhhdmlvciBvZiB0aGlzIHBhdGNoIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5MTYsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMToyMjoyNy44NTA0Mjc1MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTQzNjYxNjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTgyND1jb25maWcgQVJDSF9XQU5UU19USFBfU1dBUFxcbi0tXFxubW0vS2NvbmZpZy04MjYtXFxubW0vS2NvbmZpZzo4Mjc6Y29uZmlnIFBFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPXFxubW0vS2NvbmZpZy04MjgtXFx0Ym9vbCBcXFwiQWxsb2NhdGUgYSBQTUQgc2l6ZWQgZm9saW8gZm9yIHplcm9pbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDExOjIyOjMwLjc5NDA5ODg3M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNjc4NTQ4ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIERlcGVuZGVuY2llcyBvZiBQRVJTSVNURU5UX0hVR0VfWkVST19GT0xJTyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHdvcmsuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyYWwgaW1wbGljYXRpb25zIGhlcmUuIFRoaXMgYFBFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPYCB0aGluZy4uLiByaWdodCBvZmYgdGhlIGJhdCwgdGhhdCBuYW1lIHN1Z2dlc3RzIHNvbWUga2V5IGFzcGVjdHMuIFwiUGVyc2lzdGVudFwiIHRlbGxzIG1lIGl0J3MgbGlrZWx5IGRlYWxpbmcgd2l0aCBsb25nLXRlcm0gc3RvcmFnZSwgbWF5YmUgZXZlbiBkdXJhYmlsaXR5IGNvbmNlcm5zLiBcIkh1Z2VcIiBpcyBhIHBvaW50ZXIgdG93YXJkcyBsYXJnZSBkYXRhIHZvbHVtZXMg4oCTIHRoaW5rIGJpZyB0YWJsZXMsIGltYWdlcywgb3IgcGVyaGFwcyBleHRlbnNpdmUgZGF0YXNldHMuIEFuZCBcIlplcm9cIiBpbXBsaWVzIHNvbWUgcG90ZW50aWFsIG9wdGltaXphdGlvbiwgcGVyaGFwcyBmb3Igc2l0dWF0aW9ucyB3aGVyZSBkYXRhIGlzLCBieSBkZWZhdWx0LCBlbXB0eSBvciBzcGFyc2UgYW5kIG5lZWRzIHRvIGJlIGluaXRpYWxpemVkLiBcIkZvbGlvXCIgbGlrZWx5IGltcGxpZXMgdGhpcyBpcyBlaXRoZXIgdGhlIG5hbWUgb2YgYSBmaWxlIG9yIGEgY29sbGVjdGlvbiBvZiBmaWxlcy5cblxuU28sIHRoZSBpbW1lZGlhdGUgcXVlc3Rpb25zIEkgaGF2ZSBhcmU6IFdoYXQgc3BlY2lmaWMgdGVjaG5vbG9naWVzIGlzIHRoaXMgYnVpbHQgb24/IFdoYXQgdW5kZXJseWluZyBzdG9yYWdlIG1lY2hhbmlzbXMgYXJlIGludm9sdmVkPyBJcyBpdCB0aWVkIHRvIGEgc3BlY2lmaWMgZGF0YWJhc2Ugc3lzdGVtLCBhIGRpc3RyaWJ1dGVkIGZpbGUgc3lzdGVtLCBvciBhIGN1c3RvbSBpbi1tZW1vcnkgc3RydWN0dXJlPyBJcyBpdCByZWxpYW50IG9uIGEgcGFydGljdWxhciBwcm9ncmFtbWluZyBsYW5ndWFnZSwgbGlicmFyeSwgb3IgZnJhbWV3b3JrP1xuXG5JIGFsc28gbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBcIndoeVwiIGJlaGluZCB0aGlzLiBXaHkgaXMgdGhpcyBwZXJzaXN0ZW50PyBXaGF0J3MgdGhlIGFwcGxpY2F0aW9uIHVzZSBjYXNlIGZvciB0aGlzIHN0cnVjdHVyZT8gSXMgaXQgdXNlZCBmb3IgYXJjaGl2YWwsIGNhY2hpbmcsIHRyYW5zYWN0aW9uYWwgZGF0YSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEtub3dpbmcgdGhlIHB1cnBvc2Ugd2lsbCBpbmZvcm0gbXkgaW52ZXN0aWdhdGlvbiBpbnRvIGl0cyBkZXBlbmRlbmNpZXMuIElzIHRoaXMgdXNlZCBieSBhbiBvdXRzaWRlIHByb2dyYW0sIG9yIGJ5IHRoZSBwcm9ncmFtIHRoYXQgSSBhbSB3b3JraW5nIG9uLiBcblxuSSBzdXBwb3NlIEkgY2FuIGJlZ2luIHRvIHVucGFjayB0aGlzIGJ5IGxvb2tpbmcgYXQgdGhlIGNvZGUgZGlyZWN0bHkuIExldCdzIHNlZSB3aGF0J3MgaW1wb3J0aW5nIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NzgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMToyMjozNS4wNjE5NTU3OTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MjA6XFx0XFxuIDgyMTpcXHRjb25maWcgQVJDSF9XQU5UX0dFTkVSQUxfSFVHRVRMQlxcbiA4MjI6XFx0XFx0Ym9vbFxcbiA4MjM6XFx0XFxuIDgyNDpcXHRjb25maWcgQVJDSF9XQU5UU19USFBfU1dBUFxcbiA4MjU6XFx0XFx0ZGVmX2Jvb2wgblxcbiA4MjY6XFx0XFxuIDgyNzpcXHRjb25maWcgUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9cXG4gODI4OlxcdFxcdGJvb2wgXFxcIkFsbG9jYXRlIGEgUE1EIHNpemVkIGZvbGlvIGZvciB6ZXJvaW5nXFxcIlxcbiA4Mjk6XFx0XFx0ZGVwZW5kcyBvbiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbiA4MzA6XFx0XFx0aGVscFxcbiA4MzE6XFx0XFx0ICBFbmFibGUgdGhpcyBvcHRpb24gdG8gcmVkdWNlIHRoZSBydW50aW1lIHJlZmNvdW50aW5nIG92ZXJoZWFkXFxuIDgzMjpcXHRcXHQgIG9mIHRoZSBodWdlIHplcm8gZm9saW8gYW5kIGV4cGFuZCB0aGUgcGxhY2VzIGluIHRoZSBrZXJuZWxcXG4gODMzOlxcdFxcdCAgdGhhdCBjYW4gdXNlIGh1Z2UgemVybyBmb2xpb3MuIEZvciBpbnN0YW5jZSwgYmxvY2sgSS9PIGJlbmVmaXRzXFxuIDgzNDpcXHRcXHQgIGZyb20gYWNjZXNzIHRvIGxhcmdlIGZvbGlvcyBmb3IgemVyb2luZyBtZW1vcnkuXFxuIDgzNTpcXHRcXG4gODM2OlxcdFxcdCAgV2l0aCB0aGlzIG9wdGlvbiBlbmFibGVkLCB0aGUgaHVnZSB6ZXJvIGZvbGlvIGlzIGFsbG9jYXRlZFxcbiA4Mzc6XFx0XFx0ICBvbmNlIGFuZCBuZXZlciBmcmVlZC4gT25lIGZ1bGwgaHVnZSBwYWdlJ3Mgd29ydGggb2YgbWVtb3J5IHNoYWxsXFxuIDgzODpcXHRcXHQgIGJlIHVzZWQuXFxuIDgzOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTE6MjI6MzUuMDYyMDY1MjI2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzE0NjUxMzkzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgY29uZGl0aW9uYWwgb24gYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgc3BlY2lmaWNhbGx5IHRoZSBgQ09ORklHX1BFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPYCBmbGFnLiBJdOKAmXMgbW9kaWZ5aW5nIHRoZSBiZWhhdmlvciBhcm91bmQgYGdldF9odWdlX3plcm9fZm9saW9gIGFuZCBgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuYCAqb25seSogd2hlbiB0aGlzIHBlcnNpc3RlbnQgemVybyBmb2xpbyBmZWF0dXJlIGlzIGRpc2FibGVkLiBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBkaWZmIGFnYWluLi4uIFllcCwgdGhhdCdzIHJpZ2h0LiBUaGUga2V5IGlzIGluIHRob3NlIGAjaWZuZGVmIENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT2AgYmxvY2tzLlxuXG5Fc3NlbnRpYWxseSwgaWYgdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbiAqaXNuJ3QqIHNldCwgd2UncmUgZGVhbGluZyB3aXRoIGR5bmFtaWMgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIG9mIHRoZSB6ZXJvIGZvbGlvLiBJbiB0aGF0IHNjZW5hcmlvLCBgZ2V0X2h1Z2VfemVyb19mb2xpb2AgdXNlcyBhIHNwaW5sb2NrIChgaHVnZV96ZXJvX2xvY2tgKSB0byBwcm90ZWN0IGFnYWluc3QgcmFjZSBjb25kaXRpb25zLiBJdCBsb29rcyBsaWtlIGl0J3MgdHJ5aW5nIHRvIGluc3RhbGwgdGhlIGZvbGlvIHNhZmVseSwgYXRvbWljYWxseSBpbmNyZW1lbnRpbmcgYSByZWZlcmVuY2UgY291bnQuIFRoZSBjb21tZW50cyBvbiB0aGUgbG9jayBhcmUgdXNlZnVsIGhlcmUuXG5cbklmIGBDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9gICppcyogc2V0LCB0aGVuIHRoZSBmb2xpbyBpcyBpbml0aWFsaXplZCBvbmNlIGFuZCBuZXZlciBmcmVlZCwgYW5kIHdlIGhhdmUgYSBkaWZmZXJlbnQgbWVjaGFuaXNtIGVudGlyZWx5LlxuXG5UaGlzIGlzIGdvb2QuIEZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGlzIGNvZGUgcGF0aCBpcyBkZWZpbml0ZWx5IGEgY2FuZGlkYXRlIGZvciB0aG9yb3VnaCB0ZXN0aW5nLiBUaGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHNwaW5sb2NrIGFuZCB0aGUgYXRvbWljIG9wZXJhdGlvbnMgYXJlIHRoZSByZWQgZmxhZ3MuIEknZCB3YW50IHRvIGZvY3VzIGZ1enppbmcgYXJvdW5kIHRoZXNlIHN5bWJvbHM6IGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYCwgYG1tX3B1dF9odWdlX3plcm9fZm9saW9gLCBgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuYCwgYW5kIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX2NvdW50YC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AgaXMgZXhwb3J0ZWQgb3Igb3RoZXJ3aXNlIHJlYWNoYWJsZSBieSBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDc5LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTA5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTE6MjI6NDIuMjA4NTgyNjEzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NTUwNDU4MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW1fZ2V0X2h1Z2VfemVyb19mb2xpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9kYXguYz0xNDExPXN0YXRpYyB2bV9mYXVsdF90IGRheF9wbWRfbG9hZF9ob2xlKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tLVxcbmZzL2RheC5jLTE0MTgtXFxuZnMvZGF4LmM6MTQxOTpcXHR6ZXJvX2ZvbGlvID0gbW1fZ2V0X2h1Z2VfemVyb19mb2xpbyh2bWYtXFx1MDAzZXZtYS1cXHUwMDNldm1fbW0pO1xcbmZzL2RheC5jLTE0MjAtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD01NDk9c3RhdGljIGlubGluZSBib29sIGlzX2h1Z2VfemVyb19wbWQocG1kX3QgcG1kKVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTUzLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjU1NDpzdHJ1Y3QgZm9saW8gKm1tX2dldF9odWdlX3plcm9fZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTU1NS12b2lkIG1tX3B1dF9odWdlX3plcm9fZm9saW8oc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9ODA2PXN0YXRpYyBpbmxpbmUgaW50IHNwbGl0X2ZvbGlvX3RvX29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfb3JkZXIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC04MTMtICpcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo4MTQ6ICogVGhpcyBmdW5jdGlvbiBzaGFsbCBiZSB1c2VkIHdoZW4gbW1fZ2V0X2h1Z2VfemVyb19mb2xpbygpIGNhbm5vdCBiZVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTgxNS0gKiB1c2VkIGFzIHRoZXJlIGlzIG5vIGFwcHJvcHJpYXRlIG1tIGxpZmV0aW1lIHRvIHRpZSB0aGUgaHVnZSB6ZXJvIGZvbGlvXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTI1OT1zdGF0aWMgdm9pZCBfX2luaXQgaHVnZV96ZXJvX3Nocmlua2VyX2V4aXQodm9pZClcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjYyLVxcbm1tL2h1Z2VfbWVtb3J5LmM6MjYzOnN0cnVjdCBmb2xpbyAqbW1fZ2V0X2h1Z2VfemVyb19mb2xpbyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5tbS9odWdlX21lbW9yeS5jLTI2NC17XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTM1NT1zdGF0aWMgdm9pZCBfX2luaXQgaHVnZV96ZXJvX3Nocmlua2VyX2V4aXQodm9pZClcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzU5LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MzYwOnN0cnVjdCBmb2xpbyAqbW1fZ2V0X2h1Z2VfemVyb19mb2xpbyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5tbS9odWdlX21lbW9yeS5jLTM2MS17XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTE1MTk9dm1fZmF1bHRfdCBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTU0MS1cXHRcXHRcXHRyZXR1cm4gVk1fRkFVTFRfT09NO1xcbm1tL2h1Z2VfbWVtb3J5LmM6MTU0MjpcXHRcXHR6ZXJvX2ZvbGlvID0gbW1fZ2V0X2h1Z2VfemVyb19mb2xpbyh2bWEtXFx1MDAzZXZtX21tKTtcXG5tbS9odWdlX21lbW9yeS5jLTE1NDMtXFx0XFx0aWYgKHVubGlrZWx5KCF6ZXJvX2ZvbGlvKSkge1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xOTA3PWludCBjb3B5X2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdF9tbSwgc3RydWN0IG1tX3N0cnVjdCAqc3JjX21tLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xOTcwLVxcdFxcdC8qXFxubW0vaHVnZV9tZW1vcnkuYzoxOTcxOlxcdFxcdCAqIG1tX2dldF9odWdlX3plcm9fZm9saW8oKSB3aWxsIG5ldmVyIGFsbG9jYXRlIGEgbmV3XFxubW0vaHVnZV9tZW1vcnkuYy0xOTcyLVxcdFxcdCAqIGZvbGlvIGhlcmUsIHNpbmNlIHdlIGFscmVhZHkgaGF2ZSBhIHplcm8gcGFnZSB0b1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xOTc0LVxcdFxcdCAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6MTk3NTpcXHRcXHRtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvKGRzdF9tbSk7XFxubW0vaHVnZV9tZW1vcnkuYy0xOTc2LVxcdFxcdGdvdG8gb3V0X3plcm9fcGFnZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTE6MjI6NDQuNzYzNjM0OTM1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzkyOTc5OTA5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSHVnZSBaZXJvIEZvbGlvIFNocmlua2luZyBhbmQgQWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBodWdlIHplcm8gZm9saW8gY29kZS4gRmlyc3QsIGl0J3MgY2xlYXIgdGhhdCBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AgaXMgZGVmaW5pdGVseSByZWFjaGFibGUsIGFuZCB0aGF0IGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5gIGlzIGEgc2hyaW5rZXIgY2FsbGJhY2ssIHdoaWNoIG1lYW5zIGl0IHNob3VsZCBiZSB0cmlnZ2VyZWQgYnkgbWVtb3J5IHByZXNzdXJlLiBMZXQncyBtYWtlIHN1cmUgaXQncyBub3QgaW5saW5lOyB5ZXMsIGl0J3Mgc3RhdGljIGluIGBtbS9odWdlX21lbW9yeS5jYCwgYnV0IHNpbmNlIGl0J3MgYSBzaHJpbmtlciBjYWxsYmFjayBhbmQgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciB0byBgaHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyLVx1MDAzZXNjYW5fb2JqZWN0cyA9IHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbjtgIGl0IHdvbid0IGJlIGlubGluZWQuIFRoYXQncyBnb29kLCBhIGZ1enplciBjYW4gcG90ZW50aWFsbHkgZm9jdXMgb24gdGhpcy5cblxuTm93LCBsZXQgbWUgY2hlY2sgdGhlIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb24gYGdldF9odWdlX3plcm9fZm9saW9gLCB3aGljaCBpcyBhbHNvIHN0YXRpYyBhbmQgY2FsbGVkIGJ5IGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYCwgd2hpY2ggaW4gdHVybiBjYWxscyBpdC5cblxuVGhlIGZ1bmN0aW9ucyBJJ20gZm9jdXNpbmcgb24gYXJlOlxuXG4qICAgYG1tX2dldF9odWdlX3plcm9fZm9saW9gXG4qICAgYG1tX3B1dF9odWdlX3plcm9fZm9saW9gXG4qICAgYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmBcbiogICBgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19jb3VudGBcblxuSG9sZCBvbiBhIHNlY29uZC4uLml0IGxvb2tzIGxpa2UgYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAgYW5kIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX2NvdW50YCBhcmUgb25seSBjb21waWxlZCBpZiBgQ09ORklHX1BFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPYCBpcyAqbm90KiBzZXQuIFNvLCBpZiBJIHdhbnQgdG8gdGVzdCB0aGUgbmV3IGxvY2tpbmcgYW5kIHNocmlua2VyIGxvZ2ljLCBJICptdXN0KiBlbnN1cmUgdGhhdCBgQ09ORklHX1BFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPYCBpcyBub3QgZW5hYmxlZC4gSSBzaG91bGQgY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgdG8gc2VlIGlmIGl0IGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gSSdtIGdvaW5nIHRvIG5lZWQgdG8ga2VlcCB0aGlzIGluIG1pbmQgd2hlbiBjb25maWd1cmluZyBteSBmdXp6aW5nIGVudmlyb25tZW50IVxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjUxLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDExOjIyOjUyLjY5MzQzODM1NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUwNDcwNzUxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz04MjQ9Y29uZmlnIEFSQ0hfV0FOVFNfVEhQX1NXQVBcXG4tLVxcbm1tL0tjb25maWctODI2LVxcbm1tL0tjb25maWc6ODI3OmNvbmZpZyBQRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT1xcbm1tL0tjb25maWctODI4LVxcdGJvb2wgXFxcIkFsbG9jYXRlIGEgUE1EIHNpemVkIGZvbGlvIGZvciB6ZXJvaW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMToyMjo1NS4xOTgxNTczNDdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg4MjkzMDE2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi5cblxuKipBbmFseXppbmcgdGhlIERlZmF1bHQgQmVoYXZpb3IgYW5kIERlcGVuZGVuY2llcyoqXG5cblJpZ2h0LCBzbywgdGhlcmUncyBubyBgZGVmYXVsdCB5YCBoZXJlLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgZmVhdHVyZSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LiBUaGF0J3MgYSBnb29kIHRoaW5nLCBzaW1wbGlmaWVzIGluaXRpYWwgc2V0dXAuICBOb3csIHRoZSBiZWF1dHkgb2YgdGhpcyBpcyB0aGF0IGJlY2F1c2UgaXQncyAqZGlzYWJsZWQqIGJ5IGRlZmF1bHQsIEkgZG9uJ3QgbmVlZCB0byBnbyBvdXQgb2YgbXkgd2F5IHRvICpleHBsaWNpdGx5KiBkaXNhYmxlIGl0IGp1c3QgdG8gdmVyaWZ5IHRoZSBgI2Vsc2VgIGJyYW5jaC4gVGhhdCBzYXZlcyBtZSBhIHN0ZXAgaW4gdGhlIHRlc3RpbmcgcHJvY2Vzcywgd2hpY2ggaXMgYWx3YXlzIHdlbGNvbWUuIEhvd2V2ZXIsIGBtbS9odWdlX21lbW9yeS5jYCBoYXMgYSBkaXJlY3QgZGVwZW5kZW5jeSBvbiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCB3aGljaCAqbXVzdCogYmUgZW5hYmxlZCBmb3IgdGhlIGNvbXBpbGF0aW9uIHRvIHdvcmsuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCdzIHNldCBjb3JyZWN0bHkgZHVyaW5nIGNvbXBpbGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDQwLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTE6MjI6NTkuMDgxMDg5ODI5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDM4NzE4NTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTg0Mz1jb25maWcgTU1fSURcXG4tLVxcbm1tL0tjb25maWctODQ1LVxcbm1tL0tjb25maWc6ODQ2Om1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9LY29uZmlnLTg0Ny1cXHRib29sIFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XFxcIlxcbi0tXFxubW0vS2NvbmZpZz04NjQ9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTg2OS1cXG5tbS9LY29uZmlnOjg3MDpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXFxubW0vS2NvbmZpZy04NzEtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04NzYtXFxubW0vS2NvbmZpZzo4Nzc6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0VcXG5tbS9LY29uZmlnLTg3OC1cXHRcXHRib29sIFxcXCJtYWR2aXNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04ODUtXFxubW0vS2NvbmZpZzo4ODY6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXFxubW0vS2NvbmZpZy04ODctXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTg5Mz1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctOTAyLVxcbm1tL0tjb25maWc6OTAzOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX05FVkVSXFxubW0vS2NvbmZpZy05MDQtXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkxMi1cXG5tbS9LY29uZmlnOjkxMzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTkxNC1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkyMC1cXG5tbS9LY29uZmlnOjkyMTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9XSVRISU5fU0laRVxcbm1tL0tjb25maWctOTIyLVxcdFxcdGJvb2wgXFxcIndpdGhpbl9zaXplXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MjgtXFxubW0vS2NvbmZpZzo5Mjk6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQURWSVNFXFxubW0vS2NvbmZpZy05MzAtXFx0XFx0Ym9vbCBcXFwiYWR2aXNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZz05Mzg9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTk0Ny1cXG5tbS9LY29uZmlnOjk0ODpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9ORVZFUlxcbm1tL0tjb25maWctOTQ5LVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NTYtXFxubW0vS2NvbmZpZzo5NTc6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQUxXQVlTXFxubW0vS2NvbmZpZy05NTgtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NjQtXFxubW0vS2NvbmZpZzo5NjU6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9LY29uZmlnLTk2Ni1cXHRcXHRib29sIFxcXCJ3aXRoaW5fc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTcyLVxcbm1tL0tjb25maWc6OTczOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRVxcbm1tL0tjb25maWctOTc0LVxcdFxcdGJvb2wgXFxcImFkdmlzZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTE6MjM6MDEuNTE5ODE1OTMzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NTcyNDc4NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkVuYWJsaW5nIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyDigJMgQSBRdWljayBDaGVjayoqXG5cblJpZ2h0LCBzbyB0aGUgcGxhbiBpcyB0byBlbmFibGUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gU2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgc3RyYXRlZ3kgZ2l2ZW4gdGhlIGFwcGxpY2F0aW9uJ3MgY2hhcmFjdGVyaXN0aWNzIGFuZCBteSB1bmRlcnN0YW5kaW5nIG9mIGl0cyBtZW1vcnkgYWNjZXNzIHBhdHRlcm5zLiBCZWZvcmUgSSBjb21taXQgdG8gdGhpcywgdGhvdWdoLCBJIG5lZWQgdG8gcGVyZm9ybSBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBlbnN1cmUgdGhlIGZlYXR1cmUgaXMgYWN0dWFsbHkgY29tcGlsZWQgaW50byB0aGUga2VybmVsIGlmIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZGVmaW5lZC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgbW0vaHVnZV9tZW1vcnkuY2AgaXMgY29tcGlsZWQgY29uZGl0aW9uYWxseSBvbiB0aGF0IHZlcnkgZGVmaW5lLiBBIHF1aWNrIGdyZXAgb3IgY29kZSBuYXZpZ2F0aW9uIGludG8gdGhlIHNvdXJjZSB0cmVlIHNob3VsZCBkbyB0aGUgdHJpY2suIE5vIHBvaW50IGluIGVuYWJsaW5nIGEgZmVhdHVyZSB0aGF0IGRvZXNuJ3QgYWN0dWFsbHkgZXhpc3QgaW4gdGhlIGJ1aWxkLiBJJ2xsIG1ha2Ugc3VyZSBpdCBpcyBpbmRlZWQgYnVpbHQtaW4sIGFuZCB0aGVuLCB3ZSBjYW4gcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0MDgsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMToyMzowNC45NzcwNjc1ODRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MzYwNDUwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZV9tZW1vcnkub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICs9IG1pZ3JhdGVfZGV2aWNlLm9cXG5tbS9NYWtlZmlsZToxMDE6b2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSArPSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQub1xcbm1tL01ha2VmaWxlLTEwMi1vYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSArPSBwYWdlX2NvdW50ZXIub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOVQxMToyMzowNy42MTMxMjAyMDRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODA3NTk1MTc3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c3NpbmcgRnV6emluZyBFZmZvcnRzIG9uIEh1Z2UgWmVybyBGb2xpbyBNYW5hZ2VtZW50KipcblxuT2theSwgc28gdGhpcyBjaGFuZ2UgKmRvZXMqIGluZGVlZCByZXF1aXJlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIE5vIHF1ZXN0aW9uIGFib3V0IHRoYXQuIE5vdywgd2hlcmUgdG8gZm9jdXMgdGhlIGZ1enplcj8gQWgsIHRoZSBwYXRjaCBtb2RpZmllcyBgbW0vaHVnZV9tZW1vcnkuY2AsIHNvIHRoYXQncyB0aGUga2V5IGFyZWEuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgYWJvdXQgdGhlIG1hbmFnZW1lbnQgb2YgdGhlIGh1Z2UgemVybyBmb2xpby4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gem9vbSBpbiBvbiB0aGVzZSBmdW5jdGlvbnM6IGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYCwgYG1tX3B1dF9odWdlX3plcm9fZm9saW9gLCBhbmQgdGhlIHNocmlua2VyIGZ1bmN0aW9ucywgYHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbmAsIGFuZCBgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19jb3VudGAuXG5cbkp1c3QgZG91YmxlLWNoZWNraW5nLCBgbW1fZ2V0X2h1Z2VfemVyb19mb2xpb2AgaXNuJ3QgZXhwb3J0ZWQgdG8gbW9kdWxlcywgYnV0IGl0J3MgZ2xvYmFsLCBzbyBpdCdzIGFjY2Vzc2libGUuIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5gIGlzIHN0YXRpYywgYnV0IGl0cyBhZGRyZXNzICppcyogdGFrZW4sIHdoaWNoIG1ha2VzIGl0IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBMZXQgbWUganVzdCBjb25maXJtIHRob3NlIGZ1bmN0aW9uIG5hbWVzLi4uIHllcDpcblxuYGBgY1xuc3RydWN0IGZvbGlvICptbV9nZXRfaHVnZV96ZXJvX2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxudm9pZCBtbV9wdXRfaHVnZV96ZXJvX2ZvbGlvKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcblx0XHRcdFx0XHRcdCAgc3RydWN0IHNocmlua19jb250cm9sICpzYylcbnN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19odWdlX3plcm9fZm9saW9fc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcblx0XHRcdFx0XHRcdCBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuYGBgXG5cbkFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsZXZhbnQgZnVuY3Rpb25zLCBsZXQgbWUganVzdCBjaGVjay4uLiBZZXAsIHRoZXJlIGFyZSBgYWxsb2NfaHVnZV96ZXJvX2ZvbGlvYCBhbmQgYGdldF9odWdlX3plcm9fZm9saW9gLiBJIHNob3VsZCBkZWZpbml0ZWx5IGFkZCB0aG9zZSB0byB0aGUgbGlzdCBhcyB3ZWxsLlxuXG5BbHJpZ2h0LCB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGlzIGlzIHRoYXQgdGhpcyBwYXRjaCByZWZhY3RvcnMgdGhlIGFsbG9jYXRpb24gYW5kIG1hbmFnZW1lbnQgb2YgaHVnZSB6ZXJvIGZvbGlvcyB3aXRoaW4gVEhQLiBUaGVyZSdzIGEgc3BpbmxvY2sgKGBodWdlX3plcm9fbG9ja2ApIG5vdyB0byBhZGRyZXNzIHJhY2UgY29uZGl0aW9ucyB0aGF0IGFwcGVhciB3aGVuIGFsbG9jYXRpb24gYW5kIHNocmlua2luZyBpcyBlbmFibGVkIHdoZW4gYENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT2AgaXMgZGlzYWJsZWQuIFRoYXQgbWVhbnMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYy4gUGFnZSBmYXVsdHMgYW5kIG1lbW9yeSBwcmVzc3VyZSB0aHJvdWdoIHRoZSBzaHJpbmtlciBwYXRoIGFyZSBnb2luZyB0byBiZSBrZXkgZW50cnkgcG9pbnRzLiBTbyB0aGUgaGlnaCBwcmlvcml0eSBjb25maWdzIHRvIGVuYWJsZSBhcmUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC5cblxuU28sIHRoZSBmb2N1cyBzeW1ib2xzIGFyZTogYG1tX2dldF9odWdlX3plcm9fZm9saW9gLCBgbW1fcHV0X2h1Z2VfemVyb19mb2xpb2AsIGBzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX3NjYW5gLCBgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19jb3VudGAsIGBhbGxvY19odWdlX3plcm9fZm9saW9gLCBhbmQgYGdldF9odWdlX3plcm9fZm9saW9gLlxuXG5KdXN0IGEgc2FuaXR5IGNoZWNrOiBJIHNob3VsZCBjaGVjayB0byBzZWUgaWYgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBoYXMgYW55IGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3NTMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTE6MjM6MTUuNjg5MDc1NThaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzODY5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg0NixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg0NjpcXHRtZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuIDg0NzpcXHRcXHRib29sIFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XFxcIlxcbiA4NDg6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UgXFx1MDAyNlxcdTAwMjYgIVBSRUVNUFRfUlRcXG4gODQ5OlxcdFxcdHNlbGVjdCBDT01QQUNUSU9OXFxuIDg1MDpcXHRcXHRzZWxlY3QgWEFSUkFZX01VTFRJXFxuIDg1MTpcXHRcXHRzZWxlY3QgTU1fSURcXG4gODUyOlxcdFxcdGhlbHBcXG4gODUzOlxcdFxcdCAgVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIGFsbG93cyB0aGUga2VybmVsIHRvIHVzZSBodWdlIHBhZ2VzIGFuZFxcbiA4NTQ6XFx0XFx0ICBodWdlIHRsYiB0cmFuc3BhcmVudGx5IHRvIHRoZSBhcHBsaWNhdGlvbnMgd2hlbmV2ZXIgcG9zc2libGUuXFxuIDg1NTpcXHRcXHQgIFRoaXMgZmVhdHVyZSBjYW4gaW1wcm92ZSBjb21wdXRpbmcgcGVyZm9ybWFuY2UgdG8gY2VydGFpblxcbiA4NTY6XFx0XFx0ICBhcHBsaWNhdGlvbnMgYnkgc3BlZWRpbmcgdXAgcGFnZSBmYXVsdHMgZHVyaW5nIG1lbW9yeVxcbiA4NTc6XFx0XFx0ICBhbGxvY2F0aW9uLCBieSByZWR1Y2luZyB0aGUgbnVtYmVyIG9mIHRsYiBtaXNzZXMgYW5kIGJ5IHNwZWVkaW5nXFxuIDg1ODpcXHRcXHQgIHVwIHRoZSBwYWdldGFibGUgd2Fsa2luZy5cXG4gODU5OlxcdFxcbiA4NjA6XFx0XFx0ICBJZiBtZW1vcnkgY29uc3RyYWluZWQgb24gZW1iZWRkZWQsIHlvdSBtYXkgd2FudCB0byBzYXkgTi5cXG4gODYxOlxcdFxcbiA4NjI6XFx0aWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4gODYzOlxcdFxcbiA4NjQ6XFx0Y2hvaWNlXFxuIDg2NTpcXHRcXHRwcm9tcHQgXFxcIlRyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnQgc3lzZnMgZGVmYXVsdHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI5VDExOjIzOjE1LjY5MDMxODUxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxMzI2OTg4MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFRIUCBQYXRjaCBmb3IgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBmb3IgZnV6emluZyBwdXJwb3Nlcy4gVGhlIGxvZ2ljIHNlZW1zIHRvIGhpbmdlIG9uIGBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UgXHUwMDI2XHUwMDI2ICFQUkVFTVBUX1JUYC4gU2luY2UgYXJjaGl0ZWN0dXJlcyBsaWtlIHg4NiB0eXBpY2FsbHkgZGVmaW5lIGBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBqdXN0IGxpc3RpbmcgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBzaG91bGQgYmUgc3VmZmljaWVudC4gVGhhdCdzIG91ciBwcmltYXJ5IGZvY3VzLlxuXG5OZXh0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgc3RhdGUgb2YgYENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT2AuIFRoZSBwYXRjaCBzZWVtcyB0byB0b3VjaCBib3RoIGJyYW5jaGVzLCBidXQgdGhlIG1vcmUgaW52b2x2ZWQgY29kZSwgaW5jbHVkaW5nIHRoZSBzcGlubG9jayBhbmQgc2hyaW5rZXIgbWVjaGFuaXNtcywgaXMgaW4gdGhlIGAjZWxzZWAgYnJhbmNoLCB3aGVuIGBDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU9gIGlzIGRpc2FibGVkLiBUaGUgZGVmYXVsdCBpcyB0byBoYXZlIHRoaXMgZGlzYWJsZWQsIHNvIHdlIGRvbid0IG5lZWQgdG8gZXhwbGljaXRseSBkaXNhYmxlIGl0IGZvciBvdXIgZnV6emluZyBzZXR1cC4gV2UncmUgc2FmZSB0byBzdGljayB3aXRoIGVuYWJsaW5nIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuXG5cbk5vdywgcmVhY2hhYmlsaXR5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYCBpcyBhY3R1YWxseSBjYWxsZWQuIEEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGF0IGl0J3MgYWNjZXNzZWQgdmlhIGBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZWAsIGBjb3B5X2h1Z2VfcG1kYCwgYW5kIGBkYXhfcG1kX2xvYWRfaG9sZWAuIFllcywgaXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gR29vZC5cblxuR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIHJhY2UgY29uZGl0aW9ucyBpbiB0aGUgY29udGV4dCBvZiBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgc2hyaW5raW5nLCBlc3BlY2lhbGx5IHdpdGggdGhlIGFkZGVkIHNwaW5sb2NrIHdoZW4gYENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT2AgaXMgZGlzYWJsZWQsIHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBUaGlzIHJlZmFjdG9yaW5nIG9mIGh1Z2UgemVybyBmb2xpbyBtYW5hZ2VtZW50IGluIFRIUCwgd2hpY2ggdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgYW5kIGlzIGV4cG9zZWQgdGhyb3VnaCBwYWdlIGZhdWx0cyBhbmQgbWVtb3J5IHByZXNzdXJlLCBnaXZlcyBtZSBhIHN0cm9uZyBqdXN0aWZpY2F0aW9uIHRvIHNldCBcIldvcnRoRnV6emluZ1wiIHRvIHRydWUuXG5cblRoZSBrZXkgc3ltYm9scyB0byB0YXJnZXQgaW4gdGhlIGZ1enplciBhcmU6IGBtbV9nZXRfaHVnZV96ZXJvX2ZvbGlvYCwgYG1tX3B1dF9odWdlX3plcm9fZm9saW9gLCBgc2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuYCwgYHNocmlua19odWdlX3plcm9fZm9saW9fY291bnRgLCBgYWxsb2NfaHVnZV96ZXJvX2ZvbGlvYCwgYW5kIGBnZXRfaHVnZV96ZXJvX2ZvbGlvYC5cblxuQW5kIHRoZSBrZXkgY29uZmlndXJhdGlvbiB0byBlbmFibGUsIGZvciB0aGUgZnV6emVyIHRvIGVuZ2FnZSB3aXRoIHRoZSBtb2RpZmllZCBjb2RlLCBpcyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBUaGF0J3MgdGhlIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMTAsIk91dHB1dFRva2VucyI6MTc0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjlUMTE6MjM6MjIuODIzMDIxNjg4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1OTU3MjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1tX2dldF9odWdlX3plcm9fZm9saW9cIixcbiAgICBcIm1tX3B1dF9odWdlX3plcm9fZm9saW9cIixcbiAgICBcInNocmlua19odWdlX3plcm9fZm9saW9fc2NhblwiLFxuICAgIFwic2hyaW5rX2h1Z2VfemVyb19mb2xpb19jb3VudFwiLFxuICAgIFwiYWxsb2NfaHVnZV96ZXJvX2ZvbGlvXCIsXG4gICAgXCJnZXRfaHVnZV96ZXJvX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBhbGxvY2F0aW9uIGFuZCBtYW5hZ2VtZW50IG9mIHRoZSBodWdlIHplcm8gZm9saW8gaW4gVEhQIChUcmFuc3BhcmVudCBIdWdlIFBhZ2VzKSwgaW50cm9kdWNpbmcgYSBzcGlubG9jayB0byBmaXggcmFjZSBjb25kaXRpb25zIGR1cmluZyBhbGxvY2F0aW9uIGFuZCBzaHJpbmtpbmcgd2hlbiBDT05GSUdfUEVSU0lTVEVOVF9IVUdFX1pFUk9fRk9MSU8gaXMgZGlzYWJsZWQuIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHZpYSBwYWdlIGZhdWx0cyBhbmQgbWVtb3J5IHByZXNzdXJlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibW1fZ2V0X2h1Z2VfemVyb19mb2xpb1wiLFxuICAgIFwibW1fcHV0X2h1Z2VfemVyb19mb2xpb1wiLFxuICAgIFwic2hyaW5rX2h1Z2VfemVyb19mb2xpb19zY2FuXCIsXG4gICAgXCJzaHJpbmtfaHVnZV96ZXJvX2ZvbGlvX2NvdW50XCIsXG4gICAgXCJhbGxvY19odWdlX3plcm9fZm9saW9cIixcbiAgICBcImdldF9odWdlX3plcm9fZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGFsbG9jYXRpb24gYW5kIG1hbmFnZW1lbnQgb2YgdGhlIGh1Z2UgemVybyBmb2xpbyBpbiBUSFAgKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMpLCBpbnRyb2R1Y2luZyBhIHNwaW5sb2NrIHRvIGZpeCByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIGFsbG9jYXRpb24gYW5kIHNocmlua2luZyB3aGVuIENPTkZJR19QRVJTSVNURU5UX0hVR0VfWkVST19GT0xJTyBpcyBkaXNhYmxlZC4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGFuZCBpcyByZWFjaGFibGUgdmlhIHBhZ2UgZmF1bHRzIGFuZCBtZW1vcnkgcHJlc3N1cmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowqszbj[1] Phase: Succeeded StartedAt: 2026-07-29 11:23:34 +0000 UTC FinishedAt: 2026-07-29 11:23:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqszbj[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-29 11:23:34 +0000 UTC FinishedAt: 2026-07-29 11:23:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqszbj[2] Phase: Succeeded StartedAt: 2026-07-29 11:23:34 +0000 UTC FinishedAt: 2026-07-29 15:24:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqszbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_get_huge_zero_folio","mm_put_huge_zero_folio","shrink_huge_zero_folio_scan","shrink_huge_zero_folio_count","alloc_huge_zero_folio","get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"0a421c5f-91d7-49d2-8b3c-196a0745ba3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-29 11:23:35 +0000 UTC FinishedAt: 2026-07-29 15:24:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_get_huge_zero_folio","mm_put_huge_zero_folio","shrink_huge_zero_folio_scan","shrink_huge_zero_folio_count","alloc_huge_zero_folio","get_huge_zero_folio"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"0a421c5f-91d7-49d2-8b3c-196a0745ba3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowqszbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_get_huge_zero_folio","mm_put_huge_zero_folio","shrink_huge_zero_folio_scan","shrink_huge_zero_folio_count","alloc_huge_zero_folio","get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"0a421c5f-91d7-49d2-8b3c-196a0745ba3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-29 11:23:35 +0000 UTC FinishedAt: 2026-07-29 11:24:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqszbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_get_huge_zero_folio","mm_put_huge_zero_folio","shrink_huge_zero_folio_scan","shrink_huge_zero_folio_count","alloc_huge_zero_folio","get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"0a421c5f-91d7-49d2-8b3c-196a0745ba3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-29 11:23:35 +0000 UTC FinishedAt: 2026-07-29 11:23:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqszbj/series-workflowqszbj-convert-artifact-45597627/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqszbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_get_huge_zero_folio","mm_put_huge_zero_folio","shrink_huge_zero_folio_scan","shrink_huge_zero_folio_count","alloc_huge_zero_folio","get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"0a421c5f-91d7-49d2-8b3c-196a0745ba3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-29 11:24:08 +0000 UTC FinishedAt: 2026-07-29 11:47:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqszbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_get_huge_zero_folio","mm_put_huge_zero_folio","shrink_huge_zero_folio_scan","shrink_huge_zero_folio_count","alloc_huge_zero_folio","get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"0a421c5f-91d7-49d2-8b3c-196a0745ba3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-29 11:24:08 +0000 UTC FinishedAt: 2026-07-29 11:47:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*92b23e6e-029f-4f5b-be8d-32c2b10f0a44,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqszbj/series-workflowqszbj-convert-artifact-45597627/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "0be826ac-4a33-4766-971e-126a921434b4", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqszbj/series-workflowqszbj-build-action-3532444153/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqszbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_get_huge_zero_folio","mm_put_huge_zero_folio","shrink_huge_zero_folio_scan","shrink_huge_zero_folio_count","alloc_huge_zero_folio","get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"0a421c5f-91d7-49d2-8b3c-196a0745ba3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-29 11:24:08 +0000 UTC FinishedAt: 2026-07-29 11:46:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*92b23e6e-029f-4f5b-be8d-32c2b10f0a44,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqszbj/series-workflowqszbj-convert-artifact-45597627/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "0be826ac-4a33-4766-971e-126a921434b4", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqszbj/series-workflowqszbj-build-action-3532444153/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqszbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_get_huge_zero_folio","mm_put_huge_zero_folio","shrink_huge_zero_folio_scan","shrink_huge_zero_folio_count","alloc_huge_zero_folio","get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"0a421c5f-91d7-49d2-8b3c-196a0745ba3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-29 11:47:05 +0000 UTC FinishedAt: 2026-07-29 11:47:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqszbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_get_huge_zero_folio","mm_put_huge_zero_folio","shrink_huge_zero_folio_scan","shrink_huge_zero_folio_count","alloc_huge_zero_folio","get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"0a421c5f-91d7-49d2-8b3c-196a0745ba3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-29 11:47:05 +0000 UTC FinishedAt: 2026-07-29 11:47:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqszbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_get_huge_zero_folio","mm_put_huge_zero_folio","shrink_huge_zero_folio_scan","shrink_huge_zero_folio_count","alloc_huge_zero_folio","get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"0a421c5f-91d7-49d2-8b3c-196a0745ba3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-29 11:47:05 +0000 UTC FinishedAt: 2026-07-29 11:47:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqszbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_get_huge_zero_folio","mm_put_huge_zero_folio","shrink_huge_zero_folio_scan","shrink_huge_zero_folio_count","alloc_huge_zero_folio","get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"0a421c5f-91d7-49d2-8b3c-196a0745ba3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-29 11:47:05 +0000 UTC FinishedAt: 2026-07-29 11:47:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"0a421c5f-91d7-49d2-8b3c-196a0745ba3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqszbj/series-workflowqszbj-convert-artifact-2327982866/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqszbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_get_huge_zero_folio","mm_put_huge_zero_folio","shrink_huge_zero_folio_scan","shrink_huge_zero_folio_count","alloc_huge_zero_folio","get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"0a421c5f-91d7-49d2-8b3c-196a0745ba3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-29 11:47:15 +0000 UTC FinishedAt: 2026-07-29 11:49:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqszbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_get_huge_zero_folio","mm_put_huge_zero_folio","shrink_huge_zero_folio_scan","shrink_huge_zero_folio_count","alloc_huge_zero_folio","get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"0a421c5f-91d7-49d2-8b3c-196a0745ba3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-29 11:47:15 +0000 UTC FinishedAt: 2026-07-29 11:49:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0be826ac-4a33-4766-971e-126a921434b4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqszbj/series-workflowqszbj-build-action-3532444153/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqszbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_get_huge_zero_folio","mm_put_huge_zero_folio","shrink_huge_zero_folio_scan","shrink_huge_zero_folio_count","alloc_huge_zero_folio","get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"0a421c5f-91d7-49d2-8b3c-196a0745ba3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-29 11:49:22 +0000 UTC FinishedAt: 2026-07-29 11:49:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqszbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_get_huge_zero_folio","mm_put_huge_zero_folio","shrink_huge_zero_folio_scan","shrink_huge_zero_folio_count","alloc_huge_zero_folio","get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"0a421c5f-91d7-49d2-8b3c-196a0745ba3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-29 11:49:22 +0000 UTC FinishedAt: 2026-07-29 11:49:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqszbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_get_huge_zero_folio","mm_put_huge_zero_folio","shrink_huge_zero_folio_scan","shrink_huge_zero_folio_count","alloc_huge_zero_folio","get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"0a421c5f-91d7-49d2-8b3c-196a0745ba3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-29 11:49:22 +0000 UTC FinishedAt: 2026-07-29 12:18:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqszbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_get_huge_zero_folio","mm_put_huge_zero_folio","shrink_huge_zero_folio_scan","shrink_huge_zero_folio_count","alloc_huge_zero_folio","get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"0a421c5f-91d7-49d2-8b3c-196a0745ba3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-29 11:49:22 +0000 UTC FinishedAt: 2026-07-29 12:18:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*92b23e6e-029f-4f5b-be8d-32c2b10f0a44,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqszbj/series-workflowqszbj-convert-artifact-2327982866/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "3dab98fb-5cf7-48b4-a092-d1615ffde3ae", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqszbj/series-workflowqszbj-build-action-505065382/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqszbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_get_huge_zero_folio","mm_put_huge_zero_folio","shrink_huge_zero_folio_scan","shrink_huge_zero_folio_count","alloc_huge_zero_folio","get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"0a421c5f-91d7-49d2-8b3c-196a0745ba3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-29 11:49:22 +0000 UTC FinishedAt: 2026-07-29 12:18:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*92b23e6e-029f-4f5b-be8d-32c2b10f0a44,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqszbj/series-workflowqszbj-convert-artifact-2327982866/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "3dab98fb-5cf7-48b4-a092-d1615ffde3ae", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqszbj/series-workflowqszbj-build-action-505065382/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqszbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_get_huge_zero_folio","mm_put_huge_zero_folio","shrink_huge_zero_folio_scan","shrink_huge_zero_folio_count","alloc_huge_zero_folio","get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"0a421c5f-91d7-49d2-8b3c-196a0745ba3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-29 12:18:12 +0000 UTC FinishedAt: 2026-07-29 12:18:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqszbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_get_huge_zero_folio","mm_put_huge_zero_folio","shrink_huge_zero_folio_scan","shrink_huge_zero_folio_count","alloc_huge_zero_folio","get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"0a421c5f-91d7-49d2-8b3c-196a0745ba3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-29 12:18:12 +0000 UTC FinishedAt: 2026-07-29 12:18:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqszbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_get_huge_zero_folio","mm_put_huge_zero_folio","shrink_huge_zero_folio_scan","shrink_huge_zero_folio_count","alloc_huge_zero_folio","get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"0a421c5f-91d7-49d2-8b3c-196a0745ba3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-29 12:18:12 +0000 UTC FinishedAt: 2026-07-29 12:20:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqszbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_get_huge_zero_folio","mm_put_huge_zero_folio","shrink_huge_zero_folio_scan","shrink_huge_zero_folio_count","alloc_huge_zero_folio","get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"0a421c5f-91d7-49d2-8b3c-196a0745ba3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-29 12:18:12 +0000 UTC FinishedAt: 2026-07-29 12:19:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3dab98fb-5cf7-48b4-a092-d1615ffde3ae,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqszbj/series-workflowqszbj-build-action-505065382/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqszbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_get_huge_zero_folio","mm_put_huge_zero_folio","shrink_huge_zero_folio_scan","shrink_huge_zero_folio_count","alloc_huge_zero_folio","get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"0a421c5f-91d7-49d2-8b3c-196a0745ba3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-29 12:20:01 +0000 UTC FinishedAt: 2026-07-29 15:24:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqszbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_get_huge_zero_folio","mm_put_huge_zero_folio","shrink_huge_zero_folio_scan","shrink_huge_zero_folio_count","alloc_huge_zero_folio","get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"0a421c5f-91d7-49d2-8b3c-196a0745ba3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-29 12:20:01 +0000 UTC FinishedAt: 2026-07-29 15:24:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_get_huge_zero_folio","mm_put_huge_zero_folio","shrink_huge_zero_folio_scan","shrink_huge_zero_folio_count","alloc_huge_zero_folio","get_huge_zero_folio"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*0be826ac-4a33-4766-971e-126a921434b4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3dab98fb-5cf7-48b4-a092-d1615ffde3ae,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqszbj/series-workflowqszbj-build-action-3532444153/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqszbj/series-workflowqszbj-build-action-505065382/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowqszbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_get_huge_zero_folio","mm_put_huge_zero_folio","shrink_huge_zero_folio_scan","shrink_huge_zero_folio_count","alloc_huge_zero_folio","get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"0a421c5f-91d7-49d2-8b3c-196a0745ba3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-29 12:20:01 +0000 UTC FinishedAt: 2026-07-29 12:20:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqszbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_get_huge_zero_folio","mm_put_huge_zero_folio","shrink_huge_zero_folio_scan","shrink_huge_zero_folio_count","alloc_huge_zero_folio","get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"0a421c5f-91d7-49d2-8b3c-196a0745ba3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-29 12:20:01 +0000 UTC FinishedAt: 2026-07-29 12:20:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_get_huge_zero_folio","mm_put_huge_zero_folio","shrink_huge_zero_folio_scan","shrink_huge_zero_folio_count","alloc_huge_zero_folio","get_huge_zero_folio"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqszbj/series-workflowqszbj-convert-artifact-2602225255/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqszbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_get_huge_zero_folio","mm_put_huge_zero_folio","shrink_huge_zero_folio_scan","shrink_huge_zero_folio_count","alloc_huge_zero_folio","get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"0a421c5f-91d7-49d2-8b3c-196a0745ba3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-29 12:20:01 +0000 UTC FinishedAt: 2026-07-29 12:20:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqszbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_get_huge_zero_folio","mm_put_huge_zero_folio","shrink_huge_zero_folio_scan","shrink_huge_zero_folio_count","alloc_huge_zero_folio","get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"0a421c5f-91d7-49d2-8b3c-196a0745ba3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-29 12:20:01 +0000 UTC FinishedAt: 2026-07-29 12:20:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqszbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_get_huge_zero_folio","mm_put_huge_zero_folio","shrink_huge_zero_folio_scan","shrink_huge_zero_folio_count","alloc_huge_zero_folio","get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"0a421c5f-91d7-49d2-8b3c-196a0745ba3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-29 12:20:01 +0000 UTC FinishedAt: 2026-07-29 12:20:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqszbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_get_huge_zero_folio","mm_put_huge_zero_folio","shrink_huge_zero_folio_scan","shrink_huge_zero_folio_count","alloc_huge_zero_folio","get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"0a421c5f-91d7-49d2-8b3c-196a0745ba3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-29 12:20:48 +0000 UTC FinishedAt: 2026-07-29 15:24:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqszbj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mm_get_huge_zero_folio","mm_put_huge_zero_folio","shrink_huge_zero_folio_scan","shrink_huge_zero_folio_count","alloc_huge_zero_folio","get_huge_zero_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"99cea7eb5216ff688a597595e93c123823865674","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"0a421c5f-91d7-49d2-8b3c-196a0745ba3a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-29 12:20:48 +0000 UTC FinishedAt: 2026-07-29 15:24:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0be826ac-4a33-4766-971e-126a921434b4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3dab98fb-5cf7-48b4-a092-d1615ffde3ae,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqszbj/series-workflowqszbj-build-action-3532444153/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqszbj/series-workflowqszbj-build-action-505065382/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqszbj/series-workflowqszbj-convert-artifact-2602225255/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}