Name: series-workflowwchxx Phase: Failed StartedAt: 2026-06-23 16:29:38 +0000 UTC FinishedAt: 2026-06-23 16:45:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwchxx[0] Phase: Succeeded StartedAt: 2026-06-23 16:29:38 +0000 UTC FinishedAt: 2026-06-23 16:45:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwchxx[0].run-triage Phase: Succeeded StartedAt: 2026-06-23 16:29:38 +0000 UTC FinishedAt: 2026-06-23 16:45:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE2OjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBidWlsZC10aW1lIGZlYXR1cmUgdG8gcmVuZGVyIGVtYmVkZGVkIGJvb3Rjb25maWcgaW50byBhIGNtZGxpbmUgc3RyaW5nIGFuZCBwcmVwZW5kcyBpdCBkdXJpbmcgZWFybHkgYm9vdCAoYHNldHVwX2FyY2hgKS4gSXQgYWxzbyBmaXhlcyBhIGJ1ZyBpbiBgeGJjX3NucHJpbnRfY21kbGluZWAgd2hpY2ggaXMgb25seSBjYWxsZWQgZHVyaW5nIGVhcmx5IGJvb3QgKGBzZXR1cF9ib290X2NvbmZpZ2ApLiBBbGwgbW9kaWZpZWQga2VybmVsIGNvZGUgaXMgbWFya2VkIGBfX2luaXRgLCBydW5zIGV4YWN0bHkgb25jZSBkdXJpbmcgYm9vdCwgYW5kIHByb2Nlc3NlcyBzdGF0aWMgZGF0YSAoZnJvbSB0aGUga2VybmVsIGltYWdlIG9yIGluaXRyZCkuIFNpbmNlIHRoZXJlIGlzIG5vIHdheSBmb3IgYSBzeXNjYWxsIGZ1enplciB0byByZWFjaCB0aGlzIGNvZGUgb3IgbXV0YXRlIGl0cyBpbnB1dHMsIGl0IGNhbm5vdCBiZSBtZWFuaW5nZnVsbHkgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxNjo0MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDlkZjkyOWFlY2E5YmM1MjNhYjcwODlmYWZiYmQ2NjExNmVlNzQzYjVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAyMyAxNjo0MzoxMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Jvb3Rjb25maWcucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdFxuaW5kZXggZjcxMjc1ODQ3MmQ1YzYuLjM0OWNlZmJiMmJiY2RkIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdFxuQEAgLTIzNCw2ICYjNDM7MjM0LDg3IEBAIEtjb25maWcgb3B0aW9uIHNlbGVjdGVkLlxuIE5vdGUgdGhhdCBldmVuIGlmIHlvdSBzZXQgdGhpcyBvcHRpb24sIHlvdSBjYW4gb3ZlcnJpZGUgdGhlIGVtYmVkZGVkXG4gYm9vdGNvbmZpZyBieSBhbm90aGVyIGJvb3Rjb25maWcgd2hpY2ggYXR0YWNoZWQgdG8gdGhlIGluaXRyZC5cbiBcbiYjNDM7UmVuZGVyaW5nIEVtYmVkZGVkIGtlcm5lbC4qIEtleXMgYXQgQnVpbGQgVGltZVxuJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzO1xuJiM0MztCeSBkZWZhdWx0LCB0aGUgZW1iZWRkZWQgYm9vdGNvbmZpZyAoYGBDT05GSUdfQk9PVF9DT05GSUdfRU1CRUQ9eWBgKSBpc1xuJiM0MztwYXJzZWQgYXQgcnVudGltZSwgYWZ0ZXIgYGBwYXJzZV9lYXJseV9wYXJhbSgpYGAgaGFzIGFscmVhZHkgcnVuLiBFYXJseVxuJiM0MztwYXJhbWV0ZXIgaGFuZGxlcnMgKGBgbWVtPWBgLCBgYGVhcmx5Y29uPWBgLCBgYGxvZ2xldmVsPWBgLCAuLi4pIHRoZXJlZm9yZVxuJiM0MztjYW5ub3Qgc2VlIHZhbHVlcyBzdXBwbGllZCB2aWEgdGhlIGVtYmVkZGVkIGBga2VybmVsYGAgc3VidHJlZS5cbiYjNDM7XG4mIzQzO2BgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHYGAgcmVzb2x2ZXMgdGhpcyBieSByZW5kZXJpbmcgdGhlXG4mIzQzO2Bga2VybmVsYGAgc3VidHJlZSBvZiBgYENPTkZJR19CT09UX0NPTkZJR19FTUJFRF9GSUxFYGAgaW50byBhIGZsYXQgY21kbGluZVxuJiM0MztzdHJpbmcgYXQga2VybmVsIGJ1aWxkIHRpbWUgKHZpYSBgYHRvb2xzL2Jvb3Rjb25maWcgLUNgYCkgYW5kIHByZXBlbmRpbmdcbiYjNDM7aXQgdG8gYGBib290X2NvbW1hbmRfbGluZWBgIGR1cmluZyBlYXJseSBhcmNoaXRlY3R1cmUgc2V0dXAsIHNvIHRoZSBrZXlzXG4mIzQzO2FyZSB2aXNpYmxlIHRvIGBgcGFyc2VfZWFybHlfcGFyYW0oKWBgLlxuJiM0MztcbiYjNDM7VGhlIG9wdGlvbiByZXF1aXJlcyBgYENPTkZJR19CT09UX0NPTkZJR19FTUJFRD15YGAsIGEgbm9uLWVtcHR5XG4mIzQzO2BgQ09ORklHX0JPT1RfQ09ORklHX0VNQkVEX0ZJTEVgYCwgYW5kIGFuIGFyY2hpdGVjdHVyZSB0aGF0IHNlbGVjdHNcbiYjNDM7YGBDT05GSUdfQVJDSF9TVVBQT1JUU19DTURMSU5FX0ZST01fQk9PVENPTkZJR2BgLiBDdXJyZW50bHkgb25seSB4ODZcbiYjNDM7c2VsZWN0cyBpdDsgb24gb3RoZXIgYXJjaGl0ZWN0dXJlcyB0aGUgZW1iZWRkZWQgYm9vdGNvbmZpZyBzdGlsbCB3b3JrcyxcbiYjNDM7YnV0IG9ubHkgdGhyb3VnaCB0aGUgbGF0ZSBydW50aW1lIHBhcnNlci5cbiYjNDM7XG4mIzQzO1RoZSBzYW1lIGBgYm9vdGNvbmZpZ2BgIG9wdC1pbiBhcHBsaWVzIGFzIGVsc2V3aGVyZTogdGhlIHJlbmRlcmVkIGtleXNcbiYjNDM7YXJlIHByZXBlbmRlZCBvbmx5IHdoZW4gYGBib290Y29uZmlnYGAgKGluIGFueSBmb3JtKSBhcHBlYXJzIG9uIHRoZVxuJiM0MztrZXJuZWwgY29tbWFuZCBsaW5lLCBvciB3aGVuIGBgQ09ORklHX0JPT1RfQ09ORklHX0ZPUkNFYGAgaXMgc2V0LCB3aGljaFxuJiM0MztkZWZhdWx0cyB0byBgYHlgYCB3aGVuIGBgQ09ORklHX0JPT1RfQ09ORklHX0VNQkVEYGAgaXMgc2V0LlxuJiM0MztcbiYjNDM7Rm9yIGV4YW1wbGUsIGdpdmVuOjpcbiYjNDM7XG4mIzQzOyBrZXJuZWwge1xuJiM0MzsgICBsb2dsZXZlbCA9IDdcbiYjNDM7ICAgbWVtID0gNEdcbiYjNDM7IH1cbiYjNDM7XG4mIzQzO3RoZSBrZXJuZWwgYm9vdHMgYXMgaWYgYGBsb2dsZXZlbD03IG1lbT00R2BgIGhhZCBiZWVuIHByZXBlbmRlZCB0byB0aGVcbiYjNDM7Ym9vdGxvYWRlciBjb21tYW5kIGxpbmUsIHdpdGggdGhlIHZhbHVlcyB2aXNpYmxlIHRvIGVhcmx5LXBhcnNlZFxuJiM0MztoYW5kbGVycy4gQ29tbWEtc2VwYXJhdGVkIHZhbHVlcyBhcmUgc3RpbGwgZXhwYW5kZWQgaW50byBtdWx0aXBsZVxuJiM0MztjbWRsaW5lIGVudHJpZXMgcGVyIHRoZSBib290Y29uZmlnIGFycmF5IGNvbnZlbnRpb24gLS0gdGhlIGVtYmVkZGVkXG4mIzQzO2Bga2VybmVsLmVhcmx5Y29uID0gXCYjMzQ7dWFydDgyNTAsaW8sMHgzZjhcJiMzNDtgYCBtdXN0IGJlIHF1b3RlZCB0byBsYW5kIGFzIGFcbiYjNDM7c2luZ2xlIGBgZWFybHljb249YGAgZW50cnksIGV4YWN0bHkgYXMgZm9yIHRoZSBydW50aW1lIHBhcnNlci5cbiYjNDM7XG4mIzQzO0lmIHRoZSByZW5kZXJlZCBzdHJpbmcgd291bGQgbm90IGZpdCBpbiBgYENPTU1BTkRfTElORV9TSVpFYGAgdG9nZXRoZXJcbiYjNDM7d2l0aCB0aGUgZXhpc3RpbmcgY29tbWFuZCBsaW5lLCB0aGUgcHJlcGVuZCBpcyBza2lwcGVkIGFuZCBhbiBlcnJvciBpc1xuJiM0Mztsb2dnZWQsIHNvIGFuIG92ZXJzaXplZCBlbWJlZGRlZCBib290Y29uZmlnIGNhbm5vdCBicmljayBhIGJvb3QuXG4mIzQzO1xuJiM0MztJbnRlcmFjdGlvbiB3aXRoIG90aGVyIGNvbW1hbmQgbGluZSBhbmQgYm9vdGNvbmZpZyBzb3VyY2VzXG4mIzQzO35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5cbiYjNDM7XG4mIzQzO1dpdGggYGBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUc9eWBgIHRoZSByZW5kZXJlZCBgYGtlcm5lbGBgXG4mIzQzO3N1YnRyZWUgYmVoYXZlcyBsaWtlIGEgYnVpbGQtdGltZSBjb21tYW5kIGxpbmUgKHNpbWlsYXIgdG9cbiYjNDM7YGBDT05GSUdfQ01ETElORWBgKSwgbm90IGxpa2UgYSBib290Y29uZmlnIHNvdXJjZS4gSXQgaXMgcHJlcGVuZGVkIHRvXG4mIzQzO2BgYm9vdF9jb21tYW5kX2xpbmVgYCBpbiBgYHNldHVwX2FyY2goKWBgLCBiZWZvcmUgYGBwYXJzZV9lYXJseV9wYXJhbSgpYGBcbiYjNDM7YW5kIGxvbmcgYmVmb3JlIHRoZSBydW50aW1lIHBhcnNlciBsb29rcyBhdCBhbiBpbml0cmQuIE9wdGlvbnMgY2FuIHJlYWNoXG4mIzQzO3RoZSBrZXJuZWwgZnJvbSB1cCB0byBmb3VyIHBsYWNlczpcbiYjNDM7XG4mIzQzOy0gQm9vdGxvYWRlciBjb21tYW5kIGxpbmU6IHRoZSBhcmd1bWVudHMgdGhlIGJvb3QgbG9hZGVyIHBhc3Nlcy4gVGhlXG4mIzQzOyAgZW1iZWRkZWQgY21kbGluZSBpcyBwcmVwZW5kZWQgaW4gZnJvbnQgb2YgdGhlbSwgc28gZm9yIGxhc3Qtb25lLXdpbnNcbiYjNDM7ICBwYXJhbWV0ZXJzIGEgYm9vdGxvYWRlciBvcHRpb24gc3RpbGwgb3ZlcnJpZGVzIHRoZSBlbWJlZGRlZCB2YWx1ZS5cbiYjNDM7ICBWaXNpYmxlIGluIC9wcm9jL2NtZGxpbmUuXG4mIzQzOy0gRW1iZWRkZWQgY21kbGluZSAodGhpcyBvcHRpb24pOiB0aGUgcmVuZGVyZWQgYGBrZXJuZWxgYCBzdWJ0cmVlLFxuJiM0MzsgIHByZXBlbmRlZCBlYXJseSBzbyBpdCBpcyBzZWVuIGJ5IGBgcGFyc2VfZWFybHlfcGFyYW0oKWBgLiBWaXNpYmxlIGluXG4mIzQzOyAgL3Byb2MvY21kbGluZS5cbiYjNDM7LSBJbml0cmQgYm9vdGNvbmZpZzogcGFyc2VkIGxhdGUgaW4gYGBzZXR1cF9ib290X2NvbmZpZygpYGA7IGl0c1xuJiM0MzsgIGBga2VybmVsYGAga2V5cyBhcmUgcGxhY2VkIGFoZWFkIG9mIGBgYm9vdF9jb21tYW5kX2xpbmVgYCwgaS5lLiBiZWZvcmVcbiYjNDM7ICB0aGUgZW1iZWRkZWQgY21kbGluZSwgc28gbGFzdC13aW5zIGZhdm9ycyB0aGUgZW1iZWRkZWQgdmFsdWVzLiBBcyBhXG4mIzQzOyAgYm9vdGNvbmZpZyBzb3VyY2UsIGFuIGluaXRyZCBib290Y29uZmlnIHN0aWxsIHJlcGxhY2VzIHRoZSBlbWJlZGRlZFxuJiM0MzsgIGJvb3Rjb25maWcuIFZpc2libGUgaW4gL3Byb2MvY21kbGluZSBhbmQgL3Byb2MvYm9vdGNvbmZpZy5cbiYjNDM7LSBFbWJlZGRlZCBib290Y29uZmlnIChydW50aW1lKTogcGFyc2VkIGxhdGUsIG9ubHkgd2hlbiBubyBpbml0cmRcbiYjNDM7ICBib290Y29uZmlnIGlzIHByZXNlbnQuIFZpc2libGUgaW4gL3Byb2MvY21kbGluZSBhbmQgL3Byb2MvYm9vdGNvbmZpZy5cbiYjNDM7XG4mIzQzO1NvIHdpdGggdGhpcyBvcHRpb24gdGhlIGVtYmVkZGVkIGBga2VybmVsLipgYCB2YWx1ZXMgdGFrZSBwcmVjZWRlbmNlXG4mIzQzO292ZXIgYW4gaW5pdHJkIGJvb3Rjb25maWcmIzM5O3MgYGBrZXJuZWwuKmBgIHZhbHVlczogZm9yIGVhcmx5IHBhcmFtZXRlcnNcbiYjNDM7dGhlIGluaXRyZCBpcyBub3QgcGFyc2VkIHlldCwgYW5kIGZvciBvcmRpbmFyeSBwYXJhbWV0ZXJzIHRoZSBlbWJlZGRlZFxuJiM0MztrZXlzIGxhbmQgbGF0ZXIgaW4gdGhlIGNvbW1hbmQgbGluZS4gSWYgeW91IG5lZWQgYW4gaW5pdHJkIGJvb3Rjb25maWcgdG9cbiYjNDM7b3ZlcnJpZGUgdGhlIGVtYmVkZGVkIGBga2VybmVsLipgYCBrZXlzLCBsZWF2ZSB0aGlzIG9wdGlvbiBvZmYgYW5kIHJlbHlcbiYjNDM7b24gdGhlIHJ1bnRpbWUgcGFyc2VyLlxuJiM0MztcbiYjNDM7VGhlIHJlbmRlcmVkIHN0cmluZyBpcyBwYXJ0IG9mIHRoZSBjb21tYW5kIGxpbmUsIHNvIGl0IGFwcGVhcnMgaW5cbiYjNDM7L3Byb2MvY21kbGluZS4gSXQgaXMgZGVsaWJlcmF0ZWx5IG5vdCBzaG93biBpbiAvcHJvYy9ib290Y29uZmlnOiB0aGF0XG4mIzQzO2ZpbGUga2VlcHMgcmVwb3J0aW5nIHRoZSBwYXJzZWQgYm9vdGNvbmZpZyB0cmVlIC0tIHRoZSBpbml0cmQgYm9vdGNvbmZpZ1xuJiM0MztpZiBwcmVzZW50LCBvdGhlcndpc2UgdGhlIGVtYmVkZGVkIGJvb3Rjb25maWcgLS0gaW5kZXBlbmRlbnQgb2Ygd2hldGhlclxuJiM0MztidWlsZC10aW1lIGNtZGxpbmUgcmVuZGVyaW5nIGlzIGVuYWJsZWQuXG4mIzQzO1xuIEtlcm5lbCBwYXJhbWV0ZXJzIHZpYSBCb290IENvbmZpZ1xuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IGQ5NWQzZWY3Nzc3M2ZhLi43NTMzNDE5NzczY2E5YyAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4mIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSU1xuQEAgLTk4MTMsNiAmIzQzOzk4MTMsNyBAQCBGOlx0ZnMvcHJvYy9ib290Y29uZmlnLmNcbiBGOlx0aW5jbHVkZS9saW51eC9ib290Y29uZmlnLmhcbiBGOlx0bGliL2Jvb3Rjb25maWctZGF0YS5TXG4gRjpcdGxpYi9ib290Y29uZmlnLmNcbiYjNDM7RjpcdGxpYi9lbWJlZGRlZC1jbWRsaW5lLlNcbiBGOlx0dG9vbHMvYm9vdGNvbmZpZy8qXG4gRjpcdHRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy8qXG4gXG5kaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZVxuaW5kZXggZDFjNTk1ZGI1NWM5NTYuLjFmNTZhNjg5MmZlYjQwIDEwMDY0NFxuLS0tIGEvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL01ha2VmaWxlXG5AQCAtMTUzMSw2ICYjNDM7MTUzMSwyMiBAQCBwcmVwYXJlOiB0b29scy9icGYvcmVzb2x2ZV9idGZpZHNcbiBlbmRpZlxuIGVuZGlmXG4gXG4mIzQzOyMgdG9vbHMvYm9vdGNvbmZpZyByZW5kZXJzIHRoZSBlbWJlZGRlZCBib290Y29uZmlnIGludG8gYSBjbWRsaW5lIGF0IGJ1aWxkIHRpbWUuXG4mIzQzO2lmZGVmIENPTkZJR19DTURMSU5FX0ZST01fQk9PVENPTkZJR1xuJiM0MztwcmVwYXJlOiB0b29scy9ib290Y29uZmlnXG4mIzQzO2VuZGlmXG4mIzQzO1xuJiM0MzsjIHRvb2xzL2Jvb3Rjb25maWcgaXMgcnVuIG9uIHRoZSBidWlsZCBob3N0IGR1cmluZyBwcmVwYXJlLCBzbyBmb3JjZSBhIGhvc3RcbiYjNDM7IyBiaW5hcnkgaGVyZTsgaXRzIG93biBNYWtlZmlsZSBrZWVwcyAkKENDKSBmb3Igc3RhbmRhbG9uZSBhbmQgY3Jvc3MgYnVpbGRzLlxuJiM0MzsjIENST1NTX0NPTVBJTEU9IGlzIGNsZWFyZWQgc28gdG9vbHMvc2NyaXB0cy9NYWtlZmlsZS5pbmNsdWRlIGRvZXMgbm90IGluamVjdFxuJiM0MzsjIHRoZSB0YXJnZXQmIzM5O3MgLS10YXJnZXQ9Ly0tc3lzcm9vdD0gZmxhZ3MgaW50byB0aGUgaG9zdCBjbGFuZyBpbnZvY2F0aW9uIHVuZGVyXG4mIzQzOyMgTExWTT0xIGNyb3NzIGJ1aWxkcyAod2hpY2ggd291bGQgcHJvZHVjZSBhIHRhcmdldCBiaW5hcnkgdGhhdCBmYWlscyB0byBleGVjKS5cbiYjNDM7dG9vbHMvYm9vdGNvbmZpZzogZXhwb3J0IENDIDo9ICQoSE9TVENDKVxuJiM0Mzt0b29scy9ib290Y29uZmlnOiBGT1JDRVxuJiM0MztcdCQoUSlta2RpciAtcCAkKG9ianRyZWUpL3Rvb2xzXG4mIzQzO1x0JChRKSQoTUFLRSkgTz0kKGFic3BhdGggJChvYmp0cmVlKSkgc3ViZGlyPXRvb2xzIC1DICQoc3JjdHJlZSkvdG9vbHMvIFxcXG4mIzQzO1x0XHRib290Y29uZmlnIENST1NTX0NPTVBJTEU9XG4mIzQzO1xuICMgVGhlIHRvb2xzIGJ1aWxkIHN5c3RlbSBpcyBub3QgYSBwYXJ0IG9mIEtidWlsZCBhbmQgdGVuZHMgdG8gaW50cm9kdWNlXG4gIyBpdHMgb3duIHVuaXF1ZSBpc3N1ZXMuIElmIHlvdSBuZWVkIHRvIGludGVncmF0ZSBhIG5ldyB0b29sIGludG8gS2J1aWxkLFxuICMgcGxlYXNlIGNvbnNpZGVyIGxvY2F0aW5nIHRoYXQgdG9vbCBvdXRzaWRlIHRoZSB0b29scy8gdHJlZSBhbmQgdXNpbmcgdGhlXG5AQCAtMTU1Nyw2ICYjNDM7MTU3MywxNSBAQCBpZm5lcSAoJCh3aWxkY2FyZCAkKG9ianRvb2xfTykpLClcbiBcdCQoUSkkKE1BS0UpIC1zQyAkKGFic19zcmN0cmVlKS90b29scy9vYmp0b29sIE89JChvYmp0b29sX08pIHNyY3RyZWU9JChhYnNfc3JjdHJlZSkgJChwYXRzdWJzdCBvYmp0b29sXyUsJSwkQClcbiBlbmRpZlxuIFxuJiM0MztQSE9OWSAmIzQzOz0gYm9vdGNvbmZpZ19jbGVhblxuJiM0MztcbiYjNDM7Ym9vdGNvbmZpZ19PID0gJChhYnNwYXRoICQob2JqdHJlZSkpL3Rvb2xzL2Jvb3Rjb25maWdcbiYjNDM7XG4mIzQzO2Jvb3Rjb25maWdfY2xlYW46XG4mIzQzO2lmbmVxICgkKHdpbGRjYXJkICQoYm9vdGNvbmZpZ19PKSksKVxuJiM0MztcdCQoUSkkKE1BS0UpIC1zQyAkKHNyY3RyZWUpL3Rvb2xzL2Jvb3Rjb25maWcgTz0kKGJvb3Rjb25maWdfTykgY2xlYW5cbiYjNDM7ZW5kaWZcbiYjNDM7XG4gdG9vbHMvOiBGT1JDRVxuIFx0JChRKW1rZGlyIC1wICQob2JqdHJlZSkvdG9vbHNcbiBcdCQoUSkkKE1BS0UpIE89JChhYnNwYXRoICQob2JqdHJlZSkpIHN1YmRpcj10b29scyAtQyAkKHNyY3RyZWUpL3Rvb2xzL1xuQEAgLTE3MzIsNyAmIzQzOzE3NTcsNyBAQCB2bWxpbnV4Y2xlYW46XG4gXHQkKFEpJChDT05GSUdfU0hFTEwpICQoc3JjdHJlZSkvc2NyaXB0cy9saW5rLXZtbGludXguc2ggY2xlYW5cbiBcdCQoUSkkKGlmICQoQVJDSF9QT1NUTElOSyksICQoTUFLRSkgLWYgJChBUkNIX1BPU1RMSU5LKSBjbGVhbilcbiBcbi1jbGVhbjogYXJjaGNsZWFuIHZtbGludXhjbGVhbiByZXNvbHZlX2J0Zmlkc19jbGVhbiBvYmp0b29sX2NsZWFuXG4mIzQzO2NsZWFuOiBhcmNoY2xlYW4gdm1saW51eGNsZWFuIHJlc29sdmVfYnRmaWRzX2NsZWFuIG9ianRvb2xfY2xlYW4gYm9vdGNvbmZpZ19jbGVhblxuIFxuICMgbXJwcm9wZXIgLSBEZWxldGUgYWxsIGdlbmVyYXRlZCBmaWxlcywgaW5jbHVkaW5nIC5jb25maWdcbiAjXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWdcbmluZGV4IGZhNGYwMDc5NjE0Y2QwLi5hZGJjYWFkODAxMzA4MyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L0tjb25maWdcbkBAIC0xMjcsNiAmIzQzOzEyNyw3IEBAIGNvbmZpZyBYODZcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX05VTUFfQkFMQU5DSU5HXHRpZiBYODZfNjRcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0tNQVBfTE9DQUxfRk9SQ0VfTUFQXHRpZiBOUl9DUFVTIFx1MDAzYz0gNDA5NlxuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfQ0ZJXHRcdGlmIFg4Nl82NFxuJiM0MztcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXG4gXHRzZWxlY3QgQVJDSF9VU0VTX0NGSV9UUkFQU1x0XHRpZiBYODZfNjQgXHUwMDI2XHUwMDI2IENGSVxuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTFRPX0NMQU5HXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19MVE9fQ0xBTkdfVEhJTlxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC94ODYva2VybmVsL3NldHVwLmNcbmluZGV4IDQ2ODgyY2U3OWMzYTRkLi5jOTczYTJjZWJjZDA0ZSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuY1xuQEAgLTYsNiAmIzQzOzYsNyBAQFxuICAqIHBhcnRzIG9mIGVhcmx5IGtlcm5lbCBpbml0aWFsaXphdGlvbi5cbiAgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9hY3BpLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYm9vdGNvbmZpZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29uc29sZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3B1LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jcmFzaF9kdW1wLmhcdTAwM2VcbkBAIC04ODEsNiAmIzQzOzg4MiwzNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgeDg2X3JlcG9ydF9ueCh2b2lkKVxuICAqIE5vdGU6IE9uIHg4Nl82NCwgZml4bWFwcyBhcmUgcmVhZHkgZm9yIHVzZSBldmVuIGJlZm9yZSB0aGlzIGlzIGNhbGxlZC5cbiAgKi9cbiBcbiYjNDM7I2lmZGVmIENPTkZJR19DTURMSU5FX0ZST01fQk9PVENPTkZJR1xuJiM0MztzdGF0aWMgaW50IF9faW5pdCBib290Y29uZmlnX29wdGluKGNoYXIgKnBhcmFtLCBjaGFyICp2YWwsXG4mIzQzO1x0XHRcdFx0ICAgY29uc3QgY2hhciAqdW51c2VkLCB2b2lkICphcmcpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXN0cmNtcChwYXJhbSwgXCYjMzQ7Ym9vdGNvbmZpZ1wmIzM0OykpXG4mIzQzO1x0XHQqKGJvb2wgKilhcmcgPSB0cnVlO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBEaWQgdGhlIHVzZXIgb3B0IGluIHRvIGJvb3Rjb25maWcgb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmU/IFVzZVxuJiM0MzsgKiBwYXJzZV9hcmdzKCkgc28gdGhpcyBtYXRjaGVzIHNldHVwX2Jvb3RfY29uZmlnKCkgZXhhY3RseSwgaW5jbHVkaW5nXG4mIzQzOyAqIHN0b3BwaW5nIGF0IHRoZSBcJiMzNDstLVwmIzM0OyB0aGF0IHNlcGFyYXRlcyBpbml0IGFyZ3VtZW50cy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIF9faW5pdCBib290Y29uZmlnX2NtZGxpbmVfcmVxdWVzdGVkKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdGF0aWMgY2hhciB0bXBfY21kbGluZVtDT01NQU5EX0xJTkVfU0laRV0gX19pbml0ZGF0YTtcbiYjNDM7XHRib29sIGZvdW5kID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmIChJU19FTkFCTEVEKENPTkZJR19CT09UX0NPTkZJR19GT1JDRSkpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0c3Ryc2NweSh0bXBfY21kbGluZSwgYm9vdF9jb21tYW5kX2xpbmUsIENPTU1BTkRfTElORV9TSVpFKTtcbiYjNDM7XHRpZiAoSVNfRVJSKHBhcnNlX2FyZ3MoXCYjMzQ7Ym9vdGNvbmZpZ1wmIzM0OywgdG1wX2NtZGxpbmUsIE5VTEwsIDAsIDAsIDAsXG4mIzQzO1x0XHRcdCAgICAgIFx1MDAyNmZvdW5kLCBib290Y29uZmlnX29wdGluKSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmb3VuZDtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gdm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKVxuIHtcbiAjaWZkZWYgQ09ORklHX1g4Nl8zMlxuQEAgLTkyNCw2ICYjNDM7OTU2LDE3IEBAIHZvaWQgX19pbml0IHNldHVwX2FyY2goY2hhciAqKmNtZGxpbmVfcClcbiBcdGJ1aWx0aW5fY21kbGluZV9hZGRlZCA9IHRydWU7XG4gI2VuZGlmXG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUdcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFByZXBlbmQgdGhlIGJ1aWxkLXRpbWUtcmVuZGVyZWQgZW1iZWRkZWQgXCYjMzQ7a2VybmVsXCYjMzQ7IGtleXMgaGVyZSBzb1xuJiM0MztcdCAqIHBhcnNlX2Vhcmx5X3BhcmFtKCkgYmVsb3cgc2VlcyB0aGVtLCBnYXRpbmcgb24gdGhlIHNhbWUgb3B0LWluXG4mIzQzO1x0ICogYXMgdGhlIHJ1bnRpbWUgcGFyc2VyIChzZWUgYm9vdGNvbmZpZ19jbWRsaW5lX3JlcXVlc3RlZCgpKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoYm9vdGNvbmZpZ19jbWRsaW5lX3JlcXVlc3RlZCgpKVxuJiM0MztcdFx0eGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZShib290X2NvbW1hbmRfbGluZSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgQ09NTUFORF9MSU5FX1NJWkUpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gXHRzdHJzY3B5KGNvbW1hbmRfbGluZSwgYm9vdF9jb21tYW5kX2xpbmUsIENPTU1BTkRfTElORV9TSVpFKTtcbiBcdCpjbWRsaW5lX3AgPSBjb21tYW5kX2xpbmU7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmggYi9pbmNsdWRlL2xpbnV4L2Jvb3Rjb25maWcuaFxuaW5kZXggMWM3ZjNiNzRmZmNmMzguLjQzMzI0YjQ3N2YxM2FiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oXG5AQCAtMzA4LDQgJiM0MzszMDgsMTMgQEAgc3RhdGljIGlubGluZSBjb25zdCBjaGFyICp4YmNfZ2V0X2VtYmVkZGVkX2Jvb3Rjb25maWcoc2l6ZV90ICpzaXplKVxuIH1cbiAjZW5kaWZcbiBcbiYjNDM7LyogQnVpbGQtdGltZS1yZW5kZXJlZCBib290Y29uZmlnIGNtZGxpbmUgcHJlcGVuZGVkIGluIHNldHVwX2FyY2goKSAqL1xuJiM0MzsjaWZkZWYgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXG4mIzQzO3ZvaWQgX19pbml0IHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSk7XG4mIzQzO2Jvb2wgX19pbml0IHhiY19lbWJlZGRlZF9jbWRsaW5lX2FwcGxpZWQodm9pZCk7XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lKGNoYXIgKmRzdCwgc2l6ZV90IHNpemUpIHsgfVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgeGJjX2VtYmVkZGVkX2NtZGxpbmVfYXBwbGllZCh2b2lkKSB7IHJldHVybiBmYWxzZTsgfVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvaW5pdC9LY29uZmlnIGIvaW5pdC9LY29uZmlnXG5pbmRleCA0NDAzZTUzODc2ZTEwNy4uMWNmNmNmNjI5OGM0ZWUgMTAwNjQ0XG4tLS0gYS9pbml0L0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2luaXQvS2NvbmZpZ1xuQEAgLTE1NjYsNiAmIzQzOzE1NjYsNDIgQEAgY29uZmlnIEJPT1RfQ09ORklHX0VNQkVEX0ZJTEVcbiBcdCAgVGhpcyBib290Y29uZmlnIHdpbGwgYmUgdXNlZCBpZiB0aGVyZSBpcyBubyBpbml0cmQgb3Igbm8gb3RoZXJcbiBcdCAgYm9vdGNvbmZpZyBpbiB0aGUgaW5pdHJkLlxuIFxuJiM0Mztjb25maWcgQVJDSF9TVVBQT1JUU19DTURMSU5FX0ZST01fQk9PVENPTkZJR1xuJiM0MztcdGJvb2xcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBTaWxlbnQgc3ltYm9sOyBubyBDIGNvZGUgcmVhZHMgaXQgZGlyZWN0bHkuIEFyY2hpdGVjdHVyZXNcbiYjNDM7XHQgIHNlbGVjdCBpdCBvbmNlIHRoZWlyIHNldHVwX2FyY2goKSBjYWxsc1xuJiM0MztcdCAgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZSgpIGJlZm9yZSBwYXJzZV9lYXJseV9wYXJhbSgpLlxuJiM0MztcdCAgSXRzIG9ubHkgcm9sZSBpcyB0byBnYXRlIHRoZSB1c2VyLXZpc2libGVcbiYjNDM7XHQgIENNRExJTkVfRlJPTV9CT09UQ09ORklHIG9wdGlvbiBwZXItYXJjaCwgdGhlIHNhbWVcbiYjNDM7XHQgIEFSQ0hfU1VQUE9SVFNfKiBpZGlvbSB1c2VkIGJ5IEFSQ0hfU1VQUE9SVFNfQ0ZJLCBldGMuXG4mIzQzO1xuJiM0Mztjb25maWcgQ01ETElORV9GUk9NX0JPT1RDT05GSUdcbiYjNDM7XHRib29sIFwmIzM0O1JlbmRlciBlbWJlZGRlZCBib290Y29uZmlnIGFzIGtlcm5lbCBjbWRsaW5lIGF0IGJ1aWxkIHRpbWVcJiMzNDtcbiYjNDM7XHRkZXBlbmRzIG9uIEJPT1RfQ09ORklHX0VNQkVEX0ZJTEUgIT0gXCYjMzQ7XCYjMzQ7XG4mIzQzO1x0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXG4mIzQzO1x0ZGVwZW5kcyBvbiBDTURMSU5FID0gXCYjMzQ7XCYjMzQ7XG4mIzQzO1x0ZGVmYXVsdCBuXG4mIzQzO1x0aGVscFxuJiM0MztcdCAgUmVuZGVyIHRoZSBcJiMzNDtrZXJuZWxcJiMzNDsgc3VidHJlZSBvZiB0aGUgZW1iZWRkZWQgYm9vdGNvbmZpZyBmaWxlIGludG8gYVxuJiM0MztcdCAgZmxhdCBjbWRsaW5lIHN0cmluZyBhdCBrZXJuZWwgYnVpbGQgdGltZSBhbmQgcHJlcGVuZCBpdCB0b1xuJiM0MztcdCAgYm9vdF9jb21tYW5kX2xpbmUgZHVyaW5nIGVhcmx5IGFyY2hpdGVjdHVyZSBzZXR1cC4gVGhpcyBtYWtlc1xuJiM0MztcdCAgZWFybHlfcGFyYW0oKSBoYW5kbGVycyAoZS5nLiBtZW09LCBlYXJseWNvbj0sIGxvZ2xldmVsPSkgc2VlIHRoZVxuJiM0MztcdCAgdmFsdWVzIHN1cHBsaWVkIHZpYSB0aGUgZW1iZWRkZWQgYm9vdGNvbmZpZy5cbiYjNDM7XG4mIzQzO1x0ICBUaGUgcnVudGltZSBib290Y29uZmlnIHBhcnNlciBpcyB1bmFmZmVjdGVkLCBzbyB0cmVlLXN0cnVjdHVyZWRcbiYjNDM7XHQgIGNvbnN1bWVycyBzdWNoIGFzIGZ0cmFjZSBib290LXRpbWUgdHJhY2luZyBrZWVwIHdvcmtpbmcuXG4mIzQzO1xuJiM0MztcdCAgTm90ZTogd2hlbiBhbiBpbml0cmQgYWxzbyBjYXJyaWVzIGEgYm9vdGNvbmZpZywgaXRzIFwmIzM0O2tlcm5lbFwmIzM0O1xuJiM0MztcdCAgc3VidHJlZSBpcyBzdGlsbCBwYXJzZWQgYXQgcnVudGltZSwgYnV0IHRoZSBlbWJlZGRlZCBcJiMzNDtrZXJuZWxcJiMzNDtcbiYjNDM7XHQgIGtleXMgcmVtYWluIGluIGJvb3RfY29tbWFuZF9saW5lIGZvciBwYXJzZV9lYXJseV9wYXJhbSgpIGFuZFxuJiM0MztcdCAgZW5kIHVwIGxhdGVyIHRoYW4gdGhlIGluaXRyZCBrZXlzIGluIHNhdmVkX2NvbW1hbmRfbGluZSwgc29cbiYjNDM7XHQgIHBhcnNlX2FyZ3MoKSBsYXN0LXdpbnMgZmF2b3JzIHRoZSBlbWJlZGRlZCB2YWx1ZXMuIElmIHlvdSBuZWVkXG4mIzQzO1x0ICBpbml0cmQgdG8gb3ZlcnJpZGUgZW1iZWRkZWQga2VybmVsLioga2V5cywgbGVhdmUgdGhpcyBvcHRpb25cbiYjNDM7XHQgIG9mZi5cbiYjNDM7XG4mIzQzO1x0ICBJZiB1bnN1cmUsIHNheSBOLlxuJiM0MztcbiBjb25maWcgQ01ETElORV9MT0dfV1JBUF9JREVBTF9MRU5cbiBcdGludCBcJiMzNDtMZW5ndGggdG8gdHJ5IHRvIHdyYXAgdGhlIGNtZGxpbmUgd2hlbiBsb2dnZWQgYXQgYm9vdFwmIzM0O1xuIFx0ZGVmYXVsdCAxMDIxXG5kaWZmIC0tZ2l0IGEvaW5pdC9tYWluLmMgYi9pbml0L21haW4uY1xuaW5kZXggZTM2MzIzMmI0MjhiNDcuLjI2MGJkNTI0MmY5NGU4IDEwMDY0NFxuLS0tIGEvaW5pdC9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2luaXQvbWFpbi5jXG5AQCAtMzc4LDEyICYjNDM7Mzc4LDE1IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9ib290X2NvbmZpZyh2b2lkKVxuIFx0aW50IHBvcywgcmV0O1xuIFx0c2l6ZV90IHNpemU7XG4gXHRjaGFyICplcnI7XG4mIzQzO1x0Ym9vbCBmcm9tX2VtYmVkZGVkID0gZmFsc2U7XG4gXG4gXHQvKiBDdXQgb3V0IHRoZSBib290Y29uZmlnIGRhdGEgZXZlbiBpZiB3ZSBoYXZlIG5vIGJvb3Rjb25maWcgb3B0aW9uICovXG4gXHRkYXRhID0gZ2V0X2Jvb3RfY29uZmlnX2Zyb21faW5pdHJkKFx1MDAyNnNpemUpO1xuIFx0LyogSWYgdGhlcmUgaXMgbm8gYm9vdGNvbmZpZyBpbiBpbml0cmQsIHRyeSBlbWJlZGRlZCBvbmUuICovXG4tXHRpZiAoIWRhdGEpXG4mIzQzO1x0aWYgKCFkYXRhKSB7XG4gXHRcdGRhdGEgPSB4YmNfZ2V0X2VtYmVkZGVkX2Jvb3Rjb25maWcoXHUwMDI2c2l6ZSk7XG4mIzQzO1x0XHRmcm9tX2VtYmVkZGVkID0gdHJ1ZTtcbiYjNDM7XHR9XG4gXG4gXHRzdHJzY3B5KHRtcF9jbWRsaW5lLCBib290X2NvbW1hbmRfbGluZSwgQ09NTUFORF9MSU5FX1NJWkUpO1xuIFx0ZXJyID0gcGFyc2VfYXJncyhcJiMzNDtib290Y29uZmlnXCYjMzQ7LCB0bXBfY21kbGluZSwgTlVMTCwgMCwgMCwgMCwgTlVMTCxcbkBAIC00MjEsOCAmIzQzOzQyNCwyNCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfYm9vdF9jb25maWcodm9pZClcbiBcdH0gZWxzZSB7XG4gXHRcdHhiY19nZXRfaW5mbyhcdTAwMjZyZXQsIE5VTEwpO1xuIFx0XHRwcl9pbmZvKFwmIzM0O0xvYWQgYm9vdGNvbmZpZzogJWxkIGJ5dGVzICVkIG5vZGVzXFxuXCYjMzQ7LCAobG9uZylzaXplLCByZXQpO1xuLVx0XHQvKiBrZXlzIHN0YXJ0aW5nIHdpdGggXCYjMzQ7a2VybmVsLlwmIzM0OyBhcmUgcGFzc2VkIHZpYSBjbWRsaW5lICovXG4tXHRcdGV4dHJhX2NvbW1hbmRfbGluZSA9IHhiY19tYWtlX2NtZGxpbmUoXCYjMzQ7a2VybmVsXCYjMzQ7KTtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBrZXlzIHN0YXJ0aW5nIHdpdGggXCYjMzQ7a2VybmVsLlwmIzM0OyBhcmUgcGFzc2VkIHZpYSBjbWRsaW5lLiBXaGVuXG4mIzQzO1x0XHQgKiB0aGlzIGJvb3Rjb25maWcgY2FtZSBmcm9tIHRoZSBlbWJlZGRlZCBzb3VyY2UgYW5kXG4mIzQzO1x0XHQgKiBzZXR1cF9hcmNoKCkgYWxyZWFkeSBwcmVwZW5kZWQgdGhlIHJlbmRlcmVkIFwmIzM0O2tlcm5lbFwmIzM0OyBzdWJ0cmVlXG4mIzQzO1x0XHQgKiB0byBib290X2NvbW1hbmRfbGluZSwgcmVuZGVyaW5nIGFnYWluIGhlcmUgd291bGQgZHVwbGljYXRlXG4mIzQzO1x0XHQgKiB0aGUga2V5cyBpbiBzYXZlZF9jb21tYW5kX2xpbmUgYW5kIG1ha2UgYWNjdW11bGF0aW5nIGhhbmRsZXJzXG4mIzQzO1x0XHQgKiAoY29uc29sZT0sIGVhcmx5Y29uPSwgLi4uKSByZS1yZWdpc3RlciB0aGUgc2FtZSB2YWx1ZS4gU2tpcFxuJiM0MztcdFx0ICogb25seSB3aGVuIHRoZSBwcmVwZW5kIHJlYWxseSBoYXBwZW5lZC5cbiYjNDM7XHRcdCAqXG4mIzQzO1x0XHQgKiBPbiBhcmNoZXMgdGhhdCBkbyBub3Qgc2VsZWN0IEFSQ0hfU1VQUE9SVFNfQ01ETElORV9GUk9NX0JPT1RDT05GSUcsXG4mIzQzO1x0XHQgKiBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUcgaXMgdW5zZWxlY3RhYmxlIGFuZFxuJiM0MztcdFx0ICogeGJjX2VtYmVkZGVkX2NtZGxpbmVfYXBwbGllZCgpIGNvbGxhcHNlcyB0byBhIHN0dWIgcmV0dXJuaW5nXG4mIzQzO1x0XHQgKiBmYWxzZSwgc28gdGhpcyBwYXRoIHN0aWxsIHJ1bnMgYW5kIHRoZSBlbWJlZGRlZCBcJiMzNDtrZXJuZWxcJiMzNDtcbiYjNDM7XHRcdCAqIGtleXMgcmVhY2ggdGhlIGNtZGxpbmUgdmlhIHRoZSBydW50aW1lIHBhcnNlciBleGFjdGx5IGFzXG4mIzQzO1x0XHQgKiBiZWZvcmUgdGhpcyBzZXJpZXMuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmICghZnJvbV9lbWJlZGRlZCB8fCAheGJjX2VtYmVkZGVkX2NtZGxpbmVfYXBwbGllZCgpKVxuJiM0MztcdFx0XHRleHRyYV9jb21tYW5kX2xpbmUgPSB4YmNfbWFrZV9jbWRsaW5lKFwmIzM0O2tlcm5lbFwmIzM0Oyk7XG4gXHRcdC8qIEFsc28sIFwmIzM0O2luaXQuXCYjMzQ7IGtleXMgYXJlIGluaXQgYXJndW1lbnRzICovXG4gXHRcdGV4dHJhX2luaXRfYXJncyA9IHhiY19tYWtlX2NtZGxpbmUoXCYjMzQ7aW5pdFwmIzM0Oyk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlIGIvbGliL01ha2VmaWxlXG5pbmRleCAyM2UwN2QxOWQwMWM5MC4uNGY5N2E1NGQxZTNkOWEgMTAwNjQ0XG4tLS0gYS9saWIvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2xpYi9NYWtlZmlsZVxuQEAgLTI3NCw2ICYjNDM7Mjc0LDIyIEBAIGZpbGVjaGtfZGVmYmNvbmYgPSBjYXQgJChvciAkKHJlYWwtcHJlcmVxcyksIC9kZXYvbnVsbClcbiAkKG9iaikvZGVmYXVsdC5iY29uZjogJChDT05GSUdfQk9PVF9DT05GSUdfRU1CRURfRklMRSkgRk9SQ0VcbiBcdCQoY2FsbCBmaWxlY2hrLGRlZmJjb25mKVxuIFxuJiM0MztvYmotJChDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUcpICYjNDM7PSBlbWJlZGRlZC1jbWRsaW5lLm9cbiYjNDM7JChvYmopL2VtYmVkZGVkLWNtZGxpbmUubzogJChvYmopL2VtYmVkZGVkX2NtZGxpbmUuYmluXG4mIzQzO1xuJiM0MzsjIFJlbmRlciB0aGUgYm9vdGNvbmZpZyBcJiMzNDtrZXJuZWxcJiMzNDsgc3VidHJlZSB0byBhIGZsYXQgY21kbGluZSBzdHJpbmcgdXNpbmdcbiYjNDM7IyB0aGUgdXNlcnNwYWNlIHRvb2xzL2Jvb3Rjb25maWcgcGFyc2VyICgtQyBtb2RlKS4gVGhlIHJ1bnRpbWUgcHJlcGVuZFxuJiM0MzsjIGhlbHBlciBlbmZvcmNlcyBDT01NQU5EX0xJTkVfU0laRSBhdCBib290LCBzbyBubyBidWlsZC10aW1lIHNpemVcbiYjNDM7IyBjaGVjayBpcyBwZXJmb3JtZWQgaGVyZSAoQ09NTUFORF9MSU5FX1NJWkUgaXMgYW4gYXJjaCBoZWFkZXJcbiYjNDM7IyBjb25zdGFudCwgbm90IGEgS2NvbmZpZyB2YWx1ZSkuXG4mIzQzO3F1aWV0X2NtZF9yZW5kZXJfY21kbGluZSA9IEJDT05GMkMgJEBcbiYjNDM7ICAgICAgY21kX3JlbmRlcl9jbWRsaW5lID0gXFxcbiYjNDM7XHQkKG9ianRyZWUpL3Rvb2xzL2Jvb3Rjb25maWcvYm9vdGNvbmZpZyAtQyAkXHUwMDNjIFx1MDAzZSAkQFxuJiM0MztcbiYjNDM7dGFyZ2V0cyAmIzQzOz0gZW1iZWRkZWRfY21kbGluZS5iaW5cbiYjNDM7JChvYmopL2VtYmVkZGVkX2NtZGxpbmUuYmluOiAkKG9iaikvZGVmYXVsdC5iY29uZiAkKG9ianRyZWUpL3Rvb2xzL2Jvb3Rjb25maWcvYm9vdGNvbmZpZyBGT1JDRVxuJiM0MztcdCQoY2FsbCBpZl9jaGFuZ2VkLHJlbmRlcl9jbWRsaW5lKVxuJiM0MztcbiBvYmotJChDT05GSUdfUkJUUkVFX1RFU1QpICYjNDM7PSByYnRyZWVfdGVzdC5vXG4gb2JqLSQoQ09ORklHX0lOVEVSVkFMX1RSRUVfVEVTVCkgJiM0Mzs9IGludGVydmFsX3RyZWVfdGVzdC5vXG4gXG5kaWZmIC0tZ2l0IGEvbGliL2Jvb3Rjb25maWcuYyBiL2xpYi9ib290Y29uZmlnLmNcbmluZGV4IGY0NDViNzcwM2ZkZDk2Li4wNWNiMWVhOWFmZGFlMyAxMDA2NDRcbi0tLSBhL2xpYi9ib290Y29uZmlnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2xpYi9ib290Y29uZmlnLmNcbkBAIC0xOSw2ICYjNDM7MTksNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vycm5vLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jYWNoZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGlsZXIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wcmludGsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwcmludGYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWJsb2NrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuQEAgLTM0LDYgJiM0MzszNSw4MyBAQCBjb25zdCBjaGFyICogX19pbml0IHhiY19nZXRfZW1iZWRkZWRfYm9vdGNvbmZpZyhzaXplX3QgKnNpemUpXG4gXHRyZXR1cm4gKCpzaXplKSA/IGVtYmVkZGVkX2Jvb3Rjb25maWdfZGF0YSA6IE5VTEw7XG4gfVxuICNlbmRpZlxuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19DTURMSU5FX0ZST01fQk9PVENPTkZJR1xuJiM0MzsvKiBlbWJlZGRlZF9rZXJuZWxfY21kbGluZSBpcyBkZWZpbmVkIGluIGVtYmVkZGVkLWNtZGxpbmUuUyAqL1xuJiM0MztleHRlcm4gX192aXNpYmxlIGNvbnN0IGNoYXIgZW1iZWRkZWRfa2VybmVsX2NtZGxpbmVbXTtcbiYjNDM7ZXh0ZXJuIF9fdmlzaWJsZSBjb25zdCBjaGFyIGVtYmVkZGVkX2tlcm5lbF9jbWRsaW5lX2VuZFtdO1xuJiM0MztcbiYjNDM7LyogU2V0IG9uY2UgdGhlIGVtYmVkZGVkIGNtZGxpbmUgaGFzIGFjdHVhbGx5IGJlZW4gcHJlcGVuZGVkLiAqL1xuJiM0MztzdGF0aWMgYm9vbCB4YmNfY21kbGluZV9hcHBsaWVkIF9faW5pdGRhdGE7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBzdHJfcHJlcGVuZCgpIC0gUHJlcGVuZCBAc3JjIGluIGZyb250IG9mIHRoZSBzdHJpbmcgaW4gQGRzdCwgaW4gcGxhY2VcbiYjNDM7ICogQGRzdDogTlVMLXRlcm1pbmF0ZWQgZGVzdGluYXRpb24gYnVmZmVyLCBjdXJyZW50bHkgQGRzdF9sZW4gYnl0ZXMgbG9uZ1xuJiM0MzsgKiBAZHN0X2xlbjogbGVuZ3RoIG9mIHRoZSBjdXJyZW50IEBkc3Qgc3RyaW5nIChleGNsdWRpbmcgaXRzIE5VTClcbiYjNDM7ICogQHNyYzogYnl0ZXMgdG8gcHJlcGVuZCAobm90IE5VTC10ZXJtaW5hdGVkKVxuJiM0MzsgKiBAc3JjX2xlbjogbnVtYmVyIG9mIGJ5dGVzIGZyb20gQHNyYyB0byBwcmVwZW5kXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBjYWxsZXIgbXVzdCBndWFyYW50ZWUgQGRzdCBoYXMgcm9vbSBmb3Igc3JjX2xlbiAmIzQzOyBkc3RfbGVuICYjNDM7IDEgYnl0ZXMuXG4mIzQzOyAqIE1vdmluZyBkc3RfbGVuICYjNDM7IDEgYnl0ZXMgY2FycmllcyBAZHN0JiMzOTtzIE5VTCB0ZXJtaW5hdG9yIHRvbywgc28gYW4gZW1wdHlcbiYjNDM7ICogQGRzdCBuZWVkcyBubyBzcGVjaWFsIGNhc2UuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBfX2luaXQgc3RyX3ByZXBlbmQoY2hhciAqZHN0LCBzaXplX3QgZHN0X2xlbixcbiYjNDM7XHRcdFx0ICAgICAgIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNyY19sZW4pXG4mIzQzO3tcbiYjNDM7XHRtZW1tb3ZlKGRzdCAmIzQzOyBzcmNfbGVuLCBkc3QsIGRzdF9sZW4gJiM0MzsgMSk7XG4mIzQzO1x0bWVtY3B5KGRzdCwgc3JjLCBzcmNfbGVuKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoKSAtIFByZXBlbmQgZW1iZWRkZWQgYm9vdGNvbmZpZyBjbWRsaW5lXG4mIzQzOyAqIEBkc3Q6IGNtZGxpbmUgYnVmZmVyIHRvIHByZXBlbmQgaW50byAobXVzdCBhbHJlYWR5IGNvbnRhaW4gYSBOVUwgYnl0ZSlcbiYjNDM7ICogQHNpemU6IHRvdGFsIGNhcGFjaXR5IG9mIEBkc3QgaW4gYnl0ZXNcbiYjNDM7ICpcbiYjNDM7ICogUHJlcGVuZCB0aGUgYnVpbGQtdGltZS1yZW5kZXJlZCBcJiMzNDtrZXJuZWxcJiMzNDsgc3VidHJlZSBvZiB0aGUgZW1iZWRkZWRcbiYjNDM7ICogYm9vdGNvbmZpZyB0byBAZHN0LiBUaGUgcmVuZGVyZWQgc3RyaW5nIGFscmVhZHkgZW5kcyB3aXRoIGEgc2luZ2xlXG4mIzQzOyAqIHNwYWNlICh0aGUgeGJjX3NucHJpbnRfY21kbGluZSgpIGludmFyaWFudCksIHdoaWNoIHNlcnZlcyBhcyB0aGVcbiYjNDM7ICogc2VwYXJhdG9yIGJldHdlZW4gdGhlIGVtYmVkZGVkIGtleXMgYW5kIGFueSBleGlzdGluZyBjb250ZW50IG9mIEBkc3QuXG4mIzQzOyAqIE9uIG92ZXJmbG93LCBsb2cgYW4gZXJyb3IgYW5kIGxlYXZlIEBkc3QgdW50b3VjaGVkIHJhdGhlciB0aGFuXG4mIzQzOyAqIHNpbGVudGx5IHRydW5jYXRpbmc6IGJvb3Rpbmcgd2l0aG91dCB0aGUgZW1iZWRkZWQgdmFsdWVzIGlzIGJldHRlclxuJiM0MzsgKiB0aGFuIHJlZnVzaW5nIHRvIGJvb3QsIGFuZCB0aGUgZXJyb3IgbWVzc2FnZSB0ZWxscyB0aGUgdXNlciB3aHlcbiYjNDM7ICogdGhlaXIgZW1iZWRkZWQga2V5cyBhcmUgbWlzc2luZy5cbiYjNDM7ICpcbiYjNDM7ICogSW50ZW5kZWQgdG8gYmUgY2FsbGVkIGZyb20gc2V0dXBfYXJjaCgpIGJlZm9yZSBwYXJzZV9lYXJseV9wYXJhbSgpIHNvXG4mIzQzOyAqIHRoYXQgZWFybHlfcGFyYW0oKSBoYW5kbGVycyBzZWUgdGhlIGVtYmVkZGVkIHZhbHVlcy5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgX19pbml0IHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHNpemVfdCBlbWJlZF9sZW4gPSBlbWJlZGRlZF9rZXJuZWxfY21kbGluZV9lbmQgLSBlbWJlZGRlZF9rZXJuZWxfY21kbGluZTtcbiYjNDM7XHRzaXplX3QgZHN0X2xlbjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFzaXplIHx8IGVtYmVkX2xlbiBcdTAwM2M9IDEpXHQvKiB0cmFpbGluZyBOVUwgb25seSAqL1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdGVtYmVkX2xlbi0tO1x0XHRcdC8qIGV4Y2x1ZGUgdHJhaWxpbmcgTlVMIGJ5dGUgKi9cbiYjNDM7XG4mIzQzO1x0ZHN0X2xlbiA9IHN0cm5sZW4oZHN0LCBzaXplKTtcbiYjNDM7XHRpZiAoZW1iZWRfbGVuICYjNDM7IGRzdF9sZW4gJiM0MzsgMSBcdTAwM2Ugc2l6ZSkge1xuJiM0MztcdFx0cHJfZXJyKFwmIzM0O2VtYmVkZGVkIGJvb3Rjb25maWcgY21kbGluZSAoJXp1IGJ5dGVzKSBkb2VzIG5vdCBmaXQgaW4gQ09NTUFORF9MSU5FX1NJWkUgd2l0aCAlenUgYnl0ZXMgYWxyZWFkeSB1c2VkOyBpZ25vcmluZyBlbWJlZGRlZCB2YWx1ZXNcXG5cJiMzNDssXG4mIzQzO1x0XHQgICAgICAgZW1iZWRfbGVuLCBkc3RfbGVuKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHN0cl9wcmVwZW5kKGRzdCwgZHN0X2xlbiwgZW1iZWRkZWRfa2VybmVsX2NtZGxpbmUsIGVtYmVkX2xlbik7XG4mIzQzO1x0eGJjX2NtZGxpbmVfYXBwbGllZCA9IHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkKCkgLSBEaWQgdGhlIGVtYmVkZGVkIGNtZGxpbmUgZ2V0IHByZXBlbmRlZD9cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuIHRydWUgaWYgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZSgpIGFjdHVhbGx5IHByZXBlbmRlZCB0aGVcbiYjNDM7ICogZW1iZWRkZWQgXCYjMzQ7a2VybmVsXCYjMzQ7IHN1YnRyZWUuIHNldHVwX2Jvb3RfY29uZmlnKCkgdXNlcyB0aGlzIHRvIGF2b2lkXG4mIzQzOyAqIHJlbmRlcmluZyB0aGUgc2FtZSBrZXlzIGEgc2Vjb25kIHRpbWUuXG4mIzQzOyAqL1xuJiM0Mztib29sIF9faW5pdCB4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4geGJjX2NtZGxpbmVfYXBwbGllZDtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gI2VuZGlmXG4gXG4gLypcbkBAIC00MjcsMTEgJiM0Mzs1MDUsMzAgQEAgc3RhdGljIGNoYXIgeGJjX25hbWVidWZbWEJDX0tFWUxFTl9NQVhdIF9faW5pdGRhdGE7XG4gaW50IF9faW5pdCB4YmNfc25wcmludF9jbWRsaW5lKGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIHN0cnVjdCB4YmNfbm9kZSAqcm9vdClcbiB7XG4gXHRzdHJ1Y3QgeGJjX25vZGUgKmtub2RlLCAqdm5vZGU7XG4tXHRjaGFyICplbmQgPSBidWYgJiM0Mzsgc2l6ZTtcbiBcdGNvbnN0IGNoYXIgKnZhbCwgKnE7XG4mIzQzO1x0c2l6ZV90IGxlbiA9IDA7XG4gXHRpbnQgcmV0O1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogVHJhY2sgdGhlIHJ1bm5pbmcgd3JpdHRlbiBsZW5ndGggcmF0aGVyIHRoYW4gYWR2YW5jaW5nIEBidWYsIHNvIHdlXG4mIzQzO1x0ICogbmV2ZXIgZm9ybSBcJiMzNDtidWYgJiM0Mzsgc2l6ZVwmIzM0OyBvciBcJiMzNDtidWYgJiM0Mzs9IHJldFwmIzM0OyB3aGlsZSBAYnVmIGlzIE5VTEwgKHRoZVxuJiM0MztcdCAqIHNpemUtcHJvYmUgY2FsbCBwYXNzZXMgYnVmPU5VTEwsIHNpemU9MCkuIE5VTEwgcG9pbnRlciBhcml0aG1ldGljXG4mIzQzO1x0ICogaXMgdW5kZWZpbmVkIGJlaGF2aW9yIGFuZCB0cmlwcyBob3N0IFVCU2FuIC8gRk9SVElGWV9TT1VSQ0Ugd2hlblxuJiM0MztcdCAqIHRoaXMgcmVuZGVyZXIgcnVucyBhdCBrZXJuZWwgYnVpbGQgdGltZS4gc25wcmludGYoTlVMTCwgMCwgLi4uKVxuJiM0MztcdCAqIGl0c2VsZiBpcyB3ZWxsIGRlZmluZWQgYW5kIHJldHVybnMgdGhlIHdvdWxkLWJlIGxlbmd0aC5cbiYjNDM7XHQgKi9cbiBcdHhiY19ub2RlX2Zvcl9lYWNoX2tleV92YWx1ZShyb290LCBrbm9kZSwgdmFsKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogQW4gZW1wdHkgb3IgdmFsdWUtb25seSBAcm9vdCAoZS5nLiBcJiMzNDtrZXJuZWwge31cJiMzNDsgb3JcbiYjNDM7XHRcdCAqIFwmIzM0O2tlcm5lbCA9IHhcJiMzNDssIHBvc3NpYmx5IGFsb25nc2lkZSBcJiMzNDtrZXJuZWwuZm9vID0gYmFyXCYjMzQ7KVxuJiM0MztcdFx0ICogeWllbGRzIEByb290IGl0c2VsZiBoZXJlLiBTa2lwIGl0OiBjb21wb3NpbmcgYSBrZXkgZm9yIGl0XG4mIzQzO1x0XHQgKiB3b3VsZCBmYWlsIHdpdGggLUVJTlZBTCwgeWV0IGFueSByZWFsIGRlc2NlbmRhbnQga2V5cyBtdXN0XG4mIzQzO1x0XHQgKiBzdGlsbCBiZSByZW5kZXJlZC4gQW4gZW50aXJlbHkgZW1wdHkgc3VidHJlZSB0aGVuIHJlbmRlcnNcbiYjNDM7XHRcdCAqIG5vdGhpbmcgYW5kIHJldHVybnMgMCByYXRoZXIgdGhhbiBhbiBlcnJvci5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKGtub2RlID09IHJvb3QpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiBcdFx0cmV0ID0geGJjX25vZGVfY29tcG9zZV9rZXlfYWZ0ZXIocm9vdCwga25vZGUsXG4gXHRcdFx0XHRcdHhiY19uYW1lYnVmLCBYQkNfS0VZTEVOX01BWCk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG5AQCAtNDM5LDEwICYjNDM7NTM2LDExIEBAIGludCBfX2luaXQgeGJjX3NucHJpbnRfY21kbGluZShjaGFyICpidWYsIHNpemVfdCBzaXplLCBzdHJ1Y3QgeGJjX25vZGUgKnJvb3QpXG4gXG4gXHRcdHZub2RlID0geGJjX25vZGVfZ2V0X2NoaWxkKGtub2RlKTtcbiBcdFx0aWYgKCF2bm9kZSkge1xuLVx0XHRcdHJldCA9IHNucHJpbnRmKGJ1ZiwgcmVzdChidWYsIGVuZCksIFwmIzM0OyVzIFwmIzM0OywgeGJjX25hbWVidWYpO1xuJiM0MztcdFx0XHRyZXQgPSBzbnByaW50ZihidWYgPyBidWYgJiM0MzsgbGVuIDogTlVMTCwgcmVzdChsZW4sIHNpemUpLFxuJiM0MztcdFx0XHRcdCAgICAgICBcJiMzNDslcyBcJiMzNDssIHhiY19uYW1lYnVmKTtcbiBcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdFx0cmV0dXJuIHJldDtcbi1cdFx0XHRidWYgJiM0Mzs9IHJldDtcbiYjNDM7XHRcdFx0bGVuICYjNDM7PSByZXQ7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcdFx0eGJjX2FycmF5X2Zvcl9lYWNoX3ZhbHVlKHZub2RlLCB2YWwpIHtcbkBAIC00NTIsMTUgJiM0Mzs1NTAsMTUgQEAgaW50IF9faW5pdCB4YmNfc25wcmludF9jbWRsaW5lKGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIHN0cnVjdCB4YmNfbm9kZSAqcm9vdClcbiBcdFx0XHQgKiB3aGl0ZXNwYWNlLlxuIFx0XHRcdCAqL1xuIFx0XHRcdHEgPSBzdHJwYnJrKHZhbCwgXCYjMzQ7IFxcdFxcclxcblwmIzM0OykgPyBcJiMzNDtcXFwmIzM0O1wmIzM0OyA6IFwmIzM0O1wmIzM0Oztcbi1cdFx0XHRyZXQgPSBzbnByaW50ZihidWYsIHJlc3QoYnVmLCBlbmQpLCBcJiMzNDslcz0lcyVzJXMgXCYjMzQ7LFxuLVx0XHRcdFx0ICAgICAgIHhiY19uYW1lYnVmLCBxLCB2YWwsIHEpO1xuJiM0MztcdFx0XHRyZXQgPSBzbnByaW50ZihidWYgPyBidWYgJiM0MzsgbGVuIDogTlVMTCwgcmVzdChsZW4sIHNpemUpLFxuJiM0MztcdFx0XHRcdCAgICAgICBcJiMzNDslcz0lcyVzJXMgXCYjMzQ7LCB4YmNfbmFtZWJ1ZiwgcSwgdmFsLCBxKTtcbiBcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdFx0cmV0dXJuIHJldDtcbi1cdFx0XHRidWYgJiM0Mzs9IHJldDtcbiYjNDM7XHRcdFx0bGVuICYjNDM7PSByZXQ7XG4gXHRcdH1cbiBcdH1cbiBcbi1cdHJldHVybiBidWYgLSAoZW5kIC0gc2l6ZSk7XG4mIzQzO1x0cmV0dXJuIGxlbjtcbiB9XG4gI3VuZGVmIHJlc3RcbiBcbmRpZmYgLS1naXQgYS9saWIvZW1iZWRkZWQtY21kbGluZS5TIGIvbGliL2VtYmVkZGVkLWNtZGxpbmUuU1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iZGE4MWI0YTQyYmVhZlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvbGliL2VtYmVkZGVkLWNtZGxpbmUuU1xuQEAgLTAsMCAmIzQzOzEsMTYgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbiYjNDM7LypcbiYjNDM7ICogRW1iZWQgdGhlIGJ1aWxkLXRpbWUtcmVuZGVyZWQgYm9vdGNvbmZpZyBcJiMzNDtrZXJuZWxcJiMzNDsgc3VidHJlZSBhcyBhIGZsYXRcbiYjNDM7ICogY21kbGluZSBzdHJpbmcuIHNldHVwX2FyY2goKSBwcmVwZW5kcyB0aGlzIHRvIGJvb3RfY29tbWFuZF9saW5lIG9uXG4mIzQzOyAqIGFyY2hpdGVjdHVyZXMgdGhhdCBzZWxlY3QgQVJDSF9TVVBQT1JUU19DTURMSU5FX0ZST01fQk9PVENPTkZJRy5cbiYjNDM7ICpcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzXG4mIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBCcmVubyBMZWl0YW8gXHUwMDNjbGVpdGFvQGRlYmlhbi5vcmdcdTAwM2VcbiYjNDM7ICovXG4mIzQzO1x0LnNlY3Rpb24gLmluaXQucm9kYXRhLmVtYmVkX2NtZGxpbmUsIFwmIzM0O2FcJiMzNDssICVwcm9nYml0c1xuJiM0MztcdC5nbG9iYWwgZW1iZWRkZWRfa2VybmVsX2NtZGxpbmVcbiYjNDM7ZW1iZWRkZWRfa2VybmVsX2NtZGxpbmU6XG4mIzQzO1x0LmluY2JpbiBcJiMzNDtsaWIvZW1iZWRkZWRfY21kbGluZS5iaW5cJiMzNDtcbiYjNDM7XHQuYnl0ZSAwXG4mIzQzO1x0Lmdsb2JhbCBlbWJlZGRlZF9rZXJuZWxfY21kbGluZV9lbmRcbiYjNDM7ZW1iZWRkZWRfa2VybmVsX2NtZGxpbmVfZW5kOlxuZGlmZiAtLWdpdCBhL3Rvb2xzL2Jvb3Rjb25maWcvTWFrZWZpbGUgYi90b29scy9ib290Y29uZmlnL01ha2VmaWxlXG5pbmRleCA5MGViNDdjOWQ4ZGU2Ny4uM2NiODA2NmQ1MTQxYmIgMTAwNjQ0XG4tLS0gYS90b29scy9ib290Y29uZmlnL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9ib290Y29uZmlnL01ha2VmaWxlXG5AQCAtMTUsNyAmIzQzOzE1LDcgQEAgb3ZlcnJpZGUgQ0ZMQUdTICYjNDM7PSAtV2FsbCAtZyAtSSQoQ1VSRElSKS9pbmNsdWRlXG4gQUxMX1RBUkdFVFMgOj0gYm9vdGNvbmZpZ1xuIEFMTF9QUk9HUkFNUyA6PSAkKHBhdHN1YnN0ICUsJChPVVRQVVQpJSwkKEFMTF9UQVJHRVRTKSlcbiBcbi1hbGw6ICQoQUxMX1BST0dSQU1TKSB0ZXN0XG4mIzQzO2FsbDogJChBTExfUFJPR1JBTVMpXG4gXG4gJChPVVRQVVQpYm9vdGNvbmZpZzogbWFpbi5jIGluY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oICQoTElCU1JDKVxuIFx0JChDQykgJChmaWx0ZXIgJS5jLCReKSAkKENGTEFHUykgJChMREZMQUdTKSAtbyAkQFxuQEAgLTI3LDQgJiM0MzsyNyw0IEBAIGluc3RhbGw6ICQoQUxMX1BST0dSQU1TKVxuIFx0aW5zdGFsbCAkKE9VVFBVVClib290Y29uZmlnICQoREVTVERJUikkKGJpbmRpcilcbiBcbiBjbGVhbjpcbi1cdCQoUk0pIC1mICQoT1VUUFVUKSoubyAkKEFMTF9QUk9HUkFNUylcbiYjNDM7XHRybSAtZiAkKE9VVFBVVCkqLm8gJChBTExfUFJPR1JBTVMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTY6NDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGJ1aWxkLXRpbWUgZmVhdHVyZSB0byByZW5kZXIgZW1iZWRkZWQgYm9vdGNvbmZpZyBpbnRvIGEgY21kbGluZSBzdHJpbmcgYW5kIHByZXBlbmRzIGl0IGR1cmluZyBlYXJseSBib290IChgc2V0dXBfYXJjaGApLiBJdCBhbHNvIGZpeGVzIGEgYnVnIGluIGB4YmNfc25wcmludF9jbWRsaW5lYCB3aGljaCBpcyBvbmx5IGNhbGxlZCBkdXJpbmcgZWFybHkgYm9vdCAoYHNldHVwX2Jvb3RfY29uZmlnYCkuIEFsbCBtb2RpZmllZCBrZXJuZWwgY29kZSBpcyBtYXJrZWQgYF9faW5pdGAsIHJ1bnMgZXhhY3RseSBvbmNlIGR1cmluZyBib290LCBhbmQgcHJvY2Vzc2VzIHN0YXRpYyBkYXRhIChmcm9tIHRoZSBrZXJuZWwgaW1hZ2Ugb3IgaW5pdHJkKS4gU2luY2UgdGhlcmUgaXMgbm8gd2F5IGZvciBhIHN5c2NhbGwgZnV6emVyIHRvIHJlYWNoIHRoaXMgY29kZSBvciBtdXRhdGUgaXRzIGlucHV0cywgaXQgY2Fubm90IGJlIG1lYW5pbmdmdWxseSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5ZGY5MjlhZWNhOWJjNTIzYWI3MDg5ZmFmYmJkNjYxMTZlZTc0M2I1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdW4gMjMgMTY6NDM6MTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Jvb3Rjb25maWcucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdAppbmRleCBmNzEyNzU4NDcyZDVjNi4uMzQ5Y2VmYmIyYmJjZGQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYm9vdGNvbmZpZy5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdApAQCAtMjM0LDYgJiM0MzsyMzQsODcgQEAgS2NvbmZpZyBvcHRpb24gc2VsZWN0ZWQuCiBOb3RlIHRoYXQgZXZlbiBpZiB5b3Ugc2V0IHRoaXMgb3B0aW9uLCB5b3UgY2FuIG92ZXJyaWRlIHRoZSBlbWJlZGRlZAogYm9vdGNvbmZpZyBieSBhbm90aGVyIGJvb3Rjb25maWcgd2hpY2ggYXR0YWNoZWQgdG8gdGhlIGluaXRyZC4KIAomIzQzO1JlbmRlcmluZyBFbWJlZGRlZCBrZXJuZWwuKiBLZXlzIGF0IEJ1aWxkIFRpbWUKJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7CiYjNDM7QnkgZGVmYXVsdCwgdGhlIGVtYmVkZGVkIGJvb3Rjb25maWcgKGBgQ09ORklHX0JPT1RfQ09ORklHX0VNQkVEPXlgYCkgaXMKJiM0MztwYXJzZWQgYXQgcnVudGltZSwgYWZ0ZXIgYGBwYXJzZV9lYXJseV9wYXJhbSgpYGAgaGFzIGFscmVhZHkgcnVuLiBFYXJseQomIzQzO3BhcmFtZXRlciBoYW5kbGVycyAoYGBtZW09YGAsIGBgZWFybHljb249YGAsIGBgbG9nbGV2ZWw9YGAsIC4uLikgdGhlcmVmb3JlCiYjNDM7Y2Fubm90IHNlZSB2YWx1ZXMgc3VwcGxpZWQgdmlhIHRoZSBlbWJlZGRlZCBgYGtlcm5lbGBgIHN1YnRyZWUuCiYjNDM7CiYjNDM7YGBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUdgYCByZXNvbHZlcyB0aGlzIGJ5IHJlbmRlcmluZyB0aGUKJiM0MztgYGtlcm5lbGBgIHN1YnRyZWUgb2YgYGBDT05GSUdfQk9PVF9DT05GSUdfRU1CRURfRklMRWBgIGludG8gYSBmbGF0IGNtZGxpbmUKJiM0MztzdHJpbmcgYXQga2VybmVsIGJ1aWxkIHRpbWUgKHZpYSBgYHRvb2xzL2Jvb3Rjb25maWcgLUNgYCkgYW5kIHByZXBlbmRpbmcKJiM0MztpdCB0byBgYGJvb3RfY29tbWFuZF9saW5lYGAgZHVyaW5nIGVhcmx5IGFyY2hpdGVjdHVyZSBzZXR1cCwgc28gdGhlIGtleXMKJiM0MzthcmUgdmlzaWJsZSB0byBgYHBhcnNlX2Vhcmx5X3BhcmFtKClgYC4KJiM0MzsKJiM0MztUaGUgb3B0aW9uIHJlcXVpcmVzIGBgQ09ORklHX0JPT1RfQ09ORklHX0VNQkVEPXlgYCwgYSBub24tZW1wdHkKJiM0MztgYENPTkZJR19CT09UX0NPTkZJR19FTUJFRF9GSUxFYGAsIGFuZCBhbiBhcmNoaXRlY3R1cmUgdGhhdCBzZWxlY3RzCiYjNDM7YGBDT05GSUdfQVJDSF9TVVBQT1JUU19DTURMSU5FX0ZST01fQk9PVENPTkZJR2BgLiBDdXJyZW50bHkgb25seSB4ODYKJiM0MztzZWxlY3RzIGl0OyBvbiBvdGhlciBhcmNoaXRlY3R1cmVzIHRoZSBlbWJlZGRlZCBib290Y29uZmlnIHN0aWxsIHdvcmtzLAomIzQzO2J1dCBvbmx5IHRocm91Z2ggdGhlIGxhdGUgcnVudGltZSBwYXJzZXIuCiYjNDM7CiYjNDM7VGhlIHNhbWUgYGBib290Y29uZmlnYGAgb3B0LWluIGFwcGxpZXMgYXMgZWxzZXdoZXJlOiB0aGUgcmVuZGVyZWQga2V5cwomIzQzO2FyZSBwcmVwZW5kZWQgb25seSB3aGVuIGBgYm9vdGNvbmZpZ2BgIChpbiBhbnkgZm9ybSkgYXBwZWFycyBvbiB0aGUKJiM0MztrZXJuZWwgY29tbWFuZCBsaW5lLCBvciB3aGVuIGBgQ09ORklHX0JPT1RfQ09ORklHX0ZPUkNFYGAgaXMgc2V0LCB3aGljaAomIzQzO2RlZmF1bHRzIHRvIGBgeWBgIHdoZW4gYGBDT05GSUdfQk9PVF9DT05GSUdfRU1CRURgYCBpcyBzZXQuCiYjNDM7CiYjNDM7Rm9yIGV4YW1wbGUsIGdpdmVuOjoKJiM0MzsKJiM0Mzsga2VybmVsIHsKJiM0MzsgICBsb2dsZXZlbCA9IDcKJiM0MzsgICBtZW0gPSA0RwomIzQzOyB9CiYjNDM7CiYjNDM7dGhlIGtlcm5lbCBib290cyBhcyBpZiBgYGxvZ2xldmVsPTcgbWVtPTRHYGAgaGFkIGJlZW4gcHJlcGVuZGVkIHRvIHRoZQomIzQzO2Jvb3Rsb2FkZXIgY29tbWFuZCBsaW5lLCB3aXRoIHRoZSB2YWx1ZXMgdmlzaWJsZSB0byBlYXJseS1wYXJzZWQKJiM0MztoYW5kbGVycy4gQ29tbWEtc2VwYXJhdGVkIHZhbHVlcyBhcmUgc3RpbGwgZXhwYW5kZWQgaW50byBtdWx0aXBsZQomIzQzO2NtZGxpbmUgZW50cmllcyBwZXIgdGhlIGJvb3Rjb25maWcgYXJyYXkgY29udmVudGlvbiAtLSB0aGUgZW1iZWRkZWQKJiM0MztgYGtlcm5lbC5lYXJseWNvbiA9ICYjMzQ7dWFydDgyNTAsaW8sMHgzZjgmIzM0O2BgIG11c3QgYmUgcXVvdGVkIHRvIGxhbmQgYXMgYQomIzQzO3NpbmdsZSBgYGVhcmx5Y29uPWBgIGVudHJ5LCBleGFjdGx5IGFzIGZvciB0aGUgcnVudGltZSBwYXJzZXIuCiYjNDM7CiYjNDM7SWYgdGhlIHJlbmRlcmVkIHN0cmluZyB3b3VsZCBub3QgZml0IGluIGBgQ09NTUFORF9MSU5FX1NJWkVgYCB0b2dldGhlcgomIzQzO3dpdGggdGhlIGV4aXN0aW5nIGNvbW1hbmQgbGluZSwgdGhlIHByZXBlbmQgaXMgc2tpcHBlZCBhbmQgYW4gZXJyb3IgaXMKJiM0Mztsb2dnZWQsIHNvIGFuIG92ZXJzaXplZCBlbWJlZGRlZCBib290Y29uZmlnIGNhbm5vdCBicmljayBhIGJvb3QuCiYjNDM7CiYjNDM7SW50ZXJhY3Rpb24gd2l0aCBvdGhlciBjb21tYW5kIGxpbmUgYW5kIGJvb3Rjb25maWcgc291cmNlcwomIzQzO35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KJiM0MzsKJiM0MztXaXRoIGBgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHPXlgYCB0aGUgcmVuZGVyZWQgYGBrZXJuZWxgYAomIzQzO3N1YnRyZWUgYmVoYXZlcyBsaWtlIGEgYnVpbGQtdGltZSBjb21tYW5kIGxpbmUgKHNpbWlsYXIgdG8KJiM0MztgYENPTkZJR19DTURMSU5FYGApLCBub3QgbGlrZSBhIGJvb3Rjb25maWcgc291cmNlLiBJdCBpcyBwcmVwZW5kZWQgdG8KJiM0MztgYGJvb3RfY29tbWFuZF9saW5lYGAgaW4gYGBzZXR1cF9hcmNoKClgYCwgYmVmb3JlIGBgcGFyc2VfZWFybHlfcGFyYW0oKWBgCiYjNDM7YW5kIGxvbmcgYmVmb3JlIHRoZSBydW50aW1lIHBhcnNlciBsb29rcyBhdCBhbiBpbml0cmQuIE9wdGlvbnMgY2FuIHJlYWNoCiYjNDM7dGhlIGtlcm5lbCBmcm9tIHVwIHRvIGZvdXIgcGxhY2VzOgomIzQzOwomIzQzOy0gQm9vdGxvYWRlciBjb21tYW5kIGxpbmU6IHRoZSBhcmd1bWVudHMgdGhlIGJvb3QgbG9hZGVyIHBhc3Nlcy4gVGhlCiYjNDM7ICBlbWJlZGRlZCBjbWRsaW5lIGlzIHByZXBlbmRlZCBpbiBmcm9udCBvZiB0aGVtLCBzbyBmb3IgbGFzdC1vbmUtd2lucwomIzQzOyAgcGFyYW1ldGVycyBhIGJvb3Rsb2FkZXIgb3B0aW9uIHN0aWxsIG92ZXJyaWRlcyB0aGUgZW1iZWRkZWQgdmFsdWUuCiYjNDM7ICBWaXNpYmxlIGluIC9wcm9jL2NtZGxpbmUuCiYjNDM7LSBFbWJlZGRlZCBjbWRsaW5lICh0aGlzIG9wdGlvbik6IHRoZSByZW5kZXJlZCBgYGtlcm5lbGBgIHN1YnRyZWUsCiYjNDM7ICBwcmVwZW5kZWQgZWFybHkgc28gaXQgaXMgc2VlbiBieSBgYHBhcnNlX2Vhcmx5X3BhcmFtKClgYC4gVmlzaWJsZSBpbgomIzQzOyAgL3Byb2MvY21kbGluZS4KJiM0MzstIEluaXRyZCBib290Y29uZmlnOiBwYXJzZWQgbGF0ZSBpbiBgYHNldHVwX2Jvb3RfY29uZmlnKClgYDsgaXRzCiYjNDM7ICBgYGtlcm5lbGBgIGtleXMgYXJlIHBsYWNlZCBhaGVhZCBvZiBgYGJvb3RfY29tbWFuZF9saW5lYGAsIGkuZS4gYmVmb3JlCiYjNDM7ICB0aGUgZW1iZWRkZWQgY21kbGluZSwgc28gbGFzdC13aW5zIGZhdm9ycyB0aGUgZW1iZWRkZWQgdmFsdWVzLiBBcyBhCiYjNDM7ICBib290Y29uZmlnIHNvdXJjZSwgYW4gaW5pdHJkIGJvb3Rjb25maWcgc3RpbGwgcmVwbGFjZXMgdGhlIGVtYmVkZGVkCiYjNDM7ICBib290Y29uZmlnLiBWaXNpYmxlIGluIC9wcm9jL2NtZGxpbmUgYW5kIC9wcm9jL2Jvb3Rjb25maWcuCiYjNDM7LSBFbWJlZGRlZCBib290Y29uZmlnIChydW50aW1lKTogcGFyc2VkIGxhdGUsIG9ubHkgd2hlbiBubyBpbml0cmQKJiM0MzsgIGJvb3Rjb25maWcgaXMgcHJlc2VudC4gVmlzaWJsZSBpbiAvcHJvYy9jbWRsaW5lIGFuZCAvcHJvYy9ib290Y29uZmlnLgomIzQzOwomIzQzO1NvIHdpdGggdGhpcyBvcHRpb24gdGhlIGVtYmVkZGVkIGBga2VybmVsLipgYCB2YWx1ZXMgdGFrZSBwcmVjZWRlbmNlCiYjNDM7b3ZlciBhbiBpbml0cmQgYm9vdGNvbmZpZyYjMzk7cyBgYGtlcm5lbC4qYGAgdmFsdWVzOiBmb3IgZWFybHkgcGFyYW1ldGVycwomIzQzO3RoZSBpbml0cmQgaXMgbm90IHBhcnNlZCB5ZXQsIGFuZCBmb3Igb3JkaW5hcnkgcGFyYW1ldGVycyB0aGUgZW1iZWRkZWQKJiM0MztrZXlzIGxhbmQgbGF0ZXIgaW4gdGhlIGNvbW1hbmQgbGluZS4gSWYgeW91IG5lZWQgYW4gaW5pdHJkIGJvb3Rjb25maWcgdG8KJiM0MztvdmVycmlkZSB0aGUgZW1iZWRkZWQgYGBrZXJuZWwuKmBgIGtleXMsIGxlYXZlIHRoaXMgb3B0aW9uIG9mZiBhbmQgcmVseQomIzQzO29uIHRoZSBydW50aW1lIHBhcnNlci4KJiM0MzsKJiM0MztUaGUgcmVuZGVyZWQgc3RyaW5nIGlzIHBhcnQgb2YgdGhlIGNvbW1hbmQgbGluZSwgc28gaXQgYXBwZWFycyBpbgomIzQzOy9wcm9jL2NtZGxpbmUuIEl0IGlzIGRlbGliZXJhdGVseSBub3Qgc2hvd24gaW4gL3Byb2MvYm9vdGNvbmZpZzogdGhhdAomIzQzO2ZpbGUga2VlcHMgcmVwb3J0aW5nIHRoZSBwYXJzZWQgYm9vdGNvbmZpZyB0cmVlIC0tIHRoZSBpbml0cmQgYm9vdGNvbmZpZwomIzQzO2lmIHByZXNlbnQsIG90aGVyd2lzZSB0aGUgZW1iZWRkZWQgYm9vdGNvbmZpZyAtLSBpbmRlcGVuZGVudCBvZiB3aGV0aGVyCiYjNDM7YnVpbGQtdGltZSBjbWRsaW5lIHJlbmRlcmluZyBpcyBlbmFibGVkLgomIzQzOwogS2VybmVsIHBhcmFtZXRlcnMgdmlhIEJvb3QgQ29uZmlnCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCBkOTVkM2VmNzc3NzNmYS4uNzUzMzQxOTc3M2NhOWMgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTCkBAIC05ODEzLDYgJiM0Mzs5ODEzLDcgQEAgRjoJZnMvcHJvYy9ib290Y29uZmlnLmMKIEY6CWluY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oCiBGOglsaWIvYm9vdGNvbmZpZy1kYXRhLlMKIEY6CWxpYi9ib290Y29uZmlnLmMKJiM0MztGOglsaWIvZW1iZWRkZWQtY21kbGluZS5TCiBGOgl0b29scy9ib290Y29uZmlnLyoKIEY6CXRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy8qCiAKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggZDFjNTk1ZGI1NWM5NTYuLjFmNTZhNjg5MmZlYjQwIDEwMDY0NAotLS0gYS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9NYWtlZmlsZQpAQCAtMTUzMSw2ICYjNDM7MTUzMSwyMiBAQCBwcmVwYXJlOiB0b29scy9icGYvcmVzb2x2ZV9idGZpZHMKIGVuZGlmCiBlbmRpZgogCiYjNDM7IyB0b29scy9ib290Y29uZmlnIHJlbmRlcnMgdGhlIGVtYmVkZGVkIGJvb3Rjb25maWcgaW50byBhIGNtZGxpbmUgYXQgYnVpbGQgdGltZS4KJiM0MztpZmRlZiBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUcKJiM0MztwcmVwYXJlOiB0b29scy9ib290Y29uZmlnCiYjNDM7ZW5kaWYKJiM0MzsKJiM0MzsjIHRvb2xzL2Jvb3Rjb25maWcgaXMgcnVuIG9uIHRoZSBidWlsZCBob3N0IGR1cmluZyBwcmVwYXJlLCBzbyBmb3JjZSBhIGhvc3QKJiM0MzsjIGJpbmFyeSBoZXJlOyBpdHMgb3duIE1ha2VmaWxlIGtlZXBzICQoQ0MpIGZvciBzdGFuZGFsb25lIGFuZCBjcm9zcyBidWlsZHMuCiYjNDM7IyBDUk9TU19DT01QSUxFPSBpcyBjbGVhcmVkIHNvIHRvb2xzL3NjcmlwdHMvTWFrZWZpbGUuaW5jbHVkZSBkb2VzIG5vdCBpbmplY3QKJiM0MzsjIHRoZSB0YXJnZXQmIzM5O3MgLS10YXJnZXQ9Ly0tc3lzcm9vdD0gZmxhZ3MgaW50byB0aGUgaG9zdCBjbGFuZyBpbnZvY2F0aW9uIHVuZGVyCiYjNDM7IyBMTFZNPTEgY3Jvc3MgYnVpbGRzICh3aGljaCB3b3VsZCBwcm9kdWNlIGEgdGFyZ2V0IGJpbmFyeSB0aGF0IGZhaWxzIHRvIGV4ZWMpLgomIzQzO3Rvb2xzL2Jvb3Rjb25maWc6IGV4cG9ydCBDQyA6PSAkKEhPU1RDQykKJiM0Mzt0b29scy9ib290Y29uZmlnOiBGT1JDRQomIzQzOwkkKFEpbWtkaXIgLXAgJChvYmp0cmVlKS90b29scwomIzQzOwkkKFEpJChNQUtFKSBPPSQoYWJzcGF0aCAkKG9ianRyZWUpKSBzdWJkaXI9dG9vbHMgLUMgJChzcmN0cmVlKS90b29scy8gXAomIzQzOwkJYm9vdGNvbmZpZyBDUk9TU19DT01QSUxFPQomIzQzOwogIyBUaGUgdG9vbHMgYnVpbGQgc3lzdGVtIGlzIG5vdCBhIHBhcnQgb2YgS2J1aWxkIGFuZCB0ZW5kcyB0byBpbnRyb2R1Y2UKICMgaXRzIG93biB1bmlxdWUgaXNzdWVzLiBJZiB5b3UgbmVlZCB0byBpbnRlZ3JhdGUgYSBuZXcgdG9vbCBpbnRvIEtidWlsZCwKICMgcGxlYXNlIGNvbnNpZGVyIGxvY2F0aW5nIHRoYXQgdG9vbCBvdXRzaWRlIHRoZSB0b29scy8gdHJlZSBhbmQgdXNpbmcgdGhlCkBAIC0xNTU3LDYgJiM0MzsxNTczLDE1IEBAIGlmbmVxICgkKHdpbGRjYXJkICQob2JqdG9vbF9PKSksKQogCSQoUSkkKE1BS0UpIC1zQyAkKGFic19zcmN0cmVlKS90b29scy9vYmp0b29sIE89JChvYmp0b29sX08pIHNyY3RyZWU9JChhYnNfc3JjdHJlZSkgJChwYXRzdWJzdCBvYmp0b29sXyUsJSwkQCkKIGVuZGlmCiAKJiM0MztQSE9OWSAmIzQzOz0gYm9vdGNvbmZpZ19jbGVhbgomIzQzOwomIzQzO2Jvb3Rjb25maWdfTyA9ICQoYWJzcGF0aCAkKG9ianRyZWUpKS90b29scy9ib290Y29uZmlnCiYjNDM7CiYjNDM7Ym9vdGNvbmZpZ19jbGVhbjoKJiM0MztpZm5lcSAoJCh3aWxkY2FyZCAkKGJvb3Rjb25maWdfTykpLCkKJiM0MzsJJChRKSQoTUFLRSkgLXNDICQoc3JjdHJlZSkvdG9vbHMvYm9vdGNvbmZpZyBPPSQoYm9vdGNvbmZpZ19PKSBjbGVhbgomIzQzO2VuZGlmCiYjNDM7CiB0b29scy86IEZPUkNFCiAJJChRKW1rZGlyIC1wICQob2JqdHJlZSkvdG9vbHMKIAkkKFEpJChNQUtFKSBPPSQoYWJzcGF0aCAkKG9ianRyZWUpKSBzdWJkaXI9dG9vbHMgLUMgJChzcmN0cmVlKS90b29scy8KQEAgLTE3MzIsNyAmIzQzOzE3NTcsNyBAQCB2bWxpbnV4Y2xlYW46CiAJJChRKSQoQ09ORklHX1NIRUxMKSAkKHNyY3RyZWUpL3NjcmlwdHMvbGluay12bWxpbnV4LnNoIGNsZWFuCiAJJChRKSQoaWYgJChBUkNIX1BPU1RMSU5LKSwgJChNQUtFKSAtZiAkKEFSQ0hfUE9TVExJTkspIGNsZWFuKQogCi1jbGVhbjogYXJjaGNsZWFuIHZtbGludXhjbGVhbiByZXNvbHZlX2J0Zmlkc19jbGVhbiBvYmp0b29sX2NsZWFuCiYjNDM7Y2xlYW46IGFyY2hjbGVhbiB2bWxpbnV4Y2xlYW4gcmVzb2x2ZV9idGZpZHNfY2xlYW4gb2JqdG9vbF9jbGVhbiBib290Y29uZmlnX2NsZWFuCiAKICMgbXJwcm9wZXIgLSBEZWxldGUgYWxsIGdlbmVyYXRlZCBmaWxlcywgaW5jbHVkaW5nIC5jb25maWcKICMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcgYi9hcmNoL3g4Ni9LY29uZmlnCmluZGV4IGZhNGYwMDc5NjE0Y2QwLi5hZGJjYWFkODAxMzA4MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9LY29uZmlnCkBAIC0xMjcsNiAmIzQzOzEyNyw3IEBAIGNvbmZpZyBYODYKIAlzZWxlY3QgQVJDSF9TVVBQT1JUU19OVU1BX0JBTEFOQ0lORwlpZiBYODZfNjQKIAlzZWxlY3QgQVJDSF9TVVBQT1JUU19LTUFQX0xPQ0FMX0ZPUkNFX01BUAlpZiBOUl9DUFVTICZsdDs9IDQwOTYKIAlzZWxlY3QgQVJDSF9TVVBQT1JUU19DRkkJCWlmIFg4Nl82NAomIzQzOwlzZWxlY3QgQVJDSF9TVVBQT1JUU19DTURMSU5FX0ZST01fQk9PVENPTkZJRwogCXNlbGVjdCBBUkNIX1VTRVNfQ0ZJX1RSQVBTCQlpZiBYODZfNjQgJmFtcDsmYW1wOyBDRkkKIAlzZWxlY3QgQVJDSF9TVVBQT1JUU19MVE9fQ0xBTkcKIAlzZWxlY3QgQVJDSF9TVVBQT1JUU19MVE9fQ0xBTkdfVEhJTgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NldHVwLmMgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYwppbmRleCA0Njg4MmNlNzljM2E0ZC4uYzk3M2EyY2ViY2QwNGUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCkBAIC02LDYgJiM0Mzs2LDcgQEAKICAqIHBhcnRzIG9mIGVhcmx5IGtlcm5lbCBpbml0aWFsaXphdGlvbi4KICAqLwogI2luY2x1ZGUgJmx0O2xpbnV4L2FjcGkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYm9vdGNvbmZpZy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2NvbnNvbGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jcHUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jcmFzaF9kdW1wLmgmZ3Q7CkBAIC04ODEsNiAmIzQzOzg4MiwzNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgeDg2X3JlcG9ydF9ueCh2b2lkKQogICogTm90ZTogT24geDg2XzY0LCBmaXhtYXBzIGFyZSByZWFkeSBmb3IgdXNlIGV2ZW4gYmVmb3JlIHRoaXMgaXMgY2FsbGVkLgogICovCiAKJiM0MzsjaWZkZWYgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHCiYjNDM7c3RhdGljIGludCBfX2luaXQgYm9vdGNvbmZpZ19vcHRpbihjaGFyICpwYXJhbSwgY2hhciAqdmFsLAomIzQzOwkJCQkgICBjb25zdCBjaGFyICp1bnVzZWQsIHZvaWQgKmFyZykKJiM0Mzt7CiYjNDM7CWlmICghc3RyY21wKHBhcmFtLCAmIzM0O2Jvb3Rjb25maWcmIzM0OykpCiYjNDM7CQkqKGJvb2wgKilhcmcgPSB0cnVlOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBEaWQgdGhlIHVzZXIgb3B0IGluIHRvIGJvb3Rjb25maWcgb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmU/IFVzZQomIzQzOyAqIHBhcnNlX2FyZ3MoKSBzbyB0aGlzIG1hdGNoZXMgc2V0dXBfYm9vdF9jb25maWcoKSBleGFjdGx5LCBpbmNsdWRpbmcKJiM0MzsgKiBzdG9wcGluZyBhdCB0aGUgJiMzNDstLSYjMzQ7IHRoYXQgc2VwYXJhdGVzIGluaXQgYXJndW1lbnRzLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIF9faW5pdCBib290Y29uZmlnX2NtZGxpbmVfcmVxdWVzdGVkKHZvaWQpCiYjNDM7ewomIzQzOwlzdGF0aWMgY2hhciB0bXBfY21kbGluZVtDT01NQU5EX0xJTkVfU0laRV0gX19pbml0ZGF0YTsKJiM0MzsJYm9vbCBmb3VuZCA9IGZhbHNlOwomIzQzOwomIzQzOwlpZiAoSVNfRU5BQkxFRChDT05GSUdfQk9PVF9DT05GSUdfRk9SQ0UpKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CXN0cnNjcHkodG1wX2NtZGxpbmUsIGJvb3RfY29tbWFuZF9saW5lLCBDT01NQU5EX0xJTkVfU0laRSk7CiYjNDM7CWlmIChJU19FUlIocGFyc2VfYXJncygmIzM0O2Jvb3Rjb25maWcmIzM0OywgdG1wX2NtZGxpbmUsIE5VTEwsIDAsIDAsIDAsCiYjNDM7CQkJICAgICAgJmFtcDtmb3VuZCwgYm9vdGNvbmZpZ19vcHRpbikpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gZm91bmQ7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwogdm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKQogewogI2lmZGVmIENPTkZJR19YODZfMzIKQEAgLTkyNCw2ICYjNDM7OTU2LDE3IEBAIHZvaWQgX19pbml0IHNldHVwX2FyY2goY2hhciAqKmNtZGxpbmVfcCkKIAlidWlsdGluX2NtZGxpbmVfYWRkZWQgPSB0cnVlOwogI2VuZGlmCiAKJiM0MzsjaWZkZWYgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHCiYjNDM7CS8qCiYjNDM7CSAqIFByZXBlbmQgdGhlIGJ1aWxkLXRpbWUtcmVuZGVyZWQgZW1iZWRkZWQgJiMzNDtrZXJuZWwmIzM0OyBrZXlzIGhlcmUgc28KJiM0MzsJICogcGFyc2VfZWFybHlfcGFyYW0oKSBiZWxvdyBzZWVzIHRoZW0sIGdhdGluZyBvbiB0aGUgc2FtZSBvcHQtaW4KJiM0MzsJICogYXMgdGhlIHJ1bnRpbWUgcGFyc2VyIChzZWUgYm9vdGNvbmZpZ19jbWRsaW5lX3JlcXVlc3RlZCgpKS4KJiM0MzsJICovCiYjNDM7CWlmIChib290Y29uZmlnX2NtZGxpbmVfcmVxdWVzdGVkKCkpCiYjNDM7CQl4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lKGJvb3RfY29tbWFuZF9saW5lLAomIzQzOwkJCQkJICAgICBDT01NQU5EX0xJTkVfU0laRSk7CiYjNDM7I2VuZGlmCiYjNDM7CiAJc3Ryc2NweShjb21tYW5kX2xpbmUsIGJvb3RfY29tbWFuZF9saW5lLCBDT01NQU5EX0xJTkVfU0laRSk7CiAJKmNtZGxpbmVfcCA9IGNvbW1hbmRfbGluZTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmggYi9pbmNsdWRlL2xpbnV4L2Jvb3Rjb25maWcuaAppbmRleCAxYzdmM2I3NGZmY2YzOC4uNDMzMjRiNDc3ZjEzYWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oCkBAIC0zMDgsNCAmIzQzOzMwOCwxMyBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKnhiY19nZXRfZW1iZWRkZWRfYm9vdGNvbmZpZyhzaXplX3QgKnNpemUpCiB9CiAjZW5kaWYKIAomIzQzOy8qIEJ1aWxkLXRpbWUtcmVuZGVyZWQgYm9vdGNvbmZpZyBjbWRsaW5lIHByZXBlbmRlZCBpbiBzZXR1cF9hcmNoKCkgKi8KJiM0MzsjaWZkZWYgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHCiYjNDM7dm9pZCBfX2luaXQgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZShjaGFyICpkc3QsIHNpemVfdCBzaXplKTsKJiM0Mztib29sIF9faW5pdCB4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkKHZvaWQpOwomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSkgeyB9CiYjNDM7c3RhdGljIGlubGluZSBib29sIHhiY19lbWJlZGRlZF9jbWRsaW5lX2FwcGxpZWQodm9pZCkgeyByZXR1cm4gZmFsc2U7IH0KJiM0MzsjZW5kaWYKJiM0MzsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5pdC9LY29uZmlnIGIvaW5pdC9LY29uZmlnCmluZGV4IDQ0MDNlNTM4NzZlMTA3Li4xY2Y2Y2Y2Mjk4YzRlZSAxMDA2NDQKLS0tIGEvaW5pdC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2luaXQvS2NvbmZpZwpAQCAtMTU2Niw2ICYjNDM7MTU2Niw0MiBAQCBjb25maWcgQk9PVF9DT05GSUdfRU1CRURfRklMRQogCSAgVGhpcyBib290Y29uZmlnIHdpbGwgYmUgdXNlZCBpZiB0aGVyZSBpcyBubyBpbml0cmQgb3Igbm8gb3RoZXIKIAkgIGJvb3Rjb25maWcgaW4gdGhlIGluaXRyZC4KIAomIzQzO2NvbmZpZyBBUkNIX1NVUFBPUlRTX0NNRExJTkVfRlJPTV9CT09UQ09ORklHCiYjNDM7CWJvb2wKJiM0MzsJaGVscAomIzQzOwkgIFNpbGVudCBzeW1ib2w7IG5vIEMgY29kZSByZWFkcyBpdCBkaXJlY3RseS4gQXJjaGl0ZWN0dXJlcwomIzQzOwkgIHNlbGVjdCBpdCBvbmNlIHRoZWlyIHNldHVwX2FyY2goKSBjYWxscwomIzQzOwkgIHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoKSBiZWZvcmUgcGFyc2VfZWFybHlfcGFyYW0oKS4KJiM0MzsJICBJdHMgb25seSByb2xlIGlzIHRvIGdhdGUgdGhlIHVzZXItdmlzaWJsZQomIzQzOwkgIENNRExJTkVfRlJPTV9CT09UQ09ORklHIG9wdGlvbiBwZXItYXJjaCwgdGhlIHNhbWUKJiM0MzsJICBBUkNIX1NVUFBPUlRTXyogaWRpb20gdXNlZCBieSBBUkNIX1NVUFBPUlRTX0NGSSwgZXRjLgomIzQzOwomIzQzO2NvbmZpZyBDTURMSU5FX0ZST01fQk9PVENPTkZJRwomIzQzOwlib29sICYjMzQ7UmVuZGVyIGVtYmVkZGVkIGJvb3Rjb25maWcgYXMga2VybmVsIGNtZGxpbmUgYXQgYnVpbGQgdGltZSYjMzQ7CiYjNDM7CWRlcGVuZHMgb24gQk9PVF9DT05GSUdfRU1CRURfRklMRSAhPSAmIzM0OyYjMzQ7CiYjNDM7CWRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19DTURMSU5FX0ZST01fQk9PVENPTkZJRwomIzQzOwlkZXBlbmRzIG9uIENNRExJTkUgPSAmIzM0OyYjMzQ7CiYjNDM7CWRlZmF1bHQgbgomIzQzOwloZWxwCiYjNDM7CSAgUmVuZGVyIHRoZSAmIzM0O2tlcm5lbCYjMzQ7IHN1YnRyZWUgb2YgdGhlIGVtYmVkZGVkIGJvb3Rjb25maWcgZmlsZSBpbnRvIGEKJiM0MzsJICBmbGF0IGNtZGxpbmUgc3RyaW5nIGF0IGtlcm5lbCBidWlsZCB0aW1lIGFuZCBwcmVwZW5kIGl0IHRvCiYjNDM7CSAgYm9vdF9jb21tYW5kX2xpbmUgZHVyaW5nIGVhcmx5IGFyY2hpdGVjdHVyZSBzZXR1cC4gVGhpcyBtYWtlcwomIzQzOwkgIGVhcmx5X3BhcmFtKCkgaGFuZGxlcnMgKGUuZy4gbWVtPSwgZWFybHljb249LCBsb2dsZXZlbD0pIHNlZSB0aGUKJiM0MzsJICB2YWx1ZXMgc3VwcGxpZWQgdmlhIHRoZSBlbWJlZGRlZCBib290Y29uZmlnLgomIzQzOwomIzQzOwkgIFRoZSBydW50aW1lIGJvb3Rjb25maWcgcGFyc2VyIGlzIHVuYWZmZWN0ZWQsIHNvIHRyZWUtc3RydWN0dXJlZAomIzQzOwkgIGNvbnN1bWVycyBzdWNoIGFzIGZ0cmFjZSBib290LXRpbWUgdHJhY2luZyBrZWVwIHdvcmtpbmcuCiYjNDM7CiYjNDM7CSAgTm90ZTogd2hlbiBhbiBpbml0cmQgYWxzbyBjYXJyaWVzIGEgYm9vdGNvbmZpZywgaXRzICYjMzQ7a2VybmVsJiMzNDsKJiM0MzsJICBzdWJ0cmVlIGlzIHN0aWxsIHBhcnNlZCBhdCBydW50aW1lLCBidXQgdGhlIGVtYmVkZGVkICYjMzQ7a2VybmVsJiMzNDsKJiM0MzsJICBrZXlzIHJlbWFpbiBpbiBib290X2NvbW1hbmRfbGluZSBmb3IgcGFyc2VfZWFybHlfcGFyYW0oKSBhbmQKJiM0MzsJICBlbmQgdXAgbGF0ZXIgdGhhbiB0aGUgaW5pdHJkIGtleXMgaW4gc2F2ZWRfY29tbWFuZF9saW5lLCBzbwomIzQzOwkgIHBhcnNlX2FyZ3MoKSBsYXN0LXdpbnMgZmF2b3JzIHRoZSBlbWJlZGRlZCB2YWx1ZXMuIElmIHlvdSBuZWVkCiYjNDM7CSAgaW5pdHJkIHRvIG92ZXJyaWRlIGVtYmVkZGVkIGtlcm5lbC4qIGtleXMsIGxlYXZlIHRoaXMgb3B0aW9uCiYjNDM7CSAgb2ZmLgomIzQzOwomIzQzOwkgIElmIHVuc3VyZSwgc2F5IE4uCiYjNDM7CiBjb25maWcgQ01ETElORV9MT0dfV1JBUF9JREVBTF9MRU4KIAlpbnQgJiMzNDtMZW5ndGggdG8gdHJ5IHRvIHdyYXAgdGhlIGNtZGxpbmUgd2hlbiBsb2dnZWQgYXQgYm9vdCYjMzQ7CiAJZGVmYXVsdCAxMDIxCmRpZmYgLS1naXQgYS9pbml0L21haW4uYyBiL2luaXQvbWFpbi5jCmluZGV4IGUzNjMyMzJiNDI4YjQ3Li4yNjBiZDUyNDJmOTRlOCAxMDA2NDQKLS0tIGEvaW5pdC9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvaW5pdC9tYWluLmMKQEAgLTM3OCwxMiAmIzQzOzM3OCwxNSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfYm9vdF9jb25maWcodm9pZCkKIAlpbnQgcG9zLCByZXQ7CiAJc2l6ZV90IHNpemU7CiAJY2hhciAqZXJyOwomIzQzOwlib29sIGZyb21fZW1iZWRkZWQgPSBmYWxzZTsKIAogCS8qIEN1dCBvdXQgdGhlIGJvb3Rjb25maWcgZGF0YSBldmVuIGlmIHdlIGhhdmUgbm8gYm9vdGNvbmZpZyBvcHRpb24gKi8KIAlkYXRhID0gZ2V0X2Jvb3RfY29uZmlnX2Zyb21faW5pdHJkKCZhbXA7c2l6ZSk7CiAJLyogSWYgdGhlcmUgaXMgbm8gYm9vdGNvbmZpZyBpbiBpbml0cmQsIHRyeSBlbWJlZGRlZCBvbmUuICovCi0JaWYgKCFkYXRhKQomIzQzOwlpZiAoIWRhdGEpIHsKIAkJZGF0YSA9IHhiY19nZXRfZW1iZWRkZWRfYm9vdGNvbmZpZygmYW1wO3NpemUpOwomIzQzOwkJZnJvbV9lbWJlZGRlZCA9IHRydWU7CiYjNDM7CX0KIAogCXN0cnNjcHkodG1wX2NtZGxpbmUsIGJvb3RfY29tbWFuZF9saW5lLCBDT01NQU5EX0xJTkVfU0laRSk7CiAJZXJyID0gcGFyc2VfYXJncygmIzM0O2Jvb3Rjb25maWcmIzM0OywgdG1wX2NtZGxpbmUsIE5VTEwsIDAsIDAsIDAsIE5VTEwsCkBAIC00MjEsOCAmIzQzOzQyNCwyNCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfYm9vdF9jb25maWcodm9pZCkKIAl9IGVsc2UgewogCQl4YmNfZ2V0X2luZm8oJmFtcDtyZXQsIE5VTEwpOwogCQlwcl9pbmZvKCYjMzQ7TG9hZCBib290Y29uZmlnOiAlbGQgYnl0ZXMgJWQgbm9kZXNcbiYjMzQ7LCAobG9uZylzaXplLCByZXQpOwotCQkvKiBrZXlzIHN0YXJ0aW5nIHdpdGggJiMzNDtrZXJuZWwuJiMzNDsgYXJlIHBhc3NlZCB2aWEgY21kbGluZSAqLwotCQlleHRyYV9jb21tYW5kX2xpbmUgPSB4YmNfbWFrZV9jbWRsaW5lKCYjMzQ7a2VybmVsJiMzNDspOwomIzQzOwkJLyoKJiM0MzsJCSAqIGtleXMgc3RhcnRpbmcgd2l0aCAmIzM0O2tlcm5lbC4mIzM0OyBhcmUgcGFzc2VkIHZpYSBjbWRsaW5lLiBXaGVuCiYjNDM7CQkgKiB0aGlzIGJvb3Rjb25maWcgY2FtZSBmcm9tIHRoZSBlbWJlZGRlZCBzb3VyY2UgYW5kCiYjNDM7CQkgKiBzZXR1cF9hcmNoKCkgYWxyZWFkeSBwcmVwZW5kZWQgdGhlIHJlbmRlcmVkICYjMzQ7a2VybmVsJiMzNDsgc3VidHJlZQomIzQzOwkJICogdG8gYm9vdF9jb21tYW5kX2xpbmUsIHJlbmRlcmluZyBhZ2FpbiBoZXJlIHdvdWxkIGR1cGxpY2F0ZQomIzQzOwkJICogdGhlIGtleXMgaW4gc2F2ZWRfY29tbWFuZF9saW5lIGFuZCBtYWtlIGFjY3VtdWxhdGluZyBoYW5kbGVycwomIzQzOwkJICogKGNvbnNvbGU9LCBlYXJseWNvbj0sIC4uLikgcmUtcmVnaXN0ZXIgdGhlIHNhbWUgdmFsdWUuIFNraXAKJiM0MzsJCSAqIG9ubHkgd2hlbiB0aGUgcHJlcGVuZCByZWFsbHkgaGFwcGVuZWQuCiYjNDM7CQkgKgomIzQzOwkJICogT24gYXJjaGVzIHRoYXQgZG8gbm90IHNlbGVjdCBBUkNIX1NVUFBPUlRTX0NNRExJTkVfRlJPTV9CT09UQ09ORklHLAomIzQzOwkJICogQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHIGlzIHVuc2VsZWN0YWJsZSBhbmQKJiM0MzsJCSAqIHhiY19lbWJlZGRlZF9jbWRsaW5lX2FwcGxpZWQoKSBjb2xsYXBzZXMgdG8gYSBzdHViIHJldHVybmluZwomIzQzOwkJICogZmFsc2UsIHNvIHRoaXMgcGF0aCBzdGlsbCBydW5zIGFuZCB0aGUgZW1iZWRkZWQgJiMzNDtrZXJuZWwmIzM0OwomIzQzOwkJICoga2V5cyByZWFjaCB0aGUgY21kbGluZSB2aWEgdGhlIHJ1bnRpbWUgcGFyc2VyIGV4YWN0bHkgYXMKJiM0MzsJCSAqIGJlZm9yZSB0aGlzIHNlcmllcy4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKCFmcm9tX2VtYmVkZGVkIHx8ICF4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkKCkpCiYjNDM7CQkJZXh0cmFfY29tbWFuZF9saW5lID0geGJjX21ha2VfY21kbGluZSgmIzM0O2tlcm5lbCYjMzQ7KTsKIAkJLyogQWxzbywgJiMzNDtpbml0LiYjMzQ7IGtleXMgYXJlIGluaXQgYXJndW1lbnRzICovCiAJCWV4dHJhX2luaXRfYXJncyA9IHhiY19tYWtlX2NtZGxpbmUoJiMzNDtpbml0JiMzNDspOwogCX0KZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZSBiL2xpYi9NYWtlZmlsZQppbmRleCAyM2UwN2QxOWQwMWM5MC4uNGY5N2E1NGQxZTNkOWEgMTAwNjQ0Ci0tLSBhL2xpYi9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9saWIvTWFrZWZpbGUKQEAgLTI3NCw2ICYjNDM7Mjc0LDIyIEBAIGZpbGVjaGtfZGVmYmNvbmYgPSBjYXQgJChvciAkKHJlYWwtcHJlcmVxcyksIC9kZXYvbnVsbCkKICQob2JqKS9kZWZhdWx0LmJjb25mOiAkKENPTkZJR19CT09UX0NPTkZJR19FTUJFRF9GSUxFKSBGT1JDRQogCSQoY2FsbCBmaWxlY2hrLGRlZmJjb25mKQogCiYjNDM7b2JqLSQoQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHKSAmIzQzOz0gZW1iZWRkZWQtY21kbGluZS5vCiYjNDM7JChvYmopL2VtYmVkZGVkLWNtZGxpbmUubzogJChvYmopL2VtYmVkZGVkX2NtZGxpbmUuYmluCiYjNDM7CiYjNDM7IyBSZW5kZXIgdGhlIGJvb3Rjb25maWcgJiMzNDtrZXJuZWwmIzM0OyBzdWJ0cmVlIHRvIGEgZmxhdCBjbWRsaW5lIHN0cmluZyB1c2luZwomIzQzOyMgdGhlIHVzZXJzcGFjZSB0b29scy9ib290Y29uZmlnIHBhcnNlciAoLUMgbW9kZSkuIFRoZSBydW50aW1lIHByZXBlbmQKJiM0MzsjIGhlbHBlciBlbmZvcmNlcyBDT01NQU5EX0xJTkVfU0laRSBhdCBib290LCBzbyBubyBidWlsZC10aW1lIHNpemUKJiM0MzsjIGNoZWNrIGlzIHBlcmZvcm1lZCBoZXJlIChDT01NQU5EX0xJTkVfU0laRSBpcyBhbiBhcmNoIGhlYWRlcgomIzQzOyMgY29uc3RhbnQsIG5vdCBhIEtjb25maWcgdmFsdWUpLgomIzQzO3F1aWV0X2NtZF9yZW5kZXJfY21kbGluZSA9IEJDT05GMkMgJEAKJiM0MzsgICAgICBjbWRfcmVuZGVyX2NtZGxpbmUgPSBcCiYjNDM7CSQob2JqdHJlZSkvdG9vbHMvYm9vdGNvbmZpZy9ib290Y29uZmlnIC1DICQmbHQ7ICZndDsgJEAKJiM0MzsKJiM0Mzt0YXJnZXRzICYjNDM7PSBlbWJlZGRlZF9jbWRsaW5lLmJpbgomIzQzOyQob2JqKS9lbWJlZGRlZF9jbWRsaW5lLmJpbjogJChvYmopL2RlZmF1bHQuYmNvbmYgJChvYmp0cmVlKS90b29scy9ib290Y29uZmlnL2Jvb3Rjb25maWcgRk9SQ0UKJiM0MzsJJChjYWxsIGlmX2NoYW5nZWQscmVuZGVyX2NtZGxpbmUpCiYjNDM7CiBvYmotJChDT05GSUdfUkJUUkVFX1RFU1QpICYjNDM7PSByYnRyZWVfdGVzdC5vCiBvYmotJChDT05GSUdfSU5URVJWQUxfVFJFRV9URVNUKSAmIzQzOz0gaW50ZXJ2YWxfdHJlZV90ZXN0Lm8KIApkaWZmIC0tZ2l0IGEvbGliL2Jvb3Rjb25maWcuYyBiL2xpYi9ib290Y29uZmlnLmMKaW5kZXggZjQ0NWI3NzAzZmRkOTYuLjA1Y2IxZWE5YWZkYWUzIDEwMDY0NAotLS0gYS9saWIvYm9vdGNvbmZpZy5jCiYjNDM7JiM0MzsmIzQzOyBiL2xpYi9ib290Y29uZmlnLmMKQEAgLTE5LDYgJiM0MzsxOSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvZXJybm8uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jYWNoZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2NvbXBpbGVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3ByaW50ay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NwcmludGYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tZW1ibG9jay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3N0cmluZy5oJmd0OwpAQCAtMzQsNiAmIzQzOzM1LDgzIEBAIGNvbnN0IGNoYXIgKiBfX2luaXQgeGJjX2dldF9lbWJlZGRlZF9ib290Y29uZmlnKHNpemVfdCAqc2l6ZSkKIAlyZXR1cm4gKCpzaXplKSA/IGVtYmVkZGVkX2Jvb3Rjb25maWdfZGF0YSA6IE5VTEw7CiB9CiAjZW5kaWYKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHCiYjNDM7LyogZW1iZWRkZWRfa2VybmVsX2NtZGxpbmUgaXMgZGVmaW5lZCBpbiBlbWJlZGRlZC1jbWRsaW5lLlMgKi8KJiM0MztleHRlcm4gX192aXNpYmxlIGNvbnN0IGNoYXIgZW1iZWRkZWRfa2VybmVsX2NtZGxpbmVbXTsKJiM0MztleHRlcm4gX192aXNpYmxlIGNvbnN0IGNoYXIgZW1iZWRkZWRfa2VybmVsX2NtZGxpbmVfZW5kW107CiYjNDM7CiYjNDM7LyogU2V0IG9uY2UgdGhlIGVtYmVkZGVkIGNtZGxpbmUgaGFzIGFjdHVhbGx5IGJlZW4gcHJlcGVuZGVkLiAqLwomIzQzO3N0YXRpYyBib29sIHhiY19jbWRsaW5lX2FwcGxpZWQgX19pbml0ZGF0YTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIHN0cl9wcmVwZW5kKCkgLSBQcmVwZW5kIEBzcmMgaW4gZnJvbnQgb2YgdGhlIHN0cmluZyBpbiBAZHN0LCBpbiBwbGFjZQomIzQzOyAqIEBkc3Q6IE5VTC10ZXJtaW5hdGVkIGRlc3RpbmF0aW9uIGJ1ZmZlciwgY3VycmVudGx5IEBkc3RfbGVuIGJ5dGVzIGxvbmcKJiM0MzsgKiBAZHN0X2xlbjogbGVuZ3RoIG9mIHRoZSBjdXJyZW50IEBkc3Qgc3RyaW5nIChleGNsdWRpbmcgaXRzIE5VTCkKJiM0MzsgKiBAc3JjOiBieXRlcyB0byBwcmVwZW5kIChub3QgTlVMLXRlcm1pbmF0ZWQpCiYjNDM7ICogQHNyY19sZW46IG51bWJlciBvZiBieXRlcyBmcm9tIEBzcmMgdG8gcHJlcGVuZAomIzQzOyAqCiYjNDM7ICogVGhlIGNhbGxlciBtdXN0IGd1YXJhbnRlZSBAZHN0IGhhcyByb29tIGZvciBzcmNfbGVuICYjNDM7IGRzdF9sZW4gJiM0MzsgMSBieXRlcy4KJiM0MzsgKiBNb3ZpbmcgZHN0X2xlbiAmIzQzOyAxIGJ5dGVzIGNhcnJpZXMgQGRzdCYjMzk7cyBOVUwgdGVybWluYXRvciB0b28sIHNvIGFuIGVtcHR5CiYjNDM7ICogQGRzdCBuZWVkcyBubyBzcGVjaWFsIGNhc2UuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgX19pbml0IHN0cl9wcmVwZW5kKGNoYXIgKmRzdCwgc2l6ZV90IGRzdF9sZW4sCiYjNDM7CQkJICAgICAgIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNyY19sZW4pCiYjNDM7ewomIzQzOwltZW1tb3ZlKGRzdCAmIzQzOyBzcmNfbGVuLCBkc3QsIGRzdF9sZW4gJiM0MzsgMSk7CiYjNDM7CW1lbWNweShkc3QsIHNyYywgc3JjX2xlbik7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoKSAtIFByZXBlbmQgZW1iZWRkZWQgYm9vdGNvbmZpZyBjbWRsaW5lCiYjNDM7ICogQGRzdDogY21kbGluZSBidWZmZXIgdG8gcHJlcGVuZCBpbnRvIChtdXN0IGFscmVhZHkgY29udGFpbiBhIE5VTCBieXRlKQomIzQzOyAqIEBzaXplOiB0b3RhbCBjYXBhY2l0eSBvZiBAZHN0IGluIGJ5dGVzCiYjNDM7ICoKJiM0MzsgKiBQcmVwZW5kIHRoZSBidWlsZC10aW1lLXJlbmRlcmVkICYjMzQ7a2VybmVsJiMzNDsgc3VidHJlZSBvZiB0aGUgZW1iZWRkZWQKJiM0MzsgKiBib290Y29uZmlnIHRvIEBkc3QuIFRoZSByZW5kZXJlZCBzdHJpbmcgYWxyZWFkeSBlbmRzIHdpdGggYSBzaW5nbGUKJiM0MzsgKiBzcGFjZSAodGhlIHhiY19zbnByaW50X2NtZGxpbmUoKSBpbnZhcmlhbnQpLCB3aGljaCBzZXJ2ZXMgYXMgdGhlCiYjNDM7ICogc2VwYXJhdG9yIGJldHdlZW4gdGhlIGVtYmVkZGVkIGtleXMgYW5kIGFueSBleGlzdGluZyBjb250ZW50IG9mIEBkc3QuCiYjNDM7ICogT24gb3ZlcmZsb3csIGxvZyBhbiBlcnJvciBhbmQgbGVhdmUgQGRzdCB1bnRvdWNoZWQgcmF0aGVyIHRoYW4KJiM0MzsgKiBzaWxlbnRseSB0cnVuY2F0aW5nOiBib290aW5nIHdpdGhvdXQgdGhlIGVtYmVkZGVkIHZhbHVlcyBpcyBiZXR0ZXIKJiM0MzsgKiB0aGFuIHJlZnVzaW5nIHRvIGJvb3QsIGFuZCB0aGUgZXJyb3IgbWVzc2FnZSB0ZWxscyB0aGUgdXNlciB3aHkKJiM0MzsgKiB0aGVpciBlbWJlZGRlZCBrZXlzIGFyZSBtaXNzaW5nLgomIzQzOyAqCiYjNDM7ICogSW50ZW5kZWQgdG8gYmUgY2FsbGVkIGZyb20gc2V0dXBfYXJjaCgpIGJlZm9yZSBwYXJzZV9lYXJseV9wYXJhbSgpIHNvCiYjNDM7ICogdGhhdCBlYXJseV9wYXJhbSgpIGhhbmRsZXJzIHNlZSB0aGUgZW1iZWRkZWQgdmFsdWVzLgomIzQzOyAqLwomIzQzO3ZvaWQgX19pbml0IHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSkKJiM0Mzt7CiYjNDM7CXNpemVfdCBlbWJlZF9sZW4gPSBlbWJlZGRlZF9rZXJuZWxfY21kbGluZV9lbmQgLSBlbWJlZGRlZF9rZXJuZWxfY21kbGluZTsKJiM0MzsJc2l6ZV90IGRzdF9sZW47CiYjNDM7CiYjNDM7CWlmICghc2l6ZSB8fCBlbWJlZF9sZW4gJmx0Oz0gMSkJLyogdHJhaWxpbmcgTlVMIG9ubHkgKi8KJiM0MzsJCXJldHVybjsKJiM0MzsJZW1iZWRfbGVuLS07CQkJLyogZXhjbHVkZSB0cmFpbGluZyBOVUwgYnl0ZSAqLwomIzQzOwomIzQzOwlkc3RfbGVuID0gc3Rybmxlbihkc3QsIHNpemUpOwomIzQzOwlpZiAoZW1iZWRfbGVuICYjNDM7IGRzdF9sZW4gJiM0MzsgMSAmZ3Q7IHNpemUpIHsKJiM0MzsJCXByX2VycigmIzM0O2VtYmVkZGVkIGJvb3Rjb25maWcgY21kbGluZSAoJXp1IGJ5dGVzKSBkb2VzIG5vdCBmaXQgaW4gQ09NTUFORF9MSU5FX1NJWkUgd2l0aCAlenUgYnl0ZXMgYWxyZWFkeSB1c2VkOyBpZ25vcmluZyBlbWJlZGRlZCB2YWx1ZXNcbiYjMzQ7LAomIzQzOwkJICAgICAgIGVtYmVkX2xlbiwgZHN0X2xlbik7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3RyX3ByZXBlbmQoZHN0LCBkc3RfbGVuLCBlbWJlZGRlZF9rZXJuZWxfY21kbGluZSwgZW1iZWRfbGVuKTsKJiM0MzsJeGJjX2NtZGxpbmVfYXBwbGllZCA9IHRydWU7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHhiY19lbWJlZGRlZF9jbWRsaW5lX2FwcGxpZWQoKSAtIERpZCB0aGUgZW1iZWRkZWQgY21kbGluZSBnZXQgcHJlcGVuZGVkPwomIzQzOyAqCiYjNDM7ICogUmV0dXJuIHRydWUgaWYgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZSgpIGFjdHVhbGx5IHByZXBlbmRlZCB0aGUKJiM0MzsgKiBlbWJlZGRlZCAmIzM0O2tlcm5lbCYjMzQ7IHN1YnRyZWUuIHNldHVwX2Jvb3RfY29uZmlnKCkgdXNlcyB0aGlzIHRvIGF2b2lkCiYjNDM7ICogcmVuZGVyaW5nIHRoZSBzYW1lIGtleXMgYSBzZWNvbmQgdGltZS4KJiM0MzsgKi8KJiM0Mztib29sIF9faW5pdCB4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4geGJjX2NtZGxpbmVfYXBwbGllZDsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiAjZW5kaWYKIAogLyoKQEAgLTQyNywxMSAmIzQzOzUwNSwzMCBAQCBzdGF0aWMgY2hhciB4YmNfbmFtZWJ1ZltYQkNfS0VZTEVOX01BWF0gX19pbml0ZGF0YTsKIGludCBfX2luaXQgeGJjX3NucHJpbnRfY21kbGluZShjaGFyICpidWYsIHNpemVfdCBzaXplLCBzdHJ1Y3QgeGJjX25vZGUgKnJvb3QpCiB7CiAJc3RydWN0IHhiY19ub2RlICprbm9kZSwgKnZub2RlOwotCWNoYXIgKmVuZCA9IGJ1ZiAmIzQzOyBzaXplOwogCWNvbnN0IGNoYXIgKnZhbCwgKnE7CiYjNDM7CXNpemVfdCBsZW4gPSAwOwogCWludCByZXQ7CiAKJiM0MzsJLyoKJiM0MzsJICogVHJhY2sgdGhlIHJ1bm5pbmcgd3JpdHRlbiBsZW5ndGggcmF0aGVyIHRoYW4gYWR2YW5jaW5nIEBidWYsIHNvIHdlCiYjNDM7CSAqIG5ldmVyIGZvcm0gJiMzNDtidWYgJiM0Mzsgc2l6ZSYjMzQ7IG9yICYjMzQ7YnVmICYjNDM7PSByZXQmIzM0OyB3aGlsZSBAYnVmIGlzIE5VTEwgKHRoZQomIzQzOwkgKiBzaXplLXByb2JlIGNhbGwgcGFzc2VzIGJ1Zj1OVUxMLCBzaXplPTApLiBOVUxMIHBvaW50ZXIgYXJpdGhtZXRpYwomIzQzOwkgKiBpcyB1bmRlZmluZWQgYmVoYXZpb3IgYW5kIHRyaXBzIGhvc3QgVUJTYW4gLyBGT1JUSUZZX1NPVVJDRSB3aGVuCiYjNDM7CSAqIHRoaXMgcmVuZGVyZXIgcnVucyBhdCBrZXJuZWwgYnVpbGQgdGltZS4gc25wcmludGYoTlVMTCwgMCwgLi4uKQomIzQzOwkgKiBpdHNlbGYgaXMgd2VsbCBkZWZpbmVkIGFuZCByZXR1cm5zIHRoZSB3b3VsZC1iZSBsZW5ndGguCiYjNDM7CSAqLwogCXhiY19ub2RlX2Zvcl9lYWNoX2tleV92YWx1ZShyb290LCBrbm9kZSwgdmFsKSB7CiYjNDM7CQkvKgomIzQzOwkJICogQW4gZW1wdHkgb3IgdmFsdWUtb25seSBAcm9vdCAoZS5nLiAmIzM0O2tlcm5lbCB7fSYjMzQ7IG9yCiYjNDM7CQkgKiAmIzM0O2tlcm5lbCA9IHgmIzM0OywgcG9zc2libHkgYWxvbmdzaWRlICYjMzQ7a2VybmVsLmZvbyA9IGJhciYjMzQ7KQomIzQzOwkJICogeWllbGRzIEByb290IGl0c2VsZiBoZXJlLiBTa2lwIGl0OiBjb21wb3NpbmcgYSBrZXkgZm9yIGl0CiYjNDM7CQkgKiB3b3VsZCBmYWlsIHdpdGggLUVJTlZBTCwgeWV0IGFueSByZWFsIGRlc2NlbmRhbnQga2V5cyBtdXN0CiYjNDM7CQkgKiBzdGlsbCBiZSByZW5kZXJlZC4gQW4gZW50aXJlbHkgZW1wdHkgc3VidHJlZSB0aGVuIHJlbmRlcnMKJiM0MzsJCSAqIG5vdGhpbmcgYW5kIHJldHVybnMgMCByYXRoZXIgdGhhbiBhbiBlcnJvci4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGtub2RlID09IHJvb3QpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiAJCXJldCA9IHhiY19ub2RlX2NvbXBvc2Vfa2V5X2FmdGVyKHJvb3QsIGtub2RlLAogCQkJCQl4YmNfbmFtZWJ1ZiwgWEJDX0tFWUxFTl9NQVgpOwogCQlpZiAocmV0ICZsdDsgMCkKQEAgLTQzOSwxMCAmIzQzOzUzNiwxMSBAQCBpbnQgX19pbml0IHhiY19zbnByaW50X2NtZGxpbmUoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgc3RydWN0IHhiY19ub2RlICpyb290KQogCiAJCXZub2RlID0geGJjX25vZGVfZ2V0X2NoaWxkKGtub2RlKTsKIAkJaWYgKCF2bm9kZSkgewotCQkJcmV0ID0gc25wcmludGYoYnVmLCByZXN0KGJ1ZiwgZW5kKSwgJiMzNDslcyAmIzM0OywgeGJjX25hbWVidWYpOwomIzQzOwkJCXJldCA9IHNucHJpbnRmKGJ1ZiA/IGJ1ZiAmIzQzOyBsZW4gOiBOVUxMLCByZXN0KGxlbiwgc2l6ZSksCiYjNDM7CQkJCSAgICAgICAmIzM0OyVzICYjMzQ7LCB4YmNfbmFtZWJ1Zik7CiAJCQlpZiAocmV0ICZsdDsgMCkKIAkJCQlyZXR1cm4gcmV0OwotCQkJYnVmICYjNDM7PSByZXQ7CiYjNDM7CQkJbGVuICYjNDM7PSByZXQ7CiAJCQljb250aW51ZTsKIAkJfQogCQl4YmNfYXJyYXlfZm9yX2VhY2hfdmFsdWUodm5vZGUsIHZhbCkgewpAQCAtNDUyLDE1ICYjNDM7NTUwLDE1IEBAIGludCBfX2luaXQgeGJjX3NucHJpbnRfY21kbGluZShjaGFyICpidWYsIHNpemVfdCBzaXplLCBzdHJ1Y3QgeGJjX25vZGUgKnJvb3QpCiAJCQkgKiB3aGl0ZXNwYWNlLgogCQkJICovCiAJCQlxID0gc3RycGJyayh2YWwsICYjMzQ7IFx0XHJcbiYjMzQ7KSA/ICYjMzQ7XCYjMzQ7JiMzNDsgOiAmIzM0OyYjMzQ7OwotCQkJcmV0ID0gc25wcmludGYoYnVmLCByZXN0KGJ1ZiwgZW5kKSwgJiMzNDslcz0lcyVzJXMgJiMzNDssCi0JCQkJICAgICAgIHhiY19uYW1lYnVmLCBxLCB2YWwsIHEpOwomIzQzOwkJCXJldCA9IHNucHJpbnRmKGJ1ZiA/IGJ1ZiAmIzQzOyBsZW4gOiBOVUxMLCByZXN0KGxlbiwgc2l6ZSksCiYjNDM7CQkJCSAgICAgICAmIzM0OyVzPSVzJXMlcyAmIzM0OywgeGJjX25hbWVidWYsIHEsIHZhbCwgcSk7CiAJCQlpZiAocmV0ICZsdDsgMCkKIAkJCQlyZXR1cm4gcmV0OwotCQkJYnVmICYjNDM7PSByZXQ7CiYjNDM7CQkJbGVuICYjNDM7PSByZXQ7CiAJCX0KIAl9CiAKLQlyZXR1cm4gYnVmIC0gKGVuZCAtIHNpemUpOwomIzQzOwlyZXR1cm4gbGVuOwogfQogI3VuZGVmIHJlc3QKIApkaWZmIC0tZ2l0IGEvbGliL2VtYmVkZGVkLWNtZGxpbmUuUyBiL2xpYi9lbWJlZGRlZC1jbWRsaW5lLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmJkYTgxYjRhNDJiZWFmCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvbGliL2VtYmVkZGVkLWNtZGxpbmUuUwpAQCAtMCwwICYjNDM7MSwxNiBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCiYjNDM7LyoKJiM0MzsgKiBFbWJlZCB0aGUgYnVpbGQtdGltZS1yZW5kZXJlZCBib290Y29uZmlnICYjMzQ7a2VybmVsJiMzNDsgc3VidHJlZSBhcyBhIGZsYXQKJiM0MzsgKiBjbWRsaW5lIHN0cmluZy4gc2V0dXBfYXJjaCgpIHByZXBlbmRzIHRoaXMgdG8gYm9vdF9jb21tYW5kX2xpbmUgb24KJiM0MzsgKiBhcmNoaXRlY3R1cmVzIHRoYXQgc2VsZWN0IEFSQ0hfU1VQUE9SVFNfQ01ETElORV9GUk9NX0JPT1RDT05GSUcuCiYjNDM7ICoKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgQnJlbm8gTGVpdGFvICZsdDtsZWl0YW9AZGViaWFuLm9yZyZndDsKJiM0MzsgKi8KJiM0MzsJLnNlY3Rpb24gLmluaXQucm9kYXRhLmVtYmVkX2NtZGxpbmUsICYjMzQ7YSYjMzQ7LCAlcHJvZ2JpdHMKJiM0MzsJLmdsb2JhbCBlbWJlZGRlZF9rZXJuZWxfY21kbGluZQomIzQzO2VtYmVkZGVkX2tlcm5lbF9jbWRsaW5lOgomIzQzOwkuaW5jYmluICYjMzQ7bGliL2VtYmVkZGVkX2NtZGxpbmUuYmluJiMzNDsKJiM0MzsJLmJ5dGUgMAomIzQzOwkuZ2xvYmFsIGVtYmVkZGVkX2tlcm5lbF9jbWRsaW5lX2VuZAomIzQzO2VtYmVkZGVkX2tlcm5lbF9jbWRsaW5lX2VuZDoKZGlmZiAtLWdpdCBhL3Rvb2xzL2Jvb3Rjb25maWcvTWFrZWZpbGUgYi90b29scy9ib290Y29uZmlnL01ha2VmaWxlCmluZGV4IDkwZWI0N2M5ZDhkZTY3Li4zY2I4MDY2ZDUxNDFiYiAxMDA2NDQKLS0tIGEvdG9vbHMvYm9vdGNvbmZpZy9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy9ib290Y29uZmlnL01ha2VmaWxlCkBAIC0xNSw3ICYjNDM7MTUsNyBAQCBvdmVycmlkZSBDRkxBR1MgJiM0Mzs9IC1XYWxsIC1nIC1JJChDVVJESVIpL2luY2x1ZGUKIEFMTF9UQVJHRVRTIDo9IGJvb3Rjb25maWcKIEFMTF9QUk9HUkFNUyA6PSAkKHBhdHN1YnN0ICUsJChPVVRQVVQpJSwkKEFMTF9UQVJHRVRTKSkKIAotYWxsOiAkKEFMTF9QUk9HUkFNUykgdGVzdAomIzQzO2FsbDogJChBTExfUFJPR1JBTVMpCiAKICQoT1VUUFVUKWJvb3Rjb25maWc6IG1haW4uYyBpbmNsdWRlL2xpbnV4L2Jvb3Rjb25maWcuaCAkKExJQlNSQykKIAkkKENDKSAkKGZpbHRlciAlLmMsJF4pICQoQ0ZMQUdTKSAkKExERkxBR1MpIC1vICRACkBAIC0yNyw0ICYjNDM7MjcsNCBAQCBpbnN0YWxsOiAkKEFMTF9QUk9HUkFNUykKIAlpbnN0YWxsICQoT1VUUFVUKWJvb3Rjb25maWcgJChERVNURElSKSQoYmluZGlyKQogCiBjbGVhbjoKLQkkKFJNKSAtZiAkKE9VVFBVVCkqLm8gJChBTExfUFJPR1JBTVMpCiYjNDM7CXJtIC1mICQoT1VUUFVUKSoubyAkKEFMTF9QUk9HUkFNUykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTY6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM5OQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDQzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgQm9vdCBDb25maWd1cmF0aW9uIEVuaGFuY2VtZW50OiBFbWJlZGRpbmcgQm9vdGNvbmZpZyBpbnRvIHRoZSBDb21tYW5kIExpbmUqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiB3b3JraW5nIG9uIHRoaXMgcGF0Y2ggc2VyaWVzLiBUaGUgZ29hbCBpcyB0byBpbXByb3ZlIGhvdyB3ZSBoYW5kbGUgYm9vdCBjb25maWd1cmF0aW9ucywgc3BlY2lmaWNhbGx5IGJ5IGludGVncmF0aW5nIHRoZSBlbWJlZGRlZCAmIzM0O2tlcm5lbCYjMzQ7IHN1YnRyZWUgZnJvbSB0aGUgYm9vdGNvbmZpZyBpbnRvIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lICphdCBidWlsZCB0aW1lKi4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBpbXByb3ZlbWVudCBiZWNhdXNlIGl0IGxldHMgZWFybHkgYXJjaGl0ZWN0dXJlIHNldHVwIHJvdXRpbmVzLCBsaWtlIGBzZXR1cF9hcmNoKClgLCBhY2Nlc3MgdmFsdWVzIGRlZmluZWQgaW4gdGhhdCBlbWJlZGRlZCBzdWJ0cmVlLiBUaGF0JiMzOTtzIGEgZ29vZCBtb3ZlLCBnaXZpbmcgdXMgYWNjZXNzIHRvIHBhcmFtZXRlcnMgcmlnaHQgZnJvbSB0aGUgc3RhcnQuCgpFc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBzZXQgYWx0ZXJzIGhvdyB3ZSBoYW5kbGUgZWFybHkgcGFyYW1ldGVyIGludGVycHJldGF0aW9uLiBXZSYjMzk7cmUgZWZmZWN0aXZlbHkgZmxhdHRlbmluZyB0aGUgYm9vdGNvbmZpZyAmIzM0O2tlcm5lbCYjMzQ7IHN1YnRyZWUgaW50byBhIGNvbW1hbmQtbGluZSBzdHJpbmcgYW5kIHRoZW4gcHJlcGVuZGluZyBpdCB0byB0aGUgZXhpc3RpbmcgYGJvb3RfY29tbWFuZF9saW5lYCBkdXJpbmcgdGhhdCBjcml0aWNhbCBgc2V0dXBfYXJjaCgpYCBwaGFzZS4KCkxvb2tpbmcgYXQgdGhlIGNoYW5nZXMsIEkmIzM5O20gbW9kaWZ5aW5nIHF1aXRlIGEgZmV3IGZpbGVzOiBgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdGAgZm9yIHRoZSB1c2VyIGRvY3MsIHRoZSBgTUFJTlRBSU5FUlNgIGZpbGUsIHNldmVyYWwgYE1ha2VmaWxlc2AsIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYGFyY2gveDg2L0tjb25maWdgIGFuZCBgYXJjaC94ODYva2VybmVsL3NldHVwLmNgLCBjb3JlIGhlYWRlcnMgbGlrZSBgaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmhgLCBzb21lIGltcG9ydGFudCBgaW5pdC9LY29uZmlnYCBhbmQgYGluaXQvbWFpbi5jYCBmaWxlcywgdGhlIGBsaWJgIGRpcmVjdG9yeSAoaW5jbHVkaW5nIGBib290Y29uZmlnLmNgIGFuZCBgZW1iZWRkZWQtY21kbGluZS5TYCksIGFuZCBldmVuIHRoZSBgdG9vbHMvYm9vdGNvbmZpZy9NYWtlZmlsZWAuIFRoYXQmIzM5O3MgYSBicm9hZCB0b3VjaCwgYnV0IGl0IG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlLgoKRnVuY3Rpb25hbGx5LCB0aGlzIGltcGFjdHMgdGhlIGtlcm5lbCYjMzk7cyBib290IHByb2Nlc3Mgc3BlY2lmaWNhbGx5IHdpdGhpbiBgc2V0dXBfYXJjaGAgYW5kIGBzZXR1cF9ib290X2NvbmZpZ2AuIFRoZSBuZXcgY29kZSBpbnRyb2R1Y2VzIGBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUdgLiBJIGFsc28gc2VlIGBDT05GSUdfQVJDSF9TVVBQT1JUU19DTURMSU5FX0ZST01fQk9PVENPTkZJR2AuIE9mIGNvdXJzZSwgZXZlcnl0aGluZyBpcyBnYXRlZCBieSBgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHYC4gU28sIGhvdyBkbyB3ZSB0ZXN0IHRoaXM/CgpPa2F5LCBzbyB0byBwcm9wZXJseSB0ZXN0IHRoaXMgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUc9eWAsIG9idmlvdXNseS4gQnV0LCB0aGF0IGRlcGVuZHMgb24gYEJPT1RfQ09ORklHX0VNQkVEX0ZJTEUgIT0gJiMzNDsmIzM0O2AgYWxvbmcgd2l0aCBgQVJDSF9TVVBQT1JUU19DTURMSU5FX0ZST01fQk9PVENPTkZJR2AgYW5kIGBDTURMSU5FID0gJiMzNDsmIzM0O2AuIEhtbSwgc28gSSBuZWVkIGBCT09UX0NPTkZJR19FTUJFRF9GSUxFYCB0byBiZSBzZXQgdG8gYSBub24tZW1wdHkgc3RyaW5nLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGF0IGBDT05GSUdfQk9PVF9DT05GSUdfRU1CRUQ9eWAgaXMgc2V0IHRvby4gSXQmIzM5O3MgcHJvYmFibHkgaW1wbGllZCB3aGVuIGBCT09UX0NPTkZJR19FTUJFRF9GSUxFYCBpcyBzZXQsIG9yIG1heWJlIGBCT09UX0NPTkZJR19FTUJFRF9GSUxFYCBkZXBlbmRzIG9uIGl0LiBJIHNob3VsZCBnbyBiYWNrIGFuZCBjaGVjayB0aGUgYGluaXQvS2NvbmZpZ2AgdG8gYmUgc3VyZSBhYm91dCBgQk9PVF9DT05GSUdfRU1CRURfRklMRWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTY6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJPT1RfQ09ORklHX0VNQkVEX0ZJTEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE1NTA9Y29uZmlnIEJPT1RfQ09ORklHX0VNQkVEXG4tLVxuaW5pdC9LY29uZmlnLTE1NjAtXG5pbml0L0tjb25maWc6MTU2MTpjb25maWcgQk9PVF9DT05GSUdfRU1CRURfRklMRVxuaW5pdC9LY29uZmlnLTE1NjItXHRzdHJpbmcgXCYjMzQ7RW1iZWRkZWQgYm9vdGNvbmZpZyBmaWxlIHBhdGhcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxNjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDUyNgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGFydCBvZiB0aGUgY29uZmlndXJhdGlvbiBzeXN0ZW0gYmV0dGVyLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBteSBlZmZvcnRzIGFyb3VuZCBsaW5lIDE1NjEuIEhvcGVmdWxseSwgdGhpcyBzZWN0aW9uIGhhcyB3aGF0IEkgbmVlZCB0byB1bmRlcnN0YW5kLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYmVpbmcgZGVmaW5lZCB0aGVyZSBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gdGhlIGJpZ2dlciBwaWN0dXJlLiBUaGlzIGZlZWxzIGxpa2UgaXQgc2hvdWxkIGdpdmUgbWUgc29tZSBzb2xpZCBjb250ZXh0IGFuZCBjbGFyaWZ5IHRoYXQgc3BlY2lmaWMgYXJlYSBvZiB0aGUgc3lzdGVtLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE2OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTU1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTUwOlx0Y29uZmlnIEJPT1RfQ09ORklHX0VNQkVEXG4xNTUxOlx0XHRib29sIFwmIzM0O0VtYmVkIGJvb3Rjb25maWcgZmlsZSBpbiB0aGUga2VybmVsXCYjMzQ7XG4xNTUyOlx0XHRkZXBlbmRzIG9uIEJPT1RfQ09ORklHXG4xNTUzOlx0XHRoZWxwXG4xNTU0Olx0XHQgIEVtYmVkIGEgYm9vdGNvbmZpZyBmaWxlIGdpdmVuIGJ5IEJPT1RfQ09ORklHX0VNQkVEX0ZJTEUgaW4gdGhlXG4xNTU1Olx0XHQgIGtlcm5lbC4gVXN1YWxseSwgdGhlIGJvb3Rjb25maWcgZmlsZSBpcyBsb2FkZWQgd2l0aCB0aGUgaW5pdHJkXG4xNTU2Olx0XHQgIGltYWdlLiBCdXQgaWYgdGhlIHN5c3RlbSBkb2VzbiYjMzk7dCBzdXBwb3J0IGluaXRyZCwgdGhpcyBvcHRpb24gd2lsbFxuMTU1NzpcdFx0ICBoZWxwIHlvdSBieSBlbWJlZGRpbmcgYSBib290Y29uZmlnIGZpbGUgd2hpbGUgYnVpbGRpbmcgdGhlIGtlcm5lbC5cbjE1NTg6XHRcbjE1NTk6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbjE1NjA6XHRcbjE1NjE6XHRjb25maWcgQk9PVF9DT05GSUdfRU1CRURfRklMRVxuMTU2MjpcdFx0c3RyaW5nIFwmIzM0O0VtYmVkZGVkIGJvb3Rjb25maWcgZmlsZSBwYXRoXCYjMzQ7XG4xNTYzOlx0XHRkZXBlbmRzIG9uIEJPT1RfQ09ORklHX0VNQkVEXG4xNTY0Olx0XHRoZWxwXG4xNTY1Olx0XHQgIFNwZWNpZnkgYSBib290Y29uZmlnIGZpbGUgd2hpY2ggd2lsbCBiZSBlbWJlZGRlZCB0byB0aGUga2VybmVsLlxuMTU2NjpcdFx0ICBUaGlzIGJvb3Rjb25maWcgd2lsbCBiZSB1c2VkIGlmIHRoZXJlIGlzIG5vIGluaXRyZCBvciBubyBvdGhlclxuMTU2NzpcdFx0ICBib290Y29uZmlnIGluIHRoZSBpbml0cmQuXG4xNTY4Olx0XG4xNTY5Olx0Y29uZmlnIEFSQ0hfU1VQUE9SVFNfQ01ETElORV9GUk9NX0JPT1RDT05GSUdcbjE1NzA6XHRcdGJvb2xcbjE1NzE6XHRcdGhlbHBcbjE1NzI6XHRcdCAgU2lsZW50IHN5bWJvbDsgbm8gQyBjb2RlIHJlYWRzIGl0IGRpcmVjdGx5LiBBcmNoaXRlY3R1cmVzXG4xNTczOlx0XHQgIHNlbGVjdCBpdCBvbmNlIHRoZWlyIHNldHVwX2FyY2goKSBjYWxsc1xuMTU3NDpcdFx0ICB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lKCkgYmVmb3JlIHBhcnNlX2Vhcmx5X3BhcmFtKCkuXG4xNTc1Olx0XHQgIEl0cyBvbmx5IHJvbGUgaXMgdG8gZ2F0ZSB0aGUgdXNlci12aXNpYmxlXG4xNTc2Olx0XHQgIENNRExJTkVfRlJPTV9CT09UQ09ORklHIG9wdGlvbiBwZXItYXJjaCwgdGhlIHNhbWVcbjE1Nzc6XHRcdCAgQVJDSF9TVVBQT1JUU18qIGlkaW9tIHVzZWQgYnkgQVJDSF9TVVBQT1JUU19DRkksIGV0Yy5cbjE1Nzg6XHRcbjE1Nzk6XHRjb25maWcgQ01ETElORV9GUk9NX0JPT1RDT05GSUdcbjE1ODA6XHRcdGJvb2wgXCYjMzQ7UmVuZGVyIGVtYmVkZGVkIGJvb3Rjb25maWcgYXMga2VybmVsIGNtZGxpbmUgYXQgYnVpbGQgdGltZVwmIzM0O1xuMTU4MTpcdFx0ZGVwZW5kcyBvbiBCT09UX0NPTkZJR19FTUJFRF9GSUxFICE9IFwmIzM0O1wmIzM0O1xuMTU4MjpcdFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXG4xNTgzOlx0XHRkZXBlbmRzIG9uIENNRExJTkUgPSBcJiMzNDtcJiMzNDtcbjE1ODQ6XHRcdGRlZmF1bHQgblxuMTU4NTpcdFx0aGVscFxuMTU4NjpcdFx0ICBSZW5kZXIgdGhlIFwmIzM0O2tlcm5lbFwmIzM0OyBzdWJ0cmVlIG9mIHRoZSBlbWJlZGRlZCBib290Y29uZmlnIGZpbGUgaW50byBhXG4xNTg3Olx0XHQgIGZsYXQgY21kbGluZSBzdHJpbmcgYXQga2VybmVsIGJ1aWxkIHRpbWUgYW5kIHByZXBlbmQgaXQgdG9cbjE1ODg6XHRcdCAgYm9vdF9jb21tYW5kX2xpbmUgZHVyaW5nIGVhcmx5IGFyY2hpdGVjdHVyZSBzZXR1cC4gVGhpcyBtYWtlc1xuMTU4OTpcdFx0ICBlYXJseV9wYXJhbSgpIGhhbmRsZXJzIChlLmcuIG1lbT0sIGVhcmx5Y29uPSwgbG9nbGV2ZWw9KSBzZWUgdGhlXG4xNTkwOlx0XHQgIHZhbHVlcyBzdXBwbGllZCB2aWEgdGhlIGVtYmVkZGVkIGJvb3Rjb25maWcuXG4xNTkxOlx0XG4xNTkyOlx0XHQgIFRoZSBydW50aW1lIGJvb3Rjb25maWcgcGFyc2VyIGlzIHVuYWZmZWN0ZWQsIHNvIHRyZWUtc3RydWN0dXJlZFxuMTU5MzpcdFx0ICBjb25zdW1lcnMgc3VjaCBhcyBmdHJhY2UgYm9vdC10aW1lIHRyYWNpbmcga2VlcCB3b3JraW5nLlxuMTU5NDpcdFxuMTU5NTpcdFx0ICBOb3RlOiB3aGVuIGFuIGluaXRyZCBhbHNvIGNhcnJpZXMgYSBib290Y29uZmlnLCBpdHMgXCYjMzQ7a2VybmVsXCYjMzQ7XG4xNTk2Olx0XHQgIHN1YnRyZWUgaXMgc3RpbGwgcGFyc2VkIGF0IHJ1bnRpbWUsIGJ1dCB0aGUgZW1iZWRkZWQgXCYjMzQ7a2VybmVsXCYjMzQ7XG4xNTk3Olx0XHQgIGtleXMgcmVtYWluIGluIGJvb3RfY29tbWFuZF9saW5lIGZvciBwYXJzZV9lYXJseV9wYXJhbSgpIGFuZFxuMTU5ODpcdFx0ICBlbmQgdXAgbGF0ZXIgdGhhbiB0aGUgaW5pdHJkIGtleXMgaW4gc2F2ZWRfY29tbWFuZF9saW5lLCBzb1xuMTU5OTpcdFx0ICBwYXJzZV9hcmdzKCkgbGFzdC13aW5zIGZhdm9ycyB0aGUgZW1iZWRkZWQgdmFsdWVzLiBJZiB5b3UgbmVlZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE2OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTc0CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQm9vdCBDb25maWd1cmF0aW9uIFByb2Nlc3MqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyB3ZSBuZWVkIHRvIGhhbmRsZSBzZXZlcmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9uczogYEJPT1RfQ09ORklHYCwgYEJPT1RfQ09ORklHX0VNQkVEYCwgYEJPT1RfQ09ORklHX0VNQkVEX0ZJTEVgICh3aGljaCB3aWxsIGJlIHNldCB0byBhIGZpbGUgcGF0aCksIGFuZCBgQ01ETElORV9GUk9NX0JPT1RDT05GSUdgLiBCdXQgaGVyZSYjMzk7cyB3aGVyZSBpdCBnZXRzIHRyaWNreSDigJMgYEJPT1RfQ09ORklHX0VNQkVEX0ZJTEVgIGlzIGEgc3RyaW5nLCBhbmQgSSYjMzk7bSBub3Qgc3VyZSBpZiBTeXprYWxsZXIgd2lsbCByZWxpYWJseSBwcm92aWRlIGEgdmFsaWQgZmlsZSBwYXRoIGZvciBpdC4gQ2FuIGl0PyBJJiMzOTttIG5vdCBlbnRpcmVseSBjb252aW5jZWQuCgpJZiBTeXprYWxsZXIgb25seSBlbmFibGVzIGBDTURMSU5FX0ZST01fQk9PVENPTkZJR2AsIHRoZW4gdGhlIHN5c3RlbSAqbmVlZHMqIGBCT09UX0NPTkZJR19FTUJFRF9GSUxFYCB0byBiZSBzZXQgdG8gc29tZXRoaW5nIGNvbmNyZXRlLiBTeXprYWxsZXIgY2FuIHNldCBzdHJpbmdzIGluIGl0cyBjb25maWd1cmF0aW9uIGdlbmVyYXRpb24sIGJ1dCBpdCBjb3VsZCBlbmQgdXAganVzdCBnaXZpbmcgYSByYW5kb20gc3RyaW5nLCBvciBldmVuIG5vdGhpbmcgYXQgYWxsLiBBY3R1YWxseSwgU3l6a2FsbGVyICpkb2VzKiBoYXZlIGEgd2F5IHRvIHByb3ZpZGUgZmlsZXMsIGJ1dCBpdCYjMzk7cyBhIGJpdCBvZiBhIHdvcmthcm91bmQuCgpUaGUgcmVhbCBxdWVzdGlvbiBoZXJlIGlzIHdoZXRoZXIgdGhpcyBwYXRjaCBpcyBldmVuIHdvcnRoIHRoZSBlZmZvcnQgdG8gZnV6ei4gVGhlIGZ1bmN0aW9uYWxpdHkgaXQgYWRkcyBvY2N1cnMgaW4gdHdvIHBoYXNlczogaXQgcnVucyBhdCAqYnVpbGQgdGltZSosIGdlbmVyYXRpbmcgdGhlIGJvb3QgY29uZmlndXJhdGlvbiBpbnRvIGEgY29tbWFuZCBsaW5lIHN0cmluZywgYW5kIGFsc28gYXQgKmVhcmx5IGJvb3QgdGltZSogd2l0aCBgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZWAgd2l0aGluIGBzZXR1cF9hcmNoYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZWAgY2FsbCwgc28gbGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTY6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYz05MTY9dm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jLTk2NS1cdGlmIChib290Y29uZmlnX2NtZGxpbmVfcmVxdWVzdGVkKCkpXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYzo5NjY6XHRcdHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoYm9vdF9jb21tYW5kX2xpbmUsXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYy05NjctXHRcdFx0XHRcdCAgICAgQ09NTUFORF9MSU5FX1NJWkUpO1xuLS1cbmluY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oPTMwNT1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKnhiY19nZXRfZW1iZWRkZWRfYm9vdGNvbmZpZyhzaXplX3QgKnNpemUpXG4tLVxuaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmgtMzEyLSNpZmRlZiBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUdcbmluY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oOjMxMzp2b2lkIF9faW5pdCB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lKGNoYXIgKmRzdCwgc2l6ZV90IHNpemUpO1xuaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmgtMzE0LWJvb2wgX19pbml0IHhiY19lbWJlZGRlZF9jbWRsaW5lX2FwcGxpZWQodm9pZCk7XG5pbmNsdWRlL2xpbnV4L2Jvb3Rjb25maWcuaC0zMTUtI2Vsc2VcbmluY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oOjMxNjpzdGF0aWMgaW5saW5lIHZvaWQgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZShjaGFyICpkc3QsIHNpemVfdCBzaXplKSB7IH1cbmluY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oLTMxNy1zdGF0aWMgaW5saW5lIGJvb2wgeGJjX2VtYmVkZGVkX2NtZGxpbmVfYXBwbGllZCh2b2lkKSB7IHJldHVybiBmYWxzZTsgfVxuLS1cbmluaXQvS2NvbmZpZz0xNTY5PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXG4tLVxuaW5pdC9LY29uZmlnLTE1NzMtXHQgIHNlbGVjdCBpdCBvbmNlIHRoZWlyIHNldHVwX2FyY2goKSBjYWxsc1xuaW5pdC9LY29uZmlnOjE1NzQ6XHQgIHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoKSBiZWZvcmUgcGFyc2VfZWFybHlfcGFyYW0oKS5cbmluaXQvS2NvbmZpZy0xNTc1LVx0ICBJdHMgb25seSByb2xlIGlzIHRvIGdhdGUgdGhlIHVzZXItdmlzaWJsZVxuLS1cbmxpYi9ib290Y29uZmlnLmM9NTg9c3RhdGljIHZvaWQgX19pbml0IHN0cl9wcmVwZW5kKGNoYXIgKmRzdCwgc2l6ZV90IGRzdF9sZW4sXG4tLVxubGliL2Jvb3Rjb25maWcuYy02NS0vKipcbmxpYi9ib290Y29uZmlnLmM6NjY6ICogeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZSgpIC0gUHJlcGVuZCBlbWJlZGRlZCBib290Y29uZmlnIGNtZGxpbmVcbmxpYi9ib290Y29uZmlnLmMtNjctICogQGRzdDogY21kbGluZSBidWZmZXIgdG8gcHJlcGVuZCBpbnRvIChtdXN0IGFscmVhZHkgY29udGFpbiBhIE5VTCBieXRlKVxuLS1cbmxpYi9ib290Y29uZmlnLmMtODEtICovXG5saWIvYm9vdGNvbmZpZy5jOjgyOnZvaWQgX19pbml0IHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSlcbmxpYi9ib290Y29uZmlnLmMtODMte1xuLS1cbmxpYi9ib290Y29uZmlnLmMtMTA0LSAqXG5saWIvYm9vdGNvbmZpZy5jOjEwNTogKiBSZXR1cm4gdHJ1ZSBpZiB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lKCkgYWN0dWFsbHkgcHJlcGVuZGVkIHRoZVxubGliL2Jvb3Rjb25maWcuYy0xMDYtICogZW1iZWRkZWQgXCYjMzQ7a2VybmVsXCYjMzQ7IHN1YnRyZWUuIHNldHVwX2Jvb3RfY29uZmlnKCkgdXNlcyB0aGlzIHRvIGF2b2lkXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTY6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4NTIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGdXp6YWJpbGl0eSBvZiBFYXJseSBCb290IENvZGUqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgc3l6a2FsbGVyIG1pZ2h0IGJlIGFibGUgdG8gZnV6eiB0aGlzIHBhcnRpY3VsYXIgYml0IG9mIGtlcm5lbCBjb2RlLiBUaGlzIGB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lYCBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIGBzZXR1cF9hcmNoKClgLCB3aGljaCBpcyAqcmVhbGx5KiBlYXJseSBpbiB0aGUgYm9vdCBwcm9jZXNzLiBTeXprYWxsZXImIzM5O3MgdHlwaWNhbCBhcHByb2FjaCBpcyB0byBmdXp6IGJ5IHJ1bm5pbmcgdXNlcnNwYWNlIHByb2dyYW1zIHRoYXQgbWFrZSBzeXNjYWxscyBhZnRlciB0aGUga2VybmVsIGlzIHVwLiBTbywgYW55dGhpbmcgdGhhdCBvbmx5IHJ1bnMgb25jZSBkdXJpbmcgZWFybHkgYm9vdCwgZXNwZWNpYWxseSBjb2RlIHRoYXQgcmVsaWVzIGhlYXZpbHkgb24gYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIGxpa2UgdGhpcyBmdW5jdGlvbiwgaXMgZ2VuZXJhbGx5IGdvaW5nIHRvIGJlIGEgdG91Z2ggdGFyZ2V0IGZvciBzeXprYWxsZXIgdGhyb3VnaCBpdHMgbm9ybWFsIHN5c2NhbGwgaW50ZXJmYWNlLgoKQnV0IHdhaXQsIHN5emthbGxlciAqY2FuKiBmdXp6IGVhcmx5IGJvb3QgY29kZSB1bmRlciBzb21lIGNpcmN1bXN0YW5jZXMsIGxpa2UgaWYgaXQgY2FuIGJlIHRyaWdnZXJlZCBieSB2YXJ5aW5nIHRoZSBjb21tYW5kIGxpbmUgb3IgaWYgaXQmIzM5O3MganVzdCBwYXJ0IG9mIHRoZSBub3JtYWwgYm9vdCBwcm9jZXNzLiBUaGUgaXNzdWUgaGVyZSwgdGhvdWdoLCBpcyB0aGF0IHRoZSBpbnB1dCB0byBgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZWAsIHNwZWNpZmljYWxseSBgZW1iZWRkZWRfa2VybmVsX2NtZGxpbmVgLCBpcyBnZW5lcmF0ZWQgYXQgYnVpbGQgdGltZSBkaXJlY3RseSBmcm9tIGBCT09UX0NPTkZJR19FTUJFRF9GSUxFYC4gU3l6a2FsbGVyIGRvZXNuJiMzOTt0IG1vZGlmeSB0aGUga2VybmVsIGJ1aWxkIHByb2Nlc3Mgb3IgdGhlIGNvbnRlbnRzIG9mIGBCT09UX0NPTkZJR19FTUJFRF9GSUxFYCBiZXR3ZWVuIGZ1enppbmcgaXRlcmF0aW9ucy4gU28sIHRoZSBlbWJlZGRlZCBmaWxlIGlzIGVzc2VudGlhbGx5IHN0YXRpYyB0aHJvdWdob3V0IHRoZSBlbnRpcmUgZnV6emluZyBzZXNzaW9uLgoKVGhlcmVmb3JlLCB0aGUgZXhlY3V0aW9uIHBhdGggdGhyb3VnaCBgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZWAgYXBwZWFycyB0byBiZSBjb21wbGV0ZWx5IHN0YXRpYyBhbmQgZGV0ZXJtaW5pc3RpYy4gTm8gdXNlciBpbnB1dCBmcm9tIHRoZSBmdXp6ZXIgZ2V0cyB0byB0aGlzIGNvZGUgYXQgcnVudGltZS4gSG1tLi4ud2FpdCEgRG9lc24mIzM5O3QgYGJvb3Rjb25maWdfY21kbGluZV9yZXF1ZXN0ZWQoKWAgY2hlY2sgaWYgYGJvb3Rjb25maWdgIGlzIG9uIHRoZSBjb21tYW5kIGxpbmU/IENvdWxkIHN5emthbGxlciBwb3RlbnRpYWxseSBtdXRhdGUgdGhlIGNvbW1hbmQgbGluZT8gTm8sIHN5emthbGxlciBib290cyB3aXRoIGEgZml4ZWQgY29tbWFuZCBsaW5lLiBUaGUgcGFyc2luZyBvZiB0aGUgYm9vdGNvbmZpZyBpcyBkb25lIGF0IGJ1aWxkIHRpbWUgdmlhIGB0b29scy9ib290Y29uZmlnL2Jvb3Rjb25maWcgLUNgLiBTbyB0aGUgb25seSBydW50aW1lIHBpZWNlIGlzIHRoZSBgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZWAgZnVuY3Rpb24gd2hpY2gganVzdCBwZXJmb3JtcyBgbWVtbW92ZWAgYW5kIGBtZW1jcHlgIG9mIGEgc3RhdGljIHN0cmluZy4KCkFscmlnaHQsIHRpbWUgdG8gZ28gbG9vayBhdCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmVgIGluIGBsaWIvYm9vdGNvbmZpZy5jYCBhbmQgY29uZmlybSBteSBhc3N1bXB0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTY6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvYm9vdGNvbmZpZy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA4MjpcdHZvaWQgX19pbml0IHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSlcbiAgODM6XHR7XG4gIDg0Olx0XHRzaXplX3QgZW1iZWRfbGVuID0gZW1iZWRkZWRfa2VybmVsX2NtZGxpbmVfZW5kIC0gZW1iZWRkZWRfa2VybmVsX2NtZGxpbmU7XG4gIDg1Olx0XHRzaXplX3QgZHN0X2xlbjtcbiAgODY6XHRcbiAgODc6XHRcdGlmICghc2l6ZSB8fCBlbWJlZF9sZW4gXHUwMDNjPSAxKVx0LyogdHJhaWxpbmcgTlVMIG9ubHkgKi9cbiAgODg6XHRcdFx0cmV0dXJuO1xuICA4OTpcdFx0ZW1iZWRfbGVuLS07XHRcdFx0LyogZXhjbHVkZSB0cmFpbGluZyBOVUwgYnl0ZSAqL1xuICA5MDpcdFxuICA5MTpcdFx0ZHN0X2xlbiA9IHN0cm5sZW4oZHN0LCBzaXplKTtcbiAgOTI6XHRcdGlmIChlbWJlZF9sZW4gJiM0MzsgZHN0X2xlbiAmIzQzOyAxIFx1MDAzZSBzaXplKSB7XG4gIDkzOlx0XHRcdHByX2VycihcJiMzNDtlbWJlZGRlZCBib290Y29uZmlnIGNtZGxpbmUgKCV6dSBieXRlcykgZG9lcyBub3QgZml0IGluIENPTU1BTkRfTElORV9TSVpFIHdpdGggJXp1IGJ5dGVzIGFscmVhZHkgdXNlZDsgaWdub3JpbmcgZW1iZWRkZWQgdmFsdWVzXFxuXCYjMzQ7LFxuICA5NDpcdFx0XHQgICAgICAgZW1iZWRfbGVuLCBkc3RfbGVuKTtcbiAgOTU6XHRcdFx0cmV0dXJuO1xuICA5NjpcdFx0fVxuICA5NzpcdFxuICA5ODpcdFx0c3RyX3ByZXBlbmQoZHN0LCBkc3RfbGVuLCBlbWJlZGRlZF9rZXJuZWxfY21kbGluZSwgZW1iZWRfbGVuKTtcbiAgOTk6XHRcdHhiY19jbWRsaW5lX2FwcGxpZWQgPSB0cnVlO1xuIDEwMDpcdH1cbiAxMDE6XHRcbiAxMDI6XHQvKipcbiAxMDM6XHQgKiB4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkKCkgLSBEaWQgdGhlIGVtYmVkZGVkIGNtZGxpbmUgZ2V0IHByZXBlbmRlZD9cbiAxMDQ6XHQgKlxuIDEwNTpcdCAqIFJldHVybiB0cnVlIGlmIHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoKSBhY3R1YWxseSBwcmVwZW5kZWQgdGhlXG4gMTA2Olx0ICogZW1iZWRkZWQgXCYjMzQ7a2VybmVsXCYjMzQ7IHN1YnRyZWUuIHNldHVwX2Jvb3RfY29uZmlnKCkgdXNlcyB0aGlzIHRvIGF2b2lkXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE2OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTQ5CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGlzIGNvZGUgc25pcHBldC4KCioqQW5hbHl6aW5nIGEgU2ltcGxlIFByZXBlbmQgT3BlcmF0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBpZWNlIG9mIGNvZGUgYW5kIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEl0JiMzOTtzIGp1c3QgYSBzaW1wbGUgc3RyaW5nIHByZXBlbmQgb3BlcmF0aW9uLiBOb3RoaW5nIGNvbXBsZXgsIG5vdGhpbmcgdGhhdCBzaG91bGQgYmUgYSBjYXVzZSBmb3IgY29uY2VybiBpbiB0ZXJtcyBvZiBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvciDigJMgZXNwZWNpYWxseSBzaW5jZSBpdCBvbmx5IHJ1bnMgb25jZSwgYXQgYm9vdCB0aW1lLiBJJiMzOTttIG5vdCBzZWVpbmcgYW55IGV4cG9zZWQgcGFyc2VycyBvciBzdGF0ZSBtYWNoaW5lcyBoZXJlLCBzbyBmdXp6aW5nIHRoaXMgcGFydGljdWxhciBvcGVyYXRpb24gZGlyZWN0bHkgc2VlbXMgdW5uZWNlc3NhcnkuCgpIb3dldmVyLCBJIGp1c3Qgbm90aWNlZCB0aGF0IGB4YmNfc25wcmludF9jbWRsaW5lYCB3YXMgYWxzbyBtb2RpZmllZCwgYW5kIHRoYXQgcmFpc2VzIGEgZmxhZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyB1c2VkIGFuZCB3aGF0IGltcGFjdCB0aG9zZSBjaGFuZ2VzIGhhdmUuIFdoaWxlIHRoZSBpbml0aWFsIG9wZXJhdGlvbiBpdHNlbGYgc2VlbXMgYmVuaWduLCB0aGUgYnJvYWRlciBwaWN0dXJlIG5lZWRzIHRvIGJlIGV2YWx1YXRlZC4gSXQmIzM5O3Mgd29ydGggbm90aW5nIHRoYXQgdGhlIGFjdHVhbCBwYXJzaW5nIG9mIHRoZSBib290Y29uZmlnIGlzIGhhbmRsZWQgYnkgYHRvb2xzL2Jvb3Rjb25maWcvYm9vdGNvbmZpZyAtQ2AgYXQgYnVpbGQgdGltZSwgc28gdGhlIGNvZGUgaW4gcXVlc3Rpb24gaXMgbGlrZWx5IGp1c3QgcHJlcGFyaW5nIHRoZSBkYXRhIGZvciB0aGF0IHByb2Nlc3MuIEJ1dCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCByZWxhdGlvbnNoaXAgYXMgd2VsbC4gTGV0JiMzOTtzIHNlZSB3aGVyZSBgeGJjX3NucHJpbnRfY21kbGluZWAgY29tZXMgaW50byBwbGF5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxNjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4YmNfc25wcmludF9jbWRsaW5lJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oPTI2NT1pbnQgX19pbml0IHhiY19ub2RlX2NvbXBvc2Vfa2V5X2FmdGVyKHN0cnVjdCB4YmNfbm9kZSAqcm9vdCxcbi0tXG5pbmNsdWRlL2xpbnV4L2Jvb3Rjb25maWcuaC0yNjgtLyogUmVuZGVyIGtleS92YWx1ZSBwYWlycyB1bmRlciBAcm9vdCBhcyBhIGZsYXQgY21kbGluZSBzdHJpbmcgKi9cbmluY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oOjI2OTppbnQgX19pbml0IHhiY19zbnByaW50X2NtZGxpbmUoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgc3RydWN0IHhiY19ub2RlICpyb290KTtcbmluY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oLTI3MC1cbi0tXG5pbml0L21haW4uYz0zMjg9c3RhdGljIGNoYXIgKiBfX2luaXQgeGJjX21ha2VfY21kbGluZShjb25zdCBjaGFyICprZXkpXG4tLVxuaW5pdC9tYWluLmMtMzM4LVx0LyogQ291bnQgcmVxdWlyZWQgYnVmZmVyIHNpemUgKi9cbmluaXQvbWFpbi5jOjMzOTpcdGxlbiA9IHhiY19zbnByaW50X2NtZGxpbmUoTlVMTCwgMCwgcm9vdCk7XG5pbml0L21haW4uYy0zNDAtXHRpZiAobGVuIFx1MDAzYz0gMClcbi0tXG5pbml0L21haW4uYy0zNDgtXG5pbml0L21haW4uYzozNDk6XHRyZXQgPSB4YmNfc25wcmludF9jbWRsaW5lKG5ld19jbWRsaW5lLCBsZW4gJiM0MzsgMSwgcm9vdCk7XG5pbml0L21haW4uYy0zNTAtXHRpZiAocmV0IFx1MDAzYyAwIHx8IHJldCBcdTAwM2UgbGVuKSB7XG4tLVxubGliL2Jvb3Rjb25maWcuYz01OD1zdGF0aWMgdm9pZCBfX2luaXQgc3RyX3ByZXBlbmQoY2hhciAqZHN0LCBzaXplX3QgZHN0X2xlbixcbi0tXG5saWIvYm9vdGNvbmZpZy5jLTcxLSAqIGJvb3Rjb25maWcgdG8gQGRzdC4gVGhlIHJlbmRlcmVkIHN0cmluZyBhbHJlYWR5IGVuZHMgd2l0aCBhIHNpbmdsZVxubGliL2Jvb3Rjb25maWcuYzo3MjogKiBzcGFjZSAodGhlIHhiY19zbnByaW50X2NtZGxpbmUoKSBpbnZhcmlhbnQpLCB3aGljaCBzZXJ2ZXMgYXMgdGhlXG5saWIvYm9vdGNvbmZpZy5jLTczLSAqIHNlcGFyYXRvciBiZXR3ZWVuIHRoZSBlbWJlZGRlZCBrZXlzIGFuZCBhbnkgZXhpc3RpbmcgY29udGVudCBvZiBAZHN0LlxuLS1cbmxpYi9ib290Y29uZmlnLmM9NDg5PXN0YXRpYyBjaGFyIHhiY19uYW1lYnVmW1hCQ19LRVlMRU5fTUFYXSBfX2luaXRkYXRhO1xuLS1cbmxpYi9ib290Y29uZmlnLmMtNDkzLS8qKlxubGliL2Jvb3Rjb25maWcuYzo0OTQ6ICogeGJjX3NucHJpbnRfY21kbGluZSgpIC0gUmVuZGVyIGJvb3Rjb25maWcga2V5cyB1bmRlciBAcm9vdCBhcyBhIGNtZGxpbmUgc3RyaW5nXG5saWIvYm9vdGNvbmZpZy5jLTQ5NS0gKiBAYnVmOiBEZXN0aW5hdGlvbiBidWZmZXIgKG1heSBiZSBOVUxMIHdoZW4gQHNpemUgaXMgMCB0byBxdWVyeSB0aGUgbGVuZ3RoKVxuLS1cbmxpYi9ib290Y29uZmlnLmMtNTA0LSAqL1xubGliL2Jvb3Rjb25maWcuYzo1MDU6aW50IF9faW5pdCB4YmNfc25wcmludF9jbWRsaW5lKGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIHN0cnVjdCB4YmNfbm9kZSAqcm9vdClcbmxpYi9ib290Y29uZmlnLmMtNTA2LXtcbi0tXG50b29scy9ib290Y29uZmlnL21haW4uYz0yODk9c3RhdGljIGludCBzaG93X3hiY19rZXJuZWxfY21kbGluZSh2b2lkKVxuLS1cbnRvb2xzL2Jvb3Rjb25maWcvbWFpbi5jLTI5OC1cbnRvb2xzL2Jvb3Rjb25maWcvbWFpbi5jOjI5OTpcdGxlbiA9IHhiY19zbnByaW50X2NtZGxpbmUoTlVMTCwgMCwgcm9vdCk7XG50b29scy9ib290Y29uZmlnL21haW4uYy0zMDAtXHRpZiAobGVuIFx1MDAzYyAwKSB7XG4tLVxudG9vbHMvYm9vdGNvbmZpZy9tYWluLmMtMzEwLVxudG9vbHMvYm9vdGNvbmZpZy9tYWluLmM6MzExOlx0cmV0ID0geGJjX3NucHJpbnRfY21kbGluZShidWYsIGxlbiAmIzQzOyAxLCByb290KTtcbnRvb2xzL2Jvb3Rjb25maWcvbWFpbi5jLTMxMi1cdGlmIChyZXQgXHUwMDNjIDApIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTY6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyODUKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxNDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHhiY19zbnByaW50X2NtZGxpbmUgZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBtb2RpZmllcyBgeGJjX3NucHJpbnRfY21kbGluZWAuIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBpbiBgaW5pdC9tYWluLmNgIHRvIHJlbmRlciB0aGUgYm9vdCBjb25maWd1cmF0aW9uIGludG8gYSBjb21tYW5kLWxpbmUgc3RyaW5nIGR1cmluZyB0aGUga2VybmVsJiMzOTtzIGVhcmx5IGJvb3QgcGhhc2UuIFRoZSBwcmltYXJ5IGNoYW5nZSBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgdW5kZWZpbmVkIGJlaGF2aW9yIGlzc3VlIHdoZW4gdGhlIGJ1ZmZlciAoYGJ1ZmApIHBhc3NlZCB0byBgeGJjX3NucHJpbnRfY21kbGluZWAgaXMgTlVMTC4gSXQgYWxzbyBpbmNsdWRlcyBhIGNoZWNrIHRvIHNraXAgZW1wdHkgb3IgdmFsdWUtb25seSByb290IG5vZGVzIGluIHRoZSBib290IGNvbmZpZ3VyYXRpb24sIHByZXZlbnRpbmcgYSAtRUlOVkFMIGVycm9yIGFuZCBhbGxvd2luZyB0aGUgcmVuZGVyaW5nIG9mIGRlc2NlbmRhbnQga2V5cy4KCk15IGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIGlzIHNvbWV0aGluZyB0aGUgZnV6emVyIGNhbiBtZWFuaW5nZnVsbHkgaW50ZXJhY3Qgd2l0aC4gYHhiY19zbnByaW50X2NtZGxpbmVgIGlzIGNhbGxlZCBieSBgeGJjX21ha2VfY21kbGluZWAsIHdoaWNoIGluIHR1cm4gaXMgaW52b2tlZCBkdXJpbmcgZWFybHkgYm9vdCBieSBgc2V0dXBfYm9vdF9jb25maWdgLiBUaGUgaW5wdXQgdG8gdGhlIHJlbmRlcmluZyBmdW5jdGlvbiBjb21lcyBmcm9tIHRoZSBib290IGNvbmZpZ3VyYXRpb24gZGF0YSwgb2J0YWluZWQgZWl0aGVyIGZyb20gdGhlIGluaXRyZCBvciBhbiBlbWJlZGRlZCBjb25maWd1cmF0aW9uLiBDcnVjaWFsbHksIHRoZSBmdXp6ZXIsIHNwZWNpZmljYWxseSBTeXprYWxsZXIsIGRvZXNuJiMzOTt0IGN1cnJlbnRseSBoYXZlIGEgd2F5IHRvIG1vZGlmeSBlaXRoZXIgdGhlIGluaXRyZCBjb250ZW50IG9yIHRoZSBlbWJlZGRlZCBib290IGNvbmZpZ3VyYXRpb24gZHVyaW5nIGEgZnV6emluZyBzZXNzaW9uLiBUaGVzZSBkYXRhIGFyZSBzdGF0aWMgcGVyIFZNL2J1aWxkLgoKVGhlcmVmb3JlLCBzaW5jZSB0aGUgaW5wdXQgdG8gdGhlIG1vZGlmaWVkIGNvZGUgaXMgZXNzZW50aWFsbHkgZml4ZWQgZHVyaW5nIGEgZnV6emluZyBydW4sIHRoZSBmdXp6ZXIgY2Fubm90IGV4cGxvcmUgZGlmZmVyZW50IGV4ZWN1dGlvbiBwYXRocyB3aXRoaW4gYHhiY19zbnByaW50X2NtZGxpbmVgIGJ5IG1hbmlwdWxhdGluZyBpbnB1dCBkYXRhIHRocm91Z2ggc3lzY2FsbHMuIFRoZXJlJiMzOTtzIG5vIHdheSB0byBpbmZsdWVuY2UgaXQuIEl0JiMzOTtzIGVzc2VudGlhbGx5IGEgb25lLXRpbWUgZXhlY3V0aW9uIHdpdGggc3RhdGljIGlucHV0cy4gSSBkaWQgY2hlY2sgYC9wcm9jL2Jvb3Rjb25maWdgIGFuZCBpdCYjMzk7cyByZWFkLW9ubHksIGFuZCB0aGUgYm9vdCBjb25maWcgcGFyc2luZyBmdW5jdGlvbiBpcyBgX19pbml0YC4KCkkmIzM5O20gcmV2aXNpdGluZyB0aGUgY3JpdGVyaWEgZm9yIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcHJvbXB0IHNheXMsICYjMzQ7Q29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLi4uJiMzNDsgTm93LCB0aGUgY29kZSBpcyAqcmVhY2hhYmxlKiBkdXJpbmcgYm9vdCwgc28sIHRlY2huaWNhbGx5LCBpdCYjMzk7cyBub3QgJiMzNDtpbXBvc3NpYmxlIHRvIHJlYWNoJiMzNDsuIEhvd2V2ZXIsIGl0JiMzOTtzIG5vdCByZWFjaGFibGUgd2l0aCBmdXp6ZXIgaW5wdXQuIFRoZSBmdXp6ZXIgcHJpbWFyaWx5IHdvcmtzIGJ5IG11dGF0aW5nIHN5c2NhbGxzLiBUaGlzIGNvZGUgaXNuJiMzOTt0IHRvdWNoZWQgYnkgc3lzY2FsbHMsIGl0IHJ1bnMgb25jZSB3aXRoIHN0YXRpYyBkYXRhLgoKSWYgSSB3ZXJlIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgLCBJIHdvdWxkIG5lZWQgdG8gcHJvdmlkZSBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgLiBTcGVjaWZ5aW5nIGBGb2N1c1N5bWJvbHM9WyYjMzQ7eGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZSYjMzQ7LCAmIzM0O3hiY19zbnByaW50X2NtZGxpbmUmIzM0O11gIHdvdWxkIGRpcmVjdCB0aGUgZnV6emVyIHRvd2FyZHMgdGhlc2UgZnVuY3Rpb25zLiBCdXQsIGFuZCB0aGlzIGlzIGNydWNpYWwsIHRoZSBmdXp6ZXIgKmNhbm5vdCogcmVhY2ggdGhlbSB2aWEgaXRzIHVzdWFsIHN5c2NhbGwtYmFzZWQgaW5wdXQuIEl0IHdpbGwganVzdCBzZWUgdGhlIGZ1bmN0aW9ucyBleGVjdXRlIG9uY2UgcGVyIFZNIGJvb3QuIFN5emthbGxlciBjb2xsZWN0cyBib290IGNvdmVyYWdlLCBidXQgaXQgY2FuJiMzOTt0IG11dGF0ZSB0aGVzZSBpbnB1dHMuIEFsc28sIGV2ZW4gd2l0aCB0aGUgY29tbWFuZC1saW5lIGZ1enppbmcgY29uZmlndXJhdGlvbiwgaXQmIzM5O3MgYSBmaXhlZCBzdHJpbmcuCgpUaGUgcHJvbXB0IHdhbnRzIG1lIHRvICYjMzQ7ZGV0ZXJtaW5lIGlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OyBDaGFuZ2VzIHRoYXQgb25seSBoYXBwZW4gb25jZSBhdCBib290IHdpdGggc3RhdGljIGRhdGEgYXJlIG5vdCBzb21ldGhpbmcgYSBzeXN0ZW0gY2FsbCBmdXp6ZXIgY2FuIG1lYW5pbmdmdWxseSB0ZXN0LiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYWdhaW4gdG8gc2VlIGlmIGB4YmNfc25wcmludF9jbWRsaW5lYCBpcyB1c2VkIGFueXdoZXJlIGVsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE2OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hiY19zbnByaW50X2NtZGxpbmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9ib290Y29uZmlnLmg9MjY1PWludCBfX2luaXQgeGJjX25vZGVfY29tcG9zZV9rZXlfYWZ0ZXIoc3RydWN0IHhiY19ub2RlICpyb290LFxuLS1cbmluY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oLTI2OC0vKiBSZW5kZXIga2V5L3ZhbHVlIHBhaXJzIHVuZGVyIEByb290IGFzIGEgZmxhdCBjbWRsaW5lIHN0cmluZyAqL1xuaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmg6MjY5OmludCBfX2luaXQgeGJjX3NucHJpbnRfY21kbGluZShjaGFyICpidWYsIHNpemVfdCBzaXplLCBzdHJ1Y3QgeGJjX25vZGUgKnJvb3QpO1xuaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmgtMjcwLVxuLS1cbmluaXQvbWFpbi5jPTMyOD1zdGF0aWMgY2hhciAqIF9faW5pdCB4YmNfbWFrZV9jbWRsaW5lKGNvbnN0IGNoYXIgKmtleSlcbi0tXG5pbml0L21haW4uYy0zMzgtXHQvKiBDb3VudCByZXF1aXJlZCBidWZmZXIgc2l6ZSAqL1xuaW5pdC9tYWluLmM6MzM5Olx0bGVuID0geGJjX3NucHJpbnRfY21kbGluZShOVUxMLCAwLCByb290KTtcbmluaXQvbWFpbi5jLTM0MC1cdGlmIChsZW4gXHUwMDNjPSAwKVxuLS1cbmluaXQvbWFpbi5jLTM0OC1cbmluaXQvbWFpbi5jOjM0OTpcdHJldCA9IHhiY19zbnByaW50X2NtZGxpbmUobmV3X2NtZGxpbmUsIGxlbiAmIzQzOyAxLCByb290KTtcbmluaXQvbWFpbi5jLTM1MC1cdGlmIChyZXQgXHUwMDNjIDAgfHwgcmV0IFx1MDAzZSBsZW4pIHtcbi0tXG5saWIvYm9vdGNvbmZpZy5jPTU4PXN0YXRpYyB2b2lkIF9faW5pdCBzdHJfcHJlcGVuZChjaGFyICpkc3QsIHNpemVfdCBkc3RfbGVuLFxuLS1cbmxpYi9ib290Y29uZmlnLmMtNzEtICogYm9vdGNvbmZpZyB0byBAZHN0LiBUaGUgcmVuZGVyZWQgc3RyaW5nIGFscmVhZHkgZW5kcyB3aXRoIGEgc2luZ2xlXG5saWIvYm9vdGNvbmZpZy5jOjcyOiAqIHNwYWNlICh0aGUgeGJjX3NucHJpbnRfY21kbGluZSgpIGludmFyaWFudCksIHdoaWNoIHNlcnZlcyBhcyB0aGVcbmxpYi9ib290Y29uZmlnLmMtNzMtICogc2VwYXJhdG9yIGJldHdlZW4gdGhlIGVtYmVkZGVkIGtleXMgYW5kIGFueSBleGlzdGluZyBjb250ZW50IG9mIEBkc3QuXG4tLVxubGliL2Jvb3Rjb25maWcuYz00ODk9c3RhdGljIGNoYXIgeGJjX25hbWVidWZbWEJDX0tFWUxFTl9NQVhdIF9faW5pdGRhdGE7XG4tLVxubGliL2Jvb3Rjb25maWcuYy00OTMtLyoqXG5saWIvYm9vdGNvbmZpZy5jOjQ5NDogKiB4YmNfc25wcmludF9jbWRsaW5lKCkgLSBSZW5kZXIgYm9vdGNvbmZpZyBrZXlzIHVuZGVyIEByb290IGFzIGEgY21kbGluZSBzdHJpbmdcbmxpYi9ib290Y29uZmlnLmMtNDk1LSAqIEBidWY6IERlc3RpbmF0aW9uIGJ1ZmZlciAobWF5IGJlIE5VTEwgd2hlbiBAc2l6ZSBpcyAwIHRvIHF1ZXJ5IHRoZSBsZW5ndGgpXG4tLVxubGliL2Jvb3Rjb25maWcuYy01MDQtICovXG5saWIvYm9vdGNvbmZpZy5jOjUwNTppbnQgX19pbml0IHhiY19zbnByaW50X2NtZGxpbmUoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgc3RydWN0IHhiY19ub2RlICpyb290KVxubGliL2Jvb3Rjb25maWcuYy01MDYte1xuLS1cbnRvb2xzL2Jvb3Rjb25maWcvbWFpbi5jPTI4OT1zdGF0aWMgaW50IHNob3dfeGJjX2tlcm5lbF9jbWRsaW5lKHZvaWQpXG4tLVxudG9vbHMvYm9vdGNvbmZpZy9tYWluLmMtMjk4LVxudG9vbHMvYm9vdGNvbmZpZy9tYWluLmM6Mjk5Olx0bGVuID0geGJjX3NucHJpbnRfY21kbGluZShOVUxMLCAwLCByb290KTtcbnRvb2xzL2Jvb3Rjb25maWcvbWFpbi5jLTMwMC1cdGlmIChsZW4gXHUwMDNjIDApIHtcbi0tXG50b29scy9ib290Y29uZmlnL21haW4uYy0zMTAtXG50b29scy9ib290Y29uZmlnL21haW4uYzozMTE6XHRyZXQgPSB4YmNfc25wcmludF9jbWRsaW5lKGJ1ZiwgbGVuICYjNDM7IDEsIHJvb3QpO1xudG9vbHMvYm9vdGNvbmZpZy9tYWluLmMtMzEyLVx0aWYgKHJldCBcdTAwM2MgMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxNjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODE4MwoJCQkJCQkJb3V0cHV0OiAxNDgKCQkJCQkJCXRob3VnaHRzOiAzODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogTm90IFdvcnRoIEZ1enppbmcqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IHRoaXMgY29kZSBpcyBzb2xlbHkgdXNlZCB3aXRoaW4gYGluaXQvbWFpbi5jYCAoYW5kIHRoYXQmIzM5O3MgYW4gYF9faW5pdGAgZnVuY3Rpb24pIGFuZCB0aGUgYHRvb2xzL2Jvb3Rjb25maWcvbWFpbi5jYCB1c2Vyc3BhY2UgdG9vbC4gVGhpcyBzY3JlYW1zICYjMzQ7ZWFybHkgYm9vdCBjb2RlJiMzNDsgdG8gbWUuCgpUaGUgY29yZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIGNvbnN0aXR1dGUgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0ICpzaG91bGQqIGJlIGZ1enplZD8gVGhlIHByb21wdCBndWlkZXMgbWU6ICYjMzQ7UmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczogLi4uIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS4mIzM0OyBJIGRvbiYjMzk7dCBzZWUgYSBkaXJlY3QgaW5zdHJ1Y3Rpb24gc2F5aW5nICYjMzQ7ZmFsc2UgZm9yIGVhcmx5IGJvb3QsJiMzNDsgYnV0IEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaXQ6IHRoaXMgaXMgKmVhcmx5IGJvb3QqIGNvZGUgcHJvY2Vzc2luZyAqc3RhdGljKiBkYXRhLiBTeXprYWxsZXImIzM5O3Mgc3RyZW5ndGggaXMgaW4gbXV0YXRpbmcgc3lzY2FsbHMuIEl0IGNhbiYjMzk7dCBtdXRhdGUgdGhlIGtlcm5lbCBpbWFnZSBvciB0aGUgaW5pdHJkIGRpcmVjdGx5LiBUaHVzLCBpbiB0aGUgY29udGV4dCBvZiBzeXNjYWxsLWJhc2VkIGZ1enppbmcsIHRoaXMgaXMgdW4tZnV6emFibGUuCgpUbyBiZSB0aG9yb3VnaCwgSSYjMzk7bSBjaGVja2luZyBpZiBhbnkgc3lzZnMgb3IgcHJvY2ZzIGludGVyZmFjZXMgaGF2ZSBiZWVuIGFkZGVkLiBObywgdGhlIGNoYW5nZXMgYXJlIHRvIGBzZXR1cF9hcmNoYCBhbmQgYHNldHVwX2Jvb3RfY29uZmlnYC4gVGhlIHBhdGNoIGFkZHMgYHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmVgIHVzZWQgYnkgYHNldHVwX2FyY2hgIGFuZCBtb2RpZmllcyBgeGJjX3NucHJpbnRfY21kbGluZWAgY2FsbGVkIGZyb20gYHNldHVwX2Jvb3RfY29uZmlnYC4gSXQgYWxzbyBpbnRyb2R1Y2VzIGB0b29scy9ib290Y29uZmlnYCBidWlsZCBzdGVwcyBhbmQgYENPTkZJR19DTURMSU5FX0ZST01fQk9PVENPTkZJR2AuCgpUaGVyZWZvcmUsIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBJJiMzOTtsbCBleHBsYWluIHRoYXQgdGhlIGNoYW5nZXMgYXJlIGNvbmZpbmVkIHRvIGVhcmx5IGJvb3QgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgKGBfX2luaXRgIGZ1bmN0aW9ucykgdGhhdCBkZWFsIHdpdGggc3RhdGljLCBidWlsZC10aW1lIG9yIGluaXRyZCBkYXRhLiBTaW5jZSB0aGlzIGNvZGUgYW5kIGRhdGEgYXJlIG5vdCByZWFjaGFibGUgb3IgbXV0YWJsZSBieSBhIHN5c2NhbGwgZnV6emVyLCBmdXp6aW5nIGlzIHVucHJvZHVjdGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTY6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYnVpbGQtdGltZSBmZWF0dXJlIHRvIHJlbmRlciBlbWJlZGRlZCBib290Y29uZmlnIGludG8gYSBjbWRsaW5lIHN0cmluZyBhbmQgcHJlcGVuZHMgaXQgZHVyaW5nIGVhcmx5IGJvb3QgKGBzZXR1cF9hcmNoYCkuIEl0IGFsc28gZml4ZXMgYSBidWcgaW4gYHhiY19zbnByaW50X2NtZGxpbmVgIHdoaWNoIGlzIG9ubHkgY2FsbGVkIGR1cmluZyBlYXJseSBib290IChgc2V0dXBfYm9vdF9jb25maWdgKS4gQWxsIG1vZGlmaWVkIGtlcm5lbCBjb2RlIGlzIG1hcmtlZCBgX19pbml0YCwgcnVucyBleGFjdGx5IG9uY2UgZHVyaW5nIGJvb3QsIGFuZCBwcm9jZXNzZXMgc3RhdGljIGRhdGEgKGZyb20gdGhlIGtlcm5lbCBpbWFnZSBvciBpbml0cmQpLiBTaW5jZSB0aGVyZSBpcyBubyB3YXkgZm9yIGEgc3lzY2FsbCBmdXp6ZXIgdG8gcmVhY2ggdGhpcyBjb2RlIG9yIG11dGF0ZSBpdHMgaW5wdXRzLCBpdCBjYW5ub3QgYmUgbWVhbmluZ2Z1bGx5IGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBidWlsZC10aW1lIGZlYXR1cmUgdG8gcmVuZGVyIGVtYmVkZGVkIGJvb3Rjb25maWcgaW50byBhIGNtZGxpbmUgc3RyaW5nIGFuZCBwcmVwZW5kcyBpdCBkdXJpbmcgZWFybHkgYm9vdCAoYHNldHVwX2FyY2hgKS4gSXQgYWxzbyBmaXhlcyBhIGJ1ZyBpbiBgeGJjX3NucHJpbnRfY21kbGluZWAgd2hpY2ggaXMgb25seSBjYWxsZWQgZHVyaW5nIGVhcmx5IGJvb3QgKGBzZXR1cF9ib290X2NvbmZpZ2ApLiBBbGwgbW9kaWZpZWQga2VybmVsIGNvZGUgaXMgbWFya2VkIGBfX2luaXRgLCBydW5zIGV4YWN0bHkgb25jZSBkdXJpbmcgYm9vdCwgYW5kIHByb2Nlc3NlcyBzdGF0aWMgZGF0YSAoZnJvbSB0aGUga2VybmVsIGltYWdlIG9yIGluaXRyZCkuIFNpbmNlIHRoZXJlIGlzIG5vIHdheSBmb3IgYSBzeXNjYWxsIGZ1enplciB0byByZWFjaCB0aGlzIGNvZGUgb3IgbXV0YXRlIGl0cyBpbnB1dHMsIGl0IGNhbm5vdCBiZSBtZWFuaW5nZnVsbHkgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE2OjQzOjE1LjE5NzM0MjEwNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNzk0NTQ1NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYnVpbGQtdGltZSBmZWF0dXJlIHRvIHJlbmRlciBlbWJlZGRlZCBib290Y29uZmlnIGludG8gYSBjbWRsaW5lIHN0cmluZyBhbmQgcHJlcGVuZHMgaXQgZHVyaW5nIGVhcmx5IGJvb3QgKGBzZXR1cF9hcmNoYCkuIEl0IGFsc28gZml4ZXMgYSBidWcgaW4gYHhiY19zbnByaW50X2NtZGxpbmVgIHdoaWNoIGlzIG9ubHkgY2FsbGVkIGR1cmluZyBlYXJseSBib290IChgc2V0dXBfYm9vdF9jb25maWdgKS4gQWxsIG1vZGlmaWVkIGtlcm5lbCBjb2RlIGlzIG1hcmtlZCBgX19pbml0YCwgcnVucyBleGFjdGx5IG9uY2UgZHVyaW5nIGJvb3QsIGFuZCBwcm9jZXNzZXMgc3RhdGljIGRhdGEgKGZyb20gdGhlIGtlcm5lbCBpbWFnZSBvciBpbml0cmQpLiBTaW5jZSB0aGVyZSBpcyBubyB3YXkgZm9yIGEgc3lzY2FsbCBmdXp6ZXIgdG8gcmVhY2ggdGhpcyBjb2RlIG9yIG11dGF0ZSBpdHMgaW5wdXRzLCBpdCBjYW5ub3QgYmUgbWVhbmluZ2Z1bGx5IGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE2OjQzOjE1LjE5NzM0ODgzNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3MTI2OTkwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDlkZjkyOWFlY2E5YmM1MjNhYjcwODlmYWZiYmQ2NjExNmVlNzQzYjVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdW4gMjMgMTY6NDM6MTEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYm9vdGNvbmZpZy5yc3RcXG5pbmRleCBmNzEyNzU4NDcyZDVjNi4uMzQ5Y2VmYmIyYmJjZGQgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYm9vdGNvbmZpZy5yc3RcXG5AQCAtMjM0LDYgKzIzNCw4NyBAQCBLY29uZmlnIG9wdGlvbiBzZWxlY3RlZC5cXG4gTm90ZSB0aGF0IGV2ZW4gaWYgeW91IHNldCB0aGlzIG9wdGlvbiwgeW91IGNhbiBvdmVycmlkZSB0aGUgZW1iZWRkZWRcXG4gYm9vdGNvbmZpZyBieSBhbm90aGVyIGJvb3Rjb25maWcgd2hpY2ggYXR0YWNoZWQgdG8gdGhlIGluaXRyZC5cXG4gXFxuK1JlbmRlcmluZyBFbWJlZGRlZCBrZXJuZWwuKiBLZXlzIGF0IEJ1aWxkIFRpbWVcXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbitcXG4rQnkgZGVmYXVsdCwgdGhlIGVtYmVkZGVkIGJvb3Rjb25maWcgKGBgQ09ORklHX0JPT1RfQ09ORklHX0VNQkVEPXlgYCkgaXNcXG4rcGFyc2VkIGF0IHJ1bnRpbWUsIGFmdGVyIGBgcGFyc2VfZWFybHlfcGFyYW0oKWBgIGhhcyBhbHJlYWR5IHJ1bi4gRWFybHlcXG4rcGFyYW1ldGVyIGhhbmRsZXJzIChgYG1lbT1gYCwgYGBlYXJseWNvbj1gYCwgYGBsb2dsZXZlbD1gYCwgLi4uKSB0aGVyZWZvcmVcXG4rY2Fubm90IHNlZSB2YWx1ZXMgc3VwcGxpZWQgdmlhIHRoZSBlbWJlZGRlZCBgYGtlcm5lbGBgIHN1YnRyZWUuXFxuK1xcbitgYENPTkZJR19DTURMSU5FX0ZST01fQk9PVENPTkZJR2BgIHJlc29sdmVzIHRoaXMgYnkgcmVuZGVyaW5nIHRoZVxcbitgYGtlcm5lbGBgIHN1YnRyZWUgb2YgYGBDT05GSUdfQk9PVF9DT05GSUdfRU1CRURfRklMRWBgIGludG8gYSBmbGF0IGNtZGxpbmVcXG4rc3RyaW5nIGF0IGtlcm5lbCBidWlsZCB0aW1lICh2aWEgYGB0b29scy9ib290Y29uZmlnIC1DYGApIGFuZCBwcmVwZW5kaW5nXFxuK2l0IHRvIGBgYm9vdF9jb21tYW5kX2xpbmVgYCBkdXJpbmcgZWFybHkgYXJjaGl0ZWN0dXJlIHNldHVwLCBzbyB0aGUga2V5c1xcbithcmUgdmlzaWJsZSB0byBgYHBhcnNlX2Vhcmx5X3BhcmFtKClgYC5cXG4rXFxuK1RoZSBvcHRpb24gcmVxdWlyZXMgYGBDT05GSUdfQk9PVF9DT05GSUdfRU1CRUQ9eWBgLCBhIG5vbi1lbXB0eVxcbitgYENPTkZJR19CT09UX0NPTkZJR19FTUJFRF9GSUxFYGAsIGFuZCBhbiBhcmNoaXRlY3R1cmUgdGhhdCBzZWxlY3RzXFxuK2BgQ09ORklHX0FSQ0hfU1VQUE9SVFNfQ01ETElORV9GUk9NX0JPT1RDT05GSUdgYC4gQ3VycmVudGx5IG9ubHkgeDg2XFxuK3NlbGVjdHMgaXQ7IG9uIG90aGVyIGFyY2hpdGVjdHVyZXMgdGhlIGVtYmVkZGVkIGJvb3Rjb25maWcgc3RpbGwgd29ya3MsXFxuK2J1dCBvbmx5IHRocm91Z2ggdGhlIGxhdGUgcnVudGltZSBwYXJzZXIuXFxuK1xcbitUaGUgc2FtZSBgYGJvb3Rjb25maWdgYCBvcHQtaW4gYXBwbGllcyBhcyBlbHNld2hlcmU6IHRoZSByZW5kZXJlZCBrZXlzXFxuK2FyZSBwcmVwZW5kZWQgb25seSB3aGVuIGBgYm9vdGNvbmZpZ2BgIChpbiBhbnkgZm9ybSkgYXBwZWFycyBvbiB0aGVcXG4ra2VybmVsIGNvbW1hbmQgbGluZSwgb3Igd2hlbiBgYENPTkZJR19CT09UX0NPTkZJR19GT1JDRWBgIGlzIHNldCwgd2hpY2hcXG4rZGVmYXVsdHMgdG8gYGB5YGAgd2hlbiBgYENPTkZJR19CT09UX0NPTkZJR19FTUJFRGBgIGlzIHNldC5cXG4rXFxuK0ZvciBleGFtcGxlLCBnaXZlbjo6XFxuK1xcbisga2VybmVsIHtcXG4rICAgbG9nbGV2ZWwgPSA3XFxuKyAgIG1lbSA9IDRHXFxuKyB9XFxuK1xcbit0aGUga2VybmVsIGJvb3RzIGFzIGlmIGBgbG9nbGV2ZWw9NyBtZW09NEdgYCBoYWQgYmVlbiBwcmVwZW5kZWQgdG8gdGhlXFxuK2Jvb3Rsb2FkZXIgY29tbWFuZCBsaW5lLCB3aXRoIHRoZSB2YWx1ZXMgdmlzaWJsZSB0byBlYXJseS1wYXJzZWRcXG4raGFuZGxlcnMuIENvbW1hLXNlcGFyYXRlZCB2YWx1ZXMgYXJlIHN0aWxsIGV4cGFuZGVkIGludG8gbXVsdGlwbGVcXG4rY21kbGluZSBlbnRyaWVzIHBlciB0aGUgYm9vdGNvbmZpZyBhcnJheSBjb252ZW50aW9uIC0tIHRoZSBlbWJlZGRlZFxcbitgYGtlcm5lbC5lYXJseWNvbiA9IFxcXCJ1YXJ0ODI1MCxpbywweDNmOFxcXCJgYCBtdXN0IGJlIHF1b3RlZCB0byBsYW5kIGFzIGFcXG4rc2luZ2xlIGBgZWFybHljb249YGAgZW50cnksIGV4YWN0bHkgYXMgZm9yIHRoZSBydW50aW1lIHBhcnNlci5cXG4rXFxuK0lmIHRoZSByZW5kZXJlZCBzdHJpbmcgd291bGQgbm90IGZpdCBpbiBgYENPTU1BTkRfTElORV9TSVpFYGAgdG9nZXRoZXJcXG4rd2l0aCB0aGUgZXhpc3RpbmcgY29tbWFuZCBsaW5lLCB0aGUgcHJlcGVuZCBpcyBza2lwcGVkIGFuZCBhbiBlcnJvciBpc1xcbitsb2dnZWQsIHNvIGFuIG92ZXJzaXplZCBlbWJlZGRlZCBib290Y29uZmlnIGNhbm5vdCBicmljayBhIGJvb3QuXFxuK1xcbitJbnRlcmFjdGlvbiB3aXRoIG90aGVyIGNvbW1hbmQgbGluZSBhbmQgYm9vdGNvbmZpZyBzb3VyY2VzXFxuK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5cXG4rXFxuK1dpdGggYGBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUc9eWBgIHRoZSByZW5kZXJlZCBgYGtlcm5lbGBgXFxuK3N1YnRyZWUgYmVoYXZlcyBsaWtlIGEgYnVpbGQtdGltZSBjb21tYW5kIGxpbmUgKHNpbWlsYXIgdG9cXG4rYGBDT05GSUdfQ01ETElORWBgKSwgbm90IGxpa2UgYSBib290Y29uZmlnIHNvdXJjZS4gSXQgaXMgcHJlcGVuZGVkIHRvXFxuK2BgYm9vdF9jb21tYW5kX2xpbmVgYCBpbiBgYHNldHVwX2FyY2goKWBgLCBiZWZvcmUgYGBwYXJzZV9lYXJseV9wYXJhbSgpYGBcXG4rYW5kIGxvbmcgYmVmb3JlIHRoZSBydW50aW1lIHBhcnNlciBsb29rcyBhdCBhbiBpbml0cmQuIE9wdGlvbnMgY2FuIHJlYWNoXFxuK3RoZSBrZXJuZWwgZnJvbSB1cCB0byBmb3VyIHBsYWNlczpcXG4rXFxuKy0gQm9vdGxvYWRlciBjb21tYW5kIGxpbmU6IHRoZSBhcmd1bWVudHMgdGhlIGJvb3QgbG9hZGVyIHBhc3Nlcy4gVGhlXFxuKyAgZW1iZWRkZWQgY21kbGluZSBpcyBwcmVwZW5kZWQgaW4gZnJvbnQgb2YgdGhlbSwgc28gZm9yIGxhc3Qtb25lLXdpbnNcXG4rICBwYXJhbWV0ZXJzIGEgYm9vdGxvYWRlciBvcHRpb24gc3RpbGwgb3ZlcnJpZGVzIHRoZSBlbWJlZGRlZCB2YWx1ZS5cXG4rICBWaXNpYmxlIGluIC9wcm9jL2NtZGxpbmUuXFxuKy0gRW1iZWRkZWQgY21kbGluZSAodGhpcyBvcHRpb24pOiB0aGUgcmVuZGVyZWQgYGBrZXJuZWxgYCBzdWJ0cmVlLFxcbisgIHByZXBlbmRlZCBlYXJseSBzbyBpdCBpcyBzZWVuIGJ5IGBgcGFyc2VfZWFybHlfcGFyYW0oKWBgLiBWaXNpYmxlIGluXFxuKyAgL3Byb2MvY21kbGluZS5cXG4rLSBJbml0cmQgYm9vdGNvbmZpZzogcGFyc2VkIGxhdGUgaW4gYGBzZXR1cF9ib290X2NvbmZpZygpYGA7IGl0c1xcbisgIGBga2VybmVsYGAga2V5cyBhcmUgcGxhY2VkIGFoZWFkIG9mIGBgYm9vdF9jb21tYW5kX2xpbmVgYCwgaS5lLiBiZWZvcmVcXG4rICB0aGUgZW1iZWRkZWQgY21kbGluZSwgc28gbGFzdC13aW5zIGZhdm9ycyB0aGUgZW1iZWRkZWQgdmFsdWVzLiBBcyBhXFxuKyAgYm9vdGNvbmZpZyBzb3VyY2UsIGFuIGluaXRyZCBib290Y29uZmlnIHN0aWxsIHJlcGxhY2VzIHRoZSBlbWJlZGRlZFxcbisgIGJvb3Rjb25maWcuIFZpc2libGUgaW4gL3Byb2MvY21kbGluZSBhbmQgL3Byb2MvYm9vdGNvbmZpZy5cXG4rLSBFbWJlZGRlZCBib290Y29uZmlnIChydW50aW1lKTogcGFyc2VkIGxhdGUsIG9ubHkgd2hlbiBubyBpbml0cmRcXG4rICBib290Y29uZmlnIGlzIHByZXNlbnQuIFZpc2libGUgaW4gL3Byb2MvY21kbGluZSBhbmQgL3Byb2MvYm9vdGNvbmZpZy5cXG4rXFxuK1NvIHdpdGggdGhpcyBvcHRpb24gdGhlIGVtYmVkZGVkIGBga2VybmVsLipgYCB2YWx1ZXMgdGFrZSBwcmVjZWRlbmNlXFxuK292ZXIgYW4gaW5pdHJkIGJvb3Rjb25maWcncyBgYGtlcm5lbC4qYGAgdmFsdWVzOiBmb3IgZWFybHkgcGFyYW1ldGVyc1xcbit0aGUgaW5pdHJkIGlzIG5vdCBwYXJzZWQgeWV0LCBhbmQgZm9yIG9yZGluYXJ5IHBhcmFtZXRlcnMgdGhlIGVtYmVkZGVkXFxuK2tleXMgbGFuZCBsYXRlciBpbiB0aGUgY29tbWFuZCBsaW5lLiBJZiB5b3UgbmVlZCBhbiBpbml0cmQgYm9vdGNvbmZpZyB0b1xcbitvdmVycmlkZSB0aGUgZW1iZWRkZWQgYGBrZXJuZWwuKmBgIGtleXMsIGxlYXZlIHRoaXMgb3B0aW9uIG9mZiBhbmQgcmVseVxcbitvbiB0aGUgcnVudGltZSBwYXJzZXIuXFxuK1xcbitUaGUgcmVuZGVyZWQgc3RyaW5nIGlzIHBhcnQgb2YgdGhlIGNvbW1hbmQgbGluZSwgc28gaXQgYXBwZWFycyBpblxcbisvcHJvYy9jbWRsaW5lLiBJdCBpcyBkZWxpYmVyYXRlbHkgbm90IHNob3duIGluIC9wcm9jL2Jvb3Rjb25maWc6IHRoYXRcXG4rZmlsZSBrZWVwcyByZXBvcnRpbmcgdGhlIHBhcnNlZCBib290Y29uZmlnIHRyZWUgLS0gdGhlIGluaXRyZCBib290Y29uZmlnXFxuK2lmIHByZXNlbnQsIG90aGVyd2lzZSB0aGUgZW1iZWRkZWQgYm9vdGNvbmZpZyAtLSBpbmRlcGVuZGVudCBvZiB3aGV0aGVyXFxuK2J1aWxkLXRpbWUgY21kbGluZSByZW5kZXJpbmcgaXMgZW5hYmxlZC5cXG4rXFxuIEtlcm5lbCBwYXJhbWV0ZXJzIHZpYSBCb290IENvbmZpZ1xcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4gXFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcXG5pbmRleCBkOTVkM2VmNzc3NzNmYS4uNzUzMzQxOTc3M2NhOWMgMTAwNjQ0XFxuLS0tIGEvTUFJTlRBSU5FUlNcXG4rKysgYi9NQUlOVEFJTkVSU1xcbkBAIC05ODEzLDYgKzk4MTMsNyBAQCBGOlxcdGZzL3Byb2MvYm9vdGNvbmZpZy5jXFxuIEY6XFx0aW5jbHVkZS9saW51eC9ib290Y29uZmlnLmhcXG4gRjpcXHRsaWIvYm9vdGNvbmZpZy1kYXRhLlNcXG4gRjpcXHRsaWIvYm9vdGNvbmZpZy5jXFxuK0Y6XFx0bGliL2VtYmVkZGVkLWNtZGxpbmUuU1xcbiBGOlxcdHRvb2xzL2Jvb3Rjb25maWcvKlxcbiBGOlxcdHRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy8qXFxuIFxcbmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlXFxuaW5kZXggZDFjNTk1ZGI1NWM5NTYuLjFmNTZhNjg5MmZlYjQwIDEwMDY0NFxcbi0tLSBhL01ha2VmaWxlXFxuKysrIGIvTWFrZWZpbGVcXG5AQCAtMTUzMSw2ICsxNTMxLDIyIEBAIHByZXBhcmU6IHRvb2xzL2JwZi9yZXNvbHZlX2J0Zmlkc1xcbiBlbmRpZlxcbiBlbmRpZlxcbiBcXG4rIyB0b29scy9ib290Y29uZmlnIHJlbmRlcnMgdGhlIGVtYmVkZGVkIGJvb3Rjb25maWcgaW50byBhIGNtZGxpbmUgYXQgYnVpbGQgdGltZS5cXG4raWZkZWYgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXFxuK3ByZXBhcmU6IHRvb2xzL2Jvb3Rjb25maWdcXG4rZW5kaWZcXG4rXFxuKyMgdG9vbHMvYm9vdGNvbmZpZyBpcyBydW4gb24gdGhlIGJ1aWxkIGhvc3QgZHVyaW5nIHByZXBhcmUsIHNvIGZvcmNlIGEgaG9zdFxcbisjIGJpbmFyeSBoZXJlOyBpdHMgb3duIE1ha2VmaWxlIGtlZXBzICQoQ0MpIGZvciBzdGFuZGFsb25lIGFuZCBjcm9zcyBidWlsZHMuXFxuKyMgQ1JPU1NfQ09NUElMRT0gaXMgY2xlYXJlZCBzbyB0b29scy9zY3JpcHRzL01ha2VmaWxlLmluY2x1ZGUgZG9lcyBub3QgaW5qZWN0XFxuKyMgdGhlIHRhcmdldCdzIC0tdGFyZ2V0PS8tLXN5c3Jvb3Q9IGZsYWdzIGludG8gdGhlIGhvc3QgY2xhbmcgaW52b2NhdGlvbiB1bmRlclxcbisjIExMVk09MSBjcm9zcyBidWlsZHMgKHdoaWNoIHdvdWxkIHByb2R1Y2UgYSB0YXJnZXQgYmluYXJ5IHRoYXQgZmFpbHMgdG8gZXhlYykuXFxuK3Rvb2xzL2Jvb3Rjb25maWc6IGV4cG9ydCBDQyA6PSAkKEhPU1RDQylcXG4rdG9vbHMvYm9vdGNvbmZpZzogRk9SQ0VcXG4rXFx0JChRKW1rZGlyIC1wICQob2JqdHJlZSkvdG9vbHNcXG4rXFx0JChRKSQoTUFLRSkgTz0kKGFic3BhdGggJChvYmp0cmVlKSkgc3ViZGlyPXRvb2xzIC1DICQoc3JjdHJlZSkvdG9vbHMvIFxcXFxcXG4rXFx0XFx0Ym9vdGNvbmZpZyBDUk9TU19DT01QSUxFPVxcbitcXG4gIyBUaGUgdG9vbHMgYnVpbGQgc3lzdGVtIGlzIG5vdCBhIHBhcnQgb2YgS2J1aWxkIGFuZCB0ZW5kcyB0byBpbnRyb2R1Y2VcXG4gIyBpdHMgb3duIHVuaXF1ZSBpc3N1ZXMuIElmIHlvdSBuZWVkIHRvIGludGVncmF0ZSBhIG5ldyB0b29sIGludG8gS2J1aWxkLFxcbiAjIHBsZWFzZSBjb25zaWRlciBsb2NhdGluZyB0aGF0IHRvb2wgb3V0c2lkZSB0aGUgdG9vbHMvIHRyZWUgYW5kIHVzaW5nIHRoZVxcbkBAIC0xNTU3LDYgKzE1NzMsMTUgQEAgaWZuZXEgKCQod2lsZGNhcmQgJChvYmp0b29sX08pKSwpXFxuIFxcdCQoUSkkKE1BS0UpIC1zQyAkKGFic19zcmN0cmVlKS90b29scy9vYmp0b29sIE89JChvYmp0b29sX08pIHNyY3RyZWU9JChhYnNfc3JjdHJlZSkgJChwYXRzdWJzdCBvYmp0b29sXyUsJSwkQClcXG4gZW5kaWZcXG4gXFxuK1BIT05ZICs9IGJvb3Rjb25maWdfY2xlYW5cXG4rXFxuK2Jvb3Rjb25maWdfTyA9ICQoYWJzcGF0aCAkKG9ianRyZWUpKS90b29scy9ib290Y29uZmlnXFxuK1xcbitib290Y29uZmlnX2NsZWFuOlxcbitpZm5lcSAoJCh3aWxkY2FyZCAkKGJvb3Rjb25maWdfTykpLClcXG4rXFx0JChRKSQoTUFLRSkgLXNDICQoc3JjdHJlZSkvdG9vbHMvYm9vdGNvbmZpZyBPPSQoYm9vdGNvbmZpZ19PKSBjbGVhblxcbitlbmRpZlxcbitcXG4gdG9vbHMvOiBGT1JDRVxcbiBcXHQkKFEpbWtkaXIgLXAgJChvYmp0cmVlKS90b29sc1xcbiBcXHQkKFEpJChNQUtFKSBPPSQoYWJzcGF0aCAkKG9ianRyZWUpKSBzdWJkaXI9dG9vbHMgLUMgJChzcmN0cmVlKS90b29scy9cXG5AQCAtMTczMiw3ICsxNzU3LDcgQEAgdm1saW51eGNsZWFuOlxcbiBcXHQkKFEpJChDT05GSUdfU0hFTEwpICQoc3JjdHJlZSkvc2NyaXB0cy9saW5rLXZtbGludXguc2ggY2xlYW5cXG4gXFx0JChRKSQoaWYgJChBUkNIX1BPU1RMSU5LKSwgJChNQUtFKSAtZiAkKEFSQ0hfUE9TVExJTkspIGNsZWFuKVxcbiBcXG4tY2xlYW46IGFyY2hjbGVhbiB2bWxpbnV4Y2xlYW4gcmVzb2x2ZV9idGZpZHNfY2xlYW4gb2JqdG9vbF9jbGVhblxcbitjbGVhbjogYXJjaGNsZWFuIHZtbGludXhjbGVhbiByZXNvbHZlX2J0Zmlkc19jbGVhbiBvYmp0b29sX2NsZWFuIGJvb3Rjb25maWdfY2xlYW5cXG4gXFxuICMgbXJwcm9wZXIgLSBEZWxldGUgYWxsIGdlbmVyYXRlZCBmaWxlcywgaW5jbHVkaW5nIC5jb25maWdcXG4gI1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnIGIvYXJjaC94ODYvS2NvbmZpZ1xcbmluZGV4IGZhNGYwMDc5NjE0Y2QwLi5hZGJjYWFkODAxMzA4MyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9LY29uZmlnXFxuKysrIGIvYXJjaC94ODYvS2NvbmZpZ1xcbkBAIC0xMjcsNiArMTI3LDcgQEAgY29uZmlnIFg4NlxcbiBcXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19OVU1BX0JBTEFOQ0lOR1xcdGlmIFg4Nl82NFxcbiBcXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19LTUFQX0xPQ0FMX0ZPUkNFX01BUFxcdGlmIE5SX0NQVVMgXFx1MDAzYz0gNDA5NlxcbiBcXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19DRklcXHRcXHRpZiBYODZfNjRcXG4rXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfQ01ETElORV9GUk9NX0JPT1RDT05GSUdcXG4gXFx0c2VsZWN0IEFSQ0hfVVNFU19DRklfVFJBUFNcXHRcXHRpZiBYODZfNjQgXFx1MDAyNlxcdTAwMjYgQ0ZJXFxuIFxcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0xUT19DTEFOR1xcbiBcXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19MVE9fQ0xBTkdfVEhJTlxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jXFxuaW5kZXggNDY4ODJjZTc5YzNhNGQuLmM5NzNhMmNlYmNkMDRlIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jXFxuKysrIGIvYXJjaC94ODYva2VybmVsL3NldHVwLmNcXG5AQCAtNiw2ICs2LDcgQEBcXG4gICogcGFydHMgb2YgZWFybHkga2VybmVsIGluaXRpYWxpemF0aW9uLlxcbiAgKi9cXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2FjcGkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Jvb3Rjb25maWcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbnNvbGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NwdS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY3Jhc2hfZHVtcC5oXFx1MDAzZVxcbkBAIC04ODEsNiArODgyLDM3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCB4ODZfcmVwb3J0X254KHZvaWQpXFxuICAqIE5vdGU6IE9uIHg4Nl82NCwgZml4bWFwcyBhcmUgcmVhZHkgZm9yIHVzZSBldmVuIGJlZm9yZSB0aGlzIGlzIGNhbGxlZC5cXG4gICovXFxuIFxcbisjaWZkZWYgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXFxuK3N0YXRpYyBpbnQgX19pbml0IGJvb3Rjb25maWdfb3B0aW4oY2hhciAqcGFyYW0sIGNoYXIgKnZhbCxcXG4rXFx0XFx0XFx0XFx0ICAgY29uc3QgY2hhciAqdW51c2VkLCB2b2lkICphcmcpXFxuK3tcXG4rXFx0aWYgKCFzdHJjbXAocGFyYW0sIFxcXCJib290Y29uZmlnXFxcIikpXFxuK1xcdFxcdCooYm9vbCAqKWFyZyA9IHRydWU7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKlxcbisgKiBEaWQgdGhlIHVzZXIgb3B0IGluIHRvIGJvb3Rjb25maWcgb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmU/IFVzZVxcbisgKiBwYXJzZV9hcmdzKCkgc28gdGhpcyBtYXRjaGVzIHNldHVwX2Jvb3RfY29uZmlnKCkgZXhhY3RseSwgaW5jbHVkaW5nXFxuKyAqIHN0b3BwaW5nIGF0IHRoZSBcXFwiLS1cXFwiIHRoYXQgc2VwYXJhdGVzIGluaXQgYXJndW1lbnRzLlxcbisgKi9cXG4rc3RhdGljIGJvb2wgX19pbml0IGJvb3Rjb25maWdfY21kbGluZV9yZXF1ZXN0ZWQodm9pZClcXG4re1xcbitcXHRzdGF0aWMgY2hhciB0bXBfY21kbGluZVtDT01NQU5EX0xJTkVfU0laRV0gX19pbml0ZGF0YTtcXG4rXFx0Ym9vbCBmb3VuZCA9IGZhbHNlO1xcbitcXG4rXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0JPT1RfQ09ORklHX0ZPUkNFKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRzdHJzY3B5KHRtcF9jbWRsaW5lLCBib290X2NvbW1hbmRfbGluZSwgQ09NTUFORF9MSU5FX1NJWkUpO1xcbitcXHRpZiAoSVNfRVJSKHBhcnNlX2FyZ3MoXFxcImJvb3Rjb25maWdcXFwiLCB0bXBfY21kbGluZSwgTlVMTCwgMCwgMCwgMCxcXG4rXFx0XFx0XFx0ICAgICAgXFx1MDAyNmZvdW5kLCBib290Y29uZmlnX29wdGluKSkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiBmb3VuZDtcXG4rfVxcbisjZW5kaWZcXG4rXFxuIHZvaWQgX19pbml0IHNldHVwX2FyY2goY2hhciAqKmNtZGxpbmVfcClcXG4ge1xcbiAjaWZkZWYgQ09ORklHX1g4Nl8zMlxcbkBAIC05MjQsNiArOTU2LDE3IEBAIHZvaWQgX19pbml0IHNldHVwX2FyY2goY2hhciAqKmNtZGxpbmVfcClcXG4gXFx0YnVpbHRpbl9jbWRsaW5lX2FkZGVkID0gdHJ1ZTtcXG4gI2VuZGlmXFxuIFxcbisjaWZkZWYgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXFxuK1xcdC8qXFxuK1xcdCAqIFByZXBlbmQgdGhlIGJ1aWxkLXRpbWUtcmVuZGVyZWQgZW1iZWRkZWQgXFxcImtlcm5lbFxcXCIga2V5cyBoZXJlIHNvXFxuK1xcdCAqIHBhcnNlX2Vhcmx5X3BhcmFtKCkgYmVsb3cgc2VlcyB0aGVtLCBnYXRpbmcgb24gdGhlIHNhbWUgb3B0LWluXFxuK1xcdCAqIGFzIHRoZSBydW50aW1lIHBhcnNlciAoc2VlIGJvb3Rjb25maWdfY21kbGluZV9yZXF1ZXN0ZWQoKSkuXFxuK1xcdCAqL1xcbitcXHRpZiAoYm9vdGNvbmZpZ19jbWRsaW5lX3JlcXVlc3RlZCgpKVxcbitcXHRcXHR4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lKGJvb3RfY29tbWFuZF9saW5lLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIENPTU1BTkRfTElORV9TSVpFKTtcXG4rI2VuZGlmXFxuK1xcbiBcXHRzdHJzY3B5KGNvbW1hbmRfbGluZSwgYm9vdF9jb21tYW5kX2xpbmUsIENPTU1BTkRfTElORV9TSVpFKTtcXG4gXFx0KmNtZGxpbmVfcCA9IGNvbW1hbmRfbGluZTtcXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oIGIvaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmhcXG5pbmRleCAxYzdmM2I3NGZmY2YzOC4uNDMzMjRiNDc3ZjEzYWIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2Jvb3Rjb25maWcuaFxcbkBAIC0zMDgsNCArMzA4LDEzIEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqeGJjX2dldF9lbWJlZGRlZF9ib290Y29uZmlnKHNpemVfdCAqc2l6ZSlcXG4gfVxcbiAjZW5kaWZcXG4gXFxuKy8qIEJ1aWxkLXRpbWUtcmVuZGVyZWQgYm9vdGNvbmZpZyBjbWRsaW5lIHByZXBlbmRlZCBpbiBzZXR1cF9hcmNoKCkgKi9cXG4rI2lmZGVmIENPTkZJR19DTURMSU5FX0ZST01fQk9PVENPTkZJR1xcbit2b2lkIF9faW5pdCB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lKGNoYXIgKmRzdCwgc2l6ZV90IHNpemUpO1xcbitib29sIF9faW5pdCB4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkKHZvaWQpO1xcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIHZvaWQgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZShjaGFyICpkc3QsIHNpemVfdCBzaXplKSB7IH1cXG4rc3RhdGljIGlubGluZSBib29sIHhiY19lbWJlZGRlZF9jbWRsaW5lX2FwcGxpZWQodm9pZCkgeyByZXR1cm4gZmFsc2U7IH1cXG4rI2VuZGlmXFxuK1xcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvaW5pdC9LY29uZmlnIGIvaW5pdC9LY29uZmlnXFxuaW5kZXggNDQwM2U1Mzg3NmUxMDcuLjFjZjZjZjYyOThjNGVlIDEwMDY0NFxcbi0tLSBhL2luaXQvS2NvbmZpZ1xcbisrKyBiL2luaXQvS2NvbmZpZ1xcbkBAIC0xNTY2LDYgKzE1NjYsNDIgQEAgY29uZmlnIEJPT1RfQ09ORklHX0VNQkVEX0ZJTEVcXG4gXFx0ICBUaGlzIGJvb3Rjb25maWcgd2lsbCBiZSB1c2VkIGlmIHRoZXJlIGlzIG5vIGluaXRyZCBvciBubyBvdGhlclxcbiBcXHQgIGJvb3Rjb25maWcgaW4gdGhlIGluaXRyZC5cXG4gXFxuK2NvbmZpZyBBUkNIX1NVUFBPUlRTX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXFxuK1xcdGJvb2xcXG4rXFx0aGVscFxcbitcXHQgIFNpbGVudCBzeW1ib2w7IG5vIEMgY29kZSByZWFkcyBpdCBkaXJlY3RseS4gQXJjaGl0ZWN0dXJlc1xcbitcXHQgIHNlbGVjdCBpdCBvbmNlIHRoZWlyIHNldHVwX2FyY2goKSBjYWxsc1xcbitcXHQgIHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoKSBiZWZvcmUgcGFyc2VfZWFybHlfcGFyYW0oKS5cXG4rXFx0ICBJdHMgb25seSByb2xlIGlzIHRvIGdhdGUgdGhlIHVzZXItdmlzaWJsZVxcbitcXHQgIENNRExJTkVfRlJPTV9CT09UQ09ORklHIG9wdGlvbiBwZXItYXJjaCwgdGhlIHNhbWVcXG4rXFx0ICBBUkNIX1NVUFBPUlRTXyogaWRpb20gdXNlZCBieSBBUkNIX1NVUFBPUlRTX0NGSSwgZXRjLlxcbitcXG4rY29uZmlnIENNRExJTkVfRlJPTV9CT09UQ09ORklHXFxuK1xcdGJvb2wgXFxcIlJlbmRlciBlbWJlZGRlZCBib290Y29uZmlnIGFzIGtlcm5lbCBjbWRsaW5lIGF0IGJ1aWxkIHRpbWVcXFwiXFxuK1xcdGRlcGVuZHMgb24gQk9PVF9DT05GSUdfRU1CRURfRklMRSAhPSBcXFwiXFxcIlxcbitcXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfQ01ETElORV9GUk9NX0JPT1RDT05GSUdcXG4rXFx0ZGVwZW5kcyBvbiBDTURMSU5FID0gXFxcIlxcXCJcXG4rXFx0ZGVmYXVsdCBuXFxuK1xcdGhlbHBcXG4rXFx0ICBSZW5kZXIgdGhlIFxcXCJrZXJuZWxcXFwiIHN1YnRyZWUgb2YgdGhlIGVtYmVkZGVkIGJvb3Rjb25maWcgZmlsZSBpbnRvIGFcXG4rXFx0ICBmbGF0IGNtZGxpbmUgc3RyaW5nIGF0IGtlcm5lbCBidWlsZCB0aW1lIGFuZCBwcmVwZW5kIGl0IHRvXFxuK1xcdCAgYm9vdF9jb21tYW5kX2xpbmUgZHVyaW5nIGVhcmx5IGFyY2hpdGVjdHVyZSBzZXR1cC4gVGhpcyBtYWtlc1xcbitcXHQgIGVhcmx5X3BhcmFtKCkgaGFuZGxlcnMgKGUuZy4gbWVtPSwgZWFybHljb249LCBsb2dsZXZlbD0pIHNlZSB0aGVcXG4rXFx0ICB2YWx1ZXMgc3VwcGxpZWQgdmlhIHRoZSBlbWJlZGRlZCBib290Y29uZmlnLlxcbitcXG4rXFx0ICBUaGUgcnVudGltZSBib290Y29uZmlnIHBhcnNlciBpcyB1bmFmZmVjdGVkLCBzbyB0cmVlLXN0cnVjdHVyZWRcXG4rXFx0ICBjb25zdW1lcnMgc3VjaCBhcyBmdHJhY2UgYm9vdC10aW1lIHRyYWNpbmcga2VlcCB3b3JraW5nLlxcbitcXG4rXFx0ICBOb3RlOiB3aGVuIGFuIGluaXRyZCBhbHNvIGNhcnJpZXMgYSBib290Y29uZmlnLCBpdHMgXFxcImtlcm5lbFxcXCJcXG4rXFx0ICBzdWJ0cmVlIGlzIHN0aWxsIHBhcnNlZCBhdCBydW50aW1lLCBidXQgdGhlIGVtYmVkZGVkIFxcXCJrZXJuZWxcXFwiXFxuK1xcdCAga2V5cyByZW1haW4gaW4gYm9vdF9jb21tYW5kX2xpbmUgZm9yIHBhcnNlX2Vhcmx5X3BhcmFtKCkgYW5kXFxuK1xcdCAgZW5kIHVwIGxhdGVyIHRoYW4gdGhlIGluaXRyZCBrZXlzIGluIHNhdmVkX2NvbW1hbmRfbGluZSwgc29cXG4rXFx0ICBwYXJzZV9hcmdzKCkgbGFzdC13aW5zIGZhdm9ycyB0aGUgZW1iZWRkZWQgdmFsdWVzLiBJZiB5b3UgbmVlZFxcbitcXHQgIGluaXRyZCB0byBvdmVycmlkZSBlbWJlZGRlZCBrZXJuZWwuKiBrZXlzLCBsZWF2ZSB0aGlzIG9wdGlvblxcbitcXHQgIG9mZi5cXG4rXFxuK1xcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4rXFxuIGNvbmZpZyBDTURMSU5FX0xPR19XUkFQX0lERUFMX0xFTlxcbiBcXHRpbnQgXFxcIkxlbmd0aCB0byB0cnkgdG8gd3JhcCB0aGUgY21kbGluZSB3aGVuIGxvZ2dlZCBhdCBib290XFxcIlxcbiBcXHRkZWZhdWx0IDEwMjFcXG5kaWZmIC0tZ2l0IGEvaW5pdC9tYWluLmMgYi9pbml0L21haW4uY1xcbmluZGV4IGUzNjMyMzJiNDI4YjQ3Li4yNjBiZDUyNDJmOTRlOCAxMDA2NDRcXG4tLS0gYS9pbml0L21haW4uY1xcbisrKyBiL2luaXQvbWFpbi5jXFxuQEAgLTM3OCwxMiArMzc4LDE1IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9ib290X2NvbmZpZyh2b2lkKVxcbiBcXHRpbnQgcG9zLCByZXQ7XFxuIFxcdHNpemVfdCBzaXplO1xcbiBcXHRjaGFyICplcnI7XFxuK1xcdGJvb2wgZnJvbV9lbWJlZGRlZCA9IGZhbHNlO1xcbiBcXG4gXFx0LyogQ3V0IG91dCB0aGUgYm9vdGNvbmZpZyBkYXRhIGV2ZW4gaWYgd2UgaGF2ZSBubyBib290Y29uZmlnIG9wdGlvbiAqL1xcbiBcXHRkYXRhID0gZ2V0X2Jvb3RfY29uZmlnX2Zyb21faW5pdHJkKFxcdTAwMjZzaXplKTtcXG4gXFx0LyogSWYgdGhlcmUgaXMgbm8gYm9vdGNvbmZpZyBpbiBpbml0cmQsIHRyeSBlbWJlZGRlZCBvbmUuICovXFxuLVxcdGlmICghZGF0YSlcXG4rXFx0aWYgKCFkYXRhKSB7XFxuIFxcdFxcdGRhdGEgPSB4YmNfZ2V0X2VtYmVkZGVkX2Jvb3Rjb25maWcoXFx1MDAyNnNpemUpO1xcbitcXHRcXHRmcm9tX2VtYmVkZGVkID0gdHJ1ZTtcXG4rXFx0fVxcbiBcXG4gXFx0c3Ryc2NweSh0bXBfY21kbGluZSwgYm9vdF9jb21tYW5kX2xpbmUsIENPTU1BTkRfTElORV9TSVpFKTtcXG4gXFx0ZXJyID0gcGFyc2VfYXJncyhcXFwiYm9vdGNvbmZpZ1xcXCIsIHRtcF9jbWRsaW5lLCBOVUxMLCAwLCAwLCAwLCBOVUxMLFxcbkBAIC00MjEsOCArNDI0LDI0IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9ib290X2NvbmZpZyh2b2lkKVxcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHR4YmNfZ2V0X2luZm8oXFx1MDAyNnJldCwgTlVMTCk7XFxuIFxcdFxcdHByX2luZm8oXFxcIkxvYWQgYm9vdGNvbmZpZzogJWxkIGJ5dGVzICVkIG5vZGVzXFxcXG5cXFwiLCAobG9uZylzaXplLCByZXQpO1xcbi1cXHRcXHQvKiBrZXlzIHN0YXJ0aW5nIHdpdGggXFxcImtlcm5lbC5cXFwiIGFyZSBwYXNzZWQgdmlhIGNtZGxpbmUgKi9cXG4tXFx0XFx0ZXh0cmFfY29tbWFuZF9saW5lID0geGJjX21ha2VfY21kbGluZShcXFwia2VybmVsXFxcIik7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIGtleXMgc3RhcnRpbmcgd2l0aCBcXFwia2VybmVsLlxcXCIgYXJlIHBhc3NlZCB2aWEgY21kbGluZS4gV2hlblxcbitcXHRcXHQgKiB0aGlzIGJvb3Rjb25maWcgY2FtZSBmcm9tIHRoZSBlbWJlZGRlZCBzb3VyY2UgYW5kXFxuK1xcdFxcdCAqIHNldHVwX2FyY2goKSBhbHJlYWR5IHByZXBlbmRlZCB0aGUgcmVuZGVyZWQgXFxcImtlcm5lbFxcXCIgc3VidHJlZVxcbitcXHRcXHQgKiB0byBib290X2NvbW1hbmRfbGluZSwgcmVuZGVyaW5nIGFnYWluIGhlcmUgd291bGQgZHVwbGljYXRlXFxuK1xcdFxcdCAqIHRoZSBrZXlzIGluIHNhdmVkX2NvbW1hbmRfbGluZSBhbmQgbWFrZSBhY2N1bXVsYXRpbmcgaGFuZGxlcnNcXG4rXFx0XFx0ICogKGNvbnNvbGU9LCBlYXJseWNvbj0sIC4uLikgcmUtcmVnaXN0ZXIgdGhlIHNhbWUgdmFsdWUuIFNraXBcXG4rXFx0XFx0ICogb25seSB3aGVuIHRoZSBwcmVwZW5kIHJlYWxseSBoYXBwZW5lZC5cXG4rXFx0XFx0ICpcXG4rXFx0XFx0ICogT24gYXJjaGVzIHRoYXQgZG8gbm90IHNlbGVjdCBBUkNIX1NVUFBPUlRTX0NNRExJTkVfRlJPTV9CT09UQ09ORklHLFxcbitcXHRcXHQgKiBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUcgaXMgdW5zZWxlY3RhYmxlIGFuZFxcbitcXHRcXHQgKiB4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkKCkgY29sbGFwc2VzIHRvIGEgc3R1YiByZXR1cm5pbmdcXG4rXFx0XFx0ICogZmFsc2UsIHNvIHRoaXMgcGF0aCBzdGlsbCBydW5zIGFuZCB0aGUgZW1iZWRkZWQgXFxcImtlcm5lbFxcXCJcXG4rXFx0XFx0ICoga2V5cyByZWFjaCB0aGUgY21kbGluZSB2aWEgdGhlIHJ1bnRpbWUgcGFyc2VyIGV4YWN0bHkgYXNcXG4rXFx0XFx0ICogYmVmb3JlIHRoaXMgc2VyaWVzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKCFmcm9tX2VtYmVkZGVkIHx8ICF4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkKCkpXFxuK1xcdFxcdFxcdGV4dHJhX2NvbW1hbmRfbGluZSA9IHhiY19tYWtlX2NtZGxpbmUoXFxcImtlcm5lbFxcXCIpO1xcbiBcXHRcXHQvKiBBbHNvLCBcXFwiaW5pdC5cXFwiIGtleXMgYXJlIGluaXQgYXJndW1lbnRzICovXFxuIFxcdFxcdGV4dHJhX2luaXRfYXJncyA9IHhiY19tYWtlX2NtZGxpbmUoXFxcImluaXRcXFwiKTtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUgYi9saWIvTWFrZWZpbGVcXG5pbmRleCAyM2UwN2QxOWQwMWM5MC4uNGY5N2E1NGQxZTNkOWEgMTAwNjQ0XFxuLS0tIGEvbGliL01ha2VmaWxlXFxuKysrIGIvbGliL01ha2VmaWxlXFxuQEAgLTI3NCw2ICsyNzQsMjIgQEAgZmlsZWNoa19kZWZiY29uZiA9IGNhdCAkKG9yICQocmVhbC1wcmVyZXFzKSwgL2Rldi9udWxsKVxcbiAkKG9iaikvZGVmYXVsdC5iY29uZjogJChDT05GSUdfQk9PVF9DT05GSUdfRU1CRURfRklMRSkgRk9SQ0VcXG4gXFx0JChjYWxsIGZpbGVjaGssZGVmYmNvbmYpXFxuIFxcbitvYmotJChDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUcpICs9IGVtYmVkZGVkLWNtZGxpbmUub1xcbiskKG9iaikvZW1iZWRkZWQtY21kbGluZS5vOiAkKG9iaikvZW1iZWRkZWRfY21kbGluZS5iaW5cXG4rXFxuKyMgUmVuZGVyIHRoZSBib290Y29uZmlnIFxcXCJrZXJuZWxcXFwiIHN1YnRyZWUgdG8gYSBmbGF0IGNtZGxpbmUgc3RyaW5nIHVzaW5nXFxuKyMgdGhlIHVzZXJzcGFjZSB0b29scy9ib290Y29uZmlnIHBhcnNlciAoLUMgbW9kZSkuIFRoZSBydW50aW1lIHByZXBlbmRcXG4rIyBoZWxwZXIgZW5mb3JjZXMgQ09NTUFORF9MSU5FX1NJWkUgYXQgYm9vdCwgc28gbm8gYnVpbGQtdGltZSBzaXplXFxuKyMgY2hlY2sgaXMgcGVyZm9ybWVkIGhlcmUgKENPTU1BTkRfTElORV9TSVpFIGlzIGFuIGFyY2ggaGVhZGVyXFxuKyMgY29uc3RhbnQsIG5vdCBhIEtjb25maWcgdmFsdWUpLlxcbitxdWlldF9jbWRfcmVuZGVyX2NtZGxpbmUgPSBCQ09ORjJDICRAXFxuKyAgICAgIGNtZF9yZW5kZXJfY21kbGluZSA9IFxcXFxcXG4rXFx0JChvYmp0cmVlKS90b29scy9ib290Y29uZmlnL2Jvb3Rjb25maWcgLUMgJFxcdTAwM2MgXFx1MDAzZSAkQFxcbitcXG4rdGFyZ2V0cyArPSBlbWJlZGRlZF9jbWRsaW5lLmJpblxcbiskKG9iaikvZW1iZWRkZWRfY21kbGluZS5iaW46ICQob2JqKS9kZWZhdWx0LmJjb25mICQob2JqdHJlZSkvdG9vbHMvYm9vdGNvbmZpZy9ib290Y29uZmlnIEZPUkNFXFxuK1xcdCQoY2FsbCBpZl9jaGFuZ2VkLHJlbmRlcl9jbWRsaW5lKVxcbitcXG4gb2JqLSQoQ09ORklHX1JCVFJFRV9URVNUKSArPSByYnRyZWVfdGVzdC5vXFxuIG9iai0kKENPTkZJR19JTlRFUlZBTF9UUkVFX1RFU1QpICs9IGludGVydmFsX3RyZWVfdGVzdC5vXFxuIFxcbmRpZmYgLS1naXQgYS9saWIvYm9vdGNvbmZpZy5jIGIvbGliL2Jvb3Rjb25maWcuY1xcbmluZGV4IGY0NDViNzcwM2ZkZDk2Li4wNWNiMWVhOWFmZGFlMyAxMDA2NDRcXG4tLS0gYS9saWIvYm9vdGNvbmZpZy5jXFxuKysrIGIvbGliL2Jvb3Rjb25maWcuY1xcbkBAIC0xOSw2ICsxOSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9lcnJuby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY2FjaGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcmludGsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NwcmludGYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWJsb2NrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdHJpbmcuaFxcdTAwM2VcXG5AQCAtMzQsNiArMzUsODMgQEAgY29uc3QgY2hhciAqIF9faW5pdCB4YmNfZ2V0X2VtYmVkZGVkX2Jvb3Rjb25maWcoc2l6ZV90ICpzaXplKVxcbiBcXHRyZXR1cm4gKCpzaXplKSA/IGVtYmVkZGVkX2Jvb3Rjb25maWdfZGF0YSA6IE5VTEw7XFxuIH1cXG4gI2VuZGlmXFxuK1xcbisjaWZkZWYgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXFxuKy8qIGVtYmVkZGVkX2tlcm5lbF9jbWRsaW5lIGlzIGRlZmluZWQgaW4gZW1iZWRkZWQtY21kbGluZS5TICovXFxuK2V4dGVybiBfX3Zpc2libGUgY29uc3QgY2hhciBlbWJlZGRlZF9rZXJuZWxfY21kbGluZVtdO1xcbitleHRlcm4gX192aXNpYmxlIGNvbnN0IGNoYXIgZW1iZWRkZWRfa2VybmVsX2NtZGxpbmVfZW5kW107XFxuK1xcbisvKiBTZXQgb25jZSB0aGUgZW1iZWRkZWQgY21kbGluZSBoYXMgYWN0dWFsbHkgYmVlbiBwcmVwZW5kZWQuICovXFxuK3N0YXRpYyBib29sIHhiY19jbWRsaW5lX2FwcGxpZWQgX19pbml0ZGF0YTtcXG4rXFxuKy8qXFxuKyAqIHN0cl9wcmVwZW5kKCkgLSBQcmVwZW5kIEBzcmMgaW4gZnJvbnQgb2YgdGhlIHN0cmluZyBpbiBAZHN0LCBpbiBwbGFjZVxcbisgKiBAZHN0OiBOVUwtdGVybWluYXRlZCBkZXN0aW5hdGlvbiBidWZmZXIsIGN1cnJlbnRseSBAZHN0X2xlbiBieXRlcyBsb25nXFxuKyAqIEBkc3RfbGVuOiBsZW5ndGggb2YgdGhlIGN1cnJlbnQgQGRzdCBzdHJpbmcgKGV4Y2x1ZGluZyBpdHMgTlVMKVxcbisgKiBAc3JjOiBieXRlcyB0byBwcmVwZW5kIChub3QgTlVMLXRlcm1pbmF0ZWQpXFxuKyAqIEBzcmNfbGVuOiBudW1iZXIgb2YgYnl0ZXMgZnJvbSBAc3JjIHRvIHByZXBlbmRcXG4rICpcXG4rICogVGhlIGNhbGxlciBtdXN0IGd1YXJhbnRlZSBAZHN0IGhhcyByb29tIGZvciBzcmNfbGVuICsgZHN0X2xlbiArIDEgYnl0ZXMuXFxuKyAqIE1vdmluZyBkc3RfbGVuICsgMSBieXRlcyBjYXJyaWVzIEBkc3QncyBOVUwgdGVybWluYXRvciB0b28sIHNvIGFuIGVtcHR5XFxuKyAqIEBkc3QgbmVlZHMgbm8gc3BlY2lhbCBjYXNlLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgX19pbml0IHN0cl9wcmVwZW5kKGNoYXIgKmRzdCwgc2l6ZV90IGRzdF9sZW4sXFxuK1xcdFxcdFxcdCAgICAgICBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBzcmNfbGVuKVxcbit7XFxuK1xcdG1lbW1vdmUoZHN0ICsgc3JjX2xlbiwgZHN0LCBkc3RfbGVuICsgMSk7XFxuK1xcdG1lbWNweShkc3QsIHNyYywgc3JjX2xlbik7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lKCkgLSBQcmVwZW5kIGVtYmVkZGVkIGJvb3Rjb25maWcgY21kbGluZVxcbisgKiBAZHN0OiBjbWRsaW5lIGJ1ZmZlciB0byBwcmVwZW5kIGludG8gKG11c3QgYWxyZWFkeSBjb250YWluIGEgTlVMIGJ5dGUpXFxuKyAqIEBzaXplOiB0b3RhbCBjYXBhY2l0eSBvZiBAZHN0IGluIGJ5dGVzXFxuKyAqXFxuKyAqIFByZXBlbmQgdGhlIGJ1aWxkLXRpbWUtcmVuZGVyZWQgXFxcImtlcm5lbFxcXCIgc3VidHJlZSBvZiB0aGUgZW1iZWRkZWRcXG4rICogYm9vdGNvbmZpZyB0byBAZHN0LiBUaGUgcmVuZGVyZWQgc3RyaW5nIGFscmVhZHkgZW5kcyB3aXRoIGEgc2luZ2xlXFxuKyAqIHNwYWNlICh0aGUgeGJjX3NucHJpbnRfY21kbGluZSgpIGludmFyaWFudCksIHdoaWNoIHNlcnZlcyBhcyB0aGVcXG4rICogc2VwYXJhdG9yIGJldHdlZW4gdGhlIGVtYmVkZGVkIGtleXMgYW5kIGFueSBleGlzdGluZyBjb250ZW50IG9mIEBkc3QuXFxuKyAqIE9uIG92ZXJmbG93LCBsb2cgYW4gZXJyb3IgYW5kIGxlYXZlIEBkc3QgdW50b3VjaGVkIHJhdGhlciB0aGFuXFxuKyAqIHNpbGVudGx5IHRydW5jYXRpbmc6IGJvb3Rpbmcgd2l0aG91dCB0aGUgZW1iZWRkZWQgdmFsdWVzIGlzIGJldHRlclxcbisgKiB0aGFuIHJlZnVzaW5nIHRvIGJvb3QsIGFuZCB0aGUgZXJyb3IgbWVzc2FnZSB0ZWxscyB0aGUgdXNlciB3aHlcXG4rICogdGhlaXIgZW1iZWRkZWQga2V5cyBhcmUgbWlzc2luZy5cXG4rICpcXG4rICogSW50ZW5kZWQgdG8gYmUgY2FsbGVkIGZyb20gc2V0dXBfYXJjaCgpIGJlZm9yZSBwYXJzZV9lYXJseV9wYXJhbSgpIHNvXFxuKyAqIHRoYXQgZWFybHlfcGFyYW0oKSBoYW5kbGVycyBzZWUgdGhlIGVtYmVkZGVkIHZhbHVlcy5cXG4rICovXFxuK3ZvaWQgX19pbml0IHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSlcXG4re1xcbitcXHRzaXplX3QgZW1iZWRfbGVuID0gZW1iZWRkZWRfa2VybmVsX2NtZGxpbmVfZW5kIC0gZW1iZWRkZWRfa2VybmVsX2NtZGxpbmU7XFxuK1xcdHNpemVfdCBkc3RfbGVuO1xcbitcXG4rXFx0aWYgKCFzaXplIHx8IGVtYmVkX2xlbiBcXHUwMDNjPSAxKVxcdC8qIHRyYWlsaW5nIE5VTCBvbmx5ICovXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0ZW1iZWRfbGVuLS07XFx0XFx0XFx0LyogZXhjbHVkZSB0cmFpbGluZyBOVUwgYnl0ZSAqL1xcbitcXG4rXFx0ZHN0X2xlbiA9IHN0cm5sZW4oZHN0LCBzaXplKTtcXG4rXFx0aWYgKGVtYmVkX2xlbiArIGRzdF9sZW4gKyAxIFxcdTAwM2Ugc2l6ZSkge1xcbitcXHRcXHRwcl9lcnIoXFxcImVtYmVkZGVkIGJvb3Rjb25maWcgY21kbGluZSAoJXp1IGJ5dGVzKSBkb2VzIG5vdCBmaXQgaW4gQ09NTUFORF9MSU5FX1NJWkUgd2l0aCAlenUgYnl0ZXMgYWxyZWFkeSB1c2VkOyBpZ25vcmluZyBlbWJlZGRlZCB2YWx1ZXNcXFxcblxcXCIsXFxuK1xcdFxcdCAgICAgICBlbWJlZF9sZW4sIGRzdF9sZW4pO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdHN0cl9wcmVwZW5kKGRzdCwgZHN0X2xlbiwgZW1iZWRkZWRfa2VybmVsX2NtZGxpbmUsIGVtYmVkX2xlbik7XFxuK1xcdHhiY19jbWRsaW5lX2FwcGxpZWQgPSB0cnVlO1xcbit9XFxuK1xcbisvKipcXG4rICogeGJjX2VtYmVkZGVkX2NtZGxpbmVfYXBwbGllZCgpIC0gRGlkIHRoZSBlbWJlZGRlZCBjbWRsaW5lIGdldCBwcmVwZW5kZWQ/XFxuKyAqXFxuKyAqIFJldHVybiB0cnVlIGlmIHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoKSBhY3R1YWxseSBwcmVwZW5kZWQgdGhlXFxuKyAqIGVtYmVkZGVkIFxcXCJrZXJuZWxcXFwiIHN1YnRyZWUuIHNldHVwX2Jvb3RfY29uZmlnKCkgdXNlcyB0aGlzIHRvIGF2b2lkXFxuKyAqIHJlbmRlcmluZyB0aGUgc2FtZSBrZXlzIGEgc2Vjb25kIHRpbWUuXFxuKyAqL1xcbitib29sIF9faW5pdCB4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkKHZvaWQpXFxuK3tcXG4rXFx0cmV0dXJuIHhiY19jbWRsaW5lX2FwcGxpZWQ7XFxuK31cXG4rI2VuZGlmXFxuK1xcbiAjZW5kaWZcXG4gXFxuIC8qXFxuQEAgLTQyNywxMSArNTA1LDMwIEBAIHN0YXRpYyBjaGFyIHhiY19uYW1lYnVmW1hCQ19LRVlMRU5fTUFYXSBfX2luaXRkYXRhO1xcbiBpbnQgX19pbml0IHhiY19zbnByaW50X2NtZGxpbmUoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgc3RydWN0IHhiY19ub2RlICpyb290KVxcbiB7XFxuIFxcdHN0cnVjdCB4YmNfbm9kZSAqa25vZGUsICp2bm9kZTtcXG4tXFx0Y2hhciAqZW5kID0gYnVmICsgc2l6ZTtcXG4gXFx0Y29uc3QgY2hhciAqdmFsLCAqcTtcXG4rXFx0c2l6ZV90IGxlbiA9IDA7XFxuIFxcdGludCByZXQ7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBUcmFjayB0aGUgcnVubmluZyB3cml0dGVuIGxlbmd0aCByYXRoZXIgdGhhbiBhZHZhbmNpbmcgQGJ1Ziwgc28gd2VcXG4rXFx0ICogbmV2ZXIgZm9ybSBcXFwiYnVmICsgc2l6ZVxcXCIgb3IgXFxcImJ1ZiArPSByZXRcXFwiIHdoaWxlIEBidWYgaXMgTlVMTCAodGhlXFxuK1xcdCAqIHNpemUtcHJvYmUgY2FsbCBwYXNzZXMgYnVmPU5VTEwsIHNpemU9MCkuIE5VTEwgcG9pbnRlciBhcml0aG1ldGljXFxuK1xcdCAqIGlzIHVuZGVmaW5lZCBiZWhhdmlvciBhbmQgdHJpcHMgaG9zdCBVQlNhbiAvIEZPUlRJRllfU09VUkNFIHdoZW5cXG4rXFx0ICogdGhpcyByZW5kZXJlciBydW5zIGF0IGtlcm5lbCBidWlsZCB0aW1lLiBzbnByaW50ZihOVUxMLCAwLCAuLi4pXFxuK1xcdCAqIGl0c2VsZiBpcyB3ZWxsIGRlZmluZWQgYW5kIHJldHVybnMgdGhlIHdvdWxkLWJlIGxlbmd0aC5cXG4rXFx0ICovXFxuIFxcdHhiY19ub2RlX2Zvcl9lYWNoX2tleV92YWx1ZShyb290LCBrbm9kZSwgdmFsKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEFuIGVtcHR5IG9yIHZhbHVlLW9ubHkgQHJvb3QgKGUuZy4gXFxcImtlcm5lbCB7fVxcXCIgb3JcXG4rXFx0XFx0ICogXFxcImtlcm5lbCA9IHhcXFwiLCBwb3NzaWJseSBhbG9uZ3NpZGUgXFxcImtlcm5lbC5mb28gPSBiYXJcXFwiKVxcbitcXHRcXHQgKiB5aWVsZHMgQHJvb3QgaXRzZWxmIGhlcmUuIFNraXAgaXQ6IGNvbXBvc2luZyBhIGtleSBmb3IgaXRcXG4rXFx0XFx0ICogd291bGQgZmFpbCB3aXRoIC1FSU5WQUwsIHlldCBhbnkgcmVhbCBkZXNjZW5kYW50IGtleXMgbXVzdFxcbitcXHRcXHQgKiBzdGlsbCBiZSByZW5kZXJlZC4gQW4gZW50aXJlbHkgZW1wdHkgc3VidHJlZSB0aGVuIHJlbmRlcnNcXG4rXFx0XFx0ICogbm90aGluZyBhbmQgcmV0dXJucyAwIHJhdGhlciB0aGFuIGFuIGVycm9yLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKGtub2RlID09IHJvb3QpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4gXFx0XFx0cmV0ID0geGJjX25vZGVfY29tcG9zZV9rZXlfYWZ0ZXIocm9vdCwga25vZGUsXFxuIFxcdFxcdFxcdFxcdFxcdHhiY19uYW1lYnVmLCBYQkNfS0VZTEVOX01BWCk7XFxuIFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbkBAIC00MzksMTAgKzUzNiwxMSBAQCBpbnQgX19pbml0IHhiY19zbnByaW50X2NtZGxpbmUoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgc3RydWN0IHhiY19ub2RlICpyb290KVxcbiBcXG4gXFx0XFx0dm5vZGUgPSB4YmNfbm9kZV9nZXRfY2hpbGQoa25vZGUpO1xcbiBcXHRcXHRpZiAoIXZub2RlKSB7XFxuLVxcdFxcdFxcdHJldCA9IHNucHJpbnRmKGJ1ZiwgcmVzdChidWYsIGVuZCksIFxcXCIlcyBcXFwiLCB4YmNfbmFtZWJ1Zik7XFxuK1xcdFxcdFxcdHJldCA9IHNucHJpbnRmKGJ1ZiA/IGJ1ZiArIGxlbiA6IE5VTEwsIHJlc3QobGVuLCBzaXplKSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFxcXCIlcyBcXFwiLCB4YmNfbmFtZWJ1Zik7XFxuIFxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbi1cXHRcXHRcXHRidWYgKz0gcmV0O1xcbitcXHRcXHRcXHRsZW4gKz0gcmV0O1xcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbiBcXHRcXHR4YmNfYXJyYXlfZm9yX2VhY2hfdmFsdWUodm5vZGUsIHZhbCkge1xcbkBAIC00NTIsMTUgKzU1MCwxNSBAQCBpbnQgX19pbml0IHhiY19zbnByaW50X2NtZGxpbmUoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgc3RydWN0IHhiY19ub2RlICpyb290KVxcbiBcXHRcXHRcXHQgKiB3aGl0ZXNwYWNlLlxcbiBcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0cSA9IHN0cnBicmsodmFsLCBcXFwiIFxcXFx0XFxcXHJcXFxcblxcXCIpID8gXFxcIlxcXFxcXFwiXFxcIiA6IFxcXCJcXFwiO1xcbi1cXHRcXHRcXHRyZXQgPSBzbnByaW50ZihidWYsIHJlc3QoYnVmLCBlbmQpLCBcXFwiJXM9JXMlcyVzIFxcXCIsXFxuLVxcdFxcdFxcdFxcdCAgICAgICB4YmNfbmFtZWJ1ZiwgcSwgdmFsLCBxKTtcXG4rXFx0XFx0XFx0cmV0ID0gc25wcmludGYoYnVmID8gYnVmICsgbGVuIDogTlVMTCwgcmVzdChsZW4sIHNpemUpLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcIiVzPSVzJXMlcyBcXFwiLCB4YmNfbmFtZWJ1ZiwgcSwgdmFsLCBxKTtcXG4gXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuLVxcdFxcdFxcdGJ1ZiArPSByZXQ7XFxuK1xcdFxcdFxcdGxlbiArPSByZXQ7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0cmV0dXJuIGJ1ZiAtIChlbmQgLSBzaXplKTtcXG4rXFx0cmV0dXJuIGxlbjtcXG4gfVxcbiAjdW5kZWYgcmVzdFxcbiBcXG5kaWZmIC0tZ2l0IGEvbGliL2VtYmVkZGVkLWNtZGxpbmUuUyBiL2xpYi9lbWJlZGRlZC1jbWRsaW5lLlNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iZGE4MWI0YTQyYmVhZlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9saWIvZW1iZWRkZWQtY21kbGluZS5TXFxuQEAgLTAsMCArMSwxNiBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbisvKlxcbisgKiBFbWJlZCB0aGUgYnVpbGQtdGltZS1yZW5kZXJlZCBib290Y29uZmlnIFxcXCJrZXJuZWxcXFwiIHN1YnRyZWUgYXMgYSBmbGF0XFxuKyAqIGNtZGxpbmUgc3RyaW5nLiBzZXR1cF9hcmNoKCkgcHJlcGVuZHMgdGhpcyB0byBib290X2NvbW1hbmRfbGluZSBvblxcbisgKiBhcmNoaXRlY3R1cmVzIHRoYXQgc2VsZWN0IEFSQ0hfU1VQUE9SVFNfQ01ETElORV9GUk9NX0JPT1RDT05GSUcuXFxuKyAqXFxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlc1xcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgQnJlbm8gTGVpdGFvIFxcdTAwM2NsZWl0YW9AZGViaWFuLm9yZ1xcdTAwM2VcXG4rICovXFxuK1xcdC5zZWN0aW9uIC5pbml0LnJvZGF0YS5lbWJlZF9jbWRsaW5lLCBcXFwiYVxcXCIsICVwcm9nYml0c1xcbitcXHQuZ2xvYmFsIGVtYmVkZGVkX2tlcm5lbF9jbWRsaW5lXFxuK2VtYmVkZGVkX2tlcm5lbF9jbWRsaW5lOlxcbitcXHQuaW5jYmluIFxcXCJsaWIvZW1iZWRkZWRfY21kbGluZS5iaW5cXFwiXFxuK1xcdC5ieXRlIDBcXG4rXFx0Lmdsb2JhbCBlbWJlZGRlZF9rZXJuZWxfY21kbGluZV9lbmRcXG4rZW1iZWRkZWRfa2VybmVsX2NtZGxpbmVfZW5kOlxcbmRpZmYgLS1naXQgYS90b29scy9ib290Y29uZmlnL01ha2VmaWxlIGIvdG9vbHMvYm9vdGNvbmZpZy9NYWtlZmlsZVxcbmluZGV4IDkwZWI0N2M5ZDhkZTY3Li4zY2I4MDY2ZDUxNDFiYiAxMDA2NDRcXG4tLS0gYS90b29scy9ib290Y29uZmlnL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvYm9vdGNvbmZpZy9NYWtlZmlsZVxcbkBAIC0xNSw3ICsxNSw3IEBAIG92ZXJyaWRlIENGTEFHUyArPSAtV2FsbCAtZyAtSSQoQ1VSRElSKS9pbmNsdWRlXFxuIEFMTF9UQVJHRVRTIDo9IGJvb3Rjb25maWdcXG4gQUxMX1BST0dSQU1TIDo9ICQocGF0c3Vic3QgJSwkKE9VVFBVVCklLCQoQUxMX1RBUkdFVFMpKVxcbiBcXG4tYWxsOiAkKEFMTF9QUk9HUkFNUykgdGVzdFxcbithbGw6ICQoQUxMX1BST0dSQU1TKVxcbiBcXG4gJChPVVRQVVQpYm9vdGNvbmZpZzogbWFpbi5jIGluY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oICQoTElCU1JDKVxcbiBcXHQkKENDKSAkKGZpbHRlciAlLmMsJF4pICQoQ0ZMQUdTKSAkKExERkxBR1MpIC1vICRAXFxuQEAgLTI3LDQgKzI3LDQgQEAgaW5zdGFsbDogJChBTExfUFJPR1JBTVMpXFxuIFxcdGluc3RhbGwgJChPVVRQVVQpYm9vdGNvbmZpZyAkKERFU1RESVIpJChiaW5kaXIpXFxuIFxcbiBjbGVhbjpcXG4tXFx0JChSTSkgLWYgJChPVVRQVVQpKi5vICQoQUxMX1BST0dSQU1TKVxcbitcXHRybSAtZiAkKE9VVFBVVCkqLm8gJChBTExfUFJPR1JBTVMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE2OjQzOjE2LjU2OTMwMjU0NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODE0MjI1NzkzNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBidWlsZC10aW1lIGZlYXR1cmUgdG8gcmVuZGVyIGVtYmVkZGVkIGJvb3Rjb25maWcgaW50byBhIGNtZGxpbmUgc3RyaW5nIGFuZCBwcmVwZW5kcyBpdCBkdXJpbmcgZWFybHkgYm9vdCAoYHNldHVwX2FyY2hgKS4gSXQgYWxzbyBmaXhlcyBhIGJ1ZyBpbiBgeGJjX3NucHJpbnRfY21kbGluZWAgd2hpY2ggaXMgb25seSBjYWxsZWQgZHVyaW5nIGVhcmx5IGJvb3QgKGBzZXR1cF9ib290X2NvbmZpZ2ApLiBBbGwgbW9kaWZpZWQga2VybmVsIGNvZGUgaXMgbWFya2VkIGBfX2luaXRgLCBydW5zIGV4YWN0bHkgb25jZSBkdXJpbmcgYm9vdCwgYW5kIHByb2Nlc3NlcyBzdGF0aWMgZGF0YSAoZnJvbSB0aGUga2VybmVsIGltYWdlIG9yIGluaXRyZCkuIFNpbmNlIHRoZXJlIGlzIG5vIHdheSBmb3IgYSBzeXNjYWxsIGZ1enplciB0byByZWFjaCB0aGlzIGNvZGUgb3IgbXV0YXRlIGl0cyBpbnB1dHMsIGl0IGNhbm5vdCBiZSBtZWFuaW5nZnVsbHkgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5ZGY5MjlhZWNhOWJjNTIzYWI3MDg5ZmFmYmJkNjYxMTZlZTc0M2I1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdW4gMjMgMTY6NDM6MTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Jvb3Rjb25maWcucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdFxuaW5kZXggZjcxMjc1ODQ3MmQ1YzYuLjM0OWNlZmJiMmJiY2RkIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdFxuQEAgLTIzNCw2ICsyMzQsODcgQEAgS2NvbmZpZyBvcHRpb24gc2VsZWN0ZWQuXG4gTm90ZSB0aGF0IGV2ZW4gaWYgeW91IHNldCB0aGlzIG9wdGlvbiwgeW91IGNhbiBvdmVycmlkZSB0aGUgZW1iZWRkZWRcbiBib290Y29uZmlnIGJ5IGFub3RoZXIgYm9vdGNvbmZpZyB3aGljaCBhdHRhY2hlZCB0byB0aGUgaW5pdHJkLlxuIFxuK1JlbmRlcmluZyBFbWJlZGRlZCBrZXJuZWwuKiBLZXlzIGF0IEJ1aWxkIFRpbWVcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4rXG4rQnkgZGVmYXVsdCwgdGhlIGVtYmVkZGVkIGJvb3Rjb25maWcgKGBgQ09ORklHX0JPT1RfQ09ORklHX0VNQkVEPXlgYCkgaXNcbitwYXJzZWQgYXQgcnVudGltZSwgYWZ0ZXIgYGBwYXJzZV9lYXJseV9wYXJhbSgpYGAgaGFzIGFscmVhZHkgcnVuLiBFYXJseVxuK3BhcmFtZXRlciBoYW5kbGVycyAoYGBtZW09YGAsIGBgZWFybHljb249YGAsIGBgbG9nbGV2ZWw9YGAsIC4uLikgdGhlcmVmb3JlXG4rY2Fubm90IHNlZSB2YWx1ZXMgc3VwcGxpZWQgdmlhIHRoZSBlbWJlZGRlZCBgYGtlcm5lbGBgIHN1YnRyZWUuXG4rXG4rYGBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUdgYCByZXNvbHZlcyB0aGlzIGJ5IHJlbmRlcmluZyB0aGVcbitgYGtlcm5lbGBgIHN1YnRyZWUgb2YgYGBDT05GSUdfQk9PVF9DT05GSUdfRU1CRURfRklMRWBgIGludG8gYSBmbGF0IGNtZGxpbmVcbitzdHJpbmcgYXQga2VybmVsIGJ1aWxkIHRpbWUgKHZpYSBgYHRvb2xzL2Jvb3Rjb25maWcgLUNgYCkgYW5kIHByZXBlbmRpbmdcbitpdCB0byBgYGJvb3RfY29tbWFuZF9saW5lYGAgZHVyaW5nIGVhcmx5IGFyY2hpdGVjdHVyZSBzZXR1cCwgc28gdGhlIGtleXNcbithcmUgdmlzaWJsZSB0byBgYHBhcnNlX2Vhcmx5X3BhcmFtKClgYC5cbitcbitUaGUgb3B0aW9uIHJlcXVpcmVzIGBgQ09ORklHX0JPT1RfQ09ORklHX0VNQkVEPXlgYCwgYSBub24tZW1wdHlcbitgYENPTkZJR19CT09UX0NPTkZJR19FTUJFRF9GSUxFYGAsIGFuZCBhbiBhcmNoaXRlY3R1cmUgdGhhdCBzZWxlY3RzXG4rYGBDT05GSUdfQVJDSF9TVVBQT1JUU19DTURMSU5FX0ZST01fQk9PVENPTkZJR2BgLiBDdXJyZW50bHkgb25seSB4ODZcbitzZWxlY3RzIGl0OyBvbiBvdGhlciBhcmNoaXRlY3R1cmVzIHRoZSBlbWJlZGRlZCBib290Y29uZmlnIHN0aWxsIHdvcmtzLFxuK2J1dCBvbmx5IHRocm91Z2ggdGhlIGxhdGUgcnVudGltZSBwYXJzZXIuXG4rXG4rVGhlIHNhbWUgYGBib290Y29uZmlnYGAgb3B0LWluIGFwcGxpZXMgYXMgZWxzZXdoZXJlOiB0aGUgcmVuZGVyZWQga2V5c1xuK2FyZSBwcmVwZW5kZWQgb25seSB3aGVuIGBgYm9vdGNvbmZpZ2BgIChpbiBhbnkgZm9ybSkgYXBwZWFycyBvbiB0aGVcbitrZXJuZWwgY29tbWFuZCBsaW5lLCBvciB3aGVuIGBgQ09ORklHX0JPT1RfQ09ORklHX0ZPUkNFYGAgaXMgc2V0LCB3aGljaFxuK2RlZmF1bHRzIHRvIGBgeWBgIHdoZW4gYGBDT05GSUdfQk9PVF9DT05GSUdfRU1CRURgYCBpcyBzZXQuXG4rXG4rRm9yIGV4YW1wbGUsIGdpdmVuOjpcbitcbisga2VybmVsIHtcbisgICBsb2dsZXZlbCA9IDdcbisgICBtZW0gPSA0R1xuKyB9XG4rXG4rdGhlIGtlcm5lbCBib290cyBhcyBpZiBgYGxvZ2xldmVsPTcgbWVtPTRHYGAgaGFkIGJlZW4gcHJlcGVuZGVkIHRvIHRoZVxuK2Jvb3Rsb2FkZXIgY29tbWFuZCBsaW5lLCB3aXRoIHRoZSB2YWx1ZXMgdmlzaWJsZSB0byBlYXJseS1wYXJzZWRcbitoYW5kbGVycy4gQ29tbWEtc2VwYXJhdGVkIHZhbHVlcyBhcmUgc3RpbGwgZXhwYW5kZWQgaW50byBtdWx0aXBsZVxuK2NtZGxpbmUgZW50cmllcyBwZXIgdGhlIGJvb3Rjb25maWcgYXJyYXkgY29udmVudGlvbiAtLSB0aGUgZW1iZWRkZWRcbitgYGtlcm5lbC5lYXJseWNvbiA9IFwidWFydDgyNTAsaW8sMHgzZjhcImBgIG11c3QgYmUgcXVvdGVkIHRvIGxhbmQgYXMgYVxuK3NpbmdsZSBgYGVhcmx5Y29uPWBgIGVudHJ5LCBleGFjdGx5IGFzIGZvciB0aGUgcnVudGltZSBwYXJzZXIuXG4rXG4rSWYgdGhlIHJlbmRlcmVkIHN0cmluZyB3b3VsZCBub3QgZml0IGluIGBgQ09NTUFORF9MSU5FX1NJWkVgYCB0b2dldGhlclxuK3dpdGggdGhlIGV4aXN0aW5nIGNvbW1hbmQgbGluZSwgdGhlIHByZXBlbmQgaXMgc2tpcHBlZCBhbmQgYW4gZXJyb3IgaXNcbitsb2dnZWQsIHNvIGFuIG92ZXJzaXplZCBlbWJlZGRlZCBib290Y29uZmlnIGNhbm5vdCBicmljayBhIGJvb3QuXG4rXG4rSW50ZXJhY3Rpb24gd2l0aCBvdGhlciBjb21tYW5kIGxpbmUgYW5kIGJvb3Rjb25maWcgc291cmNlc1xuK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5cbitcbitXaXRoIGBgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHPXlgYCB0aGUgcmVuZGVyZWQgYGBrZXJuZWxgYFxuK3N1YnRyZWUgYmVoYXZlcyBsaWtlIGEgYnVpbGQtdGltZSBjb21tYW5kIGxpbmUgKHNpbWlsYXIgdG9cbitgYENPTkZJR19DTURMSU5FYGApLCBub3QgbGlrZSBhIGJvb3Rjb25maWcgc291cmNlLiBJdCBpcyBwcmVwZW5kZWQgdG9cbitgYGJvb3RfY29tbWFuZF9saW5lYGAgaW4gYGBzZXR1cF9hcmNoKClgYCwgYmVmb3JlIGBgcGFyc2VfZWFybHlfcGFyYW0oKWBgXG4rYW5kIGxvbmcgYmVmb3JlIHRoZSBydW50aW1lIHBhcnNlciBsb29rcyBhdCBhbiBpbml0cmQuIE9wdGlvbnMgY2FuIHJlYWNoXG4rdGhlIGtlcm5lbCBmcm9tIHVwIHRvIGZvdXIgcGxhY2VzOlxuK1xuKy0gQm9vdGxvYWRlciBjb21tYW5kIGxpbmU6IHRoZSBhcmd1bWVudHMgdGhlIGJvb3QgbG9hZGVyIHBhc3Nlcy4gVGhlXG4rICBlbWJlZGRlZCBjbWRsaW5lIGlzIHByZXBlbmRlZCBpbiBmcm9udCBvZiB0aGVtLCBzbyBmb3IgbGFzdC1vbmUtd2luc1xuKyAgcGFyYW1ldGVycyBhIGJvb3Rsb2FkZXIgb3B0aW9uIHN0aWxsIG92ZXJyaWRlcyB0aGUgZW1iZWRkZWQgdmFsdWUuXG4rICBWaXNpYmxlIGluIC9wcm9jL2NtZGxpbmUuXG4rLSBFbWJlZGRlZCBjbWRsaW5lICh0aGlzIG9wdGlvbik6IHRoZSByZW5kZXJlZCBgYGtlcm5lbGBgIHN1YnRyZWUsXG4rICBwcmVwZW5kZWQgZWFybHkgc28gaXQgaXMgc2VlbiBieSBgYHBhcnNlX2Vhcmx5X3BhcmFtKClgYC4gVmlzaWJsZSBpblxuKyAgL3Byb2MvY21kbGluZS5cbistIEluaXRyZCBib290Y29uZmlnOiBwYXJzZWQgbGF0ZSBpbiBgYHNldHVwX2Jvb3RfY29uZmlnKClgYDsgaXRzXG4rICBgYGtlcm5lbGBgIGtleXMgYXJlIHBsYWNlZCBhaGVhZCBvZiBgYGJvb3RfY29tbWFuZF9saW5lYGAsIGkuZS4gYmVmb3JlXG4rICB0aGUgZW1iZWRkZWQgY21kbGluZSwgc28gbGFzdC13aW5zIGZhdm9ycyB0aGUgZW1iZWRkZWQgdmFsdWVzLiBBcyBhXG4rICBib290Y29uZmlnIHNvdXJjZSwgYW4gaW5pdHJkIGJvb3Rjb25maWcgc3RpbGwgcmVwbGFjZXMgdGhlIGVtYmVkZGVkXG4rICBib290Y29uZmlnLiBWaXNpYmxlIGluIC9wcm9jL2NtZGxpbmUgYW5kIC9wcm9jL2Jvb3Rjb25maWcuXG4rLSBFbWJlZGRlZCBib290Y29uZmlnIChydW50aW1lKTogcGFyc2VkIGxhdGUsIG9ubHkgd2hlbiBubyBpbml0cmRcbisgIGJvb3Rjb25maWcgaXMgcHJlc2VudC4gVmlzaWJsZSBpbiAvcHJvYy9jbWRsaW5lIGFuZCAvcHJvYy9ib290Y29uZmlnLlxuK1xuK1NvIHdpdGggdGhpcyBvcHRpb24gdGhlIGVtYmVkZGVkIGBga2VybmVsLipgYCB2YWx1ZXMgdGFrZSBwcmVjZWRlbmNlXG4rb3ZlciBhbiBpbml0cmQgYm9vdGNvbmZpZydzIGBga2VybmVsLipgYCB2YWx1ZXM6IGZvciBlYXJseSBwYXJhbWV0ZXJzXG4rdGhlIGluaXRyZCBpcyBub3QgcGFyc2VkIHlldCwgYW5kIGZvciBvcmRpbmFyeSBwYXJhbWV0ZXJzIHRoZSBlbWJlZGRlZFxuK2tleXMgbGFuZCBsYXRlciBpbiB0aGUgY29tbWFuZCBsaW5lLiBJZiB5b3UgbmVlZCBhbiBpbml0cmQgYm9vdGNvbmZpZyB0b1xuK292ZXJyaWRlIHRoZSBlbWJlZGRlZCBgYGtlcm5lbC4qYGAga2V5cywgbGVhdmUgdGhpcyBvcHRpb24gb2ZmIGFuZCByZWx5XG4rb24gdGhlIHJ1bnRpbWUgcGFyc2VyLlxuK1xuK1RoZSByZW5kZXJlZCBzdHJpbmcgaXMgcGFydCBvZiB0aGUgY29tbWFuZCBsaW5lLCBzbyBpdCBhcHBlYXJzIGluXG4rL3Byb2MvY21kbGluZS4gSXQgaXMgZGVsaWJlcmF0ZWx5IG5vdCBzaG93biBpbiAvcHJvYy9ib290Y29uZmlnOiB0aGF0XG4rZmlsZSBrZWVwcyByZXBvcnRpbmcgdGhlIHBhcnNlZCBib290Y29uZmlnIHRyZWUgLS0gdGhlIGluaXRyZCBib290Y29uZmlnXG4raWYgcHJlc2VudCwgb3RoZXJ3aXNlIHRoZSBlbWJlZGRlZCBib290Y29uZmlnIC0tIGluZGVwZW5kZW50IG9mIHdoZXRoZXJcbitidWlsZC10aW1lIGNtZGxpbmUgcmVuZGVyaW5nIGlzIGVuYWJsZWQuXG4rXG4gS2VybmVsIHBhcmFtZXRlcnMgdmlhIEJvb3QgQ29uZmlnXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggZDk1ZDNlZjc3NzczZmEuLjc1MzM0MTk3NzNjYTljIDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbisrKyBiL01BSU5UQUlORVJTXG5AQCAtOTgxMyw2ICs5ODEzLDcgQEAgRjpcdGZzL3Byb2MvYm9vdGNvbmZpZy5jXG4gRjpcdGluY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oXG4gRjpcdGxpYi9ib290Y29uZmlnLWRhdGEuU1xuIEY6XHRsaWIvYm9vdGNvbmZpZy5jXG4rRjpcdGxpYi9lbWJlZGRlZC1jbWRsaW5lLlNcbiBGOlx0dG9vbHMvYm9vdGNvbmZpZy8qXG4gRjpcdHRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy8qXG4gXG5kaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZVxuaW5kZXggZDFjNTk1ZGI1NWM5NTYuLjFmNTZhNjg5MmZlYjQwIDEwMDY0NFxuLS0tIGEvTWFrZWZpbGVcbisrKyBiL01ha2VmaWxlXG5AQCAtMTUzMSw2ICsxNTMxLDIyIEBAIHByZXBhcmU6IHRvb2xzL2JwZi9yZXNvbHZlX2J0Zmlkc1xuIGVuZGlmXG4gZW5kaWZcbiBcbisjIHRvb2xzL2Jvb3Rjb25maWcgcmVuZGVycyB0aGUgZW1iZWRkZWQgYm9vdGNvbmZpZyBpbnRvIGEgY21kbGluZSBhdCBidWlsZCB0aW1lLlxuK2lmZGVmIENPTkZJR19DTURMSU5FX0ZST01fQk9PVENPTkZJR1xuK3ByZXBhcmU6IHRvb2xzL2Jvb3Rjb25maWdcbitlbmRpZlxuK1xuKyMgdG9vbHMvYm9vdGNvbmZpZyBpcyBydW4gb24gdGhlIGJ1aWxkIGhvc3QgZHVyaW5nIHByZXBhcmUsIHNvIGZvcmNlIGEgaG9zdFxuKyMgYmluYXJ5IGhlcmU7IGl0cyBvd24gTWFrZWZpbGUga2VlcHMgJChDQykgZm9yIHN0YW5kYWxvbmUgYW5kIGNyb3NzIGJ1aWxkcy5cbisjIENST1NTX0NPTVBJTEU9IGlzIGNsZWFyZWQgc28gdG9vbHMvc2NyaXB0cy9NYWtlZmlsZS5pbmNsdWRlIGRvZXMgbm90IGluamVjdFxuKyMgdGhlIHRhcmdldCdzIC0tdGFyZ2V0PS8tLXN5c3Jvb3Q9IGZsYWdzIGludG8gdGhlIGhvc3QgY2xhbmcgaW52b2NhdGlvbiB1bmRlclxuKyMgTExWTT0xIGNyb3NzIGJ1aWxkcyAod2hpY2ggd291bGQgcHJvZHVjZSBhIHRhcmdldCBiaW5hcnkgdGhhdCBmYWlscyB0byBleGVjKS5cbit0b29scy9ib290Y29uZmlnOiBleHBvcnQgQ0MgOj0gJChIT1NUQ0MpXG4rdG9vbHMvYm9vdGNvbmZpZzogRk9SQ0VcbitcdCQoUSlta2RpciAtcCAkKG9ianRyZWUpL3Rvb2xzXG4rXHQkKFEpJChNQUtFKSBPPSQoYWJzcGF0aCAkKG9ianRyZWUpKSBzdWJkaXI9dG9vbHMgLUMgJChzcmN0cmVlKS90b29scy8gXFxcbitcdFx0Ym9vdGNvbmZpZyBDUk9TU19DT01QSUxFPVxuK1xuICMgVGhlIHRvb2xzIGJ1aWxkIHN5c3RlbSBpcyBub3QgYSBwYXJ0IG9mIEtidWlsZCBhbmQgdGVuZHMgdG8gaW50cm9kdWNlXG4gIyBpdHMgb3duIHVuaXF1ZSBpc3N1ZXMuIElmIHlvdSBuZWVkIHRvIGludGVncmF0ZSBhIG5ldyB0b29sIGludG8gS2J1aWxkLFxuICMgcGxlYXNlIGNvbnNpZGVyIGxvY2F0aW5nIHRoYXQgdG9vbCBvdXRzaWRlIHRoZSB0b29scy8gdHJlZSBhbmQgdXNpbmcgdGhlXG5AQCAtMTU1Nyw2ICsxNTczLDE1IEBAIGlmbmVxICgkKHdpbGRjYXJkICQob2JqdG9vbF9PKSksKVxuIFx0JChRKSQoTUFLRSkgLXNDICQoYWJzX3NyY3RyZWUpL3Rvb2xzL29ianRvb2wgTz0kKG9ianRvb2xfTykgc3JjdHJlZT0kKGFic19zcmN0cmVlKSAkKHBhdHN1YnN0IG9ianRvb2xfJSwlLCRAKVxuIGVuZGlmXG4gXG4rUEhPTlkgKz0gYm9vdGNvbmZpZ19jbGVhblxuK1xuK2Jvb3Rjb25maWdfTyA9ICQoYWJzcGF0aCAkKG9ianRyZWUpKS90b29scy9ib290Y29uZmlnXG4rXG4rYm9vdGNvbmZpZ19jbGVhbjpcbitpZm5lcSAoJCh3aWxkY2FyZCAkKGJvb3Rjb25maWdfTykpLClcbitcdCQoUSkkKE1BS0UpIC1zQyAkKHNyY3RyZWUpL3Rvb2xzL2Jvb3Rjb25maWcgTz0kKGJvb3Rjb25maWdfTykgY2xlYW5cbitlbmRpZlxuK1xuIHRvb2xzLzogRk9SQ0VcbiBcdCQoUSlta2RpciAtcCAkKG9ianRyZWUpL3Rvb2xzXG4gXHQkKFEpJChNQUtFKSBPPSQoYWJzcGF0aCAkKG9ianRyZWUpKSBzdWJkaXI9dG9vbHMgLUMgJChzcmN0cmVlKS90b29scy9cbkBAIC0xNzMyLDcgKzE3NTcsNyBAQCB2bWxpbnV4Y2xlYW46XG4gXHQkKFEpJChDT05GSUdfU0hFTEwpICQoc3JjdHJlZSkvc2NyaXB0cy9saW5rLXZtbGludXguc2ggY2xlYW5cbiBcdCQoUSkkKGlmICQoQVJDSF9QT1NUTElOSyksICQoTUFLRSkgLWYgJChBUkNIX1BPU1RMSU5LKSBjbGVhbilcbiBcbi1jbGVhbjogYXJjaGNsZWFuIHZtbGludXhjbGVhbiByZXNvbHZlX2J0Zmlkc19jbGVhbiBvYmp0b29sX2NsZWFuXG4rY2xlYW46IGFyY2hjbGVhbiB2bWxpbnV4Y2xlYW4gcmVzb2x2ZV9idGZpZHNfY2xlYW4gb2JqdG9vbF9jbGVhbiBib290Y29uZmlnX2NsZWFuXG4gXG4gIyBtcnByb3BlciAtIERlbGV0ZSBhbGwgZ2VuZXJhdGVkIGZpbGVzLCBpbmNsdWRpbmcgLmNvbmZpZ1xuICNcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnIGIvYXJjaC94ODYvS2NvbmZpZ1xuaW5kZXggZmE0ZjAwNzk2MTRjZDAuLmFkYmNhYWQ4MDEzMDgzIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvS2NvbmZpZ1xuKysrIGIvYXJjaC94ODYvS2NvbmZpZ1xuQEAgLTEyNyw2ICsxMjcsNyBAQCBjb25maWcgWDg2XG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19OVU1BX0JBTEFOQ0lOR1x0aWYgWDg2XzY0XG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19LTUFQX0xPQ0FMX0ZPUkNFX01BUFx0aWYgTlJfQ1BVUyBcdTAwM2M9IDQwOTZcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0NGSVx0XHRpZiBYODZfNjRcbitcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXG4gXHRzZWxlY3QgQVJDSF9VU0VTX0NGSV9UUkFQU1x0XHRpZiBYODZfNjQgXHUwMDI2XHUwMDI2IENGSVxuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTFRPX0NMQU5HXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19MVE9fQ0xBTkdfVEhJTlxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC94ODYva2VybmVsL3NldHVwLmNcbmluZGV4IDQ2ODgyY2U3OWMzYTRkLi5jOTczYTJjZWJjZDA0ZSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuY1xuQEAgLTYsNiArNiw3IEBAXG4gICogcGFydHMgb2YgZWFybHkga2VybmVsIGluaXRpYWxpemF0aW9uLlxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2FjcGkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jvb3Rjb25maWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbnNvbGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NwdS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3Jhc2hfZHVtcC5oXHUwMDNlXG5AQCAtODgxLDYgKzg4MiwzNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgeDg2X3JlcG9ydF9ueCh2b2lkKVxuICAqIE5vdGU6IE9uIHg4Nl82NCwgZml4bWFwcyBhcmUgcmVhZHkgZm9yIHVzZSBldmVuIGJlZm9yZSB0aGlzIGlzIGNhbGxlZC5cbiAgKi9cbiBcbisjaWZkZWYgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXG4rc3RhdGljIGludCBfX2luaXQgYm9vdGNvbmZpZ19vcHRpbihjaGFyICpwYXJhbSwgY2hhciAqdmFsLFxuK1x0XHRcdFx0ICAgY29uc3QgY2hhciAqdW51c2VkLCB2b2lkICphcmcpXG4re1xuK1x0aWYgKCFzdHJjbXAocGFyYW0sIFwiYm9vdGNvbmZpZ1wiKSlcbitcdFx0Kihib29sICopYXJnID0gdHJ1ZTtcbitcdHJldHVybiAwO1xuK31cbitcbisvKlxuKyAqIERpZCB0aGUgdXNlciBvcHQgaW4gdG8gYm9vdGNvbmZpZyBvbiB0aGUga2VybmVsIGNvbW1hbmQgbGluZT8gVXNlXG4rICogcGFyc2VfYXJncygpIHNvIHRoaXMgbWF0Y2hlcyBzZXR1cF9ib290X2NvbmZpZygpIGV4YWN0bHksIGluY2x1ZGluZ1xuKyAqIHN0b3BwaW5nIGF0IHRoZSBcIi0tXCIgdGhhdCBzZXBhcmF0ZXMgaW5pdCBhcmd1bWVudHMuXG4rICovXG4rc3RhdGljIGJvb2wgX19pbml0IGJvb3Rjb25maWdfY21kbGluZV9yZXF1ZXN0ZWQodm9pZClcbit7XG4rXHRzdGF0aWMgY2hhciB0bXBfY21kbGluZVtDT01NQU5EX0xJTkVfU0laRV0gX19pbml0ZGF0YTtcbitcdGJvb2wgZm91bmQgPSBmYWxzZTtcbitcbitcdGlmIChJU19FTkFCTEVEKENPTkZJR19CT09UX0NPTkZJR19GT1JDRSkpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0c3Ryc2NweSh0bXBfY21kbGluZSwgYm9vdF9jb21tYW5kX2xpbmUsIENPTU1BTkRfTElORV9TSVpFKTtcbitcdGlmIChJU19FUlIocGFyc2VfYXJncyhcImJvb3Rjb25maWdcIiwgdG1wX2NtZGxpbmUsIE5VTEwsIDAsIDAsIDAsXG4rXHRcdFx0ICAgICAgXHUwMDI2Zm91bmQsIGJvb3Rjb25maWdfb3B0aW4pKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cmV0dXJuIGZvdW5kO1xuK31cbisjZW5kaWZcbitcbiB2b2lkIF9faW5pdCBzZXR1cF9hcmNoKGNoYXIgKipjbWRsaW5lX3ApXG4ge1xuICNpZmRlZiBDT05GSUdfWDg2XzMyXG5AQCAtOTI0LDYgKzk1NiwxNyBAQCB2b2lkIF9faW5pdCBzZXR1cF9hcmNoKGNoYXIgKipjbWRsaW5lX3ApXG4gXHRidWlsdGluX2NtZGxpbmVfYWRkZWQgPSB0cnVlO1xuICNlbmRpZlxuIFxuKyNpZmRlZiBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUdcbitcdC8qXG4rXHQgKiBQcmVwZW5kIHRoZSBidWlsZC10aW1lLXJlbmRlcmVkIGVtYmVkZGVkIFwia2VybmVsXCIga2V5cyBoZXJlIHNvXG4rXHQgKiBwYXJzZV9lYXJseV9wYXJhbSgpIGJlbG93IHNlZXMgdGhlbSwgZ2F0aW5nIG9uIHRoZSBzYW1lIG9wdC1pblxuK1x0ICogYXMgdGhlIHJ1bnRpbWUgcGFyc2VyIChzZWUgYm9vdGNvbmZpZ19jbWRsaW5lX3JlcXVlc3RlZCgpKS5cbitcdCAqL1xuK1x0aWYgKGJvb3Rjb25maWdfY21kbGluZV9yZXF1ZXN0ZWQoKSlcbitcdFx0eGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZShib290X2NvbW1hbmRfbGluZSxcbitcdFx0XHRcdFx0ICAgICBDT01NQU5EX0xJTkVfU0laRSk7XG4rI2VuZGlmXG4rXG4gXHRzdHJzY3B5KGNvbW1hbmRfbGluZSwgYm9vdF9jb21tYW5kX2xpbmUsIENPTU1BTkRfTElORV9TSVpFKTtcbiBcdCpjbWRsaW5lX3AgPSBjb21tYW5kX2xpbmU7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmggYi9pbmNsdWRlL2xpbnV4L2Jvb3Rjb25maWcuaFxuaW5kZXggMWM3ZjNiNzRmZmNmMzguLjQzMzI0YjQ3N2YxM2FiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oXG5AQCAtMzA4LDQgKzMwOCwxMyBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKnhiY19nZXRfZW1iZWRkZWRfYm9vdGNvbmZpZyhzaXplX3QgKnNpemUpXG4gfVxuICNlbmRpZlxuIFxuKy8qIEJ1aWxkLXRpbWUtcmVuZGVyZWQgYm9vdGNvbmZpZyBjbWRsaW5lIHByZXBlbmRlZCBpbiBzZXR1cF9hcmNoKCkgKi9cbisjaWZkZWYgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXG4rdm9pZCBfX2luaXQgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZShjaGFyICpkc3QsIHNpemVfdCBzaXplKTtcbitib29sIF9faW5pdCB4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkKHZvaWQpO1xuKyNlbHNlXG4rc3RhdGljIGlubGluZSB2b2lkIHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSkgeyB9XG4rc3RhdGljIGlubGluZSBib29sIHhiY19lbWJlZGRlZF9jbWRsaW5lX2FwcGxpZWQodm9pZCkgeyByZXR1cm4gZmFsc2U7IH1cbisjZW5kaWZcbitcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9pbml0L0tjb25maWcgYi9pbml0L0tjb25maWdcbmluZGV4IDQ0MDNlNTM4NzZlMTA3Li4xY2Y2Y2Y2Mjk4YzRlZSAxMDA2NDRcbi0tLSBhL2luaXQvS2NvbmZpZ1xuKysrIGIvaW5pdC9LY29uZmlnXG5AQCAtMTU2Niw2ICsxNTY2LDQyIEBAIGNvbmZpZyBCT09UX0NPTkZJR19FTUJFRF9GSUxFXG4gXHQgIFRoaXMgYm9vdGNvbmZpZyB3aWxsIGJlIHVzZWQgaWYgdGhlcmUgaXMgbm8gaW5pdHJkIG9yIG5vIG90aGVyXG4gXHQgIGJvb3Rjb25maWcgaW4gdGhlIGluaXRyZC5cbiBcbitjb25maWcgQVJDSF9TVVBQT1JUU19DTURMSU5FX0ZST01fQk9PVENPTkZJR1xuK1x0Ym9vbFxuK1x0aGVscFxuK1x0ICBTaWxlbnQgc3ltYm9sOyBubyBDIGNvZGUgcmVhZHMgaXQgZGlyZWN0bHkuIEFyY2hpdGVjdHVyZXNcbitcdCAgc2VsZWN0IGl0IG9uY2UgdGhlaXIgc2V0dXBfYXJjaCgpIGNhbGxzXG4rXHQgIHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoKSBiZWZvcmUgcGFyc2VfZWFybHlfcGFyYW0oKS5cbitcdCAgSXRzIG9ubHkgcm9sZSBpcyB0byBnYXRlIHRoZSB1c2VyLXZpc2libGVcbitcdCAgQ01ETElORV9GUk9NX0JPT1RDT05GSUcgb3B0aW9uIHBlci1hcmNoLCB0aGUgc2FtZVxuK1x0ICBBUkNIX1NVUFBPUlRTXyogaWRpb20gdXNlZCBieSBBUkNIX1NVUFBPUlRTX0NGSSwgZXRjLlxuK1xuK2NvbmZpZyBDTURMSU5FX0ZST01fQk9PVENPTkZJR1xuK1x0Ym9vbCBcIlJlbmRlciBlbWJlZGRlZCBib290Y29uZmlnIGFzIGtlcm5lbCBjbWRsaW5lIGF0IGJ1aWxkIHRpbWVcIlxuK1x0ZGVwZW5kcyBvbiBCT09UX0NPTkZJR19FTUJFRF9GSUxFICE9IFwiXCJcbitcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19DTURMSU5FX0ZST01fQk9PVENPTkZJR1xuK1x0ZGVwZW5kcyBvbiBDTURMSU5FID0gXCJcIlxuK1x0ZGVmYXVsdCBuXG4rXHRoZWxwXG4rXHQgIFJlbmRlciB0aGUgXCJrZXJuZWxcIiBzdWJ0cmVlIG9mIHRoZSBlbWJlZGRlZCBib290Y29uZmlnIGZpbGUgaW50byBhXG4rXHQgIGZsYXQgY21kbGluZSBzdHJpbmcgYXQga2VybmVsIGJ1aWxkIHRpbWUgYW5kIHByZXBlbmQgaXQgdG9cbitcdCAgYm9vdF9jb21tYW5kX2xpbmUgZHVyaW5nIGVhcmx5IGFyY2hpdGVjdHVyZSBzZXR1cC4gVGhpcyBtYWtlc1xuK1x0ICBlYXJseV9wYXJhbSgpIGhhbmRsZXJzIChlLmcuIG1lbT0sIGVhcmx5Y29uPSwgbG9nbGV2ZWw9KSBzZWUgdGhlXG4rXHQgIHZhbHVlcyBzdXBwbGllZCB2aWEgdGhlIGVtYmVkZGVkIGJvb3Rjb25maWcuXG4rXG4rXHQgIFRoZSBydW50aW1lIGJvb3Rjb25maWcgcGFyc2VyIGlzIHVuYWZmZWN0ZWQsIHNvIHRyZWUtc3RydWN0dXJlZFxuK1x0ICBjb25zdW1lcnMgc3VjaCBhcyBmdHJhY2UgYm9vdC10aW1lIHRyYWNpbmcga2VlcCB3b3JraW5nLlxuK1xuK1x0ICBOb3RlOiB3aGVuIGFuIGluaXRyZCBhbHNvIGNhcnJpZXMgYSBib290Y29uZmlnLCBpdHMgXCJrZXJuZWxcIlxuK1x0ICBzdWJ0cmVlIGlzIHN0aWxsIHBhcnNlZCBhdCBydW50aW1lLCBidXQgdGhlIGVtYmVkZGVkIFwia2VybmVsXCJcbitcdCAga2V5cyByZW1haW4gaW4gYm9vdF9jb21tYW5kX2xpbmUgZm9yIHBhcnNlX2Vhcmx5X3BhcmFtKCkgYW5kXG4rXHQgIGVuZCB1cCBsYXRlciB0aGFuIHRoZSBpbml0cmQga2V5cyBpbiBzYXZlZF9jb21tYW5kX2xpbmUsIHNvXG4rXHQgIHBhcnNlX2FyZ3MoKSBsYXN0LXdpbnMgZmF2b3JzIHRoZSBlbWJlZGRlZCB2YWx1ZXMuIElmIHlvdSBuZWVkXG4rXHQgIGluaXRyZCB0byBvdmVycmlkZSBlbWJlZGRlZCBrZXJuZWwuKiBrZXlzLCBsZWF2ZSB0aGlzIG9wdGlvblxuK1x0ICBvZmYuXG4rXG4rXHQgIElmIHVuc3VyZSwgc2F5IE4uXG4rXG4gY29uZmlnIENNRExJTkVfTE9HX1dSQVBfSURFQUxfTEVOXG4gXHRpbnQgXCJMZW5ndGggdG8gdHJ5IHRvIHdyYXAgdGhlIGNtZGxpbmUgd2hlbiBsb2dnZWQgYXQgYm9vdFwiXG4gXHRkZWZhdWx0IDEwMjFcbmRpZmYgLS1naXQgYS9pbml0L21haW4uYyBiL2luaXQvbWFpbi5jXG5pbmRleCBlMzYzMjMyYjQyOGI0Ny4uMjYwYmQ1MjQyZjk0ZTggMTAwNjQ0XG4tLS0gYS9pbml0L21haW4uY1xuKysrIGIvaW5pdC9tYWluLmNcbkBAIC0zNzgsMTIgKzM3OCwxNSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfYm9vdF9jb25maWcodm9pZClcbiBcdGludCBwb3MsIHJldDtcbiBcdHNpemVfdCBzaXplO1xuIFx0Y2hhciAqZXJyO1xuK1x0Ym9vbCBmcm9tX2VtYmVkZGVkID0gZmFsc2U7XG4gXG4gXHQvKiBDdXQgb3V0IHRoZSBib290Y29uZmlnIGRhdGEgZXZlbiBpZiB3ZSBoYXZlIG5vIGJvb3Rjb25maWcgb3B0aW9uICovXG4gXHRkYXRhID0gZ2V0X2Jvb3RfY29uZmlnX2Zyb21faW5pdHJkKFx1MDAyNnNpemUpO1xuIFx0LyogSWYgdGhlcmUgaXMgbm8gYm9vdGNvbmZpZyBpbiBpbml0cmQsIHRyeSBlbWJlZGRlZCBvbmUuICovXG4tXHRpZiAoIWRhdGEpXG4rXHRpZiAoIWRhdGEpIHtcbiBcdFx0ZGF0YSA9IHhiY19nZXRfZW1iZWRkZWRfYm9vdGNvbmZpZyhcdTAwMjZzaXplKTtcbitcdFx0ZnJvbV9lbWJlZGRlZCA9IHRydWU7XG4rXHR9XG4gXG4gXHRzdHJzY3B5KHRtcF9jbWRsaW5lLCBib290X2NvbW1hbmRfbGluZSwgQ09NTUFORF9MSU5FX1NJWkUpO1xuIFx0ZXJyID0gcGFyc2VfYXJncyhcImJvb3Rjb25maWdcIiwgdG1wX2NtZGxpbmUsIE5VTEwsIDAsIDAsIDAsIE5VTEwsXG5AQCAtNDIxLDggKzQyNCwyNCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfYm9vdF9jb25maWcodm9pZClcbiBcdH0gZWxzZSB7XG4gXHRcdHhiY19nZXRfaW5mbyhcdTAwMjZyZXQsIE5VTEwpO1xuIFx0XHRwcl9pbmZvKFwiTG9hZCBib290Y29uZmlnOiAlbGQgYnl0ZXMgJWQgbm9kZXNcXG5cIiwgKGxvbmcpc2l6ZSwgcmV0KTtcbi1cdFx0Lyoga2V5cyBzdGFydGluZyB3aXRoIFwia2VybmVsLlwiIGFyZSBwYXNzZWQgdmlhIGNtZGxpbmUgKi9cbi1cdFx0ZXh0cmFfY29tbWFuZF9saW5lID0geGJjX21ha2VfY21kbGluZShcImtlcm5lbFwiKTtcbitcdFx0LypcbitcdFx0ICoga2V5cyBzdGFydGluZyB3aXRoIFwia2VybmVsLlwiIGFyZSBwYXNzZWQgdmlhIGNtZGxpbmUuIFdoZW5cbitcdFx0ICogdGhpcyBib290Y29uZmlnIGNhbWUgZnJvbSB0aGUgZW1iZWRkZWQgc291cmNlIGFuZFxuK1x0XHQgKiBzZXR1cF9hcmNoKCkgYWxyZWFkeSBwcmVwZW5kZWQgdGhlIHJlbmRlcmVkIFwia2VybmVsXCIgc3VidHJlZVxuK1x0XHQgKiB0byBib290X2NvbW1hbmRfbGluZSwgcmVuZGVyaW5nIGFnYWluIGhlcmUgd291bGQgZHVwbGljYXRlXG4rXHRcdCAqIHRoZSBrZXlzIGluIHNhdmVkX2NvbW1hbmRfbGluZSBhbmQgbWFrZSBhY2N1bXVsYXRpbmcgaGFuZGxlcnNcbitcdFx0ICogKGNvbnNvbGU9LCBlYXJseWNvbj0sIC4uLikgcmUtcmVnaXN0ZXIgdGhlIHNhbWUgdmFsdWUuIFNraXBcbitcdFx0ICogb25seSB3aGVuIHRoZSBwcmVwZW5kIHJlYWxseSBoYXBwZW5lZC5cbitcdFx0ICpcbitcdFx0ICogT24gYXJjaGVzIHRoYXQgZG8gbm90IHNlbGVjdCBBUkNIX1NVUFBPUlRTX0NNRExJTkVfRlJPTV9CT09UQ09ORklHLFxuK1x0XHQgKiBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUcgaXMgdW5zZWxlY3RhYmxlIGFuZFxuK1x0XHQgKiB4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkKCkgY29sbGFwc2VzIHRvIGEgc3R1YiByZXR1cm5pbmdcbitcdFx0ICogZmFsc2UsIHNvIHRoaXMgcGF0aCBzdGlsbCBydW5zIGFuZCB0aGUgZW1iZWRkZWQgXCJrZXJuZWxcIlxuK1x0XHQgKiBrZXlzIHJlYWNoIHRoZSBjbWRsaW5lIHZpYSB0aGUgcnVudGltZSBwYXJzZXIgZXhhY3RseSBhc1xuK1x0XHQgKiBiZWZvcmUgdGhpcyBzZXJpZXMuXG4rXHRcdCAqL1xuK1x0XHRpZiAoIWZyb21fZW1iZWRkZWQgfHwgIXhiY19lbWJlZGRlZF9jbWRsaW5lX2FwcGxpZWQoKSlcbitcdFx0XHRleHRyYV9jb21tYW5kX2xpbmUgPSB4YmNfbWFrZV9jbWRsaW5lKFwia2VybmVsXCIpO1xuIFx0XHQvKiBBbHNvLCBcImluaXQuXCIga2V5cyBhcmUgaW5pdCBhcmd1bWVudHMgKi9cbiBcdFx0ZXh0cmFfaW5pdF9hcmdzID0geGJjX21ha2VfY21kbGluZShcImluaXRcIik7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlIGIvbGliL01ha2VmaWxlXG5pbmRleCAyM2UwN2QxOWQwMWM5MC4uNGY5N2E1NGQxZTNkOWEgMTAwNjQ0XG4tLS0gYS9saWIvTWFrZWZpbGVcbisrKyBiL2xpYi9NYWtlZmlsZVxuQEAgLTI3NCw2ICsyNzQsMjIgQEAgZmlsZWNoa19kZWZiY29uZiA9IGNhdCAkKG9yICQocmVhbC1wcmVyZXFzKSwgL2Rldi9udWxsKVxuICQob2JqKS9kZWZhdWx0LmJjb25mOiAkKENPTkZJR19CT09UX0NPTkZJR19FTUJFRF9GSUxFKSBGT1JDRVxuIFx0JChjYWxsIGZpbGVjaGssZGVmYmNvbmYpXG4gXG4rb2JqLSQoQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHKSArPSBlbWJlZGRlZC1jbWRsaW5lLm9cbiskKG9iaikvZW1iZWRkZWQtY21kbGluZS5vOiAkKG9iaikvZW1iZWRkZWRfY21kbGluZS5iaW5cbitcbisjIFJlbmRlciB0aGUgYm9vdGNvbmZpZyBcImtlcm5lbFwiIHN1YnRyZWUgdG8gYSBmbGF0IGNtZGxpbmUgc3RyaW5nIHVzaW5nXG4rIyB0aGUgdXNlcnNwYWNlIHRvb2xzL2Jvb3Rjb25maWcgcGFyc2VyICgtQyBtb2RlKS4gVGhlIHJ1bnRpbWUgcHJlcGVuZFxuKyMgaGVscGVyIGVuZm9yY2VzIENPTU1BTkRfTElORV9TSVpFIGF0IGJvb3QsIHNvIG5vIGJ1aWxkLXRpbWUgc2l6ZVxuKyMgY2hlY2sgaXMgcGVyZm9ybWVkIGhlcmUgKENPTU1BTkRfTElORV9TSVpFIGlzIGFuIGFyY2ggaGVhZGVyXG4rIyBjb25zdGFudCwgbm90IGEgS2NvbmZpZyB2YWx1ZSkuXG4rcXVpZXRfY21kX3JlbmRlcl9jbWRsaW5lID0gQkNPTkYyQyAkQFxuKyAgICAgIGNtZF9yZW5kZXJfY21kbGluZSA9IFxcXG4rXHQkKG9ianRyZWUpL3Rvb2xzL2Jvb3Rjb25maWcvYm9vdGNvbmZpZyAtQyAkXHUwMDNjIFx1MDAzZSAkQFxuK1xuK3RhcmdldHMgKz0gZW1iZWRkZWRfY21kbGluZS5iaW5cbiskKG9iaikvZW1iZWRkZWRfY21kbGluZS5iaW46ICQob2JqKS9kZWZhdWx0LmJjb25mICQob2JqdHJlZSkvdG9vbHMvYm9vdGNvbmZpZy9ib290Y29uZmlnIEZPUkNFXG4rXHQkKGNhbGwgaWZfY2hhbmdlZCxyZW5kZXJfY21kbGluZSlcbitcbiBvYmotJChDT05GSUdfUkJUUkVFX1RFU1QpICs9IHJidHJlZV90ZXN0Lm9cbiBvYmotJChDT05GSUdfSU5URVJWQUxfVFJFRV9URVNUKSArPSBpbnRlcnZhbF90cmVlX3Rlc3Qub1xuIFxuZGlmZiAtLWdpdCBhL2xpYi9ib290Y29uZmlnLmMgYi9saWIvYm9vdGNvbmZpZy5jXG5pbmRleCBmNDQ1Yjc3MDNmZGQ5Ni4uMDVjYjFlYTlhZmRhZTMgMTAwNjQ0XG4tLS0gYS9saWIvYm9vdGNvbmZpZy5jXG4rKysgYi9saWIvYm9vdGNvbmZpZy5jXG5AQCAtMTksNiArMTksNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vycm5vLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jYWNoZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGlsZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3ByaW50ay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3ByaW50Zi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtYmxvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZy5oXHUwMDNlXG5AQCAtMzQsNiArMzUsODMgQEAgY29uc3QgY2hhciAqIF9faW5pdCB4YmNfZ2V0X2VtYmVkZGVkX2Jvb3Rjb25maWcoc2l6ZV90ICpzaXplKVxuIFx0cmV0dXJuICgqc2l6ZSkgPyBlbWJlZGRlZF9ib290Y29uZmlnX2RhdGEgOiBOVUxMO1xuIH1cbiAjZW5kaWZcbitcbisjaWZkZWYgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXG4rLyogZW1iZWRkZWRfa2VybmVsX2NtZGxpbmUgaXMgZGVmaW5lZCBpbiBlbWJlZGRlZC1jbWRsaW5lLlMgKi9cbitleHRlcm4gX192aXNpYmxlIGNvbnN0IGNoYXIgZW1iZWRkZWRfa2VybmVsX2NtZGxpbmVbXTtcbitleHRlcm4gX192aXNpYmxlIGNvbnN0IGNoYXIgZW1iZWRkZWRfa2VybmVsX2NtZGxpbmVfZW5kW107XG4rXG4rLyogU2V0IG9uY2UgdGhlIGVtYmVkZGVkIGNtZGxpbmUgaGFzIGFjdHVhbGx5IGJlZW4gcHJlcGVuZGVkLiAqL1xuK3N0YXRpYyBib29sIHhiY19jbWRsaW5lX2FwcGxpZWQgX19pbml0ZGF0YTtcbitcbisvKlxuKyAqIHN0cl9wcmVwZW5kKCkgLSBQcmVwZW5kIEBzcmMgaW4gZnJvbnQgb2YgdGhlIHN0cmluZyBpbiBAZHN0LCBpbiBwbGFjZVxuKyAqIEBkc3Q6IE5VTC10ZXJtaW5hdGVkIGRlc3RpbmF0aW9uIGJ1ZmZlciwgY3VycmVudGx5IEBkc3RfbGVuIGJ5dGVzIGxvbmdcbisgKiBAZHN0X2xlbjogbGVuZ3RoIG9mIHRoZSBjdXJyZW50IEBkc3Qgc3RyaW5nIChleGNsdWRpbmcgaXRzIE5VTClcbisgKiBAc3JjOiBieXRlcyB0byBwcmVwZW5kIChub3QgTlVMLXRlcm1pbmF0ZWQpXG4rICogQHNyY19sZW46IG51bWJlciBvZiBieXRlcyBmcm9tIEBzcmMgdG8gcHJlcGVuZFxuKyAqXG4rICogVGhlIGNhbGxlciBtdXN0IGd1YXJhbnRlZSBAZHN0IGhhcyByb29tIGZvciBzcmNfbGVuICsgZHN0X2xlbiArIDEgYnl0ZXMuXG4rICogTW92aW5nIGRzdF9sZW4gKyAxIGJ5dGVzIGNhcnJpZXMgQGRzdCdzIE5VTCB0ZXJtaW5hdG9yIHRvbywgc28gYW4gZW1wdHlcbisgKiBAZHN0IG5lZWRzIG5vIHNwZWNpYWwgY2FzZS5cbisgKi9cbitzdGF0aWMgdm9pZCBfX2luaXQgc3RyX3ByZXBlbmQoY2hhciAqZHN0LCBzaXplX3QgZHN0X2xlbixcbitcdFx0XHQgICAgICAgY29uc3QgY2hhciAqc3JjLCBzaXplX3Qgc3JjX2xlbilcbit7XG4rXHRtZW1tb3ZlKGRzdCArIHNyY19sZW4sIGRzdCwgZHN0X2xlbiArIDEpO1xuK1x0bWVtY3B5KGRzdCwgc3JjLCBzcmNfbGVuKTtcbit9XG4rXG4rLyoqXG4rICogeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZSgpIC0gUHJlcGVuZCBlbWJlZGRlZCBib290Y29uZmlnIGNtZGxpbmVcbisgKiBAZHN0OiBjbWRsaW5lIGJ1ZmZlciB0byBwcmVwZW5kIGludG8gKG11c3QgYWxyZWFkeSBjb250YWluIGEgTlVMIGJ5dGUpXG4rICogQHNpemU6IHRvdGFsIGNhcGFjaXR5IG9mIEBkc3QgaW4gYnl0ZXNcbisgKlxuKyAqIFByZXBlbmQgdGhlIGJ1aWxkLXRpbWUtcmVuZGVyZWQgXCJrZXJuZWxcIiBzdWJ0cmVlIG9mIHRoZSBlbWJlZGRlZFxuKyAqIGJvb3Rjb25maWcgdG8gQGRzdC4gVGhlIHJlbmRlcmVkIHN0cmluZyBhbHJlYWR5IGVuZHMgd2l0aCBhIHNpbmdsZVxuKyAqIHNwYWNlICh0aGUgeGJjX3NucHJpbnRfY21kbGluZSgpIGludmFyaWFudCksIHdoaWNoIHNlcnZlcyBhcyB0aGVcbisgKiBzZXBhcmF0b3IgYmV0d2VlbiB0aGUgZW1iZWRkZWQga2V5cyBhbmQgYW55IGV4aXN0aW5nIGNvbnRlbnQgb2YgQGRzdC5cbisgKiBPbiBvdmVyZmxvdywgbG9nIGFuIGVycm9yIGFuZCBsZWF2ZSBAZHN0IHVudG91Y2hlZCByYXRoZXIgdGhhblxuKyAqIHNpbGVudGx5IHRydW5jYXRpbmc6IGJvb3Rpbmcgd2l0aG91dCB0aGUgZW1iZWRkZWQgdmFsdWVzIGlzIGJldHRlclxuKyAqIHRoYW4gcmVmdXNpbmcgdG8gYm9vdCwgYW5kIHRoZSBlcnJvciBtZXNzYWdlIHRlbGxzIHRoZSB1c2VyIHdoeVxuKyAqIHRoZWlyIGVtYmVkZGVkIGtleXMgYXJlIG1pc3NpbmcuXG4rICpcbisgKiBJbnRlbmRlZCB0byBiZSBjYWxsZWQgZnJvbSBzZXR1cF9hcmNoKCkgYmVmb3JlIHBhcnNlX2Vhcmx5X3BhcmFtKCkgc29cbisgKiB0aGF0IGVhcmx5X3BhcmFtKCkgaGFuZGxlcnMgc2VlIHRoZSBlbWJlZGRlZCB2YWx1ZXMuXG4rICovXG4rdm9pZCBfX2luaXQgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZShjaGFyICpkc3QsIHNpemVfdCBzaXplKVxuK3tcbitcdHNpemVfdCBlbWJlZF9sZW4gPSBlbWJlZGRlZF9rZXJuZWxfY21kbGluZV9lbmQgLSBlbWJlZGRlZF9rZXJuZWxfY21kbGluZTtcbitcdHNpemVfdCBkc3RfbGVuO1xuK1xuK1x0aWYgKCFzaXplIHx8IGVtYmVkX2xlbiBcdTAwM2M9IDEpXHQvKiB0cmFpbGluZyBOVUwgb25seSAqL1xuK1x0XHRyZXR1cm47XG4rXHRlbWJlZF9sZW4tLTtcdFx0XHQvKiBleGNsdWRlIHRyYWlsaW5nIE5VTCBieXRlICovXG4rXG4rXHRkc3RfbGVuID0gc3Rybmxlbihkc3QsIHNpemUpO1xuK1x0aWYgKGVtYmVkX2xlbiArIGRzdF9sZW4gKyAxIFx1MDAzZSBzaXplKSB7XG4rXHRcdHByX2VycihcImVtYmVkZGVkIGJvb3Rjb25maWcgY21kbGluZSAoJXp1IGJ5dGVzKSBkb2VzIG5vdCBmaXQgaW4gQ09NTUFORF9MSU5FX1NJWkUgd2l0aCAlenUgYnl0ZXMgYWxyZWFkeSB1c2VkOyBpZ25vcmluZyBlbWJlZGRlZCB2YWx1ZXNcXG5cIixcbitcdFx0ICAgICAgIGVtYmVkX2xlbiwgZHN0X2xlbik7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHN0cl9wcmVwZW5kKGRzdCwgZHN0X2xlbiwgZW1iZWRkZWRfa2VybmVsX2NtZGxpbmUsIGVtYmVkX2xlbik7XG4rXHR4YmNfY21kbGluZV9hcHBsaWVkID0gdHJ1ZTtcbit9XG4rXG4rLyoqXG4rICogeGJjX2VtYmVkZGVkX2NtZGxpbmVfYXBwbGllZCgpIC0gRGlkIHRoZSBlbWJlZGRlZCBjbWRsaW5lIGdldCBwcmVwZW5kZWQ/XG4rICpcbisgKiBSZXR1cm4gdHJ1ZSBpZiB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lKCkgYWN0dWFsbHkgcHJlcGVuZGVkIHRoZVxuKyAqIGVtYmVkZGVkIFwia2VybmVsXCIgc3VidHJlZS4gc2V0dXBfYm9vdF9jb25maWcoKSB1c2VzIHRoaXMgdG8gYXZvaWRcbisgKiByZW5kZXJpbmcgdGhlIHNhbWUga2V5cyBhIHNlY29uZCB0aW1lLlxuKyAqL1xuK2Jvb2wgX19pbml0IHhiY19lbWJlZGRlZF9jbWRsaW5lX2FwcGxpZWQodm9pZClcbit7XG4rXHRyZXR1cm4geGJjX2NtZGxpbmVfYXBwbGllZDtcbit9XG4rI2VuZGlmXG4rXG4gI2VuZGlmXG4gXG4gLypcbkBAIC00MjcsMTEgKzUwNSwzMCBAQCBzdGF0aWMgY2hhciB4YmNfbmFtZWJ1ZltYQkNfS0VZTEVOX01BWF0gX19pbml0ZGF0YTtcbiBpbnQgX19pbml0IHhiY19zbnByaW50X2NtZGxpbmUoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgc3RydWN0IHhiY19ub2RlICpyb290KVxuIHtcbiBcdHN0cnVjdCB4YmNfbm9kZSAqa25vZGUsICp2bm9kZTtcbi1cdGNoYXIgKmVuZCA9IGJ1ZiArIHNpemU7XG4gXHRjb25zdCBjaGFyICp2YWwsICpxO1xuK1x0c2l6ZV90IGxlbiA9IDA7XG4gXHRpbnQgcmV0O1xuIFxuK1x0LypcbitcdCAqIFRyYWNrIHRoZSBydW5uaW5nIHdyaXR0ZW4gbGVuZ3RoIHJhdGhlciB0aGFuIGFkdmFuY2luZyBAYnVmLCBzbyB3ZVxuK1x0ICogbmV2ZXIgZm9ybSBcImJ1ZiArIHNpemVcIiBvciBcImJ1ZiArPSByZXRcIiB3aGlsZSBAYnVmIGlzIE5VTEwgKHRoZVxuK1x0ICogc2l6ZS1wcm9iZSBjYWxsIHBhc3NlcyBidWY9TlVMTCwgc2l6ZT0wKS4gTlVMTCBwb2ludGVyIGFyaXRobWV0aWNcbitcdCAqIGlzIHVuZGVmaW5lZCBiZWhhdmlvciBhbmQgdHJpcHMgaG9zdCBVQlNhbiAvIEZPUlRJRllfU09VUkNFIHdoZW5cbitcdCAqIHRoaXMgcmVuZGVyZXIgcnVucyBhdCBrZXJuZWwgYnVpbGQgdGltZS4gc25wcmludGYoTlVMTCwgMCwgLi4uKVxuK1x0ICogaXRzZWxmIGlzIHdlbGwgZGVmaW5lZCBhbmQgcmV0dXJucyB0aGUgd291bGQtYmUgbGVuZ3RoLlxuK1x0ICovXG4gXHR4YmNfbm9kZV9mb3JfZWFjaF9rZXlfdmFsdWUocm9vdCwga25vZGUsIHZhbCkge1xuK1x0XHQvKlxuK1x0XHQgKiBBbiBlbXB0eSBvciB2YWx1ZS1vbmx5IEByb290IChlLmcuIFwia2VybmVsIHt9XCIgb3JcbitcdFx0ICogXCJrZXJuZWwgPSB4XCIsIHBvc3NpYmx5IGFsb25nc2lkZSBcImtlcm5lbC5mb28gPSBiYXJcIilcbitcdFx0ICogeWllbGRzIEByb290IGl0c2VsZiBoZXJlLiBTa2lwIGl0OiBjb21wb3NpbmcgYSBrZXkgZm9yIGl0XG4rXHRcdCAqIHdvdWxkIGZhaWwgd2l0aCAtRUlOVkFMLCB5ZXQgYW55IHJlYWwgZGVzY2VuZGFudCBrZXlzIG11c3RcbitcdFx0ICogc3RpbGwgYmUgcmVuZGVyZWQuIEFuIGVudGlyZWx5IGVtcHR5IHN1YnRyZWUgdGhlbiByZW5kZXJzXG4rXHRcdCAqIG5vdGhpbmcgYW5kIHJldHVybnMgMCByYXRoZXIgdGhhbiBhbiBlcnJvci5cbitcdFx0ICovXG4rXHRcdGlmIChrbm9kZSA9PSByb290KVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuIFx0XHRyZXQgPSB4YmNfbm9kZV9jb21wb3NlX2tleV9hZnRlcihyb290LCBrbm9kZSxcbiBcdFx0XHRcdFx0eGJjX25hbWVidWYsIFhCQ19LRVlMRU5fTUFYKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbkBAIC00MzksMTAgKzUzNiwxMSBAQCBpbnQgX19pbml0IHhiY19zbnByaW50X2NtZGxpbmUoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgc3RydWN0IHhiY19ub2RlICpyb290KVxuIFxuIFx0XHR2bm9kZSA9IHhiY19ub2RlX2dldF9jaGlsZChrbm9kZSk7XG4gXHRcdGlmICghdm5vZGUpIHtcbi1cdFx0XHRyZXQgPSBzbnByaW50ZihidWYsIHJlc3QoYnVmLCBlbmQpLCBcIiVzIFwiLCB4YmNfbmFtZWJ1Zik7XG4rXHRcdFx0cmV0ID0gc25wcmludGYoYnVmID8gYnVmICsgbGVuIDogTlVMTCwgcmVzdChsZW4sIHNpemUpLFxuK1x0XHRcdFx0ICAgICAgIFwiJXMgXCIsIHhiY19uYW1lYnVmKTtcbiBcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdFx0cmV0dXJuIHJldDtcbi1cdFx0XHRidWYgKz0gcmV0O1xuK1x0XHRcdGxlbiArPSByZXQ7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcdFx0eGJjX2FycmF5X2Zvcl9lYWNoX3ZhbHVlKHZub2RlLCB2YWwpIHtcbkBAIC00NTIsMTUgKzU1MCwxNSBAQCBpbnQgX19pbml0IHhiY19zbnByaW50X2NtZGxpbmUoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgc3RydWN0IHhiY19ub2RlICpyb290KVxuIFx0XHRcdCAqIHdoaXRlc3BhY2UuXG4gXHRcdFx0ICovXG4gXHRcdFx0cSA9IHN0cnBicmsodmFsLCBcIiBcXHRcXHJcXG5cIikgPyBcIlxcXCJcIiA6IFwiXCI7XG4tXHRcdFx0cmV0ID0gc25wcmludGYoYnVmLCByZXN0KGJ1ZiwgZW5kKSwgXCIlcz0lcyVzJXMgXCIsXG4tXHRcdFx0XHQgICAgICAgeGJjX25hbWVidWYsIHEsIHZhbCwgcSk7XG4rXHRcdFx0cmV0ID0gc25wcmludGYoYnVmID8gYnVmICsgbGVuIDogTlVMTCwgcmVzdChsZW4sIHNpemUpLFxuK1x0XHRcdFx0ICAgICAgIFwiJXM9JXMlcyVzIFwiLCB4YmNfbmFtZWJ1ZiwgcSwgdmFsLCBxKTtcbiBcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdFx0cmV0dXJuIHJldDtcbi1cdFx0XHRidWYgKz0gcmV0O1xuK1x0XHRcdGxlbiArPSByZXQ7XG4gXHRcdH1cbiBcdH1cbiBcbi1cdHJldHVybiBidWYgLSAoZW5kIC0gc2l6ZSk7XG4rXHRyZXR1cm4gbGVuO1xuIH1cbiAjdW5kZWYgcmVzdFxuIFxuZGlmZiAtLWdpdCBhL2xpYi9lbWJlZGRlZC1jbWRsaW5lLlMgYi9saWIvZW1iZWRkZWQtY21kbGluZS5TXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmJkYTgxYjRhNDJiZWFmXG4tLS0gL2Rldi9udWxsXG4rKysgYi9saWIvZW1iZWRkZWQtY21kbGluZS5TXG5AQCAtMCwwICsxLDE2IEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbisvKlxuKyAqIEVtYmVkIHRoZSBidWlsZC10aW1lLXJlbmRlcmVkIGJvb3Rjb25maWcgXCJrZXJuZWxcIiBzdWJ0cmVlIGFzIGEgZmxhdFxuKyAqIGNtZGxpbmUgc3RyaW5nLiBzZXR1cF9hcmNoKCkgcHJlcGVuZHMgdGhpcyB0byBib290X2NvbW1hbmRfbGluZSBvblxuKyAqIGFyY2hpdGVjdHVyZXMgdGhhdCBzZWxlY3QgQVJDSF9TVVBQT1JUU19DTURMSU5FX0ZST01fQk9PVENPTkZJRy5cbisgKlxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlc1xuKyAqIENvcHlyaWdodCAoYykgMjAyNiBCcmVubyBMZWl0YW8gXHUwMDNjbGVpdGFvQGRlYmlhbi5vcmdcdTAwM2VcbisgKi9cbitcdC5zZWN0aW9uIC5pbml0LnJvZGF0YS5lbWJlZF9jbWRsaW5lLCBcImFcIiwgJXByb2diaXRzXG4rXHQuZ2xvYmFsIGVtYmVkZGVkX2tlcm5lbF9jbWRsaW5lXG4rZW1iZWRkZWRfa2VybmVsX2NtZGxpbmU6XG4rXHQuaW5jYmluIFwibGliL2VtYmVkZGVkX2NtZGxpbmUuYmluXCJcbitcdC5ieXRlIDBcbitcdC5nbG9iYWwgZW1iZWRkZWRfa2VybmVsX2NtZGxpbmVfZW5kXG4rZW1iZWRkZWRfa2VybmVsX2NtZGxpbmVfZW5kOlxuZGlmZiAtLWdpdCBhL3Rvb2xzL2Jvb3Rjb25maWcvTWFrZWZpbGUgYi90b29scy9ib290Y29uZmlnL01ha2VmaWxlXG5pbmRleCA5MGViNDdjOWQ4ZGU2Ny4uM2NiODA2NmQ1MTQxYmIgMTAwNjQ0XG4tLS0gYS90b29scy9ib290Y29uZmlnL01ha2VmaWxlXG4rKysgYi90b29scy9ib290Y29uZmlnL01ha2VmaWxlXG5AQCAtMTUsNyArMTUsNyBAQCBvdmVycmlkZSBDRkxBR1MgKz0gLVdhbGwgLWcgLUkkKENVUkRJUikvaW5jbHVkZVxuIEFMTF9UQVJHRVRTIDo9IGJvb3Rjb25maWdcbiBBTExfUFJPR1JBTVMgOj0gJChwYXRzdWJzdCAlLCQoT1VUUFVUKSUsJChBTExfVEFSR0VUUykpXG4gXG4tYWxsOiAkKEFMTF9QUk9HUkFNUykgdGVzdFxuK2FsbDogJChBTExfUFJPR1JBTVMpXG4gXG4gJChPVVRQVVQpYm9vdGNvbmZpZzogbWFpbi5jIGluY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oICQoTElCU1JDKVxuIFx0JChDQykgJChmaWx0ZXIgJS5jLCReKSAkKENGTEFHUykgJChMREZMQUdTKSAtbyAkQFxuQEAgLTI3LDQgKzI3LDQgQEAgaW5zdGFsbDogJChBTExfUFJPR1JBTVMpXG4gXHRpbnN0YWxsICQoT1VUUFVUKWJvb3Rjb25maWcgJChERVNURElSKSQoYmluZGlyKVxuIFxuIGNsZWFuOlxuLVx0JChSTSkgLWYgJChPVVRQVVQpKi5vICQoQUxMX1BST0dSQU1TKVxuK1x0cm0gLWYgJChPVVRQVVQpKi5vICQoQUxMX1BST0dSQU1TKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTY6NDM6MTYuNTY5MzAzOTM2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTg0NTUwNTcwODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIEJvb3QgQ29uZmlndXJhdGlvbiBFbmhhbmNlbWVudDogRW1iZWRkaW5nIEJvb3Rjb25maWcgaW50byB0aGUgQ29tbWFuZCBMaW5lKipcblxuT2theSwgc28gSSd2ZSBiZWVuIHdvcmtpbmcgb24gdGhpcyBwYXRjaCBzZXJpZXMuIFRoZSBnb2FsIGlzIHRvIGltcHJvdmUgaG93IHdlIGhhbmRsZSBib290IGNvbmZpZ3VyYXRpb25zLCBzcGVjaWZpY2FsbHkgYnkgaW50ZWdyYXRpbmcgdGhlIGVtYmVkZGVkIFwia2VybmVsXCIgc3VidHJlZSBmcm9tIHRoZSBib290Y29uZmlnIGludG8gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgKmF0IGJ1aWxkIHRpbWUqLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGltcHJvdmVtZW50IGJlY2F1c2UgaXQgbGV0cyBlYXJseSBhcmNoaXRlY3R1cmUgc2V0dXAgcm91dGluZXMsIGxpa2UgYHNldHVwX2FyY2goKWAsIGFjY2VzcyB2YWx1ZXMgZGVmaW5lZCBpbiB0aGF0IGVtYmVkZGVkIHN1YnRyZWUuIFRoYXQncyBhIGdvb2QgbW92ZSwgZ2l2aW5nIHVzIGFjY2VzcyB0byBwYXJhbWV0ZXJzIHJpZ2h0IGZyb20gdGhlIHN0YXJ0LlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBzZXQgYWx0ZXJzIGhvdyB3ZSBoYW5kbGUgZWFybHkgcGFyYW1ldGVyIGludGVycHJldGF0aW9uLiBXZSdyZSBlZmZlY3RpdmVseSBmbGF0dGVuaW5nIHRoZSBib290Y29uZmlnIFwia2VybmVsXCIgc3VidHJlZSBpbnRvIGEgY29tbWFuZC1saW5lIHN0cmluZyBhbmQgdGhlbiBwcmVwZW5kaW5nIGl0IHRvIHRoZSBleGlzdGluZyBgYm9vdF9jb21tYW5kX2xpbmVgIGR1cmluZyB0aGF0IGNyaXRpY2FsIGBzZXR1cF9hcmNoKClgIHBoYXNlLlxuXG5Mb29raW5nIGF0IHRoZSBjaGFuZ2VzLCBJJ20gbW9kaWZ5aW5nIHF1aXRlIGEgZmV3IGZpbGVzOiBgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdGAgZm9yIHRoZSB1c2VyIGRvY3MsIHRoZSBgTUFJTlRBSU5FUlNgIGZpbGUsIHNldmVyYWwgYE1ha2VmaWxlc2AsIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYGFyY2gveDg2L0tjb25maWdgIGFuZCBgYXJjaC94ODYva2VybmVsL3NldHVwLmNgLCBjb3JlIGhlYWRlcnMgbGlrZSBgaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmhgLCBzb21lIGltcG9ydGFudCBgaW5pdC9LY29uZmlnYCBhbmQgYGluaXQvbWFpbi5jYCBmaWxlcywgdGhlIGBsaWJgIGRpcmVjdG9yeSAoaW5jbHVkaW5nIGBib290Y29uZmlnLmNgIGFuZCBgZW1iZWRkZWQtY21kbGluZS5TYCksIGFuZCBldmVuIHRoZSBgdG9vbHMvYm9vdGNvbmZpZy9NYWtlZmlsZWAuIFRoYXQncyBhIGJyb2FkIHRvdWNoLCBidXQgaXQgbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UuXG5cbkZ1bmN0aW9uYWxseSwgdGhpcyBpbXBhY3RzIHRoZSBrZXJuZWwncyBib290IHByb2Nlc3Mgc3BlY2lmaWNhbGx5IHdpdGhpbiBgc2V0dXBfYXJjaGAgYW5kIGBzZXR1cF9ib290X2NvbmZpZ2AuIFRoZSBuZXcgY29kZSBpbnRyb2R1Y2VzIGBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUdgLiBJIGFsc28gc2VlIGBDT05GSUdfQVJDSF9TVVBQT1JUU19DTURMSU5FX0ZST01fQk9PVENPTkZJR2AuIE9mIGNvdXJzZSwgZXZlcnl0aGluZyBpcyBnYXRlZCBieSBgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHYC4gU28sIGhvdyBkbyB3ZSB0ZXN0IHRoaXM/XG5cbk9rYXksIHNvIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYENPTkZJR19DTURMSU5FX0ZST01fQk9PVENPTkZJRz15YCwgb2J2aW91c2x5LiBCdXQsIHRoYXQgZGVwZW5kcyBvbiBgQk9PVF9DT05GSUdfRU1CRURfRklMRSAhPSBcIlwiYCBhbG9uZyB3aXRoIGBBUkNIX1NVUFBPUlRTX0NNRExJTkVfRlJPTV9CT09UQ09ORklHYCBhbmQgYENNRExJTkUgPSBcIlwiYC4gSG1tLCBzbyBJIG5lZWQgYEJPT1RfQ09ORklHX0VNQkVEX0ZJTEVgIHRvIGJlIHNldCB0byBhIG5vbi1lbXB0eSBzdHJpbmcuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhhdCBgQ09ORklHX0JPT1RfQ09ORklHX0VNQkVEPXlgIGlzIHNldCB0b28uIEl0J3MgcHJvYmFibHkgaW1wbGllZCB3aGVuIGBCT09UX0NPTkZJR19FTUJFRF9GSUxFYCBpcyBzZXQsIG9yIG1heWJlIGBCT09UX0NPTkZJR19FTUJFRF9GSUxFYCBkZXBlbmRzIG9uIGl0LiBJIHNob3VsZCBnbyBiYWNrIGFuZCBjaGVjayB0aGUgYGluaXQvS2NvbmZpZ2AgdG8gYmUgc3VyZSBhYm91dCBgQk9PVF9DT05GSUdfRU1CRURfRklMRWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzOTksIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxNjo0MzozNS4wMjQzNjQwMDVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI2OTEyNDk5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQk9PVF9DT05GSUdfRU1CRURfRklMRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTU1MD1jb25maWcgQk9PVF9DT05GSUdfRU1CRURcXG4tLVxcbmluaXQvS2NvbmZpZy0xNTYwLVxcbmluaXQvS2NvbmZpZzoxNTYxOmNvbmZpZyBCT09UX0NPTkZJR19FTUJFRF9GSUxFXFxuaW5pdC9LY29uZmlnLTE1NjItXFx0c3RyaW5nIFxcXCJFbWJlZGRlZCBib290Y29uZmlnIGZpbGUgcGF0aFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTY6NDM6MzguMjkzNDk1Nzc0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM1NTQ3NzA2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGFydCBvZiB0aGUgY29uZmlndXJhdGlvbiBzeXN0ZW0gYmV0dGVyLiBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLiBJJ2xsIG5lZWQgdG8gZm9jdXMgbXkgZWZmb3J0cyBhcm91bmQgbGluZSAxNTYxLiBIb3BlZnVsbHksIHRoaXMgc2VjdGlvbiBoYXMgd2hhdCBJIG5lZWQgdG8gdW5kZXJzdGFuZC4gTGV0J3Mgc2VlIHdoYXQncyBiZWluZyBkZWZpbmVkIHRoZXJlIGFuZCBob3cgaXQgcmVsYXRlcyB0byB0aGUgYmlnZ2VyIHBpY3R1cmUuIFRoaXMgZmVlbHMgbGlrZSBpdCBzaG91bGQgZ2l2ZSBtZSBzb21lIHNvbGlkIGNvbnRleHQgYW5kIGNsYXJpZnkgdGhhdCBzcGVjaWZpYyBhcmVhIG9mIHRoZSBzeXN0ZW0uIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1MjYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxNjo0Mzo0NS42NDg5NzYwMTRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTkzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1NTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE1NTA6XFx0Y29uZmlnIEJPT1RfQ09ORklHX0VNQkVEXFxuMTU1MTpcXHRcXHRib29sIFxcXCJFbWJlZCBib290Y29uZmlnIGZpbGUgaW4gdGhlIGtlcm5lbFxcXCJcXG4xNTUyOlxcdFxcdGRlcGVuZHMgb24gQk9PVF9DT05GSUdcXG4xNTUzOlxcdFxcdGhlbHBcXG4xNTU0OlxcdFxcdCAgRW1iZWQgYSBib290Y29uZmlnIGZpbGUgZ2l2ZW4gYnkgQk9PVF9DT05GSUdfRU1CRURfRklMRSBpbiB0aGVcXG4xNTU1OlxcdFxcdCAga2VybmVsLiBVc3VhbGx5LCB0aGUgYm9vdGNvbmZpZyBmaWxlIGlzIGxvYWRlZCB3aXRoIHRoZSBpbml0cmRcXG4xNTU2OlxcdFxcdCAgaW1hZ2UuIEJ1dCBpZiB0aGUgc3lzdGVtIGRvZXNuJ3Qgc3VwcG9ydCBpbml0cmQsIHRoaXMgb3B0aW9uIHdpbGxcXG4xNTU3OlxcdFxcdCAgaGVscCB5b3UgYnkgZW1iZWRkaW5nIGEgYm9vdGNvbmZpZyBmaWxlIHdoaWxlIGJ1aWxkaW5nIHRoZSBrZXJuZWwuXFxuMTU1ODpcXHRcXG4xNTU5OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4xNTYwOlxcdFxcbjE1NjE6XFx0Y29uZmlnIEJPT1RfQ09ORklHX0VNQkVEX0ZJTEVcXG4xNTYyOlxcdFxcdHN0cmluZyBcXFwiRW1iZWRkZWQgYm9vdGNvbmZpZyBmaWxlIHBhdGhcXFwiXFxuMTU2MzpcXHRcXHRkZXBlbmRzIG9uIEJPT1RfQ09ORklHX0VNQkVEXFxuMTU2NDpcXHRcXHRoZWxwXFxuMTU2NTpcXHRcXHQgIFNwZWNpZnkgYSBib290Y29uZmlnIGZpbGUgd2hpY2ggd2lsbCBiZSBlbWJlZGRlZCB0byB0aGUga2VybmVsLlxcbjE1NjY6XFx0XFx0ICBUaGlzIGJvb3Rjb25maWcgd2lsbCBiZSB1c2VkIGlmIHRoZXJlIGlzIG5vIGluaXRyZCBvciBubyBvdGhlclxcbjE1Njc6XFx0XFx0ICBib290Y29uZmlnIGluIHRoZSBpbml0cmQuXFxuMTU2ODpcXHRcXG4xNTY5OlxcdGNvbmZpZyBBUkNIX1NVUFBPUlRTX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXFxuMTU3MDpcXHRcXHRib29sXFxuMTU3MTpcXHRcXHRoZWxwXFxuMTU3MjpcXHRcXHQgIFNpbGVudCBzeW1ib2w7IG5vIEMgY29kZSByZWFkcyBpdCBkaXJlY3RseS4gQXJjaGl0ZWN0dXJlc1xcbjE1NzM6XFx0XFx0ICBzZWxlY3QgaXQgb25jZSB0aGVpciBzZXR1cF9hcmNoKCkgY2FsbHNcXG4xNTc0OlxcdFxcdCAgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZSgpIGJlZm9yZSBwYXJzZV9lYXJseV9wYXJhbSgpLlxcbjE1NzU6XFx0XFx0ICBJdHMgb25seSByb2xlIGlzIHRvIGdhdGUgdGhlIHVzZXItdmlzaWJsZVxcbjE1NzY6XFx0XFx0ICBDTURMSU5FX0ZST01fQk9PVENPTkZJRyBvcHRpb24gcGVyLWFyY2gsIHRoZSBzYW1lXFxuMTU3NzpcXHRcXHQgIEFSQ0hfU1VQUE9SVFNfKiBpZGlvbSB1c2VkIGJ5IEFSQ0hfU1VQUE9SVFNfQ0ZJLCBldGMuXFxuMTU3ODpcXHRcXG4xNTc5OlxcdGNvbmZpZyBDTURMSU5FX0ZST01fQk9PVENPTkZJR1xcbjE1ODA6XFx0XFx0Ym9vbCBcXFwiUmVuZGVyIGVtYmVkZGVkIGJvb3Rjb25maWcgYXMga2VybmVsIGNtZGxpbmUgYXQgYnVpbGQgdGltZVxcXCJcXG4xNTgxOlxcdFxcdGRlcGVuZHMgb24gQk9PVF9DT05GSUdfRU1CRURfRklMRSAhPSBcXFwiXFxcIlxcbjE1ODI6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXFxuMTU4MzpcXHRcXHRkZXBlbmRzIG9uIENNRExJTkUgPSBcXFwiXFxcIlxcbjE1ODQ6XFx0XFx0ZGVmYXVsdCBuXFxuMTU4NTpcXHRcXHRoZWxwXFxuMTU4NjpcXHRcXHQgIFJlbmRlciB0aGUgXFxcImtlcm5lbFxcXCIgc3VidHJlZSBvZiB0aGUgZW1iZWRkZWQgYm9vdGNvbmZpZyBmaWxlIGludG8gYVxcbjE1ODc6XFx0XFx0ICBmbGF0IGNtZGxpbmUgc3RyaW5nIGF0IGtlcm5lbCBidWlsZCB0aW1lIGFuZCBwcmVwZW5kIGl0IHRvXFxuMTU4ODpcXHRcXHQgIGJvb3RfY29tbWFuZF9saW5lIGR1cmluZyBlYXJseSBhcmNoaXRlY3R1cmUgc2V0dXAuIFRoaXMgbWFrZXNcXG4xNTg5OlxcdFxcdCAgZWFybHlfcGFyYW0oKSBoYW5kbGVycyAoZS5nLiBtZW09LCBlYXJseWNvbj0sIGxvZ2xldmVsPSkgc2VlIHRoZVxcbjE1OTA6XFx0XFx0ICB2YWx1ZXMgc3VwcGxpZWQgdmlhIHRoZSBlbWJlZGRlZCBib290Y29uZmlnLlxcbjE1OTE6XFx0XFxuMTU5MjpcXHRcXHQgIFRoZSBydW50aW1lIGJvb3Rjb25maWcgcGFyc2VyIGlzIHVuYWZmZWN0ZWQsIHNvIHRyZWUtc3RydWN0dXJlZFxcbjE1OTM6XFx0XFx0ICBjb25zdW1lcnMgc3VjaCBhcyBmdHJhY2UgYm9vdC10aW1lIHRyYWNpbmcga2VlcCB3b3JraW5nLlxcbjE1OTQ6XFx0XFxuMTU5NTpcXHRcXHQgIE5vdGU6IHdoZW4gYW4gaW5pdHJkIGFsc28gY2FycmllcyBhIGJvb3Rjb25maWcsIGl0cyBcXFwia2VybmVsXFxcIlxcbjE1OTY6XFx0XFx0ICBzdWJ0cmVlIGlzIHN0aWxsIHBhcnNlZCBhdCBydW50aW1lLCBidXQgdGhlIGVtYmVkZGVkIFxcXCJrZXJuZWxcXFwiXFxuMTU5NzpcXHRcXHQgIGtleXMgcmVtYWluIGluIGJvb3RfY29tbWFuZF9saW5lIGZvciBwYXJzZV9lYXJseV9wYXJhbSgpIGFuZFxcbjE1OTg6XFx0XFx0ICBlbmQgdXAgbGF0ZXIgdGhhbiB0aGUgaW5pdHJkIGtleXMgaW4gc2F2ZWRfY29tbWFuZF9saW5lLCBzb1xcbjE1OTk6XFx0XFx0ICBwYXJzZV9hcmdzKCkgbGFzdC13aW5zIGZhdm9ycyB0aGUgZW1iZWRkZWQgdmFsdWVzLiBJZiB5b3UgbmVlZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxNjo0Mzo0NS42NDkxNzc0MTRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzI2MTY0NDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQm9vdCBDb25maWd1cmF0aW9uIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgd2UgbmVlZCB0byBoYW5kbGUgc2V2ZXJhbCBjb25maWd1cmF0aW9uIG9wdGlvbnM6IGBCT09UX0NPTkZJR2AsIGBCT09UX0NPTkZJR19FTUJFRGAsIGBCT09UX0NPTkZJR19FTUJFRF9GSUxFYCAod2hpY2ggd2lsbCBiZSBzZXQgdG8gYSBmaWxlIHBhdGgpLCBhbmQgYENNRExJTkVfRlJPTV9CT09UQ09ORklHYC4gQnV0IGhlcmUncyB3aGVyZSBpdCBnZXRzIHRyaWNreSDigJMgYEJPT1RfQ09ORklHX0VNQkVEX0ZJTEVgIGlzIGEgc3RyaW5nLCBhbmQgSSdtIG5vdCBzdXJlIGlmIFN5emthbGxlciB3aWxsIHJlbGlhYmx5IHByb3ZpZGUgYSB2YWxpZCBmaWxlIHBhdGggZm9yIGl0LiBDYW4gaXQ/IEknbSBub3QgZW50aXJlbHkgY29udmluY2VkLlxuXG5JZiBTeXprYWxsZXIgb25seSBlbmFibGVzIGBDTURMSU5FX0ZST01fQk9PVENPTkZJR2AsIHRoZW4gdGhlIHN5c3RlbSAqbmVlZHMqIGBCT09UX0NPTkZJR19FTUJFRF9GSUxFYCB0byBiZSBzZXQgdG8gc29tZXRoaW5nIGNvbmNyZXRlLiBTeXprYWxsZXIgY2FuIHNldCBzdHJpbmdzIGluIGl0cyBjb25maWd1cmF0aW9uIGdlbmVyYXRpb24sIGJ1dCBpdCBjb3VsZCBlbmQgdXAganVzdCBnaXZpbmcgYSByYW5kb20gc3RyaW5nLCBvciBldmVuIG5vdGhpbmcgYXQgYWxsLiBBY3R1YWxseSwgU3l6a2FsbGVyICpkb2VzKiBoYXZlIGEgd2F5IHRvIHByb3ZpZGUgZmlsZXMsIGJ1dCBpdCdzIGEgYml0IG9mIGEgd29ya2Fyb3VuZC5cblxuVGhlIHJlYWwgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIHRoaXMgcGF0Y2ggaXMgZXZlbiB3b3J0aCB0aGUgZWZmb3J0IHRvIGZ1enouIFRoZSBmdW5jdGlvbmFsaXR5IGl0IGFkZHMgb2NjdXJzIGluIHR3byBwaGFzZXM6IGl0IHJ1bnMgYXQgKmJ1aWxkIHRpbWUqLCBnZW5lcmF0aW5nIHRoZSBib290IGNvbmZpZ3VyYXRpb24gaW50byBhIGNvbW1hbmQgbGluZSBzdHJpbmcsIGFuZCBhbHNvIGF0ICplYXJseSBib290IHRpbWUqIHdpdGggYHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmVgIHdpdGhpbiBgc2V0dXBfYXJjaGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgYHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmVgIGNhbGwsIHNvIGxldCdzIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTc0LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTY6NDM6NTEuMzc1MzQzNjY5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NDQ5NjQ5NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYz05MTY9dm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL3NldHVwLmMtOTY1LVxcdGlmIChib290Y29uZmlnX2NtZGxpbmVfcmVxdWVzdGVkKCkpXFxuYXJjaC94ODYva2VybmVsL3NldHVwLmM6OTY2OlxcdFxcdHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoYm9vdF9jb21tYW5kX2xpbmUsXFxuYXJjaC94ODYva2VybmVsL3NldHVwLmMtOTY3LVxcdFxcdFxcdFxcdFxcdCAgICAgQ09NTUFORF9MSU5FX1NJWkUpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmg9MzA1PXN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqeGJjX2dldF9lbWJlZGRlZF9ib290Y29uZmlnKHNpemVfdCAqc2l6ZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oLTMxMi0jaWZkZWYgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXFxuaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmg6MzEzOnZvaWQgX19pbml0IHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSk7XFxuaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmgtMzE0LWJvb2wgX19pbml0IHhiY19lbWJlZGRlZF9jbWRsaW5lX2FwcGxpZWQodm9pZCk7XFxuaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmgtMzE1LSNlbHNlXFxuaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmg6MzE2OnN0YXRpYyBpbmxpbmUgdm9pZCB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lKGNoYXIgKmRzdCwgc2l6ZV90IHNpemUpIHsgfVxcbmluY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oLTMxNy1zdGF0aWMgaW5saW5lIGJvb2wgeGJjX2VtYmVkZGVkX2NtZGxpbmVfYXBwbGllZCh2b2lkKSB7IHJldHVybiBmYWxzZTsgfVxcbi0tXFxuaW5pdC9LY29uZmlnPTE1Njk9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfQ01ETElORV9GUk9NX0JPT1RDT05GSUdcXG4tLVxcbmluaXQvS2NvbmZpZy0xNTczLVxcdCAgc2VsZWN0IGl0IG9uY2UgdGhlaXIgc2V0dXBfYXJjaCgpIGNhbGxzXFxuaW5pdC9LY29uZmlnOjE1NzQ6XFx0ICB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lKCkgYmVmb3JlIHBhcnNlX2Vhcmx5X3BhcmFtKCkuXFxuaW5pdC9LY29uZmlnLTE1NzUtXFx0ICBJdHMgb25seSByb2xlIGlzIHRvIGdhdGUgdGhlIHVzZXItdmlzaWJsZVxcbi0tXFxubGliL2Jvb3Rjb25maWcuYz01OD1zdGF0aWMgdm9pZCBfX2luaXQgc3RyX3ByZXBlbmQoY2hhciAqZHN0LCBzaXplX3QgZHN0X2xlbixcXG4tLVxcbmxpYi9ib290Y29uZmlnLmMtNjUtLyoqXFxubGliL2Jvb3Rjb25maWcuYzo2NjogKiB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lKCkgLSBQcmVwZW5kIGVtYmVkZGVkIGJvb3Rjb25maWcgY21kbGluZVxcbmxpYi9ib290Y29uZmlnLmMtNjctICogQGRzdDogY21kbGluZSBidWZmZXIgdG8gcHJlcGVuZCBpbnRvIChtdXN0IGFscmVhZHkgY29udGFpbiBhIE5VTCBieXRlKVxcbi0tXFxubGliL2Jvb3Rjb25maWcuYy04MS0gKi9cXG5saWIvYm9vdGNvbmZpZy5jOjgyOnZvaWQgX19pbml0IHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSlcXG5saWIvYm9vdGNvbmZpZy5jLTgzLXtcXG4tLVxcbmxpYi9ib290Y29uZmlnLmMtMTA0LSAqXFxubGliL2Jvb3Rjb25maWcuYzoxMDU6ICogUmV0dXJuIHRydWUgaWYgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZSgpIGFjdHVhbGx5IHByZXBlbmRlZCB0aGVcXG5saWIvYm9vdGNvbmZpZy5jLTEwNi0gKiBlbWJlZGRlZCBcXFwia2VybmVsXFxcIiBzdWJ0cmVlLiBzZXR1cF9ib290X2NvbmZpZygpIHVzZXMgdGhpcyB0byBhdm9pZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxNjo0Mzo1NC4yMjAzMTQ3MzhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDkzMDMwMjc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRnV6emFiaWxpdHkgb2YgRWFybHkgQm9vdCBDb2RlKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyBzeXprYWxsZXIgbWlnaHQgYmUgYWJsZSB0byBmdXp6IHRoaXMgcGFydGljdWxhciBiaXQgb2Yga2VybmVsIGNvZGUuIFRoaXMgYHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmVgIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgYHNldHVwX2FyY2goKWAsIHdoaWNoIGlzICpyZWFsbHkqIGVhcmx5IGluIHRoZSBib290IHByb2Nlc3MuIFN5emthbGxlcidzIHR5cGljYWwgYXBwcm9hY2ggaXMgdG8gZnV6eiBieSBydW5uaW5nIHVzZXJzcGFjZSBwcm9ncmFtcyB0aGF0IG1ha2Ugc3lzY2FsbHMgYWZ0ZXIgdGhlIGtlcm5lbCBpcyB1cC4gU28sIGFueXRoaW5nIHRoYXQgb25seSBydW5zIG9uY2UgZHVyaW5nIGVhcmx5IGJvb3QsIGVzcGVjaWFsbHkgY29kZSB0aGF0IHJlbGllcyBoZWF2aWx5IG9uIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBsaWtlIHRoaXMgZnVuY3Rpb24sIGlzIGdlbmVyYWxseSBnb2luZyB0byBiZSBhIHRvdWdoIHRhcmdldCBmb3Igc3l6a2FsbGVyIHRocm91Z2ggaXRzIG5vcm1hbCBzeXNjYWxsIGludGVyZmFjZS5cblxuQnV0IHdhaXQsIHN5emthbGxlciAqY2FuKiBmdXp6IGVhcmx5IGJvb3QgY29kZSB1bmRlciBzb21lIGNpcmN1bXN0YW5jZXMsIGxpa2UgaWYgaXQgY2FuIGJlIHRyaWdnZXJlZCBieSB2YXJ5aW5nIHRoZSBjb21tYW5kIGxpbmUgb3IgaWYgaXQncyBqdXN0IHBhcnQgb2YgdGhlIG5vcm1hbCBib290IHByb2Nlc3MuIFRoZSBpc3N1ZSBoZXJlLCB0aG91Z2gsIGlzIHRoYXQgdGhlIGlucHV0IHRvIGB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lYCwgc3BlY2lmaWNhbGx5IGBlbWJlZGRlZF9rZXJuZWxfY21kbGluZWAsIGlzIGdlbmVyYXRlZCBhdCBidWlsZCB0aW1lIGRpcmVjdGx5IGZyb20gYEJPT1RfQ09ORklHX0VNQkVEX0ZJTEVgLiBTeXprYWxsZXIgZG9lc24ndCBtb2RpZnkgdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzIG9yIHRoZSBjb250ZW50cyBvZiBgQk9PVF9DT05GSUdfRU1CRURfRklMRWAgYmV0d2VlbiBmdXp6aW5nIGl0ZXJhdGlvbnMuIFNvLCB0aGUgZW1iZWRkZWQgZmlsZSBpcyBlc3NlbnRpYWxseSBzdGF0aWMgdGhyb3VnaG91dCB0aGUgZW50aXJlIGZ1enppbmcgc2Vzc2lvbi5cblxuVGhlcmVmb3JlLCB0aGUgZXhlY3V0aW9uIHBhdGggdGhyb3VnaCBgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZWAgYXBwZWFycyB0byBiZSBjb21wbGV0ZWx5IHN0YXRpYyBhbmQgZGV0ZXJtaW5pc3RpYy4gTm8gdXNlciBpbnB1dCBmcm9tIHRoZSBmdXp6ZXIgZ2V0cyB0byB0aGlzIGNvZGUgYXQgcnVudGltZS4gSG1tLi4ud2FpdCEgRG9lc24ndCBgYm9vdGNvbmZpZ19jbWRsaW5lX3JlcXVlc3RlZCgpYCBjaGVjayBpZiBgYm9vdGNvbmZpZ2AgaXMgb24gdGhlIGNvbW1hbmQgbGluZT8gQ291bGQgc3l6a2FsbGVyIHBvdGVudGlhbGx5IG11dGF0ZSB0aGUgY29tbWFuZCBsaW5lPyBObywgc3l6a2FsbGVyIGJvb3RzIHdpdGggYSBmaXhlZCBjb21tYW5kIGxpbmUuIFRoZSBwYXJzaW5nIG9mIHRoZSBib290Y29uZmlnIGlzIGRvbmUgYXQgYnVpbGQgdGltZSB2aWEgYHRvb2xzL2Jvb3Rjb25maWcvYm9vdGNvbmZpZyAtQ2AuIFNvIHRoZSBvbmx5IHJ1bnRpbWUgcGllY2UgaXMgdGhlIGB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lYCBmdW5jdGlvbiB3aGljaCBqdXN0IHBlcmZvcm1zIGBtZW1tb3ZlYCBhbmQgYG1lbWNweWAgb2YgYSBzdGF0aWMgc3RyaW5nLlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdvIGxvb2sgYXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lYCBpbiBgbGliL2Jvb3Rjb25maWcuY2AgYW5kIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODUyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE2OjQ0OjAyLjMxMzM0NzkzMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzkxNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibGliL2Jvb3Rjb25maWcuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MixcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MjpcXHR2b2lkIF9faW5pdCB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lKGNoYXIgKmRzdCwgc2l6ZV90IHNpemUpXFxuICA4MzpcXHR7XFxuICA4NDpcXHRcXHRzaXplX3QgZW1iZWRfbGVuID0gZW1iZWRkZWRfa2VybmVsX2NtZGxpbmVfZW5kIC0gZW1iZWRkZWRfa2VybmVsX2NtZGxpbmU7XFxuICA4NTpcXHRcXHRzaXplX3QgZHN0X2xlbjtcXG4gIDg2OlxcdFxcbiAgODc6XFx0XFx0aWYgKCFzaXplIHx8IGVtYmVkX2xlbiBcXHUwMDNjPSAxKVxcdC8qIHRyYWlsaW5nIE5VTCBvbmx5ICovXFxuICA4ODpcXHRcXHRcXHRyZXR1cm47XFxuICA4OTpcXHRcXHRlbWJlZF9sZW4tLTtcXHRcXHRcXHQvKiBleGNsdWRlIHRyYWlsaW5nIE5VTCBieXRlICovXFxuICA5MDpcXHRcXG4gIDkxOlxcdFxcdGRzdF9sZW4gPSBzdHJubGVuKGRzdCwgc2l6ZSk7XFxuICA5MjpcXHRcXHRpZiAoZW1iZWRfbGVuICsgZHN0X2xlbiArIDEgXFx1MDAzZSBzaXplKSB7XFxuICA5MzpcXHRcXHRcXHRwcl9lcnIoXFxcImVtYmVkZGVkIGJvb3Rjb25maWcgY21kbGluZSAoJXp1IGJ5dGVzKSBkb2VzIG5vdCBmaXQgaW4gQ09NTUFORF9MSU5FX1NJWkUgd2l0aCAlenUgYnl0ZXMgYWxyZWFkeSB1c2VkOyBpZ25vcmluZyBlbWJlZGRlZCB2YWx1ZXNcXFxcblxcXCIsXFxuICA5NDpcXHRcXHRcXHQgICAgICAgZW1iZWRfbGVuLCBkc3RfbGVuKTtcXG4gIDk1OlxcdFxcdFxcdHJldHVybjtcXG4gIDk2OlxcdFxcdH1cXG4gIDk3OlxcdFxcbiAgOTg6XFx0XFx0c3RyX3ByZXBlbmQoZHN0LCBkc3RfbGVuLCBlbWJlZGRlZF9rZXJuZWxfY21kbGluZSwgZW1iZWRfbGVuKTtcXG4gIDk5OlxcdFxcdHhiY19jbWRsaW5lX2FwcGxpZWQgPSB0cnVlO1xcbiAxMDA6XFx0fVxcbiAxMDE6XFx0XFxuIDEwMjpcXHQvKipcXG4gMTAzOlxcdCAqIHhiY19lbWJlZGRlZF9jbWRsaW5lX2FwcGxpZWQoKSAtIERpZCB0aGUgZW1iZWRkZWQgY21kbGluZSBnZXQgcHJlcGVuZGVkP1xcbiAxMDQ6XFx0ICpcXG4gMTA1OlxcdCAqIFJldHVybiB0cnVlIGlmIHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoKSBhY3R1YWxseSBwcmVwZW5kZWQgdGhlXFxuIDEwNjpcXHQgKiBlbWJlZGRlZCBcXFwia2VybmVsXFxcIiBzdWJ0cmVlLiBzZXR1cF9ib290X2NvbmZpZygpIHVzZXMgdGhpcyB0byBhdm9pZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxNjo0NDowMi4zMTM0ODk2ODFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkzODY4OTEyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhpcyBjb2RlIHNuaXBwZXQuXG5cbioqQW5hbHl6aW5nIGEgU2ltcGxlIFByZXBlbmQgT3BlcmF0aW9uKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwaWVjZSBvZiBjb2RlIGFuZCBpdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEl0J3MganVzdCBhIHNpbXBsZSBzdHJpbmcgcHJlcGVuZCBvcGVyYXRpb24uIE5vdGhpbmcgY29tcGxleCwgbm90aGluZyB0aGF0IHNob3VsZCBiZSBhIGNhdXNlIGZvciBjb25jZXJuIGluIHRlcm1zIG9mIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIOKAkyBlc3BlY2lhbGx5IHNpbmNlIGl0IG9ubHkgcnVucyBvbmNlLCBhdCBib290IHRpbWUuIEknbSBub3Qgc2VlaW5nIGFueSBleHBvc2VkIHBhcnNlcnMgb3Igc3RhdGUgbWFjaGluZXMgaGVyZSwgc28gZnV6emluZyB0aGlzIHBhcnRpY3VsYXIgb3BlcmF0aW9uIGRpcmVjdGx5IHNlZW1zIHVubmVjZXNzYXJ5LlxuXG5Ib3dldmVyLCBJIGp1c3Qgbm90aWNlZCB0aGF0IGB4YmNfc25wcmludF9jbWRsaW5lYCB3YXMgYWxzbyBtb2RpZmllZCwgYW5kIHRoYXQgcmFpc2VzIGEgZmxhZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyB1c2VkIGFuZCB3aGF0IGltcGFjdCB0aG9zZSBjaGFuZ2VzIGhhdmUuIFdoaWxlIHRoZSBpbml0aWFsIG9wZXJhdGlvbiBpdHNlbGYgc2VlbXMgYmVuaWduLCB0aGUgYnJvYWRlciBwaWN0dXJlIG5lZWRzIHRvIGJlIGV2YWx1YXRlZC4gSXQncyB3b3J0aCBub3RpbmcgdGhhdCB0aGUgYWN0dWFsIHBhcnNpbmcgb2YgdGhlIGJvb3Rjb25maWcgaXMgaGFuZGxlZCBieSBgdG9vbHMvYm9vdGNvbmZpZy9ib290Y29uZmlnIC1DYCBhdCBidWlsZCB0aW1lLCBzbyB0aGUgY29kZSBpbiBxdWVzdGlvbiBpcyBsaWtlbHkganVzdCBwcmVwYXJpbmcgdGhlIGRhdGEgZm9yIHRoYXQgcHJvY2Vzcy4gQnV0IEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgcmVsYXRpb25zaGlwIGFzIHdlbGwuIExldCdzIHNlZSB3aGVyZSBgeGJjX3NucHJpbnRfY21kbGluZWAgY29tZXMgaW50byBwbGF5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDE0OSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTY6NDQ6MDYuMjUyMTgzOTQ2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODE5OTM0MDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhiY19zbnByaW50X2NtZGxpbmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmg9MjY1PWludCBfX2luaXQgeGJjX25vZGVfY29tcG9zZV9rZXlfYWZ0ZXIoc3RydWN0IHhiY19ub2RlICpyb290LFxcbi0tXFxuaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmgtMjY4LS8qIFJlbmRlciBrZXkvdmFsdWUgcGFpcnMgdW5kZXIgQHJvb3QgYXMgYSBmbGF0IGNtZGxpbmUgc3RyaW5nICovXFxuaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmg6MjY5OmludCBfX2luaXQgeGJjX3NucHJpbnRfY21kbGluZShjaGFyICpidWYsIHNpemVfdCBzaXplLCBzdHJ1Y3QgeGJjX25vZGUgKnJvb3QpO1xcbmluY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oLTI3MC1cXG4tLVxcbmluaXQvbWFpbi5jPTMyOD1zdGF0aWMgY2hhciAqIF9faW5pdCB4YmNfbWFrZV9jbWRsaW5lKGNvbnN0IGNoYXIgKmtleSlcXG4tLVxcbmluaXQvbWFpbi5jLTMzOC1cXHQvKiBDb3VudCByZXF1aXJlZCBidWZmZXIgc2l6ZSAqL1xcbmluaXQvbWFpbi5jOjMzOTpcXHRsZW4gPSB4YmNfc25wcmludF9jbWRsaW5lKE5VTEwsIDAsIHJvb3QpO1xcbmluaXQvbWFpbi5jLTM0MC1cXHRpZiAobGVuIFxcdTAwM2M9IDApXFxuLS1cXG5pbml0L21haW4uYy0zNDgtXFxuaW5pdC9tYWluLmM6MzQ5OlxcdHJldCA9IHhiY19zbnByaW50X2NtZGxpbmUobmV3X2NtZGxpbmUsIGxlbiArIDEsIHJvb3QpO1xcbmluaXQvbWFpbi5jLTM1MC1cXHRpZiAocmV0IFxcdTAwM2MgMCB8fCByZXQgXFx1MDAzZSBsZW4pIHtcXG4tLVxcbmxpYi9ib290Y29uZmlnLmM9NTg9c3RhdGljIHZvaWQgX19pbml0IHN0cl9wcmVwZW5kKGNoYXIgKmRzdCwgc2l6ZV90IGRzdF9sZW4sXFxuLS1cXG5saWIvYm9vdGNvbmZpZy5jLTcxLSAqIGJvb3Rjb25maWcgdG8gQGRzdC4gVGhlIHJlbmRlcmVkIHN0cmluZyBhbHJlYWR5IGVuZHMgd2l0aCBhIHNpbmdsZVxcbmxpYi9ib290Y29uZmlnLmM6NzI6ICogc3BhY2UgKHRoZSB4YmNfc25wcmludF9jbWRsaW5lKCkgaW52YXJpYW50KSwgd2hpY2ggc2VydmVzIGFzIHRoZVxcbmxpYi9ib290Y29uZmlnLmMtNzMtICogc2VwYXJhdG9yIGJldHdlZW4gdGhlIGVtYmVkZGVkIGtleXMgYW5kIGFueSBleGlzdGluZyBjb250ZW50IG9mIEBkc3QuXFxuLS1cXG5saWIvYm9vdGNvbmZpZy5jPTQ4OT1zdGF0aWMgY2hhciB4YmNfbmFtZWJ1ZltYQkNfS0VZTEVOX01BWF0gX19pbml0ZGF0YTtcXG4tLVxcbmxpYi9ib290Y29uZmlnLmMtNDkzLS8qKlxcbmxpYi9ib290Y29uZmlnLmM6NDk0OiAqIHhiY19zbnByaW50X2NtZGxpbmUoKSAtIFJlbmRlciBib290Y29uZmlnIGtleXMgdW5kZXIgQHJvb3QgYXMgYSBjbWRsaW5lIHN0cmluZ1xcbmxpYi9ib290Y29uZmlnLmMtNDk1LSAqIEBidWY6IERlc3RpbmF0aW9uIGJ1ZmZlciAobWF5IGJlIE5VTEwgd2hlbiBAc2l6ZSBpcyAwIHRvIHF1ZXJ5IHRoZSBsZW5ndGgpXFxuLS1cXG5saWIvYm9vdGNvbmZpZy5jLTUwNC0gKi9cXG5saWIvYm9vdGNvbmZpZy5jOjUwNTppbnQgX19pbml0IHhiY19zbnByaW50X2NtZGxpbmUoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgc3RydWN0IHhiY19ub2RlICpyb290KVxcbmxpYi9ib290Y29uZmlnLmMtNTA2LXtcXG4tLVxcbnRvb2xzL2Jvb3Rjb25maWcvbWFpbi5jPTI4OT1zdGF0aWMgaW50IHNob3dfeGJjX2tlcm5lbF9jbWRsaW5lKHZvaWQpXFxuLS1cXG50b29scy9ib290Y29uZmlnL21haW4uYy0yOTgtXFxudG9vbHMvYm9vdGNvbmZpZy9tYWluLmM6Mjk5OlxcdGxlbiA9IHhiY19zbnByaW50X2NtZGxpbmUoTlVMTCwgMCwgcm9vdCk7XFxudG9vbHMvYm9vdGNvbmZpZy9tYWluLmMtMzAwLVxcdGlmIChsZW4gXFx1MDAzYyAwKSB7XFxuLS1cXG50b29scy9ib290Y29uZmlnL21haW4uYy0zMTAtXFxudG9vbHMvYm9vdGNvbmZpZy9tYWluLmM6MzExOlxcdHJldCA9IHhiY19zbnByaW50X2NtZGxpbmUoYnVmLCBsZW4gKyAxLCByb290KTtcXG50b29scy9ib290Y29uZmlnL21haW4uYy0zMTItXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTY6NDQ6MDkuMDcyMTgwNjE1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3OTg2MzE5NDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHhiY19zbnByaW50X2NtZGxpbmUgZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgbW9kaWZpZXMgYHhiY19zbnByaW50X2NtZGxpbmVgLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgaW4gYGluaXQvbWFpbi5jYCB0byByZW5kZXIgdGhlIGJvb3QgY29uZmlndXJhdGlvbiBpbnRvIGEgY29tbWFuZC1saW5lIHN0cmluZyBkdXJpbmcgdGhlIGtlcm5lbCdzIGVhcmx5IGJvb3QgcGhhc2UuIFRoZSBwcmltYXJ5IGNoYW5nZSBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgdW5kZWZpbmVkIGJlaGF2aW9yIGlzc3VlIHdoZW4gdGhlIGJ1ZmZlciAoYGJ1ZmApIHBhc3NlZCB0byBgeGJjX3NucHJpbnRfY21kbGluZWAgaXMgTlVMTC4gSXQgYWxzbyBpbmNsdWRlcyBhIGNoZWNrIHRvIHNraXAgZW1wdHkgb3IgdmFsdWUtb25seSByb290IG5vZGVzIGluIHRoZSBib290IGNvbmZpZ3VyYXRpb24sIHByZXZlbnRpbmcgYSAtRUlOVkFMIGVycm9yIGFuZCBhbGxvd2luZyB0aGUgcmVuZGVyaW5nIG9mIGRlc2NlbmRhbnQga2V5cy5cblxuTXkgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgaXMgc29tZXRoaW5nIHRoZSBmdXp6ZXIgY2FuIG1lYW5pbmdmdWxseSBpbnRlcmFjdCB3aXRoLiBgeGJjX3NucHJpbnRfY21kbGluZWAgaXMgY2FsbGVkIGJ5IGB4YmNfbWFrZV9jbWRsaW5lYCwgd2hpY2ggaW4gdHVybiBpcyBpbnZva2VkIGR1cmluZyBlYXJseSBib290IGJ5IGBzZXR1cF9ib290X2NvbmZpZ2AuIFRoZSBpbnB1dCB0byB0aGUgcmVuZGVyaW5nIGZ1bmN0aW9uIGNvbWVzIGZyb20gdGhlIGJvb3QgY29uZmlndXJhdGlvbiBkYXRhLCBvYnRhaW5lZCBlaXRoZXIgZnJvbSB0aGUgaW5pdHJkIG9yIGFuIGVtYmVkZGVkIGNvbmZpZ3VyYXRpb24uIENydWNpYWxseSwgdGhlIGZ1enplciwgc3BlY2lmaWNhbGx5IFN5emthbGxlciwgZG9lc24ndCBjdXJyZW50bHkgaGF2ZSBhIHdheSB0byBtb2RpZnkgZWl0aGVyIHRoZSBpbml0cmQgY29udGVudCBvciB0aGUgZW1iZWRkZWQgYm9vdCBjb25maWd1cmF0aW9uIGR1cmluZyBhIGZ1enppbmcgc2Vzc2lvbi4gVGhlc2UgZGF0YSBhcmUgc3RhdGljIHBlciBWTS9idWlsZC5cblxuVGhlcmVmb3JlLCBzaW5jZSB0aGUgaW5wdXQgdG8gdGhlIG1vZGlmaWVkIGNvZGUgaXMgZXNzZW50aWFsbHkgZml4ZWQgZHVyaW5nIGEgZnV6emluZyBydW4sIHRoZSBmdXp6ZXIgY2Fubm90IGV4cGxvcmUgZGlmZmVyZW50IGV4ZWN1dGlvbiBwYXRocyB3aXRoaW4gYHhiY19zbnByaW50X2NtZGxpbmVgIGJ5IG1hbmlwdWxhdGluZyBpbnB1dCBkYXRhIHRocm91Z2ggc3lzY2FsbHMuIFRoZXJlJ3Mgbm8gd2F5IHRvIGluZmx1ZW5jZSBpdC4gSXQncyBlc3NlbnRpYWxseSBhIG9uZS10aW1lIGV4ZWN1dGlvbiB3aXRoIHN0YXRpYyBpbnB1dHMuIEkgZGlkIGNoZWNrIGAvcHJvYy9ib290Y29uZmlnYCBhbmQgaXQncyByZWFkLW9ubHksIGFuZCB0aGUgYm9vdCBjb25maWcgcGFyc2luZyBmdW5jdGlvbiBpcyBgX19pbml0YC5cblxuSSdtIHJldmlzaXRpbmcgdGhlIGNyaXRlcmlhIGZvciBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHByb21wdCBzYXlzLCBcIkNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4uLlwiIE5vdywgdGhlIGNvZGUgaXMgKnJlYWNoYWJsZSogZHVyaW5nIGJvb3QsIHNvLCB0ZWNobmljYWxseSwgaXQncyBub3QgXCJpbXBvc3NpYmxlIHRvIHJlYWNoXCIuIEhvd2V2ZXIsIGl0J3Mgbm90IHJlYWNoYWJsZSB3aXRoIGZ1enplciBpbnB1dC4gVGhlIGZ1enplciBwcmltYXJpbHkgd29ya3MgYnkgbXV0YXRpbmcgc3lzY2FsbHMuIFRoaXMgY29kZSBpc24ndCB0b3VjaGVkIGJ5IHN5c2NhbGxzLCBpdCBydW5zIG9uY2Ugd2l0aCBzdGF0aWMgZGF0YS5cblxuSWYgSSB3ZXJlIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgLCBJIHdvdWxkIG5lZWQgdG8gcHJvdmlkZSBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgLiBTcGVjaWZ5aW5nIGBGb2N1c1N5bWJvbHM9W1wieGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZVwiLCBcInhiY19zbnByaW50X2NtZGxpbmVcIl1gIHdvdWxkIGRpcmVjdCB0aGUgZnV6emVyIHRvd2FyZHMgdGhlc2UgZnVuY3Rpb25zLiBCdXQsIGFuZCB0aGlzIGlzIGNydWNpYWwsIHRoZSBmdXp6ZXIgKmNhbm5vdCogcmVhY2ggdGhlbSB2aWEgaXRzIHVzdWFsIHN5c2NhbGwtYmFzZWQgaW5wdXQuIEl0IHdpbGwganVzdCBzZWUgdGhlIGZ1bmN0aW9ucyBleGVjdXRlIG9uY2UgcGVyIFZNIGJvb3QuIFN5emthbGxlciBjb2xsZWN0cyBib290IGNvdmVyYWdlLCBidXQgaXQgY2FuJ3QgbXV0YXRlIHRoZXNlIGlucHV0cy4gQWxzbywgZXZlbiB3aXRoIHRoZSBjb21tYW5kLWxpbmUgZnV6emluZyBjb25maWd1cmF0aW9uLCBpdCdzIGEgZml4ZWQgc3RyaW5nLlxuXG5UaGUgcHJvbXB0IHdhbnRzIG1lIHRvIFwiZGV0ZXJtaW5lIGlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIiBDaGFuZ2VzIHRoYXQgb25seSBoYXBwZW4gb25jZSBhdCBib290IHdpdGggc3RhdGljIGRhdGEgYXJlIG5vdCBzb21ldGhpbmcgYSBzeXN0ZW0gY2FsbCBmdXp6ZXIgY2FuIG1lYW5pbmdmdWxseSB0ZXN0LiBJJ20gZ29pbmcgdG8gbG9vayBhZ2FpbiB0byBzZWUgaWYgYHhiY19zbnByaW50X2NtZGxpbmVgIGlzIHVzZWQgYW55d2hlcmUgZWxzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUyODUsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE2OjQ0OjI3LjA1ODUwMjgyM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY1Mjc5MjAwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4YmNfc25wcmludF9jbWRsaW5lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oPTI2NT1pbnQgX19pbml0IHhiY19ub2RlX2NvbXBvc2Vfa2V5X2FmdGVyKHN0cnVjdCB4YmNfbm9kZSAqcm9vdCxcXG4tLVxcbmluY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oLTI2OC0vKiBSZW5kZXIga2V5L3ZhbHVlIHBhaXJzIHVuZGVyIEByb290IGFzIGEgZmxhdCBjbWRsaW5lIHN0cmluZyAqL1xcbmluY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oOjI2OTppbnQgX19pbml0IHhiY19zbnByaW50X2NtZGxpbmUoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgc3RydWN0IHhiY19ub2RlICpyb290KTtcXG5pbmNsdWRlL2xpbnV4L2Jvb3Rjb25maWcuaC0yNzAtXFxuLS1cXG5pbml0L21haW4uYz0zMjg9c3RhdGljIGNoYXIgKiBfX2luaXQgeGJjX21ha2VfY21kbGluZShjb25zdCBjaGFyICprZXkpXFxuLS1cXG5pbml0L21haW4uYy0zMzgtXFx0LyogQ291bnQgcmVxdWlyZWQgYnVmZmVyIHNpemUgKi9cXG5pbml0L21haW4uYzozMzk6XFx0bGVuID0geGJjX3NucHJpbnRfY21kbGluZShOVUxMLCAwLCByb290KTtcXG5pbml0L21haW4uYy0zNDAtXFx0aWYgKGxlbiBcXHUwMDNjPSAwKVxcbi0tXFxuaW5pdC9tYWluLmMtMzQ4LVxcbmluaXQvbWFpbi5jOjM0OTpcXHRyZXQgPSB4YmNfc25wcmludF9jbWRsaW5lKG5ld19jbWRsaW5lLCBsZW4gKyAxLCByb290KTtcXG5pbml0L21haW4uYy0zNTAtXFx0aWYgKHJldCBcXHUwMDNjIDAgfHwgcmV0IFxcdTAwM2UgbGVuKSB7XFxuLS1cXG5saWIvYm9vdGNvbmZpZy5jPTU4PXN0YXRpYyB2b2lkIF9faW5pdCBzdHJfcHJlcGVuZChjaGFyICpkc3QsIHNpemVfdCBkc3RfbGVuLFxcbi0tXFxubGliL2Jvb3Rjb25maWcuYy03MS0gKiBib290Y29uZmlnIHRvIEBkc3QuIFRoZSByZW5kZXJlZCBzdHJpbmcgYWxyZWFkeSBlbmRzIHdpdGggYSBzaW5nbGVcXG5saWIvYm9vdGNvbmZpZy5jOjcyOiAqIHNwYWNlICh0aGUgeGJjX3NucHJpbnRfY21kbGluZSgpIGludmFyaWFudCksIHdoaWNoIHNlcnZlcyBhcyB0aGVcXG5saWIvYm9vdGNvbmZpZy5jLTczLSAqIHNlcGFyYXRvciBiZXR3ZWVuIHRoZSBlbWJlZGRlZCBrZXlzIGFuZCBhbnkgZXhpc3RpbmcgY29udGVudCBvZiBAZHN0Llxcbi0tXFxubGliL2Jvb3Rjb25maWcuYz00ODk9c3RhdGljIGNoYXIgeGJjX25hbWVidWZbWEJDX0tFWUxFTl9NQVhdIF9faW5pdGRhdGE7XFxuLS1cXG5saWIvYm9vdGNvbmZpZy5jLTQ5My0vKipcXG5saWIvYm9vdGNvbmZpZy5jOjQ5NDogKiB4YmNfc25wcmludF9jbWRsaW5lKCkgLSBSZW5kZXIgYm9vdGNvbmZpZyBrZXlzIHVuZGVyIEByb290IGFzIGEgY21kbGluZSBzdHJpbmdcXG5saWIvYm9vdGNvbmZpZy5jLTQ5NS0gKiBAYnVmOiBEZXN0aW5hdGlvbiBidWZmZXIgKG1heSBiZSBOVUxMIHdoZW4gQHNpemUgaXMgMCB0byBxdWVyeSB0aGUgbGVuZ3RoKVxcbi0tXFxubGliL2Jvb3Rjb25maWcuYy01MDQtICovXFxubGliL2Jvb3Rjb25maWcuYzo1MDU6aW50IF9faW5pdCB4YmNfc25wcmludF9jbWRsaW5lKGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIHN0cnVjdCB4YmNfbm9kZSAqcm9vdClcXG5saWIvYm9vdGNvbmZpZy5jLTUwNi17XFxuLS1cXG50b29scy9ib290Y29uZmlnL21haW4uYz0yODk9c3RhdGljIGludCBzaG93X3hiY19rZXJuZWxfY21kbGluZSh2b2lkKVxcbi0tXFxudG9vbHMvYm9vdGNvbmZpZy9tYWluLmMtMjk4LVxcbnRvb2xzL2Jvb3Rjb25maWcvbWFpbi5jOjI5OTpcXHRsZW4gPSB4YmNfc25wcmludF9jbWRsaW5lKE5VTEwsIDAsIHJvb3QpO1xcbnRvb2xzL2Jvb3Rjb25maWcvbWFpbi5jLTMwMC1cXHRpZiAobGVuIFxcdTAwM2MgMCkge1xcbi0tXFxudG9vbHMvYm9vdGNvbmZpZy9tYWluLmMtMzEwLVxcbnRvb2xzL2Jvb3Rjb25maWcvbWFpbi5jOjMxMTpcXHRyZXQgPSB4YmNfc25wcmludF9jbWRsaW5lKGJ1ZiwgbGVuICsgMSwgcm9vdCk7XFxudG9vbHMvYm9vdGNvbmZpZy9tYWluLmMtMzEyLVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE2OjQ0OjI5LjcxMTMwMDExNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjgwNTUyNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQ6IE5vdCBXb3J0aCBGdXp6aW5nKipcblxuT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IHRoaXMgY29kZSBpcyBzb2xlbHkgdXNlZCB3aXRoaW4gYGluaXQvbWFpbi5jYCAoYW5kIHRoYXQncyBhbiBgX19pbml0YCBmdW5jdGlvbikgYW5kIHRoZSBgdG9vbHMvYm9vdGNvbmZpZy9tYWluLmNgIHVzZXJzcGFjZSB0b29sLiBUaGlzIHNjcmVhbXMgXCJlYXJseSBib290IGNvZGVcIiB0byBtZS5cblxuVGhlIGNvcmUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBjb25zdGl0dXRlIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCAqc2hvdWxkKiBiZSBmdXp6ZWQ/IFRoZSBwcm9tcHQgZ3VpZGVzIG1lOiBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6IC4uLiBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuXCIgSSBkb24ndCBzZWUgYSBkaXJlY3QgaW5zdHJ1Y3Rpb24gc2F5aW5nIFwiZmFsc2UgZm9yIGVhcmx5IGJvb3QsXCIgYnV0IEknbSB0aGlua2luZyBhYm91dCBpdDogdGhpcyBpcyAqZWFybHkgYm9vdCogY29kZSBwcm9jZXNzaW5nICpzdGF0aWMqIGRhdGEuIFN5emthbGxlcidzIHN0cmVuZ3RoIGlzIGluIG11dGF0aW5nIHN5c2NhbGxzLiBJdCBjYW4ndCBtdXRhdGUgdGhlIGtlcm5lbCBpbWFnZSBvciB0aGUgaW5pdHJkIGRpcmVjdGx5LiBUaHVzLCBpbiB0aGUgY29udGV4dCBvZiBzeXNjYWxsLWJhc2VkIGZ1enppbmcsIHRoaXMgaXMgdW4tZnV6emFibGUuXG5cblRvIGJlIHRob3JvdWdoLCBJJ20gY2hlY2tpbmcgaWYgYW55IHN5c2ZzIG9yIHByb2NmcyBpbnRlcmZhY2VzIGhhdmUgYmVlbiBhZGRlZC4gTm8sIHRoZSBjaGFuZ2VzIGFyZSB0byBgc2V0dXBfYXJjaGAgYW5kIGBzZXR1cF9ib290X2NvbmZpZ2AuIFRoZSBwYXRjaCBhZGRzIGB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lYCB1c2VkIGJ5IGBzZXR1cF9hcmNoYCBhbmQgbW9kaWZpZXMgYHhiY19zbnByaW50X2NtZGxpbmVgIGNhbGxlZCBmcm9tIGBzZXR1cF9ib290X2NvbmZpZ2AuIEl0IGFsc28gaW50cm9kdWNlcyBgdG9vbHMvYm9vdGNvbmZpZ2AgYnVpbGQgc3RlcHMgYW5kIGBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUdgLlxuXG5UaGVyZWZvcmUsIEknbSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZz1mYWxzZWAuIEknbGwgZXhwbGFpbiB0aGF0IHRoZSBjaGFuZ2VzIGFyZSBjb25maW5lZCB0byBlYXJseSBib290IGluaXRpYWxpemF0aW9uIHJvdXRpbmVzIChgX19pbml0YCBmdW5jdGlvbnMpIHRoYXQgZGVhbCB3aXRoIHN0YXRpYywgYnVpbGQtdGltZSBvciBpbml0cmQgZGF0YS4gU2luY2UgdGhpcyBjb2RlIGFuZCBkYXRhIGFyZSBub3QgcmVhY2hhYmxlIG9yIG11dGFibGUgYnkgYSBzeXNjYWxsIGZ1enplciwgZnV6emluZyBpcyB1bnByb2R1Y3RpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTgzLCJPdXRwdXRUb2tlbnMiOjE0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxNjo0NDozNy45OTE4NTY1NzZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYnVpbGQtdGltZSBmZWF0dXJlIHRvIHJlbmRlciBlbWJlZGRlZCBib290Y29uZmlnIGludG8gYSBjbWRsaW5lIHN0cmluZyBhbmQgcHJlcGVuZHMgaXQgZHVyaW5nIGVhcmx5IGJvb3QgKGBzZXR1cF9hcmNoYCkuIEl0IGFsc28gZml4ZXMgYSBidWcgaW4gYHhiY19zbnByaW50X2NtZGxpbmVgIHdoaWNoIGlzIG9ubHkgY2FsbGVkIGR1cmluZyBlYXJseSBib290IChgc2V0dXBfYm9vdF9jb25maWdgKS4gQWxsIG1vZGlmaWVkIGtlcm5lbCBjb2RlIGlzIG1hcmtlZCBgX19pbml0YCwgcnVucyBleGFjdGx5IG9uY2UgZHVyaW5nIGJvb3QsIGFuZCBwcm9jZXNzZXMgc3RhdGljIGRhdGEgKGZyb20gdGhlIGtlcm5lbCBpbWFnZSBvciBpbml0cmQpLiBTaW5jZSB0aGVyZSBpcyBubyB3YXkgZm9yIGEgc3lzY2FsbCBmdXp6ZXIgdG8gcmVhY2ggdGhpcyBjb2RlIG9yIG11dGF0ZSBpdHMgaW5wdXRzLCBpdCBjYW5ub3QgYmUgbWVhbmluZ2Z1bGx5IGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBidWlsZC10aW1lIGZlYXR1cmUgdG8gcmVuZGVyIGVtYmVkZGVkIGJvb3Rjb25maWcgaW50byBhIGNtZGxpbmUgc3RyaW5nIGFuZCBwcmVwZW5kcyBpdCBkdXJpbmcgZWFybHkgYm9vdCAoYHNldHVwX2FyY2hgKS4gSXQgYWxzbyBmaXhlcyBhIGJ1ZyBpbiBgeGJjX3NucHJpbnRfY21kbGluZWAgd2hpY2ggaXMgb25seSBjYWxsZWQgZHVyaW5nIGVhcmx5IGJvb3QgKGBzZXR1cF9ib290X2NvbmZpZ2ApLiBBbGwgbW9kaWZpZWQga2VybmVsIGNvZGUgaXMgbWFya2VkIGBfX2luaXRgLCBydW5zIGV4YWN0bHkgb25jZSBkdXJpbmcgYm9vdCwgYW5kIHByb2Nlc3NlcyBzdGF0aWMgZGF0YSAoZnJvbSB0aGUga2VybmVsIGltYWdlIG9yIGluaXRyZCkuIFNpbmNlIHRoZXJlIGlzIG5vIHdheSBmb3IgYSBzeXNjYWxsIGZ1enplciB0byByZWFjaCB0aGlzIGNvZGUgb3IgbXV0YXRlIGl0cyBpbnB1dHMsIGl0IGNhbm5vdCBiZSBtZWFuaW5nZnVsbHkgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwchxx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-23 16:29:38 +0000 UTC FinishedAt: 2026-06-23 16:44:39 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE2OjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBidWlsZC10aW1lIGZlYXR1cmUgdG8gcmVuZGVyIGVtYmVkZGVkIGJvb3Rjb25maWcgaW50byBhIGNtZGxpbmUgc3RyaW5nIGFuZCBwcmVwZW5kcyBpdCBkdXJpbmcgZWFybHkgYm9vdCAoYHNldHVwX2FyY2hgKS4gSXQgYWxzbyBmaXhlcyBhIGJ1ZyBpbiBgeGJjX3NucHJpbnRfY21kbGluZWAgd2hpY2ggaXMgb25seSBjYWxsZWQgZHVyaW5nIGVhcmx5IGJvb3QgKGBzZXR1cF9ib290X2NvbmZpZ2ApLiBBbGwgbW9kaWZpZWQga2VybmVsIGNvZGUgaXMgbWFya2VkIGBfX2luaXRgLCBydW5zIGV4YWN0bHkgb25jZSBkdXJpbmcgYm9vdCwgYW5kIHByb2Nlc3NlcyBzdGF0aWMgZGF0YSAoZnJvbSB0aGUga2VybmVsIGltYWdlIG9yIGluaXRyZCkuIFNpbmNlIHRoZXJlIGlzIG5vIHdheSBmb3IgYSBzeXNjYWxsIGZ1enplciB0byByZWFjaCB0aGlzIGNvZGUgb3IgbXV0YXRlIGl0cyBpbnB1dHMsIGl0IGNhbm5vdCBiZSBtZWFuaW5nZnVsbHkgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxNjo0MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDlkZjkyOWFlY2E5YmM1MjNhYjcwODlmYWZiYmQ2NjExNmVlNzQzYjVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAyMyAxNjo0MzoxMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Jvb3Rjb25maWcucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdFxuaW5kZXggZjcxMjc1ODQ3MmQ1YzYuLjM0OWNlZmJiMmJiY2RkIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdFxuQEAgLTIzNCw2ICYjNDM7MjM0LDg3IEBAIEtjb25maWcgb3B0aW9uIHNlbGVjdGVkLlxuIE5vdGUgdGhhdCBldmVuIGlmIHlvdSBzZXQgdGhpcyBvcHRpb24sIHlvdSBjYW4gb3ZlcnJpZGUgdGhlIGVtYmVkZGVkXG4gYm9vdGNvbmZpZyBieSBhbm90aGVyIGJvb3Rjb25maWcgd2hpY2ggYXR0YWNoZWQgdG8gdGhlIGluaXRyZC5cbiBcbiYjNDM7UmVuZGVyaW5nIEVtYmVkZGVkIGtlcm5lbC4qIEtleXMgYXQgQnVpbGQgVGltZVxuJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzO1xuJiM0MztCeSBkZWZhdWx0LCB0aGUgZW1iZWRkZWQgYm9vdGNvbmZpZyAoYGBDT05GSUdfQk9PVF9DT05GSUdfRU1CRUQ9eWBgKSBpc1xuJiM0MztwYXJzZWQgYXQgcnVudGltZSwgYWZ0ZXIgYGBwYXJzZV9lYXJseV9wYXJhbSgpYGAgaGFzIGFscmVhZHkgcnVuLiBFYXJseVxuJiM0MztwYXJhbWV0ZXIgaGFuZGxlcnMgKGBgbWVtPWBgLCBgYGVhcmx5Y29uPWBgLCBgYGxvZ2xldmVsPWBgLCAuLi4pIHRoZXJlZm9yZVxuJiM0MztjYW5ub3Qgc2VlIHZhbHVlcyBzdXBwbGllZCB2aWEgdGhlIGVtYmVkZGVkIGBga2VybmVsYGAgc3VidHJlZS5cbiYjNDM7XG4mIzQzO2BgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHYGAgcmVzb2x2ZXMgdGhpcyBieSByZW5kZXJpbmcgdGhlXG4mIzQzO2Bga2VybmVsYGAgc3VidHJlZSBvZiBgYENPTkZJR19CT09UX0NPTkZJR19FTUJFRF9GSUxFYGAgaW50byBhIGZsYXQgY21kbGluZVxuJiM0MztzdHJpbmcgYXQga2VybmVsIGJ1aWxkIHRpbWUgKHZpYSBgYHRvb2xzL2Jvb3Rjb25maWcgLUNgYCkgYW5kIHByZXBlbmRpbmdcbiYjNDM7aXQgdG8gYGBib290X2NvbW1hbmRfbGluZWBgIGR1cmluZyBlYXJseSBhcmNoaXRlY3R1cmUgc2V0dXAsIHNvIHRoZSBrZXlzXG4mIzQzO2FyZSB2aXNpYmxlIHRvIGBgcGFyc2VfZWFybHlfcGFyYW0oKWBgLlxuJiM0MztcbiYjNDM7VGhlIG9wdGlvbiByZXF1aXJlcyBgYENPTkZJR19CT09UX0NPTkZJR19FTUJFRD15YGAsIGEgbm9uLWVtcHR5XG4mIzQzO2BgQ09ORklHX0JPT1RfQ09ORklHX0VNQkVEX0ZJTEVgYCwgYW5kIGFuIGFyY2hpdGVjdHVyZSB0aGF0IHNlbGVjdHNcbiYjNDM7YGBDT05GSUdfQVJDSF9TVVBQT1JUU19DTURMSU5FX0ZST01fQk9PVENPTkZJR2BgLiBDdXJyZW50bHkgb25seSB4ODZcbiYjNDM7c2VsZWN0cyBpdDsgb24gb3RoZXIgYXJjaGl0ZWN0dXJlcyB0aGUgZW1iZWRkZWQgYm9vdGNvbmZpZyBzdGlsbCB3b3JrcyxcbiYjNDM7YnV0IG9ubHkgdGhyb3VnaCB0aGUgbGF0ZSBydW50aW1lIHBhcnNlci5cbiYjNDM7XG4mIzQzO1RoZSBzYW1lIGBgYm9vdGNvbmZpZ2BgIG9wdC1pbiBhcHBsaWVzIGFzIGVsc2V3aGVyZTogdGhlIHJlbmRlcmVkIGtleXNcbiYjNDM7YXJlIHByZXBlbmRlZCBvbmx5IHdoZW4gYGBib290Y29uZmlnYGAgKGluIGFueSBmb3JtKSBhcHBlYXJzIG9uIHRoZVxuJiM0MztrZXJuZWwgY29tbWFuZCBsaW5lLCBvciB3aGVuIGBgQ09ORklHX0JPT1RfQ09ORklHX0ZPUkNFYGAgaXMgc2V0LCB3aGljaFxuJiM0MztkZWZhdWx0cyB0byBgYHlgYCB3aGVuIGBgQ09ORklHX0JPT1RfQ09ORklHX0VNQkVEYGAgaXMgc2V0LlxuJiM0MztcbiYjNDM7Rm9yIGV4YW1wbGUsIGdpdmVuOjpcbiYjNDM7XG4mIzQzOyBrZXJuZWwge1xuJiM0MzsgICBsb2dsZXZlbCA9IDdcbiYjNDM7ICAgbWVtID0gNEdcbiYjNDM7IH1cbiYjNDM7XG4mIzQzO3RoZSBrZXJuZWwgYm9vdHMgYXMgaWYgYGBsb2dsZXZlbD03IG1lbT00R2BgIGhhZCBiZWVuIHByZXBlbmRlZCB0byB0aGVcbiYjNDM7Ym9vdGxvYWRlciBjb21tYW5kIGxpbmUsIHdpdGggdGhlIHZhbHVlcyB2aXNpYmxlIHRvIGVhcmx5LXBhcnNlZFxuJiM0MztoYW5kbGVycy4gQ29tbWEtc2VwYXJhdGVkIHZhbHVlcyBhcmUgc3RpbGwgZXhwYW5kZWQgaW50byBtdWx0aXBsZVxuJiM0MztjbWRsaW5lIGVudHJpZXMgcGVyIHRoZSBib290Y29uZmlnIGFycmF5IGNvbnZlbnRpb24gLS0gdGhlIGVtYmVkZGVkXG4mIzQzO2Bga2VybmVsLmVhcmx5Y29uID0gXCYjMzQ7dWFydDgyNTAsaW8sMHgzZjhcJiMzNDtgYCBtdXN0IGJlIHF1b3RlZCB0byBsYW5kIGFzIGFcbiYjNDM7c2luZ2xlIGBgZWFybHljb249YGAgZW50cnksIGV4YWN0bHkgYXMgZm9yIHRoZSBydW50aW1lIHBhcnNlci5cbiYjNDM7XG4mIzQzO0lmIHRoZSByZW5kZXJlZCBzdHJpbmcgd291bGQgbm90IGZpdCBpbiBgYENPTU1BTkRfTElORV9TSVpFYGAgdG9nZXRoZXJcbiYjNDM7d2l0aCB0aGUgZXhpc3RpbmcgY29tbWFuZCBsaW5lLCB0aGUgcHJlcGVuZCBpcyBza2lwcGVkIGFuZCBhbiBlcnJvciBpc1xuJiM0Mztsb2dnZWQsIHNvIGFuIG92ZXJzaXplZCBlbWJlZGRlZCBib290Y29uZmlnIGNhbm5vdCBicmljayBhIGJvb3QuXG4mIzQzO1xuJiM0MztJbnRlcmFjdGlvbiB3aXRoIG90aGVyIGNvbW1hbmQgbGluZSBhbmQgYm9vdGNvbmZpZyBzb3VyY2VzXG4mIzQzO35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5cbiYjNDM7XG4mIzQzO1dpdGggYGBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUc9eWBgIHRoZSByZW5kZXJlZCBgYGtlcm5lbGBgXG4mIzQzO3N1YnRyZWUgYmVoYXZlcyBsaWtlIGEgYnVpbGQtdGltZSBjb21tYW5kIGxpbmUgKHNpbWlsYXIgdG9cbiYjNDM7YGBDT05GSUdfQ01ETElORWBgKSwgbm90IGxpa2UgYSBib290Y29uZmlnIHNvdXJjZS4gSXQgaXMgcHJlcGVuZGVkIHRvXG4mIzQzO2BgYm9vdF9jb21tYW5kX2xpbmVgYCBpbiBgYHNldHVwX2FyY2goKWBgLCBiZWZvcmUgYGBwYXJzZV9lYXJseV9wYXJhbSgpYGBcbiYjNDM7YW5kIGxvbmcgYmVmb3JlIHRoZSBydW50aW1lIHBhcnNlciBsb29rcyBhdCBhbiBpbml0cmQuIE9wdGlvbnMgY2FuIHJlYWNoXG4mIzQzO3RoZSBrZXJuZWwgZnJvbSB1cCB0byBmb3VyIHBsYWNlczpcbiYjNDM7XG4mIzQzOy0gQm9vdGxvYWRlciBjb21tYW5kIGxpbmU6IHRoZSBhcmd1bWVudHMgdGhlIGJvb3QgbG9hZGVyIHBhc3Nlcy4gVGhlXG4mIzQzOyAgZW1iZWRkZWQgY21kbGluZSBpcyBwcmVwZW5kZWQgaW4gZnJvbnQgb2YgdGhlbSwgc28gZm9yIGxhc3Qtb25lLXdpbnNcbiYjNDM7ICBwYXJhbWV0ZXJzIGEgYm9vdGxvYWRlciBvcHRpb24gc3RpbGwgb3ZlcnJpZGVzIHRoZSBlbWJlZGRlZCB2YWx1ZS5cbiYjNDM7ICBWaXNpYmxlIGluIC9wcm9jL2NtZGxpbmUuXG4mIzQzOy0gRW1iZWRkZWQgY21kbGluZSAodGhpcyBvcHRpb24pOiB0aGUgcmVuZGVyZWQgYGBrZXJuZWxgYCBzdWJ0cmVlLFxuJiM0MzsgIHByZXBlbmRlZCBlYXJseSBzbyBpdCBpcyBzZWVuIGJ5IGBgcGFyc2VfZWFybHlfcGFyYW0oKWBgLiBWaXNpYmxlIGluXG4mIzQzOyAgL3Byb2MvY21kbGluZS5cbiYjNDM7LSBJbml0cmQgYm9vdGNvbmZpZzogcGFyc2VkIGxhdGUgaW4gYGBzZXR1cF9ib290X2NvbmZpZygpYGA7IGl0c1xuJiM0MzsgIGBga2VybmVsYGAga2V5cyBhcmUgcGxhY2VkIGFoZWFkIG9mIGBgYm9vdF9jb21tYW5kX2xpbmVgYCwgaS5lLiBiZWZvcmVcbiYjNDM7ICB0aGUgZW1iZWRkZWQgY21kbGluZSwgc28gbGFzdC13aW5zIGZhdm9ycyB0aGUgZW1iZWRkZWQgdmFsdWVzLiBBcyBhXG4mIzQzOyAgYm9vdGNvbmZpZyBzb3VyY2UsIGFuIGluaXRyZCBib290Y29uZmlnIHN0aWxsIHJlcGxhY2VzIHRoZSBlbWJlZGRlZFxuJiM0MzsgIGJvb3Rjb25maWcuIFZpc2libGUgaW4gL3Byb2MvY21kbGluZSBhbmQgL3Byb2MvYm9vdGNvbmZpZy5cbiYjNDM7LSBFbWJlZGRlZCBib290Y29uZmlnIChydW50aW1lKTogcGFyc2VkIGxhdGUsIG9ubHkgd2hlbiBubyBpbml0cmRcbiYjNDM7ICBib290Y29uZmlnIGlzIHByZXNlbnQuIFZpc2libGUgaW4gL3Byb2MvY21kbGluZSBhbmQgL3Byb2MvYm9vdGNvbmZpZy5cbiYjNDM7XG4mIzQzO1NvIHdpdGggdGhpcyBvcHRpb24gdGhlIGVtYmVkZGVkIGBga2VybmVsLipgYCB2YWx1ZXMgdGFrZSBwcmVjZWRlbmNlXG4mIzQzO292ZXIgYW4gaW5pdHJkIGJvb3Rjb25maWcmIzM5O3MgYGBrZXJuZWwuKmBgIHZhbHVlczogZm9yIGVhcmx5IHBhcmFtZXRlcnNcbiYjNDM7dGhlIGluaXRyZCBpcyBub3QgcGFyc2VkIHlldCwgYW5kIGZvciBvcmRpbmFyeSBwYXJhbWV0ZXJzIHRoZSBlbWJlZGRlZFxuJiM0MztrZXlzIGxhbmQgbGF0ZXIgaW4gdGhlIGNvbW1hbmQgbGluZS4gSWYgeW91IG5lZWQgYW4gaW5pdHJkIGJvb3Rjb25maWcgdG9cbiYjNDM7b3ZlcnJpZGUgdGhlIGVtYmVkZGVkIGBga2VybmVsLipgYCBrZXlzLCBsZWF2ZSB0aGlzIG9wdGlvbiBvZmYgYW5kIHJlbHlcbiYjNDM7b24gdGhlIHJ1bnRpbWUgcGFyc2VyLlxuJiM0MztcbiYjNDM7VGhlIHJlbmRlcmVkIHN0cmluZyBpcyBwYXJ0IG9mIHRoZSBjb21tYW5kIGxpbmUsIHNvIGl0IGFwcGVhcnMgaW5cbiYjNDM7L3Byb2MvY21kbGluZS4gSXQgaXMgZGVsaWJlcmF0ZWx5IG5vdCBzaG93biBpbiAvcHJvYy9ib290Y29uZmlnOiB0aGF0XG4mIzQzO2ZpbGUga2VlcHMgcmVwb3J0aW5nIHRoZSBwYXJzZWQgYm9vdGNvbmZpZyB0cmVlIC0tIHRoZSBpbml0cmQgYm9vdGNvbmZpZ1xuJiM0MztpZiBwcmVzZW50LCBvdGhlcndpc2UgdGhlIGVtYmVkZGVkIGJvb3Rjb25maWcgLS0gaW5kZXBlbmRlbnQgb2Ygd2hldGhlclxuJiM0MztidWlsZC10aW1lIGNtZGxpbmUgcmVuZGVyaW5nIGlzIGVuYWJsZWQuXG4mIzQzO1xuIEtlcm5lbCBwYXJhbWV0ZXJzIHZpYSBCb290IENvbmZpZ1xuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IGQ5NWQzZWY3Nzc3M2ZhLi43NTMzNDE5NzczY2E5YyAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4mIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSU1xuQEAgLTk4MTMsNiAmIzQzOzk4MTMsNyBAQCBGOlx0ZnMvcHJvYy9ib290Y29uZmlnLmNcbiBGOlx0aW5jbHVkZS9saW51eC9ib290Y29uZmlnLmhcbiBGOlx0bGliL2Jvb3Rjb25maWctZGF0YS5TXG4gRjpcdGxpYi9ib290Y29uZmlnLmNcbiYjNDM7RjpcdGxpYi9lbWJlZGRlZC1jbWRsaW5lLlNcbiBGOlx0dG9vbHMvYm9vdGNvbmZpZy8qXG4gRjpcdHRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy8qXG4gXG5kaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZVxuaW5kZXggZDFjNTk1ZGI1NWM5NTYuLjFmNTZhNjg5MmZlYjQwIDEwMDY0NFxuLS0tIGEvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL01ha2VmaWxlXG5AQCAtMTUzMSw2ICYjNDM7MTUzMSwyMiBAQCBwcmVwYXJlOiB0b29scy9icGYvcmVzb2x2ZV9idGZpZHNcbiBlbmRpZlxuIGVuZGlmXG4gXG4mIzQzOyMgdG9vbHMvYm9vdGNvbmZpZyByZW5kZXJzIHRoZSBlbWJlZGRlZCBib290Y29uZmlnIGludG8gYSBjbWRsaW5lIGF0IGJ1aWxkIHRpbWUuXG4mIzQzO2lmZGVmIENPTkZJR19DTURMSU5FX0ZST01fQk9PVENPTkZJR1xuJiM0MztwcmVwYXJlOiB0b29scy9ib290Y29uZmlnXG4mIzQzO2VuZGlmXG4mIzQzO1xuJiM0MzsjIHRvb2xzL2Jvb3Rjb25maWcgaXMgcnVuIG9uIHRoZSBidWlsZCBob3N0IGR1cmluZyBwcmVwYXJlLCBzbyBmb3JjZSBhIGhvc3RcbiYjNDM7IyBiaW5hcnkgaGVyZTsgaXRzIG93biBNYWtlZmlsZSBrZWVwcyAkKENDKSBmb3Igc3RhbmRhbG9uZSBhbmQgY3Jvc3MgYnVpbGRzLlxuJiM0MzsjIENST1NTX0NPTVBJTEU9IGlzIGNsZWFyZWQgc28gdG9vbHMvc2NyaXB0cy9NYWtlZmlsZS5pbmNsdWRlIGRvZXMgbm90IGluamVjdFxuJiM0MzsjIHRoZSB0YXJnZXQmIzM5O3MgLS10YXJnZXQ9Ly0tc3lzcm9vdD0gZmxhZ3MgaW50byB0aGUgaG9zdCBjbGFuZyBpbnZvY2F0aW9uIHVuZGVyXG4mIzQzOyMgTExWTT0xIGNyb3NzIGJ1aWxkcyAod2hpY2ggd291bGQgcHJvZHVjZSBhIHRhcmdldCBiaW5hcnkgdGhhdCBmYWlscyB0byBleGVjKS5cbiYjNDM7dG9vbHMvYm9vdGNvbmZpZzogZXhwb3J0IENDIDo9ICQoSE9TVENDKVxuJiM0Mzt0b29scy9ib290Y29uZmlnOiBGT1JDRVxuJiM0MztcdCQoUSlta2RpciAtcCAkKG9ianRyZWUpL3Rvb2xzXG4mIzQzO1x0JChRKSQoTUFLRSkgTz0kKGFic3BhdGggJChvYmp0cmVlKSkgc3ViZGlyPXRvb2xzIC1DICQoc3JjdHJlZSkvdG9vbHMvIFxcXG4mIzQzO1x0XHRib290Y29uZmlnIENST1NTX0NPTVBJTEU9XG4mIzQzO1xuICMgVGhlIHRvb2xzIGJ1aWxkIHN5c3RlbSBpcyBub3QgYSBwYXJ0IG9mIEtidWlsZCBhbmQgdGVuZHMgdG8gaW50cm9kdWNlXG4gIyBpdHMgb3duIHVuaXF1ZSBpc3N1ZXMuIElmIHlvdSBuZWVkIHRvIGludGVncmF0ZSBhIG5ldyB0b29sIGludG8gS2J1aWxkLFxuICMgcGxlYXNlIGNvbnNpZGVyIGxvY2F0aW5nIHRoYXQgdG9vbCBvdXRzaWRlIHRoZSB0b29scy8gdHJlZSBhbmQgdXNpbmcgdGhlXG5AQCAtMTU1Nyw2ICYjNDM7MTU3MywxNSBAQCBpZm5lcSAoJCh3aWxkY2FyZCAkKG9ianRvb2xfTykpLClcbiBcdCQoUSkkKE1BS0UpIC1zQyAkKGFic19zcmN0cmVlKS90b29scy9vYmp0b29sIE89JChvYmp0b29sX08pIHNyY3RyZWU9JChhYnNfc3JjdHJlZSkgJChwYXRzdWJzdCBvYmp0b29sXyUsJSwkQClcbiBlbmRpZlxuIFxuJiM0MztQSE9OWSAmIzQzOz0gYm9vdGNvbmZpZ19jbGVhblxuJiM0MztcbiYjNDM7Ym9vdGNvbmZpZ19PID0gJChhYnNwYXRoICQob2JqdHJlZSkpL3Rvb2xzL2Jvb3Rjb25maWdcbiYjNDM7XG4mIzQzO2Jvb3Rjb25maWdfY2xlYW46XG4mIzQzO2lmbmVxICgkKHdpbGRjYXJkICQoYm9vdGNvbmZpZ19PKSksKVxuJiM0MztcdCQoUSkkKE1BS0UpIC1zQyAkKHNyY3RyZWUpL3Rvb2xzL2Jvb3Rjb25maWcgTz0kKGJvb3Rjb25maWdfTykgY2xlYW5cbiYjNDM7ZW5kaWZcbiYjNDM7XG4gdG9vbHMvOiBGT1JDRVxuIFx0JChRKW1rZGlyIC1wICQob2JqdHJlZSkvdG9vbHNcbiBcdCQoUSkkKE1BS0UpIE89JChhYnNwYXRoICQob2JqdHJlZSkpIHN1YmRpcj10b29scyAtQyAkKHNyY3RyZWUpL3Rvb2xzL1xuQEAgLTE3MzIsNyAmIzQzOzE3NTcsNyBAQCB2bWxpbnV4Y2xlYW46XG4gXHQkKFEpJChDT05GSUdfU0hFTEwpICQoc3JjdHJlZSkvc2NyaXB0cy9saW5rLXZtbGludXguc2ggY2xlYW5cbiBcdCQoUSkkKGlmICQoQVJDSF9QT1NUTElOSyksICQoTUFLRSkgLWYgJChBUkNIX1BPU1RMSU5LKSBjbGVhbilcbiBcbi1jbGVhbjogYXJjaGNsZWFuIHZtbGludXhjbGVhbiByZXNvbHZlX2J0Zmlkc19jbGVhbiBvYmp0b29sX2NsZWFuXG4mIzQzO2NsZWFuOiBhcmNoY2xlYW4gdm1saW51eGNsZWFuIHJlc29sdmVfYnRmaWRzX2NsZWFuIG9ianRvb2xfY2xlYW4gYm9vdGNvbmZpZ19jbGVhblxuIFxuICMgbXJwcm9wZXIgLSBEZWxldGUgYWxsIGdlbmVyYXRlZCBmaWxlcywgaW5jbHVkaW5nIC5jb25maWdcbiAjXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWdcbmluZGV4IGZhNGYwMDc5NjE0Y2QwLi5hZGJjYWFkODAxMzA4MyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L0tjb25maWdcbkBAIC0xMjcsNiAmIzQzOzEyNyw3IEBAIGNvbmZpZyBYODZcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX05VTUFfQkFMQU5DSU5HXHRpZiBYODZfNjRcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0tNQVBfTE9DQUxfRk9SQ0VfTUFQXHRpZiBOUl9DUFVTIFx1MDAzYz0gNDA5NlxuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfQ0ZJXHRcdGlmIFg4Nl82NFxuJiM0MztcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXG4gXHRzZWxlY3QgQVJDSF9VU0VTX0NGSV9UUkFQU1x0XHRpZiBYODZfNjQgXHUwMDI2XHUwMDI2IENGSVxuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTFRPX0NMQU5HXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19MVE9fQ0xBTkdfVEhJTlxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC94ODYva2VybmVsL3NldHVwLmNcbmluZGV4IDQ2ODgyY2U3OWMzYTRkLi5jOTczYTJjZWJjZDA0ZSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuY1xuQEAgLTYsNiAmIzQzOzYsNyBAQFxuICAqIHBhcnRzIG9mIGVhcmx5IGtlcm5lbCBpbml0aWFsaXphdGlvbi5cbiAgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9hY3BpLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYm9vdGNvbmZpZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29uc29sZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3B1LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jcmFzaF9kdW1wLmhcdTAwM2VcbkBAIC04ODEsNiAmIzQzOzg4MiwzNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgeDg2X3JlcG9ydF9ueCh2b2lkKVxuICAqIE5vdGU6IE9uIHg4Nl82NCwgZml4bWFwcyBhcmUgcmVhZHkgZm9yIHVzZSBldmVuIGJlZm9yZSB0aGlzIGlzIGNhbGxlZC5cbiAgKi9cbiBcbiYjNDM7I2lmZGVmIENPTkZJR19DTURMSU5FX0ZST01fQk9PVENPTkZJR1xuJiM0MztzdGF0aWMgaW50IF9faW5pdCBib290Y29uZmlnX29wdGluKGNoYXIgKnBhcmFtLCBjaGFyICp2YWwsXG4mIzQzO1x0XHRcdFx0ICAgY29uc3QgY2hhciAqdW51c2VkLCB2b2lkICphcmcpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXN0cmNtcChwYXJhbSwgXCYjMzQ7Ym9vdGNvbmZpZ1wmIzM0OykpXG4mIzQzO1x0XHQqKGJvb2wgKilhcmcgPSB0cnVlO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBEaWQgdGhlIHVzZXIgb3B0IGluIHRvIGJvb3Rjb25maWcgb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmU/IFVzZVxuJiM0MzsgKiBwYXJzZV9hcmdzKCkgc28gdGhpcyBtYXRjaGVzIHNldHVwX2Jvb3RfY29uZmlnKCkgZXhhY3RseSwgaW5jbHVkaW5nXG4mIzQzOyAqIHN0b3BwaW5nIGF0IHRoZSBcJiMzNDstLVwmIzM0OyB0aGF0IHNlcGFyYXRlcyBpbml0IGFyZ3VtZW50cy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIF9faW5pdCBib290Y29uZmlnX2NtZGxpbmVfcmVxdWVzdGVkKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdGF0aWMgY2hhciB0bXBfY21kbGluZVtDT01NQU5EX0xJTkVfU0laRV0gX19pbml0ZGF0YTtcbiYjNDM7XHRib29sIGZvdW5kID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmIChJU19FTkFCTEVEKENPTkZJR19CT09UX0NPTkZJR19GT1JDRSkpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0c3Ryc2NweSh0bXBfY21kbGluZSwgYm9vdF9jb21tYW5kX2xpbmUsIENPTU1BTkRfTElORV9TSVpFKTtcbiYjNDM7XHRpZiAoSVNfRVJSKHBhcnNlX2FyZ3MoXCYjMzQ7Ym9vdGNvbmZpZ1wmIzM0OywgdG1wX2NtZGxpbmUsIE5VTEwsIDAsIDAsIDAsXG4mIzQzO1x0XHRcdCAgICAgIFx1MDAyNmZvdW5kLCBib290Y29uZmlnX29wdGluKSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmb3VuZDtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gdm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKVxuIHtcbiAjaWZkZWYgQ09ORklHX1g4Nl8zMlxuQEAgLTkyNCw2ICYjNDM7OTU2LDE3IEBAIHZvaWQgX19pbml0IHNldHVwX2FyY2goY2hhciAqKmNtZGxpbmVfcClcbiBcdGJ1aWx0aW5fY21kbGluZV9hZGRlZCA9IHRydWU7XG4gI2VuZGlmXG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUdcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFByZXBlbmQgdGhlIGJ1aWxkLXRpbWUtcmVuZGVyZWQgZW1iZWRkZWQgXCYjMzQ7a2VybmVsXCYjMzQ7IGtleXMgaGVyZSBzb1xuJiM0MztcdCAqIHBhcnNlX2Vhcmx5X3BhcmFtKCkgYmVsb3cgc2VlcyB0aGVtLCBnYXRpbmcgb24gdGhlIHNhbWUgb3B0LWluXG4mIzQzO1x0ICogYXMgdGhlIHJ1bnRpbWUgcGFyc2VyIChzZWUgYm9vdGNvbmZpZ19jbWRsaW5lX3JlcXVlc3RlZCgpKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoYm9vdGNvbmZpZ19jbWRsaW5lX3JlcXVlc3RlZCgpKVxuJiM0MztcdFx0eGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZShib290X2NvbW1hbmRfbGluZSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgQ09NTUFORF9MSU5FX1NJWkUpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gXHRzdHJzY3B5KGNvbW1hbmRfbGluZSwgYm9vdF9jb21tYW5kX2xpbmUsIENPTU1BTkRfTElORV9TSVpFKTtcbiBcdCpjbWRsaW5lX3AgPSBjb21tYW5kX2xpbmU7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmggYi9pbmNsdWRlL2xpbnV4L2Jvb3Rjb25maWcuaFxuaW5kZXggMWM3ZjNiNzRmZmNmMzguLjQzMzI0YjQ3N2YxM2FiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oXG5AQCAtMzA4LDQgJiM0MzszMDgsMTMgQEAgc3RhdGljIGlubGluZSBjb25zdCBjaGFyICp4YmNfZ2V0X2VtYmVkZGVkX2Jvb3Rjb25maWcoc2l6ZV90ICpzaXplKVxuIH1cbiAjZW5kaWZcbiBcbiYjNDM7LyogQnVpbGQtdGltZS1yZW5kZXJlZCBib290Y29uZmlnIGNtZGxpbmUgcHJlcGVuZGVkIGluIHNldHVwX2FyY2goKSAqL1xuJiM0MzsjaWZkZWYgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXG4mIzQzO3ZvaWQgX19pbml0IHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSk7XG4mIzQzO2Jvb2wgX19pbml0IHhiY19lbWJlZGRlZF9jbWRsaW5lX2FwcGxpZWQodm9pZCk7XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lKGNoYXIgKmRzdCwgc2l6ZV90IHNpemUpIHsgfVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgeGJjX2VtYmVkZGVkX2NtZGxpbmVfYXBwbGllZCh2b2lkKSB7IHJldHVybiBmYWxzZTsgfVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvaW5pdC9LY29uZmlnIGIvaW5pdC9LY29uZmlnXG5pbmRleCA0NDAzZTUzODc2ZTEwNy4uMWNmNmNmNjI5OGM0ZWUgMTAwNjQ0XG4tLS0gYS9pbml0L0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2luaXQvS2NvbmZpZ1xuQEAgLTE1NjYsNiAmIzQzOzE1NjYsNDIgQEAgY29uZmlnIEJPT1RfQ09ORklHX0VNQkVEX0ZJTEVcbiBcdCAgVGhpcyBib290Y29uZmlnIHdpbGwgYmUgdXNlZCBpZiB0aGVyZSBpcyBubyBpbml0cmQgb3Igbm8gb3RoZXJcbiBcdCAgYm9vdGNvbmZpZyBpbiB0aGUgaW5pdHJkLlxuIFxuJiM0Mztjb25maWcgQVJDSF9TVVBQT1JUU19DTURMSU5FX0ZST01fQk9PVENPTkZJR1xuJiM0MztcdGJvb2xcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBTaWxlbnQgc3ltYm9sOyBubyBDIGNvZGUgcmVhZHMgaXQgZGlyZWN0bHkuIEFyY2hpdGVjdHVyZXNcbiYjNDM7XHQgIHNlbGVjdCBpdCBvbmNlIHRoZWlyIHNldHVwX2FyY2goKSBjYWxsc1xuJiM0MztcdCAgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZSgpIGJlZm9yZSBwYXJzZV9lYXJseV9wYXJhbSgpLlxuJiM0MztcdCAgSXRzIG9ubHkgcm9sZSBpcyB0byBnYXRlIHRoZSB1c2VyLXZpc2libGVcbiYjNDM7XHQgIENNRExJTkVfRlJPTV9CT09UQ09ORklHIG9wdGlvbiBwZXItYXJjaCwgdGhlIHNhbWVcbiYjNDM7XHQgIEFSQ0hfU1VQUE9SVFNfKiBpZGlvbSB1c2VkIGJ5IEFSQ0hfU1VQUE9SVFNfQ0ZJLCBldGMuXG4mIzQzO1xuJiM0Mztjb25maWcgQ01ETElORV9GUk9NX0JPT1RDT05GSUdcbiYjNDM7XHRib29sIFwmIzM0O1JlbmRlciBlbWJlZGRlZCBib290Y29uZmlnIGFzIGtlcm5lbCBjbWRsaW5lIGF0IGJ1aWxkIHRpbWVcJiMzNDtcbiYjNDM7XHRkZXBlbmRzIG9uIEJPT1RfQ09ORklHX0VNQkVEX0ZJTEUgIT0gXCYjMzQ7XCYjMzQ7XG4mIzQzO1x0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXG4mIzQzO1x0ZGVwZW5kcyBvbiBDTURMSU5FID0gXCYjMzQ7XCYjMzQ7XG4mIzQzO1x0ZGVmYXVsdCBuXG4mIzQzO1x0aGVscFxuJiM0MztcdCAgUmVuZGVyIHRoZSBcJiMzNDtrZXJuZWxcJiMzNDsgc3VidHJlZSBvZiB0aGUgZW1iZWRkZWQgYm9vdGNvbmZpZyBmaWxlIGludG8gYVxuJiM0MztcdCAgZmxhdCBjbWRsaW5lIHN0cmluZyBhdCBrZXJuZWwgYnVpbGQgdGltZSBhbmQgcHJlcGVuZCBpdCB0b1xuJiM0MztcdCAgYm9vdF9jb21tYW5kX2xpbmUgZHVyaW5nIGVhcmx5IGFyY2hpdGVjdHVyZSBzZXR1cC4gVGhpcyBtYWtlc1xuJiM0MztcdCAgZWFybHlfcGFyYW0oKSBoYW5kbGVycyAoZS5nLiBtZW09LCBlYXJseWNvbj0sIGxvZ2xldmVsPSkgc2VlIHRoZVxuJiM0MztcdCAgdmFsdWVzIHN1cHBsaWVkIHZpYSB0aGUgZW1iZWRkZWQgYm9vdGNvbmZpZy5cbiYjNDM7XG4mIzQzO1x0ICBUaGUgcnVudGltZSBib290Y29uZmlnIHBhcnNlciBpcyB1bmFmZmVjdGVkLCBzbyB0cmVlLXN0cnVjdHVyZWRcbiYjNDM7XHQgIGNvbnN1bWVycyBzdWNoIGFzIGZ0cmFjZSBib290LXRpbWUgdHJhY2luZyBrZWVwIHdvcmtpbmcuXG4mIzQzO1xuJiM0MztcdCAgTm90ZTogd2hlbiBhbiBpbml0cmQgYWxzbyBjYXJyaWVzIGEgYm9vdGNvbmZpZywgaXRzIFwmIzM0O2tlcm5lbFwmIzM0O1xuJiM0MztcdCAgc3VidHJlZSBpcyBzdGlsbCBwYXJzZWQgYXQgcnVudGltZSwgYnV0IHRoZSBlbWJlZGRlZCBcJiMzNDtrZXJuZWxcJiMzNDtcbiYjNDM7XHQgIGtleXMgcmVtYWluIGluIGJvb3RfY29tbWFuZF9saW5lIGZvciBwYXJzZV9lYXJseV9wYXJhbSgpIGFuZFxuJiM0MztcdCAgZW5kIHVwIGxhdGVyIHRoYW4gdGhlIGluaXRyZCBrZXlzIGluIHNhdmVkX2NvbW1hbmRfbGluZSwgc29cbiYjNDM7XHQgIHBhcnNlX2FyZ3MoKSBsYXN0LXdpbnMgZmF2b3JzIHRoZSBlbWJlZGRlZCB2YWx1ZXMuIElmIHlvdSBuZWVkXG4mIzQzO1x0ICBpbml0cmQgdG8gb3ZlcnJpZGUgZW1iZWRkZWQga2VybmVsLioga2V5cywgbGVhdmUgdGhpcyBvcHRpb25cbiYjNDM7XHQgIG9mZi5cbiYjNDM7XG4mIzQzO1x0ICBJZiB1bnN1cmUsIHNheSBOLlxuJiM0MztcbiBjb25maWcgQ01ETElORV9MT0dfV1JBUF9JREVBTF9MRU5cbiBcdGludCBcJiMzNDtMZW5ndGggdG8gdHJ5IHRvIHdyYXAgdGhlIGNtZGxpbmUgd2hlbiBsb2dnZWQgYXQgYm9vdFwmIzM0O1xuIFx0ZGVmYXVsdCAxMDIxXG5kaWZmIC0tZ2l0IGEvaW5pdC9tYWluLmMgYi9pbml0L21haW4uY1xuaW5kZXggZTM2MzIzMmI0MjhiNDcuLjI2MGJkNTI0MmY5NGU4IDEwMDY0NFxuLS0tIGEvaW5pdC9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2luaXQvbWFpbi5jXG5AQCAtMzc4LDEyICYjNDM7Mzc4LDE1IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9ib290X2NvbmZpZyh2b2lkKVxuIFx0aW50IHBvcywgcmV0O1xuIFx0c2l6ZV90IHNpemU7XG4gXHRjaGFyICplcnI7XG4mIzQzO1x0Ym9vbCBmcm9tX2VtYmVkZGVkID0gZmFsc2U7XG4gXG4gXHQvKiBDdXQgb3V0IHRoZSBib290Y29uZmlnIGRhdGEgZXZlbiBpZiB3ZSBoYXZlIG5vIGJvb3Rjb25maWcgb3B0aW9uICovXG4gXHRkYXRhID0gZ2V0X2Jvb3RfY29uZmlnX2Zyb21faW5pdHJkKFx1MDAyNnNpemUpO1xuIFx0LyogSWYgdGhlcmUgaXMgbm8gYm9vdGNvbmZpZyBpbiBpbml0cmQsIHRyeSBlbWJlZGRlZCBvbmUuICovXG4tXHRpZiAoIWRhdGEpXG4mIzQzO1x0aWYgKCFkYXRhKSB7XG4gXHRcdGRhdGEgPSB4YmNfZ2V0X2VtYmVkZGVkX2Jvb3Rjb25maWcoXHUwMDI2c2l6ZSk7XG4mIzQzO1x0XHRmcm9tX2VtYmVkZGVkID0gdHJ1ZTtcbiYjNDM7XHR9XG4gXG4gXHRzdHJzY3B5KHRtcF9jbWRsaW5lLCBib290X2NvbW1hbmRfbGluZSwgQ09NTUFORF9MSU5FX1NJWkUpO1xuIFx0ZXJyID0gcGFyc2VfYXJncyhcJiMzNDtib290Y29uZmlnXCYjMzQ7LCB0bXBfY21kbGluZSwgTlVMTCwgMCwgMCwgMCwgTlVMTCxcbkBAIC00MjEsOCAmIzQzOzQyNCwyNCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfYm9vdF9jb25maWcodm9pZClcbiBcdH0gZWxzZSB7XG4gXHRcdHhiY19nZXRfaW5mbyhcdTAwMjZyZXQsIE5VTEwpO1xuIFx0XHRwcl9pbmZvKFwmIzM0O0xvYWQgYm9vdGNvbmZpZzogJWxkIGJ5dGVzICVkIG5vZGVzXFxuXCYjMzQ7LCAobG9uZylzaXplLCByZXQpO1xuLVx0XHQvKiBrZXlzIHN0YXJ0aW5nIHdpdGggXCYjMzQ7a2VybmVsLlwmIzM0OyBhcmUgcGFzc2VkIHZpYSBjbWRsaW5lICovXG4tXHRcdGV4dHJhX2NvbW1hbmRfbGluZSA9IHhiY19tYWtlX2NtZGxpbmUoXCYjMzQ7a2VybmVsXCYjMzQ7KTtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBrZXlzIHN0YXJ0aW5nIHdpdGggXCYjMzQ7a2VybmVsLlwmIzM0OyBhcmUgcGFzc2VkIHZpYSBjbWRsaW5lLiBXaGVuXG4mIzQzO1x0XHQgKiB0aGlzIGJvb3Rjb25maWcgY2FtZSBmcm9tIHRoZSBlbWJlZGRlZCBzb3VyY2UgYW5kXG4mIzQzO1x0XHQgKiBzZXR1cF9hcmNoKCkgYWxyZWFkeSBwcmVwZW5kZWQgdGhlIHJlbmRlcmVkIFwmIzM0O2tlcm5lbFwmIzM0OyBzdWJ0cmVlXG4mIzQzO1x0XHQgKiB0byBib290X2NvbW1hbmRfbGluZSwgcmVuZGVyaW5nIGFnYWluIGhlcmUgd291bGQgZHVwbGljYXRlXG4mIzQzO1x0XHQgKiB0aGUga2V5cyBpbiBzYXZlZF9jb21tYW5kX2xpbmUgYW5kIG1ha2UgYWNjdW11bGF0aW5nIGhhbmRsZXJzXG4mIzQzO1x0XHQgKiAoY29uc29sZT0sIGVhcmx5Y29uPSwgLi4uKSByZS1yZWdpc3RlciB0aGUgc2FtZSB2YWx1ZS4gU2tpcFxuJiM0MztcdFx0ICogb25seSB3aGVuIHRoZSBwcmVwZW5kIHJlYWxseSBoYXBwZW5lZC5cbiYjNDM7XHRcdCAqXG4mIzQzO1x0XHQgKiBPbiBhcmNoZXMgdGhhdCBkbyBub3Qgc2VsZWN0IEFSQ0hfU1VQUE9SVFNfQ01ETElORV9GUk9NX0JPT1RDT05GSUcsXG4mIzQzO1x0XHQgKiBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUcgaXMgdW5zZWxlY3RhYmxlIGFuZFxuJiM0MztcdFx0ICogeGJjX2VtYmVkZGVkX2NtZGxpbmVfYXBwbGllZCgpIGNvbGxhcHNlcyB0byBhIHN0dWIgcmV0dXJuaW5nXG4mIzQzO1x0XHQgKiBmYWxzZSwgc28gdGhpcyBwYXRoIHN0aWxsIHJ1bnMgYW5kIHRoZSBlbWJlZGRlZCBcJiMzNDtrZXJuZWxcJiMzNDtcbiYjNDM7XHRcdCAqIGtleXMgcmVhY2ggdGhlIGNtZGxpbmUgdmlhIHRoZSBydW50aW1lIHBhcnNlciBleGFjdGx5IGFzXG4mIzQzO1x0XHQgKiBiZWZvcmUgdGhpcyBzZXJpZXMuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmICghZnJvbV9lbWJlZGRlZCB8fCAheGJjX2VtYmVkZGVkX2NtZGxpbmVfYXBwbGllZCgpKVxuJiM0MztcdFx0XHRleHRyYV9jb21tYW5kX2xpbmUgPSB4YmNfbWFrZV9jbWRsaW5lKFwmIzM0O2tlcm5lbFwmIzM0Oyk7XG4gXHRcdC8qIEFsc28sIFwmIzM0O2luaXQuXCYjMzQ7IGtleXMgYXJlIGluaXQgYXJndW1lbnRzICovXG4gXHRcdGV4dHJhX2luaXRfYXJncyA9IHhiY19tYWtlX2NtZGxpbmUoXCYjMzQ7aW5pdFwmIzM0Oyk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlIGIvbGliL01ha2VmaWxlXG5pbmRleCAyM2UwN2QxOWQwMWM5MC4uNGY5N2E1NGQxZTNkOWEgMTAwNjQ0XG4tLS0gYS9saWIvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2xpYi9NYWtlZmlsZVxuQEAgLTI3NCw2ICYjNDM7Mjc0LDIyIEBAIGZpbGVjaGtfZGVmYmNvbmYgPSBjYXQgJChvciAkKHJlYWwtcHJlcmVxcyksIC9kZXYvbnVsbClcbiAkKG9iaikvZGVmYXVsdC5iY29uZjogJChDT05GSUdfQk9PVF9DT05GSUdfRU1CRURfRklMRSkgRk9SQ0VcbiBcdCQoY2FsbCBmaWxlY2hrLGRlZmJjb25mKVxuIFxuJiM0MztvYmotJChDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUcpICYjNDM7PSBlbWJlZGRlZC1jbWRsaW5lLm9cbiYjNDM7JChvYmopL2VtYmVkZGVkLWNtZGxpbmUubzogJChvYmopL2VtYmVkZGVkX2NtZGxpbmUuYmluXG4mIzQzO1xuJiM0MzsjIFJlbmRlciB0aGUgYm9vdGNvbmZpZyBcJiMzNDtrZXJuZWxcJiMzNDsgc3VidHJlZSB0byBhIGZsYXQgY21kbGluZSBzdHJpbmcgdXNpbmdcbiYjNDM7IyB0aGUgdXNlcnNwYWNlIHRvb2xzL2Jvb3Rjb25maWcgcGFyc2VyICgtQyBtb2RlKS4gVGhlIHJ1bnRpbWUgcHJlcGVuZFxuJiM0MzsjIGhlbHBlciBlbmZvcmNlcyBDT01NQU5EX0xJTkVfU0laRSBhdCBib290LCBzbyBubyBidWlsZC10aW1lIHNpemVcbiYjNDM7IyBjaGVjayBpcyBwZXJmb3JtZWQgaGVyZSAoQ09NTUFORF9MSU5FX1NJWkUgaXMgYW4gYXJjaCBoZWFkZXJcbiYjNDM7IyBjb25zdGFudCwgbm90IGEgS2NvbmZpZyB2YWx1ZSkuXG4mIzQzO3F1aWV0X2NtZF9yZW5kZXJfY21kbGluZSA9IEJDT05GMkMgJEBcbiYjNDM7ICAgICAgY21kX3JlbmRlcl9jbWRsaW5lID0gXFxcbiYjNDM7XHQkKG9ianRyZWUpL3Rvb2xzL2Jvb3Rjb25maWcvYm9vdGNvbmZpZyAtQyAkXHUwMDNjIFx1MDAzZSAkQFxuJiM0MztcbiYjNDM7dGFyZ2V0cyAmIzQzOz0gZW1iZWRkZWRfY21kbGluZS5iaW5cbiYjNDM7JChvYmopL2VtYmVkZGVkX2NtZGxpbmUuYmluOiAkKG9iaikvZGVmYXVsdC5iY29uZiAkKG9ianRyZWUpL3Rvb2xzL2Jvb3Rjb25maWcvYm9vdGNvbmZpZyBGT1JDRVxuJiM0MztcdCQoY2FsbCBpZl9jaGFuZ2VkLHJlbmRlcl9jbWRsaW5lKVxuJiM0MztcbiBvYmotJChDT05GSUdfUkJUUkVFX1RFU1QpICYjNDM7PSByYnRyZWVfdGVzdC5vXG4gb2JqLSQoQ09ORklHX0lOVEVSVkFMX1RSRUVfVEVTVCkgJiM0Mzs9IGludGVydmFsX3RyZWVfdGVzdC5vXG4gXG5kaWZmIC0tZ2l0IGEvbGliL2Jvb3Rjb25maWcuYyBiL2xpYi9ib290Y29uZmlnLmNcbmluZGV4IGY0NDViNzcwM2ZkZDk2Li4wNWNiMWVhOWFmZGFlMyAxMDA2NDRcbi0tLSBhL2xpYi9ib290Y29uZmlnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2xpYi9ib290Y29uZmlnLmNcbkBAIC0xOSw2ICYjNDM7MTksNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vycm5vLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jYWNoZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGlsZXIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wcmludGsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwcmludGYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWJsb2NrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuQEAgLTM0LDYgJiM0MzszNSw4MyBAQCBjb25zdCBjaGFyICogX19pbml0IHhiY19nZXRfZW1iZWRkZWRfYm9vdGNvbmZpZyhzaXplX3QgKnNpemUpXG4gXHRyZXR1cm4gKCpzaXplKSA/IGVtYmVkZGVkX2Jvb3Rjb25maWdfZGF0YSA6IE5VTEw7XG4gfVxuICNlbmRpZlxuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19DTURMSU5FX0ZST01fQk9PVENPTkZJR1xuJiM0MzsvKiBlbWJlZGRlZF9rZXJuZWxfY21kbGluZSBpcyBkZWZpbmVkIGluIGVtYmVkZGVkLWNtZGxpbmUuUyAqL1xuJiM0MztleHRlcm4gX192aXNpYmxlIGNvbnN0IGNoYXIgZW1iZWRkZWRfa2VybmVsX2NtZGxpbmVbXTtcbiYjNDM7ZXh0ZXJuIF9fdmlzaWJsZSBjb25zdCBjaGFyIGVtYmVkZGVkX2tlcm5lbF9jbWRsaW5lX2VuZFtdO1xuJiM0MztcbiYjNDM7LyogU2V0IG9uY2UgdGhlIGVtYmVkZGVkIGNtZGxpbmUgaGFzIGFjdHVhbGx5IGJlZW4gcHJlcGVuZGVkLiAqL1xuJiM0MztzdGF0aWMgYm9vbCB4YmNfY21kbGluZV9hcHBsaWVkIF9faW5pdGRhdGE7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBzdHJfcHJlcGVuZCgpIC0gUHJlcGVuZCBAc3JjIGluIGZyb250IG9mIHRoZSBzdHJpbmcgaW4gQGRzdCwgaW4gcGxhY2VcbiYjNDM7ICogQGRzdDogTlVMLXRlcm1pbmF0ZWQgZGVzdGluYXRpb24gYnVmZmVyLCBjdXJyZW50bHkgQGRzdF9sZW4gYnl0ZXMgbG9uZ1xuJiM0MzsgKiBAZHN0X2xlbjogbGVuZ3RoIG9mIHRoZSBjdXJyZW50IEBkc3Qgc3RyaW5nIChleGNsdWRpbmcgaXRzIE5VTClcbiYjNDM7ICogQHNyYzogYnl0ZXMgdG8gcHJlcGVuZCAobm90IE5VTC10ZXJtaW5hdGVkKVxuJiM0MzsgKiBAc3JjX2xlbjogbnVtYmVyIG9mIGJ5dGVzIGZyb20gQHNyYyB0byBwcmVwZW5kXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBjYWxsZXIgbXVzdCBndWFyYW50ZWUgQGRzdCBoYXMgcm9vbSBmb3Igc3JjX2xlbiAmIzQzOyBkc3RfbGVuICYjNDM7IDEgYnl0ZXMuXG4mIzQzOyAqIE1vdmluZyBkc3RfbGVuICYjNDM7IDEgYnl0ZXMgY2FycmllcyBAZHN0JiMzOTtzIE5VTCB0ZXJtaW5hdG9yIHRvbywgc28gYW4gZW1wdHlcbiYjNDM7ICogQGRzdCBuZWVkcyBubyBzcGVjaWFsIGNhc2UuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBfX2luaXQgc3RyX3ByZXBlbmQoY2hhciAqZHN0LCBzaXplX3QgZHN0X2xlbixcbiYjNDM7XHRcdFx0ICAgICAgIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNyY19sZW4pXG4mIzQzO3tcbiYjNDM7XHRtZW1tb3ZlKGRzdCAmIzQzOyBzcmNfbGVuLCBkc3QsIGRzdF9sZW4gJiM0MzsgMSk7XG4mIzQzO1x0bWVtY3B5KGRzdCwgc3JjLCBzcmNfbGVuKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoKSAtIFByZXBlbmQgZW1iZWRkZWQgYm9vdGNvbmZpZyBjbWRsaW5lXG4mIzQzOyAqIEBkc3Q6IGNtZGxpbmUgYnVmZmVyIHRvIHByZXBlbmQgaW50byAobXVzdCBhbHJlYWR5IGNvbnRhaW4gYSBOVUwgYnl0ZSlcbiYjNDM7ICogQHNpemU6IHRvdGFsIGNhcGFjaXR5IG9mIEBkc3QgaW4gYnl0ZXNcbiYjNDM7ICpcbiYjNDM7ICogUHJlcGVuZCB0aGUgYnVpbGQtdGltZS1yZW5kZXJlZCBcJiMzNDtrZXJuZWxcJiMzNDsgc3VidHJlZSBvZiB0aGUgZW1iZWRkZWRcbiYjNDM7ICogYm9vdGNvbmZpZyB0byBAZHN0LiBUaGUgcmVuZGVyZWQgc3RyaW5nIGFscmVhZHkgZW5kcyB3aXRoIGEgc2luZ2xlXG4mIzQzOyAqIHNwYWNlICh0aGUgeGJjX3NucHJpbnRfY21kbGluZSgpIGludmFyaWFudCksIHdoaWNoIHNlcnZlcyBhcyB0aGVcbiYjNDM7ICogc2VwYXJhdG9yIGJldHdlZW4gdGhlIGVtYmVkZGVkIGtleXMgYW5kIGFueSBleGlzdGluZyBjb250ZW50IG9mIEBkc3QuXG4mIzQzOyAqIE9uIG92ZXJmbG93LCBsb2cgYW4gZXJyb3IgYW5kIGxlYXZlIEBkc3QgdW50b3VjaGVkIHJhdGhlciB0aGFuXG4mIzQzOyAqIHNpbGVudGx5IHRydW5jYXRpbmc6IGJvb3Rpbmcgd2l0aG91dCB0aGUgZW1iZWRkZWQgdmFsdWVzIGlzIGJldHRlclxuJiM0MzsgKiB0aGFuIHJlZnVzaW5nIHRvIGJvb3QsIGFuZCB0aGUgZXJyb3IgbWVzc2FnZSB0ZWxscyB0aGUgdXNlciB3aHlcbiYjNDM7ICogdGhlaXIgZW1iZWRkZWQga2V5cyBhcmUgbWlzc2luZy5cbiYjNDM7ICpcbiYjNDM7ICogSW50ZW5kZWQgdG8gYmUgY2FsbGVkIGZyb20gc2V0dXBfYXJjaCgpIGJlZm9yZSBwYXJzZV9lYXJseV9wYXJhbSgpIHNvXG4mIzQzOyAqIHRoYXQgZWFybHlfcGFyYW0oKSBoYW5kbGVycyBzZWUgdGhlIGVtYmVkZGVkIHZhbHVlcy5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgX19pbml0IHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHNpemVfdCBlbWJlZF9sZW4gPSBlbWJlZGRlZF9rZXJuZWxfY21kbGluZV9lbmQgLSBlbWJlZGRlZF9rZXJuZWxfY21kbGluZTtcbiYjNDM7XHRzaXplX3QgZHN0X2xlbjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFzaXplIHx8IGVtYmVkX2xlbiBcdTAwM2M9IDEpXHQvKiB0cmFpbGluZyBOVUwgb25seSAqL1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdGVtYmVkX2xlbi0tO1x0XHRcdC8qIGV4Y2x1ZGUgdHJhaWxpbmcgTlVMIGJ5dGUgKi9cbiYjNDM7XG4mIzQzO1x0ZHN0X2xlbiA9IHN0cm5sZW4oZHN0LCBzaXplKTtcbiYjNDM7XHRpZiAoZW1iZWRfbGVuICYjNDM7IGRzdF9sZW4gJiM0MzsgMSBcdTAwM2Ugc2l6ZSkge1xuJiM0MztcdFx0cHJfZXJyKFwmIzM0O2VtYmVkZGVkIGJvb3Rjb25maWcgY21kbGluZSAoJXp1IGJ5dGVzKSBkb2VzIG5vdCBmaXQgaW4gQ09NTUFORF9MSU5FX1NJWkUgd2l0aCAlenUgYnl0ZXMgYWxyZWFkeSB1c2VkOyBpZ25vcmluZyBlbWJlZGRlZCB2YWx1ZXNcXG5cJiMzNDssXG4mIzQzO1x0XHQgICAgICAgZW1iZWRfbGVuLCBkc3RfbGVuKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHN0cl9wcmVwZW5kKGRzdCwgZHN0X2xlbiwgZW1iZWRkZWRfa2VybmVsX2NtZGxpbmUsIGVtYmVkX2xlbik7XG4mIzQzO1x0eGJjX2NtZGxpbmVfYXBwbGllZCA9IHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkKCkgLSBEaWQgdGhlIGVtYmVkZGVkIGNtZGxpbmUgZ2V0IHByZXBlbmRlZD9cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuIHRydWUgaWYgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZSgpIGFjdHVhbGx5IHByZXBlbmRlZCB0aGVcbiYjNDM7ICogZW1iZWRkZWQgXCYjMzQ7a2VybmVsXCYjMzQ7IHN1YnRyZWUuIHNldHVwX2Jvb3RfY29uZmlnKCkgdXNlcyB0aGlzIHRvIGF2b2lkXG4mIzQzOyAqIHJlbmRlcmluZyB0aGUgc2FtZSBrZXlzIGEgc2Vjb25kIHRpbWUuXG4mIzQzOyAqL1xuJiM0Mztib29sIF9faW5pdCB4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4geGJjX2NtZGxpbmVfYXBwbGllZDtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gI2VuZGlmXG4gXG4gLypcbkBAIC00MjcsMTEgJiM0Mzs1MDUsMzAgQEAgc3RhdGljIGNoYXIgeGJjX25hbWVidWZbWEJDX0tFWUxFTl9NQVhdIF9faW5pdGRhdGE7XG4gaW50IF9faW5pdCB4YmNfc25wcmludF9jbWRsaW5lKGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIHN0cnVjdCB4YmNfbm9kZSAqcm9vdClcbiB7XG4gXHRzdHJ1Y3QgeGJjX25vZGUgKmtub2RlLCAqdm5vZGU7XG4tXHRjaGFyICplbmQgPSBidWYgJiM0Mzsgc2l6ZTtcbiBcdGNvbnN0IGNoYXIgKnZhbCwgKnE7XG4mIzQzO1x0c2l6ZV90IGxlbiA9IDA7XG4gXHRpbnQgcmV0O1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogVHJhY2sgdGhlIHJ1bm5pbmcgd3JpdHRlbiBsZW5ndGggcmF0aGVyIHRoYW4gYWR2YW5jaW5nIEBidWYsIHNvIHdlXG4mIzQzO1x0ICogbmV2ZXIgZm9ybSBcJiMzNDtidWYgJiM0Mzsgc2l6ZVwmIzM0OyBvciBcJiMzNDtidWYgJiM0Mzs9IHJldFwmIzM0OyB3aGlsZSBAYnVmIGlzIE5VTEwgKHRoZVxuJiM0MztcdCAqIHNpemUtcHJvYmUgY2FsbCBwYXNzZXMgYnVmPU5VTEwsIHNpemU9MCkuIE5VTEwgcG9pbnRlciBhcml0aG1ldGljXG4mIzQzO1x0ICogaXMgdW5kZWZpbmVkIGJlaGF2aW9yIGFuZCB0cmlwcyBob3N0IFVCU2FuIC8gRk9SVElGWV9TT1VSQ0Ugd2hlblxuJiM0MztcdCAqIHRoaXMgcmVuZGVyZXIgcnVucyBhdCBrZXJuZWwgYnVpbGQgdGltZS4gc25wcmludGYoTlVMTCwgMCwgLi4uKVxuJiM0MztcdCAqIGl0c2VsZiBpcyB3ZWxsIGRlZmluZWQgYW5kIHJldHVybnMgdGhlIHdvdWxkLWJlIGxlbmd0aC5cbiYjNDM7XHQgKi9cbiBcdHhiY19ub2RlX2Zvcl9lYWNoX2tleV92YWx1ZShyb290LCBrbm9kZSwgdmFsKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogQW4gZW1wdHkgb3IgdmFsdWUtb25seSBAcm9vdCAoZS5nLiBcJiMzNDtrZXJuZWwge31cJiMzNDsgb3JcbiYjNDM7XHRcdCAqIFwmIzM0O2tlcm5lbCA9IHhcJiMzNDssIHBvc3NpYmx5IGFsb25nc2lkZSBcJiMzNDtrZXJuZWwuZm9vID0gYmFyXCYjMzQ7KVxuJiM0MztcdFx0ICogeWllbGRzIEByb290IGl0c2VsZiBoZXJlLiBTa2lwIGl0OiBjb21wb3NpbmcgYSBrZXkgZm9yIGl0XG4mIzQzO1x0XHQgKiB3b3VsZCBmYWlsIHdpdGggLUVJTlZBTCwgeWV0IGFueSByZWFsIGRlc2NlbmRhbnQga2V5cyBtdXN0XG4mIzQzO1x0XHQgKiBzdGlsbCBiZSByZW5kZXJlZC4gQW4gZW50aXJlbHkgZW1wdHkgc3VidHJlZSB0aGVuIHJlbmRlcnNcbiYjNDM7XHRcdCAqIG5vdGhpbmcgYW5kIHJldHVybnMgMCByYXRoZXIgdGhhbiBhbiBlcnJvci5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKGtub2RlID09IHJvb3QpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiBcdFx0cmV0ID0geGJjX25vZGVfY29tcG9zZV9rZXlfYWZ0ZXIocm9vdCwga25vZGUsXG4gXHRcdFx0XHRcdHhiY19uYW1lYnVmLCBYQkNfS0VZTEVOX01BWCk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG5AQCAtNDM5LDEwICYjNDM7NTM2LDExIEBAIGludCBfX2luaXQgeGJjX3NucHJpbnRfY21kbGluZShjaGFyICpidWYsIHNpemVfdCBzaXplLCBzdHJ1Y3QgeGJjX25vZGUgKnJvb3QpXG4gXG4gXHRcdHZub2RlID0geGJjX25vZGVfZ2V0X2NoaWxkKGtub2RlKTtcbiBcdFx0aWYgKCF2bm9kZSkge1xuLVx0XHRcdHJldCA9IHNucHJpbnRmKGJ1ZiwgcmVzdChidWYsIGVuZCksIFwmIzM0OyVzIFwmIzM0OywgeGJjX25hbWVidWYpO1xuJiM0MztcdFx0XHRyZXQgPSBzbnByaW50ZihidWYgPyBidWYgJiM0MzsgbGVuIDogTlVMTCwgcmVzdChsZW4sIHNpemUpLFxuJiM0MztcdFx0XHRcdCAgICAgICBcJiMzNDslcyBcJiMzNDssIHhiY19uYW1lYnVmKTtcbiBcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdFx0cmV0dXJuIHJldDtcbi1cdFx0XHRidWYgJiM0Mzs9IHJldDtcbiYjNDM7XHRcdFx0bGVuICYjNDM7PSByZXQ7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcdFx0eGJjX2FycmF5X2Zvcl9lYWNoX3ZhbHVlKHZub2RlLCB2YWwpIHtcbkBAIC00NTIsMTUgJiM0Mzs1NTAsMTUgQEAgaW50IF9faW5pdCB4YmNfc25wcmludF9jbWRsaW5lKGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIHN0cnVjdCB4YmNfbm9kZSAqcm9vdClcbiBcdFx0XHQgKiB3aGl0ZXNwYWNlLlxuIFx0XHRcdCAqL1xuIFx0XHRcdHEgPSBzdHJwYnJrKHZhbCwgXCYjMzQ7IFxcdFxcclxcblwmIzM0OykgPyBcJiMzNDtcXFwmIzM0O1wmIzM0OyA6IFwmIzM0O1wmIzM0Oztcbi1cdFx0XHRyZXQgPSBzbnByaW50ZihidWYsIHJlc3QoYnVmLCBlbmQpLCBcJiMzNDslcz0lcyVzJXMgXCYjMzQ7LFxuLVx0XHRcdFx0ICAgICAgIHhiY19uYW1lYnVmLCBxLCB2YWwsIHEpO1xuJiM0MztcdFx0XHRyZXQgPSBzbnByaW50ZihidWYgPyBidWYgJiM0MzsgbGVuIDogTlVMTCwgcmVzdChsZW4sIHNpemUpLFxuJiM0MztcdFx0XHRcdCAgICAgICBcJiMzNDslcz0lcyVzJXMgXCYjMzQ7LCB4YmNfbmFtZWJ1ZiwgcSwgdmFsLCBxKTtcbiBcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdFx0cmV0dXJuIHJldDtcbi1cdFx0XHRidWYgJiM0Mzs9IHJldDtcbiYjNDM7XHRcdFx0bGVuICYjNDM7PSByZXQ7XG4gXHRcdH1cbiBcdH1cbiBcbi1cdHJldHVybiBidWYgLSAoZW5kIC0gc2l6ZSk7XG4mIzQzO1x0cmV0dXJuIGxlbjtcbiB9XG4gI3VuZGVmIHJlc3RcbiBcbmRpZmYgLS1naXQgYS9saWIvZW1iZWRkZWQtY21kbGluZS5TIGIvbGliL2VtYmVkZGVkLWNtZGxpbmUuU1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iZGE4MWI0YTQyYmVhZlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvbGliL2VtYmVkZGVkLWNtZGxpbmUuU1xuQEAgLTAsMCAmIzQzOzEsMTYgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbiYjNDM7LypcbiYjNDM7ICogRW1iZWQgdGhlIGJ1aWxkLXRpbWUtcmVuZGVyZWQgYm9vdGNvbmZpZyBcJiMzNDtrZXJuZWxcJiMzNDsgc3VidHJlZSBhcyBhIGZsYXRcbiYjNDM7ICogY21kbGluZSBzdHJpbmcuIHNldHVwX2FyY2goKSBwcmVwZW5kcyB0aGlzIHRvIGJvb3RfY29tbWFuZF9saW5lIG9uXG4mIzQzOyAqIGFyY2hpdGVjdHVyZXMgdGhhdCBzZWxlY3QgQVJDSF9TVVBQT1JUU19DTURMSU5FX0ZST01fQk9PVENPTkZJRy5cbiYjNDM7ICpcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzXG4mIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBCcmVubyBMZWl0YW8gXHUwMDNjbGVpdGFvQGRlYmlhbi5vcmdcdTAwM2VcbiYjNDM7ICovXG4mIzQzO1x0LnNlY3Rpb24gLmluaXQucm9kYXRhLmVtYmVkX2NtZGxpbmUsIFwmIzM0O2FcJiMzNDssICVwcm9nYml0c1xuJiM0MztcdC5nbG9iYWwgZW1iZWRkZWRfa2VybmVsX2NtZGxpbmVcbiYjNDM7ZW1iZWRkZWRfa2VybmVsX2NtZGxpbmU6XG4mIzQzO1x0LmluY2JpbiBcJiMzNDtsaWIvZW1iZWRkZWRfY21kbGluZS5iaW5cJiMzNDtcbiYjNDM7XHQuYnl0ZSAwXG4mIzQzO1x0Lmdsb2JhbCBlbWJlZGRlZF9rZXJuZWxfY21kbGluZV9lbmRcbiYjNDM7ZW1iZWRkZWRfa2VybmVsX2NtZGxpbmVfZW5kOlxuZGlmZiAtLWdpdCBhL3Rvb2xzL2Jvb3Rjb25maWcvTWFrZWZpbGUgYi90b29scy9ib290Y29uZmlnL01ha2VmaWxlXG5pbmRleCA5MGViNDdjOWQ4ZGU2Ny4uM2NiODA2NmQ1MTQxYmIgMTAwNjQ0XG4tLS0gYS90b29scy9ib290Y29uZmlnL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9ib290Y29uZmlnL01ha2VmaWxlXG5AQCAtMTUsNyAmIzQzOzE1LDcgQEAgb3ZlcnJpZGUgQ0ZMQUdTICYjNDM7PSAtV2FsbCAtZyAtSSQoQ1VSRElSKS9pbmNsdWRlXG4gQUxMX1RBUkdFVFMgOj0gYm9vdGNvbmZpZ1xuIEFMTF9QUk9HUkFNUyA6PSAkKHBhdHN1YnN0ICUsJChPVVRQVVQpJSwkKEFMTF9UQVJHRVRTKSlcbiBcbi1hbGw6ICQoQUxMX1BST0dSQU1TKSB0ZXN0XG4mIzQzO2FsbDogJChBTExfUFJPR1JBTVMpXG4gXG4gJChPVVRQVVQpYm9vdGNvbmZpZzogbWFpbi5jIGluY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oICQoTElCU1JDKVxuIFx0JChDQykgJChmaWx0ZXIgJS5jLCReKSAkKENGTEFHUykgJChMREZMQUdTKSAtbyAkQFxuQEAgLTI3LDQgJiM0MzsyNyw0IEBAIGluc3RhbGw6ICQoQUxMX1BST0dSQU1TKVxuIFx0aW5zdGFsbCAkKE9VVFBVVClib290Y29uZmlnICQoREVTVERJUikkKGJpbmRpcilcbiBcbiBjbGVhbjpcbi1cdCQoUk0pIC1mICQoT1VUUFVUKSoubyAkKEFMTF9QUk9HUkFNUylcbiYjNDM7XHRybSAtZiAkKE9VVFBVVCkqLm8gJChBTExfUFJPR1JBTVMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTY6NDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGJ1aWxkLXRpbWUgZmVhdHVyZSB0byByZW5kZXIgZW1iZWRkZWQgYm9vdGNvbmZpZyBpbnRvIGEgY21kbGluZSBzdHJpbmcgYW5kIHByZXBlbmRzIGl0IGR1cmluZyBlYXJseSBib290IChgc2V0dXBfYXJjaGApLiBJdCBhbHNvIGZpeGVzIGEgYnVnIGluIGB4YmNfc25wcmludF9jbWRsaW5lYCB3aGljaCBpcyBvbmx5IGNhbGxlZCBkdXJpbmcgZWFybHkgYm9vdCAoYHNldHVwX2Jvb3RfY29uZmlnYCkuIEFsbCBtb2RpZmllZCBrZXJuZWwgY29kZSBpcyBtYXJrZWQgYF9faW5pdGAsIHJ1bnMgZXhhY3RseSBvbmNlIGR1cmluZyBib290LCBhbmQgcHJvY2Vzc2VzIHN0YXRpYyBkYXRhIChmcm9tIHRoZSBrZXJuZWwgaW1hZ2Ugb3IgaW5pdHJkKS4gU2luY2UgdGhlcmUgaXMgbm8gd2F5IGZvciBhIHN5c2NhbGwgZnV6emVyIHRvIHJlYWNoIHRoaXMgY29kZSBvciBtdXRhdGUgaXRzIGlucHV0cywgaXQgY2Fubm90IGJlIG1lYW5pbmdmdWxseSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5ZGY5MjlhZWNhOWJjNTIzYWI3MDg5ZmFmYmJkNjYxMTZlZTc0M2I1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdW4gMjMgMTY6NDM6MTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Jvb3Rjb25maWcucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdAppbmRleCBmNzEyNzU4NDcyZDVjNi4uMzQ5Y2VmYmIyYmJjZGQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYm9vdGNvbmZpZy5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdApAQCAtMjM0LDYgJiM0MzsyMzQsODcgQEAgS2NvbmZpZyBvcHRpb24gc2VsZWN0ZWQuCiBOb3RlIHRoYXQgZXZlbiBpZiB5b3Ugc2V0IHRoaXMgb3B0aW9uLCB5b3UgY2FuIG92ZXJyaWRlIHRoZSBlbWJlZGRlZAogYm9vdGNvbmZpZyBieSBhbm90aGVyIGJvb3Rjb25maWcgd2hpY2ggYXR0YWNoZWQgdG8gdGhlIGluaXRyZC4KIAomIzQzO1JlbmRlcmluZyBFbWJlZGRlZCBrZXJuZWwuKiBLZXlzIGF0IEJ1aWxkIFRpbWUKJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7CiYjNDM7QnkgZGVmYXVsdCwgdGhlIGVtYmVkZGVkIGJvb3Rjb25maWcgKGBgQ09ORklHX0JPT1RfQ09ORklHX0VNQkVEPXlgYCkgaXMKJiM0MztwYXJzZWQgYXQgcnVudGltZSwgYWZ0ZXIgYGBwYXJzZV9lYXJseV9wYXJhbSgpYGAgaGFzIGFscmVhZHkgcnVuLiBFYXJseQomIzQzO3BhcmFtZXRlciBoYW5kbGVycyAoYGBtZW09YGAsIGBgZWFybHljb249YGAsIGBgbG9nbGV2ZWw9YGAsIC4uLikgdGhlcmVmb3JlCiYjNDM7Y2Fubm90IHNlZSB2YWx1ZXMgc3VwcGxpZWQgdmlhIHRoZSBlbWJlZGRlZCBgYGtlcm5lbGBgIHN1YnRyZWUuCiYjNDM7CiYjNDM7YGBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUdgYCByZXNvbHZlcyB0aGlzIGJ5IHJlbmRlcmluZyB0aGUKJiM0MztgYGtlcm5lbGBgIHN1YnRyZWUgb2YgYGBDT05GSUdfQk9PVF9DT05GSUdfRU1CRURfRklMRWBgIGludG8gYSBmbGF0IGNtZGxpbmUKJiM0MztzdHJpbmcgYXQga2VybmVsIGJ1aWxkIHRpbWUgKHZpYSBgYHRvb2xzL2Jvb3Rjb25maWcgLUNgYCkgYW5kIHByZXBlbmRpbmcKJiM0MztpdCB0byBgYGJvb3RfY29tbWFuZF9saW5lYGAgZHVyaW5nIGVhcmx5IGFyY2hpdGVjdHVyZSBzZXR1cCwgc28gdGhlIGtleXMKJiM0MzthcmUgdmlzaWJsZSB0byBgYHBhcnNlX2Vhcmx5X3BhcmFtKClgYC4KJiM0MzsKJiM0MztUaGUgb3B0aW9uIHJlcXVpcmVzIGBgQ09ORklHX0JPT1RfQ09ORklHX0VNQkVEPXlgYCwgYSBub24tZW1wdHkKJiM0MztgYENPTkZJR19CT09UX0NPTkZJR19FTUJFRF9GSUxFYGAsIGFuZCBhbiBhcmNoaXRlY3R1cmUgdGhhdCBzZWxlY3RzCiYjNDM7YGBDT05GSUdfQVJDSF9TVVBQT1JUU19DTURMSU5FX0ZST01fQk9PVENPTkZJR2BgLiBDdXJyZW50bHkgb25seSB4ODYKJiM0MztzZWxlY3RzIGl0OyBvbiBvdGhlciBhcmNoaXRlY3R1cmVzIHRoZSBlbWJlZGRlZCBib290Y29uZmlnIHN0aWxsIHdvcmtzLAomIzQzO2J1dCBvbmx5IHRocm91Z2ggdGhlIGxhdGUgcnVudGltZSBwYXJzZXIuCiYjNDM7CiYjNDM7VGhlIHNhbWUgYGBib290Y29uZmlnYGAgb3B0LWluIGFwcGxpZXMgYXMgZWxzZXdoZXJlOiB0aGUgcmVuZGVyZWQga2V5cwomIzQzO2FyZSBwcmVwZW5kZWQgb25seSB3aGVuIGBgYm9vdGNvbmZpZ2BgIChpbiBhbnkgZm9ybSkgYXBwZWFycyBvbiB0aGUKJiM0MztrZXJuZWwgY29tbWFuZCBsaW5lLCBvciB3aGVuIGBgQ09ORklHX0JPT1RfQ09ORklHX0ZPUkNFYGAgaXMgc2V0LCB3aGljaAomIzQzO2RlZmF1bHRzIHRvIGBgeWBgIHdoZW4gYGBDT05GSUdfQk9PVF9DT05GSUdfRU1CRURgYCBpcyBzZXQuCiYjNDM7CiYjNDM7Rm9yIGV4YW1wbGUsIGdpdmVuOjoKJiM0MzsKJiM0Mzsga2VybmVsIHsKJiM0MzsgICBsb2dsZXZlbCA9IDcKJiM0MzsgICBtZW0gPSA0RwomIzQzOyB9CiYjNDM7CiYjNDM7dGhlIGtlcm5lbCBib290cyBhcyBpZiBgYGxvZ2xldmVsPTcgbWVtPTRHYGAgaGFkIGJlZW4gcHJlcGVuZGVkIHRvIHRoZQomIzQzO2Jvb3Rsb2FkZXIgY29tbWFuZCBsaW5lLCB3aXRoIHRoZSB2YWx1ZXMgdmlzaWJsZSB0byBlYXJseS1wYXJzZWQKJiM0MztoYW5kbGVycy4gQ29tbWEtc2VwYXJhdGVkIHZhbHVlcyBhcmUgc3RpbGwgZXhwYW5kZWQgaW50byBtdWx0aXBsZQomIzQzO2NtZGxpbmUgZW50cmllcyBwZXIgdGhlIGJvb3Rjb25maWcgYXJyYXkgY29udmVudGlvbiAtLSB0aGUgZW1iZWRkZWQKJiM0MztgYGtlcm5lbC5lYXJseWNvbiA9ICYjMzQ7dWFydDgyNTAsaW8sMHgzZjgmIzM0O2BgIG11c3QgYmUgcXVvdGVkIHRvIGxhbmQgYXMgYQomIzQzO3NpbmdsZSBgYGVhcmx5Y29uPWBgIGVudHJ5LCBleGFjdGx5IGFzIGZvciB0aGUgcnVudGltZSBwYXJzZXIuCiYjNDM7CiYjNDM7SWYgdGhlIHJlbmRlcmVkIHN0cmluZyB3b3VsZCBub3QgZml0IGluIGBgQ09NTUFORF9MSU5FX1NJWkVgYCB0b2dldGhlcgomIzQzO3dpdGggdGhlIGV4aXN0aW5nIGNvbW1hbmQgbGluZSwgdGhlIHByZXBlbmQgaXMgc2tpcHBlZCBhbmQgYW4gZXJyb3IgaXMKJiM0Mztsb2dnZWQsIHNvIGFuIG92ZXJzaXplZCBlbWJlZGRlZCBib290Y29uZmlnIGNhbm5vdCBicmljayBhIGJvb3QuCiYjNDM7CiYjNDM7SW50ZXJhY3Rpb24gd2l0aCBvdGhlciBjb21tYW5kIGxpbmUgYW5kIGJvb3Rjb25maWcgc291cmNlcwomIzQzO35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KJiM0MzsKJiM0MztXaXRoIGBgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHPXlgYCB0aGUgcmVuZGVyZWQgYGBrZXJuZWxgYAomIzQzO3N1YnRyZWUgYmVoYXZlcyBsaWtlIGEgYnVpbGQtdGltZSBjb21tYW5kIGxpbmUgKHNpbWlsYXIgdG8KJiM0MztgYENPTkZJR19DTURMSU5FYGApLCBub3QgbGlrZSBhIGJvb3Rjb25maWcgc291cmNlLiBJdCBpcyBwcmVwZW5kZWQgdG8KJiM0MztgYGJvb3RfY29tbWFuZF9saW5lYGAgaW4gYGBzZXR1cF9hcmNoKClgYCwgYmVmb3JlIGBgcGFyc2VfZWFybHlfcGFyYW0oKWBgCiYjNDM7YW5kIGxvbmcgYmVmb3JlIHRoZSBydW50aW1lIHBhcnNlciBsb29rcyBhdCBhbiBpbml0cmQuIE9wdGlvbnMgY2FuIHJlYWNoCiYjNDM7dGhlIGtlcm5lbCBmcm9tIHVwIHRvIGZvdXIgcGxhY2VzOgomIzQzOwomIzQzOy0gQm9vdGxvYWRlciBjb21tYW5kIGxpbmU6IHRoZSBhcmd1bWVudHMgdGhlIGJvb3QgbG9hZGVyIHBhc3Nlcy4gVGhlCiYjNDM7ICBlbWJlZGRlZCBjbWRsaW5lIGlzIHByZXBlbmRlZCBpbiBmcm9udCBvZiB0aGVtLCBzbyBmb3IgbGFzdC1vbmUtd2lucwomIzQzOyAgcGFyYW1ldGVycyBhIGJvb3Rsb2FkZXIgb3B0aW9uIHN0aWxsIG92ZXJyaWRlcyB0aGUgZW1iZWRkZWQgdmFsdWUuCiYjNDM7ICBWaXNpYmxlIGluIC9wcm9jL2NtZGxpbmUuCiYjNDM7LSBFbWJlZGRlZCBjbWRsaW5lICh0aGlzIG9wdGlvbik6IHRoZSByZW5kZXJlZCBgYGtlcm5lbGBgIHN1YnRyZWUsCiYjNDM7ICBwcmVwZW5kZWQgZWFybHkgc28gaXQgaXMgc2VlbiBieSBgYHBhcnNlX2Vhcmx5X3BhcmFtKClgYC4gVmlzaWJsZSBpbgomIzQzOyAgL3Byb2MvY21kbGluZS4KJiM0MzstIEluaXRyZCBib290Y29uZmlnOiBwYXJzZWQgbGF0ZSBpbiBgYHNldHVwX2Jvb3RfY29uZmlnKClgYDsgaXRzCiYjNDM7ICBgYGtlcm5lbGBgIGtleXMgYXJlIHBsYWNlZCBhaGVhZCBvZiBgYGJvb3RfY29tbWFuZF9saW5lYGAsIGkuZS4gYmVmb3JlCiYjNDM7ICB0aGUgZW1iZWRkZWQgY21kbGluZSwgc28gbGFzdC13aW5zIGZhdm9ycyB0aGUgZW1iZWRkZWQgdmFsdWVzLiBBcyBhCiYjNDM7ICBib290Y29uZmlnIHNvdXJjZSwgYW4gaW5pdHJkIGJvb3Rjb25maWcgc3RpbGwgcmVwbGFjZXMgdGhlIGVtYmVkZGVkCiYjNDM7ICBib290Y29uZmlnLiBWaXNpYmxlIGluIC9wcm9jL2NtZGxpbmUgYW5kIC9wcm9jL2Jvb3Rjb25maWcuCiYjNDM7LSBFbWJlZGRlZCBib290Y29uZmlnIChydW50aW1lKTogcGFyc2VkIGxhdGUsIG9ubHkgd2hlbiBubyBpbml0cmQKJiM0MzsgIGJvb3Rjb25maWcgaXMgcHJlc2VudC4gVmlzaWJsZSBpbiAvcHJvYy9jbWRsaW5lIGFuZCAvcHJvYy9ib290Y29uZmlnLgomIzQzOwomIzQzO1NvIHdpdGggdGhpcyBvcHRpb24gdGhlIGVtYmVkZGVkIGBga2VybmVsLipgYCB2YWx1ZXMgdGFrZSBwcmVjZWRlbmNlCiYjNDM7b3ZlciBhbiBpbml0cmQgYm9vdGNvbmZpZyYjMzk7cyBgYGtlcm5lbC4qYGAgdmFsdWVzOiBmb3IgZWFybHkgcGFyYW1ldGVycwomIzQzO3RoZSBpbml0cmQgaXMgbm90IHBhcnNlZCB5ZXQsIGFuZCBmb3Igb3JkaW5hcnkgcGFyYW1ldGVycyB0aGUgZW1iZWRkZWQKJiM0MztrZXlzIGxhbmQgbGF0ZXIgaW4gdGhlIGNvbW1hbmQgbGluZS4gSWYgeW91IG5lZWQgYW4gaW5pdHJkIGJvb3Rjb25maWcgdG8KJiM0MztvdmVycmlkZSB0aGUgZW1iZWRkZWQgYGBrZXJuZWwuKmBgIGtleXMsIGxlYXZlIHRoaXMgb3B0aW9uIG9mZiBhbmQgcmVseQomIzQzO29uIHRoZSBydW50aW1lIHBhcnNlci4KJiM0MzsKJiM0MztUaGUgcmVuZGVyZWQgc3RyaW5nIGlzIHBhcnQgb2YgdGhlIGNvbW1hbmQgbGluZSwgc28gaXQgYXBwZWFycyBpbgomIzQzOy9wcm9jL2NtZGxpbmUuIEl0IGlzIGRlbGliZXJhdGVseSBub3Qgc2hvd24gaW4gL3Byb2MvYm9vdGNvbmZpZzogdGhhdAomIzQzO2ZpbGUga2VlcHMgcmVwb3J0aW5nIHRoZSBwYXJzZWQgYm9vdGNvbmZpZyB0cmVlIC0tIHRoZSBpbml0cmQgYm9vdGNvbmZpZwomIzQzO2lmIHByZXNlbnQsIG90aGVyd2lzZSB0aGUgZW1iZWRkZWQgYm9vdGNvbmZpZyAtLSBpbmRlcGVuZGVudCBvZiB3aGV0aGVyCiYjNDM7YnVpbGQtdGltZSBjbWRsaW5lIHJlbmRlcmluZyBpcyBlbmFibGVkLgomIzQzOwogS2VybmVsIHBhcmFtZXRlcnMgdmlhIEJvb3QgQ29uZmlnCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCBkOTVkM2VmNzc3NzNmYS4uNzUzMzQxOTc3M2NhOWMgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTCkBAIC05ODEzLDYgJiM0Mzs5ODEzLDcgQEAgRjoJZnMvcHJvYy9ib290Y29uZmlnLmMKIEY6CWluY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oCiBGOglsaWIvYm9vdGNvbmZpZy1kYXRhLlMKIEY6CWxpYi9ib290Y29uZmlnLmMKJiM0MztGOglsaWIvZW1iZWRkZWQtY21kbGluZS5TCiBGOgl0b29scy9ib290Y29uZmlnLyoKIEY6CXRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy8qCiAKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggZDFjNTk1ZGI1NWM5NTYuLjFmNTZhNjg5MmZlYjQwIDEwMDY0NAotLS0gYS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9NYWtlZmlsZQpAQCAtMTUzMSw2ICYjNDM7MTUzMSwyMiBAQCBwcmVwYXJlOiB0b29scy9icGYvcmVzb2x2ZV9idGZpZHMKIGVuZGlmCiBlbmRpZgogCiYjNDM7IyB0b29scy9ib290Y29uZmlnIHJlbmRlcnMgdGhlIGVtYmVkZGVkIGJvb3Rjb25maWcgaW50byBhIGNtZGxpbmUgYXQgYnVpbGQgdGltZS4KJiM0MztpZmRlZiBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUcKJiM0MztwcmVwYXJlOiB0b29scy9ib290Y29uZmlnCiYjNDM7ZW5kaWYKJiM0MzsKJiM0MzsjIHRvb2xzL2Jvb3Rjb25maWcgaXMgcnVuIG9uIHRoZSBidWlsZCBob3N0IGR1cmluZyBwcmVwYXJlLCBzbyBmb3JjZSBhIGhvc3QKJiM0MzsjIGJpbmFyeSBoZXJlOyBpdHMgb3duIE1ha2VmaWxlIGtlZXBzICQoQ0MpIGZvciBzdGFuZGFsb25lIGFuZCBjcm9zcyBidWlsZHMuCiYjNDM7IyBDUk9TU19DT01QSUxFPSBpcyBjbGVhcmVkIHNvIHRvb2xzL3NjcmlwdHMvTWFrZWZpbGUuaW5jbHVkZSBkb2VzIG5vdCBpbmplY3QKJiM0MzsjIHRoZSB0YXJnZXQmIzM5O3MgLS10YXJnZXQ9Ly0tc3lzcm9vdD0gZmxhZ3MgaW50byB0aGUgaG9zdCBjbGFuZyBpbnZvY2F0aW9uIHVuZGVyCiYjNDM7IyBMTFZNPTEgY3Jvc3MgYnVpbGRzICh3aGljaCB3b3VsZCBwcm9kdWNlIGEgdGFyZ2V0IGJpbmFyeSB0aGF0IGZhaWxzIHRvIGV4ZWMpLgomIzQzO3Rvb2xzL2Jvb3Rjb25maWc6IGV4cG9ydCBDQyA6PSAkKEhPU1RDQykKJiM0Mzt0b29scy9ib290Y29uZmlnOiBGT1JDRQomIzQzOwkkKFEpbWtkaXIgLXAgJChvYmp0cmVlKS90b29scwomIzQzOwkkKFEpJChNQUtFKSBPPSQoYWJzcGF0aCAkKG9ianRyZWUpKSBzdWJkaXI9dG9vbHMgLUMgJChzcmN0cmVlKS90b29scy8gXAomIzQzOwkJYm9vdGNvbmZpZyBDUk9TU19DT01QSUxFPQomIzQzOwogIyBUaGUgdG9vbHMgYnVpbGQgc3lzdGVtIGlzIG5vdCBhIHBhcnQgb2YgS2J1aWxkIGFuZCB0ZW5kcyB0byBpbnRyb2R1Y2UKICMgaXRzIG93biB1bmlxdWUgaXNzdWVzLiBJZiB5b3UgbmVlZCB0byBpbnRlZ3JhdGUgYSBuZXcgdG9vbCBpbnRvIEtidWlsZCwKICMgcGxlYXNlIGNvbnNpZGVyIGxvY2F0aW5nIHRoYXQgdG9vbCBvdXRzaWRlIHRoZSB0b29scy8gdHJlZSBhbmQgdXNpbmcgdGhlCkBAIC0xNTU3LDYgJiM0MzsxNTczLDE1IEBAIGlmbmVxICgkKHdpbGRjYXJkICQob2JqdG9vbF9PKSksKQogCSQoUSkkKE1BS0UpIC1zQyAkKGFic19zcmN0cmVlKS90b29scy9vYmp0b29sIE89JChvYmp0b29sX08pIHNyY3RyZWU9JChhYnNfc3JjdHJlZSkgJChwYXRzdWJzdCBvYmp0b29sXyUsJSwkQCkKIGVuZGlmCiAKJiM0MztQSE9OWSAmIzQzOz0gYm9vdGNvbmZpZ19jbGVhbgomIzQzOwomIzQzO2Jvb3Rjb25maWdfTyA9ICQoYWJzcGF0aCAkKG9ianRyZWUpKS90b29scy9ib290Y29uZmlnCiYjNDM7CiYjNDM7Ym9vdGNvbmZpZ19jbGVhbjoKJiM0MztpZm5lcSAoJCh3aWxkY2FyZCAkKGJvb3Rjb25maWdfTykpLCkKJiM0MzsJJChRKSQoTUFLRSkgLXNDICQoc3JjdHJlZSkvdG9vbHMvYm9vdGNvbmZpZyBPPSQoYm9vdGNvbmZpZ19PKSBjbGVhbgomIzQzO2VuZGlmCiYjNDM7CiB0b29scy86IEZPUkNFCiAJJChRKW1rZGlyIC1wICQob2JqdHJlZSkvdG9vbHMKIAkkKFEpJChNQUtFKSBPPSQoYWJzcGF0aCAkKG9ianRyZWUpKSBzdWJkaXI9dG9vbHMgLUMgJChzcmN0cmVlKS90b29scy8KQEAgLTE3MzIsNyAmIzQzOzE3NTcsNyBAQCB2bWxpbnV4Y2xlYW46CiAJJChRKSQoQ09ORklHX1NIRUxMKSAkKHNyY3RyZWUpL3NjcmlwdHMvbGluay12bWxpbnV4LnNoIGNsZWFuCiAJJChRKSQoaWYgJChBUkNIX1BPU1RMSU5LKSwgJChNQUtFKSAtZiAkKEFSQ0hfUE9TVExJTkspIGNsZWFuKQogCi1jbGVhbjogYXJjaGNsZWFuIHZtbGludXhjbGVhbiByZXNvbHZlX2J0Zmlkc19jbGVhbiBvYmp0b29sX2NsZWFuCiYjNDM7Y2xlYW46IGFyY2hjbGVhbiB2bWxpbnV4Y2xlYW4gcmVzb2x2ZV9idGZpZHNfY2xlYW4gb2JqdG9vbF9jbGVhbiBib290Y29uZmlnX2NsZWFuCiAKICMgbXJwcm9wZXIgLSBEZWxldGUgYWxsIGdlbmVyYXRlZCBmaWxlcywgaW5jbHVkaW5nIC5jb25maWcKICMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcgYi9hcmNoL3g4Ni9LY29uZmlnCmluZGV4IGZhNGYwMDc5NjE0Y2QwLi5hZGJjYWFkODAxMzA4MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9LY29uZmlnCkBAIC0xMjcsNiAmIzQzOzEyNyw3IEBAIGNvbmZpZyBYODYKIAlzZWxlY3QgQVJDSF9TVVBQT1JUU19OVU1BX0JBTEFOQ0lORwlpZiBYODZfNjQKIAlzZWxlY3QgQVJDSF9TVVBQT1JUU19LTUFQX0xPQ0FMX0ZPUkNFX01BUAlpZiBOUl9DUFVTICZsdDs9IDQwOTYKIAlzZWxlY3QgQVJDSF9TVVBQT1JUU19DRkkJCWlmIFg4Nl82NAomIzQzOwlzZWxlY3QgQVJDSF9TVVBQT1JUU19DTURMSU5FX0ZST01fQk9PVENPTkZJRwogCXNlbGVjdCBBUkNIX1VTRVNfQ0ZJX1RSQVBTCQlpZiBYODZfNjQgJmFtcDsmYW1wOyBDRkkKIAlzZWxlY3QgQVJDSF9TVVBQT1JUU19MVE9fQ0xBTkcKIAlzZWxlY3QgQVJDSF9TVVBQT1JUU19MVE9fQ0xBTkdfVEhJTgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NldHVwLmMgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYwppbmRleCA0Njg4MmNlNzljM2E0ZC4uYzk3M2EyY2ViY2QwNGUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCkBAIC02LDYgJiM0Mzs2LDcgQEAKICAqIHBhcnRzIG9mIGVhcmx5IGtlcm5lbCBpbml0aWFsaXphdGlvbi4KICAqLwogI2luY2x1ZGUgJmx0O2xpbnV4L2FjcGkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYm9vdGNvbmZpZy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2NvbnNvbGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jcHUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jcmFzaF9kdW1wLmgmZ3Q7CkBAIC04ODEsNiAmIzQzOzg4MiwzNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgeDg2X3JlcG9ydF9ueCh2b2lkKQogICogTm90ZTogT24geDg2XzY0LCBmaXhtYXBzIGFyZSByZWFkeSBmb3IgdXNlIGV2ZW4gYmVmb3JlIHRoaXMgaXMgY2FsbGVkLgogICovCiAKJiM0MzsjaWZkZWYgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHCiYjNDM7c3RhdGljIGludCBfX2luaXQgYm9vdGNvbmZpZ19vcHRpbihjaGFyICpwYXJhbSwgY2hhciAqdmFsLAomIzQzOwkJCQkgICBjb25zdCBjaGFyICp1bnVzZWQsIHZvaWQgKmFyZykKJiM0Mzt7CiYjNDM7CWlmICghc3RyY21wKHBhcmFtLCAmIzM0O2Jvb3Rjb25maWcmIzM0OykpCiYjNDM7CQkqKGJvb2wgKilhcmcgPSB0cnVlOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBEaWQgdGhlIHVzZXIgb3B0IGluIHRvIGJvb3Rjb25maWcgb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmU/IFVzZQomIzQzOyAqIHBhcnNlX2FyZ3MoKSBzbyB0aGlzIG1hdGNoZXMgc2V0dXBfYm9vdF9jb25maWcoKSBleGFjdGx5LCBpbmNsdWRpbmcKJiM0MzsgKiBzdG9wcGluZyBhdCB0aGUgJiMzNDstLSYjMzQ7IHRoYXQgc2VwYXJhdGVzIGluaXQgYXJndW1lbnRzLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIF9faW5pdCBib290Y29uZmlnX2NtZGxpbmVfcmVxdWVzdGVkKHZvaWQpCiYjNDM7ewomIzQzOwlzdGF0aWMgY2hhciB0bXBfY21kbGluZVtDT01NQU5EX0xJTkVfU0laRV0gX19pbml0ZGF0YTsKJiM0MzsJYm9vbCBmb3VuZCA9IGZhbHNlOwomIzQzOwomIzQzOwlpZiAoSVNfRU5BQkxFRChDT05GSUdfQk9PVF9DT05GSUdfRk9SQ0UpKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CXN0cnNjcHkodG1wX2NtZGxpbmUsIGJvb3RfY29tbWFuZF9saW5lLCBDT01NQU5EX0xJTkVfU0laRSk7CiYjNDM7CWlmIChJU19FUlIocGFyc2VfYXJncygmIzM0O2Jvb3Rjb25maWcmIzM0OywgdG1wX2NtZGxpbmUsIE5VTEwsIDAsIDAsIDAsCiYjNDM7CQkJICAgICAgJmFtcDtmb3VuZCwgYm9vdGNvbmZpZ19vcHRpbikpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gZm91bmQ7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwogdm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKQogewogI2lmZGVmIENPTkZJR19YODZfMzIKQEAgLTkyNCw2ICYjNDM7OTU2LDE3IEBAIHZvaWQgX19pbml0IHNldHVwX2FyY2goY2hhciAqKmNtZGxpbmVfcCkKIAlidWlsdGluX2NtZGxpbmVfYWRkZWQgPSB0cnVlOwogI2VuZGlmCiAKJiM0MzsjaWZkZWYgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHCiYjNDM7CS8qCiYjNDM7CSAqIFByZXBlbmQgdGhlIGJ1aWxkLXRpbWUtcmVuZGVyZWQgZW1iZWRkZWQgJiMzNDtrZXJuZWwmIzM0OyBrZXlzIGhlcmUgc28KJiM0MzsJICogcGFyc2VfZWFybHlfcGFyYW0oKSBiZWxvdyBzZWVzIHRoZW0sIGdhdGluZyBvbiB0aGUgc2FtZSBvcHQtaW4KJiM0MzsJICogYXMgdGhlIHJ1bnRpbWUgcGFyc2VyIChzZWUgYm9vdGNvbmZpZ19jbWRsaW5lX3JlcXVlc3RlZCgpKS4KJiM0MzsJICovCiYjNDM7CWlmIChib290Y29uZmlnX2NtZGxpbmVfcmVxdWVzdGVkKCkpCiYjNDM7CQl4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lKGJvb3RfY29tbWFuZF9saW5lLAomIzQzOwkJCQkJICAgICBDT01NQU5EX0xJTkVfU0laRSk7CiYjNDM7I2VuZGlmCiYjNDM7CiAJc3Ryc2NweShjb21tYW5kX2xpbmUsIGJvb3RfY29tbWFuZF9saW5lLCBDT01NQU5EX0xJTkVfU0laRSk7CiAJKmNtZGxpbmVfcCA9IGNvbW1hbmRfbGluZTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmggYi9pbmNsdWRlL2xpbnV4L2Jvb3Rjb25maWcuaAppbmRleCAxYzdmM2I3NGZmY2YzOC4uNDMzMjRiNDc3ZjEzYWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oCkBAIC0zMDgsNCAmIzQzOzMwOCwxMyBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKnhiY19nZXRfZW1iZWRkZWRfYm9vdGNvbmZpZyhzaXplX3QgKnNpemUpCiB9CiAjZW5kaWYKIAomIzQzOy8qIEJ1aWxkLXRpbWUtcmVuZGVyZWQgYm9vdGNvbmZpZyBjbWRsaW5lIHByZXBlbmRlZCBpbiBzZXR1cF9hcmNoKCkgKi8KJiM0MzsjaWZkZWYgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHCiYjNDM7dm9pZCBfX2luaXQgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZShjaGFyICpkc3QsIHNpemVfdCBzaXplKTsKJiM0Mztib29sIF9faW5pdCB4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkKHZvaWQpOwomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSkgeyB9CiYjNDM7c3RhdGljIGlubGluZSBib29sIHhiY19lbWJlZGRlZF9jbWRsaW5lX2FwcGxpZWQodm9pZCkgeyByZXR1cm4gZmFsc2U7IH0KJiM0MzsjZW5kaWYKJiM0MzsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5pdC9LY29uZmlnIGIvaW5pdC9LY29uZmlnCmluZGV4IDQ0MDNlNTM4NzZlMTA3Li4xY2Y2Y2Y2Mjk4YzRlZSAxMDA2NDQKLS0tIGEvaW5pdC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2luaXQvS2NvbmZpZwpAQCAtMTU2Niw2ICYjNDM7MTU2Niw0MiBAQCBjb25maWcgQk9PVF9DT05GSUdfRU1CRURfRklMRQogCSAgVGhpcyBib290Y29uZmlnIHdpbGwgYmUgdXNlZCBpZiB0aGVyZSBpcyBubyBpbml0cmQgb3Igbm8gb3RoZXIKIAkgIGJvb3Rjb25maWcgaW4gdGhlIGluaXRyZC4KIAomIzQzO2NvbmZpZyBBUkNIX1NVUFBPUlRTX0NNRExJTkVfRlJPTV9CT09UQ09ORklHCiYjNDM7CWJvb2wKJiM0MzsJaGVscAomIzQzOwkgIFNpbGVudCBzeW1ib2w7IG5vIEMgY29kZSByZWFkcyBpdCBkaXJlY3RseS4gQXJjaGl0ZWN0dXJlcwomIzQzOwkgIHNlbGVjdCBpdCBvbmNlIHRoZWlyIHNldHVwX2FyY2goKSBjYWxscwomIzQzOwkgIHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoKSBiZWZvcmUgcGFyc2VfZWFybHlfcGFyYW0oKS4KJiM0MzsJICBJdHMgb25seSByb2xlIGlzIHRvIGdhdGUgdGhlIHVzZXItdmlzaWJsZQomIzQzOwkgIENNRExJTkVfRlJPTV9CT09UQ09ORklHIG9wdGlvbiBwZXItYXJjaCwgdGhlIHNhbWUKJiM0MzsJICBBUkNIX1NVUFBPUlRTXyogaWRpb20gdXNlZCBieSBBUkNIX1NVUFBPUlRTX0NGSSwgZXRjLgomIzQzOwomIzQzO2NvbmZpZyBDTURMSU5FX0ZST01fQk9PVENPTkZJRwomIzQzOwlib29sICYjMzQ7UmVuZGVyIGVtYmVkZGVkIGJvb3Rjb25maWcgYXMga2VybmVsIGNtZGxpbmUgYXQgYnVpbGQgdGltZSYjMzQ7CiYjNDM7CWRlcGVuZHMgb24gQk9PVF9DT05GSUdfRU1CRURfRklMRSAhPSAmIzM0OyYjMzQ7CiYjNDM7CWRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19DTURMSU5FX0ZST01fQk9PVENPTkZJRwomIzQzOwlkZXBlbmRzIG9uIENNRExJTkUgPSAmIzM0OyYjMzQ7CiYjNDM7CWRlZmF1bHQgbgomIzQzOwloZWxwCiYjNDM7CSAgUmVuZGVyIHRoZSAmIzM0O2tlcm5lbCYjMzQ7IHN1YnRyZWUgb2YgdGhlIGVtYmVkZGVkIGJvb3Rjb25maWcgZmlsZSBpbnRvIGEKJiM0MzsJICBmbGF0IGNtZGxpbmUgc3RyaW5nIGF0IGtlcm5lbCBidWlsZCB0aW1lIGFuZCBwcmVwZW5kIGl0IHRvCiYjNDM7CSAgYm9vdF9jb21tYW5kX2xpbmUgZHVyaW5nIGVhcmx5IGFyY2hpdGVjdHVyZSBzZXR1cC4gVGhpcyBtYWtlcwomIzQzOwkgIGVhcmx5X3BhcmFtKCkgaGFuZGxlcnMgKGUuZy4gbWVtPSwgZWFybHljb249LCBsb2dsZXZlbD0pIHNlZSB0aGUKJiM0MzsJICB2YWx1ZXMgc3VwcGxpZWQgdmlhIHRoZSBlbWJlZGRlZCBib290Y29uZmlnLgomIzQzOwomIzQzOwkgIFRoZSBydW50aW1lIGJvb3Rjb25maWcgcGFyc2VyIGlzIHVuYWZmZWN0ZWQsIHNvIHRyZWUtc3RydWN0dXJlZAomIzQzOwkgIGNvbnN1bWVycyBzdWNoIGFzIGZ0cmFjZSBib290LXRpbWUgdHJhY2luZyBrZWVwIHdvcmtpbmcuCiYjNDM7CiYjNDM7CSAgTm90ZTogd2hlbiBhbiBpbml0cmQgYWxzbyBjYXJyaWVzIGEgYm9vdGNvbmZpZywgaXRzICYjMzQ7a2VybmVsJiMzNDsKJiM0MzsJICBzdWJ0cmVlIGlzIHN0aWxsIHBhcnNlZCBhdCBydW50aW1lLCBidXQgdGhlIGVtYmVkZGVkICYjMzQ7a2VybmVsJiMzNDsKJiM0MzsJICBrZXlzIHJlbWFpbiBpbiBib290X2NvbW1hbmRfbGluZSBmb3IgcGFyc2VfZWFybHlfcGFyYW0oKSBhbmQKJiM0MzsJICBlbmQgdXAgbGF0ZXIgdGhhbiB0aGUgaW5pdHJkIGtleXMgaW4gc2F2ZWRfY29tbWFuZF9saW5lLCBzbwomIzQzOwkgIHBhcnNlX2FyZ3MoKSBsYXN0LXdpbnMgZmF2b3JzIHRoZSBlbWJlZGRlZCB2YWx1ZXMuIElmIHlvdSBuZWVkCiYjNDM7CSAgaW5pdHJkIHRvIG92ZXJyaWRlIGVtYmVkZGVkIGtlcm5lbC4qIGtleXMsIGxlYXZlIHRoaXMgb3B0aW9uCiYjNDM7CSAgb2ZmLgomIzQzOwomIzQzOwkgIElmIHVuc3VyZSwgc2F5IE4uCiYjNDM7CiBjb25maWcgQ01ETElORV9MT0dfV1JBUF9JREVBTF9MRU4KIAlpbnQgJiMzNDtMZW5ndGggdG8gdHJ5IHRvIHdyYXAgdGhlIGNtZGxpbmUgd2hlbiBsb2dnZWQgYXQgYm9vdCYjMzQ7CiAJZGVmYXVsdCAxMDIxCmRpZmYgLS1naXQgYS9pbml0L21haW4uYyBiL2luaXQvbWFpbi5jCmluZGV4IGUzNjMyMzJiNDI4YjQ3Li4yNjBiZDUyNDJmOTRlOCAxMDA2NDQKLS0tIGEvaW5pdC9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvaW5pdC9tYWluLmMKQEAgLTM3OCwxMiAmIzQzOzM3OCwxNSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfYm9vdF9jb25maWcodm9pZCkKIAlpbnQgcG9zLCByZXQ7CiAJc2l6ZV90IHNpemU7CiAJY2hhciAqZXJyOwomIzQzOwlib29sIGZyb21fZW1iZWRkZWQgPSBmYWxzZTsKIAogCS8qIEN1dCBvdXQgdGhlIGJvb3Rjb25maWcgZGF0YSBldmVuIGlmIHdlIGhhdmUgbm8gYm9vdGNvbmZpZyBvcHRpb24gKi8KIAlkYXRhID0gZ2V0X2Jvb3RfY29uZmlnX2Zyb21faW5pdHJkKCZhbXA7c2l6ZSk7CiAJLyogSWYgdGhlcmUgaXMgbm8gYm9vdGNvbmZpZyBpbiBpbml0cmQsIHRyeSBlbWJlZGRlZCBvbmUuICovCi0JaWYgKCFkYXRhKQomIzQzOwlpZiAoIWRhdGEpIHsKIAkJZGF0YSA9IHhiY19nZXRfZW1iZWRkZWRfYm9vdGNvbmZpZygmYW1wO3NpemUpOwomIzQzOwkJZnJvbV9lbWJlZGRlZCA9IHRydWU7CiYjNDM7CX0KIAogCXN0cnNjcHkodG1wX2NtZGxpbmUsIGJvb3RfY29tbWFuZF9saW5lLCBDT01NQU5EX0xJTkVfU0laRSk7CiAJZXJyID0gcGFyc2VfYXJncygmIzM0O2Jvb3Rjb25maWcmIzM0OywgdG1wX2NtZGxpbmUsIE5VTEwsIDAsIDAsIDAsIE5VTEwsCkBAIC00MjEsOCAmIzQzOzQyNCwyNCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfYm9vdF9jb25maWcodm9pZCkKIAl9IGVsc2UgewogCQl4YmNfZ2V0X2luZm8oJmFtcDtyZXQsIE5VTEwpOwogCQlwcl9pbmZvKCYjMzQ7TG9hZCBib290Y29uZmlnOiAlbGQgYnl0ZXMgJWQgbm9kZXNcbiYjMzQ7LCAobG9uZylzaXplLCByZXQpOwotCQkvKiBrZXlzIHN0YXJ0aW5nIHdpdGggJiMzNDtrZXJuZWwuJiMzNDsgYXJlIHBhc3NlZCB2aWEgY21kbGluZSAqLwotCQlleHRyYV9jb21tYW5kX2xpbmUgPSB4YmNfbWFrZV9jbWRsaW5lKCYjMzQ7a2VybmVsJiMzNDspOwomIzQzOwkJLyoKJiM0MzsJCSAqIGtleXMgc3RhcnRpbmcgd2l0aCAmIzM0O2tlcm5lbC4mIzM0OyBhcmUgcGFzc2VkIHZpYSBjbWRsaW5lLiBXaGVuCiYjNDM7CQkgKiB0aGlzIGJvb3Rjb25maWcgY2FtZSBmcm9tIHRoZSBlbWJlZGRlZCBzb3VyY2UgYW5kCiYjNDM7CQkgKiBzZXR1cF9hcmNoKCkgYWxyZWFkeSBwcmVwZW5kZWQgdGhlIHJlbmRlcmVkICYjMzQ7a2VybmVsJiMzNDsgc3VidHJlZQomIzQzOwkJICogdG8gYm9vdF9jb21tYW5kX2xpbmUsIHJlbmRlcmluZyBhZ2FpbiBoZXJlIHdvdWxkIGR1cGxpY2F0ZQomIzQzOwkJICogdGhlIGtleXMgaW4gc2F2ZWRfY29tbWFuZF9saW5lIGFuZCBtYWtlIGFjY3VtdWxhdGluZyBoYW5kbGVycwomIzQzOwkJICogKGNvbnNvbGU9LCBlYXJseWNvbj0sIC4uLikgcmUtcmVnaXN0ZXIgdGhlIHNhbWUgdmFsdWUuIFNraXAKJiM0MzsJCSAqIG9ubHkgd2hlbiB0aGUgcHJlcGVuZCByZWFsbHkgaGFwcGVuZWQuCiYjNDM7CQkgKgomIzQzOwkJICogT24gYXJjaGVzIHRoYXQgZG8gbm90IHNlbGVjdCBBUkNIX1NVUFBPUlRTX0NNRExJTkVfRlJPTV9CT09UQ09ORklHLAomIzQzOwkJICogQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHIGlzIHVuc2VsZWN0YWJsZSBhbmQKJiM0MzsJCSAqIHhiY19lbWJlZGRlZF9jbWRsaW5lX2FwcGxpZWQoKSBjb2xsYXBzZXMgdG8gYSBzdHViIHJldHVybmluZwomIzQzOwkJICogZmFsc2UsIHNvIHRoaXMgcGF0aCBzdGlsbCBydW5zIGFuZCB0aGUgZW1iZWRkZWQgJiMzNDtrZXJuZWwmIzM0OwomIzQzOwkJICoga2V5cyByZWFjaCB0aGUgY21kbGluZSB2aWEgdGhlIHJ1bnRpbWUgcGFyc2VyIGV4YWN0bHkgYXMKJiM0MzsJCSAqIGJlZm9yZSB0aGlzIHNlcmllcy4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKCFmcm9tX2VtYmVkZGVkIHx8ICF4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkKCkpCiYjNDM7CQkJZXh0cmFfY29tbWFuZF9saW5lID0geGJjX21ha2VfY21kbGluZSgmIzM0O2tlcm5lbCYjMzQ7KTsKIAkJLyogQWxzbywgJiMzNDtpbml0LiYjMzQ7IGtleXMgYXJlIGluaXQgYXJndW1lbnRzICovCiAJCWV4dHJhX2luaXRfYXJncyA9IHhiY19tYWtlX2NtZGxpbmUoJiMzNDtpbml0JiMzNDspOwogCX0KZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZSBiL2xpYi9NYWtlZmlsZQppbmRleCAyM2UwN2QxOWQwMWM5MC4uNGY5N2E1NGQxZTNkOWEgMTAwNjQ0Ci0tLSBhL2xpYi9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9saWIvTWFrZWZpbGUKQEAgLTI3NCw2ICYjNDM7Mjc0LDIyIEBAIGZpbGVjaGtfZGVmYmNvbmYgPSBjYXQgJChvciAkKHJlYWwtcHJlcmVxcyksIC9kZXYvbnVsbCkKICQob2JqKS9kZWZhdWx0LmJjb25mOiAkKENPTkZJR19CT09UX0NPTkZJR19FTUJFRF9GSUxFKSBGT1JDRQogCSQoY2FsbCBmaWxlY2hrLGRlZmJjb25mKQogCiYjNDM7b2JqLSQoQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHKSAmIzQzOz0gZW1iZWRkZWQtY21kbGluZS5vCiYjNDM7JChvYmopL2VtYmVkZGVkLWNtZGxpbmUubzogJChvYmopL2VtYmVkZGVkX2NtZGxpbmUuYmluCiYjNDM7CiYjNDM7IyBSZW5kZXIgdGhlIGJvb3Rjb25maWcgJiMzNDtrZXJuZWwmIzM0OyBzdWJ0cmVlIHRvIGEgZmxhdCBjbWRsaW5lIHN0cmluZyB1c2luZwomIzQzOyMgdGhlIHVzZXJzcGFjZSB0b29scy9ib290Y29uZmlnIHBhcnNlciAoLUMgbW9kZSkuIFRoZSBydW50aW1lIHByZXBlbmQKJiM0MzsjIGhlbHBlciBlbmZvcmNlcyBDT01NQU5EX0xJTkVfU0laRSBhdCBib290LCBzbyBubyBidWlsZC10aW1lIHNpemUKJiM0MzsjIGNoZWNrIGlzIHBlcmZvcm1lZCBoZXJlIChDT01NQU5EX0xJTkVfU0laRSBpcyBhbiBhcmNoIGhlYWRlcgomIzQzOyMgY29uc3RhbnQsIG5vdCBhIEtjb25maWcgdmFsdWUpLgomIzQzO3F1aWV0X2NtZF9yZW5kZXJfY21kbGluZSA9IEJDT05GMkMgJEAKJiM0MzsgICAgICBjbWRfcmVuZGVyX2NtZGxpbmUgPSBcCiYjNDM7CSQob2JqdHJlZSkvdG9vbHMvYm9vdGNvbmZpZy9ib290Y29uZmlnIC1DICQmbHQ7ICZndDsgJEAKJiM0MzsKJiM0Mzt0YXJnZXRzICYjNDM7PSBlbWJlZGRlZF9jbWRsaW5lLmJpbgomIzQzOyQob2JqKS9lbWJlZGRlZF9jbWRsaW5lLmJpbjogJChvYmopL2RlZmF1bHQuYmNvbmYgJChvYmp0cmVlKS90b29scy9ib290Y29uZmlnL2Jvb3Rjb25maWcgRk9SQ0UKJiM0MzsJJChjYWxsIGlmX2NoYW5nZWQscmVuZGVyX2NtZGxpbmUpCiYjNDM7CiBvYmotJChDT05GSUdfUkJUUkVFX1RFU1QpICYjNDM7PSByYnRyZWVfdGVzdC5vCiBvYmotJChDT05GSUdfSU5URVJWQUxfVFJFRV9URVNUKSAmIzQzOz0gaW50ZXJ2YWxfdHJlZV90ZXN0Lm8KIApkaWZmIC0tZ2l0IGEvbGliL2Jvb3Rjb25maWcuYyBiL2xpYi9ib290Y29uZmlnLmMKaW5kZXggZjQ0NWI3NzAzZmRkOTYuLjA1Y2IxZWE5YWZkYWUzIDEwMDY0NAotLS0gYS9saWIvYm9vdGNvbmZpZy5jCiYjNDM7JiM0MzsmIzQzOyBiL2xpYi9ib290Y29uZmlnLmMKQEAgLTE5LDYgJiM0MzsxOSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvZXJybm8uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jYWNoZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2NvbXBpbGVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3ByaW50ay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NwcmludGYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tZW1ibG9jay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3N0cmluZy5oJmd0OwpAQCAtMzQsNiAmIzQzOzM1LDgzIEBAIGNvbnN0IGNoYXIgKiBfX2luaXQgeGJjX2dldF9lbWJlZGRlZF9ib290Y29uZmlnKHNpemVfdCAqc2l6ZSkKIAlyZXR1cm4gKCpzaXplKSA/IGVtYmVkZGVkX2Jvb3Rjb25maWdfZGF0YSA6IE5VTEw7CiB9CiAjZW5kaWYKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHCiYjNDM7LyogZW1iZWRkZWRfa2VybmVsX2NtZGxpbmUgaXMgZGVmaW5lZCBpbiBlbWJlZGRlZC1jbWRsaW5lLlMgKi8KJiM0MztleHRlcm4gX192aXNpYmxlIGNvbnN0IGNoYXIgZW1iZWRkZWRfa2VybmVsX2NtZGxpbmVbXTsKJiM0MztleHRlcm4gX192aXNpYmxlIGNvbnN0IGNoYXIgZW1iZWRkZWRfa2VybmVsX2NtZGxpbmVfZW5kW107CiYjNDM7CiYjNDM7LyogU2V0IG9uY2UgdGhlIGVtYmVkZGVkIGNtZGxpbmUgaGFzIGFjdHVhbGx5IGJlZW4gcHJlcGVuZGVkLiAqLwomIzQzO3N0YXRpYyBib29sIHhiY19jbWRsaW5lX2FwcGxpZWQgX19pbml0ZGF0YTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIHN0cl9wcmVwZW5kKCkgLSBQcmVwZW5kIEBzcmMgaW4gZnJvbnQgb2YgdGhlIHN0cmluZyBpbiBAZHN0LCBpbiBwbGFjZQomIzQzOyAqIEBkc3Q6IE5VTC10ZXJtaW5hdGVkIGRlc3RpbmF0aW9uIGJ1ZmZlciwgY3VycmVudGx5IEBkc3RfbGVuIGJ5dGVzIGxvbmcKJiM0MzsgKiBAZHN0X2xlbjogbGVuZ3RoIG9mIHRoZSBjdXJyZW50IEBkc3Qgc3RyaW5nIChleGNsdWRpbmcgaXRzIE5VTCkKJiM0MzsgKiBAc3JjOiBieXRlcyB0byBwcmVwZW5kIChub3QgTlVMLXRlcm1pbmF0ZWQpCiYjNDM7ICogQHNyY19sZW46IG51bWJlciBvZiBieXRlcyBmcm9tIEBzcmMgdG8gcHJlcGVuZAomIzQzOyAqCiYjNDM7ICogVGhlIGNhbGxlciBtdXN0IGd1YXJhbnRlZSBAZHN0IGhhcyByb29tIGZvciBzcmNfbGVuICYjNDM7IGRzdF9sZW4gJiM0MzsgMSBieXRlcy4KJiM0MzsgKiBNb3ZpbmcgZHN0X2xlbiAmIzQzOyAxIGJ5dGVzIGNhcnJpZXMgQGRzdCYjMzk7cyBOVUwgdGVybWluYXRvciB0b28sIHNvIGFuIGVtcHR5CiYjNDM7ICogQGRzdCBuZWVkcyBubyBzcGVjaWFsIGNhc2UuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgX19pbml0IHN0cl9wcmVwZW5kKGNoYXIgKmRzdCwgc2l6ZV90IGRzdF9sZW4sCiYjNDM7CQkJICAgICAgIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNyY19sZW4pCiYjNDM7ewomIzQzOwltZW1tb3ZlKGRzdCAmIzQzOyBzcmNfbGVuLCBkc3QsIGRzdF9sZW4gJiM0MzsgMSk7CiYjNDM7CW1lbWNweShkc3QsIHNyYywgc3JjX2xlbik7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoKSAtIFByZXBlbmQgZW1iZWRkZWQgYm9vdGNvbmZpZyBjbWRsaW5lCiYjNDM7ICogQGRzdDogY21kbGluZSBidWZmZXIgdG8gcHJlcGVuZCBpbnRvIChtdXN0IGFscmVhZHkgY29udGFpbiBhIE5VTCBieXRlKQomIzQzOyAqIEBzaXplOiB0b3RhbCBjYXBhY2l0eSBvZiBAZHN0IGluIGJ5dGVzCiYjNDM7ICoKJiM0MzsgKiBQcmVwZW5kIHRoZSBidWlsZC10aW1lLXJlbmRlcmVkICYjMzQ7a2VybmVsJiMzNDsgc3VidHJlZSBvZiB0aGUgZW1iZWRkZWQKJiM0MzsgKiBib290Y29uZmlnIHRvIEBkc3QuIFRoZSByZW5kZXJlZCBzdHJpbmcgYWxyZWFkeSBlbmRzIHdpdGggYSBzaW5nbGUKJiM0MzsgKiBzcGFjZSAodGhlIHhiY19zbnByaW50X2NtZGxpbmUoKSBpbnZhcmlhbnQpLCB3aGljaCBzZXJ2ZXMgYXMgdGhlCiYjNDM7ICogc2VwYXJhdG9yIGJldHdlZW4gdGhlIGVtYmVkZGVkIGtleXMgYW5kIGFueSBleGlzdGluZyBjb250ZW50IG9mIEBkc3QuCiYjNDM7ICogT24gb3ZlcmZsb3csIGxvZyBhbiBlcnJvciBhbmQgbGVhdmUgQGRzdCB1bnRvdWNoZWQgcmF0aGVyIHRoYW4KJiM0MzsgKiBzaWxlbnRseSB0cnVuY2F0aW5nOiBib290aW5nIHdpdGhvdXQgdGhlIGVtYmVkZGVkIHZhbHVlcyBpcyBiZXR0ZXIKJiM0MzsgKiB0aGFuIHJlZnVzaW5nIHRvIGJvb3QsIGFuZCB0aGUgZXJyb3IgbWVzc2FnZSB0ZWxscyB0aGUgdXNlciB3aHkKJiM0MzsgKiB0aGVpciBlbWJlZGRlZCBrZXlzIGFyZSBtaXNzaW5nLgomIzQzOyAqCiYjNDM7ICogSW50ZW5kZWQgdG8gYmUgY2FsbGVkIGZyb20gc2V0dXBfYXJjaCgpIGJlZm9yZSBwYXJzZV9lYXJseV9wYXJhbSgpIHNvCiYjNDM7ICogdGhhdCBlYXJseV9wYXJhbSgpIGhhbmRsZXJzIHNlZSB0aGUgZW1iZWRkZWQgdmFsdWVzLgomIzQzOyAqLwomIzQzO3ZvaWQgX19pbml0IHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSkKJiM0Mzt7CiYjNDM7CXNpemVfdCBlbWJlZF9sZW4gPSBlbWJlZGRlZF9rZXJuZWxfY21kbGluZV9lbmQgLSBlbWJlZGRlZF9rZXJuZWxfY21kbGluZTsKJiM0MzsJc2l6ZV90IGRzdF9sZW47CiYjNDM7CiYjNDM7CWlmICghc2l6ZSB8fCBlbWJlZF9sZW4gJmx0Oz0gMSkJLyogdHJhaWxpbmcgTlVMIG9ubHkgKi8KJiM0MzsJCXJldHVybjsKJiM0MzsJZW1iZWRfbGVuLS07CQkJLyogZXhjbHVkZSB0cmFpbGluZyBOVUwgYnl0ZSAqLwomIzQzOwomIzQzOwlkc3RfbGVuID0gc3Rybmxlbihkc3QsIHNpemUpOwomIzQzOwlpZiAoZW1iZWRfbGVuICYjNDM7IGRzdF9sZW4gJiM0MzsgMSAmZ3Q7IHNpemUpIHsKJiM0MzsJCXByX2VycigmIzM0O2VtYmVkZGVkIGJvb3Rjb25maWcgY21kbGluZSAoJXp1IGJ5dGVzKSBkb2VzIG5vdCBmaXQgaW4gQ09NTUFORF9MSU5FX1NJWkUgd2l0aCAlenUgYnl0ZXMgYWxyZWFkeSB1c2VkOyBpZ25vcmluZyBlbWJlZGRlZCB2YWx1ZXNcbiYjMzQ7LAomIzQzOwkJICAgICAgIGVtYmVkX2xlbiwgZHN0X2xlbik7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3RyX3ByZXBlbmQoZHN0LCBkc3RfbGVuLCBlbWJlZGRlZF9rZXJuZWxfY21kbGluZSwgZW1iZWRfbGVuKTsKJiM0MzsJeGJjX2NtZGxpbmVfYXBwbGllZCA9IHRydWU7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHhiY19lbWJlZGRlZF9jbWRsaW5lX2FwcGxpZWQoKSAtIERpZCB0aGUgZW1iZWRkZWQgY21kbGluZSBnZXQgcHJlcGVuZGVkPwomIzQzOyAqCiYjNDM7ICogUmV0dXJuIHRydWUgaWYgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZSgpIGFjdHVhbGx5IHByZXBlbmRlZCB0aGUKJiM0MzsgKiBlbWJlZGRlZCAmIzM0O2tlcm5lbCYjMzQ7IHN1YnRyZWUuIHNldHVwX2Jvb3RfY29uZmlnKCkgdXNlcyB0aGlzIHRvIGF2b2lkCiYjNDM7ICogcmVuZGVyaW5nIHRoZSBzYW1lIGtleXMgYSBzZWNvbmQgdGltZS4KJiM0MzsgKi8KJiM0Mztib29sIF9faW5pdCB4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4geGJjX2NtZGxpbmVfYXBwbGllZDsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiAjZW5kaWYKIAogLyoKQEAgLTQyNywxMSAmIzQzOzUwNSwzMCBAQCBzdGF0aWMgY2hhciB4YmNfbmFtZWJ1ZltYQkNfS0VZTEVOX01BWF0gX19pbml0ZGF0YTsKIGludCBfX2luaXQgeGJjX3NucHJpbnRfY21kbGluZShjaGFyICpidWYsIHNpemVfdCBzaXplLCBzdHJ1Y3QgeGJjX25vZGUgKnJvb3QpCiB7CiAJc3RydWN0IHhiY19ub2RlICprbm9kZSwgKnZub2RlOwotCWNoYXIgKmVuZCA9IGJ1ZiAmIzQzOyBzaXplOwogCWNvbnN0IGNoYXIgKnZhbCwgKnE7CiYjNDM7CXNpemVfdCBsZW4gPSAwOwogCWludCByZXQ7CiAKJiM0MzsJLyoKJiM0MzsJICogVHJhY2sgdGhlIHJ1bm5pbmcgd3JpdHRlbiBsZW5ndGggcmF0aGVyIHRoYW4gYWR2YW5jaW5nIEBidWYsIHNvIHdlCiYjNDM7CSAqIG5ldmVyIGZvcm0gJiMzNDtidWYgJiM0Mzsgc2l6ZSYjMzQ7IG9yICYjMzQ7YnVmICYjNDM7PSByZXQmIzM0OyB3aGlsZSBAYnVmIGlzIE5VTEwgKHRoZQomIzQzOwkgKiBzaXplLXByb2JlIGNhbGwgcGFzc2VzIGJ1Zj1OVUxMLCBzaXplPTApLiBOVUxMIHBvaW50ZXIgYXJpdGhtZXRpYwomIzQzOwkgKiBpcyB1bmRlZmluZWQgYmVoYXZpb3IgYW5kIHRyaXBzIGhvc3QgVUJTYW4gLyBGT1JUSUZZX1NPVVJDRSB3aGVuCiYjNDM7CSAqIHRoaXMgcmVuZGVyZXIgcnVucyBhdCBrZXJuZWwgYnVpbGQgdGltZS4gc25wcmludGYoTlVMTCwgMCwgLi4uKQomIzQzOwkgKiBpdHNlbGYgaXMgd2VsbCBkZWZpbmVkIGFuZCByZXR1cm5zIHRoZSB3b3VsZC1iZSBsZW5ndGguCiYjNDM7CSAqLwogCXhiY19ub2RlX2Zvcl9lYWNoX2tleV92YWx1ZShyb290LCBrbm9kZSwgdmFsKSB7CiYjNDM7CQkvKgomIzQzOwkJICogQW4gZW1wdHkgb3IgdmFsdWUtb25seSBAcm9vdCAoZS5nLiAmIzM0O2tlcm5lbCB7fSYjMzQ7IG9yCiYjNDM7CQkgKiAmIzM0O2tlcm5lbCA9IHgmIzM0OywgcG9zc2libHkgYWxvbmdzaWRlICYjMzQ7a2VybmVsLmZvbyA9IGJhciYjMzQ7KQomIzQzOwkJICogeWllbGRzIEByb290IGl0c2VsZiBoZXJlLiBTa2lwIGl0OiBjb21wb3NpbmcgYSBrZXkgZm9yIGl0CiYjNDM7CQkgKiB3b3VsZCBmYWlsIHdpdGggLUVJTlZBTCwgeWV0IGFueSByZWFsIGRlc2NlbmRhbnQga2V5cyBtdXN0CiYjNDM7CQkgKiBzdGlsbCBiZSByZW5kZXJlZC4gQW4gZW50aXJlbHkgZW1wdHkgc3VidHJlZSB0aGVuIHJlbmRlcnMKJiM0MzsJCSAqIG5vdGhpbmcgYW5kIHJldHVybnMgMCByYXRoZXIgdGhhbiBhbiBlcnJvci4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGtub2RlID09IHJvb3QpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiAJCXJldCA9IHhiY19ub2RlX2NvbXBvc2Vfa2V5X2FmdGVyKHJvb3QsIGtub2RlLAogCQkJCQl4YmNfbmFtZWJ1ZiwgWEJDX0tFWUxFTl9NQVgpOwogCQlpZiAocmV0ICZsdDsgMCkKQEAgLTQzOSwxMCAmIzQzOzUzNiwxMSBAQCBpbnQgX19pbml0IHhiY19zbnByaW50X2NtZGxpbmUoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgc3RydWN0IHhiY19ub2RlICpyb290KQogCiAJCXZub2RlID0geGJjX25vZGVfZ2V0X2NoaWxkKGtub2RlKTsKIAkJaWYgKCF2bm9kZSkgewotCQkJcmV0ID0gc25wcmludGYoYnVmLCByZXN0KGJ1ZiwgZW5kKSwgJiMzNDslcyAmIzM0OywgeGJjX25hbWVidWYpOwomIzQzOwkJCXJldCA9IHNucHJpbnRmKGJ1ZiA/IGJ1ZiAmIzQzOyBsZW4gOiBOVUxMLCByZXN0KGxlbiwgc2l6ZSksCiYjNDM7CQkJCSAgICAgICAmIzM0OyVzICYjMzQ7LCB4YmNfbmFtZWJ1Zik7CiAJCQlpZiAocmV0ICZsdDsgMCkKIAkJCQlyZXR1cm4gcmV0OwotCQkJYnVmICYjNDM7PSByZXQ7CiYjNDM7CQkJbGVuICYjNDM7PSByZXQ7CiAJCQljb250aW51ZTsKIAkJfQogCQl4YmNfYXJyYXlfZm9yX2VhY2hfdmFsdWUodm5vZGUsIHZhbCkgewpAQCAtNDUyLDE1ICYjNDM7NTUwLDE1IEBAIGludCBfX2luaXQgeGJjX3NucHJpbnRfY21kbGluZShjaGFyICpidWYsIHNpemVfdCBzaXplLCBzdHJ1Y3QgeGJjX25vZGUgKnJvb3QpCiAJCQkgKiB3aGl0ZXNwYWNlLgogCQkJICovCiAJCQlxID0gc3RycGJyayh2YWwsICYjMzQ7IFx0XHJcbiYjMzQ7KSA/ICYjMzQ7XCYjMzQ7JiMzNDsgOiAmIzM0OyYjMzQ7OwotCQkJcmV0ID0gc25wcmludGYoYnVmLCByZXN0KGJ1ZiwgZW5kKSwgJiMzNDslcz0lcyVzJXMgJiMzNDssCi0JCQkJICAgICAgIHhiY19uYW1lYnVmLCBxLCB2YWwsIHEpOwomIzQzOwkJCXJldCA9IHNucHJpbnRmKGJ1ZiA/IGJ1ZiAmIzQzOyBsZW4gOiBOVUxMLCByZXN0KGxlbiwgc2l6ZSksCiYjNDM7CQkJCSAgICAgICAmIzM0OyVzPSVzJXMlcyAmIzM0OywgeGJjX25hbWVidWYsIHEsIHZhbCwgcSk7CiAJCQlpZiAocmV0ICZsdDsgMCkKIAkJCQlyZXR1cm4gcmV0OwotCQkJYnVmICYjNDM7PSByZXQ7CiYjNDM7CQkJbGVuICYjNDM7PSByZXQ7CiAJCX0KIAl9CiAKLQlyZXR1cm4gYnVmIC0gKGVuZCAtIHNpemUpOwomIzQzOwlyZXR1cm4gbGVuOwogfQogI3VuZGVmIHJlc3QKIApkaWZmIC0tZ2l0IGEvbGliL2VtYmVkZGVkLWNtZGxpbmUuUyBiL2xpYi9lbWJlZGRlZC1jbWRsaW5lLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmJkYTgxYjRhNDJiZWFmCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvbGliL2VtYmVkZGVkLWNtZGxpbmUuUwpAQCAtMCwwICYjNDM7MSwxNiBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCiYjNDM7LyoKJiM0MzsgKiBFbWJlZCB0aGUgYnVpbGQtdGltZS1yZW5kZXJlZCBib290Y29uZmlnICYjMzQ7a2VybmVsJiMzNDsgc3VidHJlZSBhcyBhIGZsYXQKJiM0MzsgKiBjbWRsaW5lIHN0cmluZy4gc2V0dXBfYXJjaCgpIHByZXBlbmRzIHRoaXMgdG8gYm9vdF9jb21tYW5kX2xpbmUgb24KJiM0MzsgKiBhcmNoaXRlY3R1cmVzIHRoYXQgc2VsZWN0IEFSQ0hfU1VQUE9SVFNfQ01ETElORV9GUk9NX0JPT1RDT05GSUcuCiYjNDM7ICoKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgQnJlbm8gTGVpdGFvICZsdDtsZWl0YW9AZGViaWFuLm9yZyZndDsKJiM0MzsgKi8KJiM0MzsJLnNlY3Rpb24gLmluaXQucm9kYXRhLmVtYmVkX2NtZGxpbmUsICYjMzQ7YSYjMzQ7LCAlcHJvZ2JpdHMKJiM0MzsJLmdsb2JhbCBlbWJlZGRlZF9rZXJuZWxfY21kbGluZQomIzQzO2VtYmVkZGVkX2tlcm5lbF9jbWRsaW5lOgomIzQzOwkuaW5jYmluICYjMzQ7bGliL2VtYmVkZGVkX2NtZGxpbmUuYmluJiMzNDsKJiM0MzsJLmJ5dGUgMAomIzQzOwkuZ2xvYmFsIGVtYmVkZGVkX2tlcm5lbF9jbWRsaW5lX2VuZAomIzQzO2VtYmVkZGVkX2tlcm5lbF9jbWRsaW5lX2VuZDoKZGlmZiAtLWdpdCBhL3Rvb2xzL2Jvb3Rjb25maWcvTWFrZWZpbGUgYi90b29scy9ib290Y29uZmlnL01ha2VmaWxlCmluZGV4IDkwZWI0N2M5ZDhkZTY3Li4zY2I4MDY2ZDUxNDFiYiAxMDA2NDQKLS0tIGEvdG9vbHMvYm9vdGNvbmZpZy9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy9ib290Y29uZmlnL01ha2VmaWxlCkBAIC0xNSw3ICYjNDM7MTUsNyBAQCBvdmVycmlkZSBDRkxBR1MgJiM0Mzs9IC1XYWxsIC1nIC1JJChDVVJESVIpL2luY2x1ZGUKIEFMTF9UQVJHRVRTIDo9IGJvb3Rjb25maWcKIEFMTF9QUk9HUkFNUyA6PSAkKHBhdHN1YnN0ICUsJChPVVRQVVQpJSwkKEFMTF9UQVJHRVRTKSkKIAotYWxsOiAkKEFMTF9QUk9HUkFNUykgdGVzdAomIzQzO2FsbDogJChBTExfUFJPR1JBTVMpCiAKICQoT1VUUFVUKWJvb3Rjb25maWc6IG1haW4uYyBpbmNsdWRlL2xpbnV4L2Jvb3Rjb25maWcuaCAkKExJQlNSQykKIAkkKENDKSAkKGZpbHRlciAlLmMsJF4pICQoQ0ZMQUdTKSAkKExERkxBR1MpIC1vICRACkBAIC0yNyw0ICYjNDM7MjcsNCBAQCBpbnN0YWxsOiAkKEFMTF9QUk9HUkFNUykKIAlpbnN0YWxsICQoT1VUUFVUKWJvb3Rjb25maWcgJChERVNURElSKSQoYmluZGlyKQogCiBjbGVhbjoKLQkkKFJNKSAtZiAkKE9VVFBVVCkqLm8gJChBTExfUFJPR1JBTVMpCiYjNDM7CXJtIC1mICQoT1VUUFVUKSoubyAkKEFMTF9QUk9HUkFNUykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTY6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM5OQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDQzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgQm9vdCBDb25maWd1cmF0aW9uIEVuaGFuY2VtZW50OiBFbWJlZGRpbmcgQm9vdGNvbmZpZyBpbnRvIHRoZSBDb21tYW5kIExpbmUqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiB3b3JraW5nIG9uIHRoaXMgcGF0Y2ggc2VyaWVzLiBUaGUgZ29hbCBpcyB0byBpbXByb3ZlIGhvdyB3ZSBoYW5kbGUgYm9vdCBjb25maWd1cmF0aW9ucywgc3BlY2lmaWNhbGx5IGJ5IGludGVncmF0aW5nIHRoZSBlbWJlZGRlZCAmIzM0O2tlcm5lbCYjMzQ7IHN1YnRyZWUgZnJvbSB0aGUgYm9vdGNvbmZpZyBpbnRvIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lICphdCBidWlsZCB0aW1lKi4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBpbXByb3ZlbWVudCBiZWNhdXNlIGl0IGxldHMgZWFybHkgYXJjaGl0ZWN0dXJlIHNldHVwIHJvdXRpbmVzLCBsaWtlIGBzZXR1cF9hcmNoKClgLCBhY2Nlc3MgdmFsdWVzIGRlZmluZWQgaW4gdGhhdCBlbWJlZGRlZCBzdWJ0cmVlLiBUaGF0JiMzOTtzIGEgZ29vZCBtb3ZlLCBnaXZpbmcgdXMgYWNjZXNzIHRvIHBhcmFtZXRlcnMgcmlnaHQgZnJvbSB0aGUgc3RhcnQuCgpFc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBzZXQgYWx0ZXJzIGhvdyB3ZSBoYW5kbGUgZWFybHkgcGFyYW1ldGVyIGludGVycHJldGF0aW9uLiBXZSYjMzk7cmUgZWZmZWN0aXZlbHkgZmxhdHRlbmluZyB0aGUgYm9vdGNvbmZpZyAmIzM0O2tlcm5lbCYjMzQ7IHN1YnRyZWUgaW50byBhIGNvbW1hbmQtbGluZSBzdHJpbmcgYW5kIHRoZW4gcHJlcGVuZGluZyBpdCB0byB0aGUgZXhpc3RpbmcgYGJvb3RfY29tbWFuZF9saW5lYCBkdXJpbmcgdGhhdCBjcml0aWNhbCBgc2V0dXBfYXJjaCgpYCBwaGFzZS4KCkxvb2tpbmcgYXQgdGhlIGNoYW5nZXMsIEkmIzM5O20gbW9kaWZ5aW5nIHF1aXRlIGEgZmV3IGZpbGVzOiBgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdGAgZm9yIHRoZSB1c2VyIGRvY3MsIHRoZSBgTUFJTlRBSU5FUlNgIGZpbGUsIHNldmVyYWwgYE1ha2VmaWxlc2AsIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYGFyY2gveDg2L0tjb25maWdgIGFuZCBgYXJjaC94ODYva2VybmVsL3NldHVwLmNgLCBjb3JlIGhlYWRlcnMgbGlrZSBgaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmhgLCBzb21lIGltcG9ydGFudCBgaW5pdC9LY29uZmlnYCBhbmQgYGluaXQvbWFpbi5jYCBmaWxlcywgdGhlIGBsaWJgIGRpcmVjdG9yeSAoaW5jbHVkaW5nIGBib290Y29uZmlnLmNgIGFuZCBgZW1iZWRkZWQtY21kbGluZS5TYCksIGFuZCBldmVuIHRoZSBgdG9vbHMvYm9vdGNvbmZpZy9NYWtlZmlsZWAuIFRoYXQmIzM5O3MgYSBicm9hZCB0b3VjaCwgYnV0IGl0IG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlLgoKRnVuY3Rpb25hbGx5LCB0aGlzIGltcGFjdHMgdGhlIGtlcm5lbCYjMzk7cyBib290IHByb2Nlc3Mgc3BlY2lmaWNhbGx5IHdpdGhpbiBgc2V0dXBfYXJjaGAgYW5kIGBzZXR1cF9ib290X2NvbmZpZ2AuIFRoZSBuZXcgY29kZSBpbnRyb2R1Y2VzIGBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUdgLiBJIGFsc28gc2VlIGBDT05GSUdfQVJDSF9TVVBQT1JUU19DTURMSU5FX0ZST01fQk9PVENPTkZJR2AuIE9mIGNvdXJzZSwgZXZlcnl0aGluZyBpcyBnYXRlZCBieSBgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHYC4gU28sIGhvdyBkbyB3ZSB0ZXN0IHRoaXM/CgpPa2F5LCBzbyB0byBwcm9wZXJseSB0ZXN0IHRoaXMgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUc9eWAsIG9idmlvdXNseS4gQnV0LCB0aGF0IGRlcGVuZHMgb24gYEJPT1RfQ09ORklHX0VNQkVEX0ZJTEUgIT0gJiMzNDsmIzM0O2AgYWxvbmcgd2l0aCBgQVJDSF9TVVBQT1JUU19DTURMSU5FX0ZST01fQk9PVENPTkZJR2AgYW5kIGBDTURMSU5FID0gJiMzNDsmIzM0O2AuIEhtbSwgc28gSSBuZWVkIGBCT09UX0NPTkZJR19FTUJFRF9GSUxFYCB0byBiZSBzZXQgdG8gYSBub24tZW1wdHkgc3RyaW5nLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGF0IGBDT05GSUdfQk9PVF9DT05GSUdfRU1CRUQ9eWAgaXMgc2V0IHRvby4gSXQmIzM5O3MgcHJvYmFibHkgaW1wbGllZCB3aGVuIGBCT09UX0NPTkZJR19FTUJFRF9GSUxFYCBpcyBzZXQsIG9yIG1heWJlIGBCT09UX0NPTkZJR19FTUJFRF9GSUxFYCBkZXBlbmRzIG9uIGl0LiBJIHNob3VsZCBnbyBiYWNrIGFuZCBjaGVjayB0aGUgYGluaXQvS2NvbmZpZ2AgdG8gYmUgc3VyZSBhYm91dCBgQk9PVF9DT05GSUdfRU1CRURfRklMRWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTY6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJPT1RfQ09ORklHX0VNQkVEX0ZJTEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE1NTA9Y29uZmlnIEJPT1RfQ09ORklHX0VNQkVEXG4tLVxuaW5pdC9LY29uZmlnLTE1NjAtXG5pbml0L0tjb25maWc6MTU2MTpjb25maWcgQk9PVF9DT05GSUdfRU1CRURfRklMRVxuaW5pdC9LY29uZmlnLTE1NjItXHRzdHJpbmcgXCYjMzQ7RW1iZWRkZWQgYm9vdGNvbmZpZyBmaWxlIHBhdGhcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxNjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDUyNgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGFydCBvZiB0aGUgY29uZmlndXJhdGlvbiBzeXN0ZW0gYmV0dGVyLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBteSBlZmZvcnRzIGFyb3VuZCBsaW5lIDE1NjEuIEhvcGVmdWxseSwgdGhpcyBzZWN0aW9uIGhhcyB3aGF0IEkgbmVlZCB0byB1bmRlcnN0YW5kLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYmVpbmcgZGVmaW5lZCB0aGVyZSBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gdGhlIGJpZ2dlciBwaWN0dXJlLiBUaGlzIGZlZWxzIGxpa2UgaXQgc2hvdWxkIGdpdmUgbWUgc29tZSBzb2xpZCBjb250ZXh0IGFuZCBjbGFyaWZ5IHRoYXQgc3BlY2lmaWMgYXJlYSBvZiB0aGUgc3lzdGVtLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE2OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTU1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTUwOlx0Y29uZmlnIEJPT1RfQ09ORklHX0VNQkVEXG4xNTUxOlx0XHRib29sIFwmIzM0O0VtYmVkIGJvb3Rjb25maWcgZmlsZSBpbiB0aGUga2VybmVsXCYjMzQ7XG4xNTUyOlx0XHRkZXBlbmRzIG9uIEJPT1RfQ09ORklHXG4xNTUzOlx0XHRoZWxwXG4xNTU0Olx0XHQgIEVtYmVkIGEgYm9vdGNvbmZpZyBmaWxlIGdpdmVuIGJ5IEJPT1RfQ09ORklHX0VNQkVEX0ZJTEUgaW4gdGhlXG4xNTU1Olx0XHQgIGtlcm5lbC4gVXN1YWxseSwgdGhlIGJvb3Rjb25maWcgZmlsZSBpcyBsb2FkZWQgd2l0aCB0aGUgaW5pdHJkXG4xNTU2Olx0XHQgIGltYWdlLiBCdXQgaWYgdGhlIHN5c3RlbSBkb2VzbiYjMzk7dCBzdXBwb3J0IGluaXRyZCwgdGhpcyBvcHRpb24gd2lsbFxuMTU1NzpcdFx0ICBoZWxwIHlvdSBieSBlbWJlZGRpbmcgYSBib290Y29uZmlnIGZpbGUgd2hpbGUgYnVpbGRpbmcgdGhlIGtlcm5lbC5cbjE1NTg6XHRcbjE1NTk6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbjE1NjA6XHRcbjE1NjE6XHRjb25maWcgQk9PVF9DT05GSUdfRU1CRURfRklMRVxuMTU2MjpcdFx0c3RyaW5nIFwmIzM0O0VtYmVkZGVkIGJvb3Rjb25maWcgZmlsZSBwYXRoXCYjMzQ7XG4xNTYzOlx0XHRkZXBlbmRzIG9uIEJPT1RfQ09ORklHX0VNQkVEXG4xNTY0Olx0XHRoZWxwXG4xNTY1Olx0XHQgIFNwZWNpZnkgYSBib290Y29uZmlnIGZpbGUgd2hpY2ggd2lsbCBiZSBlbWJlZGRlZCB0byB0aGUga2VybmVsLlxuMTU2NjpcdFx0ICBUaGlzIGJvb3Rjb25maWcgd2lsbCBiZSB1c2VkIGlmIHRoZXJlIGlzIG5vIGluaXRyZCBvciBubyBvdGhlclxuMTU2NzpcdFx0ICBib290Y29uZmlnIGluIHRoZSBpbml0cmQuXG4xNTY4Olx0XG4xNTY5Olx0Y29uZmlnIEFSQ0hfU1VQUE9SVFNfQ01ETElORV9GUk9NX0JPT1RDT05GSUdcbjE1NzA6XHRcdGJvb2xcbjE1NzE6XHRcdGhlbHBcbjE1NzI6XHRcdCAgU2lsZW50IHN5bWJvbDsgbm8gQyBjb2RlIHJlYWRzIGl0IGRpcmVjdGx5LiBBcmNoaXRlY3R1cmVzXG4xNTczOlx0XHQgIHNlbGVjdCBpdCBvbmNlIHRoZWlyIHNldHVwX2FyY2goKSBjYWxsc1xuMTU3NDpcdFx0ICB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lKCkgYmVmb3JlIHBhcnNlX2Vhcmx5X3BhcmFtKCkuXG4xNTc1Olx0XHQgIEl0cyBvbmx5IHJvbGUgaXMgdG8gZ2F0ZSB0aGUgdXNlci12aXNpYmxlXG4xNTc2Olx0XHQgIENNRExJTkVfRlJPTV9CT09UQ09ORklHIG9wdGlvbiBwZXItYXJjaCwgdGhlIHNhbWVcbjE1Nzc6XHRcdCAgQVJDSF9TVVBQT1JUU18qIGlkaW9tIHVzZWQgYnkgQVJDSF9TVVBQT1JUU19DRkksIGV0Yy5cbjE1Nzg6XHRcbjE1Nzk6XHRjb25maWcgQ01ETElORV9GUk9NX0JPT1RDT05GSUdcbjE1ODA6XHRcdGJvb2wgXCYjMzQ7UmVuZGVyIGVtYmVkZGVkIGJvb3Rjb25maWcgYXMga2VybmVsIGNtZGxpbmUgYXQgYnVpbGQgdGltZVwmIzM0O1xuMTU4MTpcdFx0ZGVwZW5kcyBvbiBCT09UX0NPTkZJR19FTUJFRF9GSUxFICE9IFwmIzM0O1wmIzM0O1xuMTU4MjpcdFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXG4xNTgzOlx0XHRkZXBlbmRzIG9uIENNRExJTkUgPSBcJiMzNDtcJiMzNDtcbjE1ODQ6XHRcdGRlZmF1bHQgblxuMTU4NTpcdFx0aGVscFxuMTU4NjpcdFx0ICBSZW5kZXIgdGhlIFwmIzM0O2tlcm5lbFwmIzM0OyBzdWJ0cmVlIG9mIHRoZSBlbWJlZGRlZCBib290Y29uZmlnIGZpbGUgaW50byBhXG4xNTg3Olx0XHQgIGZsYXQgY21kbGluZSBzdHJpbmcgYXQga2VybmVsIGJ1aWxkIHRpbWUgYW5kIHByZXBlbmQgaXQgdG9cbjE1ODg6XHRcdCAgYm9vdF9jb21tYW5kX2xpbmUgZHVyaW5nIGVhcmx5IGFyY2hpdGVjdHVyZSBzZXR1cC4gVGhpcyBtYWtlc1xuMTU4OTpcdFx0ICBlYXJseV9wYXJhbSgpIGhhbmRsZXJzIChlLmcuIG1lbT0sIGVhcmx5Y29uPSwgbG9nbGV2ZWw9KSBzZWUgdGhlXG4xNTkwOlx0XHQgIHZhbHVlcyBzdXBwbGllZCB2aWEgdGhlIGVtYmVkZGVkIGJvb3Rjb25maWcuXG4xNTkxOlx0XG4xNTkyOlx0XHQgIFRoZSBydW50aW1lIGJvb3Rjb25maWcgcGFyc2VyIGlzIHVuYWZmZWN0ZWQsIHNvIHRyZWUtc3RydWN0dXJlZFxuMTU5MzpcdFx0ICBjb25zdW1lcnMgc3VjaCBhcyBmdHJhY2UgYm9vdC10aW1lIHRyYWNpbmcga2VlcCB3b3JraW5nLlxuMTU5NDpcdFxuMTU5NTpcdFx0ICBOb3RlOiB3aGVuIGFuIGluaXRyZCBhbHNvIGNhcnJpZXMgYSBib290Y29uZmlnLCBpdHMgXCYjMzQ7a2VybmVsXCYjMzQ7XG4xNTk2Olx0XHQgIHN1YnRyZWUgaXMgc3RpbGwgcGFyc2VkIGF0IHJ1bnRpbWUsIGJ1dCB0aGUgZW1iZWRkZWQgXCYjMzQ7a2VybmVsXCYjMzQ7XG4xNTk3Olx0XHQgIGtleXMgcmVtYWluIGluIGJvb3RfY29tbWFuZF9saW5lIGZvciBwYXJzZV9lYXJseV9wYXJhbSgpIGFuZFxuMTU5ODpcdFx0ICBlbmQgdXAgbGF0ZXIgdGhhbiB0aGUgaW5pdHJkIGtleXMgaW4gc2F2ZWRfY29tbWFuZF9saW5lLCBzb1xuMTU5OTpcdFx0ICBwYXJzZV9hcmdzKCkgbGFzdC13aW5zIGZhdm9ycyB0aGUgZW1iZWRkZWQgdmFsdWVzLiBJZiB5b3UgbmVlZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE2OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTc0CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQm9vdCBDb25maWd1cmF0aW9uIFByb2Nlc3MqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyB3ZSBuZWVkIHRvIGhhbmRsZSBzZXZlcmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9uczogYEJPT1RfQ09ORklHYCwgYEJPT1RfQ09ORklHX0VNQkVEYCwgYEJPT1RfQ09ORklHX0VNQkVEX0ZJTEVgICh3aGljaCB3aWxsIGJlIHNldCB0byBhIGZpbGUgcGF0aCksIGFuZCBgQ01ETElORV9GUk9NX0JPT1RDT05GSUdgLiBCdXQgaGVyZSYjMzk7cyB3aGVyZSBpdCBnZXRzIHRyaWNreSDigJMgYEJPT1RfQ09ORklHX0VNQkVEX0ZJTEVgIGlzIGEgc3RyaW5nLCBhbmQgSSYjMzk7bSBub3Qgc3VyZSBpZiBTeXprYWxsZXIgd2lsbCByZWxpYWJseSBwcm92aWRlIGEgdmFsaWQgZmlsZSBwYXRoIGZvciBpdC4gQ2FuIGl0PyBJJiMzOTttIG5vdCBlbnRpcmVseSBjb252aW5jZWQuCgpJZiBTeXprYWxsZXIgb25seSBlbmFibGVzIGBDTURMSU5FX0ZST01fQk9PVENPTkZJR2AsIHRoZW4gdGhlIHN5c3RlbSAqbmVlZHMqIGBCT09UX0NPTkZJR19FTUJFRF9GSUxFYCB0byBiZSBzZXQgdG8gc29tZXRoaW5nIGNvbmNyZXRlLiBTeXprYWxsZXIgY2FuIHNldCBzdHJpbmdzIGluIGl0cyBjb25maWd1cmF0aW9uIGdlbmVyYXRpb24sIGJ1dCBpdCBjb3VsZCBlbmQgdXAganVzdCBnaXZpbmcgYSByYW5kb20gc3RyaW5nLCBvciBldmVuIG5vdGhpbmcgYXQgYWxsLiBBY3R1YWxseSwgU3l6a2FsbGVyICpkb2VzKiBoYXZlIGEgd2F5IHRvIHByb3ZpZGUgZmlsZXMsIGJ1dCBpdCYjMzk7cyBhIGJpdCBvZiBhIHdvcmthcm91bmQuCgpUaGUgcmVhbCBxdWVzdGlvbiBoZXJlIGlzIHdoZXRoZXIgdGhpcyBwYXRjaCBpcyBldmVuIHdvcnRoIHRoZSBlZmZvcnQgdG8gZnV6ei4gVGhlIGZ1bmN0aW9uYWxpdHkgaXQgYWRkcyBvY2N1cnMgaW4gdHdvIHBoYXNlczogaXQgcnVucyBhdCAqYnVpbGQgdGltZSosIGdlbmVyYXRpbmcgdGhlIGJvb3QgY29uZmlndXJhdGlvbiBpbnRvIGEgY29tbWFuZCBsaW5lIHN0cmluZywgYW5kIGFsc28gYXQgKmVhcmx5IGJvb3QgdGltZSogd2l0aCBgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZWAgd2l0aGluIGBzZXR1cF9hcmNoYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZWAgY2FsbCwgc28gbGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTY6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYz05MTY9dm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9zZXR1cC5jLTk2NS1cdGlmIChib290Y29uZmlnX2NtZGxpbmVfcmVxdWVzdGVkKCkpXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYzo5NjY6XHRcdHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoYm9vdF9jb21tYW5kX2xpbmUsXG5hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYy05NjctXHRcdFx0XHRcdCAgICAgQ09NTUFORF9MSU5FX1NJWkUpO1xuLS1cbmluY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oPTMwNT1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKnhiY19nZXRfZW1iZWRkZWRfYm9vdGNvbmZpZyhzaXplX3QgKnNpemUpXG4tLVxuaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmgtMzEyLSNpZmRlZiBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUdcbmluY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oOjMxMzp2b2lkIF9faW5pdCB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lKGNoYXIgKmRzdCwgc2l6ZV90IHNpemUpO1xuaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmgtMzE0LWJvb2wgX19pbml0IHhiY19lbWJlZGRlZF9jbWRsaW5lX2FwcGxpZWQodm9pZCk7XG5pbmNsdWRlL2xpbnV4L2Jvb3Rjb25maWcuaC0zMTUtI2Vsc2VcbmluY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oOjMxNjpzdGF0aWMgaW5saW5lIHZvaWQgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZShjaGFyICpkc3QsIHNpemVfdCBzaXplKSB7IH1cbmluY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oLTMxNy1zdGF0aWMgaW5saW5lIGJvb2wgeGJjX2VtYmVkZGVkX2NtZGxpbmVfYXBwbGllZCh2b2lkKSB7IHJldHVybiBmYWxzZTsgfVxuLS1cbmluaXQvS2NvbmZpZz0xNTY5PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXG4tLVxuaW5pdC9LY29uZmlnLTE1NzMtXHQgIHNlbGVjdCBpdCBvbmNlIHRoZWlyIHNldHVwX2FyY2goKSBjYWxsc1xuaW5pdC9LY29uZmlnOjE1NzQ6XHQgIHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoKSBiZWZvcmUgcGFyc2VfZWFybHlfcGFyYW0oKS5cbmluaXQvS2NvbmZpZy0xNTc1LVx0ICBJdHMgb25seSByb2xlIGlzIHRvIGdhdGUgdGhlIHVzZXItdmlzaWJsZVxuLS1cbmxpYi9ib290Y29uZmlnLmM9NTg9c3RhdGljIHZvaWQgX19pbml0IHN0cl9wcmVwZW5kKGNoYXIgKmRzdCwgc2l6ZV90IGRzdF9sZW4sXG4tLVxubGliL2Jvb3Rjb25maWcuYy02NS0vKipcbmxpYi9ib290Y29uZmlnLmM6NjY6ICogeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZSgpIC0gUHJlcGVuZCBlbWJlZGRlZCBib290Y29uZmlnIGNtZGxpbmVcbmxpYi9ib290Y29uZmlnLmMtNjctICogQGRzdDogY21kbGluZSBidWZmZXIgdG8gcHJlcGVuZCBpbnRvIChtdXN0IGFscmVhZHkgY29udGFpbiBhIE5VTCBieXRlKVxuLS1cbmxpYi9ib290Y29uZmlnLmMtODEtICovXG5saWIvYm9vdGNvbmZpZy5jOjgyOnZvaWQgX19pbml0IHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSlcbmxpYi9ib290Y29uZmlnLmMtODMte1xuLS1cbmxpYi9ib290Y29uZmlnLmMtMTA0LSAqXG5saWIvYm9vdGNvbmZpZy5jOjEwNTogKiBSZXR1cm4gdHJ1ZSBpZiB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lKCkgYWN0dWFsbHkgcHJlcGVuZGVkIHRoZVxubGliL2Jvb3Rjb25maWcuYy0xMDYtICogZW1iZWRkZWQgXCYjMzQ7a2VybmVsXCYjMzQ7IHN1YnRyZWUuIHNldHVwX2Jvb3RfY29uZmlnKCkgdXNlcyB0aGlzIHRvIGF2b2lkXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTY6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4NTIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGdXp6YWJpbGl0eSBvZiBFYXJseSBCb290IENvZGUqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgc3l6a2FsbGVyIG1pZ2h0IGJlIGFibGUgdG8gZnV6eiB0aGlzIHBhcnRpY3VsYXIgYml0IG9mIGtlcm5lbCBjb2RlLiBUaGlzIGB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lYCBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIGBzZXR1cF9hcmNoKClgLCB3aGljaCBpcyAqcmVhbGx5KiBlYXJseSBpbiB0aGUgYm9vdCBwcm9jZXNzLiBTeXprYWxsZXImIzM5O3MgdHlwaWNhbCBhcHByb2FjaCBpcyB0byBmdXp6IGJ5IHJ1bm5pbmcgdXNlcnNwYWNlIHByb2dyYW1zIHRoYXQgbWFrZSBzeXNjYWxscyBhZnRlciB0aGUga2VybmVsIGlzIHVwLiBTbywgYW55dGhpbmcgdGhhdCBvbmx5IHJ1bnMgb25jZSBkdXJpbmcgZWFybHkgYm9vdCwgZXNwZWNpYWxseSBjb2RlIHRoYXQgcmVsaWVzIGhlYXZpbHkgb24gYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIGxpa2UgdGhpcyBmdW5jdGlvbiwgaXMgZ2VuZXJhbGx5IGdvaW5nIHRvIGJlIGEgdG91Z2ggdGFyZ2V0IGZvciBzeXprYWxsZXIgdGhyb3VnaCBpdHMgbm9ybWFsIHN5c2NhbGwgaW50ZXJmYWNlLgoKQnV0IHdhaXQsIHN5emthbGxlciAqY2FuKiBmdXp6IGVhcmx5IGJvb3QgY29kZSB1bmRlciBzb21lIGNpcmN1bXN0YW5jZXMsIGxpa2UgaWYgaXQgY2FuIGJlIHRyaWdnZXJlZCBieSB2YXJ5aW5nIHRoZSBjb21tYW5kIGxpbmUgb3IgaWYgaXQmIzM5O3MganVzdCBwYXJ0IG9mIHRoZSBub3JtYWwgYm9vdCBwcm9jZXNzLiBUaGUgaXNzdWUgaGVyZSwgdGhvdWdoLCBpcyB0aGF0IHRoZSBpbnB1dCB0byBgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZWAsIHNwZWNpZmljYWxseSBgZW1iZWRkZWRfa2VybmVsX2NtZGxpbmVgLCBpcyBnZW5lcmF0ZWQgYXQgYnVpbGQgdGltZSBkaXJlY3RseSBmcm9tIGBCT09UX0NPTkZJR19FTUJFRF9GSUxFYC4gU3l6a2FsbGVyIGRvZXNuJiMzOTt0IG1vZGlmeSB0aGUga2VybmVsIGJ1aWxkIHByb2Nlc3Mgb3IgdGhlIGNvbnRlbnRzIG9mIGBCT09UX0NPTkZJR19FTUJFRF9GSUxFYCBiZXR3ZWVuIGZ1enppbmcgaXRlcmF0aW9ucy4gU28sIHRoZSBlbWJlZGRlZCBmaWxlIGlzIGVzc2VudGlhbGx5IHN0YXRpYyB0aHJvdWdob3V0IHRoZSBlbnRpcmUgZnV6emluZyBzZXNzaW9uLgoKVGhlcmVmb3JlLCB0aGUgZXhlY3V0aW9uIHBhdGggdGhyb3VnaCBgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZWAgYXBwZWFycyB0byBiZSBjb21wbGV0ZWx5IHN0YXRpYyBhbmQgZGV0ZXJtaW5pc3RpYy4gTm8gdXNlciBpbnB1dCBmcm9tIHRoZSBmdXp6ZXIgZ2V0cyB0byB0aGlzIGNvZGUgYXQgcnVudGltZS4gSG1tLi4ud2FpdCEgRG9lc24mIzM5O3QgYGJvb3Rjb25maWdfY21kbGluZV9yZXF1ZXN0ZWQoKWAgY2hlY2sgaWYgYGJvb3Rjb25maWdgIGlzIG9uIHRoZSBjb21tYW5kIGxpbmU/IENvdWxkIHN5emthbGxlciBwb3RlbnRpYWxseSBtdXRhdGUgdGhlIGNvbW1hbmQgbGluZT8gTm8sIHN5emthbGxlciBib290cyB3aXRoIGEgZml4ZWQgY29tbWFuZCBsaW5lLiBUaGUgcGFyc2luZyBvZiB0aGUgYm9vdGNvbmZpZyBpcyBkb25lIGF0IGJ1aWxkIHRpbWUgdmlhIGB0b29scy9ib290Y29uZmlnL2Jvb3Rjb25maWcgLUNgLiBTbyB0aGUgb25seSBydW50aW1lIHBpZWNlIGlzIHRoZSBgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZWAgZnVuY3Rpb24gd2hpY2gganVzdCBwZXJmb3JtcyBgbWVtbW92ZWAgYW5kIGBtZW1jcHlgIG9mIGEgc3RhdGljIHN0cmluZy4KCkFscmlnaHQsIHRpbWUgdG8gZ28gbG9vayBhdCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmVgIGluIGBsaWIvYm9vdGNvbmZpZy5jYCBhbmQgY29uZmlybSBteSBhc3N1bXB0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTY6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvYm9vdGNvbmZpZy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA4MjpcdHZvaWQgX19pbml0IHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSlcbiAgODM6XHR7XG4gIDg0Olx0XHRzaXplX3QgZW1iZWRfbGVuID0gZW1iZWRkZWRfa2VybmVsX2NtZGxpbmVfZW5kIC0gZW1iZWRkZWRfa2VybmVsX2NtZGxpbmU7XG4gIDg1Olx0XHRzaXplX3QgZHN0X2xlbjtcbiAgODY6XHRcbiAgODc6XHRcdGlmICghc2l6ZSB8fCBlbWJlZF9sZW4gXHUwMDNjPSAxKVx0LyogdHJhaWxpbmcgTlVMIG9ubHkgKi9cbiAgODg6XHRcdFx0cmV0dXJuO1xuICA4OTpcdFx0ZW1iZWRfbGVuLS07XHRcdFx0LyogZXhjbHVkZSB0cmFpbGluZyBOVUwgYnl0ZSAqL1xuICA5MDpcdFxuICA5MTpcdFx0ZHN0X2xlbiA9IHN0cm5sZW4oZHN0LCBzaXplKTtcbiAgOTI6XHRcdGlmIChlbWJlZF9sZW4gJiM0MzsgZHN0X2xlbiAmIzQzOyAxIFx1MDAzZSBzaXplKSB7XG4gIDkzOlx0XHRcdHByX2VycihcJiMzNDtlbWJlZGRlZCBib290Y29uZmlnIGNtZGxpbmUgKCV6dSBieXRlcykgZG9lcyBub3QgZml0IGluIENPTU1BTkRfTElORV9TSVpFIHdpdGggJXp1IGJ5dGVzIGFscmVhZHkgdXNlZDsgaWdub3JpbmcgZW1iZWRkZWQgdmFsdWVzXFxuXCYjMzQ7LFxuICA5NDpcdFx0XHQgICAgICAgZW1iZWRfbGVuLCBkc3RfbGVuKTtcbiAgOTU6XHRcdFx0cmV0dXJuO1xuICA5NjpcdFx0fVxuICA5NzpcdFxuICA5ODpcdFx0c3RyX3ByZXBlbmQoZHN0LCBkc3RfbGVuLCBlbWJlZGRlZF9rZXJuZWxfY21kbGluZSwgZW1iZWRfbGVuKTtcbiAgOTk6XHRcdHhiY19jbWRsaW5lX2FwcGxpZWQgPSB0cnVlO1xuIDEwMDpcdH1cbiAxMDE6XHRcbiAxMDI6XHQvKipcbiAxMDM6XHQgKiB4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkKCkgLSBEaWQgdGhlIGVtYmVkZGVkIGNtZGxpbmUgZ2V0IHByZXBlbmRlZD9cbiAxMDQ6XHQgKlxuIDEwNTpcdCAqIFJldHVybiB0cnVlIGlmIHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoKSBhY3R1YWxseSBwcmVwZW5kZWQgdGhlXG4gMTA2Olx0ICogZW1iZWRkZWQgXCYjMzQ7a2VybmVsXCYjMzQ7IHN1YnRyZWUuIHNldHVwX2Jvb3RfY29uZmlnKCkgdXNlcyB0aGlzIHRvIGF2b2lkXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE2OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTQ5CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGlzIGNvZGUgc25pcHBldC4KCioqQW5hbHl6aW5nIGEgU2ltcGxlIFByZXBlbmQgT3BlcmF0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBpZWNlIG9mIGNvZGUgYW5kIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEl0JiMzOTtzIGp1c3QgYSBzaW1wbGUgc3RyaW5nIHByZXBlbmQgb3BlcmF0aW9uLiBOb3RoaW5nIGNvbXBsZXgsIG5vdGhpbmcgdGhhdCBzaG91bGQgYmUgYSBjYXVzZSBmb3IgY29uY2VybiBpbiB0ZXJtcyBvZiBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvciDigJMgZXNwZWNpYWxseSBzaW5jZSBpdCBvbmx5IHJ1bnMgb25jZSwgYXQgYm9vdCB0aW1lLiBJJiMzOTttIG5vdCBzZWVpbmcgYW55IGV4cG9zZWQgcGFyc2VycyBvciBzdGF0ZSBtYWNoaW5lcyBoZXJlLCBzbyBmdXp6aW5nIHRoaXMgcGFydGljdWxhciBvcGVyYXRpb24gZGlyZWN0bHkgc2VlbXMgdW5uZWNlc3NhcnkuCgpIb3dldmVyLCBJIGp1c3Qgbm90aWNlZCB0aGF0IGB4YmNfc25wcmludF9jbWRsaW5lYCB3YXMgYWxzbyBtb2RpZmllZCwgYW5kIHRoYXQgcmFpc2VzIGEgZmxhZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyB1c2VkIGFuZCB3aGF0IGltcGFjdCB0aG9zZSBjaGFuZ2VzIGhhdmUuIFdoaWxlIHRoZSBpbml0aWFsIG9wZXJhdGlvbiBpdHNlbGYgc2VlbXMgYmVuaWduLCB0aGUgYnJvYWRlciBwaWN0dXJlIG5lZWRzIHRvIGJlIGV2YWx1YXRlZC4gSXQmIzM5O3Mgd29ydGggbm90aW5nIHRoYXQgdGhlIGFjdHVhbCBwYXJzaW5nIG9mIHRoZSBib290Y29uZmlnIGlzIGhhbmRsZWQgYnkgYHRvb2xzL2Jvb3Rjb25maWcvYm9vdGNvbmZpZyAtQ2AgYXQgYnVpbGQgdGltZSwgc28gdGhlIGNvZGUgaW4gcXVlc3Rpb24gaXMgbGlrZWx5IGp1c3QgcHJlcGFyaW5nIHRoZSBkYXRhIGZvciB0aGF0IHByb2Nlc3MuIEJ1dCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCByZWxhdGlvbnNoaXAgYXMgd2VsbC4gTGV0JiMzOTtzIHNlZSB3aGVyZSBgeGJjX3NucHJpbnRfY21kbGluZWAgY29tZXMgaW50byBwbGF5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxNjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4YmNfc25wcmludF9jbWRsaW5lJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oPTI2NT1pbnQgX19pbml0IHhiY19ub2RlX2NvbXBvc2Vfa2V5X2FmdGVyKHN0cnVjdCB4YmNfbm9kZSAqcm9vdCxcbi0tXG5pbmNsdWRlL2xpbnV4L2Jvb3Rjb25maWcuaC0yNjgtLyogUmVuZGVyIGtleS92YWx1ZSBwYWlycyB1bmRlciBAcm9vdCBhcyBhIGZsYXQgY21kbGluZSBzdHJpbmcgKi9cbmluY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oOjI2OTppbnQgX19pbml0IHhiY19zbnByaW50X2NtZGxpbmUoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgc3RydWN0IHhiY19ub2RlICpyb290KTtcbmluY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oLTI3MC1cbi0tXG5pbml0L21haW4uYz0zMjg9c3RhdGljIGNoYXIgKiBfX2luaXQgeGJjX21ha2VfY21kbGluZShjb25zdCBjaGFyICprZXkpXG4tLVxuaW5pdC9tYWluLmMtMzM4LVx0LyogQ291bnQgcmVxdWlyZWQgYnVmZmVyIHNpemUgKi9cbmluaXQvbWFpbi5jOjMzOTpcdGxlbiA9IHhiY19zbnByaW50X2NtZGxpbmUoTlVMTCwgMCwgcm9vdCk7XG5pbml0L21haW4uYy0zNDAtXHRpZiAobGVuIFx1MDAzYz0gMClcbi0tXG5pbml0L21haW4uYy0zNDgtXG5pbml0L21haW4uYzozNDk6XHRyZXQgPSB4YmNfc25wcmludF9jbWRsaW5lKG5ld19jbWRsaW5lLCBsZW4gJiM0MzsgMSwgcm9vdCk7XG5pbml0L21haW4uYy0zNTAtXHRpZiAocmV0IFx1MDAzYyAwIHx8IHJldCBcdTAwM2UgbGVuKSB7XG4tLVxubGliL2Jvb3Rjb25maWcuYz01OD1zdGF0aWMgdm9pZCBfX2luaXQgc3RyX3ByZXBlbmQoY2hhciAqZHN0LCBzaXplX3QgZHN0X2xlbixcbi0tXG5saWIvYm9vdGNvbmZpZy5jLTcxLSAqIGJvb3Rjb25maWcgdG8gQGRzdC4gVGhlIHJlbmRlcmVkIHN0cmluZyBhbHJlYWR5IGVuZHMgd2l0aCBhIHNpbmdsZVxubGliL2Jvb3Rjb25maWcuYzo3MjogKiBzcGFjZSAodGhlIHhiY19zbnByaW50X2NtZGxpbmUoKSBpbnZhcmlhbnQpLCB3aGljaCBzZXJ2ZXMgYXMgdGhlXG5saWIvYm9vdGNvbmZpZy5jLTczLSAqIHNlcGFyYXRvciBiZXR3ZWVuIHRoZSBlbWJlZGRlZCBrZXlzIGFuZCBhbnkgZXhpc3RpbmcgY29udGVudCBvZiBAZHN0LlxuLS1cbmxpYi9ib290Y29uZmlnLmM9NDg5PXN0YXRpYyBjaGFyIHhiY19uYW1lYnVmW1hCQ19LRVlMRU5fTUFYXSBfX2luaXRkYXRhO1xuLS1cbmxpYi9ib290Y29uZmlnLmMtNDkzLS8qKlxubGliL2Jvb3Rjb25maWcuYzo0OTQ6ICogeGJjX3NucHJpbnRfY21kbGluZSgpIC0gUmVuZGVyIGJvb3Rjb25maWcga2V5cyB1bmRlciBAcm9vdCBhcyBhIGNtZGxpbmUgc3RyaW5nXG5saWIvYm9vdGNvbmZpZy5jLTQ5NS0gKiBAYnVmOiBEZXN0aW5hdGlvbiBidWZmZXIgKG1heSBiZSBOVUxMIHdoZW4gQHNpemUgaXMgMCB0byBxdWVyeSB0aGUgbGVuZ3RoKVxuLS1cbmxpYi9ib290Y29uZmlnLmMtNTA0LSAqL1xubGliL2Jvb3Rjb25maWcuYzo1MDU6aW50IF9faW5pdCB4YmNfc25wcmludF9jbWRsaW5lKGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIHN0cnVjdCB4YmNfbm9kZSAqcm9vdClcbmxpYi9ib290Y29uZmlnLmMtNTA2LXtcbi0tXG50b29scy9ib290Y29uZmlnL21haW4uYz0yODk9c3RhdGljIGludCBzaG93X3hiY19rZXJuZWxfY21kbGluZSh2b2lkKVxuLS1cbnRvb2xzL2Jvb3Rjb25maWcvbWFpbi5jLTI5OC1cbnRvb2xzL2Jvb3Rjb25maWcvbWFpbi5jOjI5OTpcdGxlbiA9IHhiY19zbnByaW50X2NtZGxpbmUoTlVMTCwgMCwgcm9vdCk7XG50b29scy9ib290Y29uZmlnL21haW4uYy0zMDAtXHRpZiAobGVuIFx1MDAzYyAwKSB7XG4tLVxudG9vbHMvYm9vdGNvbmZpZy9tYWluLmMtMzEwLVxudG9vbHMvYm9vdGNvbmZpZy9tYWluLmM6MzExOlx0cmV0ID0geGJjX3NucHJpbnRfY21kbGluZShidWYsIGxlbiAmIzQzOyAxLCByb290KTtcbnRvb2xzL2Jvb3Rjb25maWcvbWFpbi5jLTMxMi1cdGlmIChyZXQgXHUwMDNjIDApIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTY6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyODUKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxNDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHhiY19zbnByaW50X2NtZGxpbmUgZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBtb2RpZmllcyBgeGJjX3NucHJpbnRfY21kbGluZWAuIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBpbiBgaW5pdC9tYWluLmNgIHRvIHJlbmRlciB0aGUgYm9vdCBjb25maWd1cmF0aW9uIGludG8gYSBjb21tYW5kLWxpbmUgc3RyaW5nIGR1cmluZyB0aGUga2VybmVsJiMzOTtzIGVhcmx5IGJvb3QgcGhhc2UuIFRoZSBwcmltYXJ5IGNoYW5nZSBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgdW5kZWZpbmVkIGJlaGF2aW9yIGlzc3VlIHdoZW4gdGhlIGJ1ZmZlciAoYGJ1ZmApIHBhc3NlZCB0byBgeGJjX3NucHJpbnRfY21kbGluZWAgaXMgTlVMTC4gSXQgYWxzbyBpbmNsdWRlcyBhIGNoZWNrIHRvIHNraXAgZW1wdHkgb3IgdmFsdWUtb25seSByb290IG5vZGVzIGluIHRoZSBib290IGNvbmZpZ3VyYXRpb24sIHByZXZlbnRpbmcgYSAtRUlOVkFMIGVycm9yIGFuZCBhbGxvd2luZyB0aGUgcmVuZGVyaW5nIG9mIGRlc2NlbmRhbnQga2V5cy4KCk15IGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIGlzIHNvbWV0aGluZyB0aGUgZnV6emVyIGNhbiBtZWFuaW5nZnVsbHkgaW50ZXJhY3Qgd2l0aC4gYHhiY19zbnByaW50X2NtZGxpbmVgIGlzIGNhbGxlZCBieSBgeGJjX21ha2VfY21kbGluZWAsIHdoaWNoIGluIHR1cm4gaXMgaW52b2tlZCBkdXJpbmcgZWFybHkgYm9vdCBieSBgc2V0dXBfYm9vdF9jb25maWdgLiBUaGUgaW5wdXQgdG8gdGhlIHJlbmRlcmluZyBmdW5jdGlvbiBjb21lcyBmcm9tIHRoZSBib290IGNvbmZpZ3VyYXRpb24gZGF0YSwgb2J0YWluZWQgZWl0aGVyIGZyb20gdGhlIGluaXRyZCBvciBhbiBlbWJlZGRlZCBjb25maWd1cmF0aW9uLiBDcnVjaWFsbHksIHRoZSBmdXp6ZXIsIHNwZWNpZmljYWxseSBTeXprYWxsZXIsIGRvZXNuJiMzOTt0IGN1cnJlbnRseSBoYXZlIGEgd2F5IHRvIG1vZGlmeSBlaXRoZXIgdGhlIGluaXRyZCBjb250ZW50IG9yIHRoZSBlbWJlZGRlZCBib290IGNvbmZpZ3VyYXRpb24gZHVyaW5nIGEgZnV6emluZyBzZXNzaW9uLiBUaGVzZSBkYXRhIGFyZSBzdGF0aWMgcGVyIFZNL2J1aWxkLgoKVGhlcmVmb3JlLCBzaW5jZSB0aGUgaW5wdXQgdG8gdGhlIG1vZGlmaWVkIGNvZGUgaXMgZXNzZW50aWFsbHkgZml4ZWQgZHVyaW5nIGEgZnV6emluZyBydW4sIHRoZSBmdXp6ZXIgY2Fubm90IGV4cGxvcmUgZGlmZmVyZW50IGV4ZWN1dGlvbiBwYXRocyB3aXRoaW4gYHhiY19zbnByaW50X2NtZGxpbmVgIGJ5IG1hbmlwdWxhdGluZyBpbnB1dCBkYXRhIHRocm91Z2ggc3lzY2FsbHMuIFRoZXJlJiMzOTtzIG5vIHdheSB0byBpbmZsdWVuY2UgaXQuIEl0JiMzOTtzIGVzc2VudGlhbGx5IGEgb25lLXRpbWUgZXhlY3V0aW9uIHdpdGggc3RhdGljIGlucHV0cy4gSSBkaWQgY2hlY2sgYC9wcm9jL2Jvb3Rjb25maWdgIGFuZCBpdCYjMzk7cyByZWFkLW9ubHksIGFuZCB0aGUgYm9vdCBjb25maWcgcGFyc2luZyBmdW5jdGlvbiBpcyBgX19pbml0YC4KCkkmIzM5O20gcmV2aXNpdGluZyB0aGUgY3JpdGVyaWEgZm9yIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcHJvbXB0IHNheXMsICYjMzQ7Q29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLi4uJiMzNDsgTm93LCB0aGUgY29kZSBpcyAqcmVhY2hhYmxlKiBkdXJpbmcgYm9vdCwgc28sIHRlY2huaWNhbGx5LCBpdCYjMzk7cyBub3QgJiMzNDtpbXBvc3NpYmxlIHRvIHJlYWNoJiMzNDsuIEhvd2V2ZXIsIGl0JiMzOTtzIG5vdCByZWFjaGFibGUgd2l0aCBmdXp6ZXIgaW5wdXQuIFRoZSBmdXp6ZXIgcHJpbWFyaWx5IHdvcmtzIGJ5IG11dGF0aW5nIHN5c2NhbGxzLiBUaGlzIGNvZGUgaXNuJiMzOTt0IHRvdWNoZWQgYnkgc3lzY2FsbHMsIGl0IHJ1bnMgb25jZSB3aXRoIHN0YXRpYyBkYXRhLgoKSWYgSSB3ZXJlIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgLCBJIHdvdWxkIG5lZWQgdG8gcHJvdmlkZSBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgLiBTcGVjaWZ5aW5nIGBGb2N1c1N5bWJvbHM9WyYjMzQ7eGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZSYjMzQ7LCAmIzM0O3hiY19zbnByaW50X2NtZGxpbmUmIzM0O11gIHdvdWxkIGRpcmVjdCB0aGUgZnV6emVyIHRvd2FyZHMgdGhlc2UgZnVuY3Rpb25zLiBCdXQsIGFuZCB0aGlzIGlzIGNydWNpYWwsIHRoZSBmdXp6ZXIgKmNhbm5vdCogcmVhY2ggdGhlbSB2aWEgaXRzIHVzdWFsIHN5c2NhbGwtYmFzZWQgaW5wdXQuIEl0IHdpbGwganVzdCBzZWUgdGhlIGZ1bmN0aW9ucyBleGVjdXRlIG9uY2UgcGVyIFZNIGJvb3QuIFN5emthbGxlciBjb2xsZWN0cyBib290IGNvdmVyYWdlLCBidXQgaXQgY2FuJiMzOTt0IG11dGF0ZSB0aGVzZSBpbnB1dHMuIEFsc28sIGV2ZW4gd2l0aCB0aGUgY29tbWFuZC1saW5lIGZ1enppbmcgY29uZmlndXJhdGlvbiwgaXQmIzM5O3MgYSBmaXhlZCBzdHJpbmcuCgpUaGUgcHJvbXB0IHdhbnRzIG1lIHRvICYjMzQ7ZGV0ZXJtaW5lIGlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OyBDaGFuZ2VzIHRoYXQgb25seSBoYXBwZW4gb25jZSBhdCBib290IHdpdGggc3RhdGljIGRhdGEgYXJlIG5vdCBzb21ldGhpbmcgYSBzeXN0ZW0gY2FsbCBmdXp6ZXIgY2FuIG1lYW5pbmdmdWxseSB0ZXN0LiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYWdhaW4gdG8gc2VlIGlmIGB4YmNfc25wcmludF9jbWRsaW5lYCBpcyB1c2VkIGFueXdoZXJlIGVsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE2OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hiY19zbnByaW50X2NtZGxpbmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9ib290Y29uZmlnLmg9MjY1PWludCBfX2luaXQgeGJjX25vZGVfY29tcG9zZV9rZXlfYWZ0ZXIoc3RydWN0IHhiY19ub2RlICpyb290LFxuLS1cbmluY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oLTI2OC0vKiBSZW5kZXIga2V5L3ZhbHVlIHBhaXJzIHVuZGVyIEByb290IGFzIGEgZmxhdCBjbWRsaW5lIHN0cmluZyAqL1xuaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmg6MjY5OmludCBfX2luaXQgeGJjX3NucHJpbnRfY21kbGluZShjaGFyICpidWYsIHNpemVfdCBzaXplLCBzdHJ1Y3QgeGJjX25vZGUgKnJvb3QpO1xuaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmgtMjcwLVxuLS1cbmluaXQvbWFpbi5jPTMyOD1zdGF0aWMgY2hhciAqIF9faW5pdCB4YmNfbWFrZV9jbWRsaW5lKGNvbnN0IGNoYXIgKmtleSlcbi0tXG5pbml0L21haW4uYy0zMzgtXHQvKiBDb3VudCByZXF1aXJlZCBidWZmZXIgc2l6ZSAqL1xuaW5pdC9tYWluLmM6MzM5Olx0bGVuID0geGJjX3NucHJpbnRfY21kbGluZShOVUxMLCAwLCByb290KTtcbmluaXQvbWFpbi5jLTM0MC1cdGlmIChsZW4gXHUwMDNjPSAwKVxuLS1cbmluaXQvbWFpbi5jLTM0OC1cbmluaXQvbWFpbi5jOjM0OTpcdHJldCA9IHhiY19zbnByaW50X2NtZGxpbmUobmV3X2NtZGxpbmUsIGxlbiAmIzQzOyAxLCByb290KTtcbmluaXQvbWFpbi5jLTM1MC1cdGlmIChyZXQgXHUwMDNjIDAgfHwgcmV0IFx1MDAzZSBsZW4pIHtcbi0tXG5saWIvYm9vdGNvbmZpZy5jPTU4PXN0YXRpYyB2b2lkIF9faW5pdCBzdHJfcHJlcGVuZChjaGFyICpkc3QsIHNpemVfdCBkc3RfbGVuLFxuLS1cbmxpYi9ib290Y29uZmlnLmMtNzEtICogYm9vdGNvbmZpZyB0byBAZHN0LiBUaGUgcmVuZGVyZWQgc3RyaW5nIGFscmVhZHkgZW5kcyB3aXRoIGEgc2luZ2xlXG5saWIvYm9vdGNvbmZpZy5jOjcyOiAqIHNwYWNlICh0aGUgeGJjX3NucHJpbnRfY21kbGluZSgpIGludmFyaWFudCksIHdoaWNoIHNlcnZlcyBhcyB0aGVcbmxpYi9ib290Y29uZmlnLmMtNzMtICogc2VwYXJhdG9yIGJldHdlZW4gdGhlIGVtYmVkZGVkIGtleXMgYW5kIGFueSBleGlzdGluZyBjb250ZW50IG9mIEBkc3QuXG4tLVxubGliL2Jvb3Rjb25maWcuYz00ODk9c3RhdGljIGNoYXIgeGJjX25hbWVidWZbWEJDX0tFWUxFTl9NQVhdIF9faW5pdGRhdGE7XG4tLVxubGliL2Jvb3Rjb25maWcuYy00OTMtLyoqXG5saWIvYm9vdGNvbmZpZy5jOjQ5NDogKiB4YmNfc25wcmludF9jbWRsaW5lKCkgLSBSZW5kZXIgYm9vdGNvbmZpZyBrZXlzIHVuZGVyIEByb290IGFzIGEgY21kbGluZSBzdHJpbmdcbmxpYi9ib290Y29uZmlnLmMtNDk1LSAqIEBidWY6IERlc3RpbmF0aW9uIGJ1ZmZlciAobWF5IGJlIE5VTEwgd2hlbiBAc2l6ZSBpcyAwIHRvIHF1ZXJ5IHRoZSBsZW5ndGgpXG4tLVxubGliL2Jvb3Rjb25maWcuYy01MDQtICovXG5saWIvYm9vdGNvbmZpZy5jOjUwNTppbnQgX19pbml0IHhiY19zbnByaW50X2NtZGxpbmUoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgc3RydWN0IHhiY19ub2RlICpyb290KVxubGliL2Jvb3Rjb25maWcuYy01MDYte1xuLS1cbnRvb2xzL2Jvb3Rjb25maWcvbWFpbi5jPTI4OT1zdGF0aWMgaW50IHNob3dfeGJjX2tlcm5lbF9jbWRsaW5lKHZvaWQpXG4tLVxudG9vbHMvYm9vdGNvbmZpZy9tYWluLmMtMjk4LVxudG9vbHMvYm9vdGNvbmZpZy9tYWluLmM6Mjk5Olx0bGVuID0geGJjX3NucHJpbnRfY21kbGluZShOVUxMLCAwLCByb290KTtcbnRvb2xzL2Jvb3Rjb25maWcvbWFpbi5jLTMwMC1cdGlmIChsZW4gXHUwMDNjIDApIHtcbi0tXG50b29scy9ib290Y29uZmlnL21haW4uYy0zMTAtXG50b29scy9ib290Y29uZmlnL21haW4uYzozMTE6XHRyZXQgPSB4YmNfc25wcmludF9jbWRsaW5lKGJ1ZiwgbGVuICYjNDM7IDEsIHJvb3QpO1xudG9vbHMvYm9vdGNvbmZpZy9tYWluLmMtMzEyLVx0aWYgKHJldCBcdTAwM2MgMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxNjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODE4MwoJCQkJCQkJb3V0cHV0OiAxNDgKCQkJCQkJCXRob3VnaHRzOiAzODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogTm90IFdvcnRoIEZ1enppbmcqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IHRoaXMgY29kZSBpcyBzb2xlbHkgdXNlZCB3aXRoaW4gYGluaXQvbWFpbi5jYCAoYW5kIHRoYXQmIzM5O3MgYW4gYF9faW5pdGAgZnVuY3Rpb24pIGFuZCB0aGUgYHRvb2xzL2Jvb3Rjb25maWcvbWFpbi5jYCB1c2Vyc3BhY2UgdG9vbC4gVGhpcyBzY3JlYW1zICYjMzQ7ZWFybHkgYm9vdCBjb2RlJiMzNDsgdG8gbWUuCgpUaGUgY29yZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIGNvbnN0aXR1dGUgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0ICpzaG91bGQqIGJlIGZ1enplZD8gVGhlIHByb21wdCBndWlkZXMgbWU6ICYjMzQ7UmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczogLi4uIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS4mIzM0OyBJIGRvbiYjMzk7dCBzZWUgYSBkaXJlY3QgaW5zdHJ1Y3Rpb24gc2F5aW5nICYjMzQ7ZmFsc2UgZm9yIGVhcmx5IGJvb3QsJiMzNDsgYnV0IEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaXQ6IHRoaXMgaXMgKmVhcmx5IGJvb3QqIGNvZGUgcHJvY2Vzc2luZyAqc3RhdGljKiBkYXRhLiBTeXprYWxsZXImIzM5O3Mgc3RyZW5ndGggaXMgaW4gbXV0YXRpbmcgc3lzY2FsbHMuIEl0IGNhbiYjMzk7dCBtdXRhdGUgdGhlIGtlcm5lbCBpbWFnZSBvciB0aGUgaW5pdHJkIGRpcmVjdGx5LiBUaHVzLCBpbiB0aGUgY29udGV4dCBvZiBzeXNjYWxsLWJhc2VkIGZ1enppbmcsIHRoaXMgaXMgdW4tZnV6emFibGUuCgpUbyBiZSB0aG9yb3VnaCwgSSYjMzk7bSBjaGVja2luZyBpZiBhbnkgc3lzZnMgb3IgcHJvY2ZzIGludGVyZmFjZXMgaGF2ZSBiZWVuIGFkZGVkLiBObywgdGhlIGNoYW5nZXMgYXJlIHRvIGBzZXR1cF9hcmNoYCBhbmQgYHNldHVwX2Jvb3RfY29uZmlnYC4gVGhlIHBhdGNoIGFkZHMgYHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmVgIHVzZWQgYnkgYHNldHVwX2FyY2hgIGFuZCBtb2RpZmllcyBgeGJjX3NucHJpbnRfY21kbGluZWAgY2FsbGVkIGZyb20gYHNldHVwX2Jvb3RfY29uZmlnYC4gSXQgYWxzbyBpbnRyb2R1Y2VzIGB0b29scy9ib290Y29uZmlnYCBidWlsZCBzdGVwcyBhbmQgYENPTkZJR19DTURMSU5FX0ZST01fQk9PVENPTkZJR2AuCgpUaGVyZWZvcmUsIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBJJiMzOTtsbCBleHBsYWluIHRoYXQgdGhlIGNoYW5nZXMgYXJlIGNvbmZpbmVkIHRvIGVhcmx5IGJvb3QgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgKGBfX2luaXRgIGZ1bmN0aW9ucykgdGhhdCBkZWFsIHdpdGggc3RhdGljLCBidWlsZC10aW1lIG9yIGluaXRyZCBkYXRhLiBTaW5jZSB0aGlzIGNvZGUgYW5kIGRhdGEgYXJlIG5vdCByZWFjaGFibGUgb3IgbXV0YWJsZSBieSBhIHN5c2NhbGwgZnV6emVyLCBmdXp6aW5nIGlzIHVucHJvZHVjdGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTY6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYnVpbGQtdGltZSBmZWF0dXJlIHRvIHJlbmRlciBlbWJlZGRlZCBib290Y29uZmlnIGludG8gYSBjbWRsaW5lIHN0cmluZyBhbmQgcHJlcGVuZHMgaXQgZHVyaW5nIGVhcmx5IGJvb3QgKGBzZXR1cF9hcmNoYCkuIEl0IGFsc28gZml4ZXMgYSBidWcgaW4gYHhiY19zbnByaW50X2NtZGxpbmVgIHdoaWNoIGlzIG9ubHkgY2FsbGVkIGR1cmluZyBlYXJseSBib290IChgc2V0dXBfYm9vdF9jb25maWdgKS4gQWxsIG1vZGlmaWVkIGtlcm5lbCBjb2RlIGlzIG1hcmtlZCBgX19pbml0YCwgcnVucyBleGFjdGx5IG9uY2UgZHVyaW5nIGJvb3QsIGFuZCBwcm9jZXNzZXMgc3RhdGljIGRhdGEgKGZyb20gdGhlIGtlcm5lbCBpbWFnZSBvciBpbml0cmQpLiBTaW5jZSB0aGVyZSBpcyBubyB3YXkgZm9yIGEgc3lzY2FsbCBmdXp6ZXIgdG8gcmVhY2ggdGhpcyBjb2RlIG9yIG11dGF0ZSBpdHMgaW5wdXRzLCBpdCBjYW5ub3QgYmUgbWVhbmluZ2Z1bGx5IGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBidWlsZC10aW1lIGZlYXR1cmUgdG8gcmVuZGVyIGVtYmVkZGVkIGJvb3Rjb25maWcgaW50byBhIGNtZGxpbmUgc3RyaW5nIGFuZCBwcmVwZW5kcyBpdCBkdXJpbmcgZWFybHkgYm9vdCAoYHNldHVwX2FyY2hgKS4gSXQgYWxzbyBmaXhlcyBhIGJ1ZyBpbiBgeGJjX3NucHJpbnRfY21kbGluZWAgd2hpY2ggaXMgb25seSBjYWxsZWQgZHVyaW5nIGVhcmx5IGJvb3QgKGBzZXR1cF9ib290X2NvbmZpZ2ApLiBBbGwgbW9kaWZpZWQga2VybmVsIGNvZGUgaXMgbWFya2VkIGBfX2luaXRgLCBydW5zIGV4YWN0bHkgb25jZSBkdXJpbmcgYm9vdCwgYW5kIHByb2Nlc3NlcyBzdGF0aWMgZGF0YSAoZnJvbSB0aGUga2VybmVsIGltYWdlIG9yIGluaXRyZCkuIFNpbmNlIHRoZXJlIGlzIG5vIHdheSBmb3IgYSBzeXNjYWxsIGZ1enplciB0byByZWFjaCB0aGlzIGNvZGUgb3IgbXV0YXRlIGl0cyBpbnB1dHMsIGl0IGNhbm5vdCBiZSBtZWFuaW5nZnVsbHkgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE2OjQzOjE1LjE5NzM0MjEwNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNzk0NTQ1NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYnVpbGQtdGltZSBmZWF0dXJlIHRvIHJlbmRlciBlbWJlZGRlZCBib290Y29uZmlnIGludG8gYSBjbWRsaW5lIHN0cmluZyBhbmQgcHJlcGVuZHMgaXQgZHVyaW5nIGVhcmx5IGJvb3QgKGBzZXR1cF9hcmNoYCkuIEl0IGFsc28gZml4ZXMgYSBidWcgaW4gYHhiY19zbnByaW50X2NtZGxpbmVgIHdoaWNoIGlzIG9ubHkgY2FsbGVkIGR1cmluZyBlYXJseSBib290IChgc2V0dXBfYm9vdF9jb25maWdgKS4gQWxsIG1vZGlmaWVkIGtlcm5lbCBjb2RlIGlzIG1hcmtlZCBgX19pbml0YCwgcnVucyBleGFjdGx5IG9uY2UgZHVyaW5nIGJvb3QsIGFuZCBwcm9jZXNzZXMgc3RhdGljIGRhdGEgKGZyb20gdGhlIGtlcm5lbCBpbWFnZSBvciBpbml0cmQpLiBTaW5jZSB0aGVyZSBpcyBubyB3YXkgZm9yIGEgc3lzY2FsbCBmdXp6ZXIgdG8gcmVhY2ggdGhpcyBjb2RlIG9yIG11dGF0ZSBpdHMgaW5wdXRzLCBpdCBjYW5ub3QgYmUgbWVhbmluZ2Z1bGx5IGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE2OjQzOjE1LjE5NzM0ODgzNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3MTI2OTkwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDlkZjkyOWFlY2E5YmM1MjNhYjcwODlmYWZiYmQ2NjExNmVlNzQzYjVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdW4gMjMgMTY6NDM6MTEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYm9vdGNvbmZpZy5yc3RcXG5pbmRleCBmNzEyNzU4NDcyZDVjNi4uMzQ5Y2VmYmIyYmJjZGQgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYm9vdGNvbmZpZy5yc3RcXG5AQCAtMjM0LDYgKzIzNCw4NyBAQCBLY29uZmlnIG9wdGlvbiBzZWxlY3RlZC5cXG4gTm90ZSB0aGF0IGV2ZW4gaWYgeW91IHNldCB0aGlzIG9wdGlvbiwgeW91IGNhbiBvdmVycmlkZSB0aGUgZW1iZWRkZWRcXG4gYm9vdGNvbmZpZyBieSBhbm90aGVyIGJvb3Rjb25maWcgd2hpY2ggYXR0YWNoZWQgdG8gdGhlIGluaXRyZC5cXG4gXFxuK1JlbmRlcmluZyBFbWJlZGRlZCBrZXJuZWwuKiBLZXlzIGF0IEJ1aWxkIFRpbWVcXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbitcXG4rQnkgZGVmYXVsdCwgdGhlIGVtYmVkZGVkIGJvb3Rjb25maWcgKGBgQ09ORklHX0JPT1RfQ09ORklHX0VNQkVEPXlgYCkgaXNcXG4rcGFyc2VkIGF0IHJ1bnRpbWUsIGFmdGVyIGBgcGFyc2VfZWFybHlfcGFyYW0oKWBgIGhhcyBhbHJlYWR5IHJ1bi4gRWFybHlcXG4rcGFyYW1ldGVyIGhhbmRsZXJzIChgYG1lbT1gYCwgYGBlYXJseWNvbj1gYCwgYGBsb2dsZXZlbD1gYCwgLi4uKSB0aGVyZWZvcmVcXG4rY2Fubm90IHNlZSB2YWx1ZXMgc3VwcGxpZWQgdmlhIHRoZSBlbWJlZGRlZCBgYGtlcm5lbGBgIHN1YnRyZWUuXFxuK1xcbitgYENPTkZJR19DTURMSU5FX0ZST01fQk9PVENPTkZJR2BgIHJlc29sdmVzIHRoaXMgYnkgcmVuZGVyaW5nIHRoZVxcbitgYGtlcm5lbGBgIHN1YnRyZWUgb2YgYGBDT05GSUdfQk9PVF9DT05GSUdfRU1CRURfRklMRWBgIGludG8gYSBmbGF0IGNtZGxpbmVcXG4rc3RyaW5nIGF0IGtlcm5lbCBidWlsZCB0aW1lICh2aWEgYGB0b29scy9ib290Y29uZmlnIC1DYGApIGFuZCBwcmVwZW5kaW5nXFxuK2l0IHRvIGBgYm9vdF9jb21tYW5kX2xpbmVgYCBkdXJpbmcgZWFybHkgYXJjaGl0ZWN0dXJlIHNldHVwLCBzbyB0aGUga2V5c1xcbithcmUgdmlzaWJsZSB0byBgYHBhcnNlX2Vhcmx5X3BhcmFtKClgYC5cXG4rXFxuK1RoZSBvcHRpb24gcmVxdWlyZXMgYGBDT05GSUdfQk9PVF9DT05GSUdfRU1CRUQ9eWBgLCBhIG5vbi1lbXB0eVxcbitgYENPTkZJR19CT09UX0NPTkZJR19FTUJFRF9GSUxFYGAsIGFuZCBhbiBhcmNoaXRlY3R1cmUgdGhhdCBzZWxlY3RzXFxuK2BgQ09ORklHX0FSQ0hfU1VQUE9SVFNfQ01ETElORV9GUk9NX0JPT1RDT05GSUdgYC4gQ3VycmVudGx5IG9ubHkgeDg2XFxuK3NlbGVjdHMgaXQ7IG9uIG90aGVyIGFyY2hpdGVjdHVyZXMgdGhlIGVtYmVkZGVkIGJvb3Rjb25maWcgc3RpbGwgd29ya3MsXFxuK2J1dCBvbmx5IHRocm91Z2ggdGhlIGxhdGUgcnVudGltZSBwYXJzZXIuXFxuK1xcbitUaGUgc2FtZSBgYGJvb3Rjb25maWdgYCBvcHQtaW4gYXBwbGllcyBhcyBlbHNld2hlcmU6IHRoZSByZW5kZXJlZCBrZXlzXFxuK2FyZSBwcmVwZW5kZWQgb25seSB3aGVuIGBgYm9vdGNvbmZpZ2BgIChpbiBhbnkgZm9ybSkgYXBwZWFycyBvbiB0aGVcXG4ra2VybmVsIGNvbW1hbmQgbGluZSwgb3Igd2hlbiBgYENPTkZJR19CT09UX0NPTkZJR19GT1JDRWBgIGlzIHNldCwgd2hpY2hcXG4rZGVmYXVsdHMgdG8gYGB5YGAgd2hlbiBgYENPTkZJR19CT09UX0NPTkZJR19FTUJFRGBgIGlzIHNldC5cXG4rXFxuK0ZvciBleGFtcGxlLCBnaXZlbjo6XFxuK1xcbisga2VybmVsIHtcXG4rICAgbG9nbGV2ZWwgPSA3XFxuKyAgIG1lbSA9IDRHXFxuKyB9XFxuK1xcbit0aGUga2VybmVsIGJvb3RzIGFzIGlmIGBgbG9nbGV2ZWw9NyBtZW09NEdgYCBoYWQgYmVlbiBwcmVwZW5kZWQgdG8gdGhlXFxuK2Jvb3Rsb2FkZXIgY29tbWFuZCBsaW5lLCB3aXRoIHRoZSB2YWx1ZXMgdmlzaWJsZSB0byBlYXJseS1wYXJzZWRcXG4raGFuZGxlcnMuIENvbW1hLXNlcGFyYXRlZCB2YWx1ZXMgYXJlIHN0aWxsIGV4cGFuZGVkIGludG8gbXVsdGlwbGVcXG4rY21kbGluZSBlbnRyaWVzIHBlciB0aGUgYm9vdGNvbmZpZyBhcnJheSBjb252ZW50aW9uIC0tIHRoZSBlbWJlZGRlZFxcbitgYGtlcm5lbC5lYXJseWNvbiA9IFxcXCJ1YXJ0ODI1MCxpbywweDNmOFxcXCJgYCBtdXN0IGJlIHF1b3RlZCB0byBsYW5kIGFzIGFcXG4rc2luZ2xlIGBgZWFybHljb249YGAgZW50cnksIGV4YWN0bHkgYXMgZm9yIHRoZSBydW50aW1lIHBhcnNlci5cXG4rXFxuK0lmIHRoZSByZW5kZXJlZCBzdHJpbmcgd291bGQgbm90IGZpdCBpbiBgYENPTU1BTkRfTElORV9TSVpFYGAgdG9nZXRoZXJcXG4rd2l0aCB0aGUgZXhpc3RpbmcgY29tbWFuZCBsaW5lLCB0aGUgcHJlcGVuZCBpcyBza2lwcGVkIGFuZCBhbiBlcnJvciBpc1xcbitsb2dnZWQsIHNvIGFuIG92ZXJzaXplZCBlbWJlZGRlZCBib290Y29uZmlnIGNhbm5vdCBicmljayBhIGJvb3QuXFxuK1xcbitJbnRlcmFjdGlvbiB3aXRoIG90aGVyIGNvbW1hbmQgbGluZSBhbmQgYm9vdGNvbmZpZyBzb3VyY2VzXFxuK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5cXG4rXFxuK1dpdGggYGBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUc9eWBgIHRoZSByZW5kZXJlZCBgYGtlcm5lbGBgXFxuK3N1YnRyZWUgYmVoYXZlcyBsaWtlIGEgYnVpbGQtdGltZSBjb21tYW5kIGxpbmUgKHNpbWlsYXIgdG9cXG4rYGBDT05GSUdfQ01ETElORWBgKSwgbm90IGxpa2UgYSBib290Y29uZmlnIHNvdXJjZS4gSXQgaXMgcHJlcGVuZGVkIHRvXFxuK2BgYm9vdF9jb21tYW5kX2xpbmVgYCBpbiBgYHNldHVwX2FyY2goKWBgLCBiZWZvcmUgYGBwYXJzZV9lYXJseV9wYXJhbSgpYGBcXG4rYW5kIGxvbmcgYmVmb3JlIHRoZSBydW50aW1lIHBhcnNlciBsb29rcyBhdCBhbiBpbml0cmQuIE9wdGlvbnMgY2FuIHJlYWNoXFxuK3RoZSBrZXJuZWwgZnJvbSB1cCB0byBmb3VyIHBsYWNlczpcXG4rXFxuKy0gQm9vdGxvYWRlciBjb21tYW5kIGxpbmU6IHRoZSBhcmd1bWVudHMgdGhlIGJvb3QgbG9hZGVyIHBhc3Nlcy4gVGhlXFxuKyAgZW1iZWRkZWQgY21kbGluZSBpcyBwcmVwZW5kZWQgaW4gZnJvbnQgb2YgdGhlbSwgc28gZm9yIGxhc3Qtb25lLXdpbnNcXG4rICBwYXJhbWV0ZXJzIGEgYm9vdGxvYWRlciBvcHRpb24gc3RpbGwgb3ZlcnJpZGVzIHRoZSBlbWJlZGRlZCB2YWx1ZS5cXG4rICBWaXNpYmxlIGluIC9wcm9jL2NtZGxpbmUuXFxuKy0gRW1iZWRkZWQgY21kbGluZSAodGhpcyBvcHRpb24pOiB0aGUgcmVuZGVyZWQgYGBrZXJuZWxgYCBzdWJ0cmVlLFxcbisgIHByZXBlbmRlZCBlYXJseSBzbyBpdCBpcyBzZWVuIGJ5IGBgcGFyc2VfZWFybHlfcGFyYW0oKWBgLiBWaXNpYmxlIGluXFxuKyAgL3Byb2MvY21kbGluZS5cXG4rLSBJbml0cmQgYm9vdGNvbmZpZzogcGFyc2VkIGxhdGUgaW4gYGBzZXR1cF9ib290X2NvbmZpZygpYGA7IGl0c1xcbisgIGBga2VybmVsYGAga2V5cyBhcmUgcGxhY2VkIGFoZWFkIG9mIGBgYm9vdF9jb21tYW5kX2xpbmVgYCwgaS5lLiBiZWZvcmVcXG4rICB0aGUgZW1iZWRkZWQgY21kbGluZSwgc28gbGFzdC13aW5zIGZhdm9ycyB0aGUgZW1iZWRkZWQgdmFsdWVzLiBBcyBhXFxuKyAgYm9vdGNvbmZpZyBzb3VyY2UsIGFuIGluaXRyZCBib290Y29uZmlnIHN0aWxsIHJlcGxhY2VzIHRoZSBlbWJlZGRlZFxcbisgIGJvb3Rjb25maWcuIFZpc2libGUgaW4gL3Byb2MvY21kbGluZSBhbmQgL3Byb2MvYm9vdGNvbmZpZy5cXG4rLSBFbWJlZGRlZCBib290Y29uZmlnIChydW50aW1lKTogcGFyc2VkIGxhdGUsIG9ubHkgd2hlbiBubyBpbml0cmRcXG4rICBib290Y29uZmlnIGlzIHByZXNlbnQuIFZpc2libGUgaW4gL3Byb2MvY21kbGluZSBhbmQgL3Byb2MvYm9vdGNvbmZpZy5cXG4rXFxuK1NvIHdpdGggdGhpcyBvcHRpb24gdGhlIGVtYmVkZGVkIGBga2VybmVsLipgYCB2YWx1ZXMgdGFrZSBwcmVjZWRlbmNlXFxuK292ZXIgYW4gaW5pdHJkIGJvb3Rjb25maWcncyBgYGtlcm5lbC4qYGAgdmFsdWVzOiBmb3IgZWFybHkgcGFyYW1ldGVyc1xcbit0aGUgaW5pdHJkIGlzIG5vdCBwYXJzZWQgeWV0LCBhbmQgZm9yIG9yZGluYXJ5IHBhcmFtZXRlcnMgdGhlIGVtYmVkZGVkXFxuK2tleXMgbGFuZCBsYXRlciBpbiB0aGUgY29tbWFuZCBsaW5lLiBJZiB5b3UgbmVlZCBhbiBpbml0cmQgYm9vdGNvbmZpZyB0b1xcbitvdmVycmlkZSB0aGUgZW1iZWRkZWQgYGBrZXJuZWwuKmBgIGtleXMsIGxlYXZlIHRoaXMgb3B0aW9uIG9mZiBhbmQgcmVseVxcbitvbiB0aGUgcnVudGltZSBwYXJzZXIuXFxuK1xcbitUaGUgcmVuZGVyZWQgc3RyaW5nIGlzIHBhcnQgb2YgdGhlIGNvbW1hbmQgbGluZSwgc28gaXQgYXBwZWFycyBpblxcbisvcHJvYy9jbWRsaW5lLiBJdCBpcyBkZWxpYmVyYXRlbHkgbm90IHNob3duIGluIC9wcm9jL2Jvb3Rjb25maWc6IHRoYXRcXG4rZmlsZSBrZWVwcyByZXBvcnRpbmcgdGhlIHBhcnNlZCBib290Y29uZmlnIHRyZWUgLS0gdGhlIGluaXRyZCBib290Y29uZmlnXFxuK2lmIHByZXNlbnQsIG90aGVyd2lzZSB0aGUgZW1iZWRkZWQgYm9vdGNvbmZpZyAtLSBpbmRlcGVuZGVudCBvZiB3aGV0aGVyXFxuK2J1aWxkLXRpbWUgY21kbGluZSByZW5kZXJpbmcgaXMgZW5hYmxlZC5cXG4rXFxuIEtlcm5lbCBwYXJhbWV0ZXJzIHZpYSBCb290IENvbmZpZ1xcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4gXFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcXG5pbmRleCBkOTVkM2VmNzc3NzNmYS4uNzUzMzQxOTc3M2NhOWMgMTAwNjQ0XFxuLS0tIGEvTUFJTlRBSU5FUlNcXG4rKysgYi9NQUlOVEFJTkVSU1xcbkBAIC05ODEzLDYgKzk4MTMsNyBAQCBGOlxcdGZzL3Byb2MvYm9vdGNvbmZpZy5jXFxuIEY6XFx0aW5jbHVkZS9saW51eC9ib290Y29uZmlnLmhcXG4gRjpcXHRsaWIvYm9vdGNvbmZpZy1kYXRhLlNcXG4gRjpcXHRsaWIvYm9vdGNvbmZpZy5jXFxuK0Y6XFx0bGliL2VtYmVkZGVkLWNtZGxpbmUuU1xcbiBGOlxcdHRvb2xzL2Jvb3Rjb25maWcvKlxcbiBGOlxcdHRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy8qXFxuIFxcbmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlXFxuaW5kZXggZDFjNTk1ZGI1NWM5NTYuLjFmNTZhNjg5MmZlYjQwIDEwMDY0NFxcbi0tLSBhL01ha2VmaWxlXFxuKysrIGIvTWFrZWZpbGVcXG5AQCAtMTUzMSw2ICsxNTMxLDIyIEBAIHByZXBhcmU6IHRvb2xzL2JwZi9yZXNvbHZlX2J0Zmlkc1xcbiBlbmRpZlxcbiBlbmRpZlxcbiBcXG4rIyB0b29scy9ib290Y29uZmlnIHJlbmRlcnMgdGhlIGVtYmVkZGVkIGJvb3Rjb25maWcgaW50byBhIGNtZGxpbmUgYXQgYnVpbGQgdGltZS5cXG4raWZkZWYgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXFxuK3ByZXBhcmU6IHRvb2xzL2Jvb3Rjb25maWdcXG4rZW5kaWZcXG4rXFxuKyMgdG9vbHMvYm9vdGNvbmZpZyBpcyBydW4gb24gdGhlIGJ1aWxkIGhvc3QgZHVyaW5nIHByZXBhcmUsIHNvIGZvcmNlIGEgaG9zdFxcbisjIGJpbmFyeSBoZXJlOyBpdHMgb3duIE1ha2VmaWxlIGtlZXBzICQoQ0MpIGZvciBzdGFuZGFsb25lIGFuZCBjcm9zcyBidWlsZHMuXFxuKyMgQ1JPU1NfQ09NUElMRT0gaXMgY2xlYXJlZCBzbyB0b29scy9zY3JpcHRzL01ha2VmaWxlLmluY2x1ZGUgZG9lcyBub3QgaW5qZWN0XFxuKyMgdGhlIHRhcmdldCdzIC0tdGFyZ2V0PS8tLXN5c3Jvb3Q9IGZsYWdzIGludG8gdGhlIGhvc3QgY2xhbmcgaW52b2NhdGlvbiB1bmRlclxcbisjIExMVk09MSBjcm9zcyBidWlsZHMgKHdoaWNoIHdvdWxkIHByb2R1Y2UgYSB0YXJnZXQgYmluYXJ5IHRoYXQgZmFpbHMgdG8gZXhlYykuXFxuK3Rvb2xzL2Jvb3Rjb25maWc6IGV4cG9ydCBDQyA6PSAkKEhPU1RDQylcXG4rdG9vbHMvYm9vdGNvbmZpZzogRk9SQ0VcXG4rXFx0JChRKW1rZGlyIC1wICQob2JqdHJlZSkvdG9vbHNcXG4rXFx0JChRKSQoTUFLRSkgTz0kKGFic3BhdGggJChvYmp0cmVlKSkgc3ViZGlyPXRvb2xzIC1DICQoc3JjdHJlZSkvdG9vbHMvIFxcXFxcXG4rXFx0XFx0Ym9vdGNvbmZpZyBDUk9TU19DT01QSUxFPVxcbitcXG4gIyBUaGUgdG9vbHMgYnVpbGQgc3lzdGVtIGlzIG5vdCBhIHBhcnQgb2YgS2J1aWxkIGFuZCB0ZW5kcyB0byBpbnRyb2R1Y2VcXG4gIyBpdHMgb3duIHVuaXF1ZSBpc3N1ZXMuIElmIHlvdSBuZWVkIHRvIGludGVncmF0ZSBhIG5ldyB0b29sIGludG8gS2J1aWxkLFxcbiAjIHBsZWFzZSBjb25zaWRlciBsb2NhdGluZyB0aGF0IHRvb2wgb3V0c2lkZSB0aGUgdG9vbHMvIHRyZWUgYW5kIHVzaW5nIHRoZVxcbkBAIC0xNTU3LDYgKzE1NzMsMTUgQEAgaWZuZXEgKCQod2lsZGNhcmQgJChvYmp0b29sX08pKSwpXFxuIFxcdCQoUSkkKE1BS0UpIC1zQyAkKGFic19zcmN0cmVlKS90b29scy9vYmp0b29sIE89JChvYmp0b29sX08pIHNyY3RyZWU9JChhYnNfc3JjdHJlZSkgJChwYXRzdWJzdCBvYmp0b29sXyUsJSwkQClcXG4gZW5kaWZcXG4gXFxuK1BIT05ZICs9IGJvb3Rjb25maWdfY2xlYW5cXG4rXFxuK2Jvb3Rjb25maWdfTyA9ICQoYWJzcGF0aCAkKG9ianRyZWUpKS90b29scy9ib290Y29uZmlnXFxuK1xcbitib290Y29uZmlnX2NsZWFuOlxcbitpZm5lcSAoJCh3aWxkY2FyZCAkKGJvb3Rjb25maWdfTykpLClcXG4rXFx0JChRKSQoTUFLRSkgLXNDICQoc3JjdHJlZSkvdG9vbHMvYm9vdGNvbmZpZyBPPSQoYm9vdGNvbmZpZ19PKSBjbGVhblxcbitlbmRpZlxcbitcXG4gdG9vbHMvOiBGT1JDRVxcbiBcXHQkKFEpbWtkaXIgLXAgJChvYmp0cmVlKS90b29sc1xcbiBcXHQkKFEpJChNQUtFKSBPPSQoYWJzcGF0aCAkKG9ianRyZWUpKSBzdWJkaXI9dG9vbHMgLUMgJChzcmN0cmVlKS90b29scy9cXG5AQCAtMTczMiw3ICsxNzU3LDcgQEAgdm1saW51eGNsZWFuOlxcbiBcXHQkKFEpJChDT05GSUdfU0hFTEwpICQoc3JjdHJlZSkvc2NyaXB0cy9saW5rLXZtbGludXguc2ggY2xlYW5cXG4gXFx0JChRKSQoaWYgJChBUkNIX1BPU1RMSU5LKSwgJChNQUtFKSAtZiAkKEFSQ0hfUE9TVExJTkspIGNsZWFuKVxcbiBcXG4tY2xlYW46IGFyY2hjbGVhbiB2bWxpbnV4Y2xlYW4gcmVzb2x2ZV9idGZpZHNfY2xlYW4gb2JqdG9vbF9jbGVhblxcbitjbGVhbjogYXJjaGNsZWFuIHZtbGludXhjbGVhbiByZXNvbHZlX2J0Zmlkc19jbGVhbiBvYmp0b29sX2NsZWFuIGJvb3Rjb25maWdfY2xlYW5cXG4gXFxuICMgbXJwcm9wZXIgLSBEZWxldGUgYWxsIGdlbmVyYXRlZCBmaWxlcywgaW5jbHVkaW5nIC5jb25maWdcXG4gI1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnIGIvYXJjaC94ODYvS2NvbmZpZ1xcbmluZGV4IGZhNGYwMDc5NjE0Y2QwLi5hZGJjYWFkODAxMzA4MyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9LY29uZmlnXFxuKysrIGIvYXJjaC94ODYvS2NvbmZpZ1xcbkBAIC0xMjcsNiArMTI3LDcgQEAgY29uZmlnIFg4NlxcbiBcXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19OVU1BX0JBTEFOQ0lOR1xcdGlmIFg4Nl82NFxcbiBcXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19LTUFQX0xPQ0FMX0ZPUkNFX01BUFxcdGlmIE5SX0NQVVMgXFx1MDAzYz0gNDA5NlxcbiBcXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19DRklcXHRcXHRpZiBYODZfNjRcXG4rXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfQ01ETElORV9GUk9NX0JPT1RDT05GSUdcXG4gXFx0c2VsZWN0IEFSQ0hfVVNFU19DRklfVFJBUFNcXHRcXHRpZiBYODZfNjQgXFx1MDAyNlxcdTAwMjYgQ0ZJXFxuIFxcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0xUT19DTEFOR1xcbiBcXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19MVE9fQ0xBTkdfVEhJTlxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jXFxuaW5kZXggNDY4ODJjZTc5YzNhNGQuLmM5NzNhMmNlYmNkMDRlIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jXFxuKysrIGIvYXJjaC94ODYva2VybmVsL3NldHVwLmNcXG5AQCAtNiw2ICs2LDcgQEBcXG4gICogcGFydHMgb2YgZWFybHkga2VybmVsIGluaXRpYWxpemF0aW9uLlxcbiAgKi9cXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2FjcGkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Jvb3Rjb25maWcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbnNvbGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NwdS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY3Jhc2hfZHVtcC5oXFx1MDAzZVxcbkBAIC04ODEsNiArODgyLDM3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCB4ODZfcmVwb3J0X254KHZvaWQpXFxuICAqIE5vdGU6IE9uIHg4Nl82NCwgZml4bWFwcyBhcmUgcmVhZHkgZm9yIHVzZSBldmVuIGJlZm9yZSB0aGlzIGlzIGNhbGxlZC5cXG4gICovXFxuIFxcbisjaWZkZWYgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXFxuK3N0YXRpYyBpbnQgX19pbml0IGJvb3Rjb25maWdfb3B0aW4oY2hhciAqcGFyYW0sIGNoYXIgKnZhbCxcXG4rXFx0XFx0XFx0XFx0ICAgY29uc3QgY2hhciAqdW51c2VkLCB2b2lkICphcmcpXFxuK3tcXG4rXFx0aWYgKCFzdHJjbXAocGFyYW0sIFxcXCJib290Y29uZmlnXFxcIikpXFxuK1xcdFxcdCooYm9vbCAqKWFyZyA9IHRydWU7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKlxcbisgKiBEaWQgdGhlIHVzZXIgb3B0IGluIHRvIGJvb3Rjb25maWcgb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmU/IFVzZVxcbisgKiBwYXJzZV9hcmdzKCkgc28gdGhpcyBtYXRjaGVzIHNldHVwX2Jvb3RfY29uZmlnKCkgZXhhY3RseSwgaW5jbHVkaW5nXFxuKyAqIHN0b3BwaW5nIGF0IHRoZSBcXFwiLS1cXFwiIHRoYXQgc2VwYXJhdGVzIGluaXQgYXJndW1lbnRzLlxcbisgKi9cXG4rc3RhdGljIGJvb2wgX19pbml0IGJvb3Rjb25maWdfY21kbGluZV9yZXF1ZXN0ZWQodm9pZClcXG4re1xcbitcXHRzdGF0aWMgY2hhciB0bXBfY21kbGluZVtDT01NQU5EX0xJTkVfU0laRV0gX19pbml0ZGF0YTtcXG4rXFx0Ym9vbCBmb3VuZCA9IGZhbHNlO1xcbitcXG4rXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0JPT1RfQ09ORklHX0ZPUkNFKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRzdHJzY3B5KHRtcF9jbWRsaW5lLCBib290X2NvbW1hbmRfbGluZSwgQ09NTUFORF9MSU5FX1NJWkUpO1xcbitcXHRpZiAoSVNfRVJSKHBhcnNlX2FyZ3MoXFxcImJvb3Rjb25maWdcXFwiLCB0bXBfY21kbGluZSwgTlVMTCwgMCwgMCwgMCxcXG4rXFx0XFx0XFx0ICAgICAgXFx1MDAyNmZvdW5kLCBib290Y29uZmlnX29wdGluKSkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiBmb3VuZDtcXG4rfVxcbisjZW5kaWZcXG4rXFxuIHZvaWQgX19pbml0IHNldHVwX2FyY2goY2hhciAqKmNtZGxpbmVfcClcXG4ge1xcbiAjaWZkZWYgQ09ORklHX1g4Nl8zMlxcbkBAIC05MjQsNiArOTU2LDE3IEBAIHZvaWQgX19pbml0IHNldHVwX2FyY2goY2hhciAqKmNtZGxpbmVfcClcXG4gXFx0YnVpbHRpbl9jbWRsaW5lX2FkZGVkID0gdHJ1ZTtcXG4gI2VuZGlmXFxuIFxcbisjaWZkZWYgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXFxuK1xcdC8qXFxuK1xcdCAqIFByZXBlbmQgdGhlIGJ1aWxkLXRpbWUtcmVuZGVyZWQgZW1iZWRkZWQgXFxcImtlcm5lbFxcXCIga2V5cyBoZXJlIHNvXFxuK1xcdCAqIHBhcnNlX2Vhcmx5X3BhcmFtKCkgYmVsb3cgc2VlcyB0aGVtLCBnYXRpbmcgb24gdGhlIHNhbWUgb3B0LWluXFxuK1xcdCAqIGFzIHRoZSBydW50aW1lIHBhcnNlciAoc2VlIGJvb3Rjb25maWdfY21kbGluZV9yZXF1ZXN0ZWQoKSkuXFxuK1xcdCAqL1xcbitcXHRpZiAoYm9vdGNvbmZpZ19jbWRsaW5lX3JlcXVlc3RlZCgpKVxcbitcXHRcXHR4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lKGJvb3RfY29tbWFuZF9saW5lLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIENPTU1BTkRfTElORV9TSVpFKTtcXG4rI2VuZGlmXFxuK1xcbiBcXHRzdHJzY3B5KGNvbW1hbmRfbGluZSwgYm9vdF9jb21tYW5kX2xpbmUsIENPTU1BTkRfTElORV9TSVpFKTtcXG4gXFx0KmNtZGxpbmVfcCA9IGNvbW1hbmRfbGluZTtcXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oIGIvaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmhcXG5pbmRleCAxYzdmM2I3NGZmY2YzOC4uNDMzMjRiNDc3ZjEzYWIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2Jvb3Rjb25maWcuaFxcbkBAIC0zMDgsNCArMzA4LDEzIEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqeGJjX2dldF9lbWJlZGRlZF9ib290Y29uZmlnKHNpemVfdCAqc2l6ZSlcXG4gfVxcbiAjZW5kaWZcXG4gXFxuKy8qIEJ1aWxkLXRpbWUtcmVuZGVyZWQgYm9vdGNvbmZpZyBjbWRsaW5lIHByZXBlbmRlZCBpbiBzZXR1cF9hcmNoKCkgKi9cXG4rI2lmZGVmIENPTkZJR19DTURMSU5FX0ZST01fQk9PVENPTkZJR1xcbit2b2lkIF9faW5pdCB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lKGNoYXIgKmRzdCwgc2l6ZV90IHNpemUpO1xcbitib29sIF9faW5pdCB4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkKHZvaWQpO1xcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIHZvaWQgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZShjaGFyICpkc3QsIHNpemVfdCBzaXplKSB7IH1cXG4rc3RhdGljIGlubGluZSBib29sIHhiY19lbWJlZGRlZF9jbWRsaW5lX2FwcGxpZWQodm9pZCkgeyByZXR1cm4gZmFsc2U7IH1cXG4rI2VuZGlmXFxuK1xcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvaW5pdC9LY29uZmlnIGIvaW5pdC9LY29uZmlnXFxuaW5kZXggNDQwM2U1Mzg3NmUxMDcuLjFjZjZjZjYyOThjNGVlIDEwMDY0NFxcbi0tLSBhL2luaXQvS2NvbmZpZ1xcbisrKyBiL2luaXQvS2NvbmZpZ1xcbkBAIC0xNTY2LDYgKzE1NjYsNDIgQEAgY29uZmlnIEJPT1RfQ09ORklHX0VNQkVEX0ZJTEVcXG4gXFx0ICBUaGlzIGJvb3Rjb25maWcgd2lsbCBiZSB1c2VkIGlmIHRoZXJlIGlzIG5vIGluaXRyZCBvciBubyBvdGhlclxcbiBcXHQgIGJvb3Rjb25maWcgaW4gdGhlIGluaXRyZC5cXG4gXFxuK2NvbmZpZyBBUkNIX1NVUFBPUlRTX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXFxuK1xcdGJvb2xcXG4rXFx0aGVscFxcbitcXHQgIFNpbGVudCBzeW1ib2w7IG5vIEMgY29kZSByZWFkcyBpdCBkaXJlY3RseS4gQXJjaGl0ZWN0dXJlc1xcbitcXHQgIHNlbGVjdCBpdCBvbmNlIHRoZWlyIHNldHVwX2FyY2goKSBjYWxsc1xcbitcXHQgIHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoKSBiZWZvcmUgcGFyc2VfZWFybHlfcGFyYW0oKS5cXG4rXFx0ICBJdHMgb25seSByb2xlIGlzIHRvIGdhdGUgdGhlIHVzZXItdmlzaWJsZVxcbitcXHQgIENNRExJTkVfRlJPTV9CT09UQ09ORklHIG9wdGlvbiBwZXItYXJjaCwgdGhlIHNhbWVcXG4rXFx0ICBBUkNIX1NVUFBPUlRTXyogaWRpb20gdXNlZCBieSBBUkNIX1NVUFBPUlRTX0NGSSwgZXRjLlxcbitcXG4rY29uZmlnIENNRExJTkVfRlJPTV9CT09UQ09ORklHXFxuK1xcdGJvb2wgXFxcIlJlbmRlciBlbWJlZGRlZCBib290Y29uZmlnIGFzIGtlcm5lbCBjbWRsaW5lIGF0IGJ1aWxkIHRpbWVcXFwiXFxuK1xcdGRlcGVuZHMgb24gQk9PVF9DT05GSUdfRU1CRURfRklMRSAhPSBcXFwiXFxcIlxcbitcXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfQ01ETElORV9GUk9NX0JPT1RDT05GSUdcXG4rXFx0ZGVwZW5kcyBvbiBDTURMSU5FID0gXFxcIlxcXCJcXG4rXFx0ZGVmYXVsdCBuXFxuK1xcdGhlbHBcXG4rXFx0ICBSZW5kZXIgdGhlIFxcXCJrZXJuZWxcXFwiIHN1YnRyZWUgb2YgdGhlIGVtYmVkZGVkIGJvb3Rjb25maWcgZmlsZSBpbnRvIGFcXG4rXFx0ICBmbGF0IGNtZGxpbmUgc3RyaW5nIGF0IGtlcm5lbCBidWlsZCB0aW1lIGFuZCBwcmVwZW5kIGl0IHRvXFxuK1xcdCAgYm9vdF9jb21tYW5kX2xpbmUgZHVyaW5nIGVhcmx5IGFyY2hpdGVjdHVyZSBzZXR1cC4gVGhpcyBtYWtlc1xcbitcXHQgIGVhcmx5X3BhcmFtKCkgaGFuZGxlcnMgKGUuZy4gbWVtPSwgZWFybHljb249LCBsb2dsZXZlbD0pIHNlZSB0aGVcXG4rXFx0ICB2YWx1ZXMgc3VwcGxpZWQgdmlhIHRoZSBlbWJlZGRlZCBib290Y29uZmlnLlxcbitcXG4rXFx0ICBUaGUgcnVudGltZSBib290Y29uZmlnIHBhcnNlciBpcyB1bmFmZmVjdGVkLCBzbyB0cmVlLXN0cnVjdHVyZWRcXG4rXFx0ICBjb25zdW1lcnMgc3VjaCBhcyBmdHJhY2UgYm9vdC10aW1lIHRyYWNpbmcga2VlcCB3b3JraW5nLlxcbitcXG4rXFx0ICBOb3RlOiB3aGVuIGFuIGluaXRyZCBhbHNvIGNhcnJpZXMgYSBib290Y29uZmlnLCBpdHMgXFxcImtlcm5lbFxcXCJcXG4rXFx0ICBzdWJ0cmVlIGlzIHN0aWxsIHBhcnNlZCBhdCBydW50aW1lLCBidXQgdGhlIGVtYmVkZGVkIFxcXCJrZXJuZWxcXFwiXFxuK1xcdCAga2V5cyByZW1haW4gaW4gYm9vdF9jb21tYW5kX2xpbmUgZm9yIHBhcnNlX2Vhcmx5X3BhcmFtKCkgYW5kXFxuK1xcdCAgZW5kIHVwIGxhdGVyIHRoYW4gdGhlIGluaXRyZCBrZXlzIGluIHNhdmVkX2NvbW1hbmRfbGluZSwgc29cXG4rXFx0ICBwYXJzZV9hcmdzKCkgbGFzdC13aW5zIGZhdm9ycyB0aGUgZW1iZWRkZWQgdmFsdWVzLiBJZiB5b3UgbmVlZFxcbitcXHQgIGluaXRyZCB0byBvdmVycmlkZSBlbWJlZGRlZCBrZXJuZWwuKiBrZXlzLCBsZWF2ZSB0aGlzIG9wdGlvblxcbitcXHQgIG9mZi5cXG4rXFxuK1xcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4rXFxuIGNvbmZpZyBDTURMSU5FX0xPR19XUkFQX0lERUFMX0xFTlxcbiBcXHRpbnQgXFxcIkxlbmd0aCB0byB0cnkgdG8gd3JhcCB0aGUgY21kbGluZSB3aGVuIGxvZ2dlZCBhdCBib290XFxcIlxcbiBcXHRkZWZhdWx0IDEwMjFcXG5kaWZmIC0tZ2l0IGEvaW5pdC9tYWluLmMgYi9pbml0L21haW4uY1xcbmluZGV4IGUzNjMyMzJiNDI4YjQ3Li4yNjBiZDUyNDJmOTRlOCAxMDA2NDRcXG4tLS0gYS9pbml0L21haW4uY1xcbisrKyBiL2luaXQvbWFpbi5jXFxuQEAgLTM3OCwxMiArMzc4LDE1IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9ib290X2NvbmZpZyh2b2lkKVxcbiBcXHRpbnQgcG9zLCByZXQ7XFxuIFxcdHNpemVfdCBzaXplO1xcbiBcXHRjaGFyICplcnI7XFxuK1xcdGJvb2wgZnJvbV9lbWJlZGRlZCA9IGZhbHNlO1xcbiBcXG4gXFx0LyogQ3V0IG91dCB0aGUgYm9vdGNvbmZpZyBkYXRhIGV2ZW4gaWYgd2UgaGF2ZSBubyBib290Y29uZmlnIG9wdGlvbiAqL1xcbiBcXHRkYXRhID0gZ2V0X2Jvb3RfY29uZmlnX2Zyb21faW5pdHJkKFxcdTAwMjZzaXplKTtcXG4gXFx0LyogSWYgdGhlcmUgaXMgbm8gYm9vdGNvbmZpZyBpbiBpbml0cmQsIHRyeSBlbWJlZGRlZCBvbmUuICovXFxuLVxcdGlmICghZGF0YSlcXG4rXFx0aWYgKCFkYXRhKSB7XFxuIFxcdFxcdGRhdGEgPSB4YmNfZ2V0X2VtYmVkZGVkX2Jvb3Rjb25maWcoXFx1MDAyNnNpemUpO1xcbitcXHRcXHRmcm9tX2VtYmVkZGVkID0gdHJ1ZTtcXG4rXFx0fVxcbiBcXG4gXFx0c3Ryc2NweSh0bXBfY21kbGluZSwgYm9vdF9jb21tYW5kX2xpbmUsIENPTU1BTkRfTElORV9TSVpFKTtcXG4gXFx0ZXJyID0gcGFyc2VfYXJncyhcXFwiYm9vdGNvbmZpZ1xcXCIsIHRtcF9jbWRsaW5lLCBOVUxMLCAwLCAwLCAwLCBOVUxMLFxcbkBAIC00MjEsOCArNDI0LDI0IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9ib290X2NvbmZpZyh2b2lkKVxcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHR4YmNfZ2V0X2luZm8oXFx1MDAyNnJldCwgTlVMTCk7XFxuIFxcdFxcdHByX2luZm8oXFxcIkxvYWQgYm9vdGNvbmZpZzogJWxkIGJ5dGVzICVkIG5vZGVzXFxcXG5cXFwiLCAobG9uZylzaXplLCByZXQpO1xcbi1cXHRcXHQvKiBrZXlzIHN0YXJ0aW5nIHdpdGggXFxcImtlcm5lbC5cXFwiIGFyZSBwYXNzZWQgdmlhIGNtZGxpbmUgKi9cXG4tXFx0XFx0ZXh0cmFfY29tbWFuZF9saW5lID0geGJjX21ha2VfY21kbGluZShcXFwia2VybmVsXFxcIik7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIGtleXMgc3RhcnRpbmcgd2l0aCBcXFwia2VybmVsLlxcXCIgYXJlIHBhc3NlZCB2aWEgY21kbGluZS4gV2hlblxcbitcXHRcXHQgKiB0aGlzIGJvb3Rjb25maWcgY2FtZSBmcm9tIHRoZSBlbWJlZGRlZCBzb3VyY2UgYW5kXFxuK1xcdFxcdCAqIHNldHVwX2FyY2goKSBhbHJlYWR5IHByZXBlbmRlZCB0aGUgcmVuZGVyZWQgXFxcImtlcm5lbFxcXCIgc3VidHJlZVxcbitcXHRcXHQgKiB0byBib290X2NvbW1hbmRfbGluZSwgcmVuZGVyaW5nIGFnYWluIGhlcmUgd291bGQgZHVwbGljYXRlXFxuK1xcdFxcdCAqIHRoZSBrZXlzIGluIHNhdmVkX2NvbW1hbmRfbGluZSBhbmQgbWFrZSBhY2N1bXVsYXRpbmcgaGFuZGxlcnNcXG4rXFx0XFx0ICogKGNvbnNvbGU9LCBlYXJseWNvbj0sIC4uLikgcmUtcmVnaXN0ZXIgdGhlIHNhbWUgdmFsdWUuIFNraXBcXG4rXFx0XFx0ICogb25seSB3aGVuIHRoZSBwcmVwZW5kIHJlYWxseSBoYXBwZW5lZC5cXG4rXFx0XFx0ICpcXG4rXFx0XFx0ICogT24gYXJjaGVzIHRoYXQgZG8gbm90IHNlbGVjdCBBUkNIX1NVUFBPUlRTX0NNRExJTkVfRlJPTV9CT09UQ09ORklHLFxcbitcXHRcXHQgKiBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUcgaXMgdW5zZWxlY3RhYmxlIGFuZFxcbitcXHRcXHQgKiB4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkKCkgY29sbGFwc2VzIHRvIGEgc3R1YiByZXR1cm5pbmdcXG4rXFx0XFx0ICogZmFsc2UsIHNvIHRoaXMgcGF0aCBzdGlsbCBydW5zIGFuZCB0aGUgZW1iZWRkZWQgXFxcImtlcm5lbFxcXCJcXG4rXFx0XFx0ICoga2V5cyByZWFjaCB0aGUgY21kbGluZSB2aWEgdGhlIHJ1bnRpbWUgcGFyc2VyIGV4YWN0bHkgYXNcXG4rXFx0XFx0ICogYmVmb3JlIHRoaXMgc2VyaWVzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKCFmcm9tX2VtYmVkZGVkIHx8ICF4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkKCkpXFxuK1xcdFxcdFxcdGV4dHJhX2NvbW1hbmRfbGluZSA9IHhiY19tYWtlX2NtZGxpbmUoXFxcImtlcm5lbFxcXCIpO1xcbiBcXHRcXHQvKiBBbHNvLCBcXFwiaW5pdC5cXFwiIGtleXMgYXJlIGluaXQgYXJndW1lbnRzICovXFxuIFxcdFxcdGV4dHJhX2luaXRfYXJncyA9IHhiY19tYWtlX2NtZGxpbmUoXFxcImluaXRcXFwiKTtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUgYi9saWIvTWFrZWZpbGVcXG5pbmRleCAyM2UwN2QxOWQwMWM5MC4uNGY5N2E1NGQxZTNkOWEgMTAwNjQ0XFxuLS0tIGEvbGliL01ha2VmaWxlXFxuKysrIGIvbGliL01ha2VmaWxlXFxuQEAgLTI3NCw2ICsyNzQsMjIgQEAgZmlsZWNoa19kZWZiY29uZiA9IGNhdCAkKG9yICQocmVhbC1wcmVyZXFzKSwgL2Rldi9udWxsKVxcbiAkKG9iaikvZGVmYXVsdC5iY29uZjogJChDT05GSUdfQk9PVF9DT05GSUdfRU1CRURfRklMRSkgRk9SQ0VcXG4gXFx0JChjYWxsIGZpbGVjaGssZGVmYmNvbmYpXFxuIFxcbitvYmotJChDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUcpICs9IGVtYmVkZGVkLWNtZGxpbmUub1xcbiskKG9iaikvZW1iZWRkZWQtY21kbGluZS5vOiAkKG9iaikvZW1iZWRkZWRfY21kbGluZS5iaW5cXG4rXFxuKyMgUmVuZGVyIHRoZSBib290Y29uZmlnIFxcXCJrZXJuZWxcXFwiIHN1YnRyZWUgdG8gYSBmbGF0IGNtZGxpbmUgc3RyaW5nIHVzaW5nXFxuKyMgdGhlIHVzZXJzcGFjZSB0b29scy9ib290Y29uZmlnIHBhcnNlciAoLUMgbW9kZSkuIFRoZSBydW50aW1lIHByZXBlbmRcXG4rIyBoZWxwZXIgZW5mb3JjZXMgQ09NTUFORF9MSU5FX1NJWkUgYXQgYm9vdCwgc28gbm8gYnVpbGQtdGltZSBzaXplXFxuKyMgY2hlY2sgaXMgcGVyZm9ybWVkIGhlcmUgKENPTU1BTkRfTElORV9TSVpFIGlzIGFuIGFyY2ggaGVhZGVyXFxuKyMgY29uc3RhbnQsIG5vdCBhIEtjb25maWcgdmFsdWUpLlxcbitxdWlldF9jbWRfcmVuZGVyX2NtZGxpbmUgPSBCQ09ORjJDICRAXFxuKyAgICAgIGNtZF9yZW5kZXJfY21kbGluZSA9IFxcXFxcXG4rXFx0JChvYmp0cmVlKS90b29scy9ib290Y29uZmlnL2Jvb3Rjb25maWcgLUMgJFxcdTAwM2MgXFx1MDAzZSAkQFxcbitcXG4rdGFyZ2V0cyArPSBlbWJlZGRlZF9jbWRsaW5lLmJpblxcbiskKG9iaikvZW1iZWRkZWRfY21kbGluZS5iaW46ICQob2JqKS9kZWZhdWx0LmJjb25mICQob2JqdHJlZSkvdG9vbHMvYm9vdGNvbmZpZy9ib290Y29uZmlnIEZPUkNFXFxuK1xcdCQoY2FsbCBpZl9jaGFuZ2VkLHJlbmRlcl9jbWRsaW5lKVxcbitcXG4gb2JqLSQoQ09ORklHX1JCVFJFRV9URVNUKSArPSByYnRyZWVfdGVzdC5vXFxuIG9iai0kKENPTkZJR19JTlRFUlZBTF9UUkVFX1RFU1QpICs9IGludGVydmFsX3RyZWVfdGVzdC5vXFxuIFxcbmRpZmYgLS1naXQgYS9saWIvYm9vdGNvbmZpZy5jIGIvbGliL2Jvb3Rjb25maWcuY1xcbmluZGV4IGY0NDViNzcwM2ZkZDk2Li4wNWNiMWVhOWFmZGFlMyAxMDA2NDRcXG4tLS0gYS9saWIvYm9vdGNvbmZpZy5jXFxuKysrIGIvbGliL2Jvb3Rjb25maWcuY1xcbkBAIC0xOSw2ICsxOSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9lcnJuby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY2FjaGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcmludGsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NwcmludGYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWJsb2NrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdHJpbmcuaFxcdTAwM2VcXG5AQCAtMzQsNiArMzUsODMgQEAgY29uc3QgY2hhciAqIF9faW5pdCB4YmNfZ2V0X2VtYmVkZGVkX2Jvb3Rjb25maWcoc2l6ZV90ICpzaXplKVxcbiBcXHRyZXR1cm4gKCpzaXplKSA/IGVtYmVkZGVkX2Jvb3Rjb25maWdfZGF0YSA6IE5VTEw7XFxuIH1cXG4gI2VuZGlmXFxuK1xcbisjaWZkZWYgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXFxuKy8qIGVtYmVkZGVkX2tlcm5lbF9jbWRsaW5lIGlzIGRlZmluZWQgaW4gZW1iZWRkZWQtY21kbGluZS5TICovXFxuK2V4dGVybiBfX3Zpc2libGUgY29uc3QgY2hhciBlbWJlZGRlZF9rZXJuZWxfY21kbGluZVtdO1xcbitleHRlcm4gX192aXNpYmxlIGNvbnN0IGNoYXIgZW1iZWRkZWRfa2VybmVsX2NtZGxpbmVfZW5kW107XFxuK1xcbisvKiBTZXQgb25jZSB0aGUgZW1iZWRkZWQgY21kbGluZSBoYXMgYWN0dWFsbHkgYmVlbiBwcmVwZW5kZWQuICovXFxuK3N0YXRpYyBib29sIHhiY19jbWRsaW5lX2FwcGxpZWQgX19pbml0ZGF0YTtcXG4rXFxuKy8qXFxuKyAqIHN0cl9wcmVwZW5kKCkgLSBQcmVwZW5kIEBzcmMgaW4gZnJvbnQgb2YgdGhlIHN0cmluZyBpbiBAZHN0LCBpbiBwbGFjZVxcbisgKiBAZHN0OiBOVUwtdGVybWluYXRlZCBkZXN0aW5hdGlvbiBidWZmZXIsIGN1cnJlbnRseSBAZHN0X2xlbiBieXRlcyBsb25nXFxuKyAqIEBkc3RfbGVuOiBsZW5ndGggb2YgdGhlIGN1cnJlbnQgQGRzdCBzdHJpbmcgKGV4Y2x1ZGluZyBpdHMgTlVMKVxcbisgKiBAc3JjOiBieXRlcyB0byBwcmVwZW5kIChub3QgTlVMLXRlcm1pbmF0ZWQpXFxuKyAqIEBzcmNfbGVuOiBudW1iZXIgb2YgYnl0ZXMgZnJvbSBAc3JjIHRvIHByZXBlbmRcXG4rICpcXG4rICogVGhlIGNhbGxlciBtdXN0IGd1YXJhbnRlZSBAZHN0IGhhcyByb29tIGZvciBzcmNfbGVuICsgZHN0X2xlbiArIDEgYnl0ZXMuXFxuKyAqIE1vdmluZyBkc3RfbGVuICsgMSBieXRlcyBjYXJyaWVzIEBkc3QncyBOVUwgdGVybWluYXRvciB0b28sIHNvIGFuIGVtcHR5XFxuKyAqIEBkc3QgbmVlZHMgbm8gc3BlY2lhbCBjYXNlLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgX19pbml0IHN0cl9wcmVwZW5kKGNoYXIgKmRzdCwgc2l6ZV90IGRzdF9sZW4sXFxuK1xcdFxcdFxcdCAgICAgICBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBzcmNfbGVuKVxcbit7XFxuK1xcdG1lbW1vdmUoZHN0ICsgc3JjX2xlbiwgZHN0LCBkc3RfbGVuICsgMSk7XFxuK1xcdG1lbWNweShkc3QsIHNyYywgc3JjX2xlbik7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lKCkgLSBQcmVwZW5kIGVtYmVkZGVkIGJvb3Rjb25maWcgY21kbGluZVxcbisgKiBAZHN0OiBjbWRsaW5lIGJ1ZmZlciB0byBwcmVwZW5kIGludG8gKG11c3QgYWxyZWFkeSBjb250YWluIGEgTlVMIGJ5dGUpXFxuKyAqIEBzaXplOiB0b3RhbCBjYXBhY2l0eSBvZiBAZHN0IGluIGJ5dGVzXFxuKyAqXFxuKyAqIFByZXBlbmQgdGhlIGJ1aWxkLXRpbWUtcmVuZGVyZWQgXFxcImtlcm5lbFxcXCIgc3VidHJlZSBvZiB0aGUgZW1iZWRkZWRcXG4rICogYm9vdGNvbmZpZyB0byBAZHN0LiBUaGUgcmVuZGVyZWQgc3RyaW5nIGFscmVhZHkgZW5kcyB3aXRoIGEgc2luZ2xlXFxuKyAqIHNwYWNlICh0aGUgeGJjX3NucHJpbnRfY21kbGluZSgpIGludmFyaWFudCksIHdoaWNoIHNlcnZlcyBhcyB0aGVcXG4rICogc2VwYXJhdG9yIGJldHdlZW4gdGhlIGVtYmVkZGVkIGtleXMgYW5kIGFueSBleGlzdGluZyBjb250ZW50IG9mIEBkc3QuXFxuKyAqIE9uIG92ZXJmbG93LCBsb2cgYW4gZXJyb3IgYW5kIGxlYXZlIEBkc3QgdW50b3VjaGVkIHJhdGhlciB0aGFuXFxuKyAqIHNpbGVudGx5IHRydW5jYXRpbmc6IGJvb3Rpbmcgd2l0aG91dCB0aGUgZW1iZWRkZWQgdmFsdWVzIGlzIGJldHRlclxcbisgKiB0aGFuIHJlZnVzaW5nIHRvIGJvb3QsIGFuZCB0aGUgZXJyb3IgbWVzc2FnZSB0ZWxscyB0aGUgdXNlciB3aHlcXG4rICogdGhlaXIgZW1iZWRkZWQga2V5cyBhcmUgbWlzc2luZy5cXG4rICpcXG4rICogSW50ZW5kZWQgdG8gYmUgY2FsbGVkIGZyb20gc2V0dXBfYXJjaCgpIGJlZm9yZSBwYXJzZV9lYXJseV9wYXJhbSgpIHNvXFxuKyAqIHRoYXQgZWFybHlfcGFyYW0oKSBoYW5kbGVycyBzZWUgdGhlIGVtYmVkZGVkIHZhbHVlcy5cXG4rICovXFxuK3ZvaWQgX19pbml0IHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSlcXG4re1xcbitcXHRzaXplX3QgZW1iZWRfbGVuID0gZW1iZWRkZWRfa2VybmVsX2NtZGxpbmVfZW5kIC0gZW1iZWRkZWRfa2VybmVsX2NtZGxpbmU7XFxuK1xcdHNpemVfdCBkc3RfbGVuO1xcbitcXG4rXFx0aWYgKCFzaXplIHx8IGVtYmVkX2xlbiBcXHUwMDNjPSAxKVxcdC8qIHRyYWlsaW5nIE5VTCBvbmx5ICovXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0ZW1iZWRfbGVuLS07XFx0XFx0XFx0LyogZXhjbHVkZSB0cmFpbGluZyBOVUwgYnl0ZSAqL1xcbitcXG4rXFx0ZHN0X2xlbiA9IHN0cm5sZW4oZHN0LCBzaXplKTtcXG4rXFx0aWYgKGVtYmVkX2xlbiArIGRzdF9sZW4gKyAxIFxcdTAwM2Ugc2l6ZSkge1xcbitcXHRcXHRwcl9lcnIoXFxcImVtYmVkZGVkIGJvb3Rjb25maWcgY21kbGluZSAoJXp1IGJ5dGVzKSBkb2VzIG5vdCBmaXQgaW4gQ09NTUFORF9MSU5FX1NJWkUgd2l0aCAlenUgYnl0ZXMgYWxyZWFkeSB1c2VkOyBpZ25vcmluZyBlbWJlZGRlZCB2YWx1ZXNcXFxcblxcXCIsXFxuK1xcdFxcdCAgICAgICBlbWJlZF9sZW4sIGRzdF9sZW4pO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdHN0cl9wcmVwZW5kKGRzdCwgZHN0X2xlbiwgZW1iZWRkZWRfa2VybmVsX2NtZGxpbmUsIGVtYmVkX2xlbik7XFxuK1xcdHhiY19jbWRsaW5lX2FwcGxpZWQgPSB0cnVlO1xcbit9XFxuK1xcbisvKipcXG4rICogeGJjX2VtYmVkZGVkX2NtZGxpbmVfYXBwbGllZCgpIC0gRGlkIHRoZSBlbWJlZGRlZCBjbWRsaW5lIGdldCBwcmVwZW5kZWQ/XFxuKyAqXFxuKyAqIFJldHVybiB0cnVlIGlmIHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoKSBhY3R1YWxseSBwcmVwZW5kZWQgdGhlXFxuKyAqIGVtYmVkZGVkIFxcXCJrZXJuZWxcXFwiIHN1YnRyZWUuIHNldHVwX2Jvb3RfY29uZmlnKCkgdXNlcyB0aGlzIHRvIGF2b2lkXFxuKyAqIHJlbmRlcmluZyB0aGUgc2FtZSBrZXlzIGEgc2Vjb25kIHRpbWUuXFxuKyAqL1xcbitib29sIF9faW5pdCB4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkKHZvaWQpXFxuK3tcXG4rXFx0cmV0dXJuIHhiY19jbWRsaW5lX2FwcGxpZWQ7XFxuK31cXG4rI2VuZGlmXFxuK1xcbiAjZW5kaWZcXG4gXFxuIC8qXFxuQEAgLTQyNywxMSArNTA1LDMwIEBAIHN0YXRpYyBjaGFyIHhiY19uYW1lYnVmW1hCQ19LRVlMRU5fTUFYXSBfX2luaXRkYXRhO1xcbiBpbnQgX19pbml0IHhiY19zbnByaW50X2NtZGxpbmUoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgc3RydWN0IHhiY19ub2RlICpyb290KVxcbiB7XFxuIFxcdHN0cnVjdCB4YmNfbm9kZSAqa25vZGUsICp2bm9kZTtcXG4tXFx0Y2hhciAqZW5kID0gYnVmICsgc2l6ZTtcXG4gXFx0Y29uc3QgY2hhciAqdmFsLCAqcTtcXG4rXFx0c2l6ZV90IGxlbiA9IDA7XFxuIFxcdGludCByZXQ7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBUcmFjayB0aGUgcnVubmluZyB3cml0dGVuIGxlbmd0aCByYXRoZXIgdGhhbiBhZHZhbmNpbmcgQGJ1Ziwgc28gd2VcXG4rXFx0ICogbmV2ZXIgZm9ybSBcXFwiYnVmICsgc2l6ZVxcXCIgb3IgXFxcImJ1ZiArPSByZXRcXFwiIHdoaWxlIEBidWYgaXMgTlVMTCAodGhlXFxuK1xcdCAqIHNpemUtcHJvYmUgY2FsbCBwYXNzZXMgYnVmPU5VTEwsIHNpemU9MCkuIE5VTEwgcG9pbnRlciBhcml0aG1ldGljXFxuK1xcdCAqIGlzIHVuZGVmaW5lZCBiZWhhdmlvciBhbmQgdHJpcHMgaG9zdCBVQlNhbiAvIEZPUlRJRllfU09VUkNFIHdoZW5cXG4rXFx0ICogdGhpcyByZW5kZXJlciBydW5zIGF0IGtlcm5lbCBidWlsZCB0aW1lLiBzbnByaW50ZihOVUxMLCAwLCAuLi4pXFxuK1xcdCAqIGl0c2VsZiBpcyB3ZWxsIGRlZmluZWQgYW5kIHJldHVybnMgdGhlIHdvdWxkLWJlIGxlbmd0aC5cXG4rXFx0ICovXFxuIFxcdHhiY19ub2RlX2Zvcl9lYWNoX2tleV92YWx1ZShyb290LCBrbm9kZSwgdmFsKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEFuIGVtcHR5IG9yIHZhbHVlLW9ubHkgQHJvb3QgKGUuZy4gXFxcImtlcm5lbCB7fVxcXCIgb3JcXG4rXFx0XFx0ICogXFxcImtlcm5lbCA9IHhcXFwiLCBwb3NzaWJseSBhbG9uZ3NpZGUgXFxcImtlcm5lbC5mb28gPSBiYXJcXFwiKVxcbitcXHRcXHQgKiB5aWVsZHMgQHJvb3QgaXRzZWxmIGhlcmUuIFNraXAgaXQ6IGNvbXBvc2luZyBhIGtleSBmb3IgaXRcXG4rXFx0XFx0ICogd291bGQgZmFpbCB3aXRoIC1FSU5WQUwsIHlldCBhbnkgcmVhbCBkZXNjZW5kYW50IGtleXMgbXVzdFxcbitcXHRcXHQgKiBzdGlsbCBiZSByZW5kZXJlZC4gQW4gZW50aXJlbHkgZW1wdHkgc3VidHJlZSB0aGVuIHJlbmRlcnNcXG4rXFx0XFx0ICogbm90aGluZyBhbmQgcmV0dXJucyAwIHJhdGhlciB0aGFuIGFuIGVycm9yLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKGtub2RlID09IHJvb3QpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4gXFx0XFx0cmV0ID0geGJjX25vZGVfY29tcG9zZV9rZXlfYWZ0ZXIocm9vdCwga25vZGUsXFxuIFxcdFxcdFxcdFxcdFxcdHhiY19uYW1lYnVmLCBYQkNfS0VZTEVOX01BWCk7XFxuIFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbkBAIC00MzksMTAgKzUzNiwxMSBAQCBpbnQgX19pbml0IHhiY19zbnByaW50X2NtZGxpbmUoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgc3RydWN0IHhiY19ub2RlICpyb290KVxcbiBcXG4gXFx0XFx0dm5vZGUgPSB4YmNfbm9kZV9nZXRfY2hpbGQoa25vZGUpO1xcbiBcXHRcXHRpZiAoIXZub2RlKSB7XFxuLVxcdFxcdFxcdHJldCA9IHNucHJpbnRmKGJ1ZiwgcmVzdChidWYsIGVuZCksIFxcXCIlcyBcXFwiLCB4YmNfbmFtZWJ1Zik7XFxuK1xcdFxcdFxcdHJldCA9IHNucHJpbnRmKGJ1ZiA/IGJ1ZiArIGxlbiA6IE5VTEwsIHJlc3QobGVuLCBzaXplKSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFxcXCIlcyBcXFwiLCB4YmNfbmFtZWJ1Zik7XFxuIFxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbi1cXHRcXHRcXHRidWYgKz0gcmV0O1xcbitcXHRcXHRcXHRsZW4gKz0gcmV0O1xcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbiBcXHRcXHR4YmNfYXJyYXlfZm9yX2VhY2hfdmFsdWUodm5vZGUsIHZhbCkge1xcbkBAIC00NTIsMTUgKzU1MCwxNSBAQCBpbnQgX19pbml0IHhiY19zbnByaW50X2NtZGxpbmUoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgc3RydWN0IHhiY19ub2RlICpyb290KVxcbiBcXHRcXHRcXHQgKiB3aGl0ZXNwYWNlLlxcbiBcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0cSA9IHN0cnBicmsodmFsLCBcXFwiIFxcXFx0XFxcXHJcXFxcblxcXCIpID8gXFxcIlxcXFxcXFwiXFxcIiA6IFxcXCJcXFwiO1xcbi1cXHRcXHRcXHRyZXQgPSBzbnByaW50ZihidWYsIHJlc3QoYnVmLCBlbmQpLCBcXFwiJXM9JXMlcyVzIFxcXCIsXFxuLVxcdFxcdFxcdFxcdCAgICAgICB4YmNfbmFtZWJ1ZiwgcSwgdmFsLCBxKTtcXG4rXFx0XFx0XFx0cmV0ID0gc25wcmludGYoYnVmID8gYnVmICsgbGVuIDogTlVMTCwgcmVzdChsZW4sIHNpemUpLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcIiVzPSVzJXMlcyBcXFwiLCB4YmNfbmFtZWJ1ZiwgcSwgdmFsLCBxKTtcXG4gXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuLVxcdFxcdFxcdGJ1ZiArPSByZXQ7XFxuK1xcdFxcdFxcdGxlbiArPSByZXQ7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0cmV0dXJuIGJ1ZiAtIChlbmQgLSBzaXplKTtcXG4rXFx0cmV0dXJuIGxlbjtcXG4gfVxcbiAjdW5kZWYgcmVzdFxcbiBcXG5kaWZmIC0tZ2l0IGEvbGliL2VtYmVkZGVkLWNtZGxpbmUuUyBiL2xpYi9lbWJlZGRlZC1jbWRsaW5lLlNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iZGE4MWI0YTQyYmVhZlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9saWIvZW1iZWRkZWQtY21kbGluZS5TXFxuQEAgLTAsMCArMSwxNiBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbisvKlxcbisgKiBFbWJlZCB0aGUgYnVpbGQtdGltZS1yZW5kZXJlZCBib290Y29uZmlnIFxcXCJrZXJuZWxcXFwiIHN1YnRyZWUgYXMgYSBmbGF0XFxuKyAqIGNtZGxpbmUgc3RyaW5nLiBzZXR1cF9hcmNoKCkgcHJlcGVuZHMgdGhpcyB0byBib290X2NvbW1hbmRfbGluZSBvblxcbisgKiBhcmNoaXRlY3R1cmVzIHRoYXQgc2VsZWN0IEFSQ0hfU1VQUE9SVFNfQ01ETElORV9GUk9NX0JPT1RDT05GSUcuXFxuKyAqXFxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlc1xcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgQnJlbm8gTGVpdGFvIFxcdTAwM2NsZWl0YW9AZGViaWFuLm9yZ1xcdTAwM2VcXG4rICovXFxuK1xcdC5zZWN0aW9uIC5pbml0LnJvZGF0YS5lbWJlZF9jbWRsaW5lLCBcXFwiYVxcXCIsICVwcm9nYml0c1xcbitcXHQuZ2xvYmFsIGVtYmVkZGVkX2tlcm5lbF9jbWRsaW5lXFxuK2VtYmVkZGVkX2tlcm5lbF9jbWRsaW5lOlxcbitcXHQuaW5jYmluIFxcXCJsaWIvZW1iZWRkZWRfY21kbGluZS5iaW5cXFwiXFxuK1xcdC5ieXRlIDBcXG4rXFx0Lmdsb2JhbCBlbWJlZGRlZF9rZXJuZWxfY21kbGluZV9lbmRcXG4rZW1iZWRkZWRfa2VybmVsX2NtZGxpbmVfZW5kOlxcbmRpZmYgLS1naXQgYS90b29scy9ib290Y29uZmlnL01ha2VmaWxlIGIvdG9vbHMvYm9vdGNvbmZpZy9NYWtlZmlsZVxcbmluZGV4IDkwZWI0N2M5ZDhkZTY3Li4zY2I4MDY2ZDUxNDFiYiAxMDA2NDRcXG4tLS0gYS90b29scy9ib290Y29uZmlnL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvYm9vdGNvbmZpZy9NYWtlZmlsZVxcbkBAIC0xNSw3ICsxNSw3IEBAIG92ZXJyaWRlIENGTEFHUyArPSAtV2FsbCAtZyAtSSQoQ1VSRElSKS9pbmNsdWRlXFxuIEFMTF9UQVJHRVRTIDo9IGJvb3Rjb25maWdcXG4gQUxMX1BST0dSQU1TIDo9ICQocGF0c3Vic3QgJSwkKE9VVFBVVCklLCQoQUxMX1RBUkdFVFMpKVxcbiBcXG4tYWxsOiAkKEFMTF9QUk9HUkFNUykgdGVzdFxcbithbGw6ICQoQUxMX1BST0dSQU1TKVxcbiBcXG4gJChPVVRQVVQpYm9vdGNvbmZpZzogbWFpbi5jIGluY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oICQoTElCU1JDKVxcbiBcXHQkKENDKSAkKGZpbHRlciAlLmMsJF4pICQoQ0ZMQUdTKSAkKExERkxBR1MpIC1vICRAXFxuQEAgLTI3LDQgKzI3LDQgQEAgaW5zdGFsbDogJChBTExfUFJPR1JBTVMpXFxuIFxcdGluc3RhbGwgJChPVVRQVVQpYm9vdGNvbmZpZyAkKERFU1RESVIpJChiaW5kaXIpXFxuIFxcbiBjbGVhbjpcXG4tXFx0JChSTSkgLWYgJChPVVRQVVQpKi5vICQoQUxMX1BST0dSQU1TKVxcbitcXHRybSAtZiAkKE9VVFBVVCkqLm8gJChBTExfUFJPR1JBTVMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE2OjQzOjE2LjU2OTMwMjU0NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODE0MjI1NzkzNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBidWlsZC10aW1lIGZlYXR1cmUgdG8gcmVuZGVyIGVtYmVkZGVkIGJvb3Rjb25maWcgaW50byBhIGNtZGxpbmUgc3RyaW5nIGFuZCBwcmVwZW5kcyBpdCBkdXJpbmcgZWFybHkgYm9vdCAoYHNldHVwX2FyY2hgKS4gSXQgYWxzbyBmaXhlcyBhIGJ1ZyBpbiBgeGJjX3NucHJpbnRfY21kbGluZWAgd2hpY2ggaXMgb25seSBjYWxsZWQgZHVyaW5nIGVhcmx5IGJvb3QgKGBzZXR1cF9ib290X2NvbmZpZ2ApLiBBbGwgbW9kaWZpZWQga2VybmVsIGNvZGUgaXMgbWFya2VkIGBfX2luaXRgLCBydW5zIGV4YWN0bHkgb25jZSBkdXJpbmcgYm9vdCwgYW5kIHByb2Nlc3NlcyBzdGF0aWMgZGF0YSAoZnJvbSB0aGUga2VybmVsIGltYWdlIG9yIGluaXRyZCkuIFNpbmNlIHRoZXJlIGlzIG5vIHdheSBmb3IgYSBzeXNjYWxsIGZ1enplciB0byByZWFjaCB0aGlzIGNvZGUgb3IgbXV0YXRlIGl0cyBpbnB1dHMsIGl0IGNhbm5vdCBiZSBtZWFuaW5nZnVsbHkgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5ZGY5MjlhZWNhOWJjNTIzYWI3MDg5ZmFmYmJkNjYxMTZlZTc0M2I1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdW4gMjMgMTY6NDM6MTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Jvb3Rjb25maWcucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdFxuaW5kZXggZjcxMjc1ODQ3MmQ1YzYuLjM0OWNlZmJiMmJiY2RkIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdFxuQEAgLTIzNCw2ICsyMzQsODcgQEAgS2NvbmZpZyBvcHRpb24gc2VsZWN0ZWQuXG4gTm90ZSB0aGF0IGV2ZW4gaWYgeW91IHNldCB0aGlzIG9wdGlvbiwgeW91IGNhbiBvdmVycmlkZSB0aGUgZW1iZWRkZWRcbiBib290Y29uZmlnIGJ5IGFub3RoZXIgYm9vdGNvbmZpZyB3aGljaCBhdHRhY2hlZCB0byB0aGUgaW5pdHJkLlxuIFxuK1JlbmRlcmluZyBFbWJlZGRlZCBrZXJuZWwuKiBLZXlzIGF0IEJ1aWxkIFRpbWVcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4rXG4rQnkgZGVmYXVsdCwgdGhlIGVtYmVkZGVkIGJvb3Rjb25maWcgKGBgQ09ORklHX0JPT1RfQ09ORklHX0VNQkVEPXlgYCkgaXNcbitwYXJzZWQgYXQgcnVudGltZSwgYWZ0ZXIgYGBwYXJzZV9lYXJseV9wYXJhbSgpYGAgaGFzIGFscmVhZHkgcnVuLiBFYXJseVxuK3BhcmFtZXRlciBoYW5kbGVycyAoYGBtZW09YGAsIGBgZWFybHljb249YGAsIGBgbG9nbGV2ZWw9YGAsIC4uLikgdGhlcmVmb3JlXG4rY2Fubm90IHNlZSB2YWx1ZXMgc3VwcGxpZWQgdmlhIHRoZSBlbWJlZGRlZCBgYGtlcm5lbGBgIHN1YnRyZWUuXG4rXG4rYGBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUdgYCByZXNvbHZlcyB0aGlzIGJ5IHJlbmRlcmluZyB0aGVcbitgYGtlcm5lbGBgIHN1YnRyZWUgb2YgYGBDT05GSUdfQk9PVF9DT05GSUdfRU1CRURfRklMRWBgIGludG8gYSBmbGF0IGNtZGxpbmVcbitzdHJpbmcgYXQga2VybmVsIGJ1aWxkIHRpbWUgKHZpYSBgYHRvb2xzL2Jvb3Rjb25maWcgLUNgYCkgYW5kIHByZXBlbmRpbmdcbitpdCB0byBgYGJvb3RfY29tbWFuZF9saW5lYGAgZHVyaW5nIGVhcmx5IGFyY2hpdGVjdHVyZSBzZXR1cCwgc28gdGhlIGtleXNcbithcmUgdmlzaWJsZSB0byBgYHBhcnNlX2Vhcmx5X3BhcmFtKClgYC5cbitcbitUaGUgb3B0aW9uIHJlcXVpcmVzIGBgQ09ORklHX0JPT1RfQ09ORklHX0VNQkVEPXlgYCwgYSBub24tZW1wdHlcbitgYENPTkZJR19CT09UX0NPTkZJR19FTUJFRF9GSUxFYGAsIGFuZCBhbiBhcmNoaXRlY3R1cmUgdGhhdCBzZWxlY3RzXG4rYGBDT05GSUdfQVJDSF9TVVBQT1JUU19DTURMSU5FX0ZST01fQk9PVENPTkZJR2BgLiBDdXJyZW50bHkgb25seSB4ODZcbitzZWxlY3RzIGl0OyBvbiBvdGhlciBhcmNoaXRlY3R1cmVzIHRoZSBlbWJlZGRlZCBib290Y29uZmlnIHN0aWxsIHdvcmtzLFxuK2J1dCBvbmx5IHRocm91Z2ggdGhlIGxhdGUgcnVudGltZSBwYXJzZXIuXG4rXG4rVGhlIHNhbWUgYGBib290Y29uZmlnYGAgb3B0LWluIGFwcGxpZXMgYXMgZWxzZXdoZXJlOiB0aGUgcmVuZGVyZWQga2V5c1xuK2FyZSBwcmVwZW5kZWQgb25seSB3aGVuIGBgYm9vdGNvbmZpZ2BgIChpbiBhbnkgZm9ybSkgYXBwZWFycyBvbiB0aGVcbitrZXJuZWwgY29tbWFuZCBsaW5lLCBvciB3aGVuIGBgQ09ORklHX0JPT1RfQ09ORklHX0ZPUkNFYGAgaXMgc2V0LCB3aGljaFxuK2RlZmF1bHRzIHRvIGBgeWBgIHdoZW4gYGBDT05GSUdfQk9PVF9DT05GSUdfRU1CRURgYCBpcyBzZXQuXG4rXG4rRm9yIGV4YW1wbGUsIGdpdmVuOjpcbitcbisga2VybmVsIHtcbisgICBsb2dsZXZlbCA9IDdcbisgICBtZW0gPSA0R1xuKyB9XG4rXG4rdGhlIGtlcm5lbCBib290cyBhcyBpZiBgYGxvZ2xldmVsPTcgbWVtPTRHYGAgaGFkIGJlZW4gcHJlcGVuZGVkIHRvIHRoZVxuK2Jvb3Rsb2FkZXIgY29tbWFuZCBsaW5lLCB3aXRoIHRoZSB2YWx1ZXMgdmlzaWJsZSB0byBlYXJseS1wYXJzZWRcbitoYW5kbGVycy4gQ29tbWEtc2VwYXJhdGVkIHZhbHVlcyBhcmUgc3RpbGwgZXhwYW5kZWQgaW50byBtdWx0aXBsZVxuK2NtZGxpbmUgZW50cmllcyBwZXIgdGhlIGJvb3Rjb25maWcgYXJyYXkgY29udmVudGlvbiAtLSB0aGUgZW1iZWRkZWRcbitgYGtlcm5lbC5lYXJseWNvbiA9IFwidWFydDgyNTAsaW8sMHgzZjhcImBgIG11c3QgYmUgcXVvdGVkIHRvIGxhbmQgYXMgYVxuK3NpbmdsZSBgYGVhcmx5Y29uPWBgIGVudHJ5LCBleGFjdGx5IGFzIGZvciB0aGUgcnVudGltZSBwYXJzZXIuXG4rXG4rSWYgdGhlIHJlbmRlcmVkIHN0cmluZyB3b3VsZCBub3QgZml0IGluIGBgQ09NTUFORF9MSU5FX1NJWkVgYCB0b2dldGhlclxuK3dpdGggdGhlIGV4aXN0aW5nIGNvbW1hbmQgbGluZSwgdGhlIHByZXBlbmQgaXMgc2tpcHBlZCBhbmQgYW4gZXJyb3IgaXNcbitsb2dnZWQsIHNvIGFuIG92ZXJzaXplZCBlbWJlZGRlZCBib290Y29uZmlnIGNhbm5vdCBicmljayBhIGJvb3QuXG4rXG4rSW50ZXJhY3Rpb24gd2l0aCBvdGhlciBjb21tYW5kIGxpbmUgYW5kIGJvb3Rjb25maWcgc291cmNlc1xuK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5cbitcbitXaXRoIGBgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHPXlgYCB0aGUgcmVuZGVyZWQgYGBrZXJuZWxgYFxuK3N1YnRyZWUgYmVoYXZlcyBsaWtlIGEgYnVpbGQtdGltZSBjb21tYW5kIGxpbmUgKHNpbWlsYXIgdG9cbitgYENPTkZJR19DTURMSU5FYGApLCBub3QgbGlrZSBhIGJvb3Rjb25maWcgc291cmNlLiBJdCBpcyBwcmVwZW5kZWQgdG9cbitgYGJvb3RfY29tbWFuZF9saW5lYGAgaW4gYGBzZXR1cF9hcmNoKClgYCwgYmVmb3JlIGBgcGFyc2VfZWFybHlfcGFyYW0oKWBgXG4rYW5kIGxvbmcgYmVmb3JlIHRoZSBydW50aW1lIHBhcnNlciBsb29rcyBhdCBhbiBpbml0cmQuIE9wdGlvbnMgY2FuIHJlYWNoXG4rdGhlIGtlcm5lbCBmcm9tIHVwIHRvIGZvdXIgcGxhY2VzOlxuK1xuKy0gQm9vdGxvYWRlciBjb21tYW5kIGxpbmU6IHRoZSBhcmd1bWVudHMgdGhlIGJvb3QgbG9hZGVyIHBhc3Nlcy4gVGhlXG4rICBlbWJlZGRlZCBjbWRsaW5lIGlzIHByZXBlbmRlZCBpbiBmcm9udCBvZiB0aGVtLCBzbyBmb3IgbGFzdC1vbmUtd2luc1xuKyAgcGFyYW1ldGVycyBhIGJvb3Rsb2FkZXIgb3B0aW9uIHN0aWxsIG92ZXJyaWRlcyB0aGUgZW1iZWRkZWQgdmFsdWUuXG4rICBWaXNpYmxlIGluIC9wcm9jL2NtZGxpbmUuXG4rLSBFbWJlZGRlZCBjbWRsaW5lICh0aGlzIG9wdGlvbik6IHRoZSByZW5kZXJlZCBgYGtlcm5lbGBgIHN1YnRyZWUsXG4rICBwcmVwZW5kZWQgZWFybHkgc28gaXQgaXMgc2VlbiBieSBgYHBhcnNlX2Vhcmx5X3BhcmFtKClgYC4gVmlzaWJsZSBpblxuKyAgL3Byb2MvY21kbGluZS5cbistIEluaXRyZCBib290Y29uZmlnOiBwYXJzZWQgbGF0ZSBpbiBgYHNldHVwX2Jvb3RfY29uZmlnKClgYDsgaXRzXG4rICBgYGtlcm5lbGBgIGtleXMgYXJlIHBsYWNlZCBhaGVhZCBvZiBgYGJvb3RfY29tbWFuZF9saW5lYGAsIGkuZS4gYmVmb3JlXG4rICB0aGUgZW1iZWRkZWQgY21kbGluZSwgc28gbGFzdC13aW5zIGZhdm9ycyB0aGUgZW1iZWRkZWQgdmFsdWVzLiBBcyBhXG4rICBib290Y29uZmlnIHNvdXJjZSwgYW4gaW5pdHJkIGJvb3Rjb25maWcgc3RpbGwgcmVwbGFjZXMgdGhlIGVtYmVkZGVkXG4rICBib290Y29uZmlnLiBWaXNpYmxlIGluIC9wcm9jL2NtZGxpbmUgYW5kIC9wcm9jL2Jvb3Rjb25maWcuXG4rLSBFbWJlZGRlZCBib290Y29uZmlnIChydW50aW1lKTogcGFyc2VkIGxhdGUsIG9ubHkgd2hlbiBubyBpbml0cmRcbisgIGJvb3Rjb25maWcgaXMgcHJlc2VudC4gVmlzaWJsZSBpbiAvcHJvYy9jbWRsaW5lIGFuZCAvcHJvYy9ib290Y29uZmlnLlxuK1xuK1NvIHdpdGggdGhpcyBvcHRpb24gdGhlIGVtYmVkZGVkIGBga2VybmVsLipgYCB2YWx1ZXMgdGFrZSBwcmVjZWRlbmNlXG4rb3ZlciBhbiBpbml0cmQgYm9vdGNvbmZpZydzIGBga2VybmVsLipgYCB2YWx1ZXM6IGZvciBlYXJseSBwYXJhbWV0ZXJzXG4rdGhlIGluaXRyZCBpcyBub3QgcGFyc2VkIHlldCwgYW5kIGZvciBvcmRpbmFyeSBwYXJhbWV0ZXJzIHRoZSBlbWJlZGRlZFxuK2tleXMgbGFuZCBsYXRlciBpbiB0aGUgY29tbWFuZCBsaW5lLiBJZiB5b3UgbmVlZCBhbiBpbml0cmQgYm9vdGNvbmZpZyB0b1xuK292ZXJyaWRlIHRoZSBlbWJlZGRlZCBgYGtlcm5lbC4qYGAga2V5cywgbGVhdmUgdGhpcyBvcHRpb24gb2ZmIGFuZCByZWx5XG4rb24gdGhlIHJ1bnRpbWUgcGFyc2VyLlxuK1xuK1RoZSByZW5kZXJlZCBzdHJpbmcgaXMgcGFydCBvZiB0aGUgY29tbWFuZCBsaW5lLCBzbyBpdCBhcHBlYXJzIGluXG4rL3Byb2MvY21kbGluZS4gSXQgaXMgZGVsaWJlcmF0ZWx5IG5vdCBzaG93biBpbiAvcHJvYy9ib290Y29uZmlnOiB0aGF0XG4rZmlsZSBrZWVwcyByZXBvcnRpbmcgdGhlIHBhcnNlZCBib290Y29uZmlnIHRyZWUgLS0gdGhlIGluaXRyZCBib290Y29uZmlnXG4raWYgcHJlc2VudCwgb3RoZXJ3aXNlIHRoZSBlbWJlZGRlZCBib290Y29uZmlnIC0tIGluZGVwZW5kZW50IG9mIHdoZXRoZXJcbitidWlsZC10aW1lIGNtZGxpbmUgcmVuZGVyaW5nIGlzIGVuYWJsZWQuXG4rXG4gS2VybmVsIHBhcmFtZXRlcnMgdmlhIEJvb3QgQ29uZmlnXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggZDk1ZDNlZjc3NzczZmEuLjc1MzM0MTk3NzNjYTljIDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbisrKyBiL01BSU5UQUlORVJTXG5AQCAtOTgxMyw2ICs5ODEzLDcgQEAgRjpcdGZzL3Byb2MvYm9vdGNvbmZpZy5jXG4gRjpcdGluY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oXG4gRjpcdGxpYi9ib290Y29uZmlnLWRhdGEuU1xuIEY6XHRsaWIvYm9vdGNvbmZpZy5jXG4rRjpcdGxpYi9lbWJlZGRlZC1jbWRsaW5lLlNcbiBGOlx0dG9vbHMvYm9vdGNvbmZpZy8qXG4gRjpcdHRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy8qXG4gXG5kaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZVxuaW5kZXggZDFjNTk1ZGI1NWM5NTYuLjFmNTZhNjg5MmZlYjQwIDEwMDY0NFxuLS0tIGEvTWFrZWZpbGVcbisrKyBiL01ha2VmaWxlXG5AQCAtMTUzMSw2ICsxNTMxLDIyIEBAIHByZXBhcmU6IHRvb2xzL2JwZi9yZXNvbHZlX2J0Zmlkc1xuIGVuZGlmXG4gZW5kaWZcbiBcbisjIHRvb2xzL2Jvb3Rjb25maWcgcmVuZGVycyB0aGUgZW1iZWRkZWQgYm9vdGNvbmZpZyBpbnRvIGEgY21kbGluZSBhdCBidWlsZCB0aW1lLlxuK2lmZGVmIENPTkZJR19DTURMSU5FX0ZST01fQk9PVENPTkZJR1xuK3ByZXBhcmU6IHRvb2xzL2Jvb3Rjb25maWdcbitlbmRpZlxuK1xuKyMgdG9vbHMvYm9vdGNvbmZpZyBpcyBydW4gb24gdGhlIGJ1aWxkIGhvc3QgZHVyaW5nIHByZXBhcmUsIHNvIGZvcmNlIGEgaG9zdFxuKyMgYmluYXJ5IGhlcmU7IGl0cyBvd24gTWFrZWZpbGUga2VlcHMgJChDQykgZm9yIHN0YW5kYWxvbmUgYW5kIGNyb3NzIGJ1aWxkcy5cbisjIENST1NTX0NPTVBJTEU9IGlzIGNsZWFyZWQgc28gdG9vbHMvc2NyaXB0cy9NYWtlZmlsZS5pbmNsdWRlIGRvZXMgbm90IGluamVjdFxuKyMgdGhlIHRhcmdldCdzIC0tdGFyZ2V0PS8tLXN5c3Jvb3Q9IGZsYWdzIGludG8gdGhlIGhvc3QgY2xhbmcgaW52b2NhdGlvbiB1bmRlclxuKyMgTExWTT0xIGNyb3NzIGJ1aWxkcyAod2hpY2ggd291bGQgcHJvZHVjZSBhIHRhcmdldCBiaW5hcnkgdGhhdCBmYWlscyB0byBleGVjKS5cbit0b29scy9ib290Y29uZmlnOiBleHBvcnQgQ0MgOj0gJChIT1NUQ0MpXG4rdG9vbHMvYm9vdGNvbmZpZzogRk9SQ0VcbitcdCQoUSlta2RpciAtcCAkKG9ianRyZWUpL3Rvb2xzXG4rXHQkKFEpJChNQUtFKSBPPSQoYWJzcGF0aCAkKG9ianRyZWUpKSBzdWJkaXI9dG9vbHMgLUMgJChzcmN0cmVlKS90b29scy8gXFxcbitcdFx0Ym9vdGNvbmZpZyBDUk9TU19DT01QSUxFPVxuK1xuICMgVGhlIHRvb2xzIGJ1aWxkIHN5c3RlbSBpcyBub3QgYSBwYXJ0IG9mIEtidWlsZCBhbmQgdGVuZHMgdG8gaW50cm9kdWNlXG4gIyBpdHMgb3duIHVuaXF1ZSBpc3N1ZXMuIElmIHlvdSBuZWVkIHRvIGludGVncmF0ZSBhIG5ldyB0b29sIGludG8gS2J1aWxkLFxuICMgcGxlYXNlIGNvbnNpZGVyIGxvY2F0aW5nIHRoYXQgdG9vbCBvdXRzaWRlIHRoZSB0b29scy8gdHJlZSBhbmQgdXNpbmcgdGhlXG5AQCAtMTU1Nyw2ICsxNTczLDE1IEBAIGlmbmVxICgkKHdpbGRjYXJkICQob2JqdG9vbF9PKSksKVxuIFx0JChRKSQoTUFLRSkgLXNDICQoYWJzX3NyY3RyZWUpL3Rvb2xzL29ianRvb2wgTz0kKG9ianRvb2xfTykgc3JjdHJlZT0kKGFic19zcmN0cmVlKSAkKHBhdHN1YnN0IG9ianRvb2xfJSwlLCRAKVxuIGVuZGlmXG4gXG4rUEhPTlkgKz0gYm9vdGNvbmZpZ19jbGVhblxuK1xuK2Jvb3Rjb25maWdfTyA9ICQoYWJzcGF0aCAkKG9ianRyZWUpKS90b29scy9ib290Y29uZmlnXG4rXG4rYm9vdGNvbmZpZ19jbGVhbjpcbitpZm5lcSAoJCh3aWxkY2FyZCAkKGJvb3Rjb25maWdfTykpLClcbitcdCQoUSkkKE1BS0UpIC1zQyAkKHNyY3RyZWUpL3Rvb2xzL2Jvb3Rjb25maWcgTz0kKGJvb3Rjb25maWdfTykgY2xlYW5cbitlbmRpZlxuK1xuIHRvb2xzLzogRk9SQ0VcbiBcdCQoUSlta2RpciAtcCAkKG9ianRyZWUpL3Rvb2xzXG4gXHQkKFEpJChNQUtFKSBPPSQoYWJzcGF0aCAkKG9ianRyZWUpKSBzdWJkaXI9dG9vbHMgLUMgJChzcmN0cmVlKS90b29scy9cbkBAIC0xNzMyLDcgKzE3NTcsNyBAQCB2bWxpbnV4Y2xlYW46XG4gXHQkKFEpJChDT05GSUdfU0hFTEwpICQoc3JjdHJlZSkvc2NyaXB0cy9saW5rLXZtbGludXguc2ggY2xlYW5cbiBcdCQoUSkkKGlmICQoQVJDSF9QT1NUTElOSyksICQoTUFLRSkgLWYgJChBUkNIX1BPU1RMSU5LKSBjbGVhbilcbiBcbi1jbGVhbjogYXJjaGNsZWFuIHZtbGludXhjbGVhbiByZXNvbHZlX2J0Zmlkc19jbGVhbiBvYmp0b29sX2NsZWFuXG4rY2xlYW46IGFyY2hjbGVhbiB2bWxpbnV4Y2xlYW4gcmVzb2x2ZV9idGZpZHNfY2xlYW4gb2JqdG9vbF9jbGVhbiBib290Y29uZmlnX2NsZWFuXG4gXG4gIyBtcnByb3BlciAtIERlbGV0ZSBhbGwgZ2VuZXJhdGVkIGZpbGVzLCBpbmNsdWRpbmcgLmNvbmZpZ1xuICNcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnIGIvYXJjaC94ODYvS2NvbmZpZ1xuaW5kZXggZmE0ZjAwNzk2MTRjZDAuLmFkYmNhYWQ4MDEzMDgzIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvS2NvbmZpZ1xuKysrIGIvYXJjaC94ODYvS2NvbmZpZ1xuQEAgLTEyNyw2ICsxMjcsNyBAQCBjb25maWcgWDg2XG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19OVU1BX0JBTEFOQ0lOR1x0aWYgWDg2XzY0XG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19LTUFQX0xPQ0FMX0ZPUkNFX01BUFx0aWYgTlJfQ1BVUyBcdTAwM2M9IDQwOTZcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0NGSVx0XHRpZiBYODZfNjRcbitcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXG4gXHRzZWxlY3QgQVJDSF9VU0VTX0NGSV9UUkFQU1x0XHRpZiBYODZfNjQgXHUwMDI2XHUwMDI2IENGSVxuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTFRPX0NMQU5HXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19MVE9fQ0xBTkdfVEhJTlxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC94ODYva2VybmVsL3NldHVwLmNcbmluZGV4IDQ2ODgyY2U3OWMzYTRkLi5jOTczYTJjZWJjZDA0ZSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuY1xuQEAgLTYsNiArNiw3IEBAXG4gICogcGFydHMgb2YgZWFybHkga2VybmVsIGluaXRpYWxpemF0aW9uLlxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2FjcGkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jvb3Rjb25maWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbnNvbGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NwdS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3Jhc2hfZHVtcC5oXHUwMDNlXG5AQCAtODgxLDYgKzg4MiwzNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgeDg2X3JlcG9ydF9ueCh2b2lkKVxuICAqIE5vdGU6IE9uIHg4Nl82NCwgZml4bWFwcyBhcmUgcmVhZHkgZm9yIHVzZSBldmVuIGJlZm9yZSB0aGlzIGlzIGNhbGxlZC5cbiAgKi9cbiBcbisjaWZkZWYgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXG4rc3RhdGljIGludCBfX2luaXQgYm9vdGNvbmZpZ19vcHRpbihjaGFyICpwYXJhbSwgY2hhciAqdmFsLFxuK1x0XHRcdFx0ICAgY29uc3QgY2hhciAqdW51c2VkLCB2b2lkICphcmcpXG4re1xuK1x0aWYgKCFzdHJjbXAocGFyYW0sIFwiYm9vdGNvbmZpZ1wiKSlcbitcdFx0Kihib29sICopYXJnID0gdHJ1ZTtcbitcdHJldHVybiAwO1xuK31cbitcbisvKlxuKyAqIERpZCB0aGUgdXNlciBvcHQgaW4gdG8gYm9vdGNvbmZpZyBvbiB0aGUga2VybmVsIGNvbW1hbmQgbGluZT8gVXNlXG4rICogcGFyc2VfYXJncygpIHNvIHRoaXMgbWF0Y2hlcyBzZXR1cF9ib290X2NvbmZpZygpIGV4YWN0bHksIGluY2x1ZGluZ1xuKyAqIHN0b3BwaW5nIGF0IHRoZSBcIi0tXCIgdGhhdCBzZXBhcmF0ZXMgaW5pdCBhcmd1bWVudHMuXG4rICovXG4rc3RhdGljIGJvb2wgX19pbml0IGJvb3Rjb25maWdfY21kbGluZV9yZXF1ZXN0ZWQodm9pZClcbit7XG4rXHRzdGF0aWMgY2hhciB0bXBfY21kbGluZVtDT01NQU5EX0xJTkVfU0laRV0gX19pbml0ZGF0YTtcbitcdGJvb2wgZm91bmQgPSBmYWxzZTtcbitcbitcdGlmIChJU19FTkFCTEVEKENPTkZJR19CT09UX0NPTkZJR19GT1JDRSkpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0c3Ryc2NweSh0bXBfY21kbGluZSwgYm9vdF9jb21tYW5kX2xpbmUsIENPTU1BTkRfTElORV9TSVpFKTtcbitcdGlmIChJU19FUlIocGFyc2VfYXJncyhcImJvb3Rjb25maWdcIiwgdG1wX2NtZGxpbmUsIE5VTEwsIDAsIDAsIDAsXG4rXHRcdFx0ICAgICAgXHUwMDI2Zm91bmQsIGJvb3Rjb25maWdfb3B0aW4pKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cmV0dXJuIGZvdW5kO1xuK31cbisjZW5kaWZcbitcbiB2b2lkIF9faW5pdCBzZXR1cF9hcmNoKGNoYXIgKipjbWRsaW5lX3ApXG4ge1xuICNpZmRlZiBDT05GSUdfWDg2XzMyXG5AQCAtOTI0LDYgKzk1NiwxNyBAQCB2b2lkIF9faW5pdCBzZXR1cF9hcmNoKGNoYXIgKipjbWRsaW5lX3ApXG4gXHRidWlsdGluX2NtZGxpbmVfYWRkZWQgPSB0cnVlO1xuICNlbmRpZlxuIFxuKyNpZmRlZiBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUdcbitcdC8qXG4rXHQgKiBQcmVwZW5kIHRoZSBidWlsZC10aW1lLXJlbmRlcmVkIGVtYmVkZGVkIFwia2VybmVsXCIga2V5cyBoZXJlIHNvXG4rXHQgKiBwYXJzZV9lYXJseV9wYXJhbSgpIGJlbG93IHNlZXMgdGhlbSwgZ2F0aW5nIG9uIHRoZSBzYW1lIG9wdC1pblxuK1x0ICogYXMgdGhlIHJ1bnRpbWUgcGFyc2VyIChzZWUgYm9vdGNvbmZpZ19jbWRsaW5lX3JlcXVlc3RlZCgpKS5cbitcdCAqL1xuK1x0aWYgKGJvb3Rjb25maWdfY21kbGluZV9yZXF1ZXN0ZWQoKSlcbitcdFx0eGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZShib290X2NvbW1hbmRfbGluZSxcbitcdFx0XHRcdFx0ICAgICBDT01NQU5EX0xJTkVfU0laRSk7XG4rI2VuZGlmXG4rXG4gXHRzdHJzY3B5KGNvbW1hbmRfbGluZSwgYm9vdF9jb21tYW5kX2xpbmUsIENPTU1BTkRfTElORV9TSVpFKTtcbiBcdCpjbWRsaW5lX3AgPSBjb21tYW5kX2xpbmU7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmggYi9pbmNsdWRlL2xpbnV4L2Jvb3Rjb25maWcuaFxuaW5kZXggMWM3ZjNiNzRmZmNmMzguLjQzMzI0YjQ3N2YxM2FiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oXG5AQCAtMzA4LDQgKzMwOCwxMyBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKnhiY19nZXRfZW1iZWRkZWRfYm9vdGNvbmZpZyhzaXplX3QgKnNpemUpXG4gfVxuICNlbmRpZlxuIFxuKy8qIEJ1aWxkLXRpbWUtcmVuZGVyZWQgYm9vdGNvbmZpZyBjbWRsaW5lIHByZXBlbmRlZCBpbiBzZXR1cF9hcmNoKCkgKi9cbisjaWZkZWYgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXG4rdm9pZCBfX2luaXQgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZShjaGFyICpkc3QsIHNpemVfdCBzaXplKTtcbitib29sIF9faW5pdCB4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkKHZvaWQpO1xuKyNlbHNlXG4rc3RhdGljIGlubGluZSB2b2lkIHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSkgeyB9XG4rc3RhdGljIGlubGluZSBib29sIHhiY19lbWJlZGRlZF9jbWRsaW5lX2FwcGxpZWQodm9pZCkgeyByZXR1cm4gZmFsc2U7IH1cbisjZW5kaWZcbitcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9pbml0L0tjb25maWcgYi9pbml0L0tjb25maWdcbmluZGV4IDQ0MDNlNTM4NzZlMTA3Li4xY2Y2Y2Y2Mjk4YzRlZSAxMDA2NDRcbi0tLSBhL2luaXQvS2NvbmZpZ1xuKysrIGIvaW5pdC9LY29uZmlnXG5AQCAtMTU2Niw2ICsxNTY2LDQyIEBAIGNvbmZpZyBCT09UX0NPTkZJR19FTUJFRF9GSUxFXG4gXHQgIFRoaXMgYm9vdGNvbmZpZyB3aWxsIGJlIHVzZWQgaWYgdGhlcmUgaXMgbm8gaW5pdHJkIG9yIG5vIG90aGVyXG4gXHQgIGJvb3Rjb25maWcgaW4gdGhlIGluaXRyZC5cbiBcbitjb25maWcgQVJDSF9TVVBQT1JUU19DTURMSU5FX0ZST01fQk9PVENPTkZJR1xuK1x0Ym9vbFxuK1x0aGVscFxuK1x0ICBTaWxlbnQgc3ltYm9sOyBubyBDIGNvZGUgcmVhZHMgaXQgZGlyZWN0bHkuIEFyY2hpdGVjdHVyZXNcbitcdCAgc2VsZWN0IGl0IG9uY2UgdGhlaXIgc2V0dXBfYXJjaCgpIGNhbGxzXG4rXHQgIHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoKSBiZWZvcmUgcGFyc2VfZWFybHlfcGFyYW0oKS5cbitcdCAgSXRzIG9ubHkgcm9sZSBpcyB0byBnYXRlIHRoZSB1c2VyLXZpc2libGVcbitcdCAgQ01ETElORV9GUk9NX0JPT1RDT05GSUcgb3B0aW9uIHBlci1hcmNoLCB0aGUgc2FtZVxuK1x0ICBBUkNIX1NVUFBPUlRTXyogaWRpb20gdXNlZCBieSBBUkNIX1NVUFBPUlRTX0NGSSwgZXRjLlxuK1xuK2NvbmZpZyBDTURMSU5FX0ZST01fQk9PVENPTkZJR1xuK1x0Ym9vbCBcIlJlbmRlciBlbWJlZGRlZCBib290Y29uZmlnIGFzIGtlcm5lbCBjbWRsaW5lIGF0IGJ1aWxkIHRpbWVcIlxuK1x0ZGVwZW5kcyBvbiBCT09UX0NPTkZJR19FTUJFRF9GSUxFICE9IFwiXCJcbitcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19DTURMSU5FX0ZST01fQk9PVENPTkZJR1xuK1x0ZGVwZW5kcyBvbiBDTURMSU5FID0gXCJcIlxuK1x0ZGVmYXVsdCBuXG4rXHRoZWxwXG4rXHQgIFJlbmRlciB0aGUgXCJrZXJuZWxcIiBzdWJ0cmVlIG9mIHRoZSBlbWJlZGRlZCBib290Y29uZmlnIGZpbGUgaW50byBhXG4rXHQgIGZsYXQgY21kbGluZSBzdHJpbmcgYXQga2VybmVsIGJ1aWxkIHRpbWUgYW5kIHByZXBlbmQgaXQgdG9cbitcdCAgYm9vdF9jb21tYW5kX2xpbmUgZHVyaW5nIGVhcmx5IGFyY2hpdGVjdHVyZSBzZXR1cC4gVGhpcyBtYWtlc1xuK1x0ICBlYXJseV9wYXJhbSgpIGhhbmRsZXJzIChlLmcuIG1lbT0sIGVhcmx5Y29uPSwgbG9nbGV2ZWw9KSBzZWUgdGhlXG4rXHQgIHZhbHVlcyBzdXBwbGllZCB2aWEgdGhlIGVtYmVkZGVkIGJvb3Rjb25maWcuXG4rXG4rXHQgIFRoZSBydW50aW1lIGJvb3Rjb25maWcgcGFyc2VyIGlzIHVuYWZmZWN0ZWQsIHNvIHRyZWUtc3RydWN0dXJlZFxuK1x0ICBjb25zdW1lcnMgc3VjaCBhcyBmdHJhY2UgYm9vdC10aW1lIHRyYWNpbmcga2VlcCB3b3JraW5nLlxuK1xuK1x0ICBOb3RlOiB3aGVuIGFuIGluaXRyZCBhbHNvIGNhcnJpZXMgYSBib290Y29uZmlnLCBpdHMgXCJrZXJuZWxcIlxuK1x0ICBzdWJ0cmVlIGlzIHN0aWxsIHBhcnNlZCBhdCBydW50aW1lLCBidXQgdGhlIGVtYmVkZGVkIFwia2VybmVsXCJcbitcdCAga2V5cyByZW1haW4gaW4gYm9vdF9jb21tYW5kX2xpbmUgZm9yIHBhcnNlX2Vhcmx5X3BhcmFtKCkgYW5kXG4rXHQgIGVuZCB1cCBsYXRlciB0aGFuIHRoZSBpbml0cmQga2V5cyBpbiBzYXZlZF9jb21tYW5kX2xpbmUsIHNvXG4rXHQgIHBhcnNlX2FyZ3MoKSBsYXN0LXdpbnMgZmF2b3JzIHRoZSBlbWJlZGRlZCB2YWx1ZXMuIElmIHlvdSBuZWVkXG4rXHQgIGluaXRyZCB0byBvdmVycmlkZSBlbWJlZGRlZCBrZXJuZWwuKiBrZXlzLCBsZWF2ZSB0aGlzIG9wdGlvblxuK1x0ICBvZmYuXG4rXG4rXHQgIElmIHVuc3VyZSwgc2F5IE4uXG4rXG4gY29uZmlnIENNRExJTkVfTE9HX1dSQVBfSURFQUxfTEVOXG4gXHRpbnQgXCJMZW5ndGggdG8gdHJ5IHRvIHdyYXAgdGhlIGNtZGxpbmUgd2hlbiBsb2dnZWQgYXQgYm9vdFwiXG4gXHRkZWZhdWx0IDEwMjFcbmRpZmYgLS1naXQgYS9pbml0L21haW4uYyBiL2luaXQvbWFpbi5jXG5pbmRleCBlMzYzMjMyYjQyOGI0Ny4uMjYwYmQ1MjQyZjk0ZTggMTAwNjQ0XG4tLS0gYS9pbml0L21haW4uY1xuKysrIGIvaW5pdC9tYWluLmNcbkBAIC0zNzgsMTIgKzM3OCwxNSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfYm9vdF9jb25maWcodm9pZClcbiBcdGludCBwb3MsIHJldDtcbiBcdHNpemVfdCBzaXplO1xuIFx0Y2hhciAqZXJyO1xuK1x0Ym9vbCBmcm9tX2VtYmVkZGVkID0gZmFsc2U7XG4gXG4gXHQvKiBDdXQgb3V0IHRoZSBib290Y29uZmlnIGRhdGEgZXZlbiBpZiB3ZSBoYXZlIG5vIGJvb3Rjb25maWcgb3B0aW9uICovXG4gXHRkYXRhID0gZ2V0X2Jvb3RfY29uZmlnX2Zyb21faW5pdHJkKFx1MDAyNnNpemUpO1xuIFx0LyogSWYgdGhlcmUgaXMgbm8gYm9vdGNvbmZpZyBpbiBpbml0cmQsIHRyeSBlbWJlZGRlZCBvbmUuICovXG4tXHRpZiAoIWRhdGEpXG4rXHRpZiAoIWRhdGEpIHtcbiBcdFx0ZGF0YSA9IHhiY19nZXRfZW1iZWRkZWRfYm9vdGNvbmZpZyhcdTAwMjZzaXplKTtcbitcdFx0ZnJvbV9lbWJlZGRlZCA9IHRydWU7XG4rXHR9XG4gXG4gXHRzdHJzY3B5KHRtcF9jbWRsaW5lLCBib290X2NvbW1hbmRfbGluZSwgQ09NTUFORF9MSU5FX1NJWkUpO1xuIFx0ZXJyID0gcGFyc2VfYXJncyhcImJvb3Rjb25maWdcIiwgdG1wX2NtZGxpbmUsIE5VTEwsIDAsIDAsIDAsIE5VTEwsXG5AQCAtNDIxLDggKzQyNCwyNCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfYm9vdF9jb25maWcodm9pZClcbiBcdH0gZWxzZSB7XG4gXHRcdHhiY19nZXRfaW5mbyhcdTAwMjZyZXQsIE5VTEwpO1xuIFx0XHRwcl9pbmZvKFwiTG9hZCBib290Y29uZmlnOiAlbGQgYnl0ZXMgJWQgbm9kZXNcXG5cIiwgKGxvbmcpc2l6ZSwgcmV0KTtcbi1cdFx0Lyoga2V5cyBzdGFydGluZyB3aXRoIFwia2VybmVsLlwiIGFyZSBwYXNzZWQgdmlhIGNtZGxpbmUgKi9cbi1cdFx0ZXh0cmFfY29tbWFuZF9saW5lID0geGJjX21ha2VfY21kbGluZShcImtlcm5lbFwiKTtcbitcdFx0LypcbitcdFx0ICoga2V5cyBzdGFydGluZyB3aXRoIFwia2VybmVsLlwiIGFyZSBwYXNzZWQgdmlhIGNtZGxpbmUuIFdoZW5cbitcdFx0ICogdGhpcyBib290Y29uZmlnIGNhbWUgZnJvbSB0aGUgZW1iZWRkZWQgc291cmNlIGFuZFxuK1x0XHQgKiBzZXR1cF9hcmNoKCkgYWxyZWFkeSBwcmVwZW5kZWQgdGhlIHJlbmRlcmVkIFwia2VybmVsXCIgc3VidHJlZVxuK1x0XHQgKiB0byBib290X2NvbW1hbmRfbGluZSwgcmVuZGVyaW5nIGFnYWluIGhlcmUgd291bGQgZHVwbGljYXRlXG4rXHRcdCAqIHRoZSBrZXlzIGluIHNhdmVkX2NvbW1hbmRfbGluZSBhbmQgbWFrZSBhY2N1bXVsYXRpbmcgaGFuZGxlcnNcbitcdFx0ICogKGNvbnNvbGU9LCBlYXJseWNvbj0sIC4uLikgcmUtcmVnaXN0ZXIgdGhlIHNhbWUgdmFsdWUuIFNraXBcbitcdFx0ICogb25seSB3aGVuIHRoZSBwcmVwZW5kIHJlYWxseSBoYXBwZW5lZC5cbitcdFx0ICpcbitcdFx0ICogT24gYXJjaGVzIHRoYXQgZG8gbm90IHNlbGVjdCBBUkNIX1NVUFBPUlRTX0NNRExJTkVfRlJPTV9CT09UQ09ORklHLFxuK1x0XHQgKiBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUcgaXMgdW5zZWxlY3RhYmxlIGFuZFxuK1x0XHQgKiB4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkKCkgY29sbGFwc2VzIHRvIGEgc3R1YiByZXR1cm5pbmdcbitcdFx0ICogZmFsc2UsIHNvIHRoaXMgcGF0aCBzdGlsbCBydW5zIGFuZCB0aGUgZW1iZWRkZWQgXCJrZXJuZWxcIlxuK1x0XHQgKiBrZXlzIHJlYWNoIHRoZSBjbWRsaW5lIHZpYSB0aGUgcnVudGltZSBwYXJzZXIgZXhhY3RseSBhc1xuK1x0XHQgKiBiZWZvcmUgdGhpcyBzZXJpZXMuXG4rXHRcdCAqL1xuK1x0XHRpZiAoIWZyb21fZW1iZWRkZWQgfHwgIXhiY19lbWJlZGRlZF9jbWRsaW5lX2FwcGxpZWQoKSlcbitcdFx0XHRleHRyYV9jb21tYW5kX2xpbmUgPSB4YmNfbWFrZV9jbWRsaW5lKFwia2VybmVsXCIpO1xuIFx0XHQvKiBBbHNvLCBcImluaXQuXCIga2V5cyBhcmUgaW5pdCBhcmd1bWVudHMgKi9cbiBcdFx0ZXh0cmFfaW5pdF9hcmdzID0geGJjX21ha2VfY21kbGluZShcImluaXRcIik7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlIGIvbGliL01ha2VmaWxlXG5pbmRleCAyM2UwN2QxOWQwMWM5MC4uNGY5N2E1NGQxZTNkOWEgMTAwNjQ0XG4tLS0gYS9saWIvTWFrZWZpbGVcbisrKyBiL2xpYi9NYWtlZmlsZVxuQEAgLTI3NCw2ICsyNzQsMjIgQEAgZmlsZWNoa19kZWZiY29uZiA9IGNhdCAkKG9yICQocmVhbC1wcmVyZXFzKSwgL2Rldi9udWxsKVxuICQob2JqKS9kZWZhdWx0LmJjb25mOiAkKENPTkZJR19CT09UX0NPTkZJR19FTUJFRF9GSUxFKSBGT1JDRVxuIFx0JChjYWxsIGZpbGVjaGssZGVmYmNvbmYpXG4gXG4rb2JqLSQoQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHKSArPSBlbWJlZGRlZC1jbWRsaW5lLm9cbiskKG9iaikvZW1iZWRkZWQtY21kbGluZS5vOiAkKG9iaikvZW1iZWRkZWRfY21kbGluZS5iaW5cbitcbisjIFJlbmRlciB0aGUgYm9vdGNvbmZpZyBcImtlcm5lbFwiIHN1YnRyZWUgdG8gYSBmbGF0IGNtZGxpbmUgc3RyaW5nIHVzaW5nXG4rIyB0aGUgdXNlcnNwYWNlIHRvb2xzL2Jvb3Rjb25maWcgcGFyc2VyICgtQyBtb2RlKS4gVGhlIHJ1bnRpbWUgcHJlcGVuZFxuKyMgaGVscGVyIGVuZm9yY2VzIENPTU1BTkRfTElORV9TSVpFIGF0IGJvb3QsIHNvIG5vIGJ1aWxkLXRpbWUgc2l6ZVxuKyMgY2hlY2sgaXMgcGVyZm9ybWVkIGhlcmUgKENPTU1BTkRfTElORV9TSVpFIGlzIGFuIGFyY2ggaGVhZGVyXG4rIyBjb25zdGFudCwgbm90IGEgS2NvbmZpZyB2YWx1ZSkuXG4rcXVpZXRfY21kX3JlbmRlcl9jbWRsaW5lID0gQkNPTkYyQyAkQFxuKyAgICAgIGNtZF9yZW5kZXJfY21kbGluZSA9IFxcXG4rXHQkKG9ianRyZWUpL3Rvb2xzL2Jvb3Rjb25maWcvYm9vdGNvbmZpZyAtQyAkXHUwMDNjIFx1MDAzZSAkQFxuK1xuK3RhcmdldHMgKz0gZW1iZWRkZWRfY21kbGluZS5iaW5cbiskKG9iaikvZW1iZWRkZWRfY21kbGluZS5iaW46ICQob2JqKS9kZWZhdWx0LmJjb25mICQob2JqdHJlZSkvdG9vbHMvYm9vdGNvbmZpZy9ib290Y29uZmlnIEZPUkNFXG4rXHQkKGNhbGwgaWZfY2hhbmdlZCxyZW5kZXJfY21kbGluZSlcbitcbiBvYmotJChDT05GSUdfUkJUUkVFX1RFU1QpICs9IHJidHJlZV90ZXN0Lm9cbiBvYmotJChDT05GSUdfSU5URVJWQUxfVFJFRV9URVNUKSArPSBpbnRlcnZhbF90cmVlX3Rlc3Qub1xuIFxuZGlmZiAtLWdpdCBhL2xpYi9ib290Y29uZmlnLmMgYi9saWIvYm9vdGNvbmZpZy5jXG5pbmRleCBmNDQ1Yjc3MDNmZGQ5Ni4uMDVjYjFlYTlhZmRhZTMgMTAwNjQ0XG4tLS0gYS9saWIvYm9vdGNvbmZpZy5jXG4rKysgYi9saWIvYm9vdGNvbmZpZy5jXG5AQCAtMTksNiArMTksNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vycm5vLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jYWNoZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGlsZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3ByaW50ay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3ByaW50Zi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtYmxvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZy5oXHUwMDNlXG5AQCAtMzQsNiArMzUsODMgQEAgY29uc3QgY2hhciAqIF9faW5pdCB4YmNfZ2V0X2VtYmVkZGVkX2Jvb3Rjb25maWcoc2l6ZV90ICpzaXplKVxuIFx0cmV0dXJuICgqc2l6ZSkgPyBlbWJlZGRlZF9ib290Y29uZmlnX2RhdGEgOiBOVUxMO1xuIH1cbiAjZW5kaWZcbitcbisjaWZkZWYgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXG4rLyogZW1iZWRkZWRfa2VybmVsX2NtZGxpbmUgaXMgZGVmaW5lZCBpbiBlbWJlZGRlZC1jbWRsaW5lLlMgKi9cbitleHRlcm4gX192aXNpYmxlIGNvbnN0IGNoYXIgZW1iZWRkZWRfa2VybmVsX2NtZGxpbmVbXTtcbitleHRlcm4gX192aXNpYmxlIGNvbnN0IGNoYXIgZW1iZWRkZWRfa2VybmVsX2NtZGxpbmVfZW5kW107XG4rXG4rLyogU2V0IG9uY2UgdGhlIGVtYmVkZGVkIGNtZGxpbmUgaGFzIGFjdHVhbGx5IGJlZW4gcHJlcGVuZGVkLiAqL1xuK3N0YXRpYyBib29sIHhiY19jbWRsaW5lX2FwcGxpZWQgX19pbml0ZGF0YTtcbitcbisvKlxuKyAqIHN0cl9wcmVwZW5kKCkgLSBQcmVwZW5kIEBzcmMgaW4gZnJvbnQgb2YgdGhlIHN0cmluZyBpbiBAZHN0LCBpbiBwbGFjZVxuKyAqIEBkc3Q6IE5VTC10ZXJtaW5hdGVkIGRlc3RpbmF0aW9uIGJ1ZmZlciwgY3VycmVudGx5IEBkc3RfbGVuIGJ5dGVzIGxvbmdcbisgKiBAZHN0X2xlbjogbGVuZ3RoIG9mIHRoZSBjdXJyZW50IEBkc3Qgc3RyaW5nIChleGNsdWRpbmcgaXRzIE5VTClcbisgKiBAc3JjOiBieXRlcyB0byBwcmVwZW5kIChub3QgTlVMLXRlcm1pbmF0ZWQpXG4rICogQHNyY19sZW46IG51bWJlciBvZiBieXRlcyBmcm9tIEBzcmMgdG8gcHJlcGVuZFxuKyAqXG4rICogVGhlIGNhbGxlciBtdXN0IGd1YXJhbnRlZSBAZHN0IGhhcyByb29tIGZvciBzcmNfbGVuICsgZHN0X2xlbiArIDEgYnl0ZXMuXG4rICogTW92aW5nIGRzdF9sZW4gKyAxIGJ5dGVzIGNhcnJpZXMgQGRzdCdzIE5VTCB0ZXJtaW5hdG9yIHRvbywgc28gYW4gZW1wdHlcbisgKiBAZHN0IG5lZWRzIG5vIHNwZWNpYWwgY2FzZS5cbisgKi9cbitzdGF0aWMgdm9pZCBfX2luaXQgc3RyX3ByZXBlbmQoY2hhciAqZHN0LCBzaXplX3QgZHN0X2xlbixcbitcdFx0XHQgICAgICAgY29uc3QgY2hhciAqc3JjLCBzaXplX3Qgc3JjX2xlbilcbit7XG4rXHRtZW1tb3ZlKGRzdCArIHNyY19sZW4sIGRzdCwgZHN0X2xlbiArIDEpO1xuK1x0bWVtY3B5KGRzdCwgc3JjLCBzcmNfbGVuKTtcbit9XG4rXG4rLyoqXG4rICogeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZSgpIC0gUHJlcGVuZCBlbWJlZGRlZCBib290Y29uZmlnIGNtZGxpbmVcbisgKiBAZHN0OiBjbWRsaW5lIGJ1ZmZlciB0byBwcmVwZW5kIGludG8gKG11c3QgYWxyZWFkeSBjb250YWluIGEgTlVMIGJ5dGUpXG4rICogQHNpemU6IHRvdGFsIGNhcGFjaXR5IG9mIEBkc3QgaW4gYnl0ZXNcbisgKlxuKyAqIFByZXBlbmQgdGhlIGJ1aWxkLXRpbWUtcmVuZGVyZWQgXCJrZXJuZWxcIiBzdWJ0cmVlIG9mIHRoZSBlbWJlZGRlZFxuKyAqIGJvb3Rjb25maWcgdG8gQGRzdC4gVGhlIHJlbmRlcmVkIHN0cmluZyBhbHJlYWR5IGVuZHMgd2l0aCBhIHNpbmdsZVxuKyAqIHNwYWNlICh0aGUgeGJjX3NucHJpbnRfY21kbGluZSgpIGludmFyaWFudCksIHdoaWNoIHNlcnZlcyBhcyB0aGVcbisgKiBzZXBhcmF0b3IgYmV0d2VlbiB0aGUgZW1iZWRkZWQga2V5cyBhbmQgYW55IGV4aXN0aW5nIGNvbnRlbnQgb2YgQGRzdC5cbisgKiBPbiBvdmVyZmxvdywgbG9nIGFuIGVycm9yIGFuZCBsZWF2ZSBAZHN0IHVudG91Y2hlZCByYXRoZXIgdGhhblxuKyAqIHNpbGVudGx5IHRydW5jYXRpbmc6IGJvb3Rpbmcgd2l0aG91dCB0aGUgZW1iZWRkZWQgdmFsdWVzIGlzIGJldHRlclxuKyAqIHRoYW4gcmVmdXNpbmcgdG8gYm9vdCwgYW5kIHRoZSBlcnJvciBtZXNzYWdlIHRlbGxzIHRoZSB1c2VyIHdoeVxuKyAqIHRoZWlyIGVtYmVkZGVkIGtleXMgYXJlIG1pc3NpbmcuXG4rICpcbisgKiBJbnRlbmRlZCB0byBiZSBjYWxsZWQgZnJvbSBzZXR1cF9hcmNoKCkgYmVmb3JlIHBhcnNlX2Vhcmx5X3BhcmFtKCkgc29cbisgKiB0aGF0IGVhcmx5X3BhcmFtKCkgaGFuZGxlcnMgc2VlIHRoZSBlbWJlZGRlZCB2YWx1ZXMuXG4rICovXG4rdm9pZCBfX2luaXQgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZShjaGFyICpkc3QsIHNpemVfdCBzaXplKVxuK3tcbitcdHNpemVfdCBlbWJlZF9sZW4gPSBlbWJlZGRlZF9rZXJuZWxfY21kbGluZV9lbmQgLSBlbWJlZGRlZF9rZXJuZWxfY21kbGluZTtcbitcdHNpemVfdCBkc3RfbGVuO1xuK1xuK1x0aWYgKCFzaXplIHx8IGVtYmVkX2xlbiBcdTAwM2M9IDEpXHQvKiB0cmFpbGluZyBOVUwgb25seSAqL1xuK1x0XHRyZXR1cm47XG4rXHRlbWJlZF9sZW4tLTtcdFx0XHQvKiBleGNsdWRlIHRyYWlsaW5nIE5VTCBieXRlICovXG4rXG4rXHRkc3RfbGVuID0gc3Rybmxlbihkc3QsIHNpemUpO1xuK1x0aWYgKGVtYmVkX2xlbiArIGRzdF9sZW4gKyAxIFx1MDAzZSBzaXplKSB7XG4rXHRcdHByX2VycihcImVtYmVkZGVkIGJvb3Rjb25maWcgY21kbGluZSAoJXp1IGJ5dGVzKSBkb2VzIG5vdCBmaXQgaW4gQ09NTUFORF9MSU5FX1NJWkUgd2l0aCAlenUgYnl0ZXMgYWxyZWFkeSB1c2VkOyBpZ25vcmluZyBlbWJlZGRlZCB2YWx1ZXNcXG5cIixcbitcdFx0ICAgICAgIGVtYmVkX2xlbiwgZHN0X2xlbik7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHN0cl9wcmVwZW5kKGRzdCwgZHN0X2xlbiwgZW1iZWRkZWRfa2VybmVsX2NtZGxpbmUsIGVtYmVkX2xlbik7XG4rXHR4YmNfY21kbGluZV9hcHBsaWVkID0gdHJ1ZTtcbit9XG4rXG4rLyoqXG4rICogeGJjX2VtYmVkZGVkX2NtZGxpbmVfYXBwbGllZCgpIC0gRGlkIHRoZSBlbWJlZGRlZCBjbWRsaW5lIGdldCBwcmVwZW5kZWQ/XG4rICpcbisgKiBSZXR1cm4gdHJ1ZSBpZiB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lKCkgYWN0dWFsbHkgcHJlcGVuZGVkIHRoZVxuKyAqIGVtYmVkZGVkIFwia2VybmVsXCIgc3VidHJlZS4gc2V0dXBfYm9vdF9jb25maWcoKSB1c2VzIHRoaXMgdG8gYXZvaWRcbisgKiByZW5kZXJpbmcgdGhlIHNhbWUga2V5cyBhIHNlY29uZCB0aW1lLlxuKyAqL1xuK2Jvb2wgX19pbml0IHhiY19lbWJlZGRlZF9jbWRsaW5lX2FwcGxpZWQodm9pZClcbit7XG4rXHRyZXR1cm4geGJjX2NtZGxpbmVfYXBwbGllZDtcbit9XG4rI2VuZGlmXG4rXG4gI2VuZGlmXG4gXG4gLypcbkBAIC00MjcsMTEgKzUwNSwzMCBAQCBzdGF0aWMgY2hhciB4YmNfbmFtZWJ1ZltYQkNfS0VZTEVOX01BWF0gX19pbml0ZGF0YTtcbiBpbnQgX19pbml0IHhiY19zbnByaW50X2NtZGxpbmUoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgc3RydWN0IHhiY19ub2RlICpyb290KVxuIHtcbiBcdHN0cnVjdCB4YmNfbm9kZSAqa25vZGUsICp2bm9kZTtcbi1cdGNoYXIgKmVuZCA9IGJ1ZiArIHNpemU7XG4gXHRjb25zdCBjaGFyICp2YWwsICpxO1xuK1x0c2l6ZV90IGxlbiA9IDA7XG4gXHRpbnQgcmV0O1xuIFxuK1x0LypcbitcdCAqIFRyYWNrIHRoZSBydW5uaW5nIHdyaXR0ZW4gbGVuZ3RoIHJhdGhlciB0aGFuIGFkdmFuY2luZyBAYnVmLCBzbyB3ZVxuK1x0ICogbmV2ZXIgZm9ybSBcImJ1ZiArIHNpemVcIiBvciBcImJ1ZiArPSByZXRcIiB3aGlsZSBAYnVmIGlzIE5VTEwgKHRoZVxuK1x0ICogc2l6ZS1wcm9iZSBjYWxsIHBhc3NlcyBidWY9TlVMTCwgc2l6ZT0wKS4gTlVMTCBwb2ludGVyIGFyaXRobWV0aWNcbitcdCAqIGlzIHVuZGVmaW5lZCBiZWhhdmlvciBhbmQgdHJpcHMgaG9zdCBVQlNhbiAvIEZPUlRJRllfU09VUkNFIHdoZW5cbitcdCAqIHRoaXMgcmVuZGVyZXIgcnVucyBhdCBrZXJuZWwgYnVpbGQgdGltZS4gc25wcmludGYoTlVMTCwgMCwgLi4uKVxuK1x0ICogaXRzZWxmIGlzIHdlbGwgZGVmaW5lZCBhbmQgcmV0dXJucyB0aGUgd291bGQtYmUgbGVuZ3RoLlxuK1x0ICovXG4gXHR4YmNfbm9kZV9mb3JfZWFjaF9rZXlfdmFsdWUocm9vdCwga25vZGUsIHZhbCkge1xuK1x0XHQvKlxuK1x0XHQgKiBBbiBlbXB0eSBvciB2YWx1ZS1vbmx5IEByb290IChlLmcuIFwia2VybmVsIHt9XCIgb3JcbitcdFx0ICogXCJrZXJuZWwgPSB4XCIsIHBvc3NpYmx5IGFsb25nc2lkZSBcImtlcm5lbC5mb28gPSBiYXJcIilcbitcdFx0ICogeWllbGRzIEByb290IGl0c2VsZiBoZXJlLiBTa2lwIGl0OiBjb21wb3NpbmcgYSBrZXkgZm9yIGl0XG4rXHRcdCAqIHdvdWxkIGZhaWwgd2l0aCAtRUlOVkFMLCB5ZXQgYW55IHJlYWwgZGVzY2VuZGFudCBrZXlzIG11c3RcbitcdFx0ICogc3RpbGwgYmUgcmVuZGVyZWQuIEFuIGVudGlyZWx5IGVtcHR5IHN1YnRyZWUgdGhlbiByZW5kZXJzXG4rXHRcdCAqIG5vdGhpbmcgYW5kIHJldHVybnMgMCByYXRoZXIgdGhhbiBhbiBlcnJvci5cbitcdFx0ICovXG4rXHRcdGlmIChrbm9kZSA9PSByb290KVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuIFx0XHRyZXQgPSB4YmNfbm9kZV9jb21wb3NlX2tleV9hZnRlcihyb290LCBrbm9kZSxcbiBcdFx0XHRcdFx0eGJjX25hbWVidWYsIFhCQ19LRVlMRU5fTUFYKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbkBAIC00MzksMTAgKzUzNiwxMSBAQCBpbnQgX19pbml0IHhiY19zbnByaW50X2NtZGxpbmUoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgc3RydWN0IHhiY19ub2RlICpyb290KVxuIFxuIFx0XHR2bm9kZSA9IHhiY19ub2RlX2dldF9jaGlsZChrbm9kZSk7XG4gXHRcdGlmICghdm5vZGUpIHtcbi1cdFx0XHRyZXQgPSBzbnByaW50ZihidWYsIHJlc3QoYnVmLCBlbmQpLCBcIiVzIFwiLCB4YmNfbmFtZWJ1Zik7XG4rXHRcdFx0cmV0ID0gc25wcmludGYoYnVmID8gYnVmICsgbGVuIDogTlVMTCwgcmVzdChsZW4sIHNpemUpLFxuK1x0XHRcdFx0ICAgICAgIFwiJXMgXCIsIHhiY19uYW1lYnVmKTtcbiBcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdFx0cmV0dXJuIHJldDtcbi1cdFx0XHRidWYgKz0gcmV0O1xuK1x0XHRcdGxlbiArPSByZXQ7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcdFx0eGJjX2FycmF5X2Zvcl9lYWNoX3ZhbHVlKHZub2RlLCB2YWwpIHtcbkBAIC00NTIsMTUgKzU1MCwxNSBAQCBpbnQgX19pbml0IHhiY19zbnByaW50X2NtZGxpbmUoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgc3RydWN0IHhiY19ub2RlICpyb290KVxuIFx0XHRcdCAqIHdoaXRlc3BhY2UuXG4gXHRcdFx0ICovXG4gXHRcdFx0cSA9IHN0cnBicmsodmFsLCBcIiBcXHRcXHJcXG5cIikgPyBcIlxcXCJcIiA6IFwiXCI7XG4tXHRcdFx0cmV0ID0gc25wcmludGYoYnVmLCByZXN0KGJ1ZiwgZW5kKSwgXCIlcz0lcyVzJXMgXCIsXG4tXHRcdFx0XHQgICAgICAgeGJjX25hbWVidWYsIHEsIHZhbCwgcSk7XG4rXHRcdFx0cmV0ID0gc25wcmludGYoYnVmID8gYnVmICsgbGVuIDogTlVMTCwgcmVzdChsZW4sIHNpemUpLFxuK1x0XHRcdFx0ICAgICAgIFwiJXM9JXMlcyVzIFwiLCB4YmNfbmFtZWJ1ZiwgcSwgdmFsLCBxKTtcbiBcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRcdFx0cmV0dXJuIHJldDtcbi1cdFx0XHRidWYgKz0gcmV0O1xuK1x0XHRcdGxlbiArPSByZXQ7XG4gXHRcdH1cbiBcdH1cbiBcbi1cdHJldHVybiBidWYgLSAoZW5kIC0gc2l6ZSk7XG4rXHRyZXR1cm4gbGVuO1xuIH1cbiAjdW5kZWYgcmVzdFxuIFxuZGlmZiAtLWdpdCBhL2xpYi9lbWJlZGRlZC1jbWRsaW5lLlMgYi9saWIvZW1iZWRkZWQtY21kbGluZS5TXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmJkYTgxYjRhNDJiZWFmXG4tLS0gL2Rldi9udWxsXG4rKysgYi9saWIvZW1iZWRkZWQtY21kbGluZS5TXG5AQCAtMCwwICsxLDE2IEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbisvKlxuKyAqIEVtYmVkIHRoZSBidWlsZC10aW1lLXJlbmRlcmVkIGJvb3Rjb25maWcgXCJrZXJuZWxcIiBzdWJ0cmVlIGFzIGEgZmxhdFxuKyAqIGNtZGxpbmUgc3RyaW5nLiBzZXR1cF9hcmNoKCkgcHJlcGVuZHMgdGhpcyB0byBib290X2NvbW1hbmRfbGluZSBvblxuKyAqIGFyY2hpdGVjdHVyZXMgdGhhdCBzZWxlY3QgQVJDSF9TVVBQT1JUU19DTURMSU5FX0ZST01fQk9PVENPTkZJRy5cbisgKlxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlc1xuKyAqIENvcHlyaWdodCAoYykgMjAyNiBCcmVubyBMZWl0YW8gXHUwMDNjbGVpdGFvQGRlYmlhbi5vcmdcdTAwM2VcbisgKi9cbitcdC5zZWN0aW9uIC5pbml0LnJvZGF0YS5lbWJlZF9jbWRsaW5lLCBcImFcIiwgJXByb2diaXRzXG4rXHQuZ2xvYmFsIGVtYmVkZGVkX2tlcm5lbF9jbWRsaW5lXG4rZW1iZWRkZWRfa2VybmVsX2NtZGxpbmU6XG4rXHQuaW5jYmluIFwibGliL2VtYmVkZGVkX2NtZGxpbmUuYmluXCJcbitcdC5ieXRlIDBcbitcdC5nbG9iYWwgZW1iZWRkZWRfa2VybmVsX2NtZGxpbmVfZW5kXG4rZW1iZWRkZWRfa2VybmVsX2NtZGxpbmVfZW5kOlxuZGlmZiAtLWdpdCBhL3Rvb2xzL2Jvb3Rjb25maWcvTWFrZWZpbGUgYi90b29scy9ib290Y29uZmlnL01ha2VmaWxlXG5pbmRleCA5MGViNDdjOWQ4ZGU2Ny4uM2NiODA2NmQ1MTQxYmIgMTAwNjQ0XG4tLS0gYS90b29scy9ib290Y29uZmlnL01ha2VmaWxlXG4rKysgYi90b29scy9ib290Y29uZmlnL01ha2VmaWxlXG5AQCAtMTUsNyArMTUsNyBAQCBvdmVycmlkZSBDRkxBR1MgKz0gLVdhbGwgLWcgLUkkKENVUkRJUikvaW5jbHVkZVxuIEFMTF9UQVJHRVRTIDo9IGJvb3Rjb25maWdcbiBBTExfUFJPR1JBTVMgOj0gJChwYXRzdWJzdCAlLCQoT1VUUFVUKSUsJChBTExfVEFSR0VUUykpXG4gXG4tYWxsOiAkKEFMTF9QUk9HUkFNUykgdGVzdFxuK2FsbDogJChBTExfUFJPR1JBTVMpXG4gXG4gJChPVVRQVVQpYm9vdGNvbmZpZzogbWFpbi5jIGluY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oICQoTElCU1JDKVxuIFx0JChDQykgJChmaWx0ZXIgJS5jLCReKSAkKENGTEFHUykgJChMREZMQUdTKSAtbyAkQFxuQEAgLTI3LDQgKzI3LDQgQEAgaW5zdGFsbDogJChBTExfUFJPR1JBTVMpXG4gXHRpbnN0YWxsICQoT1VUUFVUKWJvb3Rjb25maWcgJChERVNURElSKSQoYmluZGlyKVxuIFxuIGNsZWFuOlxuLVx0JChSTSkgLWYgJChPVVRQVVQpKi5vICQoQUxMX1BST0dSQU1TKVxuK1x0cm0gLWYgJChPVVRQVVQpKi5vICQoQUxMX1BST0dSQU1TKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTY6NDM6MTYuNTY5MzAzOTM2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTg0NTUwNTcwODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIEJvb3QgQ29uZmlndXJhdGlvbiBFbmhhbmNlbWVudDogRW1iZWRkaW5nIEJvb3Rjb25maWcgaW50byB0aGUgQ29tbWFuZCBMaW5lKipcblxuT2theSwgc28gSSd2ZSBiZWVuIHdvcmtpbmcgb24gdGhpcyBwYXRjaCBzZXJpZXMuIFRoZSBnb2FsIGlzIHRvIGltcHJvdmUgaG93IHdlIGhhbmRsZSBib290IGNvbmZpZ3VyYXRpb25zLCBzcGVjaWZpY2FsbHkgYnkgaW50ZWdyYXRpbmcgdGhlIGVtYmVkZGVkIFwia2VybmVsXCIgc3VidHJlZSBmcm9tIHRoZSBib290Y29uZmlnIGludG8gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgKmF0IGJ1aWxkIHRpbWUqLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGltcHJvdmVtZW50IGJlY2F1c2UgaXQgbGV0cyBlYXJseSBhcmNoaXRlY3R1cmUgc2V0dXAgcm91dGluZXMsIGxpa2UgYHNldHVwX2FyY2goKWAsIGFjY2VzcyB2YWx1ZXMgZGVmaW5lZCBpbiB0aGF0IGVtYmVkZGVkIHN1YnRyZWUuIFRoYXQncyBhIGdvb2QgbW92ZSwgZ2l2aW5nIHVzIGFjY2VzcyB0byBwYXJhbWV0ZXJzIHJpZ2h0IGZyb20gdGhlIHN0YXJ0LlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBzZXQgYWx0ZXJzIGhvdyB3ZSBoYW5kbGUgZWFybHkgcGFyYW1ldGVyIGludGVycHJldGF0aW9uLiBXZSdyZSBlZmZlY3RpdmVseSBmbGF0dGVuaW5nIHRoZSBib290Y29uZmlnIFwia2VybmVsXCIgc3VidHJlZSBpbnRvIGEgY29tbWFuZC1saW5lIHN0cmluZyBhbmQgdGhlbiBwcmVwZW5kaW5nIGl0IHRvIHRoZSBleGlzdGluZyBgYm9vdF9jb21tYW5kX2xpbmVgIGR1cmluZyB0aGF0IGNyaXRpY2FsIGBzZXR1cF9hcmNoKClgIHBoYXNlLlxuXG5Mb29raW5nIGF0IHRoZSBjaGFuZ2VzLCBJJ20gbW9kaWZ5aW5nIHF1aXRlIGEgZmV3IGZpbGVzOiBgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdGAgZm9yIHRoZSB1c2VyIGRvY3MsIHRoZSBgTUFJTlRBSU5FUlNgIGZpbGUsIHNldmVyYWwgYE1ha2VmaWxlc2AsIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgYGFyY2gveDg2L0tjb25maWdgIGFuZCBgYXJjaC94ODYva2VybmVsL3NldHVwLmNgLCBjb3JlIGhlYWRlcnMgbGlrZSBgaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmhgLCBzb21lIGltcG9ydGFudCBgaW5pdC9LY29uZmlnYCBhbmQgYGluaXQvbWFpbi5jYCBmaWxlcywgdGhlIGBsaWJgIGRpcmVjdG9yeSAoaW5jbHVkaW5nIGBib290Y29uZmlnLmNgIGFuZCBgZW1iZWRkZWQtY21kbGluZS5TYCksIGFuZCBldmVuIHRoZSBgdG9vbHMvYm9vdGNvbmZpZy9NYWtlZmlsZWAuIFRoYXQncyBhIGJyb2FkIHRvdWNoLCBidXQgaXQgbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UuXG5cbkZ1bmN0aW9uYWxseSwgdGhpcyBpbXBhY3RzIHRoZSBrZXJuZWwncyBib290IHByb2Nlc3Mgc3BlY2lmaWNhbGx5IHdpdGhpbiBgc2V0dXBfYXJjaGAgYW5kIGBzZXR1cF9ib290X2NvbmZpZ2AuIFRoZSBuZXcgY29kZSBpbnRyb2R1Y2VzIGBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUdgLiBJIGFsc28gc2VlIGBDT05GSUdfQVJDSF9TVVBQT1JUU19DTURMSU5FX0ZST01fQk9PVENPTkZJR2AuIE9mIGNvdXJzZSwgZXZlcnl0aGluZyBpcyBnYXRlZCBieSBgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHYC4gU28sIGhvdyBkbyB3ZSB0ZXN0IHRoaXM/XG5cbk9rYXksIHNvIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYENPTkZJR19DTURMSU5FX0ZST01fQk9PVENPTkZJRz15YCwgb2J2aW91c2x5LiBCdXQsIHRoYXQgZGVwZW5kcyBvbiBgQk9PVF9DT05GSUdfRU1CRURfRklMRSAhPSBcIlwiYCBhbG9uZyB3aXRoIGBBUkNIX1NVUFBPUlRTX0NNRExJTkVfRlJPTV9CT09UQ09ORklHYCBhbmQgYENNRExJTkUgPSBcIlwiYC4gSG1tLCBzbyBJIG5lZWQgYEJPT1RfQ09ORklHX0VNQkVEX0ZJTEVgIHRvIGJlIHNldCB0byBhIG5vbi1lbXB0eSBzdHJpbmcuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhhdCBgQ09ORklHX0JPT1RfQ09ORklHX0VNQkVEPXlgIGlzIHNldCB0b28uIEl0J3MgcHJvYmFibHkgaW1wbGllZCB3aGVuIGBCT09UX0NPTkZJR19FTUJFRF9GSUxFYCBpcyBzZXQsIG9yIG1heWJlIGBCT09UX0NPTkZJR19FTUJFRF9GSUxFYCBkZXBlbmRzIG9uIGl0LiBJIHNob3VsZCBnbyBiYWNrIGFuZCBjaGVjayB0aGUgYGluaXQvS2NvbmZpZ2AgdG8gYmUgc3VyZSBhYm91dCBgQk9PVF9DT05GSUdfRU1CRURfRklMRWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzOTksIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxNjo0MzozNS4wMjQzNjQwMDVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI2OTEyNDk5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQk9PVF9DT05GSUdfRU1CRURfRklMRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTU1MD1jb25maWcgQk9PVF9DT05GSUdfRU1CRURcXG4tLVxcbmluaXQvS2NvbmZpZy0xNTYwLVxcbmluaXQvS2NvbmZpZzoxNTYxOmNvbmZpZyBCT09UX0NPTkZJR19FTUJFRF9GSUxFXFxuaW5pdC9LY29uZmlnLTE1NjItXFx0c3RyaW5nIFxcXCJFbWJlZGRlZCBib290Y29uZmlnIGZpbGUgcGF0aFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTY6NDM6MzguMjkzNDk1Nzc0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM1NTQ3NzA2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGFydCBvZiB0aGUgY29uZmlndXJhdGlvbiBzeXN0ZW0gYmV0dGVyLiBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLiBJJ2xsIG5lZWQgdG8gZm9jdXMgbXkgZWZmb3J0cyBhcm91bmQgbGluZSAxNTYxLiBIb3BlZnVsbHksIHRoaXMgc2VjdGlvbiBoYXMgd2hhdCBJIG5lZWQgdG8gdW5kZXJzdGFuZC4gTGV0J3Mgc2VlIHdoYXQncyBiZWluZyBkZWZpbmVkIHRoZXJlIGFuZCBob3cgaXQgcmVsYXRlcyB0byB0aGUgYmlnZ2VyIHBpY3R1cmUuIFRoaXMgZmVlbHMgbGlrZSBpdCBzaG91bGQgZ2l2ZSBtZSBzb21lIHNvbGlkIGNvbnRleHQgYW5kIGNsYXJpZnkgdGhhdCBzcGVjaWZpYyBhcmVhIG9mIHRoZSBzeXN0ZW0uIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1MjYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxNjo0Mzo0NS42NDg5NzYwMTRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTkzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1NTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE1NTA6XFx0Y29uZmlnIEJPT1RfQ09ORklHX0VNQkVEXFxuMTU1MTpcXHRcXHRib29sIFxcXCJFbWJlZCBib290Y29uZmlnIGZpbGUgaW4gdGhlIGtlcm5lbFxcXCJcXG4xNTUyOlxcdFxcdGRlcGVuZHMgb24gQk9PVF9DT05GSUdcXG4xNTUzOlxcdFxcdGhlbHBcXG4xNTU0OlxcdFxcdCAgRW1iZWQgYSBib290Y29uZmlnIGZpbGUgZ2l2ZW4gYnkgQk9PVF9DT05GSUdfRU1CRURfRklMRSBpbiB0aGVcXG4xNTU1OlxcdFxcdCAga2VybmVsLiBVc3VhbGx5LCB0aGUgYm9vdGNvbmZpZyBmaWxlIGlzIGxvYWRlZCB3aXRoIHRoZSBpbml0cmRcXG4xNTU2OlxcdFxcdCAgaW1hZ2UuIEJ1dCBpZiB0aGUgc3lzdGVtIGRvZXNuJ3Qgc3VwcG9ydCBpbml0cmQsIHRoaXMgb3B0aW9uIHdpbGxcXG4xNTU3OlxcdFxcdCAgaGVscCB5b3UgYnkgZW1iZWRkaW5nIGEgYm9vdGNvbmZpZyBmaWxlIHdoaWxlIGJ1aWxkaW5nIHRoZSBrZXJuZWwuXFxuMTU1ODpcXHRcXG4xNTU5OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4xNTYwOlxcdFxcbjE1NjE6XFx0Y29uZmlnIEJPT1RfQ09ORklHX0VNQkVEX0ZJTEVcXG4xNTYyOlxcdFxcdHN0cmluZyBcXFwiRW1iZWRkZWQgYm9vdGNvbmZpZyBmaWxlIHBhdGhcXFwiXFxuMTU2MzpcXHRcXHRkZXBlbmRzIG9uIEJPT1RfQ09ORklHX0VNQkVEXFxuMTU2NDpcXHRcXHRoZWxwXFxuMTU2NTpcXHRcXHQgIFNwZWNpZnkgYSBib290Y29uZmlnIGZpbGUgd2hpY2ggd2lsbCBiZSBlbWJlZGRlZCB0byB0aGUga2VybmVsLlxcbjE1NjY6XFx0XFx0ICBUaGlzIGJvb3Rjb25maWcgd2lsbCBiZSB1c2VkIGlmIHRoZXJlIGlzIG5vIGluaXRyZCBvciBubyBvdGhlclxcbjE1Njc6XFx0XFx0ICBib290Y29uZmlnIGluIHRoZSBpbml0cmQuXFxuMTU2ODpcXHRcXG4xNTY5OlxcdGNvbmZpZyBBUkNIX1NVUFBPUlRTX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXFxuMTU3MDpcXHRcXHRib29sXFxuMTU3MTpcXHRcXHRoZWxwXFxuMTU3MjpcXHRcXHQgIFNpbGVudCBzeW1ib2w7IG5vIEMgY29kZSByZWFkcyBpdCBkaXJlY3RseS4gQXJjaGl0ZWN0dXJlc1xcbjE1NzM6XFx0XFx0ICBzZWxlY3QgaXQgb25jZSB0aGVpciBzZXR1cF9hcmNoKCkgY2FsbHNcXG4xNTc0OlxcdFxcdCAgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZSgpIGJlZm9yZSBwYXJzZV9lYXJseV9wYXJhbSgpLlxcbjE1NzU6XFx0XFx0ICBJdHMgb25seSByb2xlIGlzIHRvIGdhdGUgdGhlIHVzZXItdmlzaWJsZVxcbjE1NzY6XFx0XFx0ICBDTURMSU5FX0ZST01fQk9PVENPTkZJRyBvcHRpb24gcGVyLWFyY2gsIHRoZSBzYW1lXFxuMTU3NzpcXHRcXHQgIEFSQ0hfU1VQUE9SVFNfKiBpZGlvbSB1c2VkIGJ5IEFSQ0hfU1VQUE9SVFNfQ0ZJLCBldGMuXFxuMTU3ODpcXHRcXG4xNTc5OlxcdGNvbmZpZyBDTURMSU5FX0ZST01fQk9PVENPTkZJR1xcbjE1ODA6XFx0XFx0Ym9vbCBcXFwiUmVuZGVyIGVtYmVkZGVkIGJvb3Rjb25maWcgYXMga2VybmVsIGNtZGxpbmUgYXQgYnVpbGQgdGltZVxcXCJcXG4xNTgxOlxcdFxcdGRlcGVuZHMgb24gQk9PVF9DT05GSUdfRU1CRURfRklMRSAhPSBcXFwiXFxcIlxcbjE1ODI6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXFxuMTU4MzpcXHRcXHRkZXBlbmRzIG9uIENNRExJTkUgPSBcXFwiXFxcIlxcbjE1ODQ6XFx0XFx0ZGVmYXVsdCBuXFxuMTU4NTpcXHRcXHRoZWxwXFxuMTU4NjpcXHRcXHQgIFJlbmRlciB0aGUgXFxcImtlcm5lbFxcXCIgc3VidHJlZSBvZiB0aGUgZW1iZWRkZWQgYm9vdGNvbmZpZyBmaWxlIGludG8gYVxcbjE1ODc6XFx0XFx0ICBmbGF0IGNtZGxpbmUgc3RyaW5nIGF0IGtlcm5lbCBidWlsZCB0aW1lIGFuZCBwcmVwZW5kIGl0IHRvXFxuMTU4ODpcXHRcXHQgIGJvb3RfY29tbWFuZF9saW5lIGR1cmluZyBlYXJseSBhcmNoaXRlY3R1cmUgc2V0dXAuIFRoaXMgbWFrZXNcXG4xNTg5OlxcdFxcdCAgZWFybHlfcGFyYW0oKSBoYW5kbGVycyAoZS5nLiBtZW09LCBlYXJseWNvbj0sIGxvZ2xldmVsPSkgc2VlIHRoZVxcbjE1OTA6XFx0XFx0ICB2YWx1ZXMgc3VwcGxpZWQgdmlhIHRoZSBlbWJlZGRlZCBib290Y29uZmlnLlxcbjE1OTE6XFx0XFxuMTU5MjpcXHRcXHQgIFRoZSBydW50aW1lIGJvb3Rjb25maWcgcGFyc2VyIGlzIHVuYWZmZWN0ZWQsIHNvIHRyZWUtc3RydWN0dXJlZFxcbjE1OTM6XFx0XFx0ICBjb25zdW1lcnMgc3VjaCBhcyBmdHJhY2UgYm9vdC10aW1lIHRyYWNpbmcga2VlcCB3b3JraW5nLlxcbjE1OTQ6XFx0XFxuMTU5NTpcXHRcXHQgIE5vdGU6IHdoZW4gYW4gaW5pdHJkIGFsc28gY2FycmllcyBhIGJvb3Rjb25maWcsIGl0cyBcXFwia2VybmVsXFxcIlxcbjE1OTY6XFx0XFx0ICBzdWJ0cmVlIGlzIHN0aWxsIHBhcnNlZCBhdCBydW50aW1lLCBidXQgdGhlIGVtYmVkZGVkIFxcXCJrZXJuZWxcXFwiXFxuMTU5NzpcXHRcXHQgIGtleXMgcmVtYWluIGluIGJvb3RfY29tbWFuZF9saW5lIGZvciBwYXJzZV9lYXJseV9wYXJhbSgpIGFuZFxcbjE1OTg6XFx0XFx0ICBlbmQgdXAgbGF0ZXIgdGhhbiB0aGUgaW5pdHJkIGtleXMgaW4gc2F2ZWRfY29tbWFuZF9saW5lLCBzb1xcbjE1OTk6XFx0XFx0ICBwYXJzZV9hcmdzKCkgbGFzdC13aW5zIGZhdm9ycyB0aGUgZW1iZWRkZWQgdmFsdWVzLiBJZiB5b3UgbmVlZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxNjo0Mzo0NS42NDkxNzc0MTRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzI2MTY0NDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQm9vdCBDb25maWd1cmF0aW9uIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgd2UgbmVlZCB0byBoYW5kbGUgc2V2ZXJhbCBjb25maWd1cmF0aW9uIG9wdGlvbnM6IGBCT09UX0NPTkZJR2AsIGBCT09UX0NPTkZJR19FTUJFRGAsIGBCT09UX0NPTkZJR19FTUJFRF9GSUxFYCAod2hpY2ggd2lsbCBiZSBzZXQgdG8gYSBmaWxlIHBhdGgpLCBhbmQgYENNRExJTkVfRlJPTV9CT09UQ09ORklHYC4gQnV0IGhlcmUncyB3aGVyZSBpdCBnZXRzIHRyaWNreSDigJMgYEJPT1RfQ09ORklHX0VNQkVEX0ZJTEVgIGlzIGEgc3RyaW5nLCBhbmQgSSdtIG5vdCBzdXJlIGlmIFN5emthbGxlciB3aWxsIHJlbGlhYmx5IHByb3ZpZGUgYSB2YWxpZCBmaWxlIHBhdGggZm9yIGl0LiBDYW4gaXQ/IEknbSBub3QgZW50aXJlbHkgY29udmluY2VkLlxuXG5JZiBTeXprYWxsZXIgb25seSBlbmFibGVzIGBDTURMSU5FX0ZST01fQk9PVENPTkZJR2AsIHRoZW4gdGhlIHN5c3RlbSAqbmVlZHMqIGBCT09UX0NPTkZJR19FTUJFRF9GSUxFYCB0byBiZSBzZXQgdG8gc29tZXRoaW5nIGNvbmNyZXRlLiBTeXprYWxsZXIgY2FuIHNldCBzdHJpbmdzIGluIGl0cyBjb25maWd1cmF0aW9uIGdlbmVyYXRpb24sIGJ1dCBpdCBjb3VsZCBlbmQgdXAganVzdCBnaXZpbmcgYSByYW5kb20gc3RyaW5nLCBvciBldmVuIG5vdGhpbmcgYXQgYWxsLiBBY3R1YWxseSwgU3l6a2FsbGVyICpkb2VzKiBoYXZlIGEgd2F5IHRvIHByb3ZpZGUgZmlsZXMsIGJ1dCBpdCdzIGEgYml0IG9mIGEgd29ya2Fyb3VuZC5cblxuVGhlIHJlYWwgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIHRoaXMgcGF0Y2ggaXMgZXZlbiB3b3J0aCB0aGUgZWZmb3J0IHRvIGZ1enouIFRoZSBmdW5jdGlvbmFsaXR5IGl0IGFkZHMgb2NjdXJzIGluIHR3byBwaGFzZXM6IGl0IHJ1bnMgYXQgKmJ1aWxkIHRpbWUqLCBnZW5lcmF0aW5nIHRoZSBib290IGNvbmZpZ3VyYXRpb24gaW50byBhIGNvbW1hbmQgbGluZSBzdHJpbmcsIGFuZCBhbHNvIGF0ICplYXJseSBib290IHRpbWUqIHdpdGggYHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmVgIHdpdGhpbiBgc2V0dXBfYXJjaGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgYHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmVgIGNhbGwsIHNvIGxldCdzIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTc0LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTY6NDM6NTEuMzc1MzQzNjY5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NDQ5NjQ5NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYz05MTY9dm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL3NldHVwLmMtOTY1LVxcdGlmIChib290Y29uZmlnX2NtZGxpbmVfcmVxdWVzdGVkKCkpXFxuYXJjaC94ODYva2VybmVsL3NldHVwLmM6OTY2OlxcdFxcdHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoYm9vdF9jb21tYW5kX2xpbmUsXFxuYXJjaC94ODYva2VybmVsL3NldHVwLmMtOTY3LVxcdFxcdFxcdFxcdFxcdCAgICAgQ09NTUFORF9MSU5FX1NJWkUpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmg9MzA1PXN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqeGJjX2dldF9lbWJlZGRlZF9ib290Y29uZmlnKHNpemVfdCAqc2l6ZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oLTMxMi0jaWZkZWYgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXFxuaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmg6MzEzOnZvaWQgX19pbml0IHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSk7XFxuaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmgtMzE0LWJvb2wgX19pbml0IHhiY19lbWJlZGRlZF9jbWRsaW5lX2FwcGxpZWQodm9pZCk7XFxuaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmgtMzE1LSNlbHNlXFxuaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmg6MzE2OnN0YXRpYyBpbmxpbmUgdm9pZCB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lKGNoYXIgKmRzdCwgc2l6ZV90IHNpemUpIHsgfVxcbmluY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oLTMxNy1zdGF0aWMgaW5saW5lIGJvb2wgeGJjX2VtYmVkZGVkX2NtZGxpbmVfYXBwbGllZCh2b2lkKSB7IHJldHVybiBmYWxzZTsgfVxcbi0tXFxuaW5pdC9LY29uZmlnPTE1Njk9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfQ01ETElORV9GUk9NX0JPT1RDT05GSUdcXG4tLVxcbmluaXQvS2NvbmZpZy0xNTczLVxcdCAgc2VsZWN0IGl0IG9uY2UgdGhlaXIgc2V0dXBfYXJjaCgpIGNhbGxzXFxuaW5pdC9LY29uZmlnOjE1NzQ6XFx0ICB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lKCkgYmVmb3JlIHBhcnNlX2Vhcmx5X3BhcmFtKCkuXFxuaW5pdC9LY29uZmlnLTE1NzUtXFx0ICBJdHMgb25seSByb2xlIGlzIHRvIGdhdGUgdGhlIHVzZXItdmlzaWJsZVxcbi0tXFxubGliL2Jvb3Rjb25maWcuYz01OD1zdGF0aWMgdm9pZCBfX2luaXQgc3RyX3ByZXBlbmQoY2hhciAqZHN0LCBzaXplX3QgZHN0X2xlbixcXG4tLVxcbmxpYi9ib290Y29uZmlnLmMtNjUtLyoqXFxubGliL2Jvb3Rjb25maWcuYzo2NjogKiB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lKCkgLSBQcmVwZW5kIGVtYmVkZGVkIGJvb3Rjb25maWcgY21kbGluZVxcbmxpYi9ib290Y29uZmlnLmMtNjctICogQGRzdDogY21kbGluZSBidWZmZXIgdG8gcHJlcGVuZCBpbnRvIChtdXN0IGFscmVhZHkgY29udGFpbiBhIE5VTCBieXRlKVxcbi0tXFxubGliL2Jvb3Rjb25maWcuYy04MS0gKi9cXG5saWIvYm9vdGNvbmZpZy5jOjgyOnZvaWQgX19pbml0IHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSlcXG5saWIvYm9vdGNvbmZpZy5jLTgzLXtcXG4tLVxcbmxpYi9ib290Y29uZmlnLmMtMTA0LSAqXFxubGliL2Jvb3Rjb25maWcuYzoxMDU6ICogUmV0dXJuIHRydWUgaWYgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZSgpIGFjdHVhbGx5IHByZXBlbmRlZCB0aGVcXG5saWIvYm9vdGNvbmZpZy5jLTEwNi0gKiBlbWJlZGRlZCBcXFwia2VybmVsXFxcIiBzdWJ0cmVlLiBzZXR1cF9ib290X2NvbmZpZygpIHVzZXMgdGhpcyB0byBhdm9pZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxNjo0Mzo1NC4yMjAzMTQ3MzhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDkzMDMwMjc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRnV6emFiaWxpdHkgb2YgRWFybHkgQm9vdCBDb2RlKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyBzeXprYWxsZXIgbWlnaHQgYmUgYWJsZSB0byBmdXp6IHRoaXMgcGFydGljdWxhciBiaXQgb2Yga2VybmVsIGNvZGUuIFRoaXMgYHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmVgIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgYHNldHVwX2FyY2goKWAsIHdoaWNoIGlzICpyZWFsbHkqIGVhcmx5IGluIHRoZSBib290IHByb2Nlc3MuIFN5emthbGxlcidzIHR5cGljYWwgYXBwcm9hY2ggaXMgdG8gZnV6eiBieSBydW5uaW5nIHVzZXJzcGFjZSBwcm9ncmFtcyB0aGF0IG1ha2Ugc3lzY2FsbHMgYWZ0ZXIgdGhlIGtlcm5lbCBpcyB1cC4gU28sIGFueXRoaW5nIHRoYXQgb25seSBydW5zIG9uY2UgZHVyaW5nIGVhcmx5IGJvb3QsIGVzcGVjaWFsbHkgY29kZSB0aGF0IHJlbGllcyBoZWF2aWx5IG9uIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBsaWtlIHRoaXMgZnVuY3Rpb24sIGlzIGdlbmVyYWxseSBnb2luZyB0byBiZSBhIHRvdWdoIHRhcmdldCBmb3Igc3l6a2FsbGVyIHRocm91Z2ggaXRzIG5vcm1hbCBzeXNjYWxsIGludGVyZmFjZS5cblxuQnV0IHdhaXQsIHN5emthbGxlciAqY2FuKiBmdXp6IGVhcmx5IGJvb3QgY29kZSB1bmRlciBzb21lIGNpcmN1bXN0YW5jZXMsIGxpa2UgaWYgaXQgY2FuIGJlIHRyaWdnZXJlZCBieSB2YXJ5aW5nIHRoZSBjb21tYW5kIGxpbmUgb3IgaWYgaXQncyBqdXN0IHBhcnQgb2YgdGhlIG5vcm1hbCBib290IHByb2Nlc3MuIFRoZSBpc3N1ZSBoZXJlLCB0aG91Z2gsIGlzIHRoYXQgdGhlIGlucHV0IHRvIGB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lYCwgc3BlY2lmaWNhbGx5IGBlbWJlZGRlZF9rZXJuZWxfY21kbGluZWAsIGlzIGdlbmVyYXRlZCBhdCBidWlsZCB0aW1lIGRpcmVjdGx5IGZyb20gYEJPT1RfQ09ORklHX0VNQkVEX0ZJTEVgLiBTeXprYWxsZXIgZG9lc24ndCBtb2RpZnkgdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzIG9yIHRoZSBjb250ZW50cyBvZiBgQk9PVF9DT05GSUdfRU1CRURfRklMRWAgYmV0d2VlbiBmdXp6aW5nIGl0ZXJhdGlvbnMuIFNvLCB0aGUgZW1iZWRkZWQgZmlsZSBpcyBlc3NlbnRpYWxseSBzdGF0aWMgdGhyb3VnaG91dCB0aGUgZW50aXJlIGZ1enppbmcgc2Vzc2lvbi5cblxuVGhlcmVmb3JlLCB0aGUgZXhlY3V0aW9uIHBhdGggdGhyb3VnaCBgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZWAgYXBwZWFycyB0byBiZSBjb21wbGV0ZWx5IHN0YXRpYyBhbmQgZGV0ZXJtaW5pc3RpYy4gTm8gdXNlciBpbnB1dCBmcm9tIHRoZSBmdXp6ZXIgZ2V0cyB0byB0aGlzIGNvZGUgYXQgcnVudGltZS4gSG1tLi4ud2FpdCEgRG9lc24ndCBgYm9vdGNvbmZpZ19jbWRsaW5lX3JlcXVlc3RlZCgpYCBjaGVjayBpZiBgYm9vdGNvbmZpZ2AgaXMgb24gdGhlIGNvbW1hbmQgbGluZT8gQ291bGQgc3l6a2FsbGVyIHBvdGVudGlhbGx5IG11dGF0ZSB0aGUgY29tbWFuZCBsaW5lPyBObywgc3l6a2FsbGVyIGJvb3RzIHdpdGggYSBmaXhlZCBjb21tYW5kIGxpbmUuIFRoZSBwYXJzaW5nIG9mIHRoZSBib290Y29uZmlnIGlzIGRvbmUgYXQgYnVpbGQgdGltZSB2aWEgYHRvb2xzL2Jvb3Rjb25maWcvYm9vdGNvbmZpZyAtQ2AuIFNvIHRoZSBvbmx5IHJ1bnRpbWUgcGllY2UgaXMgdGhlIGB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lYCBmdW5jdGlvbiB3aGljaCBqdXN0IHBlcmZvcm1zIGBtZW1tb3ZlYCBhbmQgYG1lbWNweWAgb2YgYSBzdGF0aWMgc3RyaW5nLlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdvIGxvb2sgYXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lYCBpbiBgbGliL2Jvb3Rjb25maWcuY2AgYW5kIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODUyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE2OjQ0OjAyLjMxMzM0NzkzMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzkxNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibGliL2Jvb3Rjb25maWcuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MixcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MjpcXHR2b2lkIF9faW5pdCB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lKGNoYXIgKmRzdCwgc2l6ZV90IHNpemUpXFxuICA4MzpcXHR7XFxuICA4NDpcXHRcXHRzaXplX3QgZW1iZWRfbGVuID0gZW1iZWRkZWRfa2VybmVsX2NtZGxpbmVfZW5kIC0gZW1iZWRkZWRfa2VybmVsX2NtZGxpbmU7XFxuICA4NTpcXHRcXHRzaXplX3QgZHN0X2xlbjtcXG4gIDg2OlxcdFxcbiAgODc6XFx0XFx0aWYgKCFzaXplIHx8IGVtYmVkX2xlbiBcXHUwMDNjPSAxKVxcdC8qIHRyYWlsaW5nIE5VTCBvbmx5ICovXFxuICA4ODpcXHRcXHRcXHRyZXR1cm47XFxuICA4OTpcXHRcXHRlbWJlZF9sZW4tLTtcXHRcXHRcXHQvKiBleGNsdWRlIHRyYWlsaW5nIE5VTCBieXRlICovXFxuICA5MDpcXHRcXG4gIDkxOlxcdFxcdGRzdF9sZW4gPSBzdHJubGVuKGRzdCwgc2l6ZSk7XFxuICA5MjpcXHRcXHRpZiAoZW1iZWRfbGVuICsgZHN0X2xlbiArIDEgXFx1MDAzZSBzaXplKSB7XFxuICA5MzpcXHRcXHRcXHRwcl9lcnIoXFxcImVtYmVkZGVkIGJvb3Rjb25maWcgY21kbGluZSAoJXp1IGJ5dGVzKSBkb2VzIG5vdCBmaXQgaW4gQ09NTUFORF9MSU5FX1NJWkUgd2l0aCAlenUgYnl0ZXMgYWxyZWFkeSB1c2VkOyBpZ25vcmluZyBlbWJlZGRlZCB2YWx1ZXNcXFxcblxcXCIsXFxuICA5NDpcXHRcXHRcXHQgICAgICAgZW1iZWRfbGVuLCBkc3RfbGVuKTtcXG4gIDk1OlxcdFxcdFxcdHJldHVybjtcXG4gIDk2OlxcdFxcdH1cXG4gIDk3OlxcdFxcbiAgOTg6XFx0XFx0c3RyX3ByZXBlbmQoZHN0LCBkc3RfbGVuLCBlbWJlZGRlZF9rZXJuZWxfY21kbGluZSwgZW1iZWRfbGVuKTtcXG4gIDk5OlxcdFxcdHhiY19jbWRsaW5lX2FwcGxpZWQgPSB0cnVlO1xcbiAxMDA6XFx0fVxcbiAxMDE6XFx0XFxuIDEwMjpcXHQvKipcXG4gMTAzOlxcdCAqIHhiY19lbWJlZGRlZF9jbWRsaW5lX2FwcGxpZWQoKSAtIERpZCB0aGUgZW1iZWRkZWQgY21kbGluZSBnZXQgcHJlcGVuZGVkP1xcbiAxMDQ6XFx0ICpcXG4gMTA1OlxcdCAqIFJldHVybiB0cnVlIGlmIHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoKSBhY3R1YWxseSBwcmVwZW5kZWQgdGhlXFxuIDEwNjpcXHQgKiBlbWJlZGRlZCBcXFwia2VybmVsXFxcIiBzdWJ0cmVlLiBzZXR1cF9ib290X2NvbmZpZygpIHVzZXMgdGhpcyB0byBhdm9pZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxNjo0NDowMi4zMTM0ODk2ODFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkzODY4OTEyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhpcyBjb2RlIHNuaXBwZXQuXG5cbioqQW5hbHl6aW5nIGEgU2ltcGxlIFByZXBlbmQgT3BlcmF0aW9uKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwaWVjZSBvZiBjb2RlIGFuZCBpdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEl0J3MganVzdCBhIHNpbXBsZSBzdHJpbmcgcHJlcGVuZCBvcGVyYXRpb24uIE5vdGhpbmcgY29tcGxleCwgbm90aGluZyB0aGF0IHNob3VsZCBiZSBhIGNhdXNlIGZvciBjb25jZXJuIGluIHRlcm1zIG9mIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIOKAkyBlc3BlY2lhbGx5IHNpbmNlIGl0IG9ubHkgcnVucyBvbmNlLCBhdCBib290IHRpbWUuIEknbSBub3Qgc2VlaW5nIGFueSBleHBvc2VkIHBhcnNlcnMgb3Igc3RhdGUgbWFjaGluZXMgaGVyZSwgc28gZnV6emluZyB0aGlzIHBhcnRpY3VsYXIgb3BlcmF0aW9uIGRpcmVjdGx5IHNlZW1zIHVubmVjZXNzYXJ5LlxuXG5Ib3dldmVyLCBJIGp1c3Qgbm90aWNlZCB0aGF0IGB4YmNfc25wcmludF9jbWRsaW5lYCB3YXMgYWxzbyBtb2RpZmllZCwgYW5kIHRoYXQgcmFpc2VzIGEgZmxhZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyB1c2VkIGFuZCB3aGF0IGltcGFjdCB0aG9zZSBjaGFuZ2VzIGhhdmUuIFdoaWxlIHRoZSBpbml0aWFsIG9wZXJhdGlvbiBpdHNlbGYgc2VlbXMgYmVuaWduLCB0aGUgYnJvYWRlciBwaWN0dXJlIG5lZWRzIHRvIGJlIGV2YWx1YXRlZC4gSXQncyB3b3J0aCBub3RpbmcgdGhhdCB0aGUgYWN0dWFsIHBhcnNpbmcgb2YgdGhlIGJvb3Rjb25maWcgaXMgaGFuZGxlZCBieSBgdG9vbHMvYm9vdGNvbmZpZy9ib290Y29uZmlnIC1DYCBhdCBidWlsZCB0aW1lLCBzbyB0aGUgY29kZSBpbiBxdWVzdGlvbiBpcyBsaWtlbHkganVzdCBwcmVwYXJpbmcgdGhlIGRhdGEgZm9yIHRoYXQgcHJvY2Vzcy4gQnV0IEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgcmVsYXRpb25zaGlwIGFzIHdlbGwuIExldCdzIHNlZSB3aGVyZSBgeGJjX3NucHJpbnRfY21kbGluZWAgY29tZXMgaW50byBwbGF5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDE0OSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTY6NDQ6MDYuMjUyMTgzOTQ2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODE5OTM0MDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhiY19zbnByaW50X2NtZGxpbmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmg9MjY1PWludCBfX2luaXQgeGJjX25vZGVfY29tcG9zZV9rZXlfYWZ0ZXIoc3RydWN0IHhiY19ub2RlICpyb290LFxcbi0tXFxuaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmgtMjY4LS8qIFJlbmRlciBrZXkvdmFsdWUgcGFpcnMgdW5kZXIgQHJvb3QgYXMgYSBmbGF0IGNtZGxpbmUgc3RyaW5nICovXFxuaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmg6MjY5OmludCBfX2luaXQgeGJjX3NucHJpbnRfY21kbGluZShjaGFyICpidWYsIHNpemVfdCBzaXplLCBzdHJ1Y3QgeGJjX25vZGUgKnJvb3QpO1xcbmluY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oLTI3MC1cXG4tLVxcbmluaXQvbWFpbi5jPTMyOD1zdGF0aWMgY2hhciAqIF9faW5pdCB4YmNfbWFrZV9jbWRsaW5lKGNvbnN0IGNoYXIgKmtleSlcXG4tLVxcbmluaXQvbWFpbi5jLTMzOC1cXHQvKiBDb3VudCByZXF1aXJlZCBidWZmZXIgc2l6ZSAqL1xcbmluaXQvbWFpbi5jOjMzOTpcXHRsZW4gPSB4YmNfc25wcmludF9jbWRsaW5lKE5VTEwsIDAsIHJvb3QpO1xcbmluaXQvbWFpbi5jLTM0MC1cXHRpZiAobGVuIFxcdTAwM2M9IDApXFxuLS1cXG5pbml0L21haW4uYy0zNDgtXFxuaW5pdC9tYWluLmM6MzQ5OlxcdHJldCA9IHhiY19zbnByaW50X2NtZGxpbmUobmV3X2NtZGxpbmUsIGxlbiArIDEsIHJvb3QpO1xcbmluaXQvbWFpbi5jLTM1MC1cXHRpZiAocmV0IFxcdTAwM2MgMCB8fCByZXQgXFx1MDAzZSBsZW4pIHtcXG4tLVxcbmxpYi9ib290Y29uZmlnLmM9NTg9c3RhdGljIHZvaWQgX19pbml0IHN0cl9wcmVwZW5kKGNoYXIgKmRzdCwgc2l6ZV90IGRzdF9sZW4sXFxuLS1cXG5saWIvYm9vdGNvbmZpZy5jLTcxLSAqIGJvb3Rjb25maWcgdG8gQGRzdC4gVGhlIHJlbmRlcmVkIHN0cmluZyBhbHJlYWR5IGVuZHMgd2l0aCBhIHNpbmdsZVxcbmxpYi9ib290Y29uZmlnLmM6NzI6ICogc3BhY2UgKHRoZSB4YmNfc25wcmludF9jbWRsaW5lKCkgaW52YXJpYW50KSwgd2hpY2ggc2VydmVzIGFzIHRoZVxcbmxpYi9ib290Y29uZmlnLmMtNzMtICogc2VwYXJhdG9yIGJldHdlZW4gdGhlIGVtYmVkZGVkIGtleXMgYW5kIGFueSBleGlzdGluZyBjb250ZW50IG9mIEBkc3QuXFxuLS1cXG5saWIvYm9vdGNvbmZpZy5jPTQ4OT1zdGF0aWMgY2hhciB4YmNfbmFtZWJ1ZltYQkNfS0VZTEVOX01BWF0gX19pbml0ZGF0YTtcXG4tLVxcbmxpYi9ib290Y29uZmlnLmMtNDkzLS8qKlxcbmxpYi9ib290Y29uZmlnLmM6NDk0OiAqIHhiY19zbnByaW50X2NtZGxpbmUoKSAtIFJlbmRlciBib290Y29uZmlnIGtleXMgdW5kZXIgQHJvb3QgYXMgYSBjbWRsaW5lIHN0cmluZ1xcbmxpYi9ib290Y29uZmlnLmMtNDk1LSAqIEBidWY6IERlc3RpbmF0aW9uIGJ1ZmZlciAobWF5IGJlIE5VTEwgd2hlbiBAc2l6ZSBpcyAwIHRvIHF1ZXJ5IHRoZSBsZW5ndGgpXFxuLS1cXG5saWIvYm9vdGNvbmZpZy5jLTUwNC0gKi9cXG5saWIvYm9vdGNvbmZpZy5jOjUwNTppbnQgX19pbml0IHhiY19zbnByaW50X2NtZGxpbmUoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgc3RydWN0IHhiY19ub2RlICpyb290KVxcbmxpYi9ib290Y29uZmlnLmMtNTA2LXtcXG4tLVxcbnRvb2xzL2Jvb3Rjb25maWcvbWFpbi5jPTI4OT1zdGF0aWMgaW50IHNob3dfeGJjX2tlcm5lbF9jbWRsaW5lKHZvaWQpXFxuLS1cXG50b29scy9ib290Y29uZmlnL21haW4uYy0yOTgtXFxudG9vbHMvYm9vdGNvbmZpZy9tYWluLmM6Mjk5OlxcdGxlbiA9IHhiY19zbnByaW50X2NtZGxpbmUoTlVMTCwgMCwgcm9vdCk7XFxudG9vbHMvYm9vdGNvbmZpZy9tYWluLmMtMzAwLVxcdGlmIChsZW4gXFx1MDAzYyAwKSB7XFxuLS1cXG50b29scy9ib290Y29uZmlnL21haW4uYy0zMTAtXFxudG9vbHMvYm9vdGNvbmZpZy9tYWluLmM6MzExOlxcdHJldCA9IHhiY19zbnByaW50X2NtZGxpbmUoYnVmLCBsZW4gKyAxLCByb290KTtcXG50b29scy9ib290Y29uZmlnL21haW4uYy0zMTItXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTY6NDQ6MDkuMDcyMTgwNjE1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3OTg2MzE5NDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHhiY19zbnByaW50X2NtZGxpbmUgZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgbW9kaWZpZXMgYHhiY19zbnByaW50X2NtZGxpbmVgLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgaW4gYGluaXQvbWFpbi5jYCB0byByZW5kZXIgdGhlIGJvb3QgY29uZmlndXJhdGlvbiBpbnRvIGEgY29tbWFuZC1saW5lIHN0cmluZyBkdXJpbmcgdGhlIGtlcm5lbCdzIGVhcmx5IGJvb3QgcGhhc2UuIFRoZSBwcmltYXJ5IGNoYW5nZSBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgdW5kZWZpbmVkIGJlaGF2aW9yIGlzc3VlIHdoZW4gdGhlIGJ1ZmZlciAoYGJ1ZmApIHBhc3NlZCB0byBgeGJjX3NucHJpbnRfY21kbGluZWAgaXMgTlVMTC4gSXQgYWxzbyBpbmNsdWRlcyBhIGNoZWNrIHRvIHNraXAgZW1wdHkgb3IgdmFsdWUtb25seSByb290IG5vZGVzIGluIHRoZSBib290IGNvbmZpZ3VyYXRpb24sIHByZXZlbnRpbmcgYSAtRUlOVkFMIGVycm9yIGFuZCBhbGxvd2luZyB0aGUgcmVuZGVyaW5nIG9mIGRlc2NlbmRhbnQga2V5cy5cblxuTXkgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgaXMgc29tZXRoaW5nIHRoZSBmdXp6ZXIgY2FuIG1lYW5pbmdmdWxseSBpbnRlcmFjdCB3aXRoLiBgeGJjX3NucHJpbnRfY21kbGluZWAgaXMgY2FsbGVkIGJ5IGB4YmNfbWFrZV9jbWRsaW5lYCwgd2hpY2ggaW4gdHVybiBpcyBpbnZva2VkIGR1cmluZyBlYXJseSBib290IGJ5IGBzZXR1cF9ib290X2NvbmZpZ2AuIFRoZSBpbnB1dCB0byB0aGUgcmVuZGVyaW5nIGZ1bmN0aW9uIGNvbWVzIGZyb20gdGhlIGJvb3QgY29uZmlndXJhdGlvbiBkYXRhLCBvYnRhaW5lZCBlaXRoZXIgZnJvbSB0aGUgaW5pdHJkIG9yIGFuIGVtYmVkZGVkIGNvbmZpZ3VyYXRpb24uIENydWNpYWxseSwgdGhlIGZ1enplciwgc3BlY2lmaWNhbGx5IFN5emthbGxlciwgZG9lc24ndCBjdXJyZW50bHkgaGF2ZSBhIHdheSB0byBtb2RpZnkgZWl0aGVyIHRoZSBpbml0cmQgY29udGVudCBvciB0aGUgZW1iZWRkZWQgYm9vdCBjb25maWd1cmF0aW9uIGR1cmluZyBhIGZ1enppbmcgc2Vzc2lvbi4gVGhlc2UgZGF0YSBhcmUgc3RhdGljIHBlciBWTS9idWlsZC5cblxuVGhlcmVmb3JlLCBzaW5jZSB0aGUgaW5wdXQgdG8gdGhlIG1vZGlmaWVkIGNvZGUgaXMgZXNzZW50aWFsbHkgZml4ZWQgZHVyaW5nIGEgZnV6emluZyBydW4sIHRoZSBmdXp6ZXIgY2Fubm90IGV4cGxvcmUgZGlmZmVyZW50IGV4ZWN1dGlvbiBwYXRocyB3aXRoaW4gYHhiY19zbnByaW50X2NtZGxpbmVgIGJ5IG1hbmlwdWxhdGluZyBpbnB1dCBkYXRhIHRocm91Z2ggc3lzY2FsbHMuIFRoZXJlJ3Mgbm8gd2F5IHRvIGluZmx1ZW5jZSBpdC4gSXQncyBlc3NlbnRpYWxseSBhIG9uZS10aW1lIGV4ZWN1dGlvbiB3aXRoIHN0YXRpYyBpbnB1dHMuIEkgZGlkIGNoZWNrIGAvcHJvYy9ib290Y29uZmlnYCBhbmQgaXQncyByZWFkLW9ubHksIGFuZCB0aGUgYm9vdCBjb25maWcgcGFyc2luZyBmdW5jdGlvbiBpcyBgX19pbml0YC5cblxuSSdtIHJldmlzaXRpbmcgdGhlIGNyaXRlcmlhIGZvciBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHByb21wdCBzYXlzLCBcIkNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4uLlwiIE5vdywgdGhlIGNvZGUgaXMgKnJlYWNoYWJsZSogZHVyaW5nIGJvb3QsIHNvLCB0ZWNobmljYWxseSwgaXQncyBub3QgXCJpbXBvc3NpYmxlIHRvIHJlYWNoXCIuIEhvd2V2ZXIsIGl0J3Mgbm90IHJlYWNoYWJsZSB3aXRoIGZ1enplciBpbnB1dC4gVGhlIGZ1enplciBwcmltYXJpbHkgd29ya3MgYnkgbXV0YXRpbmcgc3lzY2FsbHMuIFRoaXMgY29kZSBpc24ndCB0b3VjaGVkIGJ5IHN5c2NhbGxzLCBpdCBydW5zIG9uY2Ugd2l0aCBzdGF0aWMgZGF0YS5cblxuSWYgSSB3ZXJlIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgLCBJIHdvdWxkIG5lZWQgdG8gcHJvdmlkZSBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgLiBTcGVjaWZ5aW5nIGBGb2N1c1N5bWJvbHM9W1wieGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZVwiLCBcInhiY19zbnByaW50X2NtZGxpbmVcIl1gIHdvdWxkIGRpcmVjdCB0aGUgZnV6emVyIHRvd2FyZHMgdGhlc2UgZnVuY3Rpb25zLiBCdXQsIGFuZCB0aGlzIGlzIGNydWNpYWwsIHRoZSBmdXp6ZXIgKmNhbm5vdCogcmVhY2ggdGhlbSB2aWEgaXRzIHVzdWFsIHN5c2NhbGwtYmFzZWQgaW5wdXQuIEl0IHdpbGwganVzdCBzZWUgdGhlIGZ1bmN0aW9ucyBleGVjdXRlIG9uY2UgcGVyIFZNIGJvb3QuIFN5emthbGxlciBjb2xsZWN0cyBib290IGNvdmVyYWdlLCBidXQgaXQgY2FuJ3QgbXV0YXRlIHRoZXNlIGlucHV0cy4gQWxzbywgZXZlbiB3aXRoIHRoZSBjb21tYW5kLWxpbmUgZnV6emluZyBjb25maWd1cmF0aW9uLCBpdCdzIGEgZml4ZWQgc3RyaW5nLlxuXG5UaGUgcHJvbXB0IHdhbnRzIG1lIHRvIFwiZGV0ZXJtaW5lIGlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIiBDaGFuZ2VzIHRoYXQgb25seSBoYXBwZW4gb25jZSBhdCBib290IHdpdGggc3RhdGljIGRhdGEgYXJlIG5vdCBzb21ldGhpbmcgYSBzeXN0ZW0gY2FsbCBmdXp6ZXIgY2FuIG1lYW5pbmdmdWxseSB0ZXN0LiBJJ20gZ29pbmcgdG8gbG9vayBhZ2FpbiB0byBzZWUgaWYgYHhiY19zbnByaW50X2NtZGxpbmVgIGlzIHVzZWQgYW55d2hlcmUgZWxzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUyODUsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE2OjQ0OjI3LjA1ODUwMjgyM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY1Mjc5MjAwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4YmNfc25wcmludF9jbWRsaW5lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oPTI2NT1pbnQgX19pbml0IHhiY19ub2RlX2NvbXBvc2Vfa2V5X2FmdGVyKHN0cnVjdCB4YmNfbm9kZSAqcm9vdCxcXG4tLVxcbmluY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oLTI2OC0vKiBSZW5kZXIga2V5L3ZhbHVlIHBhaXJzIHVuZGVyIEByb290IGFzIGEgZmxhdCBjbWRsaW5lIHN0cmluZyAqL1xcbmluY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oOjI2OTppbnQgX19pbml0IHhiY19zbnByaW50X2NtZGxpbmUoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgc3RydWN0IHhiY19ub2RlICpyb290KTtcXG5pbmNsdWRlL2xpbnV4L2Jvb3Rjb25maWcuaC0yNzAtXFxuLS1cXG5pbml0L21haW4uYz0zMjg9c3RhdGljIGNoYXIgKiBfX2luaXQgeGJjX21ha2VfY21kbGluZShjb25zdCBjaGFyICprZXkpXFxuLS1cXG5pbml0L21haW4uYy0zMzgtXFx0LyogQ291bnQgcmVxdWlyZWQgYnVmZmVyIHNpemUgKi9cXG5pbml0L21haW4uYzozMzk6XFx0bGVuID0geGJjX3NucHJpbnRfY21kbGluZShOVUxMLCAwLCByb290KTtcXG5pbml0L21haW4uYy0zNDAtXFx0aWYgKGxlbiBcXHUwMDNjPSAwKVxcbi0tXFxuaW5pdC9tYWluLmMtMzQ4LVxcbmluaXQvbWFpbi5jOjM0OTpcXHRyZXQgPSB4YmNfc25wcmludF9jbWRsaW5lKG5ld19jbWRsaW5lLCBsZW4gKyAxLCByb290KTtcXG5pbml0L21haW4uYy0zNTAtXFx0aWYgKHJldCBcXHUwMDNjIDAgfHwgcmV0IFxcdTAwM2UgbGVuKSB7XFxuLS1cXG5saWIvYm9vdGNvbmZpZy5jPTU4PXN0YXRpYyB2b2lkIF9faW5pdCBzdHJfcHJlcGVuZChjaGFyICpkc3QsIHNpemVfdCBkc3RfbGVuLFxcbi0tXFxubGliL2Jvb3Rjb25maWcuYy03MS0gKiBib290Y29uZmlnIHRvIEBkc3QuIFRoZSByZW5kZXJlZCBzdHJpbmcgYWxyZWFkeSBlbmRzIHdpdGggYSBzaW5nbGVcXG5saWIvYm9vdGNvbmZpZy5jOjcyOiAqIHNwYWNlICh0aGUgeGJjX3NucHJpbnRfY21kbGluZSgpIGludmFyaWFudCksIHdoaWNoIHNlcnZlcyBhcyB0aGVcXG5saWIvYm9vdGNvbmZpZy5jLTczLSAqIHNlcGFyYXRvciBiZXR3ZWVuIHRoZSBlbWJlZGRlZCBrZXlzIGFuZCBhbnkgZXhpc3RpbmcgY29udGVudCBvZiBAZHN0Llxcbi0tXFxubGliL2Jvb3Rjb25maWcuYz00ODk9c3RhdGljIGNoYXIgeGJjX25hbWVidWZbWEJDX0tFWUxFTl9NQVhdIF9faW5pdGRhdGE7XFxuLS1cXG5saWIvYm9vdGNvbmZpZy5jLTQ5My0vKipcXG5saWIvYm9vdGNvbmZpZy5jOjQ5NDogKiB4YmNfc25wcmludF9jbWRsaW5lKCkgLSBSZW5kZXIgYm9vdGNvbmZpZyBrZXlzIHVuZGVyIEByb290IGFzIGEgY21kbGluZSBzdHJpbmdcXG5saWIvYm9vdGNvbmZpZy5jLTQ5NS0gKiBAYnVmOiBEZXN0aW5hdGlvbiBidWZmZXIgKG1heSBiZSBOVUxMIHdoZW4gQHNpemUgaXMgMCB0byBxdWVyeSB0aGUgbGVuZ3RoKVxcbi0tXFxubGliL2Jvb3Rjb25maWcuYy01MDQtICovXFxubGliL2Jvb3Rjb25maWcuYzo1MDU6aW50IF9faW5pdCB4YmNfc25wcmludF9jbWRsaW5lKGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIHN0cnVjdCB4YmNfbm9kZSAqcm9vdClcXG5saWIvYm9vdGNvbmZpZy5jLTUwNi17XFxuLS1cXG50b29scy9ib290Y29uZmlnL21haW4uYz0yODk9c3RhdGljIGludCBzaG93X3hiY19rZXJuZWxfY21kbGluZSh2b2lkKVxcbi0tXFxudG9vbHMvYm9vdGNvbmZpZy9tYWluLmMtMjk4LVxcbnRvb2xzL2Jvb3Rjb25maWcvbWFpbi5jOjI5OTpcXHRsZW4gPSB4YmNfc25wcmludF9jbWRsaW5lKE5VTEwsIDAsIHJvb3QpO1xcbnRvb2xzL2Jvb3Rjb25maWcvbWFpbi5jLTMwMC1cXHRpZiAobGVuIFxcdTAwM2MgMCkge1xcbi0tXFxudG9vbHMvYm9vdGNvbmZpZy9tYWluLmMtMzEwLVxcbnRvb2xzL2Jvb3Rjb25maWcvbWFpbi5jOjMxMTpcXHRyZXQgPSB4YmNfc25wcmludF9jbWRsaW5lKGJ1ZiwgbGVuICsgMSwgcm9vdCk7XFxudG9vbHMvYm9vdGNvbmZpZy9tYWluLmMtMzEyLVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE2OjQ0OjI5LjcxMTMwMDExNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjgwNTUyNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQ6IE5vdCBXb3J0aCBGdXp6aW5nKipcblxuT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IHRoaXMgY29kZSBpcyBzb2xlbHkgdXNlZCB3aXRoaW4gYGluaXQvbWFpbi5jYCAoYW5kIHRoYXQncyBhbiBgX19pbml0YCBmdW5jdGlvbikgYW5kIHRoZSBgdG9vbHMvYm9vdGNvbmZpZy9tYWluLmNgIHVzZXJzcGFjZSB0b29sLiBUaGlzIHNjcmVhbXMgXCJlYXJseSBib290IGNvZGVcIiB0byBtZS5cblxuVGhlIGNvcmUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBjb25zdGl0dXRlIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCAqc2hvdWxkKiBiZSBmdXp6ZWQ/IFRoZSBwcm9tcHQgZ3VpZGVzIG1lOiBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6IC4uLiBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuXCIgSSBkb24ndCBzZWUgYSBkaXJlY3QgaW5zdHJ1Y3Rpb24gc2F5aW5nIFwiZmFsc2UgZm9yIGVhcmx5IGJvb3QsXCIgYnV0IEknbSB0aGlua2luZyBhYm91dCBpdDogdGhpcyBpcyAqZWFybHkgYm9vdCogY29kZSBwcm9jZXNzaW5nICpzdGF0aWMqIGRhdGEuIFN5emthbGxlcidzIHN0cmVuZ3RoIGlzIGluIG11dGF0aW5nIHN5c2NhbGxzLiBJdCBjYW4ndCBtdXRhdGUgdGhlIGtlcm5lbCBpbWFnZSBvciB0aGUgaW5pdHJkIGRpcmVjdGx5LiBUaHVzLCBpbiB0aGUgY29udGV4dCBvZiBzeXNjYWxsLWJhc2VkIGZ1enppbmcsIHRoaXMgaXMgdW4tZnV6emFibGUuXG5cblRvIGJlIHRob3JvdWdoLCBJJ20gY2hlY2tpbmcgaWYgYW55IHN5c2ZzIG9yIHByb2NmcyBpbnRlcmZhY2VzIGhhdmUgYmVlbiBhZGRlZC4gTm8sIHRoZSBjaGFuZ2VzIGFyZSB0byBgc2V0dXBfYXJjaGAgYW5kIGBzZXR1cF9ib290X2NvbmZpZ2AuIFRoZSBwYXRjaCBhZGRzIGB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lYCB1c2VkIGJ5IGBzZXR1cF9hcmNoYCBhbmQgbW9kaWZpZXMgYHhiY19zbnByaW50X2NtZGxpbmVgIGNhbGxlZCBmcm9tIGBzZXR1cF9ib290X2NvbmZpZ2AuIEl0IGFsc28gaW50cm9kdWNlcyBgdG9vbHMvYm9vdGNvbmZpZ2AgYnVpbGQgc3RlcHMgYW5kIGBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUdgLlxuXG5UaGVyZWZvcmUsIEknbSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZz1mYWxzZWAuIEknbGwgZXhwbGFpbiB0aGF0IHRoZSBjaGFuZ2VzIGFyZSBjb25maW5lZCB0byBlYXJseSBib290IGluaXRpYWxpemF0aW9uIHJvdXRpbmVzIChgX19pbml0YCBmdW5jdGlvbnMpIHRoYXQgZGVhbCB3aXRoIHN0YXRpYywgYnVpbGQtdGltZSBvciBpbml0cmQgZGF0YS4gU2luY2UgdGhpcyBjb2RlIGFuZCBkYXRhIGFyZSBub3QgcmVhY2hhYmxlIG9yIG11dGFibGUgYnkgYSBzeXNjYWxsIGZ1enplciwgZnV6emluZyBpcyB1bnByb2R1Y3RpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTgzLCJPdXRwdXRUb2tlbnMiOjE0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxNjo0NDozNy45OTE4NTY1NzZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYnVpbGQtdGltZSBmZWF0dXJlIHRvIHJlbmRlciBlbWJlZGRlZCBib290Y29uZmlnIGludG8gYSBjbWRsaW5lIHN0cmluZyBhbmQgcHJlcGVuZHMgaXQgZHVyaW5nIGVhcmx5IGJvb3QgKGBzZXR1cF9hcmNoYCkuIEl0IGFsc28gZml4ZXMgYSBidWcgaW4gYHhiY19zbnByaW50X2NtZGxpbmVgIHdoaWNoIGlzIG9ubHkgY2FsbGVkIGR1cmluZyBlYXJseSBib290IChgc2V0dXBfYm9vdF9jb25maWdgKS4gQWxsIG1vZGlmaWVkIGtlcm5lbCBjb2RlIGlzIG1hcmtlZCBgX19pbml0YCwgcnVucyBleGFjdGx5IG9uY2UgZHVyaW5nIGJvb3QsIGFuZCBwcm9jZXNzZXMgc3RhdGljIGRhdGEgKGZyb20gdGhlIGtlcm5lbCBpbWFnZSBvciBpbml0cmQpLiBTaW5jZSB0aGVyZSBpcyBubyB3YXkgZm9yIGEgc3lzY2FsbCBmdXp6ZXIgdG8gcmVhY2ggdGhpcyBjb2RlIG9yIG11dGF0ZSBpdHMgaW5wdXRzLCBpdCBjYW5ub3QgYmUgbWVhbmluZ2Z1bGx5IGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBidWlsZC10aW1lIGZlYXR1cmUgdG8gcmVuZGVyIGVtYmVkZGVkIGJvb3Rjb25maWcgaW50byBhIGNtZGxpbmUgc3RyaW5nIGFuZCBwcmVwZW5kcyBpdCBkdXJpbmcgZWFybHkgYm9vdCAoYHNldHVwX2FyY2hgKS4gSXQgYWxzbyBmaXhlcyBhIGJ1ZyBpbiBgeGJjX3NucHJpbnRfY21kbGluZWAgd2hpY2ggaXMgb25seSBjYWxsZWQgZHVyaW5nIGVhcmx5IGJvb3QgKGBzZXR1cF9ib290X2NvbmZpZ2ApLiBBbGwgbW9kaWZpZWQga2VybmVsIGNvZGUgaXMgbWFya2VkIGBfX2luaXRgLCBydW5zIGV4YWN0bHkgb25jZSBkdXJpbmcgYm9vdCwgYW5kIHByb2Nlc3NlcyBzdGF0aWMgZGF0YSAoZnJvbSB0aGUga2VybmVsIGltYWdlIG9yIGluaXRyZCkuIFNpbmNlIHRoZXJlIGlzIG5vIHdheSBmb3IgYSBzeXNjYWxsIGZ1enplciB0byByZWFjaCB0aGlzIGNvZGUgb3IgbXV0YXRlIGl0cyBpbnB1dHMsIGl0IGNhbm5vdCBiZSBtZWFuaW5nZnVsbHkgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwchxx[1] Phase: Running StartedAt: 2026-06-23 16:45:01 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwchxx[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-06-23 16:45:01 +0000 UTC FinishedAt: 2026-06-23 16:45:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}